From 565ca28a02938efdf6d008d1ed843b8d365a6522 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Wed, 5 Apr 2023 17:27:41 +0300 Subject: [PATCH 001/298] [win] add .docxf to context menu and refactoring --- win-linux/package/windows/associate_page.iss | 93 +++++++++----------- 1 file changed, 43 insertions(+), 50 deletions(-) diff --git a/win-linux/package/windows/associate_page.iss b/win-linux/package/windows/associate_page.iss index 208793ec1..f733e5f22 100644 --- a/win-linux/package/windows/associate_page.iss +++ b/win-linux/package/windows/associate_page.iss @@ -1807,61 +1807,46 @@ end; procedure AddContextMenuNewItems; var - langs: TArrayOfValues; - args, regpath: String; - progpath, oldValue: String; - argsArray: TArrayOfString; + dir, regpath, progpath, oldValue: String; + langs, args, values: TArrayOfString; version: TWindowsVersion; + i: Integer; begin - AddKeyValue(langs, 'cs', 'cs-CZ:new.docx:new.pptx:new.xlsx'); - AddKeyValue(langs, 'de', 'de-DE:new.docx:new.pptx:new.xlsx'); - AddKeyValue(langs, 'es', 'es-ES:new.docx:new.pptx:new.xlsx'); - AddKeyValue(langs, 'fr', 'fr-FR:new.docx:new.pptx:new.xlsx'); - AddKeyValue(langs, 'it_IT', 'it-IT:new.docx:new.pptx:new.xlsx'); - AddKeyValue(langs, 'pt_BR', 'pt-BR:new.docx:new.pptx:new.xlsx'); - AddKeyValue(langs, 'ru', 'ru-RU:new.docx:new.pptx:new.xlsx'); - - if not TryGetValue(langs, ExpandConstant('{language}'), args) then - args := '.:mm_new.docx:mm_new.pptx:mm_new.xlsx'; - - Explode(argsArray, args, ':'); - - if argsArray[0] = '.' then - progpath := ExpandConstant('{app}\converter\empty') - else progpath := ExpandConstant('{app}\converter\empty\' + argsArray[0]); - - regpath := ExpandConstant('Software\Classes\.docx\{#ASCC_REG_PREFIX}.Document.12\ShellNew'); - if not RegKeyExists(HKEY_LOCAL_MACHINE, regpath) then - begin - RegWriteStringValue(HKEY_LOCAL_MACHINE, regpath, 'IconPath', ExpandConstant('{app}\{#iconsExe},7')); - RegWriteStringValue(HKEY_LOCAL_MACHINE, regpath, 'FileName', progpath + '\' + argsArray[1]); - end; - - regpath := ExpandConstant('Software\Classes\.pptx\{#ASCC_REG_PREFIX}.Show.12\ShellNew'); - if not RegKeyExists(HKEY_LOCAL_MACHINE, regpath) then - begin - RegWriteStringValue(HKEY_LOCAL_MACHINE, regpath, 'IconPath', ExpandConstant('{app}\{#iconsExe},9')); - RegWriteStringValue(HKEY_LOCAL_MACHINE, regpath, 'FileName', progpath + '\' + argsArray[2]); - end; - - regpath := ExpandConstant('Software\Classes\.xlsx\{#ASCC_REG_PREFIX}.Sheet.12\ShellNew'); - if not RegKeyExists(HKEY_LOCAL_MACHINE, regpath) then - begin - RegWriteStringValue(HKEY_LOCAL_MACHINE, regpath, 'IconPath', ExpandConstant('{app}\{#iconsExe},10')); - RegWriteStringValue(HKEY_LOCAL_MACHINE, regpath, 'FileName', progpath + '\' + argsArray[3]); + langs := ['az-Latn-AZ', 'bg-BG', 'cs-CZ', 'de-DE', 'el-GR', 'en-GB', 'en-US', 'es-ES', + 'eu-ES', 'fr-FR', 'gl-ES', 'hy-AM', 'it-IT', 'ja-JP', 'ko-KR', 'lv-LV', + 'ms-MY', 'nl-NL', 'pl-PL', 'pt-BR', 'pt-PT', 'ru-RU', 'sk-SK', 'sv-SE', + 'tr-TR', 'uk-UA', 'vi-VN', 'zh-CN', 'zh-TW']; + + dir := 'en-US'; + for i := 0 to GetArrayLength(langs) - 1 do begin + if langs[i] = ExpandConstant('{language}') then begin + dir := langs[i]; + break; + end; end; + + args := ['new.docx:.docx:.Document.12:7', + 'new.pptx:.pptx:.Show.12:9', + 'new.xlsx:.xlsx:.Sheet.12:10' +#ifdef _ONLYOFFICE + ,'new.docxf:.docxf:.Docxf:13' +#endif + ]; GetWindowsVersionEx(version); - if version.Major = 10 then begin - RegQueryStringValue(HKEY_LOCAL_MACHINE, 'Software\Classes\.docx', '', oldValue); - RegWriteStringValue(HKEY_LOCAL_MACHINE, 'Software\Classes\.docx', '{#ASCC_REG_PREFIX}', oldValue); - RegQueryStringValue(HKEY_LOCAL_MACHINE, 'Software\Classes\.xlsx', '', oldValue); - RegWriteStringValue(HKEY_LOCAL_MACHINE, 'Software\Classes\.xlsx', '{#ASCC_REG_PREFIX}', oldValue); - RegQueryStringValue(HKEY_LOCAL_MACHINE, 'Software\Classes\.pptx', '', oldValue); - RegWriteStringValue(HKEY_LOCAL_MACHINE, 'Software\Classes\.pptx', '{#ASCC_REG_PREFIX}', oldValue); - RegWriteStringValue(HKEY_LOCAL_MACHINE, 'Software\Classes\.docx', '', '{#ASCC_REG_PREFIX}.Document.12') - RegWriteStringValue(HKEY_LOCAL_MACHINE, 'Software\Classes\.xlsx', '', '{#ASCC_REG_PREFIX}.Sheet.12') - RegWriteStringValue(HKEY_LOCAL_MACHINE, 'Software\Classes\.pptx', '', '{#ASCC_REG_PREFIX}.Show.12') + progpath := ExpandConstant('{app}\converter\empty\' + dir); + for i := 0 to GetArrayLength(args) - 1 do begin + Explode(values, args[i],':'); + regpath := ExpandConstant('Software\Classes\' + values[1] + '\{#ASCC_REG_PREFIX}' + values[2] + '\ShellNew'); + if not RegKeyExists(HKEY_LOCAL_MACHINE, regpath) then begin + RegWriteStringValue(HKEY_LOCAL_MACHINE, regpath, 'IconPath', ExpandConstant('{app}\{#iconsExe},' + values[3])); + RegWriteStringValue(HKEY_LOCAL_MACHINE, regpath, 'FileName', progpath + '\' + values[0]); + end; + if version.Major = 10 then begin + RegQueryStringValue(HKEY_LOCAL_MACHINE, 'Software\Classes\' + values[1], '', oldValue); + RegWriteStringValue(HKEY_LOCAL_MACHINE, 'Software\Classes\' + values[1], '{#ASCC_REG_PREFIX}', oldValue); + RegWriteStringValue(HKEY_LOCAL_MACHINE, 'Software\Classes\' + values[1], '', '{#ASCC_REG_PREFIX}' + values[2]); + end; end; end; @@ -2012,6 +1997,9 @@ begin RegDeleteKeyIncludingSubkeys(HKEY_LOCAL_MACHINE, ExpandConstant('Software\Classes\.docx\{#ASCC_REG_PREFIX}.Document.12')); RegDeleteKeyIncludingSubkeys(HKEY_LOCAL_MACHINE, ExpandConstant('Software\Classes\.pptx\{#ASCC_REG_PREFIX}.Show.12')); RegDeleteKeyIncludingSubkeys(HKEY_LOCAL_MACHINE, ExpandConstant('Software\Classes\.xlsx\{#ASCC_REG_PREFIX}.Sheet.12')); +#ifdef _ONLYOFFICE + RegDeleteKeyIncludingSubkeys(HKEY_LOCAL_MACHINE, ExpandConstant('Software\Classes\.docxf\{#ASCC_REG_PREFIX}.Docxf')); +#endif GetWindowsVersionEx(version); if version.Major = 10 then begin @@ -2021,6 +2009,11 @@ begin RegWriteStringValue(HKEY_LOCAL_MACHINE, 'Software\Classes\.xlsx', '', oldValue); if RegQueryStringValue(HKEY_LOCAL_MACHINE, 'Software\Classes\.pptx', '{#ASCC_REG_PREFIX}', oldValue) then RegWriteStringValue(HKEY_LOCAL_MACHINE, 'Software\Classes\.pptx', '', oldValue); +#ifdef _ONLYOFFICE + if RegQueryStringValue(HKEY_LOCAL_MACHINE, 'Software\Classes\.docxf', '{#ASCC_REG_PREFIX}', oldValue) then + RegWriteStringValue(HKEY_LOCAL_MACHINE, 'Software\Classes\.docxf', '', oldValue); + RegDeleteValue(HKEY_LOCAL_MACHINE, 'Software\Classes\.docxf', '{#ASCC_REG_PREFIX}'); +#endif RegDeleteValue(HKEY_LOCAL_MACHINE, 'Software\Classes\.docx', '{#ASCC_REG_PREFIX}'); RegDeleteValue(HKEY_LOCAL_MACHINE, 'Software\Classes\.xlsx', '{#ASCC_REG_PREFIX}'); RegDeleteValue(HKEY_LOCAL_MACHINE, 'Software\Classes\.pptx', '{#ASCC_REG_PREFIX}'); From fd5985e7561d83d6858d90b93455eb029acee9ba Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Sat, 8 Apr 2023 22:14:16 +0300 Subject: [PATCH 002/298] [start page] refactoring. locked unused code --- common/loginpage/build/Gruntfile.js | 2 +- common/loginpage/build/startpage.json | 2 +- common/loginpage/src/index.html | 3 +- common/loginpage/src/panelconnect.js | 86 ++++++++++++++------------- common/loginpage/src/panels.js | 5 -- 5 files changed, 49 insertions(+), 49 deletions(-) diff --git a/common/loginpage/build/Gruntfile.js b/common/loginpage/build/Gruntfile.js index 4c0948fc7..cffc21bff 100644 --- a/common/loginpage/build/Gruntfile.js +++ b/common/loginpage/build/Gruntfile.js @@ -100,7 +100,7 @@ module.exports = function(grunt) { }, dialogconnect: { files: { - '../src/dlglogin.min.js' : ['../src/dlglogin.js','../src/dialogconnect.js'] + '../src/dialogconnect.min.js' : ['../src/dialogconnect.js'] } }, }, diff --git a/common/loginpage/build/startpage.json b/common/loginpage/build/startpage.json index bd23d89ac..70ba8a783 100644 --- a/common/loginpage/build/startpage.json +++ b/common/loginpage/build/startpage.json @@ -73,7 +73,7 @@ ,"../src/panelwelcome.js" ,"../src/panelsettings.js" ,"../src/panelexternal.js" - ,"../src/dlglogin.min.js" + ,"../src/dialogconnect.min.js" ,"../src/panels.js" ], "dest": "../deploy/build.js" diff --git a/common/loginpage/src/index.html b/common/loginpage/src/index.html index 55e5e1f91..eedbf178a 100644 --- a/common/loginpage/src/index.html +++ b/common/loginpage/src/index.html @@ -228,7 +228,8 @@

Create new

- + + diff --git a/common/loginpage/src/panelconnect.js b/common/loginpage/src/panelconnect.js index aabe06776..e89018aa0 100644 --- a/common/loginpage/src/panelconnect.js +++ b/common/loginpage/src/panelconnect.js @@ -223,7 +223,7 @@ utils.fn.extend(ControllerPortals.prototype, (function() { let collection, ppmenu; - let dlgLogin; + // let dlgLogin; function _on_context_menu(menu, action, data) { var model = data; @@ -265,7 +265,8 @@ _dialog.show(); }; - function _do_login(model) { + // TODO: remove after ver 8.0. login proc via portal's api isn't used any more + /* function _do_login(model) { if ( !dlgLogin ) { !model && (model = {}) dlgLogin = new LoginDlg({ @@ -293,30 +294,32 @@ dlgLogin.show({portal: model.path, provider: model.provider, email: model.email}); } - }; - - if ( config.portals && !!config.portals.auth_use_api ) { - _do_connect = _do_login; - } - - function _authorize(portal, user, data) { - if ( !dlgLogin ) { - dlgLogin = new LoginDlg({ - success: info => { - // dlgLogin.close(); - PortalsStore.keep(info.data); - _update_portals.call(this); - - CommonEvents.fire('portal:authorized', [data]); - }, - close: code => { - dlgLogin = undefined; - } - }); - - dlgLogin.show({portal: portal, email: user}); - } - }; + }; */ + + // TODO: remove after ver 8.0. login proc via portal's api isn't used any more + // if ( config.portals && !!config.portals.auth_use_api ) { + // _do_connect = _do_login; + // } + + // TODO: remove after ver 8.0. login proc via portal's api isn't used any more + // function _authorize(portal, user, data) { + // if ( !dlgLogin ) { + // dlgLogin = new LoginDlg({ + // success: info => { + // // dlgLogin.close(); + // PortalsStore.keep(info.data); + // _update_portals.call(this); + + // CommonEvents.fire('portal:authorized', [data]); + // }, + // close: code => { + // dlgLogin = undefined; + // } + // }); + + // dlgLogin.show({portal: portal, email: user}); + // } + // }; function _do_logout(model) { // var model = portalCollection.find('name', info); @@ -478,7 +481,7 @@ }; var _on_create_portal = function() { - dlgLogin && dlgLogin.close(); + // dlgLogin && dlgLogin.close(); window.sdk.execCommand('portal:create', ''); }; @@ -571,9 +574,9 @@ opts = JSON.parse(params); } catch (e) { /*delete opts;*/ } - if ( opts && opts.portals && opts.portals.auth_use_api ) { - _do_connect = _do_login; - } + // if ( opts && opts.portals && opts.portals.auth_use_api ) { + // _do_connect = _do_login; + // } } else if (params.includes('\"uitheme\"\:')) { // let opts = JSON.parse(params); @@ -718,18 +721,19 @@ var model = collection.find('name', utils.skipUrlProtocol(portal)); return model && model.logged; }, - authorizeOn: function(portal, data) { - var model = collection.find('name', utils.skipUrlProtocol(portal)); - if ( !model ) { - _authorize.call(this, portal, undefined, data); - } else - if ( !model.logged ) { - _authorize.call(this, portal, model.email, data); - } - } - , collection: function() { + // TODO: remove after ver 8.0. login proc via portal's api isn't used any more + // authorizeOn: function(portal, data) { + // var model = collection.find('name', utils.skipUrlProtocol(portal)); + // if ( !model ) { + // _authorize.call(this, portal, undefined, data); + // } else + // if ( !model.logged ) { + // _authorize.call(this, portal, model.email, data); + // } + // }, + collection: function() { return collection; - } + }, }; })()); }(); diff --git a/common/loginpage/src/panels.js b/common/loginpage/src/panels.js index 7f81c5e77..e4fce929a 100644 --- a/common/loginpage/src/panels.js +++ b/common/loginpage/src/panels.js @@ -68,11 +68,6 @@ $(document).ready(function() { CommonEvents.fire("portal:create"); }); - if (!window.LoginDlg) { - $('.tools-connect').hide(); - hideAction('connect'); - } - if (!window.config.portals.checklist) { $('.tools-connect').hide(); hideAction('connect'); From 39b8fb26da519f633628111dac2a1bbb50b38f1a Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Mon, 10 Apr 2023 10:27:41 +0300 Subject: [PATCH 003/298] [win-linux] scroller adaptation for svg icons --- .gitignore | 1 + .../res/icons/tabbar/scroll_left_disabled.svg | 45 +++++++++++ .../tabbar/scroll_left_disabled_light.svg | 47 ++++++++++++ .../res/icons/tabbar/scroll_left_hover.svg | 45 +++++++++++ .../icons/tabbar/scroll_left_hover_light.svg | 47 ++++++++++++ .../res/icons/tabbar/scroll_left_normal.svg | 46 ++++++++++++ .../icons/tabbar/scroll_left_normal_light.svg | 46 ++++++++++++ .../tabbar/scroll_left_pressed_light.svg | 46 ++++++++++++ .../icons/tabbar/scroll_right_disabled.svg | 44 +++++++++++ .../tabbar/scroll_right_disabled_light.svg | 42 +++++++++++ .../res/icons/tabbar/scroll_right_hover.svg | 44 +++++++++++ .../icons/tabbar/scroll_right_hover_light.svg | 42 +++++++++++ .../res/icons/tabbar/scroll_right_normal.svg | 45 +++++++++++ .../tabbar/scroll_right_normal_light.svg | 45 +++++++++++ .../tabbar/scroll_right_pressed_light.svg | 45 +++++++++++ win-linux/res/styles/styles.qss | 75 ++++++++++++++++--- win-linux/res/styles/styles@1.25x.qss | 30 +------- win-linux/res/styles/styles@1.5x.qss | 30 +------- win-linux/res/styles/styles@1.75x.qss | 29 ------- win-linux/res/styles/styles@2x.qss | 30 +------- win-linux/res/styles/tabbar@1.25x.qss | 52 ------------- win-linux/res/styles/tabbar@1.5x.qss | 52 ------------- win-linux/res/styles/tabbar@1.75x.qss | 52 ------------- win-linux/res/styles/tabbar@1x.qss | 52 ------------- win-linux/res/styles/tabbar@2.5x.qss | 24 ++++++ win-linux/res/styles/tabbar@2x.qss | 52 ------------- win-linux/resources.qrc | 17 ++++- .../src/cascapplicationmanagerwrapper.cpp | 4 +- 28 files changed, 738 insertions(+), 391 deletions(-) create mode 100644 win-linux/res/icons/tabbar/scroll_left_disabled.svg create mode 100644 win-linux/res/icons/tabbar/scroll_left_disabled_light.svg create mode 100644 win-linux/res/icons/tabbar/scroll_left_hover.svg create mode 100644 win-linux/res/icons/tabbar/scroll_left_hover_light.svg create mode 100644 win-linux/res/icons/tabbar/scroll_left_normal.svg create mode 100644 win-linux/res/icons/tabbar/scroll_left_normal_light.svg create mode 100644 win-linux/res/icons/tabbar/scroll_left_pressed_light.svg create mode 100644 win-linux/res/icons/tabbar/scroll_right_disabled.svg create mode 100644 win-linux/res/icons/tabbar/scroll_right_disabled_light.svg create mode 100644 win-linux/res/icons/tabbar/scroll_right_hover.svg create mode 100644 win-linux/res/icons/tabbar/scroll_right_hover_light.svg create mode 100644 win-linux/res/icons/tabbar/scroll_right_normal.svg create mode 100644 win-linux/res/icons/tabbar/scroll_right_normal_light.svg create mode 100644 win-linux/res/icons/tabbar/scroll_right_pressed_light.svg create mode 100644 win-linux/res/styles/tabbar@2.5x.qss diff --git a/.gitignore b/.gitignore index b49ed6c69..3575b07cb 100644 --- a/.gitignore +++ b/.gitignore @@ -26,6 +26,7 @@ win-linux/package/linux/urpmi/builddir win-linux/package/linux/suse-rpm/builddir win-linux/package/linux/tar +common/loginpage/build/plugins/* common/loginpage/build/node_modules/* common/loginpage/deploy/* common/loginpage/src/dlglogin.min.js diff --git a/win-linux/res/icons/tabbar/scroll_left_disabled.svg b/win-linux/res/icons/tabbar/scroll_left_disabled.svg new file mode 100644 index 000000000..f16f77ca9 --- /dev/null +++ b/win-linux/res/icons/tabbar/scroll_left_disabled.svg @@ -0,0 +1,45 @@ + + diff --git a/win-linux/res/icons/tabbar/scroll_left_disabled_light.svg b/win-linux/res/icons/tabbar/scroll_left_disabled_light.svg new file mode 100644 index 000000000..1de9c6968 --- /dev/null +++ b/win-linux/res/icons/tabbar/scroll_left_disabled_light.svg @@ -0,0 +1,47 @@ + + diff --git a/win-linux/res/icons/tabbar/scroll_left_hover.svg b/win-linux/res/icons/tabbar/scroll_left_hover.svg new file mode 100644 index 000000000..a3d3c2fac --- /dev/null +++ b/win-linux/res/icons/tabbar/scroll_left_hover.svg @@ -0,0 +1,45 @@ + + diff --git a/win-linux/res/icons/tabbar/scroll_left_hover_light.svg b/win-linux/res/icons/tabbar/scroll_left_hover_light.svg new file mode 100644 index 000000000..27af9b0be --- /dev/null +++ b/win-linux/res/icons/tabbar/scroll_left_hover_light.svg @@ -0,0 +1,47 @@ + + diff --git a/win-linux/res/icons/tabbar/scroll_left_normal.svg b/win-linux/res/icons/tabbar/scroll_left_normal.svg new file mode 100644 index 000000000..87a4ed7fc --- /dev/null +++ b/win-linux/res/icons/tabbar/scroll_left_normal.svg @@ -0,0 +1,46 @@ + + diff --git a/win-linux/res/icons/tabbar/scroll_left_normal_light.svg b/win-linux/res/icons/tabbar/scroll_left_normal_light.svg new file mode 100644 index 000000000..f9dcc83c7 --- /dev/null +++ b/win-linux/res/icons/tabbar/scroll_left_normal_light.svg @@ -0,0 +1,46 @@ + + diff --git a/win-linux/res/icons/tabbar/scroll_left_pressed_light.svg b/win-linux/res/icons/tabbar/scroll_left_pressed_light.svg new file mode 100644 index 000000000..d6404e2d7 --- /dev/null +++ b/win-linux/res/icons/tabbar/scroll_left_pressed_light.svg @@ -0,0 +1,46 @@ + + diff --git a/win-linux/res/icons/tabbar/scroll_right_disabled.svg b/win-linux/res/icons/tabbar/scroll_right_disabled.svg new file mode 100644 index 000000000..402c7197e --- /dev/null +++ b/win-linux/res/icons/tabbar/scroll_right_disabled.svg @@ -0,0 +1,44 @@ + + diff --git a/win-linux/res/icons/tabbar/scroll_right_disabled_light.svg b/win-linux/res/icons/tabbar/scroll_right_disabled_light.svg new file mode 100644 index 000000000..366254b8d --- /dev/null +++ b/win-linux/res/icons/tabbar/scroll_right_disabled_light.svg @@ -0,0 +1,42 @@ + + diff --git a/win-linux/res/icons/tabbar/scroll_right_hover.svg b/win-linux/res/icons/tabbar/scroll_right_hover.svg new file mode 100644 index 000000000..c6cc6d9c3 --- /dev/null +++ b/win-linux/res/icons/tabbar/scroll_right_hover.svg @@ -0,0 +1,44 @@ + + diff --git a/win-linux/res/icons/tabbar/scroll_right_hover_light.svg b/win-linux/res/icons/tabbar/scroll_right_hover_light.svg new file mode 100644 index 000000000..1cd38a01b --- /dev/null +++ b/win-linux/res/icons/tabbar/scroll_right_hover_light.svg @@ -0,0 +1,42 @@ + + diff --git a/win-linux/res/icons/tabbar/scroll_right_normal.svg b/win-linux/res/icons/tabbar/scroll_right_normal.svg new file mode 100644 index 000000000..fe23c9e52 --- /dev/null +++ b/win-linux/res/icons/tabbar/scroll_right_normal.svg @@ -0,0 +1,45 @@ + + diff --git a/win-linux/res/icons/tabbar/scroll_right_normal_light.svg b/win-linux/res/icons/tabbar/scroll_right_normal_light.svg new file mode 100644 index 000000000..0a04dd6c9 --- /dev/null +++ b/win-linux/res/icons/tabbar/scroll_right_normal_light.svg @@ -0,0 +1,45 @@ + + diff --git a/win-linux/res/icons/tabbar/scroll_right_pressed_light.svg b/win-linux/res/icons/tabbar/scroll_right_pressed_light.svg new file mode 100644 index 000000000..d819e37dc --- /dev/null +++ b/win-linux/res/icons/tabbar/scroll_right_pressed_light.svg @@ -0,0 +1,45 @@ + + diff --git a/win-linux/res/styles/styles.qss b/win-linux/res/styles/styles.qss index 75e09cb46..3782e1a51 100644 --- a/win-linux/res/styles/styles.qss +++ b/win-linux/res/styles/styles.qss @@ -38,37 +38,88 @@ #scrollerFrame>QToolButton:pressed {background-color: #b7b7b7;} #scrollerFrame>QToolButton#leftButton { - image: url(:/tabbar/icons/scrolltab_ln.png) center no-repeat; + image: url(:/tabbar/icons/scrolltab_ln.svg) center no-repeat; } - #scrollerFrame>QToolButton#leftButton:disabled { - image: url(:/tabbar/icons/scrolltab_ld.png) center no-repeat; + image: url(:/tabbar/icons/scrolltab_ld.svg) center no-repeat; } - #scrollerFrame>QToolButton#leftButton:hover { - image: url(:/tabbar/icons/scrolltab_lh.png) center no-repeat; + image: url(:/tabbar/icons/scrolltab_lh.svg) center no-repeat; } - #scrollerFrame>QToolButton#leftButton:pressed { image: url(:/tabbar/icons/scrolltab_lp.png) center no-repeat; } #scrollerFrame>QToolButton#rightButton { - image: url(:/tabbar/icons/scrolltab_rn.png) center no-repeat; + image: url(:/tabbar/icons/scrolltab_rn.svg) center no-repeat; } - #scrollerFrame>QToolButton#rightButton:disabled { - image: url(:/tabbar/icons/scrolltab_rd.png) center no-repeat; + image: url(:/tabbar/icons/scrolltab_rd.svg) center no-repeat; } - #scrollerFrame>QToolButton#rightButton:hover { - image: url(:/tabbar/icons/scrolltab_rh.png) center no-repeat; + image: url(:/tabbar/icons/scrolltab_rh.svg) center no-repeat; } - #scrollerFrame>QToolButton#rightButton:pressed { image: url(:/tabbar/icons/scrolltab_rp.png) center no-repeat; } +/* Dark */ +#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#leftButton { + image: url(:/tabbar/icons/scrolltab_ln_light.svg) center no-repeat; +} +#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#leftButton:disabled { + image: url(:/tabbar/icons/scrolltab_ld_light.svg) center no-repeat; +} +#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#leftButton:hover { + image: url(:/tabbar/icons/scrolltab_lh_light.svg) center no-repeat; +} +#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#leftButton:pressed { + image: url(:/tabbar/icons/scrolltab_lp_light.svg) center no-repeat; +} + + +#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#rightButton { + image: url(:/tabbar/icons/scrolltab_rn_light.svg) center no-repeat; +} +#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#rightButton:disabled { + image: url(:/tabbar/icons/scrolltab_rd_light.svg) center no-repeat; +} +#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#rightButton:hover { + image: url(:/tabbar/icons/scrolltab_rh_light.svg) center no-repeat; +} +#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#rightButton:pressed { + image: url(:/tabbar/icons/scrolltab_rp_light.svg) center no-repeat; +} + +/* Contrast-dark*/ +#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton#leftButton { + image: url(:/tabbar/icons/scrolltab_ln_light.svg) center no-repeat; +} +#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton#leftButton:disabled { + image: url(:/tabbar/icons/scrolltab_ld_light.svg) center no-repeat; +} +#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton#leftButton:hover { + image: url(:/tabbar/icons/scrolltab_lh_light.svg) center no-repeat; +} +#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton#leftButton:pressed { + image: url(:/tabbar/icons/scrolltab_lp_light.svg) center no-repeat; +} + + +#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton#rightButton { + image: url(:/tabbar/icons/scrolltab_rn_light.svg) center no-repeat; +} +#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton#rightButton:disabled { + image: url(:/tabbar/icons/scrolltab_rd_light.svg) center no-repeat; +} +#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton#rightButton:hover { + image: url(:/tabbar/icons/scrolltab_rh_light.png) center no-repeat; +} +#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton#rightButton:pressed { + image: url(:/tabbar/icons/scrolltab_rp_light.svg) center no-repeat; +} + + QPushButton#toolButtonMaximize, QPushButton#toolButtonMain, QPushButton#toolButtonMinimize, QPushButton#toolButtonClose, QPushButton#toolButtonDownload { diff --git a/win-linux/res/styles/styles@1.25x.qss b/win-linux/res/styles/styles@1.25x.qss index 9d63e2a7e..ce8a6cd6a 100644 --- a/win-linux/res/styles/styles@1.25x.qss +++ b/win-linux/res/styles/styles@1.25x.qss @@ -17,44 +17,16 @@ max-width: 48px; } -#scrollerFrame>QToolButton { - margin: 0px; - border: none; background-color: #f1f1f1; -} -#scrollerFrame>QToolButton:hover {background-color: #cecece;} -#scrollerFrame>QToolButton:pressed {background-color: #b7b7b7;} - -#scrollerFrame>QToolButton#leftButton { - image: url(:/tabbar/icons/scrolltab_ln_1.25x.png) center no-repeat; -} - -#scrollerFrame>QToolButton#leftButton:disabled { - image: url(:/tabbar/icons/scrolltab_ld_1.25x.png) center no-repeat; -} - -#scrollerFrame>QToolButton#leftButton:hover { - image: url(:/tabbar/icons/scrolltab_lh_1.25x.png) center no-repeat; -} #scrollerFrame>QToolButton#leftButton:pressed { image: url(:/tabbar/icons/scrolltab_lp_1.25x.png) center no-repeat; } -#scrollerFrame>QToolButton#rightButton { - image: url(:/tabbar/icons/scrolltab_rn_1.25x.png) center no-repeat; -} - -#scrollerFrame>QToolButton#rightButton:disabled { - image: url(:/tabbar/icons/scrolltab_rd_1.25x.png) center no-repeat; -} - -#scrollerFrame>QToolButton#rightButton:hover { - image: url(:/tabbar/icons/scrolltab_rh_1.25x.png) center no-repeat; -} #scrollerFrame>QToolButton#rightButton:pressed { image: url(:/tabbar/icons/scrolltab_rp_1.25x.png) center no-repeat; } + QPushButton#toolButtonDownload { padding: 7px; } diff --git a/win-linux/res/styles/styles@1.5x.qss b/win-linux/res/styles/styles@1.5x.qss index d6701dede..e34ea08cb 100644 --- a/win-linux/res/styles/styles@1.5x.qss +++ b/win-linux/res/styles/styles@1.5x.qss @@ -17,44 +17,16 @@ max-width: 48px; } -#scrollerFrame>QToolButton { - margin: 0px; - border: none; background-color: #f1f1f1; -} -#scrollerFrame>QToolButton:hover {background-color: #cecece;} -#scrollerFrame>QToolButton:pressed {background-color: #b7b7b7;} - -#scrollerFrame>QToolButton#leftButton { - image: url(:/tabbar/icons/scrolltab_ln_1.5x.png) center no-repeat; -} - -#scrollerFrame>QToolButton#leftButton:disabled { - image: url(:/tabbar/icons/scrolltab_ld_1.5x.png) center no-repeat; -} - -#scrollerFrame>QToolButton#leftButton:hover { - image: url(:/tabbar/icons/scrolltab_lh_1.5x.png) center no-repeat; -} #scrollerFrame>QToolButton#leftButton:pressed { image: url(:/tabbar/icons/scrolltab_lp_1.5x.png) center no-repeat; } -#scrollerFrame>QToolButton#rightButton { - image: url(:/tabbar/icons/scrolltab_rn_1.5x.png) center no-repeat; -} - -#scrollerFrame>QToolButton#rightButton:disabled { - image: url(:/tabbar/icons/scrolltab_rd_1.5x.png) center no-repeat; -} - -#scrollerFrame>QToolButton#rightButton:hover { - image: url(:/tabbar/icons/scrolltab_rh_1.5x.png) center no-repeat; -} #scrollerFrame>QToolButton#rightButton:pressed { image: url(:/tabbar/icons/scrolltab_rp_1.5x.png) center no-repeat; } + QPushButton#toolButtonDownload { padding: 9px; } diff --git a/win-linux/res/styles/styles@1.75x.qss b/win-linux/res/styles/styles@1.75x.qss index ed23f4600..3980e3b90 100644 --- a/win-linux/res/styles/styles@1.75x.qss +++ b/win-linux/res/styles/styles@1.75x.qss @@ -2,7 +2,6 @@ min-width: 350px; } - #labelAppTitle { margin-top: -4px; font-size: 20px; @@ -18,40 +17,12 @@ max-width: 64px; } -#scrollerFrame>QToolButton { - margin: 0px; - border: none; background-color: #f1f1f1; -} -#scrollerFrame>QToolButton:hover {background-color: #cecece;} -#scrollerFrame>QToolButton:pressed {background-color: #b7b7b7;} -#scrollerFrame>QToolButton#leftButton { - image: url(:/tabbar/icons/scrolltab_ln_1.75x.png) center no-repeat; -} - -#scrollerFrame>QToolButton#leftButton:disabled { - image: url(:/tabbar/icons/scrolltab_ld_1.75x.png) center no-repeat; -} - -#scrollerFrame>QToolButton#leftButton:hover { - image: url(:/tabbar/icons/scrolltab_lh_1.75x.png) center no-repeat; -} #scrollerFrame>QToolButton#leftButton:pressed { image: url(:/tabbar/icons/scrolltab_lp_1.75x.png) center no-repeat; } -#scrollerFrame>QToolButton#rightButton { - image: url(:/tabbar/icons/scrolltab_rn_1.75x.png) center no-repeat; -} - -#scrollerFrame>QToolButton#rightButton:disabled { - image: url(:/tabbar/icons/scrolltab_rd_1.75x.png) center no-repeat; -} - -#scrollerFrame>QToolButton#rightButton:hover { - image: url(:/tabbar/icons/scrolltab_rh_1.75x.png) center no-repeat; -} #scrollerFrame>QToolButton#rightButton:pressed { image: url(:/tabbar/icons/scrolltab_rp_1.75x.png) center no-repeat; diff --git a/win-linux/res/styles/styles@2x.qss b/win-linux/res/styles/styles@2x.qss index 4ef33a89d..48ff497aa 100644 --- a/win-linux/res/styles/styles@2x.qss +++ b/win-linux/res/styles/styles@2x.qss @@ -17,44 +17,16 @@ max-width: 64px; } -#scrollerFrame>QToolButton { - margin: 0px; - border: none; background-color: #f1f1f1; -} -#scrollerFrame>QToolButton:hover {background-color: #cecece;} -#scrollerFrame>QToolButton:pressed {background-color: #b7b7b7;} - -#scrollerFrame>QToolButton#leftButton { - image: url(:/tabbar/icons/scrolltab_ln_2x.png) center no-repeat; -} - -#scrollerFrame>QToolButton#leftButton:disabled { - image: url(:/tabbar/icons/scrolltab_ld_2x.png) center no-repeat; -} - -#scrollerFrame>QToolButton#leftButton:hover { - image: url(:/tabbar/icons/scrolltab_lh_2x.png) center no-repeat; -} #scrollerFrame>QToolButton#leftButton:pressed { image: url(:/tabbar/icons/scrolltab_lp_2x.png) center no-repeat; } -#scrollerFrame>QToolButton#rightButton { - image: url(:/tabbar/icons/scrolltab_rn_2x.png) center no-repeat; -} - -#scrollerFrame>QToolButton#rightButton:disabled { - image: url(:/tabbar/icons/scrolltab_rd_2x.png) center no-repeat; -} - -#scrollerFrame>QToolButton#rightButton:hover { - image: url(:/tabbar/icons/scrolltab_rh_2x.png) center no-repeat; -} #scrollerFrame>QToolButton#rightButton:pressed { image: url(:/tabbar/icons/scrolltab_rp_2x.png) center no-repeat; } + QPushButton#toolButtonDownload { padding: 12px; } diff --git a/win-linux/res/styles/tabbar@1.25x.qss b/win-linux/res/styles/tabbar@1.25x.qss index 6255b0a29..1d61b0d67 100644 --- a/win-linux/res/styles/tabbar@1.25x.qss +++ b/win-linux/res/styles/tabbar@1.25x.qss @@ -22,55 +22,3 @@ QTabBar[active=false]::tab:selected:hover {background-color: #cecece;} #mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton {background-color: #404040;} #mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton:hover {background-color: #555;} #mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton:pressed {background-color: #606060;} - -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#leftButton { - image: url(:/tabbar/icons/scrolltab_ln_light_1.25x.png) center no-repeat; -} -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#leftButton:disabled { - image: url(:/tabbar/icons/scrolltab_ld_light_1.25x.png) center no-repeat; -} -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#leftButton:hover { - image: url(:/tabbar/icons/scrolltab_lh_light_1.25x.png) center no-repeat; -} -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#leftButton:pressed { - image: url(:/tabbar/icons/scrolltab_lp_light_1.25x.png) center no-repeat; -} -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#rightButton { - image: url(:/tabbar/icons/scrolltab_rn_light_1.25x.png) center no-repeat; -} -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#rightButton:disabled { - image: url(:/tabbar/icons/scrolltab_rd_light_1.25x.png) center no-repeat; -} -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#rightButton:hover { - image: url(:/tabbar/icons/scrolltab_rh_light_1.25x.png) center no-repeat; -} -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#rightButton:pressed { - image: url(:/tabbar/icons/scrolltab_rp_light_1.25x.png) center no-repeat; -} - -/* Contrast-dark*/ - -#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton#leftButton { - image: url(:/tabbar/icons/scrolltab_ln_light_1.25x.png) center no-repeat; -} -#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton#leftButton:disabled { - image: url(:/tabbar/icons/scrolltab_ld_light_1.25x.png) center no-repeat; -} -#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton#leftButton:hover { - image: url(:/tabbar/icons/scrolltab_lh_light_1.25x.png) center no-repeat; -} -#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton#leftButton:pressed { - image: url(:/tabbar/icons/scrolltab_lp_light_1.25x.png) center no-repeat; -} -#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton#rightButton { - image: url(:/tabbar/icons/scrolltab_rn_light_1.25x.png) center no-repeat; -} -#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton#rightButton:disabled { - image: url(:/tabbar/icons/scrolltab_rd_light_1.25x.png) center no-repeat; -} -#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton#rightButton:hover { - image: url(:/tabbar/icons/scrolltab_rh_light_1.25x.png) center no-repeat; -} -#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton#rightButton:pressed { - image: url(:/tabbar/icons/scrolltab_rp_light_1.25x.png) center no-repeat; -} diff --git a/win-linux/res/styles/tabbar@1.5x.qss b/win-linux/res/styles/tabbar@1.5x.qss index 27854fd76..b929f7b37 100644 --- a/win-linux/res/styles/tabbar@1.5x.qss +++ b/win-linux/res/styles/tabbar@1.5x.qss @@ -22,55 +22,3 @@ QTabBar[active=false]::tab:selected:hover {background-color: #cecece;} #mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton {background-color: #404040;} #mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton:hover {background-color: #555;} #mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton:pressed {background-color: #606060;} - -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#leftButton { - image: url(:/tabbar/icons/scrolltab_ln_light_1.5x.png) center no-repeat; -} -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#leftButton:disabled { - image: url(:/tabbar/icons/scrolltab_ld_light_1.5x.png) center no-repeat; -} -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#leftButton:hover { - image: url(:/tabbar/icons/scrolltab_lh_light_1.5x.png) center no-repeat; -} -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#leftButton:pressed { - image: url(:/tabbar/icons/scrolltab_lp_light_1.5x.png) center no-repeat; -} -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#rightButton { - image: url(:/tabbar/icons/scrolltab_rn_light_1.5x.png) center no-repeat; -} -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#rightButton:disabled { - image: url(:/tabbar/icons/scrolltab_rd_light_1.5x.png) center no-repeat; -} -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#rightButton:hover { - image: url(:/tabbar/icons/scrolltab_rh_light_1.5x.png) center no-repeat; -} -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#rightButton:pressed { - image: url(:/tabbar/icons/scrolltab_rp_light_1.5x.png) center no-repeat; -} - -/* Contrast-dark*/ - -#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton#leftButton { - image: url(:/tabbar/icons/scrolltab_ln_light_1.5x.png) center no-repeat; -} -#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton#leftButton:disabled { - image: url(:/tabbar/icons/scrolltab_ld_light_1.5x.png) center no-repeat; -} -#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton#leftButton:hover { - image: url(:/tabbar/icons/scrolltab_lh_light_1.5x.png) center no-repeat; -} -#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton#leftButton:pressed { - image: url(:/tabbar/icons/scrolltab_lp_light_1.5x.png) center no-repeat; -} -#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton#rightButton { - image: url(:/tabbar/icons/scrolltab_rn_light_1.5x.png) center no-repeat; -} -#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton#rightButton:disabled { - image: url(:/tabbar/icons/scrolltab_rd_light_1.5x.png) center no-repeat; -} -#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton#rightButton:hover { - image: url(:/tabbar/icons/scrolltab_rh_light_1.5x.png) center no-repeat; -} -#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton#rightButton:pressed { - image: url(:/tabbar/icons/scrolltab_rp_light_1.5x.png) center no-repeat; -} diff --git a/win-linux/res/styles/tabbar@1.75x.qss b/win-linux/res/styles/tabbar@1.75x.qss index cb1fe82b1..9d9b7748d 100644 --- a/win-linux/res/styles/tabbar@1.75x.qss +++ b/win-linux/res/styles/tabbar@1.75x.qss @@ -22,55 +22,3 @@ QTabBar[active=false]::tab:selected:hover {background-color: #cecece;} #mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton {background-color: #404040;} #mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton:hover {background-color: #555;} #mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton:pressed {background-color: #606060;} - -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#leftButton { - image: url(:/tabbar/icons/scrolltab_ln_light_1.75x.png) center no-repeat; -} -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#leftButton:disabled { - image: url(:/tabbar/icons/scrolltab_ld_light_1.75x.png) center no-repeat; -} -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#leftButton:hover { - image: url(:/tabbar/icons/scrolltab_lh_light_1.75x.png) center no-repeat; -} -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#leftButton:pressed { - image: url(:/tabbar/icons/scrolltab_lp_light_1.75x.png) center no-repeat; -} -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#rightButton { - image: url(:/tabbar/icons/scrolltab_rn_light_1.75x.png) center no-repeat; -} -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#rightButton:disabled { - image: url(:/tabbar/icons/scrolltab_rd_light_1.75x.png) center no-repeat; -} -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#rightButton:hover { - image: url(:/tabbar/icons/scrolltab_rh_light_1.75x.png) center no-repeat; -} -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#rightButton:pressed { - image: url(:/tabbar/icons/scrolltab_rp_light_1.75x.png) center no-repeat; -} - -/* Contrast-dark*/ - -#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton#leftButton { - image: url(:/tabbar/icons/scrolltab_ln_light_1.75x.png) center no-repeat; -} -#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton#leftButton:disabled { - image: url(:/tabbar/icons/scrolltab_ld_light_1.75x.png) center no-repeat; -} -#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton#leftButton:hover { - image: url(:/tabbar/icons/scrolltab_lh_light_1.75x.png) center no-repeat; -} -#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton#leftButton:pressed { - image: url(:/tabbar/icons/scrolltab_lp_light_1.75x.png) center no-repeat; -} -#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton#rightButton { - image: url(:/tabbar/icons/scrolltab_rn_light_1.75x.png) center no-repeat; -} -#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton#rightButton:disabled { - image: url(:/tabbar/icons/scrolltab_rd_light_1.75x.png) center no-repeat; -} -#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton#rightButton:hover { - image: url(:/tabbar/icons/scrolltab_rh_light_1.75x.png) center no-repeat; -} -#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton#rightButton:pressed { - image: url(:/tabbar/icons/scrolltab_rp_light_1.75x.png) center no-repeat; -} diff --git a/win-linux/res/styles/tabbar@1x.qss b/win-linux/res/styles/tabbar@1x.qss index 160fa6bab..908043582 100644 --- a/win-linux/res/styles/tabbar@1x.qss +++ b/win-linux/res/styles/tabbar@1x.qss @@ -22,55 +22,3 @@ QTabBar[active=false]::tab:selected:hover {background-color: #cecece;} #mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton {background-color: #404040;} #mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton:hover {background-color: #555;} #mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton:pressed {background-color: #606060;} - -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#leftButton { - image: url(:/tabbar/icons/scrolltab_ln_light.png) center no-repeat; -} -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#leftButton:disabled { - image: url(:/tabbar/icons/scrolltab_ld_light.png) center no-repeat; -} -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#leftButton:hover { - image: url(:/tabbar/icons/scrolltab_lh_light.png) center no-repeat; -} -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#leftButton:pressed { - image: url(:/tabbar/icons/scrolltab_lp_light.png) center no-repeat; -} -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#rightButton { - image: url(:/tabbar/icons/scrolltab_rn_light.png) center no-repeat; -} -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#rightButton:disabled { - image: url(:/tabbar/icons/scrolltab_rd_light.png) center no-repeat; -} -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#rightButton:hover { - image: url(:/tabbar/icons/scrolltab_rh_light.png) center no-repeat; -} -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#rightButton:pressed { - image: url(:/tabbar/icons/scrolltab_rp_light.png) center no-repeat; -} - -/* Contrast-dark*/ - -#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton#leftButton { - image: url(:/tabbar/icons/scrolltab_ln_light.png) center no-repeat; -} -#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton#leftButton:disabled { - image: url(:/tabbar/icons/scrolltab_ld_light.png) center no-repeat; -} -#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton#leftButton:hover { - image: url(:/tabbar/icons/scrolltab_lh_light.png) center no-repeat; -} -#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton#leftButton:pressed { - image: url(:/tabbar/icons/scrolltab_lp_light.png) center no-repeat; -} -#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton#rightButton { - image: url(:/tabbar/icons/scrolltab_rn_light.png) center no-repeat; -} -#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton#rightButton:disabled { - image: url(:/tabbar/icons/scrolltab_rd_light.png) center no-repeat; -} -#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton#rightButton:hover { - image: url(:/tabbar/icons/scrolltab_rh_light.png) center no-repeat; -} -#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton#rightButton:pressed { - image: url(:/tabbar/icons/scrolltab_rp_light.png) center no-repeat; -} diff --git a/win-linux/res/styles/tabbar@2.5x.qss b/win-linux/res/styles/tabbar@2.5x.qss new file mode 100644 index 000000000..a1d3b8dd8 --- /dev/null +++ b/win-linux/res/styles/tabbar@2.5x.qss @@ -0,0 +1,24 @@ + +QTabWidget::pane {background-color: #f1f1f1; border: none;} +QTabBar::tab {width: 270px; background-color: #f1f1f1; border: 0 none; border-right: 2px solid #a5a5a5; min-width: 82px; max-width: 270px; +height: 56px; margin: 0 0 0 0;} +QTabBar::tab:hover {background-color: #cecece;} +QTabBar::tab-label {active: #fff; normal: #444;} +QTabBar::tab-icon {width: 15; height: 15;} +QTabBar[active=false]::tab:selected {background-color: #f1f1f1;} +QTabBar[active=true]::tab:selected {background-color: #f1f1f1;} +QTabBar[active=false]::tab:selected:hover {background-color: #cecece;} + +#mainPanel[uitheme=theme-light] QTabBar::tab {border-right-color:#dfdfdf;} + +#mainPanel[uitheme=theme-classic-light] QTabBar::tab {border-right-color:#cbcbcb;} + +#mainPanel[uitheme=theme-dark] QTabWidget::pane {background-color: #404040;} +#mainPanel[uitheme=theme-dark] QTabBar::tab {background-color: #404040; border-right-color: #505050;} +#mainPanel[uitheme=theme-dark] QTabBar::tab:hover {background-color: #555;} +#mainPanel[uitheme=theme-dark] QTabBar::tab:selected {background-color: #404040;} +#mainPanel[uitheme=theme-dark] QTabBar[active=false]::tab:selected:hover {background-color: #555;} + +#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton {background-color: #404040;} +#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton:hover {background-color: #555;} +#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton:pressed {background-color: #606060;} diff --git a/win-linux/res/styles/tabbar@2x.qss b/win-linux/res/styles/tabbar@2x.qss index fee931377..a1d3b8dd8 100644 --- a/win-linux/res/styles/tabbar@2x.qss +++ b/win-linux/res/styles/tabbar@2x.qss @@ -22,55 +22,3 @@ QTabBar[active=false]::tab:selected:hover {background-color: #cecece;} #mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton {background-color: #404040;} #mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton:hover {background-color: #555;} #mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton:pressed {background-color: #606060;} - -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#leftButton { - image: url(:/tabbar/icons/scrolltab_ln_light_2x.png) center no-repeat; -} -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#leftButton:disabled { - image: url(:/tabbar/icons/scrolltab_ld_light_2x.png) center no-repeat; -} -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#leftButton:hover { - image: url(:/tabbar/icons/scrolltab_lh_light_2x.png) center no-repeat; -} -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#leftButton:pressed { - image: url(:/tabbar/icons/scrolltab_lp_light_2x.png) center no-repeat; -} -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#rightButton { - image: url(:/tabbar/icons/scrolltab_rn_light_2x.png) center no-repeat; -} -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#rightButton:disabled { - image: url(:/tabbar/icons/scrolltab_rd_light_2x.png) center no-repeat; -} -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#rightButton:hover { - image: url(:/tabbar/icons/scrolltab_rh_light_2x.png) center no-repeat; -} -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#rightButton:pressed { - image: url(:/tabbar/icons/scrolltab_rp_light_2x.png) center no-repeat; -} - -/* Contrast-dark*/ - -#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton#leftButton { - image: url(:/tabbar/icons/scrolltab_ln_light_2x.png) center no-repeat; -} -#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton#leftButton:disabled { - image: url(:/tabbar/icons/scrolltab_ld_light_2x.png) center no-repeat; -} -#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton#leftButton:hover { - image: url(:/tabbar/icons/scrolltab_lh_light_2x.png) center no-repeat; -} -#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton#leftButton:pressed { - image: url(:/tabbar/icons/scrolltab_lp_light_2x.png) center no-repeat; -} -#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton#rightButton { - image: url(:/tabbar/icons/scrolltab_rn_light_2x.png) center no-repeat; -} -#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton#rightButton:disabled { - image: url(:/tabbar/icons/scrolltab_rd_light_2x.png) center no-repeat; -} -#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton#rightButton:hover { - image: url(:/tabbar/icons/scrolltab_rh_light_2x.png) center no-repeat; -} -#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton#rightButton:pressed { - image: url(:/tabbar/icons/scrolltab_rp_light_2x.png) center no-repeat; -} diff --git a/win-linux/resources.qrc b/win-linux/resources.qrc index 1e6bd8455..16d96e4be 100644 --- a/win-linux/resources.qrc +++ b/win-linux/resources.qrc @@ -183,13 +183,27 @@ res/icons/tabbar/tab_close_light@1.5x.png res/icons/tabbar/tab_close_light@1.25x.png res/icons/tabbar/tab_close_light@2x.png + res/icons/tabbar/scroll_left_normal_light.svg + res/icons/tabbar/scroll_left_disabled_light.svg + res/icons/tabbar/scroll_left_hover_light.svg + res/icons/tabbar/scroll_left_pressed_light.svg + res/icons/tabbar/scroll_right_normal_light.svg + res/icons/tabbar/scroll_right_disabled_light.svg + res/icons/tabbar/scroll_right_hover_light.svg + res/icons/tabbar/scroll_right_pressed_light.svg + res/icons/tabbar/scroll_left_normal.svg + res/icons/tabbar/scroll_left_disabled.svg + res/icons/tabbar/scroll_left_hover.svg + res/icons/tabbar/scroll_right_normal.svg + res/icons/tabbar/scroll_right_disabled.svg + res/icons/tabbar/scroll_right_hover.svg res/icons/webeditor/buttons.svg res/icons/webeditor/secureicon.svg - res/styles/styles.qss + res/styles/styles.qss res/styles/message.qss @@ -256,6 +270,7 @@ res/styles/tabbar@1.75x.qss res/styles/tabbar@2x.qss res/styles/tabbar_nix@2x.qss + res/styles/tabbar@2.5x.qss res/styles/theme-light.json diff --git a/win-linux/src/cascapplicationmanagerwrapper.cpp b/win-linux/src/cascapplicationmanagerwrapper.cpp index 8eed8a568..35a51a2bf 100644 --- a/win-linux/src/cascapplicationmanagerwrapper.cpp +++ b/win-linux/src/cascapplicationmanagerwrapper.cpp @@ -1112,7 +1112,7 @@ void CAscApplicationManagerWrapper::initializeApp() } } - _app.addStylesheets(CScalingFactor::SCALING_FACTOR_1, ":styles/res/styles/styles.qss"); + _app.addStylesheets(CScalingFactor::SCALING_FACTOR_1, ":styles/styles.qss"); _app.addStylesheets(CScalingFactor::SCALING_FACTOR_1_25, ":styles@1.25x/styles.qss"); _app.addStylesheets(CScalingFactor::SCALING_FACTOR_1_5, ":styles@1.5x/styles.qss"); _app.addStylesheets(CScalingFactor::SCALING_FACTOR_1_75, ":styles@1.75x/styles.qss"); @@ -1121,7 +1121,7 @@ void CAscApplicationManagerWrapper::initializeApp() _app.m_private->applyStylesheets(); // TODO: merge stylesheets and apply for the whole app - qApp->setStyleSheet( Utils::readStylesheets(":styles/res/styles/styles.qss") ); + qApp->setStyleSheet( Utils::readStylesheets(":styles/styles.qss") ); // Font QFont mainFont = QApplication::font(); From 19a7880bfa420ee509ce789ead5929658b4c94be Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Mon, 10 Apr 2023 15:30:22 +0300 Subject: [PATCH 004/298] [win-linux] refactoring --- win-linux/res/styles/styles.qss | 26 +++++++++++++++++++++++++- win-linux/res/styles/styles@1.25x.qss | 16 +++++----------- win-linux/res/styles/styles@1.5x.qss | 17 +++++------------ win-linux/res/styles/styles@1.75x.qss | 18 +++++------------- win-linux/res/styles/styles@2x.qss | 16 +++++----------- win-linux/res/styles/tabbar@1.25x.qss | 22 ---------------------- win-linux/res/styles/tabbar@1.5x.qss | 22 ---------------------- win-linux/res/styles/tabbar@1.75x.qss | 23 ----------------------- win-linux/res/styles/tabbar@1x.qss | 22 ---------------------- win-linux/res/styles/tabbar@2.5x.qss | 24 ------------------------ win-linux/res/styles/tabbar@2x.qss | 22 ---------------------- win-linux/res/styles/tabbar_nix.qss | 3 ++- win-linux/res/styles/tabbar_nix@2x.qss | 3 ++- 13 files changed, 49 insertions(+), 185 deletions(-) diff --git a/win-linux/res/styles/styles.qss b/win-linux/res/styles/styles.qss index 3782e1a51..3c8701eea 100644 --- a/win-linux/res/styles/styles.qss +++ b/win-linux/res/styles/styles.qss @@ -31,11 +31,16 @@ } #scrollerFrame>QToolButton { + max-height: 28px; margin: 0px; border: none; background-color: #f1f1f1; } + #scrollerFrame>QToolButton:hover {background-color: #cecece;} #scrollerFrame>QToolButton:pressed {background-color: #b7b7b7;} +#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton {background-color: #404040;} +#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton:hover {background-color: #555;} +#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton:pressed {background-color: #606060;} #scrollerFrame>QToolButton#leftButton { image: url(:/tabbar/icons/scrolltab_ln.svg) center no-repeat; @@ -471,8 +476,10 @@ QTabBar { font-size: 11px; background-color: #f1f1f1; } +QTabWidget::pane {background-color: #f1f1f1; border: none; padding: 0px;} -QTabBar::tab { } +QTabBar::tab {width: 135px; background-color: #f1f1f1; border: 0 none; border-right: 1px solid #a5a5a5; min-width: 41px; max-width: 135px; +height: 28px; margin: 0 0 0 0; padding: 0px;} QTabBar::tab::selected { padding-left: 0px; @@ -528,6 +535,23 @@ QTabBar QToolButton[class=tab-close]{ background-color:rgba(255,255,255,0); } +QTabBar::tab:hover {background-color: #cecece;} +QTabBar::tab-label {active: #fff; normal: #444;} +QTabBar::tab-icon {width: 15; height: 15;} +QTabBar[active=false]::tab:selected {background-color: #f1f1f1;} +QTabBar[active=true]::tab:selected {background-color: #f1f1f1;} +QTabBar[active=false]::tab:selected:hover {background-color: #cecece;} + +#mainPanel[uitheme=theme-light] QTabBar::tab {border-right-color:#dfdfdf;} + +#mainPanel[uitheme=theme-classic-light] QTabBar::tab {border-right-color:#cbcbcb;} + +#mainPanel[uitheme=theme-dark] QTabWidget::pane {background-color: #404040;} +#mainPanel[uitheme=theme-dark] QTabBar::tab {background-color: #404040; border-right-color: #505050;} +#mainPanel[uitheme=theme-dark] QTabBar::tab:hover {background-color: #555;} +#mainPanel[uitheme=theme-dark] QTabBar::tab:selected {background-color: #404040;} +#mainPanel[uitheme=theme-dark] QTabBar[active=false]::tab:selected:hover {background-color: #555;} + /*MyLabel { qproperty-pixmap: url(pixmap.png); }*/ /*MyGroupBox { qproperty-titleColor: rgb(100, 200, 100); }*/ diff --git a/win-linux/res/styles/styles@1.25x.qss b/win-linux/res/styles/styles@1.25x.qss index ce8a6cd6a..546c602cf 100644 --- a/win-linux/res/styles/styles@1.25x.qss +++ b/win-linux/res/styles/styles@1.25x.qss @@ -17,6 +17,9 @@ max-width: 48px; } +#scrollerFrame>QToolButton { + max-height: 35px; +} #scrollerFrame>QToolButton#leftButton:pressed { image: url(:/tabbar/icons/scrolltab_lp_1.25x.png) center no-repeat; @@ -100,13 +103,8 @@ QTabBar { font-size: 14px; } -QTabBar::tab { - padding-left: 9px; -} - -QTabBar::tab { - padding: 0; -} +QTabBar::tab {width: 169px; background-color: #f1f1f1; border: 0 none; border-right: 1px solid #a5a5a5; min-width: 51px; max-width: 169px; +height: 35px; margin: 0 0 0 0;} QTabBar::close-button { } @@ -123,10 +121,6 @@ QTabBar QToolButton, border-width:2px; } -QTabBar[scroll=var2]::scroller, -QTabBar::scroller { - width: 0px; -} QTabBar QToolButton[class=tab-close]{ background-image:url(:/tabbar/icons/close_normal_1.25x.png); diff --git a/win-linux/res/styles/styles@1.5x.qss b/win-linux/res/styles/styles@1.5x.qss index e34ea08cb..1859f3331 100644 --- a/win-linux/res/styles/styles@1.5x.qss +++ b/win-linux/res/styles/styles@1.5x.qss @@ -17,6 +17,9 @@ max-width: 48px; } +#scrollerFrame>QToolButton { + max-height: 42px; +} #scrollerFrame>QToolButton#leftButton:pressed { image: url(:/tabbar/icons/scrolltab_lp_1.5x.png) center no-repeat; @@ -101,13 +104,8 @@ QTabBar { font-size: 15px; } -QTabBar::tab { - padding-left: 11px; -} - -QTabBar::tab { - padding: 0; -} +QTabBar::tab {width: 203px; background-color: #f1f1f1; border: 0 none; border-right: 2px solid #a5a5a5; min-width: 62px; max-width: 203px; +height: 42px; margin: 0 0 0 0;} QTabBar::close-button { } @@ -124,11 +122,6 @@ QTabBar QToolButton, border-width:2px; } -QTabBar[scroll=var2]::scroller, -QTabBar::scroller { - width: 0px; -} - QTabBar QToolButton[class=tab-close]{ background-image:url(:/tabbar/icons/close_normal_1.5x.png); } diff --git a/win-linux/res/styles/styles@1.75x.qss b/win-linux/res/styles/styles@1.75x.qss index 3980e3b90..c32bd9349 100644 --- a/win-linux/res/styles/styles@1.75x.qss +++ b/win-linux/res/styles/styles@1.75x.qss @@ -17,7 +17,9 @@ max-width: 64px; } - +#scrollerFrame>QToolButton { + max-height: 49px; +} #scrollerFrame>QToolButton#leftButton:pressed { image: url(:/tabbar/icons/scrolltab_lp_1.75x.png) center no-repeat; @@ -102,13 +104,8 @@ QTabBar { font-size: 18px; } -QTabBar::tab { - padding-left: 13px; -} - -QTabBar::tab { - padding: 0; -} +QTabBar::tab {width: 236px; background-color: #f1f1f1; border: 0 none; border-right: 2px solid #a5a5a5; min-width: 72px; max-width: 236px; +height: 49px; margin: 0 0 0 0;} QTabBar::close-button { } @@ -125,11 +122,6 @@ QTabBar QToolButton, border-width:2px; } -QTabBar[scroll=var2]::scroller, -QTabBar::scroller { - width: 0px; -} - QTabBar QToolButton[class=tab-close]{ background-image:url(:/tabbar/icons/close_normal_1.75x.png); } diff --git a/win-linux/res/styles/styles@2x.qss b/win-linux/res/styles/styles@2x.qss index 48ff497aa..f80d6199c 100644 --- a/win-linux/res/styles/styles@2x.qss +++ b/win-linux/res/styles/styles@2x.qss @@ -17,6 +17,9 @@ max-width: 64px; } +#scrollerFrame>QToolButton { + max-height: 56px; +} #scrollerFrame>QToolButton#leftButton:pressed { image: url(:/tabbar/icons/scrolltab_lp_2x.png) center no-repeat; @@ -109,13 +112,8 @@ QTabBar { font-size: 20px; } -QTabBar::tab { - padding-left: 14px; -} - -QTabBar::tab { - padding: 0; -} +QTabBar::tab {width: 270px; background-color: #f1f1f1; border: 0 none; border-right: 2px solid #a5a5a5; min-width: 82px; max-width: 270px; +height: 56px; margin: 0 0 0 0;} QTabBar::close-button { image: url(:/res/icons/tab_close_normal_2x.png); @@ -137,10 +135,6 @@ QTabBar QToolButton, border-width:2px; } -QTabBar[scroll=var2]::scroller, -QTabBar::scroller { - width: 0px; -} /* download widget */ QMenu[hdpi]#menuButtonDownload { diff --git a/win-linux/res/styles/tabbar@1.25x.qss b/win-linux/res/styles/tabbar@1.25x.qss index 1d61b0d67..139597f9c 100644 --- a/win-linux/res/styles/tabbar@1.25x.qss +++ b/win-linux/res/styles/tabbar@1.25x.qss @@ -1,24 +1,2 @@ -QTabWidget::pane {background-color: #f1f1f1; border: none;} -QTabBar::tab {width: 169px; background-color: #f1f1f1; border: 0 none; border-right: 1px solid #a5a5a5; min-width: 51px; max-width: 169px; -height: 35px; margin: 0 0 0 0;} -QTabBar::tab:hover {background-color: #cecece;} -QTabBar::tab-label {active: #fff; normal: #444;} -QTabBar::tab-icon {width: 15; height: 15;} -QTabBar[active=false]::tab:selected {background-color: #f1f1f1;} -QTabBar[active=true]::tab:selected {background-color: #f1f1f1;} -QTabBar[active=false]::tab:selected:hover {background-color: #cecece;} -#mainPanel[uitheme=theme-light] QTabBar::tab {border-right-color:#dfdfdf;} - -#mainPanel[uitheme=theme-classic-light] QTabBar::tab {border-right-color:#cbcbcb;} - -#mainPanel[uitheme=theme-dark] QTabWidget::pane {background-color: #404040;} -#mainPanel[uitheme=theme-dark] QTabBar::tab {background-color: #404040; border-right-color: #505050;} -#mainPanel[uitheme=theme-dark] QTabBar::tab:hover {background-color: #555;} -#mainPanel[uitheme=theme-dark] QTabBar::tab:selected {background-color: #404040;} -#mainPanel[uitheme=theme-dark] QTabBar[active=false]::tab:selected:hover {background-color: #555;} - -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton {background-color: #404040;} -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton:hover {background-color: #555;} -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton:pressed {background-color: #606060;} diff --git a/win-linux/res/styles/tabbar@1.5x.qss b/win-linux/res/styles/tabbar@1.5x.qss index b929f7b37..139597f9c 100644 --- a/win-linux/res/styles/tabbar@1.5x.qss +++ b/win-linux/res/styles/tabbar@1.5x.qss @@ -1,24 +1,2 @@ -QTabWidget::pane {background-color: #f1f1f1; border: none;} -QTabBar::tab {width: 203px; background-color: #f1f1f1; border: 0 none; border-right: 2px solid #a5a5a5; min-width: 62px; max-width: 203px; -height: 42px; margin: 0 0 0 0;} -QTabBar::tab:hover {background-color: #cecece;} -QTabBar::tab-label {active: #fff; normal: #444;} -QTabBar::tab-icon {width: 15; height: 15;} -QTabBar[active=false]::tab:selected {background-color: #f1f1f1;} -QTabBar[active=true]::tab:selected {background-color: #f1f1f1;} -QTabBar[active=false]::tab:selected:hover {background-color: #cecece;} -#mainPanel[uitheme=theme-light] QTabBar::tab {border-right-color:#dfdfdf;} - -#mainPanel[uitheme=theme-classic-light] QTabBar::tab {border-right-color:#cbcbcb;} - -#mainPanel[uitheme=theme-dark] QTabWidget::pane {background-color: #404040;} -#mainPanel[uitheme=theme-dark] QTabBar::tab {background-color: #404040; border-right-color: #505050;} -#mainPanel[uitheme=theme-dark] QTabBar::tab:hover {background-color: #555;} -#mainPanel[uitheme=theme-dark] QTabBar::tab:selected {background-color: #404040;} -#mainPanel[uitheme=theme-dark] QTabBar[active=false]::tab:selected:hover {background-color: #555;} - -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton {background-color: #404040;} -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton:hover {background-color: #555;} -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton:pressed {background-color: #606060;} diff --git a/win-linux/res/styles/tabbar@1.75x.qss b/win-linux/res/styles/tabbar@1.75x.qss index 9d9b7748d..8b1378917 100644 --- a/win-linux/res/styles/tabbar@1.75x.qss +++ b/win-linux/res/styles/tabbar@1.75x.qss @@ -1,24 +1 @@ -QTabWidget::pane {background-color: #f1f1f1; border: none;} -QTabBar::tab {width: 236px; background-color: #f1f1f1; border: 0 none; border-right: 2px solid #a5a5a5; min-width: 72px; max-width: 236px; -height: 49px; margin: 0 0 0 0;} -QTabBar::tab:hover {background-color: #cecece;} -QTabBar::tab-label {active: #fff; normal: #444;} -QTabBar::tab-icon {width: 15; height: 15;} -QTabBar[active=false]::tab:selected {background-color: #f1f1f1;} -QTabBar[active=true]::tab:selected {background-color: #f1f1f1;} -QTabBar[active=false]::tab:selected:hover {background-color: #cecece;} - -#mainPanel[uitheme=theme-light] QTabBar::tab {border-right-color:#dfdfdf;} - -#mainPanel[uitheme=theme-classic-light] QTabBar::tab {border-right-color:#cbcbcb;} - -#mainPanel[uitheme=theme-dark] QTabWidget::pane {background-color: #404040;} -#mainPanel[uitheme=theme-dark] QTabBar::tab {background-color: #404040; border-right-color: #505050;} -#mainPanel[uitheme=theme-dark] QTabBar::tab:hover {background-color: #555;} -#mainPanel[uitheme=theme-dark] QTabBar::tab:selected {background-color: #404040;} -#mainPanel[uitheme=theme-dark] QTabBar[active=false]::tab:selected:hover {background-color: #555;} - -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton {background-color: #404040;} -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton:hover {background-color: #555;} -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton:pressed {background-color: #606060;} diff --git a/win-linux/res/styles/tabbar@1x.qss b/win-linux/res/styles/tabbar@1x.qss index 908043582..139597f9c 100644 --- a/win-linux/res/styles/tabbar@1x.qss +++ b/win-linux/res/styles/tabbar@1x.qss @@ -1,24 +1,2 @@ -QTabWidget::pane {background-color: #f1f1f1; border: none;} -QTabBar::tab {width: 135px; background-color: #f1f1f1; border: 0 none; border-right: 1px solid #a5a5a5; min-width: 41px; max-width: 135px; -height: 28px; margin: 0 0 0 0;} -QTabBar::tab:hover {background-color: #cecece;} -QTabBar::tab-label {active: #fff; normal: #444;} -QTabBar::tab-icon {width: 15; height: 15;} -QTabBar[active=false]::tab:selected {background-color: #f1f1f1;} -QTabBar[active=true]::tab:selected {background-color: #f1f1f1;} -QTabBar[active=false]::tab:selected:hover {background-color: #cecece;} -#mainPanel[uitheme=theme-light] QTabBar::tab {border-right-color:#dfdfdf;} - -#mainPanel[uitheme=theme-classic-light] QTabBar::tab {border-right-color:#cbcbcb;} - -#mainPanel[uitheme=theme-dark] QTabWidget::pane {background-color: #404040;} -#mainPanel[uitheme=theme-dark] QTabBar::tab {background-color: #404040; border-right-color: #505050;} -#mainPanel[uitheme=theme-dark] QTabBar::tab:hover {background-color: #555;} -#mainPanel[uitheme=theme-dark] QTabBar::tab:selected {background-color: #404040;} -#mainPanel[uitheme=theme-dark] QTabBar[active=false]::tab:selected:hover {background-color: #555;} - -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton {background-color: #404040;} -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton:hover {background-color: #555;} -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton:pressed {background-color: #606060;} diff --git a/win-linux/res/styles/tabbar@2.5x.qss b/win-linux/res/styles/tabbar@2.5x.qss index a1d3b8dd8..e69de29bb 100644 --- a/win-linux/res/styles/tabbar@2.5x.qss +++ b/win-linux/res/styles/tabbar@2.5x.qss @@ -1,24 +0,0 @@ - -QTabWidget::pane {background-color: #f1f1f1; border: none;} -QTabBar::tab {width: 270px; background-color: #f1f1f1; border: 0 none; border-right: 2px solid #a5a5a5; min-width: 82px; max-width: 270px; -height: 56px; margin: 0 0 0 0;} -QTabBar::tab:hover {background-color: #cecece;} -QTabBar::tab-label {active: #fff; normal: #444;} -QTabBar::tab-icon {width: 15; height: 15;} -QTabBar[active=false]::tab:selected {background-color: #f1f1f1;} -QTabBar[active=true]::tab:selected {background-color: #f1f1f1;} -QTabBar[active=false]::tab:selected:hover {background-color: #cecece;} - -#mainPanel[uitheme=theme-light] QTabBar::tab {border-right-color:#dfdfdf;} - -#mainPanel[uitheme=theme-classic-light] QTabBar::tab {border-right-color:#cbcbcb;} - -#mainPanel[uitheme=theme-dark] QTabWidget::pane {background-color: #404040;} -#mainPanel[uitheme=theme-dark] QTabBar::tab {background-color: #404040; border-right-color: #505050;} -#mainPanel[uitheme=theme-dark] QTabBar::tab:hover {background-color: #555;} -#mainPanel[uitheme=theme-dark] QTabBar::tab:selected {background-color: #404040;} -#mainPanel[uitheme=theme-dark] QTabBar[active=false]::tab:selected:hover {background-color: #555;} - -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton {background-color: #404040;} -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton:hover {background-color: #555;} -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton:pressed {background-color: #606060;} diff --git a/win-linux/res/styles/tabbar@2x.qss b/win-linux/res/styles/tabbar@2x.qss index a1d3b8dd8..139597f9c 100644 --- a/win-linux/res/styles/tabbar@2x.qss +++ b/win-linux/res/styles/tabbar@2x.qss @@ -1,24 +1,2 @@ -QTabWidget::pane {background-color: #f1f1f1; border: none;} -QTabBar::tab {width: 270px; background-color: #f1f1f1; border: 0 none; border-right: 2px solid #a5a5a5; min-width: 82px; max-width: 270px; -height: 56px; margin: 0 0 0 0;} -QTabBar::tab:hover {background-color: #cecece;} -QTabBar::tab-label {active: #fff; normal: #444;} -QTabBar::tab-icon {width: 15; height: 15;} -QTabBar[active=false]::tab:selected {background-color: #f1f1f1;} -QTabBar[active=true]::tab:selected {background-color: #f1f1f1;} -QTabBar[active=false]::tab:selected:hover {background-color: #cecece;} -#mainPanel[uitheme=theme-light] QTabBar::tab {border-right-color:#dfdfdf;} - -#mainPanel[uitheme=theme-classic-light] QTabBar::tab {border-right-color:#cbcbcb;} - -#mainPanel[uitheme=theme-dark] QTabWidget::pane {background-color: #404040;} -#mainPanel[uitheme=theme-dark] QTabBar::tab {background-color: #404040; border-right-color: #505050;} -#mainPanel[uitheme=theme-dark] QTabBar::tab:hover {background-color: #555;} -#mainPanel[uitheme=theme-dark] QTabBar::tab:selected {background-color: #404040;} -#mainPanel[uitheme=theme-dark] QTabBar[active=false]::tab:selected:hover {background-color: #555;} - -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton {background-color: #404040;} -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton:hover {background-color: #555;} -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton:pressed {background-color: #606060;} diff --git a/win-linux/res/styles/tabbar_nix.qss b/win-linux/res/styles/tabbar_nix.qss index 73fa1ca9b..5c60655a2 100644 --- a/win-linux/res/styles/tabbar_nix.qss +++ b/win-linux/res/styles/tabbar_nix.qss @@ -1,4 +1,4 @@ - +/* QTabWidget::pane {border: none;} QTabBar::tab {width: 135px; background-color: #c2c2c2; border: 0 none; border-right: 1px solid #a5a5a5; min-width: 41px; max-width: 135px; height: 28px; margin: 0 0 0 0;} @@ -25,3 +25,4 @@ QTabBar[active=false]::tab:selected:hover {background-color: #cfcfcf;} #mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton {background-color: #606060;} #mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton:hover {background-color: #555;} #mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton:pressed {background-color: #b7b7b7;} +*/ diff --git a/win-linux/res/styles/tabbar_nix@2x.qss b/win-linux/res/styles/tabbar_nix@2x.qss index b8b13b634..1838f3f09 100644 --- a/win-linux/res/styles/tabbar_nix@2x.qss +++ b/win-linux/res/styles/tabbar_nix@2x.qss @@ -1,4 +1,4 @@ - +/* QTabWidget::pane {border: none;} QTabBar::tab {width: 270px; background-color: #c2c2c2; border: 0 none; border-right: 2px solid #a5a5a5; min-width: 82px; max-width: 270px; height: 56px; margin: 0 0 0 0;} @@ -25,3 +25,4 @@ QTabBar[active=false]::tab:selected:hover {background-color: #cfcfcf;} #mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton {background-color: #606060;} #mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton:hover {background-color: #555;} #mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton:pressed {background-color: #b7b7b7;} +*/ From 57806c0221a1f5033ce78709bd1a639ba96e2b03 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Mon, 10 Apr 2023 17:51:20 +0300 Subject: [PATCH 005/298] [win-linux] add svg --- .../res/icons/tabbar/scroll_left_pressed.svg | 46 +++++++++++++++++++ .../res/icons/tabbar/scroll_right_pressed.svg | 45 ++++++++++++++++++ win-linux/res/styles/styles.qss | 4 +- win-linux/resources.qrc | 2 + 4 files changed, 95 insertions(+), 2 deletions(-) create mode 100644 win-linux/res/icons/tabbar/scroll_left_pressed.svg create mode 100644 win-linux/res/icons/tabbar/scroll_right_pressed.svg diff --git a/win-linux/res/icons/tabbar/scroll_left_pressed.svg b/win-linux/res/icons/tabbar/scroll_left_pressed.svg new file mode 100644 index 000000000..87a4ed7fc --- /dev/null +++ b/win-linux/res/icons/tabbar/scroll_left_pressed.svg @@ -0,0 +1,46 @@ + + diff --git a/win-linux/res/icons/tabbar/scroll_right_pressed.svg b/win-linux/res/icons/tabbar/scroll_right_pressed.svg new file mode 100644 index 000000000..fe23c9e52 --- /dev/null +++ b/win-linux/res/icons/tabbar/scroll_right_pressed.svg @@ -0,0 +1,45 @@ + + diff --git a/win-linux/res/styles/styles.qss b/win-linux/res/styles/styles.qss index 3c8701eea..23a923ee1 100644 --- a/win-linux/res/styles/styles.qss +++ b/win-linux/res/styles/styles.qss @@ -52,7 +52,7 @@ image: url(:/tabbar/icons/scrolltab_lh.svg) center no-repeat; } #scrollerFrame>QToolButton#leftButton:pressed { - image: url(:/tabbar/icons/scrolltab_lp.png) center no-repeat; + image: url(:/tabbar/icons/scrolltab_lp.svg) center no-repeat; } #scrollerFrame>QToolButton#rightButton { @@ -65,7 +65,7 @@ image: url(:/tabbar/icons/scrolltab_rh.svg) center no-repeat; } #scrollerFrame>QToolButton#rightButton:pressed { - image: url(:/tabbar/icons/scrolltab_rp.png) center no-repeat; + image: url(:/tabbar/icons/scrolltab_rp.svg) center no-repeat; } /* Dark */ diff --git a/win-linux/resources.qrc b/win-linux/resources.qrc index 16d96e4be..8343c9642 100644 --- a/win-linux/resources.qrc +++ b/win-linux/resources.qrc @@ -194,9 +194,11 @@ res/icons/tabbar/scroll_left_normal.svg res/icons/tabbar/scroll_left_disabled.svg res/icons/tabbar/scroll_left_hover.svg + res/icons/tabbar/scroll_left_pressed.svg res/icons/tabbar/scroll_right_normal.svg res/icons/tabbar/scroll_right_disabled.svg res/icons/tabbar/scroll_right_hover.svg + res/icons/tabbar/scroll_right_pressed.svg res/icons/webeditor/buttons.svg From 4559889b086adf12e1e0b2d75a67f8ed818955b4 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Tue, 11 Apr 2023 09:54:21 +0300 Subject: [PATCH 006/298] [linux] fixed distance between tabbar scroller arrows for some OS --- win-linux/src/main.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/win-linux/src/main.cpp b/win-linux/src/main.cpp index d5fd572fc..0c9ff6329 100644 --- a/win-linux/src/main.cpp +++ b/win-linux/src/main.cpp @@ -60,6 +60,7 @@ int main( int argc, char *argv[] ) WindowHelper::initEnvInfo(); #endif QCoreApplication::setAttribute(Qt::AA_DisableHighDpiScaling); + QCoreApplication::setAttribute(Qt::AA_Use96Dpi); QCoreApplication::setApplicationName(QString::fromUtf8(WINDOW_NAME)); QApplication::setApplicationDisplayName(QString::fromUtf8(WINDOW_NAME)); From 9309f8711071552418284813651d8ca9c5fa9c12 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Tue, 11 Apr 2023 16:27:21 +0300 Subject: [PATCH 007/298] [win-linux] adaptation for min/max/close buttons and refactoring --- win-linux/res/icons/close.svg | 48 +++++++++++++ win-linux/res/icons/close_light.svg | 48 +++++++++++++ win-linux/res/icons/maximize.svg | 46 ++++++++++++ win-linux/res/icons/maximize_light.svg | 46 ++++++++++++ win-linux/res/icons/minimize.svg | 42 +++++++++++ win-linux/res/icons/minimize_light.svg | 41 +++++++++++ win-linux/res/icons/restore.svg | 44 ++++++++++++ win-linux/res/icons/restore_light.svg | 46 ++++++++++++ win-linux/res/styles/styles.qss | 92 ++++++++---------------- win-linux/res/styles/styles@1.25x.qss | 29 -------- win-linux/res/styles/styles@1.5x.qss | 29 -------- win-linux/res/styles/styles@1.75x.qss | 30 -------- win-linux/res/styles/styles@2x.qss | 28 -------- win-linux/resources.qrc | 98 +++----------------------- 14 files changed, 397 insertions(+), 270 deletions(-) create mode 100644 win-linux/res/icons/close.svg create mode 100644 win-linux/res/icons/close_light.svg create mode 100644 win-linux/res/icons/maximize.svg create mode 100644 win-linux/res/icons/maximize_light.svg create mode 100644 win-linux/res/icons/minimize.svg create mode 100644 win-linux/res/icons/minimize_light.svg create mode 100644 win-linux/res/icons/restore.svg create mode 100644 win-linux/res/icons/restore_light.svg diff --git a/win-linux/res/icons/close.svg b/win-linux/res/icons/close.svg new file mode 100644 index 000000000..049075c45 --- /dev/null +++ b/win-linux/res/icons/close.svg @@ -0,0 +1,48 @@ + + diff --git a/win-linux/res/icons/close_light.svg b/win-linux/res/icons/close_light.svg new file mode 100644 index 000000000..143579e52 --- /dev/null +++ b/win-linux/res/icons/close_light.svg @@ -0,0 +1,48 @@ + + diff --git a/win-linux/res/icons/maximize.svg b/win-linux/res/icons/maximize.svg new file mode 100644 index 000000000..adbed6714 --- /dev/null +++ b/win-linux/res/icons/maximize.svg @@ -0,0 +1,46 @@ + + diff --git a/win-linux/res/icons/maximize_light.svg b/win-linux/res/icons/maximize_light.svg new file mode 100644 index 000000000..006157c0e --- /dev/null +++ b/win-linux/res/icons/maximize_light.svg @@ -0,0 +1,46 @@ + + diff --git a/win-linux/res/icons/minimize.svg b/win-linux/res/icons/minimize.svg new file mode 100644 index 000000000..1bf9b225e --- /dev/null +++ b/win-linux/res/icons/minimize.svg @@ -0,0 +1,42 @@ + + diff --git a/win-linux/res/icons/minimize_light.svg b/win-linux/res/icons/minimize_light.svg new file mode 100644 index 000000000..8ef2ae0b0 --- /dev/null +++ b/win-linux/res/icons/minimize_light.svg @@ -0,0 +1,41 @@ + + diff --git a/win-linux/res/icons/restore.svg b/win-linux/res/icons/restore.svg new file mode 100644 index 000000000..d701179d0 --- /dev/null +++ b/win-linux/res/icons/restore.svg @@ -0,0 +1,44 @@ + + diff --git a/win-linux/res/icons/restore_light.svg b/win-linux/res/icons/restore_light.svg new file mode 100644 index 000000000..f00a0edea --- /dev/null +++ b/win-linux/res/icons/restore_light.svg @@ -0,0 +1,46 @@ + + diff --git a/win-linux/res/styles/styles.qss b/win-linux/res/styles/styles.qss index 23a923ee1..a1a6f281c 100644 --- a/win-linux/res/styles/styles.qss +++ b/win-linux/res/styles/styles.qss @@ -29,7 +29,6 @@ max-width: 32px; border: none; background: transparent; } - #scrollerFrame>QToolButton { max-height: 28px; margin: 0px; @@ -68,63 +67,42 @@ image: url(:/tabbar/icons/scrolltab_rp.svg) center no-repeat; } -/* Dark */ -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#leftButton { - image: url(:/tabbar/icons/scrolltab_ln_light.svg) center no-repeat; -} -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#leftButton:disabled { - image: url(:/tabbar/icons/scrolltab_ld_light.svg) center no-repeat; -} -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#leftButton:hover { - image: url(:/tabbar/icons/scrolltab_lh_light.svg) center no-repeat; -} -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#leftButton:pressed { - image: url(:/tabbar/icons/scrolltab_lp_light.svg) center no-repeat; -} - - -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#rightButton { - image: url(:/tabbar/icons/scrolltab_rn_light.svg) center no-repeat; -} -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#rightButton:disabled { - image: url(:/tabbar/icons/scrolltab_rd_light.svg) center no-repeat; -} -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#rightButton:hover { - image: url(:/tabbar/icons/scrolltab_rh_light.svg) center no-repeat; -} -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#rightButton:pressed { - image: url(:/tabbar/icons/scrolltab_rp_light.svg) center no-repeat; -} - -/* Contrast-dark*/ +/* Dark, Contrast-Dark */ +#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#leftButton, #mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton#leftButton { image: url(:/tabbar/icons/scrolltab_ln_light.svg) center no-repeat; } +#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#leftButton:disabled, #mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton#leftButton:disabled { image: url(:/tabbar/icons/scrolltab_ld_light.svg) center no-repeat; } +#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#leftButton:hover, #mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton#leftButton:hover { image: url(:/tabbar/icons/scrolltab_lh_light.svg) center no-repeat; } +#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#leftButton:pressed, #mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton#leftButton:pressed { image: url(:/tabbar/icons/scrolltab_lp_light.svg) center no-repeat; } +#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#rightButton, #mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton#rightButton { image: url(:/tabbar/icons/scrolltab_rn_light.svg) center no-repeat; } +#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#rightButton:disabled, #mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton#rightButton:disabled { image: url(:/tabbar/icons/scrolltab_rd_light.svg) center no-repeat; } +#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#rightButton:hover, #mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton#rightButton:hover { - image: url(:/tabbar/icons/scrolltab_rh_light.png) center no-repeat; + image: url(:/tabbar/icons/scrolltab_rh_light.svg) center no-repeat; } +#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#rightButton:pressed, #mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton#rightButton:pressed { image: url(:/tabbar/icons/scrolltab_rp_light.svg) center no-repeat; } - QPushButton#toolButtonMaximize, QPushButton#toolButtonMain, QPushButton#toolButtonMinimize, QPushButton#toolButtonClose, QPushButton#toolButtonDownload { @@ -171,48 +149,28 @@ QPushButton#toolButtonClose:pressed { } QPushButton#toolButtonMaximize { - background-image:url(:/res/icons/maximize.png); + image: url(:/restore.svg) center no-repeat; } QPushButton#toolButtonMaximize[class=normal] { background-position: left top; } -QPushButton#toolButtonMaximize[class=normal]:hover, - QPushButton#pushButtonMaximize[class=normal]:pressed { - background-position: right top; -} - - QPushButton#toolButtonMaximize[class=min] { - background-position: left bottom; -} - -QPushButton#toolButtonMaximize[class=min]:hover, - QPushButton#toolButtonMaximize[class=min]:pressed { - background-position: right bottom; -} - -QPushButton#toolButtonMinimize, QPushButton#toolButtonClose { - background-image:url(:/res/icons/minimize-close.png); + image: url(:/maximize.svg) center no-repeat; } -QPushButton#toolButtonMinimize[class=normal] { - background-position: left top; +QPushButton#toolButtonMinimize { + image: url(:/minimize.svg) center no-repeat; } -QPushButton#toolButtonMinimize[class=normal]:hover, - QPushButton#toolButtonMinimize[class=normal]:pressed { - background-position: right top; -} - -QPushButton#toolButtonClose[class=normal] { - background-position: left bottom; +QPushButton#toolButtonClose { + image: url(:/close.svg) center no-repeat; } QPushButton#toolButtonClose[class=normal]:hover, QPushButton#toolButtonClose[class=normal]:pressed { - background-position: right bottom; + image: url(:/close_light.svg) center no-repeat; } QPushButton#toolButtonMain { @@ -327,13 +285,19 @@ QPushButton#toolButtonDownload::menu-indicator { } #mainPanel[uithemetype=dark] QPushButton#toolButtonMaximize { - background-image:url(:/max_light.png); + image: url(:/restore_light.svg) center no-repeat; } -#mainPanel[uithemetype=dark] QPushButton#toolButtonMinimize, - #mainPanel[uithemetype=dark] QPushButton#toolButtonClose -{ - background-image:url(:/minclose_light.png); +#mainPanel[uithemetype=dark] QPushButton#toolButtonMaximize[class=min] { + image: url(:/maximize_light.svg) center no-repeat; +} + +#mainPanel[uithemetype=dark] QPushButton#toolButtonMinimize { + image: url(:/minimize_light.svg) center no-repeat; +} + +#mainPanel[uithemetype=dark] QPushButton#toolButtonClose { + image: url(:/close_light.svg) center no-repeat; } #mainPanel[uitheme=theme-dark] QPushButton#toolButtonMinimize:hover, diff --git a/win-linux/res/styles/styles@1.25x.qss b/win-linux/res/styles/styles@1.25x.qss index 546c602cf..616447667 100644 --- a/win-linux/res/styles/styles@1.25x.qss +++ b/win-linux/res/styles/styles@1.25x.qss @@ -21,14 +21,6 @@ max-height: 35px; } -#scrollerFrame>QToolButton#leftButton:pressed { - image: url(:/tabbar/icons/scrolltab_lp_1.25x.png) center no-repeat; -} - - -#scrollerFrame>QToolButton#rightButton:pressed { - image: url(:/tabbar/icons/scrolltab_rp_1.25x.png) center no-repeat; -} QPushButton#toolButtonDownload { padding: 7px; @@ -38,15 +30,6 @@ QPushButton#toolButtonMaximize,QPushButton#toolButtonMinimize, QPushButton#toolButtonClose { padding: 6px 15px 9px; } - -QPushButton#toolButtonMaximize { - background-image:url(:/maximize_1.25x.png); -} - -QPushButton#toolButtonMinimize, QPushButton#toolButtonClose { - background-image:url(:/minimize-close_1.25x.png); -} - QPushButton#toolButtonMain { border-right-width: 1px; } @@ -87,18 +70,6 @@ QPushButton#toolButtonDownload::menu-indicator { /* dark theme definitions */ /**************************/ -#mainPanel[uithemetype=dark] QPushButton#toolButtonMaximize { - background-image:url(:/max_light_1.25x.png); -} - -#mainPanel[uithemetype=dark] QPushButton#toolButtonMinimize, - #mainPanel[uithemetype=dark] QPushButton#toolButtonClose -{ - background-image:url(:/minclose_light_1.25x.png); -} - -/**************************/ - QTabBar { font-size: 14px; } diff --git a/win-linux/res/styles/styles@1.5x.qss b/win-linux/res/styles/styles@1.5x.qss index 1859f3331..4f30efe02 100644 --- a/win-linux/res/styles/styles@1.5x.qss +++ b/win-linux/res/styles/styles@1.5x.qss @@ -21,14 +21,6 @@ max-height: 42px; } -#scrollerFrame>QToolButton#leftButton:pressed { - image: url(:/tabbar/icons/scrolltab_lp_1.5x.png) center no-repeat; -} - - -#scrollerFrame>QToolButton#rightButton:pressed { - image: url(:/tabbar/icons/scrolltab_rp_1.5x.png) center no-repeat; -} QPushButton#toolButtonDownload { padding: 9px; @@ -38,15 +30,6 @@ QPushButton#toolButtonMaximize,QPushButton#toolButtonMinimize, QPushButton#toolButtonClose { padding: 8px 18px 11px; } - -QPushButton#toolButtonMaximize { - background-image:url(:/maximize_1.5x.png); -} - -QPushButton#toolButtonMinimize, QPushButton#toolButtonClose { - background-image:url(:/minimize-close_1.5x.png); -} - QPushButton#toolButtonMain { /*font-size: 20px;*/ border-right-width: 2px; @@ -88,18 +71,6 @@ QPushButton#toolButtonDownload::menu-indicator { /* dark theme definitions */ /**************************/ -#mainPanel[uithemetype=dark] QPushButton#toolButtonMaximize { - background-image:url(:/max_light_1.5x.png); -} - -#mainPanel[uithemetype=dark] QPushButton#toolButtonMinimize, - #mainPanel[uithemetype=dark] QPushButton#toolButtonClose -{ - background-image:url(:/minclose_light_1.5x.png); -} - -/**************************/ - QTabBar { font-size: 15px; } diff --git a/win-linux/res/styles/styles@1.75x.qss b/win-linux/res/styles/styles@1.75x.qss index c32bd9349..95926cdd5 100644 --- a/win-linux/res/styles/styles@1.75x.qss +++ b/win-linux/res/styles/styles@1.75x.qss @@ -21,15 +21,6 @@ max-height: 49px; } -#scrollerFrame>QToolButton#leftButton:pressed { - image: url(:/tabbar/icons/scrolltab_lp_1.75x.png) center no-repeat; -} - - -#scrollerFrame>QToolButton#rightButton:pressed { - image: url(:/tabbar/icons/scrolltab_rp_1.75x.png) center no-repeat; -} - QPushButton#toolButtonDownload { padding: 11px; } @@ -38,15 +29,6 @@ QPushButton#toolButtonMaximize,QPushButton#toolButtonMinimize, QPushButton#toolButtonClose { padding: 9px 21px 13px; } - -QPushButton#toolButtonMaximize { - background-image:url(:/maximize_1.75x.png); -} - -QPushButton#toolButtonMinimize, QPushButton#toolButtonClose { - background-image:url(:/minimize-close_1.75x.png); -} - QPushButton#toolButtonMain { /*font-size: 20px;*/ border-right-width: 2px; @@ -88,18 +70,6 @@ QPushButton#toolButtonDownload::menu-indicator { /* dark theme definitions */ /**************************/ -#mainPanel[uithemetype=dark] QPushButton#toolButtonMaximize { - background-image:url(:/max_light_1.75x.png); -} - -#mainPanel[uithemetype=dark] QPushButton#toolButtonMinimize, - #mainPanel[uithemetype=dark] QPushButton#toolButtonClose -{ - background-image:url(:/minclose_light_1.75x.png); -} - -/**************************/ - QTabBar { font-size: 18px; } diff --git a/win-linux/res/styles/styles@2x.qss b/win-linux/res/styles/styles@2x.qss index f80d6199c..3afc21a86 100644 --- a/win-linux/res/styles/styles@2x.qss +++ b/win-linux/res/styles/styles@2x.qss @@ -21,14 +21,6 @@ max-height: 56px; } -#scrollerFrame>QToolButton#leftButton:pressed { - image: url(:/tabbar/icons/scrolltab_lp_2x.png) center no-repeat; -} - - -#scrollerFrame>QToolButton#rightButton:pressed { - image: url(:/tabbar/icons/scrolltab_rp_2x.png) center no-repeat; -} QPushButton#toolButtonDownload { padding: 12px; @@ -39,14 +31,6 @@ QPushButton#toolButtonMaximize,QPushButton#toolButtonMinimize, padding: 10px 24px 14px; } -QPushButton#toolButtonMaximize { - background-image:url(:/maximize_2x.png); -} - -QPushButton#toolButtonMinimize, QPushButton#toolButtonClose { - background-image:url(:/minimize-close_2x.png); -} - QPushButton#toolButtonMain { font-size: 20px; border-right-width: 2px; @@ -96,18 +80,6 @@ QPushButton#toolButtonDownload::menu-indicator { /* dark theme definitions */ /**************************/ -#mainPanel[uithemetype=dark] QPushButton#toolButtonMaximize { - background-image:url(:/max_light_2x.png); -} - -#mainPanel[uithemetype=dark] QPushButton#toolButtonMinimize, - #mainPanel[uithemetype=dark] QPushButton#toolButtonClose -{ - background-image:url(:/minclose_light_2x.png); -} - -/**************************/ - QTabBar { font-size: 20px; } diff --git a/win-linux/resources.qrc b/win-linux/resources.qrc index 8343c9642..f615add81 100644 --- a/win-linux/resources.qrc +++ b/win-linux/resources.qrc @@ -18,6 +18,14 @@ res/icons/minimize-close@1.5x.png res/icons/minimize-close@1.75x.png res/icons/minimize-close@2x.png + res/icons/close.svg + res/icons/close_light.svg + res/icons/minimize.svg + res/icons/minimize_light.svg + res/icons/maximize.svg + res/icons/maximize_light.svg + res/icons/restore.svg + res/icons/restore_light.svg res/icons/maximize.png res/icons/maximize@1.25x.png res/icons/maximize@1.5x.png @@ -60,86 +68,6 @@ res/icons/minimize-close_light@2x.png - res/icons/tabbar/changetab_left_active.png - res/icons/tabbar/changetab_left_active@1.25x.png - res/icons/tabbar/changetab_left_active@1.5x.png - res/icons/tabbar/changetab_left_active@1.75x.png - res/icons/tabbar/changetab_left_active@2x.png - res/icons/tabbar/changetab_left_disabled.png - res/icons/tabbar/changetab_left_disabled@1.25x.png - res/icons/tabbar/changetab_left_disabled@1.5x.png - res/icons/tabbar/changetab_left_disabled@1.75x.png - res/icons/tabbar/changetab_left_disabled@2x.png - res/icons/tabbar/changetab_left_hover.png - res/icons/tabbar/changetab_left_hover@1.25x.png - res/icons/tabbar/changetab_left_hover@1.5x.png - res/icons/tabbar/changetab_left_hover@1.75x.png - res/icons/tabbar/changetab_left_hover@2x.png - res/icons/tabbar/changetab_left_normal.png - res/icons/tabbar/changetab_left_normal@1.25x.png - res/icons/tabbar/changetab_left_normal@1.5x.png - res/icons/tabbar/changetab_left_normal@1.75x.png - res/icons/tabbar/changetab_left_normal@2x.png - res/icons/tabbar/changetab_right_active.png - res/icons/tabbar/changetab_right_active@1.25x.png - res/icons/tabbar/changetab_right_active@1.5x.png - res/icons/tabbar/changetab_right_active@1.75x.png - res/icons/tabbar/changetab_right_active@2x.png - res/icons/tabbar/changetab_right_disabled.png - res/icons/tabbar/changetab_right_disabled@1.25x.png - res/icons/tabbar/changetab_right_disabled@1.5x.png - res/icons/tabbar/changetab_right_disabled@1.75x.png - res/icons/tabbar/changetab_right_disabled@2x.png - res/icons/tabbar/changetab_right_hover.png - res/icons/tabbar/changetab_right_hover@1.25x.png - res/icons/tabbar/changetab_right_hover@1.5x.png - res/icons/tabbar/changetab_right_hover@1.75x.png - res/icons/tabbar/changetab_right_hover@2x.png - res/icons/tabbar/changetab_right_normal.png - res/icons/tabbar/changetab_right_normal@1.25x.png - res/icons/tabbar/changetab_right_normal@1.5x.png - res/icons/tabbar/changetab_right_normal@1.75x.png - res/icons/tabbar/changetab_right_normal@2x.png - res/icons/tabbar/changetab_left_active_light.png - res/icons/tabbar/changetab_left_active_light@1.5x.png - res/icons/tabbar/changetab_left_active_light@1.25x.png - res/icons/tabbar/changetab_left_active_light@1.75x.png - res/icons/tabbar/changetab_left_active_light@2x.png - res/icons/tabbar/changetab_left_disabled_light.png - res/icons/tabbar/changetab_left_disabled_light@1.5x.png - res/icons/tabbar/changetab_left_disabled_light@1.25x.png - res/icons/tabbar/changetab_left_disabled_light@1.75x.png - res/icons/tabbar/changetab_left_disabled_light@2x.png - res/icons/tabbar/changetab_left_hover_light.png - res/icons/tabbar/changetab_left_hover_light@1.5x.png - res/icons/tabbar/changetab_left_hover_light@1.25x.png - res/icons/tabbar/changetab_left_hover_light@1.75x.png - res/icons/tabbar/changetab_left_hover_light@2x.png - res/icons/tabbar/changetab_left_normal_light.png - res/icons/tabbar/changetab_left_normal_light@1.5x.png - res/icons/tabbar/changetab_left_normal_light@1.25x.png - res/icons/tabbar/changetab_left_normal_light@1.75x.png - res/icons/tabbar/changetab_left_normal_light@2x.png - res/icons/tabbar/changetab_right_active_light.png - res/icons/tabbar/changetab_right_active_light@1.5x.png - res/icons/tabbar/changetab_right_active_light@1.25x.png - res/icons/tabbar/changetab_right_active_light@1.75x.png - res/icons/tabbar/changetab_right_active_light@2x.png - res/icons/tabbar/changetab_right_disabled_light.png - res/icons/tabbar/changetab_right_disabled_light@1.5x.png - res/icons/tabbar/changetab_right_disabled_light@1.25x.png - res/icons/tabbar/changetab_right_disabled_light@1.75x.png - res/icons/tabbar/changetab_right_disabled_light@2x.png - res/icons/tabbar/changetab_right_hover_light.png - res/icons/tabbar/changetab_right_hover_light@1.5x.png - res/icons/tabbar/changetab_right_hover_light@1.25x.png - res/icons/tabbar/changetab_right_hover_light@1.75x.png - res/icons/tabbar/changetab_right_hover_light@2x.png - res/icons/tabbar/changetab_right_normal_light.png - res/icons/tabbar/changetab_right_normal_light@1.5x.png - res/icons/tabbar/changetab_right_normal_light@1.25x.png - res/icons/tabbar/changetab_right_normal_light@1.75x.png - res/icons/tabbar/changetab_right_normal_light@2x.png res/icons/tabbar/tabicon_de_normal.png res/icons/tabbar/tabicon_de_normal_1.25x.png res/icons/tabbar/tabicon_de_normal_1.5x.png @@ -264,16 +192,6 @@ langs/zh_HK.qm langs/qtbase_ru.qm - - res/styles/tabbar@1x.qss - res/styles/tabbar_nix.qss - res/styles/tabbar@1.25x.qss - res/styles/tabbar@1.5x.qss - res/styles/tabbar@1.75x.qss - res/styles/tabbar@2x.qss - res/styles/tabbar_nix@2x.qss - res/styles/tabbar@2.5x.qss - res/styles/theme-light.json res/styles/theme-classic-light.json From f12c9474341a2fc5bf21c5ae942317c8f78e7515 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Tue, 11 Apr 2023 20:08:16 +0300 Subject: [PATCH 008/298] [win-linux] adaptation for tab icons and refactoring --- win-linux/res/icons/tabbar/portal.svg | 63 +++++++++++++++++++ win-linux/res/icons/tabbar/portal_light.svg | 60 ++++++++++++++++++ .../res/icons/tabbar/tabicon_de_normal.svg | 52 +++++++++++++++ .../res/icons/tabbar/tabicon_docxf_normal.svg | 55 ++++++++++++++++ .../res/icons/tabbar/tabicon_oform_normal.svg | 60 ++++++++++++++++++ .../res/icons/tabbar/tabicon_pe_normal.svg | 49 +++++++++++++++ .../res/icons/tabbar/tabicon_se_normal.svg | 59 +++++++++++++++++ win-linux/resources.qrc | 36 ++--------- win-linux/src/components/asctabwidget.cpp | 18 +++--- 9 files changed, 413 insertions(+), 39 deletions(-) create mode 100644 win-linux/res/icons/tabbar/portal.svg create mode 100644 win-linux/res/icons/tabbar/portal_light.svg create mode 100644 win-linux/res/icons/tabbar/tabicon_de_normal.svg create mode 100644 win-linux/res/icons/tabbar/tabicon_docxf_normal.svg create mode 100644 win-linux/res/icons/tabbar/tabicon_oform_normal.svg create mode 100644 win-linux/res/icons/tabbar/tabicon_pe_normal.svg create mode 100644 win-linux/res/icons/tabbar/tabicon_se_normal.svg diff --git a/win-linux/res/icons/tabbar/portal.svg b/win-linux/res/icons/tabbar/portal.svg new file mode 100644 index 000000000..58d7f1ca6 --- /dev/null +++ b/win-linux/res/icons/tabbar/portal.svg @@ -0,0 +1,63 @@ + + diff --git a/win-linux/res/icons/tabbar/portal_light.svg b/win-linux/res/icons/tabbar/portal_light.svg new file mode 100644 index 000000000..278891c63 --- /dev/null +++ b/win-linux/res/icons/tabbar/portal_light.svg @@ -0,0 +1,60 @@ + + diff --git a/win-linux/res/icons/tabbar/tabicon_de_normal.svg b/win-linux/res/icons/tabbar/tabicon_de_normal.svg new file mode 100644 index 000000000..3203471cd --- /dev/null +++ b/win-linux/res/icons/tabbar/tabicon_de_normal.svg @@ -0,0 +1,52 @@ + + diff --git a/win-linux/res/icons/tabbar/tabicon_docxf_normal.svg b/win-linux/res/icons/tabbar/tabicon_docxf_normal.svg new file mode 100644 index 000000000..a07df73ae --- /dev/null +++ b/win-linux/res/icons/tabbar/tabicon_docxf_normal.svg @@ -0,0 +1,55 @@ + + diff --git a/win-linux/res/icons/tabbar/tabicon_oform_normal.svg b/win-linux/res/icons/tabbar/tabicon_oform_normal.svg new file mode 100644 index 000000000..d16d13a1f --- /dev/null +++ b/win-linux/res/icons/tabbar/tabicon_oform_normal.svg @@ -0,0 +1,60 @@ + + diff --git a/win-linux/res/icons/tabbar/tabicon_pe_normal.svg b/win-linux/res/icons/tabbar/tabicon_pe_normal.svg new file mode 100644 index 000000000..877bdaeb6 --- /dev/null +++ b/win-linux/res/icons/tabbar/tabicon_pe_normal.svg @@ -0,0 +1,49 @@ + + diff --git a/win-linux/res/icons/tabbar/tabicon_se_normal.svg b/win-linux/res/icons/tabbar/tabicon_se_normal.svg new file mode 100644 index 000000000..88dae6141 --- /dev/null +++ b/win-linux/res/icons/tabbar/tabicon_se_normal.svg @@ -0,0 +1,59 @@ + + diff --git a/win-linux/resources.qrc b/win-linux/resources.qrc index f615add81..d63c6446b 100644 --- a/win-linux/resources.qrc +++ b/win-linux/resources.qrc @@ -68,36 +68,12 @@ res/icons/minimize-close_light@2x.png - res/icons/tabbar/tabicon_de_normal.png - res/icons/tabbar/tabicon_de_normal_1.25x.png - res/icons/tabbar/tabicon_de_normal_1.5x.png - res/icons/tabbar/tabicon_de_normal_1.75x.png - res/icons/tabbar/tabicon_de_normal_2x.png - res/icons/tabbar/tabicon_docxf_normal.png - res/icons/tabbar/tabicon_docxf_normal_1.25x.png - res/icons/tabbar/tabicon_docxf_normal_1.5x.png - res/icons/tabbar/tabicon_docxf_normal_1.75x.png - res/icons/tabbar/tabicon_docxf_normal_2x.png - res/icons/tabbar/tabicon_pe_normal.png - res/icons/tabbar/tabicon_pe_normal_1.25x.png - res/icons/tabbar/tabicon_pe_normal_1.5x.png - res/icons/tabbar/tabicon_pe_normal_1.75x.png - res/icons/tabbar/tabicon_pe_normal_2x.png - res/icons/tabbar/tabicon_se_normal.png - res/icons/tabbar/tabicon_se_normal_1.25x.png - res/icons/tabbar/tabicon_se_normal_1.5x.png - res/icons/tabbar/tabicon_se_normal_1.75x.png - res/icons/tabbar/tabicon_se_normal_2x.png - res/icons/tabbar/portal.png - res/icons/tabbar/portal@1.25x.png - res/icons/tabbar/portal@1.5x.png - res/icons/tabbar/portal@1.75x.png - res/icons/tabbar/portal@2x.png - res/icons/tabbar/portal_light.png - res/icons/tabbar/portal_light@1.25x.png - res/icons/tabbar/portal_light@1.5x.png - res/icons/tabbar/portal_light@1.75x.png - res/icons/tabbar/portal_light@2x.png + res/icons/tabbar/tabicon_de_normal.svg + res/icons/tabbar/tabicon_docxf_normal.svg + res/icons/tabbar/tabicon_pe_normal.svg + res/icons/tabbar/tabicon_se_normal.svg + res/icons/tabbar/portal.svg + res/icons/tabbar/portal_light.svg res/icons/tabbar/tabicon_undefined.png res/icons/tabbar/tabicon_undefined_2x.png res/icons/tabbar/loading.svg diff --git a/win-linux/src/components/asctabwidget.cpp b/win-linux/src/components/asctabwidget.cpp index e5e0683d7..437107680 100644 --- a/win-linux/src/components/asctabwidget.cpp +++ b/win-linux/src/components/asctabwidget.cpp @@ -147,7 +147,7 @@ CAscTabWidget::CAscTabWidget(QWidget *parent, CTabBar *_pBar) , m_widthParams({{100, 135, 9}, 68, 3, 0, WINDOW_TITLE_MIN_WIDTH, 140, 0}) , m_defWidthParams(m_widthParams) , m_isCustomStyle(true) - , m_tabIconSize(11, 11) + , m_tabIconSize(15, 15) , m_pBar(_pBar) { QTabWidget::tabBar()->hide(); @@ -568,17 +568,17 @@ void CAscTabWidget::reloadTabIcons() m_mapTabIcons.clear(); m_mapTabIcons.insert({ {etUndefined, std::make_pair(QString(":/tabbar/icons/newdoc%1.png").arg(ratio_suffix), QString(":/tabbar/icons/newdoc%1.png").arg(ratio_suffix))}, - {etDocument, std::make_pair(QString(":/tabbar/icons/de%1.png").arg(ratio_suffix), QString(":/tabbar/icons/de%1.png").arg(ratio_suffix))}, - {etPresentation, std::make_pair(QString(":/tabbar/icons/pe%1.png").arg(ratio_suffix), QString(":/tabbar/icons/pe%1.png").arg(ratio_suffix))}, - {etDocumentMasterForm, std::make_pair(QString(":/tabbar/icons/docxf%1.png").arg(ratio_suffix), QString(":/tabbar/icons/docxf%1.png").arg(ratio_suffix))}, - {etSpreadsheet, std::make_pair(QString(":/tabbar/icons/se%1.png").arg(ratio_suffix), QString(":/tabbar/icons/se%1.png").arg(ratio_suffix))} + {etDocument, std::make_pair(":/tabbar/icons/de.svg", ":/tabbar/icons/de.svg")}, + {etPresentation, std::make_pair(":/tabbar/icons/pe.svg", ":/tabbar/icons/pe.svg")}, + {etDocumentMasterForm, std::make_pair(":/tabbar/icons/docxf.svg", ":/tabbar/icons/docxf.svg")}, + {etSpreadsheet, std::make_pair(":/tabbar/icons/se.svg", ":/tabbar/icons/se.svg")} }); AscAppManager::themes().current().isDark() ? - m_mapTabIcons.insert({{etPortal, std::make_pair(QString(":/tabbar/icons/portal_light%1.png").arg(ratio_suffix), QString(":/tabbar/icons/portal%1.png").arg(ratio_suffix))}, - {etNewPortal, std::make_pair(QString(":/tabbar/icons/portal_light%1.png").arg(ratio_suffix), QString(":/tabbar/icons/portal%1.png").arg(ratio_suffix))}}) : - m_mapTabIcons.insert({{etPortal, std::make_pair(QString(":/tabbar/icons/portal%1.png").arg(ratio_suffix), QString(":/tabbar/icons/portal%1.png").arg(ratio_suffix))}, - {etNewPortal, std::make_pair(QString(":/tabbar/icons/portal%1.png").arg(ratio_suffix), QString(":/tabbar/icons/portal%1.png").arg(ratio_suffix))}}); + m_mapTabIcons.insert({{etPortal, std::make_pair(":/tabbar/icons/portal_light.svg", ":/tabbar/icons/portal.svg")}, + {etNewPortal, std::make_pair(":/tabbar/icons/portal_light.svg", ":/tabbar/icons/portal.svg")}}) : + m_mapTabIcons.insert({{etPortal, std::make_pair(":/tabbar/icons/portal.svg", ":/tabbar/icons/portal.svg")}, + {etNewPortal, std::make_pair(":/tabbar/icons/portal.svg", ":/tabbar/icons/portal.svg")}}); } From af248e516062bc42c1b7e6dc499c6f01d8c181fa Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Wed, 12 Apr 2023 08:53:57 +0300 Subject: [PATCH 009/298] [win-linux] adaptation for tab icons and refactoring --- .../res/icons/tabbar/tab_close_hover_dark.svg | 51 ++++++++++++++++++ .../icons/tabbar/tab_close_hover_light.svg | 50 ++++++++++++++++++ .../icons/tabbar/tab_close_normal_dark.svg | 47 +++++++++++++++++ .../icons/tabbar/tab_close_normal_light.svg | 47 +++++++++++++++++ .../icons/tabbar/tab_close_pressed_dark.svg | 52 +++++++++++++++++++ .../icons/tabbar/tab_close_pressed_light.svg | 50 ++++++++++++++++++ .../res/icons/tabbar/tab_close_undef.svg | 50 ++++++++++++++++++ .../res/icons/tabbar/tabicon_undefined.svg | 51 ++++++++++++++++++ win-linux/res/styles/styles.qss | 14 +++-- win-linux/res/styles/styles@1.25x.qss | 14 ++--- win-linux/res/styles/styles@1.5x.qss | 13 ++--- win-linux/res/styles/styles@1.75x.qss | 13 ++--- win-linux/res/styles/styles@2x.qss | 11 ++-- win-linux/resources.qrc | 39 +++----------- win-linux/src/components/asctabwidget.cpp | 8 +-- 15 files changed, 431 insertions(+), 79 deletions(-) create mode 100644 win-linux/res/icons/tabbar/tab_close_hover_dark.svg create mode 100644 win-linux/res/icons/tabbar/tab_close_hover_light.svg create mode 100644 win-linux/res/icons/tabbar/tab_close_normal_dark.svg create mode 100644 win-linux/res/icons/tabbar/tab_close_normal_light.svg create mode 100644 win-linux/res/icons/tabbar/tab_close_pressed_dark.svg create mode 100644 win-linux/res/icons/tabbar/tab_close_pressed_light.svg create mode 100644 win-linux/res/icons/tabbar/tab_close_undef.svg create mode 100644 win-linux/res/icons/tabbar/tabicon_undefined.svg diff --git a/win-linux/res/icons/tabbar/tab_close_hover_dark.svg b/win-linux/res/icons/tabbar/tab_close_hover_dark.svg new file mode 100644 index 000000000..5a3be9b3c --- /dev/null +++ b/win-linux/res/icons/tabbar/tab_close_hover_dark.svg @@ -0,0 +1,51 @@ + + diff --git a/win-linux/res/icons/tabbar/tab_close_hover_light.svg b/win-linux/res/icons/tabbar/tab_close_hover_light.svg new file mode 100644 index 000000000..03ac2bc2d --- /dev/null +++ b/win-linux/res/icons/tabbar/tab_close_hover_light.svg @@ -0,0 +1,50 @@ + + diff --git a/win-linux/res/icons/tabbar/tab_close_normal_dark.svg b/win-linux/res/icons/tabbar/tab_close_normal_dark.svg new file mode 100644 index 000000000..ebda26142 --- /dev/null +++ b/win-linux/res/icons/tabbar/tab_close_normal_dark.svg @@ -0,0 +1,47 @@ + + diff --git a/win-linux/res/icons/tabbar/tab_close_normal_light.svg b/win-linux/res/icons/tabbar/tab_close_normal_light.svg new file mode 100644 index 000000000..c79e04baa --- /dev/null +++ b/win-linux/res/icons/tabbar/tab_close_normal_light.svg @@ -0,0 +1,47 @@ + + diff --git a/win-linux/res/icons/tabbar/tab_close_pressed_dark.svg b/win-linux/res/icons/tabbar/tab_close_pressed_dark.svg new file mode 100644 index 000000000..def11649c --- /dev/null +++ b/win-linux/res/icons/tabbar/tab_close_pressed_dark.svg @@ -0,0 +1,52 @@ + + diff --git a/win-linux/res/icons/tabbar/tab_close_pressed_light.svg b/win-linux/res/icons/tabbar/tab_close_pressed_light.svg new file mode 100644 index 000000000..9eda622b0 --- /dev/null +++ b/win-linux/res/icons/tabbar/tab_close_pressed_light.svg @@ -0,0 +1,50 @@ + + diff --git a/win-linux/res/icons/tabbar/tab_close_undef.svg b/win-linux/res/icons/tabbar/tab_close_undef.svg new file mode 100644 index 000000000..df85a23bf --- /dev/null +++ b/win-linux/res/icons/tabbar/tab_close_undef.svg @@ -0,0 +1,50 @@ + + diff --git a/win-linux/res/icons/tabbar/tabicon_undefined.svg b/win-linux/res/icons/tabbar/tabicon_undefined.svg new file mode 100644 index 000000000..5bfad826d --- /dev/null +++ b/win-linux/res/icons/tabbar/tabicon_undefined.svg @@ -0,0 +1,51 @@ + + diff --git a/win-linux/res/styles/styles.qss b/win-linux/res/styles/styles.qss index a1a6f281c..14d104498 100644 --- a/win-linux/res/styles/styles.qss +++ b/win-linux/res/styles/styles.qss @@ -484,16 +484,22 @@ QLabel[class=tab-icon] { } QTabBar QToolButton[class=tab-close]{ - background-image:url(:/tabbar/icons/close_normal.png); + image: url(:/tabbar/icons/close_normal.svg); } QTabBar QToolButton[class=tab-close][state=active]{ - background-image:url(:/tabbar/icons/close_active.png); + image:url(:/tabbar/icons/close_active_normal.svg); } QTabBar QToolButton[class=tab-close]:hover{ - background-position:right top; + image: url(:/tabbar/icons/close_hover.svg); +} +QTabBar QToolButton[class=tab-close][state=active]:hover{ + image: url(:/tabbar/icons/close_active_hover.svg); } QTabBar QToolButton[class=tab-close]:pressed{ - background-position:left bottom; + image: url(:/tabbar/icons/close_pressed.svg); +} +QTabBar QToolButton[class=tab-close][state=active]:pressed{ + image: url(:/tabbar/icons/close_active_pressed.svg); } QTabBar QToolButton[class=tab-close]{ background-color:rgba(255,255,255,0); diff --git a/win-linux/res/styles/styles@1.25x.qss b/win-linux/res/styles/styles@1.25x.qss index 616447667..1587eae77 100644 --- a/win-linux/res/styles/styles@1.25x.qss +++ b/win-linux/res/styles/styles@1.25x.qss @@ -92,16 +92,10 @@ QTabBar QToolButton, border-width:2px; } - -QTabBar QToolButton[class=tab-close]{ - background-image:url(:/tabbar/icons/close_normal_1.25x.png); -} -QTabBar QToolButton[class=tab-close][state=active]{ - background-image:url(:/tabbar/icons/close_active_1.25x.png); -} -QTabBar QToolButton[class=tab-close]:hover{ - border-right:2px solid #fff; /* ??? pixmap offsets on hover for 2px ??? */ -} +/* ??? pixmap offsets on hover for 2px ??? */ +/*QTabBar QToolButton[class=tab-close]:hover{ + border-right:2px solid #fff; +}*/ /* download widget */ QMenu[hdpi]#menuButtonDownload { diff --git a/win-linux/res/styles/styles@1.5x.qss b/win-linux/res/styles/styles@1.5x.qss index 4f30efe02..c2534ba29 100644 --- a/win-linux/res/styles/styles@1.5x.qss +++ b/win-linux/res/styles/styles@1.5x.qss @@ -93,15 +93,10 @@ QTabBar QToolButton, border-width:2px; } -QTabBar QToolButton[class=tab-close]{ - background-image:url(:/tabbar/icons/close_normal_1.5x.png); -} -QTabBar QToolButton[class=tab-close][state=active]{ - background-image:url(:/tabbar/icons/close_active_1.5x.png); -} -QTabBar QToolButton[class=tab-close]:hover{ - border-right:2px solid #fff; /* ??? pixmap offsets on hover for 2px ??? */ -} +/* ??? pixmap offsets on hover for 2px ??? */ +/*QTabBar QToolButton[class=tab-close]:hover{ + border-right:2px solid #fff; +}*/ /* download widget */ QMenu[hdpi]#menuButtonDownload { diff --git a/win-linux/res/styles/styles@1.75x.qss b/win-linux/res/styles/styles@1.75x.qss index 95926cdd5..c2a13dc40 100644 --- a/win-linux/res/styles/styles@1.75x.qss +++ b/win-linux/res/styles/styles@1.75x.qss @@ -92,15 +92,10 @@ QTabBar QToolButton, border-width:2px; } -QTabBar QToolButton[class=tab-close]{ - background-image:url(:/tabbar/icons/close_normal_1.75x.png); -} -QTabBar QToolButton[class=tab-close][state=active]{ - background-image:url(:/tabbar/icons/close_active_1.75x.png); -} -QTabBar QToolButton[class=tab-close]:hover{ - border-right:2px solid #fff; /* ??? pixmap offsets on hover for 2px ??? */ -} +/* ??? pixmap offsets on hover for 2px ??? */ +/*QTabBar QToolButton[class=tab-close]:hover{ + border-right:2px solid #fff; +}*/ /* download widget */ QMenu[hdpi]#menuButtonDownload { diff --git a/win-linux/res/styles/styles@2x.qss b/win-linux/res/styles/styles@2x.qss index 3afc21a86..5fb350e6d 100644 --- a/win-linux/res/styles/styles@2x.qss +++ b/win-linux/res/styles/styles@2x.qss @@ -149,15 +149,10 @@ QLabel[class=tab-icon] { padding:0 0 4px 12px; } -QTabBar QToolButton[class=tab-close]{ - background-image:url(:/tabbar/icons/close_normal_2x.png); -} -QTabBar QToolButton[class=tab-close][state=active]{ - background-image:url(:/tabbar/icons/close_active_2x.png); -} -QTabBar QToolButton[class=tab-close]:hover{ +/* ??? pixmap offsets on hover for 2px ??? */ +/*QTabBar QToolButton[class=tab-close]:hover{ border-right:2px solid #fff; -} +}*/ QPrintDialog QLabel { font-size: 22px; diff --git a/win-linux/resources.qrc b/win-linux/resources.qrc index d63c6446b..cf87494aa 100644 --- a/win-linux/resources.qrc +++ b/win-linux/resources.qrc @@ -13,11 +13,6 @@ res/icons/message_icons@2x.png res/icons/downloading.gif res/icons/downloading_2x.gif - res/icons/minimize-close.png - res/icons/minimize-close@1.25x.png - res/icons/minimize-close@1.5x.png - res/icons/minimize-close@1.75x.png - res/icons/minimize-close@2x.png res/icons/close.svg res/icons/close_light.svg res/icons/minimize.svg @@ -26,11 +21,6 @@ res/icons/maximize_light.svg res/icons/restore.svg res/icons/restore_light.svg - res/icons/maximize.png - res/icons/maximize@1.25x.png - res/icons/maximize@1.5x.png - res/icons/maximize@1.75x.png - res/icons/maximize@2x.png res/icons/menu-indicator.png res/icons/menu-indicator-dark.png res/icons/menu-indicator@1.5x.png @@ -56,16 +46,6 @@ res/icons/desktopeditors.ico res/icons/splash.svg res/icons/logo.svg - res/icons/maximize_light.png - res/icons/maximize_light@1.25x.png - res/icons/maximize_light@1.5x.png - res/icons/maximize_light@1.75x.png - res/icons/maximize_light@2x.png - res/icons/minimize-close_light.png - res/icons/minimize-close_light@1.25x.png - res/icons/minimize-close_light@1.5x.png - res/icons/minimize-close_light@1.75x.png - res/icons/minimize-close_light@2x.png res/icons/tabbar/tabicon_de_normal.svg @@ -74,19 +54,14 @@ res/icons/tabbar/tabicon_se_normal.svg res/icons/tabbar/portal.svg res/icons/tabbar/portal_light.svg - res/icons/tabbar/tabicon_undefined.png - res/icons/tabbar/tabicon_undefined_2x.png + res/icons/tabbar/tabicon_undefined.svg res/icons/tabbar/loading.svg - res/icons/tabbar/tab_close_dark.png - res/icons/tabbar/tab_close_dark@1.25x.png - res/icons/tabbar/tab_close_dark@1.5x.png - res/icons/tabbar/tab_close_dark@1.75x.png - res/icons/tabbar/tab_close_dark@2x.png - res/icons/tabbar/tab_close_light.png - res/icons/tabbar/tab_close_light@1.75x.png - res/icons/tabbar/tab_close_light@1.5x.png - res/icons/tabbar/tab_close_light@1.25x.png - res/icons/tabbar/tab_close_light@2x.png + res/icons/tabbar/tab_close_normal_dark.svg + res/icons/tabbar/tab_close_hover_dark.svg + res/icons/tabbar/tab_close_pressed_dark.svg + res/icons/tabbar/tab_close_normal_light.svg + res/icons/tabbar/tab_close_hover_light.svg + res/icons/tabbar/tab_close_pressed_light.svg res/icons/tabbar/scroll_left_normal_light.svg res/icons/tabbar/scroll_left_disabled_light.svg res/icons/tabbar/scroll_left_hover_light.svg diff --git a/win-linux/src/components/asctabwidget.cpp b/win-linux/src/components/asctabwidget.cpp index 437107680..d55fbba54 100644 --- a/win-linux/src/components/asctabwidget.cpp +++ b/win-linux/src/components/asctabwidget.cpp @@ -559,15 +559,9 @@ void CAscTabWidget::setTabIcons(CTabIconSet& icons) void CAscTabWidget::reloadTabIcons() { - double dpi_ratio = scaling(); - QString ratio_suffix = dpi_ratio > 1.75 ? "@2x" : - dpi_ratio > 1.5 ? "@1.75x" : - dpi_ratio > 1.25 ? "@1.5x" : - dpi_ratio > 1 ? "@1.25x" : ""; - m_mapTabIcons.clear(); m_mapTabIcons.insert({ - {etUndefined, std::make_pair(QString(":/tabbar/icons/newdoc%1.png").arg(ratio_suffix), QString(":/tabbar/icons/newdoc%1.png").arg(ratio_suffix))}, + {etUndefined, std::make_pair(":/tabbar/icons/newdoc.svg", ":/tabbar/icons/newdoc.svg")}, {etDocument, std::make_pair(":/tabbar/icons/de.svg", ":/tabbar/icons/de.svg")}, {etPresentation, std::make_pair(":/tabbar/icons/pe.svg", ":/tabbar/icons/pe.svg")}, {etDocumentMasterForm, std::make_pair(":/tabbar/icons/docxf.svg", ":/tabbar/icons/docxf.svg")}, From f82c70e92dea8ecb2fd72782b62c405d15b21913 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Wed, 12 Apr 2023 11:22:02 +0300 Subject: [PATCH 010/298] [win-linux] adaptation for tab icons, message icons --- win-linux/res/icons/message_confirm.svg | 54 +++++++++++++++++++++ win-linux/res/icons/message_error.svg | 56 ++++++++++++++++++++++ win-linux/res/icons/message_info.svg | 60 ++++++++++++++++++++++++ win-linux/res/icons/message_quest.svg | 60 ++++++++++++++++++++++++ win-linux/res/icons/message_warn.svg | 47 +++++++++++++++++++ win-linux/res/icons/tab_close_active.svg | 41 ++++++++++++++++ win-linux/res/icons/tab_close_hover.svg | 41 ++++++++++++++++ win-linux/res/icons/tab_close_normal.svg | 41 ++++++++++++++++ win-linux/res/icons/user.svg | 54 +++++++++++++++++++++ win-linux/res/styles/message.qss | 25 +++------- win-linux/res/styles/styles.qss | 6 +-- win-linux/res/styles/styles@2x.qss | 9 ---- win-linux/resources.qrc | 18 +++---- 13 files changed, 470 insertions(+), 42 deletions(-) create mode 100644 win-linux/res/icons/message_confirm.svg create mode 100644 win-linux/res/icons/message_error.svg create mode 100644 win-linux/res/icons/message_info.svg create mode 100644 win-linux/res/icons/message_quest.svg create mode 100644 win-linux/res/icons/message_warn.svg create mode 100644 win-linux/res/icons/tab_close_active.svg create mode 100644 win-linux/res/icons/tab_close_hover.svg create mode 100644 win-linux/res/icons/tab_close_normal.svg create mode 100644 win-linux/res/icons/user.svg diff --git a/win-linux/res/icons/message_confirm.svg b/win-linux/res/icons/message_confirm.svg new file mode 100644 index 000000000..a302d4ab8 --- /dev/null +++ b/win-linux/res/icons/message_confirm.svg @@ -0,0 +1,54 @@ + + diff --git a/win-linux/res/icons/message_error.svg b/win-linux/res/icons/message_error.svg new file mode 100644 index 000000000..a76876f5e --- /dev/null +++ b/win-linux/res/icons/message_error.svg @@ -0,0 +1,56 @@ + + diff --git a/win-linux/res/icons/message_info.svg b/win-linux/res/icons/message_info.svg new file mode 100644 index 000000000..276b7cbfc --- /dev/null +++ b/win-linux/res/icons/message_info.svg @@ -0,0 +1,60 @@ + + + + + diff --git a/win-linux/res/icons/message_quest.svg b/win-linux/res/icons/message_quest.svg new file mode 100644 index 000000000..276b7cbfc --- /dev/null +++ b/win-linux/res/icons/message_quest.svg @@ -0,0 +1,60 @@ + + + + + diff --git a/win-linux/res/icons/message_warn.svg b/win-linux/res/icons/message_warn.svg new file mode 100644 index 000000000..edfb2af43 --- /dev/null +++ b/win-linux/res/icons/message_warn.svg @@ -0,0 +1,47 @@ + + diff --git a/win-linux/res/icons/tab_close_active.svg b/win-linux/res/icons/tab_close_active.svg new file mode 100644 index 000000000..9525474fe --- /dev/null +++ b/win-linux/res/icons/tab_close_active.svg @@ -0,0 +1,41 @@ + + diff --git a/win-linux/res/icons/tab_close_hover.svg b/win-linux/res/icons/tab_close_hover.svg new file mode 100644 index 000000000..8b5a6d974 --- /dev/null +++ b/win-linux/res/icons/tab_close_hover.svg @@ -0,0 +1,41 @@ + + diff --git a/win-linux/res/icons/tab_close_normal.svg b/win-linux/res/icons/tab_close_normal.svg new file mode 100644 index 000000000..0f417576a --- /dev/null +++ b/win-linux/res/icons/tab_close_normal.svg @@ -0,0 +1,41 @@ + + diff --git a/win-linux/res/icons/user.svg b/win-linux/res/icons/user.svg new file mode 100644 index 000000000..0fec43f91 --- /dev/null +++ b/win-linux/res/icons/user.svg @@ -0,0 +1,54 @@ + + diff --git a/win-linux/res/styles/message.qss b/win-linux/res/styles/message.qss index 3142878a6..9550de400 100644 --- a/win-linux/res/styles/message.qss +++ b/win-linux/res/styles/message.qss @@ -1,30 +1,17 @@ -QLabel[class=msg-icon] { - background-image: url(":/res/icons/message_icons.png"); -} + QLabel[class=msg-icon][type=msg-warn] { - background-position: bottom right; + image: url(":/message_warn.svg"); } QLabel[class=msg-icon][type=msg-error] { - background-position: top left; + image: url(":/message_error.svg"); } QLabel[class=msg-icon][type=msg-info] { - background-position: bottom left; + image: url(":/message_info.svg"); } QLabel[class=msg-icon][type=msg-confirm] { - background-position: top right; -} -#messageBody[scaling="1.25x"] QLabel[class=msg-icon] { - background-image: url(":/message_icons_1.25x.png"); -} -#messageBody[scaling="1.5x"] QLabel[class=msg-icon] { - background-image: url(":/message_icons_1.5x.png"); -} -#messageBody[scaling="1.75x"] QLabel[class=msg-icon] { - background-image: url(":/message_icons_1.75x.png"); -} -#messageBody[scaling="2x"] QLabel[class=msg-icon] { - background-image: url(":/message_icons_2x.png"); + image: url(":/message_confirm.svg"); } + #messageBody QLabel[class=msg-report] { font-size: 11px; } diff --git a/win-linux/res/styles/styles.qss b/win-linux/res/styles/styles.qss index 14d104498..c08d87329 100644 --- a/win-linux/res/styles/styles.qss +++ b/win-linux/res/styles/styles.qss @@ -455,17 +455,17 @@ QTabBar::tab:only-one { } QTabBar::tab:last { } QTabBar::close-button { - image: url(:/res/icons/tab_close_normal.png); + image: url(:/res/icons/tab_close_normal.svg); margin-top: -1px; icon-size:16px; } QTabBar::close-button:hover { - image:url(:/res/icons/tab_close_hover.png); + image: url(:/res/icons/tab_close_hover.svg); } QTabBar::close-button:pressed { - image:url(:/res/icons/tab_close_active.png); + image: url(:/res/icons/tab_close_active.svg); } QTabBar QToolButton, diff --git a/win-linux/res/styles/styles@2x.qss b/win-linux/res/styles/styles@2x.qss index 5fb350e6d..481e712e5 100644 --- a/win-linux/res/styles/styles@2x.qss +++ b/win-linux/res/styles/styles@2x.qss @@ -88,19 +88,10 @@ QTabBar::tab {width: 270px; background-color: #f1f1f1; border: 0 none; border-ri height: 56px; margin: 0 0 0 0;} QTabBar::close-button { - image: url(:/res/icons/tab_close_normal_2x.png); margin-top: -2px; icon-size: 32px; } -QTabBar::close-button:hover { - image:url(:/res/icons/tab_close_hover_2x.png); -} - -QTabBar::close-button:pressed { - image:url(:/res/icons/tab_close_active_2x.png); -} - QTabBar QToolButton, QTabBar QToolButton:disabled { margin-right:-2px; diff --git a/win-linux/resources.qrc b/win-linux/resources.qrc index cf87494aa..b95a7472e 100644 --- a/win-linux/resources.qrc +++ b/win-linux/resources.qrc @@ -1,16 +1,12 @@ - res/icons/tab_close_normal.png - res/icons/tab_close_normal_2x.png - res/icons/tab_close_active.png - res/icons/tab_close_active_2x.png - res/icons/tab_close_hover.png - res/icons/tab_close_hover_2x.png - res/icons/message_icons.png - res/icons/message_icons@1.25x.png - res/icons/message_icons@1.5x.png - res/icons/message_icons@1.75x.png - res/icons/message_icons@2x.png + res/icons/tab_close_normal.svg + res/icons/tab_close_active.svg + res/icons/tab_close_hover.svg + res/icons/message_error.svg + res/icons/message_info.svg + res/icons/message_confirm.svg + res/icons/message_warn.svg res/icons/downloading.gif res/icons/downloading_2x.gif res/icons/close.svg From f8a78c0692c3b8fb9a34f79477766c0e0c2a7b95 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Wed, 12 Apr 2023 13:36:37 +0300 Subject: [PATCH 011/298] [win-linux] adaptation for menu indicator --- win-linux/res/icons/menu_indicator_hover.svg | 41 ++++++++++++++ .../res/icons/menu_indicator_hover_light.svg | 41 ++++++++++++++ win-linux/res/icons/menu_indicator_normal.svg | 41 ++++++++++++++ .../res/icons/menu_indicator_normal_light.svg | 41 ++++++++++++++ .../res/icons/menu_indicator_pressed.svg | 41 ++++++++++++++ .../icons/menu_indicator_pressed_light.svg | 41 ++++++++++++++ win-linux/res/icons/menu_indicator_undef.svg | 55 +++++++++++++++++++ win-linux/res/styles/styles.qss | 6 +- win-linux/res/styles/styles@1.25x.qss | 9 --- win-linux/res/styles/styles@1.5x.qss | 9 --- win-linux/res/styles/styles@1.75x.qss | 9 --- win-linux/res/styles/styles@2x.qss | 9 --- win-linux/resources.qrc | 13 +++-- 13 files changed, 311 insertions(+), 45 deletions(-) create mode 100644 win-linux/res/icons/menu_indicator_hover.svg create mode 100644 win-linux/res/icons/menu_indicator_hover_light.svg create mode 100644 win-linux/res/icons/menu_indicator_normal.svg create mode 100644 win-linux/res/icons/menu_indicator_normal_light.svg create mode 100644 win-linux/res/icons/menu_indicator_pressed.svg create mode 100644 win-linux/res/icons/menu_indicator_pressed_light.svg create mode 100644 win-linux/res/icons/menu_indicator_undef.svg diff --git a/win-linux/res/icons/menu_indicator_hover.svg b/win-linux/res/icons/menu_indicator_hover.svg new file mode 100644 index 000000000..16405d008 --- /dev/null +++ b/win-linux/res/icons/menu_indicator_hover.svg @@ -0,0 +1,41 @@ + + diff --git a/win-linux/res/icons/menu_indicator_hover_light.svg b/win-linux/res/icons/menu_indicator_hover_light.svg new file mode 100644 index 000000000..2a23c6be5 --- /dev/null +++ b/win-linux/res/icons/menu_indicator_hover_light.svg @@ -0,0 +1,41 @@ + + diff --git a/win-linux/res/icons/menu_indicator_normal.svg b/win-linux/res/icons/menu_indicator_normal.svg new file mode 100644 index 000000000..cf8160da1 --- /dev/null +++ b/win-linux/res/icons/menu_indicator_normal.svg @@ -0,0 +1,41 @@ + + diff --git a/win-linux/res/icons/menu_indicator_normal_light.svg b/win-linux/res/icons/menu_indicator_normal_light.svg new file mode 100644 index 000000000..f9ddfff06 --- /dev/null +++ b/win-linux/res/icons/menu_indicator_normal_light.svg @@ -0,0 +1,41 @@ + + diff --git a/win-linux/res/icons/menu_indicator_pressed.svg b/win-linux/res/icons/menu_indicator_pressed.svg new file mode 100644 index 000000000..a908e63a5 --- /dev/null +++ b/win-linux/res/icons/menu_indicator_pressed.svg @@ -0,0 +1,41 @@ + + diff --git a/win-linux/res/icons/menu_indicator_pressed_light.svg b/win-linux/res/icons/menu_indicator_pressed_light.svg new file mode 100644 index 000000000..84509063d --- /dev/null +++ b/win-linux/res/icons/menu_indicator_pressed_light.svg @@ -0,0 +1,41 @@ + + diff --git a/win-linux/res/icons/menu_indicator_undef.svg b/win-linux/res/icons/menu_indicator_undef.svg new file mode 100644 index 000000000..ecd328091 --- /dev/null +++ b/win-linux/res/icons/menu_indicator_undef.svg @@ -0,0 +1,55 @@ + + diff --git a/win-linux/res/styles/styles.qss b/win-linux/res/styles/styles.qss index c08d87329..2f2667701 100644 --- a/win-linux/res/styles/styles.qss +++ b/win-linux/res/styles/styles.qss @@ -219,17 +219,17 @@ QPushButton::menu-indicator { /*border: 1px solid white;*/ width: 10px; height: 10px; - border-image: url(:/res/icons/menu-indicator.png) 0 0 0 0 repeat repeat; + image: url(:/menu_indicator_normal_light.svg); left: -2px; top: -2px; } QPushButton::menu-indicator:disabled { - border-image: url(:/res/icons/menu-indicator.png) 0 0 0 10 repeat repeat; + image: url(:/menu_indicator_pressed_light.svg); } QPushButton::menu-indicator:hover { - border-image: url(:/res/icons/menu-indicator.png) 0 10 0 0 repeat repeat; + image: url(:/menu_indicator_hover_light.svg); } /*QPushButton[theme=dark]::menu-indicator {*/ diff --git a/win-linux/res/styles/styles@1.25x.qss b/win-linux/res/styles/styles@1.25x.qss index 1587eae77..ffd8e5967 100644 --- a/win-linux/res/styles/styles@1.25x.qss +++ b/win-linux/res/styles/styles@1.25x.qss @@ -48,19 +48,10 @@ QPushButton#toolButtonMain[class=normal], QPushButton::menu-indicator { width: 13px; height: 13px; - border-image: url(:/menu-indicator_1.25x.png) 0 0 0 0 repeat repeat; left: -2px; top: -2px; } -QPushButton::menu-indicator:disabled { - border-image: url(:/menu-indicator_1.25x.png) 0 0 0 13 repeat repeat; -} - -QPushButton::menu-indicator:hover { - border-image: url(:/menu-indicator_1.25x.png) 0 13 0 0 repeat repeat; -} - QPushButton#toolButtonDownload::menu-indicator { top: -13px; left: -5px; diff --git a/win-linux/res/styles/styles@1.5x.qss b/win-linux/res/styles/styles@1.5x.qss index c2534ba29..86aa5e90c 100644 --- a/win-linux/res/styles/styles@1.5x.qss +++ b/win-linux/res/styles/styles@1.5x.qss @@ -49,19 +49,10 @@ QPushButton#toolButtonMain[class=normal], QPushButton::menu-indicator { width: 15px; height: 15px; - border-image: url(:/menu-indicator_1.5x.png) 0 0 0 0 repeat repeat; left: -3px; top: -2px; } -QPushButton::menu-indicator:disabled { - border-image: url(:/menu-indicator_1.5x.png) 0 0 0 15 repeat repeat; -} - -QPushButton::menu-indicator:hover { - border-image: url(:/menu-indicator_1.5x.png) 0 15 0 0 repeat repeat; -} - QPushButton#toolButtonDownload::menu-indicator { top: -15px; left: -6px; diff --git a/win-linux/res/styles/styles@1.75x.qss b/win-linux/res/styles/styles@1.75x.qss index c2a13dc40..de85c5782 100644 --- a/win-linux/res/styles/styles@1.75x.qss +++ b/win-linux/res/styles/styles@1.75x.qss @@ -48,19 +48,10 @@ QPushButton#toolButtonMain[class=normal], QPushButton::menu-indicator { width: 18px; height: 18px; - border-image: url(:/menu-indicator_1.75x.png) 0 0 0 0 repeat repeat; left: -4px; top: -2px; } -QPushButton::menu-indicator:disabled { - border-image: url(:/menu-indicator_1.75x.png) 0 0 0 15 repeat repeat; -} - -QPushButton::menu-indicator:hover { - border-image: url(:/menu-indicator_1.75x.png) 0 15 0 0 repeat repeat; -} - QPushButton#toolButtonDownload::menu-indicator { top: -18px; left: -7px; diff --git a/win-linux/res/styles/styles@2x.qss b/win-linux/res/styles/styles@2x.qss index 481e712e5..ee6c2ddd2 100644 --- a/win-linux/res/styles/styles@2x.qss +++ b/win-linux/res/styles/styles@2x.qss @@ -50,19 +50,10 @@ QPushButton#toolButtonMain[class=normal], QPushButton::menu-indicator { width: 20px; height: 20px; - border-image: url(:/menu-indicator_2x.png) 0 0 0 0 repeat repeat; left: -4px; top: -2px; } -QPushButton::menu-indicator:disabled { - border-image: url(:/menu-indicator_2x.png) 0 0 0 20 repeat repeat; -} - -QPushButton::menu-indicator:hover { - border-image: url(:/menu-indicator_2x.png) 0 20 0 0 repeat repeat; -} - /*QPushButton[theme=dark]::menu-indicator:disabled {*/ /*border-image: url(:/res/icons/menu-indicator-dark.png) 0 0 0 20 repeat repeat;*/ /*}*/ diff --git a/win-linux/resources.qrc b/win-linux/resources.qrc index b95a7472e..d51f634c5 100644 --- a/win-linux/resources.qrc +++ b/win-linux/resources.qrc @@ -17,12 +17,13 @@ res/icons/maximize_light.svg res/icons/restore.svg res/icons/restore_light.svg - res/icons/menu-indicator.png - res/icons/menu-indicator-dark.png - res/icons/menu-indicator@1.5x.png - res/icons/menu-indicator@1.5x.png - res/icons/menu-indicator@1.5x.png - res/icons/menu-indicator@2x.png + res/icons/menu_indicator_normal.svg + res/icons/menu_indicator_hover.svg + res/icons/menu_indicator_pressed.svg + res/icons/menu_indicator_normal_light.svg + res/icons/menu_indicator_hover_light.svg + res/icons/menu_indicator_pressed_light.svg + res/icons/menu_indicator_undef.svg res/icons/radiobox.png res/icons/radiobox@1.25x.png res/icons/radiobox@1.5x.png From be9d00a5e7e291961d29ef60da67d63bd919ddfe Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Wed, 12 Apr 2023 14:55:47 +0300 Subject: [PATCH 012/298] [win-linux] adaptation for editor window --- win-linux/res/styles/editor.qss | 100 ++++++++++++++++++++++++ win-linux/resources.qrc | 1 + win-linux/src/windows/ceditorwindow_p.h | 61 +-------------- 3 files changed, 104 insertions(+), 58 deletions(-) create mode 100755 win-linux/res/styles/editor.qss diff --git a/win-linux/res/styles/editor.qss b/win-linux/res/styles/editor.qss new file mode 100755 index 000000000..8ae3a4097 --- /dev/null +++ b/win-linux/res/styles/editor.qss @@ -0,0 +1,100 @@ +#mainPanel {background-color: %1;} +#box-title-tools {background-color: %1;} +#box-title-tools QLabel {font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;} +#labelTitle {color: #444; font-weight: bold;} +#iconuser {color: %1; background: #d9ffffff; font-size: 12px;} +QPushButton[act=tool]:hover {background-color: rgba(0,0,0,20%);} +QPushButton#toolButtonClose:hover {background-color: #d42b2b;} +QPushButton#toolButtonClose:pressed {background-color: #d75050;} + +/* pretty */ +#mainPanel[window=pretty] QPushButton[act=tool]:hover +{ + background-color: rgba(255,255,255,20%); +} +#mainPanel[window=pretty] QPushButton#toolButtonMinimize +{ + image: url(:/minimize_light.svg); +} +#mainPanel[window=pretty] QPushButton#toolButtonClose +{ + image: url(:/close_light.svg); +} +#mainPanel[window=pretty] QPushButton#toolButtonClose:hover +{ + background-color: #d42b2b; +} +#mainPanel[window=pretty] QPushButton#toolButtonMaximize +{ + image: url(:/restore_light.svg); +} +#mainPanel[window=pretty] QPushButton#toolButtonMaximize[class=min] { + image: url(:/maximize_light.svg); +} +#mainPanel[window=pretty] #labelTitle +{ + color: #fff; + font-size: 12px; +} + +/* 1.25x */ +#mainPanel[zoom="1.25x"] #toolButtonMinimize, +#mainPanel[zoom="1.25x"] #toolButtonClose, +#mainPanel[zoom="1.25x"] #toolButtonMaximize +{ + padding: 6px 15px 9px; +} +#mainPanel[zoom="1.25x"] #iconuser, +#mainPanel[zoom="1.25x"] #labelTitle +{ + font-size: 15px; +} + +/* 1.5x */ +#mainPanel[zoom="1.5x"] #toolButtonMinimize, +#mainPanel[zoom="1.5x"] #toolButtonClose, +#mainPanel[zoom="1.5x"] #toolButtonMaximize +{ + padding: 8px 18px 11px; +} +#mainPanel[zoom="1.5x"] #iconuser, +#mainPanel[zoom="1.5x"] #labelTitle +{ + font-size: 18px; +} + +/* 1.75x */ +#mainPanel[zoom="1.75x"] #toolButtonMinimize, +#mainPanel[zoom="1.75x"] #toolButtonClose, +#mainPanel[zoom="1.75x"] #toolButtonMaximize +{ + padding: 9px 21px 12px; +} +#mainPanel[zoom="1.75x"] #iconuser, +#mainPanel[zoom="1.75x"] #labelTitle +{ + font-size: 21px; +} + +/* 2x */ +#mainPanel[zoom="2x"] #toolButtonMinimize, +#mainPanel[zoom="2x"] #toolButtonClose, +#mainPanel[zoom="2x"] #toolButtonMaximize +{ + padding: 10px 24px 14px; +} +#mainPanel[zoom="2x"] #iconuser, +#mainPanel[zoom="2x"] #labelTitle +{ + font-size: 24px; +} + +/* dark style */ +#mainPanel[uitheme=theme-dark] #labelTitle +{ + color: rgba(255,255,255,80%); +} +#mainPanel[uitheme=theme-contrast-dark] #labelTitle +{ + color: #e8e8e8; +} diff --git a/win-linux/resources.qrc b/win-linux/resources.qrc index d51f634c5..f165c5bcf 100644 --- a/win-linux/resources.qrc +++ b/win-linux/resources.qrc @@ -82,6 +82,7 @@ res/styles/styles.qss + res/styles/editor.qss res/styles/message.qss diff --git a/win-linux/src/windows/ceditorwindow_p.h b/win-linux/src/windows/ceditorwindow_p.h index 172d0ecb7..7414808df 100644 --- a/win-linux/src/windows/ceditorwindow_p.h +++ b/win-linux/src/windows/ceditorwindow_p.h @@ -66,59 +66,6 @@ using namespace NSEditorApi; -const QString g_css = - "#mainPanel{background-color:%1;}" - "#box-title-tools{background-color:%1;}" - "QPushButton[act=tool]:hover{background-color:rgba(0,0,0,20%);}" - "QPushButton#toolButtonClose:hover{background-color:#d42b2b;}" - "QPushButton#toolButtonClose:pressed{background-color:#d75050;}" -#ifdef Q_OS_LINUX - "#box-title-tools QLabel{font-size:11px;font-family:\"Helvetica Neue\",Helvetica,Arial,sans-serif;}" - "#labelTitle{color:#444;}" -#else - "#box-title-tools QLabel{font-family:\"Helvetica Neue\",Helvetica,Arial,sans-serif;font-weight:bold;}" - "#labelTitle{color:#444;}" - "#mainPanel[window=pretty] #labelTitle{font-size:12px;}" -#endif - "#iconuser{color:#fff;font-size:11px;}" - "#mainPanel[window=pretty] QPushButton[act=tool]:hover{background-color:rgba(255,255,255,20%);}" - "#mainPanel[window=pretty] QPushButton#toolButtonMinimize," - "#mainPanel[window=pretty] QPushButton#toolButtonClose {background-image:url(:/minclose_light.png);}" - "#mainPanel[window=pretty] QPushButton#toolButtonClose:hover{background-color:#d42b2b;}" - "#mainPanel[window=pretty] QPushButton#toolButtonMaximize{background-image:url(:/max_light.png);}" - "#mainPanel[window=pretty] #labelTitle{color:#fff;}" - "#mainPanel[zoom=\"1.25x\"] #toolButtonMinimize,#mainPanel[zoom=\"1.25x\"] #toolButtonClose," - "#mainPanel[zoom=\"1.25x\"] #toolButtonMaximize{padding: 6px 15px 9px;}" - "#mainPanel[zoom=\"1.25x\"] #iconuser," - "#mainPanel[zoom=\"1.25x\"] #labelTitle{font-size:15px;}" - "#mainPanel[zoom=\"1.25x\"][window=pretty] QPushButton#toolButtonMinimize," - "#mainPanel[zoom=\"1.25x\"][window=pretty] QPushButton#toolButtonClose {background-image:url(:/minclose_light_1.25x.png);}" - "#mainPanel[zoom=\"1.25x\"][window=pretty] QPushButton#toolButtonMaximize{background-image:url(:/max_light_1.25x.png);}" - "#mainPanel[zoom=\"1.5x\"] #toolButtonMinimize,#mainPanel[zoom=\"1.5x\"] #toolButtonClose," - "#mainPanel[zoom=\"1.5x\"] #toolButtonMaximize{padding: 8px 18px 11px;}" - "#mainPanel[zoom=\"1.5x\"] #iconuser," - "#mainPanel[zoom=\"1.5x\"] #labelTitle{font-size:18px;}" - "#mainPanel[zoom=\"1.5x\"][window=pretty] QPushButton#toolButtonMinimize," - "#mainPanel[zoom=\"1.5x\"][window=pretty] QPushButton#toolButtonClose {background-image:url(:/minclose_light_1.5x.png);}" - "#mainPanel[zoom=\"1.5x\"][window=pretty] QPushButton#toolButtonMaximize{background-image:url(:/max_light_1.5x.png);}" - "#mainPanel[zoom=\"1.75x\"] #toolButtonMinimize,#mainPanel[zoom=\"1.75x\"] #toolButtonClose," - "#mainPanel[zoom=\"1.75x\"] #toolButtonMaximize{padding: 9px 21px 12px;}" - "#mainPanel[zoom=\"1.75x\"] #iconuser," - "#mainPanel[zoom=\"1.75x\"] #labelTitle{font-size:21px;}" - "#mainPanel[zoom=\"1.75x\"][window=pretty] QPushButton#toolButtonMinimize," - "#mainPanel[zoom=\"1.75x\"][window=pretty] QPushButton#toolButtonClose {background-image:url(:/minclose_light_1.75x.png);}" - "#mainPanel[zoom=\"1.75x\"][window=pretty] QPushButton#toolButtonMaximize{background-image:url(:/max_light_1.75x.png);}" - "#mainPanel[zoom=\"2x\"] #toolButtonMinimize,#mainPanel[zoom=\"2x\"] #toolButtonClose," - "#mainPanel[zoom=\"2x\"] #toolButtonMaximize{padding: 10px 24px 14px;}" - "#mainPanel[zoom=\"2x\"] #iconuser," - "#mainPanel[zoom=\"2x\"] #labelTitle{font-size:24px;}" - "#mainPanel[zoom=\"2x\"][window=pretty] QPushButton#toolButtonMinimize," - "#mainPanel[zoom=\"2x\"][window=pretty] QPushButton#toolButtonClose {background-image:url(:/minclose_light_2x.png);}" - "#mainPanel[zoom=\"2x\"][window=pretty] QPushButton#toolButtonMaximize{background-image:url(:/max_light_2x.png);}" - "#mainPanel[uitheme=theme-dark] #iconuser," - "#mainPanel[uitheme=theme-dark] #labelTitle{color:rgba(255,255,255,80%);}" - "#mainPanel[uitheme=theme-contrast-dark] #iconuser," - "#mainPanel[uitheme=theme-contrast-dark] #labelTitle{color:#e8e8e8;}"; auto prepare_editor_css(int type, const CTheme& theme) -> QString { std::wstring c; @@ -128,7 +75,7 @@ auto prepare_editor_css(int type, const CTheme& theme) -> QString { case etPresentation: c = theme.value(CTheme::ColorRole::ecrTabSlideActive); break; case etSpreadsheet: c = theme.value(CTheme::ColorRole::ecrTabCellActive); break; } - + QString g_css(Utils::readStylesheets(":/styles/editor.qss")); return g_css.arg(QString::fromStdWString(c)); } @@ -766,10 +713,8 @@ class CEditorWindowPrivate : public CCefEventsGate { iconuser->setFixedHeight(0.85 * TOOLBTN_HEIGHT * window->m_dpiRatio); iconuser->setFixedWidth(iconuser->height()); - auto iconTextColor = editor_color(panel()->data()->contentType()).name(); - iconuser->setStyleSheet(QString("QLabel#iconuser " - "{background: #d9ffffff; border-radius: %1px; color: %2;}") - .arg(QString::number(iconuser->height()/2), iconTextColor)); + iconuser->setStyleSheet(QString("#iconuser {border-radius: %1px;}") + .arg(QString::number(iconuser->height()/2))); } QLabel * iconCrypted() From b5f02f410246f7c57ee0dd286ba15c9d8ea602ed Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Wed, 12 Apr 2023 17:36:14 +0300 Subject: [PATCH 013/298] [win-linux] ass scales and refactoring --- win-linux/res/styles/styles.qss | 56 +++++++++++++++++++ win-linux/res/styles/tabbar@1.25x.qss | 2 - win-linux/res/styles/tabbar@1.5x.qss | 2 - win-linux/res/styles/tabbar@1.75x.qss | 1 - win-linux/res/styles/tabbar@1x.qss | 2 - win-linux/res/styles/tabbar@2.5x.qss | 0 win-linux/res/styles/tabbar@2x.qss | 2 - win-linux/res/styles/tabbar_nix.qss | 28 ---------- win-linux/res/styles/tabbar_nix@2x.qss | 28 ---------- win-linux/res/styles/theme-contrast-dark.qss | 54 ------------------ win-linux/resources.qrc | 1 - .../src/cascapplicationmanagerwrapper.cpp | 24 ++++++++ win-linux/src/cascapplicationmanagerwrapper.h | 6 ++ win-linux/src/windows/ceditorwindow.cpp | 13 +---- win-linux/src/windows/cmainwindow.cpp | 10 ++-- 15 files changed, 92 insertions(+), 137 deletions(-) delete mode 100644 win-linux/res/styles/tabbar@1.25x.qss delete mode 100644 win-linux/res/styles/tabbar@1.5x.qss delete mode 100644 win-linux/res/styles/tabbar@1.75x.qss delete mode 100644 win-linux/res/styles/tabbar@1x.qss delete mode 100644 win-linux/res/styles/tabbar@2.5x.qss delete mode 100644 win-linux/res/styles/tabbar@2x.qss delete mode 100644 win-linux/res/styles/tabbar_nix.qss delete mode 100644 win-linux/res/styles/tabbar_nix@2x.qss delete mode 100644 win-linux/res/styles/theme-contrast-dark.qss diff --git a/win-linux/res/styles/styles.qss b/win-linux/res/styles/styles.qss index 2f2667701..d42c1d88a 100644 --- a/win-linux/res/styles/styles.qss +++ b/win-linux/res/styles/styles.qss @@ -418,6 +418,62 @@ QPushButton#toolButtonDownload::menu-indicator { border-image: url(:/arrow_down_dark.png) 0 0 0 5 repeat repeat; } +/* Contrast-Dark*/ + +#mainPanel[uitheme=theme-contrast-dark], +#mainPanel[uitheme=theme-contrast-dark] #tabWrapper, +#mainPanel[uitheme=theme-contrast-dark] #CX11Caption, +#mainPanel[uitheme=theme-contrast-dark] QTabBar +{ + background-color: #2a2a2a; +} + +#mainPanel[uitheme=theme-contrast-dark] #labelAppTitle { + color: #d9d9d9; +} + +#mainPanel[uitheme=theme-contrast-dark] QPushButton#toolButtonMain[class=active] { + background: #1e1e1e; +} + +#mainPanel[uitheme=theme-contrast-dark] QPushButton#toolButtonMain { + border-right-color: #414141; +} + +#mainPanel[uitheme=theme-contrast-dark] QPushButton#toolButtonMain[class=normal] { + background: #2a2a2a; +} + +#mainPanel[uitheme=theme-contrast-dark] QPushButton#toolButtonMain[class=normal]:hover { + background: #424242; +} + +#mainPanel[uitheme=theme-contrast-dark] QPushButton#toolButtonMinimize:hover, + #mainPanel[uitheme=theme-contrast-dark] QPushButton#toolButtonMaximize:hover +{ + background-color: #555; +} + +#mainPanel[uitheme=theme-contrast-dark] QTabBar QToolButton::left-arrow, + #mainPanel[uitheme=theme-contrast-dark] QTabBar QToolButton::right-arrow +{ + background-color: #f00; +} + +#mainPanel[uitheme=theme-contrast-dark] QTabBar QToolButton:pressed { + background-color: #f00; +} + +#mainPanel[uitheme=theme-contrast-dark] QTabWidget::pane {background-color: #2a2a2a;} +#mainPanel[uitheme=theme-contrast-dark] QTabBar::tab {background-color: #2a2a2a; border-right-color: #414141;} +#mainPanel[uitheme=theme-contrast-dark] QTabBar::tab:hover {background-color: #424242;} +#mainPanel[uitheme=theme-contrast-dark] QTabBar::tab:selected {background-color: #2a2a2a;} +#mainPanel[uitheme=theme-contrast-dark] QTabBar[active=false]::tab:selected:hover {background-color: #424242;} + +#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton {background-color: #2a2a2a;} +#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton:hover {background-color: #525252;} +#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton:pressed {background-color: #424242;} + /***********************************/ /* classic light theme definitions */ /***********************************/ diff --git a/win-linux/res/styles/tabbar@1.25x.qss b/win-linux/res/styles/tabbar@1.25x.qss deleted file mode 100644 index 139597f9c..000000000 --- a/win-linux/res/styles/tabbar@1.25x.qss +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/win-linux/res/styles/tabbar@1.5x.qss b/win-linux/res/styles/tabbar@1.5x.qss deleted file mode 100644 index 139597f9c..000000000 --- a/win-linux/res/styles/tabbar@1.5x.qss +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/win-linux/res/styles/tabbar@1.75x.qss b/win-linux/res/styles/tabbar@1.75x.qss deleted file mode 100644 index 8b1378917..000000000 --- a/win-linux/res/styles/tabbar@1.75x.qss +++ /dev/null @@ -1 +0,0 @@ - diff --git a/win-linux/res/styles/tabbar@1x.qss b/win-linux/res/styles/tabbar@1x.qss deleted file mode 100644 index 139597f9c..000000000 --- a/win-linux/res/styles/tabbar@1x.qss +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/win-linux/res/styles/tabbar@2.5x.qss b/win-linux/res/styles/tabbar@2.5x.qss deleted file mode 100644 index e69de29bb..000000000 diff --git a/win-linux/res/styles/tabbar@2x.qss b/win-linux/res/styles/tabbar@2x.qss deleted file mode 100644 index 139597f9c..000000000 --- a/win-linux/res/styles/tabbar@2x.qss +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/win-linux/res/styles/tabbar_nix.qss b/win-linux/res/styles/tabbar_nix.qss deleted file mode 100644 index 5c60655a2..000000000 --- a/win-linux/res/styles/tabbar_nix.qss +++ /dev/null @@ -1,28 +0,0 @@ -/* -QTabWidget::pane {border: none;} -QTabBar::tab {width: 135px; background-color: #c2c2c2; border: 0 none; border-right: 1px solid #a5a5a5; min-width: 41px; max-width: 135px; -height: 28px; margin: 0 0 0 0;} -QTabBar::tab:hover {background-color: #cecece;} -QTabBar::tab-label {active: #fff; normal: #444;} -QTabBar::tab-icon {width: 15; height: 15;} -QTabBar[active=false]::tab:selected {background-color: #c2c2c2;} -QTabBar[active=true]::tab:selected {background-color:#c2c2c2; border-color:#a5a5a5;} -QTabBar[active=false]::tab:selected:hover {background-color: #cfcfcf;} - -#mainPanel[uitheme=theme-light] QTabBar::tab {border-right-color:#dfdfdf;} - -#mainPanel[uitheme=theme-classic-light] QTabBar::tab {border-right-color:#cbcbcb;} - -#mainPanel[uitheme=theme-dark] QTabWidget::pane {background-color: #404040;} -#mainPanel[uitheme=theme-dark] QTabBar::tab {background-color: #404040; border-right-color: #505050;} -#mainPanel[uitheme=theme-dark] QTabBar::tab:hover {background-color: #555;} -#mainPanel[uitheme=theme-dark] QTabBar::tab:selected {background-color: #404040;} -#mainPanel[uitheme=theme-dark] QTabBar[active=false]::tab:selected:hover {background-color: #555;} - -#scrollerFrame>QToolButton {margin: 0px; border: none; background-color: #c2c2c2;} -#scrollerFrame>QToolButton:hover {background-color: #cecece;} -#scrollerFrame>QToolButton:pressed {background-color: #b7b7b7;} -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton {background-color: #606060;} -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton:hover {background-color: #555;} -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton:pressed {background-color: #b7b7b7;} -*/ diff --git a/win-linux/res/styles/tabbar_nix@2x.qss b/win-linux/res/styles/tabbar_nix@2x.qss deleted file mode 100644 index 1838f3f09..000000000 --- a/win-linux/res/styles/tabbar_nix@2x.qss +++ /dev/null @@ -1,28 +0,0 @@ -/* -QTabWidget::pane {border: none;} -QTabBar::tab {width: 270px; background-color: #c2c2c2; border: 0 none; border-right: 2px solid #a5a5a5; min-width: 82px; max-width: 270px; -height: 56px; margin: 0 0 0 0;} -QTabBar::tab:hover {background-color: #cecece;} -QTabBar::tab-label {active: #fff; normal: #444;} -QTabBar::tab-icon {width: 15; height: 15;} -QTabBar[active=false]::tab:selected {background-color: #c2c2c2;} -QTabBar[active=true]::tab:selected {background-color: #c2c2c2; border-color: #a5a5a5;} -QTabBar[active=false]::tab:selected:hover {background-color: #cfcfcf;} - -#mainPanel[uitheme=theme-light] QTabBar::tab {border-right-color:#dfdfdf;} - -#mainPanel[uitheme=theme-classic-light] QTabBar::tab {border-right-color:#cbcbcb;} - -#mainPanel[uitheme=theme-dark] QTabWidget::pane {background-color: #404040;} -#mainPanel[uitheme=theme-dark] QTabBar::tab {background-color: #404040; border-right-color: #505050;} -#mainPanel[uitheme=theme-dark] QTabBar::tab:hover {background-color: #555;} -#mainPanel[uitheme=theme-dark] QTabBar::tab:selected {background-color: #404040;} -#mainPanel[uitheme=theme-dark] QTabBar[active=false]::tab:selected:hover {background-color: #555;} - -#scrollerFrame>QToolButton {margin: 0px; border: none; background-color: #c2c2c2;} -#scrollerFrame>QToolButton:hover {background-color: #cecece;} -#scrollerFrame>QToolButton:pressed {background-color: #b7b7b7;} -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton {background-color: #606060;} -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton:hover {background-color: #555;} -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton:pressed {background-color: #b7b7b7;} -*/ diff --git a/win-linux/res/styles/theme-contrast-dark.qss b/win-linux/res/styles/theme-contrast-dark.qss deleted file mode 100644 index bf6af8589..000000000 --- a/win-linux/res/styles/theme-contrast-dark.qss +++ /dev/null @@ -1,54 +0,0 @@ -#mainPanel[uitheme=theme-contrast-dark], -#mainPanel[uitheme=theme-contrast-dark] #tabWrapper, -#mainPanel[uitheme=theme-contrast-dark] #CX11Caption, -#mainPanel[uitheme=theme-contrast-dark] QTabBar -{ - background-color: #2a2a2a; -} - -#mainPanel[uitheme=theme-contrast-dark] #labelAppTitle { - color: #d9d9d9; -} - -#mainPanel[uitheme=theme-contrast-dark] QPushButton#toolButtonMain[class=active] { - background: #1e1e1e; -} - -#mainPanel[uitheme=theme-contrast-dark] QPushButton#toolButtonMain { - border-right-color: #414141; -} - -#mainPanel[uitheme=theme-contrast-dark] QPushButton#toolButtonMain[class=normal] { - background: #2a2a2a; -} - -#mainPanel[uitheme=theme-contrast-dark] QPushButton#toolButtonMain[class=normal]:hover { - background: #424242; -} - -#mainPanel[uitheme=theme-contrast-dark] QPushButton#toolButtonMinimize:hover, - #mainPanel[uitheme=theme-contrast-dark] QPushButton#toolButtonMaximize:hover -{ - background-color: #555; -} - -#mainPanel[uitheme=theme-contrast-dark] QTabBar QToolButton::left-arrow, - #mainPanel[uitheme=theme-contrast-dark] QTabBar QToolButton::right-arrow -{ - background-color: #f00; -} - -#mainPanel[uitheme=theme-contrast-dark] QTabBar QToolButton:pressed { - background-color: #f00; -} - - -#mainPanel[uitheme=theme-contrast-dark] QTabWidget::pane {background-color: #2a2a2a;} -#mainPanel[uitheme=theme-contrast-dark] QTabBar::tab {background-color: #2a2a2a; border-right-color: #414141;} -#mainPanel[uitheme=theme-contrast-dark] QTabBar::tab:hover {background-color: #424242;} -#mainPanel[uitheme=theme-contrast-dark] QTabBar::tab:selected {background-color: #2a2a2a;} -#mainPanel[uitheme=theme-contrast-dark] QTabBar[active=false]::tab:selected:hover {background-color: #424242;} - -#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton {background-color: #2a2a2a;} -#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton:hover {background-color: #525252;} -#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton:pressed {background-color: #424242;} diff --git a/win-linux/resources.qrc b/win-linux/resources.qrc index f165c5bcf..1c9e14297 100644 --- a/win-linux/resources.qrc +++ b/win-linux/resources.qrc @@ -146,6 +146,5 @@ res/styles/theme-classic-light.json res/styles/theme-dark.json res/styles/theme-contrast-dark.json - res/styles/theme-contrast-dark.qss diff --git a/win-linux/src/cascapplicationmanagerwrapper.cpp b/win-linux/src/cascapplicationmanagerwrapper.cpp index 35a51a2bf..cd401801f 100644 --- a/win-linux/src/cascapplicationmanagerwrapper.cpp +++ b/win-linux/src/cascapplicationmanagerwrapper.cpp @@ -1117,6 +1117,12 @@ void CAscApplicationManagerWrapper::initializeApp() _app.addStylesheets(CScalingFactor::SCALING_FACTOR_1_5, ":styles@1.5x/styles.qss"); _app.addStylesheets(CScalingFactor::SCALING_FACTOR_1_75, ":styles@1.75x/styles.qss"); _app.addStylesheets(CScalingFactor::SCALING_FACTOR_2, ":styles@2x/styles.qss"); + _app.addStylesheets(CScalingFactor::SCALING_FACTOR_2_5, ":styles@2.5x/styles.qss"); + _app.addStylesheets(CScalingFactor::SCALING_FACTOR_3, ":styles@3x/styles.qss"); + _app.addStylesheets(CScalingFactor::SCALING_FACTOR_3_5, ":styles@3.5x/styles.qss"); + _app.addStylesheets(CScalingFactor::SCALING_FACTOR_4, ":styles@4x/styles.qss"); + _app.addStylesheets(CScalingFactor::SCALING_FACTOR_4_5, ":styles@4.5x/styles.qss"); + _app.addStylesheets(CScalingFactor::SCALING_FACTOR_5, ":styles@5x/styles.qss"); _app.m_private->applyStylesheets(); @@ -1519,6 +1525,24 @@ void CAscApplicationManagerWrapper::sendEvent(int type, void * data) QString CAscApplicationManagerWrapper::getWindowStylesheets(double dpifactor) { + if ( dpifactor > 4.5 ) + return getWindowStylesheets(CScalingFactor::SCALING_FACTOR_5); + else + if ( dpifactor > 4.0 ) + return getWindowStylesheets(CScalingFactor::SCALING_FACTOR_4_5); + else + if ( dpifactor > 3.5 ) + return getWindowStylesheets(CScalingFactor::SCALING_FACTOR_4); + else + if ( dpifactor > 3.0 ) + return getWindowStylesheets(CScalingFactor::SCALING_FACTOR_3_5); + else + if ( dpifactor > 2.5 ) + return getWindowStylesheets(CScalingFactor::SCALING_FACTOR_3); + else + if ( dpifactor > 2.0 ) + return getWindowStylesheets(CScalingFactor::SCALING_FACTOR_2_5); + else if ( dpifactor > 1.75 ) return getWindowStylesheets(CScalingFactor::SCALING_FACTOR_2); else diff --git a/win-linux/src/cascapplicationmanagerwrapper.h b/win-linux/src/cascapplicationmanagerwrapper.h index e743ead1e..eec0d9f01 100644 --- a/win-linux/src/cascapplicationmanagerwrapper.h +++ b/win-linux/src/cascapplicationmanagerwrapper.h @@ -83,6 +83,12 @@ enum class CScalingFactor SCALING_FACTOR_1_5, SCALING_FACTOR_1_75, SCALING_FACTOR_2, + SCALING_FACTOR_2_5, + SCALING_FACTOR_3, + SCALING_FACTOR_3_5, + SCALING_FACTOR_4, + SCALING_FACTOR_4_5, + SCALING_FACTOR_5 }; class CAscApplicationManagerWrapper; diff --git a/win-linux/src/windows/ceditorwindow.cpp b/win-linux/src/windows/ceditorwindow.cpp index 2bb6bf7ca..6b931d931 100644 --- a/win-linux/src/windows/ceditorwindow.cpp +++ b/win-linux/src/windows/ceditorwindow.cpp @@ -226,18 +226,7 @@ QWidget * CEditorWindow::createMainPanel(QWidget * parent, const QString& title) static_cast(m_boxTitleBtns->layout())->insertStretch(0); } - if ( m_dpiRatio > 1.75 ) - mainPanel->setProperty("zoom", "2x"); - else - if ( m_dpiRatio > 1.5 ) - mainPanel->setProperty("zoom", "1.75x"); - else - if ( m_dpiRatio > 1.25 ) - mainPanel->setProperty("zoom", "1.5x"); - else - if ( m_dpiRatio > 1 ) - mainPanel->setProperty("zoom", "1.25x"); - + mainPanel->setProperty("zoom", QString::number(m_dpiRatio) + "x"); mainPanel->setProperty("uitheme", QString::fromStdWString(AscAppManager::themes().current().id())); mainPanel->setStyleSheet(AscAppManager::getWindowStylesheets(m_dpiRatio) + m_css); diff --git a/win-linux/src/windows/cmainwindow.cpp b/win-linux/src/windows/cmainwindow.cpp index 2b04cf41d..954c9b917 100644 --- a/win-linux/src/windows/cmainwindow.cpp +++ b/win-linux/src/windows/cmainwindow.cpp @@ -1371,11 +1371,11 @@ void CMainWindow::updateScalingFactor(double dpiratio) btn->setFixedSize(small_btn_size); }*/ m_pButtonMain->setFixedSize(int(BUTTON_MAIN_WIDTH * dpiratio), int(TITLE_HEIGHT * dpiratio)); - const std::string _tabs_stylesheets = ":/sep-styles/tabbar@" + QString::number(dpiratio).toStdString() + "x.qss"; - std::vector _files{_tabs_stylesheets, ":/themes/theme-contrast-dark.qss"}; - QString _style = Utils::readStylesheets(&_files); - m_pTabBarWrapper->applyTheme(_style); - m_pTabs->setStyleSheet(_style); +// const std::string _tabs_stylesheets = ":/sep-styles/tabbar@" + QString::number(dpiratio).toStdString() + "x.qss"; +// std::vector _files{_tabs_stylesheets, ":/themes/theme-contrast-dark.qss"}; +// QString _style = Utils::readStylesheets(&_files); +// m_pTabBarWrapper->applyTheme(_style); +// m_pTabs->setStyleSheet(_style); m_pTabs->updateScalingFactor(dpiratio); m_pTabs->reloadTabIcons(); m_pButtonMain->setIcon(MAIN_ICON_PATH, AscAppManager::themes().current().isDark() ? "logo-light" : "logo-dark"); From 48d11441b612be72ab86cdd6fb7848a71f080816 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Thu, 13 Apr 2023 12:06:26 +0300 Subject: [PATCH 014/298] [win-linux] add scales for editor and message and refactoring --- win-linux/res/styles/editor.qss | 90 +++++++++++++++++++-- win-linux/res/styles/message.qss | 134 ++++++++++++++++++++++++++++--- 2 files changed, 208 insertions(+), 16 deletions(-) diff --git a/win-linux/res/styles/editor.qss b/win-linux/res/styles/editor.qss index 8ae3a4097..2cc05e7c8 100755 --- a/win-linux/res/styles/editor.qss +++ b/win-linux/res/styles/editor.qss @@ -1,6 +1,6 @@ #mainPanel {background-color: %1;} #box-title-tools {background-color: %1;} -#box-title-tools QLabel {font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;} +#box-title-tools QLabel {font-family: "Helvetica Neue";} #labelTitle {color: #444; font-weight: bold;} #iconuser {color: %1; background: #d9ffffff; font-size: 12px;} QPushButton[act=tool]:hover {background-color: rgba(0,0,0,20%);} @@ -37,6 +37,16 @@ QPushButton#toolButtonClose:pressed {background-color: #d75050;} font-size: 12px; } +/* dark style */ +#mainPanel[uitheme=theme-dark] #labelTitle +{ + color: rgba(255,255,255,80%); +} +#mainPanel[uitheme=theme-contrast-dark] #labelTitle +{ + color: #e8e8e8; +} + /* 1.25x */ #mainPanel[zoom="1.25x"] #toolButtonMinimize, #mainPanel[zoom="1.25x"] #toolButtonClose, @@ -89,12 +99,80 @@ QPushButton#toolButtonClose:pressed {background-color: #d75050;} font-size: 24px; } -/* dark style */ -#mainPanel[uitheme=theme-dark] #labelTitle +/* 2.5x */ +#mainPanel[zoom="2.5x"] #toolButtonMinimize, +#mainPanel[zoom="2.5x"] #toolButtonClose, +#mainPanel[zoom="2.5x"] #toolButtonMaximize { - color: rgba(255,255,255,80%); + padding: 13px 30px 18px; } -#mainPanel[uitheme=theme-contrast-dark] #labelTitle +#mainPanel[zoom="2.5x"] #iconuser, +#mainPanel[zoom="2.5x"] #labelTitle { - color: #e8e8e8; + font-size: 30px; +} + +/* 3x */ +#mainPanel[zoom="3x"] #toolButtonMinimize, +#mainPanel[zoom="3x"] #toolButtonClose, +#mainPanel[zoom="3x"] #toolButtonMaximize +{ + padding: 15px 36px 21px; +} +#mainPanel[zoom="3x"] #iconuser, +#mainPanel[zoom="3x"] #labelTitle +{ + font-size: 36px; +} + +/* 3.5x */ +#mainPanel[zoom="3.5x"] #toolButtonMinimize, +#mainPanel[zoom="3.5x"] #toolButtonClose, +#mainPanel[zoom="3.5x"] #toolButtonMaximize +{ + padding: 18px 42px 25px; +} +#mainPanel[zoom="3.5x"] #iconuser, +#mainPanel[zoom="3.5x"] #labelTitle +{ + font-size: 42px; +} + +/* 4x */ +#mainPanel[zoom="4x"] #toolButtonMinimize, +#mainPanel[zoom="4x"] #toolButtonClose, +#mainPanel[zoom="4x"] #toolButtonMaximize +{ + padding: 20px 48px 28px; +} +#mainPanel[zoom="4x"] #iconuser, +#mainPanel[zoom="4x"] #labelTitle +{ + font-size: 48px; +} + +/* 4.5x */ +#mainPanel[zoom="4.5x"] #toolButtonMinimize, +#mainPanel[zoom="4.5x"] #toolButtonClose, +#mainPanel[zoom="4.5x"] #toolButtonMaximize +{ + padding: 23px 54px 32px; +} +#mainPanel[zoom="4.5x"] #iconuser, +#mainPanel[zoom="4.5x"] #labelTitle +{ + font-size: 54px; +} + +/* 5x */ +#mainPanel[zoom="5x"] #toolButtonMinimize, +#mainPanel[zoom="5x"] #toolButtonClose, +#mainPanel[zoom="5x"] #toolButtonMaximize +{ + padding: 25px 60px 35px; +} +#mainPanel[zoom="5x"] #iconuser, +#mainPanel[zoom="5x"] #labelTitle +{ + font-size: 60px; } diff --git a/win-linux/res/styles/message.qss b/win-linux/res/styles/message.qss index 9550de400..8909373a8 100644 --- a/win-linux/res/styles/message.qss +++ b/win-linux/res/styles/message.qss @@ -27,6 +27,25 @@ QLabel[class=msg-icon][type=msg-confirm] { #messageBody[scaling="2x"] QLabel[class=msg-report] { font-size: 22px; } +#messageBody[scaling="2.5x"] QLabel[class=msg-report] { + font-size: 28px; +} +#messageBody[scaling="3x"] QLabel[class=msg-report] { + font-size: 33px; +} +#messageBody[scaling="3.5x"] QLabel[class=msg-report] { + font-size: 39px; +} +#messageBody[scaling="4x"] QLabel[class=msg-report] { + font-size: 44px; +} +#messageBody[scaling="4.5x"] QLabel[class=msg-report] { + font-size: 50px; +} +#messageBody[scaling="5x"] QLabel[class=msg-report] { + font-size: 55px; +} + #messageBody[scaling="2x"] QPushButton { /* border: 2px solid #cbcbcb; */ /* border-radius:4px; */ @@ -44,17 +63,46 @@ QLabel[class=msg-icon][type=msg-confirm] { height: 28px; font-size: 14px; } - #messageBody[scaling="1.75x"] QPushButton { padding:0 35px; height: 38px; font-size: 19px; } - +#messageBody[scaling="2.5x"] QPushButton { + padding:0 50px; + height: 55px; + font-size: 28px; +} +#messageBody[scaling="3x"] QPushButton { + padding:0 60px; + height: 66px; + font-size: 33px; +} +#messageBody[scaling="3.5x"] QPushButton { + padding:0 70px; + height: 77px; + font-size: 39px; +} +#messageBody[scaling="4x"] QPushButton { + padding:0 80px; + height: 88px; + font-size: 44px; +} +#messageBody[scaling="4.5x"] QPushButton { + padding:0 90px; + height: 99px; + font-size: 50px; +} +#messageBody[scaling="5x"] QPushButton { + padding:0 100px; + height: 110px; + font-size: 55px; +} QPushButton { outline: 0 none; } +/* dark theme */ #messageBody[uitheme=theme-dark] { background-color: #404040; color: rgba(255,255,255,.8); @@ -71,21 +119,54 @@ QPushButton { } #messageBody[uitheme=theme-dark][scaling="2x"] QPushButton, +#messageBody[uitheme=theme-dark][scaling="1.75x"] QPushButton, #messageBody[uitheme=theme-dark][scaling="1.5x"] QPushButton { - border: 2px solid rgba(255,255,255,.8); + border-width: 2px; +} +#messageBody[uitheme=theme-dark][scaling="2.5x"] QPushButton, +#messageBody[uitheme=theme-dark][scaling="3x"] QPushButton +{ + border-width: 3px; +} +#messageBody[uitheme=theme-dark][scaling="3.5x"] QPushButton, +#messageBody[uitheme=theme-dark][scaling="4x"] QPushButton +{ + border-width: 4px; +} +#messageBody[uitheme=theme-dark][scaling="4.5x"] QPushButton, +#messageBody[uitheme=theme-dark][scaling="5x"] QPushButton +{ + border-width: 5px; } #messageBody[uitheme=theme-dark] QPushButton:focus { border: 2px solid rgba(255,255,255,.9); } - #messageBody[uitheme=theme-dark][scaling="1.5x"] QPushButton:focus { - border: 3px solid rgba(255,255,255,.9); + border-width: 3px; } - +#messageBody[uitheme=theme-dark][scaling="1.75x"] QPushButton:focus, #messageBody[uitheme=theme-dark][scaling="2x"] QPushButton:focus { - border: 4px solid rgba(255,255,255,.9); + border-width: 4px; +} +#messageBody[uitheme=theme-dark][scaling="2.5x"] QPushButton:focus { + border-width: 5px; +} +#messageBody[uitheme=theme-dark][scaling="3x"] QPushButton:focus { + border-width: 6px; +} +#messageBody[uitheme=theme-dark][scaling="3.5x"] QPushButton:focus { + border-width: 7px; +} +#messageBody[uitheme=theme-dark][scaling="4x"] QPushButton:focus { + border-width: 8px; +} +#messageBody[uitheme=theme-dark][scaling="4.5x"] QPushButton:focus { + border-width: 9px; +} +#messageBody[uitheme=theme-dark][scaling="5x"] QPushButton:focus { + border-width: 10px; } #messageBody[uitheme=theme-dark] QPushButton:pressed { @@ -109,22 +190,55 @@ QPushButton { } #messageBody[uitheme=theme-contrast-dark][scaling="2x"] QPushButton, +#messageBody[uitheme=theme-contrast-dark][scaling="1.75x"] QPushButton, #messageBody[uitheme=theme-contrast-dark][scaling="1.5x"] QPushButton { - border: 2px solid rgba#e8e8e8; + border-width: 2px; +} +#messageBody[uitheme=theme-contrast-dark][scaling="2.5x"] QPushButton, +#messageBody[uitheme=theme-contrast-dark][scaling="3x"] QPushButton +{ + border-width: 3px; +} +#messageBody[uitheme=theme-contrast-dark][scaling="3.5x"] QPushButton, +#messageBody[uitheme=theme-contrast-dark][scaling="4x"] QPushButton +{ + border-width: 4px; +} +#messageBody[uitheme=theme-contrast-dark][scaling="4.5x"] QPushButton, +#messageBody[uitheme=theme-contrast-dark][scaling="5x"] QPushButton +{ + border-width: 5px; } #messageBody[uitheme=theme-contrast-dark] QPushButton:focus { border: 2px solid #e6e6e6; } - #messageBody[uitheme=theme-contrast-dark][scaling="1.5x"] QPushButton:focus { border-width: 3px; } - +#messageBody[uitheme=theme-contrast-dark][scaling="1.75x"] QPushButton:focus, #messageBody[uitheme=theme-contrast-dark][scaling="2x"] QPushButton:focus { border-width: 4px; } +#messageBody[uitheme=theme-contrast-dark][scaling="2.5x"] QPushButton:focus { + border-width: 5px; +} +#messageBody[uitheme=theme-contrast-dark][scaling="3x"] QPushButton:focus { + border-width: 6px; +} +#messageBody[uitheme=theme-contrast-dark][scaling="3.5x"] QPushButton:focus { + border-width: 7px; +} +#messageBody[uitheme=theme-contrast-dark][scaling="4x"] QPushButton:focus { + border-width: 8px; +} +#messageBody[uitheme=theme-contrast-dark][scaling="4.5x"] QPushButton:focus { + border-width: 9px; +} +#messageBody[uitheme=theme-contrast-dark][scaling="5x"] QPushButton:focus { + border-width: 10px; +} #messageBody[uitheme=theme-contrast-dark] QPushButton:pressed { background-color: #707070; From fde6f3d0b518827db062e8a2820f8f952489eb55 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Thu, 13 Apr 2023 16:32:27 +0300 Subject: [PATCH 015/298] [win-linux] move styles for QPrintDialog to printdialog.qss --- win-linux/res/styles/printdialog.qss | 759 ++++++++++++++++++++++++++ win-linux/res/styles/styles.qss | 283 ---------- win-linux/res/styles/styles@1.25x.qss | 117 ---- win-linux/res/styles/styles@1.5x.qss | 117 ---- win-linux/res/styles/styles@1.75x.qss | 118 ---- win-linux/res/styles/styles@2x.qss | 119 ---- 6 files changed, 759 insertions(+), 754 deletions(-) create mode 100644 win-linux/res/styles/printdialog.qss diff --git a/win-linux/res/styles/printdialog.qss b/win-linux/res/styles/printdialog.qss new file mode 100644 index 000000000..143f24dbd --- /dev/null +++ b/win-linux/res/styles/printdialog.qss @@ -0,0 +1,759 @@ + +/* 1x */ +QDialog QPushButton { + min-width: 40px; +} + +QPrintDialog, QPrintPropertiesDialog { + /*background-color:#fff;*/ + font-family: 'Helvetica Neue',Arial; + /*color: #444;*/ +} + +QPrintDialog QWidget { + /*selection-background-color: rgba(0,0,0,0.4);*/ +} + +QPrintDialog QLabel { + /*color:#444;*/ + font-size: 11px; + font-weight: bold; +} + +QPrintDialog QToolButton{ + /*background-color: red;*/ + border: 1px solid #cbcbcb; + border-radius:2px; + height: 22px; +} + +QPrintDialog QLineEdit{ + font-weight: normal; + font-size: 11px; + /*color: #444;*/ + border: 1px solid #cbcbcb; + height: 22px; + border-radius:2px; +} + +QPrintDialog QGroupBox { + border: 1px solid #cbcbcb; + margin-top: 4ex; + border-radius:2px; + font-size: 11px; + padding:8px; +} + +QPrintDialog QGroupBox::title { + subcontrol-origin: margin; +} + +QPrintDialog QComboBox{ + border: 1px solid #cbcbcb; + font-family: 'Helvetica Neue',Arial; + font-size: 11px; + height: 22px; + border-radius:2px; + /*background-color: #fff;*/ + + /*selection-background-color: red;*/ + show-decoration-selected: 1; +} + +QPrintDialog QComboBox::down-arrow{ + /* border-image: url(:/res/icons/arrow_down.png) 0 0 0 0 repeat repeat; */ + /* width: 5px; */ + /* height: 3px; */ +} + +QPrintDialog QComboBox::drop-down{ + border:0 none; +} + +QPrintDialog QComboBox:!editable:on { + /*background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #D3D3D3, stop:0.4 #D8D8D8, stop:0.5 #DDDDDD, stop:1.0 #E1E1E1);*/ + /*background:#cbced1;*/ +} + +QPrintDialog QComboBox QAbstractItemView { + border: 1px solid #cbcbcb; + border-radius:2px; + /*background-color: #fff;*/ + /*selection-background-color: rgba(255, 255, 255, 0.5);*/ +} + +QPrintDialog QRadioButton::indicator{ + width:13px; + height:13px; +} + +QPrintDialog QRadioButton, QPrintDialog QCheckBox { + font-size: 11px; + /*color: 444;*/ +} + +QPrintDialog QRadioButton::indicator::unchecked{ + border-image: url(:/res/icons/radiobox.png) 0 0 0 0 repeat repeat; +} + +QPrintDialog QRadioButton::indicator::checked{ + border-image: url(:/res/icons/radiobox.png) 13 0 0 0 repeat repeat; +} + +QPrintDialog QCheckBox::indicator{ + width:14px; + height:14px; +} + +QPrintDialog QCheckBox::indicator::checked{ + border-image: url(:/res/icons/checkbox.png) 14 0 0 0 repeat repeat; +} + +QPrintDialog QCheckBox::indicator::unchecked{ + border-image: url(:/res/icons/checkbox.png) 0 0 0 0 repeat repeat; +} + +QSpinBox, QDoubleSpinBox, QTimeEdit { + border: 1px solid #cbcbcb; + border-radius:2px; + height:22px; + font-size: 11px; + /*background-color:#fff;*/ +} + +QPrintDialog *::up-arrow, QPrintDialog *::down-arrow { + width: 5px; + height: 3px; +} + +QPrintDialog *::up-arrow { + border-image: url(:/res/icons/arrow_down.png) 3 0 0 0 repeat repeat; + margin-bottom:1px; +} + +QPrintDialog *::up-arrow:disabled, QPrintDialog *::up-arrow:off { + border-image: url(:/res/icons/arrow_down.png) 3 0 0 5 repeat repeat; +} + +/*QSpinBox::down-arrow, QDoubleSpinBox::down-arrow, QTimeEdit::down-arrow {*/ +QPrintDialog *::down-arrow { + border-image: url(:/res/icons/arrow_down.png) 0 0 0 0 repeat repeat; + margin-top:1px; +} + +QPrintDialog *::down-arrow:disabled, QPrintDialog ::down-arrow:off { + border-image: url(:/res/icons/arrow_down.png) 0 0 0 5 repeat repeat; +} + +QPrintDialog *::up-button, QPrintDialog *::down-button { + border: 0 none; +} + +QPrintDialog QTabWidget::pane{ + /*background-color: white;*/ + /*border: 1px solid #cbcbcb;*/ + /*position:absolute;*/ + /*top: -1px;*/ +} +QPrintDialog QTabBar::tab { + /*background-color:#fff;*/ + border: 1px solid #cbcbcb; + padding: 0 10px; + border-top-left-radius: 2px; + border-top-right-radius: 2px; + margin-right:-1px; + font-size: 11px; +} + +QPrintDialog QTabBar::tab:first { +} + +QPrintDialog QTabBar::tab:last { + margin-right:0; +} + +QPrintDialog QTabBar::tab:selected { + padding: 0 10px; +} + +QPrintDialog QTabBar::tab:selected { + background-color:rgba(255,255,255,0.3); + /*border-bottom-color: transparent;*/ +} + +QPrintDialog QTabBar::tab:!selected { + /*margin-top: 2px;*/ + /*color:#444;*/ +} + + +#mainPanel[uitheme=theme-dark] QPrintDialog, + #mainPanel[uitheme=theme-dark] QPrintPropertiesDialog +{ + background-color: #404040; +} + +#mainPanel[uitheme=theme-dark] QPrintDialog QLabel { + color: #d9d9d9; +} + +#mainPanel[uitheme=theme-dark] QPrintDialog QPushButton, + #mainPanel[uitheme=theme-dark] QPrintDialog QToolButton +{ + background-color: #555; + color: #d9d9d9; + border: 1px solid rgba(255,255,255,.8); +} + +#mainPanel[uitheme=theme-dark] QPrintDialog QPushButton:focus { + border: 2px solid rgba(255,255,255,.9); +} + +#mainPanel[uitheme=theme-dark] QPrintDialog QLineEdit { + background-color: #404040; + color: #d9d9d9; +} + +#mainPanel[uitheme=theme-dark] QPrintDialog QGroupBox { + background-color: #404040; +} + +#mainPanel[uitheme=theme-dark] QPrintDialog QGroupBox::title { + color: #d9d9d9; +} + +#mainPanel[uitheme=theme-dark] QPrintDialog QComboBox{ + background-color: #404040; + selection-background-color: #606060; + color: #d9d9d9; +} + +#mainPanel[uitheme=theme-dark] QPrintDialog QComboBox QAbstractItemView { + background-color: #404040; +} + + +#mainPanel[uitheme=theme-dark] QPrintDialog QRadioButton, + #mainPanel[uitheme=theme-dark] QPrintDialog QCheckBox +{ + color: #d9d9d9; +} + +#mainPanel[uitheme=theme-dark] QPrintDialog QTabWidget::pane { + background-color: #404040; + border: 1px solid rgba(255,255,255,.8); + position:absolute; + top:-1px; +} + +#mainPanel[uitheme=theme-dark] QPrintDialog QWidget { + background-color: #404040; +} + +#mainPanel[uitheme=theme-dark] QPrintDialog QTabBar::tab { + color: #d9d9d9; +} + +#mainPanel[uitheme=theme-dark] QSpinBox, + #mainPanel[uitheme=theme-dark] QDoubleSpinBox, + #mainPanel[uitheme=theme-dark] QTimeEdit +{ + background-color: #404040; + color: #d9d9d9; +} + +#mainPanel[uitheme=theme-dark] QPrintDialog *::up-arrow { + border-image: url(:/arrow_down_dark.png) 3 0 0 0 repeat repeat; +} + +#mainPanel[uitheme=theme-dark] QPrintDialog *::up-arrow:disabled, + #mainPanel[uitheme=theme-dark] QPrintDialog *::up-arrow:off +{ + border-image: url(:/arrow_down_dark.png) 3 0 0 5 repeat repeat; +} + +#mainPanel[uitheme=theme-dark] QPrintDialog *::down-arrow { + border-image: url(:/arrow_down_dark.png) 0 0 0 0 repeat repeat; +} + +#mainPanel[uitheme=theme-dark] QPrintDialog *::down-arrow:disabled, + #mainPanel[uitheme=theme-dark] QPrintDialog ::down-arrow:off +{ + border-image: url(:/arrow_down_dark.png) 0 0 0 5 repeat repeat; +} + +/* 1.25x */ +QDialog QPushButton { + min-width: 100px; +} + +QPrintDialog QLabel { + font-size: 14px; +} + +QPrintDialog QToolButton{ + border-width: 1px; + border-radius: 2px; + height: 33px; +} + +QPrintDialog QLineEdit{ + font-size: 14px; + border-width: 1px; + height: 28px; + border-radius: 2px; +} + +QPrintDialog QGroupBox { + border-width: 1px; + margin-top: 5ex; + border-radius: 2px; + font-size: 14px; + padding: 10px; +} + +QPrintDialog QComboBox{ + border-width: 1px; + font-size: 14px; + height: 28px; + border-radius:2px; +} + +QPrintDialog QComboBox QAbstractItemView { + border-width: 1px; + border-radius: 2px; +} + +QPrintDialog QRadioButton::indicator{ + width: 16px; + height: 16px; +} + +QPrintDialog QRadioButton, QPrintDialog QCheckBox { + font-size: 14px; +} + +QPrintDialog QRadioButton::indicator::unchecked{ + border-image: url(:/radiobox_1.25x.png) 0 0 0 0 repeat repeat; +} + +QPrintDialog QRadioButton::indicator::checked{ + border-image: url(:/radiobox_1.25x.png) 20 0 0 0 repeat repeat; +} + +QPrintDialog QCheckBox::indicator{ + width: 18px; + height: 18px; +} + +QPrintDialog QCheckBox::indicator::checked{ + border-image: url(:/checkbox_1.25x.png) 21 0 0 0 repeat repeat; +} + +QPrintDialog QCheckBox::indicator::unchecked{ + border-image: url(:/checkbox_1.25x.png) 0 0 0 0 repeat repeat; +} + +QSpinBox, QDoubleSpinBox, QTimeEdit { + border-width: 1px; + border-radius: 2px; + height: 28px; + font-size: 14px; +} + +QPrintDialog *::up-arrow, QPrintDialog *::down-arrow { + width: 6px; + height: 4px; +} + +QPrintDialog *::up-arrow { + border-image: url(:/arrow_down_1.25x.png) 5 0 0 0 repeat repeat; + margin-bottom:1px; +} + +QPrintDialog *::up-arrow:disabled, QPrintDialog *::up-arrow:off { + border-image: url(:/arrow_down_1.25x.png) 5 0 0 8 repeat repeat; +} + +QPrintDialog *::down-arrow { + border-image: url(:/arrow_down_1.25x.png) 0 0 0 0 repeat repeat; + margin-top:1px; +} + +QPrintDialog *::down-arrow:disabled, QPrintDialog ::down-arrow:off { + border-image: url(:/arrow_down_1.25x.png) 0 0 0 8 repeat repeat; +} + +QPrintDialog QTabWidget::pane{ + border-width: 1px; + top: -1px; +} +QPrintDialog QTabBar::tab { + border-width: 1px; + padding: 0 13px; + border-top-left-radius: 2px; + border-top-right-radius: 2px; + margin-right:-1px; + font-size: 14px; +} + +QPrintDialog QTabBar::tab:selected { + padding: 0 13px; +} + +/* 1.5x */ +QDialog QPushButton { + min-width: 120px; +} + +QPrintDialog QLabel { + font-size: 17px; +} + +QPrintDialog QToolButton{ + border-width: 1px; + border-radius: 3px; + height: 33px; +} + +QPrintDialog QLineEdit{ + font-size: 17px; + border-width: 2px; + height: 33px; + border-radius: 3px; +} + +QPrintDialog QGroupBox { + border-width: 2px; + margin-top: 6ex; + border-radius: 3px; + font-size: 17px; + padding: 12px; +} + +QPrintDialog QComboBox{ + border-width: 2px; + font-size: 17px; + height: 33px; + border-radius:3px; +} + +QPrintDialog QComboBox QAbstractItemView { + border-width: 2px; + border-radius: 3px; +} + +QPrintDialog QRadioButton::indicator{ + width: 20px; + height: 20px; +} + +QPrintDialog QRadioButton, QPrintDialog QCheckBox { + font-size: 17px; +} + +QPrintDialog QRadioButton::indicator::unchecked{ + border-image: url(:/radiobox_1.5x.png) 0 0 0 0 repeat repeat; +} + +QPrintDialog QRadioButton::indicator::checked{ + border-image: url(:/radiobox_1.5x.png) 20 0 0 0 repeat repeat; +} + +QPrintDialog QCheckBox::indicator{ + width: 21px; + height: 21px; +} + +QPrintDialog QCheckBox::indicator::checked{ + border-image: url(:/checkbox_1.5x.png) 21 0 0 0 repeat repeat; +} + +QPrintDialog QCheckBox::indicator::unchecked{ + border-image: url(:/checkbox_1.5x.png) 0 0 0 0 repeat repeat; +} + +QSpinBox, QDoubleSpinBox, QTimeEdit { + border-width: 2px; + border-radius: 3px; + height: 33px; + font-size: 17px; +} + +QPrintDialog *::up-arrow, QPrintDialog *::down-arrow { + width: 8px; + height: 5px; +} + +QPrintDialog *::up-arrow { + border-image: url(:/arrow_down_1.5x.png) 5 0 0 0 repeat repeat; + margin-bottom:1px; +} + +QPrintDialog *::up-arrow:disabled, QPrintDialog *::up-arrow:off { + border-image: url(:/arrow_down_1.5x.png) 5 0 0 8 repeat repeat; +} + +QPrintDialog *::down-arrow { + border-image: url(:/arrow_down_1.5x.png) 0 0 0 0 repeat repeat; + margin-top:1px; +} + +QPrintDialog *::down-arrow:disabled, QPrintDialog ::down-arrow:off { + border-image: url(:/arrow_down_1.5x.png) 0 0 0 8 repeat repeat; +} + +QPrintDialog QTabWidget::pane{ + border-width: 2px; + top: -2px; +} +QPrintDialog QTabBar::tab { + border-width: 2px; + padding: 0 15px; + border-top-left-radius: 3px; + border-top-right-radius: 3px; + margin-right:-2px; + font-size: 17px; +} + +QPrintDialog QTabBar::tab:selected { + padding: 0 15px; +} + +/* 1.75x */ +QDialog QPushButton { + min-width: 140px; +} + +QPrintDialog QLabel { + font-size: 20px; +} + +QPrintDialog QToolButton{ + border-width: 1px; + border-radius: 3px; + height: 39px; +} + +QPrintDialog QLineEdit{ + font-size: 20px; + border-width: 2px; + height: 39px; + border-radius: 3px; +} + +QPrintDialog QGroupBox { + border-width: 2px; + margin-top: 7ex; + border-radius: 3px; + font-size: 20px; + padding: 14px; +} + +QPrintDialog QComboBox{ + border-width: 2px; + font-size: 20px; + height: 39px; + border-radius: 4px; +} + +QPrintDialog QComboBox QAbstractItemView { + border-width: 2px; + border-radius: 3px; +} + +QPrintDialog QRadioButton::indicator{ + width: 23px; + height: 23px; +} + +QPrintDialog QRadioButton, QPrintDialog QCheckBox { + font-size: 20px; +} + +QPrintDialog QRadioButton::indicator::unchecked{ + border-image: url(:/radiobox_1.75x.png) 0 0 0 0 repeat repeat; +} + +QPrintDialog QRadioButton::indicator::checked{ + border-image: url(:/radiobox_1.75x.png) 20 0 0 0 repeat repeat; +} + +QPrintDialog QCheckBox::indicator{ + width: 25px; + height: 25px; +} + +QPrintDialog QCheckBox::indicator::checked{ + border-image: url(:/checkbox_1.75x.png) 21 0 0 0 repeat repeat; +} + +QPrintDialog QCheckBox::indicator::unchecked{ + border-image: url(:/checkbox_1.5x.png) 0 0 0 0 repeat repeat; +} + +QSpinBox, QDoubleSpinBox, QTimeEdit { + border-width: 2px; + border-radius: 3px; + height: 39px; + font-size: 20px; +} + +QPrintDialog *::up-arrow, QPrintDialog *::down-arrow { + width: 9px; + height: 6px; +} + +QPrintDialog *::up-arrow { + border-image: url(:/arrow_down_1.75x.png) 5 0 0 0 repeat repeat; + margin-bottom:1px; +} + +QPrintDialog *::up-arrow:disabled, QPrintDialog *::up-arrow:off { + border-image: url(:/arrow_down_1.75x.png) 5 0 0 8 repeat repeat; +} + +QPrintDialog *::down-arrow { + border-image: url(:/arrow_down_1.75x.png) 0 0 0 0 repeat repeat; + margin-top:1px; +} + +QPrintDialog *::down-arrow:disabled, QPrintDialog ::down-arrow:off { + border-image: url(:/arrow_down_1.75x.png) 0 0 0 8 repeat repeat; +} + +QPrintDialog QTabWidget::pane{ + border-width: 2px; + top: -2px; +} +QPrintDialog QTabBar::tab { + border-width: 2px; + padding: 0 18px; + border-top-left-radius: 3px; + border-top-right-radius: 3px; + margin-right:-2px; + font-size: 20px; +} + +QPrintDialog QTabBar::tab:selected { + padding: 0 18px; +} + +/* 2x */ +QDialog QPushButton { + min-width: 80px; +} + +QPrintDialog QLabel { + font-size: 22px; +} + +QPrintDialog QToolButton{ + border-width: 1px; + border-radius:4px; + height: 44px; +} + +QPrintDialog QLineEdit{ + font-size: 22px; + border-width: 2px; + height: 44px; + border-radius:4px; +} + +QPrintDialog QGroupBox { + border-width: 2px; + margin-top: 8ex; + border-radius:4px; + font-size: 22px; + padding:16px; +} + +QPrintDialog QComboBox{ + border-width: 2px; + font-size: 22px; + height: 44px; + border-radius:4px; +} + +QPrintDialog QComboBox QAbstractItemView { + border-width: 2px; + border-radius:4px; +} + +QPrintDialog QRadioButton::indicator{ + width:26px; + height:26px; +} + +QPrintDialog QRadioButton, QPrintDialog QCheckBox { + font-size: 22px; +} + +QPrintDialog QRadioButton::indicator::unchecked{ + border-image: url(:/radiobox_2x.png) 0 0 0 0 repeat repeat; +} + +QPrintDialog QRadioButton::indicator::checked{ + border-image: url(:/radiobox_2x.png) 26 0 0 0 repeat repeat; +} + +QPrintDialog QCheckBox::indicator{ + width:28px; + height:28px; +} + +QPrintDialog QCheckBox::indicator::checked{ + border-image: url(:/checkbox_2x.png) 28 0 0 0 repeat repeat; +} + +QPrintDialog QCheckBox::indicator::unchecked{ + border-image: url(:/checkbox_2x.png) 0 0 0 0 repeat repeat; +} + +QSpinBox, QDoubleSpinBox, QTimeEdit { + border-width: 2px; + border-radius:4px; + height:44px; + font-size:22px; +} + +QPrintDialog *::up-arrow, QPrintDialog *::down-arrow { + width: 10px; + height: 6px; +} + +QPrintDialog *::up-arrow { + border-image: url(:/arrow_down_2x.png) 6 0 0 0 repeat repeat; + margin-bottom:1px; +} + +QPrintDialog *::up-arrow:disabled, QPrintDialog *::up-arrow:off { + border-image: url(:/arrow_down_2x.png) 6 0 0 10 repeat repeat; +} + +QPrintDialog *::down-arrow { + border-image: url(:/arrow_down_2x.png) 0 0 0 0 repeat repeat; + margin-top:1px; +} + +QPrintDialog *::down-arrow:disabled, QPrintDialog ::down-arrow:off { + border-image: url(:/arrow_down_2x.png) 0 0 0 10 repeat repeat; +} + +QPrintDialog QTabWidget::pane{ + border-width: 2px; + top: -2px; +} +QPrintDialog QTabBar::tab { + border-width: 2px; + padding: 0 20px; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + margin-right:-2px; + font-size: 22px; +} + +QPrintDialog QTabBar::tab:selected { + padding: 0 20px; +} diff --git a/win-linux/res/styles/styles.qss b/win-linux/res/styles/styles.qss index d42c1d88a..9f77ede61 100644 --- a/win-linux/res/styles/styles.qss +++ b/win-linux/res/styles/styles.qss @@ -323,101 +323,6 @@ QPushButton#toolButtonDownload::menu-indicator { } -#mainPanel[uitheme=theme-dark] QPrintDialog, - #mainPanel[uitheme=theme-dark] QPrintPropertiesDialog -{ - background-color: #404040; -} - -#mainPanel[uitheme=theme-dark] QPrintDialog QLabel { - color: #d9d9d9; -} - -#mainPanel[uitheme=theme-dark] QPrintDialog QPushButton, - #mainPanel[uitheme=theme-dark] QPrintDialog QToolButton -{ - background-color: #555; - color: #d9d9d9; - border: 1px solid rgba(255,255,255,.8); -} - -#mainPanel[uitheme=theme-dark] QPrintDialog QPushButton:focus { - border: 2px solid rgba(255,255,255,.9); -} - -#mainPanel[uitheme=theme-dark] QPrintDialog QLineEdit { - background-color: #404040; - color: #d9d9d9; -} - -#mainPanel[uitheme=theme-dark] QPrintDialog QGroupBox { - background-color: #404040; -} - -#mainPanel[uitheme=theme-dark] QPrintDialog QGroupBox::title { - color: #d9d9d9; -} - -#mainPanel[uitheme=theme-dark] QPrintDialog QComboBox{ - background-color: #404040; - selection-background-color: #606060; - color: #d9d9d9; -} - -#mainPanel[uitheme=theme-dark] QPrintDialog QComboBox QAbstractItemView { - background-color: #404040; -} - - -#mainPanel[uitheme=theme-dark] QPrintDialog QRadioButton, - #mainPanel[uitheme=theme-dark] QPrintDialog QCheckBox -{ - color: #d9d9d9; -} - -#mainPanel[uitheme=theme-dark] QPrintDialog QTabWidget::pane { - background-color: #404040; - border: 1px solid rgba(255,255,255,.8); - position:absolute; - top:-1px; -} - -#mainPanel[uitheme=theme-dark] QPrintDialog QWidget { - background-color: #404040; -} - -#mainPanel[uitheme=theme-dark] QPrintDialog QTabBar::tab { - color: #d9d9d9; -} - -#mainPanel[uitheme=theme-dark] QSpinBox, - #mainPanel[uitheme=theme-dark] QDoubleSpinBox, - #mainPanel[uitheme=theme-dark] QTimeEdit -{ - background-color: #404040; - color: #d9d9d9; -} - -#mainPanel[uitheme=theme-dark] QPrintDialog *::up-arrow { - border-image: url(:/arrow_down_dark.png) 3 0 0 0 repeat repeat; -} - -#mainPanel[uitheme=theme-dark] QPrintDialog *::up-arrow:disabled, - #mainPanel[uitheme=theme-dark] QPrintDialog *::up-arrow:off -{ - border-image: url(:/arrow_down_dark.png) 3 0 0 5 repeat repeat; -} - -#mainPanel[uitheme=theme-dark] QPrintDialog *::down-arrow { - border-image: url(:/arrow_down_dark.png) 0 0 0 0 repeat repeat; -} - -#mainPanel[uitheme=theme-dark] QPrintDialog *::down-arrow:disabled, - #mainPanel[uitheme=theme-dark] QPrintDialog ::down-arrow:off -{ - border-image: url(:/arrow_down_dark.png) 0 0 0 5 repeat repeat; -} - /* Contrast-Dark*/ #mainPanel[uitheme=theme-contrast-dark], @@ -645,24 +550,6 @@ CDownloadWidget[hdpi] QLabel#labelName { font-size: 32px; } -/* end of download widget */ - -QPrintDialog, QPrintPropertiesDialog { - /*background-color:#fff;*/ - font-family: 'Helvetica Neue',Arial; - /*color: #444;*/ -} - -QPrintDialog QWidget { - /*selection-background-color: rgba(0,0,0,0.4);*/ -} - -QPrintDialog QLabel { - /*color:#444;*/ - font-size: 11px; - font-weight: bold; -} - QPushButton { /*background-color:#d9d9d9;*/ padding:0 20px; @@ -671,176 +558,6 @@ QPushButton { font-size: 12px; } -QDialog QPushButton { - min-width: 40px; -} - -QPrintDialog QToolButton{ - /*background-color: red;*/ - border: 1px solid #cbcbcb; - border-radius:2px; - height: 22px; -} - -QPrintDialog QLineEdit{ - font-weight: normal; - font-size: 11px; - /*color: #444;*/ - border: 1px solid #cbcbcb; - height: 22px; - border-radius:2px; -} - -QPrintDialog QGroupBox { - border: 1px solid #cbcbcb; - margin-top: 4ex; - border-radius:2px; - font-size: 11px; - padding:8px; -} - -QPrintDialog QGroupBox::title { - subcontrol-origin: margin; -} - -QPrintDialog QComboBox{ - border: 1px solid #cbcbcb; - font-family: 'Helvetica Neue',Arial; - font-size: 11px; - height: 22px; - border-radius:2px; - /*background-color: #fff;*/ - - /*selection-background-color: red;*/ - show-decoration-selected: 1; -} - -QPrintDialog QComboBox::down-arrow{ - /* border-image: url(:/res/icons/arrow_down.png) 0 0 0 0 repeat repeat; */ - /* width: 5px; */ - /* height: 3px; */ -} - -QPrintDialog QComboBox::drop-down{ - border:0 none; -} - -QPrintDialog QComboBox:!editable:on { - /*background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #D3D3D3, stop:0.4 #D8D8D8, stop:0.5 #DDDDDD, stop:1.0 #E1E1E1);*/ - /*background:#cbced1;*/ -} - -QPrintDialog QComboBox QAbstractItemView { - border: 1px solid #cbcbcb; - border-radius:2px; - /*background-color: #fff;*/ - /*selection-background-color: rgba(255, 255, 255, 0.5);*/ -} - -QPrintDialog QRadioButton::indicator{ - width:13px; - height:13px; -} - -QPrintDialog QRadioButton, QPrintDialog QCheckBox { - font-size: 11px; - /*color: 444;*/ -} - -QPrintDialog QRadioButton::indicator::unchecked{ - border-image: url(:/res/icons/radiobox.png) 0 0 0 0 repeat repeat; -} - -QPrintDialog QRadioButton::indicator::checked{ - border-image: url(:/res/icons/radiobox.png) 13 0 0 0 repeat repeat; -} - -QPrintDialog QCheckBox::indicator{ - width:14px; - height:14px; -} - -QPrintDialog QCheckBox::indicator::checked{ - border-image: url(:/res/icons/checkbox.png) 14 0 0 0 repeat repeat; -} - -QPrintDialog QCheckBox::indicator::unchecked{ - border-image: url(:/res/icons/checkbox.png) 0 0 0 0 repeat repeat; -} - -QSpinBox, QDoubleSpinBox, QTimeEdit { - border: 1px solid #cbcbcb; - border-radius:2px; - height:22px; - font-size: 11px; - /*background-color:#fff;*/ -} - -QPrintDialog *::up-arrow, QPrintDialog *::down-arrow { - width: 5px; - height: 3px; -} - -QPrintDialog *::up-arrow { - border-image: url(:/res/icons/arrow_down.png) 3 0 0 0 repeat repeat; - margin-bottom:1px; -} - -QPrintDialog *::up-arrow:disabled, QPrintDialog *::up-arrow:off { - border-image: url(:/res/icons/arrow_down.png) 3 0 0 5 repeat repeat; -} - -/*QSpinBox::down-arrow, QDoubleSpinBox::down-arrow, QTimeEdit::down-arrow {*/ -QPrintDialog *::down-arrow { - border-image: url(:/res/icons/arrow_down.png) 0 0 0 0 repeat repeat; - margin-top:1px; -} - -QPrintDialog *::down-arrow:disabled, QPrintDialog ::down-arrow:off { - border-image: url(:/res/icons/arrow_down.png) 0 0 0 5 repeat repeat; -} - -QPrintDialog *::up-button, QPrintDialog *::down-button { - border: 0 none; -} - -QPrintDialog QTabWidget::pane{ - /*background-color: white;*/ - /*border: 1px solid #cbcbcb;*/ - /*position:absolute;*/ - /*top: -1px;*/ -} -QPrintDialog QTabBar::tab { - /*background-color:#fff;*/ - border: 1px solid #cbcbcb; - padding: 0 10px; - border-top-left-radius: 2px; - border-top-right-radius: 2px; - margin-right:-1px; - font-size: 11px; -} - -QPrintDialog QTabBar::tab:first { -} - -QPrintDialog QTabBar::tab:last { - margin-right:0; -} - -QPrintDialog QTabBar::tab:selected { - padding: 0 10px; -} - -QPrintDialog QTabBar::tab:selected { - background-color:rgba(255,255,255,0.3); - /*border-bottom-color: transparent;*/ -} - -QPrintDialog QTabBar::tab:!selected { - /*margin-top: 2px;*/ - /*color:#444;*/ -} - #CToolTip>QLabel { min-height: 26px; margin: 0px; diff --git a/win-linux/res/styles/styles@1.25x.qss b/win-linux/res/styles/styles@1.25x.qss index ffd8e5967..777ece9b2 100644 --- a/win-linux/res/styles/styles@1.25x.qss +++ b/win-linux/res/styles/styles@1.25x.qss @@ -121,127 +121,10 @@ QPushButton { font-size: 14px; } -QDialog QPushButton { - min-width: 100px; -} - QLabel[class=tab-icon] { padding:0 0 2px 8px; } -QPrintDialog QLabel { - font-size: 14px; -} - -QPrintDialog QToolButton{ - border-width: 1px; - border-radius: 2px; - height: 33px; -} - -QPrintDialog QLineEdit{ - font-size: 14px; - border-width: 1px; - height: 28px; - border-radius: 2px; -} - -QPrintDialog QGroupBox { - border-width: 1px; - margin-top: 5ex; - border-radius: 2px; - font-size: 14px; - padding: 10px; -} - -QPrintDialog QComboBox{ - border-width: 1px; - font-size: 14px; - height: 28px; - border-radius:2px; -} - -QPrintDialog QComboBox QAbstractItemView { - border-width: 1px; - border-radius: 2px; -} - -QPrintDialog QRadioButton::indicator{ - width: 16px; - height: 16px; -} - -QPrintDialog QRadioButton, QPrintDialog QCheckBox { - font-size: 14px; -} - -QPrintDialog QRadioButton::indicator::unchecked{ - border-image: url(:/radiobox_1.25x.png) 0 0 0 0 repeat repeat; -} - -QPrintDialog QRadioButton::indicator::checked{ - border-image: url(:/radiobox_1.25x.png) 20 0 0 0 repeat repeat; -} - -QPrintDialog QCheckBox::indicator{ - width: 18px; - height: 18px; -} - -QPrintDialog QCheckBox::indicator::checked{ - border-image: url(:/checkbox_1.25x.png) 21 0 0 0 repeat repeat; -} - -QPrintDialog QCheckBox::indicator::unchecked{ - border-image: url(:/checkbox_1.25x.png) 0 0 0 0 repeat repeat; -} - -QSpinBox, QDoubleSpinBox, QTimeEdit { - border-width: 1px; - border-radius: 2px; - height: 28px; - font-size: 14px; -} - -QPrintDialog *::up-arrow, QPrintDialog *::down-arrow { - width: 6px; - height: 4px; -} - -QPrintDialog *::up-arrow { - border-image: url(:/arrow_down_1.25x.png) 5 0 0 0 repeat repeat; - margin-bottom:1px; -} - -QPrintDialog *::up-arrow:disabled, QPrintDialog *::up-arrow:off { - border-image: url(:/arrow_down_1.25x.png) 5 0 0 8 repeat repeat; -} - -QPrintDialog *::down-arrow { - border-image: url(:/arrow_down_1.25x.png) 0 0 0 0 repeat repeat; - margin-top:1px; -} - -QPrintDialog *::down-arrow:disabled, QPrintDialog ::down-arrow:off { - border-image: url(:/arrow_down_1.25x.png) 0 0 0 8 repeat repeat; -} - -QPrintDialog QTabWidget::pane{ - border-width: 1px; - top: -1px; -} -QPrintDialog QTabBar::tab { - border-width: 1px; - padding: 0 13px; - border-top-left-radius: 2px; - border-top-right-radius: 2px; - margin-right:-1px; - font-size: 14px; -} - -QPrintDialog QTabBar::tab:selected { - padding: 0 13px; -} #CToolTip>QLabel { min-height: 32px; diff --git a/win-linux/res/styles/styles@1.5x.qss b/win-linux/res/styles/styles@1.5x.qss index 86aa5e90c..b1526023d 100644 --- a/win-linux/res/styles/styles@1.5x.qss +++ b/win-linux/res/styles/styles@1.5x.qss @@ -122,127 +122,10 @@ QPushButton { font-size: 17px; } -QDialog QPushButton { - min-width: 120px; -} - QLabel[class=tab-icon] { padding:0 0 3px 9px; } -QPrintDialog QLabel { - font-size: 17px; -} - -QPrintDialog QToolButton{ - border-width: 1px; - border-radius: 3px; - height: 33px; -} - -QPrintDialog QLineEdit{ - font-size: 17px; - border-width: 2px; - height: 33px; - border-radius: 3px; -} - -QPrintDialog QGroupBox { - border-width: 2px; - margin-top: 6ex; - border-radius: 3px; - font-size: 17px; - padding: 12px; -} - -QPrintDialog QComboBox{ - border-width: 2px; - font-size: 17px; - height: 33px; - border-radius:3px; -} - -QPrintDialog QComboBox QAbstractItemView { - border-width: 2px; - border-radius: 3px; -} - -QPrintDialog QRadioButton::indicator{ - width: 20px; - height: 20px; -} - -QPrintDialog QRadioButton, QPrintDialog QCheckBox { - font-size: 17px; -} - -QPrintDialog QRadioButton::indicator::unchecked{ - border-image: url(:/radiobox_1.5x.png) 0 0 0 0 repeat repeat; -} - -QPrintDialog QRadioButton::indicator::checked{ - border-image: url(:/radiobox_1.5x.png) 20 0 0 0 repeat repeat; -} - -QPrintDialog QCheckBox::indicator{ - width: 21px; - height: 21px; -} - -QPrintDialog QCheckBox::indicator::checked{ - border-image: url(:/checkbox_1.5x.png) 21 0 0 0 repeat repeat; -} - -QPrintDialog QCheckBox::indicator::unchecked{ - border-image: url(:/checkbox_1.5x.png) 0 0 0 0 repeat repeat; -} - -QSpinBox, QDoubleSpinBox, QTimeEdit { - border-width: 2px; - border-radius: 3px; - height: 33px; - font-size: 17px; -} - -QPrintDialog *::up-arrow, QPrintDialog *::down-arrow { - width: 8px; - height: 5px; -} - -QPrintDialog *::up-arrow { - border-image: url(:/arrow_down_1.5x.png) 5 0 0 0 repeat repeat; - margin-bottom:1px; -} - -QPrintDialog *::up-arrow:disabled, QPrintDialog *::up-arrow:off { - border-image: url(:/arrow_down_1.5x.png) 5 0 0 8 repeat repeat; -} - -QPrintDialog *::down-arrow { - border-image: url(:/arrow_down_1.5x.png) 0 0 0 0 repeat repeat; - margin-top:1px; -} - -QPrintDialog *::down-arrow:disabled, QPrintDialog ::down-arrow:off { - border-image: url(:/arrow_down_1.5x.png) 0 0 0 8 repeat repeat; -} - -QPrintDialog QTabWidget::pane{ - border-width: 2px; - top: -2px; -} -QPrintDialog QTabBar::tab { - border-width: 2px; - padding: 0 15px; - border-top-left-radius: 3px; - border-top-right-radius: 3px; - margin-right:-2px; - font-size: 17px; -} - -QPrintDialog QTabBar::tab:selected { - padding: 0 15px; -} #CToolTip>QLabel { min-height: 40px; diff --git a/win-linux/res/styles/styles@1.75x.qss b/win-linux/res/styles/styles@1.75x.qss index de85c5782..987e90169 100644 --- a/win-linux/res/styles/styles@1.75x.qss +++ b/win-linux/res/styles/styles@1.75x.qss @@ -121,128 +121,10 @@ QPushButton { font-size: 20px; } -QDialog QPushButton { - min-width: 140px; -} - QLabel[class=tab-icon] { padding:0 0 4px 9px; } -QPrintDialog QLabel { - font-size: 20px; -} - -QPrintDialog QToolButton{ - border-width: 1px; - border-radius: 3px; - height: 39px; -} - -QPrintDialog QLineEdit{ - font-size: 20px; - border-width: 2px; - height: 39px; - border-radius: 3px; -} - -QPrintDialog QGroupBox { - border-width: 2px; - margin-top: 7ex; - border-radius: 3px; - font-size: 20px; - padding: 14px; -} - -QPrintDialog QComboBox{ - border-width: 2px; - font-size: 20px; - height: 39px; - border-radius: 4px; -} - -QPrintDialog QComboBox QAbstractItemView { - border-width: 2px; - border-radius: 3px; -} - -QPrintDialog QRadioButton::indicator{ - width: 23px; - height: 23px; -} - -QPrintDialog QRadioButton, QPrintDialog QCheckBox { - font-size: 20px; -} - -QPrintDialog QRadioButton::indicator::unchecked{ - border-image: url(:/radiobox_1.75x.png) 0 0 0 0 repeat repeat; -} - -QPrintDialog QRadioButton::indicator::checked{ - border-image: url(:/radiobox_1.75x.png) 20 0 0 0 repeat repeat; -} - -QPrintDialog QCheckBox::indicator{ - width: 25px; - height: 25px; -} - -QPrintDialog QCheckBox::indicator::checked{ - border-image: url(:/checkbox_1.75x.png) 21 0 0 0 repeat repeat; -} - -QPrintDialog QCheckBox::indicator::unchecked{ - border-image: url(:/checkbox_1.5x.png) 0 0 0 0 repeat repeat; -} - -QSpinBox, QDoubleSpinBox, QTimeEdit { - border-width: 2px; - border-radius: 3px; - height: 39px; - font-size: 20px; -} - -QPrintDialog *::up-arrow, QPrintDialog *::down-arrow { - width: 9px; - height: 6px; -} - -QPrintDialog *::up-arrow { - border-image: url(:/arrow_down_1.75x.png) 5 0 0 0 repeat repeat; - margin-bottom:1px; -} - -QPrintDialog *::up-arrow:disabled, QPrintDialog *::up-arrow:off { - border-image: url(:/arrow_down_1.75x.png) 5 0 0 8 repeat repeat; -} - -QPrintDialog *::down-arrow { - border-image: url(:/arrow_down_1.75x.png) 0 0 0 0 repeat repeat; - margin-top:1px; -} - -QPrintDialog *::down-arrow:disabled, QPrintDialog ::down-arrow:off { - border-image: url(:/arrow_down_1.75x.png) 0 0 0 8 repeat repeat; -} - -QPrintDialog QTabWidget::pane{ - border-width: 2px; - top: -2px; -} -QPrintDialog QTabBar::tab { - border-width: 2px; - padding: 0 18px; - border-top-left-radius: 3px; - border-top-right-radius: 3px; - margin-right:-2px; - font-size: 20px; -} - -QPrintDialog QTabBar::tab:selected { - padding: 0 18px; -} - #CToolTip>QLabel { min-height: 46px; margin: 0px; diff --git a/win-linux/res/styles/styles@2x.qss b/win-linux/res/styles/styles@2x.qss index ee6c2ddd2..92ddd0909 100644 --- a/win-linux/res/styles/styles@2x.qss +++ b/win-linux/res/styles/styles@2x.qss @@ -123,10 +123,6 @@ QPushButton { font-size: 22px; } -QDialog QPushButton { - min-width: 80px; -} - QLabel[class=tab-icon] { padding:0 0 4px 12px; } @@ -136,121 +132,6 @@ QLabel[class=tab-icon] { border-right:2px solid #fff; }*/ -QPrintDialog QLabel { - font-size: 22px; -} - -QPrintDialog QToolButton{ - border-width: 1px; - border-radius:4px; - height: 44px; -} - -QPrintDialog QLineEdit{ - font-size: 22px; - border-width: 2px; - height: 44px; - border-radius:4px; -} - -QPrintDialog QGroupBox { - border-width: 2px; - margin-top: 8ex; - border-radius:4px; - font-size: 22px; - padding:16px; -} - -QPrintDialog QComboBox{ - border-width: 2px; - font-size: 22px; - height: 44px; - border-radius:4px; -} - -QPrintDialog QComboBox QAbstractItemView { - border-width: 2px; - border-radius:4px; -} - -QPrintDialog QRadioButton::indicator{ - width:26px; - height:26px; -} - -QPrintDialog QRadioButton, QPrintDialog QCheckBox { - font-size: 22px; -} - -QPrintDialog QRadioButton::indicator::unchecked{ - border-image: url(:/radiobox_2x.png) 0 0 0 0 repeat repeat; -} - -QPrintDialog QRadioButton::indicator::checked{ - border-image: url(:/radiobox_2x.png) 26 0 0 0 repeat repeat; -} - -QPrintDialog QCheckBox::indicator{ - width:28px; - height:28px; -} - -QPrintDialog QCheckBox::indicator::checked{ - border-image: url(:/checkbox_2x.png) 28 0 0 0 repeat repeat; -} - -QPrintDialog QCheckBox::indicator::unchecked{ - border-image: url(:/checkbox_2x.png) 0 0 0 0 repeat repeat; -} - -QSpinBox, QDoubleSpinBox, QTimeEdit { - border-width: 2px; - border-radius:4px; - height:44px; - font-size:22px; -} - -QPrintDialog *::up-arrow, QPrintDialog *::down-arrow { - width: 10px; - height: 6px; -} - -QPrintDialog *::up-arrow { - border-image: url(:/arrow_down_2x.png) 6 0 0 0 repeat repeat; - margin-bottom:1px; -} - -QPrintDialog *::up-arrow:disabled, QPrintDialog *::up-arrow:off { - border-image: url(:/arrow_down_2x.png) 6 0 0 10 repeat repeat; -} - -QPrintDialog *::down-arrow { - border-image: url(:/arrow_down_2x.png) 0 0 0 0 repeat repeat; - margin-top:1px; -} - -QPrintDialog *::down-arrow:disabled, QPrintDialog ::down-arrow:off { - border-image: url(:/arrow_down_2x.png) 0 0 0 10 repeat repeat; -} - -QPrintDialog QTabWidget::pane{ - border-width: 2px; - top: -2px; -} -QPrintDialog QTabBar::tab { - border-width: 2px; - padding: 0 20px; - border-top-left-radius: 4px; - border-top-right-radius: 4px; - margin-right:-2px; - font-size: 22px; -} - -QPrintDialog QTabBar::tab:selected { - padding: 0 20px; -} - - #CToolTip>QLabel { min-height: 52px; margin: 0px; From 68ba4664a1b9e7a33e63ff0c946adee782b4bc4d Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Thu, 13 Apr 2023 16:39:52 +0300 Subject: [PATCH 016/298] [win-linux] move styles for QTabBar to tabbar.qss --- win-linux/res/styles/styles.qss | 209 +-------------------- win-linux/res/styles/styles@1.25x.qss | 48 ----- win-linux/res/styles/styles@1.5x.qss | 50 ----- win-linux/res/styles/styles@1.75x.qss | 49 ----- win-linux/res/styles/styles@2x.qss | 46 ----- win-linux/res/styles/tabbar.qss | 252 ++++++++++++++++++++++++++ win-linux/resources.qrc | 1 + win-linux/src/windows/cmainwindow.cpp | 10 +- 8 files changed, 261 insertions(+), 404 deletions(-) create mode 100644 win-linux/res/styles/tabbar.qss diff --git a/win-linux/res/styles/styles.qss b/win-linux/res/styles/styles.qss index 9f77ede61..9df035568 100644 --- a/win-linux/res/styles/styles.qss +++ b/win-linux/res/styles/styles.qss @@ -1,6 +1,5 @@ -#mainPanel, -#tabWrapper { +#mainPanel { margin: 0; padding: 0; background: #f1f1f1; @@ -18,89 +17,12 @@ font-size: 11px; } -#paddingWidget { - min-width: 0px; - max-width: 0px; - border: none; background: transparent; } -#scrollerFrame { - min-width: 32px; - max-width: 32px; - border: none; background: transparent; } -#scrollerFrame>QToolButton { - max-height: 28px; - margin: 0px; - border: none; background-color: #f1f1f1; -} - -#scrollerFrame>QToolButton:hover {background-color: #cecece;} -#scrollerFrame>QToolButton:pressed {background-color: #b7b7b7;} -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton {background-color: #404040;} -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton:hover {background-color: #555;} -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton:pressed {background-color: #606060;} -#scrollerFrame>QToolButton#leftButton { - image: url(:/tabbar/icons/scrolltab_ln.svg) center no-repeat; -} -#scrollerFrame>QToolButton#leftButton:disabled { - image: url(:/tabbar/icons/scrolltab_ld.svg) center no-repeat; -} -#scrollerFrame>QToolButton#leftButton:hover { - image: url(:/tabbar/icons/scrolltab_lh.svg) center no-repeat; -} -#scrollerFrame>QToolButton#leftButton:pressed { - image: url(:/tabbar/icons/scrolltab_lp.svg) center no-repeat; -} - -#scrollerFrame>QToolButton#rightButton { - image: url(:/tabbar/icons/scrolltab_rn.svg) center no-repeat; -} -#scrollerFrame>QToolButton#rightButton:disabled { - image: url(:/tabbar/icons/scrolltab_rd.svg) center no-repeat; -} -#scrollerFrame>QToolButton#rightButton:hover { - image: url(:/tabbar/icons/scrolltab_rh.svg) center no-repeat; -} -#scrollerFrame>QToolButton#rightButton:pressed { - image: url(:/tabbar/icons/scrolltab_rp.svg) center no-repeat; } -/* Dark, Contrast-Dark */ -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#leftButton, -#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton#leftButton { - image: url(:/tabbar/icons/scrolltab_ln_light.svg) center no-repeat; -} -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#leftButton:disabled, -#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton#leftButton:disabled { - image: url(:/tabbar/icons/scrolltab_ld_light.svg) center no-repeat; -} -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#leftButton:hover, -#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton#leftButton:hover { - image: url(:/tabbar/icons/scrolltab_lh_light.svg) center no-repeat; -} -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#leftButton:pressed, -#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton#leftButton:pressed { - image: url(:/tabbar/icons/scrolltab_lp_light.svg) center no-repeat; -} - - -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#rightButton, -#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton#rightButton { - image: url(:/tabbar/icons/scrolltab_rn_light.svg) center no-repeat; -} -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#rightButton:disabled, -#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton#rightButton:disabled { - image: url(:/tabbar/icons/scrolltab_rd_light.svg) center no-repeat; -} -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#rightButton:hover, -#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton#rightButton:hover { - image: url(:/tabbar/icons/scrolltab_rh_light.svg) center no-repeat; -} -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#rightButton:pressed, -#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton#rightButton:pressed { - image: url(:/tabbar/icons/scrolltab_rp_light.svg) center no-repeat; } QPushButton#toolButtonMaximize, QPushButton#toolButtonMain, @@ -258,9 +180,7 @@ QPushButton#toolButtonDownload::menu-indicator { /**************************/ #mainPanel[uitheme=theme-dark], -#mainPanel[uitheme=theme-dark] #tabWrapper, -#mainPanel[uitheme=theme-dark] #CX11Caption, -#mainPanel[uitheme=theme-dark] QTabBar { +#mainPanel[uitheme=theme-dark] #CX11Caption { background-color: #404040; } @@ -312,24 +232,10 @@ QPushButton#toolButtonDownload::menu-indicator { background-color: #606060; } -#mainPanel[uitheme=theme-dark] QTabBar QToolButton::left-arrow, - #mainPanel[uitheme=theme-dark] QTabBar QToolButton::right-arrow -{ - background-color: #606060; -} - -#mainPanel[uitheme=theme-dark] QTabBar QToolButton:pressed { - background-color: #606060; -} - - /* Contrast-Dark*/ #mainPanel[uitheme=theme-contrast-dark], -#mainPanel[uitheme=theme-contrast-dark] #tabWrapper, -#mainPanel[uitheme=theme-contrast-dark] #CX11Caption, -#mainPanel[uitheme=theme-contrast-dark] QTabBar -{ +#mainPanel[uitheme=theme-contrast-dark] #CX11Caption { background-color: #2a2a2a; } @@ -359,26 +265,6 @@ QPushButton#toolButtonDownload::menu-indicator { background-color: #555; } -#mainPanel[uitheme=theme-contrast-dark] QTabBar QToolButton::left-arrow, - #mainPanel[uitheme=theme-contrast-dark] QTabBar QToolButton::right-arrow -{ - background-color: #f00; -} - -#mainPanel[uitheme=theme-contrast-dark] QTabBar QToolButton:pressed { - background-color: #f00; -} - -#mainPanel[uitheme=theme-contrast-dark] QTabWidget::pane {background-color: #2a2a2a;} -#mainPanel[uitheme=theme-contrast-dark] QTabBar::tab {background-color: #2a2a2a; border-right-color: #414141;} -#mainPanel[uitheme=theme-contrast-dark] QTabBar::tab:hover {background-color: #424242;} -#mainPanel[uitheme=theme-contrast-dark] QTabBar::tab:selected {background-color: #2a2a2a;} -#mainPanel[uitheme=theme-contrast-dark] QTabBar[active=false]::tab:selected:hover {background-color: #424242;} - -#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton {background-color: #2a2a2a;} -#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton:hover {background-color: #525252;} -#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton:pressed {background-color: #424242;} - /***********************************/ /* classic light theme definitions */ /***********************************/ @@ -395,95 +281,6 @@ QPushButton#toolButtonDownload::menu-indicator { border-right-color:#dfdfdf; } -/***********************************/ - -QTabBar { - font-size: 11px; - background-color: #f1f1f1; -} -QTabWidget::pane {background-color: #f1f1f1; border: none; padding: 0px;} - -QTabBar::tab {width: 135px; background-color: #f1f1f1; border: 0 none; border-right: 1px solid #a5a5a5; min-width: 41px; max-width: 135px; -height: 28px; margin: 0 0 0 0; padding: 0px;} - -QTabBar::tab::selected { - padding-left: 0px; -} - -QTabBar::tear { width: 0px; } -QTabBar::tab:first { } -QTabBar::tab:only-one { } -QTabBar::tab:last { } - -QTabBar::close-button { - image: url(:/res/icons/tab_close_normal.svg); - margin-top: -1px; - icon-size:16px; -} - -QTabBar::close-button:hover { - image: url(:/res/icons/tab_close_hover.svg); -} - -QTabBar::close-button:pressed { - image: url(:/res/icons/tab_close_active.svg); -} - -QTabBar QToolButton, - QTabBar QToolButton:disabled { - background-color:#f1f1f1; - border:0 none; - width: 40px; -} - -QTabBar::scroller { - width: 0px; -} - -QLabel[class=tab-icon] { - padding:0 0 2px 4px; -} - -QTabBar QToolButton[class=tab-close]{ - image: url(:/tabbar/icons/close_normal.svg); -} -QTabBar QToolButton[class=tab-close][state=active]{ - image:url(:/tabbar/icons/close_active_normal.svg); -} -QTabBar QToolButton[class=tab-close]:hover{ - image: url(:/tabbar/icons/close_hover.svg); -} -QTabBar QToolButton[class=tab-close][state=active]:hover{ - image: url(:/tabbar/icons/close_active_hover.svg); -} -QTabBar QToolButton[class=tab-close]:pressed{ - image: url(:/tabbar/icons/close_pressed.svg); -} -QTabBar QToolButton[class=tab-close][state=active]:pressed{ - image: url(:/tabbar/icons/close_active_pressed.svg); -} -QTabBar QToolButton[class=tab-close]{ - background-color:rgba(255,255,255,0); -} - -QTabBar::tab:hover {background-color: #cecece;} -QTabBar::tab-label {active: #fff; normal: #444;} -QTabBar::tab-icon {width: 15; height: 15;} -QTabBar[active=false]::tab:selected {background-color: #f1f1f1;} -QTabBar[active=true]::tab:selected {background-color: #f1f1f1;} -QTabBar[active=false]::tab:selected:hover {background-color: #cecece;} - -#mainPanel[uitheme=theme-light] QTabBar::tab {border-right-color:#dfdfdf;} - -#mainPanel[uitheme=theme-classic-light] QTabBar::tab {border-right-color:#cbcbcb;} - -#mainPanel[uitheme=theme-dark] QTabWidget::pane {background-color: #404040;} -#mainPanel[uitheme=theme-dark] QTabBar::tab {background-color: #404040; border-right-color: #505050;} -#mainPanel[uitheme=theme-dark] QTabBar::tab:hover {background-color: #555;} -#mainPanel[uitheme=theme-dark] QTabBar::tab:selected {background-color: #404040;} -#mainPanel[uitheme=theme-dark] QTabBar[active=false]::tab:selected:hover {background-color: #555;} - - /*MyLabel { qproperty-pixmap: url(pixmap.png); }*/ /*MyGroupBox { qproperty-titleColor: rgb(100, 200, 100); }*/ diff --git a/win-linux/res/styles/styles@1.25x.qss b/win-linux/res/styles/styles@1.25x.qss index 777ece9b2..9300ef36b 100644 --- a/win-linux/res/styles/styles@1.25x.qss +++ b/win-linux/res/styles/styles@1.25x.qss @@ -7,20 +7,6 @@ font-size: 14px; } -#paddingWidget { - min-width: 15px; - max-width: 15px; -} - -#scrollerFrame { - min-width: 48px; - max-width: 48px; -} - -#scrollerFrame>QToolButton { - max-height: 35px; -} - QPushButton#toolButtonDownload { padding: 7px; @@ -57,37 +43,6 @@ QPushButton#toolButtonDownload::menu-indicator { left: -5px; } -/**************************/ -/* dark theme definitions */ -/**************************/ - -QTabBar { - font-size: 14px; -} - -QTabBar::tab {width: 169px; background-color: #f1f1f1; border: 0 none; border-right: 1px solid #a5a5a5; min-width: 51px; max-width: 169px; -height: 35px; margin: 0 0 0 0;} - -QTabBar::close-button { -} - -QTabBar::close-button:hover { -} - -QTabBar::close-button:pressed { -} - -QTabBar QToolButton, - QTabBar QToolButton:disabled { - margin-right:-2px; - border-width:2px; -} - -/* ??? pixmap offsets on hover for 2px ??? */ -/*QTabBar QToolButton[class=tab-close]:hover{ - border-right:2px solid #fff; -}*/ - /* download widget */ QMenu[hdpi]#menuButtonDownload { border-width: 1px; @@ -121,9 +76,6 @@ QPushButton { font-size: 14px; } -QLabel[class=tab-icon] { - padding:0 0 2px 8px; -} #CToolTip>QLabel { diff --git a/win-linux/res/styles/styles@1.5x.qss b/win-linux/res/styles/styles@1.5x.qss index b1526023d..27d1d17c6 100644 --- a/win-linux/res/styles/styles@1.5x.qss +++ b/win-linux/res/styles/styles@1.5x.qss @@ -7,21 +7,6 @@ font-size: 17px; } -#paddingWidget { - min-width: 15px; - max-width: 15px; -} - -#scrollerFrame { - min-width: 48px; - max-width: 48px; -} - -#scrollerFrame>QToolButton { - max-height: 42px; -} - - QPushButton#toolButtonDownload { padding: 9px; } @@ -58,37 +43,6 @@ QPushButton#toolButtonDownload::menu-indicator { left: -6px; } -/**************************/ -/* dark theme definitions */ -/**************************/ - -QTabBar { - font-size: 15px; -} - -QTabBar::tab {width: 203px; background-color: #f1f1f1; border: 0 none; border-right: 2px solid #a5a5a5; min-width: 62px; max-width: 203px; -height: 42px; margin: 0 0 0 0;} - -QTabBar::close-button { -} - -QTabBar::close-button:hover { -} - -QTabBar::close-button:pressed { -} - -QTabBar QToolButton, - QTabBar QToolButton:disabled { - margin-right:-2px; - border-width:2px; -} - -/* ??? pixmap offsets on hover for 2px ??? */ -/*QTabBar QToolButton[class=tab-close]:hover{ - border-right:2px solid #fff; -}*/ - /* download widget */ QMenu[hdpi]#menuButtonDownload { border-width: 2px; @@ -122,10 +76,6 @@ QPushButton { font-size: 17px; } -QLabel[class=tab-icon] { - padding:0 0 3px 9px; -} - #CToolTip>QLabel { min-height: 40px; diff --git a/win-linux/res/styles/styles@1.75x.qss b/win-linux/res/styles/styles@1.75x.qss index 987e90169..7c5d0f53c 100644 --- a/win-linux/res/styles/styles@1.75x.qss +++ b/win-linux/res/styles/styles@1.75x.qss @@ -7,20 +7,6 @@ font-size: 20px; } -#paddingWidget { - min-width: 31px; - max-width: 31px; -} - -#scrollerFrame { - min-width: 64px; - max-width: 64px; -} - -#scrollerFrame>QToolButton { - max-height: 49px; -} - QPushButton#toolButtonDownload { padding: 11px; } @@ -57,37 +43,6 @@ QPushButton#toolButtonDownload::menu-indicator { left: -7px; } -/**************************/ -/* dark theme definitions */ -/**************************/ - -QTabBar { - font-size: 18px; -} - -QTabBar::tab {width: 236px; background-color: #f1f1f1; border: 0 none; border-right: 2px solid #a5a5a5; min-width: 72px; max-width: 236px; -height: 49px; margin: 0 0 0 0;} - -QTabBar::close-button { -} - -QTabBar::close-button:hover { -} - -QTabBar::close-button:pressed { -} - -QTabBar QToolButton, - QTabBar QToolButton:disabled { - margin-right:-2px; - border-width:2px; -} - -/* ??? pixmap offsets on hover for 2px ??? */ -/*QTabBar QToolButton[class=tab-close]:hover{ - border-right:2px solid #fff; -}*/ - /* download widget */ QMenu[hdpi]#menuButtonDownload { border-width: 2px; @@ -121,10 +76,6 @@ QPushButton { font-size: 20px; } -QLabel[class=tab-icon] { - padding:0 0 4px 9px; -} - #CToolTip>QLabel { min-height: 46px; margin: 0px; diff --git a/win-linux/res/styles/styles@2x.qss b/win-linux/res/styles/styles@2x.qss index 92ddd0909..5e1cad25b 100644 --- a/win-linux/res/styles/styles@2x.qss +++ b/win-linux/res/styles/styles@2x.qss @@ -7,21 +7,6 @@ font-size: 22px; } -#paddingWidget { - min-width: 31px; - max-width: 31px; -} - -#scrollerFrame { - min-width: 64px; - max-width: 64px; -} - -#scrollerFrame>QToolButton { - max-height: 56px; -} - - QPushButton#toolButtonDownload { padding: 12px; } @@ -67,29 +52,6 @@ QPushButton#toolButtonDownload::menu-indicator { left: -8px; } -/**************************/ -/* dark theme definitions */ -/**************************/ - -QTabBar { - font-size: 20px; -} - -QTabBar::tab {width: 270px; background-color: #f1f1f1; border: 0 none; border-right: 2px solid #a5a5a5; min-width: 82px; max-width: 270px; -height: 56px; margin: 0 0 0 0;} - -QTabBar::close-button { - margin-top: -2px; - icon-size: 32px; -} - -QTabBar QToolButton, - QTabBar QToolButton:disabled { - margin-right:-2px; - border-width:2px; -} - - /* download widget */ QMenu[hdpi]#menuButtonDownload { border-width: 2px; @@ -123,14 +85,6 @@ QPushButton { font-size: 22px; } -QLabel[class=tab-icon] { - padding:0 0 4px 12px; -} - -/* ??? pixmap offsets on hover for 2px ??? */ -/*QTabBar QToolButton[class=tab-close]:hover{ - border-right:2px solid #fff; -}*/ #CToolTip>QLabel { min-height: 52px; diff --git a/win-linux/res/styles/tabbar.qss b/win-linux/res/styles/tabbar.qss new file mode 100644 index 000000000..0f4188998 --- /dev/null +++ b/win-linux/res/styles/tabbar.qss @@ -0,0 +1,252 @@ + + +QTabWidget::pane {background-color: #f1f1f1; border: none; padding: 0px;} +QLabel[class=tab-icon] {padding:0 0 2px 4px;} +QTabBar {font-size: 11px; background-color: #f1f1f1;} +QTabBar::tear {width: 0px;} +QTabBar::scroller {width: 0px;} +QTabBar::tab {width: 135px; background-color: #f1f1f1; border: 0 none; border-right: 1px solid #a5a5a5; min-width: 41px; max-width: 135px; +height: 28px; margin: 0 0 0 0; padding: 0px;} +QTabBar::tab:hover {background-color: #cecece;} +QTabBar::tab-label {active: #fff; normal: #444;} +QTabBar::tab-icon {width: 15; height: 15;} +QTabBar::tab:first {} +QTabBar::tab:only-one {} +QTabBar::tab:last {} +QTabBar::tab::selected {padding-left: 0px;} +QTabBar[active=false]::tab:selected {background-color: #f1f1f1;} +QTabBar[active=true]::tab:selected {background-color: #f1f1f1;} +QTabBar[active=false]::tab:selected:hover {background-color: #cecece;} + + +QTabBar::close-button { + image: url(:/res/icons/tab_close_normal.svg); + margin-top: -1px; + icon-size:16px; +} +QTabBar::close-button:hover { + image: url(:/res/icons/tab_close_hover.svg); +} +QTabBar::close-button:pressed { + image: url(:/res/icons/tab_close_active.svg); +} + +QTabBar QToolButton, + QTabBar QToolButton:disabled { + background-color:#f1f1f1; + border:0 none; + width: 40px; +} + +QTabBar QToolButton[class=tab-close]{ + background-color:rgba(255,255,255,0); +} +QTabBar QToolButton[class=tab-close]{ + image: url(:/tabbar/icons/close_normal.svg); +} +QTabBar QToolButton[class=tab-close][state=active]{ + image:url(:/tabbar/icons/close_active_normal.svg); +} +QTabBar QToolButton[class=tab-close]:hover{ + image: url(:/tabbar/icons/close_hover.svg); +} +QTabBar QToolButton[class=tab-close][state=active]:hover{ + image: url(:/tabbar/icons/close_active_hover.svg); +} +QTabBar QToolButton[class=tab-close]:pressed{ + image: url(:/tabbar/icons/close_pressed.svg); +} +QTabBar QToolButton[class=tab-close][state=active]:pressed{ + image: url(:/tabbar/icons/close_active_pressed.svg); +} + +#tabWrapper {margin: 0; padding: 0; background: #f1f1f1;} +#paddingWidget {min-width: 0px; max-width: 0px; border: none; background: transparent;} + +#scrollerFrame {min-width: 32px; max-width: 32px; border: none; background: transparent;} +#scrollerFrame>QToolButton {max-height: 28px; margin: 0px; border: none; background-color: #f1f1f1;} +#scrollerFrame>QToolButton:hover {background-color: #cecece;} +#scrollerFrame>QToolButton:pressed {background-color: #b7b7b7;} + +#scrollerFrame>QToolButton#leftButton { + image: url(:/tabbar/icons/scrolltab_ln.svg) center no-repeat; +} +#scrollerFrame>QToolButton#leftButton:disabled { + image: url(:/tabbar/icons/scrolltab_ld.svg) center no-repeat; +} +#scrollerFrame>QToolButton#leftButton:hover { + image: url(:/tabbar/icons/scrolltab_lh.svg) center no-repeat; +} +#scrollerFrame>QToolButton#leftButton:pressed { + image: url(:/tabbar/icons/scrolltab_lp.svg) center no-repeat; +} + +#scrollerFrame>QToolButton#rightButton { + image: url(:/tabbar/icons/scrolltab_rn.svg) center no-repeat; +} +#scrollerFrame>QToolButton#rightButton:disabled { + image: url(:/tabbar/icons/scrolltab_rd.svg) center no-repeat; +} +#scrollerFrame>QToolButton#rightButton:hover { + image: url(:/tabbar/icons/scrolltab_rh.svg) center no-repeat; +} +#scrollerFrame>QToolButton#rightButton:pressed { + image: url(:/tabbar/icons/scrolltab_rp.svg) center no-repeat; +} + +/* light */ +#mainPanel[uitheme=theme-light] QTabBar::tab {border-right-color:#dfdfdf;} + + +/* classic light */ +#mainPanel[uitheme=theme-classic-light] QTabBar::tab {border-right-color:#cbcbcb;} + +/* dark */ +#mainPanel[uitheme=theme-dark] QTabBar, + #mainPanel[uitheme=theme-dark] #tabWrapper +{ + background-color: #404040; +} +#mainPanel[uitheme=theme-dark] QTabBar QToolButton::left-arrow, + #mainPanel[uitheme=theme-dark] QTabBar QToolButton::right-arrow +{ + background-color: #606060; +} +#mainPanel[uitheme=theme-dark] QTabBar QToolButton:pressed { + background-color: #606060; +} +#mainPanel[uitheme=theme-dark] QTabWidget::pane {background-color: #404040;} +#mainPanel[uitheme=theme-dark] QTabBar::tab {background-color: #404040; border-right-color: #505050;} +#mainPanel[uitheme=theme-dark] QTabBar::tab:hover {background-color: #555;} +#mainPanel[uitheme=theme-dark] QTabBar::tab:selected {background-color: #404040;} +#mainPanel[uitheme=theme-dark] QTabBar[active=false]::tab:selected:hover {background-color: #555;} +#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton {background-color: #404040;} +#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton:hover {background-color: #555;} +#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton:pressed {background-color: #606060;} + +/* contrast-dark */ +#mainPanel[uitheme=theme-contrast-dark] QTabBar, + #mainPanel[uitheme=theme-contrast-dark] #tabWrapper +{ + background-color: #2a2a2a; +} +#mainPanel[uitheme=theme-contrast-dark] QTabBar QToolButton::left-arrow, + #mainPanel[uitheme=theme-contrast-dark] QTabBar QToolButton::right-arrow +{ + background-color: #f00; +} +#mainPanel[uitheme=theme-contrast-dark] QTabBar QToolButton:pressed +{ + background-color: #f00; +} +#mainPanel[uitheme=theme-contrast-dark] QTabWidget::pane {background-color: #2a2a2a;} +#mainPanel[uitheme=theme-contrast-dark] QTabBar::tab {background-color: #2a2a2a; border-right-color: #414141;} +#mainPanel[uitheme=theme-contrast-dark] QTabBar::tab:hover {background-color: #424242;} +#mainPanel[uitheme=theme-contrast-dark] QTabBar::tab:selected {background-color: #2a2a2a;} +#mainPanel[uitheme=theme-contrast-dark] QTabBar[active=false]::tab:selected:hover {background-color: #424242;} +#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton {background-color: #2a2a2a;} +#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton:hover {background-color: #525252;} +#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton:pressed {background-color: #424242;} + +/* dark, contrast-dark */ +#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#leftButton, +#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton#leftButton { + image: url(:/tabbar/icons/scrolltab_ln_light.svg) center no-repeat; +} +#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#leftButton:disabled, +#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton#leftButton:disabled { + image: url(:/tabbar/icons/scrolltab_ld_light.svg) center no-repeat; +} +#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#leftButton:hover, +#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton#leftButton:hover { + image: url(:/tabbar/icons/scrolltab_lh_light.svg) center no-repeat; +} +#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#leftButton:pressed, +#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton#leftButton:pressed { + image: url(:/tabbar/icons/scrolltab_lp_light.svg) center no-repeat; +} + + +#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#rightButton, +#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton#rightButton { + image: url(:/tabbar/icons/scrolltab_rn_light.svg) center no-repeat; +} +#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#rightButton:disabled, +#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton#rightButton:disabled { + image: url(:/tabbar/icons/scrolltab_rd_light.svg) center no-repeat; +} +#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#rightButton:hover, +#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton#rightButton:hover { + image: url(:/tabbar/icons/scrolltab_rh_light.svg) center no-repeat; +} +#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#rightButton:pressed, +#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton#rightButton:pressed { + image: url(:/tabbar/icons/scrolltab_rp_light.svg) center no-repeat; +} + + +/* 1.25x */ +#mainPanel[zoom="1.25x"] QLabel[class=tab-icon] {padding:0 0 2px 8px;} +#mainPanel[zoom="1.25x"] QTabBar {font-size: 14px;} +#mainPanel[zoom="1.25x"] QTabBar::tab {width: 169px; border-right-width: 1px; min-width: 51px; max-width: 169px; height: 35px;} +#mainPanel[zoom="1.25x"] QTabBar::close-button { + +} +#mainPanel[zoom="1.25x"] QTabBar QToolButton, + #mainPanel[zoom="1.5x"] QTabBar QToolButton:disabled { + margin-right:-2px; + border-width:2px; +} +#mainPanel[zoom="1.25x"] #paddingWidget {min-width: 15px; max-width: 15px;} +#mainPanel[zoom="1.25x"] #scrollerFrame {min-width: 48px; max-width: 48px;} +#mainPanel[zoom="1.25x"] #scrollerFrame>QToolButton {max-height: 35px;} + +/* 1.5x */ +#mainPanel[zoom="1.5x"] QLabel[class=tab-icon] {padding:0 0 3px 9px;} +#mainPanel[zoom="1.5x"] QTabBar {font-size: 15px;} +#mainPanel[zoom="1.5x"] QTabBar::tab {width: 203px; border-right-width: 2px; min-width: 62px; max-width: 203px; height: 42px;} +#mainPanel[zoom="1.5x"] QTabBar::close-button { + +} +#mainPanel[zoom="1.5x"] QTabBar QToolButton, + #mainPanel[zoom="1.5x"] QTabBar QToolButton:disabled { + margin-right:-2px; + border-width:2px; +} +#mainPanel[zoom="1.5x"] #paddingWidget {min-width: 15px; max-width: 15px;} +#mainPanel[zoom="1.5x"] #scrollerFrame {min-width: 48px; max-width: 48px;} +#mainPanel[zoom="1.5x"] #scrollerFrame>QToolButton {max-height: 42px;} + +/* 1.75x */ +#mainPanel[zoom="1.75x"] QLabel[class=tab-icon] {padding:0 0 4px 9px;} +#mainPanel[zoom="1.75x"] QTabBar {font-size: 18px;} +#mainPanel[zoom="1.75x"] QTabBar::tab {width: 236px; border-right-width: 2px; min-width: 72px; max-width: 236px; height: 49px;} +#mainPanel[zoom="1.75x"] QTabBar::close-button { + +} +#mainPanel[zoom="1.75x"] QTabBar QToolButton, + #mainPanel[zoom="1.75x"] QTabBar QToolButton:disabled { + margin-right:-2px; + border-width:2px; +} +#mainPanel[zoom="1.75x"] #paddingWidget {min-width: 31px; max-width: 31px;} +#mainPanel[zoom="1.75x"] #scrollerFrame {min-width: 64px; max-width: 64px;} +#mainPanel[zoom="1.75x"] #scrollerFrame>QToolButton {max-height: 49px;} + +/* 2x */ +#mainPanel[zoom="2x"] QLabel[class=tab-icon] {padding:0 0 4px 12px;} +#mainPanel[zoom="2x"] QTabBar {font-size: 20px;} +#mainPanel[zoom="2x"] QTabBar::tab {width: 270px; border-right-width: 2px; min-width: 82px; max-width: 270px; height: 56px;} +#mainPanel[zoom="2x"] QTabBar::close-button { + margin-top: -2px; + icon-size: 32px; +} +#mainPanel[zoom="2x"] QTabBar QToolButton, + #mainPanel[zoom="2x"] QTabBar QToolButton:disabled { + margin-right:-2px; + border-width:2px; +} +#mainPanel[zoom="2x"] #paddingWidget {min-width: 31px; max-width: 31px;} +#mainPanel[zoom="2x"] #scrollerFrame {min-width: 64px; max-width: 64px;} +#mainPanel[zoom="2x"] #scrollerFrame>QToolButton {max-height: 56px;} + diff --git a/win-linux/resources.qrc b/win-linux/resources.qrc index 1c9e14297..8e98bfe7b 100644 --- a/win-linux/resources.qrc +++ b/win-linux/resources.qrc @@ -84,6 +84,7 @@ res/styles/styles.qss res/styles/editor.qss res/styles/message.qss + res/styles/tabbar.qss res/styles/styles@1.5x.qss diff --git a/win-linux/src/windows/cmainwindow.cpp b/win-linux/src/windows/cmainwindow.cpp index 954c9b917..539c10b48 100644 --- a/win-linux/src/windows/cmainwindow.cpp +++ b/win-linux/src/windows/cmainwindow.cpp @@ -1371,11 +1371,11 @@ void CMainWindow::updateScalingFactor(double dpiratio) btn->setFixedSize(small_btn_size); }*/ m_pButtonMain->setFixedSize(int(BUTTON_MAIN_WIDTH * dpiratio), int(TITLE_HEIGHT * dpiratio)); -// const std::string _tabs_stylesheets = ":/sep-styles/tabbar@" + QString::number(dpiratio).toStdString() + "x.qss"; -// std::vector _files{_tabs_stylesheets, ":/themes/theme-contrast-dark.qss"}; -// QString _style = Utils::readStylesheets(&_files); -// m_pTabBarWrapper->applyTheme(_style); -// m_pTabs->setStyleSheet(_style); + m_pMainPanel->setProperty("zoom", QString::number(dpiratio) + "x"); + std::vector _files{":/styles/tabbar.qss"}; + QString _style = Utils::readStylesheets(&_files); + m_pTabBarWrapper->applyTheme(_style); + m_pTabs->setStyleSheet(_style); m_pTabs->updateScalingFactor(dpiratio); m_pTabs->reloadTabIcons(); m_pButtonMain->setIcon(MAIN_ICON_PATH, AscAppManager::themes().current().isDark() ? "logo-light" : "logo-dark"); From 736e50335c73c87ab30da63f03c8014db4c8a103 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Thu, 13 Apr 2023 16:40:31 +0300 Subject: [PATCH 017/298] [win-linux] refactoring styles --- win-linux/res/styles/styles.qss | 56 ++++++++++----------------- win-linux/res/styles/styles@1.25x.qss | 24 ++++++------ win-linux/res/styles/styles@1.5x.qss | 22 ++++++----- win-linux/res/styles/styles@1.75x.qss | 21 +++++----- win-linux/res/styles/styles@2x.qss | 22 ++++++----- 5 files changed, 68 insertions(+), 77 deletions(-) diff --git a/win-linux/res/styles/styles.qss b/win-linux/res/styles/styles.qss index 9df035568..45850cc1d 100644 --- a/win-linux/res/styles/styles.qss +++ b/win-linux/res/styles/styles.qss @@ -17,12 +17,29 @@ font-size: 11px; } +QPushButton { + /*background-color:#d9d9d9;*/ + padding:0 20px; + font-weight: normal; + height: 22px; + font-size: 12px; } +QPushButton[act=tool] { + /*background-origin: content;*/ + /*padding: 6px;*/ + border: none; + margin: 0; + padding: 0; + border-radius:0; } +QPushButton[act=tool]:hover { + background-color:#cecece; } +QPushButton[act=tool]:pressed { + background-color:#b7b7b7; } QPushButton#toolButtonMaximize, QPushButton#toolButtonMain, @@ -34,34 +51,12 @@ QPushButton#toolButtonMaximize, QPushButton#toolButtonMain, border-radius:0; } -QPushButton#toolButtonDownload { - background-origin: content; - padding: 6px; -} - QPushButton#toolButtonMaximize,QPushButton#toolButtonMinimize, QPushButton#toolButtonClose { background-origin: content; padding: 5px 12px 7px; } -QPushButton[act=tool] { - /*background-origin: content;*/ - /*padding: 6px;*/ - border: none; - margin: 0; - padding: 0; - border-radius:0; -} - -QPushButton[act=tool]:hover { - background-color:#cecece; -} - -QPushButton[act=tool]:pressed { - background-color:#b7b7b7; -} - QPushButton#toolButtonClose:hover { background-color:#d42b2b; } @@ -74,10 +69,6 @@ QPushButton#toolButtonMaximize { image: url(:/restore.svg) center no-repeat; } -QPushButton#toolButtonMaximize[class=normal] { - background-position: left top; -} - QPushButton#toolButtonMaximize[class=min] { image: url(:/maximize.svg) center no-repeat; } @@ -167,7 +158,8 @@ QPushButton::menu-indicator:hover { /*}*/ QPushButton#toolButtonDownload { - /*background-repeat: no-repeat;*/ + background-origin: content; + padding: 6px; } QPushButton#toolButtonDownload::menu-indicator { @@ -281,8 +273,6 @@ QPushButton#toolButtonDownload::menu-indicator { border-right-color:#dfdfdf; } -/*MyLabel { qproperty-pixmap: url(pixmap.png); }*/ -/*MyGroupBox { qproperty-titleColor: rgb(100, 200, 100); }*/ /* download widget */ QMenu#menuButtonDownload { @@ -347,13 +337,7 @@ CDownloadWidget[hdpi] QLabel#labelName { font-size: 32px; } -QPushButton { - /*background-color:#d9d9d9;*/ - padding:0 20px; - font-weight: normal; - height: 22px; - font-size: 12px; -} +/* ToolTip*/ #CToolTip>QLabel { min-height: 26px; diff --git a/win-linux/res/styles/styles@1.25x.qss b/win-linux/res/styles/styles@1.25x.qss index 9300ef36b..0cd76e02a 100644 --- a/win-linux/res/styles/styles@1.25x.qss +++ b/win-linux/res/styles/styles@1.25x.qss @@ -7,9 +7,12 @@ font-size: 14px; } - -QPushButton#toolButtonDownload { - padding: 7px; +QPushButton { + border: 1px solid #cbcbcb; + padding:0 25px; + height: 28px; + border-radius: 2px; + font-size: 14px; } QPushButton#toolButtonMaximize,QPushButton#toolButtonMinimize, @@ -38,12 +41,17 @@ QPushButton::menu-indicator { top: -2px; } +QPushButton#toolButtonDownload { + padding: 7px; +} + QPushButton#toolButtonDownload::menu-indicator { top: -13px; left: -5px; } /* download widget */ + QMenu[hdpi]#menuButtonDownload { border-width: 1px; } @@ -68,15 +76,7 @@ CDownloadWidget[hdpi] QLabel#labelName { font-size: 20px; } -QPushButton { - border: 1px solid #cbcbcb; - padding:0 25px; - height: 28px; - border-radius: 2px; - font-size: 14px; -} - - +/* ToolTip*/ #CToolTip>QLabel { min-height: 32px; diff --git a/win-linux/res/styles/styles@1.5x.qss b/win-linux/res/styles/styles@1.5x.qss index 27d1d17c6..0389858d2 100644 --- a/win-linux/res/styles/styles@1.5x.qss +++ b/win-linux/res/styles/styles@1.5x.qss @@ -7,8 +7,12 @@ font-size: 17px; } -QPushButton#toolButtonDownload { - padding: 9px; +QPushButton { + border: 2px solid #cbcbcb; + padding:0 30px; + height: 33px; + border-radius: 3px; + font-size: 17px; } QPushButton#toolButtonMaximize,QPushButton#toolButtonMinimize, @@ -38,12 +42,17 @@ QPushButton::menu-indicator { top: -2px; } +QPushButton#toolButtonDownload { + padding: 9px; +} + QPushButton#toolButtonDownload::menu-indicator { top: -15px; left: -6px; } /* download widget */ + QMenu[hdpi]#menuButtonDownload { border-width: 2px; } @@ -68,14 +77,7 @@ CDownloadWidget[hdpi] QLabel#labelName { font-size: 24px; } -QPushButton { - border: 2px solid #cbcbcb; - padding:0 30px; - height: 33px; - border-radius: 3px; - font-size: 17px; -} - +/* ToolTip*/ #CToolTip>QLabel { min-height: 40px; diff --git a/win-linux/res/styles/styles@1.75x.qss b/win-linux/res/styles/styles@1.75x.qss index 7c5d0f53c..1245afee0 100644 --- a/win-linux/res/styles/styles@1.75x.qss +++ b/win-linux/res/styles/styles@1.75x.qss @@ -7,8 +7,12 @@ font-size: 20px; } -QPushButton#toolButtonDownload { - padding: 11px; +QPushButton { + border: 2px solid #cbcbcb; + padding:0 35px; + height: 39px; + border-radius: 4px; + font-size: 20px; } QPushButton#toolButtonMaximize,QPushButton#toolButtonMinimize, @@ -38,12 +42,17 @@ QPushButton::menu-indicator { top: -2px; } +QPushButton#toolButtonDownload { + padding: 11px; +} + QPushButton#toolButtonDownload::menu-indicator { top: -18px; left: -7px; } /* download widget */ + QMenu[hdpi]#menuButtonDownload { border-width: 2px; } @@ -68,13 +77,7 @@ CDownloadWidget[hdpi] QLabel#labelName { font-size: 24px; } -QPushButton { - border: 2px solid #cbcbcb; - padding:0 35px; - height: 39px; - border-radius: 4px; - font-size: 20px; -} +/* ToolTip*/ #CToolTip>QLabel { min-height: 46px; diff --git a/win-linux/res/styles/styles@2x.qss b/win-linux/res/styles/styles@2x.qss index 5e1cad25b..019c6537b 100644 --- a/win-linux/res/styles/styles@2x.qss +++ b/win-linux/res/styles/styles@2x.qss @@ -7,8 +7,12 @@ font-size: 22px; } -QPushButton#toolButtonDownload { - padding: 12px; +QPushButton { + border: 2px solid #cbcbcb; + padding:0 40px; + height: 44px; + border-radius:4px; + font-size: 22px; } QPushButton#toolButtonMaximize,QPushButton#toolButtonMinimize, @@ -47,12 +51,17 @@ QPushButton::menu-indicator { /*border-image: url(:/res/icons/menu-indicator-dark.png) 0 20 0 0 repeat repeat;*/ /*}*/ +QPushButton#toolButtonDownload { + padding: 12px; +} + QPushButton#toolButtonDownload::menu-indicator { top: -20px; left: -8px; } /* download widget */ + QMenu[hdpi]#menuButtonDownload { border-width: 2px; } @@ -77,14 +86,7 @@ CDownloadWidget[hdpi] QLabel#labelName { font-size: 32px; } -QPushButton { - border: 2px solid #cbcbcb; - padding:0 40px; - height: 44px; - border-radius:4px; - font-size: 22px; -} - +/* ToolTip*/ #CToolTip>QLabel { min-height: 52px; From 916b365155ab65b03ce089a5abe32c586473ac54 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Thu, 13 Apr 2023 16:42:17 +0300 Subject: [PATCH 018/298] [win-linux] remove PNG icons after switching to SVG --- win-linux/res/icons/maximize.png | Bin 124 -> 0 bytes win-linux/res/icons/maximize@1.25x.png | Bin 241 -> 0 bytes win-linux/res/icons/maximize@1.5x.png | Bin 261 -> 0 bytes win-linux/res/icons/maximize@1.75x.png | Bin 396 -> 0 bytes win-linux/res/icons/maximize@2x.png | Bin 154 -> 0 bytes win-linux/res/icons/maximize_light.png | Bin 133 -> 0 bytes win-linux/res/icons/maximize_light@1.25x.png | Bin 237 -> 0 bytes win-linux/res/icons/maximize_light@1.5x.png | Bin 256 -> 0 bytes win-linux/res/icons/maximize_light@1.75x.png | Bin 525 -> 0 bytes win-linux/res/icons/maximize_light@2x.png | Bin 437 -> 0 bytes win-linux/res/icons/menu-indicator-dark.png | Bin 260 -> 0 bytes win-linux/res/icons/menu-indicator.png | Bin 421 -> 0 bytes win-linux/res/icons/menu-indicator@1.25x.png | Bin 210 -> 0 bytes win-linux/res/icons/menu-indicator@1.5x.png | Bin 215 -> 0 bytes win-linux/res/icons/menu-indicator@1.75x.png | Bin 245 -> 0 bytes win-linux/res/icons/menu-indicator@2x.png | Bin 329 -> 0 bytes win-linux/res/icons/message_icons.png | Bin 3580 -> 0 bytes win-linux/res/icons/message_icons@1.25x.png | Bin 3654 -> 0 bytes win-linux/res/icons/message_icons@1.5x.png | Bin 3246 -> 0 bytes win-linux/res/icons/message_icons@1.75x.png | Bin 4962 -> 0 bytes win-linux/res/icons/message_icons@2x.png | Bin 6233 -> 0 bytes win-linux/res/icons/message_quest.svg | 60 ------------------ win-linux/res/icons/minimize-close.png | Bin 210 -> 0 bytes win-linux/res/icons/minimize-close@1.25x.png | Bin 455 -> 0 bytes win-linux/res/icons/minimize-close@1.5x.png | Bin 480 -> 0 bytes win-linux/res/icons/minimize-close@1.75x.png | Bin 513 -> 0 bytes win-linux/res/icons/minimize-close@2x.png | Bin 324 -> 0 bytes win-linux/res/icons/minimize-close_light.png | Bin 168 -> 0 bytes .../res/icons/minimize-close_light@1.25x.png | Bin 281 -> 0 bytes .../res/icons/minimize-close_light@1.5x.png | Bin 312 -> 0 bytes .../res/icons/minimize-close_light@1.75x.png | Bin 310 -> 0 bytes .../res/icons/minimize-close_light@2x.png | Bin 533 -> 0 bytes win-linux/res/icons/tab_close_active.png | Bin 240 -> 0 bytes win-linux/res/icons/tab_close_active_2x.png | Bin 369 -> 0 bytes win-linux/res/icons/tab_close_hover.png | Bin 239 -> 0 bytes win-linux/res/icons/tab_close_hover_2x.png | Bin 369 -> 0 bytes win-linux/res/icons/tab_close_normal.png | Bin 239 -> 0 bytes win-linux/res/icons/tab_close_normal_2x.png | Bin 370 -> 0 bytes .../icons/tabbar/changetab_left_active.png | Bin 83 -> 0 bytes .../tabbar/changetab_left_active@1.25x.png | Bin 194 -> 0 bytes .../tabbar/changetab_left_active@1.5x.png | Bin 186 -> 0 bytes .../tabbar/changetab_left_active@1.75x.png | Bin 201 -> 0 bytes .../icons/tabbar/changetab_left_active@2x.png | Bin 140 -> 0 bytes .../tabbar/changetab_left_active_light.png | Bin 528 -> 0 bytes .../changetab_left_active_light@1.25x.png | Bin 602 -> 0 bytes .../changetab_left_active_light@1.5x.png | Bin 601 -> 0 bytes .../changetab_left_active_light@1.75x.png | Bin 623 -> 0 bytes .../tabbar/changetab_left_active_light@2x.png | Bin 680 -> 0 bytes .../icons/tabbar/changetab_left_disabled.png | Bin 83 -> 0 bytes .../tabbar/changetab_left_disabled@1.25x.png | Bin 217 -> 0 bytes .../tabbar/changetab_left_disabled@1.5x.png | Bin 245 -> 0 bytes .../tabbar/changetab_left_disabled@1.75x.png | Bin 222 -> 0 bytes .../tabbar/changetab_left_disabled@2x.png | Bin 116 -> 0 bytes .../tabbar/changetab_left_disabled_light.png | Bin 545 -> 0 bytes .../changetab_left_disabled_light@1.25x.png | Bin 595 -> 0 bytes .../changetab_left_disabled_light@1.5x.png | Bin 636 -> 0 bytes .../changetab_left_disabled_light@1.75x.png | Bin 617 -> 0 bytes .../changetab_left_disabled_light@2x.png | Bin 670 -> 0 bytes .../res/icons/tabbar/changetab_left_hover.png | Bin 83 -> 0 bytes .../tabbar/changetab_left_hover@1.25x.png | Bin 194 -> 0 bytes .../tabbar/changetab_left_hover@1.5x.png | Bin 186 -> 0 bytes .../tabbar/changetab_left_hover@1.75x.png | Bin 201 -> 0 bytes .../icons/tabbar/changetab_left_hover@2x.png | Bin 140 -> 0 bytes .../tabbar/changetab_left_hover_light.png | Bin 528 -> 0 bytes .../changetab_left_hover_light@1.25x.png | Bin 602 -> 0 bytes .../changetab_left_hover_light@1.5x.png | Bin 601 -> 0 bytes .../changetab_left_hover_light@1.75x.png | Bin 623 -> 0 bytes .../tabbar/changetab_left_hover_light@2x.png | Bin 680 -> 0 bytes .../icons/tabbar/changetab_left_normal.png | Bin 83 -> 0 bytes .../tabbar/changetab_left_normal@1.25x.png | Bin 194 -> 0 bytes .../tabbar/changetab_left_normal@1.5x.png | Bin 186 -> 0 bytes .../tabbar/changetab_left_normal@1.75x.png | Bin 201 -> 0 bytes .../icons/tabbar/changetab_left_normal@2x.png | Bin 140 -> 0 bytes .../tabbar/changetab_left_normal_light.png | Bin 528 -> 0 bytes .../changetab_left_normal_light@1.25x.png | Bin 602 -> 0 bytes .../changetab_left_normal_light@1.5x.png | Bin 601 -> 0 bytes .../changetab_left_normal_light@1.75x.png | Bin 623 -> 0 bytes .../tabbar/changetab_left_normal_light@2x.png | Bin 680 -> 0 bytes .../icons/tabbar/changetab_right_active.png | Bin 84 -> 0 bytes .../tabbar/changetab_right_active@1.25x.png | Bin 193 -> 0 bytes .../tabbar/changetab_right_active@1.5x.png | Bin 190 -> 0 bytes .../tabbar/changetab_right_active@1.75x.png | Bin 199 -> 0 bytes .../tabbar/changetab_right_active@2x.png | Bin 133 -> 0 bytes .../tabbar/changetab_right_active_light.png | Bin 530 -> 0 bytes .../changetab_right_active_light@1.25x.png | Bin 589 -> 0 bytes .../changetab_right_active_light@1.5x.png | Bin 600 -> 0 bytes .../changetab_right_active_light@1.75x.png | Bin 612 -> 0 bytes .../changetab_right_active_light@2x.png | Bin 685 -> 0 bytes .../icons/tabbar/changetab_right_disabled.png | Bin 83 -> 0 bytes .../tabbar/changetab_right_disabled@1.25x.png | Bin 196 -> 0 bytes .../tabbar/changetab_right_disabled@1.5x.png | Bin 230 -> 0 bytes .../tabbar/changetab_right_disabled@1.75x.png | Bin 203 -> 0 bytes .../tabbar/changetab_right_disabled@2x.png | Bin 116 -> 0 bytes .../tabbar/changetab_right_disabled_light.png | Bin 542 -> 0 bytes .../changetab_right_disabled_light@1.25x.png | Bin 590 -> 0 bytes .../changetab_right_disabled_light@1.5x.png | Bin 616 -> 0 bytes .../changetab_right_disabled_light@1.75x.png | Bin 615 -> 0 bytes .../changetab_right_disabled_light@2x.png | Bin 667 -> 0 bytes .../icons/tabbar/changetab_right_hover.png | Bin 84 -> 0 bytes .../tabbar/changetab_right_hover@1.25x.png | Bin 193 -> 0 bytes .../tabbar/changetab_right_hover@1.5x.png | Bin 190 -> 0 bytes .../tabbar/changetab_right_hover@1.75x.png | Bin 199 -> 0 bytes .../icons/tabbar/changetab_right_hover@2x.png | Bin 133 -> 0 bytes .../tabbar/changetab_right_hover_light.png | Bin 530 -> 0 bytes .../changetab_right_hover_light@1.25x.png | Bin 589 -> 0 bytes .../changetab_right_hover_light@1.5x.png | Bin 600 -> 0 bytes .../changetab_right_hover_light@1.75x.png | Bin 612 -> 0 bytes .../tabbar/changetab_right_hover_light@2x.png | Bin 685 -> 0 bytes .../icons/tabbar/changetab_right_normal.png | Bin 84 -> 0 bytes .../tabbar/changetab_right_normal@1.25x.png | Bin 193 -> 0 bytes .../tabbar/changetab_right_normal@1.5x.png | Bin 190 -> 0 bytes .../tabbar/changetab_right_normal@1.75x.png | Bin 199 -> 0 bytes .../tabbar/changetab_right_normal@2x.png | Bin 133 -> 0 bytes .../tabbar/changetab_right_normal_light.png | Bin 530 -> 0 bytes .../changetab_right_normal_light@1.25x.png | Bin 589 -> 0 bytes .../changetab_right_normal_light@1.5x.png | Bin 600 -> 0 bytes .../changetab_right_normal_light@1.75x.png | Bin 612 -> 0 bytes .../changetab_right_normal_light@2x.png | Bin 685 -> 0 bytes win-linux/res/icons/tabbar/portal.png | Bin 278 -> 0 bytes win-linux/res/icons/tabbar/portal@1.25x.png | Bin 654 -> 0 bytes win-linux/res/icons/tabbar/portal@1.5x.png | Bin 443 -> 0 bytes win-linux/res/icons/tabbar/portal@1.75x.png | Bin 977 -> 0 bytes win-linux/res/icons/tabbar/portal@2x.png | Bin 570 -> 0 bytes win-linux/res/icons/tabbar/portal_light.png | Bin 285 -> 0 bytes .../res/icons/tabbar/portal_light@1.25x.png | Bin 661 -> 0 bytes .../res/icons/tabbar/portal_light@1.5x.png | Bin 441 -> 0 bytes .../res/icons/tabbar/portal_light@1.75x.png | Bin 969 -> 0 bytes .../res/icons/tabbar/portal_light@2x.png | Bin 595 -> 0 bytes win-linux/res/icons/tabbar/tab_close_dark.png | Bin 773 -> 0 bytes .../res/icons/tabbar/tab_close_dark@1.25x.png | Bin 792 -> 0 bytes .../res/icons/tabbar/tab_close_dark@1.5x.png | Bin 735 -> 0 bytes .../res/icons/tabbar/tab_close_dark@1.75x.png | Bin 879 -> 0 bytes .../res/icons/tabbar/tab_close_dark@2x.png | Bin 1307 -> 0 bytes .../res/icons/tabbar/tab_close_light.png | Bin 772 -> 0 bytes .../icons/tabbar/tab_close_light@1.25x.png | Bin 582 -> 0 bytes .../res/icons/tabbar/tab_close_light@1.5x.png | Bin 609 -> 0 bytes .../icons/tabbar/tab_close_light@1.75x.png | Bin 732 -> 0 bytes .../res/icons/tabbar/tab_close_light@2x.png | Bin 1333 -> 0 bytes .../res/icons/tabbar/tabicon_de_normal.png | Bin 96 -> 0 bytes .../icons/tabbar/tabicon_de_normal_1.25x.png | Bin 197 -> 0 bytes .../icons/tabbar/tabicon_de_normal_1.5x.png | Bin 196 -> 0 bytes .../icons/tabbar/tabicon_de_normal_1.75x.png | Bin 224 -> 0 bytes .../res/icons/tabbar/tabicon_de_normal_2x.png | Bin 139 -> 0 bytes .../res/icons/tabbar/tabicon_docxf_normal.png | Bin 109 -> 0 bytes .../tabbar/tabicon_docxf_normal_1.25x.png | Bin 117 -> 0 bytes .../tabbar/tabicon_docxf_normal_1.5x.png | Bin 117 -> 0 bytes .../tabbar/tabicon_docxf_normal_1.75x.png | Bin 139 -> 0 bytes .../icons/tabbar/tabicon_docxf_normal_2x.png | Bin 154 -> 0 bytes .../res/icons/tabbar/tabicon_oform_normal.png | Bin 116 -> 0 bytes .../tabbar/tabicon_oform_normal_1.25x.png | Bin 127 -> 0 bytes .../tabbar/tabicon_oform_normal_1.5x.png | Bin 132 -> 0 bytes .../tabbar/tabicon_oform_normal_1.75x.png | Bin 154 -> 0 bytes .../icons/tabbar/tabicon_oform_normal_2x.png | Bin 165 -> 0 bytes .../res/icons/tabbar/tabicon_pe_normal.png | Bin 104 -> 0 bytes .../icons/tabbar/tabicon_pe_normal_1.25x.png | Bin 204 -> 0 bytes .../icons/tabbar/tabicon_pe_normal_1.5x.png | Bin 203 -> 0 bytes .../icons/tabbar/tabicon_pe_normal_1.75x.png | Bin 232 -> 0 bytes .../res/icons/tabbar/tabicon_pe_normal_2x.png | Bin 151 -> 0 bytes .../res/icons/tabbar/tabicon_se_normal.png | Bin 105 -> 0 bytes .../icons/tabbar/tabicon_se_normal_1.25x.png | Bin 213 -> 0 bytes .../icons/tabbar/tabicon_se_normal_1.5x.png | Bin 216 -> 0 bytes .../icons/tabbar/tabicon_se_normal_1.75x.png | Bin 245 -> 0 bytes .../res/icons/tabbar/tabicon_se_normal_2x.png | Bin 146 -> 0 bytes .../res/icons/tabbar/tabicon_undefined.png | Bin 121 -> 0 bytes .../icons/tabbar/tabicon_undefined_1.25x.png | Bin 244 -> 0 bytes .../icons/tabbar/tabicon_undefined_1.5x.png | Bin 294 -> 0 bytes .../icons/tabbar/tabicon_undefined_1.75x.png | Bin 321 -> 0 bytes .../res/icons/tabbar/tabicon_undefined_2x.png | Bin 158 -> 0 bytes win-linux/res/icons/user.png | Bin 327 -> 0 bytes win-linux/res/icons/user@1.5x.png | Bin 337 -> 0 bytes win-linux/res/icons/user@2x.png | Bin 550 -> 0 bytes 171 files changed, 60 deletions(-) delete mode 100644 win-linux/res/icons/maximize.png delete mode 100644 win-linux/res/icons/maximize@1.25x.png delete mode 100644 win-linux/res/icons/maximize@1.5x.png delete mode 100644 win-linux/res/icons/maximize@1.75x.png delete mode 100644 win-linux/res/icons/maximize@2x.png delete mode 100644 win-linux/res/icons/maximize_light.png delete mode 100644 win-linux/res/icons/maximize_light@1.25x.png delete mode 100644 win-linux/res/icons/maximize_light@1.5x.png delete mode 100644 win-linux/res/icons/maximize_light@1.75x.png delete mode 100644 win-linux/res/icons/maximize_light@2x.png delete mode 100644 win-linux/res/icons/menu-indicator-dark.png delete mode 100644 win-linux/res/icons/menu-indicator.png delete mode 100644 win-linux/res/icons/menu-indicator@1.25x.png delete mode 100644 win-linux/res/icons/menu-indicator@1.5x.png delete mode 100644 win-linux/res/icons/menu-indicator@1.75x.png delete mode 100644 win-linux/res/icons/menu-indicator@2x.png delete mode 100644 win-linux/res/icons/message_icons.png delete mode 100644 win-linux/res/icons/message_icons@1.25x.png delete mode 100644 win-linux/res/icons/message_icons@1.5x.png delete mode 100644 win-linux/res/icons/message_icons@1.75x.png delete mode 100644 win-linux/res/icons/message_icons@2x.png delete mode 100644 win-linux/res/icons/message_quest.svg delete mode 100644 win-linux/res/icons/minimize-close.png delete mode 100644 win-linux/res/icons/minimize-close@1.25x.png delete mode 100644 win-linux/res/icons/minimize-close@1.5x.png delete mode 100644 win-linux/res/icons/minimize-close@1.75x.png delete mode 100644 win-linux/res/icons/minimize-close@2x.png delete mode 100644 win-linux/res/icons/minimize-close_light.png delete mode 100644 win-linux/res/icons/minimize-close_light@1.25x.png delete mode 100644 win-linux/res/icons/minimize-close_light@1.5x.png delete mode 100644 win-linux/res/icons/minimize-close_light@1.75x.png delete mode 100644 win-linux/res/icons/minimize-close_light@2x.png delete mode 100644 win-linux/res/icons/tab_close_active.png delete mode 100644 win-linux/res/icons/tab_close_active_2x.png delete mode 100644 win-linux/res/icons/tab_close_hover.png delete mode 100644 win-linux/res/icons/tab_close_hover_2x.png delete mode 100644 win-linux/res/icons/tab_close_normal.png delete mode 100644 win-linux/res/icons/tab_close_normal_2x.png delete mode 100644 win-linux/res/icons/tabbar/changetab_left_active.png delete mode 100644 win-linux/res/icons/tabbar/changetab_left_active@1.25x.png delete mode 100644 win-linux/res/icons/tabbar/changetab_left_active@1.5x.png delete mode 100644 win-linux/res/icons/tabbar/changetab_left_active@1.75x.png delete mode 100644 win-linux/res/icons/tabbar/changetab_left_active@2x.png delete mode 100644 win-linux/res/icons/tabbar/changetab_left_active_light.png delete mode 100644 win-linux/res/icons/tabbar/changetab_left_active_light@1.25x.png delete mode 100644 win-linux/res/icons/tabbar/changetab_left_active_light@1.5x.png delete mode 100644 win-linux/res/icons/tabbar/changetab_left_active_light@1.75x.png delete mode 100644 win-linux/res/icons/tabbar/changetab_left_active_light@2x.png delete mode 100644 win-linux/res/icons/tabbar/changetab_left_disabled.png delete mode 100644 win-linux/res/icons/tabbar/changetab_left_disabled@1.25x.png delete mode 100644 win-linux/res/icons/tabbar/changetab_left_disabled@1.5x.png delete mode 100644 win-linux/res/icons/tabbar/changetab_left_disabled@1.75x.png delete mode 100644 win-linux/res/icons/tabbar/changetab_left_disabled@2x.png delete mode 100644 win-linux/res/icons/tabbar/changetab_left_disabled_light.png delete mode 100644 win-linux/res/icons/tabbar/changetab_left_disabled_light@1.25x.png delete mode 100644 win-linux/res/icons/tabbar/changetab_left_disabled_light@1.5x.png delete mode 100644 win-linux/res/icons/tabbar/changetab_left_disabled_light@1.75x.png delete mode 100644 win-linux/res/icons/tabbar/changetab_left_disabled_light@2x.png delete mode 100644 win-linux/res/icons/tabbar/changetab_left_hover.png delete mode 100644 win-linux/res/icons/tabbar/changetab_left_hover@1.25x.png delete mode 100644 win-linux/res/icons/tabbar/changetab_left_hover@1.5x.png delete mode 100644 win-linux/res/icons/tabbar/changetab_left_hover@1.75x.png delete mode 100644 win-linux/res/icons/tabbar/changetab_left_hover@2x.png delete mode 100644 win-linux/res/icons/tabbar/changetab_left_hover_light.png delete mode 100644 win-linux/res/icons/tabbar/changetab_left_hover_light@1.25x.png delete mode 100644 win-linux/res/icons/tabbar/changetab_left_hover_light@1.5x.png delete mode 100644 win-linux/res/icons/tabbar/changetab_left_hover_light@1.75x.png delete mode 100644 win-linux/res/icons/tabbar/changetab_left_hover_light@2x.png delete mode 100644 win-linux/res/icons/tabbar/changetab_left_normal.png delete mode 100644 win-linux/res/icons/tabbar/changetab_left_normal@1.25x.png delete mode 100644 win-linux/res/icons/tabbar/changetab_left_normal@1.5x.png delete mode 100644 win-linux/res/icons/tabbar/changetab_left_normal@1.75x.png delete mode 100644 win-linux/res/icons/tabbar/changetab_left_normal@2x.png delete mode 100644 win-linux/res/icons/tabbar/changetab_left_normal_light.png delete mode 100644 win-linux/res/icons/tabbar/changetab_left_normal_light@1.25x.png delete mode 100644 win-linux/res/icons/tabbar/changetab_left_normal_light@1.5x.png delete mode 100644 win-linux/res/icons/tabbar/changetab_left_normal_light@1.75x.png delete mode 100644 win-linux/res/icons/tabbar/changetab_left_normal_light@2x.png delete mode 100644 win-linux/res/icons/tabbar/changetab_right_active.png delete mode 100644 win-linux/res/icons/tabbar/changetab_right_active@1.25x.png delete mode 100644 win-linux/res/icons/tabbar/changetab_right_active@1.5x.png delete mode 100644 win-linux/res/icons/tabbar/changetab_right_active@1.75x.png delete mode 100644 win-linux/res/icons/tabbar/changetab_right_active@2x.png delete mode 100644 win-linux/res/icons/tabbar/changetab_right_active_light.png delete mode 100644 win-linux/res/icons/tabbar/changetab_right_active_light@1.25x.png delete mode 100644 win-linux/res/icons/tabbar/changetab_right_active_light@1.5x.png delete mode 100644 win-linux/res/icons/tabbar/changetab_right_active_light@1.75x.png delete mode 100644 win-linux/res/icons/tabbar/changetab_right_active_light@2x.png delete mode 100644 win-linux/res/icons/tabbar/changetab_right_disabled.png delete mode 100644 win-linux/res/icons/tabbar/changetab_right_disabled@1.25x.png delete mode 100644 win-linux/res/icons/tabbar/changetab_right_disabled@1.5x.png delete mode 100644 win-linux/res/icons/tabbar/changetab_right_disabled@1.75x.png delete mode 100644 win-linux/res/icons/tabbar/changetab_right_disabled@2x.png delete mode 100644 win-linux/res/icons/tabbar/changetab_right_disabled_light.png delete mode 100644 win-linux/res/icons/tabbar/changetab_right_disabled_light@1.25x.png delete mode 100644 win-linux/res/icons/tabbar/changetab_right_disabled_light@1.5x.png delete mode 100644 win-linux/res/icons/tabbar/changetab_right_disabled_light@1.75x.png delete mode 100644 win-linux/res/icons/tabbar/changetab_right_disabled_light@2x.png delete mode 100644 win-linux/res/icons/tabbar/changetab_right_hover.png delete mode 100644 win-linux/res/icons/tabbar/changetab_right_hover@1.25x.png delete mode 100644 win-linux/res/icons/tabbar/changetab_right_hover@1.5x.png delete mode 100644 win-linux/res/icons/tabbar/changetab_right_hover@1.75x.png delete mode 100644 win-linux/res/icons/tabbar/changetab_right_hover@2x.png delete mode 100644 win-linux/res/icons/tabbar/changetab_right_hover_light.png delete mode 100644 win-linux/res/icons/tabbar/changetab_right_hover_light@1.25x.png delete mode 100644 win-linux/res/icons/tabbar/changetab_right_hover_light@1.5x.png delete mode 100644 win-linux/res/icons/tabbar/changetab_right_hover_light@1.75x.png delete mode 100644 win-linux/res/icons/tabbar/changetab_right_hover_light@2x.png delete mode 100644 win-linux/res/icons/tabbar/changetab_right_normal.png delete mode 100644 win-linux/res/icons/tabbar/changetab_right_normal@1.25x.png delete mode 100644 win-linux/res/icons/tabbar/changetab_right_normal@1.5x.png delete mode 100644 win-linux/res/icons/tabbar/changetab_right_normal@1.75x.png delete mode 100644 win-linux/res/icons/tabbar/changetab_right_normal@2x.png delete mode 100644 win-linux/res/icons/tabbar/changetab_right_normal_light.png delete mode 100644 win-linux/res/icons/tabbar/changetab_right_normal_light@1.25x.png delete mode 100644 win-linux/res/icons/tabbar/changetab_right_normal_light@1.5x.png delete mode 100644 win-linux/res/icons/tabbar/changetab_right_normal_light@1.75x.png delete mode 100644 win-linux/res/icons/tabbar/changetab_right_normal_light@2x.png delete mode 100644 win-linux/res/icons/tabbar/portal.png delete mode 100644 win-linux/res/icons/tabbar/portal@1.25x.png delete mode 100644 win-linux/res/icons/tabbar/portal@1.5x.png delete mode 100644 win-linux/res/icons/tabbar/portal@1.75x.png delete mode 100644 win-linux/res/icons/tabbar/portal@2x.png delete mode 100644 win-linux/res/icons/tabbar/portal_light.png delete mode 100644 win-linux/res/icons/tabbar/portal_light@1.25x.png delete mode 100644 win-linux/res/icons/tabbar/portal_light@1.5x.png delete mode 100644 win-linux/res/icons/tabbar/portal_light@1.75x.png delete mode 100644 win-linux/res/icons/tabbar/portal_light@2x.png delete mode 100644 win-linux/res/icons/tabbar/tab_close_dark.png delete mode 100644 win-linux/res/icons/tabbar/tab_close_dark@1.25x.png delete mode 100644 win-linux/res/icons/tabbar/tab_close_dark@1.5x.png delete mode 100644 win-linux/res/icons/tabbar/tab_close_dark@1.75x.png delete mode 100644 win-linux/res/icons/tabbar/tab_close_dark@2x.png delete mode 100644 win-linux/res/icons/tabbar/tab_close_light.png delete mode 100644 win-linux/res/icons/tabbar/tab_close_light@1.25x.png delete mode 100644 win-linux/res/icons/tabbar/tab_close_light@1.5x.png delete mode 100644 win-linux/res/icons/tabbar/tab_close_light@1.75x.png delete mode 100644 win-linux/res/icons/tabbar/tab_close_light@2x.png delete mode 100644 win-linux/res/icons/tabbar/tabicon_de_normal.png delete mode 100644 win-linux/res/icons/tabbar/tabicon_de_normal_1.25x.png delete mode 100644 win-linux/res/icons/tabbar/tabicon_de_normal_1.5x.png delete mode 100644 win-linux/res/icons/tabbar/tabicon_de_normal_1.75x.png delete mode 100644 win-linux/res/icons/tabbar/tabicon_de_normal_2x.png delete mode 100644 win-linux/res/icons/tabbar/tabicon_docxf_normal.png delete mode 100644 win-linux/res/icons/tabbar/tabicon_docxf_normal_1.25x.png delete mode 100644 win-linux/res/icons/tabbar/tabicon_docxf_normal_1.5x.png delete mode 100644 win-linux/res/icons/tabbar/tabicon_docxf_normal_1.75x.png delete mode 100644 win-linux/res/icons/tabbar/tabicon_docxf_normal_2x.png delete mode 100644 win-linux/res/icons/tabbar/tabicon_oform_normal.png delete mode 100644 win-linux/res/icons/tabbar/tabicon_oform_normal_1.25x.png delete mode 100644 win-linux/res/icons/tabbar/tabicon_oform_normal_1.5x.png delete mode 100644 win-linux/res/icons/tabbar/tabicon_oform_normal_1.75x.png delete mode 100644 win-linux/res/icons/tabbar/tabicon_oform_normal_2x.png delete mode 100644 win-linux/res/icons/tabbar/tabicon_pe_normal.png delete mode 100644 win-linux/res/icons/tabbar/tabicon_pe_normal_1.25x.png delete mode 100644 win-linux/res/icons/tabbar/tabicon_pe_normal_1.5x.png delete mode 100644 win-linux/res/icons/tabbar/tabicon_pe_normal_1.75x.png delete mode 100644 win-linux/res/icons/tabbar/tabicon_pe_normal_2x.png delete mode 100644 win-linux/res/icons/tabbar/tabicon_se_normal.png delete mode 100644 win-linux/res/icons/tabbar/tabicon_se_normal_1.25x.png delete mode 100644 win-linux/res/icons/tabbar/tabicon_se_normal_1.5x.png delete mode 100644 win-linux/res/icons/tabbar/tabicon_se_normal_1.75x.png delete mode 100644 win-linux/res/icons/tabbar/tabicon_se_normal_2x.png delete mode 100644 win-linux/res/icons/tabbar/tabicon_undefined.png delete mode 100644 win-linux/res/icons/tabbar/tabicon_undefined_1.25x.png delete mode 100644 win-linux/res/icons/tabbar/tabicon_undefined_1.5x.png delete mode 100644 win-linux/res/icons/tabbar/tabicon_undefined_1.75x.png delete mode 100644 win-linux/res/icons/tabbar/tabicon_undefined_2x.png delete mode 100644 win-linux/res/icons/user.png delete mode 100644 win-linux/res/icons/user@1.5x.png delete mode 100644 win-linux/res/icons/user@2x.png diff --git a/win-linux/res/icons/maximize.png b/win-linux/res/icons/maximize.png deleted file mode 100644 index 696d3c503dfcffaa04287f6ac2e1888cd2b2eebe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 124 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4U&YmugAr-fhCCm;ywO3Qo=wHQf z+2hZr!$%qdnKk@97AI&-;beKL>0#9(EacI`Qt9*b$6IMhwgv^o%C1EdKDn68VPN=e Wd?r0!r}8<_I0jEwKbLh*2~7ZRb0?Vq diff --git a/win-linux/res/icons/maximize@1.25x.png b/win-linux/res/icons/maximize@1.25x.png deleted file mode 100644 index fa681c714aa7d080465a858dd395cf2822efb1fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 241 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU1|)m_?Z^dEoCO|{#S9GG!XV7ZFl&wkP>``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&eBew(L@V@L(#+v|>e4GKIi7qcv+jz7!WWzMDB zobhG9s#)@5rfA~_k*7Z@Jl_-PpqaYTR(`HH*Ox1+Dp&87;a!yx;M%Mu6|!{m;TP{$ zrk2Pt{5kpb&-=YGv#pQ#RtA6L_4i#Rdey0VUyOfTmq>M-iB*50w`=pN_huH^ul%l^ itbN>F`9{UzFkitRNB`$5GZTR>V(@hJb6Mw<&;$S&C|4B# diff --git a/win-linux/res/icons/maximize@1.5x.png b/win-linux/res/icons/maximize@1.5x.png deleted file mode 100644 index ccb80a31bda83d9abe238d31123962191869d324..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 261 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTC&H|6fVg?3oVGw3ym^DWND9BhG zv`P%F_Gv6n(qxGiT__Iqcr{^6dR$(_cBizfaYvn?3K(lG=@C1-+qm)<*dv xAGW<;7I&)p^Zi%{)4kHqiuINp-6_y;n>FW;V`QFQs4CEv44$rjF6*2UngCQjV734N diff --git a/win-linux/res/icons/maximize@1.75x.png b/win-linux/res/icons/maximize@1.75x.png deleted file mode 100644 index cb62187f1a1422296d44796f3b860dfcbe424951..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 396 zcmeAS@N?(olHy`uVBq!ia0vp^79h;Q1|(OsS<3+_mUKs7M+SzC{oH>NS%G}c0*}aI z1_o{+5N5n|x9$&6P_o1|q9iy!t)x7$D3zfgF*C13FE6!3!9>qM&(QM9wM{7u42+zf zE{-7?&Tp?>TyTt_AzdSmRW6S9DL^Ldet0gZfT?1GOtv054Y z_7UWs&VPnoKE8)9=dJNqog*8yUP-_CB;I)M;MG-O3(5<=mPa)9F92FuP|78fcRTL? XxmSKG%~M|hLyp1I)z4*}Q$iB}zp|ol diff --git a/win-linux/res/icons/maximize@2x.png b/win-linux/res/icons/maximize@2x.png deleted file mode 100644 index 5e26cac5101b20549b81c92d673bba4dc904ea80..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 154 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I0wfs{c7_7UL{AsTkcwMxuNiVRI0&#f%0K_V zf62l&W?>7DuSdC$s%>xo;`e;&-m*IB2{|ig#O?B70*-lQ_KEUADHfb+)N=d xws^uC=BBHnum3Uwr5{wD{UdWg|Ao+`66VfbhR2Fsqc?-JdAjIeC@yGpjNphc;LzaEFgRg9 dp}t|6JcH&xzV)|SK81kH_jL7hS?83{1OQnbCWrt4 diff --git a/win-linux/res/icons/maximize_light@1.25x.png b/win-linux/res/icons/maximize_light@1.25x.png deleted file mode 100644 index 40d531e21408ef1a378d0a3bfb446f3ee50d5581..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 237 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU1|)m_?Z^dEoCO|{#S9GG!XV7ZFl&wkP>``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&eBev_w*V@L(#+v|>e4GKIi7qhDVYinmOzF^eh z_CGqw*i3JODf7IoGW^>P2~At{t)?VS%OGg=v$fxfOjay%6y;r&5%4s<{pS7P(=Tio zeoQ|7)4pn_S$W6oPs`p&Pn23Odey0VUyT2}^e$z6skz5@EM4SywOo3RY3c4#uKPcd ee diff --git a/win-linux/res/icons/maximize_light@1.5x.png b/win-linux/res/icons/maximize_light@1.5x.png deleted file mode 100644 index 74c87319a679e3b68cd279941fba17736b822cc8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 256 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTC&H|6fVg?3oVGw3ym^DWND9BhG z`+P3jv)Sw)*5yWhz8=$Scl%%M(vJJfRR4e27a_GnMQgt7 zOexkY*X~}4UTOaSENjf=>IA#zPH}U%8F$3m-%ntFCmj76=s*TfS3j3^P6NS%G}c0*}aI z1_o{+5N5n|x9$&6P_o1|q9iy!t)x7$D3zfgF*C13FE6!3!9>qM&(QM9wM{7u42)f# zE{-7?&Tpq2>^l^|!~FZdeQd!LS4)YNpA}LyB{?%iE8pxpotM7pef1x`(>5P&&t#u> z^sn+gr)#zsPR_agZC=wM{{mU7omtbDF6dk5I5%eN>7W4j>kItW-AdJ5u{b+GJ^bw^ zkt-KXS4>`A7RmMMh18Xkp}TchOG|iPJy{hyt;uQ^TWQf%J#RV`Fp#c zF{=g!#Y*)sd8~TPf5x6a@beYXD=RBsv4yOve8u(ZicKlA)>WHQ*3ztbyBMbei6$#k z|GN!drv9;xb7w8jb67fS`ML#uXM@cb1f2~I4_N+erF6i`XDhW=1b@E5yJAU=>iPDC zemx?eYGkx@dqvLO``ybP6cnqZEwGaBumO*6&TZa=J;e`~?_Vwpj5-ESS3j3^P60#LT=By}Z;C1rt33 zJwwYY*ERtaF{*mHIEGZjy`ApJb=ZN2`Sbtd&$!>ZHf}0CxZ3o^1<4DFI&$3iix?Rg zYKrfF&o;WWZKaI*#BKhnmYrL2wT^o(d7I3yw`1OyI=%^d6Yia7yu^Cxx23}_hbnt^ z4{?w8&lz4az5FYq5Ua3vKJyapCEtr1(hIaO3;}t8f#JsDUk7h=nwU*3R=@NkH-ebOX#liFRUe9^mDL!LXvF%5u;No@a zaS2)Hz8>NBIlFUSMdM1#>%#g5rq8P$u`YWSbH1?Av?{OIYP;L{+B*l&FP(p}c=qL; zrd97A^WEYW2fF%za*=Yc@6$V-CU#Rx)Gyr#IXBmXnStTMgTe~DWM4fUyrcQ diff --git a/win-linux/res/icons/menu-indicator-dark.png b/win-linux/res/icons/menu-indicator-dark.png deleted file mode 100644 index e7e8cc7abd3649dc6d6c468ce2fdbc2450a25a93..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 260 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1|)ksWqE-VV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}c0*}aI1_r*vAk26?e?&q9iy!t)x7$D3zfgF*C13FE6!3!9>qM z&+Jc6@_nG1QcoAh5DWjceU4lQ6aq4K$OD{Voa5~@czO;UUkHgFc zBgWLVp?&#mYfUZJUtGX$)3saf!;6oH(@XAci9RSh*PKr{KnKPike|9owU|>}A zba4!^@LxMg(Vy8-q~&-1FZqDbQVo%=kN{>T=Sx=_R%rHxm@)=8yB^?I5M2>w;_Jb& zY}qo=7!Ia0CF$Ses&1YW+qmb6x8D1+XZGIRE!9x(YF0eqtW1hA`%Rs$M^-qW@H4+mKfmNJwG!y<2RnN4Y|3IaEficrF`KK4A8ZA3;nk8c% zBm3G|H~)}~#VI>)wH0oD8QpL@>cwjxiQq5qwkH-ATA%Y<*D`U(|4a#IL*J{vH~sp> zx7jVaMNnLz{aT-1^UKBZH&Kk9%{vA)#LB0J^d#um(?N-uZ-M>Nhb>$nY z)Q?;_)%$#A3IC|?b35GU=~w;m#i<#G#J6wmJ@JsW;Jd^jh6HAr`DgQv9OOy{1}TH5 LtDnm{r-UW|2E?Ye diff --git a/win-linux/res/icons/menu-indicator@1.25x.png b/win-linux/res/icons/menu-indicator@1.25x.png deleted file mode 100644 index 8b6ba16a337669e63d0dbc0a99dedf45359277ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 210 zcmeAS@N?(olHy`uVBq!ia0vp^QXtI11|(N{`J4k%oCO|{#S9GG!XV7ZFl&wkP>``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&eBe!8cNV@L(#+bah-8w>iB?i~@WjbcHE?T&2PXq;xS z^h(M`|F2ET-|xCPa=dn&70~%r>E#W{t5&wfQ*}Km&1-G|tz__Y^>bP0l+XkKGGRq* diff --git a/win-linux/res/icons/menu-indicator@1.5x.png b/win-linux/res/icons/menu-indicator@1.5x.png deleted file mode 100644 index 6690e5f1b239eaac9d3ad85a520d0344c7a3efb7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 215 zcmeAS@N?(olHy`uVBq!ia0vp^av;pX1|+Qw)-3{3oCO|{#S9GG!XV7ZFl&wkP>``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&eBevYS$V@L(#+p7n88w_}yFQ)LiCG$Q@0Fu29 z@7CT8QVgB?f9s}sQ@qbkiPClN7c4xm@i*tT*|n{LeF1IzZ_hrYx`%b`!_FxG&dryV z=gf`MTpD8fO*gLK&A!|628Y})sO@O!Ulgl)&Tst{5!;h(=0&RxTUP+>W$<+Mb6Mw< G&;$Tj{z|9- diff --git a/win-linux/res/icons/menu-indicator@1.75x.png b/win-linux/res/icons/menu-indicator@1.75x.png deleted file mode 100644 index f322347cdd17b2a212b84bc284eddcdefe2d7a64..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 245 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k1|%Oc%$NbBI14-?iy0WWg+Z8+Vb&Z8pde#$ zkh>GZx^prwfgF}}M_)$E)e-c@N{4P%y$B+ufx7QBxHYffW_snSXvpLuYb`BPBL1}V zrR!Y7ry|R(vQ(CdmLBDCz9+IHd7q||l2R4NUqiKGkJ4!j^W>AOte53f>TO@7lzeKQ l#nr%zhKDDZySl`0W&Y}J>18z|_$Sa+44$rjF6*2UngBWtPLcos diff --git a/win-linux/res/icons/menu-indicator@2x.png b/win-linux/res/icons/menu-indicator@2x.png deleted file mode 100644 index 5db52bbc93af53b2702aadb59118b7290a60b761..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 329 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU1|)m_?Z^dEjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucL8%hgh?3y^w370~qEv=}#LT=BJwMkFg)(D3 zQ$0gN_s>q|Kvg?DT^vIq+|ORT&Dr80z#912z_-}w>_oAaz|$LRgXEtlXD@%)6szgV zyO`5WxJOOG*I-tH$-#`Kj|V2WY+rJI!C^6}kj1mbWI}g-?aYi=uwBwb=gj|n`SiV} zd5w>q{=QhX{g`gq<3q371yQtLWWg|RhRgQti8%`#O?OqYJm!=Vd+|0|Lby&++(50? iP7iD+T$8PrIpeSHOP;KOZ@7VeVDNPHb6Mw<&;$Ss8FNbj diff --git a/win-linux/res/icons/message_icons.png b/win-linux/res/icons/message_icons.png deleted file mode 100644 index 908d73c8cbca7d4e76225a049446f8187f38aaf2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3580 zcmV1Q8_%$V+($C<{r*W3zd%GksrAb~o8%A2YMN1bgl>d*9p45AAN1oQ z<9JW;O6yYhxGo_Mcz?&;Sqh{@9Be+Z*UyC$7x4FFsOuh`wkIl=h=SoaBgvE1cPTZx zjIvIchlg5Q?tC*fSc+3W?=DucKL38tYSbEK@YeQ00V6ODSBR^!7>tG{i(XC#xQYsQ5u z>iEvnO7h?E8N+NOlz(0$A_D2u-zL#-*9Ysj&9E_9jyo5-H60e&9_mp#eS}S-Uw=VB zFrKFR#fa}hs|R_W=K3XF3sbC(i{rb{(hp@a3i4KA>g}(>YDo@NB`-y83UJY;l6!Ji zHuLgRNbFn=hh}bJLsNEMa*514rIWK|wJq*k#*KIaw+t@Q?yDP);ghcxqxEV-H!g~l zH1xMqcDl3?Lqd59JtGtWhjf)c?az=<;?8AAb^!@xZXlmx??)rZ5~`}hqO@vU7|(~r z!~33tu^nx^;c~Le17BQ`k3nt9IYT?zDCm_u1hdD#1*`1vm2i|ET!wR(_k?+ayS}$t z23p)|#zcwrs89s5n|M~ipf**Br%;k;Eh(gRr9&vd(Q{iO2t|Np4{qZH7T1AEnL5QnBWn!e$Hp``XL<3YaodoGF*s{t zAg`!x*mdYdN?Y~3o@b#|CMVKa(peFgL$L-=epdL03?qT~e4_q+#$e2_g+XQePyCfe z%qhK1jHIQR^~UvqK8OR7?ODjbZ3P$$Y|(J8`g2-aJ~Yq@`UstshU)_{^N=K~w%FQ} zI?kKTZME2aWDSHiGQvfOwE@=$8lZzqW?Bx0(!L}V?i~4)_PhfepB;V~Ep1m|lnad* zPH(a6Vbs*3eT@mrCA-%sO!@g*P5oNvI{Cx4z_Z~u%*4on_XpKKa&|K=)O-OmTqM#> z$8bG>L!4~GauI4*oO8t9M64eZZh02DH$JF6%Sao6yK)x=)vs+li38uh1(P^VS_uc} zW?Hx!5j9C1!5FWiRY2@xLUL*FoQJFK5C&x2;eP{n<}9N1qz{Jmp9Wd#IHY@(7E;YG zk!rpQlc;hw zlp@ts(!C2k3s*9`RQ`RER4L9X;VOwmREz{6q;UBD@@^bE|1X#acb!dQo*8)B{?b=v7@a#yiyaAu*iM&-MfgDi?3e|KY1^~ zsG*PGjB6LE^K*!WOII&JIKR@r>DG?Kp@p^yvvm5E63&ID(5$Y0C8=vIL6$s))6wpw zO9X@`a(XnO2>8e*l#6J;t55`_P_>2oRAK5}bo)QV7geHNz3y27;XY+tzKiqta}n)^ za?c7#;oeHCs5$0zrjMhg`US+U%9}+y)ZTc}E)3$aX%)wsl$3FFWQYqF(T>}jGG4SB zu97Z`neaOa7YAopKv^S)r%Q}sgDSIiomFxy5Pm1&;^2%K=EA`?sFHP^UnNI^AycA= zsA{Ut&S$Dxh>nOVVR;j#0=aQI#3h!9DhmvtXl@DI$1}J@ zLr2)dd{XtB#<>5FD5tG89J$rN<{~5lz8|^McY&86sUg$$cLw$V0%RUm*Nb{Eh@b|=Fei;8JX47d32}&iVx3kEWsZ52+#RLboekyo zhhY!_NzPcm%_h~`_tIKmDw1j5y+bhjjsZ|fO~1MAIQAZ|*7I7G+N)*!_9tiRawvDk zg^%D&OR*oN?liAGv!uf|{8h-QW1uu1KqB6~NcE1z zW`%N3ZeKi-KNP)^lh7w63BQ{*T<@!Stj@LsCO|@2>=%lFJ?Cv$`#l0FIaf>Vx$gw( z($~K+CE30d2A~P%{?(<~G+~#+B!=G*>?3p7^zR!<>n+#%Hvmt$V<08Z2HKFFuw>2- zs$E(NNqXYRVdKjWBheJ>f1tU z(^ROLSZIH9-!SqaXHg^V{nRzJVc{G5$iEZy!*>UhrqJI{BUK@_`zz{cT&QPC!xxa8 z9ok>1|2$kXV;d{%kCH`mBO*Xd%rP*CoBE~TmB(&JW|}P^6agWu8#B!c0AU_mJL5uzM8UKZ^k0)$|4U;u;qCS&|HuT?UL_;8|>V^EK&s_7(=0E&peQeH@2OiMYbOIjqV@x?Asq3am8)= z@EkVOOsH8JEfM!Ss)sxu+&6_ORhqs*6#TJnmwjlshe9xhf`(RaK8&wV)xwb^g6E2Eg(+~gv~$+#(A24+ z9l7eRg7?ygT51s4R=e%F&IMAlA{h!b%c1j7y3-m|w)^O145O*_%!4=MAG^-L1Y902 zm-{nypW1Gsueb;Xq15j~^O0Xtx);X5o~$po4fE$Dad4w~raRPZ0!apCNxChedocE4}ZF8B{`@5iZ&ZkU1SSM;ylmq6wcTL%-cWK2as ztCKB8?lT=`K!*C)1dqVy=e=5AVRd$~k&1YjJ74X=@82>Nh8_x4qF;ZeG1K-qG0B4o zc&}6h=(2jxmBOyX8|hHYWc#z|Q1WsYkXYQ`}BKhGBi_AlgSJwwT0n1rS812l#1 zgSTb}ywzI~1I~8aQ3`(#*=Q0UYR34i?axmRiew_eh@Dwq^gL?1ZG{C{DZ$}gqW!Ky z5g_gKMEifk^e8S9kA-2+AhV0hb5xmcVjQCoKU6W5&HK2x;QIKFmk0>!)EDG=ddoQa zjPVIIqjrRI?WZ6V0bQq7;rD5GaqtD)KzJ7u;a!|>kS%aFKAM@& z845{2V_AssE-F7kmS8OgSN=T?#qVa!Yyfs7P<|RS^0000d$xcHQN+8}uRmrP(iS1!@MhS=bF>zVbVp5yf- z@Qk>ko4wm>>}CSOAx#zNkB?s11rhN3y=~nbfpFsm=-=|l=q|TUa3wHH1&Ib)H^5$8 zglHI_BUgJ^>PSNf3=E42%F6=~QM~LEIG&Z~dVbnDR4E#)$k&6HO1Ai6WJs%=3Gi( zJJbL~;d&R1o+}%Rnsb5HM7+!q^={cPYKX-kFuDbt(ENDYh{!N^(Q4-|RJVW=nh$Rq z5t&)}YOCH|7+eIK$p>plTtq;7X!juHmBC7h8*f?(Ywmo`=`?}43q!m`fv3gmHnYE4 zpvFLZcnKFcCG6POwwXOzk$6$uuJ61Kcdz;pwB7T()9E5EaI`x`f!W%-4{8)Xzj`#l za$CjXUGwedRFRR}Z|rguxv+Z7-^M>KwOxyfC!lsoOo_`y?M`8YB%lJc-j;+_E7}al z;!QU=JuQLt54@oY%yZ-^sBw5oiX)ciXhq^hVOwrZ8jek8&%)^OUpqcmEiN$#mK@pS zHVL&4I*R6@K2{LBDn}l#mUp$(pn>9k_P;%DULr$g_~sZd^P+P_q9zb{s2Alq8FO5u z)Yru=#XWxJ9k=2lYVA43iq0Y|5IBX39Gi`Oma$#a%F;rqxR@HoPYr+PZF^P<6E~WbCZ>eW)n<2ac5>WvYS1CXpthFAPDBxGI;>eUd5sxaJPFv@IQ(dhTHpnpNKQXvyrz zFoDTJ5;)&u;Sv;gEvp-Bx__tT2u0yrZZnJP$C6orJs~)P$6DAQp3ke@n^}*P*5^4h0@a;aW?L5d}`DvlpLkh-MM$K`l0Dq+daR8C9F_` zwo6|j)8pHcS)ssDw%7m(76=MQBqp-t=G+5EUx2xsc@$#4?fUNPrV1Gn(2|)@2$49M zm!*X=(aA6;@%6j}F7hyr!qJbdE!N6q<~n@{mdph9wQ<;pM}gFS9;ReB#+vL<8}VGl zd*;GnIDYyaH>ZYT$qXp48=D4IA501L)#y=4WDa%}Z_DoE{l}-jgD(G_;x!1| zB%MuDi;rWqz*sOQyT_AVQkp7?r+CpHe>wG8=#~t@SW0__EthcY5_yW#UB#^m%-JlK zE~ea^x?}I!6d~1(mr~llW&Pn)>2cdNa#cn4Ag)F=MYaxO6d4E9#Ct-`hqw4n>aoN=*iH?v@RIEgP?^>)%(zl?jFB z2HEM6G}}?25>H~uaub>t@|$3yi+>y5BG7tApc`cx^XNv7e1}dw(`d1#Izv>0pU;QGyD9 z&4PrZPZ8=TUi8^?T$Z8#*{;J9cqCAZ3>5`o3V4xII5FR|07AYEK+D&-Xd!BVl#PGJ*aEi)szE`hp~8>KHs?1vnSP+ zh6<5S4KMx49hA%$r#|>qN2C?K!swl_KZA|pS<PHR z;(J4c@bykRl!(B70ihI&Ek|&*#MKkkNS^wzQKY<@dmUkmi;iUvXC(-LX#``=t+u!b z#t=nLX5zXYnLHnSFP>opt8M`&w2&%ME3RpT-c5JGy|)N(K9hwv_MLt3i^`J^f|{^0G#yWTK9k~BRS$~$(0wbx69hzD;6OlPLUt?YY#A@K0~f!~bRHh( z1%2OIFxxi2SD6dybJ=n**;DR*$|xTSh6Q46oU^%JzI5&4&AgZpGICAE*Lv ze0hK9dw-97dJ$$y#Kij_pZ2vtN^E5H5AcbVEt98@*`7~xr7<$wR!@EXk_#g^{JqLE z*&MvN_avPEDx1I0#C_$@$KYHh3x1%4_w@;z-dBg;?zh?WdS%uSa%R+gkdW?4X7Ruy zq&qbtT;*t_dw;KIx!A9;Ix;f~X_itQo<0I4)iML|2R;GPc#GkfGJOA*4$j2%+9e9ynXix2mzr9Sgg8Qt`n*)E0g+ilZT-0h9?cjlq+YT z3?ja!7u&`u3K1bBHm$h{c0Tt2Jl>vA9R&WMP20x2a2T*l@}k>wt!!B-^7Ow=$8woN zP(BE6wvA)%!PQ=6Cs5SK*EPebbLLJ(TyTT~Nw__;)RtMHSO|^}(|5ZmWf)iTl@)+@0;0c5h;|D#Re`S6I%Z~Zi zh?{B~3LM(-!bz@_{YSqj{sKavY^+YU%nE%T)~5@Xh=upGg`*(}jH6epoas4mG{hEt z3TeBC+}JWJlv{_)@hgb7usWs-Dj%dF6kT3;g=%G)+p38WGP#47h9`pTKd zLc1lDTF2_vmf5~86BaF-f6%sB$H2v8cYA-!ai2x*#mP-8@N}}#jmzkuTmdy!1M0}} zV9P9D_ry=&^4KE~2o{5tZR3WpIz_>E9(J;3DDD$%g#YPa8iK%5z;3HbTA@295HhPj zSS_2qVrAP@A55t1`|>!h;;e|Xl<@5OJ5+I>|HBvrg;Hf#=`laHtd#njeh%@rFVvrg z<`*C!CfioLs{GhXAKBJT%b^u{tUwom;)YNQPQU-+gQhnrSL<~HUQKSg_ie*5Ocj;| zclV@a(%7o?w#{FYQ~d2!wkzbIJqt-(+{0n|giVb!;>R%o0kFI18IXkDwiN|_4|{ce zeEZ3Mwvf;+3n3^tUMdPpT=p3oFKurPV$1Ycjnpu5vEH^Bypv2xk|)$t;|VTeBhH5;bz$`QgCLkQr3R~dR!hX4^@FcLtMrN2bZe?^J zG%heMF*(%MvSa`N3@b@QK~#8N?VK@e9LE)g*(9Vp0^&I?)umPEKqimZD3C-4aO1R+ zjI>6sNRgyEiB6Luq~#(A4e^w~F5*UtfrR2wcN;T+BdgFcf@2s;tdk?ef)XTa@{Xh= zIy%okH%rd#zS*7Ko!Q-s_yZrJkhA8zdG}`iot?cgljo|OKUGx>y4TEa--Z{Zp?HTeINLlQ(v7~KwDfR zE-!|<(^C~b*t1h^Fd5n)k@X@Z>+O~43I=<5ZN~K_A`TrSHP>YE#IQ>64YUc`y_wQk z@n54Dw=#KD{8?+VmzV&ZU#@(|UOa5DCNY%}18Eif zP5f=q4P&ZbsZ7?_$_vCmS_OX-e_M3JjPOZjgGDU(nPIe=>MNC_Y_O;WKP${tlUrfV zES&)`h1+9&5#36xrN;4NDGh)r+|(vww_G|y3{^~$PyVB_pBW#0dQqh2K)OjHtBAR_HWmCRKvmIlV;YYK$N{holJI!1E7CHoL{-$QOcwT@ zM;Ez@a9=?Loe4+)DuvPwR#ntB6hl?S0>lG0GVoEMS1v7zaK;7?*yzA*^ZCPdk&a>A z`R5AX_EMD!)+S-=&aJ;Mlh^2gSjM{LBa2k96nTm2ivqUxOfOQw z+TtDOlrlM(+Nf)E!CK1fwf^JlyhQay0jzZvkFWRn>*w!@UIvw5-5H|ZD7Rx7guF!c zMFCFJWM&XlrT~g#sYB=>K~$h5d5P+a3L;1=T>bMo(Yv5xTj~%F6O@23Q;^V7D>+P1 z0&?GRtDGP)piQ1v|l-5!!=)~H^&P!BZD0XJ2 zn8l8_i|r-H6Lz6t0H}7V9coCY`ryDoE&dghX-n;g zZsKuS||&70KqnFBWXkw72&I{G!U|*>L%9CE@NaAnpfPJL~C{L7@T33Tg zD#CO(W$rcn1k;@b+{BgR7v}psjRXF6oHZv(d`(Jd9E`yJw(+lpfxFAYg0rew)NyNZ z#ob-Tr%*Y}N*n(w7+G0WQ*U<4q28P`t?a64+9BVZvn3b^8*k-hl^DMU2ExW$c^N0h zFD%?R*O0ENm;or47V}7qU))6CTtm95axsb$K1 zXJ$)C7C+;_1{;;Y2A)b9``L6G57^Mwm@~7X6Sc;%xeLuIqdqs^YM;K)>dake^=0_a z=35SHvw*g^MqEA;>NyiUa@fkx~&58O!at3spm z&yZZJiA`;1iKGnSu1(})sZVofmdXH_!bM+1w=xw=fMg7msLvAE(%c))8DgOFh4o2v zFBA2g@gEY&AlYnA)Wl`>B`Sv=q@2mBl7hB6ii~WxSaXUnt*LOcSd%DQ9fftq^q=mz{It*Bzu)IS^S5KzvE5>7BL>0@x9<%Cll9Qu<%y%(>+mwWaTeV-CdyVL z5nf_sJ>C0~Op+Db%>uSIwf*?lw?s%mE&T2i@)|A9w~T*U*#HNO0jfnMRF%Iy!>sK- zU2C2t2fz^T{_(B|Cn)@mx<(h1RiwHp4HK$}x@NOEUKRh@^ui`36}%~yR_};#g8D_8 z3Ic|zD9lz<)0-z%f{fYjEbe)*&QN;zM5iG1x6oDb>A?66fI6bxrA1kH^#9d!qLT`d@d0Y)g^IcH4M-ef6XJyz{6Y zxHL*>?|n$lw}Nj+hbYWeQ&2`>?_ckeZD|tNZt7@M8nC}6TW8e`s+|gI#hON z2PT0M)+YH{lZdb)6}Nf-WfZ#WFOY2`(6`-GkV(Nkj{N^I-BDWG_+qG?Nkmwo+PePD zSBOE=Lf-OGZ}CKq5zk{6Iv~@9*4xm24A-$fH`Ow|cOJgRLA& zu-w!&rU={WNn)!hWUHOTVpD|LZqu8kc=)DL>IZWXgl(24vDFkff8a@RU?d6QwwncK z>E2l2F@?gBMibaZv5M zLHNB_IahDo4_uoH#V)o9TkYp@XP)mSfG77al5LU`V!KULk;=V6-r58UPFqOb%(Hj=|2&4DRfEu%VFO0`Xc(srkDnFg znzWp(Ib<-VY_&{Q31X;i_sc099d@%}r)42&rjAzmQSBUbnPnw{PR*mcZ-}T4^q5V1 zRNJ&DZTBlRC-v(maBLQiRryiAe!>E@W~(3n<1JoE012bo7(!h|m^Rn|6#NA)<!2_avJ$tn+T^|7|> g8gcod0va3p8ZRPBk-pD~egFUf07*qoM6N<$g3zBRKL7v# diff --git a/win-linux/res/icons/message_icons@1.75x.png b/win-linux/res/icons/message_icons@1.75x.png deleted file mode 100644 index 1e60c5f8f395e44bb6eb153c12ec455f5d1a4282..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4962 zcmV-o6P@gdP)00009a7bBm000XU z000XU0RWnu7ytkO0drDELIAGL9O(c600d`2O+f$vv5yPM|+pu z)%}0ZxqDaQGb7l&yV|`!eedsge!uhY5>Uw0gX`KsV_8bboj^#20kktP(*#J`dJh9u z*QJIh#)FCB2<$ovY zYS+ zsDg(UdZugrA%!07MUgTxvf|XmA&8M9Z*(0}=)qnT2_YkWUp^Je=Dkceq`WZ-u$Ov9^XRdYLF#w7< z{Cd{`rW-cFkRf)n zh-~3UY}e3@;kubbM(}*2gmIBsH<8E)p08IJcl2oP$^HC~HUdowWzf6g)TNh#{LYaR zUDyHAv^Mjry!YU)Q?@qS3XLTcX4eT!yn;~VrB{dF(o2+3m|Z6?@d`qbmtGxqrI&5! z<|WHSlZ%X`%k{o5m}X2QQRI%#^uh0~`mEo#r2m?ZX6-M&{!p&|Xiex|Bq6&V4B?x32rt^bnADJs!tVRx;mY&5 z(i9y3!PnupSAXW`*NbFY+uXN5U$MEyqj{)1w8%t8tbrGMG~-axL~dKL0k&`b$C_g; zdRq|B76UKU2P#6NH$%LmP;t_WBW?8ug*PYAW)vC4t_Q{5w64?7M*!L-M%v0$ghp?M zMNEsSFRYExn-hjx@-;Pk0VY2@0)8=9mMS(^hwdyaW(eu8_iC0fn?JwlFGccYht)<0 zf%lm8TV5@MzS4Pn4=kQc+ljOedSwLaUtaG_l+75b+dtFi`1+ZjAAzZv3lI=7%?Td} zp*2eP!4iNna=?155lD>9DDs{^c}}#!c6{)ww;PJxh*UkNfAoypkX^+sp+kZRm0LSokJE^hg{)G_2~5U{u(T+a ze?ntr&2E`1k6_?#$0Wg6ftd`#bc25It5@Ov&pC(L&d+}nR;}15ywq(( z3W=dzuE2m5bkIt9V9Q|1ppm>`FwjHP8$UV!pRjRFhZu}-0^8#a{5>1iw7Y(m%2KKx zYOuVxtf#lFy}U#^PKvE>U0Q<=4xi}cHV5xK5n=j)!_b!UUs~0J9v_!CbBYIdo?aua zYsSbiSQ?B~9x(`IGiJ%-li!4}#2K;?Qnq*O2-l_w9VLFpTBrI(C@@iO4Y!iVC`2XgvRA6 zJP~~s7BLJUU;VtVJ6~jsMY8$ykDn2t*blLlQdJOg)8I7budQZ9J8!liEgCLciDa`|d#!p@%7J3FHzPGdFUq!>z_WJVY$2nqM(o<_Mulv& zr+(K1+kU|5ZR?V>Xv{=;_~VWw7-55L z`A-66)h{0J>?K-sn>Ve0h_~5qL)5|JvH@I)rmIyEaD|X})#SgblUkKgmG| zaQ_cNn$Kq5E)PAr>+PJ=>z-qESG#T>p@jBBlfZcL)t0|B01-HR;vw!8q-kvCgY3^9 z-2Jwz&AtX@n?-CHB3m?#*gix?e2vPkI`x|YlZQh{GW`5xiHscF`St*YLr5@qettwo z0!_1+%B~&Y3EH7#ja{?ieB$++QBc5(ul@M|p%mNfB#qY>nE`{3?m0c`_ZI@sr8L3iK}y?%5)BZvORcsDDW zyggnOGP4d#IU~n*yCL_~z#cER%-W4e3x(0U4b$Mp!vTno(Us)JAaU3UP&H-m&OwYe z;{XLrYlGE00fzXD=vabN0^8Jt^mz|%gVIQ&1g@tdIKVbVAzgSdy{3;u5!gcd(*G;j z+k2=6~c*W|_T86mwIU490?9}$3L_-<>OXWRVpy^4%^&%FKQFg7t1h>E zdGy{VCx(+OGJ@x~_sQ{LNC0JT_W%Cn>gVQp3XLKIG|Rmj$v~sUE|*ii5RB~QH&R(p zh^x@^nQe33kQ2pjXhu#T)OTx|TCa8#`jMw5`jZ~6oe*K1Cyo#^9_5r5O3N+VWK5J$ zm|e#-!2Z>3n_G2{EK^q_z_8qdOs$d$|)2#b?@`g*7<8_ec-3C zs(VH}$KwkjX==_Y@#+Oam)o}t#K88g8(`m`{ekUkD1K`y;@}#u_a7b_&w*mlo9z-X z6mw#%IY*MR6Z{RW?};K%L6CcKRopC_3bp)q8W81IJuz~|O^yuKEqf^)pGxe2Aw z$*G)b+59aaww`;_(``RbLAg~Uv_@NEo!08*v8~Ic443nP7gJfub>(DBkDWIYeYNmh zH?(wDji*;3z1*q@jouvh0L90}8Q0f8{CEoFKzfyVHKn!}5%C#)X=;=Gag9j5I4eSz zy*XCgGV6<<&cb`=Hv9~M_5kYU}j^PqFio`MjhQMr?p}tUo4=w`|kfk z_`;oO@q5IHB#$GR{vI@Q0uFaOooJl&~$aROFKP}2BN`3XXVXch4VNP88{{6nZ8i_iYkP@n8 zAqKFk^V?tff@|%(eM|VQk^Q1mGYe60D5vajOUN)0^DDCW+KA;ARh@*Pu+KeqpXlnu zB79tx61Cjo9!-?pgcL=7=4&0$wnB%mzwmu{`rqG!;s0_D zWms0Jhh!iGUgeY%n2^~X58%xfQOYf>qm}d+Rf~)@F%CZ>Rsv>+S5KJ?_#Z3Og^lGD zgc$5`@?7(3aG|4&Zc$Jax^bA%5*f=Uiyd1xI{uE#o-h{zU)b~I6bbbQHm2UQJsvc4 zTZA3mQs&VYxp!iyt`>Ry>XgX5o%m5gg$_E|uNvl1{)P$N7GXxWl--;1*t@^1glh}8 z$pq-l)fYulxQe4l!6*Aw5Z#=0vr58xa}|L{w_>{qDSGpct}~GqoOVME7VU8>HN#EC!+dcynxFo8b~% zZ^D*ScGQPz<~l*pKS9bZN{RZLkh+PCNSN{IAL{SI)>C5Fp$tf%e$3gFBy^B+i<&0L z`c_BWN-EhC47^|_^NgG2(Wx9rqTYkqZ1gtTf)Lj4r`)34{R^NFoat#z<+bCxiU%?3 zVLt4QQcl@X@4@ms8X;*voKj?( zhT{b-vz)SH_NR}-)c@TBGw*!`RN+=`388h+rH5~-b3+&|JRBl!Jx?30>0g0eTyMdmJ-J-2^xl+HL%6 zF(VY0>8!l(U2$9u_T^SZX!L53coWj;>m|?kSQGVCi_DE5eJ$5ruzN*SIc1T$_k{)P zt8iUb>h6C6g)AtyYDTY?%@3|iX{#~OauXY0k4I!&5bx~GO!1ZynuF)M&G(k_y>;bQ zjnFdNYMiT$Le|d%vjkS0cvT?W9w%>BSx#BF%>q?Swrrokc592hLvKpmG!8pXuucBx zCj!wZ~!+8M#?*Iqn?zaBjSpP@;UJ zGj*`RSDx5zTS)}n*-r*oQsM3gIM17vq;^?&z`go9>2Td5@{ytO9BaZGa`JY0=zk7v z&pEwrvr+ouhOsfvy+FCxBaAf94LLEHeD%AV5DOk~Sav=AN0V28AOcj1a z7ViV~vuctA1L7?-QWiTAJLfuq=jTUc#4MS84Af4zND64DNsRr0HfG-|_QfW#?p)*p zezmf}|9)coDBQx4KtdzCa}ybjGTd1(1C55kB$k3s9U`~5NnoKZ${BgXZpevwgIi{O zi&{bpjR@~1EC;dPgp`aL;<6xIF@lQ;aGp6% gK`zfuy@e!x2WEp~y0w>Q`2YX_07*qoM6N<$f-F0(=l}o! diff --git a/win-linux/res/icons/message_icons@2x.png b/win-linux/res/icons/message_icons@2x.png deleted file mode 100644 index a61e0be4fca1b5742915b4cf719dfe5bb4eab5c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6233 zcmYkAXEYp6*!I=cN%RsV2th1jMHj1!8ogWHD$#pgU9=>67iEdIqIXvBA$keBM2!}r zM1A3e87+jw}J zyIEssm_y%t0M+EQpLz)Z1%dqh3MbM+7#K8zO0r;WAJhFDB9A9Cz5}?P6;uQ;3xXGs z4LeZvskPKIkZKl%k|`E}KDEZ0C_g5}k}x#0PQ*zBx(!uiV<1+2!US+bL6n;`s;voP zFEIV~5}q5?I697`UMHK;8r5t>)j2D1L!CRF&yt>x1=WhRiV29dF5ZcBva*f^-gJ%} zvok6H zmaWVg&ocvu-B@a!X`0H?Qr-$!9;1}EoXjV@Ai|8J&eopbB!mGB%Ez+_UMOx9KOfCT zH*WDpgdoDY&avD|6hlo{_d-w8IW|@MigIROuLxjcbx?{TMK2bJ!o}p)q?jUpqqj6i zvpy)1AxpaIZ`VS}gI$AoaD+?on{shBUgf`hne?HtVtClCs1j=d=|)Y@V}AFnLITAO{LLZ->89!gZIkuqo7b+uYvyZ0il+`(o_(TPrzBHlmF{lOXb~?$Ev-$F_e%VyfgmGE z90(o*t;1BPXNk>rl@Oc%ZRTYGql!j_8qsV{<`)FkS=M{?K4L}Q>VtWJeZqS`_wt*w zM`J3CUAbOQI#l+I|Zg0PD&f6c`afTKwYp-|!$C zAX%lp1mzYE?=S;M7}v2rCJZ{kUcWmbPihjdZRr&5j2DosguOOjD$Q^$FWVj8fw*P; z_)DBmvLrtiX9g8y_(0>2ET0~2!tIAoIlcfwhI7(+VXe-&1N1py2*cOr%zF42J0@EX zc9>Jqro9%*LBJ;T3$PeT7tNh3*6qM(mO&8Nk_<4S`dX;cwp#P?#)#P1_2**%Yo&MV zs&IowttDYx-SU2rpyYhBEO8=nG%R2FR>)hGxb9yl89AMnKvt`>Z*(St%kSeLorB1& zdM39xjENuq#T+qT_Zx4o{vGtihXbN2Zl$d(_n1&8>J#^%D97kW_d;5hdkRTyU-O95 zv`#eH(rte-5D2aH^cLEFBs zohU`;1$!X#PajvHpAQLrH84F7Ij=?wPxy{UYB8mU{)^nR3t@~iwG~=T8NTS1b$N5{Q*MV3~zx-cy zv^sah@;ki^%dPlVdIanTDTfGcji1+RHEQT-Z3#GD%7WEhu8(nS7n1?v23mU8IJTKo z!WToLyX3o~z8x^tEaGhfwGuN6)v1t~z8M3ej4OSe26Hjk3atqUzu1NthHX*kBBjy1KY>6EZ@5GJ?%&wlkwi> z<`mnGmu&%qlrt=vO>AJ%qmyWl zCYEuEZFu>#AgxDFh>xkPUm=}8=wskTDcev~;+1+;@kAL>$?#atcT?4{JZf9s{i06! zH21sj>?yX?=%~bn4U)%ft!?H!qb|S!eM<&i#X2Ta&Jv{2rJ={(GCcZtRN8b!il`Lc z?LTdp(GqPJz#xFKwM>rzYF^Jab8Om~(oF zXh4FwP6C-~3D8TkD?o{fwc-a5=g`2IC9W_d#6{32Y{1~!^g4X;tIQ!CkKi$!!{akw zb&Yunt@D(`XNa}vHdU)*2lmpvSjYbMLEWk2Qn){Nwo7Y*r|MnTrUU&j&4LC*|4hdK z+bpFIci|5=8~swA#fbpLna;xA$VGo=-0DnwglOpNhn<*{&}RJ#=v11xPg4t)_dGGMITa3y6eM7dVH6)An#D9Pk5E`X)A9bXwc{})c~AoGlp z`1)W=Wy}ubXb`zY@(s?8aWF})>ZD+1GnJuM!86j2!)_xaXNAMQ+rYUNlPkK*loatj zNmD$6Nv4+9(w3-+s^5m?z^B0^g{+{I*Nr<)72jCDIKYXGZ<=Fe>FlY0`%u%mWb}y8 z)n-H-k}l$V(23==@!0)SXgo-p{it4yrpL$nV~eulid$SO5Vvb~7 zrk`gUR8E&fQLu4@_;uj6JqkEGv?l`nCs(m}`wf9xRITuQT zDqkkQ7QJQP;OO7QZIDB(J9k02vuVp|Oq7^|1>k#_Mr}2Cj&hI3*?;_lGtK^tE{xe= zjheDbbD^$ieWyS%5*0oUw0j3&C9xB{{HVd#`J9DTx1_3crdmdNAXy?ZUGI!`jW#s# zVh_9(cl5{=U;ZrLT}_xhq)Y#hU)mL1|9G9M^7DWowYbsOnyS*p>OXJAy9H7!_)hyp zQ9W8^y2H5GZ^bQ#2(=D@0X}bMY9hlWZ0T_vUAb&D-7@-cm8m-h z49et~*v1Dw`Asl4eX;+q_;&5u5Z^|F&X|#4*jma!pPkCtV93FKmr&Wxyn_f^FCHh*dXsawjoz^7;o>nWPDKKc#&(-j~ z3jPmtIivjy9%yjFmm2p2QEnJ&4kJg3424%MgW}L+4)IQLW%x|rMm+^Fd_U&YLNqs0 zRaN`lP|K_ize6%Ntm}St6Ah6E#v4!kYuVi%u^P0KBB8^Pp-LE3XKoo@AKqm1J_A&4 zl~Gq(wA^fQ@XB^<**byrVu8d51B~iKdmpdb|F@c-Y?x<#!@edExnEa#B79=ZR5G^y z={P91v+#{AoXK=j7(2AR&Z^nnWapLbVYu3-N67>EqJBbf>I$c>FU!m37PC zXeDtIxUd|A_1RP7J@a>qD#ha)SUL*h)>9n4TEry;8<%~V<3t{KF}ASWs@bZNLEBZa z3pBq!_;bMXb4*iC^M1kGn|j)j-7mJ82ls@C3QH43QIydCmY-2!K>orGVhylNOHSWxUuM1>FspBUa=d4_eArG&GFVYY&7g9s=}Ge{N-WeX z;PbxeFz__9wxAg!P7=;1nIjVERIpjBEj^q8z&zCU3c=a#ZF{ja4Gl7w@!)GxHTPkk zh`i5IxXOElgHArAIzB?+JSy2~H`%oI%f$;G?~b=)Dly{mbKgUx%ya>g1i*7;p%ul2 zEW~HGE%EVf6|5!2F+mek+Z8VMZM{DS7ufthWyZv2i);cu$23RxuN{K1=l7t0OpTCU z@ps|>hmbZkM-hx`V=e0zBf0JcEgNwcJBxvPo=R(P`xwm;?w2`_Q0CTM14oUk9MVY1 zf6s4X2uaRkyKeCoK(Z68s&_0@mbsdNt-&*!g%)N$ya!<7LS_CFc~ z(@5`6h#7*dio@Hc%%h`s)GhjYpO!B@SEi4S+m}a~(0LqPG7xdQ%>ZB${y6|w1vs8u zmvQyv-F_&`-eHQWj3ufWZD5F?CDBkWwDZvL$$Gzbg6}T7H}sE~${`z~TNffQ{j%fE zkU^xNsy6M$anXvC)4SA}w=79qb0tZ|1+lhzqGNCE`0spiLA>8Z%sp78kDkrgoxxOL zgx(%-*WgFC@CC>!Y2Ga?8fPr9=X7g~iSwh9cuy7!j|r~ZubXcvnKdBXd?V~xvUWO` z?KbdaMe*cf_6`*LY0{3B*0P_^@_|ofyzg&wRsdw+PviG5_hFDb5`jD zzzs51GPl;f0fYTbsghL z%SEXOWZvo5DtMgw3}Shb5XVP5-_&G`_3(93)Nq)CLuR?K;29GWxb}fX(nw`TdeyG! z+_JQ$x5JFQ-{5qE49uP}lLWQ-`dq<>7+Hy~ioBmC2!{3tuU_H2pnS|1Pi$6EoT^}d z@xyrmL{Eq0l++R6hk>(LNdy3GQOD?&_s!@Pn7QvlH@X)1ud@)^7peC84fcY{SufAB zUk~eoVFmIJWQRO{WgXS$#qx=F;IOIWEJ?=B>}=gdLHdT=?J+Qu5YAkW<-9$k~) zdU0p5tEr)r^U4_Wy0T-k{?THMhijxQhb6&>6DyX1kqW|={q^O)kBiz=x@FFKpKrf> zV;h?Es1TO)tE)*KPtqKrim$MurM-XAn_kRKCc!$iPPK}vzL@;o%6{YIdE;6mZNe>- z`KD5SkZFui(YH}1>Q60FDFm&YH3V}dFE|Zr&+Q{$!$jc3ekqDMyFw-X zf0Oy03GKiq`FgqXVoqXIFh%+RcPUO|-X4=Iwx#vOh^Y$bsVw!iz1Wp*mn?eG^m=ja z2ZO5klzpR>e;k4IkBi0I&}`Z?#6ItWLsB3222cKGFEy>zVtgzAQDC9IAL1VJ4rj#e~S}!J0{)hvssm!nj1?=}F zmDxlgrs4AadG!(U0egaem^qtJdtHx=o1;G*DgHxPp6GQfU?tSf=VE^D*E)jK00A0Y%|upW8BOx)L(NYq>Ksrm#?F^Tpa1oAw%L+m;(gn$4~dPJ7B| zg_xwUn-ZHA_ngGy(po8;eKp_L8N9T&L7WuR95OtWeon=wKL-U3lp>Ohk)%^YriB8} z+T^6hw9^cfLBX}Bw1Q?PV^MyrKhT$^wX?mwh6PIMh28=-zsIA?Q;Z)UcQ!i^=ksiW z7~)=8KfZWOqD(hT>0lOgaS5C}WFW71%2T^+hsm1YkmhW(#tlWHmj2mxubQ%~FNwsq z_v0^b`Py*|RjOehp0g#x>zE=3lf)AIOLvoy3?vT=F zQ+Bbgq)TtdHY0dl`2o9ts+!p1-B|%W#NGJt{+b6u{Z?XyDmOjtT|S-_9(TGtujS~N zVs+)Tqp5r+SL_I-1$6H>{@h4*{%ME8_hwap47zs~N(k<@jRDtfP?JsMh2pY z8nV)NtIteym-?{ld?f_)Xx{rGvofAs#5_hUs-MOLgZ{)1+#4L9qBd#1i6iJ=+S_(- z88SK+4)zz6pk2%&`e)(^_kTFa?-&SgP(t6%1L-J8<6K3ydXb1pNY>0jJL(e%vOGY@ zN@CsHF6Ibe6?l(Q?fqT14<;K-P(=I6WPcqBS@N;-tt`5FD;1QNIntw8;A8-p+Lp`y zBoA9p(LZhofT=n>om>?Xve4>HJp1ar?%F5Dwo>s1$mBQsw{InS7ak3YKX{jJ`(lOB z`y==6as4f4)~wXHf`on4IJL{YEh4=Bfc)w?z;Sc$053vZPX@MnYdjf`Tg-s*1Wkob zt%ULt<$U9mE+OUY#!tqJ`JW7(Jz3}`0>Fsq!UTwS`0d|^9}SxE4gZCL$hXt+Ov0`R z$zr;Y3JV~1zHR%uo5u@14hL>q_AA@O7>n{_RuM!+bW`_v*yugMLXJOynnF?WjVF>4jG?-Gvx>!3#S$zS;Px|1_24Z9n0?g^DOt z9{D2#QJZGuEqQ@i!_fj?!!&9VdSW@B%wBbK?DE>YS5>06t7X9bQAF#XmQLIxa*-&0 zR^;<+;Ff2w%$Z$MfTCSLAStTh*fv*-Zb9LX=wTeZnn|0!|ajs|9 zKfqgj4r2wMioz|iSeaPah~o6h*69!~{Z{BnIrM)H%F6?N@1Rm`Tpu*mvsX| - - - - diff --git a/win-linux/res/icons/minimize-close.png b/win-linux/res/icons/minimize-close.png deleted file mode 100644 index 1cbd0c1da007b619304aa85cd146b23a52b008fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 210 zcmV;@04@KCP)kdg0001)Nkl_g%X>{Ia(f!A zct5?M=PimCbljrQC2vvalD8;y{vxdN7XfOiqr#>FOC1&V|DX60zP7N6_tGiB?*IS* M07*qoM6N<$g2=j8ZvX%Q diff --git a/win-linux/res/icons/minimize-close@1.25x.png b/win-linux/res/icons/minimize-close@1.25x.png deleted file mode 100644 index 36151eb5214a87c294e6f739c0d3e11691ca6797..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 455 zcmV;&0XY7NP);qXRU``O1+2kxLrg~72CR1JQWD!C= zDEt*&&z3G5KoA5$5CnlhnK$aX9>Ia8X%zMRx5pC%K@k2raU6%-+$2eMww!Ssx4;B* zBlDhT77WAiJaCZR26i1s)F87t)3EJpZ61=bWM_5?~a@ zc%>w#oVQ8R4khU#$B}fFqa@eJQIZ@vWs~%M|1b>0H4dWmx#xNNwrxLQ1(V1F#+|;z zc*M9-N`1i^!KI`=KS%BdNoA8e)&vK-u5;Ra5@@**7!yPa&aTg7`GVroECIa&Rh_j7DUOJ3xd;v*mCDcQmfTjlG93DBsr~wEvbK7+&(u;mSwpk x3U9ehcp({)iBv%o>OZ_F903!TjfL=U_y+xF4LI^eEk6JN002ovPDHLkV1g%ev)TXv diff --git a/win-linux/res/icons/minimize-close@1.5x.png b/win-linux/res/icons/minimize-close@1.5x.png deleted file mode 100644 index 8d96f486843de480824fc298024bbc3161638ae1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 480 zcmV<60U!Q}P)zx^UMEO^GD1g zB+If_RaFH8QkJDi)AZSOombc{I&#N7IydE$|cDfJxp{!aio1_FN6 ztL*Cz4fWMx^1ZAw<+t8n8>oapkjT;CdC$$gJf@{uZ)W@YFLRdMmmOhFU+!pcZhOD~ zN_n9~+vBv&KPPxd?R;DId)~5_6Aj-kIo|DZ>BP%^^WAK+ySdf-mdp;G_SDaCIsi6 z>|V92Y>T>BRQ`kwhdFEn;cZmYOn unl7#Qy(e?Km%t-7>*opA85kN)e_{^)-#DRYa(y@`@H}1pT-G@yGywoSe9{5{ diff --git a/win-linux/res/icons/minimize-close@2x.png b/win-linux/res/icons/minimize-close@2x.png deleted file mode 100644 index 0f8dc49b27c20bcbfab2534b79f29e66f1015f40..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 324 zcmV-K0lWT*P)`V48^>MHn5LeA)8A}NDElkcmbvtrV#1%;U86i-?<1O?jwW{LWmQ8+2g(Ee{O&f zLI@#*ZC0(MJBn3XpIi0KtEcC^c=h%9>zf_ctt9$xhqY&~Z+>|9lIXjidRr2~uxT+N z>Zc9M1jDDtgs9(r#8pm+D^br0aRu~=i1jfch(Hespr-`Ta{}l&0rZ>zdQ1R4Cx9Lk zK#vJK=qX|M`Fef)-cRdq4(LAPm-6-ck^MBW{^~7A6F^_`Uq{pzFL?s!@dq08%Q=() zdQ1R4CH#P&V$kyn>p6iWyb5|q2m{Hmk_F;GGCU7V2a?Sij%3ZYWF%`ik~I(Kg%D=~ Wg#h8?nC1ll0000k4U`JOJ0Ar-gYUUKAWP!MQM%rw;Q zPe1On{;F;q>qBQXiFPx+XZcI-J7_G^h|;V{sS!nZ>mCeEwHdWc~j_MOgpj*6U9TJ{3IPW;|uOWt`6c-$K)0GObg-D*SKL S{*6GZ89ZJ6T-G@yGywnzCPT~s diff --git a/win-linux/res/icons/minimize-close_light@1.25x.png b/win-linux/res/icons/minimize-close_light@1.25x.png deleted file mode 100644 index a21005fdfede7d2ef02599590af586a7a49fcf12..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 281 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU1|)m_?Z^dEoCO|{#S9GG!XV7ZFl&wkP>``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&eB{yI+=$B+ufx7QrG8WaRtAFgEHQgEO1)xYU4 z^x_T*aUJnWFPYNu-FdduzNSekP8^CY0$wIZ)Yok7W06d5yHc9Vuh??odht2mrkgug zKWFbtw(e{FbffB=-`+hH1&L?Y9NE9IYr5;v2qy2qp{%(qBoKRB9U8}^`A#e2)o zoOiA38#hbsuJXU{!Mp0!Qo9F2Ay*%-(c@h8>gRo)@>13pcTVqS+brGifl(pHrH!GzsjRm@#!PC{xWt~$(6957aZJq!C diff --git a/win-linux/res/icons/minimize-close_light@1.5x.png b/win-linux/res/icons/minimize-close_light@1.5x.png deleted file mode 100644 index c2f35dce8f23a016e552475a661e2dee0f0a48c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 312 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTC&H|6fVg?3oVGw3ym^DWND9BhG ztCmJq!#|kwxZvzdK45oYS2(XRAC=9(bLt>Wt~$(69B^X Bde;B| diff --git a/win-linux/res/icons/minimize-close_light@1.75x.png b/win-linux/res/icons/minimize-close_light@1.75x.png deleted file mode 100644 index e972053752c2f444629b66da889d4a7e4c0d34e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 310 zcmeAS@N?(olHy`uVBq!ia0vp^79h;Q1|(OsS<3+_&H|6fVg?3oVGw3ym^DWND9BhG zSTxmcZLD|9E_gJJeS4!)y!Z5*H|Vo^7=&(rcyX!a1L>Y&v&aSqTJ$!m{`3UpM89 zPJ8}UQucN1-s=aPoAT1q5B7AcyB&>axZcZ`%ou09s*Sb6KCo2h!0(P(iH!H8v-(&o zs;|fef6&X+nfiZb{o~yD$@7%|irl*>x4|WLZ@%;$rqZube)_&wu4W%J2@GG)e%T?` tmeZ`Ms`~W>-=?=0=JCgc_jh=#RiEtCe`PLHt^?3p44$rjF6*2UngEm5b9ev% diff --git a/win-linux/res/icons/minimize-close_light@2x.png b/win-linux/res/icons/minimize-close_light@2x.png deleted file mode 100644 index 4a8bc4349e405325748dea1424165120c2350f56..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 533 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLCF%=h?3y^w370~qEv>0#LT=By}Z;C1rt33 zJwwYY*ERtaF}8ZTIEGZjy`Aya_ppP2%UyQa3IDVed>xoSoE9=kDDx}M2zXO)?&fx( zS?X{5=j{EgCLg5Ye@r5|#}G;|KdX%ElR0L#dD=zep4@cZCFv5k&qTSMH@F5@lr}px zQqNG|(BI}3Z`sU`XBMX=sbB4XntdkxO!k>~LN^}1OFuL9_}K(?wX^Ze_mb?A%BDWh zE4!CG;o}QwkI&)~TUNKc`Eru^q}NAr6#>2sb=i_yzAJI)R zn_t)O65sJc=6!p|pv;B=2|^`Le`x+veZI8n?G>StCqFbJ zriNFX*HoP`_wn=xzLl=;TswDv-=;M4@n4}I%l9Z*-&Iw~-V@(6>#69?+8r$^OMVCj z$$Na+*LaUzNwbdS!9)?SH~+tIl+7%B7-)RsVP4mLiR3f?(`W5tT#zJ^Yk6x~A~4n% NJYD@<);T3K0RWXI>BIm4 diff --git a/win-linux/res/icons/tab_close_active.png b/win-linux/res/icons/tab_close_active.png deleted file mode 100644 index 9e19dd664c3fe1499cc989f4dc1e0b866ea9c8e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 240 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6;>1s;*b z3=Dh+L6~vJ#O${~L8%hgh?3y^w370~qEv=}#LT=BJwMkFg)(D3Q$0gN_s>q|Kvg-O zE{-7<{!9D3xegd`uriundHaab_jj82$xo#nU zqHDG7;f4GkQ*AfNy2vLT6W@M+0l#5!$${y=cb|LX+`@Xg;DvL+&Cha<_FY;l*GxFY d1tR{hxYNESQa?*h*$!wggQu&X%Q~loCIDtoQbPa$ diff --git a/win-linux/res/icons/tab_close_active_2x.png b/win-linux/res/icons/tab_close_active_2x.png deleted file mode 100644 index 7b45cfb02564201ab7879b517925a50d5cfaf605..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 369 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzmUKs7M+SzC{oH>NS%G}c0*}aI z1_r)^Ak4U9V)k30pj3%#L`iUdT1k0gQ7S_~VrE{6o}X)oLYc9ish**s`)4O}psKf? zE{-7)?nfswavd@dVEG+&|E+(LdBmL-&r2NZ4kcKZ-_(5@==D=uWAXx@CL_*MDnLfb zx%-cwtgN3UY@Hrp^?pHj>4W8aoUHl0mh)e+eam?^Cx2IU<0f}Uv95zfX2)fjR2MpM z=W~_h?wh&R!P4nqSWx$gi#G)|(pMZfRkiID>nTyKO_$c62GN@zyedM|b7dPR1#FmV;=0T1{+X}^Zvq#zCO6JGTiEXKQsacv@`JN(-Yfaev~;uV4O^DC y78!lvI6;>1s;*b z3=Dh+L6~vJ#O${~L8%hgh?3y^w370~qEv=}#LT=BJwMkFg)(D3Q$0gN_s>q|KvmhE zE{-7<{!9C!xegd`u*Hva2>S_F9n=N{6)sLv59&iUvhCIxVq{spWXNZXti7 zYqjm+h5R2=Z8yof$R`~W-+q4qzhQC7f$6_@pL^rn!g{*kg>%8p&vK6TU0N&GOgO~_ cBL1(qQyUZf{NU5VHlVc(p00i_>zopr0IB{`lmGw# diff --git a/win-linux/res/icons/tab_close_hover_2x.png b/win-linux/res/icons/tab_close_hover_2x.png deleted file mode 100644 index 688c4ac44f1cee224111eff4ccaf645e36879db4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 369 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzmUKs7M+SzC{oH>NS%G}c0*}aI z1_r)^Ak4U9V)k30pj3%#L`iUdT1k0gQ7S_~VrE{6o}X)oLYc9ish**s`)4O}psKf? zE{-7)?nfswavd@dVEOGJ|4KjEJmOA^=OvDHhZ3yIZ|c4c^!ll-F?oSclM&}B6(FPJ z-2KN-R@ToFwoVVQdcUB%^uh8yPS$*0%lWU^zU4fdlfSFFag)2FSl7WKv*WT%stX;s z^SMfL_sv}EVCi%)EU5d$#hZc}=_?MLs@isn^^~aArc3KjgXqnV-Y~B?;ZRK zb?XF~xw4Iu0ya!FaouHh|4i6|H-QUUlN;xpEo^sqsd2(-`N3H?@0EOKTDn>GhAqom y3k_NBJzu?!o|By78KCAklO!lvI6;>1s;*b z3=Dh+L6~vJ#O${~L8%hgh?3y^w370~qEv=}#LT=BJwMkFg)(D3Q$0gN_s>q|KvmhE zE{-7<{!9C!xegd`uJYD@<);T3K0RZkeQrrLl diff --git a/win-linux/res/icons/tab_close_normal_2x.png b/win-linux/res/icons/tab_close_normal_2x.png deleted file mode 100644 index 2a7768c05eb4a7dc7df904c504d3e2f22727c9c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 370 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzmUKs7M+SzC{oH>NS%G}c0*}aI z1_r)^Ak4U9V)k30pj3%#L`iUdT1k0gQ7S_~VrE{6o}X)oLYc9ish**s`)4O}psIJC zE{-7)?nfsEavd@dVX0QvfA+UN$vomti{~Ydb%zqH-=}Wh;;#90{Q{pRBhFJQ8k2#H zOP2Nhlb8R?^m{YM@#UUoy=#s0KXJXa(3oo%@O_KA$>zN;-?5&OV~x~cJAG58oMTE0 zlkOhP3tNAtZDV@M!5ZzUtK^>UzF^KmChgZZwZt{TSDf(LuLq*fbZzEeprrlw=UerF z#;I4Gib~2@yqpe(T@rbDtHwCGag%$aSRZSV*>PE>rHd7~=dxv|RbRf#J>^_k!gql! xj~A5ae7L49YMmaS<~WljRcMMQ3S+U1zJW}y_s9D&D}g>|@O1TaS?83{1OUmRil+bo diff --git a/win-linux/res/icons/tabbar/changetab_left_active.png b/win-linux/res/icons/tabbar/changetab_left_active.png deleted file mode 100644 index 9a241d22026f9781d8c8b7af175eacc168c66ceb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 83 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=$0wn*`OvwRKQl2i3Ar-fh7l?eY{_y{};+gjj gris5i1V3motZLxPZ{#;$160M}>FVdQ&MBb@08siED*ylh diff --git a/win-linux/res/icons/tabbar/changetab_left_active@1.25x.png b/win-linux/res/icons/tabbar/changetab_left_active@1.25x.png deleted file mode 100644 index cabb36dbed124f575e399796795944399e641b11..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 194 zcmeAS@N?(olHy`uVBq!ia0vp^{2``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&eBez>QLV@L(#-3c3c4;XN;?DueH?yxIPo#-=x z*C@Pf;RzPAR_X9<+D|462wnPkiFsw<)#GP&?3ZVLBz^mC{TYFz$&;_uF;OXk;vd$@?2>_poJe~jm diff --git a/win-linux/res/icons/tabbar/changetab_left_active@1.5x.png b/win-linux/res/icons/tabbar/changetab_left_active@1.5x.png deleted file mode 100644 index 8353d6ed82bcae2606ff3129ae8513117163a5b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 186 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@Rf|&H|6fVg?3oVGw3ym^DWND9BhG z>-{&A!}S`n bKl_*N?HA*1uc>_iG@8NF)z4*}Q$iB}M<+Mf diff --git a/win-linux/res/icons/tabbar/changetab_left_active@1.75x.png b/win-linux/res/icons/tabbar/changetab_left_active@1.75x.png deleted file mode 100644 index d213629095cb39a099e59a95da6ab274bba0de28..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 201 zcmeAS@N?(olHy`uVBq!ia0vp^q9Dw{1|(OCFP#RYI14-?iy0WWg+Z8+Vb&Z8pde#$ zkh>GZx^prwfgF}}M_)$E)e-c@N{5Ve+$B+ufx0g2ZHaKv!J`BHcfni~}o_HaX zd4XQ}!UCrLLw?=f8hYaYo)od36z6JKWgcpKrsw}N?q3Iu>&o{}3~bPkdZ4hNBj;`G s3B7G8&-VCo&tu42zD@XI*Q?d+tB*+7D@|YN3$%&B)78&qol`;+0K-8+VE_OC diff --git a/win-linux/res/icons/tabbar/changetab_left_active@2x.png b/win-linux/res/icons/tabbar/changetab_left_active@2x.png deleted file mode 100644 index 6b8d5a5193b4f4f76f9f19cc19bf67a08f79dff6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 140 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM0wlfaz7_+iU{4pvkcwN$5*Y{d&(_a~?-qG# z{?q=WyrSz*?tjsLE*;U@Z+d2`GQ-MK^PQ&(b2prd|8&14L*bUEO4h^aa(ANgCa!wQ oYP-e3NI)~H??bln1yKfu<+Chnzona(0F7txboFyt=akR{0Bh1RrT_o{ diff --git a/win-linux/res/icons/tabbar/changetab_left_active_light.png b/win-linux/res/icons/tabbar/changetab_left_active_light.png deleted file mode 100644 index 7d955babb22fc210d418dc74726bd586ffb3298d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 528 zcmV+r0`L8aP)$(l`sY_jYoh}a4?7J`Ln z28E}U)nqfBv!N}&V=uF7Bu(;&& zywO4jUiuk{YqmKRiG-;;z8`R@dLK}|>hG&L+E$ac2Cin|am}>y!jr<`^}MNgN4Q%{ z$5(}qg@-LUpzw{-6D59CoGS6BVk;J%2Dj?zOI2~AinX+52oDMSjZ8r+pGV!qo6OG7 zN$r){hfS0jLik8fV2uoU0#dV*S#4ji=$j=c9!>rx8(88h29e(~IML41i}3es>+`=frV-Pod!%uCf(>PI8*~5`DL#`H!G;3ofoJ zT4EnAx1s0Bj9c-d)F9KX>+pUK?TgTL2d&Gctjg=0Jwj|#p6C`14q;ICcdq;a2!d!1 zT1zcK00009a7bBm000XT000XT0n*)m`~Uy|MoC0LR47wpV4y4b|NlP<{_x?00}%g5 zR>Oo#^T&@L9e~t+Aa=y12E$|!4dUa~fUX#?25gF{YXez+z@~{P4Y=ZgWB>r{OPe4y Sn776N0000$(l`sY_jYoh}a4?7J`Ln z28E}U)nqfBv!N}&V=uF7Bu(;&& zywO4jUiuk{YqmKRiG-;;z8`R@dLK}|>hG&L+E$ac2Cin|am}>y!jr<`^}MNgN4Q%{ z$5(}qg@-LUpzw{-6D59CoGS6BVk;J%2Dj?zOI2~AinX+52oDMSjZ8r+pGV!qo6OG7 zN$r){hfS0jLik8fV2uoU0#dV*S#4ji=$j=c9!>rx8(88h29e(~IML41i}3es>+`=frV-Pod!%uCf(>PI8*~5`DL#`H!G;3ofoJ zT4EnAx1s0Bj9c-d)F9KX>+pUK?TgTL2d&Gctjg=0Jwj|#p6C`14q;ICcdq;a2!d!1 zT1zcK00009a7bBm000XU000XU0RWnu7ytkOkV!;AR47wpU>G#u|Ns9O`2G9$O>f`6 z`6CXZ7yA&nq_RWmUfu>zpRa3DU7 zE#S}rBf0=c5y)mHCME_xK0Xwi85vQPV|6yjx&QwCWBByx(?o3YFn}|_h%o?fR1sqU o3cwanz%VHJ_U)T2A-(hi0H7#rmq*A;s{jB107*qoM6N<$f<4a%u>b%7 diff --git a/win-linux/res/icons/tabbar/changetab_left_active_light@1.5x.png b/win-linux/res/icons/tabbar/changetab_left_active_light@1.5x.png deleted file mode 100644 index 38481c419b41560cd325f8d05ef0efedd1f6a5cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 601 zcmV-f0;c_mP)$(l`sY_jYoh}a4?7J`Ln z28E}U)nqfBv!N}&V=uF7Bu(;&& zywO4jUiuk{YqmKRiG-;;z8`R@dLK}|>hG&L+E$ac2Cin|am}>y!jr<`^}MNgN4Q%{ z$5(}qg@-LUpzw{-6D59CoGS6BVk;J%2Dj?zOI2~AinX+52oDMSjZ8r+pGV!qo6OG7 zN$r){hfS0jLik8fV2uoU0#dV*S#4ji=$j=c9!>rx8(88h29e(~IML41i}3es>+`=frV-Pod!%uCf(>PI8*~5`DL#`H!G;3ofoJ zT4EnAx1s0Bj9c-d)F9KX>+pUK?TgTL2d&Gctjg=0Jwj|#p6C`14q;ICcdq;a2!d!1 zT1zcK00009a7bBm000XU000XU0RWnu7ytkOk4Z#9R5(wyl)(wWAPhxI2XKQJOK=z|ateTfk~j=#t`vk_ywC?ig|3J4+Sl+t6ZRkOVX)QR_AJLg`? zTt^)<$(9I7mPMRoNi>p(MKcK}8a=TiQ_v7%u(P(6vh}O?r4_}^<|3;_}MM|00000NkvXXu0mjf@1z5z diff --git a/win-linux/res/icons/tabbar/changetab_left_active_light@1.75x.png b/win-linux/res/icons/tabbar/changetab_left_active_light@1.75x.png deleted file mode 100644 index 145ac8a6ed5246751004b6140ee49201c3978ae2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 623 zcmV-#0+9WQP)$(l`sY_jYoh}a4?7J`Ln z28E}U)nqfBv!N}&V=uF7Bu(;&& zywO4jUiuk{YqmKRiG-;;z8`R@dLK}|>hG&L+E$ac2Cin|am}>y!jr<`^}MNgN4Q%{ z$5(}qg@-LUpzw{-6D59CoGS6BVk;J%2Dj?zOI2~AinX+52oDMSjZ8r+pGV!qo6OG7 zN$r){hfS0jLik8fV2uoU0#dV*S#4ji=$j=c9!>rx8(88h29e(~IML41i}3es>+`=frV-Pod!%uCf(>PI8*~5`DL#`H!G;3ofoJ zT4EnAx1s0Bj9c-d)F9KX>+pUK?TgTL2d&Gctjg=0Jwj|#p6C`14q;ICcdq;a2!d!1 zT1zcK00009a7bBm000XU000XU0RWnu7ytkOrAb6VR5(xVk}(c~Aq+-=I1|F|xjcr8 zC-4UUxjYMjFff9AgNtcP`B!~O!_fAn4K?Nu#TbK)obxlK5@pwNxtvD(Q|8ETy|bAWF{&MW*mJ<0YLIhvgDz!lceQqu zcT;OUq`GgGA9Y5&l!9HcN(y$wYAM(elSrpDuj0{KyRIBR${R~Fl#S$(l`sY_jYoh}a4?7J`Ln z28E}U)nqfBv!N}&V=uF7Bu(;&& zywO4jUiuk{YqmKRiG-;;z8`R@dLK}|>hG&L+E$ac2Cin|am}>y!jr<`^}MNgN4Q%{ z$5(}qg@-LUpzw{-6D59CoGS6BVk;J%2Dj?zOI2~AinX+52oDMSjZ8r+pGV!qo6OG7 zN$r){hfS0jLik8fV2uoU0#dV*S#4ji=$j=c9!>rx8(88h29e(~IML41i}3es>+`=frV-Pod!%uCf(>PI8*~5`DL#`H!G;3ofoJ zT4EnAx1s0Bj9c-d)F9KX>+pUK?TgTL2d&Gctjg=0Jwj|#p6C`14q;ICcdq;a2!d!1 zT1zcK00009a7bBm000XT000XT0n*)m`~Uy|-bqA3R7gwRlf4bXFcgFxM2#ttvH=Y< zWC})LCpO3uNx=r}fS`<7z}!hLtcd65p9((dhcsWbgVJ)6EvP9cS%TVfq6%8d zi7GG+lMaG)PoI`0mvbRX|!K zSpxD!GUrIL1!N`R-B2Y(0uo7hH&jWnfUG1u%A+(}B_NUHj$D-SALavqD1d)O<=FVdQ&MBb@07B~*ng9R* diff --git a/win-linux/res/icons/tabbar/changetab_left_disabled@1.25x.png b/win-linux/res/icons/tabbar/changetab_left_disabled@1.25x.png deleted file mode 100644 index 5dc640eec781ebb743bf6de4560fce21aff4b0db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 217 zcmeAS@N?(olHy`uVBq!ia0vp^{2``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&eBex9d`V@L(#+5U}O4F)_e&0Vrt(E_iYJ$d(R z(f{}TKN$Ju&T_qM>Ycf80{ijSW^T@gj5S-?Z=U$97;bVbM&41`iF2ig)xs&yj`p#i z+u57Lsd#5+(fMYH$E&Bz^3+zc3vjmD{VLs(d&{-m-|LtR|FkrT{Vcb6bPH%RgQu&X J%Q~loCIJ14OE3Tc diff --git a/win-linux/res/icons/tabbar/changetab_left_disabled@1.5x.png b/win-linux/res/icons/tabbar/changetab_left_disabled@1.5x.png deleted file mode 100644 index 06c9a5a5f6260c2d2842b81a33b8a4f1d96e0426..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 245 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@Rf|&H|6fVg?3oVGw3ym^DWND9BhG zerUDf`}*OZiED zPvv6=b0(Whja$WfHa0rBDap17SZSt8Z{(l**2-RS}-4f)J leYfI$_y5~diq{>w+56bWqk;8=MHbLi44$rjF6*2UngID@RZ#!{ diff --git a/win-linux/res/icons/tabbar/changetab_left_disabled@1.75x.png b/win-linux/res/icons/tabbar/changetab_left_disabled@1.75x.png deleted file mode 100644 index a9fc816067fe49a931a586bb5cd8a234cba29f74..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 222 zcmeAS@N?(olHy`uVBq!ia0vp^q9Dw{1|(OCFP#RYI14-?iy0WWg+Z8+Vb&Z8pde#$ zkh>GZx^prwfgF}}M_)$E)e-c@N{9;cR$B+ufw-*e#8VqhdQ(k2rn{tWK@BH`3e66GZMYGqYzprKg_>4`FS&I1wZ&E7I OdInEdKbLh*2~7aRQcXty diff --git a/win-linux/res/icons/tabbar/changetab_left_disabled@2x.png b/win-linux/res/icons/tabbar/changetab_left_disabled@2x.png deleted file mode 100644 index 3069127917958cf9e8f14c63b0f7cdfd402e43c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 116 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM0wlfaz7_*1Yfl%)kcwN$5*Y{1pM8H^-=phO z!9SNe`=BYunGC$(l`sY_jYoh}a4?7J`Ln z28E}U)nqfBv!N}&V=uF7Bu(;&& zywO4jUiuk{YqmKRiG-;;z8`R@dLK}|>hG&L+E$ac2Cin|am}>y!jr<`^}MNgN4Q%{ z$5(}qg@-LUpzw{-6D59CoGS6BVk;J%2Dj?zOI2~AinX+52oDMSjZ8r+pGV!qo6OG7 zN$r){hfS0jLik8fV2uoU0#dV*S#4ji=$j=c9!>rx8(88h29e(~IML41i}3es>+`=frV-Pod!%uCf(>PI8*~5`DL#`H!G;3ofoJ zT4EnAx1s0Bj9c-d)F9KX>+pUK?TgTL2d&Gctjg=0Jwj|#p6C`14q;ICcdq;a2!d!1 zT1zcK00009a7bBm000XT000XT0n*)m`~Uy|S4l)cR47wpV4y4b|NlP<{_x?06cDE& zt6{>W`QyirQb5WFh_@h%W7UAHn4h2j8D0(e6k}*0q!>d3R1wI{K2Xj0HGlviO;|mR jPZQ2yMb?B%4N(99ic2;n4yBRc00000NkvXXu0mjfz^m`f diff --git a/win-linux/res/icons/tabbar/changetab_left_disabled_light@1.25x.png b/win-linux/res/icons/tabbar/changetab_left_disabled_light@1.25x.png deleted file mode 100644 index 387f20b985372f1da409f7175182da181f066886..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 595 zcmV-Z0<8UsP)$(l`sY_jYoh}a4?7J`Ln z28E}U)nqfBv!N}&V=uF7Bu(;&& zywO4jUiuk{YqmKRiG-;;z8`R@dLK}|>hG&L+E$ac2Cin|am}>y!jr<`^}MNgN4Q%{ z$5(}qg@-LUpzw{-6D59CoGS6BVk;J%2Dj?zOI2~AinX+52oDMSjZ8r+pGV!qo6OG7 zN$r){hfS0jLik8fV2uoU0#dV*S#4ji=$j=c9!>rx8(88h29e(~IML41i}3es>+`=frV-Pod!%uCf(>PI8*~5`DL#`H!G;3ofoJ zT4EnAx1s0Bj9c-d)F9KX>+pUK?TgTL2d&Gctjg=0Jwj|#p6C`14q;ICcdq;a2!d!1 zT1zcK00009a7bBm000XU000XU0RWnu7ytkOiAh93R47wpU>G#u|Ns9O_~XZqra+nv zT`dbX1CYVz&!4Rs85#crnZMBGn6Rja1CT}_^`DoQ_ZT*LoSF$~1Ocp?iO~oG7@C2B zqYR|P2x$ZXMsxvC=mKrF0$(l`sY_jYoh}a4?7J`Ln z28E}U)nqfBv!N}&V=uF7Bu(;&& zywO4jUiuk{YqmKRiG-;;z8`R@dLK}|>hG&L+E$ac2Cin|am}>y!jr<`^}MNgN4Q%{ z$5(}qg@-LUpzw{-6D59CoGS6BVk;J%2Dj?zOI2~AinX+52oDMSjZ8r+pGV!qo6OG7 zN$r){hfS0jLik8fV2uoU0#dV*S#4ji=$j=c9!>rx8(88h29e(~IML41i}3es>+`=frV-Pod!%uCf(>PI8*~5`DL#`H!G;3ofoJ zT4EnAx1s0Bj9c-d)F9KX>+pUK?TgTL2d&Gctjg=0Jwj|#p6C`14q;ICcdq;a2!d!1 zT1zcK00009a7bBm000XU000XU0RWnu7ytkOvPnciR5(wqlT8Z4AP`2ilx$iMbE08O71bn1=jD{@CIHjEA731I_KuS*F;S+A|fTdB39BPI+SptbKU>}4kyS;$(l`sY_jYoh}a4?7J`Ln z28E}U)nqfBv!N}&V=uF7Bu(;&& zywO4jUiuk{YqmKRiG-;;z8`R@dLK}|>hG&L+E$ac2Cin|am}>y!jr<`^}MNgN4Q%{ z$5(}qg@-LUpzw{-6D59CoGS6BVk;J%2Dj?zOI2~AinX+52oDMSjZ8r+pGV!qo6OG7 zN$r){hfS0jLik8fV2uoU0#dV*S#4ji=$j=c9!>rx8(88h29e(~IML41i}3es>+`=frV-Pod!%uCf(>PI8*~5`DL#`H!G;3ofoJ zT4EnAx1s0Bj9c-d)F9KX>+pUK?TgTL2d&Gctjg=0Jwj|#p6C`14q;ICcdq;a2!d!1 zT1zcK00009a7bBm000XU000XU0RWnu7ytkOpGibPR5(xV)UghOAQXjRX-ucG_66MC zy6F4&Vb};vU9R^GZXCGRwf>2Lhh$yPtX3^p81yNuN*pK?88|Dnwt<^f+fBh3X zacjd5bp;-x$P1fL$(l`sY_jYoh}a4?7J`Ln z28E}U)nqfBv!N}&V=uF7Bu(;&& zywO4jUiuk{YqmKRiG-;;z8`R@dLK}|>hG&L+E$ac2Cin|am}>y!jr<`^}MNgN4Q%{ z$5(}qg@-LUpzw{-6D59CoGS6BVk;J%2Dj?zOI2~AinX+52oDMSjZ8r+pGV!qo6OG7 zN$r){hfS0jLik8fV2uoU0#dV*S#4ji=$j=c9!>rx8(88h29e(~IML41i}3es>+`=frV-Pod!%uCf(>PI8*~5`DL#`H!G;3ofoJ zT4EnAx1s0Bj9c-d)F9KX>+pUK?TgTL2d&Gctjg=0Jwj|#p6C`14q;ICcdq;a2!d!1 zT1zcK00009a7bBm000XT000XT0n*)m`~Uy|)Ja4^R7gwJl|2iCFc5|>rF3YA1p0eA zb#?F3pXuu4?$Kj6y9)Mxo&HHF2OAP#P#Ls)_To?Mfi`ajWK@K`b`3BI8X~b;Xozuh67QsB^-zX z+7J$owME|jlg7j73J1~z)swD4{8aE14^lj$5Xw=~1fZoc9Fk^w>1ss5v}3nK6o4%f zl>m4pY60*_Oafq)m<3=VIn(%8E8-G>ndHUQ3++4R52m+jDgxdkPyhe`07*qoM6N<$ Ef-o{OMF0Q* diff --git a/win-linux/res/icons/tabbar/changetab_left_hover.png b/win-linux/res/icons/tabbar/changetab_left_hover.png deleted file mode 100644 index 9a241d22026f9781d8c8b7af175eacc168c66ceb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 83 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=$0wn*`OvwRKQl2i3Ar-fh7l?eY{_y{};+gjj gris5i1V3motZLxPZ{#;$160M}>FVdQ&MBb@08siED*ylh diff --git a/win-linux/res/icons/tabbar/changetab_left_hover@1.25x.png b/win-linux/res/icons/tabbar/changetab_left_hover@1.25x.png deleted file mode 100644 index cabb36dbed124f575e399796795944399e641b11..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 194 zcmeAS@N?(olHy`uVBq!ia0vp^{2``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&eBez>QLV@L(#-3c3c4;XN;?DueH?yxIPo#-=x z*C@Pf;RzPAR_X9<+D|462wnPkiFsw<)#GP&?3ZVLBz^mC{TYFz$&;_uF;OXk;vd$@?2>_poJe~jm diff --git a/win-linux/res/icons/tabbar/changetab_left_hover@1.5x.png b/win-linux/res/icons/tabbar/changetab_left_hover@1.5x.png deleted file mode 100644 index 8353d6ed82bcae2606ff3129ae8513117163a5b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 186 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@Rf|&H|6fVg?3oVGw3ym^DWND9BhG z>-{&A!}S`n bKl_*N?HA*1uc>_iG@8NF)z4*}Q$iB}M<+Mf diff --git a/win-linux/res/icons/tabbar/changetab_left_hover@1.75x.png b/win-linux/res/icons/tabbar/changetab_left_hover@1.75x.png deleted file mode 100644 index d213629095cb39a099e59a95da6ab274bba0de28..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 201 zcmeAS@N?(olHy`uVBq!ia0vp^q9Dw{1|(OCFP#RYI14-?iy0WWg+Z8+Vb&Z8pde#$ zkh>GZx^prwfgF}}M_)$E)e-c@N{5Ve+$B+ufx0g2ZHaKv!J`BHcfni~}o_HaX zd4XQ}!UCrLLw?=f8hYaYo)od36z6JKWgcpKrsw}N?q3Iu>&o{}3~bPkdZ4hNBj;`G s3B7G8&-VCo&tu42zD@XI*Q?d+tB*+7D@|YN3$%&B)78&qol`;+0K-8+VE_OC diff --git a/win-linux/res/icons/tabbar/changetab_left_hover@2x.png b/win-linux/res/icons/tabbar/changetab_left_hover@2x.png deleted file mode 100644 index 6b8d5a5193b4f4f76f9f19cc19bf67a08f79dff6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 140 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM0wlfaz7_+iU{4pvkcwN$5*Y{d&(_a~?-qG# z{?q=WyrSz*?tjsLE*;U@Z+d2`GQ-MK^PQ&(b2prd|8&14L*bUEO4h^aa(ANgCa!wQ oYP-e3NI)~H??bln1yKfu<+Chnzona(0F7txboFyt=akR{0Bh1RrT_o{ diff --git a/win-linux/res/icons/tabbar/changetab_left_hover_light.png b/win-linux/res/icons/tabbar/changetab_left_hover_light.png deleted file mode 100644 index 7d955babb22fc210d418dc74726bd586ffb3298d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 528 zcmV+r0`L8aP)$(l`sY_jYoh}a4?7J`Ln z28E}U)nqfBv!N}&V=uF7Bu(;&& zywO4jUiuk{YqmKRiG-;;z8`R@dLK}|>hG&L+E$ac2Cin|am}>y!jr<`^}MNgN4Q%{ z$5(}qg@-LUpzw{-6D59CoGS6BVk;J%2Dj?zOI2~AinX+52oDMSjZ8r+pGV!qo6OG7 zN$r){hfS0jLik8fV2uoU0#dV*S#4ji=$j=c9!>rx8(88h29e(~IML41i}3es>+`=frV-Pod!%uCf(>PI8*~5`DL#`H!G;3ofoJ zT4EnAx1s0Bj9c-d)F9KX>+pUK?TgTL2d&Gctjg=0Jwj|#p6C`14q;ICcdq;a2!d!1 zT1zcK00009a7bBm000XT000XT0n*)m`~Uy|MoC0LR47wpV4y4b|NlP<{_x?00}%g5 zR>Oo#^T&@L9e~t+Aa=y12E$|!4dUa~fUX#?25gF{YXez+z@~{P4Y=ZgWB>r{OPe4y Sn776N0000$(l`sY_jYoh}a4?7J`Ln z28E}U)nqfBv!N}&V=uF7Bu(;&& zywO4jUiuk{YqmKRiG-;;z8`R@dLK}|>hG&L+E$ac2Cin|am}>y!jr<`^}MNgN4Q%{ z$5(}qg@-LUpzw{-6D59CoGS6BVk;J%2Dj?zOI2~AinX+52oDMSjZ8r+pGV!qo6OG7 zN$r){hfS0jLik8fV2uoU0#dV*S#4ji=$j=c9!>rx8(88h29e(~IML41i}3es>+`=frV-Pod!%uCf(>PI8*~5`DL#`H!G;3ofoJ zT4EnAx1s0Bj9c-d)F9KX>+pUK?TgTL2d&Gctjg=0Jwj|#p6C`14q;ICcdq;a2!d!1 zT1zcK00009a7bBm000XU000XU0RWnu7ytkOkV!;AR47wpU>G#u|Ns9O`2G9$O>f`6 z`6CXZ7yA&nq_RWmUfu>zpRa3DU7 zE#S}rBf0=c5y)mHCME_xK0Xwi85vQPV|6yjx&QwCWBByx(?o3YFn}|_h%o?fR1sqU o3cwanz%VHJ_U)T2A-(hi0H7#rmq*A;s{jB107*qoM6N<$f<4a%u>b%7 diff --git a/win-linux/res/icons/tabbar/changetab_left_hover_light@1.5x.png b/win-linux/res/icons/tabbar/changetab_left_hover_light@1.5x.png deleted file mode 100644 index 38481c419b41560cd325f8d05ef0efedd1f6a5cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 601 zcmV-f0;c_mP)$(l`sY_jYoh}a4?7J`Ln z28E}U)nqfBv!N}&V=uF7Bu(;&& zywO4jUiuk{YqmKRiG-;;z8`R@dLK}|>hG&L+E$ac2Cin|am}>y!jr<`^}MNgN4Q%{ z$5(}qg@-LUpzw{-6D59CoGS6BVk;J%2Dj?zOI2~AinX+52oDMSjZ8r+pGV!qo6OG7 zN$r){hfS0jLik8fV2uoU0#dV*S#4ji=$j=c9!>rx8(88h29e(~IML41i}3es>+`=frV-Pod!%uCf(>PI8*~5`DL#`H!G;3ofoJ zT4EnAx1s0Bj9c-d)F9KX>+pUK?TgTL2d&Gctjg=0Jwj|#p6C`14q;ICcdq;a2!d!1 zT1zcK00009a7bBm000XU000XU0RWnu7ytkOk4Z#9R5(wyl)(wWAPhxI2XKQJOK=z|ateTfk~j=#t`vk_ywC?ig|3J4+Sl+t6ZRkOVX)QR_AJLg`? zTt^)<$(9I7mPMRoNi>p(MKcK}8a=TiQ_v7%u(P(6vh}O?r4_}^<|3;_}MM|00000NkvXXu0mjf@1z5z diff --git a/win-linux/res/icons/tabbar/changetab_left_hover_light@1.75x.png b/win-linux/res/icons/tabbar/changetab_left_hover_light@1.75x.png deleted file mode 100644 index 145ac8a6ed5246751004b6140ee49201c3978ae2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 623 zcmV-#0+9WQP)$(l`sY_jYoh}a4?7J`Ln z28E}U)nqfBv!N}&V=uF7Bu(;&& zywO4jUiuk{YqmKRiG-;;z8`R@dLK}|>hG&L+E$ac2Cin|am}>y!jr<`^}MNgN4Q%{ z$5(}qg@-LUpzw{-6D59CoGS6BVk;J%2Dj?zOI2~AinX+52oDMSjZ8r+pGV!qo6OG7 zN$r){hfS0jLik8fV2uoU0#dV*S#4ji=$j=c9!>rx8(88h29e(~IML41i}3es>+`=frV-Pod!%uCf(>PI8*~5`DL#`H!G;3ofoJ zT4EnAx1s0Bj9c-d)F9KX>+pUK?TgTL2d&Gctjg=0Jwj|#p6C`14q;ICcdq;a2!d!1 zT1zcK00009a7bBm000XU000XU0RWnu7ytkOrAb6VR5(xVk}(c~Aq+-=I1|F|xjcr8 zC-4UUxjYMjFff9AgNtcP`B!~O!_fAn4K?Nu#TbK)obxlK5@pwNxtvD(Q|8ETy|bAWF{&MW*mJ<0YLIhvgDz!lceQqu zcT;OUq`GgGA9Y5&l!9HcN(y$wYAM(elSrpDuj0{KyRIBR${R~Fl#S$(l`sY_jYoh}a4?7J`Ln z28E}U)nqfBv!N}&V=uF7Bu(;&& zywO4jUiuk{YqmKRiG-;;z8`R@dLK}|>hG&L+E$ac2Cin|am}>y!jr<`^}MNgN4Q%{ z$5(}qg@-LUpzw{-6D59CoGS6BVk;J%2Dj?zOI2~AinX+52oDMSjZ8r+pGV!qo6OG7 zN$r){hfS0jLik8fV2uoU0#dV*S#4ji=$j=c9!>rx8(88h29e(~IML41i}3es>+`=frV-Pod!%uCf(>PI8*~5`DL#`H!G;3ofoJ zT4EnAx1s0Bj9c-d)F9KX>+pUK?TgTL2d&Gctjg=0Jwj|#p6C`14q;ICcdq;a2!d!1 zT1zcK00009a7bBm000XT000XT0n*)m`~Uy|-bqA3R7gwRlf4bXFcgFxM2#ttvH=Y< zWC})LCpO3uNx=r}fS`<7z}!hLtcd65p9((dhcsWbgVJ)6EvP9cS%TVfq6%8d zi7GG+lMaG)PoI`0mvbRX|!K zSpxD!GUrIL1!N`R-B2Y(0uo7hH&jWnfUG1u%A+(}B_NUHj$D-SALavqD1d)O<=FVdQ&MBb@08siED*ylh diff --git a/win-linux/res/icons/tabbar/changetab_left_normal@1.25x.png b/win-linux/res/icons/tabbar/changetab_left_normal@1.25x.png deleted file mode 100644 index cabb36dbed124f575e399796795944399e641b11..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 194 zcmeAS@N?(olHy`uVBq!ia0vp^{2``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&eBez>QLV@L(#-3c3c4;XN;?DueH?yxIPo#-=x z*C@Pf;RzPAR_X9<+D|462wnPkiFsw<)#GP&?3ZVLBz^mC{TYFz$&;_uF;OXk;vd$@?2>_poJe~jm diff --git a/win-linux/res/icons/tabbar/changetab_left_normal@1.5x.png b/win-linux/res/icons/tabbar/changetab_left_normal@1.5x.png deleted file mode 100644 index 8353d6ed82bcae2606ff3129ae8513117163a5b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 186 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@Rf|&H|6fVg?3oVGw3ym^DWND9BhG z>-{&A!}S`n bKl_*N?HA*1uc>_iG@8NF)z4*}Q$iB}M<+Mf diff --git a/win-linux/res/icons/tabbar/changetab_left_normal@1.75x.png b/win-linux/res/icons/tabbar/changetab_left_normal@1.75x.png deleted file mode 100644 index d213629095cb39a099e59a95da6ab274bba0de28..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 201 zcmeAS@N?(olHy`uVBq!ia0vp^q9Dw{1|(OCFP#RYI14-?iy0WWg+Z8+Vb&Z8pde#$ zkh>GZx^prwfgF}}M_)$E)e-c@N{5Ve+$B+ufx0g2ZHaKv!J`BHcfni~}o_HaX zd4XQ}!UCrLLw?=f8hYaYo)od36z6JKWgcpKrsw}N?q3Iu>&o{}3~bPkdZ4hNBj;`G s3B7G8&-VCo&tu42zD@XI*Q?d+tB*+7D@|YN3$%&B)78&qol`;+0K-8+VE_OC diff --git a/win-linux/res/icons/tabbar/changetab_left_normal@2x.png b/win-linux/res/icons/tabbar/changetab_left_normal@2x.png deleted file mode 100644 index 6b8d5a5193b4f4f76f9f19cc19bf67a08f79dff6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 140 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM0wlfaz7_+iU{4pvkcwN$5*Y{d&(_a~?-qG# z{?q=WyrSz*?tjsLE*;U@Z+d2`GQ-MK^PQ&(b2prd|8&14L*bUEO4h^aa(ANgCa!wQ oYP-e3NI)~H??bln1yKfu<+Chnzona(0F7txboFyt=akR{0Bh1RrT_o{ diff --git a/win-linux/res/icons/tabbar/changetab_left_normal_light.png b/win-linux/res/icons/tabbar/changetab_left_normal_light.png deleted file mode 100644 index 7d955babb22fc210d418dc74726bd586ffb3298d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 528 zcmV+r0`L8aP)$(l`sY_jYoh}a4?7J`Ln z28E}U)nqfBv!N}&V=uF7Bu(;&& zywO4jUiuk{YqmKRiG-;;z8`R@dLK}|>hG&L+E$ac2Cin|am}>y!jr<`^}MNgN4Q%{ z$5(}qg@-LUpzw{-6D59CoGS6BVk;J%2Dj?zOI2~AinX+52oDMSjZ8r+pGV!qo6OG7 zN$r){hfS0jLik8fV2uoU0#dV*S#4ji=$j=c9!>rx8(88h29e(~IML41i}3es>+`=frV-Pod!%uCf(>PI8*~5`DL#`H!G;3ofoJ zT4EnAx1s0Bj9c-d)F9KX>+pUK?TgTL2d&Gctjg=0Jwj|#p6C`14q;ICcdq;a2!d!1 zT1zcK00009a7bBm000XT000XT0n*)m`~Uy|MoC0LR47wpV4y4b|NlP<{_x?00}%g5 zR>Oo#^T&@L9e~t+Aa=y12E$|!4dUa~fUX#?25gF{YXez+z@~{P4Y=ZgWB>r{OPe4y Sn776N0000$(l`sY_jYoh}a4?7J`Ln z28E}U)nqfBv!N}&V=uF7Bu(;&& zywO4jUiuk{YqmKRiG-;;z8`R@dLK}|>hG&L+E$ac2Cin|am}>y!jr<`^}MNgN4Q%{ z$5(}qg@-LUpzw{-6D59CoGS6BVk;J%2Dj?zOI2~AinX+52oDMSjZ8r+pGV!qo6OG7 zN$r){hfS0jLik8fV2uoU0#dV*S#4ji=$j=c9!>rx8(88h29e(~IML41i}3es>+`=frV-Pod!%uCf(>PI8*~5`DL#`H!G;3ofoJ zT4EnAx1s0Bj9c-d)F9KX>+pUK?TgTL2d&Gctjg=0Jwj|#p6C`14q;ICcdq;a2!d!1 zT1zcK00009a7bBm000XU000XU0RWnu7ytkOkV!;AR47wpU>G#u|Ns9O`2G9$O>f`6 z`6CXZ7yA&nq_RWmUfu>zpRa3DU7 zE#S}rBf0=c5y)mHCME_xK0Xwi85vQPV|6yjx&QwCWBByx(?o3YFn}|_h%o?fR1sqU o3cwanz%VHJ_U)T2A-(hi0H7#rmq*A;s{jB107*qoM6N<$f<4a%u>b%7 diff --git a/win-linux/res/icons/tabbar/changetab_left_normal_light@1.5x.png b/win-linux/res/icons/tabbar/changetab_left_normal_light@1.5x.png deleted file mode 100644 index 38481c419b41560cd325f8d05ef0efedd1f6a5cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 601 zcmV-f0;c_mP)$(l`sY_jYoh}a4?7J`Ln z28E}U)nqfBv!N}&V=uF7Bu(;&& zywO4jUiuk{YqmKRiG-;;z8`R@dLK}|>hG&L+E$ac2Cin|am}>y!jr<`^}MNgN4Q%{ z$5(}qg@-LUpzw{-6D59CoGS6BVk;J%2Dj?zOI2~AinX+52oDMSjZ8r+pGV!qo6OG7 zN$r){hfS0jLik8fV2uoU0#dV*S#4ji=$j=c9!>rx8(88h29e(~IML41i}3es>+`=frV-Pod!%uCf(>PI8*~5`DL#`H!G;3ofoJ zT4EnAx1s0Bj9c-d)F9KX>+pUK?TgTL2d&Gctjg=0Jwj|#p6C`14q;ICcdq;a2!d!1 zT1zcK00009a7bBm000XU000XU0RWnu7ytkOk4Z#9R5(wyl)(wWAPhxI2XKQJOK=z|ateTfk~j=#t`vk_ywC?ig|3J4+Sl+t6ZRkOVX)QR_AJLg`? zTt^)<$(9I7mPMRoNi>p(MKcK}8a=TiQ_v7%u(P(6vh}O?r4_}^<|3;_}MM|00000NkvXXu0mjf@1z5z diff --git a/win-linux/res/icons/tabbar/changetab_left_normal_light@1.75x.png b/win-linux/res/icons/tabbar/changetab_left_normal_light@1.75x.png deleted file mode 100644 index 145ac8a6ed5246751004b6140ee49201c3978ae2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 623 zcmV-#0+9WQP)$(l`sY_jYoh}a4?7J`Ln z28E}U)nqfBv!N}&V=uF7Bu(;&& zywO4jUiuk{YqmKRiG-;;z8`R@dLK}|>hG&L+E$ac2Cin|am}>y!jr<`^}MNgN4Q%{ z$5(}qg@-LUpzw{-6D59CoGS6BVk;J%2Dj?zOI2~AinX+52oDMSjZ8r+pGV!qo6OG7 zN$r){hfS0jLik8fV2uoU0#dV*S#4ji=$j=c9!>rx8(88h29e(~IML41i}3es>+`=frV-Pod!%uCf(>PI8*~5`DL#`H!G;3ofoJ zT4EnAx1s0Bj9c-d)F9KX>+pUK?TgTL2d&Gctjg=0Jwj|#p6C`14q;ICcdq;a2!d!1 zT1zcK00009a7bBm000XU000XU0RWnu7ytkOrAb6VR5(xVk}(c~Aq+-=I1|F|xjcr8 zC-4UUxjYMjFff9AgNtcP`B!~O!_fAn4K?Nu#TbK)obxlK5@pwNxtvD(Q|8ETy|bAWF{&MW*mJ<0YLIhvgDz!lceQqu zcT;OUq`GgGA9Y5&l!9HcN(y$wYAM(elSrpDuj0{KyRIBR${R~Fl#S$(l`sY_jYoh}a4?7J`Ln z28E}U)nqfBv!N}&V=uF7Bu(;&& zywO4jUiuk{YqmKRiG-;;z8`R@dLK}|>hG&L+E$ac2Cin|am}>y!jr<`^}MNgN4Q%{ z$5(}qg@-LUpzw{-6D59CoGS6BVk;J%2Dj?zOI2~AinX+52oDMSjZ8r+pGV!qo6OG7 zN$r){hfS0jLik8fV2uoU0#dV*S#4ji=$j=c9!>rx8(88h29e(~IML41i}3es>+`=frV-Pod!%uCf(>PI8*~5`DL#`H!G;3ofoJ zT4EnAx1s0Bj9c-d)F9KX>+pUK?TgTL2d&Gctjg=0Jwj|#p6C`14q;ICcdq;a2!d!1 zT1zcK00009a7bBm000XT000XT0n*)m`~Uy|-bqA3R7gwRlf4bXFcgFxM2#ttvH=Y< zWC})LCpO3uNx=r}fS`<7z}!hLtcd65p9((dhcsWbgVJ)6EvP9cS%TVfq6%8d zi7GG+lMaG)PoI`0mvbRX|!K zSpxD!GUrIL1!N`R-B2Y(0uo7hH&jWnfUG1u%A+(}B_NUHj$D-SALavqD1d)O<=``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&eBewe3=V@L(#)kzz99TYiS`t2D6s-FMq{=@r^ z<=j(=Z)X&?g=H<(-`Q3$A%@R_&DdM%)7dw6j}P3{7F10;cf&RG^HX-E1430Bz5d^6 j4b?MpJ8aQo-?xnM`AwlbC6?zP8yGxY{an^LB{Ts5$=p3F diff --git a/win-linux/res/icons/tabbar/changetab_right_active@1.5x.png b/win-linux/res/icons/tabbar/changetab_right_active@1.5x.png deleted file mode 100644 index 0787de1bd2f61b31fd2acefc4cc14bd4e86ff22b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 190 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@Rf|&H|6fVg?3oVGw3ym^DWND9BhG zWO8gbgw+Zsyj99g h{dw7=wepPyGZx^prwfgF}}M_)$E)e-c@N{1{Ic$B+ufw^uguHaKv!K5S=ZSh#;@%n{x> z51tkARHsdNz4bys1!ufd>B;%p91c5^(|ldbYBt!|?)dHL(mT_7)5@&%AC^3f*s7f7 rI_=|S!xKRV<=Gy46|$61*{)|$B$0LC;fBXRdl)=j{an^LB{Ts5+Nna3 diff --git a/win-linux/res/icons/tabbar/changetab_right_active@2x.png b/win-linux/res/icons/tabbar/changetab_right_active@2x.png deleted file mode 100644 index 7321495554371a398278cdde37786872d81edf6d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 133 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM0wlfaz7_*1A5Ry@kcwN$3(Ox}e`bG3-?xcv z!6*Me+dVEE(&r8N*Q6H}H)++=XA7<|rA%7!ly#-!pE*Y)6fK$DyFShSb7@J+g4s({ h*meIMc6iFn#qeN-Wi6W+XC2U722WQ%mvv4FO#p>{F+2bO diff --git a/win-linux/res/icons/tabbar/changetab_right_active_light.png b/win-linux/res/icons/tabbar/changetab_right_active_light.png deleted file mode 100644 index 1b9dc2e362f960b81b09264324bba9425a08cf1a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 530 zcmV+t0`2{YP)$(l`sY_jYoh}a4?7J`Ln z28E}U)nqfBv!N}&V=uF7Bu(;&& zywO4jUiuk{YqmKRiG-;;z8`R@dLK}|>hG&L+E$ac2Cin|am}>y!jr<`^}MNgN4Q%{ z$5(}qg@-LUpzw{-6D59CoGS6BVk;J%2Dj?zOI2~AinX+52oDMSjZ8r+pGV!qo6OG7 zN$r){hfS0jLik8fV2uoU0#dV*S#4ji=$j=c9!>rx8(88h29e(~IML41i}3es>+`=frV-Pod!%uCf(>PI8*~5`DL#`H!G;3ofoJ zT4EnAx1s0Bj9c-d)F9KX>+pUK?TgTL2d&Gctjg=0Jwj|#p6C`14q;ICcdq;a2!d!1 zT1zcK00009a7bBm000XT000XT0n*)m`~Uy|NJ&INR47wpV4y4b@ZrOMAa?lw|33pV zMg~l1dK`gx|HqFX9T;M1&07*qoM6N<$g0{QmrvLx| diff --git a/win-linux/res/icons/tabbar/changetab_right_active_light@1.25x.png b/win-linux/res/icons/tabbar/changetab_right_active_light@1.25x.png deleted file mode 100644 index 6a7c4fb73bdd889186b3fb1b796853275341b71b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 589 zcmV-T0$(l`sY_jYoh}a4?7J`Ln z28E}U)nqfBv!N}&V=uF7Bu(;&& zywO4jUiuk{YqmKRiG-;;z8`R@dLK}|>hG&L+E$ac2Cin|am}>y!jr<`^}MNgN4Q%{ z$5(}qg@-LUpzw{-6D59CoGS6BVk;J%2Dj?zOI2~AinX+52oDMSjZ8r+pGV!qo6OG7 zN$r){hfS0jLik8fV2uoU0#dV*S#4ji=$j=c9!>rx8(88h29e(~IML41i}3es>+`=frV-Pod!%uCf(>PI8*~5`DL#`H!G;3ofoJ zT4EnAx1s0Bj9c-d)F9KX>+pUK?TgTL2d&Gctjg=0Jwj|#p6C`14q;ICcdq;a2!d!1 zT1zcK00009a7bBm000XU000XU0RWnu7ytkOgGod|R47x;kiiXrAPhx|0~o^Hxg5ib zi#V5Kc!m%L09#K`ig44HG$im}X$tTgthI~xeorX@FV4g-j4>Ammk`2Hr5Tk>Xsx#x zBlH@GGBMJiDH9_N3ZzBh0#B@!XO$%9p!EDoQz%u&U&qcx>AflUL_(BDM52H bCw|Kf03BZ8#C<8U00000NkvXXu0mjf>KOj@ diff --git a/win-linux/res/icons/tabbar/changetab_right_active_light@1.5x.png b/win-linux/res/icons/tabbar/changetab_right_active_light@1.5x.png deleted file mode 100644 index ff205abd3193fb093eade66b47357c499f7c2e80..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 600 zcmV-e0;m0nP)$(l`sY_jYoh}a4?7J`Ln z28E}U)nqfBv!N}&V=uF7Bu(;&& zywO4jUiuk{YqmKRiG-;;z8`R@dLK}|>hG&L+E$ac2Cin|am}>y!jr<`^}MNgN4Q%{ z$5(}qg@-LUpzw{-6D59CoGS6BVk;J%2Dj?zOI2~AinX+52oDMSjZ8r+pGV!qo6OG7 zN$r){hfS0jLik8fV2uoU0#dV*S#4ji=$j=c9!>rx8(88h29e(~IML41i}3es>+`=frV-Pod!%uCf(>PI8*~5`DL#`H!G;3ofoJ zT4EnAx1s0Bj9c-d)F9KX>+pUK?TgTL2d&Gctjg=0Jwj|#p6C`14q;ICcdq;a2!d!1 zT1zcK00009a7bBm000XU000XU0RWnu7ytkOj!8s8R5(wy(?JS=AP|LN%Y8TS1bY8n zC+IASpnG$IAcj$&LO+Cy^wWxz`m<7s^4=dbwl3Z-I4Xo-wAN?N*-H1}XvdV2i!okx zw8)9X-pM@->bszYLGj%s3`%+@9D|Y|j`20(=LgzG6P^aAam$a!ktIk%rlA%x1@#aZ mqCdZfzz|KWm}wy}w9*aan}+~njGv(Z0000$(l`sY_jYoh}a4?7J`Ln z28E}U)nqfBv!N}&V=uF7Bu(;&& zywO4jUiuk{YqmKRiG-;;z8`R@dLK}|>hG&L+E$ac2Cin|am}>y!jr<`^}MNgN4Q%{ z$5(}qg@-LUpzw{-6D59CoGS6BVk;J%2Dj?zOI2~AinX+52oDMSjZ8r+pGV!qo6OG7 zN$r){hfS0jLik8fV2uoU0#dV*S#4ji=$j=c9!>rx8(88h29e(~IML41i}3es>+`=frV-Pod!%uCf(>PI8*~5`DL#`H!G;3ofoJ zT4EnAx1s0Bj9c-d)F9KX>+pUK?TgTL2d&Gctjg=0Jwj|#p6C`14q;ICcdq;a2!d!1 zT1zcK00009a7bBm000XU000XU0RWnu7ytkOnn^@KR5(xV(yQ*kaw-MoQ_U7q`~hi=AOn z6vY@Hy?61#OB9`f4^iZWO(^ofW)ykgX{%AvQG4s!+1YMdnH~S!u-1H_y57w yIWuYnkqPyH=n(aSXo;Qy5k*TWcl|UkcqL!s2Y}t2y~6td0000$(l`sY_jYoh}a4?7J`Ln z28E}U)nqfBv!N}&V=uF7Bu(;&& zywO4jUiuk{YqmKRiG-;;z8`R@dLK}|>hG&L+E$ac2Cin|am}>y!jr<`^}MNgN4Q%{ z$5(}qg@-LUpzw{-6D59CoGS6BVk;J%2Dj?zOI2~AinX+52oDMSjZ8r+pGV!qo6OG7 zN$r){hfS0jLik8fV2uoU0#dV*S#4ji=$j=c9!>rx8(88h29e(~IML41i}3es>+`=frV-Pod!%uCf(>PI8*~5`DL#`H!G;3ofoJ zT4EnAx1s0Bj9c-d)F9KX>+pUK?TgTL2d&Gctjg=0Jwj|#p6C`14q;ICcdq;a2!d!1 zT1zcK00009a7bBm000XT000XT0n*)m`~Uy|<4Ht8R7gwRld%oLFc3u#2EZ;s83BnM z$P#S8PK>}3(69hQAW_;`z}#0{M3(LInJ!QIO5xLgb`le<8t2@R^WqF41gfRPwzx8L zJPDxc@jQQ~6%$cZDBApJDJ4w;5G5liCCviR zBT)%JPEwoS)D~+ODDM2hu^6@1?sIeM6C_}RAtpQSeVWs0xyDPs(y2o#4*F1w#3#EeDd|%6U^~`8xOkJ8pw` TvP)S500000NkvXXu0mjfZK*D! diff --git a/win-linux/res/icons/tabbar/changetab_right_disabled.png b/win-linux/res/icons/tabbar/changetab_right_disabled.png deleted file mode 100644 index f60406fdae92db85e6ccd8041dce558e27a017ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 83 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=$0wn*`OvwRKQl2i3Ar-fh6~sR*|LC1KeZr!C gk*9|^>IK*t<~p&hOD}!C3aE;~)78&qol`;+04)g@c>n+a diff --git a/win-linux/res/icons/tabbar/changetab_right_disabled@1.25x.png b/win-linux/res/icons/tabbar/changetab_right_disabled@1.25x.png deleted file mode 100644 index c1e6012a0c8024d8b165a9072654abec29b808ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 196 zcmeAS@N?(olHy`uVBq!ia0vp^{2``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&eBex#?1V@L(#)jmVM1_ut7PPI4(%^w|CLx26B z{)0iAd%~g3=7H-UEmJx3j>#oSWa7`$$=?gC@6;weW6j$6bO+<#**R&^UYg2}R<5%C nvvAA0(96<7+{}Wh9A{ajPYTx@+;?Cn&=LkuS3j3^P68$Zl_ml?}{aAHljygf7g*bKkySmlj1>2{ooY)V@_j}n##XiZ~Tnjk4*`CPzhfrRoyx2;n)g?pLqxY(bgJ>TKlnyo_dCd}s- Wxv!7k7vBbS27{-opUXO@geCx`Sxkfg diff --git a/win-linux/res/icons/tabbar/changetab_right_disabled@1.75x.png b/win-linux/res/icons/tabbar/changetab_right_disabled@1.75x.png deleted file mode 100644 index 3262974ea3d470d0cb242460243508f2c7a5d288..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 203 zcmeAS@N?(olHy`uVBq!ia0vp^q9Dw{1|(OCFP#RYI14-?iy0WWg+Z8+Vb&Z8pde#$ zkh>GZx^prwfgF}}M_)$E)e-c@N`~*)I$B+ufw-*e#8Vq<^AGS9wy~?+@BUpX! ze@~l+$<9e^uNg(O7_FZ~GuuC8e0Fd~(5#P+-;1nWQo0QFE|j_J{;A*Lu9|jlPVvp^ tdZCMayiZSumNIdhN$9i*IJK=TW$d0J)^=veQ#qhr44$rjF6*2Ung9koKe_+_ diff --git a/win-linux/res/icons/tabbar/changetab_right_disabled@2x.png b/win-linux/res/icons/tabbar/changetab_right_disabled@2x.png deleted file mode 100644 index 345787db6064d5ba3bc75e58d1cd2f14b6438101..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 116 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM0wlfaz7_*1Yfl%)kcwN$3(OygKl%Rnxtb$$ zK&4W>1!vTcosFlGJ+B+BVm+Y}=&iF-Dk$(l`sY_jYoh}a4?7J`Ln z28E}U)nqfBv!N}&V=uF7Bu(;&& zywO4jUiuk{YqmKRiG-;;z8`R@dLK}|>hG&L+E$ac2Cin|am}>y!jr<`^}MNgN4Q%{ z$5(}qg@-LUpzw{-6D59CoGS6BVk;J%2Dj?zOI2~AinX+52oDMSjZ8r+pGV!qo6OG7 zN$r){hfS0jLik8fV2uoU0#dV*S#4ji=$j=c9!>rx8(88h29e(~IML41i}3es>+`=frV-Pod!%uCf(>PI8*~5`DL#`H!G;3ofoJ zT4EnAx1s0Bj9c-d)F9KX>+pUK?TgTL2d&Gctjg=0Jwj|#p6C`14q;ICcdq;a2!d!1 zT1zcK00009a7bBm000XT000XT0n*)m`~Uy|R7pfZR47wpV4y4b@Zm!m5KI04|DORF zBLgNhJzId-=i|qZQVci%iUxju{$~sXG@;u-P!om*5WuGis|KhdACM-fX51R^DaO!1 gNHK;6LW;=(0KMBbB|e$fod5s;07*qoM6N<$g1X}Cy#N3J diff --git a/win-linux/res/icons/tabbar/changetab_right_disabled_light@1.25x.png b/win-linux/res/icons/tabbar/changetab_right_disabled_light@1.25x.png deleted file mode 100644 index 16a222cfbf8306b74035d8de17d95d1aac8eb431..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 590 zcmV-U0$(l`sY_jYoh}a4?7J`Ln z28E}U)nqfBv!N}&V=uF7Bu(;&& zywO4jUiuk{YqmKRiG-;;z8`R@dLK}|>hG&L+E$ac2Cin|am}>y!jr<`^}MNgN4Q%{ z$5(}qg@-LUpzw{-6D59CoGS6BVk;J%2Dj?zOI2~AinX+52oDMSjZ8r+pGV!qo6OG7 zN$r){hfS0jLik8fV2uoU0#dV*S#4ji=$j=c9!>rx8(88h29e(~IML41i}3es>+`=frV-Pod!%uCf(>PI8*~5`DL#`H!G;3ofoJ zT4EnAx1s0Bj9c-d)F9KX>+pUK?TgTL2d&Gctjg=0Jwj|#p6C`14q;ICcdq;a2!d!1 zT1zcK00009a7bBm000XU000XU0RWnu7ytkOgh@m}R47wpU>G#u|NsBo@7}%B1JVrW z7#%QS(f^f&g@xzy=g(GHGrj7AV(!6L@S%*_0gi;L?F c7P&zJ00_cA8!LrwkpKVy07*qoM6N<$g2(g(d;kCd diff --git a/win-linux/res/icons/tabbar/changetab_right_disabled_light@1.5x.png b/win-linux/res/icons/tabbar/changetab_right_disabled_light@1.5x.png deleted file mode 100644 index 92d7cb84de655ea03c3596a4992b366d44113cb1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 616 zcmV-u0+;=XP)$(l`sY_jYoh}a4?7J`Ln z28E}U)nqfBv!N}&V=uF7Bu(;&& zywO4jUiuk{YqmKRiG-;;z8`R@dLK}|>hG&L+E$ac2Cin|am}>y!jr<`^}MNgN4Q%{ z$5(}qg@-LUpzw{-6D59CoGS6BVk;J%2Dj?zOI2~AinX+52oDMSjZ8r+pGV!qo6OG7 zN$r){hfS0jLik8fV2uoU0#dV*S#4ji=$j=c9!>rx8(88h29e(~IML41i}3es>+`=frV-Pod!%uCf(>PI8*~5`DL#`H!G;3ofoJ zT4EnAx1s0Bj9c-d)F9KX>+pUK?TgTL2d&Gctjg=0Jwj|#p6C`14q;ICcdq;a2!d!1 zT1zcK00009a7bBm000XU000XU0RWnu7ytkOo=HSOR5(wq(!mOYFbsgJ!>0000$(l`sY_jYoh}a4?7J`Ln z28E}U)nqfBv!N}&V=uF7Bu(;&& zywO4jUiuk{YqmKRiG-;;z8`R@dLK}|>hG&L+E$ac2Cin|am}>y!jr<`^}MNgN4Q%{ z$5(}qg@-LUpzw{-6D59CoGS6BVk;J%2Dj?zOI2~AinX+52oDMSjZ8r+pGV!qo6OG7 zN$r){hfS0jLik8fV2uoU0#dV*S#4ji=$j=c9!>rx8(88h29e(~IML41i}3es>+`=frV-Pod!%uCf(>PI8*~5`DL#`H!G;3ofoJ zT4EnAx1s0Bj9c-d)F9KX>+pUK?TgTL2d&Gctjg=0Jwj|#p6C`14q;ICcdq;a2!d!1 zT1zcK00009a7bBm000XU000XU0RWnu7ytkOok>JNR5(xV&@l?bFbsuZQJW5KjmI9K zdk&D^zf-T!19UMM)1i~=2g#I3kuv88qru|CnCNJ&*4icKJoHK2;X1K5L|^aywbnWc zJF7`3#TcKMR#-&Q9(WT)R#=513#>+w7B-=1f^VgiJGWy-`zs%Pd{RnpZpVa9V4J^z zOO0wlq(Utq+C;4&645;%^1|KOIrj@8yo8;jWq;}WR~@^ML~H;6002ovPDHLkV1geT B5#j&< diff --git a/win-linux/res/icons/tabbar/changetab_right_disabled_light@2x.png b/win-linux/res/icons/tabbar/changetab_right_disabled_light@2x.png deleted file mode 100644 index c8ba9bfc29689a3ac11dfb906e871fb0a7c3d3da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 667 zcmV;M0%ZM(P)$(l`sY_jYoh}a4?7J`Ln z28E}U)nqfBv!N}&V=uF7Bu(;&& zywO4jUiuk{YqmKRiG-;;z8`R@dLK}|>hG&L+E$ac2Cin|am}>y!jr<`^}MNgN4Q%{ z$5(}qg@-LUpzw{-6D59CoGS6BVk;J%2Dj?zOI2~AinX+52oDMSjZ8r+pGV!qo6OG7 zN$r){hfS0jLik8fV2uoU0#dV*S#4ji=$j=c9!>rx8(88h29e(~IML41i}3es>+`=frV-Pod!%uCf(>PI8*~5`DL#`H!G;3ofoJ zT4EnAx1s0Bj9c-d)F9KX>+pUK?TgTL2d&Gctjg=0Jwj|#p6C`14q;ICcdq;a2!d!1 zT1zcK00009a7bBm000XT000XT0n*)m`~Uy|(Md!>R7gwRl)nnXFc60?A`Utv;`2DU z`j$@auAO`yp&4}O67R4el>3uhCjH``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&eBewe3=V@L(#)kzz99TYiS`t2D6s-FMq{=@r^ z<=j(=Z)X&?g=H<(-`Q3$A%@R_&DdM%)7dw6j}P3{7F10;cf&RG^HX-E1430Bz5d^6 j4b?MpJ8aQo-?xnM`AwlbC6?zP8yGxY{an^LB{Ts5$=p3F diff --git a/win-linux/res/icons/tabbar/changetab_right_hover@1.5x.png b/win-linux/res/icons/tabbar/changetab_right_hover@1.5x.png deleted file mode 100644 index 0787de1bd2f61b31fd2acefc4cc14bd4e86ff22b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 190 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@Rf|&H|6fVg?3oVGw3ym^DWND9BhG zWO8gbgw+Zsyj99g h{dw7=wepPyGZx^prwfgF}}M_)$E)e-c@N{1{Ic$B+ufw^uguHaKv!K5S=ZSh#;@%n{x> z51tkARHsdNz4bys1!ufd>B;%p91c5^(|ldbYBt!|?)dHL(mT_7)5@&%AC^3f*s7f7 rI_=|S!xKRV<=Gy46|$61*{)|$B$0LC;fBXRdl)=j{an^LB{Ts5+Nna3 diff --git a/win-linux/res/icons/tabbar/changetab_right_hover@2x.png b/win-linux/res/icons/tabbar/changetab_right_hover@2x.png deleted file mode 100644 index 7321495554371a398278cdde37786872d81edf6d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 133 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM0wlfaz7_*1A5Ry@kcwN$3(Ox}e`bG3-?xcv z!6*Me+dVEE(&r8N*Q6H}H)++=XA7<|rA%7!ly#-!pE*Y)6fK$DyFShSb7@J+g4s({ h*meIMc6iFn#qeN-Wi6W+XC2U722WQ%mvv4FO#p>{F+2bO diff --git a/win-linux/res/icons/tabbar/changetab_right_hover_light.png b/win-linux/res/icons/tabbar/changetab_right_hover_light.png deleted file mode 100644 index 1b9dc2e362f960b81b09264324bba9425a08cf1a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 530 zcmV+t0`2{YP)$(l`sY_jYoh}a4?7J`Ln z28E}U)nqfBv!N}&V=uF7Bu(;&& zywO4jUiuk{YqmKRiG-;;z8`R@dLK}|>hG&L+E$ac2Cin|am}>y!jr<`^}MNgN4Q%{ z$5(}qg@-LUpzw{-6D59CoGS6BVk;J%2Dj?zOI2~AinX+52oDMSjZ8r+pGV!qo6OG7 zN$r){hfS0jLik8fV2uoU0#dV*S#4ji=$j=c9!>rx8(88h29e(~IML41i}3es>+`=frV-Pod!%uCf(>PI8*~5`DL#`H!G;3ofoJ zT4EnAx1s0Bj9c-d)F9KX>+pUK?TgTL2d&Gctjg=0Jwj|#p6C`14q;ICcdq;a2!d!1 zT1zcK00009a7bBm000XT000XT0n*)m`~Uy|NJ&INR47wpV4y4b@ZrOMAa?lw|33pV zMg~l1dK`gx|HqFX9T;M1&07*qoM6N<$g0{QmrvLx| diff --git a/win-linux/res/icons/tabbar/changetab_right_hover_light@1.25x.png b/win-linux/res/icons/tabbar/changetab_right_hover_light@1.25x.png deleted file mode 100644 index 6a7c4fb73bdd889186b3fb1b796853275341b71b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 589 zcmV-T0$(l`sY_jYoh}a4?7J`Ln z28E}U)nqfBv!N}&V=uF7Bu(;&& zywO4jUiuk{YqmKRiG-;;z8`R@dLK}|>hG&L+E$ac2Cin|am}>y!jr<`^}MNgN4Q%{ z$5(}qg@-LUpzw{-6D59CoGS6BVk;J%2Dj?zOI2~AinX+52oDMSjZ8r+pGV!qo6OG7 zN$r){hfS0jLik8fV2uoU0#dV*S#4ji=$j=c9!>rx8(88h29e(~IML41i}3es>+`=frV-Pod!%uCf(>PI8*~5`DL#`H!G;3ofoJ zT4EnAx1s0Bj9c-d)F9KX>+pUK?TgTL2d&Gctjg=0Jwj|#p6C`14q;ICcdq;a2!d!1 zT1zcK00009a7bBm000XU000XU0RWnu7ytkOgGod|R47x;kiiXrAPhx|0~o^Hxg5ib zi#V5Kc!m%L09#K`ig44HG$im}X$tTgthI~xeorX@FV4g-j4>Ammk`2Hr5Tk>Xsx#x zBlH@GGBMJiDH9_N3ZzBh0#B@!XO$%9p!EDoQz%u&U&qcx>AflUL_(BDM52H bCw|Kf03BZ8#C<8U00000NkvXXu0mjf>KOj@ diff --git a/win-linux/res/icons/tabbar/changetab_right_hover_light@1.5x.png b/win-linux/res/icons/tabbar/changetab_right_hover_light@1.5x.png deleted file mode 100644 index ff205abd3193fb093eade66b47357c499f7c2e80..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 600 zcmV-e0;m0nP)$(l`sY_jYoh}a4?7J`Ln z28E}U)nqfBv!N}&V=uF7Bu(;&& zywO4jUiuk{YqmKRiG-;;z8`R@dLK}|>hG&L+E$ac2Cin|am}>y!jr<`^}MNgN4Q%{ z$5(}qg@-LUpzw{-6D59CoGS6BVk;J%2Dj?zOI2~AinX+52oDMSjZ8r+pGV!qo6OG7 zN$r){hfS0jLik8fV2uoU0#dV*S#4ji=$j=c9!>rx8(88h29e(~IML41i}3es>+`=frV-Pod!%uCf(>PI8*~5`DL#`H!G;3ofoJ zT4EnAx1s0Bj9c-d)F9KX>+pUK?TgTL2d&Gctjg=0Jwj|#p6C`14q;ICcdq;a2!d!1 zT1zcK00009a7bBm000XU000XU0RWnu7ytkOj!8s8R5(wy(?JS=AP|LN%Y8TS1bY8n zC+IASpnG$IAcj$&LO+Cy^wWxz`m<7s^4=dbwl3Z-I4Xo-wAN?N*-H1}XvdV2i!okx zw8)9X-pM@->bszYLGj%s3`%+@9D|Y|j`20(=LgzG6P^aAam$a!ktIk%rlA%x1@#aZ mqCdZfzz|KWm}wy}w9*aan}+~njGv(Z0000$(l`sY_jYoh}a4?7J`Ln z28E}U)nqfBv!N}&V=uF7Bu(;&& zywO4jUiuk{YqmKRiG-;;z8`R@dLK}|>hG&L+E$ac2Cin|am}>y!jr<`^}MNgN4Q%{ z$5(}qg@-LUpzw{-6D59CoGS6BVk;J%2Dj?zOI2~AinX+52oDMSjZ8r+pGV!qo6OG7 zN$r){hfS0jLik8fV2uoU0#dV*S#4ji=$j=c9!>rx8(88h29e(~IML41i}3es>+`=frV-Pod!%uCf(>PI8*~5`DL#`H!G;3ofoJ zT4EnAx1s0Bj9c-d)F9KX>+pUK?TgTL2d&Gctjg=0Jwj|#p6C`14q;ICcdq;a2!d!1 zT1zcK00009a7bBm000XU000XU0RWnu7ytkOnn^@KR5(xV(yQ*kaw-MoQ_U7q`~hi=AOn z6vY@Hy?61#OB9`f4^iZWO(^ofW)ykgX{%AvQG4s!+1YMdnH~S!u-1H_y57w yIWuYnkqPyH=n(aSXo;Qy5k*TWcl|UkcqL!s2Y}t2y~6td0000$(l`sY_jYoh}a4?7J`Ln z28E}U)nqfBv!N}&V=uF7Bu(;&& zywO4jUiuk{YqmKRiG-;;z8`R@dLK}|>hG&L+E$ac2Cin|am}>y!jr<`^}MNgN4Q%{ z$5(}qg@-LUpzw{-6D59CoGS6BVk;J%2Dj?zOI2~AinX+52oDMSjZ8r+pGV!qo6OG7 zN$r){hfS0jLik8fV2uoU0#dV*S#4ji=$j=c9!>rx8(88h29e(~IML41i}3es>+`=frV-Pod!%uCf(>PI8*~5`DL#`H!G;3ofoJ zT4EnAx1s0Bj9c-d)F9KX>+pUK?TgTL2d&Gctjg=0Jwj|#p6C`14q;ICcdq;a2!d!1 zT1zcK00009a7bBm000XT000XT0n*)m`~Uy|<4Ht8R7gwRld%oLFc3u#2EZ;s83BnM z$P#S8PK>}3(69hQAW_;`z}#0{M3(LInJ!QIO5xLgb`le<8t2@R^WqF41gfRPwzx8L zJPDxc@jQQ~6%$cZDBApJDJ4w;5G5liCCviR zBT)%JPEwoS)D~+ODDM2hu^6@1?sIeM6C_}RAtpQSeVWs0xyDPs(y2o#4*F1w#3#EeDd|%6U^~`8xOkJ8pw` TvP)S500000NkvXXu0mjfZK*D! diff --git a/win-linux/res/icons/tabbar/changetab_right_normal.png b/win-linux/res/icons/tabbar/changetab_right_normal.png deleted file mode 100644 index 8db80e1aad1e82c8fda1ece51d8f31d3936d189c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 84 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=$0wn*`OvwRK(w;7kAr-fh6~sUMe_nn-@1cXd h=BZY}e+qmI3}-|5^4~pV3k51;@O1TaS?83{1OP`@7mWY_ diff --git a/win-linux/res/icons/tabbar/changetab_right_normal@1.25x.png b/win-linux/res/icons/tabbar/changetab_right_normal@1.25x.png deleted file mode 100644 index ea6ca5301419d0a75665bc6faa3d14fae5c62dd7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 193 zcmeAS@N?(olHy`uVBq!ia0vp^{2``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&eBewe3=V@L(#)kzz99TYiS`t2D6s-FMq{=@r^ z<=j(=Z)X&?g=H<(-`Q3$A%@R_&DdM%)7dw6j}P3{7F10;cf&RG^HX-E1430Bz5d^6 j4b?MpJ8aQo-?xnM`AwlbC6?zP8yGxY{an^LB{Ts5$=p3F diff --git a/win-linux/res/icons/tabbar/changetab_right_normal@1.5x.png b/win-linux/res/icons/tabbar/changetab_right_normal@1.5x.png deleted file mode 100644 index 0787de1bd2f61b31fd2acefc4cc14bd4e86ff22b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 190 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@Rf|&H|6fVg?3oVGw3ym^DWND9BhG zWO8gbgw+Zsyj99g h{dw7=wepPyGZx^prwfgF}}M_)$E)e-c@N{1{Ic$B+ufw^uguHaKv!K5S=ZSh#;@%n{x> z51tkARHsdNz4bys1!ufd>B;%p91c5^(|ldbYBt!|?)dHL(mT_7)5@&%AC^3f*s7f7 rI_=|S!xKRV<=Gy46|$61*{)|$B$0LC;fBXRdl)=j{an^LB{Ts5+Nna3 diff --git a/win-linux/res/icons/tabbar/changetab_right_normal@2x.png b/win-linux/res/icons/tabbar/changetab_right_normal@2x.png deleted file mode 100644 index 7321495554371a398278cdde37786872d81edf6d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 133 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM0wlfaz7_*1A5Ry@kcwN$3(Ox}e`bG3-?xcv z!6*Me+dVEE(&r8N*Q6H}H)++=XA7<|rA%7!ly#-!pE*Y)6fK$DyFShSb7@J+g4s({ h*meIMc6iFn#qeN-Wi6W+XC2U722WQ%mvv4FO#p>{F+2bO diff --git a/win-linux/res/icons/tabbar/changetab_right_normal_light.png b/win-linux/res/icons/tabbar/changetab_right_normal_light.png deleted file mode 100644 index 1b9dc2e362f960b81b09264324bba9425a08cf1a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 530 zcmV+t0`2{YP)$(l`sY_jYoh}a4?7J`Ln z28E}U)nqfBv!N}&V=uF7Bu(;&& zywO4jUiuk{YqmKRiG-;;z8`R@dLK}|>hG&L+E$ac2Cin|am}>y!jr<`^}MNgN4Q%{ z$5(}qg@-LUpzw{-6D59CoGS6BVk;J%2Dj?zOI2~AinX+52oDMSjZ8r+pGV!qo6OG7 zN$r){hfS0jLik8fV2uoU0#dV*S#4ji=$j=c9!>rx8(88h29e(~IML41i}3es>+`=frV-Pod!%uCf(>PI8*~5`DL#`H!G;3ofoJ zT4EnAx1s0Bj9c-d)F9KX>+pUK?TgTL2d&Gctjg=0Jwj|#p6C`14q;ICcdq;a2!d!1 zT1zcK00009a7bBm000XT000XT0n*)m`~Uy|NJ&INR47wpV4y4b@ZrOMAa?lw|33pV zMg~l1dK`gx|HqFX9T;M1&07*qoM6N<$g0{QmrvLx| diff --git a/win-linux/res/icons/tabbar/changetab_right_normal_light@1.25x.png b/win-linux/res/icons/tabbar/changetab_right_normal_light@1.25x.png deleted file mode 100644 index 6a7c4fb73bdd889186b3fb1b796853275341b71b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 589 zcmV-T0$(l`sY_jYoh}a4?7J`Ln z28E}U)nqfBv!N}&V=uF7Bu(;&& zywO4jUiuk{YqmKRiG-;;z8`R@dLK}|>hG&L+E$ac2Cin|am}>y!jr<`^}MNgN4Q%{ z$5(}qg@-LUpzw{-6D59CoGS6BVk;J%2Dj?zOI2~AinX+52oDMSjZ8r+pGV!qo6OG7 zN$r){hfS0jLik8fV2uoU0#dV*S#4ji=$j=c9!>rx8(88h29e(~IML41i}3es>+`=frV-Pod!%uCf(>PI8*~5`DL#`H!G;3ofoJ zT4EnAx1s0Bj9c-d)F9KX>+pUK?TgTL2d&Gctjg=0Jwj|#p6C`14q;ICcdq;a2!d!1 zT1zcK00009a7bBm000XU000XU0RWnu7ytkOgGod|R47x;kiiXrAPhx|0~o^Hxg5ib zi#V5Kc!m%L09#K`ig44HG$im}X$tTgthI~xeorX@FV4g-j4>Ammk`2Hr5Tk>Xsx#x zBlH@GGBMJiDH9_N3ZzBh0#B@!XO$%9p!EDoQz%u&U&qcx>AflUL_(BDM52H bCw|Kf03BZ8#C<8U00000NkvXXu0mjf>KOj@ diff --git a/win-linux/res/icons/tabbar/changetab_right_normal_light@1.5x.png b/win-linux/res/icons/tabbar/changetab_right_normal_light@1.5x.png deleted file mode 100644 index ff205abd3193fb093eade66b47357c499f7c2e80..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 600 zcmV-e0;m0nP)$(l`sY_jYoh}a4?7J`Ln z28E}U)nqfBv!N}&V=uF7Bu(;&& zywO4jUiuk{YqmKRiG-;;z8`R@dLK}|>hG&L+E$ac2Cin|am}>y!jr<`^}MNgN4Q%{ z$5(}qg@-LUpzw{-6D59CoGS6BVk;J%2Dj?zOI2~AinX+52oDMSjZ8r+pGV!qo6OG7 zN$r){hfS0jLik8fV2uoU0#dV*S#4ji=$j=c9!>rx8(88h29e(~IML41i}3es>+`=frV-Pod!%uCf(>PI8*~5`DL#`H!G;3ofoJ zT4EnAx1s0Bj9c-d)F9KX>+pUK?TgTL2d&Gctjg=0Jwj|#p6C`14q;ICcdq;a2!d!1 zT1zcK00009a7bBm000XU000XU0RWnu7ytkOj!8s8R5(wy(?JS=AP|LN%Y8TS1bY8n zC+IASpnG$IAcj$&LO+Cy^wWxz`m<7s^4=dbwl3Z-I4Xo-wAN?N*-H1}XvdV2i!okx zw8)9X-pM@->bszYLGj%s3`%+@9D|Y|j`20(=LgzG6P^aAam$a!ktIk%rlA%x1@#aZ mqCdZfzz|KWm}wy}w9*aan}+~njGv(Z0000$(l`sY_jYoh}a4?7J`Ln z28E}U)nqfBv!N}&V=uF7Bu(;&& zywO4jUiuk{YqmKRiG-;;z8`R@dLK}|>hG&L+E$ac2Cin|am}>y!jr<`^}MNgN4Q%{ z$5(}qg@-LUpzw{-6D59CoGS6BVk;J%2Dj?zOI2~AinX+52oDMSjZ8r+pGV!qo6OG7 zN$r){hfS0jLik8fV2uoU0#dV*S#4ji=$j=c9!>rx8(88h29e(~IML41i}3es>+`=frV-Pod!%uCf(>PI8*~5`DL#`H!G;3ofoJ zT4EnAx1s0Bj9c-d)F9KX>+pUK?TgTL2d&Gctjg=0Jwj|#p6C`14q;ICcdq;a2!d!1 zT1zcK00009a7bBm000XU000XU0RWnu7ytkOnn^@KR5(xV(yQ*kaw-MoQ_U7q`~hi=AOn z6vY@Hy?61#OB9`f4^iZWO(^ofW)ykgX{%AvQG4s!+1YMdnH~S!u-1H_y57w yIWuYnkqPyH=n(aSXo;Qy5k*TWcl|UkcqL!s2Y}t2y~6td0000$(l`sY_jYoh}a4?7J`Ln z28E}U)nqfBv!N}&V=uF7Bu(;&& zywO4jUiuk{YqmKRiG-;;z8`R@dLK}|>hG&L+E$ac2Cin|am}>y!jr<`^}MNgN4Q%{ z$5(}qg@-LUpzw{-6D59CoGS6BVk;J%2Dj?zOI2~AinX+52oDMSjZ8r+pGV!qo6OG7 zN$r){hfS0jLik8fV2uoU0#dV*S#4ji=$j=c9!>rx8(88h29e(~IML41i}3es>+`=frV-Pod!%uCf(>PI8*~5`DL#`H!G;3ofoJ zT4EnAx1s0Bj9c-d)F9KX>+pUK?TgTL2d&Gctjg=0Jwj|#p6C`14q;ICcdq;a2!d!1 zT1zcK00009a7bBm000XT000XT0n*)m`~Uy|<4Ht8R7gwRld%oLFc3u#2EZ;s83BnM z$P#S8PK>}3(69hQAW_;`z}#0{M3(LInJ!QIO5xLgb`le<8t2@R^WqF41gfRPwzx8L zJPDxc@jQQ~6%$cZDBApJDJ4w;5G5liCCviR zBT)%JPEwoS)D~+ODDM2hu^6@1?sIeM6C_}RAtpQSeVWs0xyDPs(y2o#4*F1w#3#EeDd|%6U^~`8xOkJ8pw` TvP)S500000NkvXXu0mjfZK*D! diff --git a/win-linux/res/icons/tabbar/portal.png b/win-linux/res/icons/tabbar/portal.png deleted file mode 100644 index deaed8e8609e58eb6ae52750b9df944114f8d0ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 278 zcmV+x0qOpUP)6dx0002pNklnMAkQ49a?O!{cX=GMFSXz;<_&l+nQKbKD}zD0RbAH#~!oQOXB6 z0~>ji(cl+&}8yDs!b!iysn&7rABA(g>-J8`UUjy0CB5xVlYs ziEU?^QIgB-s>CNl<{a3P$)n`munlQ^bE<2^Ta>&THg7V%NUYnF=|{=6%$QXJ5e6-q zG2~btB`udy4J)RsnN^9<)sB*?M;$w!J!wc)9C}cVA8HEcG82{@DLkshZxU@iuU_@E cCGjsl029Gcz!Wz|AOHXW07*qoM6N<$f>DrhvH$=8 diff --git a/win-linux/res/icons/tabbar/portal@1.25x.png b/win-linux/res/icons/tabbar/portal@1.25x.png deleted file mode 100644 index 2a077bc4475c5d18095088c624a6527106ac2b30..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 654 zcmV;90&)F`P)u3-aj{+H6e(@W)MF)owB`b|~ZfE8{|DBmVm+QVR_c%i)llkiLc)p+} zkO*>&G>5}ssa~(o-w7<0N@+fyZ%KkjqtV~NV6e(M<~-u{dQ)zQg|zvo~O}M^NV)>sf${*8x3tCjo-ZBg7>83Hu~hEo8IVnOrXSO8Er>ff7l! ztQ$C)sT%eB{hwrw)@rqevgPynXs6TB#lPKduY|+lC}3|%_`_bqOJ)KjH4-4McxumB zE|-r0U%+Q47!1w;kmmS6{H-Qky(Wf)6dUzQeeA1JscgVz8-Nn~gyo-bfMJYC*8n|4 ze=-gbdzh^&e&X-C7#jz(^Y(N97MUlL$z)&**z<0;JB9i}{9PCG=U~>9IkG+*p-@P- zgAn+Dt`_iHW0};gh5t89P37ZLigX1=MMhwq+B69Kk3PrwFU}uQpV!E;VHleh!xq~= z?7tO;S1G1xHe<2aENWWQw8tbm|6fX}#0BL|ZB*0*V2 o>P5)>$=FD@rAfE_HSX^^1I^JbGSjM~q5uE@07*qoM6N<$f*z_M-2eap diff --git a/win-linux/res/icons/tabbar/portal@1.5x.png b/win-linux/res/icons/tabbar/portal@1.5x.png deleted file mode 100644 index 892a94c214c33105bbe8cba76f4f50121547f157..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 443 zcmV;s0Yv_ZP)WA8_D%Mhk>CJY9$t6%fi6e3(x#;U3uUG_y!da1!osNTh8gshCvPC%dMpSy8vSHXS zo?(M`tKT?wD@Dn862j>cYr4^h0xDoX?qLzMx65-n#exq!cIOP)QR2gKZuEFMp7`Fa z6pIW$&2eZ>tX4*|pRY$KQTb_6^vnmN9xkvJD@u@I>0W_WP&NpD=kcVS-r|!s;!UKi z>te9w_V}qr1E!tsVPamCW+pop+>pzRm%cWUaqE{7p3%LrK`xPjLe=ISB??^<%Gd~) l1C0uj8Yo>7g@*2Md;?F@ueIwYZCU^T002ovPDHLkV1fyc!%YAH diff --git a/win-linux/res/icons/tabbar/portal@1.75x.png b/win-linux/res/icons/tabbar/portal@1.75x.png deleted file mode 100644 index 7b4548907e7e1785137809f91a04aac388693142..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 977 zcmV;?11|iDP)vQCJ?e*O|U0wRX!*ibVJm-ARInO!g(X`_>Y)4%Phr@1% z!!Znb-Db0OS1J|Ho}kT^hEA8uM>&&d8h1YEm8JnMMf_E>pmI}C&^Q7QKM~uF{ zzA=_~EwCz}{{H@y0;wQWW}RUF6FRrMyPIL31UP90hU^ROK2%^AjS;Y$tctS?GQV*7 z6y8iC_?mqNy2RQ>s3IPZC*bq>a+{l*8KZnhN5?ttyC5%dufX|Il}8dX9$&mkFDxvy zMR}H!_hhbS!u4hi0-EPlm z7GrL1?rScWd&b=jr_(tS3!+1-1!Xc z4TVCjqDxA}%A-%R8dDOUWR;)#xM>E7#bTjCq3{H9O%g(Ql8MM9T`t#CW&D(W-=Pzd zl7uRb>!ZZ^gVYf9l7apX?=2zPLhugr3};tpF_M+9%mpoNit}3vXi4Yqx1e-7o%edZ z@*dKHg1FsEONj!~&c2Iz8f&kz|AB&O0A^CD)VA5v&d$yemTSy$?(Em(fu<_&gEilz zrT`iyH1CDq)YNpA{XOP3Aku7;04|HiMtR!S5NDHm8#A6+eiMKtQ~_6gW|F>~`I%jc z^;;Ep7=R%GA$&)F6J{_;Q3S`OHJLxYXf%2m#rK)F*`BNgQWHoY`e$ZfS$^dJWYsVH z+-yu;K)QF**`?{KxAW`?;;Gc0l!etdfBeTEX!rC2kL_V800000NkvXXu0mjf$J)f% diff --git a/win-linux/res/icons/tabbar/portal@2x.png b/win-linux/res/icons/tabbar/portal@2x.png deleted file mode 100644 index 93899854681e02524fb96c60e91000db985e8361..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 570 zcmV-A0>%A_P)6&+lpP=wyk&D$!3d(Q=EGo{iEF-pK5fG#Z->) zkZ*kCDu;#3tt@aOzfg|b5@}XN(2jgS@q=yjBZnX&DG_QL-%)&|PkGQWSSYU1)ukz5 zCyG+Wl?Cl3%3u7@@L7zYB`G%jGSQaO%e&T(DDI#*LpI6Op$`j~N-cbiMJ%Uv^6uK% zfMN%W8BNe%nIE;8$pn%$7r+{}quAtxW@GW4OcoI9(D>4fCDb+GOul20Z8w>MVuSqG z5a2FJJ8eiT3xr;eVv1dT7)1{a4)JVeBFnkPQ=z(}IBZuwLLtepKM+ zM|RaW6v29>YkNZd`NkbC;Y$#T?{09U{97@|J2DTr$vkQquq*8%`Ny+_P!DL1$m6KZ z6tA?8py;lt;dF69W0_BVz3vMbrW@v3s`Z+RV+lDnT{?4UVd&nRa4%I37C$M{bbaO% zYvf^cW(f`c+O-iYiyUWan^4@K4>gFR1uyu*9)`12-njp)_L=SJc`(*7h6SwUId8bj zc@k_klf4gyu16oq$)-h{`Nm6=iND-&EW;9u-sKO29TXToj@BlV4P4j5U_!-X=sWA_ zMh<~;=LogljG?|255P@W9s_U_SydUmkN6??BcY~}=Tm*I-%nW?0i$YEo&W#<07*qo IM6N<$f|K|L-2eap diff --git a/win-linux/res/icons/tabbar/portal_light.png b/win-linux/res/icons/tabbar/portal_light.png deleted file mode 100644 index 0a2b8589e0c51c8cd3c7cb335157b024e1f49b7f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 285 zcmV+&0pk9NP)6dx0002wNklFp08eGYHn93r8`CU@*y041Tn2Nd%)ov%h0S6f75ru&}|xF^I~d z2>yUAXtQ|cG>Lb;cs@h;OXOX6(%08fm;Z?+4<4_V@1TnHg3T6SVjqMh-F2|MC&*rk?9@1wk8Zn(*|BZ+>-9f@gM z#zHV|&7z|7@8)&4qKZxPs+QzJ(9+1bpr`4;s}~hf&Z+0&VIe3dKLC~uHhlDoma@op)z$YjTxTv5u z5rHvnYF7=K=G(rfW@4-{TK0nW4&I_iBraT zjvW^SVfS0GWHLEyHk%U=WdLH8N~I8qMC3#w;dD409AHu054Tz^J{%6;41^KLVzK1A z-R@ufoNu?=qQ~R8Wm&ea)yrnHs{lqn0*zWF0>SfdC`v}7@yTYhjg(5ISr{)N?QvBP z_i;G9R5JJ+nOY+#Et^axS0E4&)o-FGx*Cm!(CKs-qaU$Ab2l58) zR*;$lEiz%Z+xNX*?}d^sWv~r#Q)TouEdXaY?ywKBsc!4!8AfYvxBEofyt!O13g9Z* zg4Ko51fUi)0kKdhw55#D5Tc$`qNmgzQ3gNc1;~99pgWrcL^L-9MPI$nW;&f_0hz+x v0`(X`kuPUcyVQv=y!Da#YG3|q{M_{d?gcV{>EdqT00000NkvXXu0mjf21OjT diff --git a/win-linux/res/icons/tabbar/portal_light@1.5x.png b/win-linux/res/icons/tabbar/portal_light@1.5x.png deleted file mode 100644 index 254c7a5fad159cd0711da8febe35b0b6d83dfadd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 441 zcmV;q0Y?6bP)Wtc^83WTNLpW-=3l?VV9T@ym#@A&x2Do`^1u zWVY;B_#Kr{9>3l8xP6|lc`Fbmq-mKmL3Ci@<{bB6Ri_Te}+dNNrIeeYI^ zBg0Qq9GVlWmD2d<>mEv!ep(bg%Koy0GpxmmVx*Y6SD+P?4T9f!JZPua_@s?^5ec_l z47S`JKUJu4q@C_zXkL`YCOZ~flgo^kz9x~q#xKP(rCVczTp|O7vdKFN!U2M+HAJwVzKDn6SUb+9?NZEbCaMZuhQ}>l=JR>Km3OuZAcd-`Dt{ml znA0lIIgi?j?Z$^dh4u;He_8w3d`p)TI9e4zTPc8Mz zX@D`SSrEdDnM~#h%jH}ycQ=tpoYH0Z&PnmGc5Q8KMN2}*VY|!}!mz&QbUH18gd&kh zmU12;cMAeGF)wqsN zCBCwe0=<@=#r~a0tC&Q`#zVYt2bawW9 z3;{}UR{5DQgGq@>7&bOGhRqM(%*@PX&Tcaz@SQ9NQWi)jL(X(6_ms#h`Fv--^9kYq8Cvxl_sNt=uZ`)q zMW~N7@U9tgUR2!Gx&-W~AEL7R&dF)A)(+>~R}xL?Tm;swBARfbPU1F?L{*m;fSpk_ zqb!wIyMU!*2&%q<2hi&r*0w;g;&UL%e;G$@|V4Z^1DQHeXMw`Ag+2f*9f}qRsI<(nYoqVo6M@4US+9{*m zS3f=0<)$u~KU6$PY0ue@aYwhj+rIejgO}FV6wtfC#|S}(su{h>72PxCTcV^Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02y>eSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E;2FkAZe8V00MPML_t(oN3E32Y7{{fg3xx>TI1nNtg5X9F-1!1NflnalLNpsOf{Q?eK*&NDZUn){INsB#>fBp> zr>8pYfsd}bRh)CXr)rA-pvxWUEYGwJo#mOfp|d>GHdxJOvv&bk=9w`T3Q#ZBxFtat(yqptgVHTmN6U-ha1!B^p9?WW7fE)_Xg@>Pz==Lu$(G2 zteW6ckG;KuFBRMrPI;zP6HCI0FA0sGoz%{Rl4n|dcH*50MO`Xf{{)MgsF~{DJbsCW zCaf3~0;|u?aj1Ds7(?&CEos6^Lf-4}sL({tHQe=nbJnu1;Te<~wxzQ?(>8RLXWE9& z@=V)M+~@*;q6?I3oQr4L2Ff+gB{e+8PkGo{6O?P5i#Gd)16;&)+{8VZ+MviD_T_Op zr;OofH2Tu-_aCHn*0`3|wHdjFsSJ9!gB_XH*Vy1b4y!fF7)sE5GMW6i7)bG?^D zqsR~Z!X>QAq=$!iAthU56LBx0j3H4?%=OsYtIZ;OL%t~kxAD9h-@<)awtK0XDT%>N z;UqPTe86X%$5om1N;dIC%61Q-Tw@6>KYM7Pb|xa8DS3@IGB^o8hbv%1=^jGWOk+6T zoHRAznLfiS8JvXQ#=Ly;XW%VK_fp1ChpXDcCQ`#KJe5HY7qEi2_$Vb5kMXjs@gVX* z#=V3xhH};Rba;fdW!G>WTV)X6Hofn6@u*x|!Mdqa#;`5X=sS+eV7}#|e?#5^ei?lp zDAzcbXhe4LRUW5vkMtZ+u5m8f>?}~OaW0-|J}CYH3uCv#TkY0900000NkvXXu0mjf DY>#4J diff --git a/win-linux/res/icons/tabbar/tab_close_dark@1.25x.png b/win-linux/res/icons/tabbar/tab_close_dark@1.25x.png deleted file mode 100644 index 4a404481d02b09b4937e531819d9a677262e5276..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 792 zcmV+z1LypSP)2vZzNk(P!B;1%LW@N@72mPnZ@5lWdf!IdkN6r>3fP(<;8 zb%5e@d?YiHi8jma&f301SmH0Oj@{ea{q4uh>=Iz!E6qGqkR7<59$>v*k1e8RdXQtEXjS7;7>-YQL#KsJl4y2G8a65o1ND2-W zUh5#4C@I_fG4++l?7=hdXF>K}Y`S+By@{nLSA29;S z>S`ST_yM^Tr}+f&_?1{DOE93aSVsE62k3ZUJt*N4zhvI3$2`<=i65&Sz*sD1GEHSN znH2L`{{f~!wOZ{h_^uP`!$P5OQZAP-?lYi=2qVcqzjX_Oqg4+sFD-~DJ@DublfXfQ zXpKgr^J|ds`kMI#h?>vmjtY{8gE;)%rA>bURgfBR`vG)=guNEmfb$%XbksO&aAIlU zv0noYwSPywy_3M@iS1j;TMNJEFpo0{kMqG`K+U3OlI}s#ASmnR)IHCjM5T!Buf^NYP~5a2kD z-EOyk1Cds%_0zWPThY8mqj8IKdE;Dx{eC|_ole6j2@Ib~rG|&YVFW~WyWQVhE;oph z!0?4a;SbK`%`tfc%jME7m&;?rFov~SZ9JdPT?h%!M7yKW=pXR0!rol3*IqiEe$40d zgG?s#=(?^K7Jju_{g_Ut|A8tHB|!+!6^N3M4UZTg0R}crbC^gZx-2vh!Xv_O;@7|f z-}fKbas=7%(gH|80tn#|sjb9C0yD{mM@VfH!?VK1Cjc>lALu!mOiKTOlt6IJACJeb zs5?;!u6g!)5Ot>@rf9--!HT+52o^|&$7LhxP9ygI0?z}XyT$Ex z>$5HOq*N;P*|}h{*=+pa_$B;evFNe0z*EHkc!n6^3LrcQLU=@-0CFvn&1Q3i@JOrz z(pw4q)Y%cTk5?;%@W{v6N?h)R*aa7S6r^sDf@>as$0xyl^k%b}>{EyhVGUdttf)JM zpst8{-G(TkMnKdm2@tR#^dp- zMiO#YS64qUhwXgKcCgp$^>1%)8<9w)mP{raold7u3^sD+4^*nx>%Uwsb9N65hr`j? z+1bnGzirpV+y+Y}nR39f9h6FP9B|xD za3#5NV6PzXk`&4TXWvOLNr@cr6a;RP3OV3-UEn4ul>-qH0HIhcR*OcXB_l-&Il%5k zUxljU@%Y(PWs=GPks#QTB!wIhHQO6W^KC>b2UML5(+seR4A?Cw+GcbM%5JGLPghP4bcOU-Zxk z1rHsoU^bimoJytcNl7A+xW^n60IY(e(WrTSeO=K=LhkPFu7Wuz0N`ojO>a1zPRFL< zZrO@0bd2h%{EreymzVK^}Rw41i#td>`jv4B4*Uph&=!R002ovPDHLk FV1j}geX{@n diff --git a/win-linux/res/icons/tabbar/tab_close_dark@2x.png b/win-linux/res/icons/tabbar/tab_close_dark@2x.png deleted file mode 100644 index 75b5ac468cedf3aac24e0adfdfa36f5d954a4f2e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1307 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLCF%=h?3y^w370~qEv>0#LT=By}Z;C1rt33 zJtM=93Yk-Z26cP7IEGZjJ)LnnOT2Jx#!dw{CvhQ*GcUQe);nBnZL|BA%3MZ zLQaOXdrtMi&R8PZ>y|yM^sLl zW476QNNFq0+PJJ((BRmyq;tD+{SGc!<|tS*ZC~CKou;YxH&`Z{sd-5KRoEX;B>1c6 zYeLXvmext#7t+^E&kH!h<=XwUr}MxPsgs)1jMXOD1f1yF%C+oU>VYLuo}xZ)PkY#D zq_Hk{y=f*rk9+c>L|67{?!OwF!mfzQ1<4t#%s6z2`Lyz1$3X3#N6x31)u#6B=Qz>u z$)i5tn%Db%tPX+NZ@PZJ|NnkH16S0=%*1VH+nygD?&4I`=El+@Ixap#m0c#b9UJ=Xsb@HE1?tS#&g{9tgsm~iY zHXaRT*L(Iz{8dzoU2^Q1#jIU(rp@kET6adcGI#N;1U|ms1%9t=7V*WL@%P&pc}n@2 z!0?>pSwRDaw`COsnt_-&Q_Zwxxj!=%W}4LDL#LCFJ)rD zJXzi3%B=Z9?y@^1xV5d802R!Au;F;Bp-!b&o{v!8c};$x-lIZdz*Jz^uT#L3(q1{E z`_qNAlEr*6I->Q0ZByLOC`-${+o7`Q(FxYd3$N!n%I=8JG8JcdP~GpX6y4zcDI;C{ zfPR1Y|Gzrj334|V$oxCKW{>y$*=oQ5(MhcQb9URtof~Jko9)o$);o8Qs=#o% z-O;p2md_qd(Kk1U=(W#(I=lCW_c`C-4v?G_zq8%OPdncC3+~Q5B=|Y7Us4_vA4}!i zYt6ozh)p~2-754RNG@2dE~gNhG#WoWyt()FO*@sc%Prb1zqfh-eYVm^hiThW_t)PU zWG>a7vJSYizvNNzy%*vK7xKld2|2U4_5W(VJ{B24=L5-xcIta{R)G`bf&{?=6&~I9 z9R3XsAVX%ji`2-L2?3q3G)eAi0J~n8*0Vrf2zRQ$Pv#Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02y>eSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E;2FkAZe8V00MMLL_t(oN3E1Uixfc+#aA)(1Blt`1%jb? z7#JKF2#0}!!X+MvA|ePTf?(zsklox*AZQ>uu!tuZ94H8ffd(dmAZ)zB1`E%6bKP@Q zJ+-slJ3jc)-PO&jn*K9`|De-7=`GK+gx>N@OXw}nv;->vuZ4?Y*oZOCg`t))oXuwM ztE$>gp>iwik=VA6*3djB!q{4Yb8XF`@2<=~Ss< zQv_Sx_tpx&RN}7WlxNx$u_8I~B}wD9lh&P3@=Tj;C*GYw@dYPw9+z-KhBi@T5Bt&_ zjVWU|olZZFMx)zloH5R&acxG<;fi#IxQ4qjY|pX4eSB-?C}TJtk9X(u`CnZG`;2i; zuO-na@&mtcO8(|7;vSw#$i`SiTuUfpNMaFeb>Ca7%_96lekl{)!IP$c8MkEGuBBS0 zBqr`kPEy0jTYSKAoRz__<|ZCW*sdXzYaF+ocy}V=nUWWHDV@XQ$8ZKLC|yISmZ?7T zxD(5Y@Jt`$xpWSbU&U_S@)-C^(zTQ^^e$Xi5vk!09!Y126WG8jyps?H5Advx@gnj< z#JEQLd zSXqSiup~j2=0000ZM%}qU@*8MP|M}=h9rl2 zedyIA8LoG-O&&;@r5)ZMkH^pTdi@Z+pS9TLa5#MF1KlO|td4sCT$WABu>@)0EH-Wc zzyXvCqyT5{2w5OVbSWoFNk{-Lzhy;%KsX}dJu{FXoZM3*U{LW8Pz($S!l_^BgZiK? zt&obUj1-&5A=OP)7fCX$AS4Fo0O{1{07z#5=SD3Rga8?H+&N>^b!~t=w$N%dkUSnq zh+vmMSw1Xcjx!uuSH>JxE%Gl#9@TuX78R$sPk!}A9@V6{s8WDI5L^2&(8FO%_j{LELr$G;bg#pJYCiNr?D#c+Zo5bl39>UQ3yi5^Fe|C@AInPOJ0i-b@( z2gq^(Yu%{z*b0CY#vt`PexwosQ*DOl@oKf&ArJE$-fp+wiQ8V=O!L87RJ8~E0SI4f UTqst!A^-pY07*qoM6N<$g3;{uJpcdz diff --git a/win-linux/res/icons/tabbar/tab_close_light@1.5x.png b/win-linux/res/icons/tabbar/tab_close_light@1.5x.png deleted file mode 100644 index 32cab751fdbaca2fa679d7bc02eca04d4d2de9ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 609 zcmV-n0-pVeP)z_A8QV-1*wYaou}TNW1}0c%*?0g)gG zx|7M|TvmrQo6V-n%ZuK?D~qwnM3Nh`@PNpAy`HsNttXKQ%r%?MXW#c{un)=X21O=B zxf~Td% zV48zBfV+?jdRc--Yzvvj8ZgcA8ko=Lo#AkJ1`@Dlu~>A#5L^SE=Pi4^-o3~K=CEcu zood}GWw^Xx0z2F7_6tW!E*IKysU`^GwHr8<6$}Q04>t6%RdB@r@Od;E^^=@Yl&=zL zzvDAeyuC_@khTz#&OXjO{!ZJe3@s!zkQJX1+%J=fj9pyvKGM> vYcv{ey=&77tO3(l1E%=~zEBj`Jr$nV00000NkvXXu0mjf(AWXO diff --git a/win-linux/res/icons/tabbar/tab_close_light@1.75x.png b/win-linux/res/icons/tabbar/tab_close_light@1.75x.png deleted file mode 100644 index 3843c8bd49b9e5e1e3e0c8f1feeb6aad8d6ec455..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 732 zcmV<20wev2P)moP8gLg=Cg&)w@N1%e+!2m-IwwPSb|WV;xMiU?i0hrH zq@ia*GI2DZ2_pHO5<8_u3UG8_5G2HrfkC7Y#{&kC5*!P-iWK6!SnOof7nxF-!(V3` zLv(rPB2xk?wb~&FgSFjm_W~S<7U=ta zuUszQN|0ECwXIgm>TGGsK4|ua&1Ul}olgHC@r>_*kR`5OuUD$o>bs%YCs>RYh~XlM zIE))W3>C@1VcY>?!jMcH#w{SmgcRT~R)Gi9h6_LiL3qZ`1UTzqZ?>0r4POg!$!2?# zArDc^>TeF;FNdqkLzE0OOehuCk)&DFG+PRHJZ>!$VM~Dk=?;*(&M}d00J)1e1G#;m zaEC%gS_NtsdVE;L=Q-)jh+j}XpFhdva!;DeRu}r@Z^O7J0meN$5Bvu8Ab5Irt3;*% O0000&f diff --git a/win-linux/res/icons/tabbar/tab_close_light@2x.png b/win-linux/res/icons/tabbar/tab_close_light@2x.png deleted file mode 100644 index a9067236602c0089ef29bf773cc4c0ab36ae4a97..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1333 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLCF%=h?3y^w370~qEv>0#LT=By}Z;C1rt33 zJtM=93Yk-Z1}*h;aSW-5dpaZAPsCBA^={+;yA9kQ%nRAq9NfTMzQk?u#S8`V+CI~3PJw`s)bXWE~V9S^KowUKkh#wdf-!*(-PE)-zV-?DGtJ?>1V zEU=m^txt>BKW6)6##kK2yk{#P(4@Qt%hZlsvC3j|47ryevDs2UO3olywUs4XQjUwc zF~me+-*!U*VW61uC)PIta$M{OLzXUBw(TLKvFp*MG9Lb;jSX7n1=Bw?%v=>}T5$YB zfDOkgt)^y>f~Qk&vs_TL5$XST?(S`dzqPx|xfK?y61j0@Dd!oHP*a<_wB($%?uiOB zy4a3>H)BhheZZ&pg!q8>PE6nE8yq+mbziO2BR{cDY z_v?Y)rIUW1Xsdc~Ea+rS#ZNuvof`a4*4AvD_}1CBAbDkqT~?*8c9GMvryX*7{wI6> zOyQk`GC5T%XCqd3!cQo^vpJ zy5&sXRk`WWpImMSf)sH1`uWMlMMuBx?d_FK`RudesMMO&&+E>(>;A}&pZIg4T0-`f zLSHerSN7ib(@w8o&s!tVv|z*i_x4=y=!{voj`L0Rn|gBrJMj+>BT^lwd6!;TW3%~Y zAkckbCwQ-1X_;}$X$3E1^{)(7iElshYx_mkWO( z{e!@@qZ<_WKk2!n$+~vm+l88un?&nCHZRY5pa;~`+xoUN{P`Do)om^uz~KITGM6bs zT5i+yjwZ2w!$IlP`iqqj&lJ2orutV3u0$Am>ND< z_-vBRl7q3aSC2mz0J`UymP*2HwFP!;Wfq5+FZKMpp8nVu6rKS-8_awiay51cthD2M zyr89=wZ%QToNue|bPb>@w6_TJIWxH5dDZx0$sN7e2@eWd47V?PDdY}ej(pczJxu#HY=OVcs8$*obw>~gA-gj`Hvfi^B zs$A7hAwZ{U&E(hj{#5rmqg$XHw}_40sw}uJ@uwIJ&|A0k*;>2^QbP0l+XkKpABEB diff --git a/win-linux/res/icons/tabbar/tabicon_de_normal.png b/win-linux/res/icons/tabbar/tabicon_de_normal.png deleted file mode 100644 index fe3010f6cf9e84ecf1758beadf6338e0dc333579..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 96 zcmeAS@N?(olHy`uVBq!ia0vp^{2Ygr+Ar-fh3r^0dlIZw9xsl(v tLE_0H$3-(a41(s`zRD>wRNeWCgQ1vHlWT8%iZ)OSgQu&X%Q~loCIEn}8?OKW diff --git a/win-linux/res/icons/tabbar/tabicon_de_normal_1.25x.png b/win-linux/res/icons/tabbar/tabicon_de_normal_1.25x.png deleted file mode 100644 index fe7b6608f329488f8fbdd3499f96da06baf5b88a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 197 zcmeAS@N?(olHy`uVBq!ia0vp^!XV7S1|*9D%+3HQ&H|6fVg?3opai!tBg3pY55jgR3=A9lx&I`x0{Ky%E{-7;jBl?P@--;%uwJ--Z1G83iK)L2 zteSWDaBb=pPA7JuifHRU57pQ1(3KOZFsU;3+sbjOGZx^prwfgF}}M_)$E)e-c@N{76q1$B+ufw-+}GHYo74J`_K9u|Q&Tivf$y z<2)DLuNhxF4)0y>-L=0`XzLpTl^!)k*6AP4-V!Z8QgQuLolNM*>#M#Ndf(|f$jScp o(SpfGEj1p;Ke}dQBk_rI@+#>~*S_@62U^15>FVdQ&MBb@0O0UM*8l(j diff --git a/win-linux/res/icons/tabbar/tabicon_de_normal_1.75x.png b/win-linux/res/icons/tabbar/tabicon_de_normal_1.75x.png deleted file mode 100644 index a580e460a012e0b0b3277b3f8a8a7eb86223eac8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 224 zcmeAS@N?(olHy`uVBq!ia0vp^QXtI11|(N{`J4k%oCO|{#S9GG!XV7ZFl&wkP>``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&eBeyOL6V@L(#+p8Nn8w>fBfY0=_Zyaq37vF&5LX)W+44uhv38TmF^rEd^mI-;634dXXletGx+n|ps!w-8~ zgDZOeY`>zqHq2o>w7`DZ{-cY<`lEbQ4Lo$0Y0GV`FbVBn_A0R3J@{+JDj@gDqsCW< mY}g~;uqIu&cu8Hsn$hUN5@(^Ao+&`n89ZJ6T-G@yGywn>Br+!e diff --git a/win-linux/res/icons/tabbar/tabicon_docxf_normal.png b/win-linux/res/icons/tabbar/tabicon_docxf_normal.png deleted file mode 100644 index 796a172a008a86a686308dd645739d609788ee29..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 109 zcmeAS@N?(olHy`uVBq!ia0vp^{27z*Hb<7)?Pr1Z{GUY3I?u$IzO-Ywa@%2}foG35P(OpGtDnm{ Hr-UW|(ibG% diff --git a/win-linux/res/icons/tabbar/tabicon_docxf_normal_1.25x.png b/win-linux/res/icons/tabbar/tabicon_docxf_normal_1.25x.png deleted file mode 100644 index b267746fa29686179c4472a99957b5b2b209a442..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 117 zcmeAS@N?(olHy`uVBq!ia0vp^!XV7S1|*9D%+3HQ8&4ORL&S3j3^P6`k diff --git a/win-linux/res/icons/tabbar/tabicon_docxf_normal_1.5x.png b/win-linux/res/icons/tabbar/tabicon_docxf_normal_1.5x.png deleted file mode 100644 index 5f4d18015663453a99b398daa52ff3f92bd2881f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 117 zcmeAS@N?(olHy`uVBq!ia0vp^;vmey1|%P7U0DF6Y&=~YLn>}17o46I!++#|X2WaA zj1&Wjeks2>52r9J;!!_7b#Ys8n#EbA5);inDLbJ_k5)W1I4qr!Qo+pdLQDHagj~fz Ppg9blu6{1-oD!MZ;m-?0n7fp#hViToo7K`y7K4LH{(cSn>Mw{%}4Tmo*`d+f} o1nZ3*i`S}7zPCHwPm_V+x5}>x=XR|42sE9+)78&qol`;+0EA*Sw*UYD diff --git a/win-linux/res/icons/tabbar/tabicon_docxf_normal_2x.png b/win-linux/res/icons/tabbar/tabicon_docxf_normal_2x.png deleted file mode 100644 index 23d47ecfbf854bc0d6479e89aec6849e50c86a77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 154 zcmeAS@N?(olHy`uVBq!ia0vp^av;pX1|+Qw)-3{3iJmTwAr-fh3r^1ydOywdr>(&M z<^1!CUBKm1{Pm?47e*kZB%gzlBBZS#&kVSBpb=;F@oEew*n4sP5NE;6M6 znOiFgqW;YLC+5HF{DWDBnv6#lEMEFPcJned1_ptC{-pVf6Iy_lF?hQAxvX7U#~S30cc-oKI;ryZO;Z;pF5uF{}(%o7J>8R2^3U P8pGh}>gTe~DWM4fcnB*e diff --git a/win-linux/res/icons/tabbar/tabicon_oform_normal_1.25x.png b/win-linux/res/icons/tabbar/tabicon_oform_normal_1.25x.png deleted file mode 100644 index 5d8e7390d6bc17221264ccfcdb60074f099a766b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 127 zcmeAS@N?(olHy`uVBq!ia0vp^!XV7S1|*9D%+3HQH%}MGkcwN$6EarJ(!Ut+bAC~b z>HJ13HpdSFhCMP3*A0SVoTeo1$Wc3OkQ8f~CDF^XxGE<|b#9<8JJ0K&#Yv2%JgaB$ ZGx)p?_&kASn;6hU22WQ%mvv4FO#r**CuRTu diff --git a/win-linux/res/icons/tabbar/tabicon_oform_normal_1.5x.png b/win-linux/res/icons/tabbar/tabicon_oform_normal_1.5x.png deleted file mode 100644 index 42bf17c3091e0ff7b82256ea3ed31b69ed5011cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 132 zcmeAS@N?(olHy`uVBq!ia0vp^;vmey1|%P7U0DF6yggkULn>}1PsmuaYI??sKmMgW zCes_$*qlGEc-X?bob5oig{q#cOxxp6T32KIR{6W}${%UFY_pYTt&hv*O{rUKmQQ~u g%DcsI&mu+!hUtey_5GC(0F7nvboFyt=akR{0AN8ZqW}N^ diff --git a/win-linux/res/icons/tabbar/tabicon_oform_normal_1.75x.png b/win-linux/res/icons/tabbar/tabicon_oform_normal_1.75x.png deleted file mode 100644 index 7ec68cc40da9ce348340ea766f64143b25fccab8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 154 zcmeAS@N?(olHy`uVBq!ia0vp^QXtI11|(N{`J4k%iJmTwAr-fh1@hON63<^zqkl2r z=lrmUP5U-AG)@ycpvzR%q9@k)!C-sGt%MH|E|~_raoru9lNP25?sT-u68x(pwQptK zi|IUvmw%C4d&+ZD$F*Fm7S{vEWOa2JDp{^HurOR#Up#x?fm>UEmN9s``njxgN@xNA DGgmny diff --git a/win-linux/res/icons/tabbar/tabicon_oform_normal_2x.png b/win-linux/res/icons/tabbar/tabicon_oform_normal_2x.png deleted file mode 100644 index 612bb0f4cc555fec14f03c6f263c4ff7cb3b2860..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 165 zcmeAS@N?(olHy`uVBq!ia0vp^av;pX1|+Qw)-3{3Ii4<#Ar-fhCuFSY6VG2!qkl2r z=X}2(`&^P!ZJ1{`+It_25PA{FRu#>4c(EA&oTFQqn(rrNvA(>pdB%+e(sp9OQml)` z`lD=q=*aE-S@C1~RpsS&a=CAK?Ym#z$#42Tzrk*u$Aa|#oR2Pcu`qP}nx5VAGAHwl4WY({+j_I)L}s1rd(P-N@5!@O$_%S7I#y2Epx6)8%HZkh=d#Wzp$PzL C&LBhp diff --git a/win-linux/res/icons/tabbar/tabicon_pe_normal_1.25x.png b/win-linux/res/icons/tabbar/tabicon_pe_normal_1.25x.png deleted file mode 100644 index 4dcba6a6186be6231a8b55d2d7f16cb1561a616b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 204 zcmeAS@N?(olHy`uVBq!ia0vp^!XV7S1|*9D%+3HQ&H|6fVg?3opai!tBg3pY55jgR3=A9lx&I`x0{MxaE{-7;jBlq{b2S+7IK(%r=M;WVyB7LV zw6|1X3D=@DjYqeg9dr$GZx^prwfgF}}M_)$E)e-c@N`~*)I$B+ufw^IYT4k&Q6)gSlEcw=*W-R2iP zYi)TJRdr6{`g70ahk&c<>6)qsPU#vJFB88BBsD9%KK0$gVve)+wHcdie6LLsTh1K1 v^Hln@^w;+v@B8y&vxEXa?|#Jt&ubY)PYQd=Wlg;dw2Q&h)z4*}Q$iB}wDLvq diff --git a/win-linux/res/icons/tabbar/tabicon_pe_normal_1.75x.png b/win-linux/res/icons/tabbar/tabicon_pe_normal_1.75x.png deleted file mode 100644 index afe1726ed4faed0b7472b43da7854f9da6e0dc7c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 232 zcmeAS@N?(olHy`uVBq!ia0vp^QXtI11|(N{`J4k%oCO|{#S9GG!XV7ZFl&wkP>``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&eBeyyjAV@L(#+i3@R8x(jL{2wu#Q!C_q%<_uu z+`>e2HGzl8H6M%ulpn^ueSK?L=B+nT{TAC9WM^6=X6;Q;Hs(re<(WH$!!Yo-4_mUw z$%S8K>n{hcnPh%ME%=^MNT6uw#eSEI(bIo*u^+L@`nIo}BjDM!NS1(qJEKo_^YTAo Y4PzF6uzh}Q1<)Z3p00i_>zopr0I0K0&Hw-a diff --git a/win-linux/res/icons/tabbar/tabicon_pe_normal_2x.png b/win-linux/res/icons/tabbar/tabicon_pe_normal_2x.png deleted file mode 100644 index 4c38113a138100437826b62f5266007044331ef2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 151 zcmeAS@N?(olHy`uVBq!ia0vp^av;pX1|+Qw)-3{3ah@)YAr-fhSDfZp9V;OBr#v*^ zLVZ=jgjfY@$qBkkmp|nZ;QRaWK%`BUVef$l+h;^MT4jA)adfd*f0U0vf0Rwu$BbGV zrdu(K#rQqM(-I>-#0M;2D|cc+`trB@C;S+4RoV4LruIhzZDR0r^>bP0l+XkK`N1@O diff --git a/win-linux/res/icons/tabbar/tabicon_se_normal.png b/win-linux/res/icons/tabbar/tabicon_se_normal.png deleted file mode 100644 index feaa94e75c76a0ee1ff65f3dc626951277be2b88..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 105 zcmeAS@N?(olHy`uVBq!ia0vp^{25jgR3=A9lx&I`x0{K~Y!|$1BSXxCNf-b{!3DGP>}hg~N2s=A(9bLEiHZ)!r!0 zm_Fs#w6gqfa~pg-4+&fDZ>U!#pN>72CnAMm*spFRI9fGZx^prwfgF}}M_)$E)e-c@N{9I2L$B+ufx05#VHW=`*-0wJeNG?%8%gLE7 zQNYc3M>ms(Q-X?8eEQxJy?-ZN?VAKYn6+G3(ZMRVQ|bTI?Jqa-anHMS^k2-pcFRwD zrYw(Gc>gqi>ol?A^uTS?PCZ$bt!Q4|CKUFfb&jE9^WEKyuiq-A@TT|P23pME>FVdQ I&MBb@0NSre@c;k- diff --git a/win-linux/res/icons/tabbar/tabicon_se_normal_1.75x.png b/win-linux/res/icons/tabbar/tabicon_se_normal_1.75x.png deleted file mode 100644 index 2ccc1839890f07ab37c8825382ea55872f07d669..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 245 zcmeAS@N?(olHy`uVBq!ia0vp^QXtI11|(N{`J4k%oCO|{#S9GG!XV7ZFl&wkP>``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&eBewU|qCz}ZDzshmQ;zNsK&LdHkmkh2Cdsh{EoT+Bq?=f4EM{1Q| zlj*6mhi~cp2r`@&{`b6#zy8k4!ME=i9u;pp@p$dcBY)n8dweXLCS}>Jf3Jo2&i6wF nUB;zMj42aVwZ}h-P%vM(S=}RI+l)}4s~9|8{an^LB{Ts5?#ftD diff --git a/win-linux/res/icons/tabbar/tabicon_se_normal_2x.png b/win-linux/res/icons/tabbar/tabicon_se_normal_2x.png deleted file mode 100644 index 007fa110a9091bfebceff5724043f81aa916274a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 146 zcmeAS@N?(olHy`uVBq!ia0vp^av;pX1|+Qw)-3{3k)AG&Ar-fh3o^PtvOG$6_%mNl zB5S%jbFHpx#5sn<3-bJPjxH9v%)!IheevkY5clG4cU`%y6(;ihdo6(Ul}8tAY?yAx sEEeMr5r1ZRB1vDMxo?^s<4sNm)oq`XubSVx4YY*8)78&qol`;+08Do=EdT%j diff --git a/win-linux/res/icons/tabbar/tabicon_undefined.png b/win-linux/res/icons/tabbar/tabicon_undefined.png deleted file mode 100644 index 0ea2e76089e67f867ec03691968686db2a80323e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 121 zcmeAS@N?(olHy`uVBq!ia0vp^{2}1FOZRtH~YumtYFu4 zl;Po`)$Wtsrn4lsnCwzn_38hMNg0=BOv-3eRw?vYEY*EAGsRQciI=fIKu((Bz$#M- Uk7)}w0L^0XboFyt=akR{042mG=>Px# diff --git a/win-linux/res/icons/tabbar/tabicon_undefined_1.25x.png b/win-linux/res/icons/tabbar/tabicon_undefined_1.25x.png deleted file mode 100644 index ba0f3cc42cef7aed6b554511d2b39e544fecbbba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 244 zcmeAS@N?(olHy`uVBq!ia0vp^!XV7S1|*9D%+3HQ&H|6fVg?3opai!tBg3pY55jgR3=A9lx&I`x0{NYuE{-7;j87+@ diff --git a/win-linux/res/icons/tabbar/tabicon_undefined_1.5x.png b/win-linux/res/icons/tabbar/tabicon_undefined_1.5x.png deleted file mode 100644 index bdccce717e7b86d888b221d2b342db0715e8f395..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 294 zcmeAS@N?(olHy`uVBq!ia0vp^;vmey1|%P7U0DF6I14-?iy0WWg+Z8+Vb&Z8pde#$ zkh>GZx^prwfgF}}M_)$E)e-c@N{N0`|jv*C{Z?9bBJ)|JO_JCQ&!MuQlS=gdU zc%`rfql_ZVK>f>Ac|K6ASR38(iabViS6~7KfRfl@rea3a~cl~k8?=z$C z^OiYT9IN0^+|xLbX|6%kYxZybUw7qk$Lv^gKy#`0?q!LNSrYABs~?K!99#b2S8`Xu zxg$z@*xwzpEU11LS@HfzP7K#%i(S>4K97EGQ>vMEK;_@<2b_m=cKy3sQFmV9M8x{P mPw({_>f5YW@O*bzOe@|sr9xDCmYOZl8w{SVelF{r5}E)G)Nlg; diff --git a/win-linux/res/icons/tabbar/tabicon_undefined_1.75x.png b/win-linux/res/icons/tabbar/tabicon_undefined_1.75x.png deleted file mode 100644 index 5d690ddd0c646c2e22e8e93353bc102f87222acf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 321 zcmeAS@N?(olHy`uVBq!ia0vp^QXtI11|(N{`J4k%oCO|{#S9GG!XV7ZFl&wkP>``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&eB{xwe*$B+ufw^wp`4=V_;J!lR)prVk-&6bwP zwQM1u+Co3IL@ou76)jQ>Wq%zHd6?Ptss6oao;mAV!}1oU0~3#J_~GbPdHiqp8IDd&kLK)NYRWfPNcqRcXZitr zFPUncFU@adnR=#$=c>Zl0NqP0QbP0l+XkKo+)|$ diff --git a/win-linux/res/icons/tabbar/tabicon_undefined_2x.png b/win-linux/res/icons/tabbar/tabicon_undefined_2x.png deleted file mode 100644 index da5b5e2674614e0db5bac115e87b91d6464ee0f4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 158 zcmeAS@N?(olHy`uVBq!ia0vp^av;pX0wgC|rfCAHR8JSjkcwMRFB}wgFc4t4_+?9| z$L^>mBZdPpYT+~YuKnJ+WLCFY+YF2A#qZuZbQ?@xqkC|H^mGXm)qY1?wbUc?gsQ#X zXlz{Y?U0A5+SM5$$wB>|wrTZ8oqdYj9?2|T6r1v(YZl{Wk29gZEV2857BYCc`njxg HN@xNA4u3ji diff --git a/win-linux/res/icons/user.png b/win-linux/res/icons/user.png deleted file mode 100644 index b891dcdba842bea9989a771c82218ff4dd2afd5b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 327 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6;>1s;*b z3=DjSK$uZf!>a)(C|TkfQ4*Y=R#Ki=l*&+$n3-3imzP?iV4`QBXJ~ol+NKnsq9dLz zjv*HQOD8Jw9dZzGt!A*9w>V*AhD!JW#hqMot&Rx?1oIjl3m6i9>fcnnd^hvbGW*Jx zU(TODQ+9jF6gRG`Q`Tl60)Eb(h%6f~eSS-`K8CUArjH ztBT#y;N9FH=^q!iAKd?3@b&-s#$D;hZn(X_zuEZ2_S-eHrsW%@Vsltas2 e6nrw@!*J`1|F!-Zks?4JGkCiCxvX0@?kEP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02y>eSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E-^XO*0N*(00EXsL_t(oN5z#rPQ)+}M)v^p^z>YUgKz{| zI!aE!1rP-l4HYd71qB5?5(N?+0#U65gzq6ovYpS)4=e9TPjcRjC&}9JuDY( zGYQ@=GvZ6UiRS=g96=4WuEzi?GdR)siGht+ z+uh`->FY;NLn|Zh1u^??RxpR4hs*zAW#Cb;s}CbL7v|D~UM^pJfOA0{2$!D&JqUUZ z@&h6E1#u=^ehKs<=$+(}i@=lk$lNBNC%qG&Tm*uT;M1&07*qoM6N<$f^p8~f&c&j From 57eec7a7a56b75d6a87f9032c1ee0940448ff89b Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Thu, 13 Apr 2023 17:20:44 +0300 Subject: [PATCH 019/298] [win-linux] refactoring --- .../icons/tabbar/tab_close_pressed_light.svg | 14 +++++++------- win-linux/res/styles/styles.qss | 1 + win-linux/res/styles/tabbar.qss | 18 ++++++++++-------- win-linux/src/components/asctabwidget.cpp | 2 +- 4 files changed, 19 insertions(+), 16 deletions(-) diff --git a/win-linux/res/icons/tabbar/tab_close_pressed_light.svg b/win-linux/res/icons/tabbar/tab_close_pressed_light.svg index 9eda622b0..d834643a5 100644 --- a/win-linux/res/icons/tabbar/tab_close_pressed_light.svg +++ b/win-linux/res/icons/tabbar/tab_close_pressed_light.svg @@ -25,19 +25,19 @@ inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1" showgrid="false" - inkscape:zoom="32" - inkscape:cx="6.9375" - inkscape:cy="9.078125" - inkscape:window-width="3840" - inkscape:window-height="2035" + inkscape:zoom="22.627417" + inkscape:cx="0.22097087" + inkscape:cy="12.065009" + inkscape:window-width="1920" + inkscape:window-height="1017" inkscape:window-x="0" inkscape:window-y="0" inkscape:window-maximized="1" inkscape:current-layer="svg4" showguides="true" />QToolButton {max-height: 56px;} - diff --git a/win-linux/src/components/asctabwidget.cpp b/win-linux/src/components/asctabwidget.cpp index d55fbba54..ab3e8c184 100644 --- a/win-linux/src/components/asctabwidget.cpp +++ b/win-linux/src/components/asctabwidget.cpp @@ -147,7 +147,7 @@ CAscTabWidget::CAscTabWidget(QWidget *parent, CTabBar *_pBar) , m_widthParams({{100, 135, 9}, 68, 3, 0, WINDOW_TITLE_MIN_WIDTH, 140, 0}) , m_defWidthParams(m_widthParams) , m_isCustomStyle(true) - , m_tabIconSize(15, 15) + , m_tabIconSize(16, 16) , m_pBar(_pBar) { QTabWidget::tabBar()->hide(); From 3edc5e3c81dc9858902d0e62bbc0cd76513169f2 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Fri, 14 Apr 2023 11:40:41 +0300 Subject: [PATCH 020/298] [win-linux] add scales for tabbar and refactoring --- win-linux/res/styles/tabbar.qss | 151 ++++++++++++++++++-------------- 1 file changed, 86 insertions(+), 65 deletions(-) diff --git a/win-linux/res/styles/tabbar.qss b/win-linux/res/styles/tabbar.qss index 6be87a6a8..92759ed5d 100644 --- a/win-linux/res/styles/tabbar.qss +++ b/win-linux/res/styles/tabbar.qss @@ -1,12 +1,11 @@ - QTabWidget::pane {background-color: #f1f1f1; border: none; padding: 0px;} QLabel[class=tab-icon] {padding:0 0 2px 4px;} QTabBar {font-size: 11px; background-color: #f1f1f1;} QTabBar::tear {width: 0px;} QTabBar::scroller {width: 0px;} -QTabBar::tab {width: 135px; background-color: #f1f1f1; border: 0 none; border-right: 1px solid #a5a5a5; min-width: 41px; max-width: 135px; -height: 28px; margin: 0 0 0 0; padding: 0px;} +QTabBar::tab {min-width: 41px; max-width: 135px; width: 135px; height: 28px; background-color: #f1f1f1; border: 0 none; + border-right: 1px solid #a5a5a5; margin: 0 0 0 0; padding: 0px;} QTabBar::tab:hover {background-color: #cecece;} QTabBar::tab-label {active: #fff; normal: #444;} QTabBar::tab-icon {width: 15; height: 15;} @@ -97,24 +96,15 @@ QTabBar QToolButton[class=tab-close][state=active]:pressed{ /* light */ #mainPanel[uitheme=theme-light] QTabBar::tab {border-right-color:#dfdfdf;} - /* classic light */ #mainPanel[uitheme=theme-classic-light] QTabBar::tab {border-right-color:#cbcbcb;} /* dark */ #mainPanel[uitheme=theme-dark] QTabBar, - #mainPanel[uitheme=theme-dark] #tabWrapper -{ - background-color: #404040; -} +#mainPanel[uitheme=theme-dark] #tabWrapper {background-color: #404040;} #mainPanel[uitheme=theme-dark] QTabBar QToolButton::left-arrow, - #mainPanel[uitheme=theme-dark] QTabBar QToolButton::right-arrow -{ - background-color: #606060; -} -#mainPanel[uitheme=theme-dark] QTabBar QToolButton:pressed { - background-color: #606060; -} +#mainPanel[uitheme=theme-dark] QTabBar QToolButton::right-arrow {background-color: #606060;} +#mainPanel[uitheme=theme-dark] QTabBar QToolButton:pressed {background-color: #606060;} #mainPanel[uitheme=theme-dark] QTabWidget::pane {background-color: #404040;} #mainPanel[uitheme=theme-dark] QTabBar::tab {background-color: #404040; border-right-color: #505050;} #mainPanel[uitheme=theme-dark] QTabBar::tab:hover {background-color: #555;} @@ -126,19 +116,10 @@ QTabBar QToolButton[class=tab-close][state=active]:pressed{ /* contrast-dark */ #mainPanel[uitheme=theme-contrast-dark] QTabBar, - #mainPanel[uitheme=theme-contrast-dark] #tabWrapper -{ - background-color: #2a2a2a; -} +#mainPanel[uitheme=theme-contrast-dark] #tabWrapper {background-color: #2a2a2a;} #mainPanel[uitheme=theme-contrast-dark] QTabBar QToolButton::left-arrow, - #mainPanel[uitheme=theme-contrast-dark] QTabBar QToolButton::right-arrow -{ - background-color: #f00; -} -#mainPanel[uitheme=theme-contrast-dark] QTabBar QToolButton:pressed -{ - background-color: #f00; -} +#mainPanel[uitheme=theme-contrast-dark] QTabBar QToolButton::right-arrow {background-color: #f00;} +#mainPanel[uitheme=theme-contrast-dark] QTabBar QToolButton:pressed {background-color: #f00;} #mainPanel[uitheme=theme-contrast-dark] QTabWidget::pane {background-color: #2a2a2a;} #mainPanel[uitheme=theme-contrast-dark] QTabBar::tab {background-color: #2a2a2a; border-right-color: #414141;} #mainPanel[uitheme=theme-contrast-dark] QTabBar::tab:hover {background-color: #424242;} @@ -166,7 +147,6 @@ QTabBar QToolButton[class=tab-close][state=active]:pressed{ image: url(:/tabbar/icons/scrolltab_lp_light.svg) center no-repeat; } - #mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#rightButton, #mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton#rightButton { image: url(:/tabbar/icons/scrolltab_rn_light.svg) center no-repeat; @@ -184,20 +164,13 @@ QTabBar QToolButton[class=tab-close][state=active]:pressed{ image: url(:/tabbar/icons/scrolltab_rp_light.svg) center no-repeat; } - /* 1.25x */ #mainPanel[zoom="1.25x"] QLabel[class=tab-icon] {padding:0 0 2px 8px;} #mainPanel[zoom="1.25x"] QTabBar {font-size: 14px;} -#mainPanel[zoom="1.25x"] QTabBar::tab {width: 169px; border-right-width: 1px; min-width: 51px; max-width: 169px; height: 35px;} -#mainPanel[zoom="1.25x"] QTabBar::close-button { - margin-top: -1px; - icon-size: 20px; -} +#mainPanel[zoom="1.25x"] QTabBar::tab {min-width: 51px; max-width: 169px; width: 169px; height: 35px; border-right-width: 1px;} +#mainPanel[zoom="1.25x"] QTabBar::close-button {margin-top: -1px; icon-size: 20px;} #mainPanel[zoom="1.25x"] QTabBar QToolButton, - #mainPanel[zoom="1.5x"] QTabBar QToolButton:disabled { - /*margin-right:-2px;*/ - border-width:2px; -} +#mainPanel[zoom="1.25x"] QTabBar QToolButton:disabled {/*margin-right: -2px;*/ border-width: 2px;} #mainPanel[zoom="1.25x"] #paddingWidget {min-width: 15px; max-width: 15px;} #mainPanel[zoom="1.25x"] #scrollerFrame {min-width: 48px; max-width: 48px;} #mainPanel[zoom="1.25x"] #scrollerFrame>QToolButton {max-height: 35px;} @@ -205,16 +178,10 @@ QTabBar QToolButton[class=tab-close][state=active]:pressed{ /* 1.5x */ #mainPanel[zoom="1.5x"] QLabel[class=tab-icon] {padding:0 0 3px 9px;} #mainPanel[zoom="1.5x"] QTabBar {font-size: 15px;} -#mainPanel[zoom="1.5x"] QTabBar::tab {width: 203px; border-right-width: 2px; min-width: 62px; max-width: 203px; height: 42px;} -#mainPanel[zoom="1.5x"] QTabBar::close-button { - margin-top: -1px; - icon-size: 24px; -} +#mainPanel[zoom="1.5x"] QTabBar::tab {min-width: 62px; max-width: 203px; width: 203px; height: 42px; border-right-width: 2px;} +#mainPanel[zoom="1.5x"] QTabBar::close-button {margin-top: -1px; icon-size: 24px;} #mainPanel[zoom="1.5x"] QTabBar QToolButton, - #mainPanel[zoom="1.5x"] QTabBar QToolButton:disabled { - /*margin-right:-2px;*/ - border-width:2px; -} +#mainPanel[zoom="1.5x"] QTabBar QToolButton:disabled {/*margin-right: -2px;*/ border-width: 2px;} #mainPanel[zoom="1.5x"] #paddingWidget {min-width: 15px; max-width: 15px;} #mainPanel[zoom="1.5x"] #scrollerFrame {min-width: 48px; max-width: 48px;} #mainPanel[zoom="1.5x"] #scrollerFrame>QToolButton {max-height: 42px;} @@ -222,16 +189,10 @@ QTabBar QToolButton[class=tab-close][state=active]:pressed{ /* 1.75x */ #mainPanel[zoom="1.75x"] QLabel[class=tab-icon] {padding:0 0 4px 9px;} #mainPanel[zoom="1.75x"] QTabBar {font-size: 18px;} -#mainPanel[zoom="1.75x"] QTabBar::tab {width: 236px; border-right-width: 2px; min-width: 72px; max-width: 236px; height: 49px;} -#mainPanel[zoom="1.75x"] QTabBar::close-button { - margin-top: -2px; - icon-size: 28px; -} +#mainPanel[zoom="1.75x"] QTabBar::tab {min-width: 72px; max-width: 236px; width: 236px; height: 49px; border-right-width: 2px;} +#mainPanel[zoom="1.75x"] QTabBar::close-button {margin-top: -2px; icon-size: 28px;} #mainPanel[zoom="1.75x"] QTabBar QToolButton, - #mainPanel[zoom="1.75x"] QTabBar QToolButton:disabled { - /*margin-right:-2px;*/ - border-width:2px; -} +#mainPanel[zoom="1.75x"] QTabBar QToolButton:disabled {/*margin-right: -2px;*/ border-width: 2px;} #mainPanel[zoom="1.75x"] #paddingWidget {min-width: 31px; max-width: 31px;} #mainPanel[zoom="1.75x"] #scrollerFrame {min-width: 64px; max-width: 64px;} #mainPanel[zoom="1.75x"] #scrollerFrame>QToolButton {max-height: 49px;} @@ -239,16 +200,76 @@ QTabBar QToolButton[class=tab-close][state=active]:pressed{ /* 2x */ #mainPanel[zoom="2x"] QLabel[class=tab-icon] {padding:0 0 4px 12px;} #mainPanel[zoom="2x"] QTabBar {font-size: 20px;} -#mainPanel[zoom="2x"] QTabBar::tab {width: 270px; border-right-width: 2px; min-width: 82px; max-width: 270px; height: 56px;} -#mainPanel[zoom="2x"] QTabBar::close-button { - margin-top: -2px; - icon-size: 32px; -} +#mainPanel[zoom="2x"] QTabBar::tab {min-width: 82px; max-width: 270px; width: 270px; height: 56px; border-right-width: 2px;} +#mainPanel[zoom="2x"] QTabBar::close-button {margin-top: -2px; icon-size: 32px;} #mainPanel[zoom="2x"] QTabBar QToolButton, - #mainPanel[zoom="2x"] QTabBar QToolButton:disabled { - /*margin-right:-2px;*/ - border-width:2px; -} +#mainPanel[zoom="2x"] QTabBar QToolButton:disabled {/*margin-right: -2px;*/ border-width: 2px;} #mainPanel[zoom="2x"] #paddingWidget {min-width: 31px; max-width: 31px;} #mainPanel[zoom="2x"] #scrollerFrame {min-width: 64px; max-width: 64px;} #mainPanel[zoom="2x"] #scrollerFrame>QToolButton {max-height: 56px;} + +/* 2.5x */ +#mainPanel[zoom="2.5x"] QLabel[class=tab-icon] {padding:0 0 5px 15px;} +#mainPanel[zoom="2.5x"] QTabBar {font-size: 25px;} +#mainPanel[zoom="2.5x"] QTabBar::tab {min-width: 103px; max-width: 338px; width: 338px; height: 70px; border-right-width: 3px;} +#mainPanel[zoom="2.5x"] QTabBar::close-button {margin-top: -3px; icon-size: 40px;} +#mainPanel[zoom="2.5x"] QTabBar QToolButton, +#mainPanel[zoom="2.5x"] QTabBar QToolButton:disabled {/*margin-right: -2px;*/ border-width: 2px;} +#mainPanel[zoom="2.5x"] #paddingWidget {min-width: 39px; max-width: 39px;} +#mainPanel[zoom="2.5x"] #scrollerFrame {min-width: 80px; max-width: 80px;} +#mainPanel[zoom="2.5x"] #scrollerFrame>QToolButton {max-height: 70px;} + +/* 3x */ +#mainPanel[zoom="3x"] QLabel[class=tab-icon] {padding:0 0 6px 18px;} +#mainPanel[zoom="3x"] QTabBar {font-size: 30px;} +#mainPanel[zoom="3x"] QTabBar::tab {min-width: 123px; max-width: 405px; width: 405px; height: 84px; border-right-width: 3px;} +#mainPanel[zoom="3x"] QTabBar::close-button {margin-top: -3px; icon-size: 48px;} +#mainPanel[zoom="3x"] QTabBar QToolButton, +#mainPanel[zoom="3x"] QTabBar QToolButton:disabled {/*margin-right: -2px;*/ border-width: 2px;} +#mainPanel[zoom="3x"] #paddingWidget {min-width: 47px; max-width: 47px;} +#mainPanel[zoom="3x"] #scrollerFrame {min-width: 96px; max-width: 96px;} +#mainPanel[zoom="3x"] #scrollerFrame>QToolButton {max-height: 84px;} + +/* 3.5x */ +#mainPanel[zoom="3.5x"] QLabel[class=tab-icon] {padding:0 0 7px 21px;} +#mainPanel[zoom="3.5x"] QTabBar {font-size: 35px;} +#mainPanel[zoom="3.5x"] QTabBar::tab {min-width: 144px; max-width: 473px; width: 473px; height: 98px; border-right-width: 4px;} +#mainPanel[zoom="3.5x"] QTabBar::close-button {margin-top: -4px; icon-size: 56px;} +#mainPanel[zoom="3.5x"] QTabBar QToolButton, +#mainPanel[zoom="3.5x"] QTabBar QToolButton:disabled {/*margin-right: -2px;*/ border-width: 2px;} +#mainPanel[zoom="3.5x"] #paddingWidget {min-width: 54px; max-width: 54px;} +#mainPanel[zoom="3.5x"] #scrollerFrame {min-width: 112px; max-width: 112px;} +#mainPanel[zoom="3.5x"] #scrollerFrame>QToolButton {max-height: 98px;} + +/* 4x */ +#mainPanel[zoom="4x"] QLabel[class=tab-icon] {padding:0 0 8px 24px;} +#mainPanel[zoom="4x"] QTabBar {font-size: 40px;} +#mainPanel[zoom="4x"] QTabBar::tab {min-width: 164px; max-width: 540px; width: 540px; height: 112px; border-right-width: 4px;} +#mainPanel[zoom="4x"] QTabBar::close-button {margin-top: -4px; icon-size: 64px;} +#mainPanel[zoom="4x"] QTabBar QToolButton, +#mainPanel[zoom="4x"] QTabBar QToolButton:disabled {/*margin-right: -2px;*/ border-width: 2px;} +#mainPanel[zoom="4x"] #paddingWidget {min-width: 62px; max-width: 62px;} +#mainPanel[zoom="4x"] #scrollerFrame {min-width: 128px; max-width: 128px;} +#mainPanel[zoom="4x"] #scrollerFrame>QToolButton {max-height: 112px;} + +/* 4.5x */ +#mainPanel[zoom="4.5x"] QLabel[class=tab-icon] {padding:0 0 9px 27px;} +#mainPanel[zoom="4.5x"] QTabBar {font-size: 45px;} +#mainPanel[zoom="4.5x"] QTabBar::tab {min-width: 185px; max-width: 608px; width: 608px; height: 126px; border-right-width: 5px;} +#mainPanel[zoom="4.5x"] QTabBar::close-button {margin-top: -5px; icon-size: 72px;} +#mainPanel[zoom="4.5x"] QTabBar QToolButton, +#mainPanel[zoom="4.5x"] QTabBar QToolButton:disabled {/*margin-right: -2px;*/ border-width: 2px;} +#mainPanel[zoom="4.5x"] #paddingWidget {min-width: 70px; max-width: 70px;} +#mainPanel[zoom="4.5x"] #scrollerFrame {min-width: 144px; max-width: 144px;} +#mainPanel[zoom="4.5x"] #scrollerFrame>QToolButton {max-height: 126px;} + +/* 5x */ +#mainPanel[zoom="5x"] QLabel[class=tab-icon] {padding:0 0 10px 30px;} +#mainPanel[zoom="5x"] QTabBar {font-size: 50px;} +#mainPanel[zoom="5x"] QTabBar::tab {min-width: 205px; max-width: 675px; width: 675px; height: 140px; border-right-width: 5px;} +#mainPanel[zoom="5x"] QTabBar::close-button {margin-top: -5px; icon-size: 80px;} +#mainPanel[zoom="5x"] QTabBar QToolButton, +#mainPanel[zoom="5x"] QTabBar QToolButton:disabled {/*margin-right: -2px;*/ border-width: 2px;} +#mainPanel[zoom="5x"] #paddingWidget {min-width: 78px; max-width: 78px;} +#mainPanel[zoom="5x"] #scrollerFrame {min-width: 160px; max-width: 160px;} +#mainPanel[zoom="5x"] #scrollerFrame>QToolButton {max-height: 140px;} From b95201f8387410fa6850088792604bb263df4439 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Fri, 14 Apr 2023 13:41:36 +0300 Subject: [PATCH 021/298] [win-linux] add sacles for styles --- win-linux/res/styles/styles@2.5x.qss | 104 +++++++++++++++++++++++++++ win-linux/res/styles/styles@3.5x.qss | 104 +++++++++++++++++++++++++++ win-linux/res/styles/styles@3x.qss | 104 +++++++++++++++++++++++++++ win-linux/res/styles/styles@4.5x.qss | 104 +++++++++++++++++++++++++++ win-linux/res/styles/styles@4x.qss | 104 +++++++++++++++++++++++++++ win-linux/res/styles/styles@5x.qss | 104 +++++++++++++++++++++++++++ win-linux/resources.qrc | 18 +++++ 7 files changed, 642 insertions(+) create mode 100644 win-linux/res/styles/styles@2.5x.qss create mode 100644 win-linux/res/styles/styles@3.5x.qss create mode 100644 win-linux/res/styles/styles@3x.qss create mode 100644 win-linux/res/styles/styles@4.5x.qss create mode 100644 win-linux/res/styles/styles@4x.qss create mode 100644 win-linux/res/styles/styles@5x.qss diff --git a/win-linux/res/styles/styles@2.5x.qss b/win-linux/res/styles/styles@2.5x.qss new file mode 100644 index 000000000..cc2b828e7 --- /dev/null +++ b/win-linux/res/styles/styles@2.5x.qss @@ -0,0 +1,104 @@ +#CX11Caption { + min-width: 438px; +} + +#labelAppTitle { + margin-top: -5px; + font-size: 28px; +} + +QPushButton { + border: 3px solid #cbcbcb; + padding: 0 50px; + height: 55px; + border-radius: 5px; + font-size: 28px; +} + +QPushButton#toolButtonMaximize,QPushButton#toolButtonMinimize, + QPushButton#toolButtonClose { + padding: 13px 30px 18px; +} + +QPushButton#toolButtonMain { + font-size: 25px; + border-right-width: 3px; +} + +QPushButton#toolButtonMain[theme=light] { + border-width: 3px; + border-bottom: 0 none; +} + +QPushButton#toolButtonMain[class=normal], + QPushButton#toolButtonMain[class=normal]:hover +{ + border-bottom-width: 3px; +} + +QPushButton::menu-indicator { + width: 25px; + height: 25px; + left: -5px; + top: -3px; +} + +/*QPushButton[theme=dark]::menu-indicator:disabled {*/ + /*border-image: url(:/res/icons/menu-indicator-dark.png) 0 0 0 20 repeat repeat;*/ +/*}*/ + +/*QPushButton[theme=dark]::menu-indicator:hover {*/ + /*border-image: url(:/res/icons/menu-indicator-dark.png) 0 20 0 0 repeat repeat;*/ +/*}*/ + +QPushButton#toolButtonDownload { + padding: 15px; +} + +QPushButton#toolButtonDownload::menu-indicator { + top: -25px; + left: -10px; +} + +/* download widget */ + +QMenu[hdpi]#menuButtonDownload { + border-width: 3px; +} + +CDownloadWidget[hdpi] QProgressBar { + border-radius: 5px; + max-height: 13px; + margin-right: 25px; + margin-top: 3px; + min-width: 500px; +} + +CDownloadWidget[hdpi] QProgressBar::chunk { + border-radius: 5px; +} + +CDownloadWidget[hdpi] QPushButton#buttonCancel { + font-size: 30px; +} + +CDownloadWidget[hdpi] QLabel#labelName { + font-size: 40px; +} + +/* ToolTip*/ + +#CToolTip>QLabel { + min-height: 65px; + margin: 0px; + padding-left: 25px; padding-right: 25px; + font-size: 28px; + border: 3px solid #c0c0c0; + border-radius: 11px; +} +#mainPanel[uitheme=theme-dark] #CToolTip>QLabel { + border: 3px solid #666666; +} +#mainPanel[uitheme=theme-contrast-dark] #CToolTip>QLabel { + border: 3px solid #696969; +} diff --git a/win-linux/res/styles/styles@3.5x.qss b/win-linux/res/styles/styles@3.5x.qss new file mode 100644 index 000000000..3749433f7 --- /dev/null +++ b/win-linux/res/styles/styles@3.5x.qss @@ -0,0 +1,104 @@ +#CX11Caption { + min-width: 613px; +} + +#labelAppTitle { + margin-top: -7px; + font-size: 39px; +} + +QPushButton { + border: 4px solid #cbcbcb; + padding: 0 70px; + height: 77px; + border-radius: 7px; + font-size: 39px; +} + +QPushButton#toolButtonMaximize,QPushButton#toolButtonMinimize, + QPushButton#toolButtonClose { + padding: 18px 42px 25px; +} + +QPushButton#toolButtonMain { + font-size: 35px; + border-right-width: 4px; +} + +QPushButton#toolButtonMain[theme=light] { + border-width: 4px; + border-bottom: 0 none; +} + +QPushButton#toolButtonMain[class=normal], + QPushButton#toolButtonMain[class=normal]:hover +{ + border-bottom-width: 4px; +} + +QPushButton::menu-indicator { + width: 35px; + height: 35px; + left: -7px; + top: -4px; +} + +/*QPushButton[theme=dark]::menu-indicator:disabled {*/ + /*border-image: url(:/res/icons/menu-indicator-dark.png) 0 0 0 20 repeat repeat;*/ +/*}*/ + +/*QPushButton[theme=dark]::menu-indicator:hover {*/ + /*border-image: url(:/res/icons/menu-indicator-dark.png) 0 20 0 0 repeat repeat;*/ +/*}*/ + +QPushButton#toolButtonDownload { + padding: 21px; +} + +QPushButton#toolButtonDownload::menu-indicator { + top: -35px; + left: -14px; +} + +/* download widget */ + +QMenu[hdpi]#menuButtonDownload { + border-width: 4px; +} + +CDownloadWidget[hdpi] QProgressBar { + border-radius: 7px; + max-height: 18px; + margin-right: 35px; + margin-top: 4px; + min-width: 700px; +} + +CDownloadWidget[hdpi] QProgressBar::chunk { + border-radius: 7px; +} + +CDownloadWidget[hdpi] QPushButton#buttonCancel { + font-size: 42px; +} + +CDownloadWidget[hdpi] QLabel#labelName { + font-size: 56px; +} + +/* ToolTip*/ + +#CToolTip>QLabel { + min-height: 91px; + margin: 0px; + padding-left: 35px; padding-right: 35px; + font-size: 39px; + border: 4px solid #c0c0c0; + border-radius: 16px; +} +#mainPanel[uitheme=theme-dark] #CToolTip>QLabel { + border: 4px solid #666666; +} +#mainPanel[uitheme=theme-contrast-dark] #CToolTip>QLabel { + border: 4px solid #696969; +} diff --git a/win-linux/res/styles/styles@3x.qss b/win-linux/res/styles/styles@3x.qss new file mode 100644 index 000000000..5eb525d8e --- /dev/null +++ b/win-linux/res/styles/styles@3x.qss @@ -0,0 +1,104 @@ +#CX11Caption { + min-width: 525px; +} + +#labelAppTitle { + margin-top: -6px; + font-size: 33px; +} + +QPushButton { + border: 3px solid #cbcbcb; + padding: 0 60px; + height: 66px; + border-radius: 6px; + font-size: 33px; +} + +QPushButton#toolButtonMaximize,QPushButton#toolButtonMinimize, + QPushButton#toolButtonClose { + padding: 15px 36px 21px; +} + +QPushButton#toolButtonMain { + font-size: 30px; + border-right-width: 3px; +} + +QPushButton#toolButtonMain[theme=light] { + border-width: 3px; + border-bottom: 0 none; +} + +QPushButton#toolButtonMain[class=normal], + QPushButton#toolButtonMain[class=normal]:hover +{ + border-bottom-width: 3px; +} + +QPushButton::menu-indicator { + width: 30px; + height: 30px; + left: -6px; + top: -3px; +} + +/*QPushButton[theme=dark]::menu-indicator:disabled {*/ + /*border-image: url(:/res/icons/menu-indicator-dark.png) 0 0 0 20 repeat repeat;*/ +/*}*/ + +/*QPushButton[theme=dark]::menu-indicator:hover {*/ + /*border-image: url(:/res/icons/menu-indicator-dark.png) 0 20 0 0 repeat repeat;*/ +/*}*/ + +QPushButton#toolButtonDownload { + padding: 18px; +} + +QPushButton#toolButtonDownload::menu-indicator { + top: -30px; + left: -12px; +} + +/* download widget */ + +QMenu[hdpi]#menuButtonDownload { + border-width: 3px; +} + +CDownloadWidget[hdpi] QProgressBar { + border-radius: 6px; + max-height: 15px; + margin-right: 30px; + margin-top: 3px; + min-width: 600px; +} + +CDownloadWidget[hdpi] QProgressBar::chunk { + border-radius: 6px; +} + +CDownloadWidget[hdpi] QPushButton#buttonCancel { + font-size: 36px; +} + +CDownloadWidget[hdpi] QLabel#labelName { + font-size: 48px; +} + +/* ToolTip*/ + +#CToolTip>QLabel { + min-height: 78px; + margin: 0px; + padding-left: 30px; padding-right: 30px; + font-size: 33px; + border: 3px solid #c0c0c0; + border-radius: 14px; +} +#mainPanel[uitheme=theme-dark] #CToolTip>QLabel { + border: 3px solid #666666; +} +#mainPanel[uitheme=theme-contrast-dark] #CToolTip>QLabel { + border: 3px solid #696969; +} diff --git a/win-linux/res/styles/styles@4.5x.qss b/win-linux/res/styles/styles@4.5x.qss new file mode 100644 index 000000000..a746b6230 --- /dev/null +++ b/win-linux/res/styles/styles@4.5x.qss @@ -0,0 +1,104 @@ +#CX11Caption { + min-width: 788px; +} + +#labelAppTitle { + margin-top: -9px; + font-size: 50px; +} + +QPushButton { + border: 5px solid #cbcbcb; + padding:0 90px; + height: 99px; + border-radius:9px; + font-size: 50px; +} + +QPushButton#toolButtonMaximize,QPushButton#toolButtonMinimize, + QPushButton#toolButtonClose { + padding: 23px 54px 32px; +} + +QPushButton#toolButtonMain { + font-size: 45px; + border-right-width: 5px; +} + +QPushButton#toolButtonMain[theme=light] { + border-width: 5px; + border-bottom: 0 none; +} + +QPushButton#toolButtonMain[class=normal], + QPushButton#toolButtonMain[class=normal]:hover +{ + border-bottom-width: 5px; +} + +QPushButton::menu-indicator { + width: 45px; + height: 45px; + left: -9px; + top: -5px; +} + +/*QPushButton[theme=dark]::menu-indicator:disabled {*/ + /*border-image: url(:/res/icons/menu-indicator-dark.png) 0 0 0 20 repeat repeat;*/ +/*}*/ + +/*QPushButton[theme=dark]::menu-indicator:hover {*/ + /*border-image: url(:/res/icons/menu-indicator-dark.png) 0 20 0 0 repeat repeat;*/ +/*}*/ + +QPushButton#toolButtonDownload { + padding: 27px; +} + +QPushButton#toolButtonDownload::menu-indicator { + top: -45px; + left: -18px; +} + +/* download widget */ + +QMenu[hdpi]#menuButtonDownload { + border-width: 5px; +} + +CDownloadWidget[hdpi] QProgressBar { + border-radius: 9px; + max-height: 23px; + margin-right: 45px; + margin-top: 5px; + min-width: 900px; +} + +CDownloadWidget[hdpi] QProgressBar::chunk { + border-radius: 9px; +} + +CDownloadWidget[hdpi] QPushButton#buttonCancel { + font-size: 54px; +} + +CDownloadWidget[hdpi] QLabel#labelName { + font-size: 72px; +} + +/* ToolTip*/ + +#CToolTip>QLabel { + min-height: 117px; + margin: 0px; + padding-left: 45px; padding-right: 45px; + font-size: 50px; + border: 5px solid #c0c0c0; + border-radius: 20px; +} +#mainPanel[uitheme=theme-dark] #CToolTip>QLabel { + border: 5px solid #666666; +} +#mainPanel[uitheme=theme-contrast-dark] #CToolTip>QLabel { + border: 5px solid #696969; +} diff --git a/win-linux/res/styles/styles@4x.qss b/win-linux/res/styles/styles@4x.qss new file mode 100644 index 000000000..783d8ce5e --- /dev/null +++ b/win-linux/res/styles/styles@4x.qss @@ -0,0 +1,104 @@ +#CX11Caption { + min-width: 700px; +} + +#labelAppTitle { + margin-top: -8px; + font-size: 44px; +} + +QPushButton { + border: 4px solid #cbcbcb; + padding: 0 80px; + height: 88px; + border-radius: 8px; + font-size: 44px; +} + +QPushButton#toolButtonMaximize,QPushButton#toolButtonMinimize, + QPushButton#toolButtonClose { + padding: 20px 48px 28px; +} + +QPushButton#toolButtonMain { + font-size: 40px; + border-right-width: 4px; +} + +QPushButton#toolButtonMain[theme=light] { + border-width: 4px; + border-bottom: 0 none; +} + +QPushButton#toolButtonMain[class=normal], + QPushButton#toolButtonMain[class=normal]:hover +{ + border-bottom-width: 4px; +} + +QPushButton::menu-indicator { + width: 40px; + height: 40px; + left: -8px; + top: -4px; +} + +/*QPushButton[theme=dark]::menu-indicator:disabled {*/ + /*border-image: url(:/res/icons/menu-indicator-dark.png) 0 0 0 20 repeat repeat;*/ +/*}*/ + +/*QPushButton[theme=dark]::menu-indicator:hover {*/ + /*border-image: url(:/res/icons/menu-indicator-dark.png) 0 20 0 0 repeat repeat;*/ +/*}*/ + +QPushButton#toolButtonDownload { + padding: 24px; +} + +QPushButton#toolButtonDownload::menu-indicator { + top: -40px; + left: -16px; +} + +/* download widget */ + +QMenu[hdpi]#menuButtonDownload { + border-width: 4px; +} + +CDownloadWidget[hdpi] QProgressBar { + border-radius: 8px; + max-height: 20px; + margin-right: 40px; + margin-top: 4px; + min-width: 800px; +} + +CDownloadWidget[hdpi] QProgressBar::chunk { + border-radius: 8px; +} + +CDownloadWidget[hdpi] QPushButton#buttonCancel { + font-size: 48px; +} + +CDownloadWidget[hdpi] QLabel#labelName { + font-size: 64px; +} + +/* ToolTip*/ + +#CToolTip>QLabel { + min-height: 104px; + margin: 0px; + padding-left: 40px; padding-right: 40px; + font-size: 44px; + border: 4px solid #c0c0c0; + border-radius: 18px; +} +#mainPanel[uitheme=theme-dark] #CToolTip>QLabel { + border: 4px solid #666666; +} +#mainPanel[uitheme=theme-contrast-dark] #CToolTip>QLabel { + border: 4px solid #696969; +} diff --git a/win-linux/res/styles/styles@5x.qss b/win-linux/res/styles/styles@5x.qss new file mode 100644 index 000000000..3ad2e3f24 --- /dev/null +++ b/win-linux/res/styles/styles@5x.qss @@ -0,0 +1,104 @@ +#CX11Caption { + min-width: 875px; +} + +#labelAppTitle { + margin-top: -10px; + font-size: 55px; +} + +QPushButton { + border: 5px solid #cbcbcb; + padding: 0 100px; + height: 110px; + border-radius: 10px; + font-size: 55px; +} + +QPushButton#toolButtonMaximize,QPushButton#toolButtonMinimize, + QPushButton#toolButtonClose { + padding: 25px 60px 35px; +} + +QPushButton#toolButtonMain { + font-size: 50px; + border-right-width: 5px; +} + +QPushButton#toolButtonMain[theme=light] { + border-width: 5px; + border-bottom: 0 none; +} + +QPushButton#toolButtonMain[class=normal], + QPushButton#toolButtonMain[class=normal]:hover +{ + border-bottom-width: 5px; +} + +QPushButton::menu-indicator { + width: 50px; + height: 50px; + left: -10px; + top: -5px; +} + +/*QPushButton[theme=dark]::menu-indicator:disabled {*/ + /*border-image: url(:/res/icons/menu-indicator-dark.png) 0 0 0 20 repeat repeat;*/ +/*}*/ + +/*QPushButton[theme=dark]::menu-indicator:hover {*/ + /*border-image: url(:/res/icons/menu-indicator-dark.png) 0 20 0 0 repeat repeat;*/ +/*}*/ + +QPushButton#toolButtonDownload { + padding: 30px; +} + +QPushButton#toolButtonDownload::menu-indicator { + top: -50px; + left: -20px; +} + +/* download widget */ + +QMenu[hdpi]#menuButtonDownload { + border-width: 5px; +} + +CDownloadWidget[hdpi] QProgressBar { + border-radius: 10px; + max-height: 25px; + margin-right: 50px; + margin-top: 5px; + min-width: 1000px; +} + +CDownloadWidget[hdpi] QProgressBar::chunk { + border-radius: 10px; +} + +CDownloadWidget[hdpi] QPushButton#buttonCancel { + font-size: 60px; +} + +CDownloadWidget[hdpi] QLabel#labelName { + font-size: 80px; +} + +/* ToolTip*/ + +#CToolTip>QLabel { + min-height: 130px; + margin: 0px; + padding-left: 50px; padding-right: 50px; + font-size: 55px; + border: 5px solid #c0c0c0; + border-radius: 23px; +} +#mainPanel[uitheme=theme-dark] #CToolTip>QLabel { + border: 5px solid #666666; +} +#mainPanel[uitheme=theme-contrast-dark] #CToolTip>QLabel { + border: 5px solid #696969; +} diff --git a/win-linux/resources.qrc b/win-linux/resources.qrc index 8e98bfe7b..17ef48b0a 100644 --- a/win-linux/resources.qrc +++ b/win-linux/resources.qrc @@ -98,6 +98,24 @@ res/styles/styles@2x.qss + + res/styles/styles@2.5x.qss + + + res/styles/styles@3x.qss + + + res/styles/styles@3.5x.qss + + + res/styles/styles@4x.qss + + + res/styles/styles@4.5x.qss + + + res/styles/styles@5x.qss + langs/be.qm langs/bg.qm From e3e38f113142a53006823e745f7f46aada214633 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Fri, 14 Apr 2023 14:55:35 +0300 Subject: [PATCH 022/298] [win-linux] refactoring tabbar scales --- win-linux/res/styles/tabbar.qss | 12 ++++++------ win-linux/src/components/ctabbar.cpp | 8 +++++++- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/win-linux/res/styles/tabbar.qss b/win-linux/res/styles/tabbar.qss index 92759ed5d..0657fdf41 100644 --- a/win-linux/res/styles/tabbar.qss +++ b/win-linux/res/styles/tabbar.qss @@ -215,7 +215,7 @@ QTabBar QToolButton[class=tab-close][state=active]:pressed{ #mainPanel[zoom="2.5x"] QTabBar::close-button {margin-top: -3px; icon-size: 40px;} #mainPanel[zoom="2.5x"] QTabBar QToolButton, #mainPanel[zoom="2.5x"] QTabBar QToolButton:disabled {/*margin-right: -2px;*/ border-width: 2px;} -#mainPanel[zoom="2.5x"] #paddingWidget {min-width: 39px; max-width: 39px;} +#mainPanel[zoom="2.5x"] #paddingWidget {min-width: 49px; max-width: 49px;} #mainPanel[zoom="2.5x"] #scrollerFrame {min-width: 80px; max-width: 80px;} #mainPanel[zoom="2.5x"] #scrollerFrame>QToolButton {max-height: 70px;} @@ -226,7 +226,7 @@ QTabBar QToolButton[class=tab-close][state=active]:pressed{ #mainPanel[zoom="3x"] QTabBar::close-button {margin-top: -3px; icon-size: 48px;} #mainPanel[zoom="3x"] QTabBar QToolButton, #mainPanel[zoom="3x"] QTabBar QToolButton:disabled {/*margin-right: -2px;*/ border-width: 2px;} -#mainPanel[zoom="3x"] #paddingWidget {min-width: 47px; max-width: 47px;} +#mainPanel[zoom="3x"] #paddingWidget {min-width: 65px; max-width: 65px;} #mainPanel[zoom="3x"] #scrollerFrame {min-width: 96px; max-width: 96px;} #mainPanel[zoom="3x"] #scrollerFrame>QToolButton {max-height: 84px;} @@ -237,7 +237,7 @@ QTabBar QToolButton[class=tab-close][state=active]:pressed{ #mainPanel[zoom="3.5x"] QTabBar::close-button {margin-top: -4px; icon-size: 56px;} #mainPanel[zoom="3.5x"] QTabBar QToolButton, #mainPanel[zoom="3.5x"] QTabBar QToolButton:disabled {/*margin-right: -2px;*/ border-width: 2px;} -#mainPanel[zoom="3.5x"] #paddingWidget {min-width: 54px; max-width: 54px;} +#mainPanel[zoom="3.5x"] #paddingWidget {min-width: 82px; max-width: 82px;} #mainPanel[zoom="3.5x"] #scrollerFrame {min-width: 112px; max-width: 112px;} #mainPanel[zoom="3.5x"] #scrollerFrame>QToolButton {max-height: 98px;} @@ -248,7 +248,7 @@ QTabBar QToolButton[class=tab-close][state=active]:pressed{ #mainPanel[zoom="4x"] QTabBar::close-button {margin-top: -4px; icon-size: 64px;} #mainPanel[zoom="4x"] QTabBar QToolButton, #mainPanel[zoom="4x"] QTabBar QToolButton:disabled {/*margin-right: -2px;*/ border-width: 2px;} -#mainPanel[zoom="4x"] #paddingWidget {min-width: 62px; max-width: 62px;} +#mainPanel[zoom="4x"] #paddingWidget {min-width: 98px; max-width: 98px;} #mainPanel[zoom="4x"] #scrollerFrame {min-width: 128px; max-width: 128px;} #mainPanel[zoom="4x"] #scrollerFrame>QToolButton {max-height: 112px;} @@ -259,7 +259,7 @@ QTabBar QToolButton[class=tab-close][state=active]:pressed{ #mainPanel[zoom="4.5x"] QTabBar::close-button {margin-top: -5px; icon-size: 72px;} #mainPanel[zoom="4.5x"] QTabBar QToolButton, #mainPanel[zoom="4.5x"] QTabBar QToolButton:disabled {/*margin-right: -2px;*/ border-width: 2px;} -#mainPanel[zoom="4.5x"] #paddingWidget {min-width: 70px; max-width: 70px;} +#mainPanel[zoom="4.5x"] #paddingWidget {min-width: 112px; max-width: 112px;} #mainPanel[zoom="4.5x"] #scrollerFrame {min-width: 144px; max-width: 144px;} #mainPanel[zoom="4.5x"] #scrollerFrame>QToolButton {max-height: 126px;} @@ -270,6 +270,6 @@ QTabBar QToolButton[class=tab-close][state=active]:pressed{ #mainPanel[zoom="5x"] QTabBar::close-button {margin-top: -5px; icon-size: 80px;} #mainPanel[zoom="5x"] QTabBar QToolButton, #mainPanel[zoom="5x"] QTabBar QToolButton:disabled {/*margin-right: -2px;*/ border-width: 2px;} -#mainPanel[zoom="5x"] #paddingWidget {min-width: 78px; max-width: 78px;} +#mainPanel[zoom="5x"] #paddingWidget {min-width: 130px; max-width: 130px;} #mainPanel[zoom="5x"] #scrollerFrame {min-width: 160px; max-width: 160px;} #mainPanel[zoom="5x"] #scrollerFrame>QToolButton {max-height: 140px;} diff --git a/win-linux/src/components/ctabbar.cpp b/win-linux/src/components/ctabbar.cpp index 980099c00..b68dd4372 100644 --- a/win-linux/src/components/ctabbar.cpp +++ b/win-linux/src/components/ctabbar.cpp @@ -796,7 +796,13 @@ void CTabBar::setTabIcon(int index, const QIcon &icon) if (dpi_ratio < 1.5) top_offset = 2; else if (dpi_ratio < 1.75) top_offset = 2; else if (dpi_ratio < 2) top_offset = 3; else - top_offset = 4; + if (dpi_ratio < 2.5) top_offset = 4; else + if (dpi_ratio < 3) top_offset = 5; else + if (dpi_ratio < 3.5) top_offset = 5; else + if (dpi_ratio < 4) top_offset = 6; else + if (dpi_ratio < 4.5) top_offset = 8; else + if (dpi_ratio < 5) top_offset = 9; else + top_offset = 9; i->setGeometry(QRect(QPoint(_tabRect.left() + 4, _top - top_offset),_iconSize)); i->setFixedSize(_iconSize.width() + int(8 * dpi_ratio), iconSize().height() + int(4 * dpi_ratio)); From add9b803addc144b8ffabf5fc019f64593fdab75 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Fri, 14 Apr 2023 17:26:47 +0300 Subject: [PATCH 023/298] [linux] add GTK resources --- win-linux/gtk_resources.c | 3867 ++++++++++++++++++++++++++ win-linux/gtk_resources.h | 7 + win-linux/gtk_resources.xml | 9 + win-linux/res/icons/app-icon_128.png | Bin 0 -> 12480 bytes win-linux/res/icons/app-icon_256.png | Bin 0 -> 31482 bytes win-linux/res/icons/app-icon_64.png | Bin 0 -> 5234 bytes win-linux/res/icons/app-icon_96.png | Bin 0 -> 8994 bytes 7 files changed, 3883 insertions(+) create mode 100644 win-linux/gtk_resources.c create mode 100644 win-linux/gtk_resources.h create mode 100644 win-linux/gtk_resources.xml create mode 100644 win-linux/res/icons/app-icon_128.png create mode 100644 win-linux/res/icons/app-icon_256.png create mode 100644 win-linux/res/icons/app-icon_64.png create mode 100644 win-linux/res/icons/app-icon_96.png diff --git a/win-linux/gtk_resources.c b/win-linux/gtk_resources.c new file mode 100644 index 000000000..51d5b59bc --- /dev/null +++ b/win-linux/gtk_resources.c @@ -0,0 +1,3867 @@ +#include + +#if defined (__ELF__) && ( __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 6)) +# define SECTION __attribute__ ((section (".gresource.gtk_resources"), aligned (8))) +#else +# define SECTION +#endif + +static const SECTION union { const guint8 data[58605]; const double alignment; void * const ptr;} gtk_resources_resource_data = { + "\107\126\141\162\151\141\156\164\000\000\000\000\000\000\000\000" + "\030\000\000\000\344\000\000\000\000\000\000\050\007\000\000\000" + "\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000" + "\002\000\000\000\004\000\000\000\005\000\000\000\324\265\002\000" + "\377\377\377\377\344\000\000\000\001\000\114\000\350\000\000\000" + "\354\000\000\000\376\131\073\352\006\000\000\000\354\000\000\000" + "\020\000\166\000\000\001\000\000\012\174\000\000\134\324\145\226" + "\006\000\000\000\012\174\000\000\020\000\166\000\040\174\000\000" + "\360\254\000\000\020\355\075\037\006\000\000\000\360\254\000\000" + "\017\000\166\000\000\255\000\000\062\320\000\000\053\102\032\030" + "\006\000\000\000\062\320\000\000\017\000\166\000\110\320\000\000" + "\312\344\000\000\255\277\221\013\000\000\000\000\312\344\000\000" + "\004\000\114\000\320\344\000\000\324\344\000\000\130\362\353\150" + "\005\000\000\000\324\344\000\000\006\000\114\000\334\344\000\000" + "\354\344\000\000\057\000\000\000\005\000\000\000\141\160\160\055" + "\151\143\157\156\137\062\065\066\056\160\156\147\000\000\000\000" + "\372\172\000\000\000\000\000\000\211\120\116\107\015\012\032\012" + "\000\000\000\015\111\110\104\122\000\000\001\000\000\000\001\000" + "\010\006\000\000\000\134\162\250\146\000\000\001\155\151\103\103" + "\120\151\143\143\000\000\050\221\165\221\275\113\102\121\030\306" + "\177\152\121\224\021\121\103\110\203\203\105\203\102\024\105\143" + "\331\340\042\041\146\220\325\242\067\077\202\253\136\356\125\102" + "\132\203\226\006\241\041\152\351\153\350\077\250\065\150\055\010" + "\202\042\210\150\153\357\153\011\271\275\107\005\043\362\134\316" + "\175\177\074\347\074\057\357\175\056\070\303\272\226\263\332\146" + "\040\227\057\232\321\120\320\273\024\137\366\166\274\342\302\103" + "\037\223\220\320\054\143\066\022\011\323\162\175\335\343\120\365" + "\056\240\172\265\276\367\357\352\136\113\131\032\070\072\205\247" + "\064\303\054\012\313\064\204\067\212\206\342\035\341\001\055\233" + "\130\023\076\022\366\233\062\240\360\265\322\223\165\176\121\234" + "\251\363\207\142\063\026\235\003\247\352\351\315\374\342\344\057" + "\326\262\146\116\170\124\330\227\323\113\132\143\036\365\045\356" + "\124\176\161\101\252\107\366\020\026\121\102\004\361\222\244\304" + "\072\072\105\002\122\363\222\331\377\276\261\232\157\236\202\170" + "\064\171\033\224\061\305\221\041\053\136\277\250\045\351\232\222" + "\232\026\075\045\217\116\131\345\376\067\117\053\075\061\136\357" + "\356\016\102\373\263\155\277\017\103\307\056\124\053\266\375\175" + "\154\333\325\023\160\075\301\145\276\351\057\110\116\323\237\242" + "\127\232\232\357\020\172\267\340\374\252\251\045\367\340\142\033" + "\006\037\215\204\231\250\111\056\331\316\164\032\336\316\240\047" + "\016\375\267\320\265\122\317\252\161\316\351\003\304\066\345\027" + "\335\300\376\001\214\310\375\336\325\037\012\176\150\016\330\036" + "\012\253\000\000\000\011\160\110\131\163\000\000\013\022\000\000" + "\013\022\001\322\335\176\374\000\000\040\000\111\104\101\124\170" + "\136\354\275\011\200\035\107\171\056\372\127\057\147\231\063\253" + "\064\232\221\106\222\045\131\262\215\015\306\041\066\140\300\004" + "\033\010\140\066\007\214\155\202\155\010\011\144\201\027\056\144" + "\275\367\222\304\370\162\157\022\222\220\233\227\344\275\373\040" + "\011\001\313\330\030\343\100\160\000\207\315\330\054\216\143\033" + "\143\214\167\133\326\076\253\064\373\314\131\272\273\136\375\325" + "\313\251\256\256\336\316\234\231\221\344\363\111\147\272\273\352" + "\257\352\356\352\372\276\372\253\272\272\033\240\203\016\072\350" + "\240\203\016\072\350\240\203\016\072\350\240\203\016\072\350\240" + "\203\016\072\350\240\203\016\072\350\240\203\016\072\350\240\203" + "\016\072\070\125\100\322\014\072\070\165\320\173\335\217\066\220" + "\206\265\223\330\264\233\030\132\037\261\111\027\200\143\261\152" + "\260\110\011\131\324\154\173\252\334\060\367\037\376\337\057\137" + "\116\313\253\203\123\003\035\001\070\105\061\360\207\337\352\003" + "\255\364\112\166\205\057\004\012\347\261\240\075\354\327\227\226" + "\316\303\121\366\173\202\020\370\061\020\347\236\343\223\225\373" + "\340\323\027\064\322\022\165\160\362\241\043\000\247\020\166\136" + "\167\147\151\266\121\370\045\240\364\155\154\363\102\366\063\323" + "\322\144\304\054\001\372\115\352\300\255\323\237\170\345\017\322" + "\214\073\070\171\320\021\200\123\000\203\377\375\356\055\224\152" + "\357\245\004\256\146\233\003\151\366\053\001\005\170\234\125\233" + "\317\364\231\365\057\355\277\376\222\152\232\175\007\047\066\072" + "\002\160\022\243\377\277\336\263\123\043\366\273\331\125\374\025" + "\266\131\112\263\157\063\216\020\012\177\257\025\032\267\115\136" + "\177\311\102\232\161\007\047\046\072\002\160\262\341\327\357\067" + "\007\067\126\057\165\000\256\141\127\357\025\260\356\327\220\054" + "\260\003\370\027\112\355\033\216\377\331\057\074\232\146\335\301" + "\211\205\165\256\074\035\144\005\266\366\272\356\134\303\126\257" + "\144\277\301\064\373\365\001\271\237\022\172\303\161\275\357\253" + "\160\375\013\352\151\326\035\254\077\072\002\160\042\003\133\373" + "\241\352\245\224\262\326\236\222\127\260\253\165\222\134\057\062" + "\315\216\371\013\216\103\366\316\374\371\313\366\247\131\167\260" + "\176\070\111\052\324\163\013\375\327\261\326\336\142\255\075\041" + "\047\160\153\237\011\114\007\310\335\324\201\033\246\315\352\267" + "\340\372\113\254\264\004\035\254\055\072\002\160\242\200\267\366" + "\215\113\051\320\153\330\105\071\001\372\366\155\307\030\323\203" + "\317\023\335\374\374\344\365\057\031\113\063\356\140\155\160\252" + "\125\262\223\016\233\131\153\157\073\316\065\016\220\053\311\311" + "\335\332\147\004\265\130\167\346\233\254\346\355\235\372\370\313" + "\356\146\125\220\246\245\350\140\365\320\021\200\365\200\327\332" + "\223\140\044\237\076\067\257\003\041\317\062\372\357\255\065\254" + "\133\146\377\374\225\323\151\346\035\264\037\317\315\212\267\116" + "\160\133\173\116\172\326\267\247\317\201\326\076\053\110\215\225" + "\311\127\251\103\156\230\372\370\205\017\244\131\167\320\076\164" + "\004\140\265\201\255\375\026\326\332\343\110\076\074\207\133\373" + "\214\240\224\074\242\001\335\113\226\053\267\215\377\325\171\213" + "\151\366\035\254\014\235\312\270\112\300\326\236\122\270\232\022" + "\162\025\053\345\116\153\237\027\024\346\161\202\221\146\323\033" + "\106\377\347\313\036\113\063\357\240\065\164\004\240\235\140\255" + "\375\360\346\306\033\200\150\327\120\240\027\235\074\367\355\117" + "\160\120\270\217\375\371\334\040\364\374\333\243\235\011\106\155" + "\105\247\202\266\001\274\265\327\264\253\301\301\326\276\323\267" + "\137\065\120\070\016\204\174\101\063\032\173\107\377\350\025\007" + "\322\314\073\110\107\107\000\132\305\247\130\153\077\346\274\201" + "\165\132\131\337\236\134\324\351\333\257\041\050\070\354\357\335" + "\124\203\317\115\234\175\340\333\160\345\225\166\132\222\016\324" + "\350\124\332\234\300\326\236\140\153\017\344\052\274\157\357\244" + "\045\350\140\325\240\001\177\074\171\224\135\213\033\155\303\276" + "\151\342\243\027\216\247\245\351\040\214\216\000\144\201\327\332" + "\353\024\256\161\010\134\304\052\036\351\020\377\304\201\047\004" + "\015\366\347\233\100\265\317\215\176\354\374\037\262\256\102\147" + "\202\121\006\164\004\040\001\274\265\067\214\253\131\305\272\352" + "\271\061\113\357\224\301\076\326\041\333\133\264\214\133\366\137" + "\377\242\231\064\343\347\062\072\002\040\203\265\366\043\223\330" + "\267\327\130\337\236\262\276\175\247\214\116\142\124\211\106\276" + "\312\134\201\033\216\176\364\202\037\247\031\077\027\321\251\334" + "\036\066\137\367\340\116\335\260\170\337\236\155\016\166\374\307" + "\123\007\304\375\363\063\007\310\347\234\242\361\225\361\337\357" + "\114\060\362\361\234\026\200\363\131\153\077\072\111\336\100\160" + "\044\137\203\213\230\253\177\162\165\034\351\011\164\347\341\044" + "\350\163\173\205\065\247\001\275\315\246\314\053\370\343\027\077" + "\221\234\342\324\307\211\123\201\326\020\133\257\173\150\033\061" + "\033\170\373\356\235\154\163\350\104\256\271\364\104\042\371\012" + "\100\116\040\201\040\315\225\173\301\262\156\050\115\035\373\372" + "\323\177\367\106\177\202\321\011\163\234\153\201\123\242\162\145" + "\302\165\124\033\051\334\377\032\035\310\065\254\241\177\015\013" + "\321\116\244\053\175\252\020\075\057\326\133\030\274\356\301\024" + "\041\160\213\145\127\157\034\375\243\127\034\364\242\326\365\270" + "\326\012\247\174\245\033\376\313\207\206\314\206\375\116\376\350" + "\055\300\066\014\073\041\256\254\363\334\044\174\046\150\153\057" + "\012\336\305\300\273\273\167\201\355\174\356\220\165\373\167\341" + "\372\353\345\011\106\153\176\134\253\215\123\263\022\262\326\164" + "\344\317\176\362\162\003\350\265\354\212\135\312\102\314\165\275" + "\162\035\262\257\034\153\050\012\336\305\072\352\070\364\306\006" + "\151\334\074\361\321\013\047\142\114\327\354\230\126\013\247\124" + "\305\334\171\335\203\375\116\211\277\065\367\132\366\333\215\141" + "\353\162\205\116\056\167\136\074\326\165\051\256\226\261\312\335" + "\007\054\030\326\065\150\260\337\035\032\265\367\356\133\276\375" + "\107\314\053\210\333\347\252\036\313\152\341\144\252\250\261\330" + "\361\027\017\375\074\161\034\374\100\306\133\331\146\211\322\065" + "\276\032\353\117\370\365\336\377\232\026\267\022\253\050\006\236" + "\020\340\111\076\303\352\331\136\250\316\175\161\377\365\227\314" + "\046\044\131\265\143\151\067\326\273\342\264\014\326\267\257\024" + "\155\373\162\002\372\265\354\332\077\037\113\174\315\112\235\256" + "\127\271\071\353\264\337\126\261\216\343\254\144\165\252\203\047" + "\006\370\111\264\257\320\206\165\343\201\217\136\360\140\132\032" + "\130\303\252\231\027\047\131\205\142\255\375\047\036\076\233\021" + "\376\335\204\322\267\263\303\357\131\133\342\257\025\001\327\335" + "\243\130\003\254\136\213\255\004\151\257\030\021\357\247\151\344" + "\247\216\155\337\270\064\065\376\345\361\277\172\375\122\102\222" + "\266\356\277\135\070\051\052\332\236\277\175\252\130\137\136\172" + "\213\106\200\265\366\344\305\324\131\253\322\354\020\176\155\261" + "\026\242\320\176\041\340\113\215\316\261\305\227\300\251\357\175" + "\366\017\137\374\144\102\222\266\356\177\245\070\241\053\336\216" + "\277\174\150\227\116\010\016\350\341\364\334\201\065\353\333\257" + "\152\237\176\065\363\026\260\232\335\224\125\162\257\243\130\003" + "\101\150\343\330\001\153\240\300\173\011\324\075\100\355\033\213" + "\013\117\176\355\321\353\257\154\244\044\153\333\376\133\301\352" + "\125\222\026\201\323\163\247\346\212\257\323\200\276\233\025\350" + "\105\216\127\221\327\244\224\126\215\370\253\224\357\152\222\174" + "\045\130\025\201\150\037\121\043\150\243\010\040\374\101\103\046" + "\006\223\154\161\213\143\325\156\334\367\137\057\070\224\222\254" + "\255\307\220\025\047\114\005\332\376\211\307\107\012\146\343\152" + "\346\336\277\213\271\371\303\130\036\316\132\024\311\152\220\176" + "\065\362\074\201\256\325\012\320\236\053\332\146\302\106\320\306" + "\374\075\257\200\165\132\311\235\140\073\173\237\276\357\261\357" + "\300\255\127\306\275\116\242\155\373\315\212\365\255\124\327\121" + "\155\167\357\043\257\042\032\374\012\241\344\325\016\120\035\326" + "\312\315\107\254\012\121\333\220\347\211\332\262\267\013\155\365" + "\020\332\107\326\020\332\050\002\010\364\010\064\274\254\024\016" + "\123\260\156\142\015\335\115\317\374\376\171\223\012\323\266\356" + "\067\015\353\122\321\316\374\253\047\006\155\335\372\145\126\017" + "\256\146\352\170\032\043\076\176\105\162\365\161\242\022\036\261" + "\012\244\307\347\013\160\256\375\112\236\063\020\323\257\352\274" + "\375\266\211\302\052\035\143\233\316\235\170\177\064\102\032\032" + "\300\067\032\126\343\306\175\363\137\126\115\060\152\313\376\322" + "\320\162\305\150\005\273\377\352\261\363\165\303\376\125\306\231" + "\067\261\263\053\254\211\213\357\143\005\044\120\243\015\371\265" + "\341\230\350\052\010\107\253\040\355\040\161\133\210\326\216\074" + "\024\150\313\261\065\341\166\017\000\363\175\012\300\271\321\252" + "\126\277\270\357\277\136\060\047\230\264\165\177\052\254\172\345" + "\301\133\170\032\155\274\215\355\350\275\154\363\134\326\232\360" + "\326\176\055\337\251\107\332\100\264\046\126\220\127\033\216\203" + "\256\301\065\153\047\310\112\052\161\133\010\327\216\074\302\140" + "\176\025\305\072\105\333\162\174\356\073\015\121\014\130\141\055" + "\063\217\370\137\055\253\276\367\351\337\375\271\237\110\146\155" + "\331\227\214\125\253\114\273\077\371\360\166\303\064\337\103\301" + "\171\047\053\246\015\170\364\366\252\234\102\024\144\045\044\215" + "\303\112\310\273\202\264\047\033\341\223\260\156\142\260\222\264" + "\051\150\367\073\144\164\302\273\132\130\126\017\201\143\357\235" + "\235\256\176\145\364\372\013\226\275\350\266\356\013\321\336\312" + "\305\052\372\363\376\356\361\137\140\271\262\326\236\274\206\155" + "\353\350\346\267\375\250\023\320\316\326\236\256\124\110\132\070" + "\226\266\023\276\205\143\210\105\033\211\264\136\142\100\332\114" + "\130\104\273\074\001\021\170\321\170\027\101\043\330\045\270\025" + "\157\045\076\361\341\363\374\011\106\155\333\137\133\052\307\131" + "\237\170\274\007\272\234\053\331\041\277\207\145\270\307\167\363" + "\333\166\224\031\321\116\362\043\132\022\200\026\217\241\055\304" + "\157\161\337\055\243\215\025\277\045\101\150\141\377\253\041\000" + "\076\126\123\010\360\134\131\127\341\036\346\121\337\330\365\360" + "\322\327\036\370\364\005\151\023\214\062\141\105\025\346\214\277" + "\176\342\164\323\204\367\121\215\274\003\034\332\115\327\352\336" + "\275\214\266\126\374\026\363\152\341\030\132\022\030\021\047\320" + "\000\140\200\025\014\004\256\210\234\271\311\227\327\076\043\162" + "\037\107\166\370\063\015\065\035\046\330\116\156\321\250\176\343" + "\317\076\270\047\155\202\121\042\132\252\100\347\374\077\117\340" + "\207\057\177\235\325\337\127\063\306\153\070\240\267\152\147\235" + "\204\026\110\027\207\126\311\110\234\374\145\210\303\107\151\066" + "\261\150\343\071\257\011\132\040\004\016\261\245\331\250\300\232" + "\310\334\351\126\044\072\161\150\341\234\363\200\173\005\370\063" + "\210\315\352\303\235\154\373\206\207\307\317\374\056\134\237\377" + "\173\065\231\053\323\305\327\335\151\114\014\155\373\045\102\340" + "\267\130\121\237\215\156\276\263\146\017\345\250\320\076\042\264" + "\102\176\322\102\353\333\312\176\116\072\302\047\241\005\142\264" + "\102\120\232\323\013\151\145\037\351\130\215\074\243\320\065\376" + "\104\042\256\036\142\047\162\223\131\040\067\075\370\253\147\250" + "\046\030\051\221\132\271\160\156\176\315\351\303\221\374\017\122" + "\234\264\103\035\116\374\365\105\333\110\221\077\237\234\217\004" + "\347\356\333\267\215\360\230\217\137\011\127\232\347\052\124\346" + "\234\142\100\362\266\065\255\075\376\333\112\232\024\344\073\317" + "\126\301\275\002\246\006\072\241\165\046\150\167\150\204\176\356" + "\301\337\074\343\236\054\351\142\361\242\117\077\365\052\307\206" + "\077\145\136\356\056\116\374\065\071\225\004\264\215\034\034\271" + "\363\242\371\310\237\307\266\175\347\326\256\174\362\040\047\231" + "\103\310\237\066\257\075\333\105\056\061\310\143\233\035\371\317" + "\263\145\340\255\104\135\303\211\307\316\203\015\252\375\351\043" + "\277\265\347\207\161\266\102\145\151\126\234\113\377\366\351\302" + "\130\031\076\146\133\344\335\066\166\163\327\354\320\023\100\355" + "\166\126\354\314\171\265\070\215\066\173\232\226\136\030\332\112" + "\232\265\104\213\225\075\373\213\077\263\332\005\150\141\032\163" + "\136\373\164\020\275\375\171\046\300\025\002\164\132\341\326\245" + "\006\375\343\247\077\164\206\070\313\220\243\131\221\256\243\332" + "\305\360\075\155\323\363\367\364\076\063\123\377\247\206\103\137" + "\272\126\023\167\122\321\032\011\325\310\225\127\036\333\034\356" + "\176\256\143\360\320\112\232\023\001\171\211\227\303\076\167\267" + "\040\257\060\345\070\226\314\130\215\074\023\200\225\306\324\361" + "\336\001\075\300\034\330\167\377\344\067\167\077\045\307\007\370" + "\324\375\107\272\376\277\037\057\177\266\141\303\105\153\172\224" + "\111\150\147\305\317\231\127\316\101\273\154\266\071\217\041\267" + "\175\032\262\166\143\362\271\315\351\310\133\361\363\331\147\262" + "\155\151\260\057\337\161\144\303\152\344\231\002\103\043\350\015" + "\034\263\100\177\353\117\337\277\363\131\077\074\250\014\237\370" + "\301\144\317\055\217\314\177\250\106\351\007\325\131\254\041\332" + "\135\351\363\021\231\043\243\353\237\305\306\105\266\374\232\310" + "\153\357\043\053\301\127\202\225\210\103\336\312\237\317\076\325" + "\266\205\256\000\344\366\034\322\320\322\061\254\034\170\267\240" + "\250\321\307\177\336\236\176\375\247\177\303\235\110\144\340\237" + "\373\357\247\346\357\335\373\324\356\232\141\274\017\347\041\257" + "\053\260\342\267\365\030\370\150\170\232\121\010\336\143\264\311" + "\066\031\063\015\146\047\146\071\047\221\364\131\354\175\210\244" + "\317\223\256\145\110\342\224\117\020\304\143\315\222\216\333\147" + "\234\145\347\275\275\073\305\046\133\136\042\110\233\105\200\144" + "\074\367\266\002\147\347\332\124\173\336\303\205\101\174\315\336" + "\147\060\214\013\000\154\071\152\036\167\350\225\050\020\111\031" + "\254\072\070\371\323\214\362\040\177\053\352\222\077\315\050\053" + "\315\062\236\117\040\022\051\166\042\234\065\150\351\263\102\024" + "\040\055\217\030\004\342\230\232\206\204\156\153\046\202\167\170" + "\223\115\232\365\042\273\030\144\336\177\106\320\165\021\001\213" + "\362\331\272\357\144\365\374\237\361\334\135\001\030\031\151\120" + "\355\251\347\145\255\326\253\206\166\356\236\346\153\371\151\266" + "\226\072\033\121\203\226\074\305\060\333\076\233\010\021\055\143" + "\232\024\370\343\034\055\365\217\225\020\275\230\314\142\220\125" + "\010\362\331\245\173\003\331\313\336\105\233\111\233\153\337\155" + "\203\015\344\114\160\047\023\332\134\000\316\147\077\023\110\251" + "\261\116\007\204\040\055\270\352\355\002\157\365\123\367\235\315" + "\233\160\137\320\221\154\112\262\012\004\042\324\247\317\140\017" + "\115\122\147\201\160\336\231\322\344\022\012\232\123\014\374\027" + "\300\246\221\014\075\260\324\126\236\203\244\266\332\064\147\227" + "\300\237\001\232\047\115\074\110\273\037\047\316\002\235\135\014" + "\360\304\321\360\302\054\275\141\215\321\222\271\076\223\175\132" + "\035\360\212\105\106\327\033\062\272\374\131\011\345\126\314\024" + "\233\214\307\346\023\077\203\255\074\140\231\041\311\012\020\055" + "\213\154\004\362\317\047\135\010\122\313\320\105\006\127\037\221" + "\305\165\247\371\104\200\043\113\276\351\040\153\334\025\050\350" + "\004\254\145\313\142\347\313\347\363\162\001\300\223\177\301\237" + "\074\360\114\245\273\104\353\272\106\326\177\252\157\253\310\321" + "\262\146\106\006\317\044\150\025\222\315\062\015\160\006\304\117" + "\266\013\275\012\054\055\317\125\006\025\316\074\275\145\316\344" + "\025\144\155\145\375\162\317\140\227\222\127\153\145\230\236\157" + "\026\264\266\357\334\300\133\201\006\153\373\147\216\055\064\303" + "\374\225\152\303\171\030\306\347\111\357\151\003\120\265\350\232" + "\275\262\213\072\031\110\221\002\124\121\164\245\362\346\102\041" + "\145\264\077\313\070\002\205\324\026\075\040\110\322\276\034\073" + "\335\006\341\265\366\151\146\331\040\027\131\033\052\163\166\362" + "\002\337\277\226\070\073\216\170\177\322\362\312\342\015\244\265" + "\264\044\127\367\246\211\166\270\361\204\144\237\005\331\022\012" + "\036\371\347\306\347\231\007\120\013\236\021\010\004\300\052\054" + "\174\263\266\104\046\346\217\316\015\365\155\355\205\006\123\200" + "\372\032\114\005\154\117\105\166\105\040\315\106\204\333\357\117" + "\264\110\045\166\026\362\247\335\061\240\376\024\347\324\174\150" + "\066\073\216\174\145\321\104\226\164\131\053\152\060\300\231\322" + "\007\267\075\101\113\021\202\114\004\117\263\111\163\333\133\351" + "\012\144\274\044\353\004\074\266\222\341\126\323\231\261\071\250" + "\117\057\261\232\244\377\235\030\037\140\317\107\357\273\214\235" + "\376\377\061\272\212\320\277\265\017\210\241\103\315\136\305\227" + "\174\264\245\357\237\077\217\364\111\076\151\361\334\044\203\115" + "\374\255\072\232\345\331\206\134\217\034\147\070\346\125\101\016" + "\302\244\022\064\105\010\062\214\037\340\010\153\232\101\162\074" + "\144\034\323\220\321\112\032\011\055\355\067\036\046\153\365\013" + "\272\006\265\345\032\314\217\316\202\135\155\340\076\376\374\251" + "\377\165\301\337\372\066\221\112\163\346\177\277\377\167\231\153" + "\374\273\314\045\201\256\301\036\350\336\130\001\207\150\320\260" + "\235\366\276\324\063\225\204\351\310\063\332\035\040\155\277\151" + "\361\056\126\224\107\352\123\205\331\216\001\326\217\364\161\310" + "\130\201\123\052\172\352\323\173\351\104\131\151\372\154\066\022" + "\132\354\102\204\321\302\176\105\140\205\060\064\015\114\235\365" + "\052\033\026\314\063\227\277\072\313\077\132\214\056\355\137\077" + "\371\247\027\174\122\266\217\140\317\177\273\357\132\326\276\175" + "\214\255\226\065\235\011\101\177\027\164\155\250\200\136\064\171" + "\327\000\305\140\105\107\211\310\134\311\223\220\057\217\364\226" + "\037\262\034\327\212\310\233\110\376\364\175\103\346\163\316\224" + "\127\006\264\124\041\063\246\111\310\073\125\004\134\243\044\233" + "\004\117\042\333\361\345\363\004\362\330\046\040\327\076\233\300" + "\151\041\330\332\233\254\237\137\233\257\302\302\261\105\250\262" + "\245\207\161\366\373\203\247\376\364\305\337\222\323\305\126\222" + "\263\376\350\336\135\266\243\175\214\031\374\242\037\126\250\024" + "\241\302\204\240\334\137\006\213\342\030\001\264\326\075\150\107" + "\345\314\231\007\205\054\056\167\112\236\151\067\371\022\036\355" + "\135\171\253\237\020\237\371\326\242\270\316\372\060\232\037\104" + "\150\146\105\317\135\101\123\354\127\352\015\044\015\236\321\204" + "\356\100\306\363\040\220\363\021\336\214\371\306\042\147\372\002" + "\273\206\254\247\016\204\065\312\213\323\213\260\304\210\157\041" + "\061\135\054\263\152\363\317\264\140\375\355\323\327\137\030\171" + "\024\030\221\132\155\366\374\361\177\076\037\054\362\253\254\352" + "\137\306\066\273\060\114\063\064\350\146\102\200\142\100\230\257" + "\341\172\005\151\176\227\207\324\212\236\001\055\344\261\142\001" + "\130\001\371\235\004\362\247\277\311\070\046\136\105\172\361\030" + "\064\176\161\331\121\333\072\253\123\232\373\163\130\103\201\057" + "\227\125\347\111\101\143\256\035\161\050\377\151\216\103\065\233" + "\055\155\210\103\256\312\232\154\233\064\371\107\133\107\021\310" + "\055\000\210\014\371\306\042\103\132\154\355\261\245\057\030\004" + "\352\013\065\130\230\142\304\237\133\306\163\365\054\350\121\326" + "\340\334\130\050\070\067\074\172\375\313\217\047\345\225\116\012" + "\027\144\317\157\177\275\107\253\154\274\222\152\332\065\154\373" + "\114\077\242\324\123\202\236\301\156\050\367\226\241\316\334\201" + "\172\332\240\141\152\205\317\212\034\371\244\272\345\151\171\245" + "\304\047\014\326\305\267\374\151\171\052\342\043\244\157\332\020" + "\036\315\275\126\242\151\266\241\021\333\040\044\236\354\331\101" + "\250\343\150\266\103\365\206\343\350\126\032\221\123\053\160\132" + "\174\114\376\211\236\100\342\340\142\232\207\221\166\074\220\341" + "\230\105\344\261\215\101\314\376\014\217\364\006\043\330\302\364" + "\022\314\117\056\100\243\346\277\035\034\047\366\070\167\261\213" + "\365\271\247\377\343\033\337\205\357\135\217\302\235\172\054\131" + "\053\107\310\156\367\177\273\347\345\032\061\120\010\336\010\070" + "\213\230\301\050\350\120\331\330\015\335\354\207\017\036\243\027" + "\322\120\051\101\052\331\322\220\063\175\206\375\255\110\000\142" + "\310\337\172\137\077\205\370\302\072\367\036\074\307\204\020\113" + "\327\064\307\324\210\243\347\056\243\314\040\324\166\120\010\314" + "\072\172\011\361\146\131\110\220\140\023\223\376\071\043\002\302" + "\276\334\326\236\100\121\047\320\130\256\303\374\324\002\054\061" + "\127\337\361\270\305\104\177\212\125\201\133\254\132\375\306\147" + "\077\371\212\203\122\116\251\307\221\265\242\050\355\166\375\227" + "\157\017\031\135\275\127\261\003\276\232\155\156\367\055\161\320" + "\260\147\123\017\024\053\105\056\002\015\346\025\360\073\010\251" + "\104\113\103\276\364\351\304\206\374\144\014\242\132\151\365\041" + "\141\177\331\210\037\046\075\246\261\165\135\263\115\302\211\277" + "\126\100\257\100\267\154\307\254\045\012\001\067\115\042\103\176" + "\021\160\243\142\204\140\005\042\220\205\340\231\204\042\204\274" + "\366\115\030\072\241\070\155\027\047\352\054\262\326\176\216\021" + "\277\276\130\013\342\131\306\367\262\116\332\015\365\261\107\277" + "\261\377\263\357\155\106\104\221\054\176\111\221\002\342\354\334" + "\360\363\177\135\077\343\065\357\276\230\230\346\265\224\352\257" + "\006\336\317\144\312\125\064\241\147\250\207\217\027\070\254\322" + "\326\055\112\224\136\101\056\144\040\265\207\365\020\200\130\362" + "\347\335\217\117\176\237\370\041\073\326\237\147\156\276\116\034" + "\003\373\365\321\264\220\375\312\256\020\254\153\140\071\066\363" + "\012\150\112\367\240\315\102\320\166\021\310\100\356\174\002\220" + "\307\326\005\136\062\044\075\376\034\326\152\316\115\316\301\302" + "\161\326\332\133\201\306\316\121\240\377\102\254\345\275\117\375" + "\305\253\236\020\222\046\355\153\325\004\100\014\013\326\167\176" + "\370\033\333\215\342\206\167\021\135\273\212\155\156\302\060\174" + "\023\011\212\100\317\306\156\122\350\052\362\311\105\070\136\220" + "\353\231\203\234\063\175\117\044\362\047\035\113\144\006\143\250" + "\237\357\306\371\066\204\140\337\336\061\230\253\357\272\371\271" + "\253\130\106\244\227\134\004\350\011\060\257\240\141\073\006\353" + "\224\152\011\127\126\115\214\244\101\300\070\342\235\360\042\220" + "\361\003\047\176\337\276\300\312\175\161\166\031\146\047\346\240" + "\266\130\305\062\165\323\123\372\210\343\130\173\311\341\373\277" + "\362\364\347\077\264\350\045\223\363\216\333\327\332\012\200\277" + "\276\355\212\217\230\305\035\127\274\101\053\340\130\001\171\031" + "\217\140\044\056\224\212\320\347\171\005\070\112\121\213\033\053" + "\120\042\003\251\041\033\371\151\302\250\075\111\022\233\234\344" + "\217\025\031\077\234\050\266\205\326\037\047\250\153\304\062\031" + "\351\335\326\076\153\121\255\046\022\113\327\035\064\264\371\070" + "\201\146\045\331\251\203\363\205\267\042\002\064\201\230\131\346" + "\344\147\027\201\204\375\200\373\262\316\022\166\334\032\066\314" + "\114\316\303\374\261\005\260\055\367\246\013\353\333\243\002\334" + "\156\327\347\367\356\373\344\153\361\123\341\176\136\362\322\307" + "\211\045\000\342\372\216\017\177\153\217\131\252\134\013\232\161" + "\071\163\006\172\171\204\256\101\317\206\156\046\006\275\140\260" + "\256\002\172\005\370\213\077\332\164\122\373\110\023\200\134\055" + "\262\210\230\164\361\142\222\223\374\320\044\076\016\346\151\254" + "\157\277\272\203\172\155\102\334\331\007\136\201\131\127\223\041" + "\037\331\343\354\143\111\233\100\324\270\007\170\262\220\073\213" + "\115\023\141\133\174\125\067\016\350\341\303\071\313\163\313\060" + "\307\132\373\305\271\245\040\236\325\315\147\251\135\377\374\334" + "\301\007\276\064\161\363\207\247\041\114\140\052\154\253\216\041" + "\153\130\200\054\025\053\316\046\263\000\370\353\375\027\177\270" + "\153\343\371\227\135\246\025\312\127\023\115\073\327\217\050\125" + "\112\320\077\334\013\225\201\056\076\247\000\205\300\012\071\221" + "\331\011\220\106\176\317\050\301\046\205\264\162\160\033\311\217" + "\236\207\333\332\343\240\136\053\137\272\133\147\304\313\252\067" + "\150\150\324\243\363\012\362\222\067\032\336\212\000\304\356\227" + "\107\245\023\074\257\010\024\274\326\036\237\265\307\221\374\351" + "\361\005\260\032\165\036\313\132\373\206\143\067\276\103\227\347" + "\156\334\367\267\277\365\103\200\375\161\104\077\341\005\040\115" + "\010\210\377\333\371\301\257\274\120\357\331\364\056\115\063\337" + "\302\334\334\062\106\352\206\016\175\233\172\171\027\101\143\353" + "\125\333\175\042\061\317\234\377\124\001\150\261\365\217\313\127" + "\031\256\010\243\022\361\211\057\034\004\211\357\170\043\371\374" + "\336\175\340\274\346\250\141\047\004\102\047\035\047\213\024\273" + "\007\170\053\321\150\210\175\344\270\061\000\045\321\024\141\361" + "\343\004\371\275\000\216\024\202\147\021\000\274\205\127\144\177" + "\112\246\106\153\363\065\230\236\230\205\371\343\330\205\167\223" + "\262\072\061\146\327\227\276\260\164\370\361\133\306\276\360\133" + "\143\136\262\070\342\373\113\125\270\010\071\354\304\024\000\177" + "\173\323\033\257\353\355\173\336\305\227\103\261\374\313\232\246" + "\355\366\023\124\372\272\230\127\320\007\135\175\145\122\163\250" + "\373\216\202\224\042\317\044\024\061\055\166\136\362\307\012\115" + "\026\362\363\076\076\045\272\337\332\103\374\055\274\324\132\266" + "\116\110\057\350\004\140\142\106\176\233\272\102\040\172\005\134" + "\010\244\223\136\027\021\310\062\026\020\223\226\337\267\067\000" + "\014\326\264\317\361\326\176\026\032\325\006\267\345\357\344\264" + "\255\037\061\377\377\306\247\367\176\340\173\060\275\017\147\362" + "\250\010\176\122\013\100\222\020\310\267\255\274\355\101\355\264" + "\337\370\364\205\205\376\341\167\022\335\374\105\346\025\360\011" + "\106\246\151\220\376\315\314\053\330\324\003\124\327\270\127\320" + "\120\214\025\244\266\374\256\121\202\115\166\102\273\301\331\132" + "\376\220\313\117\375\326\336\302\326\336\224\105\047\265\306\235" + "\244\110\273\060\016\150\266\143\033\365\320\255\104\221\264\124" + "\332\366\221\103\004\362\164\051\232\121\031\104\300\263\301\251" + "\031\330\267\057\343\364\334\245\032\314\214\055\300\314\324\054" + "\120\377\021\132\002\307\235\372\322\277\054\036\170\370\246\261" + "\133\077\164\310\113\116\205\237\330\351\215\023\001\131\000\144" + "\233\054\333\041\244\135\033\204\312\106\016\153\105\000\124\151" + "\370\157\350\115\327\015\166\237\365\013\127\350\205\256\253\130" + "\007\157\204\107\062\125\355\331\120\341\136\001\116\073\306\161" + "\202\145\346\025\370\323\237\123\005\240\025\362\363\250\214\255" + "\177\042\371\131\337\036\054\123\327\255\202\333\267\127\344\031" + "\111\174\162\042\113\205\212\300\113\304\256\045\165\250\201\136" + "\001\216\025\270\204\010\221\160\005\042\260\112\343\001\254\265" + "\247\045\323\155\255\346\217\063\322\217\315\302\122\363\051\074" + "\166\102\366\217\355\205\251\233\047\276\376\277\276\271\370\354" + "\275\030\041\222\133\376\201\142\335\207\057\020\151\004\117\333" + "\016\041\313\365\312\052\000\131\310\217\120\011\100\104\004\370" + "\126\317\126\143\307\273\376\346\125\146\337\146\346\025\024\056" + "\362\323\026\312\005\330\270\245\017\172\231\127\200\023\214\230" + "\020\220\324\267\027\305\012\100\002\371\025\335\005\145\067\043" + "\206\374\370\040\016\153\355\013\330\332\373\147\050\077\374\163" + "\252\020\277\125\250\012\037\273\001\330\055\100\041\340\136\001" + "\026\122\222\020\250\104\100\105\352\104\267\076\273\347\300\373" + "\366\330\332\343\013\066\153\015\230\231\230\247\350\346\333\315" + "\221\353\005\253\266\370\265\372\221\237\335\174\344\226\017\371" + "\023\166\124\044\367\267\035\105\234\017\225\040\044\221\174\325" + "\005\040\116\020\362\010\200\154\033\057\002\336\372\320\133\377" + "\327\266\312\356\227\134\141\024\273\057\147\356\300\006\036\301" + "\056\300\300\246\076\030\330\334\303\047\030\341\070\101\125\365" + "\060\122\013\344\127\075\245\347\144\151\371\275\326\136\143\304" + "\327\304\351\271\035\342\047\042\356\102\120\034\067\247\301\363" + "\007\064\104\142\371\176\276\100\126\055\246\345\116\176\345\170" + "\262\010\340\227\166\273\164\374\274\026\300\334\364\042\034\037" + "\235\345\023\167\300\273\234\224\132\217\067\346\217\337\072\167" + "\347\247\156\237\176\364\337\232\243\175\255\221\137\265\314\057" + "\000\376\126\314\274\210\166\012\200\277\124\221\136\014\023\005" + "\300\337\366\155\022\105\000\177\345\155\347\025\207\337\370\307" + "\257\065\373\206\256\004\243\170\276\157\203\267\022\007\107\172" + "\241\167\260\033\032\224\173\005\374\226\042\107\116\001\210\173" + "\104\067\111\000\010\330\272\246\065\012\356\240\236\124\106\035" + "\362\147\102\274\032\273\004\344\323\216\035\157\332\061\211\021" + "\002\211\340\262\020\344\025\000\074\246\242\251\121\154\355\251" + "\145\301\361\261\071\230\031\237\203\106\335\237\343\104\353\166" + "\155\376\233\215\261\307\277\170\350\246\337\176\010\232\204\226" + "\177\220\262\055\273\370\151\304\317\262\256\332\016\241\035\002" + "\040\023\136\105\172\025\261\345\260\270\165\171\333\027\020\062" + "\362\326\377\261\273\170\372\113\257\062\112\075\157\142\356\100" + "\067\032\351\006\363\012\206\372\140\343\346\076\320\113\046\172" + "\005\104\351\025\160\304\010\103\326\201\077\212\217\336\262\326" + "\236\064\212\232\342\141\034\034\252\044\302\314\301\366\022\277" + "\275\271\045\043\113\065\151\017\342\366\104\203\021\123\202\305" + "\336\364\012\304\101\103\277\110\044\222\107\306\004\062\014\010" + "\342\204\235\262\211\156\076\363\347\247\227\141\152\154\226\272" + "\267\360\134\070\166\343\240\075\067\165\333\334\075\173\157\077" + "\376\320\155\376\204\035\237\310\255\222\137\014\127\255\253\226" + "\111\353\252\355\020\262\134\331\325\022\000\104\122\353\057\333" + "\107\004\300\377\025\117\177\111\145\370\065\037\176\275\331\277" + "\375\012\315\050\234\345\245\205\112\137\031\275\002\202\063\016" + "\353\254\210\227\055\150\172\005\161\323\175\143\156\023\212\123" + "\175\171\153\117\230\213\217\375\173\176\014\321\062\306\020\337" + "\223\130\113\252\236\012\210\027\001\227\240\101\074\305\313\145" + "\060\217\000\307\012\014\333\113\054\024\167\202\020\050\306\003" + "\060\137\246\344\264\154\340\323\014\024\216\117\314\302\324\321" + "\071\250\057\067\300\375\336\001\265\235\352\374\367\253\143\117" + "\334\166\344\346\337\273\027\240\252\042\173\234\007\020\107\154" + "\107\132\367\343\345\145\022\361\125\141\161\333\041\254\226\000" + "\304\221\137\264\101\310\002\240\262\111\025\000\061\156\363\145" + "\177\372\374\322\216\363\057\067\053\175\277\310\370\127\302\014" + "\314\242\316\075\202\301\341\136\040\005\035\226\130\125\101\317" + "\100\131\062\252\201\077\116\176\302\352\014\163\361\221\370\304" + "\366\136\247\036\315\041\024\222\166\147\242\203\174\220\133\166" + "\141\035\357\032\330\024\357\036\024\352\064\164\031\122\274\001" + "\215\277\065\005\272\014\174\175\266\006\325\071\154\355\347\351" + "\314\344\134\360\260\032\245\215\111\173\146\354\366\371\207\276" + "\364\345\143\017\176\141\222\213\114\225\221\265\344\055\263\013" + "\000\050\326\305\231\221\252\221\176\125\172\061\056\056\054\156" + "\073\204\054\025\064\215\360\362\172\026\001\020\347\002\244\211" + "\100\036\001\010\342\053\147\134\334\073\370\252\367\277\305\030" + "\330\172\031\321\313\247\171\171\102\357\306\012\154\032\351\043" + "\075\175\025\130\146\052\277\154\073\315\151\307\312\076\276\303" + "\132\373\172\061\251\265\017\114\203\077\174\045\113\331\166\220" + "\033\276\313\057\204\010\261\170\133\230\062\041\260\051\166\017" + "\232\023\214\374\273\002\370\307\027\001\326\056\100\231\221\336" + "\140\256\332\364\370\042\114\036\075\016\125\357\231\173\146\357" + "\330\265\271\007\152\143\217\376\353\354\035\327\377\260\261\064" + "\215\023\166\354\232\117\106\302\310\132\015\021\336\001\065\371" + "\041\045\314\257\175\161\255\177\134\170\132\130\334\166\010\131" + "\052\151\126\001\360\267\145\022\313\266\042\121\305\155\161\135" + "\265\035\042\170\112\234\140\123\320\267\274\355\117\316\057\155" + "\077\377\227\264\256\276\127\020\320\231\326\073\244\120\052\300" + "\320\110\077\014\014\343\004\043\235\167\017\252\266\315\153\206" + "\233\220\267\366\305\244\326\336\107\364\255\163\035\362\257\056" + "\344\076\275\162\225\135\027\335\166\275\002\243\356\136\127\167" + "\104\246\313\324\240\314\152\210\265\154\321\251\261\031\354\337" + "\263\076\275\303\343\251\143\315\131\363\143\337\134\174\344\313" + "\267\057\075\160\323\241\006\361\110\135\347\167\234\003\222\327" + "\130\077\120\022\000\221\320\062\341\323\004\101\034\003\120\021" + "\136\046\172\334\122\136\127\155\207\220\245\242\312\066\052\162" + "\313\341\262\115\034\301\133\021\001\225\000\150\212\165\071\114" + "\353\076\367\322\301\015\057\276\372\115\346\206\155\157\046\106" + "\061\170\127\101\377\246\136\326\105\350\045\225\336\222\126\267" + "\153\305\252\123\057\072\274\252\044\226\135\000\032\374\341\053" + "\131\312\264\203\026\020\024\154\206\031\172\042\160\240\120\007" + "\243\136\326\013\165\123\323\355\231\251\071\326\267\237\201\205" + "\331\345\300\033\160\152\263\217\327\047\037\371\372\302\217\076" + "\171\267\075\073\125\263\154\260\110\243\141\065\210\107\320\072" + "\016\101\160\162\362\167\355\325\174\141\250\006\242\040\266\344" + "\355\046\177\032\361\117\031\001\210\043\175\034\331\343\302\143" + "\105\200\377\314\056\175\344\115\177\374\362\342\366\237\173\263" + "\136\351\177\221\116\032\045\135\263\212\345\156\335\334\304\274" + "\202\376\301\036\166\365\011\353\036\120\250\213\075\064\011\064" + "\262\302\067\262\224\151\007\053\105\212\010\020\357\117\031\077" + "\160\303\174\070\273\156\361\226\176\152\164\301\252\327\110\315" + "\175\030\311\251\132\363\007\277\137\333\367\215\177\257\077\362" + "\205\175\330\033\044\066\261\231\063\110\255\032\324\011\151\330" + "\215\106\330\003\140\135\000\247\010\174\351\167\003\362\172\000" + "\111\302\220\046\000\142\230\154\047\042\111\020\102\310\122\131" + "\145\033\231\324\252\165\221\314\142\274\110\106\037\171\105\040" + "\111\000\222\104\100\023\176\344\171\057\251\014\275\350\322\256" + "\113\213\203\333\336\074\126\175\315\226\261\305\127\024\032\166" + "\067\077\026\374\030\312\206\041\364\012\372\241\130\051\360\356" + "\301\262\342\126\142\307\365\137\137\304\075\214\303\047\354\030" + "\356\343\267\363\323\330\267\237\141\313\346\063\367\025\363\260" + "\075\134\272\373\270\071\167\327\327\237\276\147\364\233\143\317" + "\066\246\034\033\154\302\004\300\266\361\235\034\304\141\036\100" + "\235\130\236\000\064\070\211\354\172\263\013\340\222\334\035\014" + "\264\041\114\334\054\002\000\122\032\221\374\252\070\025\241\125" + "\102\040\333\250\342\102\310\122\141\127\052\000\362\122\223\226" + "\111\244\127\205\251\310\256\042\174\224\374\046\350\277\370\336" + "\015\027\234\166\166\361\315\135\275\332\205\054\106\367\047\367" + "\070\324\044\023\213\057\061\107\027\056\051\316\126\317\010\076" + "\232\132\351\301\011\106\375\060\060\330\015\065\157\202\121\135" + "\326\151\167\043\113\131\166\320\116\010\136\000\026\176\231\077" + "\214\303\126\030\173\217\361\326\176\006\352\236\013\247\221\057" + "\137\214\370\000\000\040\000\111\104\101\124\006\154\054\077\320" + "\030\351\371\356\162\177\361\161\333\115\103\360\032\132\313\263" + "\316\203\207\236\256\336\361\340\327\026\176\142\163\021\140\136" + "\200\305\204\240\332\250\171\344\167\352\365\246\373\017\105\236" + "\045\016\032\304\171\000\161\042\000\222\035\110\353\000\361\344" + "\127\055\117\112\001\020\311\031\147\237\364\313\342\001\210\066" + "\372\356\237\053\367\137\360\113\335\227\156\334\142\276\305\050" + "\222\021\361\131\102\352\104\313\140\241\276\135\077\062\367\232" + "\322\304\342\313\114\313\051\361\170\303\320\270\107\260\161\244" + "\217\277\301\150\251\341\172\005\115\057\240\043\000\353\001\174" + "\201\102\227\351\266\366\213\263\113\214\364\263\060\075\065\037" + "\124\373\222\061\151\157\251\174\257\276\245\162\127\275\140\314" + "\361\120\052\314\025\360\057\032\316\030\154\324\351\350\364\130" + "\343\216\037\337\061\377\255\043\217\325\146\254\052\340\055\001" + "\132\167\307\000\374\367\354\313\044\027\373\377\376\266\212\374" + "\111\277\225\012\200\030\056\157\257\272\000\250\342\145\102\213" + "\113\115\132\217\113\023\367\223\323\253\134\175\276\174\355\373" + "\067\274\160\347\013\212\227\125\172\215\213\231\267\130\120\275" + "\160\214\052\336\361\347\207\041\371\307\027\136\141\036\235\277" + "\270\210\242\340\307\367\016\164\361\073\010\335\070\301\210\125" + "\213\045\313\041\015\361\022\166\260\252\300\213\203\267\360\220" + "\370\272\115\351\324\304\034\163\363\247\241\266\334\360\342\035" + "\326\332\377\244\061\322\375\275\172\177\351\247\226\046\177\061" + "\130\172\327\122\120\351\164\234\035\306\324\201\271\377\113\323" + "\326\335\117\377\244\366\325\273\276\070\375\063\100\022\065\005" + "\100\046\276\112\024\322\176\040\245\361\041\257\307\011\200\212" + "\334\047\204\000\250\010\354\103\345\362\213\144\116\042\275\112" + "\000\124\341\332\326\163\314\356\127\135\325\377\372\201\255\205" + "\267\261\126\373\164\227\364\161\263\373\242\347\257\012\143\040" + "\163\313\173\364\303\363\257\051\116\056\135\140\140\167\001\003" + "\013\005\035\006\267\014\340\223\211\004\077\245\356\115\060\112" + "\056\361\365\102\253\007\225\245\206\254\021\370\364\134\303\035" + "\324\133\136\250\062\322\263\326\176\022\157\341\271\147\127\320" + "\147\235\315\225\273\032\254\305\257\225\214\143\301\031\023\325" + "\203\060\222\010\340\067\323\370\143\176\040\126\110\002\215\032" + "\175\152\352\120\375\137\277\177\363\314\267\107\237\151\370\017" + "\370\264\313\003\360\155\305\264\376\172\026\362\213\347\040\237" + "\243\234\126\211\054\227\127\266\041\061\113\071\214\100\274\255" + "\070\157\076\257\010\050\075\200\327\374\332\206\263\166\235\127" + "\272\274\322\253\275\216\020\122\016\323\160\005\002\340\155\363" + "\334\370\247\317\272\311\350\302\253\012\314\053\050\124\355\041" + "\315\317\173\140\123\057\154\332\322\013\075\003\025\326\065\100" + "\257\100\176\257\341\032\040\361\122\267\011\131\152\114\233\301" + "\133\173\374\044\026\273\070\323\223\363\060\176\344\070\023\000" + "\377\133\030\024\130\237\336\332\322\175\147\155\123\371\001\213" + "\020\333\015\104\170\307\312\053\216\054\002\342\066\361\154\064" + "\141\252\161\220\226\307\240\013\261\260\060\155\177\373\211\173" + "\027\376\345\007\067\317\355\203\225\171\000\142\032\220\326\101" + "\312\007\244\145\234\000\210\166\342\372\232\013\200\114\146\225" + "\255\117\134\321\116\116\027\367\013\006\021\267\236\136\054\137" + "\362\376\215\257\033\030\062\336\156\026\311\363\261\077\117\103" + "\345\350\103\065\275\067\172\356\312\326\337\361\207\232\361\155" + "\025\256\215\373\275\111\002\323\313\317\327\217\056\274\272\170" + "\254\366\163\046\165\277\205\002\245\162\001\360\126\042\116\075" + "\246\232\016\213\026\345\257\076\137\013\156\162\254\326\216\262" + "\324\224\066\002\033\143\336\332\063\362\067\226\352\060\061\072" + "\003\307\306\146\300\266\335\353\153\152\213\164\270\353\207\215" + "\315\225\073\353\225\302\121\047\372\022\020\141\033\011\256\360" + "\002\202\060\357\334\270\027\100\110\110\000\074\113\352\006\151" + "\074\334\252\321\237\062\257\340\137\276\371\351\343\337\075\066" + "\132\107\045\362\053\135\053\042\220\104\376\064\001\020\227\161" + "\353\155\025\000\325\172\322\122\105\174\037\272\302\066\115\004" + "\270\160\134\174\355\300\316\063\137\336\365\366\112\217\361\026" + "\166\315\370\153\306\225\217\352\162\264\320\372\123\171\333\353" + "\110\360\001\103\157\340\217\172\373\244\370\342\322\001\155\164" + "\361\022\163\174\361\125\146\315\351\347\347\310\157\045\156\352" + "\303\151\307\120\351\055\363\101\303\045\377\023\151\253\205\325" + "\314\133\205\054\265\047\047\360\163\327\025\376\221\014\012\063" + "\123\013\274\265\237\167\237\271\347\350\061\237\265\107\272\277" + "\323\030\254\374\147\103\047\265\340\214\171\005\011\075\340\243" + "\170\330\107\356\373\053\275\000\014\013\276\276\346\107\206\323" + "\171\325\030\035\222\205\031\353\366\307\276\277\364\225\037\336" + "\072\215\257\371\022\135\372\064\061\020\155\174\120\141\133\145" + "\057\157\373\141\111\353\211\265\042\313\045\154\125\000\304\026" + "\136\136\372\144\316\102\172\376\333\060\122\066\337\374\137\066" + "\274\272\177\110\277\302\054\152\027\000\177\073\104\363\334\250" + "\023\363\371\156\022\375\140\107\054\371\251\137\132\136\276\176" + "\353\317\303\151\160\307\200\172\201\376\053\301\203\222\246\072" + "\071\266\374\363\306\330\342\253\315\231\332\331\206\277\233\162" + "\167\011\206\267\016\300\340\120\057\064\130\015\363\275\202\266" + "\041\361\022\347\104\226\032\321\146\340\225\353\362\132\173\273" + "\326\200\111\326\332\343\275\373\106\303\175\346\036\211\276\251" + "\353\136\153\244\373\316\106\217\171\300\177\352\017\100\032\334" + "\363\011\115\202\170\271\144\344\007\203\040\042\002\261\136\000" + "\125\177\200\104\323\270\275\123\137\162\356\075\166\244\161\333" + "\277\374\357\321\273\253\063\200\007\256\042\275\374\223\307\000" + "\374\060\161\133\216\027\303\374\360\244\365\304\332\221\345\162" + "\213\066\252\365\270\145\234\000\210\341\251\042\160\311\257\366" + "\157\071\353\245\175\127\124\172\341\062\166\371\206\320\110\075" + "\232\037\043\000\220\042\000\324\053\121\177\352\257\267\015\062" + "\331\275\060\352\005\122\112\233\117\227\004\171\065\217\141\311" + "\032\326\307\320\053\130\172\245\321\160\052\074\134\327\065\030" + "\334\334\017\103\133\373\241\324\125\144\102\340\172\005\151\157" + "\073\116\304\112\322\256\004\131\152\116\012\360\033\367\025\174" + "\303\216\116\141\366\370\042\114\060\322\317\340\055\074\017\135" + "\306\121\007\111\077\124\371\241\145\150\313\374\114\111\340\216" + "\103\123\000\204\143\021\011\255\034\374\343\141\315\004\334\206" + "\010\025\120\363\134\106\042\173\001\152\001\040\336\061\270\037" + "\160\344\167\020\306\347\147\255\333\036\372\356\342\227\357\275" + "\155\172\022\242\304\365\177\151\344\027\327\105\033\161\133\134" + "\306\255\047\326\220\054\227\161\065\004\200\044\154\223\356\156" + "\320\337\361\261\155\027\365\017\032\127\231\145\162\021\066\255" + "\234\204\352\021\172\027\061\161\252\167\370\071\241\173\377\224" + "\377\167\004\367\337\165\361\251\040\000\340\171\010\236\020\120" + "\120\014\026\066\253\213\277\117\312\363\065\141\162\351\045\346" + "\330\342\305\306\134\143\117\060\370\331\323\127\146\136\301\006" + "\330\060\324\015\065\307\365\012\352\242\063\270\022\304\135\362" + "\054\127\173\225\201\207\120\062\134\067\237\130\026\353\333\317" + "\302\370\341\151\250\173\337\271\327\210\005\033\113\077\146\255" + "\375\167\254\376\342\023\136\153\057\116\370\221\037\347\005\352" + "\347\313\227\321\317\251\064\323\272\265\054\024\337\034\007\040" + "\241\074\174\021\360\027\161\263\016\043\371\141\056\032\076\113" + "\250\131\215\272\363\335\143\207\152\137\272\341\317\216\336\013" + "\213\251\143\003\252\161\000\177\035\044\133\020\226\342\172\132" + "\130\004\131\252\204\114\140\125\270\030\027\047\000\142\377\137" + "\036\311\347\171\374\302\273\172\067\076\377\342\376\167\164\367" + "\030\357\140\202\273\065\350\154\203\202\160\042\022\342\220\214" + "\124\052\202\210\353\056\265\366\241\060\057\227\120\167\100\265" + "\277\030\001\000\141\154\142\241\261\103\033\133\272\304\230\130" + "\172\231\141\323\042\017\067\115\003\066\155\141\136\301\266\176" + "\060\212\005\056\004\113\126\312\125\103\244\032\254\023\142\256" + "\004\343\073\047\075\336\302\133\230\136\204\061\326\332\037\233" + "\230\363\013\035\112\372\024\335\134\271\313\332\334\165\227\125" + "\320\347\250\110\054\217\214\302\266\100\106\131\000\110\244\066" + "\204\112\112\041\020\236\010\020\377\177\330\053\360\056\253\346" + "\075\111\250\204\312\323\200\100\014\050\155\300\376\371\131\347" + "\113\367\175\165\372\053\077\376\367\271\131\150\022\331\021\226" + "\076\222\006\001\145\257\301\107\326\260\010\342\111\325\004\221" + "\226\252\160\061\216\110\077\331\026\021\272\013\360\053\177\261" + "\355\302\215\043\205\253\214\002\171\055\043\217\351\266\264\321" + "\353\044\007\370\210\174\236\213\006\013\342\062\126\010\026\010" + "\114\275\312\107\151\270\067\351\017\366\005\333\241\352\330\114" + "\357\333\210\343\017\021\217\103\036\234\144\171\067\150\231\114" + "\056\277\134\037\135\274\304\130\264\266\005\302\330\277\261\033" + "\066\157\033\200\076\266\134\266\011\054\065\050\064\124\227\057" + "\361\222\046\041\357\154\305\360\110\172\053\300\031\172\335\214" + "\370\232\143\303\344\270\333\332\057\007\317\334\123\030\050\075" + "\144\217\124\276\153\157\050\375\054\044\173\162\337\034\005\040" + "\250\104\162\345\320\305\155\356\272\173\055\170\020\030\266\367" + "\307\012\274\370\160\127\201\270\375\172\167\265\271\040\074\347" + "\120\170\220\042\371\043\042\324\357\036\260\063\250\325\153\316" + "\035\123\373\352\267\354\375\330\021\377\203\237\252\101\100\052" + "\374\100\130\236\364\002\020\124\366\227\135\261\261\357\202\327" + "\125\056\057\167\233\127\021\203\356\216\041\175\023\111\255\274" + "\117\062\052\235\255\324\117\107\222\123\311\265\307\070\107\044" + "\264\133\354\341\053\352\013\206\157\342\217\027\004\361\061\002" + "\340\335\045\010\325\056\001\230\317\134\375\114\155\164\361\325" + "\372\124\025\047\030\271\217\040\024\212\046\014\063\041\030\146" + "\236\001\024\014\130\154\120\076\267\100\366\144\262\041\057\351" + "\343\220\130\311\075\023\167\201\375\034\034\324\253\230\000\313" + "\363\125\030\143\244\237\032\237\001\307\273\005\122\320\146\351" + "\346\256\273\161\212\256\125\024\046\354\200\327\312\006\225\106" + "\156\131\005\242\151\142\261\112\267\363\344\133\202\104\256\075" + "\212\156\200\074\202\304\077\324\050\324\136\167\265\351\005\220" + "\340\117\164\177\041\104\366\305\174\011\366\317\266\340\261\332" + "\202\175\363\017\157\230\270\375\201\357\057\341\155\016\352\375" + "\222\306\001\104\001\020\303\345\145\134\130\004\131\052\207\114" + "\142\125\170\270\170\023\004\340\175\237\334\371\202\376\021\375" + "\352\202\011\157\146\304\053\163\312\044\037\243\013\205\000\064" + "\373\347\224\370\344\225\211\113\005\103\127\000\374\373\370\000" + "\076\231\203\064\315\042\013\067\062\302\276\043\356\277\060\236" + "\100\211\064\056\055\277\015\070\054\064\304\133\343\150\330\075" + "\332\370\322\053\265\121\326\105\250\332\233\274\372\106\140\160" + "\123\057\367\012\160\202\021\166\015\026\063\117\060\152\027\361" + "\045\044\124\166\174\135\166\305\044\120\140\205\162\154\174\016" + "\216\036\074\016\213\013\315\133\170\375\205\307\235\055\254\265" + "\037\054\375\330\346\023\166\110\204\344\141\262\004\356\275\173" + "\052\124\260\215\270\344\104\070\141\145\077\277\331\307\207\330" + "\156\200\027\355\326\334\140\233\004\256\202\177\074\241\077\356" + "\233\207\343\112\073\241\173\340\335\116\234\257\056\133\267\117" + "\035\264\157\332\373\107\207\236\204\164\001\020\267\343\226\161" + "\141\021\144\251\044\052\001\120\021\136\266\015\302\317\275\250" + "\257\364\232\367\155\174\143\251\242\135\255\153\360\042\207\371" + "\330\234\366\111\375\372\060\134\262\104\116\305\275\025\027\041" + "\060\267\245\221\064\134\000\204\356\002\106\311\017\003\051\276" + "\366\033\103\142\360\057\121\260\177\112\244\363\021\075\223\160" + "\267\201\004\153\201\255\037\117\340\170\365\005\372\350\322\253" + "\265\351\352\171\072\005\177\202\121\021\266\154\037\200\241\315" + "\175\140\353\006\027\202\152\334\004\243\325\176\027\241\040\002" + "\110\226\212\067\057\277\276\124\347\367\355\047\216\114\203\345" + "\115\330\061\264\045\234\260\143\157\056\337\351\164\231\243\064" + "\322\252\247\270\353\276\075\161\375\372\260\000\004\106\020\046" + "\247\213\120\174\104\004\144\221\120\314\021\010\171\005\315\101" + "\102\205\027\100\134\217\041\260\005\031\311\044\144\175\016\235" + "\235\217\155\303\375\213\263\316\115\337\373\334\261\073\036\376" + "\301\154\163\252\143\063\375\111\041\000\301\072\353\333\157\037" + "\332\121\170\227\151\152\127\262\355\015\310\066\107\070\036\232" + "\141\377\324\075\145\217\110\156\332\040\007\012\301\144\234\146" + "\002\177\041\272\337\064\040\041\015\145\340\205\211\031\106\105" + "\051\224\277\043\307\213\336\101\160\234\020\041\141\350\015\103" + "\011\171\270\233\356\166\335\036\040\243\213\227\060\317\340\125" + "\172\315\351\343\141\070\301\150\160\270\237\171\005\033\240\322" + "\123\206\105\346\126\057\066\100\230\140\264\312\344\367\200\237" + "\304\352\066\361\043\031\070\075\167\016\106\017\035\347\037\313" + "\360\321\143\076\113\067\127\356\264\207\312\377\341\350\104\032" + "\311\040\341\063\026\105\201\100\174\034\302\177\063\060\012\017" + "\011\213\000\365\063\010\114\205\164\341\301\101\022\211\327\364" + "\360\176\074\063\036\026\356\036\204\273\051\376\112\323\013\150" + "\032\007\233\061\136\200\010\074\157\215\270\343\341\354\337\261" + "\172\203\336\072\265\337\376\302\147\376\360\331\203\236\011\225" + "\176\220\260\214\013\213\040\113\145\041\322\122\265\336\264\331" + "\011\332\107\076\266\353\027\212\335\372\265\206\106\056\241\032" + "\325\335\033\335\352\343\160\122\216\201\223\323\221\372\362\101" + "\004\336\322\023\373\334\315\145\060\022\057\246\013\334\156\032" + "\011\023\362\040\176\036\336\042\210\127\332\012\247\345\310\375" + "\177\061\135\370\364\103\371\210\371\252\274\042\076\301\250\372" + "\042\062\266\170\211\076\135\077\047\030\107\251\164\227\141\344" + "\264\215\260\151\113\037\054\073\170\227\201\222\154\335\203\326" + "\201\203\172\350\346\353\226\005\107\017\037\247\343\207\361\231" + "\173\367\026\236\116\152\260\251\374\237\334\315\357\061\367\213" + "\204\224\317\336\053\034\357\257\044\010\276\175\120\251\304\326" + "\071\354\232\173\166\336\116\102\161\341\175\312\203\212\221\201" + "\077\305\025\212\170\053\020\115\347\375\167\217\205\004\241\301" + "\037\342\262\043\221\204\210\320\230\006\246\143\212\304\222\342" + "\213\111\276\137\133\260\156\374\374\047\367\335\071\376\323\320" + "\004\043\110\130\306\205\105\220\110\076\017\104\132\252\326\311" + "\273\377\164\153\357\266\063\313\357\064\014\355\032\266\307\235" + "\224\267\365\311\265\061\153\027\200\317\361\247\334\335\167\267" + "\233\344\164\135\166\305\151\107\005\040\332\345\120\154\003\044" + "\223\061\264\057\311\255\017\304\214\110\136\111\210\340\020\163" + "\014\315\313\025\335\247\200\145\153\230\140\367\140\174\371\025" + "\172\303\256\360\260\122\251\000\043\073\066\020\174\104\031\237" + "\077\130\360\272\007\053\232\140\044\300\320\334\327\146\343\147" + "\261\032\313\165\070\312\132\173\034\315\167\034\356\317\321\056" + "\143\224\216\124\276\353\014\165\375\320\061\264\240\317\057\273" + "\042\041\002\202\104\244\200\200\341\322\160\203\302\304\016\342" + "\103\203\157\204\250\010\333\334\026\104\204\053\250\044\010\174" + "\041\215\157\150\012\033\200\310\261\270\353\232\073\121\210\237" + "\232\026\216\124\011\211\210\244\170\034\047\340\236\201\103\216" + "\066\054\347\346\043\207\226\157\276\341\167\016\117\010\046\024" + "\324\144\127\205\105\220\205\200\211\002\360\207\137\070\363\005" + "\205\062\371\025\166\214\157\145\144\354\242\136\377\076\015\062" + "\021\342\020\041\051\316\234\163\370\114\074\167\133\026\000\200" + "\330\347\002\144\262\065\075\002\337\040\211\234\301\365\215\332" + "\323\160\353\057\017\011\005\373\021\253\170\050\316\077\040\005" + "\371\243\105\311\155\154\234\140\264\374\122\202\167\020\346\033" + "\273\334\347\017\130\215\035\334\334\007\103\303\275\320\073\120" + "\141\315\205\006\065\352\276\327\020\047\031\145\025\004\044\074" + "\316\311\057\260\326\276\210\265\023\077\211\065\065\317\047\355" + "\314\005\137\307\261\361\015\073\016\022\277\277\370\204\312\221" + "\363\110\032\015\343\120\264\310\021\301\360\022\107\132\163\341" + "\166\234\030\347\327\204\300\105\212\174\021\250\131\302\262\010" + "\050\274\020\271\153\042\106\204\217\207\140\331\153\124\046\276" + "\144\223\132\372\004\342\155\170\307\000\357\040\020\322\140\125" + "\376\016\273\006\237\377\263\117\074\376\043\170\000\326\136\000" + "\256\270\002\214\263\256\071\353\015\272\006\277\306\210\370\142" + "\167\100\057\072\345\066\015\231\104\040\306\113\100\021\300\333" + "\112\266\345\204\110\355\256\306\364\203\275\001\277\140\044\045" + "\372\066\240\304\026\076\164\274\362\340\241\267\117\314\233\210" + "\167\006\022\132\364\020\371\021\016\110\065\066\076\255\017\314" + "\143\272\166\056\071\274\360\006\175\266\166\116\020\257\261\213" + "\323\277\241\033\372\066\164\101\157\177\005\272\052\005\026\246" + "\363\073\010\066\165\045\332\057\007\377\251\054\235\325\122\234" + "\236\213\263\362\026\346\253\060\067\273\010\063\307\226\140\176" + "\266\371\076\075\102\352\060\134\276\307\331\332\375\015\247\313" + "\030\017\210\350\266\226\341\303\243\321\312\327\044\256\273\014" + "\023\111\150\245\233\005\343\346\311\011\344\063\233\372\256\077" + "\104\106\364\103\005\212\242\222\324\022\207\367\027\025\032\325" + "\335\002\367\157\363\274\161\326\237\206\163\007\022\156\005\272" + "\266\053\022\000\021\114\010\250\216\223\025\250\366\014\363\302" + "\076\077\165\144\371\226\377\363\201\203\163\260\332\002\360\221" + "\177\334\326\337\063\334\163\055\363\062\337\315\232\223\055\174" + "\110\317\361\237\152\211\221\276\004\254\104\000\334\050\126\023" + "\260\145\263\035\046\004\115\257\000\204\342\016\102\024\371\360" + "\201\071\247\151\045\037\117\122\337\334\157\345\251\367\047\224" + "\126\020\103\051\135\050\017\107\026\240\004\133\157\007\341\364" + "\264\051\030\030\261\324\330\102\306\227\057\322\320\063\250\331" + "\033\042\347\153\026\015\350\352\056\201\151\352\240\033\354\347" + "\275\000\303\142\035\115\054\303\152\325\342\057\332\360\037\271" + "\155\202\102\267\371\054\035\356\372\017\147\123\327\075\216\251" + "\065\007\373\104\110\156\074\050\004\000\124\003\167\101\005\223" + "\011\047\266\300\232\240\352\124\360\261\244\126\132\061\051\107" + "\221\007\361\023\204\011\037\071\236\146\205\022\113\036\011\210" + "\203\261\370\023\021\073\135\330\215\114\045\067\311\050\000\056" + "\360\303\224\072\166\020\360\170\226\231\327\373\125\247\101\157" + "\374\370\333\036\177\320\067\220\226\112\244\023\220\331\134\367" + "\345\347\355\040\046\274\237\251\351\125\254\245\357\302\232\353" + "\104\372\367\371\004\040\023\371\021\051\002\040\156\073\026\367" + "\010\130\005\216\172\000\312\301\065\073\174\277\077\114\142\157" + "\135\250\002\342\031\023\041\276\231\316\341\351\304\022\217\025" + "\000\052\305\311\335\006\311\126\105\176\210\003\213\233\157\354" + "\044\323\325\163\311\134\343\014\062\133\337\103\034\132\212\065" + "\127\241\250\035\207\336\342\123\264\257\360\004\335\130\372\211" + "\123\320\147\202\270\304\076\253\344\112\313\042\240\311\227\136" + "\042\171\063\230\203\372\033\041\161\240\044\174\353\060\044\002" + "\136\361\153\122\036\176\174\160\174\321\061\203\250\007\100\233" + "\202\100\334\207\271\210\333\342\053\317\177\255\005\300\137\103" + "\021\300\351\213\356\044\043\355\041\126\076\237\237\173\154\362" + "\313\177\365\373\343\350\272\265\056\000\327\175\375\205\333\064" + "\260\376\200\255\276\215\021\137\227\157\343\205\020\373\064\236" + "\032\261\156\272\214\044\001\210\353\353\263\116\222\315\030\142" + "\067\354\346\200\141\230\154\174\133\076\223\120\227\100\154\375" + "\101\250\265\176\107\076\306\073\240\362\350\177\030\361\161\264" + "\131\105\250\164\135\210\242\254\142\005\100\045\164\070\026\140" + "\155\044\313\366\146\346\045\154\146\235\310\036\326\203\057\061" + "\035\057\360\170\103\133\142\255\167\025\212\214\344\145\346\326" + "\167\351\243\324\324\347\042\131\007\040\022\001\103\121\321\012" + "\042\212\000\211\326\024\111\000\232\221\011\056\171\223\230\356" + "\112\160\326\330\072\207\322\044\221\134\114\007\076\001\205\203" + "\163\171\105\221\370\232\046\204\053\316\061\161\066\040\067\110" + "\047\167\242\200\310\210\074\341\342\102\343\343\004\374\016\002" + "\076\120\361\105\207\056\376\277\327\277\151\377\230\312\026\241" + "\254\104\327\135\007\232\171\341\013\177\223\202\365\173\016\165" + "\112\224\246\077\274\036\377\070\156\074\062\211\100\013\002\040" + "\246\261\171\367\300\146\156\156\070\037\171\100\120\114\343\210" + "\333\142\165\021\066\102\244\017\077\135\030\117\162\010\247\011" + "\135\301\260\340\220\140\315\115\024\072\026\225\067\043\100\076" + "\156\125\254\147\022\036\100\215\124\300\304\275\304\264\202\212" + "\176\063\110\107\103\302\333\356\340\131\050\074\140\145\230\240" + "\062\171\245\165\327\006\245\071\174\251\305\015\076\330\050\106" + "\053\273\031\350\336\273\055\276\262\157\037\103\346\074\123\202" + "\325\046\331\005\200\304\010\200\140\301\216\235\117\055\257\332" + "\216\365\367\243\303\075\177\367\351\013\036\150\104\255\044\374" + "\345\277\277\256\322\200\361\117\131\116\343\325\016\365\137\204" + "\232\015\051\025\063\002\242\330\277\214\110\077\071\204\154\256" + "\076\002\347\013\240\107\140\261\156\002\236\222\157\027\234\035" + "\025\352\037\125\344\043\170\014\062\161\104\362\202\177\123\332" + "\001\331\313\010\325\173\151\000\062\114\360\150\271\204\153\164" + "\154\353\237\056\250\212\274\225\220\110\252\266\211\233\002\033" + "\224\216\117\247\050\011\225\366\156\205\010\237\104\244\213\240" + "\310\123\354\072\110\337\012\210\034\213\230\037\021\343\171\132" + "\060\114\102\161\000\125\020\211\030\262\253\302\343\011\254\251" + "\205\061\004\232\241\314\175\144\271\253\200\100\157\100\043\070" + "\313\311\371\211\136\133\176\357\107\057\173\166\074\024\357\257" + "\140\253\277\361\245\127\167\317\231\017\177\336\261\353\347\123" + "\232\157\106\111\136\362\173\110\115\223\230\257\242\302\047\330" + "\007\044\263\054\007\032\165\207\340\235\004\267\030\151\230\304" + "\040\221\227\102\050\136\366\134\342\372\371\115\222\207\363\127" + "\335\175\020\257\246\104\322\350\371\304\234\043\225\147\105\106" + "\041\117\126\216\257\162\101\151\305\043\064\375\065\024\041\246" + "\023\212\315\017\221\132\366\020\011\175\073\022\004\320\250\235" + "\324\177\047\341\013\042\365\321\103\202\340\356\133\260\146\333" + "\006\216\342\033\254\265\067\122\346\022\370\111\342\112\071\301" + "\003\310\110\330\054\066\034\031\363\363\100\100\327\114\224\326" + "\261\205\345\371\267\377\371\333\366\357\157\306\170\270\363\316" + "\177\056\335\323\370\233\117\064\234\332\025\071\216\043\100\113" + "\002\220\251\305\112\350\132\144\027\200\250\235\203\337\177\146" + "\235\034\356\025\070\141\202\322\170\122\273\361\336\176\151\144" + "\162\121\330\056\146\114\301\335\014\355\117\271\356\041\274\035" + "\073\307\041\261\054\123\313\131\215\050\171\345\050\102\024\156" + "\230\272\053\021\026\000\061\132\040\045\221\367\025\361\000\374" + "\140\311\116\023\036\027\016\115\020\342\177\103\373\046\256\015" + "\350\214\364\172\101\223\304\143\225\004\000\122\134\366\264\061" + "\004\011\371\004\300\205\256\025\160\200\374\331\247\047\047\137" + "\267\367\335\343\374\126\016\357\044\334\111\357\064\356\375\332" + "\165\077\157\231\265\167\344\074\216\225\041\113\265\114\070\034" + "\125\224\222\375\212\100\154\374\165\003\053\201\001\005\266\156" + "\325\231\020\064\034\076\277\040\142\117\103\213\346\032\221\031" + "\057\254\122\136\307\224\307\030\220\277\231\115\166\170\306\153" + "\161\225\262\034\027\211\254\040\220\123\222\053\036\212\006\042" + "\115\357\005\367\214\074\007\045\304\310\160\072\144\022\221\313" + "\335\213\014\056\010\211\046\365\141\030\056\361\321\315\347\066" + "\222\221\246\101\010\112\332\306\024\114\102\123\225\030\327\012" + "\132\311\317\241\165\166\376\205\135\073\172\066\374\016\300\370" + "\307\061\214\013\300\316\375\140\334\115\246\336\254\221\110\225" + "\136\145\044\357\313\047\121\114\044\121\105\146\045\106\310\013" + "\044\356\075\162\263\210\203\206\024\032\065\233\217\027\310\065" + "\270\231\104\315\102\125\033\034\324\355\260\145\063\222\102\304" + "\055\247\221\225\050\102\274\340\232\025\133\226\355\270\240\234" + "\170\321\100\167\021\156\215\210\264\124\257\206\016\112\330\240" + "\356\345\010\355\213\107\373\027\054\320\225\160\246\141\257\076" + "\014\274\165\207\237\166\143\375\173\376\344\135\050\056\245\164" + "\124\361\011\151\110\134\113\036\137\221\133\103\253\331\071\324" + "\202\142\321\174\073\363\030\377\047\172\112\134\000\054\153\231" + "\262\210\335\072\221\344\057\017\262\062\117\104\213\047\321\026" + "\304\354\033\133\010\303\300\073\236\032\064\352\114\014\230\147" + "\020\074\203\040\033\307\035\077\225\242\344\032\055\331\312\040" + "\315\225\226\113\210\272\177\122\323\247\032\144\101\050\223\046" + "\101\245\274\011\210\107\044\106\372\055\273\150\351\257\006\353" + "\236\207\320\334\046\151\243\346\072\216\344\233\072\230\205\370" + "\172\055\023\051\013\261\022\155\142\342\062\344\353\132\144\231" + "\107\017\231\362\213\001\145\145\002\233\300\235\015\155\163\001" + "\330\263\347\122\307\171\364\167\127\220\051\010\023\260\063\043" + "\303\336\222\312\042\103\362\044\110\311\303\173\302\221\140\112" + "\212\145\200\142\131\307\001\103\260\152\254\213\040\276\324\077" + "\224\040\234\072\342\011\104\172\025\104\271\052\042\123\055\310" + "\350\041\344\206\042\061\161\031\255\156\335\124\201\212\210\330" + "\062\200\370\012\215\336\215\046\014\032\252\100\304\076\001\301" + "\367\054\142\153\257\007\063\365\304\274\345\214\326\116\000\062" + "\144\214\310\152\226\321\116\005\102\370\244\006\176\055\375\317" + "\140\333\325\171\230\054\125\202\360\374\130\301\001\265\025\252" + "\303\227\311\356\100\256\266\325\140\055\010\376\160\320\220\171" + "\004\204\165\021\040\306\047\360\133\336\050\162\354\057\176\270" + "\110\222\026\342\022\044\117\336\142\013\235\007\376\375\005\125" + "\305\243\040\167\003\274\024\020\031\214\153\042\324\170\047\052" + "\205\233\023\050\340\005\142\243\151\260\076\275\356\021\077\342" + "\310\346\041\254\274\255\270\026\124\036\303\020\021\267\257\174" + "\305\275\152\320\064\035\226\027\055\354\077\363\333\174\134\000" + "\160\343\275\177\261\365\231\336\301\215\015\275\140\233\255\210" + "\100\332\264\004\031\331\312\043\311\052\146\207\131\074\021\105" + "\266\241\144\322\307\104\374\251\375\170\233\250\304\052\132\251" + "\154\362\256\101\235\011\201\035\372\054\260\327\276\064\377\170" + "\241\041\223\130\370\043\371\231\324\075\255\274\343\156\025\312" + "\055\240\312\110\275\177\311\003\210\077\310\114\307\057\246\217" + "\043\270\027\032\316\217\004\177\061\334\100\322\027\164\336\307" + "\367\041\173\140\342\344\100\336\323\020\076\362\221\352\001\304" + "\234\113\354\071\306\237\274\102\044\243\110\065\360\220\255\214" + "\303\100\325\062\265\022\034\036\037\015\046\004\371\036\000\054" + "\055\317\355\073\370\024\350\173\316\035\342\243\205\331\017\305" + "\105\026\336\345\105\342\071\362\251\120\212\141\267\054\323\027" + "\162\026\236\246\260\057\024\165\376\303\211\105\215\232\305\005" + "\301\057\262\104\061\224\052\073\025\326\110\163\065\004\145\166" + "\071\317\301\107\326\144\361\325\330\137\011\173\022\111\025\122" + "\351\065\044\035\210\264\017\331\305\041\314\265\307\057\063\233" + "\370\022\102\022\335\177\204\324\040\041\311\066\143\001\251\206" + "\313\322\306\044\262\024\176\006\023\216\254\307\351\003\047\004" + "\041\371\247\217\317\302\324\350\334\217\375\360\100\000\012\135" + "\135\337\236\235\236\233\332\377\030\031\332\175\316\060\260\366" + "\015\362\116\006\312\205\014\372\102\323\312\063\166\330\135\202" + "\234\215\262\360\004\043\052\135\335\204\302\166\007\015\013\120" + "\354\002\076\116\120\143\142\340\330\011\123\247\143\311\115\232" + "\133\261\025\070\347\125\107\144\050\347\000\151\331\047\221\074" + "\123\240\030\100\202\115\115\145\352\233\323\146\244\151\260\112" + "\134\322\271\273\037\044\364\115\245\254\105\050\207\043\375\325" + "\370\321\231\230\200\204\340\224\362\313\324\127\313\140\202\310" + "\043\000\170\377\337\040\005\230\235\235\205\147\036\235\300\331" + "\265\067\372\161\241\154\256\270\276\367\115\054\343\177\350\035" + "\350\206\063\316\336\014\172\221\125\152\047\233\067\220\173\042" + "\120\006\173\032\063\321\214\043\146\212\260\362\070\344\111\070" + "\012\233\320\104\232\204\111\073\211\171\171\353\370\374\101\155" + "\331\046\334\053\000\032\235\371\347\331\121\220\363\216\234\257" + "\354\064\052\216\073\246\034\063\224\157\056\140\156\011\323\131" + "\211\312\035\363\217\136\054\041\077\102\272\135\246\203\140\033" + "\232\345\107\240\130\322\251\131\164\373\366\322\313\100\203\365" + "\220\173\055\117\064\222\053\160\050\135\370\070\042\156\172\334" + "\300\147\234\073\237\130\106\031\046\331\144\350\046\040\262\164" + "\047\360\155\102\006\222\230\141\364\310\061\070\374\324\064\363" + "\356\235\157\176\361\217\346\336\353\357\047\162\315\256\374\170" + "\357\007\131\324\107\361\231\361\235\147\155\206\301\341\136\260" + "\231\010\330\324\177\035\231\032\253\042\000\111\216\142\314\314" + "\067\107\361\120\222\074\143\135\051\000\362\276\304\227\172\144" + "\024\200\160\276\224\117\065\156\124\035\250\127\055\376\164\242" + "\052\017\371\251\076\022\234\127\363\372\370\215\240\362\270\223" + "\232\025\047\153\165\202\110\115\210\144\232\062\227\135\351\376" + "\106\367\336\074\051\237\170\304\067\015\023\030\007\363\260\213" + "\205\203\257\341\312\056\114\060\152\105\000\042\057\020\111\026" + "\000\032\123\202\132\334\303\070\161\363\000\322\272\007\076\062" + "\136\261\144\001\140\136\051\153\365\261\345\077\076\065\003\007" + "\367\115\302\322\034\066\344\160\037\355\236\173\347\255\277\003" + "\313\115\113\005\230\047\160\055\353\367\176\234\355\241\200\337" + "\260\333\272\163\020\006\006\273\331\036\055\046\004\165\174\345" + "\126\064\121\006\102\207\220\301\276\025\001\120\076\225\250\154" + "\361\145\042\113\371\205\273\344\361\161\011\002\040\206\333\165" + "\346\025\260\056\002\367\012\204\317\216\311\357\322\042\341\067" + "\053\271\353\142\161\347\021\201\304\007\251\162\202\100\154\345" + "\124\125\156\105\113\212\020\110\032\116\203\357\011\300\273\123" + "\330\257\057\224\014\052\276\154\243\255\002\040\307\265\340\001" + "\044\076\211\267\106\002\240\262\323\211\301\347\374\073\226\306" + "\277\260\074\166\370\030\054\055\326\075\163\270\171\256\177\356" + "\277\177\343\103\340\277\156\334\017\127\343\212\377\121\071\227" + "\271\020\177\303\114\316\306\155\374\132\315\346\155\375\260\171" + "\353\106\246\312\204\365\043\032\114\014\232\117\027\256\275\007" + "\240\116\237\245\013\200\210\276\336\073\251\013\020\076\216\220" + "\310\144\020\000\061\016\275\202\372\262\105\352\125\333\175\267" + "\141\104\134\102\351\062\012\100\214\157\031\367\311\364\026\020" + "\172\073\116\064\066\135\000\100\042\233\020\217\217\335\026\313" + "\006\065\013\272\333\267\215\043\266\033\022\113\172\114\112\041" + "\112\320\020\371\042\004\227\204\050\223\000\044\220\064\207\110" + "\052\221\121\000\374\143\100\067\037\111\257\023\223\277\306\155" + "\354\320\061\230\034\233\143\136\273\067\176\107\311\123\224\330" + "\177\162\353\237\054\334\245\314\107\025\350\343\342\353\300\030" + "\324\173\337\305\214\076\300\176\247\371\051\006\207\372\140\363" + "\366\176\350\357\357\006\326\246\261\235\065\260\157\221\277\262" + "\245\264\120\211\143\000\047\212\000\010\145\230\366\136\000\042" + "\254\043\320\033\250\056\261\356\201\160\053\221\252\004\100\200" + "\057\030\142\104\360\251\162\005\360\003\127\330\230\342\170\271" + "\116\274\027\326\002\257\100\270\164\251\102\200\277\115\015\217" + "\202\055\360\275\253\374\151\146\134\372\371\046\077\177\056\167" + "\262\224\044\151\022\027\370\001\121\034\311\147\255\075\336\312" + "\213\045\035\361\323\005\371\013\225\102\361\160\320\011\053\000" + "\151\375\377\014\217\013\213\320\065\203\352\244\300\362\325\371" + "\067\027\217\036\230\142\002\320\374\012\023\253\263\367\260\075" + "\176\366\154\147\376\153\327\137\037\177\157\054\013\151\311\025" + "\127\260\303\173\176\337\253\330\271\275\007\064\372\152\254\113" + "\030\321\325\125\142\102\260\001\206\267\016\340\013\024\210\155" + "\327\271\040\144\105\066\257\041\237\010\050\237\212\123\164\013" + "\250\164\356\362\027\201\304\052\055\273\351\252\201\077\067\234" + "\172\344\044\141\321\010\165\047\344\261\006\302\307\007\152\313" + "\015\356\031\110\157\356\045\102\302\150\132\036\116\135\172\013" + "\327\030\333\121\174\262\025\247\276\353\331\256\261\002\156\223" + "\312\104\200\066\274\037\366\207\345\132\032\020\124\016\127\011" + "\000\161\133\173\044\175\241\244\007\057\354\014\173\027\222\113" + "\056\347\037\264\174\044\114\266\004\257\101\023\362\220\373\364" + "\362\353\275\242\373\213\012\137\354\213\077\022\133\357\144\001" + "\310\062\250\207\073\060\131\277\136\143\277\332\102\235\036\075" + "\162\014\306\361\053\114\126\160\327\151\216\035\355\227\234\052" + "\275\361\266\077\233\307\317\214\121\210\271\076\076\262\124\016" + "\042\056\057\373\235\362\326\102\177\341\152\126\006\127\261\254" + "\207\061\114\323\064\030\332\322\117\066\157\033\204\336\376\022" + "\130\116\015\120\014\062\114\153\116\335\177\336\156\100\146\001" + "\220\133\371\244\061\000\177\335\017\211\163\373\275\365\310\061" + "\207\154\104\317\040\174\134\230\127\275\146\241\020\360\047\023" + "\135\376\143\031\372\146\121\057\253\051\072\000\046\041\132\301" + "\155\345\003\273\324\002\116\104\070\065\276\167\265\106\201\371" + "\173\241\013\113\145\123\271\062\363\143\053\352\024\047\120\341" + "\163\367\221\170\221\144\162\237\074\106\000\270\004\110\244\367" + "\067\344\064\211\343\003\251\143\000\355\021\200\014\135\200\330" + "\170\234\275\247\153\105\300\107\167\216\115\314\302\221\203\307" + "\140\156\172\041\260\147\053\017\123\013\156\030\075\134\370\352" + "\017\077\063\045\276\261\265\375\002\340\257\357\271\024\214\237" + "\173\161\317\033\064\003\256\141\233\057\007\357\245\315\335\075" + "\356\240\341\246\315\003\254\371\241\254\173\120\365\356\040\050" + "\220\301\003\110\022\200\254\356\276\052\074\227\000\210\347\236" + "\102\176\157\043\203\115\362\361\340\353\316\153\114\010\160\254" + "\000\205\124\371\262\017\012\274\021\055\262\216\240\251\236\257" + "\264\062\220\320\042\000\166\017\252\114\010\352\061\137\176\361" + "\111\244\171\255\175\221\375\102\317\362\047\221\056\052\036\312" + "\270\010\011\125\335\006\051\234\157\346\026\000\005\201\342\334" + "\374\225\011\100\044\137\203\221\036\107\362\353\313\066\214\262" + "\276\375\350\341\143\374\225\355\236\355\062\053\375\177\255\333" + "\344\306\257\174\174\366\047\136\222\150\015\131\055\001\020\227" + "\157\375\203\236\335\106\031\336\155\150\344\162\266\331\207\141" + "\246\256\303\360\366\001\330\262\175\020\272\075\161\055\261\000" + "\000\040\000\111\104\101\124\172\212\114\010\152\334\063\010\141" + "\205\002\240\112\037\333\255\210\274\307\077\101\000\144\161\020" + "\154\375\165\022\173\233\060\306\365\367\326\111\304\136\171\274" + "\102\072\167\320\260\312\304\000\137\175\356\003\133\371\002\276" + "\310\046\226\370\351\365\055\027\024\073\101\041\250\141\367\200" + "\351\225\337\165\101\063\263\150\260\326\336\340\267\360\074\044" + "\222\056\226\274\000\261\342\020\311\303\023\030\042\273\235\171" + "\005\100\056\270\230\276\271\222\354\155\020\000\174\251\247\256" + "\225\130\067\256\300\077\306\162\364\300\004\114\115\316\065\217" + "\212\302\063\066\043\375\314\001\347\326\357\334\060\357\177\013" + "\240\031\033\306\332\010\200\267\044\347\277\026\312\073\137\326" + "\373\026\346\261\134\303\012\350\074\337\030\077\120\061\262\143" + "\023\377\152\015\020\233\011\101\225\077\227\254\162\315\145\344" + "\025\000\036\254\364\014\344\201\074\131\000\142\111\031\254\213" + "\137\034\012\177\075\336\113\046\270\343\064\046\017\225\050\250" + "\354\170\036\322\365\301\227\226\070\313\226\106\153\266\246\111" + "\161\352\313\234\160\355\345\075\313\246\251\127\046\014\013\037" + "\056\051\033\216\121\062\034\371\175\371\220\044\000\131\311\057" + "\333\206\362\240\102\036\361\342\302\067\023\266\325\244\216\022" + "\067\266\245\137\201\000\340\200\236\241\027\251\305\324\164\354" + "\320\024\034\076\060\011\265\345\272\037\335\160\034\362\055\253" + "\146\357\375\312\237\057\334\003\121\322\237\030\002\040\206\275" + "\361\043\175\347\226\173\350\065\206\016\157\141\107\320\205\141" + "\146\301\204\255\073\066\302\310\366\115\140\226\165\302\273\007" + "\330\243\114\070\306\226\004\100\161\167\041\072\222\017\001\131" + "\371\225\123\267\334\041\162\223\140\275\051\134\044\144\343\256" + "\207\204\100\056\343\170\241\361\223\104\266\221\354\330\322\373" + "\255\075\277\225\130\265\000\275\002\307\112\274\276\071\220\055" + "\037\131\262\161\302\030\076\062\155\226\334\131\345\236\127\340" + "\204\076\130\054\144\336\162\353\057\330\312\171\120\376\130\210" + "\273\256\045\344\317\067\143\074\212\110\134\140\242\020\000\225" + "\127\220\100\176\067\132\045\044\004\014\122\342\223\166\146\246" + "\227\340\310\201\011\072\161\164\006\202\017\334\120\070\332\150" + "\320\233\047\016\066\276\370\303\275\325\011\120\223\375\304\024" + "\000\077\354\305\157\254\364\155\075\217\274\315\054\152\357\142" + "\347\273\307\317\000\157\045\156\335\061\104\066\016\341\255\104" + "\233\217\025\070\212\327\217\047\012\100\314\361\253\004\100\046" + "\133\354\373\373\063\266\334\021\162\047\214\001\020\141\135\155" + "\317\021\331\106\302\143\337\136\123\226\201\033\124\147\136\301" + "\362\102\135\172\052\161\245\110\027\203\102\311\204\162\305\340" + "\257\327\122\202\145\301\332\057\234\110\156\333\302\055\012\305" + "\000\232\040\016\152\302\313\161\255\346\021\211\227\342\322\304" + "\043\010\216\277\145\027\133\160\242\000\360\326\236\365\357\035" + "\233\300\030\116\321\335\077\311\157\341\171\002\210\037\151\372" + "\176\143\231\336\364\243\317\314\337\071\065\005\376\253\271\305" + "\037\110\313\165\023\000\177\075\126\000\100\170\144\343\015\037" + "\252\134\330\065\140\274\323\320\350\353\331\246\211\004\052\226" + "\013\160\332\316\041\346\025\014\202\136\044\274\173\140\073\201" + "\353\223\054\000\271\272\000\052\001\040\376\006\211\244\313\042" + "\004\136\070\211\244\245\312\264\242\030\370\333\020\006\361\132" + "\173\335\300\356\040\250\240\016\305\071\005\265\245\006\177\104" + "\071\003\177\163\302\075\123\374\070\006\022\277\324\145\204\077" + "\213\225\262\077\074\042\024\002\364\012\044\227\072\114\316\204" + "\027\162\046\010\100\074\301\171\200\072\017\071\016\221\131\000" + "\132\350\002\260\236\075\105\322\343\157\141\266\006\207\016\214" + "\363\231\172\301\147\330\050\034\143\356\377\227\216\035\164\276" + "\160\367\336\205\103\136\062\137\070\343\004\100\045\006\076\342" + "\104\041\204\126\004\040\122\151\205\237\154\047\206\007\102\360" + "\222\267\224\066\155\075\327\174\207\121\040\357\144\261\133\271" + "\061\053\125\374\274\365\151\273\066\103\377\206\012\237\162\334" + "\160\226\231\273\153\247\035\143\044\076\166\040\060\160\321\325" + "\144\015\265\326\061\244\227\005\040\260\367\273\024\362\130\203" + "\044\000\334\106\261\255\163\322\343\133\254\222\074\236\264\242" + "\000\376\372\062\174\042\261\121\265\371\233\214\204\357\045\266" + "\004\116\372\042\076\172\353\316\315\157\036\174\142\062\045\060" + "\011\212\100\035\165\336\155\021\343\311\033\041\247\030\227\040" + "\000\342\266\074\357\177\165\005\100\151\213\263\364\014\255\304" + "\262\322\351\070\163\357\017\075\063\001\263\063\013\315\104\066" + "\334\277\274\140\177\341\276\057\057\176\153\342\131\250\102\060" + "\037\113\111\166\071\134\214\003\210\206\313\141\021\244\327\050" + "\065\361\345\165\231\364\342\272\277\055\372\212\174\102\132\117" + "\017\030\027\275\247\347\225\135\375\344\235\254\234\136\011\356" + "\207\152\371\255\304\155\273\206\141\144\353\106\346\003\073\244" + "\301\274\002\313\156\172\005\042\310\012\005\100\354\012\370\171" + "\105\322\147\360\014\262\170\000\276\235\120\100\232\101\031\361" + "\051\325\345\276\165\073\200\334\307\371\004\374\325\347\015\207" + "\267\066\016\377\210\252\332\036\347\342\273\052\344\076\204\343" + "\176\104\064\345\300\132\020\002\004\166\013\352\032\276\116\201" + "\360\261\202\074\055\167\170\273\111\132\042\037\115\016\001\210" + "\220\137\212\017\005\053\302\151\150\337\114\064\365\022\047\076" + "\316\305\077\302\134\374\043\007\306\151\303\012\132\373\171\253" + "\112\157\237\072\152\175\341\373\067\054\077\031\316\046\044\000" + "\000\311\136\200\030\016\020\015\227\303\042\310\122\355\126\115" + "\000\304\337\313\056\253\154\035\176\236\176\245\121\206\267\263" + "\002\336\210\106\370\011\344\055\333\067\302\266\235\103\244\267" + "\277\213\167\017\360\027\272\375\334\102\067\040\210\023\211\052" + "\074\120\203\143\010\142\342\054\135\203\254\002\200\351\171\153" + "\117\171\153\277\302\367\250\144\271\174\121\240\000\240\247\340" + "\173\007\374\363\326\170\306\261\331\245\260\274\105\021\100\340" + "\354\206\006\041\126\235\317\063\362\162\112\044\274\233\314\015" + "\317\171\017\077\251\073\000\331\074\200\044\367\137\143\235\067" + "\123\053\263\125\023\246\306\360\051\274\161\070\206\267\360\274" + "\064\114\174\037\253\055\320\133\036\371\236\365\215\147\037\254" + "\242\033\340\223\127\034\300\311\043\000\161\313\270\260\010\262" + "\324\240\104\001\070\237\225\333\062\333\176\324\335\121\222\000" + "\210\102\040\013\103\140\073\070\010\346\113\336\125\171\155\251" + "\117\277\212\265\106\347\203\133\174\244\257\277\033\266\357\036" + "\342\017\043\201\146\271\263\015\261\147\331\222\000\170\004\215" + "\041\263\030\036\365\006\104\155\020\273\017\261\363\010\370\272" + "\306\342\165\326\275\347\255\175\234\207\022\207\174\326\253\213" + "\025\220\075\015\026\341\343\004\226\105\210\235\100\126\041\074" + "\101\000\122\076\360\041\023\071\253\007\020\025\000\302\373\365" + "\246\136\246\365\145\007\016\263\276\375\301\147\307\241\136\365" + "\046\354\260\036\131\335\242\167\340\175\373\273\156\134\374\051" + "\204\111\117\245\155\037\016\204\211\357\057\117\034\001\270\330" + "\333\376\136\324\106\264\023\137\366\042\022\336\337\216\170\002" + "\342\357\345\127\224\117\037\074\135\277\322\054\153\157\141\206" + "\075\230\310\060\014\346\021\154\202\355\273\206\240\322\123\204" + "\272\135\345\267\023\345\111\151\111\156\274\102\000\102\266\211" + "\243\365\161\002\340\010\203\212\102\270\116\001\111\157\350\024" + "\126\330\332\347\303\112\170\232\245\122\254\046\360\126\142\103" + "\043\015\024\003\126\152\362\355\015\245\000\244\265\376\161\136" + "\104\020\257\370\010\250\252\265\367\303\360\173\173\006\153\355" + "\015\122\346\323\163\017\076\073\106\307\107\217\007\271\072\066" + "\034\130\232\247\137\172\364\356\332\355\007\176\134\307\157\253" + "\313\004\226\005\100\024\001\171\335\137\256\257\000\134\301\176" + "\267\272\031\206\304\100\264\221\302\144\322\213\066\272\302\116" + "\045\004\332\320\236\142\327\213\056\065\057\355\356\043\227\153" + "\006\071\307\317\150\343\246\136\070\355\364\315\144\170\144\043" + "\053\055\157\320\320\173\104\071\372\242\015\121\000\274\365\146" + "\253\055\221\074\263\040\010\171\212\223\204\170\337\236\023\077" + "\167\153\237\001\053\041\367\112\320\366\023\311\000\346\025\130" + "\050\006\066\301\141\203\170\302\347\027\200\360\110\010\321\342" + "\237\110\024\003\115\275\100\013\032\353\216\326\035\070\164\140" + "\222\273\371\313\013\125\327\236\262\340\072\334\075\175\270\161" + "\353\335\173\227\357\203\060\311\323\010\237\044\000\376\261\250" + "\104\101\265\214\013\213\040\313\065\045\327\001\167\361\175\362" + "\007\341\302\122\045\010\062\261\021\242\020\210\002\240\112\027" + "\021\002\374\275\354\227\053\317\037\334\256\135\136\052\223\327" + "\261\320\022\046\054\226\114\262\155\347\020\234\266\153\013\024" + "\273\164\326\075\130\206\006\237\127\020\042\045\137\367\007\341" + "\374\247\377\370\272\374\102\215\304\056\100\344\134\175\103\242" + "\073\200\055\075\373\121\035\126\011\353\105\176\037\131\052\314" + "\152\300\041\340\064\010\151\130\032\336\110\360\204\040\256\233" + "\040\223\137\056\066\325\003\076\011\002\240\173\255\075\272\371" + "\063\123\363\214\364\143\174\136\276\343\335\302\143\227\176\154" + "\151\326\376\327\247\357\253\175\365\311\037\065\160\302\216\117" + "\124\337\225\227\211\057\013\002\110\341\240\130\367\363\113\042" + "\071\275\302\273\104\254\225\244\327\207\363\127\042\361\172\262" + "\224\344\143\354\347\145\044\333\312\304\025\303\305\237\150\253" + "\022\000\125\232\270\237\346\347\261\375\354\102\357\071\257\056" + "\276\251\062\100\336\256\353\260\213\147\302\142\066\155\031\200" + "\235\273\107\140\343\160\077\330\264\312\232\216\145\157\332\161" + "\370\130\250\360\356\060\052\036\177\122\353\037\215\307\007\331" + "\064\303\141\165\343\024\153\355\363\240\355\047\235\000\034\064" + "\264\011\141\136\001\324\361\111\352\040\042\141\200\257\125\367" + "\037\047\354\024\364\012\120\113\207\043\007\047\140\377\276\121" + "\272\060\343\075\154\307\004\251\126\245\367\315\214\331\137\276" + "\367\346\245\273\153\265\200\354\131\310\057\012\200\330\305\131" + "\261\000\044\304\051\021\173\355\050\057\203\020\361\145\133\231" + "\274\142\270\370\223\155\021\211\175\377\224\137\040\002\174\131" + "\004\355\025\157\053\137\260\361\064\363\227\212\135\360\052\166" + "\304\174\116\152\271\122\144\102\260\205\171\006\133\300\300\133" + "\211\166\025\032\114\020\370\051\011\255\077\042\044\000\156\100" + "\150\073\164\377\336\133\327\260\137\157\263\372\221\243\265\077" + "\031\310\274\232\220\053\320\112\341\340\240\241\106\352\066\353" + "\042\100\222\007\220\103\000\360\335\371\005\255\114\115\346\346" + "\317\315\056\263\326\176\024\016\357\237\000\313\306\161\111\326" + "\156\070\060\273\064\357\174\143\337\203\326\227\237\270\253\172" + "\004\302\104\316\112\176\052\305\213\042\040\247\003\141\051\012" + "\100\032\331\251\030\100\142\252\137\226\153\042\223\127\025\056" + "\306\211\044\127\155\373\353\104\132\027\363\211\043\274\034\026" + "\332\336\361\042\143\343\071\057\057\275\271\153\100\177\053\353" + "\204\157\346\231\153\032\154\336\266\221\354\072\175\004\372\066" + "\166\023\313\131\002\346\025\260\206\273\331\170\004\002\020\056" + "\242\340\234\002\001\160\260\157\117\013\272\103\315\166\266\366" + "\247\222\060\264\255\120\162\200\225\037\265\015\122\267\010\251" + "\143\127\041\121\000\224\003\173\370\136\235\002\272\370\254\167" + "\140\342\364\134\272\377\351\043\060\175\254\071\141\247\121\247" + "\017\317\216\072\377\172\337\127\026\277\267\070\203\263\234\103" + "\044\317\113\176\131\004\262\010\200\152\333\107\254\000\110\141" + "\021\144\271\136\052\162\213\353\161\113\131\000\124\204\127\155" + "\223\204\137\270\365\367\322\026\335\045\353\176\203\326\135\050" + "\150\172\027\065\317\175\203\171\141\337\151\372\133\215\062\271" + "\000\210\233\246\247\273\213\354\074\163\013\214\154\035\046\232" + "\151\063\041\130\142\335\204\132\263\204\304\276\277\167\074\174" + "\247\066\065\131\377\036\211\037\174\107\141\245\070\225\110\237" + "\005\131\052\132\073\140\153\254\261\146\136\201\045\170\005\161" + "\267\021\261\332\260\326\036\012\106\027\135\132\154\260\326\376" + "\050\034\140\375\373\106\335\175\302\212\072\260\124\235\265\277" + "\175\340\147\215\177\373\331\167\353\117\103\224\360\161\344\027" + "\327\323\104\300\377\251\104\300\137\007\311\026\204\245\270\236" + "\026\026\101\226\353\262\032\002\340\157\347\041\277\112\010\110" + "\261\010\172\201\221\277\100\101\063\013\005\035\373\342\145\266" + "\256\031\140\224\014\103\357\077\033\106\006\136\150\134\152\154" + "\040\257\145\141\275\270\023\234\140\264\175\347\060\071\155\367" + "\026\300\011\106\050\004\015\346\031\360\133\211\301\035\002\326" + "\332\333\274\265\057\220\234\267\360\236\153\344\136\051\262\124" + "\302\274\140\235\074\207\013\201\116\352\124\362\012\064\142\362" + "\221\174\035\112\060\076\172\014\016\074\163\224\116\114\314\004" + "\151\255\052\335\307\372\366\137\173\344\337\353\167\316\214\132" + "\363\300\173\033\041\302\363\147\033\040\034\326\012\361\145\162" + "\213\042\340\273\250\062\221\305\064\342\062\156\175\135\004\100" + "\046\265\052\176\045\344\107\150\045\044\076\027\200\242\146\232" + "\124\057\121\060\313\154\211\203\266\070\021\323\320\250\311\112" + "\113\053\350\240\073\206\136\034\270\210\134\130\332\256\275\126" + "\357\202\263\375\142\351\337\320\115\166\235\061\002\133\266\016" + "\263\334\032\140\325\027\114\260\353\105\235\265\372\320\106\164" + "\104\301\105\226\012\327\156\340\030\201\255\153\065\315\054\065" + "\260\157\137\137\246\160\150\377\030\075\300\334\374\345\252\073" + "\305\234\135\237\172\165\306\371\301\350\243\326\327\037\273\253" + "\372\030\270\244\307\211\111\234\314\004\105\244\036\074\231\307" + "\005\241\326\044\173\053\344\367\011\057\022\125\024\001\025\321" + "\251\264\055\056\343\326\327\115\000\124\161\252\326\137\114\223" + "\046\006\274\345\057\171\371\260\326\037\077\312\245\127\012\124" + "\307\333\157\045\203\352\232\141\032\105\312\226\214\364\254\243" + "\257\243\000\350\072\150\116\003\264\006\317\203\222\312\331\306" + "\366\376\363\364\327\025\007\350\105\104\043\135\054\063\255\314" + "\004\342\364\035\303\305\323\166\156\321\272\272\012\120\247\113" + "\240\232\140\044\243\103\354\366\042\113\205\314\003\167\302\116" + "\227\073\141\147\152\326\171\146\377\150\355\320\350\261\232\343" + "\135\130\306\360\261\271\121\373\133\117\335\155\175\173\372\140" + "\155\026\200\277\114\235\267\356\276\000\040\331\033\304\043\253" + "\047\002\236\000\210\217\352\212\344\007\151\073\115\004\174\210" + "\333\262\035\050\326\305\145\334\172\133\005\100\334\226\227\376" + "\172\232\020\044\375\142\155\272\074\301\240\145\300\226\236\240" + "\333\157\026\212\272\111\101\307\126\237\062\067\275\140\030\146" + "\221\155\073\224\152\272\201\037\157\161\327\361\215\204\354\202" + "\353\015\013\010\256\067\230\055\005\113\173\327\351\306\313\372" + "\317\064\257\036\337\102\316\070\126\151\236\007\276\253\140\307" + "\351\133\140\150\313\006\166\205\361\125\146\113\312\367\032\166" + "\310\277\272\310\122\071\325\040\374\045\232\005\126\153\154\306" + "\334\303\007\307\131\337\176\024\226\160\302\016\306\262\013\327" + "\067\103\107\347\017\330\137\271\343\316\332\355\266\115\154\274" + "\243\340\360\207\025\371\143\372\354\077\161\054\013\347\037\271" + "\042\340\011\000\172\001\176\167\140\245\036\200\110\164\121\004" + "\144\021\361\155\344\245\050\006\076\116\010\001\360\227\131\004" + "\000\021\347\011\360\137\305\047\176\027\153\371\031\161\221\340" + "\024\112\330\367\047\145\207\232\206\333\372\153\072\222\335\060" + "\065\215\265\372\354\214\011\022\037\227\165\312\337\244\103\352" + "\215\206\206\304\177\136\105\357\273\162\233\371\306\323\312\332" + "\133\213\032\035\361\207\370\047\172\001\036\337\102\340\231\115" + "\004\007\222\070\212\245\002\023\202\315\260\175\347\026\060\113" + "\032\023\216\045\376\060\122\134\231\166\004\041\077\262\124\300" + "\254\360\247\347\232\214\370\307\217\315\303\341\147\307\340\350" + "\241\111\160\274\217\144\124\230\267\177\346\050\205\263\106\001" + "\272\330\072\076\202\276\350\320\147\237\234\267\277\166\363\141" + "\353\333\007\153\316\054\266\376\065\313\155\331\153\026\251\023" + "\150\040\371\203\256\000\172\000\304\043\155\202\007\220\345\047" + "\273\377\052\021\210\043\276\274\356\343\204\025\000\204\174\053" + "\317\017\213\045\077\170\002\100\321\256\013\110\077\222\237\226" + "\264\112\221\032\046\022\233\265\374\006\222\337\054\060\001\240" + "\132\015\007\353\032\370\046\232\072\316\365\042\134\316\131\332" + "\172\035\264\137\333\145\376\374\371\175\306\333\066\024\340\142" + "\226\161\041\356\231\330\072\353\371\077\071\004\360\030\023\203" + "\331\262\167\140\054\301\320\226\215\070\257\000\066\156\352\147" + "\127\275\012\165\346\025\070\161\157\073\356\240\255\110\253\244" + "\072\301\207\161\230\217\150\233\160\304\153\355\347\374\147\356" + "\331\145\336\072\003\160\326\030\300\216\143\240\176\063\037\336" + "\046\240\260\074\136\167\276\365\375\051\373\366\057\217\327\237" + "\250\063\362\243\047\140\065\320\211\150\130\015\217\374\230\043" + "\211\367\000\104\142\247\375\124\044\227\133\174\225\007\020\047" + "\000\161\142\260\352\002\240\132\027\111\056\057\065\151\075\056" + "\015\377\165\173\002\120\146\036\100\201\226\365\142\221\152\025" + "\112\215\102\201\135\066\207\032\050\000\254\224\360\203\032\032" + "\016\347\240\260\063\302\343\307\315\311\331\135\264\347\332\035" + "\305\267\236\126\326\337\121\324\140\127\354\203\360\061\070\332" + "\017\360\050\023\202\003\033\041\170\043\177\127\245\004\073\367" + "\214\300\326\035\233\001\125\010\275\202\006\177\333\161\276\274" + "\073\120\043\113\205\104\340\235\135\223\367\355\273\140\161\156" + "\031\016\354\077\012\207\366\117\060\266\272\242\134\142\213\063" + "\306\220\370\004\172\371\007\163\322\047\156\360\170\046\006\013" + "\026\074\374\314\202\375\345\377\173\137\365\233\343\125\153\061" + "\360\000\232\356\077\255\205\357\002\370\344\315\112\176\220\322" + "\370\150\305\013\360\161\322\010\200\037\227\215\374\025\106\176" + "\352\272\377\016\224\065\024\000\174\244\266\122\300\376\075\116" + "\310\343\337\134\162\005\200\021\237\135\030\362\276\155\372\271" + "\027\014\030\127\366\027\310\033\330\116\112\171\211\057\143\251" + "\300\272\007\233\361\307\052\207\373\265\145\234\073\016\133\267" + "\157\142\135\204\021\030\030\354\345\267\021\033\164\121\371\136" + "\303\016\132\203\252\162\152\070\075\227\371\205\214\376\160\364" + "\360\024\336\302\203\343\123\263\101\374\320\034\300\331\214\364" + "\273\046\231\147\040\322\051\100\263\056\250\362\047\302\012\253" + "\123\063\343\065\372\325\257\217\325\277\270\367\100\355\131\274" + "\365\347\135\176\321\375\157\325\003\000\301\126\045\002\052\301" + "\220\227\047\255\000\210\367\325\225\335\200\036\317\206\166\013" + "\002\100\313\132\251\014\304\164\250\156\063\227\337\025\000\356" + "\041\220\063\173\234\312\265\133\213\157\336\136\326\337\131\320" + "\200\177\320\164\245\304\227\201\362\177\140\200\260\356\001\300" + "\221\001\367\155\205\270\207\336\276\156\330\265\173\004\106\116" + "\033\006\242\133\302\130\101\007\053\101\263\122\151\374\105\033" + "\046\043\376\362\122\235\117\317\075\360\354\050\064\274\217\144" + "\340\275\336\323\047\010\234\075\112\140\103\060\125\137\205\150" + "\175\120\127\142\332\334\166\047\304\073\013\066\275\347\311\371" + "\306\027\376\360\261\345\357\054\324\201\217\053\103\170\014\100" + "\374\251\274\001\000\265\155\073\004\040\216\374\252\270\020\332" + "\045\000\162\270\050\000\162\034\042\266\033\320\353\023\037\170" + "\167\115\203\156\040\276\000\140\277\036\373\364\224\226\230\155" + "\225\257\377\137\273\272\316\176\311\140\341\135\075\072\275\214" + "\045\354\156\067\351\105\240\023\111\275\345\154\011\340\211\055" + "\024\236\034\146\235\107\157\306\200\241\351\260\375\364\315\260" + "\163\327\010\164\363\067\030\055\101\335\131\204\264\133\211\035" + "\250\201\237\273\106\322\343\204\235\311\261\343\260\357\231\303" + "\154\071\035\304\043\331\317\142\244\077\203\221\337\214\161\274" + "\242\025\074\213\010\304\164\027\230\030\130\024\306\046\227\355" + "\133\277\170\244\172\363\315\107\054\326\311\010\272\002\156\302" + "\154\036\200\150\053\257\003\304\213\200\037\046\306\211\141\262" + "\215\052\056\204\325\024\000\225\255\054\016\221\156\100\237\113" + "\174\102\173\030\321\347\131\230\047\000\336\140\075\272\372\372" + "\131\335\305\342\207\167\031\157\331\122\062\256\056\352\374\255" + "\101\260\232\304\107\370\304\107\370\323\312\160\333\142\147\160" + "\140\043\205\307\066\123\230\350\243\201\355\306\215\175\260\143" + "\317\126\030\331\266\211\171\016\165\336\075\340\157\060\352\040" + "\005\214\314\204\265\366\132\005\032\125\312\373\366\007\237\076" + "\012\313\313\256\107\205\003\076\247\117\021\170\036\163\363\207" + "\347\344\224\361\010\307\305\213\100\242\000\370\160\347\026\133" + "\013\026\375\316\123\363\366\336\217\374\144\361\007\325\160\227" + "\040\115\000\322\104\100\046\271\114\364\270\245\274\256\332\016" + "\141\255\005\000\221\064\010\210\337\025\343\056\075\376\240\207" + "\055\075\021\240\013\240\175\364\371\075\273\317\357\207\153\173" + "\115\375\112\215\300\300\152\223\336\207\273\027\237\364\156\365" + "\020\227\376\331\314\164\271\102\360\314\046\007\352\336\123\003" + "\246\151\362\307\223\167\236\076\002\345\112\201\013\101\060\355" + "\270\203\000\032\061\371\175\173\034\324\073\066\071\013\373\236" + "\072\004\143\107\246\300\377\342\107\317\262\113\172\154\355\313" + "\011\037\240\316\046\002\321\172\223\113\000\104\340\175\103\012" + "\317\116\325\234\033\077\167\244\172\313\155\007\353\307\041\136" + "\010\100\261\055\372\056\047\225\000\304\305\251\004\100\134\367" + "\343\125\267\005\211\057\000\270\301\226\332\110\027\024\376\347" + "\271\075\257\337\134\326\336\123\324\310\057\160\333\065\042\076" + "\042\236\374\315\152\042\037\115\103\007\330\067\350\360\056\302" + "\261\112\063\166\150\363\106\330\311\274\202\341\055\033\371\255" + "\104\327\053\310\376\071\365\123\017\330\332\227\170\153\217\067" + "\333\017\355\037\143\304\077\014\213\013\113\156\054\053\272\323" + "\216\263\276\375\230\006\043\263\342\247\065\374\253\022\217\264" + "\212\055\077\024\330\262\000\370\160\275\202\332\202\115\157\177" + "\142\266\361\331\017\374\144\351\001\310\076\026\020\347\376\213" + "\333\142\072\161\133\134\312\353\252\355\020\262\234\347\112\004" + "\100\264\021\227\362\040\240\037\036\010\300\107\316\051\154\176" + "\345\206\362\173\172\114\162\055\153\355\267\254\045\351\175\304" + "\223\277\131\175\342\217\312\265\231\354\241\360\370\146\007\236" + "\145\202\340\117\060\052\227\335\133\211\073\166\155\205\102\131" + "\147\036\301\002\237\172\234\162\255\116\031\020\374\364\045\043" + "\075\022\177\346\330\074\074\373\364\021\070\174\140\054\230\260" + "\323\125\143\175\373\011\015\316\142\304\257\010\275\246\160\145" + "\153\226\125\134\045\116\257\334\322\333\135\140\005\002\040\202" + "\340\364\041\170\144\252\146\177\366\037\366\065\156\273\175\274" + "\312\037\050\202\250\010\070\302\266\252\365\367\227\162\072\037" + "\353\056\000\362\166\222\000\250\342\145\362\353\377\364\222\236" + "\127\155\351\322\177\255\240\221\067\260\060\143\255\211\037\056" + "\111\277\072\210\344\017\207\307\101\216\253\231\000\117\261\256" + "\301\023\114\014\346\274\011\106\230\315\310\326\115\260\353\214" + "\155\060\070\324\317\074\002\174\225\331\042\253\011\247\246\127" + "\140\100\221\221\276\233\125\165\234\260\343\266\366\263\323\363" + "\101\374\310\014\272\371\032\354\070\256\201\026\123\270\212\307" + "\371\205\270\174\341\115\211\007\151\031\016\157\011\044\220\222" + "\371\045\033\276\364\310\114\343\063\037\174\150\376\121\010\223" + "\036\227\111\135\000\125\330\111\041\000\252\160\061\136\024\000" + "\362\273\147\227\066\274\171\123\361\232\212\241\275\227\265\366" + "\273\327\212\364\252\275\210\332\257\042\274\330\372\213\166\131" + "\340\347\163\264\317\341\136\301\301\015\315\017\237\165\125\312" + "\260\347\314\155\260\375\364\021\300\007\034\032\316\074\276\301" + "\010\262\347\176\142\002\047\354\024\110\067\237\264\063\077\127" + "\205\375\317\034\206\003\317\214\202\145\271\023\166\212\114\353" + "\316\234\324\070\361\173\253\341\252\225\225\270\062\222\052\265" + "\072\256\171\325\145\021\020\303\132\006\161\253\274\015\344\077" + "\246\252\326\147\377\372\251\331\257\174\147\002\374\213\233\145" + "\014\100\016\363\161\322\012\000\047\376\155\057\355\177\361\110" + "\027\171\237\251\221\267\263\002\347\057\370\134\115\362\107\113" + "\046\174\052\321\222\046\221\355\244\222\216\103\134\165\135\052" + "\120\170\142\230\171\005\103\016\054\005\023\214\010\154\337\261" + "\031\116\337\263\015\372\067\366\170\063\015\321\053\070\271\246" + "\035\363\067\354\260\326\136\243\005\030\075\162\014\366\075\171" + "\020\216\115\066\157\341\155\232\147\175\373\161\015\116\237\322" + "\202\011\073\371\210\233\116\320\354\371\205\257\320\252\210\000" + "\302\363\012\034\112\216\061\366\337\370\340\164\355\237\077\364" + "\340\342\076\210\172\005\362\172\036\322\257\271\000\370\141\151" + "\304\347\313\337\075\263\247\373\315\333\012\357\354\041\364\175" + "\032\041\347\361\343\133\105\322\043\302\245\103\204\365\370\370" + "\064\061\110\102\222\115\064\216\160\057\340\340\000\363\012\206" + "\155\070\332\037\174\351\032\172\373\053\260\347\254\323\140\333" + "\216\055\200\017\063\343\130\201\005\047\356\004\043\076\075\227" + "\164\161\342\327\026\055\330\367\314\041\336\277\257\173\023\166" + "\014\326\326\355\236\102\342\353\060\270\230\134\365\324\261\311" + "\175\363\374\102\240\226\346\070\041\310\102\226\314\160\275\002" + "\307\242\364\273\063\026\375\314\157\077\062\375\157\117\114\105" + "\346\024\370\313\074\244\137\067\001\360\227\112\001\370\322\113" + "\007\316\332\132\321\336\137\320\340\132\126\240\175\074\164\035" + "\210\257\226\122\065\351\305\070\071\074\016\151\066\341\370\150" + "\121\316\225\320\053\260\341\251\115\024\252\246\153\255\033\272" + "\173\053\161\367\066\350\355\053\363\311\105\170\007\201\102\314" + "\354\227\065\206\333\332\343\204\235\062\114\214\035\203\147\236" + "\074\004\343\107\217\005\361\003\113\070\075\127\207\075\254\265" + "\027\047\354\244\125\276\126\104\000\221\124\101\343\220\174\127" + "\040\034\237\226\127\056\170\335\003\207\302\221\232\115\377\371" + "\241\005\373\237\077\160\377\354\050\104\047\003\201\142\351\143" + "\115\005\100\025\246\024\200\363\267\200\371\311\263\067\274\251" + "\127\207\367\023\040\257\005\376\122\347\064\212\344\107\134\216" + "\361\255\271\217\350\150\076\365\302\203\365\204\303\315\172\046" + "\361\166\121\121\362\201\167\014\366\157\160\340\061\046\006\023" + "\275\115\013\174\032\161\367\231\247\301\326\155\103\340\150\065" + "\327\053\300\107\123\326\034\204\117\317\055\150\075\120\147\116" + "\311\201\175\207\371\275\373\245\305\346\204\235\135\307\335\326" + "\176\170\216\170\051\222\241\214\047\252\270\064\031\215\337\127" + "\362\061\210\127\077\131\004\304\360\266\301\025\203\206\355\320" + "\177\233\163\350\077\276\373\316\351\073\017\067\157\045\042\116" + "\016\001\370\247\027\165\155\072\167\143\371\127\115\102\336\307" + "\002\166\360\143\150\043\361\125\071\105\210\253\260\245\320\024" + "\205\064\073\167\045\236\240\111\110\263\117\213\227\161\034\047" + "\030\061\041\300\011\106\015\357\045\344\205\202\011\273\316\330" + "\012\247\357\336\016\245\156\003\352\366\334\232\014\032\272\117" + "\341\125\240\310\210\077\065\061\013\317\060\322\037\075\070\216" + "\037\141\341\361\075\065\167\044\377\254\111\015\112\215\370\352" + "\225\124\361\042\161\301\167\100\342\321\152\234\033\037\055\063" + "\061\215\054\004\341\132\024\265\133\061\074\257\000\064\355\311" + "\232\145\377\323\375\163\325\033\076\170\337\242\357\122\311\063" + "\310\322\010\277\052\002\040\207\363\043\276\353\325\033\136\122" + "\321\264\017\030\032\274\203\355\267\330\116\322\373\210\022\065" + "\176\140\256\051\227\044\010\310\046\225\152\221\310\202\064\373" + "\264\170\025\374\064\015\235\300\063\203\066\037\053\100\121\100" + "\140\135\071\355\364\021\070\353\354\135\320\303\272\007\065\326" + "\075\260\370\123\211\355\035\064\304\217\144\140\337\036\247\351" + "\216\036\235\202\047\176\266\217\317\330\103\040\077\267\317\270" + "\255\375\326\031\115\101\030\065\362\221\126\165\165\302\310\225" + "\237\024\020\167\173\121\045\004\341\365\250\030\244\235\167\146" + "\170\102\300\376\055\133\100\157\233\163\310\247\056\371\366\344" + "\177\170\261\124\132\372\110\333\016\041\313\261\046\225\067\271" + "\341\205\303\245\163\206\355\137\066\165\375\067\010\245\027\120" + "\312\004\252\315\304\127\237\121\234\373\056\221\074\364\321\336" + "\060\322\216\062\255\112\244\245\367\221\325\016\221\325\166\274" + "\307\201\307\207\154\330\267\321\141\135\001\067\154\323\360\006" + "\076\323\160\353\266\141\300\317\025\271\337\112\254\062\101\300" + "\331\064\131\163\166\201\223\165\360\253\267\072\316\324\143\244" + "\137\132\254\301\241\003\243\314\315\077\022\314\324\353\142\055" + "\374\231\023\032\074\217\021\277\273\236\136\225\262\021\064\172" + "\234\255\020\076\055\236\307\051\337\016\042\304\307\154\107\327" + "\251\260\256\266\133\061\230\030\340\107\113\230\247\365\023\213" + "\322\117\375\347\130\343\226\017\074\074\213\117\103\244\125\353" + "\125\021\000\362\203\137\034\334\334\255\353\277\255\003\175\037" + "\245\164\220\357\247\315\304\107\120\010\153\177\204\354\064\274" + "\055\153\171\334\172\122\130\034\322\207\237\134\044\345\231\147" + "\177\161\020\363\300\201\302\237\156\261\271\030\370\335\003\374" + "\030\012\176\060\165\363\326\101\030\334\064\000\175\175\335\340" + "\020\233\177\070\025\075\003\307\037\154\306\302\343\247\244\271" + "\355\014\321\371\200\036\176\347\336\146\016\304\364\261\131\230" + "\232\234\346\263\364\146\247\233\037\311\300\373\365\057\034\325" + "\341\314\111\075\141\302\116\062\222\311\231\134\112\312\012\251" + "\010\313\036\227\157\177\104\010\010\213\101\124\010\322\312\041" + "\067\174\257\200\220\131\207\302\115\114\001\076\365\312\177\237" + "\370\231\027\253\172\300\244\155\002\300\227\367\277\176\344\347" + "\114\260\076\314\274\321\253\030\361\013\370\365\204\325\206\053" + "\002\244\071\022\022\041\175\223\234\131\344\057\013\011\243\066" + "\352\242\152\055\257\144\344\265\107\040\371\237\142\335\203\047" + "\067\071\060\125\011\137\023\335\324\241\177\240\007\172\172\052" + "\320\323\337\015\245\142\001\014\103\347\167\027\330\065\004\253" + "\141\101\303\262\141\171\251\012\013\163\213\060\073\263\000\013" + "\263\370\312\263\146\076\110\364\355\314\275\107\322\237\066\355" + "\272\371\131\052\217\217\064\333\150\274\050\351\121\344\317\057" + "\071\334\215\113\057\171\042\254\104\204\301\133\152\231\233\212" + "\025\202\171\004\304\125\243\357\327\154\370\364\063\013\205\333" + "\256\274\347\260\077\042\054\267\225\112\144\071\116\162\335\305" + "\240\137\126\032\176\243\011\360\141\266\277\113\126\303\315\317" + "\012\374\102\233\115\343\133\174\104\332\221\255\064\336\007\015" + "\376\370\010\027\147\326\174\174\344\265\217\303\154\211\302\201" + "\001\033\016\365\073\060\321\335\174\006\041\057\312\026\201\315" + "\163\032\354\140\204\107\362\027\255\150\165\311\122\201\174\304" + "\226\016\121\305\207\261\072\042\240\056\361\126\362\325\310\032" + "\022\137\206\327\075\140\177\046\054\012\237\235\136\266\377\341" + "\222\357\115\342\004\043\012\053\020\000\376\131\360\313\057\035" + "\372\145\215\150\177\014\216\163\026\317\153\235\210\057\003\333" + "\046\113\376\344\113\002\322\154\322\342\021\021\033\052\256\346" + "\277\364\131\366\051\043\153\032\377\150\360\055\106\223\114\004" + "\216\227\035\056\014\370\034\302\262\101\271\307\140\171\376\173" + "\301\162\137\250\201\175\372\276\052\100\177\125\203\301\005\215" + "\255\313\337\115\317\206\254\151\042\127\216\050\127\043\110\047" + "\166\266\360\146\174\353\102\260\256\304\227\341\167\017\064\174" + "\131\026\174\323\166\350\137\235\167\307\370\167\275\130\345\111" + "\306\012\353\375\157\034\176\101\231\220\177\144\204\177\011\254" + "\143\213\237\006\074\052\024\002\053\243\020\004\240\241\105\222" + "\111\206\370\344\313\237\226\217\214\274\366\153\215\126\053\273" + "\072\135\172\051\246\206\113\006\151\307\027\167\034\131\323\341" + "\122\317\373\275\270\265\006\166\017\064\076\150\170\127\265\136" + "\377\355\013\276\075\215\343\004\221\252\045\236\163\160\176\017" + "\277\145\333\173\165\333\372\133\106\374\256\023\225\370\052\140" + "\367\240\101\335\067\366\370\310\172\370\131\314\322\154\322\342" + "\125\110\116\023\137\045\345\164\151\225\267\275\010\357\275\325" + "\175\267\322\312\047\305\221\230\210\150\060\215\011\017\103\216" + "\307\061\126\275\235\237\205\136\013\270\135\003\374\334\351\237" + "\334\366\215\261\277\274\276\171\361\370\222\200\100\374\213\057" + "\276\130\373\373\336\247\177\107\267\032\177\316\310\177\122\235" + "\247\010\277\173\200\277\064\122\246\305\043\126\342\045\040\262" + "\330\210\020\157\135\236\250\040\011\267\320\144\244\235\115\152" + "\013\337\246\270\120\270\164\374\111\151\360\345\116\332\311\106" + "\174\021\070\106\240\351\254\027\017\067\177\177\174\364\075\277" + "\361\100\363\145\246\170\116\374\311\274\363\317\077\137\373\207" + "\255\307\056\057\133\313\067\235\024\065\060\043\120\004\370\007" + "\102\024\247\224\126\205\127\073\136\205\254\036\313\211\200\270" + "\026\067\016\255\220\266\265\270\164\262\222\340\217\042\034\232" + "\255\375\011\355\346\347\201\047\002\266\103\077\365\374\257\217" + "\176\020\004\001\320\317\071\347\034\375\043\347\155\031\270\150" + "\366\147\017\021\112\207\123\262\072\051\201\136\101\043\301\053" + "\310\302\273\166\331\370\240\221\225\354\300\044\142\375\365\263" + "\360\303\262\166\021\342\166\235\106\040\016\311\050\123\032\110" + "\267\313\117\370\270\270\346\331\045\246\043\115\033\154\355\117" + "\072\067\077\053\074\021\130\260\341\255\347\177\343\350\327\131" + "\210\303\275\233\155\333\266\231\057\232\373\331\345\032\060\362" + "\237\222\147\336\124\164\374\207\042\120\247\341\261\002\371\264" + "\125\304\120\171\275\131\210\226\112\262\230\062\117\322\005\071" + "\111\332\166\034\262\330\145\261\211\103\326\264\041\273\034\302" + "\022\027\107\102\261\321\222\024\323\351\204\277\172\212\057\117" + "\155\260\162\240\066\224\015\343\017\330\306\035\030\302\005\357" + "\330\261\143\206\261\211\276\034\137\106\161\252\003\317\260\100" + "\334\237\315\374\355\072\277\203\040\127\021\351\366\027\015\055" + "\044\313\060\262\330\370\110\153\370\117\226\253\221\367\070\133" + "\041\264\013\232\150\023\237\066\054\007\376\272\301\376\230\101" + "\153\237\367\054\116\122\120\024\074\362\322\055\133\266\230\243" + "\243\243\015\024\000\143\161\161\321\250\157\326\066\167\051\147" + "\022\236\272\100\305\057\203\373\002\216\206\357\025\250\306\012" + "\062\326\215\064\102\213\310\143\273\022\144\361\120\126\012\161" + "\037\131\362\227\273\053\162\134\062\221\151\254\015\136\247\244" + "\375\143\072\136\341\031\351\215\054\007\172\252\202\200\121\251" + "\124\260\050\170\027\100\077\176\374\270\061\177\172\305\030\040" + "\047\306\013\046\326\032\130\052\075\373\376\000\000\031\017\111" + "\104\101\124\027\212\304\375\131\236\127\320\020\152\165\132\245" + "\362\021\127\241\125\310\122\377\302\355\135\022\155\342\221\317" + "\132\106\266\076\164\022\262\244\313\142\203\210\153\251\203\220" + "\030\145\300\201\074\277\265\327\302\051\236\173\040\004\026\251" + "\016\117\077\375\064\026\205\306\005\140\142\142\202\034\252\357" + "\076\272\275\142\202\146\237\232\157\244\315\012\023\053\012\270" + "\237\355\250\073\376\130\101\074\344\252\024\042\074\115\257\152" + "\331\373\371\151\071\255\057\142\217\116\212\310\162\026\151\066" + "\131\343\261\107\133\360\132\373\264\064\317\025\020\303\200\211" + "\272\216\044\307\141\061\127\000\330\317\070\262\130\173\360\160" + "\251\360\313\073\360\125\056\316\163\323\023\020\201\205\122\326" + "\050\340\033\274\321\033\250\361\073\010\351\256\173\036\057\000" + "\321\152\305\114\073\216\225\242\325\343\362\221\326\052\313\110" + "\063\111\212\377\377\333\273\262\346\070\256\353\174\172\237\015" + "\333\200\000\210\215\033\270\110\326\276\330\212\054\245\264\131" + "\073\011\071\145\311\222\274\125\345\051\225\207\124\252\362\226" + "\362\173\052\171\113\176\100\252\042\311\222\255\130\017\042\100" + "\111\224\024\155\221\312\222\105\107\233\255\042\305\005\040\001" + "\002\044\210\155\006\203\131\172\246\227\334\323\335\027\274\270" + "\350\236\031\202\000\210\345\176\305\313\356\231\351\231\041\273" + "\373\373\316\167\316\075\335\303\276\206\353\152\100\374\315\137" + "\324\273\002\340\014\200\242\302\254\055\303\270\011\307\301\317" + "\206\274\032\000\356\046\371\225\343\263\357\364\336\331\376\317" + "\311\204\326\322\206\127\211\155\161\047\300\302\167\005\130\037" + "\360\205\300\104\041\250\207\201\322\312\023\165\245\077\257\072" + "\226\317\240\072\171\277\200\132\333\127\313\357\361\275\050\330" + "\072\021\154\155\141\273\053\371\366\115\016\154\013\126\024\310" + "\331\022\234\064\125\230\061\255\043\020\360\236\012\200\364\155" + "\046\137\072\076\143\376\253\014\306\277\125\142\012\164\223\063" + "\336\265\211\023\130\203\313\175\067\012\060\242\044\244\313\256" + "\240\344\370\127\046\362\250\125\027\250\206\132\004\277\322\317" + "\133\155\134\311\277\247\336\155\103\267\343\024\202\256\152\322" + "\145\233\057\260\024\030\365\101\226\141\262\054\301\231\262\102" + "\316\131\367\344\177\174\165\341\025\010\032\000\161\267\265\223" + "\021\013\106\374\137\356\352\376\373\035\015\372\337\245\311\373" + "\372\342\016\030\130\165\165\254\072\103\336\326\003\246\005\146" + "\120\053\210\332\103\313\332\163\021\157\132\326\147\135\041\352" + "\342\122\035\033\325\261\311\002\352\331\226\156\103\163\173\135" + "\206\315\323\251\267\322\220\025\057\352\233\044\102\015\021\342" + "\317\130\062\116\173\117\374\346\344\364\317\336\071\227\075\113" + "\266\050\222\341\375\024\113\033\031\106\060\022\144\304\176\175" + "\107\327\117\257\153\061\376\221\150\200\326\035\223\240\113\047" + "\326\012\034\042\004\242\076\020\005\044\246\351\370\142\160\065" + "\167\343\333\150\072\173\045\355\300\127\260\151\350\266\130\305" + "\067\144\077\352\013\204\000\017\006\022\237\104\374\074\071\017" + "\057\230\022\114\130\176\347\153\321\262\277\175\345\324\354\077" + "\275\077\232\035\045\017\361\356\261\013\002\220\006\237\374\072" + "\200\347\156\321\011\030\317\354\115\337\370\150\157\303\257\143" + "\212\274\033\257\167\336\246\373\102\320\250\302\145\041\330\150" + "\147\353\032\301\117\017\374\131\004\212\265\332\123\313\375\236" + "\325\342\124\075\237\053\055\374\265\024\030\341\015\222\333\343" + "\024\355\026\350\123\133\036\202\034\337\041\304\237\252\110\160" + "\221\020\077\033\304\151\313\165\263\147\062\346\177\375\373\127" + "\227\176\073\127\251\340\175\335\360\006\221\170\327\040\024\000" + "\023\167\051\376\110\007\222\037\353\134\050\000\324\015\250\051" + "\125\115\376\303\055\155\177\263\257\111\177\126\227\045\357\032" + "\201\204\002\320\115\216\106\033\331\132\165\003\127\040\352\004" + "\241\300\275\202\256\000\305\040\254\126\260\034\360\037\103\071" + "\261\022\037\277\132\374\252\347\163\171\021\300\234\076\206\126" + "\137\170\374\150\220\374\036\243\175\211\310\344\005\102\351\211" + "\012\340\257\022\173\230\257\330\337\016\317\231\107\137\072\061" + "\371\326\130\336\302\233\207\042\361\213\301\022\007\272\000\117" + "\000\222\340\223\037\207\027\375\341\262\040\340\122\217\251\252" + "\376\267\327\265\334\175\103\113\354\307\115\206\162\247\204\265" + "\005\162\312\165\020\077\326\111\216\122\112\106\015\260\205\053" + "\250\202\162\040\004\345\052\273\147\043\356\271\172\310\315\043" + "\352\075\370\074\132\374\230\014\142\012\057\012\301\215\076\134" + "\031\363\172\311\043\376\114\220\163\222\034\277\070\121\260\376" + "\347\243\361\354\300\221\341\354\111\360\211\156\303\345\250\217" + "\244\257\300\145\021\360\356\345\214\244\247\375\000\224\374\172" + "\360\034\076\246\342\340\365\013\334\333\225\354\171\264\273\341" + "\120\157\112\177\114\225\245\146\374\342\046\042\327\050\004\355" + "\044\115\220\321\025\210\331\203\110\330\101\172\200\143\071\173" + "\210\212\004\317\217\225\020\217\253\345\334\162\337\357\105\173" + "\331\047\377\162\077\143\323\303\053\352\251\204\265\044\332\223" + "\050\202\304\067\203\023\250\140\071\103\247\263\245\301\227\117" + "\314\034\075\237\067\361\236\355\050\011\225\140\340\072\045\274" + "\311\275\346\375\164\013\045\267\002\227\243\276\012\341\002\240" + "\005\317\053\255\206\252\377\174\137\313\375\327\267\030\375\051" + "\115\276\011\377\041\232\214\102\040\103\127\134\201\204\024\244" + "\007\366\325\224\304\066\067\360\000\026\235\313\266\015\261\022" + "\104\136\013\134\015\121\151\341\020\011\037\227\101\114\341\105" + "\041\270\174\027\255\376\054\241\321\070\241\357\124\331\277\026" + "\002\073\326\247\212\225\217\076\275\224\037\170\365\344\364\237" + "\301\217\364\110\066\007\302\005\200\106\176\053\030\336\366\270" + "\353\275\226\300\140\250\314\360\172\053\140\251\000\320\165\272" + "\275\362\170\157\103\337\375\135\251\103\035\011\355\141\142\335" + "\222\370\257\113\353\012\164\047\144\330\106\222\070\211\244\006" + "\302\025\104\303\142\135\301\006\121\200\345\162\326\273\000\113" + "\361\311\057\322\373\010\004\321\276\102\022\355\011\323\206\061" + "\102\374\142\120\324\063\155\167\214\344\366\157\374\367\251\311" + "\067\277\313\224\147\300\047\074\045\277\305\254\123\302\263\217" + "\053\301\143\072\274\062\265\327\020\020\054\025\146\340\143\112" + "\170\052\010\354\143\231\171\336\277\257\100\102\111\075\327\327" + "\372\320\276\146\255\077\241\312\173\311\163\136\021\247\073\101" + "\304\040\256\202\201\327\343\143\235\100\270\202\120\320\251\104" + "\074\330\225\145\012\101\124\221\160\055\120\355\273\150\156\057" + "\212\172\021\240\321\136\325\140\216\304\345\361\222\115\310\357" + "\263\233\034\123\173\246\150\175\372\345\124\161\360\245\343\227" + "\376\144\055\046\072\215\370\224\344\254\030\120\001\140\237\163" + "\340\262\150\170\027\272\322\343\106\105\200\035\254\033\140\123" + "\000\052\000\254\070\260\202\240\074\275\247\361\206\273\332\342" + "\117\265\305\264\373\111\146\200\227\337\103\133\114\201\236\244" + "\352\271\003\211\210\200\160\005\321\100\001\100\041\100\127\260" + "\114\055\130\061\054\127\104\224\040\267\107\233\057\246\360\042" + "\020\064\354\330\030\355\211\275\037\053\272\220\013\246\214\052" + "\216\073\065\232\253\274\371\372\320\354\221\377\233\234\237\000" + "\240\077\351\024\032\361\131\001\140\243\276\303\074\107\311\357" + "\322\301\036\026\211\031\324\025\260\156\200\106\172\226\360\141" + "\202\260\310\101\354\155\066\232\176\272\263\341\361\335\215\372" + "\101\103\221\172\360\213\022\344\314\350\111\152\320\225\320\374" + "\006\043\164\004\242\301\050\024\136\023\207\355\017\353\032\053" + "\101\135\034\226\374\233\255\120\233\057\020\002\332\260\103\242" + "\075\066\354\214\221\203\173\221\104\173\313\317\377\334\114\311" + "\376\342\333\231\302\340\213\047\146\076\236\267\054\236\324\154" + "\304\267\240\072\341\331\210\317\222\037\350\062\354\230\362\102" + "\300\016\076\105\140\153\006\141\217\027\034\002\371\113\171\256" + "\257\351\216\073\210\053\110\033\362\137\221\017\127\061\052\164" + "\304\064\350\115\351\320\114\134\001\330\025\137\014\304\124\142" + "\050\160\052\261\100\116\022\163\035\152\045\036\313\070\371\013" + "\211\057\246\360\042\020\104\173\107\126\141\222\034\314\261\202" + "\003\263\101\005\230\034\322\271\261\371\362\333\357\216\314\015" + "\276\077\066\067\002\113\011\217\217\053\020\055\000\074\341\351" + "\163\056\063\226\330\355\152\002\100\327\145\130\054\010\154\321" + "\220\212\101\130\112\300\072\006\266\126\240\334\232\216\157\353" + "\337\231\172\262\067\251\074\241\313\022\266\042\103\243\246\170" + "\102\320\231\320\101\165\155\341\012\252\000\003\105\301\253\025" + "\270\053\326\140\124\057\370\023\106\223\175\107\047\246\360\042" + "\300\104\373\142\020\355\307\111\136\127\016\252\275\363\025\373" + "\370\361\331\342\000\211\366\037\316\230\026\066\352\204\345\354" + "\254\305\147\037\263\051\001\113\370\045\126\237\031\213\120\355" + "\230\111\041\113\126\020\170\021\140\123\000\136\020\302\034\202" + "\024\123\101\377\125\137\363\017\277\227\066\372\233\125\351\016" + "\362\241\222\102\242\110\167\022\135\101\214\210\202\004\056\072" + "\040\321\140\024\011\054\032\316\223\334\140\271\105\303\345\000" + "\017\076\346\366\111\125\022\123\170\121\300\206\035\125\005\127" + "\321\140\232\034\244\121\102\174\134\172\354\164\241\070\121\050" + "\277\367\341\205\034\066\354\234\002\237\254\324\352\207\105\370" + "\250\210\317\346\365\121\244\247\010\075\103\256\344\360\361\102" + "\200\203\165\003\154\235\240\126\212\300\073\004\345\236\366\130" + "\367\143\075\251\376\256\270\362\050\011\050\330\236\014\055\206" + "\006\073\033\015\330\236\060\100\166\054\341\012\252\000\323\203" + "\074\261\003\264\071\144\065\200\007\020\055\076\106\174\141\363" + "\043\200\355\271\044\332\233\256\014\343\105\013\106\013\026\224" + "\310\161\301\137\361\055\132\316\360\351\214\071\370\322\231\231" + "\167\306\346\314\034\054\265\357\265\162\174\336\342\263\244\147" + "\311\117\121\063\054\054\367\060\112\334\240\256\200\055\030\362" + "\202\300\027\021\351\143\166\132\121\151\062\324\330\057\167\047" + "\037\070\320\254\037\154\120\345\033\361\377\240\053\062\364\244" + "\014\330\321\030\207\244\202\256\240\054\134\101\004\320\131\372" + "\075\005\256\047\012\365\356\042\376\252\076\372\076\314\355\275" + "\056\075\141\363\243\021\104\173\234\302\233\055\273\060\122\250" + "\300\104\301\246\015\073\225\311\122\345\343\317\057\025\017\377" + "\356\324\364\327\340\223\222\235\256\143\227\154\021\057\312\346" + "\207\105\174\200\010\213\137\013\127\163\074\051\371\021\174\235" + "\200\025\204\172\213\206\270\015\133\103\220\036\355\111\354\275" + "\277\075\336\337\036\127\036\042\347\137\002\377\173\155\011\035" + "\166\065\306\240\075\251\203\144\131\176\212\040\246\022\103\341" + "\235\151\016\170\371\046\246\010\070\213\340\375\264\172\304\151" + "\202\144\367\356\221\057\341\174\275\344\315\331\013\213\137\005" + "\101\264\257\020\001\030\047\221\176\064\157\221\164\014\317\105" + "\011\033\166\056\014\317\231\107\136\073\223\071\172\042\123\304" + "\206\235\152\204\247\371\075\215\360\154\324\167\141\051\361\001" + "\226\222\237\135\326\215\225\070\274\022\267\224\231\165\076\105" + "\140\243\177\130\215\040\254\210\250\164\047\224\324\263\273\033" + "\176\264\257\101\073\024\127\244\076\374\140\214\110\273\232\342" + "\320\333\224\360\256\032\363\134\201\150\060\252\013\101\036\272" + "\010\110\376\225\070\031\066\075\260\141\207\220\036\311\077\107" + "\050\073\222\067\341\002\311\357\075\141\045\273\165\326\264\076" + "\373\172\252\070\360\302\251\351\317\111\174\142\011\115\011\036" + "\045\000\141\026\037\007\153\357\331\110\267\154\322\263\130\215" + "\143\316\012\202\314\055\243\034\101\065\101\240\102\200\357\127" + "\177\262\063\165\343\135\151\275\177\133\134\275\217\044\003\136" + "\203\321\366\244\001\273\233\023\260\055\101\066\047\216\300\045" + "\173\136\270\002\201\025\205\202\225\174\035\154\022\355\057\220" + "\150\077\222\257\100\266\354\327\243\210\273\232\036\315\227\337" + "\032\034\312\014\036\233\054\322\206\035\076\167\257\106\170\066" + "\327\017\263\370\354\130\121\254\206\000\260\220\270\301\026\013" + "\153\245\010\112\304\143\157\271\267\301\150\174\146\147\342\211" + "\235\111\371\240\041\113\335\370\145\051\135\045\102\020\207\036" + "\342\012\164\262\257\204\053\020\270\052\140\141\004\155\276\246" + "\303\074\141\371\271\371\062\234\047\304\307\206\035\111\222\334" + "\134\331\371\362\233\231\342\221\027\277\313\174\222\267\054\172" + "\245\135\124\304\267\270\327\153\025\365\170\322\257\070\371\021" + "\153\045\000\024\141\216\040\054\105\210\252\021\320\242\341\202" + "\160\140\351\345\271\135\015\167\336\326\242\035\152\061\044\154" + "\060\302\231\104\350\156\114\300\356\226\024\264\304\024\277\116" + "\340\325\012\126\145\037\012\154\066\004\363\366\330\260\063\121" + "\264\340\134\316\204\351\122\305\023\004\142\365\163\143\363\225" + "\167\336\037\237\033\174\157\054\177\016\174\142\262\104\107\002" + "\123\362\127\263\370\364\075\056\363\034\265\255\141\304\137\225" + "\223\167\265\005\200\005\137\053\140\035\001\135\147\335\000\133" + "\007\250\351\010\360\075\267\246\365\366\103\135\261\203\075\011" + "\365\111\135\226\132\135\102\370\346\230\116\204\040\351\271\002" + "\357\016\106\050\324\266\015\002\002\213\300\104\373\002\071\075" + "\106\162\045\062\114\157\046\005\061\137\161\116\234\312\231\003" + "\057\235\230\375\160\322\264\361\232\373\060\302\263\226\236\265" + "\376\154\336\317\222\235\012\100\265\110\277\052\304\247\130\113" + "\001\340\301\247\007\254\010\260\251\102\224\043\340\213\206\013" + "\065\203\230\012\332\057\167\244\356\271\276\131\355\157\322\344" + "\333\311\007\113\252\042\301\316\346\244\047\006\215\044\125\360" + "\322\003\341\012\004\202\150\357\222\061\131\254\300\360\134\011" + "\056\345\313\200\077\031\212\015\073\227\112\366\007\177\270\120" + "\070\374\372\210\167\207\035\044\061\033\361\371\253\357\242\054" + "\076\133\023\240\144\217\212\370\153\212\153\051\000\024\154\232" + "\300\273\002\326\015\320\045\053\000\174\112\300\247\020\332\275" + "\355\261\336\207\073\264\103\135\161\365\021\332\140\264\055\031" + "\363\322\003\114\023\274\006\243\112\320\127\040\260\165\020\104" + "\373\222\053\301\171\022\355\317\316\231\120\260\374\163\240\150" + "\271\347\206\262\346\300\357\317\146\336\031\312\331\154\303\016" + "\237\323\107\131\174\226\360\325\212\172\000\327\210\370\024\327" + "\132\000\370\264\200\256\313\301\272\314\015\076\105\010\163\004" + "\254\020\054\254\067\031\252\376\253\035\306\103\373\032\265\203" + "\111\005\156\300\017\067\124\331\023\202\135\351\006\110\151\212" + "\160\005\233\035\330\260\103\110\217\015\073\323\045\013\206\063" + "\005\270\220\067\275\051\121\362\247\062\155\072\237\374\361\122" + "\151\340\325\241\314\067\260\330\342\323\150\137\355\142\234\152" + "\026\337\141\226\024\102\000\030\340\277\303\205\360\072\101\265" + "\024\201\255\007\360\051\001\057\020\022\175\355\361\316\330\376" + "\173\333\364\103\355\206\374\043\274\200\015\137\350\040\156\240" + "\217\010\101\147\103\034\044\274\052\121\270\202\315\203\040\332" + "\343\035\166\106\211\305\037\232\055\100\256\142\171\057\225\035" + "\367\342\310\274\165\344\367\147\347\336\072\221\051\117\303\142" + "\202\263\344\016\213\370\166\310\250\327\342\137\123\342\123\254" + "\027\001\210\002\057\004\062\267\144\311\317\223\076\254\146\260" + "\110\060\172\022\112\303\263\275\361\107\166\247\224\103\161\031" + "\366\340\027\045\164\025\366\244\033\211\053\110\171\067\262\130" + "\160\005\002\033\013\130\324\123\165\217\370\031\323\217\366\243" + "\304\352\333\216\167\117\075\047\123\266\077\377\152\272\374\372" + "\157\316\146\217\005\015\073\064\312\263\025\372\152\026\237\215" + "\370\154\344\167\103\306\272\305\172\027\000\026\154\255\200\025" + "\002\076\105\140\105\041\112\000\330\307\336\173\236\356\061\156" + "\272\063\155\364\157\063\244\373\044\377\376\246\320\325\230\204" + "\275\333\032\241\075\025\363\247\022\321\025\210\006\243\365\015" + "\154\330\321\014\260\144\025\306\346\212\160\146\066\017\263\305" + "\262\367\122\305\161\147\306\212\366\321\067\316\027\006\216\115" + "\026\057\302\145\102\127\043\174\230\305\347\227\254\315\137\027" + "\326\276\136\154\064\001\340\227\274\043\140\235\000\353\020\330" + "\032\101\065\101\120\366\067\050\351\037\167\306\037\333\225\222" + "\260\301\250\013\277\250\041\246\023\041\150\202\235\304\031\350" + "\344\230\273\025\234\112\264\100\140\235\200\211\366\271\212\003" + "\303\204\364\147\063\171\102\170\117\254\135\362\334\327\307\063" + "\326\340\013\147\346\077\316\133\026\275\063\056\233\343\363\021" + "\236\277\130\207\267\370\121\105\075\226\364\102\000\126\011\354" + "\277\071\054\105\340\335\101\065\107\020\046\010\236\140\250\052" + "\050\317\167\305\277\177\163\263\322\337\242\313\167\223\017\224" + "\145\162\242\355\154\111\301\336\266\046\110\307\015\077\075\020" + "\256\340\332\041\150\317\165\024\035\306\163\044\332\317\344\140" + "\262\340\107\173\333\205\371\213\045\353\355\367\307\013\203\357" + "\135\054\235\205\245\104\146\043\074\057\000\274\100\360\321\236" + "\047\374\272\267\372\121\330\210\002\020\206\060\127\300\072\002" + "\136\014\130\001\250\366\330\333\376\366\046\245\343\311\256\030" + "\371\043\077\251\311\320\212\137\224\116\030\260\267\275\205\010" + "\102\003\250\156\060\225\050\134\301\352\303\213\366\232\147\363" + "\363\204\222\303\323\071\030\232\315\101\311\362\105\070\157\271" + "\337\235\311\125\006\136\036\312\277\167\311\264\260\141\207\222" + "\227\215\350\365\344\370\174\304\147\227\000\033\230\364\054\066" + "\213\000\120\360\151\002\133\037\300\347\130\047\300\327\014\370" + "\131\203\045\175\005\170\007\243\137\364\304\356\275\241\111\355" + "\157\120\245\333\360\063\065\105\206\075\044\075\350\153\153\206" + "\046\154\060\302\364\000\235\201\230\112\134\131\340\055\263\161" + "\012\217\214\011\214\366\123\071\057\352\173\254\164\241\164\311" + "\164\076\370\154\272\164\370\360\110\341\004\054\046\174\255\034" + "\237\175\235\055\346\261\026\237\132\274\115\101\172\026\233\125" + "\000\350\072\077\302\212\206\354\140\311\217\043\254\257\300\033" + "\367\265\152\275\017\164\150\375\235\061\357\016\106\015\170\136" + "\264\247\022\260\257\275\031\172\211\053\300\251\104\250\210\266" + "\343\253\106\020\355\261\141\147\230\130\374\063\123\163\220\257" + "\370\373\264\344\270\347\206\162\316\221\127\317\345\216\216\024" + "\274\206\035\066\202\363\004\017\173\314\026\363\302\012\172\174" + "\304\147\227\233\002\233\115\000\170\120\342\263\217\331\024\201" + "\072\002\166\131\267\043\300\145\332\200\330\317\173\343\017\356" + "\115\310\375\111\115\272\036\277\044\246\251\304\021\370\256\040" + "\245\312\340\226\121\010\104\203\121\335\220\310\256\045\244\307" + "\242\336\144\276\344\221\176\044\223\247\015\073\326\154\305\375" + "\370\117\063\345\301\337\235\315\177\001\213\011\134\055\302\107" + "\131\174\076\332\363\271\075\305\246\074\170\233\135\000\170\260" + "\202\120\313\021\360\065\203\132\113\351\361\116\355\300\075\151" + "\255\277\335\220\037\242\015\106\135\304\015\354\043\102\320\325" + "\224\362\035\201\150\060\212\006\336\150\203\020\037\033\166\316" + "\315\314\301\251\311\054\144\113\130\324\223\240\354\070\023\243" + "\171\367\310\341\361\342\033\177\361\033\166\152\025\365\170\101" + "\240\317\323\310\036\026\361\067\235\305\257\205\255\046\000\054" + "\370\324\000\301\072\001\174\236\165\003\374\054\002\237\042\054" + "\324\026\166\046\224\306\237\164\353\217\354\116\312\170\007\243" + "\335\370\301\111\103\043\102\320\002\173\210\030\170\015\106\345" + "\240\126\260\325\341\105\173\335\263\371\263\245\012\234\236\312" + "\300\320\164\216\104\173\277\141\047\153\072\307\376\074\147\035" + "\176\151\044\377\231\145\205\022\032\037\323\151\273\250\327\131" + "\241\000\130\034\365\021\133\216\370\024\133\131\000\020\224\370" + "\141\165\002\272\316\012\000\137\047\140\005\201\235\105\130\030" + "\317\364\030\067\337\336\042\367\267\152\362\137\113\136\203\221" + "\004\073\322\015\260\277\043\015\035\251\270\077\173\140\155\101" + "\127\200\167\162\040\244\267\145\025\106\110\156\177\152\052\013" + "\123\371\222\367\222\345\300\354\130\321\072\172\164\242\074\370" + "\371\124\371\002\204\027\365\252\105\374\060\213\117\327\021\174" + "\141\217\135\156\051\154\165\001\100\204\025\016\351\072\077\213" + "\300\027\003\243\004\140\111\255\340\372\006\045\335\337\251\075" + "\276\043\241\034\324\145\350\304\057\150\212\031\260\177\073\161" + "\005\333\232\275\237\110\363\122\204\315\334\166\114\033\166\364" + "\030\314\225\055\070\075\231\041\371\175\026\312\376\024\236\073" + "\147\303\067\247\262\366\300\013\347\346\377\067\157\055\371\141" + "\113\176\311\012\200\315\255\127\263\370\024\133\066\352\263\020" + "\002\020\016\136\004\130\061\010\253\021\260\202\100\123\003\136" + "\020\274\367\252\052\250\077\353\322\177\160\123\023\336\253\300" + "\273\203\221\254\340\124\142\153\223\347\012\260\301\310\253\023" + "\240\030\154\226\006\043\205\354\002\055\006\056\041\377\371\114" + "\016\116\116\314\302\305\134\301\173\311\161\141\376\102\311\171" + "\367\303\251\322\300\373\027\053\303\260\064\257\017\053\342\125" + "\270\327\303\042\076\137\330\003\020\204\137\002\041\000\265\021" + "\226\036\120\121\140\311\137\255\150\250\205\274\056\177\077\255" + "\164\076\332\241\037\354\062\344\047\064\031\322\370\145\255\311" + "\070\034\350\154\205\135\104\020\024\207\234\337\145\142\213\067" + "\142\203\121\020\355\321\346\027\154\027\316\134\232\205\123\044" + "\342\027\313\376\377\245\350\270\337\235\316\073\203\057\237\065" + "\337\233\064\255\074\054\315\335\303\042\176\130\264\027\105\275" + "\253\200\020\200\352\220\102\226\224\374\274\053\140\005\201\117" + "\011\242\034\201\047\010\111\025\214\347\173\142\077\374\136\243" + "\374\124\203\052\335\202\237\245\251\012\354\155\153\366\134\101" + "\243\241\005\063\010\350\012\326\371\371\214\015\073\272\341\221" + "\377\102\266\100\242\375\014\234\237\315\171\202\200\277\153\072" + "\131\166\077\370\343\164\171\360\360\270\171\034\226\106\160\232" + "\303\363\275\370\121\105\075\236\360\121\021\177\235\357\264\153" + "\007\041\000\365\201\257\023\320\045\053\004\124\000\144\146\031" + "\346\010\370\042\342\242\024\341\276\126\145\307\375\035\372\123" + "\235\061\371\021\362\102\003\176\121\147\123\012\366\157\117\103" + "\157\113\043\310\336\365\007\350\012\154\130\127\010\242\275\351" + "\112\044\257\317\300\311\213\263\220\063\375\131\216\222\343\216" + "\234\053\072\203\257\215\230\157\017\027\354\071\130\034\301\131" + "\202\107\011\100\065\213\217\020\244\137\046\204\000\134\035\044" + "\130\052\004\265\212\206\121\202\260\250\246\220\066\040\376\213" + "\036\343\301\276\224\334\237\120\344\353\360\313\342\272\012\373" + "\332\323\336\110\152\344\343\351\124\342\265\162\005\070\205\207" + "\321\136\217\301\144\256\004\047\057\315\300\331\251\054\235\302" + "\263\146\313\316\047\137\144\254\201\327\106\315\057\255\245\071" + "\075\373\270\236\210\317\346\364\141\026\377\032\355\204\215\015" + "\041\000\053\203\152\051\002\045\077\053\010\054\341\253\071\002" + "\357\361\223\235\332\201\273\133\225\247\332\064\345\001\332\140" + "\324\223\156\204\003\035\255\320\325\234\002\011\035\101\171\015" + "\213\206\130\324\323\343\136\303\316\060\041\374\211\213\323\220" + "\051\370\123\170\246\043\115\214\226\354\067\336\034\067\337\374" + "\046\153\117\102\170\244\347\043\076\117\370\132\304\007\020\371" + "\375\212\100\010\300\325\243\132\172\020\126\064\244\304\246\202" + "\300\072\200\260\151\304\005\101\330\221\120\032\237\356\322\037" + "\331\225\224\260\301\150\047\176\121\103\314\200\133\166\264\303" + "\236\326\146\377\372\203\325\052\032\322\242\036\211\370\370\343" + "\243\307\307\247\340\070\041\276\145\173\077\171\355\316\125\334" + "\143\177\311\126\006\176\073\126\376\254\144\055\104\164\112\140" + "\276\121\207\257\342\263\113\227\173\257\313\015\010\131\012\054" + "\023\102\000\126\036\274\040\104\245\010\254\073\250\346\010\370" + "\024\301\133\076\333\155\334\172\133\213\334\237\326\345\173\311" + "\007\153\011\135\203\003\333\133\275\116\103\274\301\051\320\133" + "\231\135\215\030\170\367\312\327\374\253\360\360\266\331\271\042" + "\234\046\066\177\210\104\175\333\161\360\307\106\063\343\105\367" + "\255\167\057\226\006\077\235\265\307\141\251\305\247\043\112\000" + "\050\311\331\045\215\364\174\264\147\041\210\277\102\020\002\260" + "\372\340\135\001\053\004\174\321\220\045\175\330\054\002\237\042" + "\050\067\067\051\355\304\025\074\337\021\223\037\223\361\027\224" + "\001\157\160\232\204\035\255\115\320\335\334\000\115\161\203\070" + "\003\302\107\234\122\304\073\344\340\072\326\014\134\046\240\142" + "\056\057\005\113\254\342\343\120\124\302\106\031\246\346\013\060" + "\062\223\205\221\351\071\230\057\373\115\112\246\003\023\147\346" + "\355\127\377\163\270\070\230\365\033\166\302\162\173\176\111\007" + "\057\020\054\341\243\042\276\300\052\101\010\300\332\242\232\043" + "\240\051\002\035\141\216\100\341\036\057\054\267\033\112\362\331" + "\136\365\341\276\224\322\037\227\245\076\372\205\272\252\300\166" + "\042\010\055\211\030\064\046\014\150\044\051\203\241\251\200\367" + "\061\120\145\331\333\246\214\115\366\170\121\175\331\202\154\311" + "\204\154\301\204\151\102\374\311\134\301\053\350\041\310\337\316" + "\274\005\307\116\314\333\107\137\034\051\175\304\331\374\053\041" + "\274\303\255\123\242\127\213\370\002\253\004\041\000\153\013\112" + "\174\166\235\012\101\224\063\140\043\076\137\043\010\353\053\220" + "\036\154\323\366\374\040\255\335\333\141\300\135\111\125\332\057" + "\371\333\135\061\210\046\344\347\054\367\353\221\202\375\351\273" + "\023\326\037\010\371\331\333\146\263\304\256\165\061\016\133\324" + "\343\043\076\100\170\304\027\042\260\006\020\002\260\366\340\153" + "\004\374\262\226\043\340\213\203\274\043\130\044\040\151\022\360" + "\037\152\063\256\357\216\313\175\315\052\364\246\024\251\113\123" + "\244\026\105\162\023\062\110\161\302\062\313\166\335\042\041\173" + "\301\264\245\251\234\355\234\317\132\316\310\311\234\163\372\243" + "\351\312\020\211\364\154\264\016\043\176\130\221\217\217\370\074" + "\341\243\242\275\040\375\032\103\010\300\372\001\057\002\265\212" + "\206\325\226\254\203\340\323\014\336\205\040\130\062\262\104\145" + "\011\314\026\365\252\345\372\074\361\243\212\172\202\354\353\000" + "\102\000\326\047\252\325\012\130\142\263\204\347\005\200\027\002" + "\126\130\352\021\000\134\347\163\366\060\001\340\137\017\213\370" + "\242\250\267\116\241\326\332\100\140\315\301\223\022\101\011\311" + "\026\313\244\140\235\045\272\015\227\205\201\135\262\003\230\045" + "\377\135\174\304\246\043\054\227\147\011\317\056\253\025\365\044" + "\146\135\140\035\100\070\200\365\215\260\032\101\055\147\020\226" + "\002\254\244\003\340\237\347\337\043\154\376\006\202\020\200\215" + "\005\236\270\325\152\005\374\163\141\344\347\043\062\033\275\171" + "\041\260\141\251\060\124\213\366\002\033\000\102\000\066\066\302" + "\034\001\277\214\042\077\135\206\011\000\117\154\076\247\147\311" + "\057\042\375\006\206\250\001\154\134\260\342\035\145\273\221\250" + "\224\374\364\075\274\010\260\340\011\035\106\364\060\322\363\251" + "\204\300\006\201\160\000\033\033\141\021\235\056\371\301\276\316" + "\257\123\360\102\022\366\230\175\216\177\237\300\006\203\122\153" + "\003\201\165\217\132\344\347\267\343\327\171\360\321\275\226\315" + "\027\344\337\300\020\002\260\361\021\345\002\370\327\303\136\013" + "\103\124\072\301\277\046\040\040\040\040\260\221\361\377\261\304" + "\020\272\254\152\205\176\000\000\000\000\111\105\116\104\256\102" + "\140\202\000\000\050\165\165\141\171\051\141\160\160\055\151\143" + "\157\156\137\061\062\070\056\160\156\147\000\000\000\000\000\000" + "\300\060\000\000\000\000\000\000\211\120\116\107\015\012\032\012" + "\000\000\000\015\111\110\104\122\000\000\000\200\000\000\000\200" + "\010\006\000\000\000\303\076\141\313\000\000\001\167\151\103\103" + "\120\163\122\107\102\040\142\165\151\154\164\055\151\156\000\000" + "\050\221\165\221\275\113\102\121\030\306\177\152\121\224\021\121" + "\103\110\203\203\105\203\102\024\105\143\331\340\042\041\146\220" + "\325\242\067\077\202\253\136\356\125\102\132\203\226\006\241\041" + "\152\351\153\350\077\250\065\150\055\010\202\042\210\150\153\357" + "\153\011\271\275\107\005\043\362\134\316\175\177\074\347\074\057" + "\357\175\056\070\303\272\226\263\332\146\040\227\057\232\321\120" + "\320\273\024\137\366\166\274\342\302\103\037\223\220\320\054\143" + "\066\022\011\323\162\175\335\343\120\365\056\240\172\265\276\367" + "\357\352\136\113\131\032\070\072\205\247\064\303\054\012\313\064" + "\204\067\212\206\342\035\341\001\055\233\130\023\076\022\366\233" + "\062\240\360\265\322\223\165\176\121\234\251\363\207\142\063\026" + "\235\003\247\352\351\315\374\342\344\057\326\262\146\116\170\124" + "\330\227\323\113\132\143\036\365\045\356\124\176\161\101\252\107" + "\366\020\026\121\102\004\361\222\244\304\072\072\105\002\122\363" + "\222\331\377\276\261\232\157\236\202\170\064\171\033\224\061\305" + "\221\041\053\136\277\250\045\351\232\222\232\026\075\045\217\116" + "\131\345\376\067\117\053\075\061\136\357\356\016\102\373\263\155" + "\277\017\103\307\056\124\053\266\375\175\154\333\325\023\160\075" + "\301\145\276\351\057\110\116\323\237\242\127\232\232\357\020\172" + "\267\340\374\252\251\045\367\340\142\033\006\037\215\204\231\250" + "\111\056\331\316\164\032\336\316\240\047\016\375\267\320\265\122" + "\317\252\161\316\351\003\304\066\345\027\335\300\376\001\214\310" + "\375\336\325\037\012\176\150\016\106\067\223\257\000\000\000\011" + "\160\110\131\163\000\000\013\022\000\000\013\022\001\322\335\176" + "\374\000\000\040\000\111\104\101\124\170\234\355\175\171\230\044" + "\305\165\347\357\105\144\146\125\127\365\175\167\317\075\303\041" + "\220\320\211\220\004\102\346\220\020\022\202\301\006\204\044\016" + "\133\136\353\260\077\333\273\266\345\317\273\362\352\303\140\153" + "\327\226\167\155\357\267\266\327\262\144\033\015\240\003\020\150" + "\100\002\014\210\103\002\035\010\054\161\203\140\356\231\276\357" + "\256\356\252\312\043\336\376\221\107\105\146\145\125\127\117\367" + "\364\314\040\275\357\253\316\314\310\310\210\310\170\277\167\304" + "\213\210\154\340\227\364\113\372\045\375\222\176\111\277\244\137" + "\322\057\042\321\321\156\300\132\122\363\147\036\357\065\063\352" + "\035\314\070\011\036\257\207\240\026\142\170\014\314\203\260\237" + "\131\275\044\070\377\343\351\277\072\175\366\150\267\165\255\350" + "\265\017\200\353\156\265\072\335\365\333\131\361\265\040\274\005" + "\314\142\211\047\134\200\037\123\054\156\234\315\334\377\040\256" + "\277\136\255\111\073\217\022\275\146\001\320\362\107\117\166\033" + "\031\373\112\142\365\353\040\254\077\254\102\030\057\062\343\137" + "\247\063\331\073\161\375\351\213\253\334\304\143\202\136\143\000" + "\140\152\377\323\357\235\055\140\136\005\346\013\211\140\256\116" + "\261\230\127\204\333\135\207\167\314\177\341\335\057\257\112\231" + "\307\010\275\046\000\320\162\335\223\335\226\147\137\011\340\052" + "\000\233\217\140\125\014\340\011\060\166\114\032\007\277\203\353" + "\077\154\037\301\272\326\204\216\143\000\060\365\374\351\017\316" + "\146\101\127\001\270\020\130\045\151\157\220\010\230\000\350\353" + "\256\355\336\074\375\127\147\357\137\313\272\127\223\216\073\000" + "\264\134\367\144\167\226\335\053\001\165\244\245\275\041\142\100" + "\001\374\210\122\330\061\045\317\174\020\327\323\161\345\064\036" + "\047\000\140\352\371\334\023\357\046\301\127\003\174\041\210\326" + "\124\332\033\045\146\034\142\245\156\221\202\277\072\172\375\131" + "\143\107\273\075\215\320\061\015\200\226\353\236\354\316\012\367" + "\112\301\164\114\110\173\303\304\160\000\276\217\025\357\030\373" + "\363\167\075\176\264\233\123\217\216\101\000\060\015\334\360\304" + "\273\241\350\152\000\027\362\152\171\362\107\211\010\170\125\021" + "\357\260\027\344\155\307\142\200\351\230\001\300\300\165\117\166" + "\263\301\127\202\371\052\001\332\174\224\233\263\352\304\100\021" + "\204\235\102\360\216\103\177\172\306\317\216\166\173\102\072\312" + "\000\140\032\270\341\077\336\055\204\272\232\231\326\334\223\077" + "\152\104\170\006\012\073\104\263\175\347\301\077\074\263\170\164" + "\233\162\024\250\355\177\076\323\321\354\331\127\002\164\015\200" + "\055\253\131\066\063\037\361\167\042\042\136\245\242\346\300\352" + "\166\106\371\246\241\317\035\235\000\323\232\002\140\303\137\374" + "\307\351\054\160\055\003\027\023\220\071\254\102\364\256\137\003" + "\146\067\114\072\050\226\337\052\006\360\043\317\123\067\015\273" + "\273\357\131\313\000\323\021\357\300\236\353\236\153\316\347\234" + "\313\230\371\132\146\072\345\260\105\207\001\340\060\031\136\357" + "\051\006\201\120\273\131\053\222\165\342\345\366\260\020\030\047" + "\340\353\345\305\302\055\303\327\237\175\140\065\132\121\217\216" + "\030\000\066\174\376\351\067\010\003\327\002\374\253\014\344\227" + "\365\360\112\144\011\000\240\126\360\154\135\142\140\251\311\304" + "\245\236\107\103\055\043\202\202\302\303\202\170\307\236\047\137" + "\171\010\267\175\070\014\060\255\052\030\126\265\223\066\137\367" + "\160\226\232\273\057\001\370\132\126\170\353\362\133\272\014\306" + "\351\271\032\066\005\313\171\335\145\264\076\124\377\313\172\141" + "\321\120\156\002\100\102\035\024\220\067\243\060\367\365\135\327" + "\237\065\276\374\006\326\057\177\305\264\341\013\317\156\063\005" + "\135\313\314\127\000\334\176\130\055\133\226\075\137\052\157\160" + "\173\045\146\243\272\114\115\235\057\365\206\313\160\022\227\341" + "\120\012\042\233\010\367\001\330\261\353\217\116\373\241\166\353" + "\260\301\160\370\235\363\311\047\315\055\257\313\136\050\011\327" + "\262\302\231\174\270\145\065\314\370\006\362\055\141\161\227\323" + "\113\113\126\126\317\157\210\147\134\175\060\020\040\230\137\201" + "\240\233\334\231\361\333\367\136\177\356\054\016\023\004\313\146" + "\332\226\277\333\335\147\120\361\032\050\276\132\061\365\036\116" + "\245\253\313\364\372\171\170\331\156\130\012\121\003\015\131\222" + "\171\107\110\053\010\054\022\141\047\053\373\246\127\376\340\055" + "\313\016\060\065\334\071\047\376\375\317\337\041\224\367\161\305" + "\374\001\060\314\345\116\171\011\000\334\250\072\136\012\040\251" + "\367\375\244\206\353\130\021\021\207\265\245\337\256\303\300\145" + "\306\020\270\101\340\010\002\004\350\151\042\354\230\235\134\330" + "\071\334\340\012\246\272\235\265\371\272\075\331\114\127\371\062" + "\000\037\147\360\251\174\270\226\206\033\020\242\320\154\327\142" + "\176\035\120\054\155\176\170\111\363\120\243\115\015\131\066\252" + "\205\204\072\314\046\042\156\124\151\363\062\206\223\276\323\110" + "\263\002\342\066\230\362\246\027\077\275\355\225\245\362\127\321" + "\266\277\176\272\067\233\317\175\134\051\276\206\231\073\217\364" + "\330\275\236\324\222\252\156\043\003\201\112\251\123\366\221\012" + "\022\325\142\152\220\236\266\032\200\251\066\374\250\141\323\260" + "\374\230\002\021\130\012\372\041\203\166\064\311\331\173\237\372" + "\324\351\116\165\375\032\275\355\213\273\332\154\317\373\214\307" + "\164\025\053\316\256\174\234\321\200\324\247\276\226\112\117\247" + "\072\066\175\325\106\021\053\267\325\104\110\227\356\310\161\024" + "\325\351\015\327\272\374\060\064\011\100\022\306\005\160\363\242" + "\113\137\174\365\367\117\234\253\124\015\000\270\116\274\355\213" + "\127\277\331\126\370\262\307\324\277\142\306\263\327\050\063\252" + "\245\273\026\043\211\322\231\254\352\061\163\065\265\300\022\166" + "\075\131\023\021\243\206\315\254\063\227\320\340\050\200\016\053" + "\040\105\000\244\240\061\200\176\377\331\117\157\375\136\230\206" + "\163\156\072\160\302\304\102\351\156\146\152\133\166\251\111\152" + "\124\022\123\362\005\321\224\170\172\055\306\037\206\257\020\317" + "\247\122\064\114\143\301\231\245\314\100\125\132\025\020\250\216" + "\315\153\164\050\170\370\023\122\102\220\143\260\372\310\117\077" + "\175\342\017\015\146\226\157\374\342\356\317\202\144\033\255\104" + "\136\302\216\137\262\220\360\335\343\371\030\000\061\223\236\036" + "\171\140\132\231\124\253\236\324\164\216\337\323\211\122\045\050" + "\045\137\330\321\124\235\257\232\011\004\000\034\117\047\020\045" + "\035\105\002\325\004\001\065\250\346\351\160\101\300\200\011\051" + "\257\007\160\201\001\237\043\157\204\130\203\321\123\202\301\225" + "\144\366\331\026\147\152\065\224\230\151\111\306\163\370\107\353" + "\337\072\240\144\060\055\341\210\151\005\223\217\111\112\334\113" + "\060\202\322\231\103\110\202\000\065\315\101\203\314\135\001\317" + "\210\116\141\146\062\210\110\275\365\037\176\076\351\031\162\360" + "\260\013\253\301\330\170\205\265\036\145\242\052\006\045\205\203" + "\252\231\237\046\361\254\250\122\217\026\252\253\143\026\202\007" + "\152\067\076\364\356\053\015\011\316\104\225\104\127\027\115\234" + "\060\353\151\322\115\165\101\120\037\006\207\245\005\010\000\331" + "\056\023\021\033\000\260\060\066\367\104\353\372\256\323\074\103" + "\142\271\001\036\126\051\122\251\121\250\130\070\105\172\031\051" + "\021\325\044\230\030\125\214\216\017\316\125\305\021\214\324\272" + "\077\356\257\140\241\036\070\171\051\225\253\313\273\136\265\177" + "\042\042\207\054\104\122\102\312\051\371\222\051\114\243\132\010" + "\044\022\304\152\011\020\220\130\316\174\002\040\135\017\163\243" + "\263\077\002\000\003\000\012\266\367\167\274\157\362\202\346\276" + "\326\015\126\153\023\134\325\170\140\171\151\277\201\103\125\027" + "\117\215\202\103\024\317\033\223\150\212\367\014\253\130\225\034" + "\216\066\342\146\077\354\364\252\066\324\170\203\144\011\311\373" + "\125\152\073\306\120\146\002\074\020\111\326\362\160\302\307\040" + "\020\047\201\121\165\135\243\057\111\054\035\146\256\177\033\001" + "\343\011\160\246\027\060\063\121\070\100\154\374\101\354\311\055" + "\237\375\121\237\204\374\202\141\211\367\345\332\363\310\164\344" + "\340\222\100\135\364\065\344\161\247\171\360\051\301\237\352\262" + "\352\336\347\244\027\137\365\274\356\003\044\362\044\131\032\273" + "\256\325\331\065\074\374\330\145\162\024\121\065\074\324\126\072" + "\124\227\107\065\203\075\015\110\170\215\166\113\001\220\347\301" + "\236\132\304\302\114\321\123\216\167\273\315\245\033\366\377\345" + "\331\323\176\235\011\332\362\331\037\275\121\062\375\072\011\271" + "\075\327\232\315\145\073\363\220\115\031\070\111\255\320\010\363" + "\153\344\141\244\304\011\070\346\264\305\357\153\143\175\006\107" + "\261\002\077\030\130\203\361\244\227\311\104\140\041\244\222\004" + "\317\020\244\204\237\043\032\221\060\100\112\261\120\314\302\125" + "\112\272\314\304\215\202\201\210\130\151\347\161\265\105\034\033" + "\262\063\057\001\002\231\136\347\122\132\100\273\117\004\130\002" + "\160\013\045\054\114\056\240\124\050\117\103\171\267\272\120\137" + "\331\373\227\357\332\033\257\257\106\161\133\377\344\201\126\101" + "\255\127\100\210\253\315\254\161\122\276\053\217\114\173\063\134" + "\220\257\025\226\004\100\343\343\364\232\114\004\264\210\040\307" + "\362\221\256\105\164\146\007\347\276\171\141\042\142\051\205\143" + "\022\261\154\074\060\104\254\130\270\112\231\145\245\204\317\333" + "\124\006\150\235\136\031\240\242\062\304\213\134\107\116\173\306" + "\317\272\264\146\111\173\056\355\031\103\000\322\363\120\232\136" + "\100\141\142\001\256\343\076\005\346\035\356\310\342\335\173\157" + "\074\267\214\024\313\136\023\000\332\271\330\366\307\337\173\047" + "\144\366\132\151\310\367\347\073\232\254\174\127\013\220\061\311" + "\361\352\071\251\065\002\075\111\146\067\304\374\204\312\347\204" + "\172\327\044\035\140\022\304\044\310\063\211\074\223\174\151\017" + "\075\316\145\023\263\164\075\117\072\212\215\112\034\075\306\240" + "\004\143\142\222\250\231\204\072\040\250\142\170\315\030\101\232" + "\306\000\054\111\160\027\112\050\116\057\360\302\364\342\202\122" + "\352\116\056\227\156\332\375\267\277\362\074\252\231\236\034\226" + "\244\327\224\162\244\315\277\163\153\267\150\136\377\021\141\310" + "\253\262\271\354\372\226\356\146\130\355\171\270\014\170\125\166" + "\065\141\263\221\222\246\207\161\005\164\031\212\230\357\077\127" + "\203\371\034\150\133\146\002\371\322\056\310\065\005\171\106\043" + "\123\370\113\122\254\004\241\074\045\035\245\244\303\034\150\005" + "\235\041\124\353\134\150\152\113\033\231\022\261\076\344\252\362" + "\344\323\100\240\015\013\045\001\006\030\345\251\002\346\046\346" + "\341\224\334\227\134\317\276\171\352\340\367\357\230\375\352\177" + "\233\107\020\014\011\253\323\112\131\022\000\224\162\116\261\363" + "\315\233\345\326\113\376\371\074\221\157\271\112\032\326\257\264" + "\166\347\145\276\253\005\154\232\260\231\033\123\363\076\147\143" + "\056\277\226\271\042\371\252\106\236\160\164\001\045\204\360\114" + "\041\034\223\230\145\312\373\254\016\151\306\107\051\341\051\066" + "\155\245\204\133\023\004\141\072\151\336\175\365\360\057\236\077" + "\321\153\111\363\340\113\273\140\056\226\121\230\230\107\141\172" + "\301\166\235\362\275\316\374\324\315\373\377\361\222\237\240\302" + "\164\375\007\254\042\000\364\153\001\200\326\135\371\317\033\062" + "\033\116\376\250\060\263\227\347\332\162\335\255\075\055\144\265" + "\346\140\063\242\021\204\177\110\000\100\305\004\043\341\341\373" + "\327\234\224\366\350\015\230\004\074\051\245\153\011\170\246\136" + "\366\141\007\310\123\150\151\025\102\312\123\206\243\330\260\301" + "\102\051\012\074\371\350\166\024\106\216\100\220\144\152\154\301" + "\107\325\170\336\327\002\202\000\213\030\245\351\005\314\215\316" + "\241\274\130\334\357\331\305\257\315\074\373\335\333\247\356\377" + "\374\044\374\325\264\151\314\117\143\374\212\001\020\246\311\130" + "\332\272\063\062\233\267\377\367\013\214\346\216\217\231\331\246" + "\323\133\173\132\051\337\333\012\145\110\330\156\035\273\237\064" + "\027\021\363\201\210\261\034\112\073\023\011\307\222\344\232\204" + "\212\123\267\232\114\257\105\113\171\274\012\322\125\312\264\231" + "\245\313\172\004\057\005\004\125\346\042\145\030\352\113\073\100" + "\266\313\205\361\131\314\216\027\074\267\134\174\324\231\033\376" + "\332\376\057\176\362\061\140\326\203\317\370\220\371\151\040\100" + "\235\143\315\367\112\332\377\360\134\150\347\221\006\110\234\013" + "\000\324\177\305\337\234\230\133\177\332\107\144\266\345\342\326" + "\256\346\226\346\236\066\262\132\262\050\171\151\276\100\145\154" + "\036\152\002\245\347\361\003\055\122\012\307\022\102\231\276\237" + "\300\253\266\067\153\265\050\174\041\006\171\036\133\266\142\351" + "\200\023\043\010\242\350\023\145\134\303\221\024\202\070\043\200" + "\362\114\001\263\243\163\130\230\131\030\127\245\271\157\116\077" + "\377\360\355\323\017\376\325\020\252\031\256\203\040\011\004\324" + "\071\306\332\235\226\226\074\212\104\232\100\155\020\010\000\062" + "\273\351\214\134\337\373\377\360\042\263\155\360\362\114\076\177" + "\112\173\137\033\362\075\055\344\220\200\253\020\227\376\204\117" + "\340\253\171\307\222\302\261\010\312\010\322\142\043\203\245\351" + "\160\141\162\170\376\143\004\002\002\003\202\231\205\353\005\132" + "\001\302\227\164\322\064\102\245\067\211\115\002\014\317\305\374" + "\350\034\246\307\346\224\263\130\170\262\064\276\377\266\103\167" + "\375\327\107\060\063\154\003\320\045\076\215\371\113\231\201\125" + "\003\200\376\023\051\307\010\000\372\165\317\207\376\374\015\371" + "\255\157\273\334\314\167\276\267\255\273\071\333\336\337\016\231" + "\317\120\244\025\042\237\100\111\101\166\106\220\153\021\124\134" + "\305\127\071\216\307\052\305\035\072\346\300\151\204\151\003\025" + "\040\020\001\115\006\261\075\267\210\231\341\131\236\233\052\314" + "\071\205\261\373\012\057\336\167\307\344\343\377\264\027\145\170" + "\100\354\227\306\170\117\113\003\032\067\005\176\113\323\132\137" + "\343\230\004\300\222\032\040\161\056\001\310\334\326\263\332\072" + "\177\345\123\037\264\072\066\156\317\265\267\154\354\032\150\103" + "\123\127\013\071\344\131\314\166\106\220\062\364\066\306\327\122" + "\034\017\314\367\051\026\374\047\204\023\004\254\330\260\045\054" + "\333\120\354\055\214\317\361\344\350\054\312\163\323\057\073\343" + "\057\175\173\346\221\377\365\140\151\372\300\002\071\360\000\270" + "\145\037\000\056\174\246\066\252\001\126\025\000\265\234\300\044" + "\000\226\322\000\062\345\147\274\345\023\237\272\044\277\351\244" + "\337\235\163\117\353\150\353\156\027\155\175\255\100\066\203\162" + "\020\124\340\130\163\217\037\346\107\244\007\205\000\144\015\202" + "\052\024\061\075\072\213\371\211\031\047\217\147\167\217\074\375" + "\263\377\073\363\323\133\237\127\066\331\136\331\051\071\213\160" + "\155\300\005\301\005\301\103\251\046\000\352\001\001\130\332\027" + "\210\332\125\325\154\355\230\074\117\152\001\211\152\100\244\201" + "\040\142\174\076\217\314\371\237\354\172\117\337\066\353\222\114" + "\216\336\314\014\141\173\355\064\064\177\156\146\270\360\236\214" + "\154\032\024\135\375\155\310\164\066\243\244\010\312\367\010\217" + "\077\346\003\000\374\360\154\006\012\213\223\363\230\030\236\205" + "\164\367\172\003\371\207\354\276\346\357\227\115\121\144\366\170" + "\166\156\102\175\367\245\307\013\367\074\363\350\342\076\307\205" + "\003\033\016\174\006\272\250\060\276\026\000\152\071\203\272\066" + "\100\312\321\157\141\132\253\265\143\352\330\037\351\032\040\215" + "\371\041\110\344\233\056\314\016\276\371\334\366\113\133\272\345" + "\105\102\242\073\254\214\265\210\037\053\101\023\013\157\066\207" + "\012\347\131\163\356\151\106\127\157\073\265\364\266\101\131\046" + "\225\143\241\306\143\237\262\006\201\213\045\314\216\314\361\354" + "\370\024\167\144\236\162\006\133\276\153\267\145\137\162\203\325" + "\003\221\237\040\010\014\042\125\052\250\047\207\137\055\177\353" + "\376\377\067\365\003\333\106\350\370\351\366\077\355\247\373\000" + "\151\243\001\044\216\253\016\200\132\040\220\331\054\214\213\377" + "\260\357\254\236\115\346\145\146\226\316\004\302\110\235\346\355" + "\207\000\010\273\303\067\224\130\264\173\305\120\341\134\153\164" + "\341\335\126\246\255\117\164\365\267\303\152\157\106\311\253\350" + "\270\206\351\160\260\163\030\072\107\022\220\045\306\342\344\074" + "\046\107\146\240\212\007\125\177\356\121\173\240\371\021\333\222" + "\363\052\054\127\204\041\341\000\004\002\140\022\024\370\012\304" + "\312\243\321\271\011\367\256\237\336\067\263\363\351\207\212\143" + "\130\032\004\111\155\240\203\100\357\201\303\006\100\055\357\137" + "\042\205\371\157\277\270\271\373\115\357\155\373\265\174\207\374" + "\125\051\260\116\245\215\373\021\227\176\050\020\030\140\146\122" + "\312\077\062\003\112\031\064\126\174\273\071\262\160\236\131\304" + "\051\106\167\177\033\132\173\333\341\032\006\354\106\220\260\122" + "\305\321\000\020\262\222\100\345\062\146\107\146\060\071\072\315" + "\255\346\323\336\140\356\141\273\043\367\214\113\360\040\242\145" + "\343\101\220\047\224\176\212\342\331\020\042\012\024\161\124\051" + "\221\143\057\362\243\143\257\226\157\277\375\013\143\117\040\035" + "\004\111\015\220\364\005\222\176\300\212\000\120\117\003\310\253" + "\256\357\177\173\327\106\353\112\053\213\363\231\141\205\005\162" + "\154\255\213\212\001\200\003\246\263\337\154\142\146\160\000\000" + "\305\034\310\212\000\230\251\340\254\227\303\205\363\315\361\322" + "\073\215\226\316\136\352\032\150\207\321\232\107\321\253\303\347" + "\225\000\240\016\363\005\001\115\202\121\232\052\140\142\144\032" + "\245\331\141\356\317\177\337\031\154\176\304\311\030\223\301\354" + "\024\207\222\036\062\075\061\061\104\040\002\023\001\044\300\104" + "\341\202\250\312\054\042\221\077\343\305\012\173\026\146\325\155" + "\077\372\326\354\135\077\173\140\156\006\113\373\003\265\106\002" + "\015\001\240\026\010\252\000\360\266\017\165\264\277\363\342\226" + "\113\263\255\342\112\101\330\006\160\365\356\035\355\132\125\042" + "\174\120\312\027\011\126\040\260\377\034\203\203\153\335\054\370" + "\335\342\003\202\311\343\054\306\026\317\064\106\026\317\061\035" + "\343\004\321\073\330\216\346\336\166\330\044\341\244\272\072\253" + "\100\301\033\144\004\140\270\016\146\107\146\060\076\074\215\034" + "\075\357\015\346\036\161\073\263\077\361\244\364\002\011\047\216" + "\346\004\204\317\164\252\330\374\230\026\240\000\010\102\204\327" + "\204\330\022\260\252\105\223\124\164\112\270\157\174\117\351\033" + "\137\275\141\344\147\210\307\003\152\105\004\127\035\000\342\267" + "\376\367\272\323\332\372\254\253\015\013\027\061\270\051\126\102" + "\362\123\012\252\022\272\145\025\252\166\137\272\125\160\337\017" + "\362\151\376\100\240\031\374\207\210\302\305\037\332\354\040\001" + "\300\154\171\233\030\136\070\317\234\264\337\041\072\172\272\250" + "\153\240\003\242\071\207\242\133\153\255\102\043\043\212\170\244" + "\131\020\320\044\001\173\146\001\223\303\123\230\237\032\343\336" + "\246\307\275\301\374\303\136\316\034\122\104\176\223\051\204\252" + "\357\324\101\204\035\036\110\170\370\172\344\233\173\377\355\010" + "\034\056\234\015\203\103\024\230\014\137\031\044\246\205\051\004" + "\020\101\271\364\174\171\316\373\332\103\267\116\334\375\334\167" + "\027\026\120\137\013\000\053\005\300\333\256\350\150\072\347\222" + "\216\017\131\131\272\032\304\157\346\064\151\207\316\270\200\321" + "\301\071\063\123\360\014\130\227\376\120\352\265\066\105\040\120" + "\360\173\222\375\174\120\240\150\266\060\154\047\203\034\225\247" + "\261\305\263\345\310\342\271\002\331\215\242\167\135\047\232\173" + "\332\120\142\001\067\172\375\145\014\047\211\330\024\200\245\074" + "\314\215\116\143\354\320\064\054\365\212\032\310\075\344\365\064" + "\375\130\111\262\053\166\074\051\331\001\263\105\102\013\104\171" + "\302\353\160\342\107\124\236\015\000\204\160\175\140\010\010\102" + "\350\044\126\357\063\222\044\346\034\027\167\116\217\224\157\371" + "\362\177\071\370\163\254\066\000\176\373\037\067\156\154\353\261" + "\256\021\006\076\114\254\072\365\314\052\131\006\063\224\347\113" + "\071\003\140\117\003\000\070\260\212\014\025\111\271\346\375\107" + "\026\263\002\000\060\023\123\000\052\375\031\012\236\251\074\033" + "\265\143\246\164\252\030\056\236\047\147\234\267\212\236\201\156" + "\164\155\350\202\047\015\052\171\051\157\233\174\171\002\262\022" + "\100\251\214\211\003\223\074\065\066\316\335\231\037\362\100\376" + "\141\257\305\334\033\266\312\107\143\004\000\337\226\063\307\230" + "\310\244\115\002\005\145\307\217\001\343\105\270\334\274\002\224" + "\050\217\077\152\020\176\231\002\151\113\310\052\377\003\307\127" + "\224\117\070\145\334\374\335\133\136\275\347\251\157\303\306\012" + "\000\100\237\375\346\266\367\010\123\176\034\314\347\061\253\352" + "\305\026\204\052\015\020\171\366\212\241\074\005\345\246\314\360" + "\101\323\000\034\155\237\250\250\170\322\001\000\122\241\300\104" + "\116\143\005\244\314\034\173\136\063\077\124\366\332\061\264\170" + "\236\034\136\074\137\264\264\365\120\173\117\053\232\332\163\060" + "\262\031\170\134\351\011\077\150\301\260\213\045\054\116\057\142" + "\152\174\016\166\141\210\327\345\377\135\365\347\277\247\014\121" + "\214\251\357\250\023\065\106\106\022\256\253\161\366\357\161\320" + "\252\210\321\244\137\047\375\201\240\363\003\017\122\010\100\110" + "\241\357\162\250\200\103\277\326\122\374\347\345\070\063\175\243" + "\060\135\276\345\357\076\276\067\374\177\006\113\003\340\272\177" + "\333\234\345\056\353\012\101\370\204\142\076\301\137\267\124\173" + "\365\077\047\313\210\117\203\100\171\114\236\307\120\256\012\234" + "\274\112\036\305\210\046\201\070\064\274\052\334\177\245\061\034" + "\212\010\321\250\041\142\160\010\006\015\000\121\327\020\374\255" + "\372\314\040\305\026\046\213\157\025\023\245\267\322\154\371\144" + "\362\320\112\231\046\023\206\041\001\060\134\107\241\124\264\221" + "\221\123\334\156\275\310\135\115\117\161\147\366\131\105\344\205" + "\205\261\000\300\132\307\023\300\341\102\320\310\223\017\324\063" + "\111\060\161\105\375\373\207\150\165\160\270\142\065\132\000\022" + "\152\023\042\016\300\343\063\135\010\037\045\224\354\346\044\000" + "\152\272\274\314\122\110\217\101\217\010\117\354\170\356\346\027" + "\037\272\355\066\170\211\147\053\164\375\167\136\377\121\300\375" + "\023\146\356\125\172\231\065\267\054\150\366\076\312\033\007\100" + "\205\141\076\030\134\307\203\347\371\257\240\302\173\052\170\303" + "\000\040\034\164\065\305\124\174\264\120\204\210\022\140\120\301" + "\322\231\150\341\110\004\060\322\232\022\235\333\136\007\212\136" + "\017\171\234\005\300\060\150\021\115\162\214\115\071\257\275\033" + "\105\205\371\227\010\232\242\331\353\112\357\204\036\174\304\320" + "\100\362\021\277\107\161\063\240\005\202\000\100\030\004\303\020" + "\114\104\061\046\207\043\005\255\337\023\032\240\306\026\062\155" + "\076\112\020\201\040\017\060\370\377\374\331\007\137\372\232\146" + "\312\200\353\256\073\307\060\316\234\370\033\345\071\227\327\364" + "\235\153\174\260\041\271\222\115\151\137\364\010\064\123\305\246" + "\107\171\230\074\307\203\343\060\161\250\040\065\177\040\164\370" + "\164\377\000\004\012\343\003\141\027\160\240\030\231\103\000\244" + "\070\222\225\027\210\233\252\024\355\127\045\111\244\057\345\012" + "\235\257\010\030\321\360\056\144\164\230\216\110\043\120\304\344" + "\220\211\161\077\200\100\002\154\030\004\151\006\214\327\314\213" + "\366\062\261\127\021\042\336\116\256\361\201\211\244\251\360\323" + "\004\004\344\375\273\106\026\076\175\343\307\367\226\014\060\310" + "\274\157\352\167\074\166\056\207\000\322\166\251\205\122\227\116" + "\211\076\223\361\214\225\361\137\324\050\220\040\110\103\300\314" + "\060\134\233\341\153\205\112\071\121\135\212\053\022\037\335\363" + "\057\002\325\133\051\233\243\246\007\240\341\250\315\034\256\036" + "\216\365\115\052\121\142\032\227\120\141\154\205\365\024\207\132" + "\300\354\350\272\342\241\104\245\004\215\241\050\135\112\202\064" + "\005\244\341\333\205\252\335\352\244\025\101\111\276\044\161\252" + "\147\136\352\045\031\114\336\005\133\372\232\377\002\300\147\014" + "\306\255\342\317\351\163\227\212\072\333\303\353\177\034\052\141" + "\001\364\274\025\246\304\322\053\073\271\011\126\026\060\063\022" + "\312\143\330\266\013\127\217\357\046\266\006\102\350\312\217\243" + "\102\210\102\047\263\126\263\152\137\244\275\020\305\325\157\205" + "\265\221\127\037\360\275\022\322\255\024\114\101\263\011\021\352" + "\102\273\016\000\246\045\140\230\002\044\104\254\057\222\000\110" + "\060\057\266\241\264\216\064\326\053\043\106\322\120\227\061\363" + "\037\033\300\025\112\171\327\031\246\121\073\163\035\000\124\125" + "\241\357\174\212\257\364\116\051\067\070\052\006\244\040\344\114" + "\023\234\143\330\045\005\307\361\240\130\305\362\106\066\071\345" + "\213\262\024\113\012\162\263\366\134\262\322\352\073\161\063\253" + "\113\170\224\130\171\106\253\057\266\275\073\142\266\146\033\205" + "\024\076\343\055\001\021\015\043\374\243\150\014\000\211\266\245" + "\131\257\064\165\237\114\321\110\221\105\104\154\020\021\377\336" + "\227\066\357\031\334\326\174\102\154\247\202\106\265\000\220\256" + "\141\022\335\235\334\220\231\322\124\021\170\200\114\000\051\202" + "\225\063\220\141\203\134\327\203\135\362\340\332\101\154\070\324" + "\356\042\136\006\043\315\101\211\156\126\324\210\256\221\142\366" + "\042\376\102\024\173\015\212\276\046\136\315\224\104\031\021\363" + "\175\265\140\146\004\014\113\302\060\004\102\055\345\057\027\364" + "\337\231\101\065\065\000\164\115\124\265\011\065\355\065\253\251" + "\026\000\004\111\114\214\025\146\201\140\173\370\360\320\324\327" + "\031\336\373\066\234\330\011\206\133\135\120\055\015\220\110\347" + "\310\155\327\356\207\210\117\323\000\301\113\373\132\203\100\354" + "\057\366\226\301\150\325\262\014\230\246\001\117\061\234\222\013" + "\273\354\041\334\054\037\342\050\105\216\021\347\144\242\075\034" + "\313\121\365\110\170\036\273\014\257\023\017\205\143\077\375\236" + "\060\010\226\045\141\131\062\362\207\102\363\057\203\013\142\370" + "\101\035\124\244\131\327\070\172\275\065\333\227\014\152\066\350" + "\003\110\141\141\142\170\016\373\167\117\334\010\004\155\172\341" + "\221\362\253\233\117\107\151\166\252\370\356\134\076\107\115\271" + "\014\230\024\374\010\227\157\355\302\363\304\057\221\216\104\336" + "\360\161\104\341\062\241\225\027\035\005\210\004\201\100\344\317" + "\213\023\211\340\030\236\033\246\244\114\223\044\151\010\077\070" + "\244\102\335\033\124\124\361\263\242\076\215\376\012\220\306\124" + "\212\071\152\376\375\110\172\175\047\125\073\047\142\042\375\146" + "\345\047\202\167\046\002\314\214\100\123\336\104\123\336\214\154" + "\074\211\240\037\004\041\170\037\210\060\115\122\345\076\125\316" + "\021\344\363\147\007\243\252\110\317\053\110\124\363\102\120\335" + "\064\103\130\230\237\162\260\347\345\121\214\035\234\275\371\126" + "\157\376\006\074\232\320\327\037\276\241\345\054\006\135\237\313" + "\131\247\366\157\350\104\167\177\036\044\025\224\112\371\242\126" + "\110\261\211\237\312\320\262\352\136\312\230\074\032\247\127\314" + "\104\154\074\317\321\010\073\032\032\106\347\236\307\260\213\056" + "\225\113\256\357\266\153\145\370\207\140\210\210\040\256\000\004" + "\161\153\042\111\101\124\065\152\016\340\301\127\056\014\200\104" + "\314\145\115\214\307\053\265\010\111\154\145\015\266\062\006\244" + "\214\207\173\341\157\004\251\014\351\242\100\167\020\042\112\250" + "\367\330\042\221\360\031\275\237\143\101\250\344\076\302\364\261" + "\273\020\006\173\016\141\354\320\054\106\017\116\303\266\235\237" + "\050\217\377\366\366\353\013\217\124\036\255\046\272\342\163\055" + "\357\044\111\327\112\103\174\240\273\277\315\352\133\337\116\271" + "\126\003\236\112\174\150\262\022\201\323\023\165\223\250\215\355" + "\053\161\225\160\175\100\024\043\120\225\120\257\252\074\032\004" + "\200\042\157\216\042\246\152\140\120\012\344\224\075\224\212\056" + "\171\116\350\035\162\005\010\354\057\266\261\000\141\020\221\254" + "\341\272\204\344\201\330\141\146\333\127\062\101\141\061\346\303" + "\310\010\316\144\115\066\055\341\337\027\101\353\265\374\210\315" + "\005\200\165\360\350\121\105\022\311\347\070\250\057\016\274\004" + "\307\223\076\201\006\016\200\204\205\302\124\031\043\007\147\170" + "\152\174\266\300\036\337\351\330\174\323\235\377\243\120\265\133" + "\070\025\000\141\372\371\377\071\337\323\336\041\257\224\204\253" + "\233\333\232\066\014\256\357\102\147\177\036\220\056\070\364\320" + "\223\163\001\125\373\374\052\314\324\062\221\176\217\165\351\045" + "\204\363\000\221\054\260\316\324\040\074\114\121\172\245\074\327" + "\125\124\056\072\050\027\135\337\327\042\220\005\010\263\262\253" + "\151\151\252\330\164\056\063\253\062\223\122\354\113\173\046\153" + "\040\323\144\260\257\132\343\201\235\310\121\104\245\345\061\000" + "\040\221\057\221\047\131\116\114\342\253\102\277\325\032\200\110" + "\202\135\211\361\241\171\014\357\237\104\261\120\172\121\061\156" + "\232\031\231\277\343\301\177\106\030\342\324\274\240\350\165\323" + "\272\040\112\367\317\067\303\270\344\043\371\163\254\214\274\332" + "\264\344\071\375\353\072\345\300\246\166\144\362\002\236\347\324" + "\005\100\252\031\320\302\272\361\364\240\076\006\000\016\042\343" + "\232\006\320\303\057\361\050\241\136\017\111\305\202\313\256\160" + "\212\056\171\056\047\206\176\051\157\317\211\153\215\014\123\100" + "\066\031\212\063\206\162\001\177\356\237\021\001\100\147\156\134" + "\345\207\367\003\211\006\125\001\040\226\077\152\123\322\224\040" + "\006\206\130\131\360\235\272\305\071\227\207\366\115\141\174\170" + "\272\354\070\174\217\123\344\133\356\372\353\371\160\267\160\162" + "\161\350\141\000\100\133\011\364\236\337\310\154\350\132\147\176" + "\324\260\350\362\316\256\226\236\301\115\335\324\331\233\203\107" + "\016\300\252\032\000\141\131\141\274\337\157\106\114\362\043\211" + "\257\274\156\305\104\104\367\374\176\321\303\277\121\131\276\115" + "\027\006\263\064\143\161\072\202\155\173\050\055\330\361\000\123" + "\052\351\146\037\260\062\006\262\071\337\241\323\162\160\031\360" + "\034\300\343\060\314\033\330\363\120\153\000\072\163\051\052\070" + "\046\341\211\374\010\367\014\046\046\233\020\253\272\102\202\014" + "\046\145\140\154\250\200\241\175\343\230\233\051\356\163\155\174" + "\155\370\145\347\366\037\337\121\324\167\013\247\355\015\070\054" + "\000\350\040\020\000\104\333\106\230\147\135\221\277\260\051\047" + "\076\232\315\133\157\137\267\261\207\006\066\265\301\310\060\171" + "\312\116\226\347\327\036\063\003\344\117\360\350\016\240\016\220" + "\370\254\137\350\103\125\251\175\203\041\015\142\051\070\251\346" + "\343\257\246\074\005\273\344\301\261\075\270\256\202\112\054\063" + "\227\222\140\230\022\246\045\140\145\202\041\134\255\341\057\000" + "\027\344\071\004\327\011\264\102\120\045\043\230\071\104\034\000" + "\225\171\003\322\325\277\157\333\005\305\265\103\170\117\253\216" + "\001\300\020\031\024\013\012\103\373\247\170\370\300\224\153\027" + "\235\107\013\323\352\153\367\377\303\342\343\100\264\227\040\144" + "\174\162\203\110\324\226\332\275\124\111\323\001\020\166\154\315" + "\135\100\147\136\231\073\241\167\213\274\322\154\242\113\172\372" + "\332\133\327\157\356\242\266\236\054\074\056\127\274\163\124\217" + "\004\242\105\036\004\012\232\133\231\056\326\124\273\356\010\002" + "\376\010\111\062\031\246\377\101\210\272\116\135\255\333\214\300" + "\355\047\104\321\271\312\235\332\227\111\122\002\312\006\134\217" + "\310\125\210\073\173\011\037\240\312\276\353\176\100\354\176\354" + "\236\200\100\206\047\206\027\160\150\357\070\046\047\346\307\234" + "\042\177\163\357\363\366\355\317\174\307\016\167\013\067\262\111" + "\004\130\241\006\320\231\036\136\307\066\200\016\154\101\356\264" + "\017\065\177\260\245\215\076\234\157\315\236\272\141\113\057\372" + "\067\266\223\060\035\050\166\253\034\302\140\061\107\044\325\261" + "\373\341\067\002\231\211\225\357\014\110\206\141\060\233\325\322" + "\336\030\055\301\313\245\220\264\324\303\354\200\074\117\302\166" + "\011\036\270\266\203\027\033\116\002\225\317\303\150\276\200\041" + "\055\266\027\011\103\373\246\161\160\357\270\052\025\354\047\346" + "\306\324\355\217\337\261\360\160\161\012\066\032\333\056\166\104" + "\000\240\037\123\367\005\000\220\147\174\070\363\206\276\115\326" + "\345\115\315\342\202\376\165\135\115\353\267\165\241\245\063\003" + "\317\053\105\222\317\212\211\104\234\361\161\333\116\020\314\122" + "\172\154\032\314\206\356\120\056\105\113\061\173\051\132\011\030" + "\230\310\163\004\071\016\301\211\034\102\175\224\000\004\316\236" + "\102\030\313\002\174\123\140\120\023\246\306\212\174\160\327\070" + "\306\106\247\147\113\163\352\073\373\236\057\335\361\354\375\356" + "\136\124\157\020\111\333\061\274\046\000\110\143\172\332\326\060" + "\271\356\104\264\237\162\176\356\242\326\056\343\322\266\256\246" + "\115\033\267\016\120\377\372\126\202\050\223\247\334\150\161\107" + "\320\274\110\023\110\305\246\341\261\045\030\125\113\321\126\312" + "\334\325\240\206\000\102\314\056\221\343\112\121\126\302\137\211" + "\123\055\375\140\101\026\330\061\170\150\317\024\366\355\031\103" + "\141\266\364\374\364\210\273\363\251\173\212\017\024\106\121\104" + "\355\055\142\072\000\222\140\140\254\000\000\341\261\121\000\244" + "\152\001\000\062\003\030\026\140\066\345\055\353\365\027\030\247" + "\267\157\221\227\144\332\344\273\326\155\354\065\066\154\355\242" + "\246\066\011\117\225\302\245\135\122\052\145\031\036\254\106\244" + "\375\150\001\341\160\264\203\022\160\075\111\145\127\220\343\173" + "\070\304\046\145\061\067\151\363\376\075\023\030\076\060\121\054" + "\114\273\017\017\275\340\354\174\346\101\373\145\040\332\032\236" + "\366\215\200\132\152\137\337\045\164\104\000\220\004\102\055\023" + "\340\357\015\004\144\113\006\126\253\151\145\162\222\063\131\151" + "\144\040\330\314\016\122\167\353\073\344\171\231\156\172\157\127" + "\137\113\317\326\055\175\346\100\177\163\206\271\154\062\057\275" + "\164\367\270\321\000\051\044\244\241\134\225\261\017\034\232\055" + "\357\333\075\352\315\114\054\356\237\035\162\357\175\341\241\305" + "\357\316\217\141\326\001\134\162\340\002\301\066\361\372\314\257" + "\147\002\126\025\000\341\165\043\032\100\346\000\231\311\302\150" + "\146\230\131\323\262\062\046\114\123\032\026\051\066\024\103\226" + "\035\107\276\275\313\130\177\101\237\334\256\006\351\103\257\016" + "\120\156\244\317\300\272\115\175\130\277\245\023\126\016\360\270" + "\174\114\060\172\271\224\016\014\202\041\262\050\314\270\070\264" + "\147\002\243\373\047\260\141\324\303\372\041\354\331\277\307\331" + "\361\225\175\356\143\005\205\142\311\165\155\017\260\035\202\113" + "\066\334\162\143\000\250\307\374\125\331\034\252\237\057\271\075" + "\074\017\310\154\023\214\146\316\132\355\046\233\302\144\203\030" + "\106\301\146\312\030\060\176\153\223\165\356\353\232\305\145\055" + "\006\316\140\055\104\133\310\002\057\366\003\077\357\047\344\006" + "\333\260\161\153\037\072\007\162\360\120\252\204\235\217\023\212" + "\072\215\014\010\057\203\321\241\171\354\337\065\002\036\051\340" + "\344\141\340\244\121\040\253\115\253\070\212\307\016\226\160\367" + "\035\007\355\157\076\060\125\076\344\330\160\011\125\000\250\265" + "\065\274\326\320\157\325\266\207\353\347\072\000\322\100\040\363" + "\171\310\016\005\303\314\144\215\046\305\246\307\220\347\367\322" + "\340\371\075\326\025\275\046\056\063\210\353\376\267\121\117\000" + "\173\272\200\027\006\010\323\175\026\066\154\031\300\272\055\035" + "\060\262\036\074\266\353\075\172\114\342\262\330\231\000\000\016" + "\343\111\104\101\124\020\001\220\224\105\151\236\161\160\317\004" + "\016\355\035\105\377\250\207\123\106\010\353\247\241\005\161\071" + "\312\037\036\031\354\316\272\364\360\163\063\366\127\077\367\102" + "\351\007\145\077\270\163\324\077\020\241\237\327\144\176\033\040" + "\024\040\125\036\262\211\041\133\024\314\317\275\076\177\316\346" + "\234\274\272\111\342\134\112\361\346\153\221\337\162\302\124\216" + "\360\342\000\143\127\057\320\261\261\013\033\267\366\241\275\067" + "\003\227\213\311\367\070\352\104\020\220\150\302\304\320\002\366" + "\357\032\306\342\320\054\116\036\041\234\074\002\064\227\111\313" + "\027\022\307\322\364\320\047\000\270\214\335\303\145\365\325\177" + "\333\153\337\172\317\250\075\205\164\000\064\062\374\133\021\000" + "\364\143\075\351\247\066\100\052\100\134\263\311\352\275\144\103" + "\366\252\126\111\327\110\302\306\232\075\126\203\374\026\123\360" + "\106\176\267\270\222\261\253\207\361\122\277\102\251\257\011\233" + "\266\016\140\160\163\007\310\262\241\270\352\177\041\256\051\111" + "\312\300\055\112\034\334\075\211\175\273\207\320\065\346\342\165" + "\043\204\115\223\361\017\277\047\073\232\226\000\200\226\263\130" + "\120\174\367\013\363\316\215\277\367\323\305\247\120\133\355\257" + "\051\000\302\353\150\064\360\365\323\163\147\256\313\233\277\231" + "\025\270\030\100\046\365\135\352\120\245\165\004\025\375\222\171" + "\010\343\315\076\020\366\365\001\175\233\172\261\151\133\037\232" + "\273\214\065\325\012\004\202\104\016\323\243\105\354\173\165\004" + "\063\007\046\161\302\250\300\353\106\005\332\213\141\036\375\255" + "\342\035\035\357\164\326\244\252\376\330\327\125\364\314\224\213" + "\033\377\376\305\231\333\356\235\102\370\101\350\065\377\114\134" + "\230\046\376\170\163\276\355\003\233\314\217\065\113\372\117\002" + "\174\152\235\266\247\122\334\063\041\255\365\076\000\252\132\253" + "\345\267\045\360\112\257\302\113\375\012\350\317\143\363\011\203" + "\030\330\324\006\226\145\050\034\031\255\040\140\101\331\046\016" + "\355\236\302\336\135\103\310\217\226\161\312\210\300\326\111\202" + "\021\054\232\112\252\370\132\214\327\363\351\000\110\346\113\043" + "\046\232\053\271\370\306\053\005\357\137\176\363\251\271\347\120" + "\255\001\302\006\254\012\000\302\363\320\143\247\235\147\265\275" + "\261\077\043\077\145\022\076\002\160\363\022\355\255\064\074\326" + "\062\322\316\021\305\112\365\173\151\317\126\227\105\030\156\125" + "\170\251\337\303\241\036\201\165\133\373\261\151\133\057\162\355" + "\024\150\205\225\022\301\244\034\146\307\155\354\173\165\024\243" + "\373\306\260\165\214\360\272\121\102\367\202\110\121\355\225\326" + "\245\337\253\015\222\244\026\150\040\326\300\036\323\017\012\256" + "\372\322\227\237\233\271\363\226\051\224\221\076\005\234\166\254" + "\131\107\032\120\351\223\003\310\374\306\353\072\056\315\110\372" + "\155\011\234\325\350\277\151\327\031\025\136\353\014\217\245\125" + "\255\045\251\135\136\345\272\362\114\321\144\274\334\253\360\162" + "\237\207\314\272\066\154\071\141\020\175\033\132\340\321\042\152" + "\055\171\257\105\004\011\362\232\060\264\167\006\173\136\071\004" + "\071\262\210\123\106\005\116\030\027\260\274\332\314\005\200\150" + "\301\133\342\136\075\063\020\246\055\127\033\124\110\214\271\240" + "\257\034\050\225\277\374\153\217\315\357\306\152\001\340\337\337" + "\323\271\256\047\143\174\202\340\375\026\201\007\032\155\116\265" + "\124\007\351\114\165\132\124\143\165\143\262\325\051\327\361\172" + "\201\003\035\012\057\365\171\230\350\067\261\355\344\215\130\267" + "\245\063\030\112\226\153\202\101\100\372\103\270\202\302\201\335" + "\223\330\367\363\203\130\067\242\160\312\250\100\377\174\260\223" + "\047\361\114\055\265\136\373\136\242\014\252\166\010\303\143\050" + "\062\313\320\010\040\042\317\203\170\300\123\352\237\276\360\340" + "\344\275\267\041\132\347\277\074\000\374\364\374\256\323\245\041" + "\377\000\354\135\016\300\154\240\356\250\164\006\302\257\276\150" + "\151\161\015\240\347\117\053\043\135\106\352\077\227\166\177\066" + "\253\360\354\200\207\335\135\214\226\276\126\364\364\165\240\265" + "\043\217\134\263\005\303\020\140\060\034\333\303\342\274\203\331" + "\251\002\306\106\247\140\217\027\160\342\270\304\033\106\044\362" + "\332\212\267\172\314\117\063\134\265\030\027\007\103\365\233\124" + "\002\111\161\020\054\167\016\234\100\373\131\320\227\346\346\371" + "\137\337\375\370\304\160\324\320\032\155\001\000\074\175\141\337" + "\045\022\352\063\314\070\173\045\136\265\342\060\204\045\252\153" + "\155\340\032\100\142\051\154\343\332\041\215\134\301\030\152\125" + "\030\156\125\230\314\051\314\147\001\133\372\213\021\054\227\320" + "\132\366\155\372\340\234\100\377\074\041\374\107\057\265\244\256" + "\312\313\247\344\275\352\363\352\173\134\363\136\170\055\300\020" + "\324\230\364\327\042\022\302\126\214\235\056\251\177\170\353\275" + "\023\217\246\326\371\344\373\273\007\162\122\176\205\225\172\337" + "\152\016\247\230\053\037\276\145\240\252\350\172\332\040\155\020" + "\265\022\020\054\227\352\165\372\262\325\175\012\023\223\043\001" + "\075\135\002\220\253\375\137\021\374\157\322\334\137\162\234\117" + "\234\376\340\364\376\260\056\172\370\203\233\373\372\120\174\214" + "\130\155\133\335\032\053\304\000\074\046\070\114\261\161\112\062" + "\317\162\256\143\367\030\130\231\234\244\226\132\163\177\135\343" + "\122\136\057\037\107\211\241\212\227\360\077\034\262\332\157\022" + "\043\041\107\027\034\347\234\323\357\237\174\331\070\365\324\123" + "\315\036\232\276\101\050\336\266\372\035\130\041\202\277\353\311" + "\014\376\131\226\303\024\174\323\257\242\010\303\332\223\327\141" + "\132\262\165\272\106\111\153\171\370\214\176\114\053\027\051\351" + "\311\224\245\274\345\344\165\143\303\103\177\325\233\001\206\101" + "\113\325\266\212\244\124\137\263\145\175\011\300\071\306\330\330" + "\130\006\233\215\263\105\055\250\037\001\022\000\014\002\262\000" + "\034\146\330\221\126\360\227\311\246\061\272\146\353\352\064\073" + "\351\204\245\201\240\321\267\256\357\013\004\347\321\105\055\263" + "\120\111\221\140\230\344\177\137\270\346\277\216\076\222\104\070" + "\023\200\145\114\114\114\144\012\330\040\272\150\355\143\352\004" + "\040\103\176\334\330\143\240\314\014\047\305\373\157\124\142\053" + "\335\136\033\062\365\273\172\351\261\167\043\232\040\311\122\012" + "\376\020\174\015\150\222\277\137\365\150\322\202\277\061\334\064" + "\000\230\057\026\305\117\336\325\142\234\144\252\352\255\341\153" + "\105\202\374\261\246\202\257\021\312\052\334\117\257\321\022\076" + "\221\256\102\017\307\175\152\150\234\135\043\143\075\163\040\011" + "\260\002\363\167\164\331\016\000\004\117\112\274\132\224\057\042" + "\000\000\175\371\271\251\177\152\172\123\347\271\257\317\211\301" + "\074\334\344\370\153\115\111\002\150\042\240\111\000\016\003\145" + "\345\373\013\241\217\127\253\003\223\055\076\274\216\256\347\005" + "\054\235\236\064\007\046\061\062\201\232\137\111\253\126\215\204" + "\300\002\044\136\051\031\366\143\343\013\237\107\360\201\222\076" + "\000\255\357\354\317\235\360\361\223\273\077\277\045\047\337\062" + "\140\051\264\220\207\340\337\165\034\165\122\000\112\012\201\126" + "\110\357\304\043\205\331\106\106\001\172\232\010\230\236\021\107" + "\235\335\025\222\022\063\112\142\330\026\030\056\363\336\307\107" + "\013\177\366\057\317\217\077\006\140\232\000\264\001\150\016\217" + "\277\173\132\367\373\137\337\331\164\331\100\126\276\161\300\002" + "\365\032\014\301\336\121\325\012\072\331\014\024\075\124\276\012" + "\136\203\164\147\257\221\226\057\207\131\151\352\336\022\076\323" + "\315\143\205\353\104\160\111\142\324\223\030\266\341\015\057\172" + "\077\176\176\252\370\255\057\077\067\366\075\007\230\001\060\017" + "\140\236\340\073\343\131\000\171\000\271\340\230\175\377\306\326" + "\223\336\073\230\337\076\230\063\057\030\310\212\346\301\014\220" + "\047\005\250\006\076\270\273\006\344\061\120\124\276\146\250\025" + "\116\116\016\053\353\321\122\174\113\273\057\010\310\012\377\167" + "\130\133\225\216\000\221\220\230\145\003\103\016\141\270\244\046" + "\017\314\273\337\271\153\377\364\135\077\036\056\034\002\260\010" + "\240\010\240\020\234\227\302\240\223\001\337\031\317\300\007\101" + "\026\100\023\000\153\060\143\264\175\354\344\366\367\235\330\226" + "\331\076\320\144\234\264\256\211\320\153\002\244\216\015\255\300" + "\360\115\103\043\132\141\271\124\013\024\126\300\364\314\061\303" + "\165\202\047\014\214\272\002\103\145\360\360\242\367\323\347\247" + "\027\357\272\361\205\261\107\012\056\212\000\112\000\312\010\230" + "\036\374\154\000\321\114\107\030\204\012\201\140\301\007\101\046" + "\070\132\000\062\227\157\156\076\355\035\275\315\227\256\313\033" + "\347\256\317\031\231\165\131\201\246\143\310\127\160\002\363\120" + "\113\053\054\207\322\324\174\223\364\031\157\034\053\152\136\112" + "\024\130\342\220\115\070\264\310\363\103\213\345\373\036\334\077" + "\267\363\376\203\163\273\340\057\050\015\031\037\062\274\024\244" + "\207\213\115\143\023\360\172\064\322\200\077\052\063\121\001\100" + "\164\334\332\052\273\076\274\271\375\203\133\132\315\213\327\347" + "\314\015\033\162\046\172\054\000\336\321\033\106\352\304\014\024" + "\025\143\321\363\115\305\112\310\044\040\047\201\214\240\232\016" + "\341\232\022\021\224\060\060\346\012\034\052\051\034\132\164\137" + "\172\145\266\274\163\307\013\023\017\216\225\335\071\124\030\255" + "\037\155\370\323\302\341\026\362\310\216\327\162\146\165\060\230" + "\010\064\000\022\100\000\140\135\163\102\353\031\157\351\310\154" + "\037\314\033\147\155\150\316\030\033\162\022\031\126\100\003\073" + "\174\326\202\312\012\130\160\031\366\062\201\220\025\100\136\022" + "\314\143\105\315\013\211\105\030\070\130\146\014\055\252\342\201" + "\005\373\241\037\014\317\177\353\216\075\263\057\300\227\362\220" + "\341\145\355\072\144\174\362\337\311\104\264\024\246\365\175\176" + "\006\342\046\042\364\031\262\000\062\157\152\267\006\056\331\324" + "\174\321\306\274\361\241\015\315\126\357\246\226\014\272\114\034" + "\063\132\301\143\240\244\030\166\340\053\350\232\201\340\217\325" + "\315\300\256\147\004\241\316\227\163\327\220\010\154\030\030\167" + "\010\007\212\012\207\026\334\275\273\146\313\167\177\155\327\364" + "\075\173\347\312\323\250\060\073\224\364\062\052\052\076\311\370" + "\032\065\064\332\222\212\126\320\201\020\232\210\310\127\310\002" + "\271\153\116\152\071\363\015\255\326\245\003\171\363\364\315\155" + "\115\142\103\316\200\301\036\160\214\355\360\011\175\330\143\102" + "\265\353\044\044\312\044\161\260\310\330\277\340\070\207\026\235" + "\357\077\071\266\360\255\133\136\231\371\017\124\333\364\360\030" + "\252\370\160\047\021\320\200\053\164\070\257\236\324\012\272\211" + "\210\064\002\200\314\231\335\115\033\057\030\264\266\157\314\233" + "\027\156\152\315\266\157\156\155\102\273\311\307\214\126\070\266" + "\210\000\151\140\302\045\354\133\160\161\160\301\031\331\077\157" + "\337\375\315\135\323\367\074\073\143\217\302\147\164\021\025\000" + "\070\301\271\156\333\123\325\374\022\265\256\244\305\225\265\013" + "\360\101\140\242\172\024\221\151\067\220\277\152\113\363\171\047" + "\267\232\333\327\067\133\157\330\322\221\247\365\171\003\122\271" + "\376\322\241\137\144\022\002\216\060\160\240\250\260\157\276\354" + "\015\055\270\117\074\063\135\334\371\157\057\116\377\320\215\063" + "\074\124\361\341\321\105\345\077\213\057\213\351\072\255\206\362" + "\323\201\040\120\031\075\130\110\000\001\100\346\302\376\354\111" + "\147\367\145\266\257\153\222\357\333\334\221\317\157\155\153\102" + "\213\001\300\375\305\322\012\144\230\230\162\201\275\005\033\373" + "\347\355\251\175\005\347\336\173\367\317\337\365\243\361\342\101" + "\124\030\136\104\365\360\255\256\123\267\354\166\254\344\341\032" + "\345\205\046\102\067\017\125\243\207\301\014\332\076\262\071\177" + "\301\266\274\261\175\175\133\366\304\155\035\315\130\227\067\041" + "\074\347\230\010\060\035\021\042\001\127\032\070\270\350\141\317" + "\154\211\017\054\224\237\176\171\326\336\171\343\317\147\036\051" + "\270\130\104\272\123\147\043\156\333\127\314\364\130\223\126\253" + "\240\224\162\165\363\140\240\142\042\252\342\012\227\255\313\234" + "\366\366\056\363\322\165\071\343\234\255\135\255\231\255\355\171" + "\344\311\073\146\302\316\053\046\151\142\116\021\166\317\225\260" + "\147\146\161\376\140\301\275\377\221\221\205\235\017\014\227\136" + "\105\372\270\135\267\355\253\046\355\151\264\026\376\257\036\123" + "\320\175\205\052\040\234\224\223\235\227\156\310\134\264\071\157" + "\134\274\271\255\151\303\266\356\126\014\346\114\377\133\031\307" + "\233\126\020\002\112\232\070\270\340\142\327\314\002\016\314\225" + "\137\336\065\357\174\353\346\335\263\017\216\225\121\053\140\223" + "\264\355\165\207\160\253\101\153\071\000\112\152\205\320\127\250" + "\162\032\001\144\256\336\220\071\343\115\355\306\366\365\315\326" + "\231\333\272\333\214\255\355\071\144\161\034\150\005\151\240\240" + "\004\166\317\026\261\173\152\241\164\150\301\171\350\107\023\345" + "\157\335\171\160\361\171\304\003\066\272\155\327\003\066\253\256" + "\346\353\321\321\030\001\247\315\077\350\100\310\350\277\067\265" + "\313\201\017\365\233\027\157\314\031\027\155\351\152\351\075\261" + "\253\025\275\115\006\340\204\377\024\363\030\040\042\260\141\141" + "\150\321\305\253\223\363\330\073\123\334\267\157\321\273\353\033" + "\373\026\357\331\273\340\326\013\330\330\210\177\001\144\315\137" + "\350\150\207\100\222\116\143\322\127\320\003\114\115\127\157\262" + "\316\076\245\325\330\276\241\065\373\266\023\173\332\305\326\366" + "\046\230\352\050\152\005\051\121\144\211\135\263\105\274\072\061" + "\347\034\134\160\036\373\331\224\275\363\253\373\213\117\242\072" + "\064\253\073\164\372\207\036\327\114\332\323\350\150\003\100\247" + "\344\144\124\070\172\310\044\177\147\167\310\115\347\365\133\333" + "\327\347\214\017\154\353\156\155\073\271\273\025\235\226\000\134" + "\007\107\276\057\011\060\055\214\024\135\274\062\071\217\075\123" + "\363\043\373\026\324\267\277\175\260\170\367\063\363\336\030\322" + "\143\362\241\304\353\103\070\254\101\143\227\244\143\011\000\041" + "\245\071\215\372\172\205\310\151\154\063\220\377\330\246\354\371" + "\047\345\305\045\233\333\162\257\077\261\257\203\066\267\146\141" + "\170\316\352\207\235\205\104\231\014\354\236\131\304\053\143\263" + "\352\300\174\371\211\347\347\234\235\073\366\226\176\240\005\154" + "\222\322\036\252\370\206\342\362\107\203\216\105\000\204\224\234" + "\225\324\175\005\375\227\005\140\136\330\043\117\076\263\307\272" + "\164\103\336\174\337\211\275\355\271\223\272\132\320\146\040\320" + "\012\053\040\323\302\104\111\341\345\211\071\354\232\230\233\076" + "\260\340\334\363\300\230\275\363\207\123\336\101\124\063\075\215" + "\361\214\243\254\346\353\321\261\014\000\235\222\100\110\233\214" + "\312\000\310\014\144\320\166\345\206\314\373\267\346\344\366\055" + "\235\315\333\116\351\357\304\206\146\013\264\034\247\221\004\224" + "\141\142\367\154\011\057\215\116\361\276\331\342\063\077\237\367" + "\166\336\264\277\364\110\301\305\002\252\235\272\360\027\252\371" + "\065\031\302\255\006\035\057\000\320\111\237\214\322\303\316\172" + "\134\041\003\300\272\154\235\371\246\063\072\214\053\066\267\065" + "\275\347\204\236\166\271\261\055\207\066\123\002\312\365\035\307" + "\340\337\325\201\010\020\002\054\014\114\225\135\354\233\131\304" + "\256\361\151\173\317\274\175\357\243\343\316\067\037\030\163\302" + "\200\215\316\170\335\251\113\016\341\216\033\072\036\001\020\122" + "\354\233\304\210\117\106\305\114\304\351\155\162\360\375\375\346" + "\105\175\131\161\166\147\326\334\332\231\317\212\346\154\006\246" + "\364\127\173\330\256\207\271\222\215\251\205\242\067\135\162\137" + "\034\052\361\367\276\063\154\337\367\274\357\324\325\122\361\272" + "\264\037\167\214\017\351\170\006\100\110\365\002\114\372\317\002" + "\140\156\315\241\343\355\235\346\211\275\226\030\260\014\064\203" + "\241\112\212\346\107\112\336\301\037\114\070\273\206\313\230\107" + "\205\311\151\252\076\264\355\107\054\074\273\226\364\132\000\200" + "\116\265\326\052\350\077\063\270\027\346\005\052\122\034\306\337" + "\223\166\135\217\324\061\260\314\017\016\035\303\364\132\003\100" + "\110\172\200\111\217\053\204\240\320\377\323\111\050\301\041\000" + "\134\124\030\176\124\302\263\153\111\257\125\000\350\244\003\101" + "\077\206\246\043\044\375\003\314\311\317\262\276\146\351\027\001" + "\000\204\170\114\041\371\301\313\220\102\325\256\037\137\223\122" + "\257\323\057\002\000\200\070\303\323\230\017\304\231\375\232\147" + "\174\110\377\037\344\325\066\036\206\347\373\016\000\000\000\000" + "\111\105\116\104\256\102\140\202\000\000\050\165\165\141\171\051" + "\141\160\160\055\151\143\157\156\137\071\066\056\160\156\147\000" + "\042\043\000\000\000\000\000\000\211\120\116\107\015\012\032\012" + "\000\000\000\015\111\110\104\122\000\000\000\140\000\000\000\140" + "\010\006\000\000\000\342\230\167\070\000\000\001\167\151\103\103" + "\120\163\122\107\102\040\142\165\151\154\164\055\151\156\000\000" + "\050\221\165\221\275\113\102\121\030\306\177\152\121\224\021\121" + "\103\110\203\203\105\203\102\024\105\143\331\340\042\041\146\220" + "\325\242\067\077\202\253\136\356\125\102\132\203\226\006\241\041" + "\152\351\153\350\077\250\065\150\055\010\202\042\210\150\153\357" + "\153\011\271\275\107\005\043\362\134\316\175\177\074\347\074\057" + "\357\175\056\070\303\272\226\263\332\146\040\227\057\232\321\120" + "\320\273\024\137\366\166\274\342\302\103\037\223\220\320\054\143" + "\066\022\011\323\162\175\335\343\120\365\056\240\172\265\276\367" + "\357\352\136\113\131\032\070\072\205\247\064\303\054\012\313\064" + "\204\067\212\206\342\035\341\001\055\233\130\023\076\022\366\233" + "\062\240\360\265\322\223\165\176\121\234\251\363\207\142\063\026" + "\235\003\247\352\351\315\374\342\344\057\326\262\146\116\170\124" + "\330\227\323\113\132\143\036\365\045\356\124\176\161\101\252\107" + "\366\020\026\121\102\004\361\222\244\304\072\072\105\002\122\363" + "\222\331\377\276\261\232\157\236\202\170\064\171\033\224\061\305" + "\221\041\053\136\277\250\045\351\232\222\232\026\075\045\217\116" + "\131\345\376\067\117\053\075\061\136\357\356\016\102\373\263\155" + "\277\017\103\307\056\124\053\266\375\175\154\333\325\023\160\075" + "\301\145\276\351\057\110\116\323\237\242\127\232\232\357\020\172" + "\267\340\374\252\251\045\367\340\142\033\006\037\215\204\231\250" + "\111\056\331\316\164\032\336\316\240\047\016\375\267\320\265\122" + "\317\252\161\316\351\003\304\066\345\027\335\300\376\001\214\310" + "\375\336\325\037\012\176\150\016\106\067\223\257\000\000\000\011" + "\160\110\131\163\000\000\013\022\000\000\013\022\001\322\335\176" + "\374\000\000\040\000\111\104\101\124\170\234\355\175\147\220\044" + "\307\165\346\367\062\253\252\335\114\217\067\073\153\260\146\260" + "\013\113\020\013\020\226\044\010\020\013\103\302\121\044\034\101" + "\121\274\120\350\164\241\013\006\217\027\324\105\200\167\012\010" + "\272\043\051\305\031\062\104\361\042\204\270\020\017\202\241\050" + "\000\004\001\056\314\001\040\010\117\301\054\354\142\241\331\235" + "\365\146\274\355\151\133\125\371\356\107\226\355\351\036\267\063" + "\273\140\004\037\242\121\325\125\131\231\131\337\367\362\231\314" + "\354\131\340\367\362\173\371\275\374\136\116\232\320\311\356\300" + "\242\344\233\117\146\233\062\231\363\005\344\205\014\154\004\320" + "\002\142\046\140\114\101\365\053\320\157\163\143\223\357\340\236" + "\033\012\047\273\253\013\225\337\001\002\230\322\337\175\271\073" + "\311\164\073\210\156\141\246\325\000\313\232\105\011\016\030\007" + "\010\164\237\015\343\027\271\037\134\070\166\202\073\273\150\371" + "\130\023\320\162\347\113\227\202\304\355\104\342\012\060\067\001" + "\274\360\376\022\015\063\321\223\344\212\373\307\177\160\321\256" + "\025\354\346\161\311\307\216\200\326\377\364\233\065\302\114\136" + "\247\210\157\047\102\057\370\070\373\110\140\060\336\140\360\003" + "\154\047\236\235\370\233\363\247\226\251\253\313\042\037\017\002" + "\276\375\132\252\245\201\266\032\304\267\063\350\012\200\233\216" + "\033\370\331\242\000\032\044\126\217\262\064\036\032\335\165\160" + "\057\036\272\305\135\346\066\026\055\047\225\200\306\073\137\157" + "\113\030\374\145\101\174\013\003\247\001\054\116\104\273\104\242" + "\010\346\337\202\350\037\207\121\174\036\167\137\356\234\210\166" + "\153\366\345\204\267\170\327\116\253\003\063\027\020\350\016\042" + "\134\015\040\171\302\373\020\025\306\121\146\376\047\151\131\017" + "\017\374\227\255\007\117\164\363\047\210\000\246\366\357\355\350" + "\066\034\165\023\200\057\023\350\124\006\233\047\246\355\205\011" + "\001\323\000\136\142\302\003\203\023\316\033\370\341\045\305\023" + "\324\356\312\112\317\137\275\171\051\010\267\063\350\012\002\026" + "\027\311\234\024\041\146\302\207\000\075\134\220\346\103\123\167" + "\176\142\142\105\133\133\211\112\333\277\367\326\252\244\242\353" + "\130\340\016\200\116\005\057\035\164\076\216\147\175\041\042\136" + "\122\333\240\022\201\037\003\360\363\243\366\364\133\053\341\053" + "\226\217\200\273\166\132\153\323\225\117\200\161\073\024\256\141" + "\242\346\005\003\037\205\147\261\200\013\000\152\121\117\000\121" + "\102\026\326\132\005\300\107\040\276\337\341\374\063\203\337\375" + "\354\050\342\275\136\262\034\067\001\035\167\375\246\041\235\152" + "\276\001\240\257\262\240\117\100\261\061\367\023\034\071\314\001" + "\166\255\073\213\011\115\251\006\100\163\102\106\125\265\327\156" + "\212\010\103\304\170\032\312\271\367\300\167\317\357\233\257\326" + "\371\144\151\004\334\305\142\103\303\316\263\230\370\166\060\156" + "\142\205\246\371\037\122\163\267\027\275\063\347\050\130\110\227" + "\347\301\304\037\001\163\027\143\075\274\352\210\140\045\231\337" + "\144\246\007\046\307\207\237\235\370\233\155\113\112\360\026\105" + "\300\306\277\176\253\211\215\344\066\022\270\235\025\237\213\305" + "\204\220\363\231\226\272\367\375\313\113\361\005\121\333\137\003" + "\355\205\370\206\171\313\060\023\211\043\004\176\134\071\245\207" + "\367\277\265\277\177\061\011\336\202\136\152\343\217\166\256\223" + "\054\376\120\101\335\010\306\232\205\214\071\362\372\066\167\251" + "\072\367\043\306\240\156\133\265\352\256\003\126\225\145\231\243" + "\373\363\200\355\325\137\257\220\000\112\040\274\014\302\203\375" + "\273\136\175\036\367\374\251\075\147\175\325\175\213\112\357\337" + "\356\111\110\162\057\205\342\257\051\140\033\003\142\276\210\104" + "\104\172\067\253\154\164\064\327\253\047\270\256\017\341\213\126" + "\227\237\013\247\132\125\153\340\142\330\317\245\331\376\275\032" + "\316\075\210\250\250\276\357\027\104\114\204\143\304\174\077\052" + "\366\343\175\177\176\316\376\005\367\366\264\277\373\250\215\140" + "\174\201\131\175\103\001\247\202\347\163\252\236\004\257\123\113" + "\063\275\073\021\340\203\327\367\257\321\134\200\307\332\231\177" + "\324\056\100\313\051\332\347\010\250\341\245\205\370\211\152\307" + "\135\175\233\230\200\151\101\170\205\010\367\116\227\323\073\216" + "\374\307\265\261\004\057\170\174\375\117\367\047\033\213\316\237" + "\071\214\333\131\251\325\163\065\133\133\352\200\106\210\153\174" + "\030\004\121\254\014\120\173\144\054\103\036\240\333\250\241\361" + "\104\034\033\024\176\357\250\176\231\032\025\057\054\012\042\122" + "\202\150\227\024\364\120\156\120\336\167\340\356\015\245\240\251" + "\255\077\351\357\255\110\334\243\024\157\341\245\070\273\271\100" + "\252\241\043\101\033\024\014\215\270\315\231\023\364\205\366\257" + "\016\060\124\245\265\201\246\107\123\203\252\147\347\034\121\250" + "\115\156\275\242\040\226\102\354\005\341\337\177\360\247\233\076" + "\240\253\376\373\173\231\201\154\346\101\305\364\251\205\126\022" + "\310\042\234\054\127\225\047\242\320\044\315\145\276\142\155\160" + "\375\173\263\100\210\074\126\023\240\070\021\104\304\314\034\173" + "\246\206\055\235\337\157\054\120\044\321\036\023\174\203\061\336" + "\140\156\000\211\263\005\055\122\361\231\011\165\237\231\355\114" + "\051\132\336\003\216\210\164\031\212\227\017\201\145\075\112\330" + "\277\106\125\241\271\126\315\330\303\121\317\030\152\073\205\245" + "\002\240\374\013\354\021\113\044\104\024\104\277\217\125\327\352" + "\002\115\213\044\141\223\225\060\267\030\371\261\122\056\325\221" + "\254\270\222\026\034\323\163\015\360\051\370\037\142\212\072\013" + "\174\170\100\306\300\246\260\136\300\003\335\207\226\051\126\171" + "\325\250\233\245\002\262\032\060\100\153\173\164\360\125\225\041" + "\037\170\216\220\022\224\256\156\203\174\277\120\063\263\130\040" + "\011\102\051\316\035\236\124\306\107\357\365\037\071\375\234\055" + "\157\244\073\263\127\262\051\265\262\315\361\040\053\046\252\326" + "\374\210\142\316\046\047\004\070\004\073\362\235\202\121\102\344" + "\253\257\252\252\043\152\054\146\215\072\256\326\312\152\315\340" + "\330\103\202\330\357\161\064\350\321\332\313\210\177\367\133\234" + "\005\052\221\040\126\136\307\143\067\304\334\311\076\001\040\333" + "\345\302\110\356\215\111\333\336\105\000\260\351\073\257\166\312" + "\164\352\373\211\306\304\027\022\115\151\120\322\204\133\217\205" + "\072\166\277\166\216\020\215\176\142\367\043\266\077\064\067\261" + "\072\146\325\127\307\077\314\251\161\061\115\016\321\015\316\051" + "\054\243\321\011\043\236\331\076\045\366\175\116\115\257\161\117" + "\022\300\305\012\312\023\005\125\232\051\077\314\156\376\173\375" + "\077\370\354\110\354\245\326\377\371\253\237\064\114\363\153\126" + "\072\161\165\272\045\323\046\033\022\120\102\206\001\302\234\321" + "\116\374\036\303\245\232\367\111\040\000\123\253\020\151\023\257" + "\050\066\212\364\031\371\141\254\266\004\256\024\244\014\041\134" + "\111\321\345\113\002\263\022\212\131\272\212\245\255\130\124\115" + "\005\314\006\137\001\040\022\141\247\105\100\012\203\225\137\070" + "\016\072\144\125\164\064\107\244\005\100\020\100\256\013\047\127" + "\104\141\274\060\120\051\127\236\140\056\337\277\357\007\237\331" + "\035\326\131\343\361\015\337\172\256\123\244\263\067\230\011\343" + "\226\124\123\152\163\262\045\143\302\064\341\062\023\327\154\162" + "\356\350\045\076\072\252\115\022\007\145\265\371\012\313\021\063" + "\351\360\231\245\020\266\245\101\237\057\362\042\146\110\107\051" + "\243\242\224\160\271\306\050\360\115\012\303\047\204\020\067\101" + "\265\106\013\346\035\025\272\010\040\101\254\354\012\312\343\205" + "\162\141\272\260\123\225\053\377\124\052\117\075\165\344\207\327" + "\114\240\312\150\325\044\040\070\336\374\277\022\353\327\234\177" + "\201\221\116\336\221\156\110\135\225\152\311\044\254\246\064\354" + "\270\265\214\203\215\310\167\216\234\213\330\165\002\163\254\054" + "\203\365\330\000\023\230\111\220\022\202\034\113\220\062\164\224" + "\264\330\374\204\230\001\245\224\151\053\045\155\206\320\323\261" + "\321\021\020\230\037\057\014\023\125\140\253\310\071\205\347\125" + "\116\046\310\254\115\000\345\311\031\024\047\013\371\122\056\377" + "\204\135\050\076\170\340\211\107\337\105\377\217\155\304\201\217" + "\301\067\253\347\221\143\360\351\271\355\047\335\311\265\147\177" + "\305\112\245\277\334\330\221\335\220\154\312\010\116\230\160\225" + "\212\233\236\032\166\134\007\065\361\353\034\045\307\067\065\112" + "\011\041\224\041\310\266\004\051\157\274\057\076\061\244\330\211" + "\247\355\154\330\256\222\266\142\351\170\252\037\232\034\000\020" + "\344\167\066\246\375\172\304\327\047\100\022\001\345\012\227\047" + "\012\356\364\330\124\237\223\317\377\163\256\377\265\137\016\077" + "\376\237\175\155\127\210\244\230\125\307\131\004\124\073\112\021" + "\271\046\000\210\206\113\376\135\143\307\326\353\056\262\262\155" + "\267\246\232\033\056\156\350\310\246\144\072\111\016\021\230\043" + "\131\056\000\050\326\001\123\015\163\344\037\011\114\200\053\045" + "\271\246\020\216\011\016\315\314\242\062\233\072\057\021\273\310" + "\304\014\122\112\231\025\005\151\003\102\171\103\300\113\004\342" + "\107\100\033\102\060\202\321\241\065\222\330\200\202\063\123\342" + "\231\341\351\231\302\344\324\113\245\211\301\237\117\356\270\367" + "\355\334\216\355\171\304\201\137\022\001\121\320\375\121\040\042" + "\337\005\000\331\175\353\217\116\115\365\234\171\103\246\271\365" + "\246\206\316\246\216\124\153\003\071\102\100\371\332\035\204\376" + "\254\055\054\063\005\132\315\114\102\070\206\020\256\045\340\032" + "\304\114\014\256\343\325\226\117\174\000\031\304\012\322\166\331" + "\264\231\205\023\232\022\357\050\074\167\027\231\013\222\102\260" + "\164\034\024\306\162\310\215\116\035\051\116\214\074\062\263\347" + "\365\047\107\236\274\373\040\064\320\012\200\213\331\340\107\077" + "\300\161\022\120\375\221\150\335\224\134\163\323\137\135\225\152" + "\133\175\123\123\127\373\047\063\235\315\226\110\133\344\200\042" + "\166\337\037\005\256\024\344\232\202\312\011\042\020\373\344\234" + "\204\335\022\004\142\026\304\140\341\272\312\254\050\226\016\110" + "\250\152\337\140\020\330\311\225\060\063\074\125\234\036\032\172" + "\263\064\274\357\321\043\217\174\353\045\024\213\025\150\300\243" + "\240\373\347\012\307\111\100\024\170\377\134\242\026\001\376\047" + "\333\221\354\270\370\033\275\215\233\077\163\123\272\243\347\263" + "\115\335\315\355\311\346\006\162\245\040\206\153\010\124\022\104" + "\256\251\315\016\203\331\263\014\047\161\253\212\036\015\000\204" + "\140\060\263\142\323\146\066\053\002\302\025\256\313\305\261\031" + "\065\065\064\072\134\030\076\372\374\324\207\117\155\317\277\363" + "\320\201\162\056\127\001\140\043\004\077\012\172\365\010\250\046" + "\001\130\042\001\121\300\153\023\000\030\376\047\271\371\262\366" + "\123\076\167\315\365\315\353\326\377\261\321\324\333\320\330\325" + "\050\051\141\221\355\165\043\230\150\070\311\373\204\252\263\134" + "\123\002\052\137\342\351\241\031\307\236\334\075\064\272\173\357" + "\077\344\076\170\370\325\342\341\017\306\234\002\052\025\102\005" + "\004\007\245\171\011\210\202\037\045\001\130\002\001\076\011\363" + "\202\337\320\212\344\147\156\153\076\157\325\251\311\057\246\263" + "\342\323\014\044\246\313\275\362\330\314\345\211\242\270\330\114" + "\167\364\010\253\051\003\227\304\154\247\175\222\104\022\261\120" + "\056\052\023\063\050\214\036\126\031\176\305\136\325\360\233\162" + "\203\165\330\121\016\306\246\106\235\147\372\137\057\075\373\346" + "\366\334\076\150\315\167\042\237\050\001\376\171\324\024\055\231" + "\000\077\323\224\250\077\002\002\360\077\171\115\272\373\314\317" + "\066\176\276\271\303\270\116\030\264\211\050\134\111\143\326\136" + "\257\354\264\212\241\231\013\314\261\312\145\226\321\274\105\146" + "\332\233\011\011\013\316\102\075\357\102\312\055\220\116\002\101" + "\202\201\122\031\063\243\343\254\246\077\164\333\255\027\052\355" + "\351\267\355\204\234\122\240\140\006\212\205\000\203\121\050\027" + "\370\215\301\075\225\307\337\170\042\367\316\140\177\145\006\365" + "\011\360\317\253\315\220\377\026\013\046\240\372\350\003\036\020" + "\160\343\167\332\316\356\351\115\176\071\221\026\127\020\121\263" + "\316\146\203\210\315\007\037\120\040\146\206\162\231\034\145\320" + "\144\351\164\143\270\360\071\253\234\274\304\310\166\266\121\242" + "\271\001\145\046\324\316\264\043\135\257\217\350\202\204\010\110" + "\200\121\232\310\141\172\150\210\323\316\053\116\147\346\245\112" + "\223\265\333\225\102\061\010\034\131\367\145\042\100\010\350\170" + "\232\300\200\120\256\215\175\371\161\373\361\267\266\347\266\277" + "\377\302\314\030\146\003\137\155\212\252\035\361\242\011\210\231" + "\235\113\156\155\152\073\363\322\306\053\032\332\344\155\122\360" + "\031\254\273\106\314\336\254\043\051\200\101\112\353\021\024\063" + "\101\001\312\325\011\030\063\023\063\023\230\250\342\066\213\143" + "\371\317\231\123\352\323\106\272\355\064\112\167\144\111\131\026" + "\134\256\302\173\051\361\051\205\007\203\000\224\312\310\217\114" + "\162\151\174\047\267\232\257\330\253\062\057\073\246\050\050\277" + "\347\044\164\216\356\075\303\040\002\221\036\001\044\364\271\157" + "\030\110\317\261\027\313\045\365\353\321\203\316\103\317\335\073" + "\360\356\310\001\224\227\203\200\352\020\124\002\240\215\033\141" + "\135\374\047\335\233\073\127\047\156\065\054\332\006\102\047\300" + "\004\205\060\151\362\006\255\002\000\245\110\051\220\142\350\351" + "\145\006\224\142\002\074\142\000\057\313\121\004\006\154\067\051" + "\246\312\247\313\341\362\225\006\147\316\025\215\135\135\144\064" + "\246\341\300\313\053\352\200\033\223\252\162\202\000\203\025\354" + "\351\031\114\017\035\143\263\264\103\165\247\236\163\032\314\275" + "\256\041\313\114\104\114\202\230\024\000\001\046\341\257\314\350" + "\060\215\111\347\003\302\033\011\020\102\317\000\022\042\123\331" + "\004\010\224\331\245\276\142\216\177\261\347\225\211\247\237\271" + "\157\152\024\263\115\321\222\010\020\035\147\300\272\343\073\353" + "\256\111\064\030\267\222\340\013\230\221\210\276\260\236\273\001" + "\224\342\220\000\126\304\012\120\312\063\106\112\247\240\336\063" + "\024\230\045\002\261\046\207\302\014\031\224\167\326\210\341\302" + "\305\062\107\333\144\103\307\032\152\350\154\201\055\244\046\242" + "\052\263\236\115\014\261\044\100\072\066\162\103\223\050\214\356" + "\343\146\172\326\355\114\277\341\046\215\041\046\015\046\003\036" + "\250\004\366\146\105\003\002\100\140\241\327\021\064\061\344\221" + "\102\221\154\331\063\113\004\337\064\005\035\030\126\016\377\277" + "\251\101\365\263\173\276\175\160\027\346\316\007\352\022\100\337" + "\376\077\233\066\044\232\361\045\051\160\033\023\257\342\310\154" + "\110\110\000\103\271\040\305\014\166\031\052\000\131\351\051\346" + "\200\000\015\272\017\036\107\276\263\367\035\100\110\222\142\142" + "\020\051\066\061\126\074\117\016\227\057\023\146\353\005\242\261" + "\253\035\062\225\040\007\004\025\061\121\004\117\333\241\340\314" + "\024\061\075\064\314\074\365\057\252\053\365\202\152\115\176\240" + "\210\134\235\170\170\200\013\021\254\033\151\320\165\302\305\360" + "\001\326\043\000\036\041\054\264\041\326\327\050\314\224\211\010" + "\044\342\123\027\076\270\202\210\131\321\233\166\205\037\034\332" + "\137\172\356\037\277\173\164\162\136\002\156\276\013\326\151\347" + "\236\172\256\020\364\165\305\356\225\014\064\126\227\341\030\001" + "\236\306\053\206\353\050\155\343\125\070\235\020\000\255\301\012" + "\264\034\232\030\122\072\013\046\146\200\010\244\030\344\233\053" + "\046\355\127\210\001\027\222\162\345\015\142\270\164\271\050\312" + "\163\051\221\355\206\225\112\221\064\365\257\125\335\212\203\162" + "\241\300\225\334\061\144\360\226\352\112\275\240\062\346\021\155" + "\037\311\037\154\236\346\123\250\321\000\130\010\241\357\123\170" + "\037\000\204\010\210\360\314\217\046\100\137\047\010\203\070\130" + "\107\257\332\065\101\061\200\111\101\140\200\230\036\125\045\361" + "\360\053\037\366\355\175\341\156\070\221\262\132\376\362\361\323" + "\267\102\250\073\025\253\013\101\112\207\220\276\123\235\207\000" + "\337\024\261\002\134\207\311\161\135\260\033\261\377\336\163\336" + "\210\360\273\113\140\025\230\043\242\300\151\107\106\213\236\010" + "\126\221\266\034\225\241\274\323\203\242\323\115\066\067\200\024" + "\223\151\114\163\112\016\162\306\074\006\051\112\101\010\346\001" + "\012\317\070\262\320\113\021\034\005\233\000\075\023\352\247\347" + "\172\111\121\233\040\241\137\127\020\230\004\261\141\022\264\337" + "\010\235\364\174\004\350\013\314\172\011\224\212\104\362\065\227" + "\371\107\377\365\272\177\335\021\020\360\337\236\071\363\166\327" + "\165\276\317\314\011\124\111\304\364\300\067\031\301\167\025\154" + "\163\010\352\362\301\163\035\105\216\255\340\330\052\320\053\035" + "\344\301\137\013\010\154\277\067\112\374\125\022\342\210\071\242" + "\350\310\211\222\356\175\321\334\305\365\002\172\153\040\050\214" + "\152\175\273\257\001\014\375\200\247\331\336\065\017\160\337\007" + "\220\247\351\206\051\130\170\304\004\244\171\310\372\165\370\230" + "\123\215\215\134\124\115\220\020\266\140\361\375\277\270\166\327" + "\337\323\367\236\076\157\225\113\371\247\000\356\234\023\374\360" + "\052\205\367\103\002\242\116\066\170\226\001\166\231\154\333\045" + "\307\126\120\056\364\214\047\163\340\006\331\233\043\366\314\022" + "\010\332\024\205\004\204\016\074\234\302\256\106\334\173\061\357" + "\357\026\370\332\257\011\240\200\000\012\000\327\217\373\141\247" + "\357\200\265\375\047\010\001\066\054\301\122\112\210\150\150\032" + "\061\121\001\330\301\061\130\275\231\025\263\125\023\240\105\344" + "\135\207\277\150\024\013\345\346\144\043\032\153\305\165\265\103" + "\357\230\017\216\027\346\310\065\017\045\226\004\141\012\130\014" + "\270\266\213\112\331\205\143\253\340\176\260\354\053\374\167\004" + "\004\303\137\226\045\275\047\201\301\360\362\073\317\237\104\173" + "\033\073\367\302\010\157\041\202\204\137\074\210\170\302\162\176" + "\131\241\223\054\030\246\010\076\176\013\321\162\101\303\261\160" + "\304\337\300\021\054\121\373\157\126\263\177\221\176\246\015\145" + "\266\031\175\357\035\032\332\170\146\327\164\163\207\231\252\316" + "\102\253\343\157\101\161\320\331\137\274\206\014\156\204\333\171" + "\264\023\366\126\303\100\000\244\220\260\022\006\134\127\241\122" + "\162\141\127\024\224\122\272\273\361\205\065\370\053\364\104\014" + "\126\221\267\246\120\307\030\221\227\363\064\077\030\237\076\346" + "\125\114\221\277\317\207\164\033\102\010\230\011\001\063\041\041" + "\205\336\030\243\003\043\157\323\227\027\351\304\260\013\274\030" + "\001\120\341\006\263\260\351\030\166\325\073\125\210\010\305\234" + "\133\076\274\373\350\224\334\365\142\271\170\312\171\054\004\031" + "\227\144\262\111\051\244\027\132\011\002\021\221\020\204\340\103" + "\372\032\351\143\160\056\010\040\101\344\077\343\337\023\301\167" + "\220\040\002\244\040\101\040\041\004\031\011\011\063\041\111\112" + "\351\073\142\015\217\106\214\102\254\164\035\341\135\362\256\170" + "\175\020\101\137\064\020\301\071\042\327\375\241\245\313\013\042" + "\230\011\201\104\306\104\052\143\300\064\045\204\324\357\110\321" + "\167\215\274\273\337\226\220\244\263\142\341\275\067\205\165\372" + "\355\305\352\021\341\167\022\002\140\201\211\221\242\173\170\377" + "\330\175\367\346\306\037\326\334\334\005\161\263\150\274\061\335" + "\230\374\213\366\316\206\356\366\236\054\014\123\351\051\204\270" + "\002\305\374\202\077\223\251\257\063\001\072\300\216\226\323\216" + "\067\274\026\070\137\150\345\141\322\321\242\143\063\225\113\016" + "\125\312\256\316\025\264\237\210\076\007\020\010\312\123\136\012" + "\007\275\102\240\161\034\156\126\041\016\042\041\077\112\220\304" + "\126\102\162\042\151\262\060\374\173\136\016\040\264\343\215\206" + "\254\236\121\364\222\062\300\017\214\375\015\144\176\210\213\300" + "\220\206\366\076\152\074\004\111\266\113\300\310\300\024\306\206" + "\147\016\025\162\245\037\355\037\230\171\144\307\075\260\143\000" + "\137\373\115\044\062\055\215\327\110\123\334\326\336\335\164\161" + "\107\167\143\242\241\331\002\310\015\052\214\073\346\050\001\241" + "\243\324\337\211\174\222\130\205\001\233\257\355\314\272\257\141" + "\064\244\337\133\271\240\112\311\101\271\354\222\153\053\135\106" + "\227\045\223\100\046\110\030\265\214\052\364\324\244\315\120\025" + "\046\146\335\003\006\010\206\045\330\112\032\154\131\022\044\065" + "\350\136\277\331\217\170\230\310\233\204\323\075\362\103\111\022" + "\024\234\173\275\016\265\062\112\214\277\355\311\117\350\000\260" + "\222\310\115\224\061\162\154\272\060\066\234\173\321\121\316\203" + "\007\267\347\137\334\261\003\166\130\105\134\010\000\365\366\302" + "\074\343\246\314\226\144\203\161\153\246\051\371\205\356\065\315" + "\135\055\235\151\062\054\200\071\064\326\034\213\210\302\050\110" + "\067\216\220\000\057\236\327\141\254\316\007\374\345\310\020\174" + "\104\046\200\365\065\307\166\141\027\035\201\212\053\014\300\233" + "\167\342\170\157\165\371\340\134\220\366\337\066\101\261\145\050" + "\063\151\260\064\105\100\106\144\032\042\000\317\213\146\252\256" + "\105\102\327\150\270\031\215\210\374\156\170\004\220\127\310\056" + "\203\307\007\363\152\350\330\344\221\374\124\371\361\142\136\075" + "\262\375\205\334\136\354\210\315\013\325\047\040\362\021\237\272" + "\071\323\332\323\053\256\155\150\064\157\153\353\312\176\142\325" + "\051\315\224\156\064\240\340\204\004\350\052\075\300\343\041\243" + "\017\046\105\354\274\067\227\343\205\237\114\172\317\020\105\315" + "\016\111\100\230\140\041\211\310\165\230\312\105\007\345\202\015" + "\065\353\167\101\361\110\101\112\102\042\155\040\221\064\040\044" + "\261\315\340\012\310\165\010\156\020\117\105\023\061\362\007\041" + "\263\360\267\237\104\010\010\263\344\310\250\101\114\135\100\040" + "\026\060\061\063\131\301\300\301\011\065\066\222\173\075\077\155" + "\377\374\360\373\063\277\176\347\051\114\171\235\254\265\064\071" + "\077\001\221\217\274\342\117\122\147\147\073\315\073\332\073\063" + "\227\257\132\327\332\332\326\235\202\220\212\124\270\047\334\003" + "\337\073\052\210\140\157\220\316\150\211\174\240\103\215\366\342" + "\120\042\301\054\044\303\060\240\263\174\216\274\042\274\212\355" + "\212\202\135\161\341\072\052\334\101\050\164\010\151\132\122\207" + "\220\325\057\105\140\305\200\115\344\124\300\056\023\051\117\015" + "\164\302\005\341\005\272\036\350\204\010\111\376\176\241\131\232" + "\317\002\002\116\205\060\072\124\340\143\007\307\207\046\207\013" + "\317\216\035\051\075\370\362\375\166\077\146\057\125\062\226\110" + "\000\041\276\010\143\234\173\255\325\275\372\064\163\133\163\147" + "\352\053\135\153\232\067\166\255\315\032\351\106\011\305\056\005" + "\111\231\007\264\336\156\022\072\336\050\001\236\157\040\311\154" + "\030\014\051\353\376\020\260\266\321\347\100\031\051\166\165\116" + "\041\260\003\162\053\004\207\005\034\206\237\200\105\166\011\107" + "\247\245\147\021\100\114\054\120\230\126\074\160\170\262\062\174" + "\144\252\157\174\250\370\320\376\267\335\027\372\136\055\217\102" + "\273\242\172\153\303\013\046\000\125\340\373\144\104\127\304\144" + "\363\052\244\316\276\052\165\176\307\032\363\306\256\325\115\237" + "\357\071\245\325\154\135\225\206\213\212\066\071\112\257\133\370" + "\023\153\100\220\041\223\140\110\251\330\224\314\122\040\360\003" + "\065\100\136\274\324\361\321\263\353\046\162\053\304\216\053\104" + "\205\005\124\150\363\341\115\003\052\370\331\061\210\130\052\013" + "\303\307\162\074\160\160\274\070\164\170\372\231\241\103\225\137" + "\275\373\313\362\173\245\122\260\020\123\157\145\254\032\374\071" + "\011\360\217\165\127\304\020\041\301\373\030\353\317\063\273\267" + "\134\224\270\241\155\125\342\252\165\275\235\353\273\326\064\122" + "\062\115\244\330\211\256\005\010\341\262\151\050\230\222\365\037" + "\336\343\320\167\254\250\324\043\305\267\363\256\200\355\010\252" + "\270\102\157\362\363\273\044\204\311\305\234\313\103\207\246\371" + "\100\377\360\236\361\201\362\323\273\136\054\074\065\320\207\161" + "\304\027\346\175\260\243\043\200\261\214\004\370\243\041\012\276" + "\177\064\262\011\044\262\006\122\253\126\045\133\332\267\312\117" + "\065\156\062\257\352\130\333\164\346\332\115\155\251\246\026\113" + "\112\070\011\251\224\031\072\343\332\262\022\104\054\164\104\020" + "\201\025\221\353\112\121\161\330\250\114\214\226\324\341\275\243" + "\063\203\207\246\337\076\326\127\176\262\357\325\322\173\323\143" + "\230\301\354\235\021\321\005\371\025\131\023\216\232\240\330\110" + "\110\001\146\066\011\063\153\040\231\066\314\244\041\015\313\121" + "\266\231\066\145\346\306\263\214\133\345\132\272\165\244\067\223" + "\152\332\330\112\075\247\064\201\114\027\376\266\343\225\326\372" + "\132\062\027\031\002\022\166\111\340\330\201\011\344\367\216\253" + "\346\175\245\221\375\375\366\217\037\175\267\364\162\331\105\311" + "\005\312\266\215\112\045\116\200\133\343\243\152\174\200\105\022" + "\120\053\022\212\221\220\321\340\133\315\126\042\221\064\330\254" + "\050\066\277\320\141\364\136\324\052\156\354\260\304\027\015\102" + "\013\203\311\045\302\241\066\240\157\265\000\116\157\103\327\206" + "\026\144\333\054\050\162\342\223\113\047\130\264\163\045\220\062" + "\060\071\134\306\320\276\161\030\175\023\330\162\224\261\172\022" + "\020\314\040\046\316\273\274\163\157\336\175\364\147\207\052\317" + "\274\074\341\214\101\023\120\275\061\253\226\346\107\267\246\004" + "\321\023\226\100\100\224\210\300\364\144\062\060\232\025\314\363" + "\333\254\226\077\350\266\056\133\233\244\133\223\202\266\012\342" + "\124\055\063\243\004\060\236\046\354\356\026\030\351\115\243\355" + "\324\166\264\367\064\100\046\302\121\161\242\204\040\341\024\011" + "\303\107\162\230\332\063\212\356\275\105\154\032\002\262\105\075" + "\033\253\205\043\100\060\073\214\201\011\233\237\374\227\121\373" + "\341\377\335\137\356\233\324\177\107\250\336\276\240\145\335\031" + "\067\053\047\150\004\344\177\350\065\327\135\332\235\374\132\243" + "\024\067\231\304\033\170\036\163\253\247\375\001\027\002\005\023" + "\070\324\306\330\277\316\200\171\132\053\126\157\150\103\246\111" + "\300\305\274\177\337\342\270\104\302\102\156\314\306\221\375\143" + "\020\377\072\216\215\207\025\326\115\000\226\267\110\030\175\201" + "\060\061\206\037\231\172\357\201\122\321\305\253\003\045\176\340" + "\057\167\346\236\331\135\104\011\365\267\046\036\367\336\320\030" + "\011\067\167\043\363\365\215\015\227\265\230\306\327\023\202\257" + "\045\100\316\005\174\330\155\037\374\140\047\113\160\157\244\221" + "\321\327\305\310\365\066\242\353\264\116\264\255\112\101\130\313" + "\067\052\010\002\116\111\140\364\130\001\043\273\006\321\266\257" + "\210\055\103\204\326\202\077\177\023\355\145\374\250\323\202\130" + "\342\033\055\313\016\150\140\306\341\173\077\234\264\037\371\326" + "\007\205\176\204\116\271\136\004\024\175\365\071\011\000\042\300" + "\337\267\065\273\166\135\126\176\045\055\360\107\002\334\013\275" + "\027\264\246\204\255\120\244\145\362\172\025\137\036\212\366\250" + "\150\001\373\332\031\107\116\061\221\332\334\212\236\115\255\110" + "\066\000\114\056\020\173\152\041\242\155\173\141\112\341\150\377" + "\030\234\075\343\070\345\220\203\365\343\002\111\273\372\105\071" + "\162\136\173\024\324\043\041\122\162\252\242\360\322\264\343\334" + "\363\370\376\334\157\177\162\024\063\130\206\337\007\310\347\077" + "\235\335\232\115\310\077\023\204\057\022\243\255\126\323\325\265" + "\372\140\003\200\212\220\200\052\360\143\075\211\224\161\211\061" + "\224\145\354\136\305\050\236\326\204\236\115\035\350\130\235\206" + "\113\145\314\107\004\201\100\052\201\241\103\063\030\330\073\202" + "\246\276\034\066\017\022\072\146\342\277\161\014\137\164\056\355" + "\017\011\212\370\202\232\345\042\017\050\305\330\151\263\370\331" + "\276\174\351\247\137\175\075\077\206\305\022\360\233\317\065\067" + "\145\015\363\113\006\251\177\013\360\205\363\231\030\157\235\075" + "\246\355\265\132\253\245\077\263\172\124\045\171\013\330\323\341" + "\342\350\206\004\332\316\352\106\173\117\006\251\006\011\220\012" + "\114\024\101\057\164\344\247\034\214\034\235\301\324\007\003\070" + "\345\240\203\336\121\211\204\123\013\320\205\150\176\330\303\230" + "\135\216\314\116\315\065\042\010\140\046\052\052\246\107\154\227" + "\377\357\223\203\143\257\334\275\053\160\160\265\011\170\353\312" + "\226\165\226\224\177\004\306\067\010\363\073\125\100\153\270\336" + "\307\131\017\364\270\104\137\171\256\321\120\175\275\042\201\303" + "\315\012\207\073\201\134\207\011\253\045\015\063\145\200\031\160" + "\012\025\124\046\112\150\032\266\161\312\010\260\172\112\300\364" + "\047\352\042\365\324\002\065\172\175\056\023\124\175\237\310\237" + "\235\236\137\210\120\001\350\135\046\361\017\005\033\277\274\350" + "\327\303\103\261\072\377\376\074\230\227\166\165\176\123\060\337" + "\311\212\333\027\120\147\114\264\267\041\070\034\232\234\352\373" + "\261\163\366\317\353\217\210\132\327\374\322\266\144\344\055\175" + "\004\003\226\113\310\124\010\106\225\317\256\125\173\000\042\315" + "\056\267\020\002\004\000\101\034\070\307\305\210\067\052\006\101" + "\364\077\077\074\070\374\343\133\166\241\102\067\003\362\256\153" + "\273\376\207\001\365\255\271\246\010\026\052\076\021\016\042\233" + "\162\252\312\324\162\302\265\277\057\245\073\263\065\266\372\173" + "\355\121\341\047\146\263\315\023\221\077\007\303\163\375\035\305" + "\005\013\021\261\042\172\340\347\007\206\376\230\376\371\362\236" + "\055\347\244\334\327\300\334\272\014\165\007\242\000\070\114\260" + "\021\154\216\006\060\277\331\341\132\027\027\053\124\233\272\172" + "\316\263\246\137\040\255\355\046\161\060\035\274\254\102\124\231" + "\140\134\146\034\050\242\375\354\264\110\032\264\274\231\250\200" + "\216\123\023\000\134\006\052\014\330\125\123\375\214\272\221\304" + "\262\110\075\240\343\347\125\376\200\010\046\351\137\275\013\177" + "\035\165\005\104\221\060\007\012\334\142\374\164\327\330\360\271" + "\227\164\035\136\157\072\133\004\257\314\164\200\044\300\002\240" + "\300\050\053\102\205\375\077\025\060\173\052\310\177\335\372\206" + "\244\236\314\155\274\250\352\002\105\316\310\353\243\111\132\343" + "\105\215\122\313\051\114\002\003\216\071\276\175\260\060\050\107" + "\313\156\312\224\346\241\266\114\342\302\106\113\144\055\322\033" + "\211\274\335\067\313\372\021\104\260\004\220\024\336\057\126\340" + "\157\125\233\135\066\276\277\147\041\237\171\332\217\374\047\374" + "\043\021\054\101\110\111\040\045\064\001\142\276\172\226\372\021" + "\004\026\022\171\062\261\327\066\046\136\035\257\174\357\207\357" + "\016\275\106\000\332\000\264\136\334\221\331\364\007\275\315\377" + "\146\163\326\270\246\307\342\154\273\144\350\021\261\262\263\225" + "\016\003\145\105\050\251\271\043\240\371\144\076\135\215\336\227" + "\004\044\004\140\021\103\256\214\222\307\132\166\111\140\304\225" + "\070\146\323\150\337\264\375\364\013\207\247\036\172\372\160\156" + "\047\200\011\202\376\363\303\031\350\337\002\144\127\047\215\266" + "\333\066\267\134\171\126\113\342\372\215\031\171\172\227\305\106" + "\206\324\212\117\033\063\200\262\002\112\012\361\277\306\262\004" + "\251\347\200\115\241\065\335\132\161\320\001\220\100\216\045\006" + "\035\121\331\227\167\337\177\157\264\364\330\375\037\015\275\060" + "\341\140\012\372\037\213\310\001\310\373\241\255\011\355\057\063" + "\000\322\000\122\055\006\232\256\136\333\164\306\205\135\251\353" + "\117\155\064\077\273\066\055\262\055\222\111\242\216\252\056\223" + "\060\364\250\050\171\144\324\374\175\130\035\251\205\253\257\355" + "\111\241\317\127\014\173\317\244\072\044\060\356\112\076\134\306" + "\330\356\151\373\371\227\216\346\236\174\366\350\144\137\321\306" + "\014\200\074\200\002\200\042\200\022\020\356\214\253\046\042\001" + "\217\010\000\251\363\333\254\265\333\326\064\176\376\314\226\304" + "\165\033\062\346\206\325\111\201\004\226\062\101\266\070\161\131" + "\217\212\202\213\005\377\226\330\177\041\223\200\224\324\340\317" + "\361\147\334\226\107\110\240\010\211\143\025\302\276\274\373\321" + "\316\361\322\343\333\017\116\274\260\153\274\074\004\015\166\001" + "\032\360\022\364\032\202\277\230\123\123\041\374\105\027\013\332" + "\074\045\021\222\221\374\303\115\331\213\266\266\133\327\237\226" + "\115\136\264\056\143\064\264\232\004\301\053\377\257\101\151\042" + "\030\225\252\121\021\215\156\004\000\113\000\031\111\250\261\075" + "\150\231\205\340\012\201\161\107\340\140\211\047\373\046\053\257" + "\374\166\070\367\313\207\372\247\336\207\006\075\372\051\043\004" + "\135\305\153\251\057\301\202\073\102\062\122\000\322\046\220\071" + "\257\323\132\173\165\117\372\332\323\233\122\333\066\144\315\065" + "\075\111\103\046\116\200\257\120\254\175\204\303\034\020\041\010" + "\060\211\140\320\211\321\366\022\004\216\225\341\354\317\273\373" + "\167\115\224\237\172\342\340\324\163\157\217\026\216\042\064\057" + "\005\150\320\053\010\327\007\152\306\370\013\355\156\224\210\004" + "\074\323\004\040\335\235\104\313\365\153\032\057\070\267\055\361" + "\245\055\115\211\363\116\151\114\030\315\046\120\143\017\341\357" + "\266\110\211\061\233\160\250\250\052\173\246\052\257\276\061\122" + "\170\374\261\275\343\073\046\034\114\103\003\356\233\031\037\370" + "\350\337\212\250\053\113\230\117\202\204\366\025\026\102\042\122" + "\000\322\237\351\260\326\177\276\053\171\375\231\255\251\155\275" + "\315\251\356\125\151\203\054\254\374\250\130\061\041\102\011\022" + "\003\145\305\173\246\355\103\037\115\224\236\376\325\241\251\047" + "\336\036\055\037\103\250\355\276\103\055\043\334\045\261\340\027" + "\136\352\200\365\211\060\020\072\356\300\151\237\232\061\072\266" + "\255\262\056\371\144\133\342\372\315\055\231\263\326\147\223\211" + "\254\001\235\127\174\334\271\040\100\221\300\224\113\174\160\306" + "\056\356\236\052\277\263\143\254\364\253\355\207\163\157\036\235" + "\161\306\021\152\173\324\266\107\227\041\027\333\334\161\113\324" + "\151\127\107\120\351\233\172\222\147\137\330\156\136\173\106\113" + "\152\133\157\153\046\333\223\261\040\324\311\335\216\122\123\210" + "\340\012\003\107\012\016\366\116\227\307\166\216\027\237\172\155" + "\070\377\364\123\107\112\273\061\333\266\327\165\252\213\156\366" + "\170\373\135\125\227\077\007\027\163\332\000\122\335\111\064\177" + "\165\155\352\232\323\233\022\327\236\321\331\170\372\206\154\322" + "\150\064\010\120\047\367\337\323\144\041\061\345\000\007\162\225" + "\312\207\343\371\367\167\115\224\267\377\264\177\372\327\071\007" + "\063\230\155\146\216\113\333\153\311\112\304\014\076\021\276\257" + "\360\235\166\022\100\272\305\100\366\212\016\363\214\113\273\222" + "\137\332\334\222\276\170\163\133\103\123\147\322\040\003\356\211" + "\063\117\104\260\041\060\130\164\170\317\104\161\254\157\242\364" + "\322\213\303\205\307\136\032\056\355\236\326\011\123\064\204\214" + "\306\355\313\076\067\263\342\101\033\342\116\073\232\127\244\317" + "\157\226\153\076\327\141\135\161\156\107\352\246\315\255\015\153" + "\067\266\244\051\265\222\116\233\004\146\230\260\157\262\310\175" + "\023\205\075\357\214\026\036\175\146\240\364\342\256\151\167\020" + "\265\023\246\105\073\325\105\167\151\245\052\256\041\325\276\042" + "\210\236\114\040\175\313\032\363\123\237\154\261\156\070\247\073" + "\173\161\157\113\103\246\053\145\150\137\161\334\102\160\204\304" + "\140\301\101\377\104\141\352\335\341\351\227\337\034\267\037\373" + "\305\221\222\237\060\105\247\006\252\103\310\025\227\023\111\200" + "\337\136\365\250\210\071\355\317\264\312\365\227\165\046\256\072" + "\263\055\165\365\031\235\331\065\153\033\223\042\275\204\004\217" + "\111\040\257\010\007\247\112\316\256\165\012\262\266\000\000\001" + "\105\111\104\101\124\221\351\003\273\046\112\117\076\073\130\172" + "\376\255\111\367\010\146\333\366\250\266\237\320\004\346\104\023" + "\120\335\166\324\151\047\020\061\117\335\006\232\256\133\155\135" + "\272\265\055\171\375\351\035\015\237\072\243\243\111\066\233\000" + "\334\171\234\266\064\060\122\166\361\321\350\114\145\327\350\364" + "\253\073\306\052\333\037\075\132\176\043\247\023\246\050\350\076" + "\360\053\142\333\027\052\047\223\200\250\104\107\205\117\204\037" + "\101\045\057\151\225\353\257\355\266\156\071\247\063\173\371\206" + "\326\114\107\107\312\102\306\020\060\275\171\207\212\142\344\155" + "\205\341\102\231\373\307\363\203\357\215\314\074\363\330\221\362" + "\303\357\345\334\001\304\265\275\210\370\316\346\223\036\013\177" + "\134\010\360\045\370\035\032\064\031\076\021\051\000\231\063\262" + "\350\274\244\305\332\332\333\150\234\327\234\060\327\047\044\065" + "\063\101\225\154\065\061\121\161\367\367\347\234\067\137\031\055" + "\277\267\047\217\021\304\201\257\266\355\037\233\171\222\217\033" + "\001\121\211\022\021\035\025\176\262\147\040\376\143\171\033\032" + "\344\022\342\116\165\131\022\246\225\222\217\063\001\276\124\373" + "\012\013\232\224\132\004\370\044\054\173\302\264\122\362\273\100" + "\200\057\276\237\210\376\110\044\272\211\242\372\007\022\037\153" + "\340\175\371\135\042\000\010\303\130\021\371\016\314\336\002\376" + "\073\001\076\000\374\177\163\346\365\065\257\277\063\072\000\000" + "\000\000\111\105\116\104\256\102\140\202\000\000\050\165\165\141" + "\171\051\141\160\160\055\151\143\157\156\137\066\064\056\160\156" + "\147\000\000\000\000\000\000\000\162\024\000\000\000\000\000\000" + "\211\120\116\107\015\012\032\012\000\000\000\015\111\110\104\122" + "\000\000\000\100\000\000\000\100\010\006\000\000\000\252\151\161" + "\336\000\000\001\167\151\103\103\120\163\122\107\102\040\142\165" + "\151\154\164\055\151\156\000\000\050\221\165\221\275\113\102\121" + "\030\306\177\152\121\224\021\121\103\110\203\203\105\203\102\024" + "\105\143\331\340\042\041\146\220\325\242\067\077\202\253\136\356" + "\125\102\132\203\226\006\241\041\152\351\153\350\077\250\065\150" + "\055\010\202\042\210\150\153\357\153\011\271\275\107\005\043\362" + "\134\316\175\177\074\347\074\057\357\175\056\070\303\272\226\263" + "\332\146\040\227\057\232\321\120\320\273\024\137\366\166\274\342" + "\302\103\037\223\220\320\054\143\066\022\011\323\162\175\335\343" + "\120\365\056\240\172\265\276\367\357\352\136\113\131\032\070\072" + "\205\247\064\303\054\012\313\064\204\067\212\206\342\035\341\001" + "\055\233\130\023\076\022\366\233\062\240\360\265\322\223\165\176" + "\121\234\251\363\207\142\063\026\235\003\247\352\351\315\374\342" + "\344\057\326\262\146\116\170\124\330\227\323\113\132\143\036\365" + "\045\356\124\176\161\101\252\107\366\020\026\121\102\004\361\222" + "\244\304\072\072\105\002\122\363\222\331\377\276\261\232\157\236" + "\202\170\064\171\033\224\061\305\221\041\053\136\277\250\045\351" + "\232\222\232\026\075\045\217\116\131\345\376\067\117\053\075\061" + "\136\357\356\016\102\373\263\155\277\017\103\307\056\124\053\266" + "\375\175\154\333\325\023\160\075\301\145\276\351\057\110\116\323" + "\237\242\127\232\232\357\020\172\267\340\374\252\251\045\367\340" + "\142\033\006\037\215\204\231\250\111\056\331\316\164\032\336\316" + "\240\047\016\375\267\320\265\122\317\252\161\316\351\003\304\066" + "\345\027\335\300\376\001\214\310\375\336\325\037\012\176\150\016" + "\106\067\223\257\000\000\000\011\160\110\131\163\000\000\013\022" + "\000\000\013\022\001\322\335\176\374\000\000\022\241\111\104\101" + "\124\170\234\355\133\151\220\135\305\165\376\276\323\367\355\263" + "\152\106\063\043\151\100\253\301\070\142\163\042\004\362\002\056" + "\003\306\330\262\015\102\162\311\021\266\313\361\237\124\122\261" + "\135\225\024\056\127\071\024\256\124\022\273\052\166\122\051\247" + "\234\024\161\031\011\247\042\066\131\140\220\261\361\012\001\214" + "\305\042\020\142\221\004\102\032\264\314\362\146\171\063\363\266" + "\173\373\344\107\337\373\266\171\063\322\150\373\223\234\252\073" + "\375\156\337\176\335\375\175\175\316\351\163\372\335\001\376\137" + "\376\157\013\317\367\200\231\157\074\321\033\107\342\066\265\274" + "\032\304\142\100\025\340\200\252\076\255\305\251\007\046\276\167" + "\123\366\174\316\347\274\021\320\365\315\377\131\243\026\133\240" + "\370\024\240\211\146\155\024\234\022\342\041\365\165\153\366\333" + "\037\174\365\174\314\353\234\022\320\171\307\356\166\057\121\272" + "\115\055\267\000\172\361\051\177\221\120\050\136\260\220\173\262" + "\343\331\107\360\257\067\027\317\325\034\317\011\001\135\337\174" + "\156\215\210\335\002\325\365\200\046\317\244\057\222\243\026\334" + "\136\016\270\155\374\357\326\276\175\266\346\130\351\377\154\165" + "\324\171\307\356\366\170\072\270\015\072\317\325\076\125\121\130" + "\100\237\042\260\365\370\276\265\217\343\176\006\147\243\333\063" + "\046\240\357\133\057\256\241\004\133\240\272\236\300\031\255\366" + "\251\212\052\216\053\371\343\300\267\077\036\272\353\252\343\147" + "\322\327\151\021\320\375\355\247\132\023\176\146\003\140\077\017" + "\340\275\263\066\324\232\217\252\363\032\213\244\326\127\064\155" + "\346\023\374\005\210\255\003\337\270\362\167\100\303\167\116\145" + "\234\371\064\356\377\307\227\057\065\320\317\053\364\063\200\146" + "\146\064\250\033\176\016\300\163\215\072\047\204\032\200\215\175" + "\220\157\213\332\173\375\174\141\373\300\135\353\116\171\053\075" + "\051\001\313\356\174\073\211\226\211\317\000\274\035\300\225\263" + "\066\234\153\205\347\271\372\165\322\250\011\047\173\246\132\244" + "\360\021\042\330\366\326\137\137\371\207\223\166\077\333\203\125" + "\337\171\145\245\306\370\005\052\066\132\240\175\326\036\232\202" + "\153\122\247\247\141\156\154\246\017\115\100\317\102\022\301\175" + "\020\335\072\061\072\364\320\320\135\037\231\154\336\246\126\356" + "\274\123\056\131\370\247\037\015\202\340\113\012\176\010\120\231" + "\361\015\215\212\052\110\011\173\152\264\363\372\373\371\152\101" + "\025\024\201\031\040\111\252\155\106\017\330\214\352\111\220\017" + "\051\374\255\007\376\152\365\276\372\366\000\160\237\232\325\043" + "\007\076\027\004\372\347\252\272\154\156\117\062\023\210\102\011" + "\165\104\150\015\251\332\330\076\042\344\144\256\212\150\000\314" + "\112\047\004\324\326\264\143\123\307\067\213\106\220\052\340\156" + "\361\344\236\275\013\126\354\304\046\006\274\346\273\107\122\271" + "\164\361\277\254\142\355\111\246\325\134\335\303\072\033\002\225" + "\112\165\104\104\303\167\124\071\067\003\234\001\276\122\035\176" + "\321\302\001\257\164\334\314\004\346\362\035\000\014\361\142\276" + "\244\233\275\351\164\171\003\104\326\316\324\365\332\051\104\143" + "\325\142\161\165\021\116\121\105\150\007\141\275\053\031\325\105" + "\323\141\055\071\015\343\124\046\116\326\150\201\373\023\025\000" + "\204\124\100\031\201\164\334\314\000\114\220\072\033\013\012\134" + "\331\226\346\146\317\346\362\271\130\147\006\226\315\115\224\012" + "\150\343\212\021\056\211\103\063\073\227\032\125\017\127\133\031" + "\076\123\350\154\126\132\351\233\341\103\206\320\010\072\040\041" + "\340\010\263\050\000\326\304\013\356\171\143\364\060\213\046\010" + "\024\245\354\264\357\275\062\071\370\350\373\212\135\217\304\333" + "\323\353\275\326\004\154\343\334\032\035\133\105\245\243\271\150" + "\265\035\305\251\204\123\124\002\254\022\124\351\347\144\316\060" + "\122\266\352\212\223\004\040\212\012\067\032\062\031\265\241\202" + "\214\350\153\240\240\176\070\201\302\317\025\264\060\066\265\203" + "\276\267\255\362\164\371\035\277\277\074\221\212\175\076\325\221" + "\371\164\254\043\225\126\343\315\272\305\105\043\250\052\005\265" + "\132\240\041\150\133\253\001\165\237\111\337\023\011\142\206\326" + "\040\322\133\205\132\065\276\125\257\244\152\202\032\002\052\115" + "\102\323\000\053\306\104\045\131\161\210\144\215\117\230\111\202" + "\322\367\121\032\235\312\025\306\362\017\026\312\205\255\207\376" + "\141\335\353\065\164\127\233\056\373\342\216\166\323\333\267\061" + "\323\335\266\045\331\226\276\310\264\246\140\055\102\027\037\331" + "\167\315\147\325\220\343\352\175\144\363\012\045\241\004\254\030" + "\361\143\102\077\106\250\231\111\152\165\046\252\342\007\326\053" + "\133\353\225\101\052\341\100\222\124\104\040\035\031\252\121\175" + "\004\262\006\060\054\040\242\360\047\362\050\216\117\276\072\225" + "\235\334\072\076\364\332\216\341\037\376\131\024\017\150\315\260" + "\265\123\000\103\270\262\354\057\037\131\227\356\352\333\222\131" + "\330\161\143\262\253\065\026\104\243\325\155\147\112\205\323\004" + "\033\201\017\333\020\276\147\304\217\223\101\154\276\161\000\051" + "\066\260\246\154\255\127\262\052\066\042\000\240\212\324\220\342" + "\140\150\344\064\011\100\202\000\205\154\256\060\065\074\376\350" + "\364\360\211\173\337\371\376\372\347\303\331\006\250\330\354\354" + "\004\110\170\021\200\001\140\172\076\361\365\236\226\213\076\272" + "\251\143\311\242\115\251\356\216\305\222\211\323\152\110\004\001" + "\130\007\334\361\141\105\350\307\105\312\161\302\232\371\007\100" + "\063\250\120\125\006\026\211\242\125\123\166\352\115\025\106\173" + "\223\033\126\204\032\344\362\310\017\117\034\032\077\072\260\075" + "\373\354\316\207\306\236\375\301\110\010\072\200\333\075\155\010" + "\074\272\146\020\020\135\021\011\246\356\112\247\023\027\334\372" + "\057\327\266\257\370\243\215\055\213\173\326\045\273\332\044\210" + "\034\025\174\217\054\047\204\176\234\352\264\342\314\200\067\320" + "\000\252\222\326\132\257\154\021\053\002\046\000\250\106\055\362" + "\043\223\345\334\300\300\123\331\003\057\335\177\174\373\127\237" + "\006\120\002\340\207\300\375\020\170\104\302\051\021\140\302\322" + "\253\041\300\003\020\013\313\170\373\373\067\137\330\273\356\346" + "\317\366\134\274\154\123\262\273\067\055\051\317\263\341\306\020" + "\156\235\147\225\000\240\152\357\042\324\140\252\344\347\007\217" + "\117\014\276\276\377\201\354\356\373\166\144\137\376\371\000\112" + "\050\002\050\206\240\153\257\132\015\250\045\001\336\134\343\315" + "\162\311\007\066\266\057\177\317\232\137\337\232\351\372\355\015" + "\012\057\030\034\272\252\070\246\037\207\355\370\023\223\354\150" + "\145\031\254\354\346\263\312\314\260\345\244\022\123\105\176\164" + "\102\071\376\214\277\000\273\112\335\231\347\105\057\017\076\064" + "\266\050\230\330\035\244\166\036\170\061\077\210\252\371\066\136" + "\263\202\154\004\334\250\376\036\000\263\140\011\122\067\377\105" + "\337\015\035\275\336\106\057\046\177\354\366\171\320\052\250\126" + "\251\001\070\121\134\154\006\363\327\047\112\055\037\217\045\026" + "\056\042\022\161\064\113\130\146\215\204\233\114\123\010\240\120" + "\104\161\350\210\046\246\177\126\352\115\075\121\112\307\116\004" + "\042\120\220\052\002\045\001\122\212\205\111\373\253\143\373\213" + "\367\357\374\336\360\363\000\312\250\327\202\146\146\060\053\001" + "\046\054\275\365\137\133\160\341\322\325\231\317\046\122\262\201" + "\104\267\252\072\007\017\113\125\300\206\340\155\240\124\005\255" + "\005\003\233\220\023\123\127\307\246\342\237\364\244\353\162\223" + "\350\154\201\137\023\077\315\000\254\015\367\000\074\050\012\331" + "\011\150\366\371\240\055\170\314\357\311\074\127\066\364\025\242" + "\112\122\111\027\162\211\100\105\250\024\227\216\011\241\066\320" + "\067\247\047\354\366\247\166\216\354\334\373\363\374\070\252\146" + "\160\212\004\364\043\366\325\273\226\136\027\157\341\355\024\134" + "\013\300\100\135\014\157\235\241\323\132\113\153\101\253\012\004" + "\241\153\126\245\006\024\205\122\255\022\000\047\112\053\314\160" + "\371\106\317\266\177\114\122\075\075\014\274\330\314\054\021\000" + "\110\025\000\054\225\220\037\074\246\336\370\056\273\060\361\204" + "\337\232\070\034\100\251\064\320\060\330\161\140\111\025\102\041" + "\021\011\122\361\017\141\004\255\000\247\202\262\076\074\066\144" + "\357\275\373\053\207\367\242\272\015\106\044\324\023\360\265\273" + "\373\073\123\013\222\233\101\334\116\332\245\100\065\161\121\005" + "\002\337\322\372\112\013\000\326\206\352\017\102\101\255\134\352" + "\056\127\057\121\275\157\323\034\314\177\310\344\323\237\221\130" + "\327\105\222\150\113\103\105\134\347\066\100\141\174\032\376\310" + "\076\315\024\166\004\075\251\147\002\143\012\056\171\020\250\220" + "\156\265\011\205\320\106\032\100\251\324\071\266\011\025\103\245" + "\010\104\102\200\014\127\333\362\205\300\307\266\275\257\116\077" + "\362\323\273\216\345\353\010\270\363\361\225\075\050\231\257\001" + "\272\111\025\251\312\352\324\146\156\141\031\004\226\066\120\224" + "\175\113\033\200\260\032\205\145\041\150\245\252\126\200\243\266" + "\164\211\045\307\213\357\345\170\351\275\142\115\057\240\012\143" + "\217\241\075\361\232\155\117\034\120\327\242\062\071\245\320\112" + "\250\356\044\303\025\247\222\260\024\050\101\245\241\032\017\060" + "\042\352\200\273\210\274\102\100\365\150\105\051\310\002\274\017" + "\261\340\007\167\175\354\340\040\277\375\330\145\375\005\026\037" + "\005\164\141\324\254\041\135\145\155\235\013\165\335\147\277\154" + "\131\052\006\316\376\055\242\225\027\327\266\242\005\264\156\072" + "\164\233\271\043\055\064\002\206\323\255\213\344\102\365\165\240" + "\005\052\200\302\300\012\034\001\221\006\030\217\352\171\106\115" + "\334\231\206\043\311\365\130\351\263\306\353\124\363\010\200\224" + "\154\251\314\133\274\222\370\067\030\303\205\265\326\120\311\060" + "\244\372\165\215\062\077\145\224\011\303\030\101\074\341\301\367" + "\025\345\222\217\162\061\160\221\277\002\124\302\122\001\013\212" + "\202\056\146\124\326\144\147\141\376\126\371\354\362\073\267\322" + "\356\106\252\311\234\320\245\276\064\100\054\146\020\113\010\050" + "\002\041\100\251\355\320\145\211\225\141\010\147\361\250\266\013" + "\145\101\312\310\047\275\303\007\307\336\350\137\336\206\170\112" + "\252\164\065\331\246\242\355\214\320\052\101\352\352\023\106\021" + "\113\044\240\151\313\142\061\100\251\020\300\372\012\261\204\065" + "\125\025\160\231\042\110\231\171\332\111\000\052\156\355\204\341" + "\024\302\173\022\060\061\101\042\151\020\213\233\220\230\360\230" + "\204\254\022\000\200\225\074\241\262\244\164\056\034\241\145\070" + "\011\312\304\221\103\331\303\346\205\307\162\107\226\134\156\107" + "\241\146\155\052\035\217\173\161\201\010\051\102\010\011\041\051" + "\044\304\040\254\003\051\102\043\004\205\116\302\122\214\040\346" + "\031\046\122\036\275\270\041\001\006\026\164\132\113\167\264\341" + "\066\155\032\222\036\011\343\226\026\040\101\211\000\271\322\010" + "\021\117\172\110\267\304\221\312\170\210\305\214\212\107\210\041" + "\104\004\142\010\032\201\021\206\237\001\021\120\014\041\024\210" + "\353\103\151\010\021\102\214\300\057\000\103\107\247\047\016\357" + "\037\376\247\037\176\145\350\236\212\076\136\177\007\332\273\122" + "\255\033\273\026\165\334\336\275\250\345\242\366\005\111\050\202" + "\212\222\126\102\333\320\323\023\002\347\361\335\075\200\106\373" + "\027\100\151\003\260\220\367\131\312\373\264\201\145\014\220\070" + "\041\246\306\346\302\175\111\213\012\133\006\255\030\152\042\345" + "\151\042\351\251\030\267\345\221\010\063\102\204\007\013\125\307" + "\310\212\253\145\325\201\126\117\207\024\060\030\033\316\143\344" + "\130\156\357\360\261\334\326\241\341\211\035\277\371\067\114\126" + "\300\325\150\041\001\230\365\177\323\262\156\101\157\146\113\157" + "\177\353\307\172\226\264\306\115\114\353\010\210\142\202\360\064" + "\330\201\255\354\276\052\041\061\022\266\245\020\342\131\065\050" + "\133\346\247\312\364\113\315\177\327\214\045\014\222\151\117\065" + "\346\331\042\064\120\322\202\250\333\005\024\352\266\105\161\365" + "\112\250\204\031\041\243\021\103\002\312\005\142\160\140\242\160" + "\174\140\342\321\221\023\223\333\166\175\067\377\074\352\363\201" + "\346\004\040\214\006\257\132\237\354\135\262\072\361\331\376\125" + "\235\033\373\056\150\135\322\272\040\116\265\266\272\053\270\300" + "\110\030\156\161\156\327\016\275\077\040\236\302\363\240\106\024" + "\165\356\047\010\024\345\122\000\033\270\045\062\206\210\305\005" + "\142\244\316\377\004\104\120\002\374\100\350\043\042\001\264\021" + "\120\326\152\000\302\070\000\242\243\043\105\234\070\062\161\350" + "\310\301\321\355\373\377\220\173\360\265\137\141\030\315\323\342" + "\071\103\341\152\056\220\101\374\272\315\251\353\226\135\334\261" + "\251\177\105\307\272\236\013\133\214\363\160\016\060\302\155\116" + "\055\104\124\215\261\032\363\024\136\145\043\102\123\277\072\253" + "\064\246\004\112\265\045\322\017\204\045\025\006\341\061\223\213" + "\031\304\035\224\250\057\172\342\160\316\077\162\140\364\167\357" + "\354\233\270\357\167\333\362\117\143\146\076\060\167\044\330\100" + "\200\300\045\102\121\112\034\003\020\173\337\007\274\245\027\257" + "\155\271\155\371\245\335\237\130\264\264\275\063\323\141\250\066" + "\020\011\064\356\005\210\123\353\217\274\346\003\174\066\002\052" + "\365\204\372\244\037\170\050\132\141\031\064\072\071\352\353\321" + "\267\306\206\016\274\074\362\310\336\047\247\166\036\176\311\077" + "\212\352\171\100\055\001\363\310\005\232\144\203\000\142\111\040" + "\321\337\022\317\144\022\332\042\111\323\172\365\072\263\171\361" + "\045\155\233\023\227\055\110\056\134\234\021\110\160\132\200\117" + "\046\063\064\042\060\030\174\067\027\344\137\032\235\170\145\337" + "\304\017\176\363\313\351\237\116\346\060\131\002\012\160\347\001" + "\145\234\101\066\130\347\007\042\002\322\100\142\111\173\042\265" + "\044\156\333\156\357\217\337\264\064\315\115\151\303\053\000\160" + "\064\015\034\270\320\303\324\232\156\164\255\352\100\262\205\320" + "\050\372\070\113\042\020\114\117\130\214\274\071\206\326\335\043" + "\130\165\044\100\153\001\240\242\064\352\333\137\277\070\356\337" + "\373\267\373\012\317\326\020\320\250\372\315\216\305\346\044\240" + "\162\042\324\006\170\137\177\137\352\075\357\357\214\175\261\335" + "\303\046\041\026\064\116\120\001\024\104\160\140\041\060\164\131" + "\033\222\227\165\242\173\161\006\112\377\214\200\323\172\030\034" + "\230\104\171\117\026\175\173\163\130\076\114\030\215\046\256\241" + "\312\272\262\154\361\372\211\222\156\273\373\255\334\366\135\203" + "\030\303\051\234\010\315\106\200\000\220\213\201\370\077\257\153" + "\373\104\107\234\137\216\011\076\242\015\336\074\232\202\363\052" + "\104\200\152\204\067\324\002\274\275\334\103\171\115\067\172\127" + "\265\043\236\122\314\370\205\151\066\320\040\212\123\300\340\376" + "\061\044\236\033\301\312\167\002\054\230\256\007\135\215\164\065" + "\074\002\252\073\150\230\314\133\074\160\170\052\270\173\313\356" + "\334\213\230\307\231\040\000\310\175\327\244\372\226\246\122\137" + "\216\121\277\014\240\177\046\150\124\100\127\313\352\024\152\313" + "\242\001\016\366\050\106\257\354\100\333\245\235\350\354\115\316" + "\252\025\124\017\303\107\363\230\176\071\213\256\075\343\130\071" + "\104\304\155\045\061\255\214\320\110\100\364\254\161\165\010\150" + "\240\170\256\244\374\217\237\034\315\336\377\235\067\060\075\047" + "\001\173\156\354\272\312\052\277\142\250\267\252\326\277\314\030" + "\001\165\024\022\321\001\150\025\160\375\032\064\373\174\264\115" + "\161\370\342\004\364\312\005\350\350\115\043\225\211\003\120\114" + "\347\312\030\073\061\005\157\167\026\313\016\226\320\233\253\202" + "\256\226\215\053\037\226\254\177\026\151\103\243\343\044\070\142" + "\301\173\212\026\377\276\366\227\303\373\353\010\330\173\123\327" + "\032\102\276\253\252\037\304\034\142\001\370\132\257\352\165\245" + "\242\146\215\146\156\201\321\175\041\246\070\336\152\221\113\270" + "\010\252\255\110\364\345\004\011\277\072\355\272\103\010\066\256" + "\172\265\254\325\012\201\302\020\063\300\327\021\101\130\005\237" + "\360\325\176\363\212\307\107\236\343\263\067\365\134\326\041\170" + "\126\125\123\163\201\157\004\342\053\121\126\242\046\061\154\132" + "\066\222\162\262\236\243\064\266\231\163\002\146\202\047\135\200" + "\142\346\371\202\030\051\245\202\265\037\365\212\126\156\024\243" + "\251\306\137\121\117\046\036\200\244\072\027\133\012\311\210\046" + "\246\132\235\250\236\144\105\032\246\125\375\313\106\320\132\167" + "\357\021\210\021\060\254\377\356\074\044\136\246\167\223\167\337" + "\221\322\236\057\255\110\027\073\044\110\234\116\334\146\000\044" + "\000\130\125\024\225\050\132\240\366\035\220\320\104\321\350\043" + "\352\245\306\146\147\321\000\300\235\023\044\010\304\253\277\206" + "\317\173\276\121\217\023\360\354\023\103\166\217\371\303\160\276" + "\120\144\354\325\216\114\142\125\332\063\075\151\103\032\126\316" + "\002\116\371\062\102\044\204\110\011\341\111\165\167\256\344\372" + "\247\170\111\223\317\161\041\062\006\310\030\042\156\334\130\363" + "\235\237\220\000\015\106\065\246\373\362\346\245\237\274\133\370" + "\326\337\277\170\374\161\302\275\336\332\011\240\153\303\362\266" + "\053\256\137\334\162\333\245\355\336\015\213\022\232\116\124\167" + "\213\323\022\137\201\174\000\024\354\314\135\141\116\107\025\136" + "\111\003\044\305\251\373\351\013\121\200\301\321\262\344\366\214" + "\225\177\266\353\160\356\201\307\016\217\357\005\220\005\060\026" + "\165\035\003\220\002\320\002\240\165\131\213\327\267\145\145\307" + "\372\265\075\311\133\126\244\315\212\116\117\121\071\010\074\015" + "\121\070\022\246\003\107\312\354\123\165\166\235\062\100\102\116" + "\137\301\135\147\202\154\040\170\053\257\257\077\063\124\174\350" + "\236\327\206\036\073\232\367\207\000\344\000\114\002\310\003\360" + "\033\307\210\114\072\015\240\025\100\333\226\225\055\127\137\327" + "\227\331\160\151\147\342\332\376\244\304\275\063\214\361\113\026" + "\310\133\240\024\204\347\115\160\216\054\056\104\132\200\330\134" + "\157\153\235\124\210\062\005\003\105\026\136\036\363\177\371\213" + "\167\047\036\270\377\340\330\013\000\046\340\200\117\303\145\212" + "\101\365\033\315\045\112\205\043\255\150\133\335\356\365\157\134" + "\336\172\313\325\013\063\237\136\331\352\055\356\210\361\214\264" + "\002\150\372\213\330\351\011\211\154\040\170\173\312\036\172\172" + "\160\172\347\177\037\034\331\371\306\230\177\014\016\370\044\134" + "\226\130\106\023\173\076\331\330\121\142\024\151\105\133\014\150" + "\377\302\212\314\207\077\274\070\263\341\322\316\344\065\375\231" + "\230\071\123\255\070\135\051\303\340\335\242\055\277\234\055\075" + "\371\353\143\123\017\376\350\315\321\147\000\214\303\255\366\024" + "\252\347\002\263\312\174\310\027\070\137\221\106\350\053\256\351" + "\066\053\076\325\337\272\341\232\336\314\047\127\266\047\273\333" + "\074\234\261\126\234\124\110\214\373\304\201\311\362\361\147\006" + "\247\036\176\360\255\334\216\027\262\305\303\250\256\166\036\156" + "\265\117\151\125\116\107\373\242\064\071\001\040\003\240\065\005" + "\054\370\322\362\344\365\327\366\267\335\272\272\053\375\376\376" + "\226\070\305\236\225\177\350\250\110\040\006\107\246\312\366\225" + "\154\361\367\277\075\226\173\360\077\337\314\375\246\354\126\173" + "\002\156\265\213\250\177\007\350\224\301\234\211\010\200\070\252" + "\132\321\166\303\102\163\311\315\027\264\154\130\333\327\366\361" + "\125\035\311\266\026\301\174\347\124\067\275\211\200\070\060\136" + "\310\076\163\074\367\350\303\357\114\075\370\344\110\351\000\352" + "\127\273\204\123\134\355\346\043\234\035\211\264\042\211\320\074" + "\172\074\164\177\156\171\362\346\217\364\167\334\262\272\053\175" + "\311\242\114\234\074\105\255\120\061\030\230\054\351\336\154\176" + "\317\257\006\306\037\332\172\150\372\347\023\145\144\121\265\355" + "\002\234\155\237\261\275\235\055\002\152\305\240\252\025\255\000" + "\332\076\335\027\273\342\306\013\132\156\133\333\327\172\375\105" + "\235\351\124\242\351\202\021\171\045\336\030\235\236\374\375\261" + "\211\237\355\032\230\176\140\327\211\322\076\324\157\141\145\324" + "\154\141\147\103\316\005\001\265\175\307\120\325\212\266\145\111" + "\364\335\276\042\163\313\007\226\264\257\357\317\304\227\145\142" + "\056\225\311\225\002\035\230\052\355\177\162\140\374\341\037\035" + "\232\332\171\254\200\041\124\325\074\072\343\073\047\336\365\134" + "\022\120\053\036\234\126\144\340\264\242\145\165\006\175\357\151" + "\217\055\121\013\335\227\053\037\171\163\012\203\160\200\153\267" + "\260\263\353\111\233\310\371\042\040\222\150\053\115\204\127\364" + "\033\202\017\324\275\342\166\336\002\213\363\115\100\064\146\355" + "\333\250\200\123\357\150\013\073\307\201\104\275\374\057\373\256" + "\012\113\267\065\007\137\000\000\000\000\111\105\116\104\256\102" + "\140\202\000\000\050\165\165\141\171\051\162\145\163\057\000\000" + "\006\000\000\000\151\143\157\156\163\057\000\000\002\000\000\000" + "\001\000\000\000\004\000\000\000\003\000\000\000" }; + +static GStaticResource static_resource = { gtk_resources_resource_data.data, sizeof (gtk_resources_resource_data.data) - 1 /* nul terminator */, NULL, NULL, NULL }; + +G_MODULE_EXPORT +GResource *gtk_resources_get_resource (void); +GResource *gtk_resources_get_resource (void) +{ + return g_static_resource_get_resource (&static_resource); +} +/* GLIB - Library of useful routines for C programming + * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald + * + * SPDX-License-Identifier: LGPL-2.1-or-later + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, see . + */ + +/* + * Modified by the GLib Team and others 1997-2000. See the AUTHORS + * file for a list of people on the GLib Team. See the ChangeLog + * files for a list of changes. These files are distributed with + * GLib at ftp://ftp.gtk.org/pub/gtk/. + */ + +#ifndef __G_CONSTRUCTOR_H__ +#define __G_CONSTRUCTOR_H__ + +/* + If G_HAS_CONSTRUCTORS is true then the compiler support *both* constructors and + destructors, in a usable way, including e.g. on library unload. If not you're on + your own. + + Some compilers need #pragma to handle this, which does not work with macros, + so the way you need to use this is (for constructors): + + #ifdef G_DEFINE_CONSTRUCTOR_NEEDS_PRAGMA + #pragma G_DEFINE_CONSTRUCTOR_PRAGMA_ARGS(my_constructor) + #endif + G_DEFINE_CONSTRUCTOR(my_constructor) + static void my_constructor(void) { + ... + } + +*/ + +#ifndef __GTK_DOC_IGNORE__ + +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) + +#define G_HAS_CONSTRUCTORS 1 + +#define G_DEFINE_CONSTRUCTOR(_func) static void __attribute__((constructor)) _func (void); +#define G_DEFINE_DESTRUCTOR(_func) static void __attribute__((destructor)) _func (void); + +#elif defined (_MSC_VER) && (_MSC_VER >= 1500) +/* Visual studio 2008 and later has _Pragma */ + +/* + * Only try to include gslist.h if not already included via glib.h, + * so that items using gconstructor.h outside of GLib (such as + * GResources) continue to build properly. + */ +#ifndef __G_LIB_H__ +#include "gslist.h" +#endif + +#include + +#define G_HAS_CONSTRUCTORS 1 + +/* We do some weird things to avoid the constructors being optimized + * away on VS2015 if WholeProgramOptimization is enabled. First we + * make a reference to the array from the wrapper to make sure its + * references. Then we use a pragma to make sure the wrapper function + * symbol is always included at the link stage. Also, the symbols + * need to be extern (but not dllexport), even though they are not + * really used from another object file. + */ + +/* We need to account for differences between the mangling of symbols + * for x86 and x64/ARM/ARM64 programs, as symbols on x86 are prefixed + * with an underscore but symbols on x64/ARM/ARM64 are not. + */ +#ifdef _M_IX86 +#define G_MSVC_SYMBOL_PREFIX "_" +#else +#define G_MSVC_SYMBOL_PREFIX "" +#endif + +#define G_DEFINE_CONSTRUCTOR(_func) G_MSVC_CTOR (_func, G_MSVC_SYMBOL_PREFIX) +#define G_DEFINE_DESTRUCTOR(_func) G_MSVC_DTOR (_func, G_MSVC_SYMBOL_PREFIX) + +#define G_MSVC_CTOR(_func,_sym_prefix) \ + static void _func(void); \ + extern int (* _array ## _func)(void); \ + int _func ## _wrapper(void) { _func(); g_slist_find (NULL, _array ## _func); return 0; } \ + __pragma(comment(linker,"/include:" _sym_prefix # _func "_wrapper")) \ + __pragma(section(".CRT$XCU",read)) \ + __declspec(allocate(".CRT$XCU")) int (* _array ## _func)(void) = _func ## _wrapper; + +#define G_MSVC_DTOR(_func,_sym_prefix) \ + static void _func(void); \ + extern int (* _array ## _func)(void); \ + int _func ## _constructor(void) { atexit (_func); g_slist_find (NULL, _array ## _func); return 0; } \ + __pragma(comment(linker,"/include:" _sym_prefix # _func "_constructor")) \ + __pragma(section(".CRT$XCU",read)) \ + __declspec(allocate(".CRT$XCU")) int (* _array ## _func)(void) = _func ## _constructor; + +#elif defined (_MSC_VER) + +#define G_HAS_CONSTRUCTORS 1 + +/* Pre Visual studio 2008 must use #pragma section */ +#define G_DEFINE_CONSTRUCTOR_NEEDS_PRAGMA 1 +#define G_DEFINE_DESTRUCTOR_NEEDS_PRAGMA 1 + +#define G_DEFINE_CONSTRUCTOR_PRAGMA_ARGS(_func) \ + section(".CRT$XCU",read) +#define G_DEFINE_CONSTRUCTOR(_func) \ + static void _func(void); \ + static int _func ## _wrapper(void) { _func(); return 0; } \ + __declspec(allocate(".CRT$XCU")) static int (*p)(void) = _func ## _wrapper; + +#define G_DEFINE_DESTRUCTOR_PRAGMA_ARGS(_func) \ + section(".CRT$XCU",read) +#define G_DEFINE_DESTRUCTOR(_func) \ + static void _func(void); \ + static int _func ## _constructor(void) { atexit (_func); return 0; } \ + __declspec(allocate(".CRT$XCU")) static int (* _array ## _func)(void) = _func ## _constructor; + +#elif defined(__SUNPRO_C) + +/* This is not tested, but i believe it should work, based on: + * http://opensource.apple.com/source/OpenSSL098/OpenSSL098-35/src/fips/fips_premain.c + */ + +#define G_HAS_CONSTRUCTORS 1 + +#define G_DEFINE_CONSTRUCTOR_NEEDS_PRAGMA 1 +#define G_DEFINE_DESTRUCTOR_NEEDS_PRAGMA 1 + +#define G_DEFINE_CONSTRUCTOR_PRAGMA_ARGS(_func) \ + init(_func) +#define G_DEFINE_CONSTRUCTOR(_func) \ + static void _func(void); + +#define G_DEFINE_DESTRUCTOR_PRAGMA_ARGS(_func) \ + fini(_func) +#define G_DEFINE_DESTRUCTOR(_func) \ + static void _func(void); + +#else + +/* constructors not supported for this compiler */ + +#endif + +#endif /* __GTK_DOC_IGNORE__ */ +#endif /* __G_CONSTRUCTOR_H__ */ + +#ifdef G_HAS_CONSTRUCTORS + +#ifdef G_DEFINE_CONSTRUCTOR_NEEDS_PRAGMA +#pragma G_DEFINE_CONSTRUCTOR_PRAGMA_ARGS(gtk_resourcesresource_constructor) +#endif +G_DEFINE_CONSTRUCTOR(gtk_resourcesresource_constructor) +#ifdef G_DEFINE_DESTRUCTOR_NEEDS_PRAGMA +#pragma G_DEFINE_DESTRUCTOR_PRAGMA_ARGS(gtk_resourcesresource_destructor) +#endif +G_DEFINE_DESTRUCTOR(gtk_resourcesresource_destructor) + +#else +#warning "Constructor not supported on this compiler, linking in resources will not work" +#endif + +static void gtk_resourcesresource_constructor (void) +{ + g_static_resource_init (&static_resource); +} + +static void gtk_resourcesresource_destructor (void) +{ + g_static_resource_fini (&static_resource); +} diff --git a/win-linux/gtk_resources.h b/win-linux/gtk_resources.h new file mode 100644 index 000000000..0ca37fd9c --- /dev/null +++ b/win-linux/gtk_resources.h @@ -0,0 +1,7 @@ +#ifndef __RESOURCE_gtk_resources_H__ +#define __RESOURCE_gtk_resources_H__ + +#include + +extern GResource *gtk_resources_get_resource (void); +#endif diff --git a/win-linux/gtk_resources.xml b/win-linux/gtk_resources.xml new file mode 100644 index 000000000..97799f6d8 --- /dev/null +++ b/win-linux/gtk_resources.xml @@ -0,0 +1,9 @@ + + + + res/icons/app-icon_64.png + res/icons/app-icon_96.png + res/icons/app-icon_128.png + res/icons/app-icon_256.png + + diff --git a/win-linux/res/icons/app-icon_128.png b/win-linux/res/icons/app-icon_128.png new file mode 100644 index 0000000000000000000000000000000000000000..8993ca1633d8142b8cb3b004f82a9c96457fe43d GIT binary patch literal 12480 zcmV;xFh9?UP)1*ges5NLU2!bMrXlw6l3Aw#T1taoY&V7G8=R7a(eJ(h|x|XxrW+0a@ zn$b|uyA)sccD&-kLm!in&@5v%5((3Cecj_w^)8@#wZ8Z7>RwA(8aO(Ir!>PX3d=Nv zH;RVh9pM2jn^+S*684)ipzyWQlXZSkoT>ANVlx(<1E=cg&HUozFV?bVPIy$8s5&JCl39$(6v&}s&UTg1H?Av7u~@A0gTA~ z-qjxperOIxHl0v!k}af4v)nZEC??yAZo-u{tCMP_AHS5No!%pkq*tIo{G$cV^z zzjwroh-~1O^h^3B{gQr3zocK%FCx*=Zopbn^JgCKH8biR%s2@iuZN%(Vt5S9gRq}j zy(BpQN4}j}#wL0DP+gb6oAiM?4Vu>eQfFDyVZk)~B{~)fvUad(x zj}pCR0nqYCPj(v_`$}T<>maN@tU?$sGUH#TGub0O;$k?cO~7S7+~E%eq&SjynLf zT=!&mmfb4>b)==eA!0xQ{D@N6F(uD@5ZBXj#of-0;M^q3CJ=7xHR(@<)jXcvTVauovWQ$6|o#m;u1Rbx(G)!B>L$DgoMjl$*2a z#6S^*okH-ALw|b4&yIF`LORL-U>dmLKi(~bx|*5R+><|QM0f@YJ4Ca6=fOWbvv_oy zaulfTe?HUE?AccWbPa$lt64TPAMtl0B3`AU=D_N9M){_p&mElr)0zTc!(aTz=`3(9 z0~ZsJIjlnTu3rOYH%vMxmftD{@FUMtHx0YH?^(+L(-H5$p6i}#&gY!VnE6^}I_0oM zhXLR)8D8%x27yq!Su2ut;^p?R5Ev)m>*dA5EyLHJePA_OQIC!o05*L7={E=i*8=>j z4CI&f@JeI}0H9XzY+Yhtsma8po<~D1BZ7j$!-9Cno+n><2)BJW3^1)K7*@5DHedH} zmYTaS0r*;0cwBZZSZZid4%gk2*+yJ+Rp?2%A!EpGU^T{X8Ew9U7C<)iH!kK)yWi`zB2J$UoahKCeOIB9TZ-{4HeJ~Ip zm|uaQo7|c4+xK37?ko-y1j}aHmcQHGXHfAPD85=T^&U>8tIPEId3f1wSPD@C4OxD2wWZ&#!@y<65V%3$2m%D?X(H^Hom|*C+~5kPx}CN8x;@!USNSpkA7}8Xe7Kf| z8xW$5$zSBsv0^&B9@}?I*z3r8y z@>kKezka$mo6mh*DZYl8JCF3(y`I#Ps%|3#fl8@U_K^w_)naOpp0*l*sW$wmVbieu zm;w=43i=^~b~MS^d!PE$=}vY18olj{yV`8e`;5nQ6)VoJe4NpM)Th3dN>8UcHhtAb z5i7UVL`awJ$Z-_a=?&Mq{4g{LKoZ6UaPy)|UwrlVPn@e%4FI@KyzPruzu8v!vd7fF zV#c%AC^M?1yA~sf(wVI4F>^Jwz!G*nSrZYXhRv)qm(buSfDS7lMF6CrF@S#m*-vl% zUYLe+ZaQ$n#6szAW@=k@sYz;75>xU8(Uf?4Eyf>)uMp3tQZ!6s!I`DZKvh~55U7sL zYjh}h_!Ck>kYlj=$WK3g;tvgGmT&yx?$3f`8?8iM!j50Eknr8(`4|8(lb#-VU|N|} ztDe+!j^ERXQY9!QU)a%9ov)e+1OOaQClDnaMFQ0X0X3-R>2N{7fC(wD2XKJ_pCfOC zScB11g29z!_SqI^YBiLYX-UR&_($vCI-q1QE#Zi11(T0SO595@g3_5oNP+-0%|V0A zT>;OCPGM#;h)BKlAAUaR8FKKj3#-A{c!jkdWuhtuC53~knV%-{tf*3t7OJab7J>(A zH$L?4D-8+GM3qEW7fqZn>uJ(WbwN-c28X2u2mskG6A>E#urN0FMCz0Bxd9$l zDN?CXs8~2fdKoDZ)g+i0Rg8`g&Q-+`jMTb6?yq2>9yoa^m8;9UUbTNBB8MzQQbNip z`I0G2qgn_g62xi=5Rh2Td;%a{4|AilKLP*)01CGEcf4=%g66)~4OVLtT-A7Bd1=3a zLsb_~je$tFf&m&Ky3U$?8z;k{ZXHU{DNVL_vPC2$aLi3l0aSb zHRN%pdGIO0pX##e-shwjU-i8110?b!SsJ^p)!8*X{Mco36j3!i)K)rFmq#^&Jq<{B zjdn``kmtdkTExOk(Nm6hyUnE=_W$MC(|(-^+Va^Sy-_m#ItjTw*P6{`JM)lD88}I; z&=>B5Tt~kBN~w~KuWPt%)(Vl zy3E9lf`N!wY3FgZMI0NlGcN%GnO^5oT0px`1Xu!a3neT}E}&E>PeXaPx=>%)`e z>N%-30zFA)H^lse%IAc7*CZWa62v6PGl@Ktd}$9o&Sev`bUjZxij7JfJ;tB}V`7r1 znS?qZsA71{7(trG04zyx7fL8jFYvj+Woh`@;s`Uo*b5>*OYRk&A)SN zw`gAf5n;%yvbpT~mhNU)?RmHicvW^aVY88vriXC_bQy}6?>|?A`5b6lW&-)rF32?n zc}62s_)Ai(1fe`79i^nh9B2idAyn&JXlhFvnG&%+yC{px?4M-U7NtJ6wZ5&)EPPO;VCw4rG#4(1YtU9 z-hK7(FP=ZqYf1CqOS@n$mQk3PM`3!wcAfIQ&ivHP`~UHhpP<5Y{RgZf0Q74CfYx34 z&l@ruPX4GcvzO=Ea^0;xEo8OkU^Ai-gnvi?K*adI1Y0OV!{E7h(rpZ{^x-&AHxBvGGjOLDync1e(TYFk5-`fgh zNZ4*2yPq@{5%YnFu^dV}6A8zXJ<^=9cE3HnLi>D0ykVKxJ$mY67L_@dGVV3da&cnZBREtF||5 zwJ3Zc26-M^wqogk6C((s=o4jJ!;ut%I3s}aOaZf_b6A*J7+0maZ%#k|@a@wN{?!nw z8LopM2?W$R#@d~hmOP3?nm}z32mms>>5N?8`~UDFvu*J5Og?`~dtV#!JuT#rfU6Lf z{)A89t9i$g!m$X-2-0FBgQe+kVRCr>V*~;M1A>`_>jhc?!k2W?G(x2}iA@3w&&B-c z9Hz(Sl(SfPvNXQ`wnKOQ*GDijYy;3GK8^WHnSoUUfc_IH#|QxWbQyD#aZ-=D=x$X#*7?5CKgFu|2nl znc-QUn<~sXg|YhzFWz^@1k00hoqz8onWDSBU6fr$Ii}{He zCy!@$k39Xe|2y;3Tc1}p*yk{4-pmYPd+jtde{N>D@Scop8WdgqZOC*sqofGR_Xv+a z<^ury@N5POi<9%17@mc6_j&{QhwQ%Q@0U$cWcGM=ZbE(crN;~RJoD({KF5Uv8xDL1 zx~MR|7658FgSs|A%F%COTC25V>ewIY8X%4NAxPw#F3b+T`P}wPTe{^%LZUmYjJ1d# zD?t+rZ#IVt=UH>^X+~FXJGJz-L0Kl1W1+@lpRxvlizUpC%<=5_6nA8vat2$zYqw=z za)Z?ak)I$43?fx3s3(VCEr09&|2Opm+eYa4>GnVEr~3eDqX8t2s}6u#AduNCjEn!U z@2s9p=4ED<&IH0po#yR_00_IoHjZ70$>sp_zJ|zqtUqu_pYDb zH?#BUhl*oZ8U#sgpo2i~fx`wsE$?3nZjr$Roekc$a zU}jRvKQaSK88lXWyE(FOo>{~xMt6T3T6^2!8V2k}kg!t4(Et##l0fA$W=Cc)IXca) z=F{F_?qRzl_l!&MAfjdCL69euev0DR5F!c`aa1XhV=wZfW3QHPzx@kiPaquxNez(n z1(JTiiU3eg1IVkc?|*yOM(au|i}RUbg#~hKt&55QfCHwp-)v%LZ~y?s9LS0Qn5p2b zm&1kg&GFJZjh4<{>KbT=(V9omtHbA&0H6-@1p!ThQJN}XVq_Yn*v-7NUs;sb)o z<1EG&&oo9B&oLe21kpR#j^^HW*d*bkx;m>s!5d@*V7LxuM`kcSJdGSZ?+xZ2aXYg= z@uc(u2`7%`1cc9Ys@VLP7N7tKLWI|Z*b=a+MUzx?O1N))Pw5+9y>vTa zYu};nRGtk0gm8Ue2na&xBv$V; zk|gFF7k5sNlyCX+e>wPbtTq6C`yV%MZ0oVE5e7a?tUC3~Dp>|Il;=x117J@B064IU z3>8Va=KV(&vjPAx6H@>x{TT|LsXQCCW2SVf7%rYCXPmc+o`G(3ZRmn04JvslZ<~C1 z0vOlRPyx&fS?G@<9G!uf^OOw#r9i1OVTbGsl?7q)h?^Wyg;J<3+gKyaJRc zk3VVG|99}$Mw6yh5 zdrvEx+H)|n8F*aj2|sATu!|)uPA_6=d=7SDh}Y%+UG?X`rwmbysqd&0HAY4fuB&nO z?{Uzoh|#29C;fq-^8*i32tY`o?{cVsL%-Hi{O9F3Gkv2lUB2b-KE5~ne+Ekf;JSa? zoaHX-3PJdUVm`rNw^V!eKPStGPlG^tOrFP3t_qyIN*=|CCV@CKyeiy(r7;|e2+^n^ zVsHos4FFNs5d5wB%pk=UCW~(s6Q#G(Z24sJ&`Oym6NVuHFkDBWRJ4(iQ`~O7$X!iO zacA~fMdXEru>inY#}mNeLeR*Q57aYBFmXlw`-fP=tsQU{Jx*nP}li1TfN?5}nZ~+~d7K5n zFlZ4?a*Rzmue}>Zh545Vnxfh3O7Daoe8kW|@)5sBaWkL=f&f4m1j7(aL@_3ZBL%JB z6B?k#7BX!0)u{MiRz`kH3Sfa|V1$1u*E_#5Rpm)G>2YkaUFxspw3U-Sqx zQ^lr7d6+!MgX1u9s30|eAawY2{{RFE;{#zAaG)5OLja^Wl9d;To2nG;S0zcLFXalI zuLu~?@GfL@n2tyzP{ibriE%%GKmu$S1Zf70*UXFdGO-&py8;^9IhUY^-U^KVj7oFVQhu<6o*>C?C84Up+uzwjiD%A zN`f>6q~Y6zs@>|O6+ub9Byp-|Ug{+oOx^`s`kMa&z-J7`t>Vw=bC-%b+r#UB94cV} z^t=_O#L_D}xd~PlFf$U$W7xI}SC8)|wgy7z%8#Q$h(af`R?|h1{^iC-^I4TCDAmmIFoMYG}1;_EASjF;2HaX>svJ^`Sa65XBLkeSj{5qN-104ai%Gmv3}T-SqL^5EJ*Y&g{JB3=d~ z%|VH7R@8{Dkz)2D{z4Rc4T`=dUd@z584>e+wP0oh3`@c=1VSz4FBkORnL#x*0CY`M zwFx!tHLIx>00c=)j1^{qV0-xR(A3u%-upJ3*a?PPT~I9zkVxmqZP)IHh)>f1!AtvE zgFx&r_LjkD)v^qjrU6eeoRSN>>>=DNAL1xQjuGc%qCFhTQT0f89=i;$6Ay)BKmDFC z2$m&bSu*m6Lh~|9aN-Q*Eo8;HQSdAYBuNtNMT`OcnNP2xIRXZnQBK>CNCxUk-0?dp+Q{F^V z-i&NKiJ%_@A$T8%FileBK2^>UHD@auHLQvf_Ls*!faYi0O{V2Fqyt^fpaYa&TOR5fZ2;K5fe41h$;WlfC7E42to zY-J6$G6tlKhkM~~1gQ+^qCj^LB1)+D*dmee8NHulL8#Mh{NI zww<3SkN@`e>kE%m9<3(2;&UzUBuUpwLwumSzs>4f-%hz!1D;BJXtEN4(-U=*sEzF_ zag}g=KolcTl~Av$JQ@UmB5#f&rfOhN3gnbMl!`8SPUszS1qkdfwy^+V5Rt6mx`gC` z*kNYdS296iG3LX_2+m|pHZ9@b7eVW_{D{p3fOYWbQAHBT=QyY@4!i`%lRkk44uFJ( z!c-X}2WNO{e73+I-|5(V)1CjLP_k%dT*WE_p5|hJGn;&xvb| z3{yZh8HzK8ashwtpAi8-XKq~OhxY@C22}wdmOpA!(v%^OXnQ{-Fj`s?{{w{UWC=wSdrTM6`@-^gs}T4#RLu;}v6u9lv`P2JSln}bIVz^WPm zVOe3k-)}}t@*|0_yl%xrMECrD(Zjz{S-wpd2D3C{aXNx+dnhf~@c>gQ>1H3WG6u3a z-=WiTa2fC%z~eB?8`$$uYXCZPDJnQ7;feeR_Y5W`n-HtILV^q?WngTmfT4Zkn42l? zb8UQW_+{tzAKy{bcMGTO4LB?S=pYaPMB7G~XI+uMuqh`#n$25pU$?P`1~#?9$S`@z zPL}7_9y0^vPw?mtpbn7utY7FuRjGZ0Aq`?FIH~62uckZ&yX3*KJ-DudN-Q&%l3vH>c>~hbzi-HtW=Es~Oe{=8i z_U+Gn#}0Q3H?m0tSfK{cnI2xpHh>OnLGH8?h{N)a{SovG8zl3N{+sE_Or!pdVBB1pts|d^q!lzD?HU zP0iwh{&ihV>$i2Gr85K1D@Bseiit#=@p0Qu5X@3~Y#Pjl?ocj8OEG&XS_v4K$a4fa z4#9~WLVc6~1kRp97|Q~DQ(#aNrpAhVaMw7-MyF>>bLu<$o-f_;?EUUuRBsST+cCT* z07zqc+SV|+?nJboa(?cj)-L1Hwyvg48@CQn|N2&fD3hn$XmLl-yhsyB#irr0B^Xsp z(N@ab)u4s|Ld-6a<4RFh!e5C~E&X6Y7T7U(XwMY(?HNO1w)Fh;h`aNtdx{SfMo~oV zEn+$Vl3-x0007~!Q2?ZB0RS=s7#3hQ|ZR|BRZ0(|^HVIFa z!lhkODrFfStVX2$XaV7Hw1X0GJxOI(kmGwe#3p4iH)-?!Jrfu{Fi|W_yAKb&;OuE?+pZGO9ob}X=QSfGg)b5AlS?fQg`b+OV8FVeda)abB4KWGB3S!_qfpjDI}z!T$Qm89GWff+db;dOf2r79dhq|;i1Lv z&W~Z%0bFw60>L)%`pmCq0#+3O;dLV#K;{6M$--!6m|4@ZGA2w@8Wt%w6hoFBN4~ww zSbssE+^z=cL$3}{Zluq^x=nppzoipa4)C~qOfY)6lnxAnA+jjUxHzTgU=0_5(lfC*%g(uyJc2ItOy_P^yHTj}wYI zjSL7cgVCXR?B6v49x34DVc?`uAgfKQIEu#(mT>nS2kmb@FjYR}*l-C|0I0P!yw=cf z)wYN0=Q;q=Kp^vZ$PNX=%w&xw#iqxQ=l9a!`90PZy(TU*i0l5hQBMGSx_}o32-AHQ zHf$Ndx-A_rvK~CP>pgl*;sMQNUKaL)t|?Hxt`sE1QV2m%;s9e;FVL~E3mdogp}jW)my5~wIO;?YkZ8ih&;s`F8ph(# zEKVLFoICCV?F7oHb5#s zT(imQy<|i7s#ZzYNW#XNJywJK7E|y>ez&-iv8#viQoll}uL+yB4q$L|2gtIaxaxl) zt|>{%z%5D~+&zhXyNA#<=HhiDgiVw255Ffnnw9{7ma|w;eD@3U&W*qK)5WJyTkWqY z0K)5NH1PG)b7!v0o4=VAxEMet^Y9{sK29Ubp<)}*Tb*w2>%#Sro`cDFUYMr*HQrt5kt@Se%w|VIhq!wr(*1#Uq4+^gO(wCo`x$~AOl#xCKoOY~PM;cJ+lLN^7#_KvR z%}Dxf37pmFziHPQ6<+HMkEK(zC zV2>AY;<&^cMkMmuinn^qPcvM#7#9aa^_x@zNpTP?cMhCD`&rPJ=H~fd-~IT+aMaKm zZ2@C8}#};2J<;DQx4~A&p$Y7;04*ZdI7fDa>a9Tl$L; zESJz)_HFv$oIw9PA^b-#wWO}f%ctbM>htP*T=QOdEx-`enDo~o62exDoi3?=cUH|E)qM&RlOq8=T>_A+ z{a+FMZ_?afa-2_`{^0cfur7M|gPZ&MP<)J7ZCl+ME5raiCOAy7aY{1Ja;{_d7+9H{ zq?TH9e_i8JUN0X4oNGp)gr$L? z(YLPe3k2uUMJ=;XNs(ZfJ4$g8Z?jg0B(ED%?-6(Got9u0jvTeQIc&T_a;Xb07(@0`qrt*$w~%PfEO6lrJIx z0DbwnsefvEQ|Gy_&xyf2+~oLcO-TZ1BA`hC4g+Q7`wO9uSE~b)Ek3-CuIB|Tot`uY zCNVOBnqNt)R*i(f0wi838TMo23!g{ufs#G|t?%s5o$&FKyFb4rC*Lw)DYTG>;NNu| zby5II3V~Kg@5Cd8*+xbIdYTBBo)Jf#-4&7&GfHCE78ow`-p5A^fA%lWk3R-rngFx` zXbz9Rds_GVU*Fku*+5plaliug8VteSQPm1M*$fmtRK5ycgLG%Fk(MuqS!wFt5etxR>tuH?}_B{uf0Wc3>p5QyZm1*ir-xVr}AF;G;#W~dcTP7W*U(NcU%yDtdH3jcRlTa}Igk&u{W z149mBxTGcz%)8&YYyb3JKOQa|04XwcNO+zDEVYyTb6js3W%rV1tf+q}&x&lLG@bIGd)90rb z@4E4Yu}2CniU3Lg$_SVq{A>WxOh*`m3V~q32SFw{S^zSaZ*D&A9lgz$uFD(euFn~n zbyBwv!%o}HIXwDcLauOLW8L|K}Z)&#&F4@$4(Z;;-p$*Me@1~Xvx=b81TESzWq!@PKE9jbm z;E&bKz^-Qmq0X0c*N_No7#Md52Z{=Z7TmqNX3KYfZP)ZYd*{m2s4zQ}^fD?cKFRnR zH8k3iidN8p5Soa{SI7dnYffr8^9`-mr2~2M^v!KeVnfb=!5(mo?eGbG*keMq>m($~ zByq6F*uUU7hZddhKRLGWty^B1`43dv^zay}_;4o?(10s+IIo`63c87iGy;IkncYnr zFBr78Z_Jw)Zfec8Z*FZuyUE9lRyekZ0BK;tCG1;pad5#I**|aJ{mos|_dGjekHTkk z5fuP9!MSeRQ`P(uwXUSam9-1-L13bK6p?8+kiTk6^LZz?n%mbmTW{FXk*D=}15&yE z(xG2u5(17eaG&(2X-ZRPo`_Mdd$>FN^6qt%mZ`fgn&B zJy=Kp0YK)${_II-_hq)PYm)EV+>y_3ZEHe{0l@vm(h6jlm~w%=1snV4?WuhQ=iYnw z&)@Z<@!~;L7+ys6@U5;>x9oPT6 zmp36i=a>jE9T6e{R~k6D=wZ)ni4QE4pMH7P-g)ECXC5iISVX#0XCrRgSIqQSlUA#s zlyY_RV4z|ms^SWlt;?MD_Ac|%bvfgltzE5|t?hZ_$vbAk&MPKqVoniu&y}!eW^w*t z!M*>Hk%gTP43}O-`nX-U?W-p3X|xvpuO3s-eT6C@oRpKDmu|>hv^j5Fyt%Du!?x~L z4CYM#TN%fjRuBS8nmD-NV%N+94$PHb-Zk%h>*n3F4~~^lD`1nf?RAH6t3hiy07`0w z&{wE(8UbXk-jF%tP3^|^_086q+q&C~t?fBvaU5s`X`rA4cFz{EdupL{Xu)~tM-%05 z-Fa~FdBg)Yx^343Hmk1Y>(S8|0jJGB=s?Kmzc;nZfe-bY7jMiN7j5Zk={>Ql6}?Rc z;DrAa^B5o^uwh|n(Z#Ei^VmC6+_!JhyXzbK7Vp`+;MNP+*oc1tWX)gbXoouzm3xw{pemH=D_ zN4_r!FfEJ}UA!_mk3CcKBl{NAx4(U`c=t2&-Wbwj@}b1*LpZEKW0$032>>CbIgR>y zg~(}aGm!t-rtJAA<;5kN+j6fzv9E(Rw`O5@&gzGqg+!SQ?4DV~D`T_jz)O`j0mjz&6*dtFqv&Xu0L*9JfiM{Q)le${a zW+2cCD(Q|c0G*ORNSlnx z0LTnv(01j9%=@?I1}fG{r%=eeOYmKXV%=>na_&mYzC(ES9{p5hq;oCsfD69U2 zD)INeGi=}YyzkW2Qt`U9A9suo>39Y}Nc93t`p*JjZq1?N?VaX{y_OiT3^aqGN{Z%3 zO5VXAOgOuS%a})n$!V%SwCzVMJiC_kS^$7fwbm-=KQp)&<^?KJ9LC?1c3qFuF|f=J z4jsevS_42xdVoofD}@ZiBnKOG1Kcu;A`4gS$g;hXFp`i~st+IMQpK z?o(Z>dw1>X-O(ya(x^y;NB{r;RaQnq4FG`pe1!razzsdzK>Krmn}!QzLm@LcVX|rCj|?NaI{#yfG2GBs);dxjI-v zm=C!eMORI8sUCrJ;O2k*Sf zjDqY&mltSauYVl7(Zz>ZG#H!T0vy&Bv0MauExS%wWt8R%e`x3ATmpStwjmYeG>_Y6 zL~vyBVcBJ}EGtv)gqu@EbZBoaGfisK6|Pe!Uj}#%@HTqhq2fl~HW$f|0&UQiNs%f) z{g3D(qx&5IK*s#v1vR%32mt`d0kRUJ8s0|#IuV0NqM4qIGrqt!eTzoyUdRe?6^Lo2F8ARO$2fvDSwnwt}EmmWt@yby3 zFCWc*bEoEj*^{YPkg#e$}fky>w=S z#Z-V&pr?_SwQaNN6HU>bqr;pzb0z?hK(#o8Es92HKy8^ICU3GNlbNLp77+( zi4s0mSOs#dHhQDOJ!%9IZA|5|+dE3E-skfL2z>5*c<$}ySnjGQ3;Fa>!Ye<;=Uste?kWmx!*{I*mN-ZZNg zq@Z)LFGN&;AK6$4Ci*>j+Oqv3U)2ahQpNn)-jAS`hj{t_X6%8qo3&k|Y%VjlpmA=&nBz@lYkff1pdNQU($wl8!$rs#GIvora zVw8zbAJr}wcglKs3P&%|^_mfKhcRgiu71M>ukOhR2}J6@#ucRr{D9h!&tPnc|5)^i zwS6F|LdhR%mFoc)sI}%`y5TS$DA^a{VIR7NBwNiBNqroRlge{m7IC}76y=*#zg-;; z5e3;SsTASm3p}1HyQs7#zCEv#-$B-X<|9fuN|uH+Lv=JQHCFcag1hEhjJZ|#(8Byh zISKuwKaO$W=O*}Nq@@9RgQYt5!iOEf9(uZ41qKTzYqb>geE%*tG(x8p^8&WlTn^Gb z^-|Cljx|>EK20;RN8e}YaK0>|IW}1=f&vNnq#4E%Irewi?*7C}DE)Op9+v>H2wqw} z!>(~fFc@GUJpq0U1k=HwJ{;wWG)>0`{)3P;)QDM!sKU9!kbhdp8&|12*mnAtUH&qy zR|rh8rr#K+|6u&_Bb#gQh~pbHd1%uERqArflFn8^Lsvj)oRXPFv{cuaK`>E5;9Uq= zDSaO60-hlj(lF4NmlmB(E>?phqcC$SmUbJo{kvA8wX?9vVdd zt$z@bjBr;KgHVxYl}Z=`Du9BlV14|Ki(YIBmsm?}XX3Y?+QfH1!1t|Sq*DK1MDOE~ z5fc$_O7F+aJv=D<6g5@1>(u_VHukJYn}a>=?Ows>{ufCeuUO?Y&=ku=m2+tYtm`*zBAHw0(9E^s}IOlPLB^e;;bxm06t z-De~8O)0vY`%&*r<=1Hc{d(58rB$D>S7qT* z5lRR5B->a!6XCHJoM?1qqDQFHUy+SRryFio{YFPBl#B7c5jNNIr~gt{f43F~YH8!A z&X+2q*lHNtT6~PlQrrE~1jnsbF7Ee(>u%pSHL;ZDi*7@{{}@&ax&tb7jE#I_rGlCs z_6HYqE9d?J10Cyef6N3@Y|F<_)emO&lwSrspc_Lh{#On3i?5h*GojnxCQ}Ik?Re*I zJ(&A!t=6tEkoy+5E@vZ6)2;UN=b|=y%TV@3J${G_f+FWcvB=7S=d)+E4kgs~Yw!BK zrf^EoDsce2CkV8bpY2i{G zTw~1_oz@?XS^3gZs;Y;RaOf0ZSKp(DrID=m><%}(WB)$)>yS?AVUOA+1#;gA1lKGg z%@i=MTJ=fI3_%2IgFN&`^G*2u3cD`rFMF!BhdPyhIKEEC+*fNXsXBUHQq@utLXe90 z7tvHmz+;orRYzgzQrDCRe}-oUc9Ycx#UC zV<0iloyzwHafuNU_V5yF?F|Lo8fz)C*^R%?&A1KPz_x#!*57*cziSR<^Va`itcs4k zG>4^D`HA}6w3BtrfFNB-eopSH9|cYjz_uB$=ic!|2iyiA_57W!(CTiz>^5Sf%WCuh zF;w{;^y+&PI(EdLA9p(38h~@Iz=6zL<RW&7VdrRdOBL@!RD9w`89!-cQ42p zoyW}=$g`VcgA6aX?-$p`CVxLyy^aXSv*W{-w=%4mDR4oJhKwFxMl)7dxOtQ$QFNn` znaHYwjzqfv6o&V#H=ZcfGEFOvGmX&o&Mo8<>DP?)8HRNWy*uFB@)%brx+5)HhrMps zJktnfm2Rl?FoSRtinB>&-&}2W@@|9tV4pan zCQtkG9bO|Mho>Pd28ADf+}VutgG(E>3Mh`RG-BH=I;w^7PF;Vj&=1OHgeV)u0_Vie z*2V&rzV*=+!BoZ)_#psXP^qjO8uCFd1MuTh*t334yFCX*~&n3o81bg|YFf0dPJjHsP+#GrAQXC`vf%v~+`z9yH0 zz0W_b)!PaE8}3`N2d#~lO<3SX@0P$`0n>@u^$%s?dxqf%VN0V679|Mx*L0Z1cw*we zw?Cdo3Wu8mj=(kkH{^8L;vn=beo zEBt2_*2a|ZyV0vVu=CA_wg(5=U2g~c3+`>NRM zkJ1Qn<2EfUFSS`h#KnlyzFo0yaI~#s-Ey_)x7*K#7Nb00=PMiRh zNu9ti>Q+lK!@WK;b-D;yk>Y=-2F*k4jH_G*WuM~QEa6;2B+Hiy>$_8*AnX6D$d zh`n2i%4UZ_n+1VyrJ(+N8H?@0*UQqw%Z=BCiyYGq^dpK|#=6~>d;BLG?;KTxP4mW4 z9s*8OD>|#Mbjf$R{{o^)rc-MyWp>k)fdl4~DG6)Vd6q|=o&1Be`bLy8xspK^0*}qm z)<>%vew+Q_qW+Vc)@*Ue0Ee%3q+ZAA^gvmHs&9PH^Km!iAjZ=a;YoVNNsa<#a?Jlc zDf75(PX35tlQSpc!|Z0|M1(on(}s9?rz+;$Q?}zWf2pG)fIoMBo#LV}J>A=pc39}?k zgqxLLeqUC`HzjjrbM3brLs9n?TW}%8xh}>t z$qsT2NHCNOrPC(pifY!uE}PkN`L?Jrp5MtRf^`d81)(L)t6bKZJ%vy?bczBp z?PPRQ(D{ZaR|B(GeN3IE@v|v^g;E3bNUmZerIv^|+90}!2U-)@xpBjXSi+&z0w&oM zqewvJSO=J!X*xp$wecBAIBl}zL66dBi6AQZt`lUpftjlxl5W@UgFkd6dujVcrRg}Qvmy2yflM;A zhN}Con?o@Q%SPdGKIrfTTtRY~xh`V<4Y-}A2V1KZay(rkhVPy?&|BRZeEbRCpt+l| zUDT4MMr!TH-_f3}*I^cguq&8Iq|Zk~N7?Wy$ORY(Fg*-R{(qV!Xb%&oQ12bj!{O9} zUI-On9h4EHP4vQRkjPFBeFdYw8{5mNmv=U^qmAd%Rb?@&_|t*-==OA>)2j%*vj zK1b9|z=C)_X;zL9k@=jLl-B+pxec!AfN&ylD#XxnTj(89{^8NP^}>@Z_x%vm{o$2u z4{4vE39jiSJ>JxTinN)j%YW!v;7kuY8R1+dA$RPyy=Ku$lRi}sUrB%hC*HY^=me`X z_@2)Dok-}~zBuq;>irW7o9zpfGzn+pLRHAWXCT6z;LPm)HZH6e$8v5g{9KCXuhyJs zG7W0K)B|?~#8qc-=Oc=O@Z25Cf{eI)mH>k$lG4#52BWD-tciCSWDUeiF(bJ$?{@*> zhu^2twBZ^xC^&!1j__;382qHpg;AzlyFR#uxml(qUlPjgv87mE&8;dl&aLh1tCuWm z_!a5;@EThBemA(4GC!!5^5^|{)3EtxKpX+&2boqGc5z==(Yi5Q>@Gf3BUsQz`d}g( zKAefgORm6{_ZgG)+|Z}85LoyO{?R)1!j?lOVPhpZZ78b#Px};=8ns|H>_TMdmOSYe zV>9k~h|>B6x;>(*6fKNo?Xp5p`L8YD!< zbW>S%YCOc#&ZfZ0b!;UTWG0eTyWqkH>LCTaPV|o%#Z&9SzN13zY58LKqj5TuVf`2QbWqUTw;`b4I$6AER>WnUW{tEBW1tPoKW;v0`o&rfb zS(5wp@uCy&D2aD)RLgyLm=nq@B0mqiNr>ql_`K?4@Bfy5>=A8+Um7O%<@++}GD?p) zJ%ZYg4hY#*5H=C`VzYYbk5yKdQ8)fYqLco_n^XBulwoBqi8CPLty%_PHnQbwEFAvS z_wA8XU^omYzr;1X5cTtj<>v(Xf~N|?#5Z5WYb#xuBonOE_pemYeO>F|0ufcZ8J(Jb z$O1GIyY|*~>!1WEMl)EyO7CsRTKG98R86UTIJxNu{ki8`rZYN$VW)Qem#!Q~r$=Vj znL2BAbZkaR7HHH%oGX5WatV3yuDg?g2#5vB4?Wv^3RBQZ6dA4H?|KizKZRkau;5 z9vhTaQSa-eyX!yxTslfgBr^rdCPVN3Tfe#m84B-lUv_0>9X6$%*1~O0Ta0OP6qYo{(H;xDiFvyDk_V>Q4kdy}s` zw@5Z}k42MWGoBbDA{YM9NyA`RBMxf8cVe*Jl;TuxpDTD(KX_Y!8kZLqQc zm_mDQzX&6Of(-Twd?H$l-;MCXFl>);bn0XC$3lz|nI3XdJ7%~UmE4m$s99%_!((3kC2CK{Z*=Fi`{wRQxbc`K^)_K`X%#7` zyX!nAF>8=SyF-+5TL;RAAkl=HB`s#=$Oo2BPBoT@QHAnLIR(+PZC{z7EM{)rej*Nm za2|bgIGBvC%zl7_;A8_VWUpFHiz&ZE!qxc97i>kdQXYC6-a-k@6`ZAexNnUY9QGFU z+AxLbxlYJ4p)l1CsfVp&e*BGmw)PWx-D&CQ@#1yg{#tz}(CB7vIGP5q`;veTvQN~l zFhI_6{rVlw*C(t-bUMO`7OvBzt_Io{_9<3))m`mX1}n&bxgjdc{n{)g6*5CDgm!3K z<=ovC>gy=Bz5;I)tgD?$LAJ8@&s;WFWT6$_yCI1`RuRio-(QpWlK}UB9sfSgHmvtL z`1coi!Q!NKx#0(7y%)ZV%k?(0ltRIT!J#sN!d@qc35Rit_7C9c>X(YQ_D zdSJYQ*T!by=PlAr3NPVi3}E0QQ~DQ{KrI4x2bi?5X*d~jat&KY=s`NJ_Znf&+a;cP z^humsy6?q<-drVwcVNjC5u!fUo_lLMR4!NUSQI(8`qtMuq)sEy0&;zQ@I=keG}i(s z*{Ab9G@xwi?-R$h32G32VqQnH62nAadQ&|^HUqXh4$DmGV8rN1=wh+k;k_AWZK4A9 zTiF3Lv)HEBdoa(PfCTIiYYad~xV8mI?zfcvEq7KyR`~PYa=2G&!#8%TrOd86_or+9 zp{^@^bE5{n-B)?dR)nwr2CxAjzj>nCvva@A!A$Xb$av20^9L-Am$oeJ8F<40OSSK1 zuL&V(l+)DM?984#LNsk#tKtymjs?ADB^lOZ7!xz8z}z-5a$i^jgpyPv zJd687&4GzR5T!d>mxZH27CS(8j7%F`X-1cMZM7O>vLkLtu7D)k) zv{ZMTi=H=bJ>7+ezwdZqZa^eI5eQN0w{6n<!8%R`)}`9gKr zBAlDsvbbsx<+JVT;$)xN?SBHEVh@Su;pMq>UGLppf1mz!;!~vPzXzLbM6v>HVU*X< zD8}!{7y!B>i7JR95-?9%(^}@k?eB-0R$EqwIM^&V^SEQM%dNlAeY3TLu;Q|SNeeA_ zgGeIK&o~>fmb_FEkSB69`*Y;w)mLkJVaWFiV7F!&5?MRcGP4N9whZ4~ZFoOwFF=f>9$cY7cI-U>v>3CjQ_H88h7*$zxM)U2WvlR%SWeTGRm z^#^sW9zJV$K#m*mM}52Zi+nAIoS?JWg$OU<3EVAG#EZ$^q0o#xtuL&^369GEf;c!> zI3{uPGpEB9le23|Ok6?TH_`im+1>e7Jc_YA{0YCWN`BiX+TuGTZTGCdI*LC z1z|TVzaiR5==P{I)6~u(qpju2fX{QUNRZcKZC%jMS@?a%@jZ;BaHKlL7)86fGDG&P z;vCpuu(F5=kWf2gU6Y3C`M^;I$yz>flLdCJbiW}@(&rug3YRk`=!6d8L_4dB%4D|j zg>{_|Fn7X=Q4jF3SI&w}eDe!LndKM)Zl&tTR}>&c;X!29PZ&!b=`C{Oe)%ziCnI6+(smY2;TtlZd*; zS;G+Oz4fy=DC++6M9;yBgS10G4dX$9SwymvH%)3*@17_XNCnX}FSGruE|;7B!rPfA zzMuUgS^B7}=ZeSj{FkFF)iaK&}FdIg1Tz4#2jy? zR2_75HEbfG^p?vrQJ-n)I9Hxxbrk-{Y^>?h2F_%I`Abw7dS+yVQBd|^sPetgE1DjH-$`z2S@wlG-O>&5Hat6_e_j}AdrABrUnrWei)wP1Ew3l|xAjM; zvwyGLd{Xz;e9ORpf4qfN&}F_D?pnt1$Sdzl%94(-3ML?VhGSv{LNe+M*x7jlhz} zH0hfuS}pd273!?tIx46$3;~3Y9Y)=;#!y@!wnGGgFQrS73j9waFtUgG{CRfyS8z*V zaQMnW50Q)ApTs3Pvgen+L?NFRL4M6Y4s|j=O}V3_XTG6{y13nVoiF;EmcjiXZ{9zr z1rc5=6F@~#1rV?7^_fcseN3??vGH@gpoet(QkK*>skG=_g-4xBdD2RcIDdr3X- z5zk0f%3=k%5V;!qcpK7e;Ta`k5P+A;1i~);{(S9D*BOC!?!6UDGLr%Lqvd+H@ZH91 zkMW>d;hXS)Wg=>x`fN^_YQhCX+vRwv4mKd6mO=*cUL z3&9_YptwVNDc1S#>Y}${SIcbp-q?6RFs`5OAO6K&%kBJfOQGrbA?G8`ZJnS&+iUAr zucf8JF6+Bo^J$*n#6%8#Fg?xJ`NRXJq$2q`1pqF-=zqR{khfFTNl+Ro6xNxb0cwQF zkP1GWVofpfwX)q$Lrt|A05@u>8L}nX;pHPWl>TWD+T-r0O;o%*PtWT~!_L)kCaFid zN4^DWtXNidX*`zyrnIIJgmUywdJ(1G*w~g)xt&8)4Z*fvRPwr>GfD_X0NlWA;kbS+ ze80rchz0Jn0J$`o)j00y|7ii>9GHY>@K2sE+(6f^Yl`AmgnHwDra~hNYBsO8mv95k zzGIje1r3H3t(N)hd!63@enpoopg|)X@Bz3|0#Zn1&H&f@+RVywP{2_F>%zP7U8pFY zmy1HiN8>B`jZCL?v#vq<6pU+Ku~Uh0lj1HzVUEX~xq;nrh4KHcz58ccrR!Wv61#hC z%0EfAB5M&9;0($?SS<6T`62d?eB9k1HbHJOjn@=*Tjz5B+OA)2+MOm7*D4GXI9IHM zQ}_-GC&za>dkJJ)>>t%siHlZM4BO05dS1f-$m73pYP{Ev_vRRgYglr+D) zHR{Lq@FSZ0H9x`zUvHFVEX_Ct>NTckT}4l9Xvzbl=7%?bjoh}SehVW1P;3n2WiLz4;ps}+G{yuS`ZMgXH5?meLQm^&uo_Xi`=k>=? zEs{C;_i?|w{@dFBlvoT+OuV4JAj6WtwV-ULM#BjIx=>`3W4XQ;tAtPg6;XxpbZ5{{ zvY>BN#xeH?9Ej<>^VeE?#yWp8y`8XXur@u;yq5rLF_bL@VVigU$vlu;O9ncgFu?9q z<;}PobUV=^U1KwA* z7aTD6C;JYp-615uR%=1jwNuFL)%Sx?u8Hpx0w$48FuN z4-nq=ff~42RKDV8mp6^B!MIgwL_*ggbg$FRUzna4gQ<$?JPD z2Hv`k%(-^NsfmB>l!cxjpI%C2>1gw=diYN3(H#!`%MI#Ei&9DOcMe)C?m?}PF|w0e z6*!?`A&m!`$b55^^M*I$l#Tt{m*F9+p5~1+d%IZo*0ad?$#nj+^gdO(7fhfj5n|01 zbO_t!dMloYj0`|P{uItuV7+3tkfV0nxa;|3Z%dFzPnzb2(U6fcN#dOg3Yh77=7-n@U1OT5PQoP4q$N>4m>Yn*ve_gOoWxq=dR-cIy= zEqU6VgK~7g#{BMot!XuRa&$D}OyhLgZ#%4V!h9>*PxFCgTN%DMp&!oFL`Qe^eF^71 z83l<`9l4{a(5vw8(J^~rlXP46Jbo3#TAZ$FJI)6dQE>aG_p!NX0NV9bmzKxAx5;I^=zxKa_OMnc7`-lTw@+dWDw3;ZKt2z z==rsSgJeIoB%QBP{Q-xh(Ou{rYYp1%g+l8QKiR)T708 zjkuk1N|({v2j{P6zXG&1e0MlJpCe{u1aru!07;a91x8iSX>AKC$4V#LDXf}Yu5u=f z4|k&JC?R-whEd1&*Q^VJfWZ|<`{_8#E?DHNtpEr1RRxH z11U;BC_54Z(>*mCnP6|Mjf z3AH{jW7k(t2S&FdOu1+4p75dnH_i}&4zcdMH=RS4_4RN8w z+)awpUTM2W zi-BcA@mdZmx*|M;)`5+M#ddHskXWb+D#{iEPM&b9z zzq&SMVRD_3K#YS8Q~RNj5g#eMo|5EUp!TKWgN5*GgabA zbK~q8HT+YQe?cr9@-BxK0xp6==a{r@EAI*V1MFJy>9WG*TGSpoMxr=ro`nyuO|}9{ zw*i@9$AC^_Gi={-cRdl0Gf|LGvq3W=6E{7VMkecZ3N6K@!{C*SFJljZ??&8Hj(Pun z>)I+S{PemyKE0qtqDGg!GyNMAwV&G-F)VqRgxkT)pyNfGAG0?Qzxi<(spH8-JGk}D z*Q@C-xxkT%cM|0@73IPuX&q|KASdDRPAKZXzDcH9Pe7 z1`Wa@3sly$!JEP-IxfCw;Lzd!O(e&Tp+(`Oz_%)Z!bZ_?P!Vbod9Y}pU_IGO(is)R z@(O+<*%kco_6Ye3)+Du3rraxJ7r)YJCg7WZiK@ zJAF$Tf|7s&_8(Xpe2!FxNCh)Z?^bUtnC*bV_2-axjJMMeL}#l3#_wa)WIvI^0bH*~ zX;1s<(ekk3+5pJw6F?|Clxva_nU|xli|V4Atw1E2i-oxxm5+&QK!49>S#b4fjBpc^7vH)s!DnhI+`Td!x$G2#cMe`R$%Uy20SOcf zU*tya$?+HaZEq;$)w1ZfD3dfguf9r07KFJ&0bBMmTum`7%BdNkK8a8>YTtBcS?yiU zqocoh`47Wt`zy-G=jFTy*|!%qg9Ztu!A=}J3bvMC$y^42unTCZQS>kWbv+P?n_aQ0 z)`8?oZZQN?U0Q-+?1QVxl()U_VPB5tDw|GDeZIkhLR2xD9ms-;Cj(5*;P681)?t1w z2I3WyL(62u@UnJyX&gPC(R<^*sVxG~^79iN``=>!Oet=?uGjOEzV|wO zuQ2C)lcfOkemh%pCR>_OWv; zK{!gj!-*>yEaFex2jXNyLPv}R+;bu*guCzbieg4D-CYF=aFXI)kcPGY_bxY&Y(og2 z%Wf2eAmAL|y0`OhtKK(s^IOx_d!P0D)kOxx6LCoLbXn;|k)cv{3UI zUd+ZzQ-l;tG2!9{(Z=bXi&{c(>U{FcjVR3K9Mu=3(B;ovl0>6Tf$6aEil5 zC^$IO_xSKE16CTHtaLB(I@|9Nw?N6Rt{hUhK6%Oh7#o&0y~#*?Sxb%36`)c+0RH+f z$Io+9Nz8R8U@SByIaqiQC&rr*sCe||l^70F+)K9GK$RR8HIoJR+dO6Te9&P_{x4&%W9KYm3IVWr$&QEK(A8lf{#|xUi zE?wX7YRTPq|D0X6(y-*K2PzIn8 zaeVu0uIkjv0aW}vKz|8>LSdb&Hh9Jy6Y8Fs^(Cu4>w3a*556%yKjKL*;*0577W1?O zjjl5kkGC22#-eG~c1jB95Q&nYpq)9F(7pk*UGY%ourh?TbzF%s#xiOIe~Nf#8ziEj zk^0uN9DdcP!W`TL4aDfE5^rL;(($&)$XyMMGaj z8uQ)4hI2gQc*Z$fTKxNA^dW@Gfw2pu_-`uj`;&rzmp(2aX!!`*qJdiwdW$?dulGKF zb>8KS6&(@w6{FIdeoB}e_W7sesG~!kNh3rp#0z*x)V_X%t`kqPz78+m-#NptVmcWP z$9>wh1f(Od#DSp}m>OlR19wF=VF^cbb5GNqPrw=v*I%RZqhWS;KZT7Y-^vi8?x{46 zVDw&LO6z^!@yx?NS_J z1LsUM-_hFP3P1iR3%pZ#1HeXrnpWtzKQ&*^P}|_ThoYX$yhK>P9q^!LOOOxAi(vGu z$u%E@$(+{=-Gz2Sb(>Jryzmqa;0n2S+-w)OC{N@@dBI`o-2tC5&}6uIgsRae%-cL! zzII%}1vGmq0c-1H=evuEUU=L^ok6f|46wMrZ}|~;JZL_b&yRAZ{6)3Ag4jPdxQCT& zyzK~_!x<)l&Cf!DVyA2dUBfG@Z>Xi?_~=o`%^5rWKWE35sB79$uw-q1<-+bAjw0@J z=DySjOGw>`!^ZqbS-^~Z#KZZVe$bE3w;itF!iewim`<>5&5W1;3+hVIC$gktj0t+b!<0u3nM-bqo<}d1fNHctN*T zUlL3x=Z1fkkZ}^AhXH7O@e+kiMWk!)$tgP3xT-JF(qsQmIvM^ND-4nBYk^fbraUQP zRA~JZ76!lJa=Zc!?#KhdoEb=jA5Ch_w43`36fjPV~dxf4I`BZ3ZWf-hjKmz&?eTUf!&*{}?HmjH{R zD|>3^WB@Y}2f#2mx&b$;B^em?B{tXjANBm=_fdmA6b}6@abmp~ZtdbSlE}?n^~TyO zm<^qmX!RNEkk$dA%6++U%A(OsBT666tk4%C3fCfP|1&mfXrpU;HPS$T7ynuI&@y)vr&6ANG|;4OTOtL{Ch zx+@;TIMaDA9QevrKv?h87Do*gb$0egDPh`2>;r(QCG6e-7xA$l^LuEjXNK%i6iy+gViC8gH`?rDL9msorLwuTU_6)+6yNp zZr}0{>~->UVd02U7oHpwN?dgoi82Nd4aSxQM&WRkxCsHNuR^ViBP{ya0yq?|Z2pGXyE~i}vXsSi zq$kN#G)Lz`6Qw06m(nAqKRAUW6iSrD7LBO?`zEu66h$1HMTW8GqsOKo<_gdRM&mbB z_U$27m4~y#RI?)Z5ik1E|-Qi?)ZE1}j+)OL`H>x~@Y+d{FLK&jK%~EI)J$WR*{Rfx~ASGUu(pxd zd?OZx1tFUD-V~qZdUo=NCnfo}D1zMT5VnGtdOH3RlHTZav4`h-xFNqU4+O2}X_!3@ zxo7IlWL@$1W>vCGx{)RIKdZDkDPNsW{B#Vc37E`*rP`t#r7f6)2L8335< zvm2r|z9sLoqBn3TOT^O6;tu>H(nsj;;V&TMI#oc)vIYu-k`oP+2&ezpCuCk3`#f5b zAs^KSQkyR&v=F6Fr4{|vffyxCE%n0OZgWx#cUBNNvrcRK^YB~3e(txd@F!nptpAYf zF&)izIrh)=EV8B1vu|RdEG?mPd-72oze6qmIZ_+;x%1La`VRrCj+3f?Gi8iY{DxX) zwBN5U*+eeJGRRDK7)rd(t}2$iYe6`TJn!2sqJ%Gw#9szVb>@*{iv0*mc2|OGrwxtZ zn5borpeLmG&3IZA!U~ZAA*kL*CNuk5c+UHQj)OR`5`e=ZZp1EQRtZ+@sRS;N`EA-{ zZP6!-Ni*aMqSFi2gj3OWLHLz7C1$P&d zT6xn9IUoN04OVmTC%M;`4s0MnoIT}&HyuNGE*AYZtl3Z7I-$-B4B_38LyD@7>Q-D0 z(taRDORfK4r`-$}Nd_MCKjGUoe*=KaUMHyjK6|q_9<|dXw>nB>wGoD3WsGW+!75T$ z07J65*kW#20#g3wom)1*pjYm2QzM#>7)(>$IVZo%(5R&0;={%FbgoI%)L)&>doGzNYgu*`RE7)#Hu)1SE#i|fT@V?;kp zSsb+!ZfcUKM)Z|IiixISR?gffOfk$2P}l-F#VC(CRC&bs+z@pGb|4&9Le=oe7djY< z=hDRKzJ=rU#J4LE0Ft5MRzZG2?&=3V!D_%1TipZdjS}2gILeFI{1~U_vSCPGe8UwC z6@%eMSf3|6DzeHyXdxvPbF=MbMDqN3$# z?z~lrZJnIK+~0OG>N~|>Rg(0PRBww5SexPRP!pn@1L-22xpH0i*N3@rkpcEK9Vr6Z z6^mn9@&VR->Wl1*4i36M=No0#C0zE(*QFgN@UaMLxA>1%-<Ql`!P?*4-T z{kdESGf(^W@Z??UaZ}*GLhk`yR4jb>+q&5B(Au3b z76mptNdP4)P!<$?O$fVvb94Hl` z^fHHQOG^3Y@b>*{S43#?h&7KxoH`chN2IXngwe}6${k+Dzh`EyM;O5a@a1kHA`S-{ znog4PF+dqYrO->no_6)+TGliahAxMn)zIX_P1{h^LeVW!pK^iu=-wj;f5uREoq*>P zJ`*!o@O!II4d|j9v?spZ?X-@ry%+PL`Ze<}5Y(?QHRK4=)UtMfUN`aKqQPerJJ zlB0}Q(+OXsRQL-yD5`6dzZ@ATl#n!H0R*t4b%wk&NS=ObzgkQs48%@2kVN8~2_8r9 zaDl%3N?bgK01?VuU}EA1?l>Gba@*$#5UOS(OnF}gISRQM;4>vmW*B`cfI5jQQidT} z6#y|8;U$x;#Y*iSa{M>Lo<*E%Zq&{jC_Sp4whVGRD`Z;#H6e|2ytjMSgTLUnH5ez< z6IlBEA6(>%$?Zen@#Q5P_;-Cicb#)`cf+qnm1uJST?_!hGV8$zKv_jKLsZ66e-Z4$ zm|OuP62yvcCUI5n27C2IdpT>@`>#?59vHe-q}9D#ET~%%H8F(wsI?OwXPQ29E+tPxt@o8Mot&Ic9}tB1lYcPpd=#4&TxmGmh{{#KJ(%w zl4hAf&p?o{D*rsz2?jnmSijpZ8IysWnUHNqakT6D{Q|ctm;ZLcbG_JA$>Yy1YMP1F zL4EF8Y$IbwIWGMrw~*wir6@$8FN{%lM=o=}xWNk^U|?=P`P6mr=K1bZo6aJ5(Cyd5 z^$o+@jiX)=$T(lni1pd%kt!MbA}`^usronIly;r1)YL;erH)Ai@pO}l70yWUI z5dp6He$)ZQCGf2OQ2g*xW9YnY7S0`>j#G{LDxyqEbUIKV&D}Wmf^cO!HbnDYvq660JIc(y^aT8+83aeB>1@hFK9ZK z#lCm7MuGWzp$ki8Q@JwpV=L+uCs5&Y_mOy!WOAQ8MgX`3NTl~Stb0)P?jR_T!2?JVfUNGmDm<3}i07U{es3d# zP4e;J>&|OT2ymn4+^{yEwYZFsh+R2GLXB!wTp;-xxnoF|uP5|7r~on+ZXcKbNd>&1K{j z03NLL4CH}4SpZ^58LW$6914Fu-b*I9<1{7@l_;p}cplRA!Izde%a%rKwx&sO>dTyP z?d3horm0sZ3=1DFDI1PaG93AR`H&<4S;;TkhVr079`WMBHxstiq>d6dwxwTz0N{Y0 zp%q@-3@o@BPZ3FWduB(w`UtAcnp1BYo$Vd+0TW4sT&c z(1l@U!Gx_lHp0mEO<W$4b1uIgl+MS+a4$7(Oy>mfTt8o>$<6K3FVd z-g4_N*vffO{#b~+t|jEpH)A}CNL*l|5CD}|kU)MnS|ua|3{v8gc4nrR;K+dqI&pLc zf)CtKINE5?nd}U*HVII!P+mJNN(H0Eegc|njj8p!pm{3<`IdP;?l$;2#&vH z7h7)ED>1S*ybaN5ox<`oQrUL?GGU^{{9lPmzax&SHxApQo4 zq{|`%UO0)QrOLFT82H-|2Ju>Z-N5c3sGttTIR&+)27g331AlYEJyZNR1`@y2WrRPA zm9jrPA`}Aj3M7|0OwNQCawZ5sJi&Q@IuAJxky!v*=mM~wJw?*vZ(+6uhYpPMnR>xz z*eD!h?*EsL9dy2M_uhp=UNT=e;{-q@20r3MA%s>0AW~_CpKK?F2SV_Yx0E(*J=c7P zQ6TSRv0J$@D^>iw^=Z2{L;r>fpK{!AmYKV2ryXM?K6W55aM9Id4Yk%Wq?ZLCu=l$Z z@>qi;0Nh5gt#i`jTda~ip0uI>{`xX}BC%1m`J0S{?3ZytPNG9@qx zia;H8-fa=%$r~Z37?&Ub;#=apUk z+#XrJa{38d(X~POy`+2KMZ=X79 zec}5zEI%2}CL{m=$zFgM4iF8O!y?F1?N&_y#NW#3M5Ud27GI_o!sKd{LkP zpr_z_2mJHac*e2WrLeq35kTPVh6W*4ozFA!a!Mq;o6HT*c@ICSI{?`{fF$={W1Tls zE3;J-rpE9oym2^&xA43)One`!EznyY`JVNSXCJJh8{m^y9KgvV0CCH>un4l$phN*U zpOxD(+kVvDQIY_NLLdu6U^_Sn=1bmHd2Ojrzlya+=Yv~(q_4jlw(lO|480j;&s-&=dFF5hZ2W;)~kyZkUb3+;o}6BMTnh1 zRv|n=08&2iArm>P2M`qi!u$26UZ(YB2M)8o{lRC)pL47 zNl&G19}a|x?=Mdr0l3)P{$A8Zv=d+UA`;%;j(7s%@8wsNPaiy8ztSvgZ()W#n8+{; z<`Hay?YoAc(o=-GUFEkEG5=2!o13xK05{Z|D?O*xKjAN_d*3 zQmiKMR$@aV4HN@bYVz$3r2wS0{&8MJ5U=~x*3MVK(vvyFkPICNl=yZOrtRo9-f;5ytreYkP!-FuhsgD}a{2%jVX{;{Y;LA8tviy+H2CD#FW z@qO|K;lffS2r{t|q7aAzph_1J0{p$~mn+X7+^$_-DwEf-&=MvrmQ1p3=MbE>YYP;+ zbk;psh6bNk5F#aC_Xpwpr~ml6{6dYyEqUMaSt`tGz#-r? z2x(Xv-bnC-Ag-GrlV2`2)dM~W0-$@XJ-YcbQ}c}UV|-q|>TIj=6hsWL#`uIsRiXToAOZ5e=_yGLN-a6j0z%9@U4Z`yJA zSg7#sFe)B@QtKa$#|POo!(nyf6l?ACpzSA}030;531MCV)bUB`AR=LauT}RSC+rmT z3Q$XjBL^p7|GrVWFylRJ#{{WXrT5K@*B zz`$FHb`=^-5cnwxtv@0p0B%5NJ9PivTi38(Z?pQ5qqRR7$h?}6E6_^e;Gm&K>Ne{l zK#~WLLjdsI`30>^P3Gp$%`UUneiRPxp8(6oaY@#0I54|3?|ft5gVvXyxT|^u!bHwW zek#R_A|R&&VJQkg8ri8BKw_$2mTMxDR~0VCi6mET`|Ctn7xRfDyc`zV-ti)1<2f%c zy}4^Ze=F;RZ|0e68f@OSk?cBs1o}316U$iw<`uApyV-aI0uU~u;G6;haIkMr3%Wzi zcDDAXk}$NbP;!8kAGHlqw+N|YS0PaVlmmPCUY!EE_^fwe;`Cg)|LG$zeXKcQr%|U5 z&yG6(df!(TzqdGpvz$XD&r5z;1hNQ#YTHMw07zjGWVv1{a*OM6OIZL^gja2ogkQMz z_tF;KCF_2J)?FxQdKWd%eS>*n-)Z_=jWW3ah?}OTyNm2Ra|?`Y9VVJ-Ga*=F-Go}R zgv7qTcRYNjHZ@uQ9*G}(M`5Knl}MijSt?pPU~8QwRyG-C3Rd>u+KK6(reJad#zOw0sntt#Ee`u1OYFBt92_qGp;@FHtbdY>9)mI1$s(sL4u8 zE9js*hF%=Fh+J6OuDw?8g0uZ%>EF;zcAYT-Tec3f+!|oj7fi70MV+Y8C1Maq_p^sJ+=qX6hSXifvP2G4_%%Gt*D{`2(L6$j`=L?c}+Gp)=7 z;`ANE#nX0f(Ym?{P^U|vnqVZOL+thcfwAWJ7H&P)_G?CXzkGGv6|yuSjOOd-`B)7J$D@owx4303g{L#3QRG0-gYfkLrr#2WdM^1bm3wvK=Va#bw-j zTLnPemY4o|nh+%YVr{xS!JuWpmY$&7Zx)KWNkPX}pE5VSU>IhRZ99}|x`7{Wao6#U zgzSRr4GRdaH<&F2OMBPp#>@K8G_M}tLe4l=X`TnZt6<0JTVQC*26lzDfQ;P8hP z`D6O*KXEJz=O4Ku;0XYF0e*L2r5=DtbWsFk5%F#0r6>kIP6z?;mstb=5$6f;U&SYW z7i;+$agpE@O4#=&Wrv!E+xlxdlHD*hjkWshj0qASmvzeDq(kbBhK9s{UPbS_a+~?a z)5_Xgiy9sAhxjLY0UqB%;F(PX2a-67r2-Rz&9Hsv7BEX16OJYRFj8EZb_5|mvQ)sV z@TcdRjQGco&BNhm$KdFpNpQT6WK@{9f95EKvqk~B*g8IfzUa_rpPaY9cJpED+XrjT zEVlkN%Wc_f7O4|xAo+u?0D1t#BW;2QkmV=4|0)rPBfh-uO7!!lpvUgxC!O)hCIIjRUZt7=Oy$W^a6*zHkJMN&ZNUNke z!H02}k7%24#B1&6{AcdjW!^diaMl>Wj$@#HGaue2ps+k%cfR%gDf{*>kJq25GxDP+ zU^UQ*Xjl!8{Foz&_W(pevs1mXvGWgancBYAD4~%6-IvQy8jN8H534Rq_$GP{yk2}a7T7swmfPD*)+FJq~|x(A!_$0~>WwPl<;4qLZxVqJt07#Qs3w-Fn3 zQTblO4qAh%a%wm|m-&T^{&4j06yCyv<5ROi{Lmc0*^KnNCYfg-(kVc*E~xS+!V0TX zGvhV-)vu4$zqt26?OD9_=Usl${cqI+0Krxz0xH3fmnW?Ni1*c%-GCm?hIR`AK+9UG z48(M(ZZntP6#(ubkTZLn%C%dIZ{A+k-&xRrf6#QL#Fv5ce_(*H?g7A&0rzc%xQE`p zZrHVZ1V&C92BKTSSV0FXL9~1&d zMW7Q&z2$5P;E631o*ZVKM{mY}q3N*w^v$qy*9dg;HyABJ-C2aRTZtX0fuFlZ(&L1k z$+6?G@0r7FIUU3!+0SC6KZB9qjB&i86+DXw#B>*!7+4g>CYSA7zj&m2^UX&r*2xIE z0&c==9)M^ouLH!3fFCBtiD9yhDlUZ86aba2EDn)wK%Yx|LVFm|=UJF10N!9dy88NA z-NoXEcNuTlQZlYC>in%iu$sh2_{2x})5>t$VrOt*BZbE{Q<&(Zf$hePeXwKCRv6i~ ziFpon-aX)NFzO%$jLd|!_F4rRRm%JJ2cJF)%ge4ug#$jPPZ4+?bMuGi@$#KoxuKwS6ZRksC+F95i~ zmfA=c6#nPAJ+I$f*4|Up$S-i)H6lJDp8U;fA|Fjd2iQ00@Gio!N;7t7^G4Xoyn^8^ z8~Lq7*DJ{WIrUQy*xHwPYmYbE5A7dg#6Jv+3rlV+E4tH;v%dY91|zfLr#1Ym5|6Zs zEk6|4vHci3zhLzgd0akIJ=~?4j`ZW(S^Sg5XauDwo|` zi92>}g+f_p9>D^idYp2tP8ksV^d%!b5`X5{JUsjK5jcEcESRv0k6K#`HYn^kq3u;aG&v(xiI{KyQt`5Npv zu7MU)xQfU5g}8j-O^F9-84hm=B#@H%B^$o<$V}riAAD&3Q3#VBmq}d!RoF=(0IF~? zUK9ZGyJwd+ym?dcnu?*lm$ml0*NXJ2y@=YcBD~o8i*{My=X12r;a^9meFjxqM%_~3NypFi~A;y#Fa1@d|x(yzGy_+e?p=gZ$c zv#0yb+Y0aOA@qG3A?NYqTSd|%!lgrm_4xQSF-Ss^O*D>hFW}$+^9qJ-INBe4=^A?b zE3oIR(_q_O~QdlPmH*4FKwLgMQ%xR_k^ z)UnBZ^ZY`fmgYDi$U>IPaJ>S@qV&5n7X8d`KQjGqPfSJT6!^BTrXJPv6#;rM7#&Xv$Bu;Hmq6so3ctsA;~D{=QW z=$whbvfkMpemo4CC+wtEzE(s4 zkyJtBkbGAl9G{j~E_mGohr*GXP5=3!1^b^raR2NmL?;7*V(DW|1wa+16oB)$fceR@ zH@vA=hxZd8uLb^6=QN7sM_i8at+|irXg>AAgY|^N&3Y#Bc2QCCfp-k{Z*br-CI%C| zO$&S)arc?0!Pad<;Al11E5Jun)*OUS&n;*@P-jlbfqjShz5Aub=7gPH$KBR`c#e1} zlA(+zs<<>6jo(-DF^E?`Sp>xJw!syHhV9UQn{((tzWdJUI}bN+B_d7^0r;mEb!|F# zWBFH2Lf*#$cJO0pBk@%^MTo1grO*_GG&^@Co}fucvrmhcaU3TYF(JSSMh)*J zyUy4Or|;elrEUZ2_S~8b8oE#6RiMa-KQ%E6&oI&-JvfdZVd3#THFqTctVs<@jri)7 zRPiEl!FNF7(Q2Fyo2qx*iO>>h!Qn^V6G{bBnZeRm1>d5f;9WIcoqCK4V}O< zgEk*4Kv6(oT{-Ra5jgAYUC_h22Q}6`u=rDn?Hx44k7Quq9;fM!9-V?GezuR#*h3&c zx6in({ni;xK^Qgikydqe!pN1M6cBfNQ6&W7^{5!6op)w&?2)9?m9({SsyVZhH7x!+2xGC{!EG+A?Yfs=Lc ztG7DN)MKPyTCBmL1Eb8%KN8H;>tZeZnG+g3j}gDSo?ex*5j1+7tq?vfp2sQQ4kE@>VBYkAyyQdk_)ho4*|<(X%HaS-#sfx@3|vAG!d-2?m>3Vtwk z^VUHa+%y1vecj*?n}0YJJp;!dY{tUlr=+><4AJ?39)9QEW)8&kv00d!oaVFiW~ZAU z$-w*dFC5k3%t<|A!cH=h$(dYA$_l9n%O00+e?$lfi$PQf(#jz>e6N6zS%<<+OaVUi z%735unHQ^iz@%*gz?b*Ge&pv&us+PZ(W@Bo3;6Yf)rKnqq&X52A$^maS>!JZ38OaZ zqG~O#WaPC+Ao-tS-Ge7LIWScTUlZNbp?{zUdU`6*)87rHVgU?8=XV#_H3X|+LBq0P zd8rBubBi!Lvj7XT_{y_pK1lTK%)Lj_pEm8f`B^HDk2Kq8yeR2WJ{wc_OSt zguz>CnVX6gf_VhQRip3MZ20su3x(URyyvh#A}qI+N@O`sa^1zCUsf7^qY3a~w!ceO z!_ChM{6d>e<6C@0+L5g^-Uki-_y`wg)_i>AwU5JWiNb*a8xHk5Fwxz71|cuX7J%WDz4_g^jY>PBWoJ} zXz(pYlS~ATmmMw)_#DErLAl3ZdH#FBa$l%{efqvCKz~((!3B-2%im4UhOB8KSB@xG zBSq4-u#FycB4>WvP7JSoo=wF?8$M|=>SmjB^3hVuE9DYHWkbh)^e+jH( zi=PHODii`MqYwn3p+%BOhWO;mpO%k|y!LC2Rx7(YU3w{|hD!!%#}{`TS<~TC&-=Z& zwFY(%G(Ko}SG8XM?F+s=jpGE7swJLtaDETJW!rmo+xlBZ{H_y~_$pxcph4X?_V~zp z_*u--Y|`RYNKO-9CFOK!mAAbJ@4eN1x6;Zd#gUkZXfTZl4?~W}F;=~upM_ovxLpJM z-07d(_KmT>yuNwy_>zD?{EIKXSo{0lr+-Jc8h_5ne^Q;N2)}!Pzcf;&#UobYB_Oic zh!AgGo~R%Rx6ovyolR;B-=?@wxODtUY4GJv+Q~+I5jaMm>8uwIH-CS8^gX}vK=Wm$ zcuxGuyz|dLU;Brx$1X2h%Qu}AH83Mk1o#I+6sMF{g;zUXg{&USiGa8kHx8|kwzar) zvXbDBA{?5n{R!>n=Yb~zwnIPl{I8FG5Cj3x&pGED{UhgX8MtWnXAcodhf}gTDS=)= zBf%@k!n=0a_@I%M?7$>q{q?i(!?Jb};&z=zAP&hWQyNIO%TM^YxaQdO{t>=H^=+{|@!@Zkr+qRi6n)})18Zh#ol4ssjbo_@RP^aOs0{OI6#87#? zS%{WOvY0YY(git5+IAeW*k!SaL)Nq*yBxw27e_*|(UKI?>4d*}iZ4%XuyUX_lnvt# z*v1_g!UgZxv15j@iM||PMscbG&#*w;pUwR3I=_P;R}ty<7Y!{W%P_Lo_(*H`PnN5Z z_c&W2vik!h?AUZ({p z8R?BI2YRZ4fKjPbuqb#JKtF!`xG{fv#TXzb#tSCa8dxel`~Cm`84pQBK~xut#Qj;G zSI`h@by}tJ5m%vA$Ws5p?OhUW;*rlE z1Qw|dPe1)M7KO$IU}9o|9IEd=y1in8W}ljGq|FKwD+;)u?WjBcSV27GsuUtTO|NR% z`}t`(tuJDaPKwBK7HKwF0n@XI^! zRW8nR(-RPZg;Lfi;2XTr8>sO+2A2;hU;oT{LNp~y8_@0fTF^zEyK78$HC8rycz)RCi#`)v+wlY+5XSTgx1oA zSBY(LC&0pY1y~>Og}_81sE2{l$`f^^Kd(BL&!9SazkpiXSIh75y(ri^5o~Q?yDRzj zO%7}eRustD5}Y(um@%y*5b&M~fb?x9UphWx{;Leezg1!ibdxjQwTTm0gUfw43NWH1 zq|2_LX{n=h~w81+GxVX`d2nX*F8 zS@-0Be0AX!2pRx!x3!ZI3r753?&|*g9S!>5rOEsH;tm*Cb#<&dL*CW{rUhnDD~Q@d z%i41hZ(7!8T_Nh?QXL!BvB?7J*_LiYb9-He&C{v3(vTG|>YF4&4H4qcSTas~PyFWO z^v~Wompx0iD3am*6iXW!Mlcd&#D0B8*H5o&G5(QgfYu$8pi3v#3LGK?qCOA>B&O;3 zVsJHg6!>?nCyc@4~-lqFP(5S*?A=qeV>l(pN z5BymKinZEP%l)3!;#57KD=qxB6d2(RlH21H?H1@$TONWO-yy`Gsz`8=5I-BlY0Gu9 zXENr0{rgv!emhsG;C{Ho`3c@e;zK899b zc>HLP{2rryiOA#yLg|SL;I9&Un6KF14$qlKUpg`Q)>z)cn};Iti@_2Hx&TiAlHijc zhZp_fvLN76kEyEux7W4YeM3v^$4!QEr-Zcya>{iOKh{Z(Qc6Y*u!SqAf^r}Pp zBks9+$ju|_J@`CY{Fn@43NH%5jXqo%^Loi6{!EZ_k{rJ{QLz5!qw(y(k>Tt~@QH52 z<*1LOufSyy@b2Y|q^JD=l>B<|96qMv;PngK+m-Bjw7cO@Z%Thmm8E9<;wB>3Cx?>iUiM(l@O1s<=k@L??rprC;xIkW7ESc>ZydaB-)cGg2Xq2 z6R2Q0L#MN)!Iw|W96g^m@t*A{36)^rIwicxz2^ON3njM#m!rN4;R2uq&nvBls{edn z%l+5482u?tz6t*!nv6mqLswjZgcPI)_SKZcHaGA97M;ts4Y3kLUJG0eQEA~22_Kh1 zOyNZ#xO^9_{w$%`K@_27U-~C;wLmdh2VPf5q_^(Ur3UnuA*hZ2#iKGU?6-2{g zUBL!XfaP-5y8uh^$uH9T2n5l-LK5u>(}poZ{9;hlGi`T_M@zsroaDgdlF zu!5jGy{GYpyV~MUwZ*jiNoIhT-$PqWfu5x5xdVxafN%xTKmkA@Kv%F#Em$!uS45N` zw?~^Vrtl&VH0;y$ixT9_=t*kOmC*bK zBXk6!!6+176Nl{&>l!OTT^yGDo2^irFAxISutTCfHtdX%gL{!gd&|%N+)T;-;@g?R z;EN|_KAyKMp44o_x1c)V*@(}QALugdnDRov4n9R-YX)JD7aRilOL?xZ>5e;yD@Ysi zUy%=2F)DP#H0Vv~&`ewb*cD$4#8hG^a4NAtP7-q+Y9$`aIQa{SFQ)J!5JY=NR$-DH z%&~$4vq1%z9MZY5`SRQEj?4|dKQ=c4O9_vUD-bOJJmKkcE;E+c?P>x**JW5N2yD@i zia}UPz&ZxDR-oLPj&JMVnR>D}sXU>}61E~kqo#O5(3#Ldb#37assIB;!K)RxE7o9C zFZdHilYK`grtl)bMEhb8?Z-)8R}QMZ^A-E}@!8@4iS{4Pm=-qbgyrn4#b+P0DFI9P zC03sqi%{*DNg+#C5O@(_QvhBN!W@DWQ$hb#U-J*Ymp1yFRp}1$p^`$PNOuxlL5zrk z1TH!t(O?t_EE>*}++evy!{q=EKIZmGRT5KpQNV^BRRvekV457HQ9^uNdhB$eI8i9S z_u+*cHtd`NpRCmChei0Ph|lKrQKY8`JwvYK@bN-`gLMOJouF2Vz&ixxp7vPxV?C+< zuDJ3j2`Jc}3@wHRI~xtyo-jamEa3{O0Mmm!u>-U@WHo>X5G_7Nd|~q=fbF>?+MBKn z<3$Tb3l@~falv2lEn3d->5Mt}(wUie#^%f%EVb{oa(v$6v!rLqPf;^0EcY-<+@P+2 zEg15Gz!wqeV|H3mX)@HSvU6%YUJ)b!Wj zlaigTW0!0ZFUsbJMSOq=i(d;@b37^e5qzD16@+?=hPVw|Ly#WrN$kD9J>K6QR~{ng zUjqMoZ3!KAHO8Plse@!$eu^Nb5<}sgX%2Y#CZ-5Di{SmVdcgO61S9@bv{L4qkmY9AgqX}bSIS5v%4F9w68%s6j!7^{9ueoyPD$A+m!IG z8uMI%XfUb^K_0pYNdA>L88$tzVTX_&$v;OZJCZly0?F?^VI{kD*0etRda5|^!l~)c zNqk}nO$i<)0AUs%2W#)yNVja#vsjH|&I*FeEu$PkH9??4fbUm-vNLt#U1`04TU@=5 zBm-W9(e|VPyPFfREkQOXj=&{*Ubq5*6@`M8d>w2O?JtmMKa#INw(QrVh`X8|&6nRA z9LfwHn=I0X9X@xjMtC;Y53~5}SW&Eo0I-m_!4?Z^r3gyIV{f^)!DxJDXX1&SN%^25 zOWpWoDP1K(5QiS(3UsosgewrZDqvv*ZN8?%JYo5{`7)d*#K(pmNs`=L+4=IDnc|Tb zzsr1*w=8<4T~x%kxYuhH^?1^+IQbE4B>)s*jvy>Wh^i6LqTzyYVCm(#T@82M)}kG1 zF(hm-!kI+qZcM=LmK3za6u(a3)e2T+9|~+X1oQUTurpD#;9Smx=~BfL1Y-4bWAl}F z-XEVEd~Ym&4t!#=L`MQs@>jF?^gS-~9JQ@s#9x(@ceMq81z#&*9RXcu-2ht$sObps zJ-4Ry_CsBA3>$4n`={whaOTi@-$t0y#ZKawRfMZzcsX zUvW;H%9#T%otXV_(zNlK`!K?@mY%i#Y~Ih3oeDs;NWUt?r&vn?;K8Q{tO&5FLX;!m zi-rp|gP021FL$KwxxQKLZ_?!3$p=fSBEin)q$dWABvtUz1K|n;f@trOF2hWsPEfDK>hAa0f&pkN6qWkM^U) z>f4TYPdz77wm<)By8QZY&SsAV4LdZ-vlaSk7N3pyY~*)C#=6CN7XTJ)t$-B*K1Ek!x)K{Y{8_BSZ$A9uzd+m({A!Ke$rs3E2kA!ve~#2M)1n7b96O0+;=oq&nCP>E(KRpnx;MyT*&vg_X z#&aav&*WgT;75Dgh53sm>+Sc)3xn@nES-g=L}nvAF95ti@X?+p{JOXLQP_wA5QZ>U zz&Zk63|IlE_SoD0_9ms{$*vgrBR{Fh(28G_P8hJay@d!u1E_8=l_*@n>cflnnrHL# zgp$M4IT)JFLCNw(IB&V%oyk=OULMN7cgeJ{VTY2Jjp+5{_^ei@u08sF0 z0$U%z=U6Ae*9`bsgC%_hcn70j^u+GHp-Js;P^H`OGc`qqJtRHoYioukY%s#~0G)xD zN?cjsEwgb7kBkY7_ER}8>U*qop>)Y~KKN|9bolT{;RGxue61XxeVr}lu@;|NyiGxR z7MoQ7=sG{biiYf9$&VwfufQAkwQ9W&bZGsZG4BpW4R~I(rxLKQy%~CmE5NBlsED@X zt40v*v0-PJSo||nbC9q2`?Tb^=Z135kyp>G4kOz&&ZLzuk}@q76n}#0~5tLeSNe@*RO_Fp37=XoCI1{6J_sHS#;v0YQ8+K|H^>{&`&(p{r7V$To#jk~}CIBq>)BwRc z0eqfy1No`qCEKdRQUpg7xk(|{4k48*AaYSk6msl zY;^%ZgcT0yIzNlR7XzaNU`egu`UWN4->E&mBcUABW$45&Xo?xIe>-sn+nT+fNb^#J z&D?fO8+P;<%#|%TJ((f-eHP086rMY0!#Ah0_P`70=KnWuE%{+fe#r`e&8=6n_!L_< z>a!365Ds1hSTP8z5wLQ81`xh(2ur#j^E8gkJ(70JRa89#BzW$zQE#sD->Pe?P5sKH8xl>@wshG#S$PWv$6L9O!I?T|^KR zhn(MKVv9FogHaIe(dHLy7tUOog;ONr7t8+trRccdoz6RhFP}Bvn>4LFEY01+B7Ru3 z7e&3RfDnM{kV2M}{Jbk*1%Xcqq8x!I2uT%;=X+v5{9dE{RD&wrf}f?S3hZrb_FO@u zp#?Jt=nB^P`HT%ay5W)kLbgDn{S2I+&3S@=ziT>Kc0c&zbb0XbxOp6wMsS+L^S$^{ zMLnMIQ4xQg@3d2r6q7>o2R%OTi9r{z9G5HblLIZwL zXHyFHZ%;#SOC!kM^#|w*Y*<$aqP^)#B(KlF$&0g)GyPePlH-n?D>{R(jhJr_7wkD$ z9Kl(FM+rbRi;obbUnYbATpc7>Dg?EPhEamBsHTuMApVOU+s9sx(fT+ z)80sG^I&VH{bjwYfnOWq~{|(PxxBI z2N3!Fia-d!)uUQ^5LPs##HND4I)Jcg#05dvkx&|+?$RIGm6Wi-XeWMAL(G6%cC^Eu z)@J|ugVib;(xM)T`1s?a$H%AOI3d1edp~*Y&Q;uFf5}z`emhqFtYj@jbV^{pQHQVM zvrCtIugeVxSqdx@LI74CydXrS2&_A(<_P!{!COAtZQOcWi`<{q<$K8oYYAP01KV4@ zPD8xGDbQP)U5yxc_sZA&tMKr)*|{Q|CN_VFM19+F@W)0o<3;zacQ2L(Kb^J5VX4KZ zBT4`$$=M~1^nA2uA&9?15CX9J;9UVL1boquC4JZ|0-qu%H#aHm#1%Z>5tAR2@fVZ< zZ*ZD~9j#5!-P{08af3Jm!bhA^#5?5RI@SzaCZJ+2F9l1i;^R)NBEG;XK?uOwqM9S1DFPi~jzHla zFD$nkO7huW_2Ish(jS+lKKg~as=#(42rY>iG$ssaBq@WTsetz}P-WTMri@MYcu{@X zf^5lzY{7(SLj1{G!7Jz?$luPq1;v=ISBv-ps{|ncYYR$z zcAW}Alrvx>K3^jU>no5RY}5AqAg$foVZdEURoXB4+g&k;CgkTV_v?{@{pq_C)*lG@ z+1qBb#IAKQ4qMdYBR)WQ#1|s41`q~<` zD)golsY_F&7DaLsGDva4GRt<|A|ZRhw56$>?VQhA&dAA}bNZv{$`Fb4Y_tv|epr!@ zkN7;{qoTba{Tf3E!1@6%0=0^U)t0P-;L{A=g&k<@!AFql$Wh?CStR z0M;j})e2Z*vxMgbfENN*Sn3e~T<3H4Fah9S4~zJssJBj`*4jW|&B2orK?%tg%cNkP zCAtllg@IkN1DGZMU3|o*BP^F^3C}L874;-$U0@wRIDqwyuo^)vXAqVGtfT|rpXc8r zZ2ks<5P*#Zp19R&1^jbi0l$nQKV60i08eZ_ zr)SA8BK-!2r~zzTu;LwMyOF4r{PaD%2(aJ@9Y*vp((|c=zy^VE02>=&5uGmi!M@I~ zQ}99(_LzN+f1khxgHme)fpw2sKy_U@vl2d@c;k- literal 0 HcmV?d00001 diff --git a/win-linux/res/icons/app-icon_64.png b/win-linux/res/icons/app-icon_64.png new file mode 100644 index 0000000000000000000000000000000000000000..d30da72e16842c4aa94d35f0af837f9463e088ec GIT binary patch literal 5234 zcmV-&6pibNP)1*ges5NLU2!bMrXlw6l3Aw#T1taoY&V7G8=R7a(eJ(h|x|XxrW+0a@ zn$b|uyA)sccD&-kLm!in&@5v%5((3Cecj_w^)8@#wZ8Z7>RwA(8aO(Ir!>PX3d=Nv zH;RVh9pM2jn^+S*684)ipzyWQlXZSkoT>ANVlx(<1E=cg&HUozFV?bVPIy$8s5&JCl39$(6v&}s&UTg1H?Av7u~@A0gTA~ z-qjxperOIxHsTb^gB7 z_wBQ4Ml&O6K&!zxVsjz{@&Yac#@MnALUPFww#)IKR8p~Bl@u;lITWr`61ysPQYojL z6mb~|ry@34V34u#3IUA8A`oJc1VS3L%<^V=GxN54`{YO8`?h&A(rEjWoT@whZr^_0 z{e6AT>2vzs0sde9Zwt@&fSGSR(HlqNHnqGO#9}}d;DD+=t;MMaCcbx5_I%Fgyb;j# z&Hq`W7F(eB6rhP_Z4{gm;vw~QYxdh8eD!?H>zoqMdB^T{FHyQpEw=!A@hN|iP$*uo zkbAP@*+=lNHy6*<9M1^>UEh3ejfmX>)%AcT&!jJsqZZs=4!CXn@7BJ3w&qyr|7>;C zdB^VdcsjTZI?vTURZ&<#pCYjJ_`bD|<9-HbquVnkpzm8RuAu~5pt_#G8LjrIiYksP z`QyO1KOVa4s^e$U*J%;Z{q3h(6Mkj`U_TGwy|XsdnvbgU8jGaXS2S(r6Z{2;tpne< z@^?VPcTQ!T`84kT$CocP(9bLMGk|7hG^iVX4#0DbIwyo0fQ@~SZ;RS{{d{5jz+LN3 zc`H3B0n6@uJBgNw&j7p~z?HK$oNI;Wx%zd|s0k-~rdp)%5hB?3)?Z)whm&?c+k;i# zd1a->_ysC9TA+Q_9-4w{Qm3b3ZfvFxO+e2=62W~C-8wNk^w7{AFZcj23h(ZZO|bwotNcT_ny1DpZAQXPKL z!U3;z+{^^#@*MyS@nXKDo4x6Dc>_e&&eZkVDMVw{VsUj5PEkc@2VuP{8P!G8VJ$fg z<5VV2)@XtI6BPi2R6rSlbll7UOprPo3kqD>mgZ*9=JL5%X9kwdO_T~~%G)BuWX>>Bw(5$L1R#nEHySb-wV{HH z=xd;$emH@`&lR*VHnoGkx2^JY`5nK%JduihKGl)=bgUzlR^!dO#YH2iDh0J#pdn~m zs{wVNN#7F*Vuscr(p!aEHNI7^q-ug10xC^H(*P^RL?u~qh-8gVm`Q@t_fZ<1$`!`) z4;IRWt%v?$-Rm`USDP;T;*NIH+qW^(-L@s!mcGcereG~X7a!So&1cn+btbCf2i7ZF>y<$&;Xsm9L?9g*s!@FevIa0LAfoUm@+gi^zB-ki z+&Vt=+K%BL{#g_cXw9&-QvgG_vg|J(S(onW+mcz>abvQpH5Npp)oo`=h0_EZfe+gd zzGuXblR<30aR4bcu%>LSSF$QLA^@O@)R5v}Xyh~rK!N~;Y_2dhJpSnP@QHih`TqLn z!`TL?*zD{CNO%!|0bqJQ@%5gTi$1!kW67dTsqT)&l8Mu5NCW{`2i);tMd-&x%5lP) z`3FEVs8Ce~7Kx%&Q+Dc26-IlL8&-rGa^m_fH%+ps*=`P zuWS)30ww^cMlJFqljYpNz*E@+FWrB9`&XX^Py*nG!2J+-M8YW%V8YU?A;1F=3(I)> z`!`?MyYA-C_FTMdQ?k1^Eh*2l;l>bdooAH*pla_T)L^RQ=Le5Z48Feqf$Z-4c4S}v z`2b2N0w{){Yp+@js3ig3T;t7h$p<#JFMrRPU*DSP`t1!0FBlxUsyL<}hwb4?Z-uD45tCq;?*7F+Yf^`8Hm&f@}ob zsQw-RvtS8QH~&T74IRDSMlU9R?Dl!kDyUYe0XR`yYzFh!CrT|Jk0ll^A`)>lOIT)& zgquuL2%u0zap;I9rhiuIO+8Uc$4&$yP>?DDB>_^3g-QFXWBZHu@BH5I^8m`I*Meqd zFe?EjEWPz#TX5mh)tS#GQnGvEIm zY=K`BKg|HF4fg;%C<@sLX!iM_EqKiD$vjs!^cA8?Qb`wbi9kiD6qk+(p*GMrrzh<8 zr*@9)-23zVII3oFiUjl{_SL(VUKelS?G#)Kz(8FLZ=IpjT1#s|s|p06YgVNO6opc) z5&$PkE6i~DM$fi?Oj12P47}LPED-=m6#y)ikRLpz-uN!NF!6-nnm8OlsWi|q*l}P< z6+$5q2~zP7VFaxJr-HIRJT_$Sz56SN_oBKDMkLe|@U^@9J5vjin?c-8+ND4>aZv>V z-_rU@3jo%J>JLIetz7CZS1(b$Z_^yif5_z1pOIMCMUrSsLq%NYHb7x~8ve*W%@lS7 zJ*j5`V+t;L5U7xDwF!mLMjAk=)H${Z6+@*6L_&ZJSKIQ1z{j?|uTDSm)4Pu4>j=2> z@s&L&nXdu5NfoKe>eOa#VHpILHc*s(OB;Z&8ii#cXr-!FfTOl_i6zI2@8x*uy<$x- zpbBG;p*``MZBHCf*P=2xrO-;K?j*w%r;@M~C_$y68V@ic>VUh5yh1?rXhkW=0=y5g z;0Jeo?BF23{n%yw1r{F#bYax2Azfu{oeOo{XTNM&DhAH}Euxhd*S4Ysv~D_do4F$` zGy;axt&8MB^>v^HDuBYk3LF8E1{ja(c}7j#nT8|D^;qe%#_Lq`2!NDqsmxovlK3|m z!-cihP{}Z)`gM&mKV_5&!x%w4;lcM6<&uwbF>sN;0#w3M0Sk(PE@o8LWM^UiR{8Am zJGavAMyko2(51dKKrChuO9&_eAwa3^&}E60VF+jOsJ07bLCVM{y~78`-soT6hImS< zbT!$gqV0^(DnaV%6GjnBB%o=_VlhCe5WxBhv4k~M6>ym%NSS%sNdPKt?S$bJ!g~@h zF+n0}5R03TnDCf{tP%i#l{}%cq;xJEp=CG;%EXaF*~8|A$8txOTy969W^F1Rk9%=} z2q{7c2_Y#Y#2~B#DMBLzg-*g!j3DM2CQ=@~xFG=s7Ia!mceLR)Z5omu3FDR)AVG-$ zxzY#`PkKnV#F5H)h{cSGM~ERr1Y!spff0tE0TECPAry$~Lum*RLX5yK07FNoCl2o) z{-+;)W$2!YK3;zZ+PhM%8@m>D+}^#Y<)ZclNhpGfl2$_7(9;tF=keV=fJXZlKxqT8 zkoQ^2`?P^&43Ib>rpD&NeMyT7TL!HdY9i%nBI&6Zx8;!tGeU$13suL+imPSSfmTn4 z6fhVY&ST_QZtw81+}5Gti5>&JSQw8l+L>j;Qq zg77rhfvxPmDj_ivwxtl_Sv4qI=BLW^OU-}Rj3o?`X-_rg*&;Mh(t@bl1r+MGMRD~? zsDv3IqY*;_$^~L@V4`q*VB*n{6O-F^eK-F+>hpo-1R#tCuUen%U9vjy+5T0X8~ZM3 zUDCQBPPMkWE4aW&7;bTH*ABfuAfCeWphgsR?k5No6`2{i5nh*Rs2yygRZHUcX3g!-f(cqm$788kXM>g&Ulsd0rSWOnq-3jVo4y;-xAMc651k3(|Ywfvw86)ZJQI9El4h0oDoQH zT7XX`Gc+PF7<@Mu7P#KFj)c$aOVMKoIy5N=LaGJ(m-NKdm^5KK>4jJ!F9*4-mmbtFJ* z0idEZ>f2wxIPTy3xBCju))3IB`pu5T<|LqUBGd+WUw>cfJ@4;~eX-rcCLtCyPEY|9 zL~vjsFmzcPl9zR&dvOLz|BQgsdKes-M0rmZeS33QK1>*mCa$5%y0UEX`iYWmyZf!& z_FaP*!zr8y%|?I#kc)x%Kd)>1L`R%ojtM@Z4c)Iaz~KHdB%T|=%69@Rn63w1jdV3U0;)S`n9N%|aCj=Xd&}`l(96;uzyNAs9| zIg746<5)RF#BC)pt&Gq}K=iC}bqHvnc&?=UkDnaP-v6C9Fg+&$dv5Hy$|}ENsJE)t zzswi`brcfO0caI){Tej;e6&q*_~Hcg$_41?O(T_w15ixo${0H_1#fp2%MO;%o2!DZ zmW?YPmaKmkX+xvqBsgNhdx{qSzV?^H`|AkUdsEjMLcXi2AH*DD0r*<4>UE`}W{qZU zfzf>-ra0bekxRG;s;x-$G2kl5(=1qcpaea{^|9CtZMI=J|pcDW!t7AN7h> zZWN=b#$QoSCLVyKIu~0C$%rPVTAiq#WJMaLRsG9G&{}uz5r`2mtpDyjBwnU>lXu^d z(w;A^NEbUKNSsdGW&k7rSXC62C|aQQ9gxsO(dZ-UrN(Aw(Ez}m6C?=4tG|ZNd%jVR z6Y%U4Lw1k(!*IS(WbDb`(-L2Sd;k>e%w1tlM-^U410=<%`{@f&fWgtSGuR;@bYC z#Jw|&@kXj|Rx^>19>ddt-dGoN1B>Mibw@r<+rX!?uT=?RH!Ab5Mq9(sCk zdgp&19NGECn12io_#|AGSVj|jKH1n&ViajbTMTIb!ivm?KfE}z;nL3JHT{{GIa94T zT`9xh-J&hOoGm^1>tj<7{^-roX8?@Dt@aeE=K{0Je8?9#Uy(-WE3WA_D?ZiVy5XAM z%qLg2C%fA`oUvA%R7i~b#DU53@n;679)9qx+>RHr#lxtsb{=lEPia+7NBg2QIRPL8 zpfv?7_|o#^_1E^d-MYFf{r>)zIK`fof9R-4AO=UK%J!9P@%O(ymV59&-^~4{>{fdM zZncZ3e+TH4!JLT*fHY0iyM$9*?dBt#9f`CeiO@WHJam6>S-fVu)uLi~++IndE=M!aQQMK&?oNb@6y`3!rYQ>HVFZd=>e zdi_P6=~SZWf)RNo-WZ*p{Qa?spY0l$eqh&$(mvF0VP({8VP`|m1p&2v$57RZwq;55 z-M%7o%LkUUukX*qmt|rumC2O?9hfTZe{x{_;U68E+Ig&iAym~oI^#Ph-t}A(P%9ps zR%GC`qGfdkeeY?HEl~^Imn$E6a|(lSfNQs~v+GHl$oV25l4vVUgje(%f)CWa;&$Ew si}OuDG-mDFsDM-NXbU^XfkeIhFZ-?vOSd%#UjP6A07*qoM6N<$g63D1*ges5NLU2!bMrXlw6l3Aw#T1taoY&V7G8=R7a(eJ(h|x|XxrW+0a@ zn$b|uyA)sccD&-kLm!in&@5v%5((3Cecj_w^)8@#wZ8Z7>RwA(8aO(Ir!>PX3d=Nv zH;RVh9pM2jn^+S*684)ipzyWQlXZSkoT>ANVlx(<1E=cg&HUozFV?bVPIy$8s5&JCl39$(6v&}s&UTg1H?Av7u~@A0gTA~ z-qjxperOIxH{an ztE$~hk2gDOux79eOAreXmLv!e3q!(DBpg9eyin+Lp$i6&7t}?7cM1r)BPqohGDPtr zgt!n7f}tn?1OYD00U!uZ!7S`zq1m1FX1wibTUGh)N0#mB9=9{QU<4ncQPovhnOWcW z@|n!+S>X5bd-=WmUQU|O$?m|S}VcYy{8(VkTfrLG>%pZ*yal@8F&r z3Mad(3zgpi0+`a@eYrcybUTP{VW!mp%bGS<^=;Eg=evV3jk_SPXJLu7S>t?z(*jy-{Jf-gWvt^ zDB`_dvK%)79e4evA)RWz0idt4pie-tG4~T3Im`ietvibeO{oSzb3#T{wbyQn2t&kp z8p^r%z<1B@o3GaSWN8H4#bQIl&a;^Kb}(*Yg{Ju*QggQ#y))-1SV))W!NeZ{a~ESh zyy}QxC7Iu3rUxd+ho7DJn{7)<@D@eD#=m~6iH+no61bfepNqwWkn@?Ay7&FdOYsF! z+g}6ih4_Yf%Pebs%7O7Gw9Nl0=p zh2pO%U>gHszKBFbdN-?VbTrqiC%CQ;;fq$6p9`m2Rcqj4*w3Ze{=FK`J&35NzV8=A zOoU^^d_OAo<9&aA&i)1W_O!qIsEuHJfmwY+0jGlJbE=*MuTx7iy*m-$gV*=3(OiJX z+L?dUEsp*$F;EpFL-?YPxmJqi_V`p zjN4hM)pIplTk3#Dh--Wp1W~LEP~rJ$*;Kk4tSNZg|oZ{ejlySYHBp(8;X6by~H&6yMQh4!xwFjS?rfu=`O zgQ{oe98suEZoQ%)mO|_W;opDor<*>YtN#0YnSpHPLB;f`g;o;CBAhH&l_#RmB+X^M zVr_8!d$T}@JXRB+I1xm|%p7~BhAo}nZ!AzG(H;|ggE8Jmk)tuJxbWWMpdD?R?XPMQO_7^JB6hJp!^H$5lbXQ6hyy|RoChQO^YO9 zla(;H82PbMF4d8&xRMqe({l~*Dfk~^iaHB?ctFO$rm$YX1Ko#~DOP#asGFq%vKlZz zYkPF?Rh1zhc#e<~l&)@re7{gLvsfSrLMhH2o>az1@AV%!{hTdtq&u@$vMIH)&G8^B zCaTu_h+@trCj>YIJMx`^Q9|Uaud1peYAj}rIidbt#1|4xX;9LHTaSf0cE5Ix z5RHCf_anAHG&iw2X4O~6Kg_9dF-;E94bCYnqtOW?p4mPn_I*xGuW?Tjz{Lv669rY8 zDL>3^{(JpD`0PmRrPlxXtDiJX^J`W*ado;S(-564c~gMQ>3#umLDo;Ii>B7WAN#@?I+#IwP%0DN~OQt*pc0kY|02um~fSfo1PkWTn9Dr z>l`J=H#JHLA(SD=wgf3}ye~d6q}Yk4?QGbtlD1;$c&Z5tt)cE&wRj0aFcgGMhRt5xdC53{py& z6$NPnLU}{LO9bLaKpR3Zg3+NhlGuQPGgIQ3;pv&eY&e#DQND z0a4KXQ6M7U1pwK7>yJ)N^_+P_rn&W|hR&vrRBHn{LO}W29fba@Ei5wyTFp#CIEE0e zCEyywObo8$)s|0u02#yz(stRjnS~RY67MKHcNdupl0vX_92CZK$c;`NDNc+$GPCFP zCr6&V`ye#X3V@5*;732eaS~Adk!anNTyxW3U6pEEeN$6c`zJG<&6Y@87g0Np4>e&x_j?Gxlh=Ly_ z0ayY7J_+-J-_VNWXKrggZ`G;EFQ&8N(+ni0%f0g0%;kxqxY$g0^a!gd1DC{Xr+tz{ z60uM&Dibp(j2>1Qe#KtZ@SAdjb=Xl3#->J{XZl|+J^SYN+&*Z{cOsuC0seW^6fKzm zKhu<`KLP^qKY2~M`^?Wae!jWGxK0?fi6~r2W7b};?6iuZnG4LZ%4L?(yhUc(n+XXE z&O$x!Ldq?WP69!Kfl?VWqvNcmKXluz7b@-Px9x2zbb@HwlTyu`?Mwo#(F0c9rC&a@+4uaD@0ga}B0QJTnMdT5B#&MQu5=A}xL zwcC|KF$f%4_hlkL2sNYAks%O&;e(Sy!I&)qxl?#Ka@mxF-n5L5!7jT>QI{3qR;J69)eH7wc&LMOlk zg)nLI2CV`BrAR4|V(95*29#m~JYoPZ%TWXdY&R*U%BRcW@|6Z>&J~SaU1T(-;lRr) z>VO-Qs&aw=gB9%Q8B7lyW3#kFb*G+l8qB?}A1u_Qn`HgZFgD2(poW_s4`OuykKjUgrtCIcR*1omb{0|G!`q1O>KG31d#k!;yB zO9bCE1sxbx4*$QYLG`nHzI|{P=FSJ|5c`BNB~2*AjJ%J z87cr-=_%%b01dhi9!I{j_Z>h;l44>IDK;@yJWmdnFB4|#1){O59Ws?52Lu%{Q3Oxh zq2SCEF+DWQJoPWCEA@hEO@5$=T%CA$fC~|<8)?vW!o~0b)*}EOAuO~Z*4HS^l!*u= z;!_tsxPpjT(VKRK9~|0WdhQ>;dvtPM0&czw)@kRSdae-kb;a(L3^Z1k;TQp)#w&*F zC~f0aIGqpxt-%Vk9GVzXItwOdfC!`*m<`Hcl$scT<=2NKA09Xj2?^Adm0E7sL@XU`UKwl>a zgE&}6ui7<1F@Q-yV1Sq&RVDH8DZj*=Nl}|1p(FNB{M@f87xf@ZX*}^LE#DzR%1FR7u42z&9DecNJ`N2D-y z&?_C}!CwmqY`-^3{8bX-h&iI@$cd8febL;-^#XcpASjG#eY>v#4E=zo+1@n|aNh@z zr|E_%Sa`$)qX z3%nQsP~ir%u<00f)jL&)2*sRRKD_(rl-%`Vxp>NXECd;sWU@&qq!(HV0uhlAgy2K^ z8tG$jE(jn& zLUJN$vM~I6UJf9%BCYGQbav{S9P(h>O6GhW0*cJOoL$OTfs$6vl>U4i$2x zAMGEQd1S{uuwwvU`%NS=EsfVmQ{2|x-E?tBcVnWV*#gK7DvUekC;_3P)ZdAGl30ZS zo3HK6y02k0q~BY)pi0R>x$Kf_D_usHC6hoVNEo$@D)iK(%}^C4X59k@2!*EkMO+8~_4dL%QrYZS_?lsL_EuCpHEPy#Q)*Oq7!YD{Lj*tK^ zp4VZl&IkPE$Pj!)CV=%d$97>C9f67~48WUr;&^X$`QTiT_TM%^v1KSTX|Oa!Kt^O5 zA^^{eW~#15Lf2@x8I6eiZg>QcSI91d#|QIj=-A|u{8ahzVqQJ6{e|3K?1;?^)h8hG z5uds_)7sN3u5D;EZ)@wyeqz-r&6I95px}fA=qf$H;~}FDCPnPLH<#mupGvuu%NI^BjFgjG=V+Y5FCWi~pjvXmI`11XBKV~mgGL}dHA-)J>oO`X+z4|nBTXSdXD_v`v zH+HSf8tFy}#V!R&nFqAqZW21)C;^^tAjxbP3@PjW5U{q<=Rg@Lc6Cl6umf@{1cwD2 zhM#~%b_qwPrDqX9Oe|2CRy=TcvNC*Rs&9O#_|X2h-52^^EssLGqIzq?3nl0;4LzQ2>`^)ls zrBbjEQ*ULg8vHp4@Q-y@#1J9D`xxubGrPB3l(?a7RpP33y`Ag3)-+NwO{Ca~t_29; zvS}!olJy_nJ|L~sif%4P4UMxH{ z(1&rv7v_Diqa%Q^j0E_jAqu{KG_naKvIbJCRwY~7x5`g7ZZfaxSle{w+D&b#rWQ*| zI0>ng89L+IvJylrbVLw=6_M*oQE}L)OpKP);k~0XgNLTyKGs)$vhUT>d(&f>!R(z8 z(FOSxSrd+$px8)A0cJJ{GixB3Hq4|U4a-rsnKotS#6mDc)NG8Y*F5_U=8*ntV;_l~RPeWj88{q~O^eYf;-*+t0(%C?P4B~E}_tHowqe^j_2|ZtSqc7Y#xSgUKbrp*EmzwE#|UL)V5D zWZNt#a^jOqCs?#|C6F>OIb6ojzHu0R6WDT;v3e2^%pfMtyS#I6-hK3Ehbqs!JmHK% z6HvV|tCr?Rx26Qq6P7?gl!(CeWHK9Mwk}(nq+64MwhH1@EiqOM{=0jGm7rLMQj=ZvPC@`tA!&#FguKa37en% zmr?uS|J`5io78_tsNTMyW!)J!D<^0Kw7(VT~>Z2E$~MI+zY)I zw5EiuP^4w@dKF(DiuR~z0sGn+M@})3+T4nsO|3{a08B0rdukz~ZF^x#;b{LDoIT?> z<&cB*;{r*$`b9Z%UV9YOBOy|9s-p1HwBy|K`2O5)e{vKvSccyR$mc(u-I`6vKNEy6 z5~HnF)77>5U;}`Pkbo-iV?BwKafvaMW$a$XD4y1Yo=qL-Se=GTWz0tefj}yOp+hqm z*gJxzz8p3W5;|t$zi|v-bS~`=35xiFn&l!7D8<-mv-sJ*eCelOeLX*h#S-wF&owt? z4f9I|secRbh4YyhZ=F4+?X_B~r9ZQJR3&)}*wf+S=!OK^&gw>cPX?(536Kg*6hSX^ z?~{XLuiU*W zaB#H=cLT^j0yTPlE)!IJpU9t`o?nPi0q9*O@ec(Xzr5(z z!$Yw;|NcCfmv(i2Q!wAjirW`ZXH2xWAvheGoa+0rbN0{ckBC~={L;2$;-I!nMCIr8~1Vw)%VRQQ;?Mv&|EcKL^8e{T;;x3lXs*df?{=hW?oT z`SPAE=cL@%z}&hFbqAsVI83k+Y>oynzuDnh7Z)p3o4R_=v!-7lt?edpFde+CLR6Vx zTxJ|7qW$c&NE)=fnW%t{QxgDO1}Y5LRa54p3H5$sOkbm z&dBSdNm}DYjZ(`gOacRrIlg_cFepdMZpxJAp|(uo!bVGEEz%o_yxlj;`VmC11dtTo zFIM1hRhwNlzQ1Q7pLyDk{3rY)5iCJSNgyRO0b;&-miiF{77}?fvDY>xULCJ|?}zUW zy+#1q0JL7*k=gVIz0Ln-bJn<~$Kq_eWatsGva^*A17$@hsktMd`D8v_joz08Bm`g) zL#~XH$69ttV8oR;X47cjwEgr8ho>HT`fzS1fC+;B^TQeF-vVS;Cyln-Hn&`PR!idg zjTw1*m&Hbg)QV3VGk~%JN(%A6#iQQ4Pw-+ynk^w|9$ z4ZSeoU<&#li^u`U`=PA~?JqL`(g0E|2AZy3+jPc-U8(C&Z8Sf-HZ8I(l1ZYDsxFf- z^r$F#WYqk9SRJW_tFP@zq0d(gd(WggBrxtuK3vAw?rHn^myYJ1eD>&MU(v=4fINT# zfFghr5blhtCL#fk2mq<`+pM+Q)--=_y!+A4@zUel4^F(WYrH%J4R!$<@DlVIg1?wkQz86C z7Yo`vB@vR5{KHMzi?+5~*PoV6UbHS_G_;xo!7Kl-L1`iwm8ww@jcx=0O8^;3sIfh0 znT6mAfpJIRV2LODCM&P}b~yLThx(`9hXy_RDI)}3#cQcA!Gb$NGExB2CXhL=(^`9V zPx{)^n^N00WX&}_Nkb-1fUi)jeT2gt5FrRKiD1x)(e@Gqj+No;&%66~O_ZN{;^5SC zZ;uv^A~Y`rXwWMN*9U6G_zUfBl!yd8(*z*hokYv^YZ@;&w=MCdElr8@PH9XS%_dM| z58>~&NQp6VWl$Fc3QKz-gbFF*>%bvM%{#TjKi7Et#{{XOoGn0i9QT+_@k? zk-(Hod~n7t?w%^Yvtz9EtL=w#Zyud-#t~|J)V4>LAs5@+aZA)`S4U9kn|hLGU)XM5 zdqzuYTW@P7+mo>%)XCkBQd5ZF3Ij(94)#u$$99evpL%UL|MXKwO1m-Jw%2v4i*ELK z`(0I+KL;0c+5l4BNi=_TZR(oSn-bTa(b;(VhHTPkGzd^9_utcGAu;6u2Xd9lhvWJ8 zcTJSH|FnPl*Et6>m~Cc`OWSM7O2iC45x%eRopusHy2U{DiVpLPOS_U^+T4=9cyn7r zQ)kj31MZ14PeiaGFj#bW&qQ&oZ=&?li^GM-UK%d#p4JIdG=z-C?aMwlv*JM;;!Zo7 zSESExmTNxOVO?=EQ!9o8- zVd~xC>6hOew;%h(k&>SO z84qr%KMQbqcb!0003+Nkl#yy$ZaJqjd-;aeOh-q` zLdFmvESrVp|l8-Y1zEt}P3!0Q#1o$K@d&0C*^1DEQ zFTS6M{zxRciK6-k5+7^eefeD?00_fa5%~_x-U9wR0X_iye{<&bHLt%jIsgCw07*qo IM6N<$g4mtV8vp Date: Fri, 14 Apr 2023 17:28:14 +0300 Subject: [PATCH 024/298] [linux] handling 'stabilized' property --- .../src/windows/platform_linux/cwindowplatform.cpp | 14 +++++++++++++- .../src/windows/platform_linux/cwindowplatform.h | 3 ++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/win-linux/src/windows/platform_linux/cwindowplatform.cpp b/win-linux/src/windows/platform_linux/cwindowplatform.cpp index 003dc59ba..9cbf33f25 100644 --- a/win-linux/src/windows/platform_linux/cwindowplatform.cpp +++ b/win-linux/src/windows/platform_linux/cwindowplatform.cpp @@ -50,6 +50,13 @@ CWindowPlatform::CWindowPlatform(const QRect &rect) : CX11Decoration::turnOff(); setIsCustomWindowStyle(!CX11Decoration::isDecorated()); setFocusPolicy(Qt::StrongFocus); + setProperty("stabilized", true); + m_propertyTimer = new QTimer(this); + m_propertyTimer->setSingleShot(true); + m_propertyTimer->setInterval(100); + connect(m_propertyTimer, &QTimer::timeout, this, [=]() { + setProperty("stabilized", true); + }); } CWindowPlatform::~CWindowPlatform() @@ -121,8 +128,13 @@ bool CWindowPlatform::nativeEvent(const QByteArray &ev_type, void *msg, long *re xcb_generic_event_t *ev = static_cast(msg); switch (ev->response_type & ~0x80) { case XCB_FOCUS_IN: - if (isNativeFocus()) + if (isNativeFocus()) { focus(); + m_propertyTimer->stop(); + if (property("stabilized").toBool()) + setProperty("stabilized", false); + m_propertyTimer->start(); + } break; default: break; diff --git a/win-linux/src/windows/platform_linux/cwindowplatform.h b/win-linux/src/windows/platform_linux/cwindowplatform.h index 6f64dffd5..8f15cf01e 100644 --- a/win-linux/src/windows/platform_linux/cwindowplatform.h +++ b/win-linux/src/windows/platform_linux/cwindowplatform.h @@ -59,7 +59,8 @@ class CWindowPlatform : public CWindowBase, public CX11Decoration virtual void mouseMoveEvent(QMouseEvent *) final; virtual void mousePressEvent(QMouseEvent *) final; virtual void mouseReleaseEvent(QMouseEvent *) final; - virtual void mouseDoubleClickEvent(QMouseEvent *) final; + virtual void mouseDoubleClickEvent(QMouseEvent *) final; + QTimer *m_propertyTimer; }; #endif // CWINDOWPLATFORM_H From 81c2c4c8d5b6044be99e09eee97c34897eb7b484 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Fri, 14 Apr 2023 17:31:52 +0300 Subject: [PATCH 025/298] [win-linux] adaptation CSocket for Linux and refactoring --- .../update-daemon/src/classes/csocket.cpp | 137 +++++++++++------- .../update-daemon/src/classes/csocket.h | 2 + 2 files changed, 83 insertions(+), 56 deletions(-) diff --git a/win-linux/extras/update-daemon/src/classes/csocket.cpp b/win-linux/extras/update-daemon/src/classes/csocket.cpp index cd118f6d1..65c6645a0 100644 --- a/win-linux/extras/update-daemon/src/classes/csocket.cpp +++ b/win-linux/extras/update-daemon/src/classes/csocket.cpp @@ -33,24 +33,64 @@ #include "csocket.h" #include -#define _WINSOCK_DEPRECATED_NO_WARNINGS -#ifndef UNICODE -# define UNICODE 1 +#ifdef _WIN32 +# define _WINSOCK_DEPRECATED_NO_WARNINGS +# ifndef UNICODE +# define UNICODE 1 +# endif +# ifndef WIN32_LEAN_AND_MEAN +# define WIN32_LEAN_AND_MEAN +# endif +# include +# include +# include +# include +# define sleep(ms) Sleep(ms) +# define close_socket(a) closesocket(a) +#else +# include +# include +# include +# include +# include +# define SD_BOTH SHUT_RDWR +# define sleep(ms) usleep(ms*1000) +# define close_socket(a) close(a) + typedef int SOCKET; #endif -#ifndef WIN32_LEAN_AND_MEAN -# define WIN32_LEAN_AND_MEAN -#endif -#include -#include -#include -#include -#define AF_TYPE AF_INET + #define INADDR "127.0.0.1" #define RETRIES_DELAY_MS 4000 #define BUFFSIZE 1024 typedef struct sockaddr_in SockAddr; +static bool initSocket(u_short port, SOCKET &tmpd, SockAddr &addr, int &ret, std::string &error) +{ +#ifdef _WIN32 + WSADATA wsaData = {0}; + int iResult = 0; + iResult = WSAStartup(MAKEWORD(2, 2), &wsaData); + if (iResult != 0) { + error = "Init socket: WSAStartup failed!"; + return false; + } + tmpd = INVALID_SOCKET; + if ((tmpd = socket(AF_INET, SOCK_DGRAM, 0)) == INVALID_SOCKET) { +#else + tmpd = -1; + if ((tmpd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { +#endif + error = "Init socket: socket not valid!"; + return false; + } + memset(&addr, 0, sizeof(SockAddr)); + addr.sin_family = AF_INET; + addr.sin_addr.s_addr = inet_addr(INADDR); + addr.sin_port = htons(port); + ret = ::bind(tmpd, (struct sockaddr*)&addr, sizeof(addr)); + return true; +} class CSocket::CSocketPrv { @@ -86,65 +126,41 @@ CSocket::CSocketPrv::~CSocketPrv() bool CSocket::CSocketPrv::createSocket(u_short port) { - WSADATA wsaData = {0}; - int iResult = 0; - iResult = WSAStartup(MAKEWORD(2, 2), &wsaData); - if (iResult != 0) { - postError("Create socket: WSAStartup failed!"); - return false; - } - SOCKET tmpd = INVALID_SOCKET; - if ((tmpd = socket(AF_TYPE, SOCK_DGRAM, 0)) == INVALID_SOCKET) { - postError("Create socket: socket not valid!"); + int ret; + SOCKET tmpd; + SockAddr addr; + std::string error; + if (!initSocket(port, tmpd, addr, ret, error)) { + postError(error.c_str()); return false; } - int len = 0; - SockAddr addr; - memset(&addr, 0, sizeof(SockAddr)); - addr.sin_family = AF_TYPE; - addr.sin_addr.s_addr = inet_addr(INADDR); - addr.sin_port = htons(port); - len = sizeof(addr); - - // bind the name to the descriptor - int ret = ::bind(tmpd, (struct sockaddr*)&addr, len); if (ret == 0) { receiver_fd = tmpd; return true; } - closesocket(tmpd); + close_socket(tmpd); postError("Could not create socket!"); return false; } bool CSocket::CSocketPrv::connectToSocket(u_short port) { - WSADATA wsaData = {0}; - int iResult = 0; - iResult = WSAStartup(MAKEWORD(2, 2), &wsaData); - if (iResult != 0) { - postError("Connect to socket: WSAStartup failed!"); - return false; - } - SOCKET tmpd = INVALID_SOCKET; - if ((tmpd = socket(AF_TYPE, SOCK_DGRAM, 0)) == INVALID_SOCKET) { - postError("Connect to socket: socket not valid!"); + int ret; + SOCKET tmpd; + SockAddr addr; + std::string error; + if (!initSocket(port, tmpd, addr, ret, error)) { + postError(error.c_str()); return false; } - int len = 0; - SockAddr addr; - memset(&addr, 0, sizeof(SockAddr)); - addr.sin_family = AF_TYPE; - addr.sin_addr.s_addr = inet_addr(INADDR); - addr.sin_port = htons(port); - len = sizeof(addr); - - // bind the name to the descriptor - int ret = ::bind(tmpd, (struct sockaddr*)&addr, len); if (ret != 0) { +#ifdef _WIN32 if (WSAGetLastError() == WSAEADDRINUSE) { +#else + if (errno == EADDRINUSE) { +#endif ret = ::connect(tmpd, (struct sockaddr*)&addr, sizeof(SockAddr)); if (ret == 0) { sender_fd = tmpd; @@ -152,7 +168,7 @@ bool CSocket::CSocketPrv::connectToSocket(u_short port) } } } - closesocket(tmpd); + close_socket(tmpd); postError("Could not connect to socket!"); return false; } @@ -182,7 +198,7 @@ void CSocket::CSocketPrv::closeSocket(SOCKET &socket) { if (socket >= 0) { shutdown(socket, SD_BOTH); - closesocket(socket); + close_socket(socket); socket = -1; } } @@ -197,11 +213,13 @@ CSocket::CSocket(int sender_port, int receiver_port) : pimpl(new CSocketPrv) { pimpl->m_sender_port = sender_port; + if (receiver_port <= 0) + return; pimpl->m_socket_created = pimpl->createSocket(receiver_port); pimpl->m_future = std::async(std::launch::async, [=]() { while (pimpl->m_run && !pimpl->m_socket_created) { pimpl->postError("Unable to create socket, retrying after 4 seconds."); - Sleep(RETRIES_DELAY_MS); + sleep(RETRIES_DELAY_MS); pimpl->m_socket_created = pimpl->createSocket(receiver_port); } if (pimpl->m_socket_created) @@ -216,8 +234,11 @@ CSocket::~CSocket() pimpl->closeSocket(pimpl->receiver_fd); if (pimpl->m_future.valid()) pimpl->m_future.wait(); - WSACleanup(); + delete pimpl; +#ifdef _WIN32 + WSACleanup(); +#endif } bool CSocket::isPrimaryInstance() @@ -235,7 +256,11 @@ bool CSocket::sendMessage(void *data, size_t size) char client_arg[BUFFSIZE] = {0}; memcpy(client_arg, data, size); +#ifdef _WIN32 int ret_data = send(pimpl->sender_fd, client_arg, BUFFSIZE, 0); // Send the string +#else + int ret_data =(int)send(pimpl->sender_fd, client_arg, BUFFSIZE, MSG_CONFIRM); +#endif if (ret_data != BUFFSIZE) { if (ret_data < 0) { pimpl->postError("Send message error: could not send device address to daemon!"); diff --git a/win-linux/extras/update-daemon/src/classes/csocket.h b/win-linux/extras/update-daemon/src/classes/csocket.h index 8d3dbdf61..0607c976e 100644 --- a/win-linux/extras/update-daemon/src/classes/csocket.h +++ b/win-linux/extras/update-daemon/src/classes/csocket.h @@ -35,6 +35,8 @@ #include +using std::size_t; + typedef std::function FnVoidData; typedef std::function FnVoidCharPtr; From a4146ac00a50712da26c606ee8822702a221ef28 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Fri, 14 Apr 2023 17:34:40 +0300 Subject: [PATCH 026/298] [linux] add UpdateDialog for Linux --- win-linux/src/platform_linux/updatedialog.cpp | 168 ++++++++++++++++++ win-linux/src/platform_linux/updatedialog.h | 64 +++++++ 2 files changed, 232 insertions(+) create mode 100644 win-linux/src/platform_linux/updatedialog.cpp create mode 100644 win-linux/src/platform_linux/updatedialog.h diff --git a/win-linux/src/platform_linux/updatedialog.cpp b/win-linux/src/platform_linux/updatedialog.cpp new file mode 100644 index 000000000..725423165 --- /dev/null +++ b/win-linux/src/platform_linux/updatedialog.cpp @@ -0,0 +1,168 @@ +/* + * (c) Copyright Ascensio System SIA 2010-2019 + * + * This program is a free software product. You can redistribute it and/or + * modify it under the terms of the GNU Affero General Public License (AGPL) + * version 3 as published by the Free Software Foundation. In accordance with + * Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect + * that Ascensio System SIA expressly excludes the warranty of non-infringement + * of any third-party rights. + * + * This program is distributed WITHOUT ANY WARRANTY; without even the implied + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For + * details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html + * + * You can contact Ascensio System SIA at 20A-12 Ernesta Birznieka-Upisha + * street, Riga, Latvia, EU, LV-1050. + * + * The interactive user interfaces in modified source and object code versions + * of the Program must display Appropriate Legal Notices, as required under + * Section 5 of the GNU AGPL version 3. + * + * Pursuant to Section 7(b) of the License you must retain the original Product + * logo when distributing the program. Pursuant to Section 7(e) we decline to + * grant you any rights under trademark law for use of our trademarks. + * + * All the Product's GUI elements, including illustrations and icon sets, as + * well as technical writing content are licensed under the terms of the + * Creative Commons Attribution-ShareAlike 4.0 International. See the License + * terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode + * + */ + +#include +#include "defines.h" +#include "gtkutils.h" +#include "utils.h" +#include +#include "updatedialog.h" +#include +//extern "C" { +//#include "gtk_resources.h" +//} + +#define toCharPtr(qstr) qstr.toLocal8Bit().data() +#define TEXT_SKIP toCharPtr(QObject::tr("Skip this version")) +#define TEXT_REMIND toCharPtr(QObject::tr("Remind me later")) +#define TEXT_INSTALL toCharPtr(QObject::tr("Install update")) +#define TEXT_INSLATER toCharPtr(QObject::tr("Install on Next Start")) +#define TEXT_RESTART toCharPtr(QObject::tr("Save and Restart Now")) +#define TEXT_SAVEANDINS toCharPtr(QObject::tr("Save and Install Now")) +#define TEXT_DOWNLOAD toCharPtr(QObject::tr("Download update")) +#define AddButton(name, response) \ + gtk_dialog_add_button(GTK_DIALOG(dialog), name, response) +#define GrabFocus(response) \ + gtk_widget_grab_focus(gtk_dialog_get_widget_for_response(GTK_DIALOG(dialog), response)) + + +static void on_link_clicked(GtkWidget*, gchar *uri, gpointer) +{ + gtk_show_uri(NULL, uri, GDK_CURRENT_TIME, NULL); +} + +int WinDlg::showDialog(QWidget *parent, + const QString &msg, + const QString &content, + DlgBtns dlgBtns) +{ + QString title = QString(" %1").arg(QObject::tr("Software Update")); + QString primaryText = QTextDocumentFragment::fromHtml(msg).toPlainText(); + QString linkText = !QString(RELEASE_NOTES).isEmpty() ? + QString("\n%2").arg(QString(RELEASE_NOTES), QObject::tr("Release notes")) : ""; + Window parent_xid = (parent) ? (Window)parent->winId() : 0L; + +// GResource *resource = gtk_resources_get_resource(); +// g_resources_register(resource); + WindowHelper::CParentDisable oDisabler(parent); + gtk_init(NULL, NULL); + GtkDialogFlags flags; + flags = (GtkDialogFlags)(GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT); + GtkWidget *dialog = NULL; + dialog = gtk_message_dialog_new(NULL, + flags, + GTK_MESSAGE_OTHER, // Message type doesn't show icon + GTK_BUTTONS_NONE, + "%s", + primaryText.toLocal8Bit().data()); + + g_signal_connect(G_OBJECT(dialog), "realize", G_CALLBACK(set_parent), (gpointer)&parent_xid); + g_signal_connect(G_OBJECT(dialog), "map_event", G_CALLBACK(set_focus), NULL); + DialogTag tag; // unable to send parent_xid via g_signal_connect and "focus_out_event" + memset(&tag, 0, sizeof(tag)); + tag.dialog = dialog; + tag.parent_xid = (ulong)parent_xid; + g_signal_connect_swapped(G_OBJECT(dialog), "focus_out_event", G_CALLBACK(focus_out), (gpointer)&tag); + gtk_window_set_title(GTK_WINDOW(dialog), title.toLocal8Bit().data()); + if (!content.isEmpty()) + gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog), "%s", content.toLocal8Bit().data()); + + GtkWidget *image = gtk_image_new_from_resource("/res/icons/app-icon_64.png"); + gtk_message_dialog_set_image(GTK_MESSAGE_DIALOG(dialog), image); + gtk_widget_show_all(image); + + if (!linkText.isEmpty()) { + GtkWidget *msg_area = gtk_message_dialog_get_message_area(GTK_MESSAGE_DIALOG(dialog)); + GtkWidget *label = gtk_label_new(linkText.toLocal8Bit().data()); + gtk_label_set_use_markup(GTK_LABEL(label), TRUE); + gtk_label_set_line_wrap(GTK_LABEL(label), TRUE); + gtk_label_set_max_width_chars(GTK_LABEL(label), 50); + g_signal_connect(G_OBJECT(label), "activate-link", G_CALLBACK(on_link_clicked), NULL); + gtk_container_add(GTK_CONTAINER(msg_area), label); + gtk_widget_set_halign(label, GTK_ALIGN_START); + gtk_widget_show_all(label); + } + + switch (dlgBtns) { + case DlgBtns::mbInslaterRestart: + AddButton(TEXT_INSLATER, GTK_RESPONSE_YES); + AddButton(TEXT_RESTART, GTK_RESPONSE_NO); + break; + case DlgBtns::mbSkipRemindInstall: + AddButton(TEXT_SKIP, GTK_RESPONSE_REJECT); + AddButton(TEXT_REMIND, GTK_RESPONSE_NO); + AddButton(TEXT_INSTALL, GTK_RESPONSE_YES); + break; + case DlgBtns::mbSkipRemindSaveandinstall: + AddButton(TEXT_SKIP, GTK_RESPONSE_REJECT); + AddButton(TEXT_REMIND, GTK_RESPONSE_NO); + AddButton(TEXT_SAVEANDINS, GTK_RESPONSE_YES); + break; + case DlgBtns::mbSkipRemindDownload: + AddButton(TEXT_SKIP, GTK_RESPONSE_REJECT); + AddButton(TEXT_REMIND, GTK_RESPONSE_NO); + AddButton(TEXT_DOWNLOAD, GTK_RESPONSE_YES); + break; + default: + break; + } + + switch (dlgBtns) { + case DlgBtns::mbInslaterRestart: GrabFocus(GTK_RESPONSE_NO); break; + case DlgBtns::mbSkipRemindInstall: GrabFocus(GTK_RESPONSE_YES); break; + case DlgBtns::mbSkipRemindSaveandinstall: GrabFocus(GTK_RESPONSE_YES); break; + case DlgBtns::mbSkipRemindDownload: GrabFocus(GTK_RESPONSE_YES); break; + default: break; + } + + int msgboxID = gtk_dialog_run (GTK_DIALOG (dialog)); + int result = GTK_RESPONSE_CANCEL; + switch (msgboxID) { + case GTK_RESPONSE_YES: result = (dlgBtns == DlgBtns::mbSkipRemindInstall || + dlgBtns == DlgBtns::mbSkipRemindSaveandinstall) ? DLG_RESULT_INSTALL : + (dlgBtns == DlgBtns::mbSkipRemindDownload) ? DLG_RESULT_DOWNLOAD : + DLG_RESULT_INSLATER; break; + case GTK_RESPONSE_NO: result = (dlgBtns == DlgBtns::mbSkipRemindInstall || + dlgBtns == DlgBtns::mbSkipRemindSaveandinstall || + dlgBtns == DlgBtns::mbSkipRemindDownload) ? DLG_RESULT_REMIND : + DLG_RESULT_RESTART; break; + case GTK_RESPONSE_REJECT: result = DLG_RESULT_SKIP; break; + case GTK_RESPONSE_CANCEL: + default: + break; + } + gtk_widget_destroy(dialog); + while (gtk_events_pending()) + gtk_main_iteration_do(FALSE); + + return result; +} diff --git a/win-linux/src/platform_linux/updatedialog.h b/win-linux/src/platform_linux/updatedialog.h new file mode 100644 index 000000000..447f915f7 --- /dev/null +++ b/win-linux/src/platform_linux/updatedialog.h @@ -0,0 +1,64 @@ +/* + * (c) Copyright Ascensio System SIA 2010-2019 + * + * This program is a free software product. You can redistribute it and/or + * modify it under the terms of the GNU Affero General Public License (AGPL) + * version 3 as published by the Free Software Foundation. In accordance with + * Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect + * that Ascensio System SIA expressly excludes the warranty of non-infringement + * of any third-party rights. + * + * This program is distributed WITHOUT ANY WARRANTY; without even the implied + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For + * details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html + * + * You can contact Ascensio System SIA at 20A-12 Ernesta Birznieka-Upisha + * street, Riga, Latvia, EU, LV-1050. + * + * The interactive user interfaces in modified source and object code versions + * of the Program must display Appropriate Legal Notices, as required under + * Section 5 of the GNU AGPL version 3. + * + * Pursuant to Section 7(b) of the License you must retain the original Product + * logo when distributing the program. Pursuant to Section 7(e) we decline to + * grant you any rights under trademark law for use of our trademarks. + * + * All the Product's GUI elements, including illustrations and icon sets, as + * well as technical writing content are licensed under the terms of the + * Creative Commons Attribution-ShareAlike 4.0 International. See the License + * terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode + * + */ + +#ifndef UPDATEDIALOG_H +#define UPDATEDIALOG_H + +#include +#include + + +namespace WinDlg +{ +enum class DlgBtns { + mbSkipRemindInstall = 0, + mbSkipRemindSaveandinstall, + mbSkipRemindDownload, + mbInslaterRestart +}; + +enum DlgRes { + DLG_RESULT_SKIP = 0, + DLG_RESULT_REMIND, + DLG_RESULT_DOWNLOAD, + DLG_RESULT_INSTALL, + DLG_RESULT_INSLATER, + DLG_RESULT_RESTART +}; + +int showDialog(QWidget *parent, + const QString &msg, + const QString &content, + DlgBtns dlgBtns = DlgBtns::mbSkipRemindInstall); +} + +#endif // UPDATEDIALOG_H From 27e6a5281904318584fceee17cd1381a7e4038a0 Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Fri, 14 Apr 2023 19:24:07 +0300 Subject: [PATCH 027/298] [start page] extended scaling options --- common/loginpage/src/htmlutils.js | 6 +++++- common/loginpage/src/panelsettings.js | 10 +++++----- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/common/loginpage/src/htmlutils.js b/common/loginpage/src/htmlutils.js index 86e03a660..4bbaaf83f 100644 --- a/common/loginpage/src/htmlutils.js +++ b/common/loginpage/src/htmlutils.js @@ -7,7 +7,11 @@ function checkScaling() { screen and (min-resolution: 1.5dppx) and (max-resolution: 1.74dppx)`, 'pixel-ratio__1_75': `screen and (-webkit-min-device-pixel-ratio: 1.75) and (-webkit-max-device-pixel-ratio: 1.99), screen and (min-resolution: 1.75dppx) and (max-resolution: 1.99dppx)`, - 'pixel-ratio__2': `screen and (-webkit-min-device-pixel-ratio: 2), screen and (min-resolution: 2dppx), screen and (min-resolution: 192dpi)` + 'pixel-ratio__2': `screen and (-webkit-min-device-pixel-ratio: 2) and (-webkit-max-device-pixel-ratio: 2.49), + screen and (min-resolution: 2dppx) and (max-resolution: 2.49dppx), + screen and (min-resolution: 192dpi) and (max-resolution: 239dpi)`, + 'pixel-ratio__2_5': `screen and (-webkit-min-device-pixel-ratio: 2.5), screen and (min-resolution: 2.5dppx), + screen and (min-resolution: 240dpi)`, }; for (var c in matches) { diff --git a/common/loginpage/src/panelsettings.js b/common/loginpage/src/panelsettings.js index 566a1f982..cd94b4ded 100644 --- a/common/loginpage/src/panelsettings.js +++ b/common/loginpage/src/panelsettings.js @@ -85,11 +85,6 @@
@@ -525,6 +520,11 @@ this.view.render(); + const _scaling = [100, 125, 150, 175, 200, 250, 300, 350, 400, 450, 500]; + let _scaling_items = ''; + _scaling.forEach(val => _scaling_items += ``); + $('#opts-ui-scaling .combobox', this.view.$panel).append($(_scaling_items)); + let me = this; me.view.$panel.find('#sett-box-user > a.link').on('click', e => { sdk.command("settings:get", "username"); From 5b1556d07e18555b2d6367fa40c0d42af0761d66 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Fri, 14 Apr 2023 22:00:53 +0300 Subject: [PATCH 028/298] [win] moving platform-specific files to 'platform_win' folder --- win-linux/extras/update-daemon/common.pri | 93 ++++++++++--------- .../{ => platform_win}/capplication.cpp | 0 .../classes/{ => platform_win}/capplication.h | 0 .../{ => platform_win}/cdownloader.cpp | 0 .../classes/{ => platform_win}/cdownloader.h | 0 .../src/classes/{ => platform_win}/cunzip.cpp | 2 +- .../src/classes/{ => platform_win}/cunzip.h | 0 .../src/{ => platform_win}/main.cpp | 4 +- .../src/{ => platform_win}/resource.h | 0 .../src/{ => platform_win}/svccontrol.cpp | 2 +- .../src/{ => platform_win}/svccontrol.h | 0 win-linux/extras/update-daemon/version.rc | 2 +- 12 files changed, 55 insertions(+), 48 deletions(-) rename win-linux/extras/update-daemon/src/classes/{ => platform_win}/capplication.cpp (100%) rename win-linux/extras/update-daemon/src/classes/{ => platform_win}/capplication.h (100%) rename win-linux/extras/update-daemon/src/classes/{ => platform_win}/cdownloader.cpp (100%) rename win-linux/extras/update-daemon/src/classes/{ => platform_win}/cdownloader.h (100%) rename win-linux/extras/update-daemon/src/classes/{ => platform_win}/cunzip.cpp (99%) rename win-linux/extras/update-daemon/src/classes/{ => platform_win}/cunzip.h (100%) rename win-linux/extras/update-daemon/src/{ => platform_win}/main.cpp (98%) rename win-linux/extras/update-daemon/src/{ => platform_win}/resource.h (100%) rename win-linux/extras/update-daemon/src/{ => platform_win}/svccontrol.cpp (99%) rename win-linux/extras/update-daemon/src/{ => platform_win}/svccontrol.h (100%) diff --git a/win-linux/extras/update-daemon/common.pri b/win-linux/extras/update-daemon/common.pri index 0e402d051..cf23ca57c 100644 --- a/win-linux/extras/update-daemon/common.pri +++ b/win-linux/extras/update-daemon/common.pri @@ -16,23 +16,11 @@ INCLUDEPATH += $$PWD/src INCLUDEPATH += $$PWD/../../src/prop HEADERS += $$PWD/src/version.h \ - $$PWD/src/utils.h \ - $$PWD/src/resource.h \ - $$PWD/src/svccontrol.h \ - $$PWD/src/classes/capplication.h \ $$PWD/src/classes/csocket.h \ - $$PWD/src/classes/cunzip.h \ - $$PWD/src/classes/cupdatemanager.h \ - $$PWD/src/classes/cdownloader.h - -SOURCES += $$PWD/src/main.cpp \ - $$PWD/src/utils.cpp \ - $$PWD/src/svccontrol.cpp \ - $$PWD/src/classes/capplication.cpp \ - $$PWD/src/classes/csocket.cpp \ - $$PWD/src/classes/cunzip.cpp \ - $$PWD/src/classes/cupdatemanager.cpp \ - $$PWD/src/classes/cdownloader.cpp + $$PWD/src/classes/cupdatemanager.h + +SOURCES += $$PWD/src/classes/csocket.cpp \ + $$PWD/src/classes/cupdatemanager.cpp ENV_PRODUCT_VERSION = $$(PRODUCT_VERSION) !isEmpty(ENV_PRODUCT_VERSION) { @@ -41,16 +29,18 @@ ENV_PRODUCT_VERSION = $$(PRODUCT_VERSION) VER_PRODUCT_VERSION_COMMAS=$$replace(FULL_PRODUCT_VERSION, \., ",") } -RC_FILE = $$PWD/version.rc +core_windows { + RC_FILE = $$PWD/version.rc -CONFIG += embed_manifest_exe -# Uncomment to testing service control -#QMAKE_LFLAGS += /MANIFESTUAC:$$quote(\"level=\'requireAdministrator\' uiAccess=\'false\'\") + CONFIG += embed_manifest_exe + # Uncomment to testing service control + #QMAKE_LFLAGS += /MANIFESTUAC:$$quote(\"level=\'requireAdministrator\' uiAccess=\'false\'\") -contains(QMAKE_TARGET.arch, x86_64):{ - QMAKE_LFLAGS_WINDOWS = /SUBSYSTEM:WINDOWS,5.02 -} else { - QMAKE_LFLAGS_WINDOWS = /SUBSYSTEM:WINDOWS,5.01 + contains(QMAKE_TARGET.arch, x86_64):{ + QMAKE_LFLAGS_WINDOWS = /SUBSYSTEM:WINDOWS,5.02 + } else { + QMAKE_LFLAGS_WINDOWS = /SUBSYSTEM:WINDOWS,5.01 + } } core_release:DESTDIR = $$DESTDIR/build @@ -62,27 +52,44 @@ core_debug:DESTDIR = $$DESTDIR/build/debug DESTDIR = $$DESTDIR/$$CORE_BUILDS_PLATFORM_PREFIX -build_xp { - DESTDIR = $$DESTDIR/xp - DEFINES += __OS_WIN_XP +core_windows { + HEADERS += $$PWD/src/platform_win/utils.h \ + $$PWD/src/platform_win/resource.h \ + $$PWD/src/platform_win/svccontrol.h \ + $$PWD/src/classes/platform_win/capplication.h \ + $$PWD/src/classes/platform_win/cunzip.h \ + $$PWD/src/classes/platform_win/cdownloader.h + + SOURCES += $$PWD/src/platform_win/main.cpp \ + $$PWD/src/platform_win/utils.cpp \ + $$PWD/src/platform_win/svccontrol.cpp \ + $$PWD/src/classes/platform_win/capplication.cpp \ + $$PWD/src/classes/platform_win/cunzip.cpp \ + $$PWD/src/classes/platform_win/cdownloader.cpp + + build_xp { + DESTDIR = $$DESTDIR/xp + DEFINES += __OS_WIN_XP + } + + LIBS += -luser32 \ + -lkernel32 \ + -lshell32 \ + -lshlwapi \ + -lole32 \ + -loleaut32 \ + -lcomsuppw \ + -ladvapi32 \ + -lurlmon \ + -lwininet \ + -lws2_32 \ + -lrpcrt4 \ + -lwtsapi32 \ + -lcrypt32 \ + -lwintrust \ + -luserenv } -LIBS += -luser32 \ - -lkernel32 \ - -lshell32 \ - -lshlwapi \ - -lole32 \ - -loleaut32 \ - -lcomsuppw \ - -ladvapi32 \ - -lurlmon \ - -lwininet \ - -lws2_32 \ - -lrpcrt4 \ - -lwtsapi32 \ - -lcrypt32 \ - -lwintrust \ - -luserenv OBJECTS_DIR = $$DESTDIR/obj MOC_DIR = $$DESTDIR/moc diff --git a/win-linux/extras/update-daemon/src/classes/capplication.cpp b/win-linux/extras/update-daemon/src/classes/platform_win/capplication.cpp similarity index 100% rename from win-linux/extras/update-daemon/src/classes/capplication.cpp rename to win-linux/extras/update-daemon/src/classes/platform_win/capplication.cpp diff --git a/win-linux/extras/update-daemon/src/classes/capplication.h b/win-linux/extras/update-daemon/src/classes/platform_win/capplication.h similarity index 100% rename from win-linux/extras/update-daemon/src/classes/capplication.h rename to win-linux/extras/update-daemon/src/classes/platform_win/capplication.h diff --git a/win-linux/extras/update-daemon/src/classes/cdownloader.cpp b/win-linux/extras/update-daemon/src/classes/platform_win/cdownloader.cpp similarity index 100% rename from win-linux/extras/update-daemon/src/classes/cdownloader.cpp rename to win-linux/extras/update-daemon/src/classes/platform_win/cdownloader.cpp diff --git a/win-linux/extras/update-daemon/src/classes/cdownloader.h b/win-linux/extras/update-daemon/src/classes/platform_win/cdownloader.h similarity index 100% rename from win-linux/extras/update-daemon/src/classes/cdownloader.h rename to win-linux/extras/update-daemon/src/classes/platform_win/cdownloader.h diff --git a/win-linux/extras/update-daemon/src/classes/cunzip.cpp b/win-linux/extras/update-daemon/src/classes/platform_win/cunzip.cpp similarity index 99% rename from win-linux/extras/update-daemon/src/classes/cunzip.cpp rename to win-linux/extras/update-daemon/src/classes/platform_win/cunzip.cpp index a89899ffc..83a7ada3b 100644 --- a/win-linux/extras/update-daemon/src/classes/cunzip.cpp +++ b/win-linux/extras/update-daemon/src/classes/platform_win/cunzip.cpp @@ -31,7 +31,7 @@ */ #include "cunzip.h" -#include "utils.h" +#include "platform_win/utils.h" #include #include diff --git a/win-linux/extras/update-daemon/src/classes/cunzip.h b/win-linux/extras/update-daemon/src/classes/platform_win/cunzip.h similarity index 100% rename from win-linux/extras/update-daemon/src/classes/cunzip.h rename to win-linux/extras/update-daemon/src/classes/platform_win/cunzip.h diff --git a/win-linux/extras/update-daemon/src/main.cpp b/win-linux/extras/update-daemon/src/platform_win/main.cpp similarity index 98% rename from win-linux/extras/update-daemon/src/main.cpp rename to win-linux/extras/update-daemon/src/platform_win/main.cpp index 08ae31adf..a159c1f64 100644 --- a/win-linux/extras/update-daemon/src/main.cpp +++ b/win-linux/extras/update-daemon/src/platform_win/main.cpp @@ -31,8 +31,8 @@ */ #include "utils.h" -#include "svccontrol.h" -#include "classes/capplication.h" +#include "platform_win/svccontrol.h" +#include "classes/platform_win/capplication.h" #include "classes/cupdatemanager.h" #include "../../src/defines.h" diff --git a/win-linux/extras/update-daemon/src/resource.h b/win-linux/extras/update-daemon/src/platform_win/resource.h similarity index 100% rename from win-linux/extras/update-daemon/src/resource.h rename to win-linux/extras/update-daemon/src/platform_win/resource.h diff --git a/win-linux/extras/update-daemon/src/svccontrol.cpp b/win-linux/extras/update-daemon/src/platform_win/svccontrol.cpp similarity index 99% rename from win-linux/extras/update-daemon/src/svccontrol.cpp rename to win-linux/extras/update-daemon/src/platform_win/svccontrol.cpp index 7776025f9..21fe343a8 100644 --- a/win-linux/extras/update-daemon/src/svccontrol.cpp +++ b/win-linux/extras/update-daemon/src/platform_win/svccontrol.cpp @@ -31,7 +31,7 @@ */ #include "svccontrol.h" -#include "utils.h" +#include "platform_win/utils.h" #include #define SVC_ERROR ((DWORD)0xC0020001L) diff --git a/win-linux/extras/update-daemon/src/svccontrol.h b/win-linux/extras/update-daemon/src/platform_win/svccontrol.h similarity index 100% rename from win-linux/extras/update-daemon/src/svccontrol.h rename to win-linux/extras/update-daemon/src/platform_win/svccontrol.h diff --git a/win-linux/extras/update-daemon/version.rc b/win-linux/extras/update-daemon/version.rc index 5ef4319fc..611f65be2 100644 --- a/win-linux/extras/update-daemon/version.rc +++ b/win-linux/extras/update-daemon/version.rc @@ -1,4 +1,4 @@ -#include "src/resource.h" +#include "src/platform_win/resource.h" IDI_MAINICON ICON DISCARDABLE "./res/icons/desktopeditors.ico" CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "./res/manifest/update-daemon.manifest" From 09ca2ae5381c07fd44c53c62875cddb2096fa08d Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Fri, 14 Apr 2023 22:01:46 +0300 Subject: [PATCH 029/298] [win] moving Utils to 'platform_win' folder and refactoring --- .../extras/update-daemon/src/{ => platform_win}/utils.cpp | 7 ++++--- .../extras/update-daemon/src/{ => platform_win}/utils.h | 0 2 files changed, 4 insertions(+), 3 deletions(-) rename win-linux/extras/update-daemon/src/{ => platform_win}/utils.cpp (98%) rename win-linux/extras/update-daemon/src/{ => platform_win}/utils.h (100%) diff --git a/win-linux/extras/update-daemon/src/utils.cpp b/win-linux/extras/update-daemon/src/platform_win/utils.cpp similarity index 98% rename from win-linux/extras/update-daemon/src/utils.cpp rename to win-linux/extras/update-daemon/src/platform_win/utils.cpp index bea4c6ebf..1665e8141 100644 --- a/win-linux/extras/update-daemon/src/utils.cpp +++ b/win-linux/extras/update-daemon/src/platform_win/utils.cpp @@ -30,7 +30,7 @@ * */ -#include "utils.h" +#include "platform_win/utils.h" #include "version.h" #include #include @@ -52,6 +52,7 @@ #define BUFSIZE 1024 + namespace NS_Utils { wstring GetLastErrorAsString() @@ -260,8 +261,8 @@ namespace NS_File bool replaceFile(const wstring &oldFilePath, const wstring &newFilePath) { - return MoveFileExW(oldFilePath.c_str(), newFilePath.c_str(), - MOVEFILE_REPLACE_EXISTING | MOVEFILE_WRITE_THROUGH) != 0 ? true : false; + return MoveFileEx(oldFilePath.c_str(), newFilePath.c_str(), MOVEFILE_REPLACE_EXISTING | + MOVEFILE_WRITE_THROUGH | MOVEFILE_COPY_ALLOWED) != 0 ? true : false; } bool replaceFolder(const wstring &from, const wstring &to, bool remove_existing) diff --git a/win-linux/extras/update-daemon/src/utils.h b/win-linux/extras/update-daemon/src/platform_win/utils.h similarity index 100% rename from win-linux/extras/update-daemon/src/utils.h rename to win-linux/extras/update-daemon/src/platform_win/utils.h From 69822b0524e0d4db3d46c5e5fcaec9cee3feab5a Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Fri, 14 Apr 2023 22:06:19 +0300 Subject: [PATCH 030/298] [linux] add Linux specific files --- win-linux/extras/update-daemon/common.pri | 16 + .../classes/platform_linux/capplication.cpp | 73 +++ .../src/classes/platform_linux/capplication.h | 52 ++ .../classes/platform_linux/cdownloader.cpp | 159 ++++++ .../src/classes/platform_linux/cdownloader.h | 66 +++ .../src/classes/platform_linux/cunzip.cpp | 134 +++++ .../src/classes/platform_linux/cunzip.h | 67 +++ .../update-daemon/src/platform_linux/main.cpp | 61 +++ .../src/platform_linux/utils.cpp | 485 ++++++++++++++++++ .../update-daemon/src/platform_linux/utils.h | 83 +++ 10 files changed, 1196 insertions(+) create mode 100644 win-linux/extras/update-daemon/src/classes/platform_linux/capplication.cpp create mode 100644 win-linux/extras/update-daemon/src/classes/platform_linux/capplication.h create mode 100644 win-linux/extras/update-daemon/src/classes/platform_linux/cdownloader.cpp create mode 100644 win-linux/extras/update-daemon/src/classes/platform_linux/cdownloader.h create mode 100644 win-linux/extras/update-daemon/src/classes/platform_linux/cunzip.cpp create mode 100644 win-linux/extras/update-daemon/src/classes/platform_linux/cunzip.h create mode 100644 win-linux/extras/update-daemon/src/platform_linux/main.cpp create mode 100644 win-linux/extras/update-daemon/src/platform_linux/utils.cpp create mode 100644 win-linux/extras/update-daemon/src/platform_linux/utils.h diff --git a/win-linux/extras/update-daemon/common.pri b/win-linux/extras/update-daemon/common.pri index cf23ca57c..f1c4dbe86 100644 --- a/win-linux/extras/update-daemon/common.pri +++ b/win-linux/extras/update-daemon/common.pri @@ -90,6 +90,22 @@ core_windows { -luserenv } +core_linux { + HEADERS += $$PWD/src/platform_linux/utils.h \ + $$PWD/src/classes/platform_linux/capplication.h \ + $$PWD/src/classes/platform_linux/cunzip.h \ + $$PWD/src/classes/platform_linux/cdownloader.h + + SOURCES += $$PWD/src/platform_linux/main.cpp \ + $$PWD/src/platform_linux/utils.cpp \ + $$PWD/src/classes/platform_linux/capplication.cpp \ + $$PWD/src/classes/platform_linux/cunzip.cpp \ + $$PWD/src/classes/platform_linux/cdownloader.cpp + + CONFIG += link_pkgconfig + PKGCONFIG += gtk+-3.0 + LIBS += -lSDL2 -lcurl -lssl -lcrypto -luuid -larchive -lpthread +} OBJECTS_DIR = $$DESTDIR/obj MOC_DIR = $$DESTDIR/moc diff --git a/win-linux/extras/update-daemon/src/classes/platform_linux/capplication.cpp b/win-linux/extras/update-daemon/src/classes/platform_linux/capplication.cpp new file mode 100644 index 000000000..106249d8e --- /dev/null +++ b/win-linux/extras/update-daemon/src/classes/platform_linux/capplication.cpp @@ -0,0 +1,73 @@ +/* + * (c) Copyright Ascensio System SIA 2010-2019 + * + * This program is a free software product. You can redistribute it and/or + * modify it under the terms of the GNU Affero General Public License (AGPL) + * version 3 as published by the Free Software Foundation. In accordance with + * Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect + * that Ascensio System SIA expressly excludes the warranty of non-infringement + * of any third-party rights. + * + * This program is distributed WITHOUT ANY WARRANTY; without even the implied + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For + * details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html + * + * You can contact Ascensio System SIA at 20A-12 Ernesta Birznieka-Upisha + * street, Riga, Latvia, EU, LV-1050. + * + * The interactive user interfaces in modified source and object code versions + * of the Program must display Appropriate Legal Notices, as required under + * Section 5 of the GNU AGPL version 3. + * + * Pursuant to Section 7(b) of the License you must retain the original Product + * logo when distributing the program. Pursuant to Section 7(e) we decline to + * grant you any rights under trademark law for use of our trademarks. + * + * All the Product's GUI elements, including illustrations and icon sets, as + * well as technical writing content are licensed under the terms of the + * Creative Commons Attribution-ShareAlike 4.0 International. See the License + * terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode + * + */ + +#include "capplication.h" +#include "platform_linux/utils.h" +#include +#include + + +CApplication::CApplication() +{ + if (SDL_Init(SDL_INIT_VIDEO) != 0) + NS_Logger::WriteLog(string("SDL_Init error: ") + SDL_GetError(), true); +} + +CApplication::~CApplication() +{ + SDL_Quit(); +} + +int CApplication::exec() +{ + int exit_code = 1; + SDL_Event event; + while (m_run && SDL_WaitEvent(&event)) { + switch (event.type) { + case SDL_QUIT: + exit_code = event.user.code; + break; + default: + break; + } + } + return exit_code; +} + +void CApplication::exit(int code) +{ + m_run = false; + SDL_Event event; + event.type = SDL_QUIT; + event.user.code = code; + SDL_PushEvent(&event); +} diff --git a/win-linux/extras/update-daemon/src/classes/platform_linux/capplication.h b/win-linux/extras/update-daemon/src/classes/platform_linux/capplication.h new file mode 100644 index 000000000..8e8b22dcf --- /dev/null +++ b/win-linux/extras/update-daemon/src/classes/platform_linux/capplication.h @@ -0,0 +1,52 @@ +/* + * (c) Copyright Ascensio System SIA 2010-2019 + * + * This program is a free software product. You can redistribute it and/or + * modify it under the terms of the GNU Affero General Public License (AGPL) + * version 3 as published by the Free Software Foundation. In accordance with + * Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect + * that Ascensio System SIA expressly excludes the warranty of non-infringement + * of any third-party rights. + * + * This program is distributed WITHOUT ANY WARRANTY; without even the implied + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For + * details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html + * + * You can contact Ascensio System SIA at 20A-12 Ernesta Birznieka-Upisha + * street, Riga, Latvia, EU, LV-1050. + * + * The interactive user interfaces in modified source and object code versions + * of the Program must display Appropriate Legal Notices, as required under + * Section 5 of the GNU AGPL version 3. + * + * Pursuant to Section 7(b) of the License you must retain the original Product + * logo when distributing the program. Pursuant to Section 7(e) we decline to + * grant you any rights under trademark law for use of our trademarks. + * + * All the Product's GUI elements, including illustrations and icon sets, as + * well as technical writing content are licensed under the terms of the + * Creative Commons Attribution-ShareAlike 4.0 International. See the License + * terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode + * + */ + +#ifndef CAPPLICATION_H +#define CAPPLICATION_H + +#include + + +class CApplication +{ +public: + CApplication(); + ~CApplication(); + + int exec(); + void exit(int); + +private: + std::atomic_bool m_run{true}; +}; + +#endif // CAPPLICATION_H diff --git a/win-linux/extras/update-daemon/src/classes/platform_linux/cdownloader.cpp b/win-linux/extras/update-daemon/src/classes/platform_linux/cdownloader.cpp new file mode 100644 index 000000000..3d4a810f5 --- /dev/null +++ b/win-linux/extras/update-daemon/src/classes/platform_linux/cdownloader.cpp @@ -0,0 +1,159 @@ +/* + * (c) Copyright Ascensio System SIA 2010-2019 + * + * This program is a free software product. You can redistribute it and/or + * modify it under the terms of the GNU Affero General Public License (AGPL) + * version 3 as published by the Free Software Foundation. In accordance with + * Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect + * that Ascensio System SIA expressly excludes the warranty of non-infringement + * of any third-party rights. + * + * This program is distributed WITHOUT ANY WARRANTY; without even the implied + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For + * details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html + * + * You can contact Ascensio System SIA at 20A-12 Ernesta Birznieka-Upisha + * street, Riga, Latvia, EU, LV-1050. + * + * The interactive user interfaces in modified source and object code versions + * of the Program must display Appropriate Legal Notices, as required under + * Section 5 of the GNU AGPL version 3. + * + * Pursuant to Section 7(b) of the License you must retain the original Product + * logo when distributing the program. Pursuant to Section 7(e) we decline to + * grant you any rights under trademark law for use of our trademarks. + * + * All the Product's GUI elements, including illustrations and icon sets, as + * well as technical writing content are licensed under the terms of the + * Creative Commons Attribution-ShareAlike 4.0 International. See the License + * terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode + * + */ + +#include "cdownloader.h" +#include +#include + + +class CDownloaderPrivate +{ +public: + CDownloaderPrivate() + {} + ~CDownloaderPrivate() + {} + + FnVoidInt m_complete_callback = nullptr, + m_progress_callback = nullptr; + string m_url, + m_filePath; + int m_prev_percent; + std::future m_future; + std::atomic_bool m_run, + m_lock; +}; + +int progress_callback(void *user_data, curl_off_t dltotal, curl_off_t dlnow, curl_off_t, curl_off_t) +{ + CDownloaderPrivate *pdata = (CDownloaderPrivate*)user_data; + if (dltotal > 0 && pdata->m_progress_callback) { + int percent = static_cast((100.0 * dlnow) / dltotal); + if (percent != pdata->m_prev_percent) { + pdata->m_progress_callback(percent); + pdata->m_prev_percent = percent; + } + } + + if (pdata->m_run == false) + return CURLE_ABORTED_BY_CALLBACK; + + return CURLE_OK; +} + +CDownloader::CDownloader() : + pimpl(new CDownloaderPrivate) +{ + pimpl->m_run = true; + pimpl->m_lock = false; +} + +CDownloader::~CDownloader() +{ + pimpl->m_run = false; + if (pimpl->m_future.valid()) + pimpl->m_future.wait(); + delete pimpl, pimpl = nullptr; +} + +void CDownloader::downloadFile(const string &url, const string &filePath) +{ + pimpl->m_url.clear(); + pimpl->m_filePath.clear(); + if (url.empty() || filePath.empty() || pimpl->m_lock) + return; + + pimpl->m_url = url; + pimpl->m_filePath = filePath; + start(); +} + +void CDownloader::start() +{ + if (pimpl->m_url.empty() || pimpl->m_filePath.empty() || pimpl->m_lock) + return; + + pimpl->m_run = true; + pimpl->m_lock = true; + pimpl->m_future = std::async(std::launch::async, [=]() { + CURLcode res = CURLE_FAILED_INIT; + if (FILE *fp = fopen(pimpl->m_filePath.c_str(), "wb")) { + if (CURL *curl = curl_easy_init()) { + pimpl->m_prev_percent = -1; + curl_easy_setopt(curl, CURLOPT_URL, pimpl->m_url.c_str()); + curl_easy_setopt(curl, CURLOPT_FAILONERROR, 1L); + curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp); + curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 0); + curl_easy_setopt(curl, CURLOPT_XFERINFOFUNCTION, progress_callback); + curl_easy_setopt(curl, CURLOPT_XFERINFODATA, (void*)pimpl); + res = curl_easy_perform(curl); + curl_easy_cleanup(curl); + } + fclose(fp); + } else + res = CURLE_WRITE_ERROR; + + int error = (res == CURLE_OK) ? 0 : + (res == CURLE_ABORTED_BY_CALLBACK) ? 1 : + (res == CURLE_OUT_OF_MEMORY) ? -1 : + (res == CURLE_HTTP_RETURNED_ERROR) ? -2 : -3; + + if (pimpl->m_complete_callback) + pimpl->m_complete_callback(error); + pimpl->m_lock = false; + }); +} + +void CDownloader::pause() +{ + pimpl->m_run = false; +} + +void CDownloader::stop() +{ + pimpl->m_run = false; +} + +string CDownloader::GetFilePath() +{ + return pimpl->m_filePath; +} + +void CDownloader::onComplete(FnVoidInt callback) +{ + pimpl->m_complete_callback = callback; +} + +void CDownloader::onProgress(FnVoidInt callback) +{ + pimpl->m_progress_callback = callback; +} diff --git a/win-linux/extras/update-daemon/src/classes/platform_linux/cdownloader.h b/win-linux/extras/update-daemon/src/classes/platform_linux/cdownloader.h new file mode 100644 index 000000000..f01b0f9a8 --- /dev/null +++ b/win-linux/extras/update-daemon/src/classes/platform_linux/cdownloader.h @@ -0,0 +1,66 @@ +/* + * (c) Copyright Ascensio System SIA 2010-2019 + * + * This program is a free software product. You can redistribute it and/or + * modify it under the terms of the GNU Affero General Public License (AGPL) + * version 3 as published by the Free Software Foundation. In accordance with + * Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect + * that Ascensio System SIA expressly excludes the warranty of non-infringement + * of any third-party rights. + * + * This program is distributed WITHOUT ANY WARRANTY; without even the implied + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For + * details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html + * + * You can contact Ascensio System SIA at 20A-12 Ernesta Birznieka-Upisha + * street, Riga, Latvia, EU, LV-1050. + * + * The interactive user interfaces in modified source and object code versions + * of the Program must display Appropriate Legal Notices, as required under + * Section 5 of the GNU AGPL version 3. + * + * Pursuant to Section 7(b) of the License you must retain the original Product + * logo when distributing the program. Pursuant to Section 7(e) we decline to + * grant you any rights under trademark law for use of our trademarks. + * + * All the Product's GUI elements, including illustrations and icon sets, as + * well as technical writing content are licensed under the terms of the + * Creative Commons Attribution-ShareAlike 4.0 International. See the License + * terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode + * + */ + +#ifndef CDOWNLOADER_H +#define CDOWNLOADER_H + +#include +#include + +typedef std::function FnVoidInt; + +using std::string; + + +class CDownloaderPrivate; + +class CDownloader +{ +public: + CDownloader(); + ~CDownloader(); + + void downloadFile(const string &url, const string &filePath); + void start(); + void pause(); + void stop(); + string GetFilePath(); + + /* callback */ + void onComplete(FnVoidInt callback); + void onProgress(FnVoidInt callback); + +private: + CDownloaderPrivate *pimpl = nullptr; +}; + +#endif // CDOWNLOADER_H diff --git a/win-linux/extras/update-daemon/src/classes/platform_linux/cunzip.cpp b/win-linux/extras/update-daemon/src/classes/platform_linux/cunzip.cpp new file mode 100644 index 000000000..4b7bccabb --- /dev/null +++ b/win-linux/extras/update-daemon/src/classes/platform_linux/cunzip.cpp @@ -0,0 +1,134 @@ +/* + * (c) Copyright Ascensio System SIA 2010-2019 + * + * This program is a free software product. You can redistribute it and/or + * modify it under the terms of the GNU Affero General Public License (AGPL) + * version 3 as published by the Free Software Foundation. In accordance with + * Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect + * that Ascensio System SIA expressly excludes the warranty of non-infringement + * of any third-party rights. + * + * This program is distributed WITHOUT ANY WARRANTY; without even the implied + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For + * details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html + * + * You can contact Ascensio System SIA at 20A-12 Ernesta Birznieka-Upisha + * street, Riga, Latvia, EU, LV-1050. + * + * The interactive user interfaces in modified source and object code versions + * of the Program must display Appropriate Legal Notices, as required under + * Section 5 of the GNU AGPL version 3. + * + * Pursuant to Section 7(b) of the License you must retain the original Product + * logo when distributing the program. Pursuant to Section 7(e) we decline to + * grant you any rights under trademark law for use of our trademarks. + * + * All the Product's GUI elements, including illustrations and icon sets, as + * well as technical writing content are licensed under the terms of the + * Creative Commons Attribution-ShareAlike 4.0 International. See the License + * terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode + * + */ + +#include "cunzip.h" +#include "platform_linux/utils.h" +#include +#include +#include + +#define BLOCK_SIZE 10240 + + +int unzipArchive(const string &zipFilePath, const string &folderPath, std::atomic_bool &run, string &error) +{ + if (!NS_File::fileExists(zipFilePath) || !NS_File::dirExists(folderPath)) { + error = "Archive path is empty or dest dir not exist"; + return UNZIP_ERROR; + } + + struct archive *arch = archive_read_new(); + archive_read_support_filter_gzip(arch); + archive_read_support_format_tar(arch); + if (archive_read_open_filename(arch, zipFilePath.c_str(), BLOCK_SIZE) != ARCHIVE_OK) { + error = "Cannot open archive"; + archive_read_free(arch); + return UNZIP_ERROR; + } + + int res = ARCHIVE_OK; + int ex_code = UNZIP_OK; + struct archive_entry *entry; + while ((res = archive_read_next_header(arch, &entry)) == ARCHIVE_OK) { + if (!run) { + ex_code = UNZIP_ABORT; + break; + } + + const char *entryname = archive_entry_pathname(entry); + if (!entryname) { + error = "Invalid entry name"; + break; + } + + char outpath[1024] = {0}; + snprintf(outpath, sizeof(outpath), "%s%s", folderPath.c_str(), entryname); + + if (archive_entry_filetype(entry) == AE_IFREG) { + archive_entry_set_pathname(entry, outpath); + res = archive_read_extract(arch, entry, ARCHIVE_EXTRACT_TIME | ARCHIVE_EXTRACT_PERM + | ARCHIVE_EXTRACT_ACL | ARCHIVE_EXTRACT_FFLAGS + | ARCHIVE_EXTRACT_NO_OVERWRITE); + if (res != ARCHIVE_OK) { + error = "Cannot extract entry"; + break; + } + } + } + + if (res != ARCHIVE_EOF && ex_code != UNZIP_ABORT) { + error = string("Error reading archive: ") + archive_error_string(arch); + ex_code = UNZIP_ERROR; + } + + archive_read_close(arch); + archive_read_free(arch); + return ex_code; +} + +CUnzip::CUnzip() +{ + m_run = false; +} + +CUnzip::~CUnzip() +{ + m_run = false; + if (m_future.valid()) + m_future.wait(); +} + +void CUnzip::extractArchive(const string &zipFilePath, const string &folderPath) +{ + m_run = false; + if (m_future.valid()) + m_future.wait(); + m_run = true; + m_future = std::async(std::launch::async, [=]() { + string error; + int res = unzipArchive(zipFilePath, folderPath, m_run, error); + if (!error.empty()) + fprintf(stderr, "%s", error.c_str()); + if (m_complete_callback) + m_complete_callback(res); + }); +} + +void CUnzip::stop() +{ + m_run = false; +} + +void CUnzip::onComplete(FnVoidInt callback) +{ + m_complete_callback = callback; +} diff --git a/win-linux/extras/update-daemon/src/classes/platform_linux/cunzip.h b/win-linux/extras/update-daemon/src/classes/platform_linux/cunzip.h new file mode 100644 index 000000000..710a1aee5 --- /dev/null +++ b/win-linux/extras/update-daemon/src/classes/platform_linux/cunzip.h @@ -0,0 +1,67 @@ +/* + * (c) Copyright Ascensio System SIA 2010-2019 + * + * This program is a free software product. You can redistribute it and/or + * modify it under the terms of the GNU Affero General Public License (AGPL) + * version 3 as published by the Free Software Foundation. In accordance with + * Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect + * that Ascensio System SIA expressly excludes the warranty of non-infringement + * of any third-party rights. + * + * This program is distributed WITHOUT ANY WARRANTY; without even the implied + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For + * details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html + * + * You can contact Ascensio System SIA at 20A-12 Ernesta Birznieka-Upisha + * street, Riga, Latvia, EU, LV-1050. + * + * The interactive user interfaces in modified source and object code versions + * of the Program must display Appropriate Legal Notices, as required under + * Section 5 of the GNU AGPL version 3. + * + * Pursuant to Section 7(b) of the License you must retain the original Product + * logo when distributing the program. Pursuant to Section 7(e) we decline to + * grant you any rights under trademark law for use of our trademarks. + * + * All the Product's GUI elements, including illustrations and icon sets, as + * well as technical writing content are licensed under the terms of the + * Creative Commons Attribution-ShareAlike 4.0 International. See the License + * terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode + * + */ + +#ifndef CUNZIP_H +#define CUNZIP_H + +#include +#include +#include + +#define UNZIP_OK 0 +#define UNZIP_ERROR 1 +#define UNZIP_ABORT 2 + +typedef std::function FnVoidInt; + +using std::string; + + +class CUnzip +{ +public: + CUnzip(); + ~CUnzip(); + + void extractArchive(const string &zipFilePath, const string &folderPath); + void stop(); + + /* callback */ + void onComplete(FnVoidInt callback); + +private: + FnVoidInt m_complete_callback = nullptr; + std::atomic_bool m_run; + std::future m_future; +}; + +#endif // CUNZIP_H diff --git a/win-linux/extras/update-daemon/src/platform_linux/main.cpp b/win-linux/extras/update-daemon/src/platform_linux/main.cpp new file mode 100644 index 000000000..e791ff59b --- /dev/null +++ b/win-linux/extras/update-daemon/src/platform_linux/main.cpp @@ -0,0 +1,61 @@ +/* + * (c) Copyright Ascensio System SIA 2010-2019 + * + * This program is a free software product. You can redistribute it and/or + * modify it under the terms of the GNU Affero General Public License (AGPL) + * version 3 as published by the Free Software Foundation. In accordance with + * Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect + * that Ascensio System SIA expressly excludes the warranty of non-infringement + * of any third-party rights. + * + * This program is distributed WITHOUT ANY WARRANTY; without even the implied + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For + * details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html + * + * You can contact Ascensio System SIA at 20A-12 Ernesta Birznieka-Upisha + * street, Riga, Latvia, EU, LV-1050. + * + * The interactive user interfaces in modified source and object code versions + * of the Program must display Appropriate Legal Notices, as required under + * Section 5 of the GNU AGPL version 3. + * + * Pursuant to Section 7(b) of the License you must retain the original Product + * logo when distributing the program. Pursuant to Section 7(e) we decline to + * grant you any rights under trademark law for use of our trademarks. + * + * All the Product's GUI elements, including illustrations and icon sets, as + * well as technical writing content are licensed under the terms of the + * Creative Commons Attribution-ShareAlike 4.0 International. See the License + * terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode + * +*/ + +#include "platform_linux/utils.h" +#include "classes/platform_linux/capplication.h" +#include "classes/cupdatemanager.h" +#include "../../src/defines.h" +#include + + +int main(int argc, char *argv[]) +{ + NS_File::setAppPath(argv[0]); + + if (argc > 1) { + if (strcmp(argv[1], "--run-as-app") == 0) { + CSocket socket(0, INSTANCE_SVC_PORT); + if (!socket.isPrimaryInstance()) + return 0; + + CApplication app; + CUpdateManager upd; + socket.onMessageReceived([&app](void *buff, size_t) { + if (strcmp((const char*)buff, "stop") == 0) + app.exit(0); + }); + return app.exec(); + } + } + + return 0; +} diff --git a/win-linux/extras/update-daemon/src/platform_linux/utils.cpp b/win-linux/extras/update-daemon/src/platform_linux/utils.cpp new file mode 100644 index 000000000..00638dcb1 --- /dev/null +++ b/win-linux/extras/update-daemon/src/platform_linux/utils.cpp @@ -0,0 +1,485 @@ +/* + * (c) Copyright Ascensio System SIA 2010-2019 + * + * This program is a free software product. You can redistribute it and/or + * modify it under the terms of the GNU Affero General Public License (AGPL) + * version 3 as published by the Free Software Foundation. In accordance with + * Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect + * that Ascensio System SIA expressly excludes the warranty of non-infringement + * of any third-party rights. + * + * This program is distributed WITHOUT ANY WARRANTY; without even the implied + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For + * details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html + * + * You can contact Ascensio System SIA at 20A-12 Ernesta Birznieka-Upisha + * street, Riga, Latvia, EU, LV-1050. + * + * The interactive user interfaces in modified source and object code versions + * of the Program must display Appropriate Legal Notices, as required under + * Section 5 of the GNU AGPL version 3. + * + * Pursuant to Section 7(b) of the License you must retain the original Product + * logo when distributing the program. Pursuant to Section 7(e) we decline to + * grant you any rights under trademark law for use of our trademarks. + * + * All the Product's GUI elements, including illustrations and icon sets, as + * well as technical writing content are licensed under the terms of the + * Creative Commons Attribution-ShareAlike 4.0 International. See the License + * terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode + * +*/ + +#include "platform_linux/utils.h" +#include "version.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define BUFSIZE 1024 + + +static void replace(string &str, const string &from, const string &to) +{ + size_t pos = 0; + while ((pos = str.find(from, pos)) != string::npos) { + str.replace(pos, from.length(), to); + pos += to.length(); + } +} + +static bool moving_through_copy(const string &oldFile, const string &newFile) +{ + struct stat st; + if (stat(oldFile.c_str(), &st) != 0) + return false; + + char buf[4096]; + int fd_src = -1, fd_dst = -1, n_read = 0; + fd_src = open(oldFile.c_str(), O_RDONLY); + if (fd_src < 0) + return false; + + fd_dst = open(newFile.c_str(), O_WRONLY | O_CREAT, st.st_mode); + if (fd_dst < 0) + return false; + + while ((n_read = read(fd_src, buf, sizeof(buf))) > 0) { + if (write(fd_dst, buf, n_read) != n_read) { + close(fd_src); + close(fd_dst); + return false; + } + } + if (close(fd_src) != 0 || close(fd_dst) != 0) + return false; + + if (unlink(oldFile.c_str()) != 0) + return false; + return true; +}; + +static bool moving_folder_content(const string &from, const string &to, bool use_rename) +{ + list filesList; + string error; + if (!NS_File::GetFilesList(from, &filesList, error, false)) { + NS_Logger::WriteLog(DEFAULT_ERROR_MESSAGE + " "+ error); + return false; + } + + const size_t sourceLength = from.length(); + for (const string &sourcePath : filesList) { + if (!sourcePath.empty()) { + string dest = to + sourcePath.substr(sourceLength); + if (!NS_File::dirExists(NS_File::parentPath(dest)) && !NS_File::makePath(NS_File::parentPath(dest))) { + NS_Logger::WriteLog("Can't create path: " + NS_File::parentPath(dest)); + return false; + } + if (use_rename) { + if (rename(sourcePath.c_str(), dest.c_str()) != 0) { + NS_Logger::WriteLog("Can't move file from " + sourcePath + " to " + dest + ". " + NS_Utils::GetLastErrorAsString()); + return false; + } + } else { + if (!moving_through_copy(sourcePath, dest)) { + NS_Logger::WriteLog("Can't move file from " + sourcePath + " to " + dest + ". " + NS_Utils::GetLastErrorAsString()); + return false; + } + } + } + } + return true; +} + +namespace NS_Utils +{ + string GetLastErrorAsString() + { + char buff[LINE_MAX] = {0}; + char *res = strerror_r(errno, buff, sizeof(buff)); + return res ? string(res) : ""; + } + + int ShowMessage(string str, bool showError) + { + if (showError) + str += " " + GetLastErrorAsString(); + + gtk_init(NULL, NULL); + GtkWidget *dialog = gtk_message_dialog_new(NULL, GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, + "%s", str.c_str()); + gtk_window_set_title(GTK_WINDOW(dialog), VER_PRODUCTNAME_STR); + int res = gtk_dialog_run(GTK_DIALOG(dialog)); + gtk_widget_destroy(dialog); + while (gtk_events_pending()) + gtk_main_iteration_do(FALSE); + return res; + } +} + +namespace NS_File +{ + string app_path; + + void setAppPath(const std::string &path) + { + app_path = parentPath(path); + } + + bool GetFilesList(const string &path, list *lst, string &error, bool ignore_locked) + { + DIR *dir = opendir(path.c_str()); + if (!dir) { + error = string("FindFirstFile invalid handle value: ") + path; + return false; + } + + struct dirent *entry; + while ((entry = readdir(dir)) != NULL) { + if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0) + continue; + + char _path[PATH_MAX]; + snprintf(_path, sizeof(_path), "%s/%s", path.c_str(), entry->d_name); + struct stat info; + if (stat(_path, &info) != 0) { + error = string("Error getting file information: ") + _path; + closedir(dir); + return false; + } + + if (S_ISDIR(info.st_mode)) { + if (ignore_locked && access(_path, R_OK) != 0) + continue; + if (!GetFilesList(_path, lst, error, ignore_locked)) { + closedir(dir); + return false; + } + } else + if (S_ISREG(info.st_mode)) + lst->push_back(_path); + + } + closedir(dir); + return true; + } + + bool readFile(const string &filePath, list &linesList) + { + std::ifstream file(filePath.c_str(), std::ios_base::in); + if (!file.is_open()) { + NS_Logger::WriteLog("An error occurred while opening: " + filePath); + return false; + } + string line; + while (std::getline(file, line)) + linesList.push_back(line); + + file.close(); + return true; + } + + bool writeToFile(const string &filePath, list &linesList) + { + std::ofstream file(filePath.c_str(), std::ios_base::out); + if (!file.is_open()) { + NS_Logger::WriteLog("An error occurred while writing: " + filePath); + return false; + } + for (auto &line : linesList) + file << line << std::endl; + + file.close(); + return true; + } + + bool runProcess(const string &fileName, const string &args) + { + string src(fileName); + replace(src, " ", "\\ "); + string cmd = ("LD_LIBRARY_PATH=" + parentPath(src) + " " + src + " " + args + " &"); + return system(cmd.c_str()) == 0 ? true: false; + } + + bool isProcessRunning(const string &fileName) + { + DIR *proc_dir = opendir("/proc"); + if (!proc_dir) + return false; + + struct dirent* entry; + while ((entry = readdir(proc_dir)) != NULL) { + if (entry->d_type == DT_DIR && strtol(entry->d_name, NULL, 10) > 0) { + char cmd_file[256]; + snprintf(cmd_file, sizeof(cmd_file), "/proc/%s/cmdline", entry->d_name); + + FILE* cmd_file_ptr = fopen(cmd_file, "r"); + if (!cmd_file_ptr) + continue; + + char cmd_line[256]; + fgets(cmd_line, sizeof(cmd_line), cmd_file_ptr); + fclose(cmd_file_ptr); + + if (strstr(basename(cmd_line), fileName.c_str()) != NULL) { + closedir(proc_dir); + return true; + } + } + } + + closedir(proc_dir); + return false; + } + + bool fileExists(const string &filePath) + { + struct stat st; + if (stat(filePath.c_str(), &st) != 0) + return false; + return S_ISREG(st.st_mode); + } + + bool dirExists(const string &dirName) { + struct stat st; + if (stat(dirName.c_str(), &st) != 0) + return false; + return S_ISDIR(st.st_mode); + } + + bool dirIsEmpty(const string &dirName) + { + DIR *dir = opendir(dirName.c_str()); + if (!dir) + return true; + + int count = 0; + struct dirent *entry; + while (count == 0 && (entry = readdir(dir)) != NULL) { + if (strcmp(entry->d_name, ".") != 0 && strcmp(entry->d_name, "..") != 0) + count++; + } + closedir(dir); + return (count == 0); + } + + bool makePath(const string &path) + { + list pathsList; + string last_path(path); + while (!last_path.empty() && !dirExists(last_path)) { + pathsList.push_front(last_path); + last_path = parentPath(last_path); + } + for (list::iterator it = pathsList.begin(); it != pathsList.end(); ++it) { + if (mkdir(it->c_str(), S_IRWXU | S_IRWXG | S_IRWXO) != 0) + return false; + } + return true; + } + + bool replaceFile(const string &oldFilePath, const string &newFilePath) + { + struct stat src, dst; + if (stat(oldFilePath.c_str(), &src) != 0) + return false; + if (!S_ISREG(src.st_mode)) + return false; + if (stat(parentPath(newFilePath).c_str(), &dst) != 0) + return false; + if (src.st_dev == dst.st_dev) { + if (rename(oldFilePath.c_str(), newFilePath.c_str()) != 0) + return false; + } else { + if (!moving_through_copy(oldFilePath, newFilePath)) + return false; + } + return true; + } + + bool replaceFolder(const string &from, const string &to, bool remove_existing) + { + struct stat src, dst; + if (stat(from.c_str(), &src) != 0) + return false; + if (stat(parentPath(to).c_str(), &dst) != 0) + return false; + if (!S_ISDIR(src.st_mode) || !S_ISDIR(dst.st_mode)) + return false; + + if(remove_existing && !dirIsEmpty(to) && !removeDirRecursively(to)) + return false; + + bool can_use_rename = (src.st_dev == dst.st_dev); + if (!dirExists(to) || dirIsEmpty(to)) { + if (can_use_rename) { + if (rename(from.c_str(), to.c_str()) != 0) + return false; + } else { + if (!moving_folder_content(from, to, false)) + return false; + } + } else { + if (!moving_folder_content(from, to, can_use_rename)) + return false; + } + removeDirRecursively(from); + return true; + } + + bool removeFile(const string &filePath) + { + return (remove(filePath.c_str()) == 0) ? true: false; + } + + bool removeDirRecursively(const string &dir) + { + DIR *_dir = opendir(dir.c_str()); + if (!_dir) + return false; + + struct dirent *entry; + while ((entry = readdir(_dir)) != NULL) { + if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0) + continue; + + char path[PATH_MAX] = {0}; + snprintf(path, sizeof(path), "%s/%s", dir.c_str(), entry->d_name); + struct stat info; + if (stat(path, &info) != 0) { + closedir(_dir); + return false; + } + + if (S_ISDIR(info.st_mode)) { + if (!removeDirRecursively(path)) { + closedir(_dir); + return false; + } + } else { + if (remove(path) != 0) { + closedir(_dir); + return false; + } + } + } + + closedir(_dir); + if (rmdir(dir.c_str()) != 0) + return false; + return true; + } + + string parentPath(const string &path) + { + string::size_type delim = path.find_last_of("\\/"); + return (delim == string::npos) ? "" : path.substr(0, delim); + } + + string tempPath() + { + const char *path = getenv("TMP"); + if (!path) + path = getenv("TEMP"); + if (!path) + path = getenv("TMPDIR"); + if (!path) + path = "/tmp"; + return string(path); + } + + string appPath() + { + return app_path; + } + + string getFileHash(const string &fileName) + { + FILE *file = fopen(fileName.c_str(), "rb"); + if (!file) + return ""; + + int bytes; + unsigned char data[1024]; + unsigned char digest[MD5_DIGEST_LENGTH]; + MD5_CTX mdContext; + MD5_Init(&mdContext); + while ((bytes = fread(data, 1, 1024, file)) != 0) + MD5_Update(&mdContext, data, bytes); + + MD5_Final(digest, &mdContext); + fclose(file); + + std::ostringstream oss; + for (int i = 0; i < MD5_DIGEST_LENGTH; i++) { + oss.fill('0'); + oss.width(2); + oss << std::hex << static_cast(digest[i]); + } + return oss.str(); + } + +// bool verifyEmbeddedSignature(const string &fileName) +// { +// return false; +// } +} + +namespace NS_Logger +{ + bool allow_write_log = false; + + void AllowWriteLog() + { + allow_write_log = true; + } + + void WriteLog(const string &log, bool showMessage) + { + if (allow_write_log) { + string filpPath(NS_File::appPath() + "/service_log.txt"); + std::ofstream file(filpPath.c_str(), std::ios::app); + if (!file.is_open()) { + return; + } + file << log << std::endl; + file.close(); + } + if (showMessage) + NS_Utils::ShowMessage(log); + } +} diff --git a/win-linux/extras/update-daemon/src/platform_linux/utils.h b/win-linux/extras/update-daemon/src/platform_linux/utils.h new file mode 100644 index 000000000..4a18dddbe --- /dev/null +++ b/win-linux/extras/update-daemon/src/platform_linux/utils.h @@ -0,0 +1,83 @@ +/* + * (c) Copyright Ascensio System SIA 2010-2019 + * + * This program is a free software product. You can redistribute it and/or + * modify it under the terms of the GNU Affero General Public License (AGPL) + * version 3 as published by the Free Software Foundation. In accordance with + * Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect + * that Ascensio System SIA expressly excludes the warranty of non-infringement + * of any third-party rights. + * + * This program is distributed WITHOUT ANY WARRANTY; without even the implied + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For + * details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html + * + * You can contact Ascensio System SIA at 20A-12 Ernesta Birznieka-Upisha + * street, Riga, Latvia, EU, LV-1050. + * + * The interactive user interfaces in modified source and object code versions + * of the Program must display Appropriate Legal Notices, as required under + * Section 5 of the GNU AGPL version 3. + * + * Pursuant to Section 7(b) of the License you must retain the original Product + * logo when distributing the program. Pursuant to Section 7(e) we decline to + * grant you any rights under trademark law for use of our trademarks. + * + * All the Product's GUI elements, including illustrations and icon sets, as + * well as technical writing content are licensed under the terms of the + * Creative Commons Attribution-ShareAlike 4.0 International. See the License + * terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode + * +*/ + +#ifndef UTILS_H +#define UTILS_H + +#include +#include + +using std::string; +using std::to_string; +using std::list; + +#define DEFAULT_ERROR_MESSAGE "An error occurred: " + \ + string(__FUNCTION__) + " Line: " + to_string(__LINE__) +#define ADVANCED_ERROR_MESSAGE DEFAULT_ERROR_MESSAGE + \ + " " + NS_Utils::GetLastErrorAsString() + +namespace NS_Utils +{ +string GetLastErrorAsString(); +int ShowMessage(string str, bool showError = false); +} + +namespace NS_File +{ +void setAppPath(const string &path); +bool GetFilesList(const string &path, list *lst, string &error, bool ignore_locked = true); +bool readFile(const string &filePath, list &linesList); +bool writeToFile(const string &filePath, list &linesList); +bool runProcess(const string &fileName, const string &args); +bool isProcessRunning(const string &fileName); +bool fileExists(const string &filePath); +bool dirExists(const string &dirName); +bool dirIsEmpty(const string &dirName); +bool makePath(const string &path); +bool replaceFile(const string &oldFilePath, const string &newFilePath); +bool replaceFolder(const string &from, const string &to, bool remove_existing = false); +bool removeFile(const string &filePath); +bool removeDirRecursively(const string &dir); +string parentPath(const string &path); +string tempPath(); +string appPath(); +string getFileHash(const string &fileName); +//bool verifyEmbeddedSignature(const string &fileName); +} + +namespace NS_Logger +{ +void AllowWriteLog(); +void WriteLog(const string &log, bool showMessage = false); +} + +#endif // UTILS_H From 1d5bc5481c8762237c58d0807f9d02a573265523 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Fri, 14 Apr 2023 22:07:40 +0300 Subject: [PATCH 031/298] [win-linux] adaptation CUpdateManager (daemon) for Linux and refactoring --- .../src/classes/cupdatemanager.cpp | 193 +++++++++++------- .../src/classes/cupdatemanager.h | 33 ++- 2 files changed, 145 insertions(+), 81 deletions(-) diff --git a/win-linux/extras/update-daemon/src/classes/cupdatemanager.cpp b/win-linux/extras/update-daemon/src/classes/cupdatemanager.cpp index 3e908b11e..c78b397be 100644 --- a/win-linux/extras/update-daemon/src/classes/cupdatemanager.cpp +++ b/win-linux/extras/update-daemon/src/classes/cupdatemanager.cpp @@ -34,52 +34,79 @@ #include #include #include -#include #include -#include "utils.h" -#include "../../src/defines.h" -#include -#include -#include -#include #include +#include "../../src/defines.h" +#ifdef _WIN32 +# include "platform_win/utils.h" +# include +# include +# include +# define APP_LAUNCH_NAME L"/DesktopEditors.exe" +# define APP_LAUNCH_NAME2 L"/editors.exe" +# define APP_HELPER L"/editors_helper.exe" +# define DAEMON_NAME L"/update-daemon.exe" +# define ARCHIVE_EXT TEXT(".zip") +# define ARCHIVE_PATTERN TEXT("*.zip") +# define sleep(a) Sleep(a) +#else +# include "platform_linux/utils.h" +# include +# include +# include +# define APP_LAUNCH_NAME "/DesktopEditors" +# define APP_HELPER "/editors_helper" +# define DAEMON_NAME "/update-daemon" +# define SUBFOLDER "/desktopeditors" +# define ARCHIVE_EXT TEXT(".tar.gz") +# define ARCHIVE_PATTERN TEXT("*.tar.gz") +# define sleep(a) usleep(a*1000) +#endif #define UPDATE_PATH TEXT("/" REG_APP_NAME "Updates") #define BACKUP_PATH TEXT("/" REG_APP_NAME "Backup") -#define APP_LAUNCH_NAME L"/DesktopEditors.exe" -#define APP_LAUNCH_NAME2 L"/editors.exe" -#define APP_HELPER L"/editors_helper.exe" -#define DAEMON_NAME L"/updatesvc.exe" -#define SUCCES_UNPACKED L"/.success_unpacked" +#define SUCCES_UNPACKED TEXT("/.success_unpacked") using std::vector; -auto currentArch()->wstring +auto currentArch()->tstring { -#ifdef _WIN64 +#ifdef _WIN32 +# ifdef _WIN64 return L"_x64"; -#else +# else return L"_x86"; +# endif +#else + return TEXT("_x64"); #endif } -auto generateTmpFileName(const wstring &ext)->wstring +auto generateTmpFileName(const tstring &ext)->tstring { - wstring uuid_wstr; + tstring uuid_tstr; +#ifdef _WIN32 UUID uuid = {0}; RPC_WSTR wszUuid = NULL; if (UuidCreate(&uuid) == RPC_S_OK && UuidToStringW(&uuid, &wszUuid) == RPC_S_OK) { - uuid_wstr = ((wchar_t*)wszUuid); + uuid_tstr = ((wchar_t*)wszUuid); RpcStringFreeW(&wszUuid); } else - uuid_wstr = L"00000000-0000-0000-0000-000000000000"; - return NS_File::tempPath() + L"/" + TEXT(FILE_PREFIX) + uuid_wstr + currentArch() + ext; + uuid_tstr = L"00000000-0000-0000-0000-000000000000"; +#else + uuid_t uuid; + char uuid_str[37]; + uuid_generate(uuid); + uuid_unparse(uuid, uuid_str); + uuid_tstr = uuid_str; +#endif + return NS_File::tempPath() + TEXT("/") + TEXT(FILE_PREFIX) + uuid_tstr + currentArch() + ext; } -auto isSuccessUnpacked(const wstring &successFilePath, const wstring &version)->bool +auto isSuccessUnpacked(const tstring &successFilePath, const tstring &version)->bool { - list lines; + list lines; if (NS_File::readFile(successFilePath, lines)) { if (std::find(lines.begin(), lines.end(), version) != lines.end()) return true; @@ -123,28 +150,30 @@ void CUpdateManager::init() m_pUnzip->onComplete([=](int error) { onCompleteUnzip(error); }); - m_socket->onMessageReceived([=](void *data, size_t size) { - wstring str((const wchar_t*)data), tmp; - vector params; - std::wstringstream wss(str); - while (std::getline(wss, tmp, L'|')) + m_socket->onMessageReceived([=](void *data, size_t) { + tstring str((const tchar*)data), tmp; + vector params; + tstringstream wss(str); + while (std::getline(wss, tmp, TEXT('|'))) params.push_back(std::move(tmp)); if (params.size() == 4) { switch (std::stoi(params[0])) { case MSG_CheckUpdates: { +#ifdef _WIN32 DeleteUrlCacheEntry(params[1].c_str()); +#endif m_downloadMode = Mode::CHECK_UPDATES; if (m_pDownloader) - m_pDownloader->downloadFile(params[1], generateTmpFileName(L".json")); - NS_Logger::WriteLog(L"Received MSG_CheckUpdates, URL: " + params[1]); + m_pDownloader->downloadFile(params[1], generateTmpFileName(TEXT(".json"))); + NS_Logger::WriteLog(TEXT("Received MSG_CheckUpdates, URL: ") + params[1]); break; } case MSG_LoadUpdates: { m_downloadMode = Mode::DOWNLOAD_UPDATES; if (m_pDownloader) - m_pDownloader->downloadFile(params[1], generateTmpFileName(L".zip")); - NS_Logger::WriteLog(L"Received MSG_LoadUpdates, URL: " + params[1]); + m_pDownloader->downloadFile(params[1], generateTmpFileName(ARCHIVE_EXT)); + NS_Logger::WriteLog(TEXT("Received MSG_LoadUpdates, URL: ") + params[1]); break; } case MSG_StopDownload: { @@ -172,8 +201,14 @@ void CUpdateManager::init() }); m_socket->onError([](const char* error) { + tstring _error; +#ifdef _WIN32 std::wstring_convert> converter; - NS_Logger::WriteLog(converter.from_bytes(error)); + _error = converter.from_bytes(error); +#else + _error = error; +#endif + NS_Logger::WriteLog(_error); }); } @@ -181,8 +216,8 @@ void CUpdateManager::onCompleteUnzip(const int error) { if (error == UNZIP_OK) { // Сreate a file about successful unpacking for use in subsequent launches - const wstring updPath = NS_File::tempPath() + UPDATE_PATH; - list successList{m_newVersion}; + const tstring updPath = NS_File::tempPath() + UPDATE_PATH; + list successList{m_newVersion}; if (!NS_File::writeToFile(updPath + SUCCES_UNPACKED, successList)) { m_lock = false; return; @@ -192,7 +227,7 @@ void CUpdateManager::onCompleteUnzip(const int error) } else if (error == UNZIP_ERROR) { - wstring error(L"An error occured while unpacking the archive"); + tstring error(TEXT("An error occured while unpacking the archive")); if (!sendMessage(MSG_OtherError, error)) NS_Logger::WriteLog(DEFAULT_ERROR_MESSAGE); @@ -203,7 +238,7 @@ void CUpdateManager::onCompleteUnzip(const int error) m_lock = false; } -void CUpdateManager::onCompleteSlot(const int error, const wstring &filePath) +void CUpdateManager::onCompleteSlot(const int error, const tstring &filePath) { if (error == 0) { switch (m_downloadMode) { @@ -221,32 +256,32 @@ void CUpdateManager::onCompleteSlot(const int error, const wstring &filePath) // Pause or Stop } else if (error == -1) { - sendMessage(MSG_OtherError, L"Update download failed: out of memory!"); + sendMessage(MSG_OtherError, TEXT("Update download failed: out of memory!")); } else if (error == -2) { - sendMessage(MSG_OtherError, L"Update download failed: server connection error!"); + sendMessage(MSG_OtherError, TEXT("Update download failed: server connection error!")); } else { - sendMessage(MSG_OtherError, L"Update download failed: network error!"); + sendMessage(MSG_OtherError, TEXT("Update download failed: network error!")); } } void CUpdateManager::onProgressSlot(const int percent) { if (m_downloadMode == Mode::DOWNLOAD_UPDATES) - sendMessage(MSG_Progress, to_wstring(percent)); + sendMessage(MSG_Progress, to_tstring(percent)); } -void CUpdateManager::unzipIfNeeded(const wstring &filePath, const wstring &newVersion) +void CUpdateManager::unzipIfNeeded(const tstring &filePath, const tstring &newVersion) { if (m_lock) return; m_lock = true; m_newVersion = newVersion; - const wstring updPath = NS_File::tempPath() + UPDATE_PATH; + const tstring updPath = NS_File::tempPath() + UPDATE_PATH; auto unzip = [=]()->void { if (!NS_File::dirExists(updPath) && !NS_File::makePath(updPath)) { - NS_Logger::WriteLog(L"An error occurred while creating dir: " + updPath); + NS_Logger::WriteLog(TEXT("An error occurred while creating dir: ") + updPath); m_lock = false; return; } @@ -269,20 +304,24 @@ void CUpdateManager::unzipIfNeeded(const wstring &filePath, const wstring &newVe } } -void CUpdateManager::clearTempFiles(const wstring &prefix, const wstring &except) +void CUpdateManager::clearTempFiles(const tstring &prefix, const tstring &except) { m_future_clear = std::async(std::launch::async, [=]() { - list filesList; - wstring _error; + tstring _error; + list filesList; if (!NS_File::GetFilesList(NS_File::tempPath(), &filesList, _error)) { - NS_Logger::WriteLog(DEFAULT_ERROR_MESSAGE); + NS_Logger::WriteLog(DEFAULT_ERROR_MESSAGE + TEXT(" ") + _error); return; } for (auto &filePath : filesList) { - if (PathMatchSpec(filePath.c_str(), L"*.json") || PathMatchSpec(filePath.c_str(), L"*.zip")) { - wstring lcFilePath(filePath); +#ifdef _WIN32 + if (PathMatchSpec(filePath.c_str(), L"*.json") || PathMatchSpec(filePath.c_str(), ARCHIVE_PATTERN)) { +#else + if (fnmatch("*.json", filePath.c_str(), 0) == 0 || fnmatch(ARCHIVE_PATTERN, filePath.c_str(), 0) == 0) { +#endif + tstring lcFilePath(filePath); std::transform(lcFilePath.begin(), lcFilePath.end(), lcFilePath.begin(), ::tolower); - if (lcFilePath.find(prefix) != wstring::npos && filePath != except) + if (lcFilePath.find(prefix) != tstring::npos && filePath != except) NS_File::removeFile(filePath); } } @@ -291,15 +330,16 @@ void CUpdateManager::clearTempFiles(const wstring &prefix, const wstring &except void CUpdateManager::startReplacingFiles() { - wstring appPath = NS_File::appPath(); - wstring updPath = NS_File::tempPath() + UPDATE_PATH; - wstring tmpPath = NS_File::tempPath() + BACKUP_PATH; + tstring appPath = NS_File::appPath(); + tstring updPath = NS_File::tempPath() + UPDATE_PATH; + tstring tmpPath = NS_File::tempPath() + BACKUP_PATH; if (!NS_File::dirExists(updPath)) { - NS_Logger::WriteLog(L"Update cancelled. Can't find folder: " + updPath, true); + NS_Logger::WriteLog(TEXT("Update cancelled. Can't find folder: ") + updPath, true); return; } -#ifndef DONT_VERIFY_SIGNATURE +#ifdef _WIN32 +# ifndef DONT_VERIFY_SIGNATURE // Verify the signature of executable files if (!NS_File::verifyEmbeddedSignature(updPath + APP_LAUNCH_NAME)) { NS_Logger::WriteLog(L"Update cancelled. The file signature is missing: " + updPath + APP_LAUNCH_NAME, true); @@ -309,24 +349,29 @@ void CUpdateManager::startReplacingFiles() NS_Logger::WriteLog(L"Update cancelled. The file signature is missing: " + updPath + APP_LAUNCH_NAME2, true); return; } +# endif #endif // Check backup folder if (NS_File::dirExists(tmpPath) && !NS_File::removeDirRecursively(tmpPath)) { - NS_Logger::WriteLog(L"Update cancelled. Can't delete folder: " + tmpPath, true); + NS_Logger::WriteLog(TEXT("Update cancelled. Can't delete folder: ") + tmpPath, true); return; } // Wait until the main app closes { int retries = 10; - wstring app(APP_LAUNCH_NAME2); +#ifdef _WIN32 + tstring app(APP_LAUNCH_NAME2); +#else + tstring app(APP_LAUNCH_NAME); +#endif app = app.substr(1); while (NS_File::isProcessRunning(app) && retries-- > 0) - Sleep(500); + sleep(500); if (NS_File::isProcessRunning(app)) { - NS_Logger::WriteLog(L"Update cancelled. The main application is not closed!", true); + NS_Logger::WriteLog(TEXT("Update cancelled. The main application is not closed!"), true); return; } } @@ -334,41 +379,46 @@ void CUpdateManager::startReplacingFiles() // Wait until editors_helper.exe closes { int retries = 10; - wstring app(APP_HELPER); + tstring app(APP_HELPER); app = app.substr(1); while (NS_File::isProcessRunning(app) && retries-- > 0) - Sleep(500); + sleep(500); if (NS_File::isProcessRunning(app)) { - NS_Logger::WriteLog(L"Update cancelled. The editors_helper.exe is not closed!", true); + NS_Logger::WriteLog(TEXT("Update cancelled. The editors_helper is not closed!"), true); return; } } // Replace app path to Backup if (!NS_File::replaceFolder(appPath, tmpPath, true)) { - NS_Logger::WriteLog(L"Update cancelled. Can't replace files to backup: " + NS_Utils::GetLastErrorAsString(), true); + NS_Logger::WriteLog(TEXT("Update cancelled. Can't replace files to backup: ") + NS_Utils::GetLastErrorAsString(), true); if (NS_File::dirExists(tmpPath) && !NS_File::dirIsEmpty(tmpPath) && !NS_File::replaceFolder(tmpPath, appPath)) - NS_Logger::WriteLog(L"Can't restore files from backup!", true); + NS_Logger::WriteLog(TEXT("Can't restore files from backup!"), true); return; } // Move update path to app path +#ifdef _WIN32 if (!NS_File::replaceFolder(updPath, appPath, true)) { - NS_Logger::WriteLog(L"Update cancelled. Can't move updates to App path: " + NS_Utils::GetLastErrorAsString(), true); +#else + if (!NS_File::replaceFolder(updPath + SUBFOLDER, appPath, true)) { +#endif + NS_Logger::WriteLog(TEXT("Update cancelled. Can't move updates to App path: ") + NS_Utils::GetLastErrorAsString(), true); if (NS_File::dirExists(appPath) && !NS_File::removeDirRecursively(appPath)) { - NS_Logger::WriteLog(L"An error occurred while remove App path: " + NS_Utils::GetLastErrorAsString(), true); + NS_Logger::WriteLog(TEXT("An error occurred while remove App path: ") + NS_Utils::GetLastErrorAsString(), true); return; } if (!NS_File::replaceFolder(tmpPath, appPath, true)) - NS_Logger::WriteLog(L"An error occurred while restore files from backup: " + NS_Utils::GetLastErrorAsString(), true); + NS_Logger::WriteLog(TEXT("An error occurred while restore files from backup: ") + NS_Utils::GetLastErrorAsString(), true); NS_File::removeDirRecursively(updPath); return; } +#ifdef _WIN32 // To support a version with unins000 files inside the working folder if (NS_File::fileExists(tmpPath + L"/unins000.dat")) NS_File::replaceFile(tmpPath + L"/unins000.dat", appPath + L"/unins000.dat"); @@ -405,18 +455,19 @@ void CUpdateManager::startReplacingFiles() } } } +#endif // Remove Backup dir NS_File::removeDirRecursively(tmpPath); // Restart program - if (!NS_File::runProcess(appPath + APP_LAUNCH_NAME, L"")) - NS_Logger::WriteLog(L"An error occurred while restarting the program!", true); + if (!NS_File::runProcess(appPath + APP_LAUNCH_NAME, TEXT(""))) + NS_Logger::WriteLog(TEXT("An error occurred while restarting the program!"), true); } -bool CUpdateManager::sendMessage(int cmd, const wstring ¶m1, const wstring ¶m2, const wstring ¶m3) +bool CUpdateManager::sendMessage(int cmd, const tstring ¶m1, const tstring ¶m2, const tstring ¶m3) { - wstring str = to_wstring(cmd) + L"|" + param1 + L"|" + param2 + L"|" + param3; + tstring str = to_tstring(cmd) + TEXT("|") + param1 + TEXT("|") + param2 + TEXT("|") + param3; size_t sz = str.size() * sizeof(str.front()); return m_socket->sendMessage((void*)str.c_str(), sz); } diff --git a/win-linux/extras/update-daemon/src/classes/cupdatemanager.h b/win-linux/extras/update-daemon/src/classes/cupdatemanager.h index 4c8a5090b..84d9eb1b9 100644 --- a/win-linux/extras/update-daemon/src/classes/cupdatemanager.h +++ b/win-linux/extras/update-daemon/src/classes/cupdatemanager.h @@ -33,14 +33,27 @@ #ifndef CUPDATEMANAGER_H #define CUPDATEMANAGER_H -#include "classes/cdownloader.h" -#include "classes/cunzip.h" #include "classes/csocket.h" #include +#ifdef _WIN32 +# include "classes/platform_win/cdownloader.h" +# include "classes/platform_win/cunzip.h" +# include +# define tstring std::wstring +# define tchar wchar_t +# define tstringstream std::wstringstream +# define to_tstring to_wstring +#else +# include "classes/platform_linux/cdownloader.h" +# include "classes/platform_linux/cunzip.h" +# define TEXT(str) str +# define tstring std::string +# define tchar char +# define tstringstream std::stringstream +# define to_tstring to_string +#endif typedef std::function FnVoidVoid; - -using std::wstring; using std::future; @@ -56,16 +69,16 @@ class CUpdateManager private: void init(); void onCompleteUnzip(const int error); - void onCompleteSlot(const int error, const wstring &filePath); + void onCompleteSlot(const int error, const tstring &filePath); void onProgressSlot(const int percent); - void unzipIfNeeded(const wstring &filePath, const wstring &newVersion); - void clearTempFiles(const wstring &prefix, const wstring &except = wstring()); + void unzipIfNeeded(const tstring &filePath, const tstring &newVersion); + void clearTempFiles(const tstring &prefix, const tstring &except = tstring()); void startReplacingFiles(); - bool sendMessage(int cmd, const wstring ¶m1 = L"null", const wstring ¶m2 = L"null", - const wstring ¶m3 = L"null"); + bool sendMessage(int cmd, const tstring ¶m1 = TEXT("null"), const tstring ¶m2 = TEXT("null"), + const tstring ¶m3 = TEXT("null")); FnVoidVoid m_quit_callback = nullptr; - wstring m_newVersion; + tstring m_newVersion; bool m_lock = false; int m_downloadMode; future m_future_clear; From 3673e75fa0c54c856d2d6e72ca850dbb6865d475 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Fri, 14 Apr 2023 22:12:42 +0300 Subject: [PATCH 032/298] [win-linux] adaptation main app for linux updates --- win-linux/ASCDocumentEditor.pro | 4 +- win-linux/defaults.pri | 24 +++++--- .../src/cascapplicationmanagerwrapper.cpp | 4 +- win-linux/src/cupdatemanager.cpp | 60 ++++++++++++------- win-linux/src/cupdatemanager.h | 23 ++++++- 5 files changed, 76 insertions(+), 39 deletions(-) diff --git a/win-linux/ASCDocumentEditor.pro b/win-linux/ASCDocumentEditor.pro index b6cf1ecd4..09209c9d4 100644 --- a/win-linux/ASCDocumentEditor.pro +++ b/win-linux/ASCDocumentEditor.pro @@ -23,7 +23,7 @@ DEFINES += __DONT_WRITE_IN_APP_TITLE message($$PLATFORM_BUILD) -win32 { +#win32 { updmodule:!build_xp { DEFINES += _UPDMODULE DEFINES += URL_APPCAST_UPDATES=$$join(LINK,,\\\",\\\") @@ -32,7 +32,7 @@ win32 { message(updates is turned on) message(url: $$join(LINK,,\\\",\\\")) } -} +#} HEADERS += \ src/prop/cmainwindowimpl.h diff --git a/win-linux/defaults.pri b/win-linux/defaults.pri index ef8d3c929..d6b1f0dc3 100644 --- a/win-linux/defaults.pri +++ b/win-linux/defaults.pri @@ -155,8 +155,12 @@ SOURCES += \ # src/components/casclabel.cpp updmodule:!build_xp { - HEADERS += $$PWD/src/cupdatemanager.h - SOURCES += $$PWD/src/cupdatemanager.cpp + INCLUDEPATH += $$PWD/extras/update-daemon/src/classes + HEADERS += $$PWD/src/cupdatemanager.h \ + $$PWD/extras/update-daemon/src/classes/csocket.h + + SOURCES += $$PWD/src/cupdatemanager.cpp \ + $$PWD/extras/update-daemon/src/classes/csocket.cpp } RESOURCES += $$PWD/resources.qrc @@ -224,6 +228,14 @@ core_linux { $$PWD/src/platform_linux/gtkutils.cpp \ $$PWD/src/platform_linux/xcbutils.cpp + updmodule { + HEADERS += $$PWD/src/platform_linux/updatedialog.h \ + $$PWD/gtk_resources.h + + SOURCES += $$PWD/src/platform_linux/updatedialog.cpp \ + $$PWD/gtk_resources.c + } + CONFIG += link_pkgconfig PKGCONFIG += glib-2.0 gtk+-3.0 atk gtk+-unix-print-3.0 xcb LIBS += -lX11 -lX11-xcb @@ -260,12 +272,8 @@ core_windows { $$PWD/src/platform_win/message.cpp updmodule:!build_xp { - INCLUDEPATH += $$PWD/extras/update-daemon/src/classes - HEADERS += $$PWD/src/platform_win/updatedialog.h \ - $$PWD/extras/update-daemon/src/classes/csocket.h - - SOURCES += $$PWD/src/platform_win/updatedialog.cpp \ - $$PWD/extras/update-daemon/src/classes/csocket.cpp + HEADERS += $$PWD/src/platform_win/updatedialog.h + SOURCES += $$PWD/src/platform_win/updatedialog.cpp } LIBS += -lwininet \ diff --git a/win-linux/src/cascapplicationmanagerwrapper.cpp b/win-linux/src/cascapplicationmanagerwrapper.cpp index 485a6e33d..a372ffd2c 100644 --- a/win-linux/src/cascapplicationmanagerwrapper.cpp +++ b/win-linux/src/cascapplicationmanagerwrapper.cpp @@ -120,12 +120,10 @@ CAscApplicationManagerWrapper::CAscApplicationManagerWrapper(CAscApplicationMana #ifdef _UPDMODULE m_pUpdateManager = new CUpdateManager(this); -#ifdef Q_OS_WIN connect(m_pUpdateManager, &CUpdateManager::progresChanged, this, [=](const int &percent) { AscAppManager::sendCommandTo(0, "updates:download", QString("{\"progress\":\"%1\"}").arg(QString::number(percent))); }); #endif -#endif } CAscApplicationManagerWrapper::~CAscApplicationManagerWrapper() @@ -156,7 +154,7 @@ CAscApplicationManagerWrapper::~CAscApplicationManagerWrapper() m_pMainWindow->deleteLater(); #endif } -#if defined (_UPDMODULE) && defined (_WIN32) +#if defined (_UPDMODULE) // Start update installation m_pUpdateManager->handleAppClose(); #endif diff --git a/win-linux/src/cupdatemanager.cpp b/win-linux/src/cupdatemanager.cpp index 72a456ead..23d793225 100644 --- a/win-linux/src/cupdatemanager.cpp +++ b/win-linux/src/cupdatemanager.cpp @@ -42,16 +42,19 @@ #include "version.h" #include "clangater.h" #include "clogger.h" -#include "components/cmessage.h" #include "cascapplicationmanagerwrapper.h" #include #ifdef _WIN32 -# include # include "platform_win/updatedialog.h" # define DAEMON_NAME L"/updatesvc.exe" +#else +# include +# include "components/cmessage.h" +# include "platform_linux/updatedialog.h" +# define DAEMON_NAME "/updatesvc" #endif -//#define CHECK_DIRECTORY +#define WStrToTStr(str) QStrToTStr(QString::fromStdWString(str)) #define CHECK_ON_STARTUP_MS 9000 #define CMD_ARGUMENT_CHECK_URL L"--updates-appcast-url" #ifndef URL_APPCAST_UPDATES @@ -143,8 +146,9 @@ auto getFileHash(const QString &fileName)->QString return QString(); } -auto runProcess(const wstring &fileName, const wstring &args, bool runAsAdmin = false)->BOOL +auto runProcess(const tstring &fileName, const tstring &args, bool runAsAdmin = false)->bool { +#ifdef _WIN32 SHELLEXECUTEINFO shExInfo = {0}; shExInfo.cbSize = sizeof(shExInfo); shExInfo.fMask = SEE_MASK_NOCLOSEPROCESS | SEE_MASK_NO_CONSOLE | SEE_MASK_FLAG_NO_UI; @@ -158,9 +162,15 @@ auto runProcess(const wstring &fileName, const wstring &args, bool runAsAdmin = if (ShellExecuteEx(&shExInfo)) { //WaitForSingleObject(shExInfo.hProcess, INFINITE); CloseHandle(shExInfo.hProcess); - return TRUE; + return true; } - return FALSE; +#else + Q_UNUSED(runAsAdmin) + QStringList _args = QString::fromStdString(args).split(" "); + if (QProcess::startDetached(QString::fromStdString(fileName), _args)) + return true; +#endif + return false; } struct CUpdateManager::PackageData { @@ -193,7 +203,7 @@ CUpdateManager::CUpdateManager(QObject *parent): auto setUrl = [=] { if ( InputArgs::contains(CMD_ARGUMENT_CHECK_URL) ) { m_checkUrl = InputArgs::argument_value(CMD_ARGUMENT_CHECK_URL); - } else m_checkUrl = TEXT(URL_APPCAST_UPDATES); + } else m_checkUrl = QString(URL_APPCAST_UPDATES).toStdWString(); }; #ifdef _WIN32 if (AppOptions::packageType() == AppOptions::AppPackageType::Portable @@ -210,7 +220,7 @@ CUpdateManager::CUpdateManager(QObject *parent): // m_pTimer->setSingleShot(false); // connect(m_pTimer, SIGNAL(timeout()), this, SLOT(checkUpdates())); if (AppOptions::packageType() == AppOptions::AppPackageType::Portable) - runProcess(qApp->applicationDirPath().toStdWString() + DAEMON_NAME, L"--run-as-app"); + runProcess(QStrToTStr(qApp->applicationDirPath()) + DAEMON_NAME, TEXT("--run-as-app")); init(); } else CLogger::log("Updates is off, URL is empty."); @@ -245,21 +255,21 @@ void CUpdateManager::init() m_pCheckOnStartupTimer->start(); } - m_socket->onMessageReceived([this](void *data, size_t size) { - wstring str((const wchar_t*)data), tmp; - vector params; - std::wstringstream wss(str); - while (std::getline(wss, tmp, L'|')) + m_socket->onMessageReceived([this](void *data, size_t) { + tstring str((const tchar*)data), tmp; + vector params; + tstringstream wss(str); + while (std::getline(wss, tmp, TEXT('|'))) params.push_back(std::move(tmp)); if (params.size() == 4) { switch (std::stoi(params[0])) { case MSG_LoadCheckFinished: - QMetaObject::invokeMethod(this, "onLoadCheckFinished", Qt::QueuedConnection, Q_ARG(QString, QString::fromStdWString(params[1]))); + QMetaObject::invokeMethod(this, "onLoadCheckFinished", Qt::QueuedConnection, Q_ARG(QString, TStrToQStr(params[1]))); break; case MSG_LoadUpdateFinished: - QMetaObject::invokeMethod(this, "onLoadUpdateFinished", Qt::QueuedConnection, Q_ARG(QString, QString::fromStdWString(params[1]))); + QMetaObject::invokeMethod(this, "onLoadUpdateFinished", Qt::QueuedConnection, Q_ARG(QString, TStrToQStr(params[1]))); break; case MSG_ShowStartInstallMessage: { @@ -272,7 +282,7 @@ void CUpdateManager::init() break; case MSG_OtherError: - QMetaObject::invokeMethod(this, "onError", Qt::QueuedConnection, Q_ARG(QString, QString::fromStdWString(params[1]))); + QMetaObject::invokeMethod(this, "onError", Qt::QueuedConnection, Q_ARG(QString, TStrToQStr(params[1]))); break; default: @@ -289,9 +299,13 @@ void CUpdateManager::criticalMsg(QWidget *parent, const QString &msg) return; } m_manualCheck = false; +#ifdef _WIN32 HWND parent_hwnd = (parent) ? (HWND)parent->winId() : NULL; wstring lpText = msg.toStdWString(); MessageBoxW(parent_hwnd, lpText.c_str(), TEXT(APP_TITLE), MB_ICONERROR | MB_SERVICE_NOTIFICATION_NT3X | MB_SETFOREGROUND); +#else + CMessage::error(parent, msg); +#endif m_lock = false; } @@ -300,7 +314,7 @@ void CUpdateManager::clearTempFiles(const QString &except) static bool lock = false; if (!lock) { // for one-time cleaning lock = true; - sendMessage(MSG_ClearTempFiles, TEXT(FILE_PREFIX), except.toStdWString()); + sendMessage(MSG_ClearTempFiles, QStrToTStr(QString(FILE_PREFIX)), QStrToTStr(except)); } if (except.isEmpty()) savePackageData(); @@ -329,7 +343,7 @@ void CUpdateManager::checkUpdates(bool manualCheck) // reg_user.setValue("Updates/last_check", static_cast(m_lastCheck)); // reg_user.endGroup(); - if (!sendMessage(MSG_CheckUpdates, m_checkUrl)) { + if (!sendMessage(MSG_CheckUpdates, WStrToTStr(m_checkUrl))) { m_dialogSchedule->addToSchedule("criticalMsg", QObject::tr("An error occurred while check updates: Update Service not found!")); } // QTimer::singleShot(3000, this, [=]() { @@ -377,9 +391,9 @@ void CUpdateManager::savePackageData(const QString &version, const QString &file reg_user.endGroup(); } -bool CUpdateManager::sendMessage(int cmd, const wstring ¶m1, const wstring ¶m2, const wstring ¶m3) +bool CUpdateManager::sendMessage(int cmd, const tstring ¶m1, const tstring ¶m2, const tstring ¶m3) { - wstring str = std::to_wstring(cmd) + L"|" + param1 + L"|" + param2 + L"|" + param3; + tstring str = std::to_tstring(cmd) + TEXT("|") + param1 + TEXT("|") + param2 + TEXT("|") + param3; size_t sz = str.size() * sizeof(str.front()); return m_socket->sendMessage((void*)str.c_str(), sz); } @@ -399,7 +413,7 @@ void CUpdateManager::loadUpdates() } else if (!m_packageData->packageUrl.empty()) { - if (!sendMessage(MSG_LoadUpdates, m_packageData->packageUrl)) { + if (!sendMessage(MSG_LoadUpdates, WStrToTStr(m_packageData->packageUrl))) { m_dialogSchedule->addToSchedule("criticalMsg", QObject::tr("An error occurred while loading updates: Update Service not found!")); } } @@ -440,7 +454,7 @@ void CUpdateManager::unzipIfNeeded() return; m_lock = true; - if (!sendMessage(MSG_UnzipIfNeeded, m_packageData->fileName.toStdWString(), m_packageData->version.toStdWString())) { + if (!sendMessage(MSG_UnzipIfNeeded, QStrToTStr(m_packageData->fileName), QStrToTStr(m_packageData->version))) { m_dialogSchedule->addToSchedule("criticalMsg", QObject::tr("An error occurred while unzip updates: Update Service not found!")); } } @@ -540,7 +554,7 @@ void CUpdateManager::onLoadCheckFinished(const QString &filePath) QJsonObject win = package.value("win_32").toObject(); # endif #else - // TO_DO: linux package parsing + QJsonObject win = package.value("linux_64").toObject(); #endif QJsonObject archive = win.value("archive").toObject(); m_packageData->packageUrl = archive.value("url").toString().toStdWString(); diff --git a/win-linux/src/cupdatemanager.h b/win-linux/src/cupdatemanager.h index 4799b73d7..14f1e0396 100644 --- a/win-linux/src/cupdatemanager.h +++ b/win-linux/src/cupdatemanager.h @@ -38,8 +38,25 @@ #include #include "csocket.h" -using std::wstring; +#ifdef _WIN32 +# include +# define tstring std::wstring +# define tchar wchar_t +# define tstringstream std::wstringstream +# define to_tstring to_wstring +# define QStrToTStr(a) a.toStdWString() +# define TStrToQStr(a) QString::fromStdWString(a) +#else +# define TEXT(str) str +# define tstring std::string +# define tchar char +# define tstringstream std::stringstream +# define to_tstring to_string +# define QStrToTStr(a) a.toStdString() +# define TStrToQStr(a) QString::fromStdString(a) +#endif +using std::wstring; enum UpdateMode { DISABLE=0, SILENT=1, ASK=2 @@ -75,8 +92,8 @@ public slots: void onCheckFinished(bool error, bool updateExist, const QString &version, const QString &changelog); void unzipIfNeeded(); void savePackageData(const QString &version = QString(), const QString &fileName = QString()); - bool sendMessage(int cmd, const wstring ¶m1 = L"null", const wstring ¶m2 = L"null", - const wstring ¶m3 = L"null"); + bool sendMessage(int cmd, const tstring ¶m1 = TEXT("null"), const tstring ¶m2 = TEXT("null"), + const tstring ¶m3 = TEXT("null")); struct PackageData; struct SavedPackageData; From 421469e0c2d7fec6d215583a5c7c9354acdf8adb Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Fri, 14 Apr 2023 22:12:58 +0300 Subject: [PATCH 033/298] [linux] debug --- win-linux/extras/update-daemon/src/classes/ctimer.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/win-linux/extras/update-daemon/src/classes/ctimer.cpp b/win-linux/extras/update-daemon/src/classes/ctimer.cpp index 9956d963c..845516e61 100644 --- a/win-linux/extras/update-daemon/src/classes/ctimer.cpp +++ b/win-linux/extras/update-daemon/src/classes/ctimer.cpp @@ -32,6 +32,7 @@ #include "ctimer.h" #include +#include CTimer::CTimer() From 1e4f56f33a273d6f0ec75211179e42c7ff45c4ab Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Fri, 14 Apr 2023 22:48:30 +0300 Subject: [PATCH 034/298] [win-linux] debug after merge --- win-linux/extras/update-daemon/src/classes/cupdatemanager.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/win-linux/extras/update-daemon/src/classes/cupdatemanager.cpp b/win-linux/extras/update-daemon/src/classes/cupdatemanager.cpp index c78b397be..217053b33 100644 --- a/win-linux/extras/update-daemon/src/classes/cupdatemanager.cpp +++ b/win-linux/extras/update-daemon/src/classes/cupdatemanager.cpp @@ -45,7 +45,7 @@ # define APP_LAUNCH_NAME L"/DesktopEditors.exe" # define APP_LAUNCH_NAME2 L"/editors.exe" # define APP_HELPER L"/editors_helper.exe" -# define DAEMON_NAME L"/update-daemon.exe" +# define DAEMON_NAME L"/updatesvc.exe" # define ARCHIVE_EXT TEXT(".zip") # define ARCHIVE_PATTERN TEXT("*.zip") # define sleep(a) Sleep(a) @@ -56,7 +56,7 @@ # include # define APP_LAUNCH_NAME "/DesktopEditors" # define APP_HELPER "/editors_helper" -# define DAEMON_NAME "/update-daemon" +# define DAEMON_NAME "/updatesvc" # define SUBFOLDER "/desktopeditors" # define ARCHIVE_EXT TEXT(".tar.gz") # define ARCHIVE_PATTERN TEXT("*.tar.gz") From f9f4ff5a811f7ac6792768db31972e62b0421996 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Sun, 16 Apr 2023 22:47:30 +0300 Subject: [PATCH 035/298] [win-linux] remove unused code --- .../src/cascapplicationmanagerwrapper.cpp | 36 ------------------- win-linux/src/cascapplicationmanagerwrapper.h | 2 -- 2 files changed, 38 deletions(-) diff --git a/win-linux/src/cascapplicationmanagerwrapper.cpp b/win-linux/src/cascapplicationmanagerwrapper.cpp index a372ffd2c..1e7605003 100644 --- a/win-linux/src/cascapplicationmanagerwrapper.cpp +++ b/win-linux/src/cascapplicationmanagerwrapper.cpp @@ -53,41 +53,6 @@ using namespace NSEditorApi; using namespace std; using namespace std::placeholders; -class CAscApplicationManagerWrapper::DialogSchedule : public QObject -{ -public: - DialogSchedule() - { - m_timer = new QTimer(this); - m_timer->setInterval(500); - m_timer->setSingleShot(false); - connect(m_timer, &QTimer::timeout, this, [=] { - QWidget *wnd = WindowHelper::currentTopWindow(); - if (wnd && !m_shedule_vec.isEmpty()) { - QMetaObject::invokeMethod(&AscAppManager::getInstance(), - m_shedule_vec.first().toLocal8Bit().data(), - Qt::QueuedConnection, Q_ARG(QWidget*, wnd)); - m_shedule_vec.removeFirst(); - if (m_shedule_vec.isEmpty()) - m_timer->stop(); - } - }); - } - - ~DialogSchedule() - {} - - void addToSchedule(const QString &method) - { - m_shedule_vec.push_back(method); - if (!m_timer->isActive()) - m_timer->start(); - } - -private: - QTimer *m_timer = nullptr; - QVector m_shedule_vec; -}; CAscApplicationManagerWrapper::CAscApplicationManagerWrapper(CAscApplicationManagerWrapper const&) { @@ -100,7 +65,6 @@ CAscApplicationManagerWrapper::CAscApplicationManagerWrapper(CAscApplicationMana , CCefEventsTransformer(nullptr) , m_queueToClose(new CWindowsQueue) , m_private(ptrprivate) - , m_dialogSchedule(new DialogSchedule) { m_private->init(); CAscApplicationManager::SetEventListener(this); diff --git a/win-linux/src/cascapplicationmanagerwrapper.h b/win-linux/src/cascapplicationmanagerwrapper.h index e743ead1e..32d9ed585 100644 --- a/win-linux/src/cascapplicationmanagerwrapper.h +++ b/win-linux/src/cascapplicationmanagerwrapper.h @@ -205,8 +205,6 @@ private slots: CAscApplicationManagerWrapper(CAscApplicationManagerWrapper_Private *); - class DialogSchedule; - std::unique_ptr m_dialogSchedule; #ifdef _UPDMODULE CUpdateManager *m_pUpdateManager; #endif From eccb340683d8e3acd35b652801ef1db232d2def3 Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Thu, 20 Apr 2023 15:42:06 +0300 Subject: [PATCH 036/298] [win-nix] fix scaling for window --- .../src/cascapplicationmanagerwrapper.cpp | 15 ++---- win-linux/src/prop/cmainwindowimpl.cpp | 17 +------ win-linux/src/utils.cpp | 46 ++++++++++++++++++- win-linux/src/utils.h | 5 ++ 4 files changed, 53 insertions(+), 30 deletions(-) diff --git a/win-linux/src/cascapplicationmanagerwrapper.cpp b/win-linux/src/cascapplicationmanagerwrapper.cpp index cd401801f..413544f4a 100644 --- a/win-linux/src/cascapplicationmanagerwrapper.cpp +++ b/win-linux/src/cascapplicationmanagerwrapper.cpp @@ -1637,19 +1637,10 @@ bool CAscApplicationManagerWrapper::applySettings(const wstring& wstrjson) } if ( objRoot.contains("uiscaling") ) { - wstring sets; - switch (objRoot["uiscaling"].toString().toInt()) { - case 100: sets = L"1"; break; - case 125: sets = L"1.25"; break; - case 150: sets = L"1.5"; break; - case 175: sets = L"1.75"; break; - case 200: sets = L"2"; break; - default: - sets = L"default"; - } + const wstring sets = Scaling::scalingToFactor(objRoot["uiscaling"].toString()); - setUserSettings(L"system-scale", sets != L"default" ? L"0" : L"1"); - setUserSettings(L"force-scale", sets); + setUserSettings(L"system-scale", sets != L"0" ? L"0" : L"1"); + setUserSettings(L"force-scale", sets == L"0" ? L"default" : sets); m_pMainWindow->updateScaling(); CEditorWindow * _editor = nullptr; diff --git a/win-linux/src/prop/cmainwindowimpl.cpp b/win-linux/src/prop/cmainwindowimpl.cpp index 44ab6f7d3..f75bfdebb 100644 --- a/win-linux/src/prop/cmainwindowimpl.cpp +++ b/win-linux/src/prop/cmainwindowimpl.cpp @@ -81,22 +81,7 @@ void CMainWindowImpl::refreshAboutVersion() ); // if ( !AscAppManager::IsUseSystemScaling() ) { - std::wstring _force_value = AscAppManager::userSettings(L"force-scale"); - if ( _force_value == L"1" ) - _json_obj["uiscaling"] = 100; - else - if ( _force_value == L"1.25" ) - _json_obj["uiscaling"] = 125; - else - if ( _force_value == L"1.5" ) - _json_obj["uiscaling"] = 150; - else - if ( _force_value == L"1.75" ) - _json_obj["uiscaling"] = 175; - else - if ( _force_value == L"2" ) - _json_obj["uiscaling"] = 200; - else _json_obj["uiscaling"] = 0; + _json_obj["uiscaling"] = Scaling::factorToScaling(AscAppManager::userSettings(L"force-scale")); // } #ifndef __OS_WIN_XP diff --git a/win-linux/src/utils.cpp b/win-linux/src/utils.cpp index d0621c222..c98a7f1e8 100644 --- a/win-linux/src/utils.cpp +++ b/win-linux/src/utils.cpp @@ -195,12 +195,48 @@ namespace AppOptions { if ( _package == "msi" ) return AppPackageType::MSI; else if ( _package == "snap" ) return AppPackageType::Snap; else if ( _package == "flatpack" ) return AppPackageType::Flatpack; else - if( _package.isEmpty() ) return AppPackageType::Portable; + /*if( _package.isEmpty() )*/ return AppPackageType::Portable; return AppPackageType::Unknown; } } +namespace Scaling { + auto scalingToFactor(const QString& scaling) -> std::wstring + { + switch ( scaling.toInt() ) { + case 100: return L"1"; + case 125: return L"1.25"; + case 150: return L"1.5"; + case 175: return L"1.75"; + case 200: return L"2"; + case 250: return L"2.5"; + case 300: return L"3"; + case 350: return L"3.5"; + case 400: return L"4"; + case 450: return L"4.5"; + case 500: return L"5"; + default: return L"0"; + } + } + + auto factorToScaling(const std::wstring& value) -> QString + { + if ( value == L"1" ) return "100"; else + if ( value == L"1.25" ) return "125"; else + if ( value == L"1.5" ) return "150"; else + if ( value == L"1.75" ) return "175"; else + if ( value == L"2" ) return "200"; else + if ( value == L"2.5" ) return "250"; else + if ( value == L"3" ) return "300"; else + if ( value == L"3.5" ) return "350"; else + if ( value == L"4" ) return "400"; else + if ( value == L"4.5" ) return "450"; else + if ( value == L"5" ) return "500"; + else return "0"; + } +} + QStringList * Utils::getInputFiles(const QStringList& inlist) { QStringList * _ret_files_list = nullptr; @@ -469,7 +505,13 @@ QString Utils::stringifyJson(const QJsonObject& obj) inline double choose_scaling(double s) { - if ( s > 1.75 ) return 2; + if ( s > 4.5 ) return 5; + else if ( s > 4 ) return 4.5; + else if ( s > 3.5 ) return 4; + else if ( s > 3 ) return 3.5; + else if ( s > 2.5 ) return 3; + else if ( s > 2 ) return 2.5; + else if ( s > 1.75 ) return 2; else if ( s > 1.5 ) return 1.75; else if ( s > 1.25 ) return 1.5; else if ( s > 1 ) return 1.25; diff --git a/win-linux/src/utils.h b/win-linux/src/utils.h index 63ca57f09..0d1fcf60d 100644 --- a/win-linux/src/utils.h +++ b/win-linux/src/utils.h @@ -76,6 +76,11 @@ namespace AppOptions { auto packageType() -> AppPackageType; } +namespace Scaling { + auto scalingToFactor(const QString&) -> std::wstring; + auto factorToScaling(const std::wstring&) -> QString; +} + class Utils { public: static QStringList * getInputFiles(const QStringList& inlist); From bb86afe89c10bad57cd1ac5bf6fff550ac0c824d Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Thu, 20 Apr 2023 15:42:45 +0300 Subject: [PATCH 037/298] [start page] fix "scaling" combo box --- common/loginpage/src/panelsettings.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/loginpage/src/panelsettings.js b/common/loginpage/src/panelsettings.js index cd94b4ded..00d3d2936 100644 --- a/common/loginpage/src/panelsettings.js +++ b/common/loginpage/src/panelsettings.js @@ -83,7 +83,7 @@
-
From 8df3efd938426c8d69fe03ca677ef80a3671c85d Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Wed, 3 May 2023 09:37:54 +0300 Subject: [PATCH 038/298] [start page] refactoring for themes --- common/loginpage/src/panelsettings.js | 71 ++++++++++++++----- .../src/cascapplicationmanagerwrapper.cpp | 3 +- win-linux/src/prop/cmainwindowimpl.cpp | 3 - 3 files changed, 55 insertions(+), 22 deletions(-) diff --git a/common/loginpage/src/panelsettings.js b/common/loginpage/src/panelsettings.js index 87e0b907a..d5f1eca79 100644 --- a/common/loginpage/src/panelsettings.js +++ b/common/loginpage/src/panelsettings.js @@ -66,6 +66,50 @@ }, } + const t = window.RendererProcessVariable.theme; + const uitheme = { id: t.id, type: t.type } + + uitheme.set_id = function (id) { + if ( id == 'theme-system' ) + this.adapt_to_system_theme(); + else this.id = id; + } + + uitheme.is_theme_system = function () { + return this.id == 'theme-system' + } + + uitheme.is_system_theme_avalaible = function () { + return t.system !== 'disabled' + } + + uitheme.adapt_to_system_theme = function () { + this.id = 'theme-system'; + this.type = this.is_system_theme_dark() ? 'dark' : 'light'; + } + + uitheme.relevant_theme_id = function () { + if ( this.is_theme_system() ) + return this.is_system_theme_dark() ? 'theme-dark' : 'theme-classic-light'; + return this.id; + } + + uitheme.is_system_theme_dark = function () { + return window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches; + } + + uitheme.get_default_theme_for_type = type => type == THEME_TYPE_DARK ? THEME_ID_DEFAULT_DARK : THEME_ID_DEFAULT_LIGHT; + + uitheme.get_system_theme_type = () => { + const nativevars = window.RendererProcessVariable; + if ( nativevars.theme && !!nativevars.theme.system ) { + return nativevars.theme.system !== 'disabled' ? nativevars.theme.system : THEME_TYPE_LIGHT; + } else { + return window.matchMedia('(prefers-color-scheme: dark)').matches ? THEME_TYPE_DARK : THEME_TYPE_LIGHT; + } + } + + var ControllerSettings = function(args={}) { args.caption = 'Settings'; args.action = @@ -238,18 +282,16 @@ $btnApply.disable(false); }; - function _apply_theme(name, type) { - if ( name == 'theme-system' ) { - name = get_default_theme(get_system_theme_type()); - } + function _apply_theme(id, type) { + uitheme.set_id(id); - if ( !$("body").hasClass(name) ) { - const _type = (type == 'dark' || /theme-(?:[a-z]+-)?dark(?:-[a-z]*)?/.test(name)) ? 'theme-type-dark' : 'theme-type-light'; + const theme_id = uitheme.relevant_theme_id(); + if ( !$("body").hasClass(theme_id) ) { + const _type = (type == 'dark' || /theme-(?:[a-z]+-)?dark(?:-[a-z]*)?/.test(theme_id)) ? 'theme-type-dark' : 'theme-type-light'; const _cls = document.body.className.replace(/theme-[\w-]+/gi,'').trim(); - document.body.className = `${_cls?_cls+' ':''}${name} ${_type}`; + document.body.className = `${_cls?_cls+' ':''}${theme_id} ${_type}`; - localStorage.setItem('ui-theme-id', name); - CommonEvents.fire('theme:changed', [name, themes_map[name].type]); + CommonEvents.fire('theme:changed', [theme_id, themes_map[theme_id].type]); } }; @@ -421,7 +463,7 @@ {'theme-dark': utils.Lang.settOptThemeDark}, {'theme-contrast-dark': utils.Lang.settOptThemeContrastDark}]; - if ( !opts.systemtheme || opts.systemtheme !== 'disabled' ) + if ( uitheme.is_system_theme_avalaible() ) _themes.unshift({'theme-system': utils.Lang.settOptThemeSystem}); const _combo = $('#opts-ui-theme select', $panel); @@ -509,13 +551,6 @@ } }; - const get_system_theme_type = () => { - const nativevars = window.RendererProcessVariable; - return nativevars.theme && !!nativevars.theme.system ? nativevars.theme.system : - window.matchMedia('(prefers-color-scheme: dark)').matches ? THEME_TYPE_DARK : THEME_TYPE_LIGHT; - //window.matchMedia('(prefers-color-scheme: dark)').matches ? THEME_TYPE_DARK : THEME_TYPE_LIGHT; - } - const get_default_theme = type => type == THEME_TYPE_DARK ? THEME_ID_DEFAULT_DARK : THEME_ID_DEFAULT_LIGHT; const on_system_theme_dark = e => sdk.command("system:changed", JSON.stringify({'colorscheme': e.target.matches ? THEME_TYPE_DARK:THEME_TYPE_LIGHT})); @@ -611,7 +646,7 @@ return this; }, currentTheme: function() { - const name = localStorage.getItem('ui-theme-id'); + const name = uitheme.id; return {name: name, type: themes_map[name] ? themes_map[name].type : THEME_TYPE_LIGHT}; }, }; diff --git a/win-linux/src/cascapplicationmanagerwrapper.cpp b/win-linux/src/cascapplicationmanagerwrapper.cpp index 8aa03b0ba..36bfd19d5 100644 --- a/win-linux/src/cascapplicationmanagerwrapper.cpp +++ b/win-linux/src/cascapplicationmanagerwrapper.cpp @@ -1683,7 +1683,8 @@ void CAscApplicationManagerWrapper::applyTheme(const wstring& theme, bool force) {"type", _app.m_themes->current().stype()}, {"id", QString::fromStdWString(_app.m_themes->current().id())} #ifndef Q_OS_WIN - ,{"system", _app.m_themes->isSystemSchemeDark() ? "dark" : "light"} +// ,{"system", _app.m_themes->isSystemSchemeDark() ? "dark" : "light"} + ,{"system", "disabled"} #endif }); diff --git a/win-linux/src/prop/cmainwindowimpl.cpp b/win-linux/src/prop/cmainwindowimpl.cpp index 602b032aa..ea2eaccd0 100644 --- a/win-linux/src/prop/cmainwindowimpl.cpp +++ b/win-linux/src/prop/cmainwindowimpl.cpp @@ -101,9 +101,6 @@ void CMainWindowImpl::refreshAboutVersion() #ifndef __OS_WIN_XP _json_obj["uitheme"] = QString::fromStdWString(AscAppManager::themes().current().id()); -# ifdef Q_OS_LINUX - _json_obj["systemtheme"] = "disabled"; -# endif #endif #ifdef Q_OS_WIN From bf14cb9a610ce5b1e6b589643a2778c5969e2f9f Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Wed, 3 May 2023 20:30:41 +0300 Subject: [PATCH 039/298] [win-linux] debug --- win-linux/defaults.pri | 11 +-- win-linux/extras/update-daemon/common.pri | 39 +++------- .../update-daemon/src/classes/csvcmanager.cpp | 75 ++++++++++++------- .../update-daemon/src/platform_linux/utils.h | 2 +- win-linux/src/cupdatemanager.cpp | 9 ++- 5 files changed, 66 insertions(+), 70 deletions(-) diff --git a/win-linux/defaults.pri b/win-linux/defaults.pri index 8b6e90de5..d6b1f0dc3 100644 --- a/win-linux/defaults.pri +++ b/win-linux/defaults.pri @@ -272,15 +272,8 @@ core_windows { $$PWD/src/platform_win/message.cpp updmodule:!build_xp { - HEADERS += $$PWD/src/cupdatemanager.h - SOURCES += $$PWD/src/cupdatemanager.cpp - - INCLUDEPATH += $$PWD/extras/update-daemon/src/classes - HEADERS += $$PWD/src/platform_win/updatedialog.h \ - $$PWD/extras/update-daemon/src/classes/csocket.h - - SOURCES += $$PWD/src/platform_win/updatedialog.cpp \ - $$PWD/extras/update-daemon/src/classes/csocket.cpp + HEADERS += $$PWD/src/platform_win/updatedialog.h + SOURCES += $$PWD/src/platform_win/updatedialog.cpp } LIBS += -lwininet \ diff --git a/win-linux/extras/update-daemon/common.pri b/win-linux/extras/update-daemon/common.pri index e964d5430..5d13d6b4b 100644 --- a/win-linux/extras/update-daemon/common.pri +++ b/win-linux/extras/update-daemon/common.pri @@ -17,18 +17,10 @@ INCLUDEPATH += $$PWD/../../src/prop HEADERS += $$PWD/src/version.h \ $$PWD/src/classes/csocket.h \ - $$PWD/src/classes/cunzip.h \ - $$PWD/src/classes/csvcmanager.h \ - $$PWD/src/classes/cdownloader.h - -SOURCES += $$PWD/src/main.cpp \ - $$PWD/src/utils.cpp \ - $$PWD/src/svccontrol.cpp \ - $$PWD/src/classes/capplication.cpp \ - $$PWD/src/classes/csocket.cpp \ - $$PWD/src/classes/cunzip.cpp \ - $$PWD/src/classes/csvcmanager.cpp \ - $$PWD/src/classes/cdownloader.cpp + $$PWD/src/classes/csvcmanager.h + +SOURCES += $$PWD/src/classes/csocket.cpp \ + $$PWD/src/classes/csvcmanager.cpp ENV_PRODUCT_VERSION = $$(PRODUCT_VERSION) !isEmpty(ENV_PRODUCT_VERSION) { @@ -88,7 +80,7 @@ core_windows { -loleaut32 \ -lcomsuppw \ -ladvapi32 \ - -lurlmon \ + -lwinhttp \ -lwininet \ -lws2_32 \ -lrpcrt4 \ @@ -98,22 +90,11 @@ core_windows { -luserenv } -LIBS += -luser32 \ - -lkernel32 \ - -lshell32 \ - -lshlwapi \ - -lole32 \ - -loleaut32 \ - -lcomsuppw \ - -ladvapi32 \ - -lwinhttp \ - -lwininet \ - -lws2_32 \ - -lrpcrt4 \ - -lwtsapi32 \ - -lcrypt32 \ - -lwintrust \ - -luserenv +core_linux { + HEADERS += $$PWD/src/platform_linux/utils.h \ + $$PWD/src/classes/platform_linux/capplication.h \ + $$PWD/src/classes/platform_linux/cunzip.h \ + $$PWD/src/classes/platform_linux/cdownloader.h SOURCES += $$PWD/src/platform_linux/main.cpp \ $$PWD/src/platform_linux/utils.cpp \ diff --git a/win-linux/extras/update-daemon/src/classes/csvcmanager.cpp b/win-linux/extras/update-daemon/src/classes/csvcmanager.cpp index 473210d26..cd07b1f85 100644 --- a/win-linux/extras/update-daemon/src/classes/csvcmanager.cpp +++ b/win-linux/extras/update-daemon/src/classes/csvcmanager.cpp @@ -38,20 +38,36 @@ #include #include "../../src/defines.h" #include "../../src/prop/defines_p.h" -#include -#include -#include -#include -#include +#ifdef _WIN32 +# include "platform_win/utils.h" +# include +# include +# include +# define APP_LAUNCH_NAME L"/DesktopEditors.exe" +# define APP_LAUNCH_NAME2 L"/editors.exe" +# define APP_HELPER L"/editors_helper.exe" +# define DAEMON_NAME L"/updatesvc.exe" +# define DAEMON_NAME_OLD L"/~updatesvc.exe" +# define ARCHIVE_EXT TEXT(".zip") +# define ARCHIVE_PATTERN TEXT("*.zip") +# define sleep(a) Sleep(a) +#else +# include "platform_linux/utils.h" +# include +# include +# include +# define APP_LAUNCH_NAME "/DesktopEditors" +# define APP_HELPER "/editors_helper" +# define DAEMON_NAME "/updatesvc" +# define SUBFOLDER "/desktopeditors" +# define ARCHIVE_EXT TEXT(".tar.gz") +# define ARCHIVE_PATTERN TEXT("*.tar.gz") +# define sleep(a) usleep(a*1000) +#endif #define UPDATE_PATH TEXT("/" REG_APP_NAME "Updates") #define BACKUP_PATH TEXT("/" REG_APP_NAME "Backup") -#define APP_LAUNCH_NAME L"/DesktopEditors.exe" -#define APP_LAUNCH_NAME2 L"/editors.exe" -#define APP_HELPER L"/editors_helper.exe" -#define DAEMON_NAME L"/updatesvc.exe" -#define DAEMON_NAME_OLD L"/~updatesvc.exe" -#define SUCCES_UNPACKED L"/.success_unpacked" +#define SUCCES_UNPACKED TEXT("/.success_unpacked") using std::vector; @@ -156,8 +172,8 @@ void CSvcManager::init() case MSG_LoadUpdates: { m_downloadMode = Mode::DOWNLOAD_UPDATES; if (m_pDownloader) { - wstring ext = (params[2] == TEXT("archive")) ? TEXT(".zip") : - (params[2] == TEXT("msi")) ? TEXT(".msi") : TEXT(".exe"); + wstring ext = (params[2] == TEXT("iss")) ? TEXT(".exe") : + (params[2] == TEXT("msi")) ? TEXT(".msi") : ARCHIVE_EXT; m_pDownloader->downloadFile(params[1], generateTmpFileName(ext)); } NS_Logger::WriteLog(L"Received MSG_LoadUpdates, URL: " + params[1]); @@ -203,8 +219,8 @@ void CSvcManager::onCompleteUnzip(const int error) { if (error == UNZIP_OK) { // Сreate a file about successful unpacking for use in subsequent launches - const wstring updPath = NS_File::parentPath(NS_File::appPath()) + UPDATE_PATH; - list successList{m_newVersion}; + const tstring updPath = NS_File::parentPath(NS_File::appPath()) + UPDATE_PATH; + list successList{m_newVersion}; if (!NS_File::writeToFile(updPath + SUCCES_UNPACKED, successList)) { m_lock = false; return; @@ -258,14 +274,14 @@ void CSvcManager::onProgressSlot(const int percent) sendMessage(MSG_Progress, to_tstring(percent)); } -void CSvcManager::unzipIfNeeded(const wstring &filePath, const wstring &newVersion) +void CSvcManager::unzipIfNeeded(const tstring &filePath, const tstring &newVersion) { if (m_lock) return; m_lock = true; m_newVersion = newVersion; - const wstring updPath = NS_File::parentPath(NS_File::appPath()) + UPDATE_PATH; + const tstring updPath = NS_File::parentPath(NS_File::appPath()) + UPDATE_PATH; auto unzip = [=]()->void { if (!NS_File::dirExists(updPath) && !NS_File::makePath(updPath)) { NS_Logger::WriteLog(TEXT("An error occurred while creating dir: ") + updPath); @@ -291,19 +307,23 @@ void CSvcManager::unzipIfNeeded(const wstring &filePath, const wstring &newVersi } } -void CSvcManager::clearTempFiles(const wstring &prefix, const wstring &except) +void CSvcManager::clearTempFiles(const tstring &prefix, const tstring &except) { m_future_clear = std::async(std::launch::async, [=]() { tstring _error; list filesList; if (!NS_File::GetFilesList(NS_File::tempPath(), &filesList, _error, true)) { - NS_Logger::WriteLog(DEFAULT_ERROR_MESSAGE + L" " + _error); + NS_Logger::WriteLog(DEFAULT_ERROR_MESSAGE + TEXT(" ") + _error); return; } for (auto &filePath : filesList) { - if (PathMatchSpec(filePath.c_str(), L"*.json") || PathMatchSpec(filePath.c_str(), L"*.zip") - || PathMatchSpec(filePath.c_str(), L"*.msi") || PathMatchSpec(filePath.c_str(), L"*.exe")) { - wstring lcFilePath(filePath); +#ifdef _WIN32 + if (PathMatchSpec(filePath.c_str(), L"*.json") || PathMatchSpec(filePath.c_str(), ARCHIVE_PATTERN) + || PathMatchSpec(filePath.c_str(), L"*.msi") || PathMatchSpec(filePath.c_str(), L"*.exe")) { +#else + if (fnmatch("*.json", filePath.c_str(), 0) == 0 || fnmatch(ARCHIVE_PATTERN, filePath.c_str(), 0) == 0) { +#endif + tstring lcFilePath(filePath); std::transform(lcFilePath.begin(), lcFilePath.end(), lcFilePath.begin(), ::tolower); if (lcFilePath.find(prefix) != tstring::npos && filePath != except) NS_File::removeFile(filePath); @@ -314,9 +334,9 @@ void CSvcManager::clearTempFiles(const wstring &prefix, const wstring &except) void CSvcManager::startReplacingFiles() { - wstring appPath = NS_File::appPath(); - wstring updPath = NS_File::parentPath(appPath) + UPDATE_PATH; - wstring tmpPath = NS_File::parentPath(appPath) + BACKUP_PATH; + tstring appPath = NS_File::appPath(); + tstring updPath = NS_File::parentPath(appPath) + UPDATE_PATH; + tstring tmpPath = NS_File::parentPath(appPath) + BACKUP_PATH; if (!NS_File::dirExists(updPath)) { NS_Logger::WriteLog(TEXT("Update cancelled. Can't find folder: ") + updPath, true); return; @@ -337,6 +357,7 @@ void CSvcManager::startReplacingFiles() NS_Logger::WriteLog(L"Update cancelled. The file signature is missing: " + updPath + DAEMON_NAME, true); return; } +# endif #endif // Check backup folder @@ -387,7 +408,7 @@ void CSvcManager::startReplacingFiles() #else if (!NS_File::replaceFolder(appPath, tmpPath, true)) { #endif - NS_Logger::WriteLog(L"Update cancelled. Can't replace files to backup: " + NS_Utils::GetLastErrorAsString(), true); + NS_Logger::WriteLog(TEXT("Update cancelled. Can't replace files to backup: ") + NS_Utils::GetLastErrorAsString(), true); if (NS_File::dirExists(tmpPath) && !NS_File::dirIsEmpty(tmpPath) && !NS_File::replaceFolder(tmpPath, appPath)) NS_Logger::WriteLog(TEXT("Can't restore files from backup!"), true); return; @@ -467,7 +488,7 @@ void CSvcManager::startReplacingFiles() NS_Logger::WriteLog(TEXT("An error occurred while restarting the program!"), true); } -bool CSvcManager::sendMessage(int cmd, const wstring ¶m1, const wstring ¶m2, const wstring ¶m3) +bool CSvcManager::sendMessage(int cmd, const tstring ¶m1, const tstring ¶m2, const tstring ¶m3) { tstring str = to_tstring(cmd) + TEXT("|") + param1 + TEXT("|") + param2 + TEXT("|") + param3; size_t sz = str.size() * sizeof(str.front()); diff --git a/win-linux/extras/update-daemon/src/platform_linux/utils.h b/win-linux/extras/update-daemon/src/platform_linux/utils.h index 4a18dddbe..b1c6de020 100644 --- a/win-linux/extras/update-daemon/src/platform_linux/utils.h +++ b/win-linux/extras/update-daemon/src/platform_linux/utils.h @@ -54,7 +54,7 @@ int ShowMessage(string str, bool showError = false); namespace NS_File { void setAppPath(const string &path); -bool GetFilesList(const string &path, list *lst, string &error, bool ignore_locked = true); +bool GetFilesList(const string &path, list *lst, string &error, bool ignore_locked = false); bool readFile(const string &filePath, list &linesList); bool writeToFile(const string &filePath, list &linesList); bool runProcess(const string &fileName, const string &args); diff --git a/win-linux/src/cupdatemanager.cpp b/win-linux/src/cupdatemanager.cpp index e6b888ed6..f8ac7c405 100644 --- a/win-linux/src/cupdatemanager.cpp +++ b/win-linux/src/cupdatemanager.cpp @@ -212,12 +212,12 @@ CUpdateManager::CUpdateManager(QObject *parent): if ( InputArgs::contains(CMD_ARGUMENT_UPDATES_CHANNEL) ) { std::wstring ch_updates = InputArgs::argument_value(CMD_ARGUMENT_UPDATES_CHANNEL); if ( ch_updates == L"dev" ) { - m_checkUrl = TEXT(URL_APPCAST_DEV_CHANNEL); + m_checkUrl = QString(URL_APPCAST_DEV_CHANNEL).toStdWString(); } } if ( m_checkUrl.empty() ) - m_checkUrl = TEXT(URL_APPCAST_UPDATES); + m_checkUrl = QString(URL_APPCAST_UPDATES).toStdWString(); } if ( !m_checkUrl.empty()) { @@ -431,7 +431,7 @@ bool CUpdateManager::isVersionBHigherThanA(const QString &a, const QString &b) return false; } -bool CUpdateManager::sendMessage(int cmd, const wstring ¶m1, const wstring ¶m2, const wstring ¶m3) +bool CUpdateManager::sendMessage(int cmd, const tstring ¶m1, const tstring ¶m2, const tstring ¶m3) { tstring str = std::to_tstring(cmd) + TEXT("|") + param1 + TEXT("|") + param2 + TEXT("|") + param3; size_t sz = str.size() * sizeof(str.front()); @@ -453,7 +453,7 @@ void CUpdateManager::loadUpdates() } else if (!m_packageData->packageUrl.empty()) { - if (!sendMessage(MSG_LoadUpdates, m_packageData->packageUrl, m_packageData->fileType.toStdWString())) { + if (!sendMessage(MSG_LoadUpdates, WStrToTStr(m_packageData->packageUrl), QStrToTStr(m_packageData->fileType))) { m_dialogSchedule->addToSchedule("criticalMsg", QObject::tr("An error occurred while loading updates: Update Service not found!")); } } @@ -601,6 +601,7 @@ void CUpdateManager::onLoadCheckFinished(const QString &filePath) } #else QJsonObject win = package.value("linux_64").toObject(); + QJsonObject package_type = win.value("archive").toObject(); #endif m_packageData->packageUrl = package_type.value("url").toString().toStdWString(); m_packageData->hash = package_type.value("md5").toString().toLower(); From 20466bd8c75b06ddc744d3a6a5a1cc19b6754575 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Wed, 3 May 2023 20:39:24 +0300 Subject: [PATCH 040/298] [linux] debug --- win-linux/extras/update-daemon/src/classes/csvcmanager.cpp | 6 +++--- win-linux/extras/update-daemon/src/platform_linux/main.cpp | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/win-linux/extras/update-daemon/src/classes/csvcmanager.cpp b/win-linux/extras/update-daemon/src/classes/csvcmanager.cpp index cd07b1f85..ff303c6d9 100644 --- a/win-linux/extras/update-daemon/src/classes/csvcmanager.cpp +++ b/win-linux/extras/update-daemon/src/classes/csvcmanager.cpp @@ -172,11 +172,11 @@ void CSvcManager::init() case MSG_LoadUpdates: { m_downloadMode = Mode::DOWNLOAD_UPDATES; if (m_pDownloader) { - wstring ext = (params[2] == TEXT("iss")) ? TEXT(".exe") : + tstring ext = (params[2] == TEXT("iss")) ? TEXT(".exe") : (params[2] == TEXT("msi")) ? TEXT(".msi") : ARCHIVE_EXT; m_pDownloader->downloadFile(params[1], generateTmpFileName(ext)); } - NS_Logger::WriteLog(L"Received MSG_LoadUpdates, URL: " + params[1]); + NS_Logger::WriteLog(TEXT("Received MSG_LoadUpdates, URL: ") + params[1]); break; } case MSG_StopDownload: { @@ -241,7 +241,7 @@ void CSvcManager::onCompleteUnzip(const int error) m_lock = false; } -void CSvcManager::onCompleteSlot(const int error, const wstring &filePath) +void CSvcManager::onCompleteSlot(const int error, const tstring &filePath) { if (error == 0) { switch (m_downloadMode) { diff --git a/win-linux/extras/update-daemon/src/platform_linux/main.cpp b/win-linux/extras/update-daemon/src/platform_linux/main.cpp index e791ff59b..4125e1ddb 100644 --- a/win-linux/extras/update-daemon/src/platform_linux/main.cpp +++ b/win-linux/extras/update-daemon/src/platform_linux/main.cpp @@ -32,7 +32,7 @@ #include "platform_linux/utils.h" #include "classes/platform_linux/capplication.h" -#include "classes/cupdatemanager.h" +#include "classes/csvcmanager.h" #include "../../src/defines.h" #include @@ -48,7 +48,7 @@ int main(int argc, char *argv[]) return 0; CApplication app; - CUpdateManager upd; + CSvcManager upd; socket.onMessageReceived([&app](void *buff, size_t) { if (strcmp((const char*)buff, "stop") == 0) app.exit(0); From 4d27b393980874eb1f99df99fea36fda1954f182 Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Thu, 4 May 2023 01:08:21 +0300 Subject: [PATCH 041/298] [win-nix] removed unused code --- .../src/cascapplicationmanagerwrapper.cpp | 20 ++---------------- .../cascapplicationmanagerwrapper_private.h | 1 - win-linux/src/ccefeventstransformer.cpp | 3 --- win-linux/src/ceditortools.cpp | 7 ------- win-linux/src/windows/cmainwindow.cpp | 21 ------------------- win-linux/src/windows/cmainwindow.h | 1 - 6 files changed, 2 insertions(+), 51 deletions(-) diff --git a/win-linux/src/cascapplicationmanagerwrapper.cpp b/win-linux/src/cascapplicationmanagerwrapper.cpp index 8aa03b0ba..5bf1e42ec 100644 --- a/win-linux/src/cascapplicationmanagerwrapper.cpp +++ b/win-linux/src/cascapplicationmanagerwrapper.cpp @@ -585,24 +585,8 @@ bool CAscApplicationManagerWrapper::processCommonEvent(NSEditorApi::CAscCefMenuE break;} - case ASC_MENU_EVENT_TYPE_CEF_CREATETAB: { - CEditorWindow * editor = editorWindowFromViewId(event->get_SenderId()); - if ( editor ) { - QRect winrect{editor->geometry().translated(QPoint(50, 50))}; - - CAscCreateTab& data = *static_cast(event->m_pData); - CTabPanel * _panel = CEditorTools::createEditorPanel(COpenOptions{data.get_Url()}, winrect.adjusted(4,4,-4,-4)); - _panel->data()->setContentType(editor->editorType()); - _panel->data()->setUrl(""); - - CEditorWindow * editor_win = new CEditorWindow(winrect, _panel); - editor_win->show(editor->windowState() == Qt::WindowMaximized); - - m_vecEditors.push_back( size_t(editor_win) ); -// sendCommandTo(_panel->cef(), L"window:features", Utils::encodeJson(QJsonObject{{"skiptoparea", TOOLBTN_HEIGHT}}).toStdWString()); - return true; - } - break;} +// case ASC_MENU_EVENT_TYPE_CEF_CREATETAB: { +// break;} case ASC_MENU_EVENT_TYPE_CEF_TABEDITORTYPE: { CCefView * pView = GetViewById(event->get_SenderId()); diff --git a/win-linux/src/cascapplicationmanagerwrapper_private.h b/win-linux/src/cascapplicationmanagerwrapper_private.h index 3423d686c..feb620cdf 100644 --- a/win-linux/src/cascapplicationmanagerwrapper_private.h +++ b/win-linux/src/cascapplicationmanagerwrapper_private.h @@ -207,7 +207,6 @@ class CAscApplicationManagerWrapper_Private if ( _url.rfind(L"http://",0) == 0 || _url.rfind(L"https://",0) == 0 ) { COpenOptions opts{_url}; opts.id = _view ? _view->GetId() : -1; -// mainWindow()->mainPanel()->onCloudDocumentOpen(_url, _id, true); } else { // /* open local file */ } diff --git a/win-linux/src/ccefeventstransformer.cpp b/win-linux/src/ccefeventstransformer.cpp index 4443864c7..f28de1d4d 100644 --- a/win-linux/src/ccefeventstransformer.cpp +++ b/win-linux/src/ccefeventstransformer.cpp @@ -61,9 +61,6 @@ void CCefEventsTransformer::OnEvent(QObject * target, NSEditorApi::CAscCefMenuEv // case ASC_MENU_EVENT_TYPE_CEF_CREATETAB: { // CAscCreateTab * pData = (CAscCreateTab *)event->m_pData; -// QMetaObject::invokeMethod(target, "onCloudDocumentOpen", Qt::QueuedConnection, -// Q_ARG(std::wstring, pData->get_Url()), Q_ARG(int, pData->get_IdEqual()), Q_ARG(bool, pData->get_Active())); - // break;} case ASC_MENU_EVENT_TYPE_CEF_TABEDITORTYPE: { diff --git a/win-linux/src/ceditortools.cpp b/win-linux/src/ceditortools.cpp index cfcd4fd28..718e716c3 100644 --- a/win-linux/src/ceditortools.cpp +++ b/win-linux/src/ceditortools.cpp @@ -266,13 +266,6 @@ namespace CEditorTools if ( opts.srctype == etNewFile ) data->setContentType(editorTypeFromFormat(opts.format)); - if ( !data->isLocal() ) { - QRegularExpression re("ascdesktop:\\/\\/compare"); - QRegularExpressionMatch match = re.match(QString::fromStdWString(data->url())); - if ( match.hasMatch() ) { - data->setIsLocal(true); - } - } panel->setData(data); diff --git a/win-linux/src/windows/cmainwindow.cpp b/win-linux/src/windows/cmainwindow.cpp index 014d4096b..2bf351bf7 100644 --- a/win-linux/src/windows/cmainwindow.cpp +++ b/win-linux/src/windows/cmainwindow.cpp @@ -716,27 +716,6 @@ void CMainWindow::onPortalLogout(std::wstring wjson) } } -void CMainWindow::onCloudDocumentOpen(std::wstring url, int id, bool select) -{ - COpenOptions opts = {url}; - opts.id = id; - - int _index = m_pTabs->openCloudDocument(opts, select, true); - if ( !(_index < 0) ) { - if ( select ) - toggleButtonMain(false, true); - - CAscTabData& _panel = *(m_pTabs->panel(_index)->data()); - QRegularExpression re("ascdesktop:\\/\\/compare"); - QRegularExpressionMatch match = re.match(QString::fromStdWString(_panel.url())); - - if (match.hasMatch()) { - _panel.setIsLocal(true); - _panel.setUrl(""); - } - } -} - void CMainWindow::doOpenLocalFile(COpenOptions& opts) { QFileInfo info(opts.url); diff --git a/win-linux/src/windows/cmainwindow.h b/win-linux/src/windows/cmainwindow.h index aae4c9f84..5c410a35f 100644 --- a/win-linux/src/windows/cmainwindow.h +++ b/win-linux/src/windows/cmainwindow.h @@ -117,7 +117,6 @@ public slots: void onEditorActionRequest(int, const QString&); void onTabsCountChanged(int, int, int); void onWebAppsFeatures(int id, std::wstring); - void onCloudDocumentOpen(std::wstring, int, bool); void onDocumentType(int id, int type); void onDocumentName(void *); void onEditorConfig(int, std::wstring cfg); From e2a97b756f1a2882b08d1b55e2c90eb3320b5a96 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Thu, 4 May 2023 13:25:59 +0300 Subject: [PATCH 042/298] [linux] debug --- win-linux/src/cupdatemanager.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/win-linux/src/cupdatemanager.cpp b/win-linux/src/cupdatemanager.cpp index f8ac7c405..03ebc1f37 100644 --- a/win-linux/src/cupdatemanager.cpp +++ b/win-linux/src/cupdatemanager.cpp @@ -501,6 +501,7 @@ void CUpdateManager::unzipIfNeeded() void CUpdateManager::handleAppClose() { if ( m_restartForUpdate ) { +#ifdef _WIN32 if (m_packageData->fileType != "archive") { GET_REGISTRY_SYSTEM(reg_system) QString prev_inst_lang = " /LANG=" + reg_system.value("locale", "en").toString(); @@ -508,10 +509,13 @@ void CUpdateManager::handleAppClose() criticalMsg(nullptr, QObject::tr("An error occurred while start install updates!")); } } else { +#endif if (!sendMessage(MSG_StartReplacingFiles)) { criticalMsg(nullptr, QObject::tr("An error occurred while start replacing files: Update Service not found!")); } +#ifdef _WIN32 } +#endif } else sendMessage(MSG_StopDownload); } @@ -602,6 +606,7 @@ void CUpdateManager::onLoadCheckFinished(const QString &filePath) #else QJsonObject win = package.value("linux_64").toObject(); QJsonObject package_type = win.value("archive").toObject(); + m_packageData->fileType = "archive"; #endif m_packageData->packageUrl = package_type.value("url").toString().toStdWString(); m_packageData->hash = package_type.value("md5").toString().toLower(); From 4870d253b1e0171efa126bc663aa070d52f76549 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Thu, 4 May 2023 13:28:43 +0300 Subject: [PATCH 043/298] [linux] add deleting undownloaded files --- .../update-daemon/src/classes/platform_linux/cdownloader.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/win-linux/extras/update-daemon/src/classes/platform_linux/cdownloader.cpp b/win-linux/extras/update-daemon/src/classes/platform_linux/cdownloader.cpp index 3d4a810f5..d6614b28b 100644 --- a/win-linux/extras/update-daemon/src/classes/platform_linux/cdownloader.cpp +++ b/win-linux/extras/update-daemon/src/classes/platform_linux/cdownloader.cpp @@ -119,6 +119,8 @@ void CDownloader::start() curl_easy_cleanup(curl); } fclose(fp); + if (res == CURLE_ABORTED_BY_CALLBACK) + remove(pimpl->m_filePath.c_str()); } else res = CURLE_WRITE_ERROR; From 8db67c2f69d4868c7b3d839793da47bf0cb46f19 Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Sat, 13 May 2023 11:05:39 +0300 Subject: [PATCH 044/298] [mac] for bug 57427 --- macos/Localization/be.xliff | 5 +++++ macos/Localization/bg.xliff | 5 +++++ macos/Localization/ca.xliff | 5 +++++ macos/Localization/cs.xliff | 5 +++++ macos/Localization/da.xliff | 5 +++++ macos/Localization/de.xliff | 5 +++++ macos/Localization/el-GR.xliff | 5 +++++ macos/Localization/el.xliff | 5 +++++ macos/Localization/en.xliff | 5 +++++ macos/Localization/es.xliff | 5 +++++ macos/Localization/et.xliff | 5 +++++ macos/Localization/fi.xliff | 5 +++++ macos/Localization/fr.xliff | 5 +++++ macos/Localization/ga.xliff | 5 +++++ macos/Localization/gl.xliff | 5 +++++ macos/Localization/hr.xliff | 5 +++++ macos/Localization/hu.xliff | 5 +++++ macos/Localization/hy.xliff | 5 +++++ macos/Localization/id.xliff | 5 +++++ macos/Localization/it.xliff | 5 +++++ macos/Localization/ja.xliff | 5 +++++ macos/Localization/ko.xliff | 5 +++++ macos/Localization/lo.xliff | 5 +++++ macos/Localization/lt.xliff | 4 ++++ macos/Localization/lv.xliff | 5 +++++ macos/Localization/nl.xliff | 5 +++++ macos/Localization/no.xliff | 5 +++++ macos/Localization/pl.xliff | 5 +++++ macos/Localization/pt-BR.xliff | 5 +++++ macos/Localization/pt-PT.xliff | 5 +++++ macos/Localization/ro.xliff | 5 +++++ macos/Localization/ru.xliff | 5 +++++ macos/Localization/si.xliff | 5 +++++ macos/Localization/sk.xliff | 5 +++++ macos/Localization/sl.xliff | 5 +++++ macos/Localization/sv.xliff | 5 +++++ macos/Localization/tr.xliff | 6 +++--- macos/Localization/uk.xliff | 5 +++++ macos/Localization/vi.xliff | 6 +++--- macos/Localization/zh-Hans-CN.xliff | 5 +++++ macos/Localization/zh-Hant.xliff | 5 +++++ 41 files changed, 200 insertions(+), 6 deletions(-) diff --git a/macos/Localization/be.xliff b/macos/Localization/be.xliff index a77108628..007bc8ec1 100644 --- a/macos/Localization/be.xliff +++ b/macos/Localization/be.xliff @@ -142,6 +142,11 @@ Дакумент %ld.docx No comment provided by engineer. + + Document %ld.docxf + Дакумент %ld.docxf + No comment provided by engineer. + Document template Шаблон дакумента Word Open XML (*.dotx) diff --git a/macos/Localization/bg.xliff b/macos/Localization/bg.xliff index 5e950a3af..341ea3035 100644 --- a/macos/Localization/bg.xliff +++ b/macos/Localization/bg.xliff @@ -146,6 +146,11 @@ Document %ld.docx Документ %ld.docx + No comment provided by engineer. + + Document %ld.docxf + Документ %ld.docxf + No comment provided by engineer. Document template diff --git a/macos/Localization/ca.xliff b/macos/Localization/ca.xliff index e74d6019c..d56a745c8 100644 --- a/macos/Localization/ca.xliff +++ b/macos/Localization/ca.xliff @@ -142,6 +142,11 @@ Document %ld.docx No comment provided by engineer. + + Document %ld.docxf + Document %ld.docxf + No comment provided by engineer. + Document template Plantilla de document Word Open XML (*.dotx) diff --git a/macos/Localization/cs.xliff b/macos/Localization/cs.xliff index 45d2fe4f5..d487d8f93 100644 --- a/macos/Localization/cs.xliff +++ b/macos/Localization/cs.xliff @@ -146,6 +146,11 @@ Document %ld.docx Dokument %ld.docx + No comment provided by engineer. + + Document %ld.docxf + Dokument %ld.docxf + No comment provided by engineer. Document template diff --git a/macos/Localization/da.xliff b/macos/Localization/da.xliff index e99878737..09a1235e0 100644 --- a/macos/Localization/da.xliff +++ b/macos/Localization/da.xliff @@ -147,6 +147,11 @@ Dokument %ld.docx No comment provided by engineer. + + Document %ld.docxf + Dokument %ld.docxf + No comment provided by engineer. + Document template Word Open XML Dokumentskabelon (*.dotx) diff --git a/macos/Localization/de.xliff b/macos/Localization/de.xliff index 0331562da..8ed253ebd 100644 --- a/macos/Localization/de.xliff +++ b/macos/Localization/de.xliff @@ -147,6 +147,11 @@ Dokument %ld.docx No comment provided by engineer. + + Document %ld.docxf + Dokument %ld.docxf + No comment provided by engineer. + Document template Word Open XML-Dokumentvorlage (*.dotx) diff --git a/macos/Localization/el-GR.xliff b/macos/Localization/el-GR.xliff index 64ebe2684..796e43d6a 100644 --- a/macos/Localization/el-GR.xliff +++ b/macos/Localization/el-GR.xliff @@ -140,6 +140,11 @@ Document %ld.docx Έγγραφο %ld.docx + No comment provided by engineer. + + Document %ld.docxf + Έγγραφο %ld.docxf + No comment provided by engineer. Document templateΠρότυπο εγγράφου diff --git a/macos/Localization/el.xliff b/macos/Localization/el.xliff index a1d375ccb..eab391e48 100644 --- a/macos/Localization/el.xliff +++ b/macos/Localization/el.xliff @@ -147,6 +147,11 @@ Έγγραφο %ld.docx No comment provided by engineer. + + Document %ld.docxf + Έγγραφο %ld.docxf + No comment provided by engineer. + Document template Πρότυπο εγγράφου Word με ανοιχτή μορφή XML (*.dotx) diff --git a/macos/Localization/en.xliff b/macos/Localization/en.xliff index a297ca855..c2e5e3e2b 100644 --- a/macos/Localization/en.xliff +++ b/macos/Localization/en.xliff @@ -147,6 +147,11 @@ Document %ld.docx No comment provided by engineer. + + Document %ld.docxf + Document %ld.docxf + No comment provided by engineer. + Document template Word Open XML Document Template (*.dotx) diff --git a/macos/Localization/es.xliff b/macos/Localization/es.xliff index fdd449f5e..62d2e624a 100644 --- a/macos/Localization/es.xliff +++ b/macos/Localization/es.xliff @@ -147,6 +147,11 @@ Documento %ld.docx No comment provided by engineer. + + Document %ld.docxf + Documento %ld.docxf + No comment provided by engineer. + Document template Plantilla de documento Word Open XML (*.dotx) diff --git a/macos/Localization/et.xliff b/macos/Localization/et.xliff index f71e9fd6a..4173e2950 100644 --- a/macos/Localization/et.xliff +++ b/macos/Localization/et.xliff @@ -146,6 +146,11 @@ Document %ld.docx Dokument %ld.docx + No comment provided by engineer. + + Document %ld.docxf + Dokument %ld.docxf + No comment provided by engineer. Document template diff --git a/macos/Localization/fi.xliff b/macos/Localization/fi.xliff index 4a3368fe1..fa82352b9 100644 --- a/macos/Localization/fi.xliff +++ b/macos/Localization/fi.xliff @@ -147,6 +147,11 @@ Dokumentti %ld.docx No comment provided by engineer. + + Document %ld.docxf + Dokumentti %ld.docxf + No comment provided by engineer. + Document template Word Open XML-asiakirjamalli (*.dotx) diff --git a/macos/Localization/fr.xliff b/macos/Localization/fr.xliff index 41adf3fc0..9b0c4ad29 100644 --- a/macos/Localization/fr.xliff +++ b/macos/Localization/fr.xliff @@ -147,6 +147,11 @@ Document %ld.docx No comment provided by engineer. + + Document %ld.docxf + Document %ld.docxf + No comment provided by engineer. + Document template Modèle de document Word Open XML (*.dotx) diff --git a/macos/Localization/ga.xliff b/macos/Localization/ga.xliff index 202fbe3ce..6b92ebf18 100644 --- a/macos/Localization/ga.xliff +++ b/macos/Localization/ga.xliff @@ -147,6 +147,11 @@ Doiciméad %ld.docx No comment provided by engineer. + + Document %ld.docxf + Doiciméad %ld.docxf + No comment provided by engineer. + Document template Teimpléad doiciméad Word Open XML (*.dotx) diff --git a/macos/Localization/gl.xliff b/macos/Localization/gl.xliff index e1cc5ea77..f2cd9d4d1 100644 --- a/macos/Localization/gl.xliff +++ b/macos/Localization/gl.xliff @@ -142,6 +142,11 @@ Documento %ld.docx No comment provided by engineer. + + Document %ld.docxf + Documento %ld.docxf + No comment provided by engineer. + Document template Modelo do documento Word Open XML (*.dotx) diff --git a/macos/Localization/hr.xliff b/macos/Localization/hr.xliff index aaf8ac43c..50e3d3d39 100644 --- a/macos/Localization/hr.xliff +++ b/macos/Localization/hr.xliff @@ -147,6 +147,11 @@ Dokument %ld.docx No comment provided by engineer. + + Document %ld.docxf + Dokument %ld.docxf + No comment provided by engineer. + Document template Word Open XML Predložak dokumenta (*.dotx) diff --git a/macos/Localization/hu.xliff b/macos/Localization/hu.xliff index 7cb94566a..222654f51 100644 --- a/macos/Localization/hu.xliff +++ b/macos/Localization/hu.xliff @@ -147,6 +147,11 @@ Dokumentum %ld.docx No comment provided by engineer. + + Document %ld.docxf + Dokumentum %ld.docxf + No comment provided by engineer. + Document template Word Open XML Dokumentumsablon (*.dotx) diff --git a/macos/Localization/hy.xliff b/macos/Localization/hy.xliff index 580de343e..7f4771268 100644 --- a/macos/Localization/hy.xliff +++ b/macos/Localization/hy.xliff @@ -147,6 +147,11 @@ Փաստաթուղթ %ld.docx No comment provided by engineer. + + Document %ld.docxf + Փաստաթուղթ %ld.docxf + No comment provided by engineer. + Document template Word Open XML Փաստաթղթի ձևանմուշ (*.dotx) diff --git a/macos/Localization/id.xliff b/macos/Localization/id.xliff index ca966b667..be1ea6374 100644 --- a/macos/Localization/id.xliff +++ b/macos/Localization/id.xliff @@ -152,6 +152,11 @@ Dokumen %ld.docx No comment provided by engineer. + + Document %ld.docxf + Dokumen %ld.docxf + No comment provided by engineer. + Document template Dokumen templat Word Open XML (*.dotx) diff --git a/macos/Localization/it.xliff b/macos/Localization/it.xliff index c8e91b786..c7c018695 100644 --- a/macos/Localization/it.xliff +++ b/macos/Localization/it.xliff @@ -147,6 +147,11 @@ Documento %ld.docx No comment provided by engineer. + + Document %ld.docxf + Documento %ld.docxf + No comment provided by engineer. + Document template Modello documento Word Open XML (*.dotx) diff --git a/macos/Localization/ja.xliff b/macos/Localization/ja.xliff index 7cc765df4..57d5af6b9 100644 --- a/macos/Localization/ja.xliff +++ b/macos/Localization/ja.xliff @@ -147,6 +147,11 @@ ドキュメント %ld.docx No comment provided by engineer. + + Document %ld.docxf + ドキュメント %ld.docxf + No comment provided by engineer. + Document template Word オープン XMLドキュメントテンプレート (*.dotx) diff --git a/macos/Localization/ko.xliff b/macos/Localization/ko.xliff index c2f70be85..a2737cde8 100644 --- a/macos/Localization/ko.xliff +++ b/macos/Localization/ko.xliff @@ -147,6 +147,11 @@ 문서 %ld.docx No comment provided by engineer. + + Document %ld.docxf + 문서 %ld.docxf + No comment provided by engineer. + Document template Word Open XML 문서 템플릿(*.dotx) diff --git a/macos/Localization/lo.xliff b/macos/Localization/lo.xliff index 309c745c8..d000c4e35 100644 --- a/macos/Localization/lo.xliff +++ b/macos/Localization/lo.xliff @@ -146,6 +146,11 @@ Document %ld.docx ເອກະສານ %ld.docx + No comment provided by engineer. + + Document %ld.docxf + ເອກະສານ %ld.docxf + No comment provided by engineer. Document template diff --git a/macos/Localization/lt.xliff b/macos/Localization/lt.xliff index 3d2915b75..579933227 100644 --- a/macos/Localization/lt.xliff +++ b/macos/Localization/lt.xliff @@ -110,6 +110,10 @@ Document %ld.docx Dokumentas %ld.docx + + Document %ld.docxf + Dokumentas %ld.docxf + Document template Word Open XML Dokumento šablonas (*.dotx) diff --git a/macos/Localization/lv.xliff b/macos/Localization/lv.xliff index 0945a59ed..69b2f9714 100644 --- a/macos/Localization/lv.xliff +++ b/macos/Localization/lv.xliff @@ -147,6 +147,11 @@ Dokuments %ld.docx No comment provided by engineer. + + Document %ld.docxf + Dokuments %ld.docxf + No comment provided by engineer. + Document template Word Open XML Dokumenta veidne (*.dotx) diff --git a/macos/Localization/nl.xliff b/macos/Localization/nl.xliff index 62cbe9a31..8c9dcdb31 100644 --- a/macos/Localization/nl.xliff +++ b/macos/Localization/nl.xliff @@ -147,6 +147,11 @@ Document %ld.docx No comment provided by engineer. + + Document %ld.docxf + Document %ld.docxf + No comment provided by engineer. + Document template Word Open XML Document Sjabloon (*.dotx) diff --git a/macos/Localization/no.xliff b/macos/Localization/no.xliff index 89e242913..3d87e522d 100644 --- a/macos/Localization/no.xliff +++ b/macos/Localization/no.xliff @@ -147,6 +147,11 @@ Dokument %ld.docx No comment provided by engineer. + + Document %ld.docxf + Dokument %ld.docxf + No comment provided by engineer. + Document template Word Open XML-dokumentmal (*.dotx) diff --git a/macos/Localization/pl.xliff b/macos/Localization/pl.xliff index 182c6953c..e483147a6 100644 --- a/macos/Localization/pl.xliff +++ b/macos/Localization/pl.xliff @@ -147,6 +147,11 @@ Dokument %ld.docx No comment provided by engineer. + + Document %ld.docxf + Dokument %ld.docxf + No comment provided by engineer. + Document template Szablon dokumentu Word Open XML (*.dotx) diff --git a/macos/Localization/pt-BR.xliff b/macos/Localization/pt-BR.xliff index 1f687babd..e276d4708 100644 --- a/macos/Localization/pt-BR.xliff +++ b/macos/Localization/pt-BR.xliff @@ -147,6 +147,11 @@ Documento %ld.docx No comment provided by engineer. + + Document %ld.docxf + Documento %ld.docxf + No comment provided by engineer. + Document template Modelo de documento do Open XML do Word (*.dotx) diff --git a/macos/Localization/pt-PT.xliff b/macos/Localization/pt-PT.xliff index f66142407..12b11d843 100644 --- a/macos/Localization/pt-PT.xliff +++ b/macos/Localization/pt-PT.xliff @@ -140,6 +140,11 @@ Document %ld.docx Documento %ld.docx + No comment provided by engineer. + + Document %ld.docxf + Documento %ld.docxf + No comment provided by engineer. Document templateModelo de documento Word Open XML (*.dotx) diff --git a/macos/Localization/ro.xliff b/macos/Localization/ro.xliff index a9f3c7870..2639815c2 100644 --- a/macos/Localization/ro.xliff +++ b/macos/Localization/ro.xliff @@ -146,6 +146,11 @@ Document %ld.docx Document %ld.docx + No comment provided by engineer. + + Document %ld.docxf + Document %ld.docxf + No comment provided by engineer. Document template diff --git a/macos/Localization/ru.xliff b/macos/Localization/ru.xliff index db1ef70a2..2205a8798 100644 --- a/macos/Localization/ru.xliff +++ b/macos/Localization/ru.xliff @@ -147,6 +147,11 @@ Документ %ld.docx No comment provided by engineer. + + Document %ld.docxf + Документ %ld.docxf + No comment provided by engineer. + Document template Шаблон документа Word Open XML (*.dotx) diff --git a/macos/Localization/si.xliff b/macos/Localization/si.xliff index 985e107c4..38e380365 100644 --- a/macos/Localization/si.xliff +++ b/macos/Localization/si.xliff @@ -147,6 +147,11 @@ ලේඛනය %ld.docx No comment provided by engineer. + + Document %ld.docxf + ලේඛනය %ld.docxf + No comment provided by engineer. + Document template වර්ඩ් විවෘත XML ලේඛන අච්චුව (*.dotx) diff --git a/macos/Localization/sk.xliff b/macos/Localization/sk.xliff index 291c902d3..a561ab956 100644 --- a/macos/Localization/sk.xliff +++ b/macos/Localization/sk.xliff @@ -140,6 +140,11 @@ Document %ld.docx Dokument %ld.docx + No comment provided by engineer. + + Document %ld.docxf + Dokument %ld.docxf + No comment provided by engineer. Document templateŠablóna dokumentu Word Open XML (*.dotx) diff --git a/macos/Localization/sl.xliff b/macos/Localization/sl.xliff index 2ea25bde4..22f02c0c5 100644 --- a/macos/Localization/sl.xliff +++ b/macos/Localization/sl.xliff @@ -147,6 +147,11 @@ Dokument %ld.docx No comment provided by engineer. + + Document %ld.docxf + Dokument %ld.docxf + No comment provided by engineer. + Document template Word Open XML predloga dokumenta (*.dotx) diff --git a/macos/Localization/sv.xliff b/macos/Localization/sv.xliff index 01e02907c..58244d9a3 100644 --- a/macos/Localization/sv.xliff +++ b/macos/Localization/sv.xliff @@ -140,6 +140,11 @@ Document %ld.docx Dokument %ld.docx + No comment provided by engineer. + + Document %ld.docxf + Dokument %ld.docxf + No comment provided by engineer. Document templateWord Open XML-dokumentmall (*.dotx)Dokumentmall diff --git a/macos/Localization/tr.xliff b/macos/Localization/tr.xliff index 4b2d85bc0..33cc15413 100644 --- a/macos/Localization/tr.xliff +++ b/macos/Localization/tr.xliff @@ -136,9 +136,9 @@ Belgeye yapılan değişiklikleri kaydetmek istiyor musunuz "%@"? No comment provided by engineer. - - Document %ld.docx - Belge %ld.docx + + Document %ld.docxf + Belge %ld.docxf No comment provided by engineer. diff --git a/macos/Localization/uk.xliff b/macos/Localization/uk.xliff index f8579d19c..189a6452e 100644 --- a/macos/Localization/uk.xliff +++ b/macos/Localization/uk.xliff @@ -147,6 +147,11 @@ Документ %ld.docx No comment provided by engineer. + + Document %ld.docxf + Документ %ld.docxf + No comment provided by engineer. + Document template Шаблон документа Word Open XML (*.dotx) diff --git a/macos/Localization/vi.xliff b/macos/Localization/vi.xliff index 504c2d6e5..c8f667f5d 100644 --- a/macos/Localization/vi.xliff +++ b/macos/Localization/vi.xliff @@ -129,9 +129,9 @@ Do you want to save the changes made to the document "%@"? Bạn có muốn lưu những thay đổi đã thực hiện đối với tài liệu "%@"? - - Document %ld.docx - Văn bản %ld.docx + + Document %ld.docxf + Văn bản %ld.docxf Document template diff --git a/macos/Localization/zh-Hans-CN.xliff b/macos/Localization/zh-Hans-CN.xliff index 7e5a68ae1..7b4129cff 100644 --- a/macos/Localization/zh-Hans-CN.xliff +++ b/macos/Localization/zh-Hans-CN.xliff @@ -147,6 +147,11 @@ 文档%ld.docx No comment provided by engineer. + + Document %ld.docxf + 文档%ld.docxf + No comment provided by engineer. + Document template Word开放式XML文档模板 (*.dotx) diff --git a/macos/Localization/zh-Hant.xliff b/macos/Localization/zh-Hant.xliff index 817650cb4..3dfb24ea8 100644 --- a/macos/Localization/zh-Hant.xliff +++ b/macos/Localization/zh-Hant.xliff @@ -147,6 +147,11 @@ 文件 %ld.docx No comment provided by engineer. + + Document %ld.docxf + 文件 %ld.docxf + No comment provided by engineer. + Document template Word Open XML 文件範本(*.dotx) From c7a848fb4088975a92b7e5cfa7ee7e4533bf958e Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Sat, 13 May 2023 17:08:47 +0300 Subject: [PATCH 045/298] [win-nix] fix bug 62538 --- win-linux/src/components/cfiledialog.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/win-linux/src/components/cfiledialog.cpp b/win-linux/src/components/cfiledialog.cpp index b736e5cd9..cf358cdb3 100644 --- a/win-linux/src/components/cfiledialog.cpp +++ b/win-linux/src/components/cfiledialog.cpp @@ -247,11 +247,11 @@ QStringList CFileDialogWrapper::modalOpen(const QString& path, const QString& fi // _filter_ = joinFilters(); _filter_ = tr("Text documents") + #ifndef __LOCK_OFORM_FORMATS - " (*.docx *.doc *.odt *.ott *.rtf *.docm *.dotx *.dotm *.fb2 *.fodt *.wps *.wpt *.xml *.pdf *.djv *.djvu *.docxf *.oform *.sxw *.stw);;" + + " (*.docx *.doc *.odt *.ott *.rtf *.docm *.dot *.dotx *.dotm *.fb2 *.fodt *.wps *.wpt *.xml *.pdf *.djv *.djvu *.docxf *.oform *.sxw *.stw *.xps);;" + #else - " (*.docx *.doc *.odt *.ott *.rtf *.docm *.dotx *.dotm *.fb2 *.fodt *.wps *.wpt *.xml *.pdf *.djv *.djvu *.sxw *.stw);;" + + " (*.docx *.doc *.odt *.ott *.rtf *.docm *.dot *.dotx *.dotm *.fb2 *.fodt *.wps *.wpt *.xml *.pdf *.djv *.djvu *.sxw *.stw *.xps);;" + #endif - tr("Spreadsheets") + " (*.xlsx *.xls *.ods *.ots *.xltx *.xltm *.xml *.fods *.et *.ett *.sxc);;" + + tr("Spreadsheets") + " (*.xlsx *.xls *.xlsm *.xlsb *.ods *.ots *.xltx *.xltm *.xml *.fods *.et *.ett *.sxc);;" + tr("Presentations") + " (*.pptx *.ppt *.odp *.otp *.ppsm *.ppsx *.pps *.potx *.pot *.potm *.fodp *.dps *.dpt *.sxi);;" + tr("Web Page") + " (*.html *.htm *.mht *.mhtml *.epub);;" + tr("Text files") + " (*.txt *.csv)"; From 23f324ff05e7d047a5d4b50978dec9c83cb945e1 Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Sat, 13 May 2023 17:29:48 +0300 Subject: [PATCH 046/298] [macos] fix bug 62556 --- macos/ONLYOFFICE/Code/Utils/ASCConstants.m | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/macos/ONLYOFFICE/Code/Utils/ASCConstants.m b/macos/ONLYOFFICE/Code/Utils/ASCConstants.m index 58eb49318..73df71e61 100644 --- a/macos/ONLYOFFICE/Code/Utils/ASCConstants.m +++ b/macos/ONLYOFFICE/Code/Utils/ASCConstants.m @@ -68,17 +68,17 @@ + (NSArray *)audios { } + (NSArray *)documents { - return @[@"docx", @"doc", @"odt", @"ott", @"rtf", @"docm", @"dotx", @"dotm", @"docxf", @"fodt", @"wps", @"wpt", + return @[@"docx", @"doc", @"odt", @"ott", @"rtf", @"docm", @"dot", @"dotx", @"dotm", @"docxf", @"fodt", @"wps", @"wpt", @"xml", @"pdf", @"epub", @"djv", @"djvu", @"txt", @"html", @"htm", @"mht", @"mhtml", @"xps", @"doctx", @"fb2", @"oform", @"sxw", @"stw"]; } + (NSArray *)spreadsheets { - return @[@"xls", @"xlsx", @"csv", @"ods", @"xltx", @"ots", @"xltm", @"xml", @"fods", @"et", @"ett", @"sxc"]; + return @[@"xls", @"xlsx", @"xlsm", @"xlsb", @"csv", @"ods", @"xltx", @"ots", @"xltm", @"xml", @"fods", @"et", @"ett", @"sxc"]; } + (NSArray *)presentations { - return @[@"ppt", @"pptx", @"ppsx", @"odp", @"potx", @"otp", @"pps", @"ppsm", @"potm", @"fodp", @"dps", @"dpt", @"sxi"]; + return @[@"ppt", @"pptx", @"pptm", @"ppsx", @"odp", @"potx", @"otp", @"pps", @"ppsm", @"potm", @"fodp", @"dps", @"dpt", @"sxi"]; } + (NSArray *)cancryptformats { From 67fe7f50245e40ebcba80044edd529930a2053ba Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Sat, 13 May 2023 23:40:04 +0300 Subject: [PATCH 047/298] [start page] update build modules --- common/loginpage/build/package-lock.json | 10824 ++------------------- common/loginpage/build/package.json | 4 +- 2 files changed, 635 insertions(+), 10193 deletions(-) diff --git a/common/loginpage/build/package-lock.json b/common/loginpage/build/package-lock.json index c0564a4cf..ed747ef14 100644 --- a/common/loginpage/build/package-lock.json +++ b/common/loginpage/build/package-lock.json @@ -3,2034 +3,627 @@ "version": "0.2.8", "lockfileVersion": 2, "requires": true, - "packages": { - "": { - "name": "common", - "version": "0.2.8", - "dependencies": { - "grunt": "^1.5.3", - "grunt-contrib-clean": "^2.0.1", - "grunt-contrib-concat": "^2.1.0", - "grunt-contrib-copy": "^1.0.0", - "grunt-contrib-htmlmin": "^3.1.0", - "grunt-contrib-less": "^3.0.0", - "grunt-inline": "file:plugins/grunt-inline", - "grunt-terser": "^2.0.0", - "grunt-text-replace": "0.4.0", - "lodash": "^4.17.20", - "terser": "^5.15.1" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.6.tgz", - "integrity": "sha512-tzulrgDT0QD6U7BJ4TKVk2SDDg7wlP39P9yAx1RfLy7vP/7rsDRlWVfbWxElslu56+r7QOhB2NSDsabYYruoZQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.6.tgz", - "integrity": "sha512-cQbWBpxcbbs/IUredIPkHiAGULLV8iwgNRMFzvbhEXISp4f3rUUXE5+TIw6KwUWUR3DwyI6gmBRnmAtYaWehwQ==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.18.6", - "@babel/helper-compilation-targets": "^7.18.6", - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helpers": "^7.18.6", - "@babel/parser": "^7.18.6", - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.6", - "@babel/types": "^7.18.6", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@babel/core/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/generator": { - "version": "7.18.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.7.tgz", - "integrity": "sha512-shck+7VLlY72a2w9c3zYWuE1pwOKEiQHV7GTUbSnhyl5eu3i04t30tBY82ZRWrDfo3gkakCFtevExnxbkf2a3A==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.7", - "@jridgewell/gen-mapping": "^0.3.2", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.6.tgz", - "integrity": "sha512-vFjbfhNCzqdeAtZflUFrG5YIFqGTqsctrtkZ1D/NB0mDW9TwW3GmmUepYY4G9wCET5rY5ugz4OGTcLd614IzQg==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.18.6", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.20.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.6.tgz", - "integrity": "sha512-8n6gSfn2baOY+qlp+VSzsosjCVGFqWKmDF0cCWOybh52Dw3SEyoWR1KrhMJASjLwIEkkAufZ0xvr+SxLHSpy2Q==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.6.tgz", - "integrity": "sha512-0mWMxV1aC97dhjCah5U5Ua7668r5ZmSC2DLfH2EZnf9c3/dHZKiFa5pRLMH5tjSl471tY6496ZWk/kjNONBxhw==", - "dev": true, - "dependencies": { - "@babel/template": "^7.18.6", - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.6.tgz", - "integrity": "sha512-L//phhB4al5uucwzlimruukHB3jRd5JGClwRMD/ROrVjXfLqovYnvQrK/JK36WYyVwGGO7OD3kMyVTjx+WVPhw==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.6", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.18.6", - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.6", - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz", - "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", - "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.6.tgz", - "integrity": "sha512-vzSiiqbQOghPngUYt/zWGvK3LAsPhz55vc9XNN0xAl2gV4ieShI2OQli5duxWHD+72PZPTKAcfcZDE1Cwc5zsQ==", - "dev": true, - "dependencies": { - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.6", - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/parser": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.6.tgz", - "integrity": "sha512-uQVSa9jJUe/G/304lXspfWVpKpK4euFLgGiMQFOCpM/bgcAdeoHwi/OQz23O9GK2osz26ZiXRRV9aV+Yl1O8tw==", - "dev": true, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/template": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.6.tgz", - "integrity": "sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.6", - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.6.tgz", - "integrity": "sha512-zS/OKyqmD7lslOtFqbscH6gMLFYOfG1YPqCKfAW5KrTeolKqvB8UelR49Fpr6y93kYkW2Ik00mT1LOGiAGvizw==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.6", - "@babel/helper-function-name": "^7.18.6", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.18.6", - "@babel/types": "^7.18.6", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@babel/traverse/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/@babel/types": { - "version": "7.18.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.7.tgz", - "integrity": "sha512-QG3yxTcTIBoAcQmkCs+wAPYZhu7Dk9rXKacINfNbdJDNERTbLQbHGyVG8q/YGMPeCJRIhSY0+fTc5+xuh6WPSQ==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.18.6", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.8.tgz", - "integrity": "sha512-YK5G9LaddzGbcucK4c8h5tWFmMPBvRZ/uyWmN1/SbBdIvqGUdWGkJ5BAaccgs6XbzVLsqbPJrBSFwKv3kT9i7w==", - "engines": { - "node": ">=6.0.0" - } + "dependencies": { + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" }, - "node_modules/@jridgewell/set-array": { + "@jridgewell/set-array": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "engines": { - "node": ">=6.0.0" - } + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==" }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", - "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", - "dependencies": { + "@jridgewell/source-map": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.3.tgz", + "integrity": "sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==", + "requires": { "@jridgewell/gen-mapping": "^0.3.0", "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "node_modules/@jridgewell/source-map/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" }, - "engines": { - "node": ">=6.0.0" + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + } } }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" + "@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.14", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", - "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", + "@jridgewell/trace-mapping": { + "version": "0.3.18", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", + "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "requires": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + }, "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" + } } }, - "node_modules/abbrev": { + "abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" }, - "node_modules/acorn": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", - "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } + "acorn": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==" }, - "node_modules/ansi-styles": { + "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { + "requires": { "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/append-transform": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", - "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", - "dev": true, - "dependencies": { - "default-require-extensions": "^3.0.0" - }, - "engines": { - "node": ">=8" } }, - "node_modules/archy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==", - "dev": true - }, - "node_modules/argparse": { + "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dependencies": { + "requires": { "sprintf-js": "~1.0.2" + }, + "dependencies": { + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + } } }, - "node_modules/array-each": { + "array-each": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", - "integrity": "sha512-zHjL5SZa68hkKHBFBK6DJCTtr9sfTCPCaph/L7tMSLcTFgy+zX7E+6q5UArbtOtMBCtxdICpfTCspRse+ywyXA==", - "engines": { - "node": ">=0.10.0" - } + "integrity": "sha512-zHjL5SZa68hkKHBFBK6DJCTtr9sfTCPCaph/L7tMSLcTFgy+zX7E+6q5UArbtOtMBCtxdICpfTCspRse+ywyXA==" }, - "node_modules/array-slice": { + "array-slice": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", - "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "dev": true, - "dependencies": { - "safer-buffer": "~2.1.0" - } - }, - "node_modules/assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", - "dev": true, - "engines": { - "node": ">=0.8" - } + "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==" }, - "node_modules/async": { + "async": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" }, - "node_modules/async-hook-domain": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/async-hook-domain/-/async-hook-domain-2.0.4.tgz", - "integrity": "sha512-14LjCmlK1PK8eDtTezR6WX8TMaYNIzBIsd2D1sGoGjgx0BuNMMoSdk7i/drlbtamy0AWv9yv2tkB+ASdmeqFIw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true - }, - "node_modules/aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", - "dev": true - }, - "node_modules/balanced-match": { + "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, - "node_modules/bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", - "dev": true, - "dependencies": { - "tweetnacl": "^0.14.3" - } - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/bind-obj-methods": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bind-obj-methods/-/bind-obj-methods-3.0.0.tgz", - "integrity": "sha512-nLEaaz3/sEzNSyPWRsN9HNsqwk1AUyECtGj+XwGdIi3xABnEqecvXtIJ0wehQXuuER5uZ/5fTs2usONgYjG+iw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/brace-expansion": { + "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { + "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, - "node_modules/braces": { + "braces": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dependencies": { + "requires": { "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.21.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.1.tgz", - "integrity": "sha512-Nq8MFCSrnJXSc88yliwlzQe3qNe3VntIjhsArW9IJOEPSHNx23FalwApUVbzAWABLhYJJ7y8AynWI/XM8OdfjQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001359", - "electron-to-chromium": "^1.4.172", - "node-releases": "^2.0.5", - "update-browserslist-db": "^1.0.4" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/buffer-from": { + "buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, - "node_modules/caching-transform": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", - "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", - "dev": true, - "dependencies": { - "hasha": "^5.0.0", - "make-dir": "^3.0.0", - "package-hash": "^4.0.0", - "write-file-atomic": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/caching-transform/node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/caching-transform/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/camel-case": { + "camel-case": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", "integrity": "sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w==", - "dependencies": { + "requires": { "no-case": "^2.2.0", "upper-case": "^1.1.1" } }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001359", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001359.tgz", - "integrity": "sha512-Xln/BAsPzEuiVLgJ2/45IaqD9jShtk3Y33anKb4+yLwQzws3+v6odKfpgES/cDEaZMLzSChpIGdbOYtH9MyuHw==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - } - ] - }, - "node_modules/caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", - "dev": true - }, - "node_modules/chalk": { + "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { + "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/clean-css": { + "clean-css": { "version": "4.2.4", "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.4.tgz", "integrity": "sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==", - "dependencies": { + "requires": { "source-map": "~0.6.0" }, - "engines": { - "node": ">= 4.0" - } - }, - "node_modules/clean-css/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } } }, - "node_modules/color-convert": { + "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { + "requires": { "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" } }, - "node_modules/color-name": { + "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "node_modules/color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true, - "bin": { - "color-support": "bin.js" - } - }, - "node_modules/colors": { + "colors": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", - "integrity": "sha512-ENwblkFQpqqia6b++zLD/KUWafYlVY/UNnAp7oz7LY7E924wmpye416wBOmvv/HMWzl8gL1kJlfvId/1Dg176w==", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } + "integrity": "sha512-ENwblkFQpqqia6b++zLD/KUWafYlVY/UNnAp7oz7LY7E924wmpye416wBOmvv/HMWzl8gL1kJlfvId/1Dg176w==" }, - "node_modules/commander": { + "commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "dev": true - }, - "node_modules/concat-map": { + "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, - "node_modules/convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.1" - } - }, - "node_modules/copy-anything": { + "copy-anything": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", - "dependencies": { + "requires": { "is-what": "^3.14.1" - }, - "funding": { - "url": "https://github.com/sponsors/mesqueeb" - } - }, - "node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", - "dev": true - }, - "node_modules/coveralls": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-3.1.1.tgz", - "integrity": "sha512-+dxnG2NHncSD1NrqbSM3dn/lE57O6Qf/koe9+I7c+wzkqRmEvcp0kgJdxKInzYzkICKkFMZsX3Vct3++tsF9ww==", - "dev": true, - "dependencies": { - "js-yaml": "^3.13.1", - "lcov-parse": "^1.0.0", - "log-driver": "^1.2.7", - "minimist": "^1.2.5", - "request": "^2.88.2" - }, - "bin": { - "coveralls": "bin/coveralls.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" } }, - "node_modules/dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/datauri": { + "datauri": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/datauri/-/datauri-4.1.0.tgz", "integrity": "sha512-y17kh32+I82G+ED9MNWFkZiP/Cq/vO1hN9+tSZsT9C9qn3NrvcBnh7crSepg0AQPge1hXx2Ca44s1FRdv0gFWA==", - "dependencies": { + "requires": { "image-size": "1.0.0", "mimer": "^2.0.2" - }, - "engines": { - "node": ">= 10" } }, - "node_modules/dateformat": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", - "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", - "engines": { - "node": "*" - } + "dateformat": { + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", + "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==" }, - "node_modules/debug": { + "debug": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "optional": true, - "dependencies": { + "requires": { "ms": "^2.1.1" } }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/default-require-extensions": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.0.tgz", - "integrity": "sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg==", - "dev": true, - "dependencies": { - "strip-bom": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/detect-file": { + "detect-file": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", - "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", - "dev": true, - "dependencies": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "node_modules/ejs": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.8.tgz", - "integrity": "sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==", - "dev": true, - "dependencies": { - "jake": "^10.8.5" - }, - "bin": { - "ejs": "bin/cli.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.4.172", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.172.tgz", - "integrity": "sha512-yDoFfTJnqBAB6hSiPvzmsBJSrjOXJtHSJoqJdI/zSIh7DYupYnIOHt/bbPw/WE31BJjNTybDdNAs21gCMnTh0Q==", - "dev": true - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==" }, - "node_modules/errno": { + "errno": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", "optional": true, - "dependencies": { + "requires": { "prr": "~1.0.1" - }, - "bin": { - "errno": "cli.js" - } - }, - "node_modules/es6-error": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", - "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", - "dev": true - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, - "engines": { - "node": ">=8" } }, - "node_modules/esprima": { + "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" }, - "node_modules/eventemitter2": { + "eventemitter2": { "version": "0.4.14", "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz", "integrity": "sha512-K7J4xq5xAD5jHsGM5ReWXRTFa3JRGofHiMcVgQ8PRwgWxzjHpMWCIzsmyf60+mh8KLsqYPcjUMa0AC4hd6lPyQ==" }, - "node_modules/events-to-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/events-to-array/-/events-to-array-1.1.2.tgz", - "integrity": "sha512-inRWzRY7nG+aXZxBzEqYKB3HPgwflZRopAjDCHv0whhRx+MTUr1ei0ICZUypdyE0HRm4L2d5VEcIqLD6yl+BFA==", - "dev": true - }, - "node_modules/exit": { + "exit": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "engines": { - "node": ">= 0.8.0" - } + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==" }, - "node_modules/expand-tilde": { + "expand-tilde": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", - "dependencies": { + "requires": { "homedir-polyfill": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" } }, - "node_modules/extend": { + "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" }, - "node_modules/extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", - "dev": true, - "engines": [ - "node >=0.6.0" - ] - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/file-sync-cmp": { + "file-sync-cmp": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/file-sync-cmp/-/file-sync-cmp-0.1.1.tgz", "integrity": "sha512-0k45oWBokCqh2MOexeYKpyqmGKG+8mQ2Wd8iawx+uWd/weWJQAZ6SoPybagdCI4xFisag8iAR77WPm4h3pTfxA==" }, - "node_modules/filelist": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", - "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", - "dev": true, - "dependencies": { - "minimatch": "^5.0.1" - } - }, - "node_modules/filelist/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/filelist/node_modules/minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/fill-range": { + "fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dependencies": { + "requires": { "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "dev": true, - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" - } - }, - "node_modules/find-cache-dir/node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/find-cache-dir/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" } }, - "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/findit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/findit/-/findit-2.0.0.tgz", - "integrity": "sha512-ENZS237/Hr8bjczn5eKuBohLgaD0JyUd0arxretR1f9RO46vZHA1b2y0VorgGV3WaOT3c+78P8h7v4JGJ1i/rg==", - "dev": true - }, - "node_modules/findup-sync": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.3.0.tgz", - "integrity": "sha512-z8Nrwhi6wzxNMIbxlrTzuUW6KWuKkogZ/7OdDVq+0+kxn77KUH1nipx8iU6suqkHqc4y6n7a9A8IpmxY/pTjWg==", - "dependencies": { - "glob": "~5.0.0" - }, - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/findup-sync/node_modules/glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==", - "dependencies": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" + "findup-sync": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-5.0.0.tgz", + "integrity": "sha512-MzwXju70AuyflbgeOhzvQWAvvQdo1XL0A9bVvlXsYcFEBM87WR4OakL4OfZq+QRmr+duJubio+UtNQCPsVESzQ==", + "requires": { + "detect-file": "^1.0.0", + "is-glob": "^4.0.3", + "micromatch": "^4.0.4", + "resolve-dir": "^1.0.1" } }, - "node_modules/fined": { + "fined": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz", "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==", - "dependencies": { + "requires": { "expand-tilde": "^2.0.2", "is-plain-object": "^2.0.3", "object.defaults": "^1.1.0", "object.pick": "^1.2.0", "parse-filepath": "^1.0.1" - }, - "engines": { - "node": ">= 0.10" } }, - "node_modules/flagged-respawn": { + "flagged-respawn": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz", - "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==", - "engines": { - "node": ">= 0.10" - } + "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==" }, - "node_modules/for-in": { + "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", - "engines": { - "node": ">=0.10.0" - } + "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==" }, - "node_modules/for-own": { + "for-own": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", "integrity": "sha512-0OABksIGrxKK8K4kynWkQ7y1zounQxP+CWnyclVwj81KW3vlLlGUx57DKGcP/LH216GzqnstnPocF16Nxs0Ycg==", - "dependencies": { + "requires": { "for-in": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/foreground-child": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", - "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8.0.0" } }, - "node_modules/forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" - } - }, - "node_modules/fromentries": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", - "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/fs-exists-cached": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-exists-cached/-/fs-exists-cached-1.0.0.tgz", - "integrity": "sha512-kSxoARUDn4F2RPXX48UXnaFKwVU7Ivd/6qpzZL29MCDmr9sTvybv4gFCp+qaI4fM9m0z9fgz/yJvi56GAz+BZg==", - "dev": true - }, - "node_modules/fs.realpath": { + "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { + "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, - "node_modules/function-loop": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/function-loop/-/function-loop-2.0.1.tgz", - "integrity": "sha512-ktIR+O6i/4h+j/ZhZJNdzeI4i9lEPeEK6UPR2EVyTVBqOwcU3Za9xYKLH64ZR9HmcROyRrOkizNyjjtWJzDDkQ==", - "dev": true - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/getobject": { + "getobject": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/getobject/-/getobject-1.0.2.tgz", - "integrity": "sha512-2zblDBaFcb3rB4rF77XVnuINOE2h2k/OnqXAiy0IrTxUfV1iFp3la33oAQVY9pCpWU268WFYVt2t71hlMuLsOg==", - "engines": { - "node": ">=10" - } - }, - "node_modules/getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0" - } + "integrity": "sha512-2zblDBaFcb3rB4rF77XVnuINOE2h2k/OnqXAiy0IrTxUfV1iFp3la33oAQVY9pCpWU268WFYVt2t71hlMuLsOg==" }, - "node_modules/glob": { + "glob": { "version": "7.1.7", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "dependencies": { + "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.0.4", "once": "^1.3.0", "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" } }, - "node_modules/global-modules": { + "global-modules": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", - "dependencies": { + "requires": { "global-prefix": "^1.0.1", "is-windows": "^1.0.1", "resolve-dir": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" } }, - "node_modules/global-prefix": { + "global-prefix": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==", - "dependencies": { + "requires": { "expand-tilde": "^2.0.2", "homedir-polyfill": "^1.0.1", "ini": "^1.3.4", "is-windows": "^1.0.1", "which": "^1.2.14" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/global-prefix/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" } }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/graceful-fs": { + "graceful-fs": { "version": "4.2.10", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "devOptional": true + "optional": true }, - "node_modules/grunt": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.5.3.tgz", - "integrity": "sha512-mKwmo4X2d8/4c/BmcOETHek675uOqw0RuA/zy12jaspWqvTp4+ZeQF1W+OTpcbncnaBsfbQJ6l0l4j+Sn/GmaQ==", - "dependencies": { - "dateformat": "~3.0.3", + "grunt": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.6.1.tgz", + "integrity": "sha512-/ABUy3gYWu5iBmrUSRBP97JLpQUm0GgVveDCp6t3yRNIoltIYw7rEj3g5y1o2PGPR2vfTRGa7WC/LZHLTXnEzA==", + "requires": { + "dateformat": "~4.6.2", "eventemitter2": "~0.4.13", "exit": "~0.1.2", - "findup-sync": "~0.3.0", + "findup-sync": "~5.0.0", "glob": "~7.1.6", "grunt-cli": "~1.4.3", "grunt-known-options": "~2.0.0", "grunt-legacy-log": "~3.0.0", "grunt-legacy-util": "~2.0.1", - "iconv-lite": "~0.4.13", + "iconv-lite": "~0.6.3", "js-yaml": "~3.14.0", "minimatch": "~3.0.4", - "mkdirp": "~1.0.4", - "nopt": "~3.0.6", - "rimraf": "~3.0.2" - }, - "bin": { - "grunt": "bin/grunt" + "nopt": "~3.0.6" }, - "engines": { - "node": ">=8" - } - }, - "node_modules/grunt-cli": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/grunt-cli/-/grunt-cli-1.4.3.tgz", - "integrity": "sha512-9Dtx/AhVeB4LYzsViCjUQkd0Kw0McN2gYpdmGYKtE2a5Yt7v1Q+HYZVWhqXc/kGnxlMtqKDxSwotiGeFmkrCoQ==", - "dependencies": { - "grunt-known-options": "~2.0.0", - "interpret": "~1.1.0", - "liftup": "~3.0.1", - "nopt": "~4.0.1", - "v8flags": "~3.2.0" - }, - "bin": { - "grunt": "bin/grunt" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/grunt-cli/node_modules/nopt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", - "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", "dependencies": { - "abbrev": "1", - "osenv": "^0.1.4" - }, - "bin": { - "nopt": "bin/nopt.js" + "grunt-cli": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/grunt-cli/-/grunt-cli-1.4.3.tgz", + "integrity": "sha512-9Dtx/AhVeB4LYzsViCjUQkd0Kw0McN2gYpdmGYKtE2a5Yt7v1Q+HYZVWhqXc/kGnxlMtqKDxSwotiGeFmkrCoQ==", + "requires": { + "grunt-known-options": "~2.0.0", + "interpret": "~1.1.0", + "liftup": "~3.0.1", + "nopt": "~4.0.1", + "v8flags": "~3.2.0" + }, + "dependencies": { + "nopt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", + "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + } + } + } } }, - "node_modules/grunt-contrib-clean": { + "grunt-contrib-clean": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/grunt-contrib-clean/-/grunt-contrib-clean-2.0.1.tgz", "integrity": "sha512-uRvnXfhiZt8akb/ZRDHJpQQtkkVkqc/opWO4Po/9ehC2hPxgptB9S6JHDC/Nxswo4CJSM0iFPT/Iym3cEMWzKA==", - "dependencies": { + "requires": { "async": "^3.2.3", "rimraf": "^2.6.2" }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "grunt": ">=0.4.5" - } - }, - "node_modules/grunt-contrib-clean/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "requires": { + "glob": "^7.1.3" + } + } } }, - "node_modules/grunt-contrib-concat": { + "grunt-contrib-concat": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/grunt-contrib-concat/-/grunt-contrib-concat-2.1.0.tgz", "integrity": "sha512-Vnl95JIOxfhEN7bnYIlCgQz41kkbi7tsZ/9a4usZmxNxi1S2YAIOy8ysFmO8u4MN26Apal1O106BwARdaNxXQw==", - "dependencies": { + "requires": { "chalk": "^4.1.2", "source-map": "^0.5.3" - }, - "engines": { - "node": ">=0.12.0" - }, - "peerDependencies": { - "grunt": ">=1.4.1" } }, - "node_modules/grunt-contrib-copy": { + "grunt-contrib-copy": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/grunt-contrib-copy/-/grunt-contrib-copy-1.0.0.tgz", "integrity": "sha512-gFRFUB0ZbLcjKb67Magz1yOHGBkyU6uL29hiEW1tdQ9gQt72NuMKIy/kS6dsCbV0cZ0maNCb0s6y+uT1FKU7jA==", - "dependencies": { + "requires": { "chalk": "^1.1.1", "file-sync-cmp": "^0.1.0" }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/grunt-contrib-copy/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/grunt-contrib-copy/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/grunt-contrib-copy/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/grunt-contrib-copy/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/grunt-contrib-copy/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/grunt-contrib-copy/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", - "engines": { - "node": ">=0.8.0" + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==" + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==" + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==" + } } }, - "node_modules/grunt-contrib-htmlmin": { + "grunt-contrib-htmlmin": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/grunt-contrib-htmlmin/-/grunt-contrib-htmlmin-3.1.0.tgz", "integrity": "sha512-Khaa+0MUuqqNroDIe9tsjZkioZnW2Y+iTGbonBkLWaG7+SkSFExfb4jLt7M6rxKV3RSqlS7NtVvu4SVIPkmKXg==", - "dependencies": { + "requires": { "chalk": "^2.4.2", "html-minifier": "^4.0.0", "pretty-bytes": "^5.1.0" }, - "engines": { - "node": ">=6" - } - }, - "node_modules/grunt-contrib-htmlmin/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/grunt-contrib-htmlmin/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/grunt-contrib-htmlmin/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/grunt-contrib-htmlmin/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/grunt-contrib-htmlmin/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/grunt-contrib-htmlmin/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/grunt-contrib-htmlmin/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } } }, - "node_modules/grunt-contrib-less": { + "grunt-contrib-less": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/grunt-contrib-less/-/grunt-contrib-less-3.0.0.tgz", "integrity": "sha512-fBB8MUDCo5EgT7WdOVQnZq4GF+XCeFdnkhaxI7uepp8P973sH1jdodjF87c6d9WSHKgArJAGP5JEtthhdKVovg==", - "dependencies": { + "requires": { "async": "^3.2.0", "chalk": "^4.1.0", "less": "^4.1.1", "lodash": "^4.17.21" - }, - "engines": { - "node": ">=10" } }, - "node_modules/grunt-contrib-nodeunit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/grunt-contrib-nodeunit/-/grunt-contrib-nodeunit-4.0.0.tgz", - "integrity": "sha512-pLLDrTKfitBn2b1U9ecX+nkECcQ12tsiW58Y0SaZcsQgjljthPs78N5D24Y3b34dD8QKBAEW1J0VgO7cW0QcVQ==", - "dev": true, - "dependencies": { - "nodeunit-x": "^0.15.0" + "grunt-inline": { + "version": "file:plugins/grunt-inline", + "requires": { + "clean-css": "^5.2.4", + "datauri": "^4.1.0", + "uglify-js": "^3.15.1" }, - "engines": { - "node": ">=0.12.0" + "dependencies": { + "clean-css": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.0.tgz", + "integrity": "sha512-YYuuxv4H/iNb1Z/5IbMRoxgrzjWGhOEFfd+groZ5dMCVkpENiMZmwspdrzBo9286JjM1gZJPAyL7ZIdzuvu2AQ==", + "requires": { + "source-map": "~0.6.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } } }, - "node_modules/grunt-inline": { - "resolved": "plugins/grunt-inline", - "link": true - }, - "node_modules/grunt-known-options": { + "grunt-known-options": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/grunt-known-options/-/grunt-known-options-2.0.0.tgz", - "integrity": "sha512-GD7cTz0I4SAede1/+pAbmJRG44zFLPipVtdL9o3vqx9IEyb7b4/Y3s7r6ofI3CchR5GvYJ+8buCSioDv5dQLiA==", - "engines": { - "node": ">=0.10.0" - } + "integrity": "sha512-GD7cTz0I4SAede1/+pAbmJRG44zFLPipVtdL9o3vqx9IEyb7b4/Y3s7r6ofI3CchR5GvYJ+8buCSioDv5dQLiA==" }, - "node_modules/grunt-legacy-log": { + "grunt-legacy-log": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-3.0.0.tgz", "integrity": "sha512-GHZQzZmhyq0u3hr7aHW4qUH0xDzwp2YXldLPZTCjlOeGscAOWWPftZG3XioW8MasGp+OBRIu39LFx14SLjXRcA==", - "dependencies": { + "requires": { "colors": "~1.1.2", "grunt-legacy-log-utils": "~2.1.0", "hooker": "~0.2.3", "lodash": "~4.17.19" - }, - "engines": { - "node": ">= 0.10.0" } }, - "node_modules/grunt-legacy-log-utils": { + "grunt-legacy-log-utils": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-2.1.0.tgz", "integrity": "sha512-lwquaPXJtKQk0rUM1IQAop5noEpwFqOXasVoedLeNzaibf/OPWjKYvvdqnEHNmU+0T0CaReAXIbGo747ZD+Aaw==", - "dependencies": { + "requires": { "chalk": "~4.1.0", "lodash": "~4.17.19" - }, - "engines": { - "node": ">=10" } }, - "node_modules/grunt-legacy-util": { + "grunt-legacy-util": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-2.0.1.tgz", "integrity": "sha512-2bQiD4fzXqX8rhNdXkAywCadeqiPiay0oQny77wA2F3WF4grPJXCvAcyoWUJV+po/b15glGkxuSiQCK299UC2w==", - "dependencies": { + "requires": { "async": "~3.2.0", "exit": "~0.1.2", "getobject": "~1.0.0", @@ -2039,148 +632,81 @@ "underscore.string": "~3.3.5", "which": "~2.0.2" }, - "engines": { - "node": ">=10" + "dependencies": { + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "requires": { + "isexe": "^2.0.0" + } + } } }, - "node_modules/grunt-terser": { + "grunt-terser": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/grunt-terser/-/grunt-terser-2.0.0.tgz", "integrity": "sha512-9Rw1TiPsqadCJnEaKz+mZiS4k9ydnkNfrfvEq9SS6MqMXUxBC+sndDCHV05s5/PXQsFjFBhoRVFij5FaV36tYA==", - "dependencies": { + "requires": { "grunt": "^1.1.0" - }, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "grunt": "1.x", - "terser": "5.x" } }, - "node_modules/grunt-text-replace": { + "grunt-text-replace": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/grunt-text-replace/-/grunt-text-replace-0.4.0.tgz", - "integrity": "sha512-A4dFGpOaD/TQpeOlDK/zP962X1qG7KcOqPiSXOWOIeAKMzzpoDJYZ8Sz56iazI5+kTqeTa+IaEEl5c4sk+QN+Q==", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", - "dev": true, - "engines": { - "node": ">=4" - } + "integrity": "sha512-A4dFGpOaD/TQpeOlDK/zP962X1qG7KcOqPiSXOWOIeAKMzzpoDJYZ8Sz56iazI5+kTqeTa+IaEEl5c4sk+QN+Q==" }, - "node_modules/har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "deprecated": "this library is no longer supported", - "dev": true, - "dependencies": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/has": { + "has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dependencies": { + "requires": { "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" } }, - "node_modules/has-ansi": { + "has-ansi": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", - "dependencies": { + "requires": { "ansi-regex": "^2.0.0" }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-ansi/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "engines": { - "node": ">=0.10.0" + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==" + } } }, - "node_modules/has-flag": { + "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/hasha": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", - "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", - "dev": true, - "dependencies": { - "is-stream": "^2.0.0", - "type-fest": "^0.8.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, - "node_modules/he": { + "he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "bin": { - "he": "bin/he" - } + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" }, - "node_modules/homedir-polyfill": { + "homedir-polyfill": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", - "dependencies": { + "requires": { "parse-passwd": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" } }, - "node_modules/hooker": { + "hooker": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz", - "integrity": "sha512-t+UerCsQviSymAInD01Pw+Dn/usmz1sRO+3Zk1+lx8eg+WKpD2ulcwWqHHL0+aseRBr+3+vIhiG1K1JTwaIcTA==", - "engines": { - "node": "*" - } - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true + "integrity": "sha512-t+UerCsQviSymAInD01Pw+Dn/usmz1sRO+3Zk1+lx8eg+WKpD2ulcwWqHHL0+aseRBr+3+vIhiG1K1JTwaIcTA==" }, - "node_modules/html-minifier": { + "html-minifier": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-4.0.0.tgz", "integrity": "sha512-aoGxanpFPLg7MkIl/DDFYtb0iWz7jMFGqFhvEDZga6/4QTjneiD8I/NXL1x5aaoCp7FSIT6h/OhykDdPsbtMig==", - "dependencies": { + "requires": { "camel-case": "^3.0.0", "clean-css": "^4.2.1", "commander": "^2.19.0", @@ -2188,615 +714,177 @@ "param-case": "^2.1.1", "relateurl": "^0.2.7", "uglify-js": "^3.5.1" - }, - "bin": { - "html-minifier": "cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - }, - "engines": { - "node": ">=0.8", - "npm": ">=1.3.7" } }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" } }, - "node_modules/image-size": { + "image-size": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.0.0.tgz", "integrity": "sha512-JLJ6OwBfO1KcA+TvJT+v8gbE6iWbj24LyDNFgFEN0lzegn6cC6a/p3NIDaepMsJjQjlUWqIC7wJv8lBFxPNjcw==", - "dependencies": { + "requires": { "queue": "6.0.2" - }, - "bin": { - "image-size": "bin/image-size.js" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, - "engines": { - "node": ">=8" } }, - "node_modules/inflight": { + "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dependencies": { + "requires": { "once": "^1.3.0", "wrappy": "1" } }, - "node_modules/inherits": { + "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, - "node_modules/ini": { + "ini": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, - "node_modules/interpret": { + "interpret": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", "integrity": "sha512-CLM8SNMDu7C5psFCn6Wg/tgpj/bKAg7hc2gWqcuR9OD5Ft9PhBpIu8PLicPeis+xDd6YX2ncI8MCA64I9tftIA==" }, - "node_modules/is-absolute": { + "is-absolute": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", - "dependencies": { + "requires": { "is-relative": "^1.0.0", "is-windows": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" } }, - "node_modules/is-core-module": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", - "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", - "dependencies": { + "is-core-module": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.0.tgz", + "integrity": "sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==", + "requires": { "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-extglob": { + "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" }, - "node_modules/is-glob": { + "is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dependencies": { + "requires": { "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" } }, - "node_modules/is-number": { + "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "engines": { - "node": ">=0.12.0" - } + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" }, - "node_modules/is-plain-object": { + "is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dependencies": { + "requires": { "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" } }, - "node_modules/is-relative": { + "is-relative": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", - "dependencies": { + "requires": { "is-unc-path": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "dev": true - }, - "node_modules/is-unc-path": { + "is-unc-path": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", - "dependencies": { + "requires": { "unc-path-regex": "^0.1.2" - }, - "engines": { - "node": ">=0.10.0" } }, - "node_modules/is-what": { + "is-what": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==" }, - "node_modules/is-windows": { + "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "engines": { - "node": ">=0.10.0" - } + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" }, - "node_modules/isexe": { + "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, - "node_modules/isobject": { + "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", - "dev": true - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-hook": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz", - "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", - "dev": true, - "dependencies": { - "append-transform": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", - "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", - "dev": true, - "dependencies": { - "@babel/core": "^7.7.5", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/istanbul-lib-processinfo": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.3.tgz", - "integrity": "sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg==", - "dev": true, - "dependencies": { - "archy": "^1.0.0", - "cross-spawn": "^7.0.3", - "istanbul-lib-coverage": "^3.2.0", - "p-map": "^3.0.0", - "rimraf": "^3.0.0", - "uuid": "^8.3.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dev": true, - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report/node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/istanbul-lib-report/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-source-maps/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/istanbul-lib-source-maps/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/istanbul-lib-source-maps/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/istanbul-reports": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.4.tgz", - "integrity": "sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw==", - "dev": true, - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jackspeak": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-1.4.1.tgz", - "integrity": "sha512-npN8f+M4+IQ8xD3CcWi3U62VQwKlT3Tj4GxbdT/fYTmeogD9eBF9OFdpoFG/VPNoshRjPUijdkp/p2XrzUHaVg==", - "dev": true, - "dependencies": { - "cliui": "^7.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jake": { - "version": "10.8.5", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz", - "integrity": "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==", - "dev": true, - "dependencies": { - "async": "^3.2.3", - "chalk": "^4.0.2", - "filelist": "^1.0.1", - "minimatch": "^3.0.4" - }, - "bin": { - "jake": "bin/cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==" }, - "node_modules/js-yaml": { + "js-yaml": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dependencies": { + "requires": { "argparse": "^1.0.7", "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", - "dev": true - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", - "dev": true - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dev": true - }, - "node_modules/json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" } }, - "node_modules/jsprim": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", - "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", - "dev": true, - "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/kind-of": { + "kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/lcov-parse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-1.0.0.tgz", - "integrity": "sha512-aprLII/vPzuQvYZnDRU78Fns9I2Ag3gi4Ipga/hxnVMCZC8DnR2nI7XBqrPoywGfxqIx/DgarGvDJZAD3YBTgQ==", - "dev": true, - "bin": { - "lcov-parse": "bin/cli.js" - } + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" }, - "node_modules/less": { + "less": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/less/-/less-4.1.3.tgz", "integrity": "sha512-w16Xk/Ta9Hhyei0Gpz9m7VS8F28nieJaL/VyShID7cYvP6IL5oHeL6p4TXSDJqZE/lNv0oJ2pGVjJsRkfwm5FA==", - "dependencies": { + "requires": { "copy-anything": "^2.0.1", - "parse-node-version": "^1.0.1", - "tslib": "^2.3.0" - }, - "bin": { - "lessc": "bin/lessc" - }, - "engines": { - "node": ">=6" - }, - "optionalDependencies": { "errno": "^0.1.1", "graceful-fs": "^4.1.2", "image-size": "~0.5.0", "make-dir": "^2.1.0", "mime": "^1.4.1", "needle": "^3.1.0", - "source-map": "~0.6.0" - } - }, - "node_modules/less/node_modules/image-size": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", - "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", - "optional": true, - "bin": { - "image-size": "bin/image-size.js" + "parse-node-version": "^1.0.1", + "source-map": "~0.6.0", + "tslib": "^2.3.0" }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/less/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/libtap": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/libtap/-/libtap-1.4.0.tgz", - "integrity": "sha512-STLFynswQ2A6W14JkabgGetBNk6INL1REgJ9UeNKw5llXroC2cGLgKTqavv0sl8OLVztLLipVKMcQ7yeUcqpmg==", - "dev": true, "dependencies": { - "async-hook-domain": "^2.0.4", - "bind-obj-methods": "^3.0.0", - "diff": "^4.0.2", - "function-loop": "^2.0.1", - "minipass": "^3.1.5", - "own-or": "^1.0.0", - "own-or-env": "^1.0.2", - "signal-exit": "^3.0.4", - "stack-utils": "^2.0.4", - "tap-parser": "^11.0.0", - "tap-yaml": "^1.0.0", - "tcompare": "^5.0.6", - "trivial-deferred": "^1.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", + "optional": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "optional": true + } } }, - "node_modules/liftup": { + "liftup": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/liftup/-/liftup-3.0.1.tgz", "integrity": "sha512-yRHaiQDizWSzoXk3APcA71eOI/UuhEkNN9DiW2Tt44mhYzX4joFoCZlxsSOF7RyeLlfqzFLQI1ngFq3ggMPhOw==", - "dependencies": { + "requires": { "extend": "^3.0.2", "findup-sync": "^4.0.0", "fined": "^1.2.0", @@ -2806,7766 +894,353 @@ "rechoir": "^0.7.0", "resolve": "^1.19.0" }, - "engines": { - "node": ">=10" - } - }, - "node_modules/liftup/node_modules/findup-sync": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-4.0.0.tgz", - "integrity": "sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ==", - "dependencies": { - "detect-file": "^1.0.0", - "is-glob": "^4.0.0", - "micromatch": "^4.0.2", - "resolve-dir": "^1.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" + "findup-sync": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-4.0.0.tgz", + "integrity": "sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ==", + "requires": { + "detect-file": "^1.0.0", + "is-glob": "^4.0.0", + "micromatch": "^4.0.2", + "resolve-dir": "^1.0.1" + } + } } }, - "node_modules/lodash": { + "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, - "node_modules/lodash.flattendeep": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", - "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==", - "dev": true - }, - "node_modules/log-driver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz", - "integrity": "sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==", - "dev": true, - "engines": { - "node": ">=0.8.6" - } - }, - "node_modules/lower-case": { + "lower-case": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==" }, - "node_modules/make-dir": { + "make-dir": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", "optional": true, - "dependencies": { + "requires": { "pify": "^4.0.1", "semver": "^5.6.0" - }, - "engines": { - "node": ">=6" } }, - "node_modules/make-iterator": { + "make-iterator": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", - "dependencies": { + "requires": { "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" } }, - "node_modules/map-cache": { + "map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", - "engines": { - "node": ">=0.10.0" - } + "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==" }, - "node_modules/micromatch": { + "micromatch": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dependencies": { + "requires": { "braces": "^3.0.2", "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" } }, - "node_modules/mime": { + "mime": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "optional": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } + "optional": true }, - "node_modules/mimer": { + "mimer": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/mimer/-/mimer-2.0.2.tgz", - "integrity": "sha512-izxvjsB7Ur5HrTbPu6VKTrzxSMBFBqyZQc6dWlZNQ4/wAvf886fD4lrjtFd8IQ8/WmZKdxKjUtqFFNaj3hQ52g==", - "bin": { - "mimer": "bin/mimer" - }, - "engines": { - "node": ">= 12" - } + "integrity": "sha512-izxvjsB7Ur5HrTbPu6VKTrzxSMBFBqyZQc6dWlZNQ4/wAvf886fD4lrjtFd8IQ8/WmZKdxKjUtqFFNaj3hQ52g==" }, - "node_modules/minimatch": { + "minimatch": { "version": "3.0.8", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz", "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==", - "dependencies": { + "requires": { "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true - }, - "node_modules/minipass": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz", - "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" } }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ms": { + "ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "optional": true }, - "node_modules/needle": { + "needle": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/needle/-/needle-3.1.0.tgz", "integrity": "sha512-gCE9weDhjVGCRqS8dwDR/D3GTAeyXLXuqp7I8EzH6DllZGXSUyxuqqLh+YX9rMAWaaTFyVAg6rHGL25dqvczKw==", "optional": true, - "dependencies": { + "requires": { "debug": "^3.2.6", "iconv-lite": "^0.6.3", "sax": "^1.2.4" }, - "bin": { - "needle": "bin/needle" - }, - "engines": { - "node": ">= 4.4.x" - } - }, - "node_modules/needle/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "optional": true, "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } } }, - "node_modules/no-case": { + "no-case": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", - "dependencies": { + "requires": { "lower-case": "^1.1.1" } }, - "node_modules/node-preload": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", - "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==", - "dev": true, - "dependencies": { - "process-on-spawn": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/node-releases": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.5.tgz", - "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==", - "dev": true - }, - "node_modules/nodeunit-x": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/nodeunit-x/-/nodeunit-x-0.15.0.tgz", - "integrity": "sha512-g3XCZ3Gh1Fxr9NPPo0PtmEooZ2jSJF+tP0DPtqCZmFA22uQ0N2clAew6+GIAIMnjH4eX9BS0ixxpb45IAYHnVA==", - "dev": true, - "dependencies": { - "ejs": "^3.1.6", - "tap": "^15.0.10" - }, - "bin": { - "nodeunit": "bin/nodeunit" - } - }, - "node_modules/nopt": { + "nopt": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", "integrity": "sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==", - "dependencies": { + "requires": { "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nyc": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", - "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==", - "dev": true, - "dependencies": { - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "caching-transform": "^4.0.0", - "convert-source-map": "^1.7.0", - "decamelize": "^1.2.0", - "find-cache-dir": "^3.2.0", - "find-up": "^4.1.0", - "foreground-child": "^2.0.0", - "get-package-type": "^0.1.0", - "glob": "^7.1.6", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-hook": "^3.0.0", - "istanbul-lib-instrument": "^4.0.0", - "istanbul-lib-processinfo": "^2.0.2", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.0.2", - "make-dir": "^3.0.0", - "node-preload": "^0.2.1", - "p-map": "^3.0.0", - "process-on-spawn": "^1.0.0", - "resolve-from": "^5.0.0", - "rimraf": "^3.0.0", - "signal-exit": "^3.0.2", - "spawn-wrap": "^2.0.0", - "test-exclude": "^6.0.0", - "yargs": "^15.0.2" - }, - "bin": { - "nyc": "bin/nyc.js" - }, - "engines": { - "node": ">=8.9" } }, - "node_modules/nyc/node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/nyc/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/object.defaults": { + "object.defaults": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", "integrity": "sha512-c/K0mw/F11k4dEUBMW8naXUuBuhxRCfG7W+yFy8EcijU/rSmazOUd1XAEEe6bC0OuXY4HUKjTJv7xbxIMqdxrA==", - "dependencies": { + "requires": { "array-each": "^1.0.1", "array-slice": "^1.0.0", "for-own": "^1.0.0", "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" } }, - "node_modules/object.map": { + "object.map": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", "integrity": "sha512-3+mAJu2PLfnSVGHwIWubpOFLscJANBKuB/6A4CxBstc4aqwQY0FWcsppuy4jU5GSB95yES5JHSI+33AWuS4k6w==", - "dependencies": { + "requires": { "for-own": "^1.0.0", "make-iterator": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" } }, - "node_modules/object.pick": { + "object.pick": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", - "dependencies": { + "requires": { "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" } }, - "node_modules/once": { + "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/opener": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", - "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", - "dev": true, - "bin": { - "opener": "bin/opener-bin.js" - } - }, - "node_modules/os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "dependencies": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "node_modules/own-or": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/own-or/-/own-or-1.0.0.tgz", - "integrity": "sha512-NfZr5+Tdf6MB8UI9GLvKRs4cXY8/yB0w3xtt84xFdWy8hkGjn+JFc60VhzS/hFRfbyxFcGYMTjnF4Me+RbbqrA==", - "dev": true - }, - "node_modules/own-or-env": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/own-or-env/-/own-or-env-1.0.2.tgz", - "integrity": "sha512-NQ7v0fliWtK7Lkb+WdFqe6ky9XAzYmlkXthQrBbzlYbmFKoAYbDDcwmOm6q8kOuwSRXW8bdL5ORksploUJmWgw==", - "dev": true, - "dependencies": { - "own-or": "^1.0.0" - } - }, - "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-map": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", - "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", - "dev": true, - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/package-hash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", - "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.15", - "hasha": "^5.0.0", - "lodash.flattendeep": "^4.4.0", - "release-zalgo": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/param-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", - "integrity": "sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w==", - "dependencies": { - "no-case": "^2.2.0" - } - }, - "node_modules/parse-filepath": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", - "integrity": "sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==", - "dependencies": { - "is-absolute": "^1.0.0", - "map-cache": "^0.2.0", - "path-root": "^0.1.1" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/parse-node-version": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", - "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "node_modules/path-root": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", - "integrity": "sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==", - "dependencies": { - "path-root-regex": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-root-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", - "integrity": "sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", - "dev": true - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "optional": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pretty-bytes": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", - "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/process-on-spawn": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz", - "integrity": "sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==", - "dev": true, - "dependencies": { - "fromentries": "^1.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", - "optional": true - }, - "node_modules/psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", - "dev": true - }, - "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/qs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", - "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/queue": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", - "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", - "dependencies": { - "inherits": "~2.0.3" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/rechoir": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", - "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", - "dependencies": { - "resolve": "^1.9.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/release-zalgo": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", - "integrity": "sha512-gUAyHVHPPC5wdqX/LG4LWtRYtgjxyX78oanFNTMMyFEfOqdC54s3eE82imuWKbOeqYht2CrNf64Qb8vgmmtZGA==", - "dev": true, - "dependencies": { - "es6-error": "^4.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", - "dev": true, - "dependencies": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/request/node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "dev": true, - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "node_modules/resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-dir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==", - "dependencies": { - "expand-tilde": "^2.0.0", - "global-modules": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "node_modules/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "optional": true - }, - "node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "optional": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/source-map-support/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/spawn-wrap": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", - "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", - "dev": true, - "dependencies": { - "foreground-child": "^2.0.0", - "is-windows": "^1.0.2", - "make-dir": "^3.0.0", - "rimraf": "^3.0.0", - "signal-exit": "^3.0.2", - "which": "^2.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/spawn-wrap/node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/spawn-wrap/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" - }, - "node_modules/sshpk": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", - "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", - "dev": true, - "dependencies": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "bin": { - "sshpk-conv": "bin/sshpk-conv", - "sshpk-sign": "bin/sshpk-sign", - "sshpk-verify": "bin/sshpk-verify" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/stack-utils": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", - "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/tap": { - "version": "15.2.3", - "resolved": "https://registry.npmjs.org/tap/-/tap-15.2.3.tgz", - "integrity": "sha512-EVbovHd/SdevGMUnkNU5JJqC1YC0hzaaZ2jnqs0fKHv9Oudx27qW3Xwox7A6TB92wvR0mqgQPr+Au2w56kD+aQ==", - "bundleDependencies": [ - "ink", - "treport", - "@types/react", - "@isaacs/import-jsx", - "react" - ], - "dev": true, - "dependencies": { - "@isaacs/import-jsx": "*", - "@types/react": "*", - "chokidar": "^3.3.0", - "coveralls": "^3.0.11", - "findit": "^2.0.0", - "foreground-child": "^2.0.0", - "fs-exists-cached": "^1.0.0", - "glob": "^7.1.6", - "ink": "*", - "isexe": "^2.0.0", - "istanbul-lib-processinfo": "^2.0.2", - "jackspeak": "^1.4.1", - "libtap": "^1.3.0", - "minipass": "^3.1.1", - "mkdirp": "^1.0.4", - "nyc": "^15.1.0", - "opener": "^1.5.1", - "react": "*", - "rimraf": "^3.0.0", - "signal-exit": "^3.0.6", - "source-map-support": "^0.5.16", - "tap-mocha-reporter": "^5.0.3", - "tap-parser": "^11.0.1", - "tap-yaml": "^1.0.0", - "tcompare": "^5.0.7", - "treport": "*", - "which": "^2.0.2" - }, - "bin": { - "tap": "bin/run.js" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "peerDependencies": { - "flow-remove-types": ">=2.112.0", - "ts-node": ">=8.5.2", - "typescript": ">=3.7.2" - }, - "peerDependenciesMeta": { - "flow-remove-types": { - "optional": true - }, - "ts-node": { - "optional": true - }, - "typescript": { - "optional": true - } - } - }, - "node_modules/tap-mocha-reporter": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/tap-mocha-reporter/-/tap-mocha-reporter-5.0.3.tgz", - "integrity": "sha512-6zlGkaV4J+XMRFkN0X+yuw6xHbE9jyCZ3WUKfw4KxMyRGOpYSRuuQTRJyWX88WWuLdVTuFbxzwXhXuS2XE6o0g==", - "dev": true, - "dependencies": { - "color-support": "^1.1.0", - "debug": "^4.1.1", - "diff": "^4.0.1", - "escape-string-regexp": "^2.0.0", - "glob": "^7.0.5", - "tap-parser": "^11.0.0", - "tap-yaml": "^1.0.0", - "unicode-length": "^2.0.2" - }, - "bin": { - "tap-mocha-reporter": "index.js" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/tap-mocha-reporter/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/tap-mocha-reporter/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/tap-parser": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/tap-parser/-/tap-parser-11.0.1.tgz", - "integrity": "sha512-5ow0oyFOnXVSALYdidMX94u0GEjIlgc/BPFYLx0yRh9hb8+cFGNJqJzDJlUqbLOwx8+NBrIbxCWkIQi7555c0w==", - "dev": true, - "dependencies": { - "events-to-array": "^1.0.1", - "minipass": "^3.1.6", - "tap-yaml": "^1.0.0" - }, - "bin": { - "tap-parser": "bin/cmd.js" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/tap-yaml": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/tap-yaml/-/tap-yaml-1.0.0.tgz", - "integrity": "sha512-Rxbx4EnrWkYk0/ztcm5u3/VznbyFJpyXO12dDBHKWiDVxy7O2Qw6MRrwO5H6Ww0U5YhRY/4C/VzWmFPhBQc4qQ==", - "dev": true, - "dependencies": { - "yaml": "^1.5.0" - } - }, - "node_modules/tap/node_modules/@babel/code-frame": { - "version": "7.16.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@babel/highlight": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/tap/node_modules/@babel/compat-data": { - "version": "7.16.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/tap/node_modules/@babel/core": { - "version": "7.16.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.16.0", - "@babel/generator": "^7.16.0", - "@babel/helper-compilation-targets": "^7.16.0", - "@babel/helper-module-transforms": "^7.16.0", - "@babel/helpers": "^7.16.0", - "@babel/parser": "^7.16.0", - "@babel/template": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/tap/node_modules/@babel/generator": { - "version": "7.16.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.16.0", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/tap/node_modules/@babel/helper-annotate-as-pure": { - "version": "7.16.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/tap/node_modules/@babel/helper-compilation-targets": { - "version": "7.16.3", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.16.0", - "@babel/helper-validator-option": "^7.14.5", - "browserslist": "^4.17.5", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/tap/node_modules/@babel/helper-function-name": { - "version": "7.16.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@babel/helper-get-function-arity": "^7.16.0", - "@babel/template": "^7.16.0", - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/tap/node_modules/@babel/helper-get-function-arity": { - "version": "7.16.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/tap/node_modules/@babel/helper-hoist-variables": { - "version": "7.16.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/tap/node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.16.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/tap/node_modules/@babel/helper-module-imports": { - "version": "7.16.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/tap/node_modules/@babel/helper-module-transforms": { - "version": "7.16.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.16.0", - "@babel/helper-replace-supers": "^7.16.0", - "@babel/helper-simple-access": "^7.16.0", - "@babel/helper-split-export-declaration": "^7.16.0", - "@babel/helper-validator-identifier": "^7.15.7", - "@babel/template": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/tap/node_modules/@babel/helper-optimise-call-expression": { - "version": "7.16.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/tap/node_modules/@babel/helper-plugin-utils": { - "version": "7.14.5", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/tap/node_modules/@babel/helper-replace-supers": { - "version": "7.16.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.16.0", - "@babel/helper-optimise-call-expression": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/tap/node_modules/@babel/helper-simple-access": { - "version": "7.16.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/tap/node_modules/@babel/helper-split-export-declaration": { - "version": "7.16.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/tap/node_modules/@babel/helper-validator-identifier": { - "version": "7.15.7", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/tap/node_modules/@babel/helper-validator-option": { - "version": "7.14.5", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/tap/node_modules/@babel/helpers": { - "version": "7.16.3", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.16.0", - "@babel/traverse": "^7.16.3", - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/tap/node_modules/@babel/highlight": { - "version": "7.16.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.15.7", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/tap/node_modules/@babel/parser": { - "version": "7.16.3", - "dev": true, - "inBundle": true, - "license": "MIT", - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/tap/node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.16.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.16.0", - "@babel/helper-compilation-targets": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/tap/node_modules/@babel/plugin-syntax-jsx": { - "version": "7.16.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/tap/node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/tap/node_modules/@babel/plugin-transform-destructuring": { - "version": "7.16.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/tap/node_modules/@babel/plugin-transform-parameters": { - "version": "7.16.3", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/tap/node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.16.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.0", - "@babel/helper-module-imports": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-jsx": "^7.16.0", - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/tap/node_modules/@babel/template": { - "version": "7.16.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.16.0", - "@babel/parser": "^7.16.0", - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/tap/node_modules/@babel/traverse": { - "version": "7.16.3", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.16.0", - "@babel/generator": "^7.16.0", - "@babel/helper-function-name": "^7.16.0", - "@babel/helper-hoist-variables": "^7.16.0", - "@babel/helper-split-export-declaration": "^7.16.0", - "@babel/parser": "^7.16.3", - "@babel/types": "^7.16.0", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/tap/node_modules/@babel/types": { - "version": "7.16.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.15.7", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/tap/node_modules/@isaacs/import-jsx": { - "version": "4.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.5.5", - "@babel/plugin-proposal-object-rest-spread": "^7.5.5", - "@babel/plugin-transform-destructuring": "^7.5.0", - "@babel/plugin-transform-react-jsx": "^7.3.0", - "caller-path": "^3.0.1", - "find-cache-dir": "^3.2.0", - "make-dir": "^3.0.2", - "resolve-from": "^3.0.0", - "rimraf": "^3.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/tap/node_modules/@isaacs/import-jsx/node_modules/caller-callsite": { - "version": "4.1.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "callsites": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tap/node_modules/@isaacs/import-jsx/node_modules/caller-path": { - "version": "3.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "caller-callsite": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tap/node_modules/@isaacs/import-jsx/node_modules/callsites": { - "version": "3.1.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/tap/node_modules/@types/prop-types": { - "version": "15.7.4", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/tap/node_modules/@types/react": { - "version": "17.0.34", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/tap/node_modules/@types/scheduler": { - "version": "0.16.2", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/tap/node_modules/@types/yoga-layout": { - "version": "1.9.2", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/tap/node_modules/ansi-escapes": { - "version": "4.3.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/tap/node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", - "dev": true, - "inBundle": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/tap/node_modules/ansi-regex": { - "version": "5.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/tap/node_modules/ansi-styles": { - "version": "3.2.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/tap/node_modules/ansicolors": { - "version": "0.3.2", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/tap/node_modules/astral-regex": { - "version": "2.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/tap/node_modules/auto-bind": { - "version": "4.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/tap/node_modules/balanced-match": { - "version": "1.0.2", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/tap/node_modules/brace-expansion": { - "version": "1.1.11", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/tap/node_modules/browserslist": { - "version": "4.17.6", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "caniuse-lite": "^1.0.30001274", - "electron-to-chromium": "^1.3.886", - "escalade": "^3.1.1", - "node-releases": "^2.0.1", - "picocolors": "^1.0.0" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } - }, - "node_modules/tap/node_modules/caniuse-lite": { - "version": "1.0.30001279", - "dev": true, - "inBundle": true, - "license": "CC-BY-4.0", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } - }, - "node_modules/tap/node_modules/cardinal": { - "version": "2.1.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansicolors": "~0.3.2", - "redeyed": "~2.1.0" - }, - "bin": { - "cdl": "bin/cdl.js" - } - }, - "node_modules/tap/node_modules/chalk": { - "version": "2.4.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/tap/node_modules/ci-info": { - "version": "2.0.0", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/tap/node_modules/cli-boxes": { - "version": "2.2.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/tap/node_modules/cli-cursor": { - "version": "3.1.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tap/node_modules/cli-truncate": { - "version": "2.1.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/tap/node_modules/code-excerpt": { - "version": "3.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "convert-to-spaces": "^1.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/tap/node_modules/color-convert": { - "version": "1.9.3", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/tap/node_modules/color-name": { - "version": "1.1.3", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/tap/node_modules/commondir": { - "version": "1.0.1", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/tap/node_modules/concat-map": { - "version": "0.0.1", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/tap/node_modules/convert-source-map": { - "version": "1.8.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.1" - } - }, - "node_modules/tap/node_modules/convert-to-spaces": { - "version": "1.0.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/tap/node_modules/csstype": { - "version": "3.0.9", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/tap/node_modules/debug": { - "version": "4.3.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/tap/node_modules/electron-to-chromium": { - "version": "1.3.893", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/tap/node_modules/emoji-regex": { - "version": "8.0.0", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/tap/node_modules/escalade": { - "version": "3.1.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/tap/node_modules/escape-string-regexp": { - "version": "1.0.5", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/tap/node_modules/esprima": { - "version": "4.0.1", - "dev": true, - "inBundle": true, - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/tap/node_modules/events-to-array": { - "version": "1.1.2", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/tap/node_modules/find-cache-dir": { - "version": "3.3.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" - } - }, - "node_modules/tap/node_modules/find-up": { - "version": "4.1.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tap/node_modules/fs.realpath": { - "version": "1.0.0", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/tap/node_modules/gensync": { - "version": "1.0.0-beta.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/tap/node_modules/glob": { - "version": "7.2.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/tap/node_modules/globals": { - "version": "11.12.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/tap/node_modules/has-flag": { - "version": "3.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/tap/node_modules/indent-string": { - "version": "4.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/tap/node_modules/inflight": { - "version": "1.0.6", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/tap/node_modules/inherits": { - "version": "2.0.4", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/tap/node_modules/ink": { - "version": "3.2.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-escapes": "^4.2.1", - "auto-bind": "4.0.0", - "chalk": "^4.1.0", - "cli-boxes": "^2.2.0", - "cli-cursor": "^3.1.0", - "cli-truncate": "^2.1.0", - "code-excerpt": "^3.0.0", - "indent-string": "^4.0.0", - "is-ci": "^2.0.0", - "lodash": "^4.17.20", - "patch-console": "^1.0.0", - "react-devtools-core": "^4.19.1", - "react-reconciler": "^0.26.2", - "scheduler": "^0.20.2", - "signal-exit": "^3.0.2", - "slice-ansi": "^3.0.0", - "stack-utils": "^2.0.2", - "string-width": "^4.2.2", - "type-fest": "^0.12.0", - "widest-line": "^3.1.0", - "wrap-ansi": "^6.2.0", - "ws": "^7.5.5", - "yoga-layout-prebuilt": "^1.9.6" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": ">=16.8.0", - "react": ">=16.8.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/tap/node_modules/ink/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/tap/node_modules/ink/node_modules/chalk": { - "version": "4.1.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/tap/node_modules/ink/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/tap/node_modules/ink/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/tap/node_modules/ink/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/tap/node_modules/ink/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tap/node_modules/is-ci": { - "version": "2.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "ci-info": "^2.0.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, - "node_modules/tap/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/tap/node_modules/js-tokens": { - "version": "4.0.0", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/tap/node_modules/jsesc": { - "version": "2.5.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/tap/node_modules/json5": { - "version": "2.2.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tap/node_modules/locate-path": { - "version": "5.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tap/node_modules/lodash": { - "version": "4.17.21", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/tap/node_modules/loose-envify": { - "version": "1.4.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/tap/node_modules/make-dir": { - "version": "3.1.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/tap/node_modules/mimic-fn": { - "version": "2.1.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/tap/node_modules/minimatch": { - "version": "3.0.4", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/tap/node_modules/minimist": { - "version": "1.2.6", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/tap/node_modules/minipass": { - "version": "3.1.6", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tap/node_modules/ms": { - "version": "2.1.2", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/tap/node_modules/node-releases": { - "version": "2.0.1", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/tap/node_modules/object-assign": { - "version": "4.1.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/tap/node_modules/once": { - "version": "1.4.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/tap/node_modules/onetime": { - "version": "5.1.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/tap/node_modules/p-limit": { - "version": "2.3.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/tap/node_modules/p-locate": { - "version": "4.1.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tap/node_modules/p-try": { - "version": "2.2.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/tap/node_modules/patch-console": { - "version": "1.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/tap/node_modules/path-exists": { - "version": "4.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/tap/node_modules/path-is-absolute": { - "version": "1.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/tap/node_modules/picocolors": { - "version": "1.0.0", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/tap/node_modules/pkg-dir": { - "version": "4.2.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tap/node_modules/punycode": { - "version": "2.1.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/tap/node_modules/react": { - "version": "17.0.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/tap/node_modules/react-devtools-core": { - "version": "4.21.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "shell-quote": "^1.6.1", - "ws": "^7" - } - }, - "node_modules/tap/node_modules/react-reconciler": { - "version": "0.26.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "scheduler": "^0.20.2" - }, - "engines": { - "node": ">=0.10.0" - }, - "peerDependencies": { - "react": "^17.0.2" - } - }, - "node_modules/tap/node_modules/redeyed": { - "version": "2.1.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "esprima": "~4.0.0" - } - }, - "node_modules/tap/node_modules/resolve-from": { - "version": "3.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/tap/node_modules/restore-cursor": { - "version": "3.1.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tap/node_modules/rimraf": { - "version": "3.0.2", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/tap/node_modules/safe-buffer": { - "version": "5.1.2", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/tap/node_modules/scheduler": { - "version": "0.20.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "node_modules/tap/node_modules/semver": { - "version": "6.3.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/tap/node_modules/shell-quote": { - "version": "1.7.3", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/tap/node_modules/signal-exit": { - "version": "3.0.6", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/tap/node_modules/slice-ansi": { - "version": "3.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tap/node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/tap/node_modules/slice-ansi/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/tap/node_modules/slice-ansi/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/tap/node_modules/source-map": { - "version": "0.5.7", - "dev": true, - "inBundle": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/tap/node_modules/stack-utils": { - "version": "2.0.5", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/tap/node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/tap/node_modules/string-width": { - "version": "4.2.3", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tap/node_modules/strip-ansi": { - "version": "6.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tap/node_modules/supports-color": { - "version": "5.5.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/tap/node_modules/tap-parser": { - "version": "11.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "events-to-array": "^1.0.1", - "minipass": "^3.1.6", - "tap-yaml": "^1.0.0" - }, - "bin": { - "tap-parser": "bin/cmd.js" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/tap/node_modules/tap-yaml": { - "version": "1.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "yaml": "^1.5.0" - } - }, - "node_modules/tap/node_modules/to-fast-properties": { - "version": "2.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/tap/node_modules/treport": { - "version": "3.0.3", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "@isaacs/import-jsx": "^4.0.1", - "cardinal": "^2.1.1", - "chalk": "^3.0.0", - "ink": "^3.2.0", - "ms": "^2.1.2", - "tap-parser": "^11.0.0", - "unicode-length": "^2.0.2" - }, - "peerDependencies": { - "react": "^17.0.2" - } - }, - "node_modules/tap/node_modules/treport/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/tap/node_modules/treport/node_modules/chalk": { - "version": "3.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tap/node_modules/treport/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/tap/node_modules/treport/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/tap/node_modules/treport/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/tap/node_modules/treport/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tap/node_modules/type-fest": { - "version": "0.12.0", - "dev": true, - "inBundle": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/tap/node_modules/unicode-length": { - "version": "2.0.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "punycode": "^2.0.0", - "strip-ansi": "^3.0.1" - } - }, - "node_modules/tap/node_modules/unicode-length/node_modules/ansi-regex": { - "version": "2.1.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/tap/node_modules/unicode-length/node_modules/strip-ansi": { - "version": "3.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/tap/node_modules/widest-line": { - "version": "3.1.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "string-width": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tap/node_modules/wrap-ansi": { - "version": "6.2.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tap/node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/tap/node_modules/wrap-ansi/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/tap/node_modules/wrap-ansi/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/tap/node_modules/wrappy": { - "version": "1.0.2", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/tap/node_modules/ws": { - "version": "7.5.5", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/tap/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/tap/node_modules/yaml": { - "version": "1.10.2", - "dev": true, - "inBundle": true, - "license": "ISC", - "engines": { - "node": ">= 6" - } - }, - "node_modules/tap/node_modules/yoga-layout-prebuilt": { - "version": "1.10.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@types/yoga-layout": "1.9.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tcompare": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/tcompare/-/tcompare-5.0.7.tgz", - "integrity": "sha512-d9iddt6YYGgyxJw5bjsN7UJUO1kGOtjSlNy/4PoGYAjQS5pAT/hzIoLf1bZCw+uUxRmZJh7Yy1aA7xKVRT9B4w==", - "dev": true, - "dependencies": { - "diff": "^4.0.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser": { - "version": "5.15.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.15.1.tgz", - "integrity": "sha512-K1faMUvpm/FBxjBXud0LWVAGxmvoPbZbfTCYbSgaaYQaIXI3/TdI7a7ZGA73Zrou6Q8Zmz3oeUTsp/dj+ag2Xw==", - "dependencies": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/trivial-deferred": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trivial-deferred/-/trivial-deferred-1.0.1.tgz", - "integrity": "sha512-dagAKX7vaesNNAwOc9Np9C2mJ+7YopF4lk+jE2JML9ta4kZ91Y6UruJNH65bLRYoUROD8EY+Pmi44qQWwXR7sw==", - "dev": true - }, - "node_modules/tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" - }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", - "dev": true - }, - "node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/uglify-js": { - "version": "3.16.1", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.16.1.tgz", - "integrity": "sha512-X5BGTIDH8U6IQ1TIRP62YC36k+ULAa1d59BxlWvPUJ1NkW5L3FwcGfEzuVvGmhJFBu0YJ5Ge25tmRISqCmLiRQ==", - "bin": { - "uglifyjs": "bin/uglifyjs" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/unc-path-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", - "integrity": "sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/underscore.string": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.6.tgz", - "integrity": "sha512-VoC83HWXmCrF6rgkyxS9GHv8W9Q5nhMKho+OadDJGzL2oDYbYEppBaCMH6pFlwLeqj2QS+hhkw2kpXkSdD1JxQ==", - "dependencies": { - "sprintf-js": "^1.1.1", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": "*" - } - }, - "node_modules/underscore.string/node_modules/sprintf-js": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", - "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==" - }, - "node_modules/unicode-length": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unicode-length/-/unicode-length-2.0.2.tgz", - "integrity": "sha512-Ph/j1VbS3/r77nhoY2WU0GWGjVYOHL3xpKp0y/Eq2e5r0mT/6b649vm7KFO6RdAdrZkYLdxphYVgvODxPB+Ebg==", - "dev": true, - "dependencies": { - "punycode": "^2.0.0", - "strip-ansi": "^3.0.1" - } - }, - "node_modules/unicode-length/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unicode-length/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dev": true, - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.4.tgz", - "integrity": "sha512-jnmO2BEGUjsMOe/Fg9u0oczOe/ppIDZPebzccl1yDWGLFP16Pa1/RM5wEoKYPG2zstNcDuAStejyxsOuKINdGA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - ], - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "browserslist-lint": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/upper-case": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", - "integrity": "sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==" - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/v8flags": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz", - "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==", - "dependencies": { - "homedir-polyfill": "^1.0.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==", - "dev": true - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "node_modules/y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dev": true, - "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs/node_modules/cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "node_modules/yargs/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "plugins/grunt-inline": { - "version": "0.3.7", - "dependencies": { - "clean-css": "^5.2.4", - "datauri": "^4.1.0", - "uglify-js": "^3.15.1" - }, - "devDependencies": { - "grunt": "^1.4.0", - "grunt-contrib-clean": "^2.0.0", - "grunt-contrib-htmlmin": "^3.1.0", - "grunt-contrib-nodeunit": "^4.0.0" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "plugins/grunt-inline/node_modules/clean-css": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.0.tgz", - "integrity": "sha512-YYuuxv4H/iNb1Z/5IbMRoxgrzjWGhOEFfd+groZ5dMCVkpENiMZmwspdrzBo9286JjM1gZJPAyL7ZIdzuvu2AQ==", - "dependencies": { - "source-map": "~0.6.0" - }, - "engines": { - "node": ">= 10.0" - } - }, - "plugins/grunt-inline/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - } - }, - "dependencies": { - "@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "dev": true, - "requires": { - "@babel/highlight": "^7.18.6" - } - }, - "@babel/compat-data": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.6.tgz", - "integrity": "sha512-tzulrgDT0QD6U7BJ4TKVk2SDDg7wlP39P9yAx1RfLy7vP/7rsDRlWVfbWxElslu56+r7QOhB2NSDsabYYruoZQ==", - "dev": true - }, - "@babel/core": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.6.tgz", - "integrity": "sha512-cQbWBpxcbbs/IUredIPkHiAGULLV8iwgNRMFzvbhEXISp4f3rUUXE5+TIw6KwUWUR3DwyI6gmBRnmAtYaWehwQ==", - "dev": true, - "requires": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.18.6", - "@babel/helper-compilation-targets": "^7.18.6", - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helpers": "^7.18.6", - "@babel/parser": "^7.18.6", - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.6", - "@babel/types": "^7.18.6", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", - "semver": "^6.3.0" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "@babel/generator": { - "version": "7.18.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.7.tgz", - "integrity": "sha512-shck+7VLlY72a2w9c3zYWuE1pwOKEiQHV7GTUbSnhyl5eu3i04t30tBY82ZRWrDfo3gkakCFtevExnxbkf2a3A==", - "dev": true, - "requires": { - "@babel/types": "^7.18.7", - "@jridgewell/gen-mapping": "^0.3.2", - "jsesc": "^2.5.1" - }, - "dependencies": { - "@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - } - } - }, - "@babel/helper-compilation-targets": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.6.tgz", - "integrity": "sha512-vFjbfhNCzqdeAtZflUFrG5YIFqGTqsctrtkZ1D/NB0mDW9TwW3GmmUepYY4G9wCET5rY5ugz4OGTcLd614IzQg==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.18.6", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.20.2", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "@babel/helper-environment-visitor": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.6.tgz", - "integrity": "sha512-8n6gSfn2baOY+qlp+VSzsosjCVGFqWKmDF0cCWOybh52Dw3SEyoWR1KrhMJASjLwIEkkAufZ0xvr+SxLHSpy2Q==", - "dev": true - }, - "@babel/helper-function-name": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.6.tgz", - "integrity": "sha512-0mWMxV1aC97dhjCah5U5Ua7668r5ZmSC2DLfH2EZnf9c3/dHZKiFa5pRLMH5tjSl471tY6496ZWk/kjNONBxhw==", - "dev": true, - "requires": { - "@babel/template": "^7.18.6", - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-module-imports": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-module-transforms": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.6.tgz", - "integrity": "sha512-L//phhB4al5uucwzlimruukHB3jRd5JGClwRMD/ROrVjXfLqovYnvQrK/JK36WYyVwGGO7OD3kMyVTjx+WVPhw==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.18.6", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.18.6", - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.6", - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-simple-access": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz", - "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", - "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", - "dev": true - }, - "@babel/helper-validator-option": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", - "dev": true - }, - "@babel/helpers": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.6.tgz", - "integrity": "sha512-vzSiiqbQOghPngUYt/zWGvK3LAsPhz55vc9XNN0xAl2gV4ieShI2OQli5duxWHD+72PZPTKAcfcZDE1Cwc5zsQ==", - "dev": true, - "requires": { - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.6", - "@babel/types": "^7.18.6" - } - }, - "@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@babel/parser": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.6.tgz", - "integrity": "sha512-uQVSa9jJUe/G/304lXspfWVpKpK4euFLgGiMQFOCpM/bgcAdeoHwi/OQz23O9GK2osz26ZiXRRV9aV+Yl1O8tw==", - "dev": true - }, - "@babel/template": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.6.tgz", - "integrity": "sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.6", - "@babel/types": "^7.18.6" - } - }, - "@babel/traverse": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.6.tgz", - "integrity": "sha512-zS/OKyqmD7lslOtFqbscH6gMLFYOfG1YPqCKfAW5KrTeolKqvB8UelR49Fpr6y93kYkW2Ik00mT1LOGiAGvizw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.6", - "@babel/helper-function-name": "^7.18.6", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.18.6", - "@babel/types": "^7.18.6", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@babel/types": { - "version": "7.18.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.7.tgz", - "integrity": "sha512-QG3yxTcTIBoAcQmkCs+wAPYZhu7Dk9rXKacINfNbdJDNERTbLQbHGyVG8q/YGMPeCJRIhSY0+fTc5+xuh6WPSQ==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.18.6", - "to-fast-properties": "^2.0.0" - } - }, - "@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "requires": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - } - }, - "@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true - }, - "@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.8.tgz", - "integrity": "sha512-YK5G9LaddzGbcucK4c8h5tWFmMPBvRZ/uyWmN1/SbBdIvqGUdWGkJ5BAaccgs6XbzVLsqbPJrBSFwKv3kT9i7w==" - }, - "@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==" - }, - "@jridgewell/source-map": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", - "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", - "requires": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "dependencies": { - "@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - } - } - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" - }, - "@jridgewell/trace-mapping": { - "version": "0.3.14", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", - "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", - "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" - }, - "acorn": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", - "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==" - }, - "aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "append-transform": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", - "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", - "dev": true, - "requires": { - "default-require-extensions": "^3.0.0" - } - }, - "archy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==", - "dev": true - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "array-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", - "integrity": "sha512-zHjL5SZa68hkKHBFBK6DJCTtr9sfTCPCaph/L7tMSLcTFgy+zX7E+6q5UArbtOtMBCtxdICpfTCspRse+ywyXA==" - }, - "array-slice": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", - "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==" - }, - "asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "dev": true, - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", - "dev": true - }, - "async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" - }, - "async-hook-domain": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/async-hook-domain/-/async-hook-domain-2.0.4.tgz", - "integrity": "sha512-14LjCmlK1PK8eDtTezR6WX8TMaYNIzBIsd2D1sGoGjgx0BuNMMoSdk7i/drlbtamy0AWv9yv2tkB+ASdmeqFIw==", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", - "dev": true - }, - "aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", - "dev": true - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", - "dev": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true - }, - "bind-obj-methods": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bind-obj-methods/-/bind-obj-methods-3.0.0.tgz", - "integrity": "sha512-nLEaaz3/sEzNSyPWRsN9HNsqwk1AUyECtGj+XwGdIi3xABnEqecvXtIJ0wehQXuuER5uZ/5fTs2usONgYjG+iw==", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "requires": { - "fill-range": "^7.0.1" - } - }, - "browserslist": { - "version": "4.21.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.1.tgz", - "integrity": "sha512-Nq8MFCSrnJXSc88yliwlzQe3qNe3VntIjhsArW9IJOEPSHNx23FalwApUVbzAWABLhYJJ7y8AynWI/XM8OdfjQ==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001359", - "electron-to-chromium": "^1.4.172", - "node-releases": "^2.0.5", - "update-browserslist-db": "^1.0.4" - } - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" - }, - "caching-transform": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", - "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", - "dev": true, - "requires": { - "hasha": "^5.0.0", - "make-dir": "^3.0.0", - "package-hash": "^4.0.0", - "write-file-atomic": "^3.0.0" - }, - "dependencies": { - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "camel-case": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", - "integrity": "sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w==", - "requires": { - "no-case": "^2.2.0", - "upper-case": "^1.1.1" - } - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "caniuse-lite": { - "version": "1.0.30001359", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001359.tgz", - "integrity": "sha512-Xln/BAsPzEuiVLgJ2/45IaqD9jShtk3Y33anKb4+yLwQzws3+v6odKfpgES/cDEaZMLzSChpIGdbOYtH9MyuHw==", - "dev": true - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", - "dev": true - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } - }, - "clean-css": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.4.tgz", - "integrity": "sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==", - "requires": { - "source-map": "~0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true - }, - "colors": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", - "integrity": "sha512-ENwblkFQpqqia6b++zLD/KUWafYlVY/UNnAp7oz7LY7E924wmpye416wBOmvv/HMWzl8gL1kJlfvId/1Dg176w==" - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "copy-anything": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", - "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", - "requires": { - "is-what": "^3.14.1" - } - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", - "dev": true - }, - "coveralls": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-3.1.1.tgz", - "integrity": "sha512-+dxnG2NHncSD1NrqbSM3dn/lE57O6Qf/koe9+I7c+wzkqRmEvcp0kgJdxKInzYzkICKkFMZsX3Vct3++tsF9ww==", - "dev": true, - "requires": { - "js-yaml": "^3.13.1", - "lcov-parse": "^1.0.0", - "log-driver": "^1.2.7", - "minimist": "^1.2.5", - "request": "^2.88.2" - } - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "datauri": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/datauri/-/datauri-4.1.0.tgz", - "integrity": "sha512-y17kh32+I82G+ED9MNWFkZiP/Cq/vO1hN9+tSZsT9C9qn3NrvcBnh7crSepg0AQPge1hXx2Ca44s1FRdv0gFWA==", - "requires": { - "image-size": "1.0.0", - "mimer": "^2.0.2" - } - }, - "dateformat": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", - "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==" - }, - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "optional": true, - "requires": { - "ms": "^2.1.1" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "dev": true - }, - "default-require-extensions": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.0.tgz", - "integrity": "sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg==", - "dev": true, - "requires": { - "strip-bom": "^4.0.0" - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true - }, - "detect-file": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", - "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==" - }, - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", - "dev": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "ejs": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.8.tgz", - "integrity": "sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==", - "dev": true, - "requires": { - "jake": "^10.8.5" - } - }, - "electron-to-chromium": { - "version": "1.4.172", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.172.tgz", - "integrity": "sha512-yDoFfTJnqBAB6hSiPvzmsBJSrjOXJtHSJoqJdI/zSIh7DYupYnIOHt/bbPw/WE31BJjNTybDdNAs21gCMnTh0Q==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "optional": true, - "requires": { - "prr": "~1.0.1" - } - }, - "es6-error": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", - "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", - "dev": true - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - }, - "eventemitter2": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz", - "integrity": "sha512-K7J4xq5xAD5jHsGM5ReWXRTFa3JRGofHiMcVgQ8PRwgWxzjHpMWCIzsmyf60+mh8KLsqYPcjUMa0AC4hd6lPyQ==" - }, - "events-to-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/events-to-array/-/events-to-array-1.1.2.tgz", - "integrity": "sha512-inRWzRY7nG+aXZxBzEqYKB3HPgwflZRopAjDCHv0whhRx+MTUr1ei0ICZUypdyE0HRm4L2d5VEcIqLD6yl+BFA==", - "dev": true - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==" - }, - "expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", - "requires": { - "homedir-polyfill": "^1.0.1" - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", - "dev": true - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "file-sync-cmp": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/file-sync-cmp/-/file-sync-cmp-0.1.1.tgz", - "integrity": "sha512-0k45oWBokCqh2MOexeYKpyqmGKG+8mQ2Wd8iawx+uWd/weWJQAZ6SoPybagdCI4xFisag8iAR77WPm4h3pTfxA==" - }, - "filelist": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", - "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", - "dev": true, - "requires": { - "minimatch": "^5.0.1" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - } - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, - "dependencies": { - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "findit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/findit/-/findit-2.0.0.tgz", - "integrity": "sha512-ENZS237/Hr8bjczn5eKuBohLgaD0JyUd0arxretR1f9RO46vZHA1b2y0VorgGV3WaOT3c+78P8h7v4JGJ1i/rg==", - "dev": true - }, - "findup-sync": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.3.0.tgz", - "integrity": "sha512-z8Nrwhi6wzxNMIbxlrTzuUW6KWuKkogZ/7OdDVq+0+kxn77KUH1nipx8iU6suqkHqc4y6n7a9A8IpmxY/pTjWg==", - "requires": { - "glob": "~5.0.0" - }, - "dependencies": { - "glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==", - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } - } - }, - "fined": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz", - "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==", - "requires": { - "expand-tilde": "^2.0.2", - "is-plain-object": "^2.0.3", - "object.defaults": "^1.1.0", - "object.pick": "^1.2.0", - "parse-filepath": "^1.0.1" - } - }, - "flagged-respawn": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz", - "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==" - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==" - }, - "for-own": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha512-0OABksIGrxKK8K4kynWkQ7y1zounQxP+CWnyclVwj81KW3vlLlGUx57DKGcP/LH216GzqnstnPocF16Nxs0Ycg==", - "requires": { - "for-in": "^1.0.1" - } - }, - "foreground-child": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", - "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "signal-exit": "^3.0.2" - } - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", - "dev": true - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "fromentries": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", - "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", - "dev": true - }, - "fs-exists-cached": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-exists-cached/-/fs-exists-cached-1.0.0.tgz", - "integrity": "sha512-kSxoARUDn4F2RPXX48UXnaFKwVU7Ivd/6qpzZL29MCDmr9sTvybv4gFCp+qaI4fM9m0z9fgz/yJvi56GAz+BZg==", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "function-loop": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/function-loop/-/function-loop-2.0.1.tgz", - "integrity": "sha512-ktIR+O6i/4h+j/ZhZJNdzeI4i9lEPeEK6UPR2EVyTVBqOwcU3Za9xYKLH64ZR9HmcROyRrOkizNyjjtWJzDDkQ==", - "dev": true - }, - "gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true - }, - "getobject": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/getobject/-/getobject-1.0.2.tgz", - "integrity": "sha512-2zblDBaFcb3rB4rF77XVnuINOE2h2k/OnqXAiy0IrTxUfV1iFp3la33oAQVY9pCpWU268WFYVt2t71hlMuLsOg==" - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", - "requires": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" - } - }, - "global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==", - "requires": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" - }, - "dependencies": { - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - }, - "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "devOptional": true - }, - "grunt": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.5.3.tgz", - "integrity": "sha512-mKwmo4X2d8/4c/BmcOETHek675uOqw0RuA/zy12jaspWqvTp4+ZeQF1W+OTpcbncnaBsfbQJ6l0l4j+Sn/GmaQ==", - "requires": { - "dateformat": "~3.0.3", - "eventemitter2": "~0.4.13", - "exit": "~0.1.2", - "findup-sync": "~0.3.0", - "glob": "~7.1.6", - "grunt-cli": "~1.4.3", - "grunt-known-options": "~2.0.0", - "grunt-legacy-log": "~3.0.0", - "grunt-legacy-util": "~2.0.1", - "iconv-lite": "~0.4.13", - "js-yaml": "~3.14.0", - "minimatch": "~3.0.4", - "mkdirp": "~1.0.4", - "nopt": "~3.0.6", - "rimraf": "~3.0.2" - } - }, - "grunt-cli": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/grunt-cli/-/grunt-cli-1.4.3.tgz", - "integrity": "sha512-9Dtx/AhVeB4LYzsViCjUQkd0Kw0McN2gYpdmGYKtE2a5Yt7v1Q+HYZVWhqXc/kGnxlMtqKDxSwotiGeFmkrCoQ==", - "requires": { - "grunt-known-options": "~2.0.0", - "interpret": "~1.1.0", - "liftup": "~3.0.1", - "nopt": "~4.0.1", - "v8flags": "~3.2.0" - }, - "dependencies": { - "nopt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", - "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - } - } - }, - "grunt-contrib-clean": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/grunt-contrib-clean/-/grunt-contrib-clean-2.0.1.tgz", - "integrity": "sha512-uRvnXfhiZt8akb/ZRDHJpQQtkkVkqc/opWO4Po/9ehC2hPxgptB9S6JHDC/Nxswo4CJSM0iFPT/Iym3cEMWzKA==", - "requires": { - "async": "^3.2.3", - "rimraf": "^2.6.2" - }, - "dependencies": { - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "grunt-contrib-concat": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/grunt-contrib-concat/-/grunt-contrib-concat-2.1.0.tgz", - "integrity": "sha512-Vnl95JIOxfhEN7bnYIlCgQz41kkbi7tsZ/9a4usZmxNxi1S2YAIOy8ysFmO8u4MN26Apal1O106BwARdaNxXQw==", - "requires": { - "chalk": "^4.1.2", - "source-map": "^0.5.3" - } - }, - "grunt-contrib-copy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/grunt-contrib-copy/-/grunt-contrib-copy-1.0.0.tgz", - "integrity": "sha512-gFRFUB0ZbLcjKb67Magz1yOHGBkyU6uL29hiEW1tdQ9gQt72NuMKIy/kS6dsCbV0cZ0maNCb0s6y+uT1FKU7jA==", - "requires": { - "chalk": "^1.1.1", - "file-sync-cmp": "^0.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==" - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==" - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==" - } - } - }, - "grunt-contrib-htmlmin": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/grunt-contrib-htmlmin/-/grunt-contrib-htmlmin-3.1.0.tgz", - "integrity": "sha512-Khaa+0MUuqqNroDIe9tsjZkioZnW2Y+iTGbonBkLWaG7+SkSFExfb4jLt7M6rxKV3RSqlS7NtVvu4SVIPkmKXg==", - "requires": { - "chalk": "^2.4.2", - "html-minifier": "^4.0.0", - "pretty-bytes": "^5.1.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "grunt-contrib-less": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/grunt-contrib-less/-/grunt-contrib-less-3.0.0.tgz", - "integrity": "sha512-fBB8MUDCo5EgT7WdOVQnZq4GF+XCeFdnkhaxI7uepp8P973sH1jdodjF87c6d9WSHKgArJAGP5JEtthhdKVovg==", - "requires": { - "async": "^3.2.0", - "chalk": "^4.1.0", - "less": "^4.1.1", - "lodash": "^4.17.21" - } - }, - "grunt-contrib-nodeunit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/grunt-contrib-nodeunit/-/grunt-contrib-nodeunit-4.0.0.tgz", - "integrity": "sha512-pLLDrTKfitBn2b1U9ecX+nkECcQ12tsiW58Y0SaZcsQgjljthPs78N5D24Y3b34dD8QKBAEW1J0VgO7cW0QcVQ==", - "dev": true, - "requires": { - "nodeunit-x": "^0.15.0" - } - }, - "grunt-inline": { - "version": "file:plugins/grunt-inline", - "requires": { - "clean-css": "^5.2.4", - "datauri": "^4.1.0", - "grunt": "^1.4.0", - "grunt-contrib-clean": "^2.0.0", - "grunt-contrib-htmlmin": "^3.1.0", - "grunt-contrib-nodeunit": "^4.0.0", - "uglify-js": "^3.15.1" - }, - "dependencies": { - "clean-css": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.0.tgz", - "integrity": "sha512-YYuuxv4H/iNb1Z/5IbMRoxgrzjWGhOEFfd+groZ5dMCVkpENiMZmwspdrzBo9286JjM1gZJPAyL7ZIdzuvu2AQ==", - "requires": { - "source-map": "~0.6.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "grunt-known-options": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/grunt-known-options/-/grunt-known-options-2.0.0.tgz", - "integrity": "sha512-GD7cTz0I4SAede1/+pAbmJRG44zFLPipVtdL9o3vqx9IEyb7b4/Y3s7r6ofI3CchR5GvYJ+8buCSioDv5dQLiA==" - }, - "grunt-legacy-log": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-3.0.0.tgz", - "integrity": "sha512-GHZQzZmhyq0u3hr7aHW4qUH0xDzwp2YXldLPZTCjlOeGscAOWWPftZG3XioW8MasGp+OBRIu39LFx14SLjXRcA==", - "requires": { - "colors": "~1.1.2", - "grunt-legacy-log-utils": "~2.1.0", - "hooker": "~0.2.3", - "lodash": "~4.17.19" - } - }, - "grunt-legacy-log-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-2.1.0.tgz", - "integrity": "sha512-lwquaPXJtKQk0rUM1IQAop5noEpwFqOXasVoedLeNzaibf/OPWjKYvvdqnEHNmU+0T0CaReAXIbGo747ZD+Aaw==", - "requires": { - "chalk": "~4.1.0", - "lodash": "~4.17.19" - } - }, - "grunt-legacy-util": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-2.0.1.tgz", - "integrity": "sha512-2bQiD4fzXqX8rhNdXkAywCadeqiPiay0oQny77wA2F3WF4grPJXCvAcyoWUJV+po/b15glGkxuSiQCK299UC2w==", - "requires": { - "async": "~3.2.0", - "exit": "~0.1.2", - "getobject": "~1.0.0", - "hooker": "~0.2.3", - "lodash": "~4.17.21", - "underscore.string": "~3.3.5", - "which": "~2.0.2" - } - }, - "grunt-terser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/grunt-terser/-/grunt-terser-2.0.0.tgz", - "integrity": "sha512-9Rw1TiPsqadCJnEaKz+mZiS4k9ydnkNfrfvEq9SS6MqMXUxBC+sndDCHV05s5/PXQsFjFBhoRVFij5FaV36tYA==", - "requires": { - "grunt": "^1.1.0" - } - }, - "grunt-text-replace": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/grunt-text-replace/-/grunt-text-replace-0.4.0.tgz", - "integrity": "sha512-A4dFGpOaD/TQpeOlDK/zP962X1qG7KcOqPiSXOWOIeAKMzzpoDJYZ8Sz56iazI5+kTqeTa+IaEEl5c4sk+QN+Q==" - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", - "dev": true - }, - "har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "dev": true, - "requires": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", - "requires": { - "ansi-regex": "^2.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==" - } - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "hasha": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", - "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", - "dev": true, - "requires": { - "is-stream": "^2.0.0", - "type-fest": "^0.8.0" - } - }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" - }, - "homedir-polyfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", - "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", - "requires": { - "parse-passwd": "^1.0.0" - } - }, - "hooker": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz", - "integrity": "sha512-t+UerCsQviSymAInD01Pw+Dn/usmz1sRO+3Zk1+lx8eg+WKpD2ulcwWqHHL0+aseRBr+3+vIhiG1K1JTwaIcTA==" - }, - "html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "html-minifier": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-4.0.0.tgz", - "integrity": "sha512-aoGxanpFPLg7MkIl/DDFYtb0iWz7jMFGqFhvEDZga6/4QTjneiD8I/NXL1x5aaoCp7FSIT6h/OhykDdPsbtMig==", - "requires": { - "camel-case": "^3.0.0", - "clean-css": "^4.2.1", - "commander": "^2.19.0", - "he": "^1.2.0", - "param-case": "^2.1.1", - "relateurl": "^0.2.7", - "uglify-js": "^3.5.1" - } - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "image-size": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.0.0.tgz", - "integrity": "sha512-JLJ6OwBfO1KcA+TvJT+v8gbE6iWbj24LyDNFgFEN0lzegn6cC6a/p3NIDaepMsJjQjlUWqIC7wJv8lBFxPNjcw==", - "requires": { - "queue": "6.0.2" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true - }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - }, - "interpret": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", - "integrity": "sha512-CLM8SNMDu7C5psFCn6Wg/tgpj/bKAg7hc2gWqcuR9OD5Ft9PhBpIu8PLicPeis+xDd6YX2ncI8MCA64I9tftIA==" - }, - "is-absolute": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", - "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", - "requires": { - "is-relative": "^1.0.0", - "is-windows": "^1.0.1" - } - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-core-module": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", - "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", - "requires": { - "has": "^1.0.3" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "requires": { - "isobject": "^3.0.1" - } - }, - "is-relative": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", - "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", - "requires": { - "is-unc-path": "^1.0.0" - } - }, - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "dev": true - }, - "is-unc-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", - "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", - "requires": { - "unc-path-regex": "^0.1.2" - } - }, - "is-what": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", - "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==" - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==" - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", - "dev": true - }, - "istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", - "dev": true - }, - "istanbul-lib-hook": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz", - "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", - "dev": true, - "requires": { - "append-transform": "^2.0.0" - } - }, - "istanbul-lib-instrument": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", - "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", - "dev": true, - "requires": { - "@babel/core": "^7.7.5", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.0", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "istanbul-lib-processinfo": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.3.tgz", - "integrity": "sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg==", - "dev": true, - "requires": { - "archy": "^1.0.0", - "cross-spawn": "^7.0.3", - "istanbul-lib-coverage": "^3.2.0", - "p-map": "^3.0.0", - "rimraf": "^3.0.0", - "uuid": "^8.3.2" - } - }, - "istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "istanbul-reports": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.4.tgz", - "integrity": "sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw==", - "dev": true, - "requires": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - } - }, - "jackspeak": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-1.4.1.tgz", - "integrity": "sha512-npN8f+M4+IQ8xD3CcWi3U62VQwKlT3Tj4GxbdT/fYTmeogD9eBF9OFdpoFG/VPNoshRjPUijdkp/p2XrzUHaVg==", - "dev": true, - "requires": { - "cliui": "^7.0.4" - } - }, - "jake": { - "version": "10.8.5", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz", - "integrity": "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==", - "dev": true, - "requires": { - "async": "^3.2.3", - "chalk": "^4.0.2", - "filelist": "^1.0.1", - "minimatch": "^3.0.4" - } - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", - "dev": true - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dev": true - }, - "json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", - "dev": true - }, - "jsprim": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", - "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" - }, - "lcov-parse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-1.0.0.tgz", - "integrity": "sha512-aprLII/vPzuQvYZnDRU78Fns9I2Ag3gi4Ipga/hxnVMCZC8DnR2nI7XBqrPoywGfxqIx/DgarGvDJZAD3YBTgQ==", - "dev": true - }, - "less": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/less/-/less-4.1.3.tgz", - "integrity": "sha512-w16Xk/Ta9Hhyei0Gpz9m7VS8F28nieJaL/VyShID7cYvP6IL5oHeL6p4TXSDJqZE/lNv0oJ2pGVjJsRkfwm5FA==", - "requires": { - "copy-anything": "^2.0.1", - "errno": "^0.1.1", - "graceful-fs": "^4.1.2", - "image-size": "~0.5.0", - "make-dir": "^2.1.0", - "mime": "^1.4.1", - "needle": "^3.1.0", - "parse-node-version": "^1.0.1", - "source-map": "~0.6.0", - "tslib": "^2.3.0" - }, - "dependencies": { - "image-size": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", - "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", - "optional": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "optional": true - } - } - }, - "libtap": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/libtap/-/libtap-1.4.0.tgz", - "integrity": "sha512-STLFynswQ2A6W14JkabgGetBNk6INL1REgJ9UeNKw5llXroC2cGLgKTqavv0sl8OLVztLLipVKMcQ7yeUcqpmg==", - "dev": true, - "requires": { - "async-hook-domain": "^2.0.4", - "bind-obj-methods": "^3.0.0", - "diff": "^4.0.2", - "function-loop": "^2.0.1", - "minipass": "^3.1.5", - "own-or": "^1.0.0", - "own-or-env": "^1.0.2", - "signal-exit": "^3.0.4", - "stack-utils": "^2.0.4", - "tap-parser": "^11.0.0", - "tap-yaml": "^1.0.0", - "tcompare": "^5.0.6", - "trivial-deferred": "^1.0.1" - } - }, - "liftup": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/liftup/-/liftup-3.0.1.tgz", - "integrity": "sha512-yRHaiQDizWSzoXk3APcA71eOI/UuhEkNN9DiW2Tt44mhYzX4joFoCZlxsSOF7RyeLlfqzFLQI1ngFq3ggMPhOw==", - "requires": { - "extend": "^3.0.2", - "findup-sync": "^4.0.0", - "fined": "^1.2.0", - "flagged-respawn": "^1.0.1", - "is-plain-object": "^2.0.4", - "object.map": "^1.0.1", - "rechoir": "^0.7.0", - "resolve": "^1.19.0" - }, - "dependencies": { - "findup-sync": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-4.0.0.tgz", - "integrity": "sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ==", - "requires": { - "detect-file": "^1.0.0", - "is-glob": "^4.0.0", - "micromatch": "^4.0.2", - "resolve-dir": "^1.0.1" - } - } - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "lodash.flattendeep": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", - "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==", - "dev": true - }, - "log-driver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz", - "integrity": "sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==", - "dev": true - }, - "lower-case": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", - "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==" - }, - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "optional": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - } - }, - "make-iterator": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", - "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", - "requires": { - "kind-of": "^6.0.2" - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==" - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "optional": true - }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "requires": { - "mime-db": "1.52.0" - } - }, - "mimer": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/mimer/-/mimer-2.0.2.tgz", - "integrity": "sha512-izxvjsB7Ur5HrTbPu6VKTrzxSMBFBqyZQc6dWlZNQ4/wAvf886fD4lrjtFd8IQ8/WmZKdxKjUtqFFNaj3hQ52g==" - }, - "minimatch": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz", - "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true - }, - "minipass": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz", - "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "optional": true - }, - "needle": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/needle/-/needle-3.1.0.tgz", - "integrity": "sha512-gCE9weDhjVGCRqS8dwDR/D3GTAeyXLXuqp7I8EzH6DllZGXSUyxuqqLh+YX9rMAWaaTFyVAg6rHGL25dqvczKw==", - "optional": true, - "requires": { - "debug": "^3.2.6", - "iconv-lite": "^0.6.3", - "sax": "^1.2.4" - }, - "dependencies": { - "iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - } - } - }, - "no-case": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", - "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", - "requires": { - "lower-case": "^1.1.1" - } - }, - "node-preload": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", - "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==", - "dev": true, - "requires": { - "process-on-spawn": "^1.0.0" - } - }, - "node-releases": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.5.tgz", - "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==", - "dev": true - }, - "nodeunit-x": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/nodeunit-x/-/nodeunit-x-0.15.0.tgz", - "integrity": "sha512-g3XCZ3Gh1Fxr9NPPo0PtmEooZ2jSJF+tP0DPtqCZmFA22uQ0N2clAew6+GIAIMnjH4eX9BS0ixxpb45IAYHnVA==", - "dev": true, - "requires": { - "ejs": "^3.1.6", - "tap": "^15.0.10" - } - }, - "nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==", - "requires": { - "abbrev": "1" - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "nyc": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", - "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==", - "dev": true, - "requires": { - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "caching-transform": "^4.0.0", - "convert-source-map": "^1.7.0", - "decamelize": "^1.2.0", - "find-cache-dir": "^3.2.0", - "find-up": "^4.1.0", - "foreground-child": "^2.0.0", - "get-package-type": "^0.1.0", - "glob": "^7.1.6", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-hook": "^3.0.0", - "istanbul-lib-instrument": "^4.0.0", - "istanbul-lib-processinfo": "^2.0.2", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.0.2", - "make-dir": "^3.0.0", - "node-preload": "^0.2.1", - "p-map": "^3.0.0", - "process-on-spawn": "^1.0.0", - "resolve-from": "^5.0.0", - "rimraf": "^3.0.0", - "signal-exit": "^3.0.2", - "spawn-wrap": "^2.0.0", - "test-exclude": "^6.0.0", - "yargs": "^15.0.2" - }, - "dependencies": { - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true - }, - "object.defaults": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", - "integrity": "sha512-c/K0mw/F11k4dEUBMW8naXUuBuhxRCfG7W+yFy8EcijU/rSmazOUd1XAEEe6bC0OuXY4HUKjTJv7xbxIMqdxrA==", - "requires": { - "array-each": "^1.0.1", - "array-slice": "^1.0.0", - "for-own": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "object.map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", - "integrity": "sha512-3+mAJu2PLfnSVGHwIWubpOFLscJANBKuB/6A4CxBstc4aqwQY0FWcsppuy4jU5GSB95yES5JHSI+33AWuS4k6w==", - "requires": { - "for-own": "^1.0.0", - "make-iterator": "^1.0.0" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", - "requires": { - "isobject": "^3.0.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "requires": { - "wrappy": "1" - } - }, - "opener": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", - "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", - "dev": true - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==" - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==" - }, - "osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "own-or": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/own-or/-/own-or-1.0.0.tgz", - "integrity": "sha512-NfZr5+Tdf6MB8UI9GLvKRs4cXY8/yB0w3xtt84xFdWy8hkGjn+JFc60VhzS/hFRfbyxFcGYMTjnF4Me+RbbqrA==", - "dev": true - }, - "own-or-env": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/own-or-env/-/own-or-env-1.0.2.tgz", - "integrity": "sha512-NQ7v0fliWtK7Lkb+WdFqe6ky9XAzYmlkXthQrBbzlYbmFKoAYbDDcwmOm6q8kOuwSRXW8bdL5ORksploUJmWgw==", - "dev": true, - "requires": { - "own-or": "^1.0.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-map": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", - "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", - "dev": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "package-hash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", - "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.15", - "hasha": "^5.0.0", - "lodash.flattendeep": "^4.4.0", - "release-zalgo": "^1.0.0" - } - }, - "param-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", - "integrity": "sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w==", - "requires": { - "no-case": "^2.2.0" - } - }, - "parse-filepath": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", - "integrity": "sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==", - "requires": { - "is-absolute": "^1.0.0", - "map-cache": "^0.2.0", - "path-root": "^0.1.1" - } - }, - "parse-node-version": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", - "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==" - }, - "parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==" - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "path-root": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", - "integrity": "sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==", - "requires": { - "path-root-regex": "^0.1.0" - } - }, - "path-root-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", - "integrity": "sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==" - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", - "dev": true - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "optional": true - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - }, - "pretty-bytes": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", - "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==" - }, - "process-on-spawn": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz", - "integrity": "sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==", - "dev": true, - "requires": { - "fromentries": "^1.2.0" - } - }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", - "optional": true - }, - "psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", - "dev": true - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "qs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", - "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", - "dev": true - }, - "queue": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", - "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", - "requires": { - "inherits": "~2.0.3" - } - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "rechoir": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", - "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", - "requires": { - "resolve": "^1.9.0" - } - }, - "relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==" - }, - "release-zalgo": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", - "integrity": "sha512-gUAyHVHPPC5wdqX/LG4LWtRYtgjxyX78oanFNTMMyFEfOqdC54s3eE82imuWKbOeqYht2CrNf64Qb8vgmmtZGA==", - "dev": true, - "requires": { - "es6-error": "^4.0.1" - } - }, - "request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "dev": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "dev": true - } - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "resolve-dir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==", - "requires": { - "expand-tilde": "^2.0.0", - "global-modules": "^1.0.0" - } - }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "optional": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" - }, - "source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "spawn-wrap": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", - "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", - "dev": true, - "requires": { - "foreground-child": "^2.0.0", - "is-windows": "^1.0.2", - "make-dir": "^3.0.0", - "rimraf": "^3.0.0", - "signal-exit": "^3.0.2", - "which": "^2.0.1" - }, - "dependencies": { - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" - }, - "sshpk": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", - "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", - "dev": true, - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, - "stack-utils": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", - "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", - "dev": true, - "requires": { - "escape-string-regexp": "^2.0.0" - } - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" - }, - "tap": { - "version": "15.2.3", - "resolved": "https://registry.npmjs.org/tap/-/tap-15.2.3.tgz", - "integrity": "sha512-EVbovHd/SdevGMUnkNU5JJqC1YC0hzaaZ2jnqs0fKHv9Oudx27qW3Xwox7A6TB92wvR0mqgQPr+Au2w56kD+aQ==", - "dev": true, - "requires": { - "@isaacs/import-jsx": "*", - "@types/react": "*", - "chokidar": "^3.3.0", - "coveralls": "^3.0.11", - "findit": "^2.0.0", - "foreground-child": "^2.0.0", - "fs-exists-cached": "^1.0.0", - "glob": "^7.1.6", - "ink": "*", - "isexe": "^2.0.0", - "istanbul-lib-processinfo": "^2.0.2", - "jackspeak": "^1.4.1", - "libtap": "^1.3.0", - "minipass": "^3.1.1", - "mkdirp": "^1.0.4", - "nyc": "^15.1.0", - "opener": "^1.5.1", - "react": "*", - "rimraf": "^3.0.0", - "signal-exit": "^3.0.6", - "source-map-support": "^0.5.16", - "tap-mocha-reporter": "^5.0.3", - "tap-parser": "^11.0.1", - "tap-yaml": "^1.0.0", - "tcompare": "^5.0.7", - "treport": "*", - "which": "^2.0.2" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.16.0", - "bundled": true, - "dev": true, - "requires": { - "@babel/highlight": "^7.16.0" - } - }, - "@babel/compat-data": { - "version": "7.16.0", - "bundled": true, - "dev": true - }, - "@babel/core": { - "version": "7.16.0", - "bundled": true, - "dev": true, - "requires": { - "@babel/code-frame": "^7.16.0", - "@babel/generator": "^7.16.0", - "@babel/helper-compilation-targets": "^7.16.0", - "@babel/helper-module-transforms": "^7.16.0", - "@babel/helpers": "^7.16.0", - "@babel/parser": "^7.16.0", - "@babel/template": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0", - "source-map": "^0.5.0" - } - }, - "@babel/generator": { - "version": "7.16.0", - "bundled": true, - "dev": true, - "requires": { - "@babel/types": "^7.16.0", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.16.0", - "bundled": true, - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.16.3", - "bundled": true, - "dev": true, - "requires": { - "@babel/compat-data": "^7.16.0", - "@babel/helper-validator-option": "^7.14.5", - "browserslist": "^4.17.5", - "semver": "^6.3.0" - } - }, - "@babel/helper-function-name": { - "version": "7.16.0", - "bundled": true, - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.16.0", - "@babel/template": "^7.16.0", - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.16.0", - "bundled": true, - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.16.0", - "bundled": true, - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.16.0", - "bundled": true, - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-module-imports": { - "version": "7.16.0", - "bundled": true, - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-module-transforms": { - "version": "7.16.0", - "bundled": true, - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.16.0", - "@babel/helper-replace-supers": "^7.16.0", - "@babel/helper-simple-access": "^7.16.0", - "@babel/helper-split-export-declaration": "^7.16.0", - "@babel/helper-validator-identifier": "^7.15.7", - "@babel/template": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.16.0", - "bundled": true, - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.14.5", - "bundled": true, - "dev": true - }, - "@babel/helper-replace-supers": { - "version": "7.16.0", - "bundled": true, - "dev": true, - "requires": { - "@babel/helper-member-expression-to-functions": "^7.16.0", - "@babel/helper-optimise-call-expression": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-simple-access": { - "version": "7.16.0", - "bundled": true, - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.16.0", - "bundled": true, - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.15.7", - "bundled": true, - "dev": true - }, - "@babel/helper-validator-option": { - "version": "7.14.5", - "bundled": true, - "dev": true - }, - "@babel/helpers": { - "version": "7.16.3", - "bundled": true, - "dev": true, - "requires": { - "@babel/template": "^7.16.0", - "@babel/traverse": "^7.16.3", - "@babel/types": "^7.16.0" - } - }, - "@babel/highlight": { - "version": "7.16.0", - "bundled": true, - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.15.7", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.16.3", - "bundled": true, - "dev": true - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.16.0", - "bundled": true, - "dev": true, - "requires": { - "@babel/compat-data": "^7.16.0", - "@babel/helper-compilation-targets": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.16.0" - } - }, - "@babel/plugin-syntax-jsx": { - "version": "7.16.0", - "bundled": true, - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "bundled": true, - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.16.0", - "bundled": true, - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.16.3", - "bundled": true, - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-react-jsx": { - "version": "7.16.0", - "bundled": true, - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.16.0", - "@babel/helper-module-imports": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-jsx": "^7.16.0", - "@babel/types": "^7.16.0" - } - }, - "@babel/template": { - "version": "7.16.0", - "bundled": true, - "dev": true, - "requires": { - "@babel/code-frame": "^7.16.0", - "@babel/parser": "^7.16.0", - "@babel/types": "^7.16.0" - } - }, - "@babel/traverse": { - "version": "7.16.3", - "bundled": true, - "dev": true, - "requires": { - "@babel/code-frame": "^7.16.0", - "@babel/generator": "^7.16.0", - "@babel/helper-function-name": "^7.16.0", - "@babel/helper-hoist-variables": "^7.16.0", - "@babel/helper-split-export-declaration": "^7.16.0", - "@babel/parser": "^7.16.3", - "@babel/types": "^7.16.0", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.16.0", - "bundled": true, - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.15.7", - "to-fast-properties": "^2.0.0" - } - }, - "@isaacs/import-jsx": { - "version": "4.0.1", - "bundled": true, - "dev": true, - "requires": { - "@babel/core": "^7.5.5", - "@babel/plugin-proposal-object-rest-spread": "^7.5.5", - "@babel/plugin-transform-destructuring": "^7.5.0", - "@babel/plugin-transform-react-jsx": "^7.3.0", - "caller-path": "^3.0.1", - "find-cache-dir": "^3.2.0", - "make-dir": "^3.0.2", - "resolve-from": "^3.0.0", - "rimraf": "^3.0.0" - }, - "dependencies": { - "caller-callsite": { - "version": "4.1.0", - "bundled": true, - "dev": true, - "requires": { - "callsites": "^3.1.0" - } - }, - "caller-path": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "requires": { - "caller-callsite": "^4.1.0" - } - }, - "callsites": { - "version": "3.1.0", - "bundled": true, - "dev": true - } - } - }, - "@types/prop-types": { - "version": "15.7.4", - "bundled": true, - "dev": true - }, - "@types/react": { - "version": "17.0.34", - "bundled": true, - "dev": true, - "requires": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "@types/scheduler": { - "version": "0.16.2", - "bundled": true, - "dev": true - }, - "@types/yoga-layout": { - "version": "1.9.2", - "bundled": true, - "dev": true - }, - "ansi-escapes": { - "version": "4.3.2", - "bundled": true, - "dev": true, - "requires": { - "type-fest": "^0.21.3" - }, - "dependencies": { - "type-fest": { - "version": "0.21.3", - "bundled": true, - "dev": true - } - } - }, - "ansi-regex": { - "version": "5.0.1", - "bundled": true, - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "bundled": true, - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "ansicolors": { - "version": "0.3.2", - "bundled": true, - "dev": true - }, - "astral-regex": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "auto-bind": { - "version": "4.0.0", - "bundled": true, - "dev": true - }, - "balanced-match": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "browserslist": { - "version": "4.17.6", - "bundled": true, - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001274", - "electron-to-chromium": "^1.3.886", - "escalade": "^3.1.1", - "node-releases": "^2.0.1", - "picocolors": "^1.0.0" - } - }, - "caniuse-lite": { - "version": "1.0.30001279", - "bundled": true, - "dev": true - }, - "cardinal": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "requires": { - "ansicolors": "~0.3.2", - "redeyed": "~2.1.0" - } - }, - "chalk": { - "version": "2.4.2", - "bundled": true, - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "ci-info": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "cli-boxes": { - "version": "2.2.1", - "bundled": true, - "dev": true - }, - "cli-cursor": { - "version": "3.1.0", - "bundled": true, - "dev": true, - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "cli-truncate": { - "version": "2.1.0", - "bundled": true, - "dev": true, - "requires": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" - } - }, - "code-excerpt": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "convert-to-spaces": "^1.0.1" - } - }, - "color-convert": { - "version": "1.9.3", - "bundled": true, - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "bundled": true, - "dev": true - }, - "commondir": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "dev": true - }, - "convert-source-map": { - "version": "1.8.0", - "bundled": true, - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "convert-to-spaces": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "csstype": { - "version": "3.0.9", - "bundled": true, - "dev": true - }, - "debug": { - "version": "4.3.2", - "bundled": true, - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "electron-to-chromium": { - "version": "1.3.893", - "bundled": true, - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "bundled": true, - "dev": true - }, - "escalade": { - "version": "3.1.1", - "bundled": true, - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "bundled": true, - "dev": true - }, - "esprima": { - "version": "4.0.1", - "bundled": true, - "dev": true - }, - "events-to-array": { - "version": "1.1.2", - "bundled": true, - "dev": true - }, - "find-cache-dir": { - "version": "3.3.2", - "bundled": true, - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - } - }, - "find-up": { - "version": "4.1.0", - "bundled": true, - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "gensync": { - "version": "1.0.0-beta.2", - "bundled": true, - "dev": true - }, - "glob": { - "version": "7.2.0", - "bundled": true, - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "globals": { - "version": "11.12.0", - "bundled": true, - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "indent-string": { - "version": "4.0.0", - "bundled": true, - "dev": true - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "bundled": true, - "dev": true - }, - "ink": { - "version": "3.2.0", - "bundled": true, - "dev": true, - "requires": { - "ansi-escapes": "^4.2.1", - "auto-bind": "4.0.0", - "chalk": "^4.1.0", - "cli-boxes": "^2.2.0", - "cli-cursor": "^3.1.0", - "cli-truncate": "^2.1.0", - "code-excerpt": "^3.0.0", - "indent-string": "^4.0.0", - "is-ci": "^2.0.0", - "lodash": "^4.17.20", - "patch-console": "^1.0.0", - "react-devtools-core": "^4.19.1", - "react-reconciler": "^0.26.2", - "scheduler": "^0.20.2", - "signal-exit": "^3.0.2", - "slice-ansi": "^3.0.0", - "stack-utils": "^2.0.2", - "string-width": "^4.2.2", - "type-fest": "^0.12.0", - "widest-line": "^3.1.0", - "wrap-ansi": "^6.2.0", - "ws": "^7.5.5", - "yoga-layout-prebuilt": "^1.9.6" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "bundled": true, - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "bundled": true, - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "bundled": true, - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "bundled": true, - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "bundled": true, - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "is-ci": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "ci-info": "^2.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "js-tokens": { - "version": "4.0.0", - "bundled": true, - "dev": true - }, - "jsesc": { - "version": "2.5.2", - "bundled": true, - "dev": true - }, - "json5": { - "version": "2.2.0", - "bundled": true, - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "locate-path": { - "version": "5.0.0", - "bundled": true, - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "lodash": { - "version": "4.17.21", - "bundled": true, - "dev": true - }, - "loose-envify": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "make-dir": { - "version": "3.1.0", - "bundled": true, - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "bundled": true, - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.6", - "bundled": true, - "dev": true - }, - "minipass": { - "version": "3.1.6", - "bundled": true, - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "ms": { - "version": "2.1.2", - "bundled": true, - "dev": true - }, - "node-releases": { - "version": "2.0.1", - "bundled": true, - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "dev": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "bundled": true, - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "bundled": true, - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "bundled": true, - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-try": { - "version": "2.2.0", - "bundled": true, - "dev": true - }, - "patch-console": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "path-exists": { - "version": "4.0.0", - "bundled": true, - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "picocolors": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "pkg-dir": { - "version": "4.2.0", - "bundled": true, - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - }, - "punycode": { - "version": "2.1.1", - "bundled": true, - "dev": true - }, - "react": { - "version": "17.0.2", - "bundled": true, - "dev": true, - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "react-devtools-core": { - "version": "4.21.0", - "bundled": true, - "dev": true, - "requires": { - "shell-quote": "^1.6.1", - "ws": "^7" - } - }, - "react-reconciler": { - "version": "0.26.2", - "bundled": true, - "dev": true, - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "scheduler": "^0.20.2" - } - }, - "redeyed": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "requires": { - "esprima": "~4.0.0" - } - }, - "resolve-from": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "restore-cursor": { - "version": "3.1.0", - "bundled": true, - "dev": true, - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } - }, - "rimraf": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "bundled": true, - "dev": true - }, - "scheduler": { - "version": "0.20.2", - "bundled": true, - "dev": true, - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "semver": { - "version": "6.3.0", - "bundled": true, - "dev": true - }, - "shell-quote": { - "version": "1.7.3", - "bundled": true, - "dev": true - }, - "signal-exit": { - "version": "3.0.6", - "bundled": true, - "dev": true - }, - "slice-ansi": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "bundled": true, - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "bundled": true, - "dev": true - } - } - }, - "source-map": { - "version": "0.5.7", - "bundled": true, - "dev": true - }, - "stack-utils": { - "version": "2.0.5", - "bundled": true, - "dev": true, - "requires": { - "escape-string-regexp": "^2.0.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "2.0.0", - "bundled": true, - "dev": true - } - } - }, - "string-width": { - "version": "4.2.3", - "bundled": true, - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "bundled": true, - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "supports-color": { - "version": "5.5.0", - "bundled": true, - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "tap-parser": { - "version": "11.0.1", - "bundled": true, - "dev": true, - "requires": { - "events-to-array": "^1.0.1", - "minipass": "^3.1.6", - "tap-yaml": "^1.0.0" - } - }, - "tap-yaml": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "yaml": "^1.5.0" - } - }, - "to-fast-properties": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "treport": { - "version": "3.0.3", - "bundled": true, - "dev": true, - "requires": { - "@isaacs/import-jsx": "^4.0.1", - "cardinal": "^2.1.1", - "chalk": "^3.0.0", - "ink": "^3.2.0", - "ms": "^2.1.2", - "tap-parser": "^11.0.0", - "unicode-length": "^2.0.2" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "bundled": true, - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "bundled": true, - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "bundled": true, - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "bundled": true, - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "type-fest": { - "version": "0.12.0", - "bundled": true, - "dev": true - }, - "unicode-length": { - "version": "2.0.2", - "bundled": true, - "dev": true, - "requires": { - "punycode": "^2.0.0", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - }, - "widest-line": { - "version": "3.1.0", - "bundled": true, - "dev": true, - "requires": { - "string-width": "^4.0.0" - } - }, - "wrap-ansi": { - "version": "6.2.0", - "bundled": true, - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "bundled": true, - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "bundled": true, - "dev": true - } - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "ws": { - "version": "7.5.5", - "bundled": true, - "dev": true, - "requires": {} - }, - "yallist": { - "version": "4.0.0", - "bundled": true, - "dev": true - }, - "yaml": { - "version": "1.10.2", - "bundled": true, - "dev": true - }, - "yoga-layout-prebuilt": { - "version": "1.10.0", - "bundled": true, - "dev": true, - "requires": { - "@types/yoga-layout": "1.9.2" - } - } + "requires": { + "wrappy": "1" } }, - "tap-mocha-reporter": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/tap-mocha-reporter/-/tap-mocha-reporter-5.0.3.tgz", - "integrity": "sha512-6zlGkaV4J+XMRFkN0X+yuw6xHbE9jyCZ3WUKfw4KxMyRGOpYSRuuQTRJyWX88WWuLdVTuFbxzwXhXuS2XE6o0g==", - "dev": true, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==" + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==" + }, + "osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", "requires": { - "color-support": "^1.1.0", - "debug": "^4.1.1", - "diff": "^4.0.1", - "escape-string-regexp": "^2.0.0", - "glob": "^7.0.5", - "tap-parser": "^11.0.0", - "tap-yaml": "^1.0.0", - "unicode-length": "^2.0.2" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "param-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", + "integrity": "sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w==", + "requires": { + "no-case": "^2.2.0" } }, - "tap-parser": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/tap-parser/-/tap-parser-11.0.1.tgz", - "integrity": "sha512-5ow0oyFOnXVSALYdidMX94u0GEjIlgc/BPFYLx0yRh9hb8+cFGNJqJzDJlUqbLOwx8+NBrIbxCWkIQi7555c0w==", - "dev": true, + "parse-filepath": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", + "integrity": "sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==", "requires": { - "events-to-array": "^1.0.1", - "minipass": "^3.1.6", - "tap-yaml": "^1.0.0" + "is-absolute": "^1.0.0", + "map-cache": "^0.2.0", + "path-root": "^0.1.1" } }, - "tap-yaml": { + "parse-node-version": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==" + }, + "parse-passwd": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/tap-yaml/-/tap-yaml-1.0.0.tgz", - "integrity": "sha512-Rxbx4EnrWkYk0/ztcm5u3/VznbyFJpyXO12dDBHKWiDVxy7O2Qw6MRrwO5H6Ww0U5YhRY/4C/VzWmFPhBQc4qQ==", - "dev": true, + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==" + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "path-root": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", + "integrity": "sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==", + "requires": { + "path-root-regex": "^0.1.0" + } + }, + "path-root-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", + "integrity": "sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==" + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "optional": true + }, + "pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==" + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", + "optional": true + }, + "queue": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", + "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", + "requires": { + "inherits": "~2.0.3" + } + }, + "rechoir": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", + "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", + "requires": { + "resolve": "^1.9.0" + } + }, + "relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==" + }, + "resolve": { + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", + "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", + "requires": { + "is-core-module": "^2.11.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "resolve-dir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==", + "requires": { + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "optional": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "optional": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" + }, + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "requires": { - "yaml": "^1.5.0" + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } } }, - "tcompare": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/tcompare/-/tcompare-5.0.7.tgz", - "integrity": "sha512-d9iddt6YYGgyxJw5bjsN7UJUO1kGOtjSlNy/4PoGYAjQS5pAT/hzIoLf1bZCw+uUxRmZJh7Yy1aA7xKVRT9B4w==", - "dev": true, + "sprintf-js": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", + "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "requires": { - "diff": "^4.0.2" + "has-flag": "^4.0.0" } }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" + }, "terser": { - "version": "5.15.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.15.1.tgz", - "integrity": "sha512-K1faMUvpm/FBxjBXud0LWVAGxmvoPbZbfTCYbSgaaYQaIXI3/TdI7a7ZGA73Zrou6Q8Zmz3oeUTsp/dj+ag2Xw==", + "version": "5.17.3", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.17.3.tgz", + "integrity": "sha512-AudpAZKmZHkG9jueayypz4duuCFJMMNGRMwaPvQKWfxKedh8Z2x3OCoDqIIi1xx5+iwx1u6Au8XQcc9Lke65Yg==", "requires": { "@jridgewell/source-map": "^0.3.2", "acorn": "^8.5.0", @@ -10573,23 +1248,6 @@ "source-map-support": "~0.5.20" } }, - "test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "requires": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - } - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true - }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -10598,57 +1256,11 @@ "is-number": "^7.0.0" } }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, - "trivial-deferred": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trivial-deferred/-/trivial-deferred-1.0.1.tgz", - "integrity": "sha512-dagAKX7vaesNNAwOc9Np9C2mJ+7YopF4lk+jE2JML9ta4kZ91Y6UruJNH65bLRYoUROD8EY+Pmi44qQWwXR7sw==", - "dev": true - }, "tslib": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", - "dev": true - }, - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "requires": { - "is-typedarray": "^1.0.0" - } - }, "uglify-js": { "version": "3.16.1", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.16.1.tgz", @@ -10666,50 +1278,6 @@ "requires": { "sprintf-js": "^1.1.1", "util-deprecate": "^1.0.2" - }, - "dependencies": { - "sprintf-js": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", - "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==" - } - } - }, - "unicode-length": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unicode-length/-/unicode-length-2.0.2.tgz", - "integrity": "sha512-Ph/j1VbS3/r77nhoY2WU0GWGjVYOHL3xpKp0y/Eq2e5r0mT/6b649vm7KFO6RdAdrZkYLdxphYVgvODxPB+Ebg==", - "dev": true, - "requires": { - "punycode": "^2.0.0", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - }, - "update-browserslist-db": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.4.tgz", - "integrity": "sha512-jnmO2BEGUjsMOe/Fg9u0oczOe/ppIDZPebzccl1yDWGLFP16Pa1/RM5wEoKYPG2zstNcDuAStejyxsOuKINdGA==", - "dev": true, - "requires": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" } }, "upper-case": { @@ -10717,26 +1285,11 @@ "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", "integrity": "sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==" }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true - }, "v8flags": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz", @@ -10745,129 +1298,18 @@ "homedir-polyfill": "^1.0.1" } }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "requires": { "isexe": "^2.0.0" } }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==", - "dev": true - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true - }, - "yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dev": true, - "requires": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "dependencies": { - "cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - } - } - }, - "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } } } } diff --git a/common/loginpage/build/package.json b/common/loginpage/build/package.json index a4b865616..f29f4c313 100644 --- a/common/loginpage/build/package.json +++ b/common/loginpage/build/package.json @@ -4,7 +4,7 @@ "homepage": "http://www.onlyoffice.com", "private": true, "dependencies": { - "grunt": "^1.5.3", + "grunt": "^1.6.1", "grunt-contrib-clean": "^2.0.1", "grunt-contrib-concat": "^2.1.0", "grunt-contrib-copy": "^1.0.0", @@ -14,6 +14,6 @@ "grunt-terser": "^2.0.0", "grunt-text-replace": "0.4.0", "lodash": "^4.17.20", - "terser": "^5.15.1" + "terser": "^5.17.3" } } From f1c7bbcbf21e79f08caf2b0de71790b07d7f180f Mon Sep 17 00:00:00 2001 From: Maria-Sukhova Date: Mon, 15 May 2023 11:32:14 +0300 Subject: [PATCH 048/298] added translations --- common/loginpage/locale/lo.js | 1 + macos/Localization/hi.xliff | 2 +- win-linux/langs/lo.ts | 92 +++++++++++++++++------------------ 3 files changed, 48 insertions(+), 47 deletions(-) diff --git a/common/loginpage/locale/lo.js b/common/loginpage/locale/lo.js index 999c9ff84..707de4415 100644 --- a/common/loginpage/locale/lo.js +++ b/common/loginpage/locale/lo.js @@ -56,6 +56,7 @@ l10n.lo = { actActivate: 'ເປີດໃຊ້ງານe', actAbout: 'ກ່ຽວກັບ', actSettings: 'ຕັ້ງຄ່າ', + actTemplates: 'ແມ່ແບບ', licKeyHolder: 'ປຸ່ມປ້ອນຂໍ້ມູນ', btnActivate: 'ປີດໃຊ້ງານ', licGetLicense: 'ຂໍໃບອະນຸຍາດ', diff --git a/macos/Localization/hi.xliff b/macos/Localization/hi.xliff index 306b66e26..049fc0832 100644 --- a/macos/Localization/hi.xliff +++ b/macos/Localization/hi.xliff @@ -144,7 +144,7 @@ Document %ld.docx - दस्तावेज़ %आईडी.डॉक्स + दस्तावेज़ %आईडी.docx No comment provided by engineer. diff --git a/win-linux/langs/lo.ts b/win-linux/langs/lo.ts index 63b21d28e..6ce4e061b 100644 --- a/win-linux/langs/lo.ts +++ b/win-linux/langs/lo.ts @@ -95,7 +95,7 @@ Open Document - ເປີດເອກະສານ + ເປີດເອກະສານ @@ -179,7 +179,7 @@ There are no printers available - + ບໍ່ມີເຄື່ອງພິມທີ່ມີຢູ່ @@ -292,7 +292,7 @@ Macro-enabled Presentation File (*.pptm) - + ການນຳສະເໜີທີ່ເປີດໃຊ້ Macro (*.pptm) @@ -307,7 +307,7 @@ Macro-enabled spreadsheet template (*.xltm) - + ແມ່ແບບສະເປຣດຊີດທີ່ເປີດໃຊ້ Macro (*.xltm) @@ -352,7 +352,7 @@ JPG Image (*.jpg *.jpeg) - + ຮູບພາບ JPG (*.jpg *.jpeg) @@ -425,7 +425,7 @@ All supported files - + ໄຟລ໌ທີ່ຮອງຮັບທັງໝົດ @@ -463,7 +463,7 @@ Select Folder - + ເລືອກໂຟນເດີ @@ -472,42 +472,42 @@ File format not supported. - ຮູບແບບເອກະສານບໍ່ຮອງຮັບ. + ຮູບແບບເອກະສານບໍ່ຮອງຮັບ. %1 doesn't exists!<br>Remove file from the list? - ບໍ່ມີ. ມັນອາດຈະຖືກປ່ຽນຊື່, ຍ້າຍຫລືລຶບ.<br>ທ່ານຕ້ອງການທີ່ຈະເອົາໄຟລ໌ນັ້ນອອກຈາກບັນຊີບໍ? + ບໍ່ມີ. ມັນອາດຈະຖືກປ່ຽນຊື່, ຍ້າຍຫລືລຶບ.<br>ທ່ານຕ້ອງການທີ່ຈະເອົາໄຟລ໌ນັ້ນອອກຈາກບັນຊີບໍ? Document must be saved firstly. - ເອກະສານຕ້ອງໄດ້ເກັບໄວ້ກ່ອນ. + ເອກະສານຕ້ອງໄດ້ເກັບໄວ້ກ່ອນ. Document must be saved to continue.<br>Save the document? - ເອກະສານຕ້ອງຖືກບັນທຶກເພື່ອສືບຕໍ່.<br>ບັນທຶກເອກະສານບໍ່? + ເອກະສານຕ້ອງຖືກບັນທຶກເພື່ອສືບຕໍ່.<br>ບັນທຶກເອກະສານບໍ່? There are no printers available - + ບໍ່ມີເຄື່ອງພິມທີ່ມີຢູ່ Print Document - ພິມເອກະສານ + ພິມເອກະສານ Sign Up - ສ້າງຈຸດເຊື່ອມຕໍ່ + ສ້າງຈຸດເຊື່ອມຕໍ່ %1 is modified.<br>Do you want to keep changes? - %1 ໄດ້ຖືກແກ້ໄຂແລ້ວ.<br>ທ່ານຕ້ອງການທີ່ຈະບັນທຶກການປ່ຽນແປງ? + %1 ໄດ້ຖືກແກ້ໄຂແລ້ວ.<br>ທ່ານຕ້ອງການທີ່ຈະບັນທຶກການປ່ຽນແປງ? @@ -569,23 +569,23 @@ This folder configuration does not allow for updates! The folder name should be: - + ການຕັ້ງຄ່າໂຟນເດີນີ້ບໍ່ອະນຸຍາດໃຫ້ອັບເດດ! ຊື່ໂຟນເດີຄວນຈະເປັນ: A new version of %1 is available! - + ເວີຊັນໃໝ່ຂອງ %1 ມີໃຫ້ແລ້ວ! %1 %2 is now available (you have %3). Would you like to download it now? - + %1 %2 ມີໃຫ້ແລ້ວ (ທ່ານມີ %3). ທ່ານຕ້ອງການດາວໂຫຼດມັນດຽວນີ້ບໍ? %1 %2 is now downloaded (you have %3). Would you like to install it now? - + %1 %2 ຖືກດາວໂຫຼດແລ້ວ (ທ່ານມີ %3). ທ່ານຕ້ອງການຕິດຕັ້ງມັນດຽວນີ້ບໍ? @@ -613,133 +613,133 @@ XML File (*.xml) - + ໄຟລ໌ XML Access to file '%1' is denied! - + ການເຂົ້າເຖິງໄຟລ໌ '%1' ຖືກປະຕິເສດ! Read only - + ອ່ານ​ຢ່າງ​ດຽວ Skip this version - + ຂ້າມເວີຊັ້ນນີ້ Remind me later - + ເຕືອນຂ້ອຍໃນພາຍຫຼັງ Install update - + ຕິດຕັ້ງອັບເດດ Install on Next Start - + ຕິດຕັ້ງໃນການເປີດຄັ້ງຕໍ່ໄປ Save and Restart Now - + ບັນທຶກ ແລະຣີສະຕາດດຽວນີ້ Save and Install Now - + ບັນທຶກແລະຕິດຕັ້ງດຽວນີ້ Download update - + ດາວໂຫລດອັບເດດ Software Update - + ອັບເດດຊອບແວ Release notes - + ບັນທຶກການປັບປຸງ An error occurred while check updates: Update Service not found! - + ມີຂໍ້ຜິດພາດເກີດຂຶ້ນໃນຂະນະທີ່ກວດສອບການອັບເດດ: ບໍ່ພົບບໍລິການອັບເດດ! An error occurred while loading updates: Update Service not found! - + ເກີດຄວາມຜິດພາດໃນລະຫວ່າງການໂຫຼດອັບເດດ: ບໍ່ພົບບໍລິການອັບເດດ! An error occurred while unzip updates: Update Service not found! - + ມີຂໍ້ຜິດພາດເກີດຂຶ້ນໃນຂະນະທີ່ unzip ອັບເດດ: ບໍ່ພົບບໍລິການອັບເດດ! An error occurred while start install updates! - + ເກີດຄວາມຜິດພາດຂຶ້ນໃນຂະນະທີ່ ເລີ່ມຕິດຕັ້ງ ອັບເດດ! An error occurred while start replacing files: Update Service not found! - + ເກີດຄວາມຜິດພາດຂຶ້ນໃນຂະນະທີ່ເລີ່ມປ່ຽນໄຟລ໌: ບໍ່ພົບບໍລິການອັບເດດ! Cancel - ຍົກເລີກ + ຍົກເລີກ Yes - ແມ່ນແລ້ວ + ແມ່ນແລ້ວ No - ບໍ່ + ບໍ່ OK - ບໍ່ + ບໍ່ Skip - + ຂ້າມ Buy Now - + ຊື້​ດຽວ​ນີ້ Activate - + ເປີດໃຊ້ Continue - + ສືບຕໍ່ An error occurred while opening the portal:<br>%1 - + ເກີດຄວາມຜິດພາດຂຶ້ນໃນຂະນະທີ່ເປີດປະຕູ:< br >%1 @@ -747,7 +747,7 @@ &OK - &ຕົກລົງ + &ຕົກລົງ From 371c0d232d72b23e96f0a130159f8833ed3e8d89 Mon Sep 17 00:00:00 2001 From: Maria-Sukhova Date: Tue, 16 May 2023 11:05:14 +0300 Subject: [PATCH 049/298] edited hi --- macos/Localization/hi.xliff | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/macos/Localization/hi.xliff b/macos/Localization/hi.xliff index 049fc0832..003374acf 100644 --- a/macos/Localization/hi.xliff +++ b/macos/Localization/hi.xliff @@ -294,7 +294,7 @@ Presentation %ld.pptx - प्रस्तुति %आईडी.पीपीटीएक्स + प्रस्तुति %आईडी.pptx No comment provided by engineer. @@ -329,7 +329,7 @@ Spreadsheet %ld.xlsx - स्प्रेडशीट %आईडी.एक्सएलएसएक्स + स्प्रेडशीट %आईडी.xlsx No comment provided by engineer. From 5e8601725ee5493bd07c348efd327d48f79fef0a Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Thu, 25 May 2023 08:29:41 +0300 Subject: [PATCH 050/298] [linux] debug after merge --- win-linux/extras/update-daemon/src/classes/csvcmanager.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/win-linux/extras/update-daemon/src/classes/csvcmanager.cpp b/win-linux/extras/update-daemon/src/classes/csvcmanager.cpp index b2fb27d0f..ff303c6d9 100644 --- a/win-linux/extras/update-daemon/src/classes/csvcmanager.cpp +++ b/win-linux/extras/update-daemon/src/classes/csvcmanager.cpp @@ -172,8 +172,8 @@ void CSvcManager::init() case MSG_LoadUpdates: { m_downloadMode = Mode::DOWNLOAD_UPDATES; if (m_pDownloader) { - wstring ext = (params[2] == TEXT("iss")) ? TEXT(".exe") : - (params[2] == TEXT("msi")) ? TEXT(".msi") : TEXT(".zip"); + tstring ext = (params[2] == TEXT("iss")) ? TEXT(".exe") : + (params[2] == TEXT("msi")) ? TEXT(".msi") : ARCHIVE_EXT; m_pDownloader->downloadFile(params[1], generateTmpFileName(ext)); } NS_Logger::WriteLog(TEXT("Received MSG_LoadUpdates, URL: ") + params[1]); From 62997e8c8377300fb90c091398d74b0fde82926e Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Sat, 10 Jun 2023 23:20:48 +0300 Subject: [PATCH 051/298] [win-nix] keep custom path to web-apps help --- win-linux/src/utils.cpp | 10 ++++++++-- win-linux/src/windows/cmainwindow.cpp | 22 ++++++++++++++++++++++ 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/win-linux/src/utils.cpp b/win-linux/src/utils.cpp index dd8a8d2e4..88e91f535 100644 --- a/win-linux/src/utils.cpp +++ b/win-linux/src/utils.cpp @@ -158,10 +158,16 @@ namespace EditorJSVariables { #endif if ( InputArgs::contains(L"--help-url") ) vars_object["helpUrl"] = QUrl(QString::fromStdWString(InputArgs::argument_value(L"--help-url"))).toString(); + else { + GET_REGISTRY_USER(_reg_user) + + if ( _reg_user.contains("helpUrl") ) + vars_object["helpUrl"] = _reg_user.value("helpUrl").toString(); #ifdef URL_WEBAPPS_HELP - else if ( !QString(URL_WEBAPPS_HELP).isEmpty() ) - vars_object["helpUrl"] = URL_WEBAPPS_HELP; + else if ( !QString(URL_WEBAPPS_HELP).isEmpty() ) + vars_object["helpUrl"] = URL_WEBAPPS_HELP; #endif + } vars_object["defaultPrinterName"] = QPrinterInfo::defaultPrinterName(); } diff --git a/win-linux/src/windows/cmainwindow.cpp b/win-linux/src/windows/cmainwindow.cpp index f909c2dfb..05969de7d 100644 --- a/win-linux/src/windows/cmainwindow.cpp +++ b/win-linux/src/windows/cmainwindow.cpp @@ -1249,6 +1249,28 @@ void CMainWindow::onKeyDown(void * eventData) } } break; + case VK_F1: + if ( _is_ctrl && _is_shift ) { + GET_REGISTRY_USER(reg_user) + + CFileDialogWrapper _dlg(this); + QString _dir = _dlg.selectFolder(reg_user.contains("helpUrl") ? + reg_user.value("helpUrl").toString() : Utils::lastPath(LOCAL_PATH_OPEN)); + + if ( !_dir.isEmpty() ) { + QString _path = _dir + "/apps/documenteditor/main/resources/help/en/Contents.json"; + if( QFileInfo::exists(_path) ) { + reg_user.setValue("helpUrl", _dir + "/apps"); + EditorJSVariables::setVariable("helpUrl", _dir + "/apps"); + EditorJSVariables::apply(); + + CMessage::error(TOP_NATIVE_WINDOW_HANDLE, "Successfully"); + } else { + CMessage::error(TOP_NATIVE_WINDOW_HANDLE, "Failed"); + } + } + } + break; } } From 2442e462897def3e48984da890af545451aea9f1 Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Mon, 12 Jun 2023 01:38:03 +0300 Subject: [PATCH 052/298] [macos] option to keep custom path for web-apps help --- .../Common/ASCCommonViewController.mm | 43 ++++++++++++++----- .../Code/Utils/ASCEditorJSVariables.mm | 14 ++++-- 2 files changed, 43 insertions(+), 14 deletions(-) diff --git a/macos/ONLYOFFICE/Code/Controllers/Common/ASCCommonViewController.mm b/macos/ONLYOFFICE/Code/Controllers/Common/ASCCommonViewController.mm index c1082447a..269bf71dc 100644 --- a/macos/ONLYOFFICE/Code/Controllers/Common/ASCCommonViewController.mm +++ b/macos/ONLYOFFICE/Code/Controllers/Common/ASCCommonViewController.mm @@ -70,7 +70,7 @@ #import "ASCLinguist.h" #import "ASCThemesController.h" #import "ASCEditorJSVariables.h" - +#import #define rootTabId @"1CEF624D-9FF3-432B-9967-61361B5BFE8B" @@ -885,15 +885,38 @@ - (void)onCEFKeyDown:(NSNotification *)notification { NSValue * eventData = params[@"data"]; if (eventData) { -// NSEditorApi::CAscKeyboardDown * pData = (NSEditorApi::CAscKeyboardDown *)[eventData pointerValue]; -// -// int keyCode = pData->get_KeyCode(); -// bool isCtrl = pData->get_IsCtrl(); -// BOOL isCommand = pData->get_IsCommandMac(); -// -// if(isCtrl && keyCode == kVK_ANSI_W) { -// [self tabs:self.tabsControl willRemovedTab:[self.tabsControl selectedTab]]; -// } + NSEditorApi::CAscKeyboardDown * pData = (NSEditorApi::CAscKeyboardDown *)[eventData pointerValue]; + + if ( pData->get_KeyCode() == 112 /*kVK_F1*/ && pData->get_IsShift() && pData->get_IsCtrl() ) { + NSOpenPanel * openPanel = [NSOpenPanel openPanel]; + + openPanel.canChooseDirectories = YES; + openPanel.allowsMultipleSelection = NO; + openPanel.canChooseFiles = NO; + openPanel.allowedFileTypes = [ASCConstants images]; +// openPanel.directoryURL = [NSURL fileURLWithPath:directory]; + + [openPanel beginSheetModalForWindow:[NSApp mainWindow] completionHandler:^(NSInteger result){ + [openPanel orderOut:self]; + + if (result == NSFileHandlingPanelOKButton) { + NSString * pathToHelp = [[[openPanel directoryURL] path] stringByAppendingString: @"/apps"]; + NSString * pathContents = [pathToHelp stringByAppendingString:@"/documenteditor/main/resources/help/en/Contents.json"]; + + NSAlert * alert = [[NSAlert alloc] init]; + if ( [[NSFileManager defaultManager] fileExistsAtPath:pathContents] ) { + [[NSUserDefaults standardUserDefaults] setValue:pathToHelp forKey:@"helpUrl"]; + [[ASCEditorJSVariables instance] setVariable:@"helpUrl" withString:pathToHelp]; + [[ASCEditorJSVariables instance] apply]; + + [alert setMessageText:@"Successfully"]; + } else { + [alert setMessageText:@"Failed"]; + } + [alert runModal]; + } + }]; + } } } } diff --git a/macos/ONLYOFFICE/Code/Utils/ASCEditorJSVariables.mm b/macos/ONLYOFFICE/Code/Utils/ASCEditorJSVariables.mm index 3144f260f..5e4ed69c4 100644 --- a/macos/ONLYOFFICE/Code/Utils/ASCEditorJSVariables.mm +++ b/macos/ONLYOFFICE/Code/Utils/ASCEditorJSVariables.mm @@ -69,12 +69,18 @@ - (id)init { _jsVariables = [NSMutableDictionary dictionary]; _urlParams = [NSMutableDictionary dictionary]; + NSString * url = [[NSUserDefaults standardUserDefaults] valueForKey:@"helpUrl"]; #ifdef URL_WEBAPPS_HELP - NSString * url = URL_WEBAPPS_HELP; - NSLog(@"set web-apps help url %@", URL_WEBAPPS_HELP); - if (url && [url length]) - [_jsVariables setValue:URL_WEBAPPS_HELP forKey:@"helpUrl"]; + if ( url == nil || url.length == 0 ) { + url = URL_WEBAPPS_HELP; + } #endif + + if (url && [url length]) { + [_jsVariables setValue:url forKey:@"helpUrl"]; + NSLog(@"set web-apps help url %@", url); + } + [self setParameter:@"lang" withString:[ASCLinguist appLanguageCode]]; } From 35630e7465d0a0f02c15ca650f74d1466963689a Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Mon, 12 Jun 2023 12:24:48 +0300 Subject: [PATCH 053/298] [linux] debug --- win-linux/src/defines.h | 1 + 1 file changed, 1 insertion(+) diff --git a/win-linux/src/defines.h b/win-linux/src/defines.h index 727f2ac2a..4dc83edb2 100644 --- a/win-linux/src/defines.h +++ b/win-linux/src/defines.h @@ -117,6 +117,7 @@ typedef unsigned char BYTE; #define WSTR(str) TO_WSTR(str) #ifdef __linux +# define VK_F1 0x70 # define VK_F4 0x73 # define VK_TAB 0x09 #endif From dc37f877bef2334c26613dafb7d3a513be6d2e0b Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Mon, 12 Jun 2023 15:41:52 +0300 Subject: [PATCH 054/298] [win-linux] fix bug 44938, 61871 --- win-linux/res/styles/editor.qss | 2 +- win-linux/res/styles/styles.qss | 2 +- win-linux/res/styles/tabbar.qss | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) mode change 100755 => 100644 win-linux/res/styles/editor.qss diff --git a/win-linux/res/styles/editor.qss b/win-linux/res/styles/editor.qss old mode 100755 new mode 100644 index 2cc05e7c8..846cf471a --- a/win-linux/res/styles/editor.qss +++ b/win-linux/res/styles/editor.qss @@ -1,6 +1,6 @@ #mainPanel {background-color: %1;} #box-title-tools {background-color: %1;} -#box-title-tools QLabel {font-family: "Helvetica Neue";} +#box-title-tools QLabel {font-family: "Arial", "Helvetica", "Helvetica Neue", sans-serif;} #labelTitle {color: #444; font-weight: bold;} #iconuser {color: %1; background: #d9ffffff; font-size: 12px;} QPushButton[act=tool]:hover {background-color: rgba(0,0,0,20%);} diff --git a/win-linux/res/styles/styles.qss b/win-linux/res/styles/styles.qss index 367d866e8..28a17e0e0 100644 --- a/win-linux/res/styles/styles.qss +++ b/win-linux/res/styles/styles.qss @@ -346,7 +346,7 @@ CDownloadWidget[hdpi] QLabel#labelName { padding-left: 10px; padding-right: 10px; padding-top: 0px; padding-bottom: 0px; color: #373737; - font-family: "Libra Sans"; + font-family: "Arial", "Helvetica", "Helvetica Neue", sans-serif; font-size: 11px; font-weight: normal; qproperty-alignment: AlignCenter; diff --git a/win-linux/res/styles/tabbar.qss b/win-linux/res/styles/tabbar.qss index 0657fdf41..ed787650b 100644 --- a/win-linux/res/styles/tabbar.qss +++ b/win-linux/res/styles/tabbar.qss @@ -1,7 +1,7 @@ QTabWidget::pane {background-color: #f1f1f1; border: none; padding: 0px;} QLabel[class=tab-icon] {padding:0 0 2px 4px;} -QTabBar {font-size: 11px; background-color: #f1f1f1;} +QTabBar {font-size: 11px; font-family: "Arial", "Helvetica", "Helvetica Neue", sans-serif; background-color: #f1f1f1;} QTabBar::tear {width: 0px;} QTabBar::scroller {width: 0px;} QTabBar::tab {min-width: 41px; max-width: 135px; width: 135px; height: 28px; background-color: #f1f1f1; border: 0 none; From e794b56e22f9bc0ea4a43b79e43152e3203c2328 Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Wed, 14 Jun 2023 15:09:26 +0300 Subject: [PATCH 055/298] [win-nix] fix bug 62181 --- win-linux/src/cascapplicationmanagerwrapper.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/win-linux/src/cascapplicationmanagerwrapper.cpp b/win-linux/src/cascapplicationmanagerwrapper.cpp index f8f8c3a96..8db0997cc 100644 --- a/win-linux/src/cascapplicationmanagerwrapper.cpp +++ b/win-linux/src/cascapplicationmanagerwrapper.cpp @@ -316,6 +316,9 @@ bool CAscApplicationManagerWrapper::processCommonEvent(NSEditorApi::CAscCefMenuE if ( !(cmd.find(L"go:folder") == std::wstring::npos) ) { if ( pData->get_Param() == L"offline" ) {} else { + if ( !m_pMainWindow || !m_pMainWindow->isVisible() ) + gotoMainWindow(); + mainWindow()->onFileLocation(-1, QString::fromStdWString(pData->get_Param())); #ifdef Q_OS_LINUX mainWindow()->bringToTop(); From 9e3a2d7288c732a057d79eec30dad5849d10bfa1 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Wed, 14 Jun 2023 16:15:05 +0300 Subject: [PATCH 056/298] [win] refactoring CWin11Snap --- win-linux/src/windows/platform_win/csnap.cpp | 15 ++++++--------- win-linux/src/windows/platform_win/csnap.h | 1 - 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/win-linux/src/windows/platform_win/csnap.cpp b/win-linux/src/windows/platform_win/csnap.cpp index fb93a6133..06b1da7e1 100644 --- a/win-linux/src/windows/platform_win/csnap.cpp +++ b/win-linux/src/windows/platform_win/csnap.cpp @@ -12,11 +12,12 @@ CWin11Snap::CWin11Snap(QPushButton *btn) : + QObject(btn), m_pBtn(btn), m_pTopLevelWidget(nullptr), m_allowedChangeSize(false) { - m_hInstance = GetModuleHandle(nullptr); + HINSTANCE m_hInstance = GetModuleHandle(nullptr); WNDCLASSEX wcx{sizeof(WNDCLASSEX)}; wcx.style = CS_HREDRAW | CS_VREDRAW; wcx.hInstance = m_hInstance; @@ -33,7 +34,7 @@ CWin11Snap::CWin11Snap(QPushButton *btn) : m_hWnd = CreateWindowEx( WS_EX_TOOLWINDOW | WS_EX_LAYERED, WINDOW_CLASS_NAME, - L"", + L"CWin11SnapWindow", WS_MAXIMIZEBOX | WS_THICKFRAME, pos.x(), pos.y(), size.width(), size.height(), nullptr, @@ -46,10 +47,6 @@ CWin11Snap::CWin11Snap(QPushButton *btn) : m_pTopLevelWidget = m_pBtn->nativeParentWidget(); m_pBtn->installEventFilter(this); m_pBtn->setAttribute(Qt::WA_Hover); - connect(m_pBtn, &QPushButton::destroyed, this, [=](){ - DestroyWindow(m_hWnd); - this->deleteLater(); - }); m_pTimer = new QTimer(this); m_pTimer->setSingleShot(true); m_pTimer->setInterval(DELAY); @@ -58,7 +55,7 @@ CWin11Snap::CWin11Snap(QPushButton *btn) : CWin11Snap::~CWin11Snap() { - + DestroyWindow(m_hWnd); } void CWin11Snap::show() @@ -109,8 +106,8 @@ LRESULT CWin11Snap::WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) int(rect.bottom - rect.top)); } ShowWindow(hWnd, SW_HIDE); + window->m_allowedChangeSize = false; } - window->m_allowedChangeSize = false; break; case WM_NCMOUSELEAVE: { @@ -120,7 +117,7 @@ LRESULT CWin11Snap::WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) } case WM_NCLBUTTONDOWN: { - emit window->m_pBtn->click(); + window->m_pBtn->click(); SetLayeredWindowAttributes(hWnd, 0, 0x00, LWA_ALPHA); ShowWindow(hWnd, SW_HIDE); return TRUE; diff --git a/win-linux/src/windows/platform_win/csnap.h b/win-linux/src/windows/platform_win/csnap.h index 7376ec911..6d4f995ad 100644 --- a/win-linux/src/windows/platform_win/csnap.h +++ b/win-linux/src/windows/platform_win/csnap.h @@ -23,7 +23,6 @@ class CWin11Snap : public QObject QWidget *m_pTopLevelWidget; QTimer *m_pTimer; HWND m_hWnd; - HINSTANCE m_hInstance; bool m_allowedChangeSize; }; From de20449b4ea343ddb24f7d08a9de30b7c8fb7d0d Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Wed, 14 Jun 2023 16:15:57 +0300 Subject: [PATCH 057/298] [win] fix behavior after moving between monitors --- win-linux/src/windows/platform_win/csnap.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/win-linux/src/windows/platform_win/csnap.cpp b/win-linux/src/windows/platform_win/csnap.cpp index 06b1da7e1..b4bf93429 100644 --- a/win-linux/src/windows/platform_win/csnap.cpp +++ b/win-linux/src/windows/platform_win/csnap.cpp @@ -110,9 +110,12 @@ LRESULT CWin11Snap::WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) } break; + case WM_SETFOCUS: + window->m_allowedChangeSize = false; + break; + case WM_NCMOUSELEAVE: { SetLayeredWindowAttributes(hWnd, 0, 0x00, LWA_ALPHA); - window->m_allowedChangeSize = true; break; } @@ -132,6 +135,8 @@ LRESULT CWin11Snap::WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) } case WM_NCHITTEST: { + if (!window->m_allowedChangeSize) + window->m_allowedChangeSize = true; return HTMAXBUTTON; } From 11f4165f53ab110f273eaf20597b14484162126f Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Wed, 14 Jun 2023 16:17:16 +0300 Subject: [PATCH 058/298] [win] fix bug 62588 --- win-linux/src/windows/platform_win/csnap.cpp | 20 ++++++++++++++++++++ win-linux/src/windows/platform_win/csnap.h | 4 ++++ 2 files changed, 24 insertions(+) diff --git a/win-linux/src/windows/platform_win/csnap.cpp b/win-linux/src/windows/platform_win/csnap.cpp index b4bf93429..4b0b0b529 100644 --- a/win-linux/src/windows/platform_win/csnap.cpp +++ b/win-linux/src/windows/platform_win/csnap.cpp @@ -3,6 +3,7 @@ #include #define WINDOW_CLASS_NAME L"CWin11Snap" +#define SNAP_POPUP_NAME L"PopupHost" #define DELAY 500 #define ALPHA 0x30 #define COLOR 0x00ffffff @@ -11,6 +12,8 @@ #endif +QMap CWin11Snap::m_hookMap = QMap(); + CWin11Snap::CWin11Snap(QPushButton *btn) : QObject(btn), m_pBtn(btn), @@ -51,10 +54,16 @@ CWin11Snap::CWin11Snap(QPushButton *btn) : m_pTimer->setSingleShot(true); m_pTimer->setInterval(DELAY); connect(m_pTimer, &QTimer::timeout, this, &CWin11Snap::show); + m_snapPopupEventHook = SetWinEventHook(EVENT_OBJECT_DESTROY, EVENT_OBJECT_DESTROY, NULL, snapPopupEventProc, + 0, 0, WINEVENT_OUTOFCONTEXT | WINEVENT_SKIPOWNPROCESS); + m_hookMap[m_snapPopupEventHook] = m_hWnd; } CWin11Snap::~CWin11Snap() { + if (m_hookMap.contains(m_snapPopupEventHook)) + m_hookMap.remove(m_snapPopupEventHook); + UnhookWinEvent(m_snapPopupEventHook); DestroyWindow(m_hWnd); } @@ -149,3 +158,14 @@ LRESULT CWin11Snap::WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) } return DefWindowProc(hWnd, msg, wParam, lParam); } + +void CWin11Snap::snapPopupEventProc(HWINEVENTHOOK hook, DWORD event, HWND hwnd, LONG, LONG , DWORD, DWORD) +{ + if (event == EVENT_OBJECT_DESTROY) { + const int len = sizeof(SNAP_POPUP_NAME)/sizeof(WCHAR); + WCHAR title[len + 1] = {0}; + GetWindowText(hwnd, title, len); + if (lstrcmpi(title, SNAP_POPUP_NAME) == 0 && m_hookMap.contains(hook)) + ShowWindow(m_hookMap[hook], SW_HIDE); + } +} diff --git a/win-linux/src/windows/platform_win/csnap.h b/win-linux/src/windows/platform_win/csnap.h index 6d4f995ad..63a698f40 100644 --- a/win-linux/src/windows/platform_win/csnap.h +++ b/win-linux/src/windows/platform_win/csnap.h @@ -5,6 +5,7 @@ #include #include #include +#include #include @@ -19,6 +20,9 @@ class CWin11Snap : public QObject void show(); virtual bool eventFilter(QObject*, QEvent*) final; static LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam); + static void CALLBACK snapPopupEventProc(HWINEVENTHOOK hook, DWORD event, HWND hwnd, LONG, LONG, DWORD, DWORD); + static QMap m_hookMap; + HWINEVENTHOOK m_snapPopupEventHook; QPushButton *m_pBtn; QWidget *m_pTopLevelWidget; QTimer *m_pTimer; From 6c0beaabbabc0aac6ac9341f3cf61277282f42ef Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Thu, 15 Jun 2023 12:15:41 +0300 Subject: [PATCH 059/298] [start page] fix theme duplicate --- common/loginpage/src/panelsettings.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/common/loginpage/src/panelsettings.js b/common/loginpage/src/panelsettings.js index 03568fe7a..b7461d0dd 100644 --- a/common/loginpage/src/panelsettings.js +++ b/common/loginpage/src/panelsettings.js @@ -459,9 +459,6 @@ {'theme-dark': utils.Lang.settOptThemeDark}, {'theme-contrast-dark': utils.Lang.settOptThemeContrastDark}]; - if ( uitheme.is_system_theme_avalaible() ) - _themes.unshift({'theme-system': utils.Lang.settOptThemeSystem}); - const nativevars = window.RendererProcessVariable; if ( nativevars.theme && nativevars.theme.system == 'disabled' ) _themes.shift(); From 43759b0c6657d9500f2040b45dafda6ccd26caf1 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Fri, 16 Jun 2023 10:58:51 +0300 Subject: [PATCH 060/298] [win-linux] debug after merge --- .../update-daemon/src/classes/csvcmanager.cpp | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/win-linux/extras/update-daemon/src/classes/csvcmanager.cpp b/win-linux/extras/update-daemon/src/classes/csvcmanager.cpp index 1ec7c3db5..23e6ea4f1 100644 --- a/win-linux/extras/update-daemon/src/classes/csvcmanager.cpp +++ b/win-linux/extras/update-daemon/src/classes/csvcmanager.cpp @@ -49,6 +49,7 @@ # define APP_HELPER L"/editors_helper.exe" # define DAEMON_NAME L"/updatesvc.exe" # define DAEMON_NAME_OLD L"/~updatesvc.exe" +# define RESTART_BATCH L"/svcrestart.bat" # define ARCHIVE_EXT TEXT(".zip") # define ARCHIVE_PATTERN TEXT("*.zip") # define sleep(a) Sleep(a) @@ -68,13 +69,7 @@ #define UPDATE_PATH TEXT("/" REG_APP_NAME "Updates") #define BACKUP_PATH TEXT("/" REG_APP_NAME "Backup") -#define APP_LAUNCH_NAME L"/DesktopEditors.exe" -#define APP_LAUNCH_NAME2 L"/editors.exe" -#define APP_HELPER L"/editors_helper.exe" -#define DAEMON_NAME L"/updatesvc.exe" -#define DAEMON_NAME_OLD L"/~updatesvc.exe" -#define RESTART_BATCH L"/svcrestart.bat" -#define SUCCES_UNPACKED L"/success_unpacked.txt" +#define SUCCES_UNPACKED TEXT("/success_unpacked.txt") using std::vector; @@ -360,8 +355,8 @@ void CSvcManager::clearTempFiles(const tstring &prefix, const tstring &except) if (NS_File::fileExists(NS_File::appPath() + RESTART_BATCH)) NS_File::removeFile(NS_File::appPath() + RESTART_BATCH); #endif - list filesList; - wstring _error; + tstring _error; + list filesList; if (!NS_File::GetFilesList(NS_File::tempPath(), &filesList, _error, true)) { NS_Logger::WriteLog(DEFAULT_ERROR_MESSAGE + TEXT(" ") + _error); return; From fadb8db7967efa247c3568725840ddf02c2c351c Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Sat, 17 Jun 2023 00:50:18 +0300 Subject: [PATCH 061/298] [win-nix] fix 3dparty licenses --- common/package/license/3dparty/3DPARTYLICENSE | 23 ------------------- 1 file changed, 23 deletions(-) diff --git a/common/package/license/3dparty/3DPARTYLICENSE b/common/package/license/3dparty/3DPARTYLICENSE index 502fa41f2..9ecf833b4 100644 --- a/common/package/license/3dparty/3DPARTYLICENSE +++ b/common/package/license/3dparty/3DPARTYLICENSE @@ -32,29 +32,6 @@ ver 3.2526.1359.0 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -WinSparkle -Version 0.5 - -Copyright (c) 2009-2016 Vaclav Slavik - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - SingleApplication The MIT License (MIT) From 6c920fd44511e5ce320a106efa61c99fb71a1f68 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Wed, 21 Jun 2023 09:56:33 +0300 Subject: [PATCH 062/298] [win-linux] remove unused code and refactoring --- win-linux/src/components/asctabwidget.cpp | 25 ++--------------------- win-linux/src/components/asctabwidget.h | 3 --- win-linux/src/components/ctabbar.cpp | 1 - win-linux/src/components/ctabbar.h | 2 -- 4 files changed, 2 insertions(+), 29 deletions(-) diff --git a/win-linux/src/components/asctabwidget.cpp b/win-linux/src/components/asctabwidget.cpp index ab3e8c184..3c2152378 100644 --- a/win-linux/src/components/asctabwidget.cpp +++ b/win-linux/src/components/asctabwidget.cpp @@ -32,9 +32,6 @@ #include "components/asctabwidget.h" #include - -#include - #include #include #include @@ -42,7 +39,6 @@ #include #include #include - #include "ctabstyle.h" #include "casctabdata.h" #include "common/Types.h" @@ -51,7 +47,6 @@ #include "cfilechecker.h" #include "components/canimatedicon.h" #include "ceditortools.h" - #include "cascapplicationmanagerwrapper.h" #include "ctabundockevent.h" #include "OfficeFileFormats.h" @@ -60,8 +55,6 @@ using namespace std; - - /* * * Tab data @@ -178,8 +171,7 @@ CAscTabWidget::CAscTabWidget(QWidget *parent, CTabBar *_pBar) if ( _panel->data()->viewType() == cvwtEditor ) { CTabUndockEvent event(index); - QObject * obj = qobject_cast( - static_cast(&AscAppManager::getInstance())); + QObject * obj = qobject_cast(&AscAppManager::getInstance()); if ( QApplication::sendEvent(obj, &event) && event.isAccepted() ) { _dropedindex = index; *accept = true; @@ -398,8 +390,6 @@ int CAscTabWidget::addPortal(const QString& url, const QString& name, const QStr m_pBar->setTabProperty(tab_index, "ToolTip", _url); m_pBar->setTabTheme(tab_index, CTabBar::LightTab); m_pBar->tabStartLoading(tab_index); - //m_pBar->setCurrentIndex(tab_index); - // updateTabIcon(tabIndexByView(id)); return tab_index; @@ -440,7 +430,6 @@ int CAscTabWidget::addOAuthPortal(const QString& portal, const QString& type, co m_pBar->setTabProperty(tab_index, "ToolTip", portal); m_pBar->setTabTheme(tab_index, CTabBar::LightTab); m_pBar->tabStartLoading(tab_index); - //m_pBar->setCurrentIndex(tab_index); return tab_index; } @@ -460,7 +449,6 @@ int CAscTabWidget::insertPanel(QWidget * panel, int index) m_pBar->insertTab(index, tabdata->title()); //m_pBar->setTabToolTip(tabindex, tabdata->title()); m_pBar->setTabProperty(tabindex, "ToolTip", tabdata->title()); - //m_pBar->setCurrentIndex(tabindex); } return tabindex; @@ -514,7 +502,7 @@ void CAscTabWidget::updateTabIcon(int index) default: tab_type = panel(index)->data()->contentType(); break; } - if ( !isActiveWidget() || !(index == currentIndex()) ) { + if ( !is_active ) { tab_theme = AscAppManager::themes().current().isDark() ? CTabBar::DarkTab : CTabBar::LightTab; } else { switch ( tab_type ) { @@ -534,15 +522,11 @@ void CAscTabWidget::updateTabIcon(int index) break; } } - QString icon_name = is_active ? m_mapTabIcons.at(tab_type).second : m_mapTabIcons.at(tab_type).first; m_pBar->setTabIcon(index, QIcon(icon_name)); -// ((CTabBar *)tabBar())->changeTabTheme(index, _theme); m_pBar->setTabTheme(index, tab_theme); - if ( index == currentIndex() ) { m_pBar->setActiveTabColor(active_tab_color); -// ((CTabBar *)tabBar())->setUseTabCustomPalette( !(tab_type == etPortal || tab_type == etUndefined) ); m_pBar->setTabTextColor(QPalette::Active, AscAppManager::themes().isColorDark(active_tab_color) ? ui_theme.color(CTheme::ColorRole::ecrTextPressed) : ui_theme.color(CTheme::ColorRole::ecrTabSimpleActiveText)); @@ -580,7 +564,6 @@ void CAscTabWidget::reloadTabIcons() * Slots */ - void CAscTabWidget::editorCloseRequest(int index) { panel(index)->data()->close(); @@ -924,13 +907,10 @@ void CAscTabWidget::activate(bool a) this->setProperty("active", a); m_pBar->setProperty("active", a); } - updateTabIcon(currentIndex()); - m_pBar->activate(a); m_pBar->customColors().setCurrentColorGroup(a ? QPalette::Normal : QPalette::Disabled ); m_pBar->update(); - //m_pBar->repaint(); } bool CAscTabWidget::isActiveWidget() @@ -1240,7 +1220,6 @@ void CAscTabWidget::applyUITheme(const std::wstring& theme) { reloadTabIcons(); updateIcons(); -// _tabbar.setTabTextColor(QPalette::Active, AscAppManager::themes().color(theme, CThemes::ColorRole::ecrTextPressed)); m_pBar->setTabTextColor(QPalette::Inactive, AscAppManager::themes().current().color(CTheme::ColorRole::ecrTextNormal)); m_pBar->setUIThemeType(!AscAppManager::themes().current().isDark()); m_pBar->style()->polish(m_pBar); diff --git a/win-linux/src/components/asctabwidget.h b/win-linux/src/components/asctabwidget.h index 1b25c4bf1..879d8a69a 100644 --- a/win-linux/src/components/asctabwidget.h +++ b/win-linux/src/components/asctabwidget.h @@ -34,7 +34,6 @@ #define ASCTABWIDGET #include -//#include #include #include #include "ctabbarwrapper.h" @@ -42,8 +41,6 @@ #include "cscalingwrapper.h" #include "ctabpanel.h" -#include - #define etLocalFile AscEditorType(254) #define etRecoveryFile AscEditorType(253) #define etRecentFile AscEditorType(252) diff --git a/win-linux/src/components/ctabbar.cpp b/win-linux/src/components/ctabbar.cpp index b68dd4372..d88bc74b7 100644 --- a/win-linux/src/components/ctabbar.cpp +++ b/win-linux/src/components/ctabbar.cpp @@ -31,7 +31,6 @@ */ #include "components/ctabbar.h" -//#include "ctabbar_p.h" #include "private/qtabbar_p.h" #include #include diff --git a/win-linux/src/components/ctabbar.h b/win-linux/src/components/ctabbar.h index 6f3b60b84..dcc41d113 100644 --- a/win-linux/src/components/ctabbar.h +++ b/win-linux/src/components/ctabbar.h @@ -41,12 +41,10 @@ #include "cscalingwrapper.h" #include -//class CTabBarPrivate; class CTabBar : public QTabBar, public CScalingWrapper { Q_OBJECT - public: explicit CTabBar(QWidget * parent = nullptr); virtual ~CTabBar(); From d2ef678e1764143ed3e985d0728a6111950c8758 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Wed, 21 Jun 2023 10:20:05 +0300 Subject: [PATCH 063/298] [win-linux] switch from QTabWidget to QStackedWidget --- win-linux/res/styles/tabbar.qss | 3 -- win-linux/src/components/asctabwidget.cpp | 42 ++++++++++++----------- win-linux/src/components/asctabwidget.h | 10 +++--- win-linux/src/windows/cmainwindow.cpp | 2 +- 4 files changed, 27 insertions(+), 30 deletions(-) diff --git a/win-linux/res/styles/tabbar.qss b/win-linux/res/styles/tabbar.qss index ed787650b..81db3c2a4 100644 --- a/win-linux/res/styles/tabbar.qss +++ b/win-linux/res/styles/tabbar.qss @@ -1,5 +1,4 @@ -QTabWidget::pane {background-color: #f1f1f1; border: none; padding: 0px;} QLabel[class=tab-icon] {padding:0 0 2px 4px;} QTabBar {font-size: 11px; font-family: "Arial", "Helvetica", "Helvetica Neue", sans-serif; background-color: #f1f1f1;} QTabBar::tear {width: 0px;} @@ -105,7 +104,6 @@ QTabBar QToolButton[class=tab-close][state=active]:pressed{ #mainPanel[uitheme=theme-dark] QTabBar QToolButton::left-arrow, #mainPanel[uitheme=theme-dark] QTabBar QToolButton::right-arrow {background-color: #606060;} #mainPanel[uitheme=theme-dark] QTabBar QToolButton:pressed {background-color: #606060;} -#mainPanel[uitheme=theme-dark] QTabWidget::pane {background-color: #404040;} #mainPanel[uitheme=theme-dark] QTabBar::tab {background-color: #404040; border-right-color: #505050;} #mainPanel[uitheme=theme-dark] QTabBar::tab:hover {background-color: #555;} #mainPanel[uitheme=theme-dark] QTabBar::tab:selected {background-color: #404040;} @@ -120,7 +118,6 @@ QTabBar QToolButton[class=tab-close][state=active]:pressed{ #mainPanel[uitheme=theme-contrast-dark] QTabBar QToolButton::left-arrow, #mainPanel[uitheme=theme-contrast-dark] QTabBar QToolButton::right-arrow {background-color: #f00;} #mainPanel[uitheme=theme-contrast-dark] QTabBar QToolButton:pressed {background-color: #f00;} -#mainPanel[uitheme=theme-contrast-dark] QTabWidget::pane {background-color: #2a2a2a;} #mainPanel[uitheme=theme-contrast-dark] QTabBar::tab {background-color: #2a2a2a; border-right-color: #414141;} #mainPanel[uitheme=theme-contrast-dark] QTabBar::tab:hover {background-color: #424242;} #mainPanel[uitheme=theme-contrast-dark] QTabBar::tab:selected {background-color: #2a2a2a;} diff --git a/win-linux/src/components/asctabwidget.cpp b/win-linux/src/components/asctabwidget.cpp index 3c2152378..773d5199b 100644 --- a/win-linux/src/components/asctabwidget.cpp +++ b/win-linux/src/components/asctabwidget.cpp @@ -134,7 +134,7 @@ auto panelfromwidget(QWidget * panelwidget) -> CTabPanel * { } CAscTabWidget::CAscTabWidget(QWidget *parent, CTabBar *_pBar) - : QTabWidget(parent) + : QStackedWidget(parent) , CScalingWrapper(parent) , m_dataFullScreen(0) , m_widthParams({{100, 135, 9}, 68, 3, 0, WINDOW_TITLE_MIN_WIDTH, 140, 0}) @@ -143,7 +143,6 @@ CAscTabWidget::CAscTabWidget(QWidget *parent, CTabBar *_pBar) , m_tabIconSize(16, 16) , m_pBar(_pBar) { - QTabWidget::tabBar()->hide(); m_pBar->setObjectName("asc_editors_tabbar"); m_pBar->setTabTextColor(QPalette::Active, QColor(51, 51, 51)); m_pBar->setTabTextColor(QPalette::Inactive, QColor(51, 51, 51)); @@ -152,7 +151,7 @@ CAscTabWidget::CAscTabWidget(QWidget *parent, CTabBar *_pBar) m_pBar->setExpanding(false); m_pBar->setTabsClosable(true); - setIconSize(m_tabIconSize); + m_pBar->setIconSize(m_tabIconSize); setProperty("active", false); setProperty("empty", true); m_pBar->setProperty("active", false); @@ -164,6 +163,9 @@ CAscTabWidget::CAscTabWidget(QWidget *parent, CTabBar *_pBar) setFocusedView(); _dropedindex = -1; }); + QObject::connect(this, &CAscTabWidget::widgetRemoved, this, [=](int index) { + emit editorRemoved(index, count()); + }); QObject::connect(m_pBar, &CTabBar::tabUndock, this, [=](int index, bool * accept) { if (index == _dropedindex) return; @@ -197,7 +199,11 @@ CAscTabWidget::CAscTabWidget(QWidget *parent, CTabBar *_pBar) turnOffAltHints(m_pBar->currentIndex(), index); }); QObject::connect(m_pBar, &CTabBar::tabMoved, this, [=](int from, int to) { - QTabWidget::tabBar()->moveTab(from, to); + if (from < 0 || from >= count() || to < 0 || to >= count() || from == to) + return; + auto wgt = widget(from); + removeWidget(wgt); + insertWidget(to, wgt); }); } @@ -259,7 +265,7 @@ int CAscTabWidget::addEditor(const COpenOptions& opts) data->setChanged(opts.srctype == etRecoveryFile); pView->setData(data); - tab_index = addTab(panelwidget, data->title()); + tab_index = addWidget(panelwidget); m_pBar->addTab(data->title()); //m_pBar->setTabToolTip(tab_index, data->title()); m_pBar->setTabProperty(tab_index, "ToolTip", data->title()); @@ -307,7 +313,7 @@ void CAscTabWidget::closeEditorByIndex(int index, bool checkmodified) int CAscTabWidget::count(int type) const { if ( type < 0 ) - return QTabWidget::count(); + return QStackedWidget::count(); else { int _out(0); for (int i(count()); i-- > 0; ) { @@ -321,7 +327,7 @@ int CAscTabWidget::count(int type) const int CAscTabWidget::count(const wstring& portal, bool exclude) { if ( portal.empty() ) - return QTabWidget::count(); + return QStackedWidget::count(); else { int _out(0); for (int i(count()); i-- > 0; ) { @@ -384,7 +390,7 @@ int CAscTabWidget::addPortal(const QString& url, const QString& name, const QStr int tab_index = -1; - tab_index = insertTab(tab_index, panelwidget, portal); + tab_index = insertWidget(tab_index, panelwidget); m_pBar->insertTab(tab_index, portal); //m_pBar->setTabToolTip(tab_index, _url); m_pBar->setTabProperty(tab_index, "ToolTip", _url); @@ -424,7 +430,7 @@ int CAscTabWidget::addOAuthPortal(const QString& portal, const QString& type, co int tab_index = -1; - tab_index = insertTab(tab_index, panelwidget, _portal); + tab_index = insertWidget(tab_index, panelwidget); m_pBar->insertTab(tab_index, _portal); //m_pBar->setTabToolTip(tab_index, portal); m_pBar->setTabProperty(tab_index, "ToolTip", portal); @@ -445,7 +451,7 @@ int CAscTabWidget::insertPanel(QWidget * panel, int index) QWidget * panelwidget = createTabPanel(this, _panel); - tabindex = insertTab(index, panelwidget, tabdata->title()); + tabindex = insertWidget(index, panelwidget); m_pBar->insertTab(index, tabdata->title()); //m_pBar->setTabToolTip(tabindex, tabdata->title()); m_pBar->setTabProperty(tabindex, "ToolTip", tabdata->title()); @@ -454,14 +460,11 @@ int CAscTabWidget::insertPanel(QWidget * panel, int index) return tabindex; } -void CAscTabWidget::tabInserted(int index) -{ - emit editorInserted(index, count()); -} - -void CAscTabWidget::tabRemoved(int index) +int CAscTabWidget::insertWidget(int index, QWidget* widget) { - emit editorRemoved(index, count()); + int actual_index = QStackedWidget::insertWidget(index, widget); + emit editorInserted(actual_index, count()); + return actual_index; } void CAscTabWidget::setCustomWindowParams(bool iscustom) @@ -1137,7 +1140,7 @@ void CAscTabWidget::setFullScreen(bool apply, int id) _break_demonstration(); e->ignore(); // TODO: associate panel with reporter window and close both simultaneously - QTimer::singleShot(10, [=] {emit tabCloseRequested(m_dataFullScreen->tabindex());}); + QTimer::singleShot(10, [=] {emit m_pBar->tabCloseRequested(m_dataFullScreen->tabindex());}); }); connect((CFullScrWidget*)m_dataFullScreen->parent, &CFullScrWidget::closeRequest, this, [=]() { @@ -1159,7 +1162,6 @@ void CAscTabWidget::updateScalingFactor(double f) double dpi_ratio = scaling(); - setIconSize(m_tabIconSize * dpi_ratio); m_pBar->setIconSize(m_tabIconSize * dpi_ratio); updateIcons(); @@ -1175,7 +1177,7 @@ void CAscTabWidget::updateScalingFactor(double f) void CAscTabWidget::setStyleSheet(const QString& stylesheet) { - QTabWidget::setStyleSheet(stylesheet); + QStackedWidget::setStyleSheet(stylesheet); auto _string_to_color = [](const QString& str) -> QColor { int r = -1, g = -1, b = -1; diff --git a/win-linux/src/components/asctabwidget.h b/win-linux/src/components/asctabwidget.h index 879d8a69a..aee1e4441 100644 --- a/win-linux/src/components/asctabwidget.h +++ b/win-linux/src/components/asctabwidget.h @@ -37,6 +37,7 @@ #include #include #include "ctabbarwrapper.h" +#include #include "qcefview.h" #include "cscalingwrapper.h" #include "ctabpanel.h" @@ -73,7 +74,7 @@ struct COpenOptions { eOpenMode mode = eOpenMode::edit; }; -class CAscTabWidget : public QTabWidget, public CScalingWrapper +class CAscTabWidget : public QStackedWidget, public CScalingWrapper { Q_OBJECT @@ -115,8 +116,6 @@ class CAscTabWidget : public QTabWidget, public CScalingWrapper typedef std::map< int, std::pair > CTabIconSet; - using QTabWidget::tabBar; - private: std::map m_mapDownloads; CFullScreenData * m_dataFullScreen; @@ -148,15 +147,14 @@ class CAscTabWidget : public QTabWidget, public CScalingWrapper void setStyleSheet(const QString&); void applyUITheme(const std::wstring&); - using QTabWidget::count; + using QStackedWidget::count; int count(int type) const; int count(const std::wstring& portal, bool exclude = false); bool hasForPortal(const QString&); void updateScalingFactor(double) override; protected: - void tabInserted(int index) override; - void tabRemoved(int index) override; + int insertWidget(int index, QWidget* widget); void closeEditor(int, bool, bool); public: diff --git a/win-linux/src/windows/cmainwindow.cpp b/win-linux/src/windows/cmainwindow.cpp index 36cab3d9b..86037ac86 100644 --- a/win-linux/src/windows/cmainwindow.cpp +++ b/win-linux/src/windows/cmainwindow.cpp @@ -546,9 +546,9 @@ void CMainWindow::onEditorAllowedClose(int uid) int _index = m_pTabs->tabIndexByView(uid); if ( !(_index < 0) ) { QWidget * _view = m_pTabs->widget(_index); + m_pTabs->removeWidget(_view); _view->deleteLater(); - m_pTabs->removeTab(_index); //m_pTabs->adjustTabsSize(); onTabChanged(m_pTabs->currentIndex()); From 956a1a29a3b5a31336ded02ffaa7b2c03b441f8c Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Wed, 21 Jun 2023 11:12:25 +0300 Subject: [PATCH 064/298] [win-linux] switch from QTabBar to CTabBar --- win-linux/defaults.pri | 2 - win-linux/res/styles/tabbar.qss | 419 ++--- win-linux/src/components/asctabwidget.cpp | 98 +- win-linux/src/components/asctabwidget.h | 4 +- win-linux/src/components/canimatedicon.cpp | 3 +- win-linux/src/components/ctabbar.cpp | 1703 ++++++++++--------- win-linux/src/components/ctabbar.h | 116 +- win-linux/src/components/ctabbarwrapper.cpp | 97 -- win-linux/src/components/ctabbarwrapper.h | 23 - win-linux/src/windows/cmainwindow.cpp | 33 +- win-linux/src/windows/cmainwindow.h | 2 - win-linux/src/windows/cwindowbase.cpp | 6 +- 12 files changed, 1154 insertions(+), 1352 deletions(-) delete mode 100644 win-linux/src/components/ctabbarwrapper.cpp delete mode 100644 win-linux/src/components/ctabbarwrapper.h diff --git a/win-linux/defaults.pri b/win-linux/defaults.pri index d6b1f0dc3..1188b0428 100644 --- a/win-linux/defaults.pri +++ b/win-linux/defaults.pri @@ -71,7 +71,6 @@ HEADERS += \ $$PWD/src/windows/ceditorwindow_p.h \ $$PWD/src/windows/cpresenterwindow.h \ $$PWD/src/components/asctabwidget.h \ - $$PWD/src/components/ctabbarwrapper.h \ $$PWD/src/components/cdownloadwidget.h \ $$PWD/src/components/cpushbutton.h \ $$PWD/src/components/cfiledialog.h \ @@ -122,7 +121,6 @@ SOURCES += \ $$PWD/src/components/cpushbutton.cpp \ $$PWD/src/components/cfiledialog.cpp \ $$PWD/src/components/cprintprogress.cpp \ - $$PWD/src/components/ctabbarwrapper.cpp \ $$PWD/src/components/ctabbar.cpp \ $$PWD/src/components/cmessage.cpp \ $$PWD/src/components/canimatedicon.cpp \ diff --git a/win-linux/res/styles/tabbar.qss b/win-linux/res/styles/tabbar.qss index 81db3c2a4..3160f399a 100644 --- a/win-linux/res/styles/tabbar.qss +++ b/win-linux/res/styles/tabbar.qss @@ -1,272 +1,225 @@ - -QLabel[class=tab-icon] {padding:0 0 2px 4px;} -QTabBar {font-size: 11px; font-family: "Arial", "Helvetica", "Helvetica Neue", sans-serif; background-color: #f1f1f1;} -QTabBar::tear {width: 0px;} -QTabBar::scroller {width: 0px;} -QTabBar::tab {min-width: 41px; max-width: 135px; width: 135px; height: 28px; background-color: #f1f1f1; border: 0 none; - border-right: 1px solid #a5a5a5; margin: 0 0 0 0; padding: 0px;} -QTabBar::tab:hover {background-color: #cecece;} -QTabBar::tab-label {active: #fff; normal: #444;} -QTabBar::tab-icon {width: 15; height: 15;} -QTabBar::tab:first {} -QTabBar::tab:only-one {} -QTabBar::tab:last {} -QTabBar::tab::selected {padding-left: 0px;} -QTabBar[active=false]::tab:selected {background-color: #f1f1f1;} -QTabBar[active=true]::tab:selected {background-color: #f1f1f1;} -QTabBar[active=false]::tab:selected:hover {background-color: #cecece;} - - -QTabBar::close-button { - image: url(:/res/icons/tab_close_normal.svg); - margin-top: -1px; - icon-size:16px; -} -QTabBar::close-button:hover { - image: url(:/res/icons/tab_close_hover.svg); -} -QTabBar::close-button:pressed { - image: url(:/res/icons/tab_close_active.svg); -} - -QTabBar QToolButton, - QTabBar QToolButton:disabled { - background-color:#f1f1f1; - border:0 none; - width: 40px; -} - -QTabBar QToolButton[class=tab-close]{ - background-color:rgba(255,255,255,0); -} -QTabBar QToolButton[class=tab-close]{ - image: url(:/tabbar/icons/close_normal.svg); -} -QTabBar QToolButton[class=tab-close][state=active]{ - image:url(:/tabbar/icons/close_active_normal.svg); -} -QTabBar QToolButton[class=tab-close]:hover{ - image: url(:/tabbar/icons/close_hover.svg); -} -QTabBar QToolButton[class=tab-close][state=active]:hover{ - image: url(:/tabbar/icons/close_active_hover.svg); -} -QTabBar QToolButton[class=tab-close]:pressed{ - image: url(:/tabbar/icons/close_pressed.svg); -} -QTabBar QToolButton[class=tab-close][state=active]:pressed{ - image: url(:/tabbar/icons/close_active_pressed.svg); -} - -#tabWrapper {margin: 0; padding: 0; background: #f1f1f1;} -#paddingWidget {min-width: 0px; max-width: 0px; border: none; background: transparent;} - -#scrollerFrame {min-width: 32px; max-width: 32px; border: none; background: transparent;} -#scrollerFrame>QToolButton {max-height: 28px; margin: 0px; border: none; background-color: #f1f1f1;} -#scrollerFrame>QToolButton:hover {background-color: #cecece;} -#scrollerFrame>QToolButton:pressed {background-color: #b7b7b7;} - -#scrollerFrame>QToolButton#leftButton { - image: url(:/tabbar/icons/scrolltab_ln.svg) center no-repeat; -} -#scrollerFrame>QToolButton#leftButton:disabled { - image: url(:/tabbar/icons/scrolltab_ld.svg) center no-repeat; -} -#scrollerFrame>QToolButton#leftButton:hover { - image: url(:/tabbar/icons/scrolltab_lh.svg) center no-repeat; -} -#scrollerFrame>QToolButton#leftButton:pressed { - image: url(:/tabbar/icons/scrolltab_lp.svg) center no-repeat; -} - -#scrollerFrame>QToolButton#rightButton { - image: url(:/tabbar/icons/scrolltab_rn.svg) center no-repeat; -} -#scrollerFrame>QToolButton#rightButton:disabled { - image: url(:/tabbar/icons/scrolltab_rd.svg) center no-repeat; -} -#scrollerFrame>QToolButton#rightButton:hover { - image: url(:/tabbar/icons/scrolltab_rh.svg) center no-repeat; -} -#scrollerFrame>QToolButton#rightButton:pressed { - image: url(:/tabbar/icons/scrolltab_rp.svg) center no-repeat; -} +CTabBar {background: #f1f1f1;} +CTabBar #tabArea {background: transparent;} + +CTabBar #tabScroll {border: none; background: transparent;} +CTabBar #tabScroll>QToolButton {margin: 0px; border: none; background: #f1f1f1;} +CTabBar #tabScroll>QToolButton:hover {background: #cecece;} +CTabBar #tabScroll>QToolButton:pressed {background: #b7b7b7;} + +CTabBar #tabScroll>#leftButton {image: url(:/tabbar/icons/scrolltab_ln.svg);} +CTabBar #tabScroll>#leftButton:disabled {image: url(:/tabbar/icons/scrolltab_ld.svg);} +CTabBar #tabScroll>#leftButton:hover {image: url(:/tabbar/icons/scrolltab_lh.svg);} +CTabBar #tabScroll>#leftButton:pressed {image: url(:/tabbar/icons/scrolltab_lp.svg);} + +CTabBar #tabScroll>#rightButton {image: url(:/tabbar/icons/scrolltab_rn.svg);} +CTabBar #tabScroll>#rightButton:disabled {image: url(:/tabbar/icons/scrolltab_rd.svg);} +CTabBar #tabScroll>#rightButton:hover {image: url(:/tabbar/icons/scrolltab_rh.svg);} +CTabBar #tabScroll>#rightButton:pressed {image: url(:/tabbar/icons/scrolltab_rp.svg);} + +Tab {background: #f1f1f1; border: none; border-right: 1px solid #dfdfdf; margin: 0px; padding: 0px;} +Tab #tabIcon {background: transparent; /*image: url(:/tabbar/icons/res/icons/tabicon_oform_normal.svg);*/} +Tab #tabText {color: #444; background: transparent; font-family: "Arial", "Helvetica", "Helvetica Neue", sans-serif;} +Tab #tabButton {border: none; margin-top: 0px; image: none; background: transparent;} + +Tab[selected=true] {background: #446995; border-color: #446995;} +Tab[selected=true] #tabText {color: #fff;} +Tab[selected=true] #tabButton {image:url(:/tabbar/icons/close_active_normal.svg); /*background: #446995;*/} +Tab[selected=true] #tabButton:hover {image: url(:/tabbar/icons/close_active_hover.svg);} +Tab[selected=true] #tabButton:pressed {image: url(:/tabbar/icons/close_active_pressed.svg);} + +CTabBar[active=false] Tab[selected=true] {background: #f1f1f1; border-color: #dfdfdf;} +CTabBar[active=false] Tab[selected=true] #tabText {color: #444;} +CTabBar[active=false] Tab[selected=true] #tabButton {image: none; /*background: #f1f1f1;*/} + +Tab[selected=false][hovered=true], +CTabBar[active=false] Tab[selected=true][hovered=true] {background: #cecece;} +Tab[selected=false][hovered=true] #tabButton, +CTabBar[active=false] Tab[selected=true][hovered=true] #tabButton {image: url(:/tabbar/icons/close_normal.svg); /*background: #cecece;*/} +Tab[selected=false][hovered=true] #tabButton:hover, +CTabBar[active=false] Tab[selected=true][hovered=true] #tabButton:hover {image: url(:/tabbar/icons/close_hover.svg);} +Tab[selected=false][hovered=true] #tabButton:pressed, +CTabBar[active=false] Tab[selected=true][hovered=true] #tabButton:pressed {image: url(:/tabbar/icons/close_pressed.svg);} /* light */ -#mainPanel[uitheme=theme-light] QTabBar::tab {border-right-color:#dfdfdf;} +#mainPanel[uitheme=theme-light] Tab {border-right-color: #dfdfdf;} /* classic light */ -#mainPanel[uitheme=theme-classic-light] QTabBar::tab {border-right-color:#cbcbcb;} +#mainPanel[uitheme=theme-classic-light] Tab {border-right-color: #cbcbcb;} /* dark */ -#mainPanel[uitheme=theme-dark] QTabBar, -#mainPanel[uitheme=theme-dark] #tabWrapper {background-color: #404040;} -#mainPanel[uitheme=theme-dark] QTabBar QToolButton::left-arrow, -#mainPanel[uitheme=theme-dark] QTabBar QToolButton::right-arrow {background-color: #606060;} -#mainPanel[uitheme=theme-dark] QTabBar QToolButton:pressed {background-color: #606060;} -#mainPanel[uitheme=theme-dark] QTabBar::tab {background-color: #404040; border-right-color: #505050;} -#mainPanel[uitheme=theme-dark] QTabBar::tab:hover {background-color: #555;} -#mainPanel[uitheme=theme-dark] QTabBar::tab:selected {background-color: #404040;} -#mainPanel[uitheme=theme-dark] QTabBar[active=false]::tab:selected:hover {background-color: #555;} -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton {background-color: #404040;} -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton:hover {background-color: #555;} -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton:pressed {background-color: #606060;} +#mainPanel[uitheme=theme-dark] CTabBar {background: #404040;} +#mainPanel[uitheme=theme-dark] CTabBar #tabScroll>QToolButton {background: #404040;} +#mainPanel[uitheme=theme-dark] CTabBar #tabScroll>QToolButton:hover {background: #555;} +#mainPanel[uitheme=theme-dark] CTabBar #tabScroll>QToolButton:pressed {background: #606060;} +#mainPanel[uitheme=theme-dark] Tab {background: #404040; border-right-color: #505050;} +#mainPanel[uitheme=theme-dark] Tab #tabText {color: #dfdfdf;} +#mainPanel[uitheme=theme-dark] Tab[selected=true] {background: #2a2a2a; border-color: #2a2a2a;} +#mainPanel[uitheme=theme-dark] CTabBar[active=false] Tab[selected=true] {background: #404040; border-color: #505050;} +#mainPanel[uitheme=theme-dark] CTabBar[active=false] Tab[selected=true][custom=true] #tabText {color: #dfdfdf;} +#mainPanel[uitheme=theme-dark] CTabBar[active=false] Tab[selected=true][custom=true] #tabButton {image: none;} +#mainPanel[uitheme=theme-dark] Tab[selected=false][hovered=true], +#mainPanel[uitheme=theme-dark] CTabBar[active=false] Tab[selected=true][hovered=true] {background: #555;} +#mainPanel[uitheme=theme-dark] Tab[selected=false][hovered=true] #tabButton, +#mainPanel[uitheme=theme-dark] CTabBar[active=false] Tab[selected=true][hovered=true] #tabButton {image: url(:/tabbar/icons/close_active_normal.svg);} +#mainPanel[uitheme=theme-dark] Tab[selected=false][hovered=true] #tabButton:hover, +#mainPanel[uitheme=theme-dark] CTabBar[active=false] Tab[selected=true][hovered=true] #tabButton:hover {image: url(:/tabbar/icons/close_active_hover.svg);} +#mainPanel[uitheme=theme-dark] Tab[selected=false][hovered=true] #tabButton:pressed, +#mainPanel[uitheme=theme-dark] CTabBar[active=false] Tab[selected=true][hovered=true] #tabButton:pressed {image: url(:/tabbar/icons/close_active_pressed.svg);} +#mainPanel[uitheme=theme-dark] Tab[selected=true] #tabButton:pressed {background: #555;} +#mainPanel[uitheme=theme-dark] Tab[selected=true][custom=true] #tabButton:pressed {background: transparent;} /* contrast-dark */ -#mainPanel[uitheme=theme-contrast-dark] QTabBar, -#mainPanel[uitheme=theme-contrast-dark] #tabWrapper {background-color: #2a2a2a;} -#mainPanel[uitheme=theme-contrast-dark] QTabBar QToolButton::left-arrow, -#mainPanel[uitheme=theme-contrast-dark] QTabBar QToolButton::right-arrow {background-color: #f00;} -#mainPanel[uitheme=theme-contrast-dark] QTabBar QToolButton:pressed {background-color: #f00;} -#mainPanel[uitheme=theme-contrast-dark] QTabBar::tab {background-color: #2a2a2a; border-right-color: #414141;} -#mainPanel[uitheme=theme-contrast-dark] QTabBar::tab:hover {background-color: #424242;} -#mainPanel[uitheme=theme-contrast-dark] QTabBar::tab:selected {background-color: #2a2a2a;} -#mainPanel[uitheme=theme-contrast-dark] QTabBar[active=false]::tab:selected:hover {background-color: #424242;} -#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton {background-color: #2a2a2a;} -#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton:hover {background-color: #525252;} -#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton:pressed {background-color: #424242;} +#mainPanel[uitheme=theme-contrast-dark] CTabBar {background: #2a2a2a;} +#mainPanel[uitheme=theme-contrast-dark] CTabBar #tabScroll>QToolButton {background: #2a2a2a;} +#mainPanel[uitheme=theme-contrast-dark] CTabBar #tabScroll>QToolButton:hover {background: #525252;} +#mainPanel[uitheme=theme-contrast-dark] CTabBar #tabScroll>QToolButton:pressed {background: #424242;} +#mainPanel[uitheme=theme-contrast-dark] Tab {background: #2a2a2a; border-right-color: #414141;} +#mainPanel[uitheme=theme-contrast-dark] Tab #tabText {color: #fff;} +#mainPanel[uitheme=theme-contrast-dark] Tab[selected=true] {background: #1e1e1e; border-color: #1e1e1e;} +#mainPanel[uitheme=theme-contrast-dark] CTabBar[active=false] Tab[selected=true] {background: #2a2a2a; border-color: #414141;} +#mainPanel[uitheme=theme-contrast-dark] CTabBar[active=false] Tab[selected=true][custom=true] #tabText {color: #fff;} +#mainPanel[uitheme=theme-contrast-dark] CTabBar[active=false] Tab[selected=true][custom=true] #tabButton {image: none;} +#mainPanel[uitheme=theme-contrast-dark] Tab[selected=false][hovered=true], +#mainPanel[uitheme=theme-contrast-dark] CTabBar[active=false] Tab[selected=true][hovered=true] {background: #424242;} +#mainPanel[uitheme=theme-contrast-dark] Tab[selected=false][hovered=true] #tabButton, +#mainPanel[uitheme=theme-contrast-dark] CTabBar[active=false] Tab[selected=true][hovered=true] #tabButton {image: url(:/tabbar/icons/close_active_normal.svg);} +#mainPanel[uitheme=theme-contrast-dark] Tab[selected=false][hovered=true] #tabButton:hover, +#mainPanel[uitheme=theme-contrast-dark] CTabBar[active=false] Tab[selected=true][hovered=true] #tabButton:hover {image: url(:/tabbar/icons/close_active_hover.svg);} +#mainPanel[uitheme=theme-contrast-dark] Tab[selected=false][hovered=true] #tabButton:pressed, +#mainPanel[uitheme=theme-contrast-dark] CTabBar[active=false] Tab[selected=true][hovered=true] #tabButton:pressed {image: url(:/tabbar/icons/close_active_pressed.svg);} +#mainPanel[uitheme=theme-contrast-dark] Tab[selected=true] #tabButton:pressed {background: #424242;} +#mainPanel[uitheme=theme-contrast-dark] Tab[selected=true][custom=true] #tabButton:pressed {background: transparent;} + +/* portal */ +Tab[selected=true][custom=true], +#mainPanel[uitheme=theme-dark] Tab[selected=true][custom=true], +#mainPanel[uitheme=theme-contrast-dark] Tab[selected=true][custom=true] {background: #fff;} +Tab[selected=true][custom=true] #tabText, +#mainPanel[uitheme=theme-dark] Tab[selected=true][custom=true] #tabText, +#mainPanel[uitheme=theme-contrast-dark] Tab[selected=true][custom=true] #tabText {color: #444;} +Tab[selected=true][custom=true] #tabButton {image:url(:/tabbar/icons/close_normal.svg);} +Tab[selected=true][custom=true] #tabButton:hover {image: url(:/tabbar/icons/close_hover.svg);} +Tab[selected=true][custom=true] #tabButton:pressed {image: url(:/tabbar/icons/close_pressed.svg);} /* dark, contrast-dark */ -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#leftButton, -#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton#leftButton { - image: url(:/tabbar/icons/scrolltab_ln_light.svg) center no-repeat; +#mainPanel[uitheme=theme-dark] CTabBar #tabScroll>#leftButton, +#mainPanel[uitheme=theme-contrast-dark] CTabBar #tabScroll>#leftButton { + image: url(:/tabbar/icons/scrolltab_ln_light.svg); } -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#leftButton:disabled, -#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton#leftButton:disabled { - image: url(:/tabbar/icons/scrolltab_ld_light.svg) center no-repeat; +#mainPanel[uitheme=theme-dark] CTabBar #tabScroll>#leftButton:disabled, +#mainPanel[uitheme=theme-contrast-dark] CTabBar #tabScroll>#leftButton:disabled { + image: url(:/tabbar/icons/scrolltab_ld_light.svg); } -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#leftButton:hover, -#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton#leftButton:hover { - image: url(:/tabbar/icons/scrolltab_lh_light.svg) center no-repeat; +#mainPanel[uitheme=theme-dark] CTabBar #tabScroll>#leftButton:hover, +#mainPanel[uitheme=theme-contrast-dark] CTabBar #tabScroll>#leftButton:hover { + image: url(:/tabbar/icons/scrolltab_lh_light.svg); } -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#leftButton:pressed, -#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton#leftButton:pressed { - image: url(:/tabbar/icons/scrolltab_lp_light.svg) center no-repeat; +#mainPanel[uitheme=theme-dark] CTabBar #tabScroll>#leftButton:pressed, +#mainPanel[uitheme=theme-contrast-dark] CTabBar #tabScroll>#leftButton:pressed { + image: url(:/tabbar/icons/scrolltab_lp_light.svg); } -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#rightButton, -#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton#rightButton { - image: url(:/tabbar/icons/scrolltab_rn_light.svg) center no-repeat; +#mainPanel[uitheme=theme-dark] CTabBar #tabScroll>#rightButton, +#mainPanel[uitheme=theme-contrast-dark] CTabBar #tabScroll>#rightButton { + image: url(:/tabbar/icons/scrolltab_rn_light.svg); } -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#rightButton:disabled, -#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton#rightButton:disabled { - image: url(:/tabbar/icons/scrolltab_rd_light.svg) center no-repeat; +#mainPanel[uitheme=theme-dark] CTabBar #tabScroll>#rightButton:disabled, +#mainPanel[uitheme=theme-contrast-dark] CTabBar #tabScroll>#rightButton:disabled { + image: url(:/tabbar/icons/scrolltab_rd_light.svg); } -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#rightButton:hover, -#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton#rightButton:hover { - image: url(:/tabbar/icons/scrolltab_rh_light.svg) center no-repeat; +#mainPanel[uitheme=theme-dark] CTabBar #tabScroll>#rightButton:hover, +#mainPanel[uitheme=theme-contrast-dark] CTabBar #tabScroll>#rightButton:hover { + image: url(:/tabbar/icons/scrolltab_rh_light.svg); } -#mainPanel[uitheme=theme-dark] #scrollerFrame>QToolButton#rightButton:pressed, -#mainPanel[uitheme=theme-contrast-dark] #scrollerFrame>QToolButton#rightButton:pressed { - image: url(:/tabbar/icons/scrolltab_rp_light.svg) center no-repeat; +#mainPanel[uitheme=theme-dark] CTabBar #tabScroll>#rightButton:pressed, +#mainPanel[uitheme=theme-contrast-dark] CTabBar #tabScroll>#rightButton:pressed { + image: url(:/tabbar/icons/scrolltab_rp_light.svg); } +/* 1x */ +CTabBar #tabScroll {min-width: 32px; max-width: 32px;} +CTabBar #tabScroll>QToolButton {max-height: 28px;} +Tab {min-width: 41px; max-width: 135px; width: 135px; height: 28px;} +Tab #tabIcon {padding: 0px; min-width: 15px; min-height: 15px; max-width: 15px; max-height: 15px;} +Tab #tabText {font-size: 11px;} +Tab #tabButton {width: 16px; max-width: 16px; max-height: 16px; border-width: 2px;} + /* 1.25x */ -#mainPanel[zoom="1.25x"] QLabel[class=tab-icon] {padding:0 0 2px 8px;} -#mainPanel[zoom="1.25x"] QTabBar {font-size: 14px;} -#mainPanel[zoom="1.25x"] QTabBar::tab {min-width: 51px; max-width: 169px; width: 169px; height: 35px; border-right-width: 1px;} -#mainPanel[zoom="1.25x"] QTabBar::close-button {margin-top: -1px; icon-size: 20px;} -#mainPanel[zoom="1.25x"] QTabBar QToolButton, -#mainPanel[zoom="1.25x"] QTabBar QToolButton:disabled {/*margin-right: -2px;*/ border-width: 2px;} -#mainPanel[zoom="1.25x"] #paddingWidget {min-width: 15px; max-width: 15px;} -#mainPanel[zoom="1.25x"] #scrollerFrame {min-width: 48px; max-width: 48px;} -#mainPanel[zoom="1.25x"] #scrollerFrame>QToolButton {max-height: 35px;} +#mainPanel[zoom="1.25x"] CTabBar #tabScroll {min-width: 48px; max-width: 48px;} +#mainPanel[zoom="1.25x"] CTabBar #tabScroll>QToolButton {max-height: 35px;} +#mainPanel[zoom="1.25x"] Tab {min-width: 51px; max-width: 169px; width: 169px; height: 35px; border-right-width: 1px;} +#mainPanel[zoom="1.25x"] Tab #tabIcon {padding-left: 8px; padding-right: 8px; min-width: 19px; min-height: 19px; max-width: 19px; max-height: 19px;} +#mainPanel[zoom="1.25x"] Tab #tabText {font-size: 14px;} +#mainPanel[zoom="1.25x"] Tab #tabButton {width: 20px; max-width: 20px; max-height: 20px; border-width: 2px;} /* 1.5x */ -#mainPanel[zoom="1.5x"] QLabel[class=tab-icon] {padding:0 0 3px 9px;} -#mainPanel[zoom="1.5x"] QTabBar {font-size: 15px;} -#mainPanel[zoom="1.5x"] QTabBar::tab {min-width: 62px; max-width: 203px; width: 203px; height: 42px; border-right-width: 2px;} -#mainPanel[zoom="1.5x"] QTabBar::close-button {margin-top: -1px; icon-size: 24px;} -#mainPanel[zoom="1.5x"] QTabBar QToolButton, -#mainPanel[zoom="1.5x"] QTabBar QToolButton:disabled {/*margin-right: -2px;*/ border-width: 2px;} -#mainPanel[zoom="1.5x"] #paddingWidget {min-width: 15px; max-width: 15px;} -#mainPanel[zoom="1.5x"] #scrollerFrame {min-width: 48px; max-width: 48px;} -#mainPanel[zoom="1.5x"] #scrollerFrame>QToolButton {max-height: 42px;} +#mainPanel[zoom="1.5x"] CTabBar #tabScroll {min-width: 48px; max-width: 48px;} +#mainPanel[zoom="1.5x"] CTabBar #tabScroll>QToolButton {max-height: 42px;} +#mainPanel[zoom="1.5x"] Tab {min-width: 62px; max-width: 203px; width: 203px; height: 42px; border-right-width: 2px;} +#mainPanel[zoom="1.5x"] Tab #tabIcon {padding-left: 8px; padding-right: 8px; min-width: 24px; min-height: 24px; max-width: 24px; max-height: 24px;} +#mainPanel[zoom="1.5x"] Tab #tabText {font-size: 15px;} +#mainPanel[zoom="1.5x"] Tab #tabButton {width: 24px; max-width: 24px; max-height: 24px; border-width: 2px;} /* 1.75x */ -#mainPanel[zoom="1.75x"] QLabel[class=tab-icon] {padding:0 0 4px 9px;} -#mainPanel[zoom="1.75x"] QTabBar {font-size: 18px;} -#mainPanel[zoom="1.75x"] QTabBar::tab {min-width: 72px; max-width: 236px; width: 236px; height: 49px; border-right-width: 2px;} -#mainPanel[zoom="1.75x"] QTabBar::close-button {margin-top: -2px; icon-size: 28px;} -#mainPanel[zoom="1.75x"] QTabBar QToolButton, -#mainPanel[zoom="1.75x"] QTabBar QToolButton:disabled {/*margin-right: -2px;*/ border-width: 2px;} -#mainPanel[zoom="1.75x"] #paddingWidget {min-width: 31px; max-width: 31px;} -#mainPanel[zoom="1.75x"] #scrollerFrame {min-width: 64px; max-width: 64px;} -#mainPanel[zoom="1.75x"] #scrollerFrame>QToolButton {max-height: 49px;} +#mainPanel[zoom="1.75x"] CTabBar #tabScroll {min-width: 64px; max-width: 64px;} +#mainPanel[zoom="1.75x"] CTabBar #tabScroll>QToolButton {max-height: 49px;} +#mainPanel[zoom="1.75x"] Tab {min-width: 72px; max-width: 236px; width: 236px; height: 49px; border-right-width: 2px;} +#mainPanel[zoom="1.75x"] Tab #tabIcon {padding-left: 8px; padding-right: 8px; min-width: 28px; min-height: 28px; max-width: 28px; max-height: 28px;} +#mainPanel[zoom="1.75x"] Tab #tabText {font-size: 18px;} +#mainPanel[zoom="1.75x"] Tab #tabButton {width: 28px; max-width: 28px; max-height: 28px; border-width: 2px;} /* 2x */ -#mainPanel[zoom="2x"] QLabel[class=tab-icon] {padding:0 0 4px 12px;} -#mainPanel[zoom="2x"] QTabBar {font-size: 20px;} -#mainPanel[zoom="2x"] QTabBar::tab {min-width: 82px; max-width: 270px; width: 270px; height: 56px; border-right-width: 2px;} -#mainPanel[zoom="2x"] QTabBar::close-button {margin-top: -2px; icon-size: 32px;} -#mainPanel[zoom="2x"] QTabBar QToolButton, -#mainPanel[zoom="2x"] QTabBar QToolButton:disabled {/*margin-right: -2px;*/ border-width: 2px;} -#mainPanel[zoom="2x"] #paddingWidget {min-width: 31px; max-width: 31px;} -#mainPanel[zoom="2x"] #scrollerFrame {min-width: 64px; max-width: 64px;} -#mainPanel[zoom="2x"] #scrollerFrame>QToolButton {max-height: 56px;} +#mainPanel[zoom="2x"] CTabBar #tabScroll {min-width: 64px; max-width: 64px;} +#mainPanel[zoom="2x"] CTabBar #tabScroll>QToolButton {max-height: 56px;} +#mainPanel[zoom="2x"] Tab {min-width: 82px; max-width: 270px; width: 270px; height: 56px; border-right-width: 2px;} +#mainPanel[zoom="2x"] Tab #tabIcon {padding-left: 8px; padding-right: 8px; min-width: 32px; min-height: 32px; max-width: 32px; max-height: 32px;} +#mainPanel[zoom="2x"] Tab #tabText {font-size: 20px;} +#mainPanel[zoom="2x"] Tab #tabButton {width: 32px; max-width: 32px; max-height: 32px; border-width: 2px;} /* 2.5x */ -#mainPanel[zoom="2.5x"] QLabel[class=tab-icon] {padding:0 0 5px 15px;} -#mainPanel[zoom="2.5x"] QTabBar {font-size: 25px;} -#mainPanel[zoom="2.5x"] QTabBar::tab {min-width: 103px; max-width: 338px; width: 338px; height: 70px; border-right-width: 3px;} -#mainPanel[zoom="2.5x"] QTabBar::close-button {margin-top: -3px; icon-size: 40px;} -#mainPanel[zoom="2.5x"] QTabBar QToolButton, -#mainPanel[zoom="2.5x"] QTabBar QToolButton:disabled {/*margin-right: -2px;*/ border-width: 2px;} -#mainPanel[zoom="2.5x"] #paddingWidget {min-width: 49px; max-width: 49px;} -#mainPanel[zoom="2.5x"] #scrollerFrame {min-width: 80px; max-width: 80px;} -#mainPanel[zoom="2.5x"] #scrollerFrame>QToolButton {max-height: 70px;} +#mainPanel[zoom="2.5x"] CTabBar #tabScroll {min-width: 80px; max-width: 80px;} +#mainPanel[zoom="2.5x"] CTabBar #tabScroll>QToolButton {max-height: 70px;} +#mainPanel[zoom="2.5x"] Tab {min-width: 103px; max-width: 338px; width: 338px; height: 70px; border-right-width: 3px;} +#mainPanel[zoom="2.5x"] Tab #tabIcon {padding-left: 8px; padding-right: 8px; min-width: 40px; min-height: 40px; max-width: 40px; max-height: 40px;} +#mainPanel[zoom="2.5x"] Tab #tabText {font-size: 25px;} +#mainPanel[zoom="2.5x"] Tab #tabButton {width: 40px; max-width: 40px; max-height: 40px; border-width: 2px;} /* 3x */ -#mainPanel[zoom="3x"] QLabel[class=tab-icon] {padding:0 0 6px 18px;} -#mainPanel[zoom="3x"] QTabBar {font-size: 30px;} -#mainPanel[zoom="3x"] QTabBar::tab {min-width: 123px; max-width: 405px; width: 405px; height: 84px; border-right-width: 3px;} -#mainPanel[zoom="3x"] QTabBar::close-button {margin-top: -3px; icon-size: 48px;} -#mainPanel[zoom="3x"] QTabBar QToolButton, -#mainPanel[zoom="3x"] QTabBar QToolButton:disabled {/*margin-right: -2px;*/ border-width: 2px;} -#mainPanel[zoom="3x"] #paddingWidget {min-width: 65px; max-width: 65px;} -#mainPanel[zoom="3x"] #scrollerFrame {min-width: 96px; max-width: 96px;} -#mainPanel[zoom="3x"] #scrollerFrame>QToolButton {max-height: 84px;} +#mainPanel[zoom="3x"] CTabBar #tabScroll {min-width: 96px; max-width: 96px;} +#mainPanel[zoom="3x"] CTabBar #tabScroll>QToolButton {max-height: 84px;} +#mainPanel[zoom="3x"] Tab {min-width: 123px; max-width: 405px; width: 405px; height: 84px; border-right-width: 3px;} +#mainPanel[zoom="3x"] Tab #tabIcon {padding-left: 8px; padding-right: 8px; min-width: 48px; min-height: 48px; max-width: 48px; max-height: 48px;} +#mainPanel[zoom="3x"] Tab #tabText {font-size: 30px;} +#mainPanel[zoom="3x"] Tab #tabButton {width: 48px; max-width: 48px; max-height: 48px; border-width: 2px;} /* 3.5x */ -#mainPanel[zoom="3.5x"] QLabel[class=tab-icon] {padding:0 0 7px 21px;} -#mainPanel[zoom="3.5x"] QTabBar {font-size: 35px;} -#mainPanel[zoom="3.5x"] QTabBar::tab {min-width: 144px; max-width: 473px; width: 473px; height: 98px; border-right-width: 4px;} -#mainPanel[zoom="3.5x"] QTabBar::close-button {margin-top: -4px; icon-size: 56px;} -#mainPanel[zoom="3.5x"] QTabBar QToolButton, -#mainPanel[zoom="3.5x"] QTabBar QToolButton:disabled {/*margin-right: -2px;*/ border-width: 2px;} -#mainPanel[zoom="3.5x"] #paddingWidget {min-width: 82px; max-width: 82px;} -#mainPanel[zoom="3.5x"] #scrollerFrame {min-width: 112px; max-width: 112px;} -#mainPanel[zoom="3.5x"] #scrollerFrame>QToolButton {max-height: 98px;} +#mainPanel[zoom="3.5x"] CTabBar #tabScroll {min-width: 112px; max-width: 112px;} +#mainPanel[zoom="3.5x"] CTabBar #tabScroll>QToolButton {max-height: 98px;} +#mainPanel[zoom="3.5x"] Tab {min-width: 144px; max-width: 473px; width: 473px; height: 98px; border-right-width: 4px;} +#mainPanel[zoom="3.5x"] Tab #tabIcon {padding-left: 8px; padding-right: 8px; min-width: 56px; min-height: 56px; max-width: 56px; max-height: 56px;} +#mainPanel[zoom="3.5x"] Tab #tabText {font-size: 35px;} +#mainPanel[zoom="3.5x"] Tab #tabButton {width: 56px; max-width: 56px; max-height: 56px; border-width: 2px;} /* 4x */ -#mainPanel[zoom="4x"] QLabel[class=tab-icon] {padding:0 0 8px 24px;} -#mainPanel[zoom="4x"] QTabBar {font-size: 40px;} -#mainPanel[zoom="4x"] QTabBar::tab {min-width: 164px; max-width: 540px; width: 540px; height: 112px; border-right-width: 4px;} -#mainPanel[zoom="4x"] QTabBar::close-button {margin-top: -4px; icon-size: 64px;} -#mainPanel[zoom="4x"] QTabBar QToolButton, -#mainPanel[zoom="4x"] QTabBar QToolButton:disabled {/*margin-right: -2px;*/ border-width: 2px;} -#mainPanel[zoom="4x"] #paddingWidget {min-width: 98px; max-width: 98px;} -#mainPanel[zoom="4x"] #scrollerFrame {min-width: 128px; max-width: 128px;} -#mainPanel[zoom="4x"] #scrollerFrame>QToolButton {max-height: 112px;} +#mainPanel[zoom="4x"] CTabBar #tabScroll {min-width: 128px; max-width: 128px;} +#mainPanel[zoom="4x"] CTabBar #tabScroll>QToolButton {max-height: 112px;} +#mainPanel[zoom="4x"] Tab {min-width: 164px; max-width: 540px; width: 540px; height: 112px; border-right-width: 4px;} +#mainPanel[zoom="4x"] Tab #tabIcon {padding-left: 8px; padding-right: 8px; min-width: 64px; min-height: 64px; max-width: 64px; max-height: 64px;} +#mainPanel[zoom="4x"] Tab #tabText {font-size: 40px;} +#mainPanel[zoom="4x"] Tab #tabButton {width: 64px; max-width: 64px; max-height: 64px; border-width: 2px;} /* 4.5x */ -#mainPanel[zoom="4.5x"] QLabel[class=tab-icon] {padding:0 0 9px 27px;} -#mainPanel[zoom="4.5x"] QTabBar {font-size: 45px;} -#mainPanel[zoom="4.5x"] QTabBar::tab {min-width: 185px; max-width: 608px; width: 608px; height: 126px; border-right-width: 5px;} -#mainPanel[zoom="4.5x"] QTabBar::close-button {margin-top: -5px; icon-size: 72px;} -#mainPanel[zoom="4.5x"] QTabBar QToolButton, -#mainPanel[zoom="4.5x"] QTabBar QToolButton:disabled {/*margin-right: -2px;*/ border-width: 2px;} -#mainPanel[zoom="4.5x"] #paddingWidget {min-width: 112px; max-width: 112px;} -#mainPanel[zoom="4.5x"] #scrollerFrame {min-width: 144px; max-width: 144px;} -#mainPanel[zoom="4.5x"] #scrollerFrame>QToolButton {max-height: 126px;} +#mainPanel[zoom="4.5x"] CTabBar #tabScroll {min-width: 144px; max-width: 144px;} +#mainPanel[zoom="4.5x"] CTabBar #tabScroll>QToolButton {max-height: 126px;} +#mainPanel[zoom="4.5x"] Tab {min-width: 185px; max-width: 608px; width: 608px; height: 126px; border-right-width: 5px;} +#mainPanel[zoom="4.5x"] Tab #tabIcon {padding-left: 8px; padding-right: 8px; min-width: 72px; min-height: 72px; max-width: 72px; max-height: 72px;} +#mainPanel[zoom="4.5x"] Tab #tabText {font-size: 45px;} +#mainPanel[zoom="4.5x"] Tab #tabButton {width: 72px; max-width: 72px; max-height: 72px; border-width: 2px;} /* 5x */ -#mainPanel[zoom="5x"] QLabel[class=tab-icon] {padding:0 0 10px 30px;} -#mainPanel[zoom="5x"] QTabBar {font-size: 50px;} -#mainPanel[zoom="5x"] QTabBar::tab {min-width: 205px; max-width: 675px; width: 675px; height: 140px; border-right-width: 5px;} -#mainPanel[zoom="5x"] QTabBar::close-button {margin-top: -5px; icon-size: 80px;} -#mainPanel[zoom="5x"] QTabBar QToolButton, -#mainPanel[zoom="5x"] QTabBar QToolButton:disabled {/*margin-right: -2px;*/ border-width: 2px;} -#mainPanel[zoom="5x"] #paddingWidget {min-width: 130px; max-width: 130px;} -#mainPanel[zoom="5x"] #scrollerFrame {min-width: 160px; max-width: 160px;} -#mainPanel[zoom="5x"] #scrollerFrame>QToolButton {max-height: 140px;} +#mainPanel[zoom="5x"] CTabBar #tabScroll {min-width: 160px; max-width: 160px;} +#mainPanel[zoom="5x"] CTabBar #tabScroll>QToolButton {max-height: 140px;} +#mainPanel[zoom="5x"] Tab {min-width: 205px; max-width: 675px; width: 675px; height: 140px; border-right-width: 5px;} +#mainPanel[zoom="5x"] Tab #tabIcon {padding-left: 8px; padding-right: 8px; min-width: 80px; min-height: 80px; max-width: 80px; max-height: 80px;} +#mainPanel[zoom="5x"] Tab #tabText {font-size: 50px;} +#mainPanel[zoom="5x"] Tab #tabButton {width: 80px; max-width: 80px; max-height: 80px; border-width: 2px;} diff --git a/win-linux/src/components/asctabwidget.cpp b/win-linux/src/components/asctabwidget.cpp index 773d5199b..001a5e3ba 100644 --- a/win-linux/src/components/asctabwidget.cpp +++ b/win-linux/src/components/asctabwidget.cpp @@ -34,24 +34,20 @@ #include #include #include -#include -#include #include +#include #include #include -#include "ctabstyle.h" #include "casctabdata.h" #include "common/Types.h" #include "defines.h" #include "utils.h" #include "cfilechecker.h" -#include "components/canimatedicon.h" #include "ceditortools.h" #include "cascapplicationmanagerwrapper.h" #include "ctabundockevent.h" #include "OfficeFileFormats.h" -#include "private/qtabbar_p.h" using namespace std; @@ -144,29 +140,22 @@ CAscTabWidget::CAscTabWidget(QWidget *parent, CTabBar *_pBar) , m_pBar(_pBar) { m_pBar->setObjectName("asc_editors_tabbar"); - m_pBar->setTabTextColor(QPalette::Active, QColor(51, 51, 51)); - m_pBar->setTabTextColor(QPalette::Inactive, QColor(51, 51, 51)); - - m_pBar->setMovable(true); - m_pBar->setExpanding(false); - m_pBar->setTabsClosable(true); - - m_pBar->setIconSize(m_tabIconSize); setProperty("active", false); setProperty("empty", true); m_pBar->setProperty("active", false); static int _dropedindex = -1; QObject::connect(this, &CAscTabWidget::currentChanged, this, [=](int index) { - if (index > -1) m_pBar->setCurrentIndex(index); - updateIcons(); + QTimer::singleShot(0, this, [=]() { + updateIcons(); + }); setFocusedView(); _dropedindex = -1; }); QObject::connect(this, &CAscTabWidget::widgetRemoved, this, [=](int index) { emit editorRemoved(index, count()); }); - QObject::connect(m_pBar, &CTabBar::tabUndock, this, [=](int index, bool * accept) { + QObject::connect(m_pBar, &CTabBar::tabUndock, this, [=](int index, bool &accept) { if (index == _dropedindex) return; const CTabPanel * _panel = panel(index); @@ -176,11 +165,10 @@ CAscTabWidget::CAscTabWidget(QWidget *parent, CTabBar *_pBar) QObject * obj = qobject_cast(&AscAppManager::getInstance()); if ( QApplication::sendEvent(obj, &event) && event.isAccepted() ) { _dropedindex = index; - *accept = true; + accept = true; - QTimer::singleShot(10, this, [=]() { + QTimer::singleShot(0, this, [=]() { if (widget(index)) { - m_pBar->removeTab(index); widget(index)->deleteLater(); } }); @@ -267,8 +255,7 @@ int CAscTabWidget::addEditor(const COpenOptions& opts) pView->setData(data); tab_index = addWidget(panelwidget); m_pBar->addTab(data->title()); - //m_pBar->setTabToolTip(tab_index, data->title()); - m_pBar->setTabProperty(tab_index, "ToolTip", data->title()); + m_pBar->setTabToolTip(tab_index, data->title()); m_pBar->tabStartLoading(tab_index); //m_pBar->setCurrentIndex(tab_index); @@ -392,9 +379,8 @@ int CAscTabWidget::addPortal(const QString& url, const QString& name, const QStr tab_index = insertWidget(tab_index, panelwidget); m_pBar->insertTab(tab_index, portal); - //m_pBar->setTabToolTip(tab_index, _url); - m_pBar->setTabProperty(tab_index, "ToolTip", _url); - m_pBar->setTabTheme(tab_index, CTabBar::LightTab); + m_pBar->setTabToolTip(tab_index, _url); + m_pBar->setTabIconTheme(tab_index, CTabBar::LightTab); m_pBar->tabStartLoading(tab_index); // updateTabIcon(tabIndexByView(id)); @@ -432,9 +418,8 @@ int CAscTabWidget::addOAuthPortal(const QString& portal, const QString& type, co tab_index = insertWidget(tab_index, panelwidget); m_pBar->insertTab(tab_index, _portal); - //m_pBar->setTabToolTip(tab_index, portal); - m_pBar->setTabProperty(tab_index, "ToolTip", portal); - m_pBar->setTabTheme(tab_index, CTabBar::LightTab); + m_pBar->setTabToolTip(tab_index, portal); + m_pBar->setTabIconTheme(tab_index, CTabBar::LightTab); m_pBar->tabStartLoading(tab_index); return tab_index; @@ -452,9 +437,8 @@ int CAscTabWidget::insertPanel(QWidget * panel, int index) QWidget * panelwidget = createTabPanel(this, _panel); tabindex = insertWidget(index, panelwidget); - m_pBar->insertTab(index, tabdata->title()); - //m_pBar->setTabToolTip(tabindex, tabdata->title()); - m_pBar->setTabProperty(tabindex, "ToolTip", tabdata->title()); + m_pBar->insertTab(tabindex, tabdata->title()); + m_pBar->setTabToolTip(tabindex, tabdata->title()); } return tabindex; @@ -483,7 +467,7 @@ void CAscTabWidget::updateIcons() void CAscTabWidget::updateTabIcon(int index) { - if ( !(index < 0) ) { + if ( !(index < 0) && panel(index)) { CCefViewEditor * pEditor = (CCefViewEditor *)panel(index)->cef(); if (pEditor) { @@ -527,13 +511,14 @@ void CAscTabWidget::updateTabIcon(int index) } QString icon_name = is_active ? m_mapTabIcons.at(tab_type).second : m_mapTabIcons.at(tab_type).first; m_pBar->setTabIcon(index, QIcon(icon_name)); - m_pBar->setTabTheme(index, tab_theme); +// m_pBar->setTabIconTheme(index, tab_theme); if ( index == currentIndex() ) { - m_pBar->setActiveTabColor(active_tab_color); - - m_pBar->setTabTextColor(QPalette::Active, AscAppManager::themes().isColorDark(active_tab_color) ? - ui_theme.color(CTheme::ColorRole::ecrTextPressed) : ui_theme.color(CTheme::ColorRole::ecrTabSimpleActiveText)); - + if (tab_type == etPortal || tab_type == etNewPortal || tab_type == etUndefined) + m_pBar->setUseTabCustomPalette(index, true); + else { + m_pBar->setUseTabCustomPalette(index, false); + m_pBar->setActiveTabColor(index, active_tab_color); + } } } } @@ -772,8 +757,7 @@ void CAscTabWidget::applyDocumentChanging(int viewId, const QString& name, const } m_pBar->setTabText(tabIndex, doc->title()); - //m_pBar->setTabToolTip(tabIndex, path.isEmpty() ? doc->title() : path); - m_pBar->setTabProperty(tabIndex, "ToolTip", path.isEmpty() ? doc->title() : path); + m_pBar->setTabToolTip(tabIndex, path.isEmpty() ? doc->title() : path); } } @@ -792,8 +776,7 @@ void CAscTabWidget::applyDocumentChanging(int viewId, bool state) if (doc->hasChanges() != state && (!doc->closed() || state)) { doc->setChanged(state); m_pBar->setTabText(tabIndex, doc->title()); - //m_pBar->setTabToolTip(tabIndex, doc->title()); - m_pBar->setTabProperty(tabIndex, "ToolTip", doc->title()); + m_pBar->setTabToolTip(tabIndex, doc->title()); } } } @@ -864,8 +847,7 @@ void CAscTabWidget::setEditorOptions(int id, const wstring& option) if (option.find(L"readonly\":") != wstring::npos) { m_pBar->setTabText(tabIndex, doc->title()); - //m_pBar->setTabToolTip(tabIndex, doc->title()); - m_pBar->setTabProperty(tabIndex, "ToolTip", doc->title()); + m_pBar->setTabToolTip(tabIndex, doc->title()); } // if (std::regex_search(option, std::wregex(L"titlebuttons\":\\s?true"))) { @@ -910,10 +892,8 @@ void CAscTabWidget::activate(bool a) this->setProperty("active", a); m_pBar->setProperty("active", a); } - updateTabIcon(currentIndex()); - m_pBar->activate(a); - m_pBar->customColors().setCurrentColorGroup(a ? QPalette::Normal : QPalette::Disabled ); - m_pBar->update(); + updateIcons(); + m_pBar->polish(); } bool CAscTabWidget::isActiveWidget() @@ -1156,25 +1136,6 @@ QWidget * CAscTabWidget::fullScreenWidget() return m_dataFullScreen ? m_dataFullScreen->widget() : nullptr; } -void CAscTabWidget::updateScalingFactor(double f) -{ - CScalingWrapper::updateScalingFactor(f); - - double dpi_ratio = scaling(); - - m_pBar->setIconSize(m_tabIconSize * dpi_ratio); - updateIcons(); - - (m_widthParams = size_params(m_defWidthParams)).apply_scale(dpi_ratio); - if ( m_isCustomStyle ) - m_widthParams.tools_width = int(50 * dpi_ratio), - m_widthParams.title_width = int(WINDOW_TITLE_MIN_WIDTH * dpi_ratio); - else - m_widthParams.tools_width = m_widthParams.title_width = 0; - - m_pBar->updateScalingFactor(f); -} - void CAscTabWidget::setStyleSheet(const QString& stylesheet) { QStackedWidget::setStyleSheet(stylesheet); @@ -1222,9 +1183,8 @@ void CAscTabWidget::applyUITheme(const std::wstring& theme) { reloadTabIcons(); updateIcons(); - m_pBar->setTabTextColor(QPalette::Inactive, AscAppManager::themes().current().color(CTheme::ColorRole::ecrTextNormal)); - m_pBar->setUIThemeType(!AscAppManager::themes().current().isDark()); - m_pBar->style()->polish(m_pBar); + m_pBar->setIgnoreActiveTabColor(AscAppManager::themes().current().isDark()); + m_pBar->polish(); style()->polish(this); QColor back_color = AscAppManager::themes().current().color(CTheme::ColorRole::ecrWindowBackground); diff --git a/win-linux/src/components/asctabwidget.h b/win-linux/src/components/asctabwidget.h index aee1e4441..67fcd92d0 100644 --- a/win-linux/src/components/asctabwidget.h +++ b/win-linux/src/components/asctabwidget.h @@ -34,10 +34,9 @@ #define ASCTABWIDGET #include -#include #include -#include "ctabbarwrapper.h" #include +#include "ctabbar.h" #include "qcefview.h" #include "cscalingwrapper.h" #include "ctabpanel.h" @@ -152,7 +151,6 @@ class CAscTabWidget : public QStackedWidget, public CScalingWrapper int count(const std::wstring& portal, bool exclude = false); bool hasForPortal(const QString&); - void updateScalingFactor(double) override; protected: int insertWidget(int index, QWidget* widget); void closeEditor(int, bool, bool); diff --git a/win-linux/src/components/canimatedicon.cpp b/win-linux/src/components/canimatedicon.cpp index 8bc8daf60..333d1d406 100644 --- a/win-linux/src/components/canimatedicon.cpp +++ b/win-linux/src/components/canimatedicon.cpp @@ -53,7 +53,8 @@ void CAnimatedIcon::startSvg(const QString& source, const QString& eid) if ( !eid.isEmpty() ) m_svgElemId = eid; if ( m_image ) delete m_image; - m_image = new QPixmap( m_svgSize ); + int icon_size = qMin(width(), height()); + m_image = new QPixmap(icon_size, icon_size); connect(m_svg, &QSvgRenderer::repaintNeeded, this, &CAnimatedIcon::onSvgRepaint); } else { diff --git a/win-linux/src/components/ctabbar.cpp b/win-linux/src/components/ctabbar.cpp index d88bc74b7..c1959189e 100644 --- a/win-linux/src/components/ctabbar.cpp +++ b/win-linux/src/components/ctabbar.cpp @@ -31,1040 +31,1073 @@ */ #include "components/ctabbar.h" -#include "private/qtabbar_p.h" -#include -#include -#include #include "components/canimatedicon.h" -#include "utils.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define ANIMATION_DEFAULT_MS 0 +#define ANIMATION_SCROLL_MS 60 +#define ANIMATION_MOVE_TAB_MS 500 +#define TABSPACING 0 +#define DEFAULT_ICON_SIZE QSize(16,16) +#define _tabRect(i) tabList[i]->geometry() +#define tabIndex(i) tabList[i]->index -#define TAB_BTNCLOSE(index) tabButton(index, QTabBar::RightSide) -#define TAB_ICON(index) tabButton(index, QTabBar::LeftSide) -inline static bool verticalTabs(QTabBar::Shape shape) +class Tab : public QFrame { - return shape == QTabBar::RoundedWest || shape == QTabBar::RoundedEast - || shape == QTabBar::TriangularWest || shape == QTabBar::TriangularEast; + Q_OBJECT +public: + Tab(QWidget *parent = nullptr); + ~Tab(); + + void setText(const QString &text, Qt::TextElideMode mode = Qt::ElideRight); + void elideText(Qt::TextElideMode mode = Qt::ElideRight); + void setIcon(const QIcon &icon); + void polish(); + + QIcon *tab_icon = nullptr; + CAnimatedIcon *icon_label = nullptr; + QLabel *text_label = nullptr; + QToolButton *close_btn = nullptr; + QString text; + QString tabcolor; + int tab_width = -1; + int index = -1; + +signals: + void onTabWidthChanged(int width); + +protected: + virtual void resizeEvent(QResizeEvent*) final; + virtual void paintEvent(QPaintEvent*) override; + virtual bool eventFilter(QObject*, QEvent*) override; + +private: + CTabBar *tabBar = nullptr; +}; + +Tab::Tab(QWidget *parent) : + QFrame(parent), + tabcolor("none") +{ + setAttribute(Qt::WA_Hover); + installEventFilter(this); + setMinimumWidth(20); + tabBar = dynamic_cast(parent->parent()); + + QHBoxLayout *lut = new QHBoxLayout(this); + lut->setContentsMargins(6, 6, 6, 6); + lut->setSpacing(6); + setLayout(lut); + + icon_label = new CAnimatedIcon(this); + icon_label->setObjectName("tabIcon"); + icon_label->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); + icon_label->setMaximumSize(DEFAULT_ICON_SIZE); + lut->addWidget(icon_label); + + text_label = new QLabel(this); + text_label->setObjectName("tabText"); + text_label->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); + lut->addWidget(text_label); + + close_btn = new QToolButton(this); + close_btn->setObjectName("tabButton"); + close_btn->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); + close_btn->setMaximumSize(DEFAULT_ICON_SIZE); + lut->addWidget(close_btn); + show(); } -QMovableTabWidget::QMovableTabWidget(QWidget *parent) - : QWidget(parent) +Tab::~Tab() { + if (tab_icon) + delete tab_icon, tab_icon = nullptr; } -void QMovableTabWidget::paintEvent(QPaintEvent *e) +void Tab::setText(const QString &text, Qt::TextElideMode mode) { - Q_UNUSED(e); - QPainter p(this); - p.drawPixmap(0, 0, m_pixmap); + this->text = text; + elideText(mode); } -/* - * TabBarPrivate class description - * -*/ -void QTabBarPrivate::layoutTab(int index) +void Tab::elideText(Qt::TextElideMode mode) { - Q_Q(QTabBar); - Q_ASSERT(index >= 0); + const QMargins mrg = text_label->contentsMargins(); + const int padding = mrg.left() + mrg.right(); + const int width = text_label->maximumWidth() != QWIDGETSIZE_MAX ? text_label->maximumWidth() : text_label->width(); + QFontMetrics mtr(text_label->font()); + text_label->setText(mtr.elidedText(text, mode, width - padding - 1)); +} - Tab &tab = tabList[index]; - bool vertical = verticalTabs(shape); - if (!(tab.leftWidget || tab.rightWidget)) - return; +void Tab::setIcon(const QIcon &icon) +{ + if (tab_icon) + delete tab_icon, tab_icon = nullptr; + tab_icon = new QIcon(icon); + icon_label->setPixmap(tab_icon->pixmap(icon_label->size())); +} + +void Tab::polish() +{ + style()->polish(this); + icon_label->style()->polish(icon_label); + text_label->style()->polish(text_label); + close_btn->style()->polish(close_btn); +} - QStyleOptionTabV3 opt; - q->initStyleOption(&opt, index); - if (tab.leftWidget) { - QRect rect = q->style()->subElementRect(QStyle::SE_TabBarTabLeftButton, &opt, q); - QPoint p = rect.topLeft(); - if ((index == pressedIndex) || paintWithOffsets) { - if (vertical) - p.setY(p.y() + tabList[index].dragOffset); else - p.setX(p.x() + tabList[index].dragOffset); +void Tab::resizeEvent(QResizeEvent *event) +{ + QFrame::resizeEvent(event); + int new_width = event->size().width(); + if (tab_width < 0) { + tab_width = new_width; + } else { + if (tab_width != new_width) { + tab_width = new_width; + QTimer::singleShot(0, this, [=]() { + emit onTabWidthChanged(tab_width); + }); } - tab.leftWidget->move(p); } - if (tab.rightWidget) { - QRect rect = q->style()->subElementRect(QStyle::SE_TabBarTabRightButton, &opt, q); - QPoint p = rect.topLeft(); - if ((index == pressedIndex) || paintWithOffsets) { - if (vertical) - p.setY(p.y() + tab.dragOffset); - else - p.setX(p.x() + tab.dragOffset); - } +} - tab.rightWidget->move(p); +void Tab::paintEvent(QPaintEvent *ev) +{ + QFrame::paintEvent(ev); + if (!tabcolor.isEmpty() && tabcolor != "none" && property("selected").toBool()) { + if (tabBar && tabBar->property("active").toBool() && !tabBar->ignoreActiveTabColor()) { + QStylePainter p(this); + p.fillRect(rect(), QBrush(QColor(tabcolor))); + } } } -void QTabBarPrivate::layoutWidgets(int start) +bool Tab::eventFilter(QObject *obj, QEvent *ev) { - Q_Q(QTabBar); - - for (int i = start; i < q->count(); ++i) { - layoutTab(i); + switch (ev->type()) { + case QEvent::HoverEnter: + setProperty("hovered", true); + polish(); + break; + case QEvent::HoverLeave: + setProperty("hovered", false); + polish(); + break; + default: + break; } + return QFrame::eventFilter(obj, ev); } -void QTabBarPrivate::slide(int from, int to) -{ - Q_Q(QTabBar); - if (from == to || !validIndex(from) || !validIndex(to)) - return; +class CTabBar::CTabBarPrivate +{ +public: + CTabBarPrivate(CTabBar* owner); + ~CTabBarPrivate(); + + enum Direction { + Left, Right + }; + + int getIntersectedOffset(int index); + int getIntersectedIndex(int direction, int &offsetX); + int getLayoutsIntersectedIndex(Tab *tab, int &offsetX); + int cellWidth(); + int nextTabPosByPrev(int index); +// int prevTabPosByNext(int index); + void slide(int from, int to, int offset, int animation_ms); + void scrollToDirection(int direction); + void scrollTo(int index); + void onCurrentChanged(int index); + void onTabWidthChanged(int width); + void changeScrollerState(); + void reorderIndexes(); + void recalcWidth(); + bool indexIsValid(int index); + + CTabBar* owner = nullptr; + QFrame* tabArea = nullptr; + QFrame* scrollFrame = nullptr; + QToolButton* leftButton = nullptr; + QToolButton* rightButton = nullptr; + QVector tabList; + QVector tabLayouts; + Qt::TextElideMode elideMode; + Tab* movedTab = nullptr; + bool lock = false; + bool isUIThemeDark = false; + bool ignore_tabcolor = false; + int animationInProgress = 0; + int movedTabPosX = 0; + int movedTabPressPosX = 0; + int movedTabIndex = -1; + int tab_width = -1; + int currentIndex = -1; + QSize iconSize; +}; + +CTabBar::CTabBarPrivate::CTabBarPrivate(CTabBar* owner) : + owner(owner), + elideMode(Qt::ElideRight), + iconSize(DEFAULT_ICON_SIZE) +{ - bool vertical = verticalTabs(shape); - int preLocation = vertical ? q->tabRect(from).y() : q->tabRect(from).x(); - q->setUpdatesEnabled(false); - q->moveTab(from, to); - q->setUpdatesEnabled(true); - int postLocation = vertical ? q->tabRect(to).y() : q->tabRect(to).x(); - int length = postLocation - preLocation; - tabList[to].dragOffset -= length; - tabList[to].startAnimation(this, ANIMATION_DURATION); } -void QTabBarPrivate::moveTabFinished(int index) -{ - Q_Q(QTabBar); +CTabBar::CTabBarPrivate::~CTabBarPrivate() +{} - bool cleanup = (pressedIndex == index) || (pressedIndex == -1) || !validIndex(index); - bool allAnimationsFinished = true; -#ifndef QT_NO_ANIMATION - for(int i = 0; allAnimationsFinished && i < tabList.count(); ++i) { - const Tab &t = tabList.at(i); - if (t.animation && t.animation->state() == QAbstractAnimation::Running) - allAnimationsFinished = false; - } -#endif //QT_NO_ANIMATION - if (allAnimationsFinished && cleanup) { - if(movingTab) - movingTab->setVisible(false); // We might not get a mouse release - for (int i = 0; i < tabList.count(); ++i) { - tabList[i].dragOffset = 0; - } - if (pressedIndex != -1 && movable) { - pressedIndex = -1; - dragInProgress = false; - dragStartPosition = QPoint(); +int CTabBar::CTabBarPrivate::getIntersectedOffset(int index) +{ + if (indexIsValid(index)) { + QRect tabRect = _tabRect(index); + if (!tabArea->rect().contains(tabRect) && tabArea->rect().intersects(tabRect)) { + QRect interRect = tabArea->rect().intersected(tabRect); + int sign = (interRect.x() == 0) ? -1 : 1; + return sign * (cellWidth() - interRect.width()); } - layoutWidgets(); - } else { - if (!validIndex(index)) - return; - tabList[index].dragOffset = 0; } - - q->update(); + return 0; } -void QTabBarPrivate::setupMovableTab() -{ - Q_Q(QTabBar); - - if (!movingTab) - movingTab = new QMovableTabWidget((QWidget *)q); - - int taboverlap = q->style()->pixelMetric(QStyle::PM_TabBarTabOverlap, 0 ,q); - QRect grabRect = q->tabRect(pressedIndex); - grabRect.adjust(-taboverlap, 0, taboverlap, 0); - - QPixmap grabImage(grabRect.size()); - grabImage.fill(Qt::transparent); - QStylePainter p(&grabImage, q); - p.initFrom(q); - - QStyleOptionTabV3 tab; - q->initStyleOption(&tab, pressedIndex); - tab.rect.moveTopLeft(QPoint(taboverlap, 0)); - - QString text = tab.text; - tab.text = ""; - p.drawControl(QStyle::CE_TabBarTab, tab); - ((CTabBar*)q)->fillTabColor(&p, tab, pressedIndex, ((CTabBar*)q)->m_activeColor); - ((CTabBar*)q)->drawTabCaption(&p, text, tab); - p.end(); - - QPalette pal; - pal.setBrush(QPalette::All, QPalette::Window, grabImage); - movingTab->setPalette(pal); - movingTab->setGeometry(grabRect); - movingTab->setAutoFillBackground(true); - movingTab->raise(); - - // Re-arrange widget order to avoid overlaps - if (tabList[pressedIndex].leftWidget) - tabList[pressedIndex].leftWidget->raise(); - if (tabList[pressedIndex].rightWidget) - tabList[pressedIndex].rightWidget->raise(); - if (leftB) leftB->raise(); - if (rightB) rightB->raise(); - - movingTab->setVisible(true); +int CTabBar::CTabBarPrivate::getIntersectedIndex(int direction, int &offsetX) +{ + offsetX = 0; + for (int i = 0; i < tabList.size(); i++) { + QRect tabRect = _tabRect(i); + if (!tabArea->rect().contains(tabRect) && tabArea->rect().intersects(tabRect)) { + QRect interRect = tabArea->rect().intersected(tabRect); + if ((direction == Direction::Left && interRect.x() != 0) + || (direction == Direction::Right && interRect.x() == 0)) { + offsetX = cellWidth() - interRect.width(); + return i; + } + } + } + return -1; } -void QTabBarPrivate::moveTab(int index, int offset) +int CTabBar::CTabBarPrivate::getLayoutsIntersectedIndex(Tab *tab, int &offsetX) { - if (!validIndex(index)) - return; - - tabList[index].dragOffset = offset; - layoutTab(index); // Make buttons follow tab - q_func()->update(); + offsetX = 0; + QRect tabRect = tab->geometry(); + for (int i = 0; i < tabLayouts.size(); i++) { + if (i != tab->index && tabRect.intersects(tabLayouts[i])) { + QRect interRect = tabRect.intersected(tabLayouts[i]); + int sign = (tabRect.x() < tabLayouts[i].x()) ? -1 : 1; + offsetX = sign * interRect.width(); + return i; + } + } + return -1; } - -void QTabBarPrivate::Tab::TabBarAnimation::updateCurrentValue(const QVariant ¤t) +int CTabBar::CTabBarPrivate::cellWidth() { - priv->moveTab(priv->tabList.indexOf(*tab), current.toInt()); + Q_ASSERT(!tabList.isEmpty()); + return tabList[0]->width() + TABSPACING; } -void QTabBarPrivate::Tab::TabBarAnimation::updateState(QAbstractAnimation::State, QAbstractAnimation::State newState) +//int CTabBar::CTabBarPrivate::prevTabPosByNext(int index) +//{ +// Q_ASSERT(index > -1 && index < tabList.size()); +// return tabRect(index).left() - cellWidth() - 1; +//} + +int CTabBar::CTabBarPrivate::nextTabPosByPrev(int index) { - if (newState == Stopped) priv->moveTabFinished(priv->tabList.indexOf(*tab)); + Q_ASSERT(index > -1 && index < tabList.size()); + return _tabRect(index).right() + TABSPACING + 1; } -/* - * CTabBar descrition -*/ -CTabBar::CTabBar(QWidget * parent) - : QTabBar(parent) - , CScalingWrapper(parent) - , m_scrollPos(0) -{ - hide(); - setDrawBase(false); - - if (Utils::getScreenDpiRatio( - QApplication::desktop()->screen(QApplication::desktop()->primaryScreen())->geometry().topLeft()) > 1) - { - setProperty("scroll", "var2"); +void CTabBar::CTabBarPrivate::slide(int from, int to, int offset, int animation_ms) +{ + animationInProgress++; + QParallelAnimationGroup *group = new QParallelAnimationGroup; + for (int i = from; i <= to; i++) { + QPropertyAnimation* animation = new QPropertyAnimation(tabList[i], "pos"); + animation->setDuration(animation_ms); + animation->setStartValue(tabList[i]->pos()); + animation->setEndValue(tabList[i]->pos() + QPoint(offset, 0)); + animation->setEasingCurve(QEasingCurve::InOutQuad); + group->addAnimation(animation); } - - connect(this, &QTabBar::currentChanged, this, &CTabBar::onCurrentChanged); - connect(this, &QTabBar::tabMoved, this, [=](){ - m_tabWasMoved = true; + QObject::connect(group, &QParallelAnimationGroup::finished, qApp, [=]() { + changeScrollerState(); }); + QObject::connect(group, &QParallelAnimationGroup::stateChanged, qApp, + [=](QAbstractAnimation::State newState, QAbstractAnimation::State) { + if (newState == QAbstractAnimation::Stopped) + animationInProgress--; + }); + group->start(QParallelAnimationGroup::DeleteWhenStopped); } -CTabBar::~CTabBar() +void CTabBar::CTabBarPrivate::scrollToDirection(int direction) { + while (animationInProgress) + qApp->processEvents(); -} + if (tabList.isEmpty()) + return; -void CTabBar::initCustomScroll(QFrame *_pScrollerFrame, - QToolButton *_pLeftButton, - QToolButton *_pRightButton) -{ - // Bypassing the bug with tab scroller - m_pScrollerFrame = _pScrollerFrame; - m_pLeftButton = _pLeftButton; - m_pRightButton = _pRightButton; - m_pScrollerFrame->show(); - m_pScrollerFrame->raise(); - m_pLeftButton->show(); - m_pLeftButton->raise(); - m_pRightButton->show(); - m_pRightButton->raise(); - m_pScrollerFrame->setVisible(false); - connect(m_pLeftButton, &QToolButton::clicked, this, [=](){ - Q_D(QTabBar); - d->leftB->click(); - m_scrollPos = d->scrollOffset; - changeCustomScrollerState(); - }); - connect(m_pRightButton, &QToolButton::clicked, this, [=](){ - Q_D(QTabBar); - d->rightB->click(); - m_scrollPos = d->scrollOffset; - changeCustomScrollerState(); - }); // End bypassing the bug + const int supIndex = (direction == Direction::Left) ? tabList.size() - 1 : 0; + if (!tabArea->rect().contains(_tabRect(supIndex))) { + int offsetX; + int ind = getIntersectedIndex(direction, offsetX); + int offset = (ind != -1) ? offsetX : cellWidth(); + if (direction == Direction::Left) + offset *= -1; + slide(0, tabList.size() - 1, offset, ANIMATION_SCROLL_MS); + } } -void CTabBar::mouseMoveEvent(QMouseEvent * event) +void CTabBar::CTabBarPrivate::scrollTo(int index) { - Q_D(QTabBar); - this->setCursor(QCursor(Qt::ArrowCursor)); - if (verticalTabs(d->shape)) { - QTabBar::mouseMoveEvent(event); + while (animationInProgress) + qApp->processEvents(); + + if (!indexIsValid(index)) return; - } - if (d->movable) { - // Be safe! - if (d->pressedIndex != -1 && event->buttons() == Qt::NoButton) - d->moveTabFinished(d->pressedIndex); + if (!tabArea->rect().contains(_tabRect(index))) { + int x = _tabRect(index).x(); + int offsetX = (x > 0) ? x - tabArea->width() + cellWidth() : x; + slide(0, tabList.size() - 1, -1 * offsetX, ANIMATION_DEFAULT_MS); + } else { + changeScrollerState(); + } +} - // Start drag - if (!d->dragInProgress && d->pressedIndex != -1) { - if ((event->pos() - d->dragStartPosition).manhattanLength() > QApplication::startDragDistance()) { - d->dragInProgress = true; - d->setupMovableTab(); - } - } +void CTabBar::CTabBarPrivate::onCurrentChanged(int index) +{ + while (animationInProgress) + qApp->processEvents(); + recalcWidth(); + scrollTo(index); + currentIndex = index; + for (int i = 0; i < tabList.size(); i++) { + tabList[i]->setProperty("selected", i == index); + tabList[i]->polish(); + } + emit owner->currentChanged(index); +} - int offset = (event->pos() - d->dragStartPosition).manhattanLength(); - if (event->buttons() == Qt::LeftButton - && offset > QApplication::startDragDistance() && d->validIndex(d->pressedIndex)) { - if ( abs(event->pos().y() - d->dragStartPosition.y()) > 30 ) { - bool isaccepted = false; - emit tabUndock(d->pressedIndex, &isaccepted); +void CTabBar::CTabBarPrivate::onTabWidthChanged(int width) +{ + Q_UNUSED(width) + while (animationInProgress) + qApp->processEvents(); - if (isaccepted) - interruptTabMoving(d->pressedIndex); - return; - } + if (!tabList.isEmpty()) + iconSize = tabList[0]->icon_label->size(); - int dragDistance = (event->pos().x() - d->dragStartPosition.x()); + for (int i = 0; i < tabList.size(); i++) { + int posX = i * cellWidth(); + tabList[i]->move(posX, 0); - if ((d->pressedIndex == 0 && dragDistance < 0) || - (d->pressedIndex + 1 == count() && dragDistance > 0)) - { - dragDistance = 0; - } + if (QIcon *icon = tabList[i]->tab_icon) + tabList[i]->icon_label->setPixmap(icon->pixmap(iconSize)); - d->tabList[d->pressedIndex].dragOffset = dragDistance; + tabList[i]->elideText(elideMode); + } + recalcWidth(); + scrollTo(currentIndex); +} - QRect startingRect = tabRect(d->pressedIndex); - startingRect.moveLeft(startingRect.x() + dragDistance); +void CTabBar::CTabBarPrivate::changeScrollerState() +{ + bool allowScroll = false; + for (int i = 0; i < tabList.size(); i++) { + if (_tabRect(i).x() + 1 < 0) { + allowScroll = true; + break; + } + } + leftButton->setEnabled(allowScroll); - int overIndex; - if (dragDistance < 0) - overIndex = tabAt(startingRect.topLeft()); else - overIndex = tabAt(startingRect.topRight()); + allowScroll = false; + for (int i = 0; i < tabList.size(); i++) { + if (_tabRect(i).right() + TABSPACING > tabArea->rect().right()) { + allowScroll = true; + break; + } + } + rightButton->setEnabled(allowScroll); +} - if (overIndex != d->pressedIndex && overIndex != -1) { - int offset = 1; - if (isRightToLeft()) offset *= -1; - if (dragDistance < 0) { - dragDistance *= -1; - offset *= -1; - } - for (int i = d->pressedIndex; - offset > 0 ? i < overIndex : i > overIndex; - i += offset) { - QRect overIndexRect = tabRect(overIndex); - int needsToBeOver = overIndexRect.width() / 2; - if (dragDistance > needsToBeOver) - d->slide(i + offset, d->pressedIndex); +void CTabBar::CTabBarPrivate::reorderIndexes() +{ + QVector dupTabList = tabList; + for (int i = 0; i < tabList.size(); i++) { + if (tabIndex(i) != i) { + for (int j = 0; j < tabList.size(); j++) { + if (j != i && dupTabList[j]->index == i) { + tabList[i] = dupTabList[j]; + break; } } - - // Buttons needs to follow the dragged tab - d->layoutTab(d->pressedIndex); - - update(); } } +} - if (event->buttons() != Qt::LeftButton) { - event->ignore(); - return; - } - - QStyleOptionTabBarBaseV2 optTabBase; - optTabBase.init(this); - optTabBase.documentMode = d->documentMode; +void CTabBar::CTabBarPrivate::recalcWidth() +{ + int minWidth = (tabList.isEmpty()) ? 0 : cellWidth(); + tabArea->setMinimumWidth(minWidth); + tabArea->setMaximumWidth(minWidth * tabList.size()); + owner->setMaximumWidth(tabArea->maximumWidth() + scrollFrame->maximumWidth()); + qApp->processEvents(); } -void CTabBar::mousePressEvent(QMouseEvent * e) +bool CTabBar::CTabBarPrivate::indexIsValid(int index) { - QCoreApplication::postEvent(parent(), new QEvent(QEvent::MouseButtonPress)); - if ( e->button() == Qt::LeftButton ) { - QTabBar::mousePressEvent(e); -// if ( count() == 1 ) e->ignore(); - } else e->ignore(); + return index > -1 && index < tabList.size(); } -void CTabBar::mouseReleaseEvent(QMouseEvent * e) -{ - QTabBar::mouseReleaseEvent(e); - releaseMouse(); - if (e->button() == Qt::MiddleButton) - onCloseButton(); - if (m_tabWasMoved) { - m_tabWasMoved = false; - int ind = currentIndex(); - if (ind > 0) { - blockSignals(true); - setCurrentIndex(ind - 1); - setCurrentIndex(ind); - blockSignals(false); - changeCustomScrollerState(); - } - } + +CTabBar::CTabBar(QWidget *parent) : + QFrame(parent), + d(new CTabBarPrivate(this)) +{ + installEventFilter(this); + QHBoxLayout *main_layout = new QHBoxLayout(this); + main_layout->setAlignment(Qt::AlignLeft); + main_layout->setContentsMargins(0,0,0,0); + main_layout->setSpacing(0); + d->tabArea = new QFrame(this); + d->tabArea->setObjectName("tabArea"); + d->tabArea->installEventFilter(this); + d->tabArea->setMaximumWidth(0); + d->tabArea->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); + main_layout->addWidget(d->tabArea); + setMinimumWidth(0); + setMaximumWidth(0); + + d->scrollFrame = new QFrame(this); + d->scrollFrame->setObjectName("tabScroll"); + QHBoxLayout *scrollLayout = new QHBoxLayout(d->scrollFrame); + scrollLayout->setSpacing(0); + scrollLayout->setContentsMargins(0,0,0,0); + d->scrollFrame->setLayout(scrollLayout); + + d->leftButton = new QToolButton(d->scrollFrame); + d->rightButton = new QToolButton(d->scrollFrame); + d->leftButton->setObjectName("leftButton"); + d->rightButton->setObjectName("rightButton"); + + scrollLayout->addWidget(d->leftButton); + scrollLayout->addWidget(d->rightButton); + d->leftButton->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); + d->rightButton->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); + + main_layout->addWidget(d->scrollFrame); + connect(d->leftButton, &QToolButton::clicked, this, [=]() { + d->scrollToDirection(d->Direction::Right); + }); + connect(d->rightButton, &QToolButton::clicked, this, [=]() { + d->scrollToDirection(d->Direction::Left); + }); + + show(); + d->leftButton->hide(); + d->rightButton->hide(); + d->leftButton->setEnabled(false); + d->rightButton->setEnabled(false); } -void CTabBar::wheelEvent(QWheelEvent *event) +CTabBar::~CTabBar() { - QTabBar::wheelEvent(event); - emit onCurrentChangedByWhell(currentIndex()); + delete d, d = nullptr; } -void CTabBar::drawTabCaption(QPainter * p, const QString& s, const QStyleOptionTab& t) +int CTabBar::addTab(const QString &text) { - if ( m_usePalette ) { - if ( m_palette.currentColorGroup() != QPalette::Disabled && - t.state & QStyle::State_Selected /*|| t.state & QStyle::State_MouseOver*/ ) - p->setPen( QPen(m_palette.color(QPalette::Active, QPalette::ButtonText))); - else p->setPen( QPen(m_palette.color(QPalette::Inactive, QPalette::ButtonText))); - } else { - p->setPen(QPen(t.palette.foreground().color())); + while (d->animationInProgress) + qApp->processEvents(); + + const int lastIndex = d->tabList.size() - 1; + const int posX = (lastIndex == -1) ? 0 : d->nextTabPosByPrev(lastIndex); + Tab *tab = new Tab(d->tabArea); + tab->move(posX, 0); + tab->setFixedHeight(d->tabArea->height()); + tab->setText(text, d->elideMode); + if (tab->icon_label->minimumSize().isNull()) { + tab->icon_label->setBaseSize(d->iconSize); + tab->icon_label->setFixedSize(d->iconSize); } + tab->index = lastIndex + 1; + d->tabList.append(tab); + connect(tab->close_btn, &QToolButton::clicked, this, [=]() { + emit tabCloseRequested(tab->index); + }); + connect(tab, &Tab::onTabWidthChanged, this, [=](int width) { + if (d->tab_width != width) { + d->tab_width = width; + d->onTabWidthChanged(width); + } + }); + tabInserted(lastIndex + 1); + d->onCurrentChanged(lastIndex + 1); + return d->currentIndex; +} - QPoint _lt = QPoint(15, 0) * scaling(); - QPoint _rb = QPoint(-22, -2) * scaling(); - - QRect trect(t.rect.topLeft() + QPoint(t.iconSize.width(), 0) + _lt, - t.rect.bottomRight() + _rb); +int CTabBar::addTab(const QIcon &icon, const QString &text) +{ + const int index = addTab(text); + setTabIcon(index, icon); + return index; +} -// QFont f = font(); -// f.setPointSize(8); +int CTabBar::count() const +{ + return d->tabList.size(); +} -// p->setFont(f); +int CTabBar::currentIndex() const +{ + return d->currentIndex; +} - QString es = fontMetrics().elidedText(s, Qt::ElideRight, trect.width(), Qt::TextShowMnemonic); - p->drawText(trect, Qt::AlignVCenter, es); +Qt::TextElideMode CTabBar::elideMode() const +{ + return d->elideMode; } -void CTabBar::paintEvent(QPaintEvent * event) +QSize CTabBar::iconSize() const { - Q_D(QTabBar); + return d->iconSize; +} -#ifdef _QTVER_DOWNGRADE - if (verticalTabs(d->shape)) { - QTabBar::paintEvent(event); - return; +int CTabBar::insertTab(int index, const QString &text) +{ + while (d->animationInProgress) + qApp->processEvents(); + + if (!d->indexIsValid(index)) + return addTab(text); + + while (d->animationInProgress) + qApp->processEvents(); + + int posX = d->_tabRect(index).left(); + d->slide(index, d->tabList.size() - 1, d->cellWidth(), ANIMATION_DEFAULT_MS); + while (d->animationInProgress) + qApp->processEvents(); + + Tab *tab = new Tab(d->tabArea); + tab->move(posX, 0); + tab->setFixedHeight(d->tabArea->height()); + tab->setText(text, d->elideMode); + if (tab->icon_label->minimumSize().isNull()) { + tab->icon_label->setBaseSize(d->iconSize); + tab->icon_label->setFixedSize(d->iconSize); } + d->tabList.insert(index, tab); + for (int i = index; i < d->tabList.size(); i++) + d->tabIndex(i) = i; - QStyleOptionTabBarBaseV2 optTabBase; - QTabBarPrivate::initStyleBaseOption(&optTabBase, this, size()); - - QStylePainter p(this); - int selected = -1; - int cut = -1; - bool rtl = optTabBase.direction == Qt::RightToLeft; - QStyleOptionTab cutTab; - selected = d->currentIndex; - if (d->dragInProgress) - selected = d->pressedIndex; + connect(tab->close_btn, &QToolButton::clicked, this, [=]() { + emit tabCloseRequested(tab->index); + }); + connect(tab, &Tab::onTabWidthChanged, this, [=](int width) { + if (d->tab_width != width) { + d->tab_width = width; + d->onTabWidthChanged(width); + } + }); + tabInserted(index); + d->onCurrentChanged(index); + return d->currentIndex; +} - for (int i = 0; i < d->tabList.count(); ++i) - optTabBase.tabBarRect |= tabRect(i); +int CTabBar::insertTab(int index, const QIcon &icon, const QString &text) +{ + const int actual_index = insertTab(index, text); + setTabIcon(actual_index, icon); + return actual_index; +} - optTabBase.selectedTabRect = tabRect(selected); +void CTabBar::moveTab(int from, int to) +{ + while (d->animationInProgress) + qApp->processEvents(); - if (d->drawBase) - p.drawPrimitive(QStyle::PE_FrameTabBarBase, optTabBase); + if (from == to || !d->indexIsValid(from) || !d->indexIsValid(to)) + return; - for (int i = 0; i < d->tabList.count(); ++i) { - QStyleOptionTabV3 tab; - initStyleOption(&tab, i); + int posX = d->_tabRect(from).x(); + d->tabList[from]->move(d->_tabRect(to).x(), 0); + d->tabList[to]->move(posX, 0); + int from_index = d->tabIndex(from); + d->tabIndex(from) = d->tabIndex(to); + d->tabIndex(to) = from_index; + Tab *from_tab = d->tabList[from]; + d->tabList[from] = d->tabList[to]; + d->tabList[to] = from_tab; + d->scrollTo(to); + emit tabMoved(from, to); +} - if (d->paintWithOffsets && d->tabList[i].dragOffset != 0) { - tab.rect.moveLeft(tab.rect.x() + d->tabList[i].dragOffset); - } - if (!(tab.state & QStyle::State_Enabled)) { - tab.palette.setCurrentColorGroup(QPalette::Disabled); - } - // If this tab is partially obscured, make a note of it so that we can pass the information - // along when we draw the tear. - if ((!rtl && tab.rect.left() < 0) || (rtl && tab.rect.right() > width())) { - cut = i; - cutTab = tab; - } - // Don't bother drawing a tab if the entire tab is outside of the visible tab bar. - if (tab.rect.right() < 0 || tab.rect.left() > width()) - continue; - - optTabBase.tabBarRect |= tab.rect; - if (i == selected) - continue; - - QString text(tab.text); - tab.text.clear(); - p.drawControl(QStyle::CE_TabBarTab, tab); - drawTabCaption(&p, text, tab); - } +void CTabBar::removeTab(int index) +{ + while (d->animationInProgress) + qApp->processEvents(); - // Draw the selected tab last to get it "on top" - if (selected >= 0) { - QStyleOptionTabV3 tab; - initStyleOption(&tab, selected); + if (!d->indexIsValid(index)) + return; - if (d->paintWithOffsets && d->tabList[selected].dragOffset != 0) { - tab.rect.moveLeft(tab.rect.x() + d->tabList[selected].dragOffset); + d->tabList[index]->hide(); + if (d->_tabRect(0).x() <= d->tabArea->x() - d->cellWidth()) { + const int prevIndex = index - 1; + if (prevIndex > -1) { + d->slide(0, prevIndex, d->cellWidth(), ANIMATION_DEFAULT_MS); + while (d->animationInProgress) + qApp->processEvents(); } - if (!d->dragInProgress) { - QString text(tab.text); - tab.text.clear(); - p.drawControl(QStyle::CE_TabBarTab, tab); - - if ( m_activeColor != "none" ) - fillTabColor(&p, tab, selected, m_activeColor); - drawTabCaption(&p, text, tab); - } else { - int taboverlap = style()->pixelMetric(QStyle::PM_TabBarTabOverlap, 0, this); - d->movingTab->setGeometry(tab.rect.adjusted(-taboverlap, 0, taboverlap, 0)); + } else { + const int nextIndex = index + 1; + if (nextIndex < d->tabList.size()) { + d->slide(nextIndex, d->tabList.size() - 1, -1 * d->cellWidth(), ANIMATION_DEFAULT_MS); + while (d->animationInProgress) + qApp->processEvents(); } } - // Only draw the tear indicator if necessary. Most of the time we don't need too. - if (d->leftB->isVisible() && cut >= 0) { - cutTab.rect = rect(); - cutTab.rect = style()->subElementRect(QStyle::SE_TabBarTearIndicator, &cutTab, this); - p.drawPrimitive(QStyle::PE_IndicatorTabTear, cutTab); - } -#else - QStyleOptionTabBarBase optTabBase; - QTabBarPrivate::initStyleBaseOption(&optTabBase, this, size()); - - QStylePainter p(this); - int selected = -1; - int cutLeft = -1; - int cutRight = -1; - bool vertical = verticalTabs(d->shape); - QStyleOptionTab cutTabLeft; - QStyleOptionTab cutTabRight; - selected = d->currentIndex; - if (d->dragInProgress) - selected = d->pressedIndex; - QRect scrollRect = d->normalizedScrollRect(); - - for (int i = 0; i < d->tabList.count(); ++i) - optTabBase.tabBarRect |= tabRect(i); - - optTabBase.selectedTabRect = tabRect(selected); - - if (d->drawBase) - p.drawPrimitive(QStyle::PE_FrameTabBarBase, optTabBase); - - for (int i = 0; i < d->tabList.count(); ++i) { - QStyleOptionTab tab; - initStyleOption(&tab, i); - if (d->paintWithOffsets && d->tabList[i].dragOffset != 0) { - if (vertical) { - tab.rect.moveTop(tab.rect.y() + d->tabList[i].dragOffset); + delete d->tabList[index]; + d->tabList.remove(index); + for (int i = index; i < d->tabList.size(); i++) + d->tabIndex(i) = i; + + if (d->currentIndex > 0) { + if (index > 0) { + if (d->currentIndex > index) { + d->onCurrentChanged(d->currentIndex - 1); + } else + if (d->currentIndex < index) { + d->recalcWidth(); } else { - tab.rect.moveLeft(tab.rect.x() + d->tabList[i].dragOffset); + const int initialMaxIndex = d->tabList.size(); // max index before deletion + if (index < initialMaxIndex) { + d->onCurrentChanged(index); + } else { + d->onCurrentChanged(initialMaxIndex - 1); + } } + } else { + d->onCurrentChanged(d->currentIndex - 1); } - if (!(tab.state & QStyle::State_Enabled)) { - tab.palette.setCurrentColorGroup(QPalette::Disabled); - } - - // If this tab is partially obscured, make a note of it so that we can pass the information - // along when we draw the tear. - QRect tabRect = d->tabList[i].rect; - int tabStart = vertical ? tabRect.top() : tabRect.left(); - int tabEnd = vertical ? tabRect.bottom() : tabRect.right(); - if (tabStart < scrollRect.left() + d->scrollOffset) { - cutLeft = i; - cutTabLeft = tab; - } else if (tabEnd > scrollRect.right() + d->scrollOffset) { - cutRight = i; - cutTabRight = tab; - } - - // Don't bother drawing a tab if the entire tab is outside of the visible tab bar. - if ((!vertical && (tab.rect.right() < 0 || tab.rect.left() > width())) - || (vertical && (tab.rect.bottom() < 0 || tab.rect.top() > height()))) - continue; - - optTabBase.tabBarRect |= tab.rect; - if (i == selected) - continue; - - QString text(tab.text); - tab.text.clear(); - p.drawControl(QStyle::CE_TabBarTab, tab); - drawTabCaption(&p, text, tab); - } - - // Draw the selected tab last to get it "on top" - if (selected >= 0) { - QStyleOptionTab tab; - initStyleOption(&tab, selected); - if (d->paintWithOffsets && d->tabList[selected].dragOffset != 0) { - if (vertical) - tab.rect.moveTop(tab.rect.y() + d->tabList[selected].dragOffset); - else - tab.rect.moveLeft(tab.rect.x() + d->tabList[selected].dragOffset); - } - if (!d->dragInProgress) { - QString text(tab.text); - tab.text.clear(); - p.drawControl(QStyle::CE_TabBarTab, tab); - - if ( m_activeColor != "none" ) - fillTabColor(&p, tab, selected, m_activeColor); - drawTabCaption(&p, text, tab); + } else { + if (index > 0) { + d->recalcWidth(); } else { - int taboverlap = style()->pixelMetric(QStyle::PM_TabBarTabOverlap, 0, this); - if (verticalTabs(d->shape)) - d->movingTab->setGeometry(tab.rect.adjusted(0, -taboverlap, 0, taboverlap)); - else - d->movingTab->setGeometry(tab.rect.adjusted(-taboverlap, 0, taboverlap, 0)); + const int initialMaxIndex = d->tabList.size(); // max index before deletion + if (index < initialMaxIndex) { + d->onCurrentChanged(index); + } else { + d->onCurrentChanged(-1); + } } } - - // Only draw the tear indicator if necessary. Most of the time we don't need too. - if (d->leftB->isVisible() && cutLeft >= 0) { - cutTabLeft.rect = rect(); - cutTabLeft.rect = style()->subElementRect(QStyle::SE_TabBarTearIndicatorLeft, &cutTabLeft, this); - p.drawPrimitive(QStyle::PE_IndicatorTabTearLeft, cutTabLeft); - } - - if (d->rightB->isVisible() && cutRight >= 0) { - cutTabRight.rect = rect(); - cutTabRight.rect = style()->subElementRect(QStyle::SE_TabBarTearIndicatorRight, &cutTabRight, this); - p.drawPrimitive(QStyle::PE_IndicatorTabTearRight, cutTabRight); - } -#endif - } -void CTabBar::resizeEvent(QResizeEvent *event) +void CTabBar::setElideMode(Qt::TextElideMode mode) { - QTabBar::resizeEvent(event); - Q_D(QTabBar); - m_scrollPos = d->scrollOffset; - changeCustomScrollerState(); + d->elideMode = mode; } -void CTabBar::fillTabColor(QPainter * p, const QStyleOptionTab& tab, uint index, const QColor& color) +void CTabBar::setIconSize(const QSize &size) { - int border_width = scaling() > 1 ? 2 : 1; - - QRect tabRect(tab.rect); - tabRect.adjust(-border_width, 0, 0, 0); - p->fillRect( tabRect, QBrush(QColor(color)) ); - - if ( !tabData(index).isNull() && tabData(index).toInt() == TabTheme::LightTab ) { - if ( !m_isUIThemeDark ) { - QPen _pen = p->pen(); - _pen.setColor(QColor("#a5a5a5")); - _pen.setWidth(border_width); - - p->setPen(_pen); - p->drawLine(tabRect.bottomLeft(), tabRect.topLeft()); - p->drawLine(tabRect.bottomRight(), tabRect.topRight()); - } + d->iconSize = size; + for (int i = 0; i < d->tabList.size(); i++) { + if (d->tabList[i]->icon_label->baseSize().isNull()) + break; + d->tabList[i]->icon_label->setBaseSize(size); + d->tabList[i]->icon_label->setFixedSize(size); + if (QIcon *icon = d->tabList[i]->tab_icon) + d->tabList[i]->icon_label->setPixmap(icon->pixmap(d->iconSize)); } } -void CTabBar::setTabTextColor(QPalette::ColorGroup group, const QColor& color) +void CTabBar::setTabIconLabel(int index, QWidget *widget) { - m_usePalette = true; - m_palette.setColor(group, QPalette::ButtonText, color); + if (!d->indexIsValid(index)) + return; + if (CAnimatedIcon *icon_label = dynamic_cast(widget)) { + Tab *tab = d->tabList[index]; + if (tab->icon_label) + delete tab->icon_label; + tab->icon_label = icon_label; + icon_label->setParent(tab); + icon_label->setObjectName("tabIcon"); + icon_label->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); + icon_label->setMaximumSize(DEFAULT_ICON_SIZE); + if (QHBoxLayout *lut = dynamic_cast(tab->layout())) + lut->insertWidget(0, icon_label); + icon_label->style()->polish(icon_label); + } } -QPalette& CTabBar::customColors() +void CTabBar::setTabButton(int index, QWidget *widget) { - return m_palette; + if (!d->indexIsValid(index)) + return; + if (QToolButton *close_btn = dynamic_cast(widget)) { + Tab *tab = d->tabList[index]; + if (tab->close_btn) + delete tab->close_btn; + tab->close_btn = close_btn; + close_btn->setParent(tab); + close_btn->setObjectName("tabButton"); + close_btn->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); + close_btn->setMaximumSize(DEFAULT_ICON_SIZE); + connect(close_btn, &QToolButton::clicked, this, [=]() { + emit tabCloseRequested(tab->index); + }); + if (QHBoxLayout *lut = dynamic_cast(tab->layout())) + lut->insertWidget(2, close_btn); + close_btn->style()->polish(close_btn); + } } -QVariant CTabBar::tabProperty(int index, const char *name) +//void CTabBar::setTabData(int index, const QVariant &data) +//{ +// if (d->indexIsValid(index)) +// d->tabList[index]->setProperty("TabData", data); +//} + +void CTabBar::setTabIcon(int index, const QIcon &icon) { - auto *wgt = tabButton(index, QTabBar::RightSide); - if (!wgt) - wgt = tabButton(index, QTabBar::LeftSide); - if (wgt) - return wgt->property(name); - return QVariant(); + if (d->indexIsValid(index)) + d->tabList[index]->setIcon(icon); } -void CTabBar::setTabProperty(int index, const char *name, const QVariant &value) +void CTabBar::setTabText(int index, const QString &text) { - auto *wgt = tabButton(index, QTabBar::RightSide); - if (!wgt) - wgt = tabButton(index, QTabBar::LeftSide); - if (wgt) - wgt->setProperty(name, value); + if (d->indexIsValid(index)) + d->tabList[index]->setText(text); } -void CTabBar::setUseTabCustomPalette(bool use) +void CTabBar::setTabToolTip(int index, const QString &text) { - m_usePalette = use; + if (d->indexIsValid(index)) { + d->tabList[index]->setProperty("ToolTip", text); + d->tabList[index]->icon_label->setProperty("ToolTip", text); + d->tabList[index]->text_label->setProperty("ToolTip", text); + d->tabList[index]->close_btn->setProperty("ToolTip", text); + } } -void CTabBar::tabInserted(int index) +void CTabBar::setCurrentIndex(int index) { - QToolButton * close = new QToolButton(this); - close->setProperty("class", "tab-close"); - close->setFocusPolicy(Qt::NoFocus); - close->setFixedSize( QSize(16, 16) * scaling() ); - if ( index == currentIndex() ) - close->setProperty("state", "active"); else - close->hide(); - - connect(close, &QToolButton::clicked, this, &CTabBar::onCloseButton); - setTabButton(index, QTabBar::RightSide, close); - - CAnimatedIcon * icon = new CAnimatedIcon(this); - icon->setFixedSize(iconSize()); - setTabButton(index, QTabBar::LeftSide, icon); - - QTabBar::tabInserted(index); + while (d->animationInProgress) + qApp->processEvents(); + if (!d->indexIsValid(index) || index == d->currentIndex) + return; + d->onCurrentChanged(index); } -void CTabBar::onCurrentChanged(int index) +void CTabBar::setActiveTabColor(int index, const QString& color) { - Q_D(QTabBar); - m_scrollPos = d->scrollOffset; - if (this->count() == 0) { - this->hide(); - } else if (this->isHidden()) { - this->show(); - } - - QWidget * b = TAB_BTNCLOSE(m_current); -// if ( tabData(m_current).isNull() ) - { - if ( b ) { - b->hide(); -// b->setProperty("state", "normal"); -// b->style()->polish(b); - } + if (!d->indexIsValid(index) || color == "none") + return; + if (d->tabList[index]->tabcolor != color) { + d->tabList[index]->tabcolor = color; + d->tabList[index]->polish(); } +} -// if ( tabData(index).isNull() ) - { - b = TAB_BTNCLOSE(index); - if ( b ) { - b->show(); -// b->setProperty("state", "active"); -// b->style()->polish(b); +void CTabBar::setUseTabCustomPalette(int index, bool use) +{ + if (d->indexIsValid(index)) { + if (d->tabList[index]->property("custom").toBool() != use) { + d->tabList[index]->setProperty("custom", use); + polish(); } } - - m_current = index; - changeCustomScrollerState(); } -void CTabBar::changeCustomScrollerState() +void CTabBar::setTabLoading(int index, bool start) { - // Bypassing the bug with tab scroller - Q_D(QTabBar); - if (m_pScrollerFrame && m_pLeftButton && m_pRightButton) { - if (d->leftB->isVisible()) { - m_pScrollerFrame->setVisible(true); - } else { - m_pScrollerFrame->setVisible(false); - } - if (d->leftB->isEnabled()) { - m_pLeftButton->setEnabled(true); - } else { - m_pLeftButton->setEnabled(false); - } - if (d->rightB->isEnabled()) { - m_pRightButton->setEnabled(true); - } else { - m_pRightButton->setEnabled(false); - } + if (!start) { + if (CAnimatedIcon * icon = (CAnimatedIcon*)tabIconLabel(index)) + icon->stop(); } - // End bypassing the bug } -void CTabBar::tabRemoved(int index) +void CTabBar::setTabIconTheme(int index, TabTheme theme) { - QWidget * i = TAB_ICON(index); - if ( i ) { -// qDebug() << "tab removed: " << index; - } else { -// qDebug() << "tab already removed: " << index; - } + if (CAnimatedIcon * icon = (CAnimatedIcon*)tabIconLabel(index)) + icon->setSvgElement(theme == TabTheme::LightTab ? "dark" : "light"); +} - QTabBar::tabRemoved(index); +void CTabBar::tabStartLoading(int index, const QString& theme) +{ + CAnimatedIcon * icon = (CAnimatedIcon*)tabIconLabel(index); + if (icon && !icon->isStarted() ) + icon->startSvg(":/tabbar/icons/loader.svg", theme); } -void CTabBar::setTabIcon(int index, const QIcon &icon) +void CTabBar::setIgnoreActiveTabColor(bool ignore) { - QWidget * i = TAB_ICON(index); - if ( i ) { - QSize _iconSize = iconSize(); - QRect _tabRect = tabRect(index); - int _top = (_tabRect.height() - _iconSize.height()) / 2; - double dpi_ratio = scaling(); - - ((CAnimatedIcon *)i)->setPixmap(icon.pixmap(_iconSize)); - int top_offset{1}; - if (dpi_ratio < 1.25) top_offset = 1; else - if (dpi_ratio < 1.5) top_offset = 2; else - if (dpi_ratio < 1.75) top_offset = 2; else - if (dpi_ratio < 2) top_offset = 3; else - if (dpi_ratio < 2.5) top_offset = 4; else - if (dpi_ratio < 3) top_offset = 5; else - if (dpi_ratio < 3.5) top_offset = 5; else - if (dpi_ratio < 4) top_offset = 6; else - if (dpi_ratio < 4.5) top_offset = 8; else - if (dpi_ratio < 5) top_offset = 9; else - top_offset = 9; - - i->setGeometry(QRect(QPoint(_tabRect.left() + 4, _top - top_offset),_iconSize)); - i->setFixedSize(_iconSize.width() + int(8 * dpi_ratio), iconSize().height() + int(4 * dpi_ratio)); - - update(_tabRect); - } + d->ignore_tabcolor = ignore; } -void CTabBar::setTabLoading(int index, bool start) +bool CTabBar::ignoreActiveTabColor() { - if ( start ) { -// tabStartLoading(index, index == currentIndex() && m_active ? "light" : "dark"); - } else { - CAnimatedIcon * icon = (CAnimatedIcon *)TAB_ICON(index); - if ( icon ) icon->stop(); - } + return d->ignore_tabcolor; } -void CTabBar::tabStartLoading(int index, const QString& theme) +void CTabBar::polish() { - CAnimatedIcon * icon = (CAnimatedIcon *)TAB_ICON(index); - if ( icon ) { - if ( !icon->isStarted() ) - icon->startSvg(":/tabbar/icons/loader.svg", theme); - } + for (int i = 0; i < d->tabList.size(); i++) + d->tabList[i]->polish(); + d->tabArea->style()->polish(d->tabArea); + d->scrollFrame->style()->polish(d->scrollFrame); + d->leftButton->style()->polish(d->leftButton); + d->rightButton->style()->polish(d->rightButton); } -void CTabBar::onCloseButton() +int CTabBar::tabIndexAt(const QPoint &pos) const { - QWidget * b = sender() ? (QWidget *)sender() : - qApp->widgetAt(QCursor::pos()); - int tabToClose = -1; - for (int i(0); i < count(); ++i) { - if ( TAB_BTNCLOSE(i) == b ) { - tabToClose = i; - break; + QPoint rel_pos = d->tabArea->mapFromParent(pos); + if (d->tabArea->rect().contains(rel_pos)) { + for (int i = 0; i < d->tabList.size(); i++) { + if (d->_tabRect(i).contains(rel_pos)) + return i; } } - - if ( !(tabToClose < -1) ) - emit tabCloseRequested(tabToClose); + return -1; } -void CTabBar::setTabTheme(int index, TabTheme theme) +QWidget *CTabBar::tabIconLabel(int index) const { - setTabData(index, theme); - - CAnimatedIcon * i = (CAnimatedIcon *)TAB_ICON(index); - QWidget * b = TAB_BTNCLOSE(index); - if ( theme == TabTheme::LightTab ) { - if ( i ) { - i->setSvgElement("dark"); - } - - if ( b && !(b->property("state") == "normal") ) { - b->setProperty("state", "normal"); - b->style()->polish(b); - } - } else { - if ( i ) { - i->setSvgElement("light"); - } - - if ( b && !(b->property("state") == "active") ) { - b->setProperty("state", "active"); - b->style()->polish(b); - } - } + return d->indexIsValid(index) ? d->tabList[index]->icon_label : nullptr; } -void CTabBar::setUIThemeType(bool islight) +QWidget *CTabBar::tabButton(int index) const { - Q_D(QTabBar); + return d->indexIsValid(index) ? d->tabList[index]->close_btn : nullptr; +} - m_isUIThemeDark = !islight; - if (m_pLeftButton && m_pRightButton) { - m_pLeftButton->style()->polish(m_pLeftButton); - m_pRightButton->style()->polish(m_pRightButton); - } - QTimer::singleShot(20, this, [=]() { - Q_D(QTabBar); - if (d->scrollOffset != m_scrollPos) { - const int tabWidth = this->tabSizeHint(0).width(); - if (m_scrollPos % tabWidth == 0) { - for (int i = 0; i < count(); i++) { - if (!d->rightB->isEnabled()) break; - d->rightB->click(); - } - for (int i = 0; i < count(); i++) { - if (d->scrollOffset == m_scrollPos) break; - d->leftB->click(); - } +//QVariant CTabBar::tabData(int index) const +//{ +// return d->indexIsValid(index) ? d->tabList[index]->property("TabData") : QVariant(); +//} - } else { - for (int i = 0; i < count(); i++) { - if (!d->leftB->isEnabled()) break; - d->leftB->click(); - } - for (int i = 0; i < count(); i++) { - if (d->scrollOffset == m_scrollPos) break; - d->rightB->click(); - } - } - } - }); +QIcon CTabBar::tabIcon(int index) const +{ + if (d->indexIsValid(index) && d->tabList[index]->tab_icon) + return *d->tabList[index]->tab_icon; + return QIcon(); } -void CTabBar::setActiveTabColor(const QString& color) +QRect CTabBar::tabRect(int index) const { - m_activeColor = color; + return d->indexIsValid(index) ? d->_tabRect(index) : QRect(); } -void CTabBar::changeTabTheme(int index, TabTheme theme) +QString CTabBar::tabText(int index) const { - if ( tabData(index).isNull() ) { - CAnimatedIcon * i = (CAnimatedIcon *)TAB_ICON(index); - QWidget * b = TAB_BTNCLOSE(index); - if ( theme == TabTheme::LightTab ) { - if ( i && i->isStarted() ) { - i->setSvgElement("dark"); - } - - if ( b && !(b->property("state") == "normal") ) { - b->setProperty("state", "normal"); - b->style()->polish(b); - } - } else { - if ( i && i->isStarted() ) { - i->setSvgElement("light"); - } - - if ( b && !(b->property("state") == "active") ) { - b->setProperty("state", "active"); - b->style()->polish(b); - } - } - } + return (d->indexIsValid(index)) ? d->tabList[index]->text : QString(); } -void CTabBar::activate(bool a) +QVariant CTabBar::tabProperty(int index, const char *name) { - if ( m_active != a ) { - m_active = a; + return d->indexIsValid(index) ? d->tabList[index]->property(name) : QVariant(); +} -// if ( tabData(m_current).isNull() ) - { - QWidget * b = TAB_BTNCLOSE(m_current); - if ( b ) { - if ( a ){ - b->show(); -// b->setProperty("state", "active"); - } else { - b->hide(); -// b->setProperty("state", "normal"); - m_overIndex = -1; - } +void CTabBar::tabInserted(int index) +{ + Q_UNUSED(index) +} - b->style()->polish(b); - } - } +void CTabBar::resizeEvent(QResizeEvent *event) +{ + QFrame::resizeEvent(event); + for (int i = 0; i < d->tabList.size(); i++) + d->tabList[i]->setFixedHeight(d->tabArea->height()); + + int tabsWidth = d->tabList.isEmpty() ? 0 : count() * d->cellWidth(); + bool visible = (tabsWidth > d->tabArea->width()); + d->leftButton->setVisible(visible); + d->rightButton->setVisible(visible); + + const int lastIndex = d->tabList.size() - 1; + const int offsetX = (lastIndex == -1) ? 0 : d->tabArea->rect().right() - d->_tabRect(lastIndex).right(); + if (offsetX > TABSPACING) { + for (int i = 0; i < d->tabList.size(); i++) + d->tabList[i]->move(d->_tabRect(i).x() + offsetX - TABSPACING, 0); } + d->changeScrollerState(); } -void CTabBar::updateScalingFactor(double f) +void CTabBar::wheelEvent(QWheelEvent *event) { - CScalingWrapper::updateScalingFactor(f); - - for (int i(count()); !(--i < 0); ) { - QWidget * b = TAB_BTNCLOSE(i); - - if ( b ) { - b->setFixedSize( QSize(16, 16) * f ); + QFrame::wheelEvent(event); + if (!d->animationInProgress && d->tabArea->underMouse()) { + if (d->currentIndex > 0 && event->angleDelta().y() > 0) { + emit onCurrentChangedByWhell(d->currentIndex - 1); + d->onCurrentChanged(d->currentIndex - 1); + } else + if (d->currentIndex < count() - 1 && event->angleDelta().y() < 0) { + emit onCurrentChangedByWhell(d->currentIndex + 1); + d->onCurrentChanged(d->currentIndex + 1); } } - - repaint(); } -bool CTabBar::event(QEvent * e) +bool CTabBar::eventFilter(QObject *watched, QEvent *event) { - if ( e->type() == QEvent::HoverMove ) { - Q_D(QTabBar); - - if ( !d->dragInProgress ) { - QHoverEvent * _hover = static_cast(e); - - int _index = tabAt(_hover->pos()); - if ( m_overIndex != _index ) { - int _hide(m_overIndex); - m_overIndex = _index; - - QWidget * b; - if ( !(_hide < 0) && (!m_active || _hide != currentIndex()) ) { - b = TAB_BTNCLOSE(_hide); - if ( b ) b->hide(); + if (watched == d->tabArea) { + switch (event->type()) { + case QEvent::MouseMove: { + QMouseEvent* me = dynamic_cast(event); + if (me->buttons().testFlag(Qt::LeftButton)) { + if (d->movedTab && !d->lock) { + d->movedTab->move(me->x() - d->movedTabPressPosX, 0); + int offsetX; + const int interIndex = d->getLayoutsIntersectedIndex(d->movedTab, offsetX); + if (/*interIndex != -1 &&*/ d->movedTab->index != interIndex && offsetX != 0) { + const int sign = (offsetX >= 0) ? 1 : -1; + if (sign * offsetX > d->movedTab->width()/2) { + if (d->indexIsValid(interIndex + sign)) { + int delta = d->tabLayouts[interIndex + sign].x() - d->_tabRect(interIndex).x(); + d->slide(interIndex, interIndex, delta, ANIMATION_MOVE_TAB_MS); + } + d->tabIndex(interIndex) += sign; + d->movedTab->index = d->tabIndex(interIndex) - sign; + d->currentIndex = d->movedTab->index; + emit tabMoved(d->currentIndex, d->tabIndex(interIndex)); + emit currentChanged(d->currentIndex); + d->reorderIndexes(); + } + } + if (!d->tabArea->rect().contains(me->pos()) && d->tabArea->rect().right() >= me->x()) { + if (d->currentIndex != d->movedTabIndex) + d->reorderIndexes(); + bool accepted = false; + emit tabUndock(d->currentIndex, accepted); + if (accepted) { + d->movedTab->hide(); + d->movedTab = nullptr; + d->movedTabIndex = -1; + QTimer::singleShot(0, this, [=]() { + removeTab(d->currentIndex); + while (d->animationInProgress) + qApp->processEvents(); + d->changeScrollerState(); + }); + } + } } - - if ( !(_index < 0) ) { - b = TAB_BTNCLOSE(_index); - if ( b ) { - b->show(); + } + break; + } + case QEvent::MouseButtonPress: { + QMouseEvent* me = dynamic_cast(event); + if (me->button() == Qt::LeftButton) { + if (!d->animationInProgress) { + for (int i = 0; i < d->tabList.size(); i++) { + if (d->_tabRect(i).contains(me->pos())) { + d->lock = true; + d->movedTab = d->tabList[i]; + d->movedTabIndex = i; + const int offset = d->getIntersectedOffset(i); + d->movedTabPosX = d->movedTab->x() - offset; + d->movedTabPressPosX = me->x() - d->movedTabPosX; + QPoint oldCurPos = QCursor::pos(); + d->tabLayouts.clear(); + for (int j = 0; j < d->tabList.size(); j++) { + d->tabLayouts.append(d->_tabRect(j).translated(-1 * offset, 0).adjusted(0,0,TABSPACING,0)); + if (j != i) + d->tabList[j]->stackUnder(d->movedTab); + } + emit tabBarClicked(i); + if (i != d->currentIndex) + d->onCurrentChanged(i); + else + d->scrollTo(i); + while (d->animationInProgress) + qApp->processEvents(); + QCursor::setPos(oldCurPos); + d->lock = false; + return true; + } + } + } + } + break; + } + case QEvent::MouseButtonRelease: { + QMouseEvent* mouse_event = dynamic_cast(event); + if (mouse_event->button() == Qt::LeftButton) { + while (d->animationInProgress) + qApp->processEvents(); + if (d->movedTab) { + if (d->currentIndex != d->movedTabIndex) { + d->reorderIndexes(); + int posX = d->tabLayouts[d->currentIndex].x(); + d->movedTab->move(posX, 0); + } else { + d->movedTab->move(d->movedTabPosX, 0); + } + d->movedTab = nullptr; + d->movedTabIndex = -1; + d->changeScrollerState(); + return true; + } + } else + if (mouse_event->button() == Qt::MiddleButton) { + for (int i = 0; i < d->tabList.size(); i++) { + if (d->tabList[i]->close_btn->underMouse()) { + emit tabCloseRequested(i); + return true; } } } + break; } - } else - if ( e->type() == QEvent::Leave ) { - if ( !(m_overIndex < 0) && (m_overIndex != currentIndex() || !m_active) ) { - QWidget * b = TAB_BTNCLOSE(m_overIndex); - if ( b ) { - b->hide(); + case QEvent::MouseButtonDblClick: { + QMouseEvent* mouse_event = dynamic_cast(event); + if (mouse_event->button() == Qt::LeftButton) { + for (int i = 0; i < d->tabList.size(); i++) { + if (d->tabList[i]->underMouse()) { + emit tabBarDoubleClicked(i); + return true; + } + } } - - m_overIndex = -1; + break; } - } - -// qDebug() << "event: " << e; - return QTabBar::event(e); -} - -int CTabBar::draggedTabIndex() -{ - Q_D(QTabBar); - - return d->pressedIndex; -} - -QSize CTabBar::tabSizeHint(int index) const -{ - return QTabBar::tabSizeHint(index); -} - -void CTabBar::interruptTabMoving(int index) -{ - Q_D(QTabBar); - -#ifndef QT_NO_ANIMATION - for (const auto& t : d->tabList) { - if (t.animation && - t.animation->state() == QAbstractAnimation::Running ) - t.animation->stop(); - } -#endif //QT_NO_ANIMATION - bool cleanup = (d->pressedIndex == index) || (d->pressedIndex == -1) || !d->validIndex(index); - if (cleanup) { - if(d->movingTab) - d->movingTab->setVisible(false); // We might not get a mouse release - - for (auto& t : d->tabList) - t.dragOffset = 0; - - if (d->pressedIndex != -1 && d->movable) { - d->pressedIndex = -1; - d->dragInProgress = false; - d->dragStartPosition = QPoint(); + default: + break; + } + } else + if (watched == this) { + switch (event->type()) { + case QEvent::Enter: + setCursor(QCursor(Qt::ArrowCursor)); + break; + case QEvent::Leave: + QApplication::postEvent(d->tabArea, new QMouseEvent(QEvent::MouseButtonRelease, QCursor::pos(), Qt::LeftButton, Qt::LeftButton, Qt::NoModifier)); + break; + default: + break; } - d->layoutWidgets(); - } else { - if (!d->validIndex(index)) - return; - d->tabList[index].dragOffset = 0; } - - update(); + return QFrame::eventFilter(watched, event); } + +#include "ctabbar.moc" diff --git a/win-linux/src/components/ctabbar.h b/win-linux/src/components/ctabbar.h index dcc41d113..76f415de9 100644 --- a/win-linux/src/components/ctabbar.h +++ b/win-linux/src/components/ctabbar.h @@ -33,87 +33,75 @@ #ifndef CTABBAR_H #define CTABBAR_H -#include -#include #include -#include -#include -#include "cscalingwrapper.h" -#include -class CTabBar : public QTabBar, public CScalingWrapper +class CTabBar : public QFrame { Q_OBJECT public: - explicit CTabBar(QWidget * parent = nullptr); - virtual ~CTabBar(); - - void setTabTextColor(QPalette::ColorGroup, const QColor&); - void setUseTabCustomPalette(bool); - QPalette& customColors(); - QVariant tabProperty(int index, const char *name); - void setTabProperty(int index, const char *name, const QVariant &value); - void setTabIcon(int index, const QIcon &icon); - void setTabLoading(int, bool); - void setActiveTabColor(const QString&); - void tabStartLoading(int, const QString& theme = QString()); - void activate(bool); - - void updateScalingFactor(double) override; - int draggedTabIndex(); + CTabBar(QWidget *parent = nullptr); + ~CTabBar(); enum TabTheme { LightTab, DarkTab }; - void changeTabTheme(int, TabTheme); - void setTabTheme(int, TabTheme); - void setUIThemeType(bool islight); - void initCustomScroll(QFrame *, QToolButton *, QToolButton *); - -protected: - bool event(QEvent * e) override; - void mousePressEvent (QMouseEvent *) override; - void mouseMoveEvent(QMouseEvent *) override; - void mouseReleaseEvent (QMouseEvent *) override; - void wheelEvent(QWheelEvent *event) override; - void paintEvent(QPaintEvent *) override; - void resizeEvent(QResizeEvent *) override; - void tabInserted(int) override; - void tabRemoved(int index) override; - void drawTabCaption(QPainter *, const QString&, const QStyleOptionTab&); - void fillTabColor(QPainter *, const QStyleOptionTab&, uint, const QColor&); - - QSize tabSizeHint(int index) const override; - void interruptTabMoving(int index); - -private slots: - void onCloseButton(); - void onCurrentChanged(int); - -private: - QPalette m_palette; - bool m_usePalette = false; - int m_overIndex = -1; - int m_current = -1; - bool m_active = false; - bool m_isUIThemeDark = false; - bool m_tabWasMoved = false; - QString m_activeColor = "none"; + int addTab(const QString &text); + int addTab(const QIcon &icon, const QString &text); + int count() const; + int currentIndex() const; + Qt::TextElideMode elideMode() const; + QSize iconSize() const; + int insertTab(int index, const QString &text); + int insertTab(int index, const QIcon &icon, const QString &text); + void moveTab(int from, int to); + void removeTab(int index); + void setElideMode(Qt::TextElideMode mode); + void setIconSize(const QSize &size); + void setTabIconLabel(int index, QWidget *widget); + void setTabButton(int index, QWidget *widget); +// void setTabData(int index, const QVariant &data); + void setTabIcon(int index, const QIcon &icon); + void setTabText(int index, const QString &text); + void setTabToolTip(int index, const QString &text); + void setCurrentIndex(int index); + void setActiveTabColor(int index, const QString&); + void setUseTabCustomPalette(int, bool); + void setTabLoading(int, bool); + void setTabIconTheme(int, TabTheme); + void tabStartLoading(int, const QString& theme = QString()); + void setIgnoreActiveTabColor(bool ignore); + bool ignoreActiveTabColor(); + void polish(); + int tabIndexAt(const QPoint &pos) const; + QWidget* tabIconLabel(int index) const; + QWidget* tabButton(int index) const; +// QVariant tabData(int index) const; + QIcon tabIcon(int index) const; + QRect tabRect(int index) const; + QString tabText(int index) const; + QVariant tabProperty(int index, const char *name); + virtual void tabInserted(int index); signals: - void tabUndock(int, bool *); + void currentChanged(int index); void onCurrentChangedByWhell(int index); + void tabBarClicked(int index); + void tabBarDoubleClicked(int index); + void tabCloseRequested(int index); + void tabMoved(int from, int to); + void tabUndock(int index, bool &accepted); + +protected: + virtual void resizeEvent(QResizeEvent *event) override; + virtual void wheelEvent(QWheelEvent *event) override; + virtual bool eventFilter(QObject*, QEvent*) override; private: - Q_DECLARE_PRIVATE(QTabBar) - int m_scrollPos; - QFrame *m_pScrollerFrame; - QToolButton *m_pLeftButton, - *m_pRightButton; - void changeCustomScrollerState(); + class CTabBarPrivate; + CTabBarPrivate* d = nullptr; }; #endif // CTABBAR_H diff --git a/win-linux/src/components/ctabbarwrapper.cpp b/win-linux/src/components/ctabbarwrapper.cpp deleted file mode 100644 index 309553ab6..000000000 --- a/win-linux/src/components/ctabbarwrapper.cpp +++ /dev/null @@ -1,97 +0,0 @@ -#include "components/ctabbarwrapper.h" -#include -#include - - -CTabBarWrapper::CTabBarWrapper(QWidget *parent): - QFrame(parent) -{ - setObjectName(QString::fromUtf8("tabWrapper")); - setFrameShape(QFrame::NoFrame); - setFrameShadow(QFrame::Plain); - - QGridLayout *_pTabFrameLayout = new QGridLayout(this); - _pTabFrameLayout->setSpacing(0); - _pTabFrameLayout->setContentsMargins(0,0,0,0); - this->setLayout(_pTabFrameLayout); - - // Bypassing the bug with tab scroller - m_pScrollerFrame = new QFrame(this); - m_pScrollerFrame->setObjectName("scrollerFrame"); - QHBoxLayout *_pScrollerLayout = new QHBoxLayout(m_pScrollerFrame); - _pScrollerLayout->setSpacing(0); - _pScrollerLayout->setContentsMargins(0,0,0,0); - m_pScrollerFrame->setLayout(_pScrollerLayout); - - QToolButton* _pLeftButton = new QToolButton(m_pScrollerFrame); - QToolButton* _pRightButton = new QToolButton(m_pScrollerFrame); - _pLeftButton->setObjectName("leftButton"); - _pRightButton->setObjectName("rightButton"); - - _pScrollerLayout->addWidget(_pLeftButton); - _pScrollerLayout->addWidget(_pRightButton); - _pLeftButton->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); - _pRightButton->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); - _pLeftButton->installEventFilter(this); - _pRightButton->installEventFilter(this); - _pLeftButton->setMouseTracking(true); - _pRightButton->setMouseTracking(true); - _pLeftButton->setAttribute(Qt::WA_Hover, true); - _pRightButton->setAttribute(Qt::WA_Hover, true); // End bypassing the bug - - m_pBar = new CTabBar(this); - m_pBar->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); - - QWidget *_pPaddingWidget = new QWidget(this); - _pPaddingWidget->setObjectName("paddingWidget"); - _pPaddingWidget->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); - - QHBoxLayout *_pTabLayout = new QHBoxLayout(); -#if (QT_VERSION < QT_VERSION_CHECK(5, 12, 2)) - _pTabLayout->setSpacing(0); -#else - _pTabLayout->setSpacing(32); -#endif - _pTabLayout->setContentsMargins(0,0,0,0); - _pTabLayout->addWidget(m_pBar); - _pTabLayout->addWidget(_pPaddingWidget); - - _pTabFrameLayout->addLayout(_pTabLayout, 0, 0, 1, 1); - _pTabFrameLayout->addWidget(m_pScrollerFrame, 0, 0, 1, 1, Qt::AlignRight); - - m_pBar->initCustomScroll(m_pScrollerFrame, _pLeftButton, _pRightButton); - -} - -CTabBarWrapper::~CTabBarWrapper() -{ - -} - -CTabBar *CTabBarWrapper::tabBar() -{ - return m_pBar; -} - -void CTabBarWrapper::applyTheme(const QString &style) -{ - this->setStyleSheet(style); - m_pScrollerFrame->setStyleSheet(style); - m_pBar->setStyleSheet(style); -} - -bool CTabBarWrapper::eventFilter(QObject *object, QEvent *event) -{ - switch (event->type()) { - case QEvent::HoverEnter: { - if (object->objectName() == QString("leftButton") || - object->objectName() == QString("rightButton")) { - m_pScrollerFrame->setCursor(QCursor(Qt::ArrowCursor)); - } - break; - } - default: - break; - } - return QWidget::eventFilter(object, event); -} diff --git a/win-linux/src/components/ctabbarwrapper.h b/win-linux/src/components/ctabbarwrapper.h deleted file mode 100644 index 676c347b3..000000000 --- a/win-linux/src/components/ctabbarwrapper.h +++ /dev/null @@ -1,23 +0,0 @@ -#ifndef CTABBARWRAPPER_H -#define CTABBARWRAPPER_H - -#include -#include "ctabbar.h" - - -class CTabBarWrapper: public QFrame -{ - Q_OBJECT -public: - explicit CTabBarWrapper(QWidget *parent = nullptr); - ~CTabBarWrapper(); - CTabBar *tabBar(); - void applyTheme(const QString &style); - -private: - QFrame *m_pScrollerFrame; - CTabBar *m_pBar; - bool eventFilter(QObject *, QEvent *); -}; - -#endif // CTABBARWRAPPER_H diff --git a/win-linux/src/windows/cmainwindow.cpp b/win-linux/src/windows/cmainwindow.cpp index 86037ac86..82201632e 100644 --- a/win-linux/src/windows/cmainwindow.cpp +++ b/win-linux/src/windows/cmainwindow.cpp @@ -87,7 +87,6 @@ using namespace NSEditorApi; CMainWindow::CMainWindow(const QRect &rect) : CWindowPlatform(rect), CScalingWrapper(m_dpiRatio), - m_pTabBarWrapper(nullptr), m_pTabs(nullptr), m_pButtonMain(nullptr), m_pMainWidget(nullptr), @@ -185,7 +184,7 @@ int CMainWindow::attachEditor(QWidget * panel, const QPoint& pt) _pt_local -= windowRect().topLeft(); # endif #endif - int _index = tabWidget()->tabBar()->tabAt(_pt_local); + int _index = tabWidget()->tabBar()->tabIndexAt(_pt_local); if ( !(_index < 0) ) { QRect _rc_tab = tabWidget()->tabBar()->tabRect(_index); if ( _pt_local.x() > _rc_tab.left() + (_rc_tab.width() / 2) ) ++_index; @@ -228,7 +227,7 @@ void CMainWindow::applyTheme(const std::wstring& theme) } } m_boxTitleBtns->style()->polish(m_boxTitleBtns); - m_pTabBarWrapper->style()->polish(m_pTabBarWrapper); + m_pTabs->tabBar()->style()->polish(m_pTabs->tabBar()); m_pButtonMain->style()->polish(m_pButtonMain); if (m_pTopButtons[BtnType::Btn_Minimize]) { foreach (auto btn, m_pTopButtons) @@ -379,14 +378,17 @@ QWidget* CMainWindow::createMainPanel(QWidget *parent) mainPanel->setLayout(_pMainGridLayout); // Set custom TabBar - m_pTabBarWrapper = new CTabBarWrapper(mainPanel); - m_pTabBarWrapper->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); - _pMainGridLayout->addWidget(m_pTabBarWrapper, 0, 1, 1, 1); + CTabBar *pTabBar = new CTabBar(mainPanel); + _pMainGridLayout->addWidget(pTabBar, 0, 1, 1, 1); + QSizePolicy sizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); + sizePolicy.setHorizontalStretch(1); + pTabBar->setSizePolicy(sizePolicy); // QSize wide_btn_size(29*g_dpi_ratio, TOOLBTN_HEIGHT*g_dpi_ratio); m_boxTitleBtns = createTopPanel(mainPanel); m_boxTitleBtns->setObjectName("CX11Caption"); _pMainGridLayout->addWidget(m_boxTitleBtns, 0, 2, 1, 1); + m_boxTitleBtns->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); #ifdef __DONT_WRITE_IN_APP_TITLE QLabel * label = new QLabel(m_boxTitleBtns); @@ -421,16 +423,16 @@ QWidget* CMainWindow::createMainPanel(QWidget *parent) } // m_pTabs->setAutoFillBackground(true); // Set TabWidget - m_pTabs = new CAscTabWidget(mainPanel, tabBar()); + m_pTabs = new CAscTabWidget(mainPanel, pTabBar); m_pTabs->setObjectName(QString::fromUtf8("ascTabWidget")); - _pMainGridLayout->addWidget(m_pTabs, 1, 0, 1, 4); + _pMainGridLayout->addWidget(m_pTabs, 1, 0, 1, 3); m_pTabs->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); m_pTabs->activate(false); m_pTabs->applyUITheme(AscAppManager::themes().current().id()); connect(tabWidget(), SIGNAL(currentChanged(int)), this, SLOT(onTabChanged(int))); - connect(tabBar(), SIGNAL(tabBarClicked(int)), this, SLOT(onTabClicked(int))); - connect(tabBar(), SIGNAL(tabCloseRequested(int)), this, SLOT(onTabCloseRequest(int))); + connect(pTabBar, SIGNAL(tabBarClicked(int)), this, SLOT(onTabClicked(int))); + connect(pTabBar, SIGNAL(tabCloseRequested(int)), this, SLOT(onTabCloseRequest(int))); connect(m_pTabs, &CAscTabWidget::editorInserted, bind(&CMainWindow::onTabsCountChanged, this, _2, _1, 1)); connect(m_pTabs, &CAscTabWidget::editorRemoved, bind(&CMainWindow::onTabsCountChanged, this, _2, _1, -1)); m_pTabs->setPalette(palette); @@ -448,7 +450,7 @@ void CMainWindow::attachStartPanel(QCefView * const view) QGridLayout *_pMainGridLayout = dynamic_cast(m_pMainPanel->layout()); Q_ASSERT(_pMainGridLayout != nullptr); if (_pMainGridLayout) - _pMainGridLayout->addWidget(m_pMainWidget, 1, 0, 1, 4); + _pMainGridLayout->addWidget(m_pMainWidget, 1, 0, 1, 3); m_pMainWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); if (!m_pTabs->isActiveWidget()) m_pMainWidget->show(); @@ -1379,9 +1381,9 @@ void CMainWindow::updateScalingFactor(double dpiratio) m_pMainPanel->setProperty("zoom", QString::number(dpiratio) + "x"); std::vector _files{":/styles/tabbar.qss"}; QString _style = Utils::readStylesheets(&_files); - m_pTabBarWrapper->applyTheme(_style); + m_pTabs->tabBar()->setStyleSheet(_style); m_pTabs->setStyleSheet(_style); - m_pTabs->updateScalingFactor(dpiratio); +// m_pTabs->updateScalingFactor(dpiratio); m_pTabs->reloadTabIcons(); m_pButtonMain->setIcon(MAIN_ICON_PATH, AscAppManager::themes().current().isDark() ? "logo-light" : "logo-dark"); m_pButtonMain->setIconSize(MAIN_ICON_SIZE * dpiratio); @@ -1437,11 +1439,6 @@ CAscTabWidget * CMainWindow::tabWidget() return m_pTabs; } -CTabBar *CMainWindow::tabBar() -{ - return m_pTabBarWrapper->tabBar(); -} - void CMainWindow::showEvent(QShowEvent * e) { CWindowPlatform::showEvent(e); diff --git a/win-linux/src/windows/cmainwindow.h b/win-linux/src/windows/cmainwindow.h index 5c410a35f..a1a65fa3e 100644 --- a/win-linux/src/windows/cmainwindow.h +++ b/win-linux/src/windows/cmainwindow.h @@ -147,10 +147,8 @@ public slots: private: QWidget * createMainPanel(QWidget *parent); - inline CTabBar *tabBar(); int trySaveDocument(int); - CTabBarWrapper* m_pTabBarWrapper; CAscTabWidget * m_pTabs; CSVGPushButton* m_pButtonMain; QWidget* m_pMainWidget; diff --git a/win-linux/src/windows/cwindowbase.cpp b/win-linux/src/windows/cwindowbase.cpp index 77162fcda..c5b223963 100644 --- a/win-linux/src/windows/cwindowbase.cpp +++ b/win-linux/src/windows/cwindowbase.cpp @@ -226,11 +226,7 @@ bool CWindowBase::event(QEvent *event) QWidget *wgt = qApp->widgetAt(hlp->globalPos()); if (wgt && !findChild()) { QString text(""); - CTabBar *bar = dynamic_cast(wgt); - if (bar) { - int index = bar->tabAt(bar->mapFromGlobal(hlp->globalPos())); - text = bar->tabProperty(index, "ToolTip").toString(); - } else + if (wgt->property("ToolTip").isValid()) text = wgt->property("ToolTip").toString(); if (m_pMainPanel && !text.isEmpty()) { CToolTip *tool = new CToolTip(m_pMainPanel, text, hlp->globalPos()); From a6ff003e06548dd9752fe62a424bd676062b9fb3 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Wed, 21 Jun 2023 11:14:39 +0300 Subject: [PATCH 065/298] [win-linux] refactoring CMainWindow --- win-linux/src/windows/cmainwindow.cpp | 16 +++------------- win-linux/src/windows/cmainwindow.h | 16 +++++++--------- 2 files changed, 10 insertions(+), 22 deletions(-) diff --git a/win-linux/src/windows/cmainwindow.cpp b/win-linux/src/windows/cmainwindow.cpp index 82201632e..692e75e66 100644 --- a/win-linux/src/windows/cmainwindow.cpp +++ b/win-linux/src/windows/cmainwindow.cpp @@ -87,15 +87,7 @@ using namespace NSEditorApi; CMainWindow::CMainWindow(const QRect &rect) : CWindowPlatform(rect), CScalingWrapper(m_dpiRatio), - m_pTabs(nullptr), - m_pButtonMain(nullptr), - m_pMainWidget(nullptr), - m_pButtonProfile(nullptr), - m_pWidgetDownload(nullptr), - m_savePortal(QString()), - m_isMaximized(false), - m_saveAction(0), - m_printData(nullptr) + m_savePortal(QString()) { setObjectName("MainWindow"); m_pMainPanel = createMainPanel(this); @@ -116,8 +108,7 @@ CMainWindow::CMainWindow(const QRect &rect) : CMainWindow::~CMainWindow() { - if (m_printData) - delete m_printData, m_printData = nullptr; + } /** Public **/ @@ -430,7 +421,7 @@ QWidget* CMainWindow::createMainPanel(QWidget *parent) m_pTabs->activate(false); m_pTabs->applyUITheme(AscAppManager::themes().current().id()); - connect(tabWidget(), SIGNAL(currentChanged(int)), this, SLOT(onTabChanged(int))); + connect(m_pTabs, SIGNAL(currentChanged(int)), this, SLOT(onTabChanged(int))); connect(pTabBar, SIGNAL(tabBarClicked(int)), this, SLOT(onTabClicked(int))); connect(pTabBar, SIGNAL(tabCloseRequested(int)), this, SLOT(onTabCloseRequest(int))); connect(m_pTabs, &CAscTabWidget::editorInserted, bind(&CMainWindow::onTabsCountChanged, this, _2, _1, 1)); @@ -1143,7 +1134,6 @@ void CMainWindow::onDocumentPrint(void * opts) if ( !AscAppManager::printData().isQuickPrint() ) AscAppManager::printData().setPrinterInfo(*printer); -// m_printData->_print_range = dialog->printRange(); QVector page_ranges; #ifdef Q_OS_LINUX diff --git a/win-linux/src/windows/cmainwindow.h b/win-linux/src/windows/cmainwindow.h index a1a65fa3e..e8b4ff62a 100644 --- a/win-linux/src/windows/cmainwindow.h +++ b/win-linux/src/windows/cmainwindow.h @@ -149,16 +149,14 @@ public slots: QWidget * createMainPanel(QWidget *parent); int trySaveDocument(int); - CAscTabWidget * m_pTabs; - CSVGPushButton* m_pButtonMain; - QWidget* m_pMainWidget; - QPushButton* m_pButtonProfile; - CDownloadWidget* m_pWidgetDownload; + CAscTabWidget * m_pTabs = nullptr; + CSVGPushButton* m_pButtonMain = nullptr; + QWidget* m_pMainWidget = nullptr; + QPushButton* m_pButtonProfile = nullptr; + CDownloadWidget* m_pWidgetDownload = nullptr; QString m_savePortal; - bool m_isMaximized; - int m_saveAction; - struct printdata; - printdata* m_printData; + bool m_isMaximized = false; + int m_saveAction = 0; bool m_isCloseAll = false; From f69257c7f3c3aedcc59051c7afcefc1c04939245 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Thu, 22 Jun 2023 14:37:10 +0300 Subject: [PATCH 066/298] [win-linux] create separate download widget --- win-linux/res/styles/download.qss | 129 +++++++++++ win-linux/res/styles/styles.qss | 64 ------ win-linux/res/styles/styles@1.25x.qss | 25 --- win-linux/res/styles/styles@1.5x.qss | 25 --- win-linux/res/styles/styles@1.75x.qss | 25 --- win-linux/res/styles/styles@2.5x.qss | 25 --- win-linux/res/styles/styles@2x.qss | 25 --- win-linux/res/styles/styles@3.5x.qss | 25 --- win-linux/res/styles/styles@3x.qss | 25 --- win-linux/res/styles/styles@4.5x.qss | 25 --- win-linux/res/styles/styles@4x.qss | 25 --- win-linux/res/styles/styles@5x.qss | 25 --- win-linux/resources.qrc | 1 + win-linux/src/components/cdownloadwidget.cpp | 213 ++++++++----------- win-linux/src/components/cdownloadwidget.h | 31 +-- win-linux/src/main.cpp | 1 + win-linux/src/windows/cmainwindow.cpp | 35 ++- 17 files changed, 254 insertions(+), 470 deletions(-) create mode 100644 win-linux/res/styles/download.qss diff --git a/win-linux/res/styles/download.qss b/win-linux/res/styles/download.qss new file mode 100644 index 000000000..65bfd8437 --- /dev/null +++ b/win-linux/res/styles/download.qss @@ -0,0 +1,129 @@ + +CDownloadWidget {background: #ffffff;} + +QPushButton {padding: 0px; font-weight: normal;} +QPushButton:hover {background-color: #cecece;} +QPushButton:pressed {background-color: #b7b7b7;} +QPushButton::menu-indicator {width: 0px; height: 0px;} +QPushButton#buttonCancel {border: none; margin: 0px; padding: 0px; color: #666666; font-family: "Open Sans", sans-serif, "Arial";} + +QProgressBar {background-color: #cacaca; border-color: #cacaca;} +QProgressBar::chunk {background-color: #2b86b7;} + +QLabel#labelName {color: #666666; font-family: "Open Sans", sans-serif, "Arial";} + +QScrollArea {border: none;} +QScrollBar {background: transparent;} +QScrollBar:vertical {margin: 0px; border: none; border-radius: 0px; background: transparent;} +QScrollBar::handle:vertical {background: #cacaca;} +QScrollBar::add-line:vertical {height: 10px; border: none; border-radius: 0px; + background: transparent; subcontrol-position: bottom; subcontrol-origin: margin;} +QScrollBar::sub-line:vertical {height: 10px; border: none; border-radius: 0px; + background: transparent; subcontrol-position: top; subcontrol-origin: margin;} +QScrollBar::up-arrow:vertical, +QScrollBar::down-arrow:vertical {background: none;} +QScrollBar::add-page:vertical, +QScrollBar::sub-page:vertical {background: none;} +QAbstractScrollArea::corner {background: transparent;} + +/* dark theme */ +CDownloadWidget[uitheme="theme-dark"] {background: #404040;} +CDownloadWidget[uitheme="theme-dark"] QPushButton#buttonCancel {color: #d9d9d9;} +CDownloadWidget[uitheme="theme-dark"] QPushButton#buttonCancel:hover {background: #555;} +CDownloadWidget[uitheme="theme-dark"] QPushButton#buttonCancel:pressed {background: #606060;} +CDownloadWidget[uitheme="theme-dark"] QLabel#labelName {color: #d9d9d9;} + +/* contrast theme */ +CDownloadWidget[uitheme="theme-contrast-dark"] {background: #2a2a2a;} +CDownloadWidget[uitheme="theme-contrast-dark"] QPushButton#buttonCancel {color: #d9d9d9;} +CDownloadWidget[uitheme="theme-contrast-dark"] QPushButton#buttonCancel:hover {background: #555;} +CDownloadWidget[uitheme="theme-contrast-dark"] QPushButton#buttonCancel:pressed {background: #606060;} +CDownloadWidget[uitheme="theme-contrast-dark"] QLabel#labelName {color: #d9d9d9;} + +/* 1.0x */ +QPushButton#buttonCancel {padding-left: 6px; padding-right: 6px; min-height: 22px; font-size: 12px;} +QProgressBar {border-radius: 2px; max-height: 5px; margin-right: 10px; margin-top: 1px;} +QProgressBar::chunk {border-radius: 2px;} +QLabel#labelName {font-size: 16px;} +QScrollBar:vertical {width: 10px;} +QScrollBar::handle:vertical {min-height: 25px; border-radius: 3px;} + +/* 1.25x */ +CDownloadWidget[zoom="1.25x"] QPushButton#buttonCancel {padding-left: 8px; padding-right: 8px; min-height: 28px; font-size: 15px;} +CDownloadWidget[zoom="1.25x"] QProgressBar {border-radius: 2px; max-height: 6px; margin-right: 13px; margin-top: 1px;} +CDownloadWidget[zoom="1.25x"] QProgressBar::chunk {border-radius: 2px;} +CDownloadWidget[zoom="1.25x"] QLabel#labelName {font-size: 20px;} +CDownloadWidget[zoom="1.25x"] QScrollBar:vertical {width: 13px;} +CDownloadWidget[zoom="1.25x"] QScrollBar::handle:vertical {min-height: 31px; border-radius: 4px;} + +/* 1.5x */ +CDownloadWidget[zoom="1.5x"] QPushButton#buttonCancel {padding-left: 9px; padding-right: 9px; min-height: 33px; font-size: 18px;} +CDownloadWidget[zoom="1.5x"] QProgressBar {border-radius: 3px; max-height: 8px; margin-right: 15px; margin-top: 2px;} +CDownloadWidget[zoom="1.5x"] QProgressBar::chunk {border-radius: 3px;} +CDownloadWidget[zoom="1.5x"] QLabel#labelName {font-size: 24px;} +CDownloadWidget[zoom="1.5x"] QScrollBar:vertical {width: 15px;} +CDownloadWidget[zoom="1.5x"] QScrollBar::handle:vertical {min-height: 38px; border-radius: 5px;} + +/* 1.75x */ +CDownloadWidget[zoom="1.75x"] QPushButton#buttonCancel {padding-left: 11px; padding-right: 11px; min-height: 39px; font-size: 18px;} +CDownloadWidget[zoom="1.75x"] QProgressBar {border-radius: 3px; max-height: 8px; margin-right: 15px; margin-top: 2px;} +CDownloadWidget[zoom="1.75x"] QProgressBar::chunk {border-radius: 3px;} +CDownloadWidget[zoom="1.75x"] QLabel#labelName {font-size: 24px;} +CDownloadWidget[zoom="1.75x"] QScrollBar:vertical {width: 18px;} +CDownloadWidget[zoom="1.75x"] QScrollBar::handle:vertical {min-height: 44px; border-radius: 5px;} + +/* 2.0x */ +CDownloadWidget[zoom="2x"] QPushButton#buttonCancel {padding-left: 12px; padding-right: 12px; min-height: 44px; font-size: 24px;} +CDownloadWidget[zoom="2x"] QProgressBar {border-radius: 4px; max-height: 10px; margin-right: 20px; margin-top: 2px;} +CDownloadWidget[zoom="2x"] QProgressBar::chunk {border-radius: 4px;} +CDownloadWidget[zoom="2x"] QLabel#labelName {font-size: 32px;} +CDownloadWidget[zoom="2x"] QScrollBar:vertical {width: 20px;} +CDownloadWidget[zoom="2x"] QScrollBar::handle:vertical {min-height: 50px; border-radius: 6px;} + +/* 2.5x */ +CDownloadWidget[zoom="2.5x"] QPushButton#buttonCancel {padding-left: 15px; padding-right: 15px; min-height: 55px; font-size: 30px;} +CDownloadWidget[zoom="2.5x"] QProgressBar {border-radius: 5px; max-height: 13px; margin-right: 25px; margin-top: 3px;} +CDownloadWidget[zoom="2.5x"] QProgressBar::chunk {border-radius: 5px;} +CDownloadWidget[zoom="2.5x"] QLabel#labelName {font-size: 40px;} +CDownloadWidget[zoom="2.5x"] QScrollBar:vertical {width: 25px;} +CDownloadWidget[zoom="2.5x"] QScrollBar::handle:vertical {min-height: 63px; border-radius: 8px;} + +/* 3.0x */ +CDownloadWidget[zoom="3x"] QPushButton#buttonCancel {padding-left: 18px; padding-right: 18px; min-height: 66px; font-size: 36px;} +CDownloadWidget[zoom="3x"] QProgressBar {border-radius: 6px; max-height: 15px; margin-right: 30px; margin-top: 3px;} +CDownloadWidget[zoom="3x"] QProgressBar::chunk {border-radius: 6px;} +CDownloadWidget[zoom="3x"] QLabel#labelName {font-size: 48px;} +CDownloadWidget[zoom="3x"] QScrollBar:vertical {width: 30px;} +CDownloadWidget[zoom="3x"] QScrollBar::handle:vertical {min-height: 75px; border-radius: 9px;} + +/* 3.5x */ +CDownloadWidget[zoom="3.5x"] QPushButton#buttonCancel {padding-left: 21px; padding-right: 21px; min-height: 77px; font-size: 42px;} +CDownloadWidget[zoom="3.5x"] QProgressBar {border-radius: 7px; max-height: 18px; margin-right: 35px; margin-top: 4px;} +CDownloadWidget[zoom="3.5x"] QProgressBar::chunk {border-radius: 7px;} +CDownloadWidget[zoom="3.5x"] QLabel#labelName {font-size: 56px;} +CDownloadWidget[zoom="3.5x"] QScrollBar:vertical {width: 35px;} +CDownloadWidget[zoom="3.5x"] QScrollBar::handle:vertical {min-height: 88px; border-radius: 11px;} + +/* 4.0x */ +CDownloadWidget[zoom="4x"] QPushButton#buttonCancel {padding-left: 24px; padding-right: 24px; min-height: 88px; font-size: 48px;} +CDownloadWidget[zoom="4x"] QProgressBar {border-radius: 8px; max-height: 20px; margin-right: 40px; margin-top: 4px;} +CDownloadWidget[zoom="4x"] QProgressBar::chunk {border-radius: 8px;} +CDownloadWidget[zoom="4x"] QLabel#labelName {font-size: 64px;} +CDownloadWidget[zoom="4x"] QScrollBar:vertical {width: 40px;} +CDownloadWidget[zoom="4x"] QScrollBar::handle:vertical {min-height: 100px; border-radius: 12px;} + +/* 4.5x */ +CDownloadWidget[zoom="4.5x"] QPushButton#buttonCancel {padding-left: 27px; padding-right: 27px; min-height: 99px; font-size: 54px;} +CDownloadWidget[zoom="4.5x"] QProgressBar {border-radius: 9px; max-height: 23px; margin-right: 45px; margin-top: 5px;} +CDownloadWidget[zoom="4.5x"] QProgressBar::chunk {border-radius: 9px;} +CDownloadWidget[zoom="4.5x"] QLabel#labelName {font-size: 72px;} +CDownloadWidget[zoom="4.5x"] QScrollBar:vertical {width: 45px;} +CDownloadWidget[zoom="4.5x"] QScrollBar::handle:vertical {min-height: 113px; border-radius: 14px;} + +/* 5.0x */ +CDownloadWidget[zoom="5x"] QPushButton#buttonCancel {padding-left: 30px; padding-right: 30px; min-height: 110px; font-size: 60px;} +CDownloadWidget[zoom="5x"] QProgressBar {border-radius: 10px; max-height: 25px; margin-right: 50px; margin-top: 5px;} +CDownloadWidget[zoom="5x"] QProgressBar::chunk {border-radius: 10px;} +CDownloadWidget[zoom="5x"] QLabel#labelName {font-size: 80px;} +CDownloadWidget[zoom="5x"] QScrollBar:vertical {width: 50px;} +CDownloadWidget[zoom="5x"] QScrollBar::handle:vertical {min-height: 125px; border-radius: 15px;} diff --git a/win-linux/res/styles/styles.qss b/win-linux/res/styles/styles.qss index 28a17e0e0..40cff8592 100644 --- a/win-linux/res/styles/styles.qss +++ b/win-linux/res/styles/styles.qss @@ -274,70 +274,6 @@ QPushButton#toolButtonDownload::menu-indicator { } -/* download widget */ - -QMenu#menuButtonDownload { - /*padding: 0;*/ - border: 1px solid #d1d1d1; - background-color: #fafafa; -} - -QMenu[hdpi]#menuButtonDownload { - border-width: 2px; -} - - -CDownloadWidget QProgressBar { - background-color: #cacaca; - border-color: #cacaca; - border-radius: 2px; - max-height: 5px; - margin-right: 10px; - margin-top: 1px; - min-width: 200px; -} - -CDownloadWidget[hdpi] QProgressBar { - border-radius: 4px; - max-height: 10px; - margin-right: 20px; - margin-top: 2px; - min-width: 400px; -} - -CDownloadWidget QProgressBar::chunk { - background-color: #2b86b7; - border-radius: 2px; -} - -CDownloadWidget[hdpi] QProgressBar::chunk { - border-radius: 4px; -} - -CDownloadWidget QPushButton#buttonCancel { - border: none; - margin: 0; - padding: 0; - color: #666666; - font-family: 'Open Sans',sans-serif,Arial; - font-size: 12px; -} - -CDownloadWidget[hdpi] QPushButton#buttonCancel { - font-size: 24px; -} - -CDownloadWidget QLabel#labelName { - color: #666666; - font-size: 16px; - font-family: 'Open Sans',sans-serif,Arial; -} - -CDownloadWidget[hdpi] QLabel#labelName { - color: #f00; - font-size: 32px; -} - /* ToolTip*/ #CToolTip>QLabel { diff --git a/win-linux/res/styles/styles@1.25x.qss b/win-linux/res/styles/styles@1.25x.qss index 0cd76e02a..7e97bb6a2 100644 --- a/win-linux/res/styles/styles@1.25x.qss +++ b/win-linux/res/styles/styles@1.25x.qss @@ -50,31 +50,6 @@ QPushButton#toolButtonDownload::menu-indicator { left: -5px; } -/* download widget */ - -QMenu[hdpi]#menuButtonDownload { - border-width: 1px; -} - -CDownloadWidget[hdpi] QProgressBar { - border-radius: 2px; - max-height: 6px; - margin-right: 13px; - margin-top: 1px; - min-width: 500px; -} - -CDownloadWidget[hdpi] QProgressBar::chunk { - border-radius: 2px; -} - -CDownloadWidget[hdpi] QPushButton#buttonCancel { - font-size: 15px; -} - -CDownloadWidget[hdpi] QLabel#labelName { - font-size: 20px; -} /* ToolTip*/ diff --git a/win-linux/res/styles/styles@1.5x.qss b/win-linux/res/styles/styles@1.5x.qss index 0389858d2..ac0a9be87 100644 --- a/win-linux/res/styles/styles@1.5x.qss +++ b/win-linux/res/styles/styles@1.5x.qss @@ -51,31 +51,6 @@ QPushButton#toolButtonDownload::menu-indicator { left: -6px; } -/* download widget */ - -QMenu[hdpi]#menuButtonDownload { - border-width: 2px; -} - -CDownloadWidget[hdpi] QProgressBar { - border-radius: 3px; - max-height: 8px; - margin-right: 15px; - margin-top: 2px; - min-width: 600px; -} - -CDownloadWidget[hdpi] QProgressBar::chunk { - border-radius: 3px; -} - -CDownloadWidget[hdpi] QPushButton#buttonCancel { - font-size: 18px; -} - -CDownloadWidget[hdpi] QLabel#labelName { - font-size: 24px; -} /* ToolTip*/ diff --git a/win-linux/res/styles/styles@1.75x.qss b/win-linux/res/styles/styles@1.75x.qss index 1245afee0..194d84978 100644 --- a/win-linux/res/styles/styles@1.75x.qss +++ b/win-linux/res/styles/styles@1.75x.qss @@ -51,31 +51,6 @@ QPushButton#toolButtonDownload::menu-indicator { left: -7px; } -/* download widget */ - -QMenu[hdpi]#menuButtonDownload { - border-width: 2px; -} - -CDownloadWidget[hdpi] QProgressBar { - border-radius: 3px; - max-height: 8px; - margin-right: 15px; - margin-top: 2px; - min-width: 600px; -} - -CDownloadWidget[hdpi] QProgressBar::chunk { - border-radius: 3px; -} - -CDownloadWidget[hdpi] QPushButton#buttonCancel { - font-size: 18px; -} - -CDownloadWidget[hdpi] QLabel#labelName { - font-size: 24px; -} /* ToolTip*/ diff --git a/win-linux/res/styles/styles@2.5x.qss b/win-linux/res/styles/styles@2.5x.qss index cc2b828e7..a3ce564cd 100644 --- a/win-linux/res/styles/styles@2.5x.qss +++ b/win-linux/res/styles/styles@2.5x.qss @@ -60,31 +60,6 @@ QPushButton#toolButtonDownload::menu-indicator { left: -10px; } -/* download widget */ - -QMenu[hdpi]#menuButtonDownload { - border-width: 3px; -} - -CDownloadWidget[hdpi] QProgressBar { - border-radius: 5px; - max-height: 13px; - margin-right: 25px; - margin-top: 3px; - min-width: 500px; -} - -CDownloadWidget[hdpi] QProgressBar::chunk { - border-radius: 5px; -} - -CDownloadWidget[hdpi] QPushButton#buttonCancel { - font-size: 30px; -} - -CDownloadWidget[hdpi] QLabel#labelName { - font-size: 40px; -} /* ToolTip*/ diff --git a/win-linux/res/styles/styles@2x.qss b/win-linux/res/styles/styles@2x.qss index 019c6537b..39534a663 100644 --- a/win-linux/res/styles/styles@2x.qss +++ b/win-linux/res/styles/styles@2x.qss @@ -60,31 +60,6 @@ QPushButton#toolButtonDownload::menu-indicator { left: -8px; } -/* download widget */ - -QMenu[hdpi]#menuButtonDownload { - border-width: 2px; -} - -CDownloadWidget[hdpi] QProgressBar { - border-radius: 4px; - max-height: 10px; - margin-right: 20px; - margin-top: 2px; - min-width: 400px; -} - -CDownloadWidget[hdpi] QProgressBar::chunk { - border-radius: 4px; -} - -CDownloadWidget[hdpi] QPushButton#buttonCancel { - font-size: 24px; -} - -CDownloadWidget[hdpi] QLabel#labelName { - font-size: 32px; -} /* ToolTip*/ diff --git a/win-linux/res/styles/styles@3.5x.qss b/win-linux/res/styles/styles@3.5x.qss index 3749433f7..10b0fd9f6 100644 --- a/win-linux/res/styles/styles@3.5x.qss +++ b/win-linux/res/styles/styles@3.5x.qss @@ -60,31 +60,6 @@ QPushButton#toolButtonDownload::menu-indicator { left: -14px; } -/* download widget */ - -QMenu[hdpi]#menuButtonDownload { - border-width: 4px; -} - -CDownloadWidget[hdpi] QProgressBar { - border-radius: 7px; - max-height: 18px; - margin-right: 35px; - margin-top: 4px; - min-width: 700px; -} - -CDownloadWidget[hdpi] QProgressBar::chunk { - border-radius: 7px; -} - -CDownloadWidget[hdpi] QPushButton#buttonCancel { - font-size: 42px; -} - -CDownloadWidget[hdpi] QLabel#labelName { - font-size: 56px; -} /* ToolTip*/ diff --git a/win-linux/res/styles/styles@3x.qss b/win-linux/res/styles/styles@3x.qss index 5eb525d8e..2d327e553 100644 --- a/win-linux/res/styles/styles@3x.qss +++ b/win-linux/res/styles/styles@3x.qss @@ -60,31 +60,6 @@ QPushButton#toolButtonDownload::menu-indicator { left: -12px; } -/* download widget */ - -QMenu[hdpi]#menuButtonDownload { - border-width: 3px; -} - -CDownloadWidget[hdpi] QProgressBar { - border-radius: 6px; - max-height: 15px; - margin-right: 30px; - margin-top: 3px; - min-width: 600px; -} - -CDownloadWidget[hdpi] QProgressBar::chunk { - border-radius: 6px; -} - -CDownloadWidget[hdpi] QPushButton#buttonCancel { - font-size: 36px; -} - -CDownloadWidget[hdpi] QLabel#labelName { - font-size: 48px; -} /* ToolTip*/ diff --git a/win-linux/res/styles/styles@4.5x.qss b/win-linux/res/styles/styles@4.5x.qss index a746b6230..af13fa45c 100644 --- a/win-linux/res/styles/styles@4.5x.qss +++ b/win-linux/res/styles/styles@4.5x.qss @@ -60,31 +60,6 @@ QPushButton#toolButtonDownload::menu-indicator { left: -18px; } -/* download widget */ - -QMenu[hdpi]#menuButtonDownload { - border-width: 5px; -} - -CDownloadWidget[hdpi] QProgressBar { - border-radius: 9px; - max-height: 23px; - margin-right: 45px; - margin-top: 5px; - min-width: 900px; -} - -CDownloadWidget[hdpi] QProgressBar::chunk { - border-radius: 9px; -} - -CDownloadWidget[hdpi] QPushButton#buttonCancel { - font-size: 54px; -} - -CDownloadWidget[hdpi] QLabel#labelName { - font-size: 72px; -} /* ToolTip*/ diff --git a/win-linux/res/styles/styles@4x.qss b/win-linux/res/styles/styles@4x.qss index 783d8ce5e..df2e0ce76 100644 --- a/win-linux/res/styles/styles@4x.qss +++ b/win-linux/res/styles/styles@4x.qss @@ -60,31 +60,6 @@ QPushButton#toolButtonDownload::menu-indicator { left: -16px; } -/* download widget */ - -QMenu[hdpi]#menuButtonDownload { - border-width: 4px; -} - -CDownloadWidget[hdpi] QProgressBar { - border-radius: 8px; - max-height: 20px; - margin-right: 40px; - margin-top: 4px; - min-width: 800px; -} - -CDownloadWidget[hdpi] QProgressBar::chunk { - border-radius: 8px; -} - -CDownloadWidget[hdpi] QPushButton#buttonCancel { - font-size: 48px; -} - -CDownloadWidget[hdpi] QLabel#labelName { - font-size: 64px; -} /* ToolTip*/ diff --git a/win-linux/res/styles/styles@5x.qss b/win-linux/res/styles/styles@5x.qss index 3ad2e3f24..8ba4fa934 100644 --- a/win-linux/res/styles/styles@5x.qss +++ b/win-linux/res/styles/styles@5x.qss @@ -60,31 +60,6 @@ QPushButton#toolButtonDownload::menu-indicator { left: -20px; } -/* download widget */ - -QMenu[hdpi]#menuButtonDownload { - border-width: 5px; -} - -CDownloadWidget[hdpi] QProgressBar { - border-radius: 10px; - max-height: 25px; - margin-right: 50px; - margin-top: 5px; - min-width: 1000px; -} - -CDownloadWidget[hdpi] QProgressBar::chunk { - border-radius: 10px; -} - -CDownloadWidget[hdpi] QPushButton#buttonCancel { - font-size: 60px; -} - -CDownloadWidget[hdpi] QLabel#labelName { - font-size: 80px; -} /* ToolTip*/ diff --git a/win-linux/resources.qrc b/win-linux/resources.qrc index 8a6a8d4ae..d248b5706 100644 --- a/win-linux/resources.qrc +++ b/win-linux/resources.qrc @@ -85,6 +85,7 @@ res/styles/editor.qss res/styles/message.qss res/styles/tabbar.qss + res/styles/download.qss res/styles/styles@1.5x.qss diff --git a/win-linux/src/components/cdownloadwidget.cpp b/win-linux/src/components/cdownloadwidget.cpp index d789b1acc..81465ef13 100644 --- a/win-linux/src/components/cdownloadwidget.cpp +++ b/win-linux/src/components/cdownloadwidget.cpp @@ -31,51 +31,22 @@ */ #include "components/cdownloadwidget.h" - +#include "components/celipsislabel.h" +#include "cascapplicationmanagerwrapper.h" #include #include #include -#include -#include -#include -#include #include -#include -#include "qcefview.h" +#include #include "common/Types.h" -#include "windows/cwindowbase.h" -#include -#define DOWNLOAD_WIDGET_MAX_WIDTH 350 +#define DOWNLOAD_WIDGET_MIN_SIZE QSize(450, 250) +#define MARGINS 6 +#define SPACING 6 using namespace NSEditorApi; -CProfileMenuFilter::CProfileMenuFilter(QObject *parent) - : QObject(parent), _parentButton(NULL) -{} - -bool CProfileMenuFilter::eventFilter(QObject * obj, QEvent *event) -{ - if (!_parentButton) - return false; - - QMenu * menu = dynamic_cast(obj); - if ( event->type() == QEvent::Show && obj == _parentButton->menu() ) { - QPoint pos = ((QWidget*)_parentButton->parent())->mapToGlobal(_parentButton->pos()); - pos += QPoint(_parentButton->width() - menu->width(), _parentButton->height() + 6); - _parentButton->menu()->move(pos); - - return true; - } - - return false; -} - -void CProfileMenuFilter::setMenuButton(QPushButton * button) -{ - _parentButton = button; -} class CDownloadWidget::CDownloadItem { public: @@ -93,38 +64,48 @@ class CDownloadWidget::CDownloadItem { }; CDownloadWidget::CDownloadWidget(QWidget *parent) - : QWidget(parent) - , CScalingWrapper(parent) + : QDialog(parent) , m_pToolButton(new CPushButton) { - setLayout(new QVBoxLayout); - m_defMargins = QMargins(layout()->contentsMargins()); - m_defSpacing = layout()->spacing(); - - connect(this, &CDownloadWidget::downloadCanceled, this, &CDownloadWidget::slot_downloadCanceled, Qt::QueuedConnection); - - setMaximumWidth(DOWNLOAD_WIDGET_MAX_WIDTH); + setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); + setMinimumSize(DOWNLOAD_WIDGET_MIN_SIZE); + + QVBoxLayout *main_lut = new QVBoxLayout(this); + main_lut->setContentsMargins(0, 0, 0, 0); + main_lut->setSpacing(0); + setLayout(main_lut); + + m_pArea = new QScrollArea(this); + m_pArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + m_pArea->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded); + m_pArea->setWidgetResizable(true); + + m_pContentArea = new QWidget(m_pArea); + QVBoxLayout *lut = new QVBoxLayout(m_pContentArea); + lut->setContentsMargins(MARGINS, MARGINS, MARGINS, MARGINS); + lut->setSpacing(SPACING); + m_pContentArea->setLayout(lut); + m_pArea->setWidget(m_pContentArea); + main_lut->addWidget(m_pArea); + m_pContentArea->setGeometry(0, 0, width(), height()); + + connect(this, &CDownloadWidget::downloadCanceled, this, [=](int id) { + AscAppManager::getInstance().CancelDownload(id); + slot_downloadCanceled(id); + }); m_pToolButton->setObjectName("toolButtonDownload"); - m_pToolButton->setFixedSize(QSize(33, TOOLBTN_HEIGHT)); m_pToolButton->setVisible(false, false); QPair _icon_download{":/res/icons/downloading.gif", ":/res/icons/downloading_2x.gif"}; m_pToolButton->setAnimatedIcon( _icon_download ); - - QMenu * menuDownload = new QMenu; - QWidgetAction * waction = new QWidgetAction(menuDownload); - waction->setDefaultWidget(this); - menuDownload->setObjectName("menuButtonDownload"); - menuDownload->addAction(waction); - - m_pToolButton->setMenu(menuDownload); - - CProfileMenuFilter * eventFilter = new CProfileMenuFilter(this); - eventFilter->setMenuButton(m_pToolButton); - menuDownload->installEventFilter(eventFilter); - - applyScaling(scaling()); + m_pToolButton->setProperty("act", "tool"); + m_pToolButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); + connect(m_pToolButton, &QPushButton::clicked, this, [=]() { + show(); + }); + QSpacerItem *spacer = new QSpacerItem(5, 5, QSizePolicy::Fixed, QSizePolicy::Expanding); + lut->addSpacerItem(spacer); } CDownloadWidget::~CDownloadWidget() @@ -139,14 +120,18 @@ QPushButton * CDownloadWidget::toolButton() QWidget * CDownloadWidget::addFile(const QString& fn, int id) { - QWidget * widget = new QWidget(this); + QWidget * widget = new QWidget(m_pContentArea); QGridLayout * grid = new QGridLayout; - QLabel * name = new QLabel(fn); + CElipsisLabel * name = new CElipsisLabel(fn); name->setObjectName("labelName"); + name->setEllipsisMode(Qt::ElideRight); + name->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); QProgressBar * progress = new QProgressBar; + progress->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); QPushButton * cancel = new QPushButton(tr("Cancel")); cancel->setObjectName("buttonCancel"); + cancel->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); connect(cancel, &QPushButton::clicked, [=](){ emit downloadCanceled(id); }); @@ -156,14 +141,14 @@ QWidget * CDownloadWidget::addFile(const QString& fn, int id) grid->setColumnStretch(0, 1); grid->setColumnStretch(1, 0); - grid->addWidget(name, 0, 0, 1, -1); + grid->addWidget(name, 0, 0, 1, 1); grid->addWidget(progress, 1, 0, 1, 1); grid->addWidget(cancel, 1, 1, 1, 1); widget->setLayout(grid); - layout()->addWidget(widget); - - updateLayoutGeomentry(); + if (QVBoxLayout *lut = dynamic_cast(m_pContentArea->layout())) + lut->insertWidget(lut->count() - 1, widget); + widget->show(); return widget; } @@ -210,16 +195,6 @@ void CDownloadWidget::downloadProcess(void * info) } } -void CDownloadWidget::updateLayoutGeomentry() -{ - adjustSize(); - - if (m_pToolButton && m_pToolButton->menu()) { - QActionEvent e(QEvent::ActionChanged, m_pToolButton->menu()->actions().at(0)); - QApplication::sendEvent(m_pToolButton->menu(), &e); - } -} - void CDownloadWidget::slot_downloadCanceled(int id) { removeFile(id); @@ -245,18 +220,17 @@ void CDownloadWidget::removeFile(MapItem iter) RELEASEOBJECT(pItemWidget) RELEASEOBJECT(di) - updateLayoutGeomentry(); m_mapDownloads.erase(iter); - - m_pToolButton->menu()->close(); - if (!m_mapDownloads.size() && m_pToolButton->isVisible()) - m_pToolButton->hide(); + if (!m_mapDownloads.size() && m_pToolButton->isVisible()) { + m_pToolButton->deleteLater(); + deleteLater(); + } } } void CDownloadWidget::updateProgress(MapItem iter, void * data) { - QLabel * label_name; + CElipsisLabel * label_name; QProgressBar * progress; CDownloadItem * d_item; CAscDownloadFileInfo * pData; @@ -275,14 +249,10 @@ void CDownloadWidget::updateProgress(MapItem iter, void * data) QString path = QString().fromStdWString(pData->get_FilePath()); if (!path.isEmpty()) { - label_name = qobject_cast(d_item->progress()->layout()->itemAt(0)->widget()); - - QFontMetrics metrics(label_name->font()); - label_name->setText(metrics.elidedText(getFileName(path), Qt::ElideRight, DOWNLOAD_WIDGET_MAX_WIDTH - 36)); + label_name = static_cast(d_item->progress()->layout()->itemAt(0)->widget()); + label_name->setText(getFileName(path)); d_item->set_is_temporary(false); - d_item->progress()->adjustSize(); - if ( !m_pToolButton->isVisible()) { m_pToolButton->setVisible(true); } @@ -302,53 +272,41 @@ QString CDownloadWidget::getFileName(const QString& path) const return ""; } -void CDownloadWidget::resizeEvent(QResizeEvent * e) +void CDownloadWidget::closeEvent(QCloseEvent *ev) { -// qDebug() << "resize: " << e->size(); + ev->ignore(); + hide(); } -void CDownloadWidget::applyScaling(double factor) +void CDownloadWidget::polish() { - if ( factor > 1 ) { - setProperty("hdpi", true); - m_pToolButton->menu()->setProperty("hdpi", true); - } else { - setProperty("hdpi", QVariant(QVariant::Invalid)); - m_pToolButton->menu()->setProperty("hdpi", QVariant(QVariant::Invalid)); - } - - layout()->setContentsMargins(m_defMargins * factor); - layout()->setSpacing(int(m_defSpacing * factor)); - - m_pToolButton->setScaling(factor); - setMaximumWidth(int(DOWNLOAD_WIDGET_MAX_WIDTH * factor)); - - for (int i(0); i < layout()->count(); ++i) { - QWidget * _d_item = layout()->itemAt(i)->widget(); - - int j = _d_item->layout()->count(); - while ( !(--j < 0) ) { - QWidget * _qw = _d_item->layout()->itemAt(j)->widget(); - - _qw->style()->unpolish(_qw); - _qw->style()->polish(_qw); + style()->polish(this); + m_pArea->style()->polish(m_pArea); + m_pArea->verticalScrollBar()->style()->polish(m_pArea->verticalScrollBar()); + m_pContentArea->style()->polish(m_pContentArea); + for (int i(0); i < m_pContentArea->layout()->count(); ++i) { + auto item = m_pContentArea->layout()->itemAt(i); + if (item && item->widget()) { + QWidget * _d_item = item->widget(); + int j = _d_item->layout()->count(); + while ( !(--j < 0) ) { + QWidget * _qw = _d_item->layout()->itemAt(j)->widget(); + _qw->style()->polish(_qw); + } } } - -// qApp->setStyleSheet(qApp->styleSheet()); -// style()->unpolish(this); -// style()->polish(this); -// update(); - - m_pToolButton->menu()->style()->unpolish(m_pToolButton->menu()); - m_pToolButton->menu()->style()->polish(m_pToolButton->menu()); - QPixmap::grabWidget(m_pToolButton->menu()); } -void CDownloadWidget::updateScalingFactor(double f) +void CDownloadWidget::updateScalingFactor(double factor) { - CScalingWrapper::updateScalingFactor(f); - applyScaling(scaling()); + setProperty("zoom", QString::number(factor) + "x"); + setMinimumSize(DOWNLOAD_WIDGET_MIN_SIZE * factor); + m_pArea->verticalScrollBar()->setFixedWidth(qRound(10 * factor)); + int mrg = qRound(MARGINS * factor); + m_pContentArea->layout()->setContentsMargins(mrg, mrg, mrg, mrg); + m_pContentArea->layout()->setSpacing(qRound(SPACING * factor)); + m_pToolButton->setIconSize((QSizeF(20,20) * factor).toSize()); + polish(); } //void CDownloadWidget::updateProgress() @@ -357,6 +315,11 @@ void CDownloadWidget::updateScalingFactor(double f) // updateProgress(e); // } //} +void CDownloadWidget::applyTheme(const QString &theme) +{ + setProperty("uitheme", theme); + polish(); +} //void CDownloadWidget::cancelAll() //{ diff --git a/win-linux/src/components/cdownloadwidget.h b/win-linux/src/components/cdownloadwidget.h index 921f1598d..13f4c824d 100644 --- a/win-linux/src/components/cdownloadwidget.h +++ b/win-linux/src/components/cdownloadwidget.h @@ -33,22 +33,13 @@ #ifndef CDOWNLOADWIDGET_H #define CDOWNLOADWIDGET_H -#include +#include +#include #include "cpushbutton.h" -#include "cscalingwrapper.h" //class CProfileMenuFilter; -class CProfileMenuFilter : public QObject { -public: - CProfileMenuFilter(QObject *); - - bool eventFilter(QObject *, QEvent *); - void setMenuButton(QPushButton *); -private: - QPushButton * _parentButton; -}; -class CDownloadWidget : public QWidget, public CScalingWrapper +class CDownloadWidget : public QDialog { Q_OBJECT @@ -63,25 +54,23 @@ class CDownloadWidget : public QWidget, public CScalingWrapper QPushButton * toolButton(); // void updateProgress(); // void cancelAll(); - - void updateScalingFactor(double) override; + void updateScalingFactor(double); + void applyTheme(const QString&); protected: QWidget * addFile(const QString&, int); void removeFile(int); void removeFile(MapItem); - void updateLayoutGeomentry(); void updateProgress(MapItem, void *); QString getFileName(const QString&) const; - - void applyScaling(double); - void resizeEvent(QResizeEvent *); + void closeEvent(QCloseEvent *) final; private: - CPushButton * m_pToolButton; + void polish(); + CPushButton * m_pToolButton = nullptr; + QScrollArea * m_pArea = nullptr; + QWidget *m_pContentArea = nullptr; std::map m_mapDownloads; - QMargins m_defMargins; - int m_defSpacing; signals: void downloadCanceled(int); diff --git a/win-linux/src/main.cpp b/win-linux/src/main.cpp index d3c0f8a1f..fb413e2bf 100644 --- a/win-linux/src/main.cpp +++ b/win-linux/src/main.cpp @@ -140,6 +140,7 @@ int main( int argc, char *argv[] ) } app.setAttribute(Qt::AA_UseHighDpiPixmaps); + app.setAttribute(Qt::AA_UseStyleSheetPropagationInWidgetStyles); app.setStyle(QStyleFactory::create("Fusion")); /* the order is important */ diff --git a/win-linux/src/windows/cmainwindow.cpp b/win-linux/src/windows/cmainwindow.cpp index 692e75e66..f76721e7b 100644 --- a/win-linux/src/windows/cmainwindow.cpp +++ b/win-linux/src/windows/cmainwindow.cpp @@ -230,6 +230,10 @@ void CMainWindow::applyTheme(const std::wstring& theme) m_pButtonMain->setIcon(MAIN_ICON_PATH, AscAppManager::themes().current().isDark() ? "logo-light" : "logo-dark"); m_pButtonMain->setIconSize(MAIN_ICON_SIZE * m_dpiRatio); + if (m_pWidgetDownload && m_pWidgetDownload->toolButton()) { + m_pWidgetDownload->applyTheme(QString::fromStdWString(AscAppManager::themes().themeActualId(theme))); + m_pWidgetDownload->toolButton()->style()->polish(m_pWidgetDownload->toolButton()); + } } /** Private **/ @@ -965,17 +969,24 @@ void CMainWindow::onDocumentSaveInnerRequest(int id) void CMainWindow::onDocumentDownload(void * info) { - if ( !m_pWidgetDownload ) { - m_pWidgetDownload = new CDownloadWidget(this); - - QHBoxLayout * layoutBtns = qobject_cast(m_boxTitleBtns->layout()); - layoutBtns->insertWidget(1, m_pWidgetDownload->toolButton()); + CAscDownloadFileInfo *pData = reinterpret_cast(info); + if (!pData->get_IsCanceled()) { + if ( !m_pWidgetDownload ) { + m_pWidgetDownload = new CDownloadWidget(this); + connect(m_pWidgetDownload, &QWidget::destroyed, this, [=]() { + m_pWidgetDownload = nullptr; + }); + QHBoxLayout * layoutBtns = qobject_cast(m_boxTitleBtns->layout()); + layoutBtns->insertWidget(1, m_pWidgetDownload->toolButton()); + m_pWidgetDownload->show(); + std::vector files{":/styles/download.qss"}; + m_pWidgetDownload->setStyleSheet(Utils::readStylesheets(&files)); + m_pWidgetDownload->applyTheme(m_pMainPanel->property("uitheme").toString()); + m_pWidgetDownload->updateScalingFactor(m_dpiRatio); + m_pWidgetDownload->move(geometry().bottomRight() - m_pWidgetDownload->rect().bottomRight()); + } + m_pWidgetDownload->downloadProcess(info); } - - m_pWidgetDownload->downloadProcess(info); - -// CAscDownloadFileInfo * pData = reinterpret_cast(info); -// RELEASEINTERFACE(pData); } void CMainWindow::onDocumentFragmented(int id, bool isfragmented) @@ -1377,6 +1388,10 @@ void CMainWindow::updateScalingFactor(double dpiratio) m_pTabs->reloadTabIcons(); m_pButtonMain->setIcon(MAIN_ICON_PATH, AscAppManager::themes().current().isDark() ? "logo-light" : "logo-dark"); m_pButtonMain->setIconSize(MAIN_ICON_SIZE * dpiratio); + if (m_pWidgetDownload && m_pWidgetDownload->toolButton()) { + m_pWidgetDownload->updateScalingFactor(dpiratio); + m_pWidgetDownload->toolButton()->style()->polish(m_pWidgetDownload->toolButton()); + } } void CMainWindow::setScreenScalingFactor(double factor) From 673f7f8f635970492137a0d50c69644562c5dedf Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Thu, 22 Jun 2023 14:42:06 +0300 Subject: [PATCH 067/298] [win-linux] refactoring CDownloadWidget --- win-linux/src/components/cdownloadwidget.cpp | 24 ++++---------------- win-linux/src/components/cdownloadwidget.h | 3 --- 2 files changed, 5 insertions(+), 22 deletions(-) diff --git a/win-linux/src/components/cdownloadwidget.cpp b/win-linux/src/components/cdownloadwidget.cpp index 81465ef13..7b066a73f 100644 --- a/win-linux/src/components/cdownloadwidget.cpp +++ b/win-linux/src/components/cdownloadwidget.cpp @@ -40,7 +40,6 @@ #include #include "common/Types.h" - #define DOWNLOAD_WIDGET_MIN_SIZE QSize(450, 250) #define MARGINS 6 #define SPACING 6 @@ -48,21 +47,23 @@ using namespace NSEditorApi; -class CDownloadWidget::CDownloadItem { +class CDownloadWidget::CDownloadItem +{ public: CDownloadItem(QWidget * w) : _p_progress(w), _is_temp(true) {} QWidget * progress() const { return _p_progress; } - bool is_temporary() const { return _is_temp; } void set_is_temporary(bool v) { _is_temp = v; } + private: QWidget * _p_progress; bool _is_temp; }; + CDownloadWidget::CDownloadWidget(QWidget *parent) : QDialog(parent) , m_pToolButton(new CPushButton) @@ -132,7 +133,7 @@ QWidget * CDownloadWidget::addFile(const QString& fn, int id) QPushButton * cancel = new QPushButton(tr("Cancel")); cancel->setObjectName("buttonCancel"); cancel->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); - connect(cancel, &QPushButton::clicked, [=](){ + connect(cancel, &QPushButton::clicked, qApp, [=](){ emit downloadCanceled(id); }); @@ -168,8 +169,6 @@ void CDownloadWidget::downloadProcess(void * info) slot_downloadCanceled(id); } else { if (iter == m_mapDownloads.end()) { -// ADDREFINTERFACE(pData); - QString path = QString::fromStdWString(pData->get_FilePath()), file_name = "Unconfirmed"; @@ -190,7 +189,6 @@ void CDownloadWidget::downloadProcess(void * info) } } } - updateProgress(iter, pData); } } @@ -210,11 +208,7 @@ void CDownloadWidget::removeFile(MapItem iter) if (iter != m_mapDownloads.end()) { CDownloadItem * di = static_cast((*iter).second); -// CAscDownloadFileInfo * pData = reinterpret_cast(di->info()); -// RELEASEINTERFACE(pData) - QWidget * pItemWidget = di->progress(); - layout()->removeWidget(pItemWidget); RELEASEOBJECT(pItemWidget) @@ -237,7 +231,6 @@ void CDownloadWidget::updateProgress(MapItem iter, void * data) d_item = static_cast((*iter).second); if (d_item) { -// pData = reinterpret_cast(d_item->info()); pData = reinterpret_cast(data); progress = qobject_cast(d_item->progress()->layout()->itemAt(1)->widget()); @@ -309,12 +302,6 @@ void CDownloadWidget::updateScalingFactor(double factor) polish(); } -//void CDownloadWidget::updateProgress() -//{ -// for (auto e : m_mapDownloads) { -// updateProgress(e); -// } -//} void CDownloadWidget::applyTheme(const QString &theme) { setProperty("uitheme", theme); @@ -327,4 +314,3 @@ void CDownloadWidget::applyTheme(const QString &theme) // removeFile(e.first); // } //} - diff --git a/win-linux/src/components/cdownloadwidget.h b/win-linux/src/components/cdownloadwidget.h index 13f4c824d..febfe088e 100644 --- a/win-linux/src/components/cdownloadwidget.h +++ b/win-linux/src/components/cdownloadwidget.h @@ -37,12 +37,10 @@ #include #include "cpushbutton.h" -//class CProfileMenuFilter; class CDownloadWidget : public QDialog { Q_OBJECT - class CDownloadItem; typedef std::map::const_iterator MapItem; @@ -52,7 +50,6 @@ class CDownloadWidget : public QDialog void downloadProcess(void *); QPushButton * toolButton(); -// void updateProgress(); // void cancelAll(); void updateScalingFactor(double); void applyTheme(const QString&); From e35ce41a4ef011dfbfe7a138f808e0e0b0bfc43f Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Thu, 22 Jun 2023 14:55:38 +0300 Subject: [PATCH 068/298] [win-linux] replace download icon --- win-linux/res/icons/downloading.gif | Bin 2669 -> 0 bytes win-linux/res/icons/downloading.svg | 4 + win-linux/res/icons/downloading@1.5x.gif | Bin 3481 -> 0 bytes win-linux/res/icons/downloading_2x.gif | Bin 3235 -> 0 bytes win-linux/res/styles/styles.qss | 36 +--- win-linux/res/styles/styles@1.25x.qss | 17 +- win-linux/res/styles/styles@1.5x.qss | 17 +- win-linux/res/styles/styles@1.75x.qss | 17 +- win-linux/res/styles/styles@2.5x.qss | 25 +-- win-linux/res/styles/styles@2x.qss | 25 +-- win-linux/res/styles/styles@3.5x.qss | 25 +-- win-linux/res/styles/styles@3x.qss | 25 +-- win-linux/res/styles/styles@4.5x.qss | 25 +-- win-linux/res/styles/styles@4x.qss | 25 +-- win-linux/res/styles/styles@5x.qss | 25 +-- win-linux/resources.qrc | 3 +- win-linux/src/components/cdownloadwidget.cpp | 6 +- win-linux/src/components/cpushbutton.cpp | 203 ++++--------------- win-linux/src/components/cpushbutton.h | 36 +--- 19 files changed, 77 insertions(+), 437 deletions(-) delete mode 100644 win-linux/res/icons/downloading.gif create mode 100644 win-linux/res/icons/downloading.svg delete mode 100644 win-linux/res/icons/downloading@1.5x.gif delete mode 100644 win-linux/res/icons/downloading_2x.gif diff --git a/win-linux/res/icons/downloading.gif b/win-linux/res/icons/downloading.gif deleted file mode 100644 index 642e7ea61f9075f2ed3d56884eacba76b6bbc685..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2669 zcmaJ?c|cS59S`@7^#BDtVnFdA$IG2S(2x+M3Z@VXN)bcyfB-p6!hIwXfh2?+gd>C_ zTm}#ns?<7l?Pk|)o!dOR7ImF#cXanUcXt>2yzxVroKA-RL`+ncc%I47- z!bnsk>QfC$Y97nBT&e0BG4u=whprcxW^f%>6c!h=`&z2jon^e3u3v1oIk+8jMdtIv z=jOD|*)!(8n;(86Fq~_$jh-+~D{T|`XGh<=^FgX{>6qgNY;mi{ui8f@v)iWyLpM2w zg-XZk9o;>*@4jDTm{@-But8_2wT)qQm-wv%`&;K4`p>;}`+=mhAJV_cYQK2WINoV@ zX4`M@OpEF5bELD2kY*O&FmY@7k#WG)q_-9trVMsxu5~HTG?&&iVz$}_2M6`Wt||BQ z*u>=Bd-oXnOEmrEO7r;es7q%XEH=3xAlE~a+0u5lU2PdPTdkzdC35GIplkNp?T7UC z1#0_3wrSy=JIhwbNT;Q@t9MZ6x?r4KH1#^f9gY(749)PyyUQPUy5ua@*&WEq!K zebfD8Zs+(^s_wjU_;Q-=e7k+W?>2_IfNVq2dco`n&L<)ttatdVUz2JL~Ut5_H|Vn8E4IdUb8rr@Yp5kw}UX$%}hB`}EO z6f}_l(eMNs9wK205R*V%5Y054BR3YLL6 zQi6f;TlwFA|MTyEeg4mX{QYl#{mY*p|LLn6vxPI+xSKqwy#?s|W zuP-iKyf8m^es*TseQs)UVtmXsIx;-u9CQry_x0L)Y*vf8+tg(==sP>w&+6LFXf>@Z z%}tFB^>wv1YL)V|LN1e5S5-!PC~Bf`T%LxO_>1N^~fXXodELE$J3Dg}Ijz^@?^g$ki*Tie=lIN6*dIwP0e z%{A(pdwQ&GEdv96t&YLI;TETBe0b8~JUBDsY|gmQ?99wP`buWonP*x-s0dUL3aE#K zXcHTEuTS)`g#(*EutjLon7Xtr{%Zd%KK3wR4*>Rc+VyR1$)~WVl8@K#B^>v`gaS+; zz--V)zO0M%@90R_Y)nYmexN4B2NnWgK>!x#frT7G9STX>n7T2kAGgRn92?Uf- zK*79-k`7xHR?kP0JJbb+xMk3o+e-8)VMUHG1Bve@CWp8K*wnznGW(4 z!jqaOP>)wHyjH2DOZri$D#T88z#lmQla7`qLj&qpTH;`rR2~XWPo4N^m zVN)Vzcad)&d6no|#nzo$>4APMzrZ+LDK3tO2-xgAPhK9~7(tLAh95G^FPfik&RA^r zbgWN(5iz7dDcTJ?h&wjKhr*%p<(lsDEKQy!Ypuo@KVWjQ#qB;gJL@BWR2XT6cx{|U z7q^yS;|KKig6VkL-njd1~2UsjE zJv}~1B#Bj|C@?-yR9&X8PLAzL{u1Qs{CH|7-me#zyk;tCu~?oHL`E@Md-~){Cr?+N Y&{sBhbv*}Joo3H@a@l(B8C2^30nP4VX8-^I diff --git a/win-linux/res/icons/downloading.svg b/win-linux/res/icons/downloading.svg new file mode 100644 index 000000000..b358e294b --- /dev/null +++ b/win-linux/res/icons/downloading.svg @@ -0,0 +1,4 @@ + + + + diff --git a/win-linux/res/icons/downloading@1.5x.gif b/win-linux/res/icons/downloading@1.5x.gif deleted file mode 100644 index 37feb0d98c44d0f38c1ab4fe5d3c3018bcc6ab31..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3481 zcmd6oXd^}~Fcdl+yG z$>|KvZjQ;RI+s_@%x^l9cZqtgQru!VUsRc0qKe3>7vySuGh1Xu3VLRXR9>E0ta6oh zeW2)RzGFO|D)&CG4wh6Um(`z4D~K(=v?r}0BQwi4U3;SFN~XFY{9@&)%(4S1<+0^m zhm?H*d7S~py)sQh=iP_8`N#dnhwn-+?@evIqaUdoo~yWZw{2`Ou%!2h>h{OFvDQ1& zcc*6xuH2Tj4Ww(D=NBIeGD})IueEgcOw7(HDz%){{6XVlVQs6dqVa}qJh^qaw7s{u zLVK%!P+8kVOV>6H-|rk-Xdb>-b8GB`qGxzyyk~eqPxLBJiE4(!_c_Kq~tgy9JH`}3`Nv!HlRA0U^KG#1nJ2^Rd zR8}`OJ0F{==;+gxRBHPs<_r%W*L^(NHZ&Dp`qAXVBU!1sb71tGx^-~szQJG!`B0(K zHYcbq85ce|nxVOAm`o|Dxlq*>lHGXSFf}$YomSmGFfeGmci%7T(yhq{cP3^c%C0xx z9*r$(I;U#wnOKOHH%EL}8kbigP`34q&l_eII2AWI%C1D!m9T=guHi|;)GV*OO`NZp zSa_6QD0j{5mKT>OmC9$&o;`p59Qr?aIXvGO>>Cm8;}z;l#uH6VKuO?HWKbxY#uPKb z-@W@11x!{PEJjDev0R=f=9`S&}1T+NFcfrNMszz&4WnsAniskzc9c}$d2&{qxmg+fp4A|j#w=4 zAP^D~67UHwc)l=}K%!Eq1R|M0CgZ>goG6JWW+vizBJ7F+4HmJ4T!EO&=b;frW;Fkd z*b@UPeX)gjK~T_-!aNavX+wAxKc0}t6c9*wA|XB=+1Ju)kvI(gsf?Gd7DXfpU_uxy z;-3++V6Ys!0)yWDx)HJvRO1mM_5=j%oGb8&YkQ`|@-UvDavM4@`Ql3l27 z-Y#Aw+6v3yiNs7E3tsW&0`FyZ_ph=ZK0=r&<_jbE{8K9_2<7m_d=ZB)K$A&$GTP|~ zm&fKOh@6obz1T7h7IM$RY(F7C9=+6L5AI6}0NbVRj*g+=+?Xz89EC_>;@qQMsW@gd znYi24l@vo{x?z@i_W#;E0w{`rBxO}{Rvv*kA|HP|2jI((Ckf_(<0Ay;#N_#Z{{63i z{_y=jzWe*%{`&1-o<05M&wu*k*I#}4#UGx0{@LT-Kl=2O-#uJhcrZVA|K9A3ae8WU z;_mp^=!ikD8y>ndIMCmB`{P@^H*Z}3=vvR!?yk;`_O>gRTQ9XVH#IiY*J*2Os;eq1 zG-{QyTv1k9Qd}f2EXdEx&5>niWlA$HO48F(FMODC{#Dbb zt&t<$Lx%SPYXf}GgsCzt&7&d`y@=?a?9HK9AQZG7*l&j_fW1J~FG1M`-!#_L4C0N$ zQAye-0cx&^$;${dL_)nFHZTrG>IH?>j@HJcvUH+K75NzU|7MnzDzZO+d%%*J=Pd z`i{q4T(nR6R_{(nhTJJU_-m22{s7si54)Z(w4MX9QH7z-guLD=tc^CkZq24mfUFIWr9-hPcJ!wq8e5d@ z$b4VB!ysgh^%n2%zzmt#xkR5IMr6@GGW+?15<~IZ7n-7)$ws+?c;WOr-d#`ZxvVR_ z2SxRHYo`cwmkwAERA0}O=(?SOjJsX^jH5Sw2wJaV1a-fSv#2KA+hGGZLNNPXxQhgYq!U!^1E z$J)7^1ijY!=UIBotfh9VPigtM#bN6W0DM{*f84dbevmR~H+uNzLQ+K;1mg+5Bn zu_V;3H(Nbb#0lv?4Qhn@y@o6|?K1XJBK4Cwc2cXsKsCLib|_~nlC0CINV2l*owuZc zMr{L)DoO==sWE7rjmmMgyU1hh7Ld3ghh+!kfDASjM4bSlZk+}qyA2Fhjzrx82-~QB z5m_V@2qTP6in}0y;zAHQCWaLr9xZwm)?Aw>$Wlfw8ke z-+VWLu{(mv_;Wx;t=3#A09>MXLX9c4gY>Q2-#6}}9@PuBy!Dnf)^Y*qy8S9zW^aL8 zbMqnm2JnV~8eR9;>gTpa8S&X*YKJx8N*b~72JReWYN%ggW&nEwYV2q+jXP8kZY=Qx qw(^$E*4VS_5Zg7E2x4Oj-d=+mm*Zz7`X190eNj>?e={>^&wl}clL;aK diff --git a/win-linux/res/icons/downloading_2x.gif b/win-linux/res/icons/downloading_2x.gif deleted file mode 100644 index 791e1d9d3a70bf505fdbdba0b1042ad784a34c31..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3235 zcmbVNcR-VO8V)i=R76A&ln@j_Mh0XmDujTb3;~7K(FPJA0!d85hJ2AdLs$~_MwTE5 zG6g}ji2JUmR$Do4YHG&NjptVqPGa zl>Cy;T_Jf&c9z`Qh=U(`wRv*o3U?n$1WSsU&sd+s6Wap`7X-$`;y0@sR!M|)w z**6)TS(shXlu^-qwDba!mH&9|+D$jZqLS2XU+Xv-=tXUkjs3wnaml^%*dxw86X z$(f3(>b!i#5qVoeo-(SSF0rs$R#=r$R34I36Oh;LncKz8=@I5u9+MT&6RPh&d*v@J zi9g-MK$=5~+T&8P1dW&YwZq2?J9A5`of9kKJE!+2DP>(#-2)@}we3~CW8TuzQ`w4# zGf&fdrt-Qc$r-%`Ma6I4ym|Zft=ZdEUMzn%x|>;eFSh zSRp$&oGZZwaYK20N8C5VV>m326fyf|G81{7R`xg$>M4S+YuZ!z@E%@e$3zJBM3_Lz2 zCdMwt-cBG2#S`gtI-WqnlSsBuVJnW~OW3ite6jfgg9}$2EaC|zJOLkzGO~jNQ4&WS zbUJS#Qt0WqNX!@8y)$GNEQrL%vW0k}9RVL1iTZk1EtdFlzi;D%)nflRAs6q<6$_$7 z!CWXeUjW1Gep(1Egl-t#A|5P-9pNGfj*8^+CGIYcIQYem!{acRL}voaiRenD6C7A% zB9TrbySUO^NKQ5hM`(xEOu-vUqs7 zd^j;8I2tN%|Mky*{QYm={q-+@{?i}-@cTF4e)GGpU;p+uuYUdV#q+smPoK=rJpSs- zM-RVvaR1(~KL6z}?%uh5>*kH?)7PdxyLx5v^2GS1vC)eo!$X4u{TKRr&-Zkn>*_q) z(caeDa;CYdv7x@Mwx+tOvZB09S$evpxTvr|kuT57&B@Nn%t%j5O-Vi_L!?QG3Gs2U zG0{;HvFM~wz>kawKfwzN4dHTvgV>*ba{SoQBOiYh7;yNIzn||xA8#+u1N%MP_qn;U zT$s*Id-v>i+_jTIr%@?n2YV8cfVZ=?vEE^2x!q#hR&$&g)^y8e6XQ)rh8qnw=&#pX zr@MB|YMoWuE44H=)YVj1zy)LWotnBf2Eo|CT?2mth8T=yf=rs6k}7py!J<-GE8Nra zQ}<_O7qj*&6dn#0l@%V!d}>uyKy4barM0a&wXKubk&<-2x34?7Z!oD}I&`6bw0C6u z{N>53<5Q#4LpKI*jdf2B_ml43e=zdk5$U1*%*6r@rq;8)Jac#;kyT^kgQn;i+k{CWwiu`FcHb)yySj`cS3@Wu`LB_LS5VjFx#; zc9s^hNl#I*E)I!{+QH%Mh|))vVDtc^0T>Gz2CROZo{?#{DJM6_PRp;Lus}=2FH~8k zqc7E0+ZYq0qgJ^DstZspfZ}BofbIckaCT1aC-QuSp-xe8k)hhgvhp%D#8_BcXRLy# zm>O}pMv=%;`8B|y4IJb}4kzFsqa1}r#Vb#jDpwl8q`kE_*VWf)Bb)cNv~ET^B6%%5 zL}e+H&U+@CWlRiU+6zqH)it%cjtz|sx)DuH5lif#ji9Yq{wM(*2xvgCtG=PJ zsc8vV>%RskE(dD>SPzt)epY!Nj6mGlJI;1?o$D~-_VyXIY8wlM#@avFtQxTD1FMhB z2i9{8*0V6$g@G*i`5|jNVRLU^FG1UAXn06lf1_x8LPsCbSJMd%)lrLEI`tJGVgMq6 zGL1tJIgPEWA#z)f!2Y~o>I|6rUKko3hDHP5iOpvgTW{8dlj7Y!FlcBza&cs(n$E=K z3AMN#oNLoN;-nC7J&3o7bjgr0Ach`Gu1snmQN?0aB?ie+Tl3^m2GL;&)P2bDu*QcIkvwY4eEQfg(YF3&f$iuWxpDUP@GFRv)K-Ca{#S6`pl zv|zJ^2Fi3$b{!ZTVvJlIC0`n!aGtz!6*F~h`ucT}{p~xq0}tH2djO9A!$+QO=;?oG zulabHHoC`yGGy%I66iF*Gb@dYKnCI#?4!|mZ+c^oKHUu(n5!{xWYkXz#_@8NM~3i6BbDU zm89hXMx!ctLcumNu|GseY~c$LviKB~4}vlol$}AD3Ca{uPC{qfx}8Y;7&#lh>+S)sa1;obKtO?5B%!hBUPgpoXf`s$ za+P|T`YKDr%G5efZfX^M7|qwV)j+iEI1u^#cqiy(x)nN!-eP03B|6z4Y8x6*4FM2n qU=INSmIwrOb<32|o7+T&xNFQO8$n>ls)&aJ06nNBB>|@}JO2%8H|O{O diff --git a/win-linux/res/styles/styles.qss b/win-linux/res/styles/styles.qss index 40cff8592..ef9bbcc48 100644 --- a/win-linux/res/styles/styles.qss +++ b/win-linux/res/styles/styles.qss @@ -128,22 +128,7 @@ QPushButton#toolButtonMain[class=normal]:hover { /*border-bottom: 1px solid #b6b6b6;*/ /*}*/ -QPushButton::menu-indicator { - /*border: 1px solid white;*/ - width: 10px; - height: 10px; - image: url(:/menu_indicator_normal_light.svg); - left: -2px; - top: -2px; -} - -QPushButton::menu-indicator:disabled { - image: url(:/menu_indicator_pressed_light.svg); -} - -QPushButton::menu-indicator:hover { - image: url(:/menu_indicator_hover_light.svg); -} +QPushButton::menu-indicator {width: 0px; height: 0px;} /*QPushButton[theme=dark]::menu-indicator {*/ /*border-image: url(:/res/icons/menu-indicator-dark.png) 0 0 0 0 repeat repeat;*/ @@ -157,15 +142,7 @@ QPushButton::menu-indicator:hover { /*border-image: url(:/res/icons/menu-indicator-dark.png) 0 10 0 0 repeat repeat;*/ /*}*/ -QPushButton#toolButtonDownload { - background-origin: content; - padding: 6px; -} - -QPushButton#toolButtonDownload::menu-indicator { - top: -10px; - left: -4px; -} +QPushButton#toolButtonDownload {max-width: 40px; width: 40px; max-height: 28px; height: 28px;} /**************************/ /* dark theme definitions */ @@ -213,13 +190,15 @@ QPushButton#toolButtonDownload::menu-indicator { } #mainPanel[uitheme=theme-dark] QPushButton#toolButtonMinimize:hover, - #mainPanel[uitheme=theme-dark] QPushButton#toolButtonMaximize:hover + #mainPanel[uitheme=theme-dark] QPushButton#toolButtonMaximize:hover, + #mainPanel[uitheme=theme-dark] QPushButton#toolButtonDownload:hover { background-color: #555; } #mainPanel[uitheme=theme-dark] QPushButton#toolButtonMinimize:pressed, - #mainPanel[uitheme=theme-dark] QPushButton#toolButtonMaximize:pressed + #mainPanel[uitheme=theme-dark] QPushButton#toolButtonMaximize:pressed, + #mainPanel[uitheme=theme-dark] QPushButton#toolButtonDownload:pressed { background-color: #606060; } @@ -252,7 +231,8 @@ QPushButton#toolButtonDownload::menu-indicator { } #mainPanel[uitheme=theme-contrast-dark] QPushButton#toolButtonMinimize:hover, - #mainPanel[uitheme=theme-contrast-dark] QPushButton#toolButtonMaximize:hover + #mainPanel[uitheme=theme-contrast-dark] QPushButton#toolButtonMaximize:hover, + #mainPanel[uitheme=theme-contrast-dark] QPushButton#toolButtonDownload:hover { background-color: #555; } diff --git a/win-linux/res/styles/styles@1.25x.qss b/win-linux/res/styles/styles@1.25x.qss index 7e97bb6a2..a50f718a1 100644 --- a/win-linux/res/styles/styles@1.25x.qss +++ b/win-linux/res/styles/styles@1.25x.qss @@ -34,22 +34,7 @@ QPushButton#toolButtonMain[class=normal], border-bottom-width: 1px; } -QPushButton::menu-indicator { - width: 13px; - height: 13px; - left: -2px; - top: -2px; -} - -QPushButton#toolButtonDownload { - padding: 7px; -} - -QPushButton#toolButtonDownload::menu-indicator { - top: -13px; - left: -5px; -} - +QPushButton#toolButtonDownload {max-width: 50px; width: 50px; max-height: 35px; height: 35px;} /* ToolTip*/ diff --git a/win-linux/res/styles/styles@1.5x.qss b/win-linux/res/styles/styles@1.5x.qss index ac0a9be87..7395675ae 100644 --- a/win-linux/res/styles/styles@1.5x.qss +++ b/win-linux/res/styles/styles@1.5x.qss @@ -35,22 +35,7 @@ QPushButton#toolButtonMain[class=normal], border-bottom-width: 2px; } -QPushButton::menu-indicator { - width: 15px; - height: 15px; - left: -3px; - top: -2px; -} - -QPushButton#toolButtonDownload { - padding: 9px; -} - -QPushButton#toolButtonDownload::menu-indicator { - top: -15px; - left: -6px; -} - +QPushButton#toolButtonDownload {max-width: 60px; width: 60px; max-height: 42px; height: 42px;} /* ToolTip*/ diff --git a/win-linux/res/styles/styles@1.75x.qss b/win-linux/res/styles/styles@1.75x.qss index 194d84978..75caea111 100644 --- a/win-linux/res/styles/styles@1.75x.qss +++ b/win-linux/res/styles/styles@1.75x.qss @@ -35,22 +35,7 @@ QPushButton#toolButtonMain[class=normal], border-bottom-width: 2px; } -QPushButton::menu-indicator { - width: 18px; - height: 18px; - left: -4px; - top: -2px; -} - -QPushButton#toolButtonDownload { - padding: 11px; -} - -QPushButton#toolButtonDownload::menu-indicator { - top: -18px; - left: -7px; -} - +QPushButton#toolButtonDownload {max-width: 70px; width: 70px; max-height: 49px; height: 49px;} /* ToolTip*/ diff --git a/win-linux/res/styles/styles@2.5x.qss b/win-linux/res/styles/styles@2.5x.qss index a3ce564cd..478af4844 100644 --- a/win-linux/res/styles/styles@2.5x.qss +++ b/win-linux/res/styles/styles@2.5x.qss @@ -36,30 +36,7 @@ QPushButton#toolButtonMain[class=normal], border-bottom-width: 3px; } -QPushButton::menu-indicator { - width: 25px; - height: 25px; - left: -5px; - top: -3px; -} - -/*QPushButton[theme=dark]::menu-indicator:disabled {*/ - /*border-image: url(:/res/icons/menu-indicator-dark.png) 0 0 0 20 repeat repeat;*/ -/*}*/ - -/*QPushButton[theme=dark]::menu-indicator:hover {*/ - /*border-image: url(:/res/icons/menu-indicator-dark.png) 0 20 0 0 repeat repeat;*/ -/*}*/ - -QPushButton#toolButtonDownload { - padding: 15px; -} - -QPushButton#toolButtonDownload::menu-indicator { - top: -25px; - left: -10px; -} - +QPushButton#toolButtonDownload {max-width: 100px; width: 100px; max-height: 70px; height: 70px;} /* ToolTip*/ diff --git a/win-linux/res/styles/styles@2x.qss b/win-linux/res/styles/styles@2x.qss index 39534a663..ccfdf15fd 100644 --- a/win-linux/res/styles/styles@2x.qss +++ b/win-linux/res/styles/styles@2x.qss @@ -36,30 +36,7 @@ QPushButton#toolButtonMain[class=normal], border-bottom-width: 2px; } -QPushButton::menu-indicator { - width: 20px; - height: 20px; - left: -4px; - top: -2px; -} - -/*QPushButton[theme=dark]::menu-indicator:disabled {*/ - /*border-image: url(:/res/icons/menu-indicator-dark.png) 0 0 0 20 repeat repeat;*/ -/*}*/ - -/*QPushButton[theme=dark]::menu-indicator:hover {*/ - /*border-image: url(:/res/icons/menu-indicator-dark.png) 0 20 0 0 repeat repeat;*/ -/*}*/ - -QPushButton#toolButtonDownload { - padding: 12px; -} - -QPushButton#toolButtonDownload::menu-indicator { - top: -20px; - left: -8px; -} - +QPushButton#toolButtonDownload {max-width: 80px; width: 80px; max-height: 56px; height: 56px;} /* ToolTip*/ diff --git a/win-linux/res/styles/styles@3.5x.qss b/win-linux/res/styles/styles@3.5x.qss index 10b0fd9f6..94ae90f5e 100644 --- a/win-linux/res/styles/styles@3.5x.qss +++ b/win-linux/res/styles/styles@3.5x.qss @@ -36,30 +36,7 @@ QPushButton#toolButtonMain[class=normal], border-bottom-width: 4px; } -QPushButton::menu-indicator { - width: 35px; - height: 35px; - left: -7px; - top: -4px; -} - -/*QPushButton[theme=dark]::menu-indicator:disabled {*/ - /*border-image: url(:/res/icons/menu-indicator-dark.png) 0 0 0 20 repeat repeat;*/ -/*}*/ - -/*QPushButton[theme=dark]::menu-indicator:hover {*/ - /*border-image: url(:/res/icons/menu-indicator-dark.png) 0 20 0 0 repeat repeat;*/ -/*}*/ - -QPushButton#toolButtonDownload { - padding: 21px; -} - -QPushButton#toolButtonDownload::menu-indicator { - top: -35px; - left: -14px; -} - +QPushButton#toolButtonDownload {max-width: 140px; width: 140px; max-height: 98px; height: 98px;} /* ToolTip*/ diff --git a/win-linux/res/styles/styles@3x.qss b/win-linux/res/styles/styles@3x.qss index 2d327e553..f3d46c9d5 100644 --- a/win-linux/res/styles/styles@3x.qss +++ b/win-linux/res/styles/styles@3x.qss @@ -36,30 +36,7 @@ QPushButton#toolButtonMain[class=normal], border-bottom-width: 3px; } -QPushButton::menu-indicator { - width: 30px; - height: 30px; - left: -6px; - top: -3px; -} - -/*QPushButton[theme=dark]::menu-indicator:disabled {*/ - /*border-image: url(:/res/icons/menu-indicator-dark.png) 0 0 0 20 repeat repeat;*/ -/*}*/ - -/*QPushButton[theme=dark]::menu-indicator:hover {*/ - /*border-image: url(:/res/icons/menu-indicator-dark.png) 0 20 0 0 repeat repeat;*/ -/*}*/ - -QPushButton#toolButtonDownload { - padding: 18px; -} - -QPushButton#toolButtonDownload::menu-indicator { - top: -30px; - left: -12px; -} - +QPushButton#toolButtonDownload {max-width: 120px; width: 120px; max-height: 84px; height: 84px;} /* ToolTip*/ diff --git a/win-linux/res/styles/styles@4.5x.qss b/win-linux/res/styles/styles@4.5x.qss index af13fa45c..a004fbeb5 100644 --- a/win-linux/res/styles/styles@4.5x.qss +++ b/win-linux/res/styles/styles@4.5x.qss @@ -36,30 +36,7 @@ QPushButton#toolButtonMain[class=normal], border-bottom-width: 5px; } -QPushButton::menu-indicator { - width: 45px; - height: 45px; - left: -9px; - top: -5px; -} - -/*QPushButton[theme=dark]::menu-indicator:disabled {*/ - /*border-image: url(:/res/icons/menu-indicator-dark.png) 0 0 0 20 repeat repeat;*/ -/*}*/ - -/*QPushButton[theme=dark]::menu-indicator:hover {*/ - /*border-image: url(:/res/icons/menu-indicator-dark.png) 0 20 0 0 repeat repeat;*/ -/*}*/ - -QPushButton#toolButtonDownload { - padding: 27px; -} - -QPushButton#toolButtonDownload::menu-indicator { - top: -45px; - left: -18px; -} - +QPushButton#toolButtonDownload {max-width: 180px; width: 180px; max-height: 126px; height: 126px;} /* ToolTip*/ diff --git a/win-linux/res/styles/styles@4x.qss b/win-linux/res/styles/styles@4x.qss index df2e0ce76..1a5a938ba 100644 --- a/win-linux/res/styles/styles@4x.qss +++ b/win-linux/res/styles/styles@4x.qss @@ -36,30 +36,7 @@ QPushButton#toolButtonMain[class=normal], border-bottom-width: 4px; } -QPushButton::menu-indicator { - width: 40px; - height: 40px; - left: -8px; - top: -4px; -} - -/*QPushButton[theme=dark]::menu-indicator:disabled {*/ - /*border-image: url(:/res/icons/menu-indicator-dark.png) 0 0 0 20 repeat repeat;*/ -/*}*/ - -/*QPushButton[theme=dark]::menu-indicator:hover {*/ - /*border-image: url(:/res/icons/menu-indicator-dark.png) 0 20 0 0 repeat repeat;*/ -/*}*/ - -QPushButton#toolButtonDownload { - padding: 24px; -} - -QPushButton#toolButtonDownload::menu-indicator { - top: -40px; - left: -16px; -} - +QPushButton#toolButtonDownload {max-width: 160px; width: 160px; max-height: 112px; height: 112px;} /* ToolTip*/ diff --git a/win-linux/res/styles/styles@5x.qss b/win-linux/res/styles/styles@5x.qss index 8ba4fa934..c92019bd9 100644 --- a/win-linux/res/styles/styles@5x.qss +++ b/win-linux/res/styles/styles@5x.qss @@ -36,30 +36,7 @@ QPushButton#toolButtonMain[class=normal], border-bottom-width: 5px; } -QPushButton::menu-indicator { - width: 50px; - height: 50px; - left: -10px; - top: -5px; -} - -/*QPushButton[theme=dark]::menu-indicator:disabled {*/ - /*border-image: url(:/res/icons/menu-indicator-dark.png) 0 0 0 20 repeat repeat;*/ -/*}*/ - -/*QPushButton[theme=dark]::menu-indicator:hover {*/ - /*border-image: url(:/res/icons/menu-indicator-dark.png) 0 20 0 0 repeat repeat;*/ -/*}*/ - -QPushButton#toolButtonDownload { - padding: 30px; -} - -QPushButton#toolButtonDownload::menu-indicator { - top: -50px; - left: -20px; -} - +QPushButton#toolButtonDownload {max-width: 200px; width: 200px; max-height: 140px; height: 140px;} /* ToolTip*/ diff --git a/win-linux/resources.qrc b/win-linux/resources.qrc index d248b5706..0b62953b0 100644 --- a/win-linux/resources.qrc +++ b/win-linux/resources.qrc @@ -7,8 +7,7 @@ res/icons/message_info.svg res/icons/message_confirm.svg res/icons/message_warn.svg - res/icons/downloading.gif - res/icons/downloading_2x.gif + res/icons/downloading.svg res/icons/close.svg res/icons/close_light.svg res/icons/minimize.svg diff --git a/win-linux/src/components/cdownloadwidget.cpp b/win-linux/src/components/cdownloadwidget.cpp index 7b066a73f..cab63871c 100644 --- a/win-linux/src/components/cdownloadwidget.cpp +++ b/win-linux/src/components/cdownloadwidget.cpp @@ -96,15 +96,13 @@ CDownloadWidget::CDownloadWidget(QWidget *parent) }); m_pToolButton->setObjectName("toolButtonDownload"); - m_pToolButton->setVisible(false, false); - - QPair _icon_download{":/res/icons/downloading.gif", ":/res/icons/downloading_2x.gif"}; - m_pToolButton->setAnimatedIcon( _icon_download ); m_pToolButton->setProperty("act", "tool"); m_pToolButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); + m_pToolButton->setVisible(false); connect(m_pToolButton, &QPushButton::clicked, this, [=]() { show(); }); + m_pToolButton->setAnimatedIcon(":/downloading.svg"); QSpacerItem *spacer = new QSpacerItem(5, 5, QSizePolicy::Fixed, QSizePolicy::Expanding); lut->addSpacerItem(spacer); } diff --git a/win-linux/src/components/cpushbutton.cpp b/win-linux/src/components/cpushbutton.cpp index ba69acaee..7ffa93c95 100644 --- a/win-linux/src/components/cpushbutton.cpp +++ b/win-linux/src/components/cpushbutton.cpp @@ -31,179 +31,66 @@ */ #include "components/cpushbutton.h" +#include +#include -#include -#include -#include -#include +#define ANIMATION_MS 2500 -#include -CPushButton::CPushButton(double scaling) - : CPushButton(Q_NULLPTR, scaling) -{} - -CPushButton::CPushButton(QWidget *parent, double scaling) +CPushButton::CPushButton(QWidget *parent) : QPushButton(parent) - , _movie(Q_NULLPTR) - , _dpi_ratio(scaling) -{ - setIconSize(QSize(16,16) * _dpi_ratio); - - int START_OPACITY = 0; - - QGraphicsOpacityEffect * effect = new QGraphicsOpacityEffect(this); - effect->setOpacity(START_OPACITY); - setGraphicsEffect(effect); - - _animation = new QPropertyAnimation(effect, "opacity"); - _animation->setDuration(500); - _animation->setStartValue(START_OPACITY); - _animation->setEndValue(1.0); - - connect(_animation, SIGNAL(finished()), this, SLOT(onAnimationFinished())); -} +{} CPushButton::~CPushButton() { - if (_movie) { - disconnect(_movie, SIGNAL(finished()), _movie, SLOT(start())); - _movie->stop(); - - delete _movie, _movie = NULL; - } - - if ( _animation ) { - disconnect(_animation, SIGNAL(finished())); - delete _animation, _animation = NULL; - } -} - -void CPushButton::setAnimatedIcon(QPair& icon, bool autostart) -{ - _icon = QPair(icon); - applyAnimatedIcon(_dpi_ratio > 1 ? _icon.first : _icon.second); - - if ( autostart && _movie->frameCount() > 0 ) { - _movie->start(); + if (m_animation) { + m_animation->stop(); + m_animation->disconnect(); + delete m_animation, m_animation = nullptr; } } -void CPushButton::applyAnimatedIcon(const QString& f) +void CPushButton::setAnimatedIcon(const QString &path) { - if ( !f.isEmpty() ) { - if (Q_NULLPTR == _movie) { - _movie = new QMovie(f); - connect(_movie, SIGNAL(frameChanged(int)), this, SLOT(setButtonIcon(int))); - } else { - disconnect(_movie, SIGNAL(finished()), _movie, SLOT(start())); - - _movie->stop(); - _movie->setFileName(f); - } - - if (_movie->loopCount() != -1) { - connect(_movie, SIGNAL(finished()), _movie, SLOT(start())); - } + if (m_animation) { + m_animation->stop(); + m_animation->disconnect(); + delete m_animation, m_animation = nullptr; } -} - -void CPushButton::setButtonIcon(int frame) -{ - Q_UNUSED(frame) - - repaint(); -} - -void CPushButton::startIconAnimation(bool start) -{ - if (_movie) { - if (start) { - if (_movie->state() != QMovie::Running) - _movie->start(); - } else { - if (_movie->state() == QMovie::Running) - _movie->jumpToFrame(0); - _movie->stop(); - } - } -} - -void CPushButton::setEnabled(bool enable) -{ - startIconAnimation(enable); - - QPushButton::setEnabled(enable); -} - -void CPushButton::setVisible(bool visible, bool animation) -{ - animation ? setVisible(visible) : QPushButton::setVisible(visible); -} - -void CPushButton::setVisible(bool visible) -{ - if (visible != QPushButton::isVisible()) { - if (visible) QPushButton::setVisible(visible); - - startIconAnimation(visible); - - if( _animation->state() == QAbstractAnimation::Running ) - _animation->pause(); - - _animation->setDirection(visible ? QAbstractAnimation::Forward : QAbstractAnimation::Backward); - _animation->start(); - -// if (!visible) QPushButton::setVisible(visible); - } -} - -void CPushButton::paintEvent(QPaintEvent * e) -{ - Q_UNUSED(e) - -// QPushButton::paintEvent(e); -// return; - - QStylePainter p(this); - p.setOpacity(255); - - QStyleOptionButton option; - initStyleOption(&option); - - option.icon = QIcon(); - p.drawControl(QStyle::CE_PushButton, option); - - p.drawItemPixmap( QRect(QPoint(0, int(5*_dpi_ratio)), option.iconSize), - Qt::AlignLeft | Qt::AlignVCenter, _movie->currentPixmap() ); -} - -void CPushButton::onAnimationFinished() -{ - if (_animation->direction() == QAbstractAnimation::Backward) { - QPushButton::setVisible(false); - } -} - -void CPushButton::setScaling(double s) -{ - _dpi_ratio = s; - - setIconSize(QSize(16, 16) * _dpi_ratio); - bool autostart = _movie->state() == QMovie::Running; - applyAnimatedIcon(_dpi_ratio > 1 ? _icon.second : _icon.first); - - if ( !_fixed_size.isEmpty() ) - QPushButton::setFixedSize( _fixed_size * _dpi_ratio ); - if ( autostart ) - _movie->start(); + if (m_renderer) + delete m_renderer, m_renderer = nullptr; + m_renderer = new QSvgRenderer(path, this); + + m_animation = new QVariantAnimation(this); + m_animation->setStartValue(0.0); + m_animation->setKeyValueAt(0.5, 1.0); + m_animation->setEndValue(0.0); + m_animation->setDuration(ANIMATION_MS); + m_animation->setLoopCount(-1); + m_animation->setEasingCurve(QEasingCurve::Linear); + connect(m_animation, &QVariantAnimation::valueChanged, this, [=](const QVariant &val) { + double opacity = round(val.toReal() * 100) / 100; + if (qRound(opacity * 100) % 2 == 0) // frequency limitation + applyAnimatedIcon(opacity); + }); + m_animation->start(QAbstractAnimation::KeepWhenStopped); } -void CPushButton::setFixedSize(const QSize& s) +void CPushButton::applyAnimatedIcon(double opacity) { - if ( !s.isEmpty() ) { - _fixed_size = QSize(s); - QPushButton::setFixedSize( _fixed_size * _dpi_ratio ); + if (m_renderer && m_renderer->isValid()) { + QSize icon_size = iconSize(); + QImage img(icon_size, QImage::Format_ARGB32); + img.fill(Qt::transparent); + QPixmap pixmap = QPixmap::fromImage(img, Qt::NoFormatConversion); + + QPainter painter(&pixmap); + painter.setCompositionMode(QPainter::CompositionMode_SourceOver); + painter.setRenderHint(QPainter::Antialiasing); + painter.setOpacity(opacity); + m_renderer->render(&painter, QRect(QPoint(0,0), icon_size)); + painter.end(); + setIcon(QIcon(pixmap)); } } diff --git a/win-linux/src/components/cpushbutton.h b/win-linux/src/components/cpushbutton.h index 7f9d689d2..b02ec2c12 100644 --- a/win-linux/src/components/cpushbutton.h +++ b/win-linux/src/components/cpushbutton.h @@ -34,43 +34,21 @@ #define CPUSHBUTTON_H #include -#include +#include +#include class CPushButton : public QPushButton { Q_OBJECT - public: - explicit CPushButton(QWidget *parent, double scaling); - CPushButton(double scaling = 1); + explicit CPushButton(QWidget *parent = nullptr); ~CPushButton(); - - void setAnimatedIcon(QPair&, bool autostart = false); - void startIconAnimation(bool); - - void setEnabled(bool); - void setVisible(bool visible, bool animation); - void setScaling(double); - void setFixedSize(const QSize&); - -protected: - void paintEvent(QPaintEvent *); + void setAnimatedIcon(const QString &path); private: - QMovie * _movie; - QPropertyAnimation * _animation; - QPair _icon; - QSize _fixed_size; - double _dpi_ratio; - - void applyAnimatedIcon(const QString&); - -signals: - -public slots: - void setButtonIcon(int); - void setVisible(bool visible); - void onAnimationFinished(); + void applyAnimatedIcon(double); + QVariantAnimation * m_animation = nullptr; + QSvgRenderer *m_renderer = nullptr; }; #endif // CPUSHBUTTON_H From eb98fe995b66e31eb8ff135c410c2ab6164d8d31 Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Thu, 22 Jun 2023 22:40:44 +0300 Subject: [PATCH 069/298] [macos] fix bug 63138 --- .../B/Resources/ru.lproj/Sparkle.strings | Bin 7668 -> 7830 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/macos/Vendor/Sparkle/sparkle.app/Contents/Frameworks/Sparkle.framework/Versions/B/Resources/ru.lproj/Sparkle.strings b/macos/Vendor/Sparkle/sparkle.app/Contents/Frameworks/Sparkle.framework/Versions/B/Resources/ru.lproj/Sparkle.strings index 28b831d838098c32992cd23ed15fdb871587a8b1..77743bb540fa5fc7deca3e5cab962a2430332523 100644 GIT binary patch delta 171 zcmW-ZJqp5L5JacgDkrcJmd`GYAP7oGFjjU}+6Poj6D21EP^%ZYE9b&OGb?Rxh3#x(M{})gjW40C1!au=020s~l>h($ delta 7 OcmbPc`^9?07g+!gR0G5S From 9fce29df3a290c5f45066cb5b2689cd59c82e6c4 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Sun, 25 Jun 2023 09:22:01 +0300 Subject: [PATCH 070/298] [linux] fix double click after undocking a tab --- win-linux/src/windows/platform_linux/cwindowplatform.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/win-linux/src/windows/platform_linux/cwindowplatform.cpp b/win-linux/src/windows/platform_linux/cwindowplatform.cpp index 9cbf33f25..380f38cb6 100644 --- a/win-linux/src/windows/platform_linux/cwindowplatform.cpp +++ b/win-linux/src/windows/platform_linux/cwindowplatform.cpp @@ -167,10 +167,10 @@ void CWindowPlatform::mouseReleaseEvent(QMouseEvent *e) CX11Decoration::dispatchMouseUp(e); } -void CWindowPlatform::mouseDoubleClickEvent(QMouseEvent *) +void CWindowPlatform::mouseDoubleClickEvent(QMouseEvent *me) { if (m_boxTitleBtns) { - if (m_boxTitleBtns->underMouse()) + if (m_boxTitleBtns->geometry().contains(me->pos())) onMaximizeEvent(); } } From dd0acd27c77d08f8c5bbdcf154f092ca655b6ec2 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Sun, 25 Jun 2023 09:23:19 +0300 Subject: [PATCH 071/298] [win-linux] refactoring csvgpushbutton.cpp --- win-linux/src/components/csvgpushbutton.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/win-linux/src/components/csvgpushbutton.cpp b/win-linux/src/components/csvgpushbutton.cpp index 5ec257090..bc6529c41 100644 --- a/win-linux/src/components/csvgpushbutton.cpp +++ b/win-linux/src/components/csvgpushbutton.cpp @@ -31,11 +31,12 @@ */ #include "components/csvgpushbutton.h" - -#include +#include +#include #include #include -#include +#include + CSVGPushButton::CSVGPushButton(QWidget * parent) : QPushButton(parent) From d88aafc1b617530413970be60e28381dc0a958af Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Sun, 25 Jun 2023 09:48:12 +0300 Subject: [PATCH 072/298] [win-linux] remove duplicates --- win-linux/src/cascapplicationmanagerwrapper.cpp | 5 ----- 1 file changed, 5 deletions(-) diff --git a/win-linux/src/cascapplicationmanagerwrapper.cpp b/win-linux/src/cascapplicationmanagerwrapper.cpp index 8d516e69c..934386aaf 100644 --- a/win-linux/src/cascapplicationmanagerwrapper.cpp +++ b/win-linux/src/cascapplicationmanagerwrapper.cpp @@ -1035,11 +1035,6 @@ void CAscApplicationManagerWrapper::initializeApp() else if ( InputArgs::contains(L"--custom-title-bar") || !reg_user.contains("titlebar") ) reg_user.setValue("titlebar", "custom"); - else - if ( InputArgs::contains(L"--geometry=default") ) { - reg_user.remove("maximized"); - reg_user.remove("position"); - } // read installation time and clean cash folders if expired if ( reg_system.contains("timestamp") ) { From abd42f4b0894aba0c41a9733d7ac191e804f2fe8 Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Sun, 25 Jun 2023 12:14:09 +0300 Subject: [PATCH 073/298] [themes] refactoring --- win-linux/res/styles/theme-classic-light.json | 30 ++++++++-------- win-linux/res/styles/theme-contrast-dark.json | 34 +++++++++---------- win-linux/res/styles/theme-dark.json | 34 +++++++++---------- win-linux/res/styles/theme-light.json | 30 ++++++++-------- win-linux/src/cthemes.cpp | 28 +++++++-------- 5 files changed, 78 insertions(+), 78 deletions(-) diff --git a/win-linux/res/styles/theme-classic-light.json b/win-linux/res/styles/theme-classic-light.json index 93c928fdc..1694a7202 100644 --- a/win-linux/res/styles/theme-classic-light.json +++ b/win-linux/res/styles/theme-classic-light.json @@ -2,24 +2,24 @@ "id": "theme-classic-light", "type": "light", "values": { - "brand_word": "#446995", - "brand_slide": "#aa5252", - "brand_cell": "#40865c", + "brand-word": "#446995", + "brand-slide": "#aa5252", + "brand-cell": "#40865c", - "window_background": "#f1f1f1", - "window_border": "#888", + "window-background": "#f1f1f1", + "window-border": "#888", - "text_normal": "#444", - "text_normal_pressed": "#fff", + "text-normal": "#444", + "text-normal-pressed": "#fff", - "tab_active_background": "#fff", - "tab_simple_active_background": "#fff", - "tab_simple_active_text": "#444", - "tab_default_active_background": "#fff", - "tab_default_active_text": "#444", - "tab_divider": "#a5a5a5", + "tab-active-background": "#fff", + "tab-simple-active-background": "#fff", + "tab-simple-active-text": "#444", + "tab-default-active-background": "#fff", + "tab-default-active-text": "#444", + "tab-divider": "#a5a5a5", - "button_normal_opacity": "rgba(255,255,255,255)", - "logo_type": "dark" + "button-normal-opacity": "rgba(255,255,255,255)", + "logo-type": "dark" } } diff --git a/win-linux/res/styles/theme-contrast-dark.json b/win-linux/res/styles/theme-contrast-dark.json index 078256090..d92b454c0 100644 --- a/win-linux/res/styles/theme-contrast-dark.json +++ b/win-linux/res/styles/theme-contrast-dark.json @@ -2,27 +2,27 @@ "id": "theme-contrast-dark", "type": "dark", "values": { - "brand_word": "#1e1e1e", - "brand_slide": "#1e1e1e", - "brand_cell": "#1e1e1e", + "brand-word": "#1e1e1e", + "brand-slide": "#1e1e1e", + "brand-cell": "#1e1e1e", - "window_background": "#2a2a2a", - "window_border": "#616161", + "window-background": "#2a2a2a", + "window-border": "#616161", - "text_normal": "#e8e8e8", - "text_normal_pressed": "#e8e8e8", + "text-normal": "#e8e8e8", + "text-normal-pressed": "#e8e8e8", - "tool_button_hover_background": "#424242", - "tool_button_pressed_background": "#666666", + "tool-button-hover-background": "#424242", + "tool-button-pressed-background": "#666666", - "tab_active_background": "#121212", - "tab_simple_active_background": "#fff", - "tab_simple_active_text": "#444", - "tab_default_active_background": "#121212", - "tab_default_active_text": "#fff", - "tab_divider": "#414141", + "tab-active-background": "#121212", + "tab-simple-active-background": "#fff", + "tab-simple-active-text": "#444", + "tab-default-active-background": "#121212", + "tab-default-active-text": "#fff", + "tab-divider": "#414141", - "button_normal_opacity": "rgba(255,255,255,200)", - "logo_type": "light" + "button-normal-opacity": "rgba(255,255,255,200)", + "logo-type": "light" } } diff --git a/win-linux/res/styles/theme-dark.json b/win-linux/res/styles/theme-dark.json index 4643b34dc..02ef9aa98 100644 --- a/win-linux/res/styles/theme-dark.json +++ b/win-linux/res/styles/theme-dark.json @@ -2,27 +2,27 @@ "id": "theme-dark", "type": "dark", "values": { - "brand_word": "#2a2a2a", - "brand_slide": "#2a2a2a", - "brand_cell": "#2a2a2a", + "brand-word": "#2a2a2a", + "brand-slide": "#2a2a2a", + "brand-cell": "#2a2a2a", - "window_background": "#404040", - "window_border": "#2a2a2a", + "window-background": "#404040", + "window-border": "#2a2a2a", - "text_normal": "#d9d9d9", - "text_normal_pressed": "#d9d9d9", + "text-normal": "#d9d9d9", + "text-normal-pressed": "#d9d9d9", - "tool_button_hover_background": "#555", - "tool_button_pressed_background": "#606060", + "tool-button-hover-background": "#555", + "tool-button-pressed-background": "#606060", - "tab_active_background": "#333", - "tab_simple_active_background": "#fff", - "tab_simple_active_text": "#444", - "tab_default_active_background": "#333", - "tab_default_active_text": "#fff", - "tab_divider": "#505050", + "tab-active-background": "#333", + "tab-simple-active-background": "#fff", + "tab-simple-active-text": "#444", + "tab-default-active-background": "#333", + "tab-default-active-text": "#fff", + "tab-divider": "#505050", - "button_normal_opacity": "rgba(255,255,255,200)", - "logo_type": "light" + "button-normal-opacity": "rgba(255,255,255,200)", + "logo-type": "light" } } diff --git a/win-linux/res/styles/theme-light.json b/win-linux/res/styles/theme-light.json index 78fa52783..dc263423a 100644 --- a/win-linux/res/styles/theme-light.json +++ b/win-linux/res/styles/theme-light.json @@ -2,24 +2,24 @@ "id": "theme-light", "type": "light", "values": { - "brand_word": "#446995", - "brand_slide": "#aa5252", - "brand_cell": "#40865c", + "brand-word": "#446995", + "brand-slide": "#aa5252", + "brand-cell": "#40865c", - "window_background": "#f1f1f1", - "window_border": "#888", + "window-background": "#f1f1f1", + "window-border": "#888", - "text_normal": "#444", - "text_normal_pressed": "#fff", + "text-normal": "#444", + "text-normal-pressed": "#fff", - "tab_active_background": "#fff", - "tab_simple_active_background": "#fff", - "tab_simple_active_text": "#444", - "tab_default_active_background": "#fff", - "tab_default_active_text": "#444", - "tab_divider": "#a5a5a5", + "tab-active-background": "#fff", + "tab-simple-active-background": "#fff", + "tab-simple-active-text": "#444", + "tab-default-active-background": "#fff", + "tab-default-active-text": "#444", + "tab-divider": "#a5a5a5", - "button_normal_opacity": "rgba(255,255,255,255)", - "logo_type": "dark" + "button-normal-opacity": "rgba(255,255,255,255)", + "logo-type": "dark" } } diff --git a/win-linux/src/cthemes.cpp b/win-linux/src/cthemes.cpp index 5da07a04b..b0e3ca3b6 100644 --- a/win-linux/src/cthemes.cpp +++ b/win-linux/src/cthemes.cpp @@ -34,24 +34,24 @@ namespace NSTheme { }; static const std::map map_names = { - {CTheme::ColorRole::ecrTabWordActive, "brand_word"}, - {CTheme::ColorRole::ecrTabSlideActive, "brand_slide"}, - {CTheme::ColorRole::ecrTabCellActive, "brand_cell"}, + {CTheme::ColorRole::ecrTabWordActive, "brand-word"}, + {CTheme::ColorRole::ecrTabSlideActive, "brand-slide"}, + {CTheme::ColorRole::ecrTabCellActive, "brand-cell"}, - {CTheme::ColorRole::ecrWindowBackground, "window_background"}, - {CTheme::ColorRole::ecrWindowBorder, "window_border"}, + {CTheme::ColorRole::ecrWindowBackground, "window-background"}, + {CTheme::ColorRole::ecrWindowBorder, "window-border"}, - {CTheme::ColorRole::ecrTextNormal, "text_normal"}, - {CTheme::ColorRole::ecrTextPressed, "text_normal_pressed"}, + {CTheme::ColorRole::ecrTextNormal, "text-normal"}, + {CTheme::ColorRole::ecrTextPressed, "text-normal-pressed"}, - // { "tab_active_background": "#fff", - {CTheme::ColorRole::ecrTabSimpleActiveBackground, "tab_simple_active_background"}, - {CTheme::ColorRole::ecrTabSimpleActiveText, "tab_simple_active_text"}, - {CTheme::ColorRole::ecrTabDefaultActiveBackground, "tab_default_active_background"}, - {CTheme::ColorRole::ecrTabDefaultActiveText, "tab_default_active_text"}, - // { "tab_divider": "#a5a5a5", + // { "tab-active-background": "#fff", + {CTheme::ColorRole::ecrTabSimpleActiveBackground, "tab-simple-active-background"}, + {CTheme::ColorRole::ecrTabSimpleActiveText, "tab-simple-active-text"}, + {CTheme::ColorRole::ecrTabDefaultActiveBackground, "tab-default-active-background"}, + {CTheme::ColorRole::ecrTabDefaultActiveText, "tab-default-active-text"}, + // { "tab-divider": "#a5a5a5", - {CTheme::ColorRole::ecrButtonNormalOpacity, "button_normal_opacity"}, + {CTheme::ColorRole::ecrButtonNormalOpacity, "button-normal-opacity"}, {CTheme::ColorRole::ecrLogoColor, "logo"} }; } From ddfc4b08dfebbedfe75866c1f84adb46b03d025a Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Sun, 25 Jun 2023 12:17:12 +0300 Subject: [PATCH 074/298] [themes] added support for local ui themes --- common/loginpage/src/panelsettings.js | 69 ++++++++++++++--- win-linux/src/cthemes.cpp | 106 +++++++++++++++++++++++++- win-linux/src/utils.cpp | 4 + win-linux/src/utils.h | 1 + 4 files changed, 168 insertions(+), 12 deletions(-) diff --git a/common/loginpage/src/panelsettings.js b/common/loginpage/src/panelsettings.js index b7461d0dd..cb01f1230 100644 --- a/common/loginpage/src/panelsettings.js +++ b/common/loginpage/src/panelsettings.js @@ -66,9 +66,41 @@ }, } - const t = window.RendererProcessVariable.theme; - const uitheme = { id: t.id, type: t.type } + const nativevars = window.RendererProcessVariable; + { + const create_colors_css = function (id, colors) { + if ( !!colors && !!id ) { + let _css_array = [':root .', id, '{']; + for (var c in colors) { + _css_array.push('--', c, ':', colors[c], ';'); + } + _css_array.push('}'); + return _css_array.join(''); + } + } + + const write_theme_css = function (css) { + if ( !!css ) { + let style = document.createElement('style'); + style.type = 'text/css'; + style.innerHTML = css; + document.getElementsByTagName('head')[0].appendChild(style); + } + } + + if ( nativevars.localthemes ) { + for ( const t of nativevars.localthemes ) { + const _css = create_colors_css(t.id, t.colors); + if ( _css ) { + write_theme_css(_css); + themes_map[t.id] = {text: t.name, type: t.type, l10n: t.l10n}; + } + } + } + } + + const uitheme = { id: nativevars.theme.id, type: nativevars.theme.type } uitheme.set_id = function (id) { if ( id == 'theme-system' ) this.adapt_to_system_theme(); @@ -101,7 +133,6 @@ uitheme.get_default_theme_for_type = type => type == THEME_TYPE_DARK ? THEME_ID_DEFAULT_DARK : THEME_ID_DEFAULT_LIGHT; uitheme.get_system_theme_type = () => { - const nativevars = window.RendererProcessVariable; if ( nativevars.theme && !!nativevars.theme.system ) { return nativevars.theme.system !== 'disabled' ? nativevars.theme.system : THEME_TYPE_LIGHT; } else { @@ -459,22 +490,32 @@ {'theme-dark': utils.Lang.settOptThemeDark}, {'theme-contrast-dark': utils.Lang.settOptThemeContrastDark}]; - const nativevars = window.RendererProcessVariable; if ( nativevars.theme && nativevars.theme.system == 'disabled' ) _themes.shift(); - const _combo = $('#opts-ui-theme select', $panel); + const _combo = $('#opts-ui-theme select', $panel).empty(); _themes.forEach(item => { const entries = Object.entries(item)[0]; _combo.append(``); }); + if ( nativevars.localthemes ) { + for ( const t of nativevars.localthemes ) { + const _theme_title = t.l10n[utils.Lang.id] || t.name; + _combo.append(``); + } + } - ($optsUITheme = _combo) - .val(opts.uitheme) - .selectpicker().on('change', e => { - $btnApply.isdisabled() && $btnApply.disable(false);}) - .parents('.settings-field').show(); + if ( !$optsUITheme ) { + ($optsUITheme = _combo) + .val(opts.uitheme) + .selectpicker().on('change', e => { + $btnApply.isdisabled() && $btnApply.disable(false);}) + .parents('.settings-field').show(); + } else { + $optsUITheme.val(opts.uitheme) + .selectpicker('refresh'); + } } _apply_theme(!!opts.uitheme ? opts.uitheme : 'theme-classic-light'); @@ -595,6 +636,14 @@ $('option[value=silent]', this.view.$panel).attr('data-subtext', utils.Lang.settOptDescAUpdateSilent); $('option[value=ask]', this.view.$panel).attr('data-subtext', utils.Lang.settOptDescAUpdateAsk); $('option[value=disabled]', this.view.$panel).attr('data-subtext', utils.Lang.settOptDescDisabled); + + // for ( let k of Object.keys(themes_map) ) { + // const t = themes_map[k] + // if ( t.l10n ) { + // const _new_title = t.l10n[nl] || t.l10n[nl.substring(0,2)] || t.name; + // $(`option[value=${k}]`, $optsUITheme).text(_new_title); + // } + // } }; return { diff --git a/win-linux/src/cthemes.cpp b/win-linux/src/cthemes.cpp index b0e3ca3b6..0ed5f15c5 100644 --- a/win-linux/src/cthemes.cpp +++ b/win-linux/src/cthemes.cpp @@ -12,10 +12,13 @@ #include #include #include +#include #include #include #include #include +#include +#include #define QSTRING_FROM_WSTR(s) QString::fromStdWString(s) #define REGISTRY_THEME_KEY "UITheme" @@ -54,6 +57,26 @@ namespace NSTheme { {CTheme::ColorRole::ecrButtonNormalOpacity, "button-normal-opacity"}, {CTheme::ColorRole::ecrLogoColor, "logo"} }; + + static const std::map map_alias_names = { + {"brand-word", "toolbar-header-document"}, + {"brand-slide", "toolbar-header-presentation"}, + {"brand-cell", "toolbar-header-spreadsheet"}, + + {"window-background", "background-toolbar"}, +// {CTheme::ColorRole::ecrWindowBorder, "window-border"}, + +// {CTheme::ColorRole::ecrTextNormal, "text-normal"}, +// {CTheme::ColorRole::ecrTextPressed, "text-normal-pressed"}, + +// {CTheme::ColorRole::ecrTabSimpleActiveBackground, "tab-simple-active-background"}, +// {CTheme::ColorRole::ecrTabSimpleActiveText, "tab-simple-active-text"}, +// {CTheme::ColorRole::ecrTabDefaultActiveBackground, "tab-default-active-background"}, +// {CTheme::ColorRole::ecrTabDefaultActiveText, "tab-default-active-text"}, + +// {CTheme::ColorRole::ecrButtonNormalOpacity, "button-normal-opacity"}, +// {CTheme::ColorRole::ecrLogoColor, "logo"} + }; } /* @@ -67,16 +90,45 @@ class CTheme::CThemePrivate { id = obj.value("id").toString().toStdWString(); type = obj.value("type").toString() == NSTheme::theme_type_dark ? NSTheme::ThemeType::ttDark : NSTheme::ThemeType::ttLight; - jsonValues = obj.value("values").toObject(); + if ( obj.contains("colors") ) { + QJsonObject colorValues = obj.value("colors").toObject(); + + const CTheme * default_theme = type == NSTheme::ThemeType::ttDark ? defdark : deflight; + jsonValues = QJsonObject(default_theme->m_priv->jsonValues); + + for ( const auto &color_name : NSTheme::map_names ) { + if ( colorValues.contains(color_name.second) ) { + jsonValues[color_name.second] = colorValues.value(color_name.second); + } else { + const auto it = NSTheme::map_alias_names.find(color_name.second); + if ( it != NSTheme::map_alias_names.end() && + colorValues.contains(it->second) ) + { + jsonValues[color_name.second] = colorValues.value(it->second); + } + } + } + + } else { + jsonValues = obj.value("values").toObject(); + } + is_system = false; } + auto setDefaultThemes(const CTheme * const l, const CTheme * const d) -> void { + defdark = d; + deflight = l; + } + std::wstring id; std::wstring wstype; NSTheme::ThemeType type; bool is_system{false}; QJsonObject jsonValues; + const CTheme * defdark = nullptr, + * deflight = nullptr; }; /* @@ -135,6 +187,8 @@ class CThemes::CThemesPrivate { current = new CTheme(rc_themes.at(is_system_theme_dark ? THEME_DEFAULT_DARK_ID : THEME_DEFAULT_LIGHT_ID)); current->m_priv->is_system = true; } else current = new CTheme(rc_themes.at(user_theme)); + + current->m_priv->setDefaultThemes(getDefault(NSTheme::ThemeType::ttDark), getDefault(NSTheme::ThemeType::ttLight)); } ~CThemesPrivate() @@ -150,6 +204,9 @@ class CThemes::CThemesPrivate { if ( id != THEME_ID_SYSTEM ) { if ( rc_themes.find(id) != rc_themes.end() ) { return current->fromFile(rc_themes.at(id)); + } else + if ( local_themes.find(id) != local_themes.end() ) { + return current->fromJson(local_themes.at(id)); } } else { QString visual_theme_id = is_system_theme_dark ? THEME_DEFAULT_DARK_ID : THEME_DEFAULT_LIGHT_ID; @@ -165,7 +222,7 @@ class CThemes::CThemesPrivate { return false; } - auto getDefault(NSTheme::ThemeType type) -> const CTheme * + auto getDefault(NSTheme::ThemeType type) -> const CTheme * const { if ( type == NSTheme::ThemeType::ttDark ) { if ( !dark ) { @@ -184,8 +241,52 @@ class CThemes::CThemesPrivate { } } + auto searchLocalThemes() -> void { + QDir directory(qApp->applicationDirPath() + "/uicolorthemes"); + QStringList themes = directory.entryList(QStringList() << "*.json", QDir::Files); + + QFile file; + QJsonParseError je; + QJsonArray json_themes_array; + foreach(QString filename, themes) { + file.setFileName(directory.absoluteFilePath(filename)); + if ( file.open(QIODevice::ReadOnly) ) { + QByteArray data{file.readAll()}; + file.close(); + + QJsonDocument doc = QJsonDocument::fromJson(data, &je); + if ( je.error == QJsonParseError::NoError ) { + QJsonObject objRoot = doc.object(); + + if ( validateTheme(objRoot) ) { + json_themes_array.append(objRoot); + + local_themes[objRoot.value("id").toString()] = data; + parseLocalTheme(doc.object()); + } + } + } + } + + if ( json_themes_array.size() ) { + EditorJSVariables::setVariable("localthemes", json_themes_array); + } + } + + auto parseLocalTheme(const QJsonObject& obj) -> void { + + } + + auto validateTheme(const QJsonObject& root) -> bool { + if ( root.contains("id") ) { + return true; + } + return false; + } + CThemes & parent; std::map rc_themes; + std::map local_themes; bool is_system_theme_dark = false; CTheme * current = nullptr; @@ -319,6 +420,7 @@ auto CTheme::isSystem() const -> bool CThemes::CThemes() : m_priv(new CThemes::CThemesPrivate(this)) { + m_priv->searchLocalThemes(); } CThemes::~CThemes() diff --git a/win-linux/src/utils.cpp b/win-linux/src/utils.cpp index dfa81c485..ac2d488d7 100644 --- a/win-linux/src/utils.cpp +++ b/win-linux/src/utils.cpp @@ -179,6 +179,10 @@ namespace EditorJSVariables { vars_object[name] = obj; } + auto setVariable(const QString& name, const QJsonArray& array) -> void { + vars_object[name] = array; + } + auto applyVariable(const QString& name, const QJsonObject& obj) -> void { vars_object[name] = obj; apply(); diff --git a/win-linux/src/utils.h b/win-linux/src/utils.h index 48afa714f..2e3266acd 100644 --- a/win-linux/src/utils.h +++ b/win-linux/src/utils.h @@ -58,6 +58,7 @@ namespace EditorJSVariables { auto init() -> void; auto setVariable(const QString& name, const QString& var) -> void; auto setVariable(const QString& name, const QJsonObject& obj) -> void; + auto setVariable(const QString& name, const QJsonArray& array) -> void; auto applyVariable(const QString& name, const QJsonObject& obj) -> void; auto toWString() -> std::wstring; auto apply() -> void; From 356c5e21f61722560ce2605b2e966b5f16c018df Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Mon, 26 Jun 2023 21:19:43 +0300 Subject: [PATCH 075/298] [win-linux] add update link blocking under certain scenarios --- win-linux/src/cupdatemanager.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/win-linux/src/cupdatemanager.cpp b/win-linux/src/cupdatemanager.cpp index 965ab0400..fd6e9d1c6 100644 --- a/win-linux/src/cupdatemanager.cpp +++ b/win-linux/src/cupdatemanager.cpp @@ -335,6 +335,7 @@ void CUpdateManager::checkUpdates(bool manualCheck) if (m_lock) return; m_lock = true; + AscAppManager::sendCommandTo(0, "updates:link", "lock"); m_manualCheck = manualCheck; destroyStartupTimer(m_pCheckOnStartupTimer); m_packageData->clear(); @@ -496,6 +497,7 @@ void CUpdateManager::unzipIfNeeded() return; m_lock = true; + AscAppManager::sendCommandTo(0, "updates:link", "lock"); if (!sendMessage(MSG_UnzipIfNeeded, QStrToTStr(m_packageData->fileName), QStrToTStr(m_packageData->version))) { m_dialogSchedule->addToSchedule("criticalMsg", QObject::tr("An error occurred while unzip updates: Update Service not found!")); } @@ -672,6 +674,7 @@ void CUpdateManager::showUpdateMessage(QWidget *parent) { break; case WinDlg::DLG_RESULT_SKIP: { skipVersion(); + AscAppManager::sendCommandTo(0, "updates:link", "lock"); AscAppManager::sendCommandTo(0, "updates:checking", "{\"version\":\"no\"}"); break; } @@ -699,6 +702,7 @@ void CUpdateManager::showStartInstallMessage(QWidget *parent) } case WinDlg::DLG_RESULT_SKIP: { skipVersion(); + AscAppManager::sendCommandTo(0, "updates:link", "lock"); AscAppManager::sendCommandTo(0, "updates:checking", "{\"version\":\"no\"}"); break; } From 110b719d8a92b0feb0d0acc32d3a8eeb24672743 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Mon, 26 Jun 2023 21:29:05 +0300 Subject: [PATCH 076/298] [win-linux] fix display of link when download finished --- win-linux/src/cupdatemanager.cpp | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/win-linux/src/cupdatemanager.cpp b/win-linux/src/cupdatemanager.cpp index fd6e9d1c6..17ce6f752 100644 --- a/win-linux/src/cupdatemanager.cpp +++ b/win-linux/src/cupdatemanager.cpp @@ -284,6 +284,7 @@ void CUpdateManager::init() break; case MSG_ShowStartInstallMessage: { + AscAppManager::sendCommandTo(0, "updates:download", "{\"progress\":\"done\"}"); QMetaObject::invokeMethod(m_dialogSchedule, "addToSchedule", Qt::QueuedConnection, Q_ARG(QString, QString("showStartInstallMessage"))); break; } @@ -449,11 +450,12 @@ void CUpdateManager::loadUpdates() if (isSavedPackageValid()) { m_packageData->fileName = m_savedPackageData->fileName; - AscAppManager::sendCommandTo(0, "updates:download", QString("{\"progress\":\"100\"}")); if (m_packageData->fileType == "archive") unzipIfNeeded(); - else + else { + AscAppManager::sendCommandTo(0, "updates:download", "{\"progress\":\"done\"}"); m_dialogSchedule->addToSchedule("showStartInstallMessage"); + } } else if (!m_packageData->packageUrl.empty()) { @@ -467,8 +469,10 @@ void CUpdateManager::installUpdates() { if (m_lock) return; - if (ignoredVersion() != getVersion()) + if (ignoredVersion() != getVersion()) { + AscAppManager::sendCommandTo(0, "updates:download", "{\"progress\":\"done\"}"); m_dialogSchedule->addToSchedule("showStartInstallMessage"); + } } QString CUpdateManager::getVersion() const @@ -487,8 +491,10 @@ void CUpdateManager::onLoadUpdateFinished(const QString &filePath) savePackageData(m_packageData->version, filePath, m_packageData->fileType); if (m_packageData->fileType == "archive") unzipIfNeeded(); - else + else { + AscAppManager::sendCommandTo(0, "updates:download", "{\"progress\":\"done\"}"); m_dialogSchedule->addToSchedule("showStartInstallMessage"); + } } void CUpdateManager::unzipIfNeeded() @@ -498,6 +504,7 @@ void CUpdateManager::unzipIfNeeded() m_lock = true; AscAppManager::sendCommandTo(0, "updates:link", "lock"); + AscAppManager::sendCommandTo(0, "updates:download", QString("{\"progress\":\"100\"}")); // TODO: replace with unpacking message if (!sendMessage(MSG_UnzipIfNeeded, QStrToTStr(m_packageData->fileName), QStrToTStr(m_packageData->version))) { m_dialogSchedule->addToSchedule("criticalMsg", QObject::tr("An error occurred while unzip updates: Update Service not found!")); } @@ -685,7 +692,6 @@ void CUpdateManager::showUpdateMessage(QWidget *parent) { void CUpdateManager::showStartInstallMessage(QWidget *parent) { - AscAppManager::sendCommandTo(0, "updates:download", "{\"progress\":\"done\"}"); int result = WinDlg::showDialog(parent, tr("A new version of %1 is available!").arg(QString(WINDOW_NAME)), tr("%1 %2 is now downloaded (you have %3). " From 6c3f8692e2de352b55aa5b80a869ab0ee0396be2 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Mon, 26 Jun 2023 21:42:48 +0300 Subject: [PATCH 077/298] [win-linux] add feature 62973: skip the download step --- win-linux/src/cupdatemanager.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/win-linux/src/cupdatemanager.cpp b/win-linux/src/cupdatemanager.cpp index 17ce6f752..b3def740d 100644 --- a/win-linux/src/cupdatemanager.cpp +++ b/win-linux/src/cupdatemanager.cpp @@ -644,9 +644,6 @@ void CUpdateManager::onCheckFinished(bool error, bool updateExist, const QString { if ( !error) { if ( updateExist ) { - QString args = QString("{\"version\":\"%1\"}").arg(version); - AscAppManager::sendCommandTo(0, "updates:checking", args); - AscAppManager::sendCommandToAllEditors(L"updates:checking", args.toStdWString()); switch (getUpdateMode()) { case UpdateMode::SILENT: m_lock = false; @@ -654,7 +651,15 @@ void CUpdateManager::onCheckFinished(bool error, bool updateExist, const QString break; case UpdateMode::ASK: case UpdateMode::DISABLE: - m_dialogSchedule->addToSchedule("showUpdateMessage"); + if (isSavedPackageValid()) { + m_lock = false; + loadUpdates(); + } else { + QString args = QString("{\"version\":\"%1\"}").arg(version); + AscAppManager::sendCommandTo(0, "updates:checking", args); + AscAppManager::sendCommandToAllEditors(L"updates:checking", args.toStdWString()); + m_dialogSchedule->addToSchedule("showUpdateMessage"); + } break; } } else { From e81b8dde544bbebd7b13cf5000c2abcf2968f942 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Tue, 27 Jun 2023 22:28:13 +0300 Subject: [PATCH 078/298] [win-linux] add scrolling tabs with the wheel without changing the index --- win-linux/src/components/ctabbar.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/win-linux/src/components/ctabbar.cpp b/win-linux/src/components/ctabbar.cpp index c1959189e..8f0ce9aff 100644 --- a/win-linux/src/components/ctabbar.cpp +++ b/win-linux/src/components/ctabbar.cpp @@ -947,6 +947,7 @@ void CTabBar::wheelEvent(QWheelEvent *event) { QFrame::wheelEvent(event); if (!d->animationInProgress && d->tabArea->underMouse()) { +#ifdef DONT_USE_SIMPLE_WHEEL_SCROLL if (d->currentIndex > 0 && event->angleDelta().y() > 0) { emit onCurrentChangedByWhell(d->currentIndex - 1); d->onCurrentChanged(d->currentIndex - 1); @@ -955,6 +956,10 @@ void CTabBar::wheelEvent(QWheelEvent *event) emit onCurrentChangedByWhell(d->currentIndex + 1); d->onCurrentChanged(d->currentIndex + 1); } +#else + if (event->angleDelta().y() != 0) + d->scrollToDirection(event->angleDelta().y() > 0 ? d->Direction::Right : d->Direction::Left); +#endif } } From 3b36901b33622569de009e029d190fd027b41f88 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Fri, 30 Jun 2023 15:42:50 +0300 Subject: [PATCH 079/298] [win-linux] headers refactoring --- win-linux/src/ccefeventstransformer.cpp | 4 +--- win-linux/src/ceditortools.cpp | 1 - win-linux/src/ceventdriver.cpp | 1 - win-linux/src/cfilechecker.cpp | 1 - win-linux/src/clangater.cpp | 4 ---- win-linux/src/clogger.cpp | 2 -- win-linux/src/components/asctabwidget.cpp | 6 ------ win-linux/src/components/asctabwidget.h | 3 --- win-linux/src/components/canimatedicon.cpp | 3 +-- win-linux/src/components/cfiledialog.cpp | 6 ------ win-linux/src/components/cprintprogress.cpp | 1 - win-linux/src/components/ctabpanel.cpp | 3 +-- win-linux/src/cthemes.cpp | 2 -- win-linux/src/cwindowsqueue.h | 3 ++- .../platform_linux/cdialogcertificateinfo.cpp | 2 +- .../src/platform_linux/cdialogopenssl.cpp | 4 +--- win-linux/src/platform_linux/cdialogopenssl.h | 7 +------ win-linux/src/utils.cpp | 10 +++------- win-linux/src/windows/cmainwindow.cpp | 19 ------------------- .../windows/platform_linux/cwindowplatform.h | 1 - .../windows/platform_linux/cx11decoration.cpp | 4 ---- 21 files changed, 11 insertions(+), 76 deletions(-) diff --git a/win-linux/src/ccefeventstransformer.cpp b/win-linux/src/ccefeventstransformer.cpp index f28de1d4d..59c33a11f 100644 --- a/win-linux/src/ccefeventstransformer.cpp +++ b/win-linux/src/ccefeventstransformer.cpp @@ -33,11 +33,9 @@ #include "ccefeventstransformer.h" #include "applicationmanager_events.h" #include "common/Types.h" -//#include "regex" - #include #include -#include + using namespace NSEditorApi; CCefEventsTransformer::CCefEventsTransformer(QObject *parent) diff --git a/win-linux/src/ceditortools.cpp b/win-linux/src/ceditortools.cpp index 48a506e48..9d01b13a1 100644 --- a/win-linux/src/ceditortools.cpp +++ b/win-linux/src/ceditortools.cpp @@ -42,7 +42,6 @@ #include "components/cmessage.h" #include #include -#include using namespace NSEditorApi; diff --git a/win-linux/src/ceventdriver.cpp b/win-linux/src/ceventdriver.cpp index d44667755..1b89b5110 100644 --- a/win-linux/src/ceventdriver.cpp +++ b/win-linux/src/ceventdriver.cpp @@ -33,7 +33,6 @@ #include "ceventdriver.h" #include "cascapplicationmanagerwrapper.h" -#include CEventDriver::CEventDriver(QObject *parent) : QObject(parent) diff --git a/win-linux/src/cfilechecker.cpp b/win-linux/src/cfilechecker.cpp index 5e8f8db5f..2b71f08a5 100644 --- a/win-linux/src/cfilechecker.cpp +++ b/win-linux/src/cfilechecker.cpp @@ -5,7 +5,6 @@ #include #include -#include #define FILE_UNKNOWN 0 #define FILE_EXISTS 1 diff --git a/win-linux/src/clangater.cpp b/win-linux/src/clangater.cpp index 2e2a9f6fb..03a1ef6a8 100644 --- a/win-linux/src/clangater.cpp +++ b/win-linux/src/clangater.cpp @@ -2,18 +2,14 @@ #include "defines.h" #include "defines_p.h" #include "utils.h" - #include #include #include #include #include - #include #include -#include - class CLangater::CLangaterIntf { diff --git a/win-linux/src/clogger.cpp b/win-linux/src/clogger.cpp index e1ba56e62..2d03e8962 100644 --- a/win-linux/src/clogger.cpp +++ b/win-linux/src/clogger.cpp @@ -2,8 +2,6 @@ #include "utils.h" #include -#include -#include CLogger::CLogger(QObject *parent, QString fileName) : QObject(parent) diff --git a/win-linux/src/components/asctabwidget.cpp b/win-linux/src/components/asctabwidget.cpp index 001a5e3ba..a8f07f7ce 100644 --- a/win-linux/src/components/asctabwidget.cpp +++ b/win-linux/src/components/asctabwidget.cpp @@ -33,20 +33,14 @@ #include "components/asctabwidget.h" #include #include -#include -#include #include -#include -#include #include "casctabdata.h" #include "common/Types.h" #include "defines.h" #include "utils.h" #include "cfilechecker.h" #include "ceditortools.h" -#include "cascapplicationmanagerwrapper.h" #include "ctabundockevent.h" -#include "OfficeFileFormats.h" using namespace std; diff --git a/win-linux/src/components/asctabwidget.h b/win-linux/src/components/asctabwidget.h index 67fcd92d0..f9f9fd1e2 100644 --- a/win-linux/src/components/asctabwidget.h +++ b/win-linux/src/components/asctabwidget.h @@ -33,11 +33,8 @@ #ifndef ASCTABWIDGET #define ASCTABWIDGET -#include -#include #include #include "ctabbar.h" -#include "qcefview.h" #include "cscalingwrapper.h" #include "ctabpanel.h" diff --git a/win-linux/src/components/canimatedicon.cpp b/win-linux/src/components/canimatedicon.cpp index 333d1d406..ce9640cbf 100644 --- a/win-linux/src/components/canimatedicon.cpp +++ b/win-linux/src/components/canimatedicon.cpp @@ -1,7 +1,6 @@ #include "components/canimatedicon.h" - #include -#include +#include #define RELEASE_OBJECT(obj) if (obj) delete obj, obj = nullptr; diff --git a/win-linux/src/components/cfiledialog.cpp b/win-linux/src/components/cfiledialog.cpp index cf358cdb3..c809392f7 100644 --- a/win-linux/src/components/cfiledialog.cpp +++ b/win-linux/src/components/cfiledialog.cpp @@ -36,13 +36,8 @@ #include "utils.h" #include "components/cmessage.h" #include "cascapplicationmanagerwrapper.h" - #include "../Common/OfficeFileFormats.h" - #include -#include - -#include "qcefview.h" #ifdef Q_OS_WIN # include @@ -51,7 +46,6 @@ # include "platform_linux/xdgdesktopportal.h" # include "platform_linux/gtkfilechooser.h" #endif -#include namespace CFileDialogHelper { diff --git a/win-linux/src/components/cprintprogress.cpp b/win-linux/src/components/cprintprogress.cpp index 1ce07bc26..c25275f56 100644 --- a/win-linux/src/components/cprintprogress.cpp +++ b/win-linux/src/components/cprintprogress.cpp @@ -45,7 +45,6 @@ # include "windows/platform_linux/cx11decoration.h" #endif // Q_WS_WIN32 -#include class CDialogEventFilter : public QObject { diff --git a/win-linux/src/components/ctabpanel.cpp b/win-linux/src/components/ctabpanel.cpp index d9803bffd..2fd0b2f37 100644 --- a/win-linux/src/components/ctabpanel.cpp +++ b/win-linux/src/components/ctabpanel.cpp @@ -4,8 +4,7 @@ #include "defines.h" #include "cefview.h" #include -#include -#include + using namespace NSEditorApi; diff --git a/win-linux/src/cthemes.cpp b/win-linux/src/cthemes.cpp index 5da07a04b..355fbeed9 100644 --- a/win-linux/src/cthemes.cpp +++ b/win-linux/src/cthemes.cpp @@ -6,7 +6,6 @@ #endif #include "defines.h" #include "utils.h" - #include #include #include @@ -15,7 +14,6 @@ #include #include #include -#include #define QSTRING_FROM_WSTR(s) QString::fromStdWString(s) #define REGISTRY_THEME_KEY "UITheme" diff --git a/win-linux/src/cwindowsqueue.h b/win-linux/src/cwindowsqueue.h index 9a3202f15..df6adc6c3 100644 --- a/win-linux/src/cwindowsqueue.h +++ b/win-linux/src/cwindowsqueue.h @@ -33,13 +33,14 @@ #ifndef CWINDOWSQUEUE_H #define CWINDOWSQUEUE_H +#include +#include #include #include #include #include #include -#include #define THREAD_WAIT_INTERVAL 10 diff --git a/win-linux/src/platform_linux/cdialogcertificateinfo.cpp b/win-linux/src/platform_linux/cdialogcertificateinfo.cpp index 22ef3cbe4..3dee9a262 100644 --- a/win-linux/src/platform_linux/cdialogcertificateinfo.cpp +++ b/win-linux/src/platform_linux/cdialogcertificateinfo.cpp @@ -4,7 +4,7 @@ #include #include #include -#include + class CDialogCertificateInfo::Intf { public: diff --git a/win-linux/src/platform_linux/cdialogopenssl.cpp b/win-linux/src/platform_linux/cdialogopenssl.cpp index 90e69a779..e9126640b 100644 --- a/win-linux/src/platform_linux/cdialogopenssl.cpp +++ b/win-linux/src/platform_linux/cdialogopenssl.cpp @@ -3,11 +3,9 @@ #include "utils.h" #include "platform_linux/xdgdesktopportal.h" #include "platform_linux/gtkfilechooser.h" - +#include #include #include -#include - #include #include #include diff --git a/win-linux/src/platform_linux/cdialogopenssl.h b/win-linux/src/platform_linux/cdialogopenssl.h index ded7ca90b..4fa372a2e 100644 --- a/win-linux/src/platform_linux/cdialogopenssl.h +++ b/win-linux/src/platform_linux/cdialogopenssl.h @@ -1,15 +1,10 @@ #ifndef DIALOG_OPEN_SSL_H #define DIALOG_OPEN_SSL_H -#include -#include -#include -#include -#include #include - #include "applicationmanager.h" + class CSslDialog_Private; class CDialogOpenSsl : public QDialog { diff --git a/win-linux/src/utils.cpp b/win-linux/src/utils.cpp index dfa81c485..ce1a38044 100644 --- a/win-linux/src/utils.cpp +++ b/win-linux/src/utils.cpp @@ -36,35 +36,31 @@ #include #include #include -#include -#include #include #include -#include #include #include #include -#include #include #include #include -#include -#include #include "cascapplicationmanagerwrapper.h" #include "qdpichecker.h" #include "common/File.h" #ifdef _WIN32 +# include #include #include "shlobj.h" #include "lmcons.h" typedef HRESULT (__stdcall *SetCurrentProcessExplicitAppUserModelIDProc)(PCWSTR AppID); #else +# include +# include #include #include #endif -#include //extern QStringList g_cmdArgs; namespace InputArgs { diff --git a/win-linux/src/windows/cmainwindow.cpp b/win-linux/src/windows/cmainwindow.cpp index f76721e7b..24a59b24b 100644 --- a/win-linux/src/windows/cmainwindow.cpp +++ b/win-linux/src/windows/cmainwindow.cpp @@ -31,40 +31,22 @@ */ #include "windows/cmainwindow.h" -#include "cascapplicationmanagerwrapper.h" #include "ceditortools.h" #include "defines.h" #include "utils.h" -#include "csplash.h" -#include "clogger.h" -#include "clangater.h" -#include "components/cprintprogress.h" #include "components/cfiledialog.h" -#include "qascprinter.h" #include "common/Types.h" #include "version.h" #include "components/cmessage.h" -#include "../Common/OfficeFileFormats.h" #include #include #include #include -#include -#include #include "components/cprintdialog.h" -#include -#include -#include -#include #include -#include #include #include -#include #include -#include -#include -#include #include #ifdef _WIN32 @@ -75,7 +57,6 @@ #ifdef _UPDMODULE - //#include "3dparty/WinSparkle/include/winsparkle.h" #include "../version.h" #endif diff --git a/win-linux/src/windows/platform_linux/cwindowplatform.h b/win-linux/src/windows/platform_linux/cwindowplatform.h index 8f15cf01e..92b165c63 100644 --- a/win-linux/src/windows/platform_linux/cwindowplatform.h +++ b/win-linux/src/windows/platform_linux/cwindowplatform.h @@ -35,7 +35,6 @@ #include "windows/cwindowbase.h" #include "cx11decoration.h" -#include class CWindowPlatform : public CWindowBase, public CX11Decoration diff --git a/win-linux/src/windows/platform_linux/cx11decoration.cpp b/win-linux/src/windows/platform_linux/cx11decoration.cpp index ccdfbe690..ce22e879e 100644 --- a/win-linux/src/windows/platform_linux/cx11decoration.cpp +++ b/win-linux/src/windows/platform_linux/cx11decoration.cpp @@ -34,14 +34,10 @@ #include "utils.h" #include #include - -#include - #include "X11/Xlib.h" #include "X11/cursorfont.h" #include #include "platform_linux/xcbutils.h" -//#include "gtk_addon.h" #define CUSTOM_BORDER_WIDTH 4 #define MOTION_TIMER_MS 250 From 55683d893a594a7b98f515aa91eed7adb7d5d879 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Fri, 30 Jun 2023 15:43:59 +0300 Subject: [PATCH 080/298] [win-linux] remove unused comments --- win-linux/src/components/cprintprogress.cpp | 13 +------------ win-linux/src/components/cprintprogress.h | 9 --------- win-linux/src/windows/ceditorwindow.cpp | 18 ------------------ win-linux/src/windows/cmainwindow.cpp | 13 +------------ .../windows/platform_linux/cx11decoration.h | 16 ---------------- 5 files changed, 2 insertions(+), 67 deletions(-) diff --git a/win-linux/src/components/cprintprogress.cpp b/win-linux/src/components/cprintprogress.cpp index c25275f56..030612538 100644 --- a/win-linux/src/components/cprintprogress.cpp +++ b/win-linux/src/components/cprintprogress.cpp @@ -78,15 +78,9 @@ class CDialogEventFilter : public QObject }; -/*#if defined(_WIN32) -CPrintProgress::CPrintProgress(HWND hParentWnd) - : QWinWidget(hParentWnd), - m_Dlg(this), -#else*/ CPrintProgress::CPrintProgress(QWidget * parent) : QObject(parent), m_Dlg(parent), -//#endif m_fLayout(new QFormLayout), m_eventFilter(new CDialogEventFilter(this)), m_isRejected(false) { @@ -101,12 +95,7 @@ CPrintProgress::CPrintProgress(QWidget * parent) // icon->setProperty("type","msg-question"); // icon->setFixedSize(35*g_dpi_ratio, 35*g_dpi_ratio); - auto _dpi_ratio = -/*#if defined(_WIN32) - Utils::getScreenDpiRatioByHWND(int(hParentWnd)); -#else*/ - Utils::getScreenDpiRatioByWidget(parent); -//#endif + auto _dpi_ratio = Utils::getScreenDpiRatioByWidget(parent); m_progressText = tr("Document is printing: page %1 of %2"); m_progressLabel.setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Preferred); diff --git a/win-linux/src/components/cprintprogress.h b/win-linux/src/components/cprintprogress.h index 737fadc88..38148ac76 100644 --- a/win-linux/src/components/cprintprogress.h +++ b/win-linux/src/components/cprintprogress.h @@ -37,21 +37,12 @@ #include #include -/*#ifdef _WIN32 -#include "win/qwinwidget.h" -class CPrintProgress : public QWinWidget -{ - Q_OBJECT -public: - explicit CPrintProgress(HWND hParentWnd); -#else*/ class CPrintProgress : public QObject { Q_OBJECT public: explicit CPrintProgress(QWidget * p = 0); -//#endif ~CPrintProgress(); void startProgress(); diff --git a/win-linux/src/windows/ceditorwindow.cpp b/win-linux/src/windows/ceditorwindow.cpp index 6b931d931..0800d59ab 100644 --- a/win-linux/src/windows/ceditorwindow.cpp +++ b/win-linux/src/windows/ceditorwindow.cpp @@ -203,12 +203,7 @@ QWidget * CEditorWindow::createMainPanel(QWidget * parent, const QString& title) QGridLayout * mainGridLayout = new QGridLayout(mainPanel); mainGridLayout->setSpacing(0); -//#ifdef Q_OS_WIN mainGridLayout->setMargin(0); -/*#else - int b = !isCustom ? 0 : CX11Decoration::customWindowBorderWith() * m_dpiRatio; - mainGridLayout->setContentsMargins(QMargins(b,b,b,b)); -#endif*/ mainPanel->setLayout(mainGridLayout); if (isCustom) { @@ -247,18 +242,10 @@ QWidget * CEditorWindow::createMainPanel(QWidget * parent, const QString& title) } d_ptr->customizeTitleLabel(); -// m_boxTitleBtns->setFixedSize(282*m_dpiRatio, TOOLBTN_HEIGHT*m_dpiRatio); - -// QWidget * _lb = new QWidget; -// _lb->setFixedWidth( (small_btn_size.width() + layoutBtns->spacing()) * 3 ); -// layoutBtns->insertWidget(0, _lb); } else { // QLinearGradient gradient(centralWidget->rect().topLeft(), QPoint(centralWidget->rect().left(), 29)); // gradient.setColorAt(0, QColor("#eee")); // gradient.setColorAt(1, QColor("#e4e4e4")); - -// label->setFixedHeight(0); -// m_boxTitleBtns->setFixedSize(342*m_dpiRatio, 16*m_dpiRatio); } if ( !d_ptr->panel() ) { @@ -266,18 +253,13 @@ QWidget * CEditorWindow::createMainPanel(QWidget * parent, const QString& title) // pMainWidget->Create(&AscAppManager::getInstance(), cvwtSimple); // pMainWidget->setObjectName( "mainPanel" ); // pMainWidget->setHidden(false); - // m_pMainView = (QWidget *)pMainWidget; } else { m_pMainView = static_cast(d_ptr->panel()); m_pMainView->setParent(mainPanel); m_pMainView->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); -// m_pMainView->setGeometry(mainPanel->geometry()); -// m_pMainView->show(); } -// m_pMainWidget->setVisible(false); - d_ptr.get()->onScreenScalingFactor(m_dpiRatio); if (d_ptr->usedOldEditorVersion) // For old editors only mainGridLayout->addWidget(m_pMainView, 1, 0); diff --git a/win-linux/src/windows/cmainwindow.cpp b/win-linux/src/windows/cmainwindow.cpp index 24a59b24b..3bfd37ec7 100644 --- a/win-linux/src/windows/cmainwindow.cpp +++ b/win-linux/src/windows/cmainwindow.cpp @@ -61,7 +61,6 @@ #endif #define TOP_NATIVE_WINDOW_HANDLE this -//#define FILEDIALOG_DONT_USE_NATIVEDIALOGS using namespace std::placeholders; using namespace NSEditorApi; @@ -344,9 +343,6 @@ QWidget* CMainWindow::createMainPanel(QWidget *parent) { QWidget *mainPanel = new QWidget(parent); mainPanel->setObjectName("mainPanel"); -// mainPanel->setProperty("uitheme", QString::fromStdWString(AscAppManager::themes().current().originalId())); -// mainPanel->setProperty("uithemetype", AscAppManager::themes().current().stype()); - QGridLayout *_pMainGridLayout = new QGridLayout(mainPanel); _pMainGridLayout->setSpacing(0); _pMainGridLayout->setObjectName(QString::fromUtf8("mainGridLayout")); @@ -360,7 +356,6 @@ QWidget* CMainWindow::createMainPanel(QWidget *parent) sizePolicy.setHorizontalStretch(1); pTabBar->setSizePolicy(sizePolicy); -// QSize wide_btn_size(29*g_dpi_ratio, TOOLBTN_HEIGHT*g_dpi_ratio); m_boxTitleBtns = createTopPanel(mainPanel); m_boxTitleBtns->setObjectName("CX11Caption"); _pMainGridLayout->addWidget(m_boxTitleBtns, 0, 2, 1, 1); @@ -385,10 +380,6 @@ QWidget* CMainWindow::createMainPanel(QWidget *parent) QPalette palette; if (isCustomWindowStyle()) { -/*#ifdef __linux__ - _pMainGridLayout->setMargin( CX11Decoration::customWindowBorderWith() * dpi_ratio ); - //connect(m_boxTitleBtns, SIGNAL(mouseDoubleClicked()), SLOT(onMaximizeEvent())); -#endif*/ } else { // m_pButtonMain->setProperty("theme", "light"); QLinearGradient gradient(mainPanel->rect().topLeft(), QPoint(mainPanel->rect().left(), 29)); @@ -397,7 +388,7 @@ QWidget* CMainWindow::createMainPanel(QWidget *parent) palette.setBrush(QPalette::Background, QBrush(gradient)); label->setFixedHeight(0); } -// m_pTabs->setAutoFillBackground(true); + // Set TabWidget m_pTabs = new CAscTabWidget(mainPanel, pTabBar); m_pTabs->setObjectName(QString::fromUtf8("ascTabWidget")); @@ -471,8 +462,6 @@ void CMainWindow::toggleButtonMain(bool toggle, bool delay) m_pButtonMain->setProperty("class", "active"); m_pTabs->activate(false); m_pMainWidget->setHidden(false); -// m_pTabs->setFocusedView(); -// ((QCefView *)m_pMainWidget)->setFocusToCef(); } else { m_pButtonMain->setProperty("class", "normal"); m_pTabs->activate(true); diff --git a/win-linux/src/windows/platform_linux/cx11decoration.h b/win-linux/src/windows/platform_linux/cx11decoration.h index f43266dea..3fb17f709 100644 --- a/win-linux/src/windows/platform_linux/cx11decoration.h +++ b/win-linux/src/windows/platform_linux/cx11decoration.h @@ -93,20 +93,4 @@ class CX11Decoration void sendButtonRelease(); }; -/*class CX11Caption : public QWidget -{ -public: - Q_OBJECT - -signals: - void mouseDoubleClicked(); - -public: - explicit CX11Caption(QWidget* parent); - virtual ~CX11Caption(); - - virtual void paintEvent(QPaintEvent *event); - virtual void mouseDoubleClickEvent(QMouseEvent *event); -};*/ - #endif // CX11DECORATION_H From 31e4cf92c18caf17df0628825cef2ded3a80946a Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Fri, 30 Jun 2023 15:45:50 +0300 Subject: [PATCH 081/298] [win-linux] remove unused code --- win-linux/src/components/asctabwidget.cpp | 73 +++++++++++------------ win-linux/src/components/asctabwidget.h | 2 +- win-linux/src/components/cfiledialog.cpp | 58 +++++++++--------- win-linux/src/components/cfiledialog.h | 2 +- win-linux/src/windows/cmainwindow.cpp | 7 --- 5 files changed, 65 insertions(+), 77 deletions(-) diff --git a/win-linux/src/components/asctabwidget.cpp b/win-linux/src/components/asctabwidget.cpp index a8f07f7ce..9b5bbf614 100644 --- a/win-linux/src/components/asctabwidget.cpp +++ b/win-linux/src/components/asctabwidget.cpp @@ -130,7 +130,7 @@ CAscTabWidget::CAscTabWidget(QWidget *parent, CTabBar *_pBar) , m_widthParams({{100, 135, 9}, 68, 3, 0, WINDOW_TITLE_MIN_WIDTH, 140, 0}) , m_defWidthParams(m_widthParams) , m_isCustomStyle(true) - , m_tabIconSize(16, 16) +// , m_tabIconSize(16, 16) , m_pBar(_pBar) { m_pBar->setObjectName("asc_editors_tabbar"); @@ -468,7 +468,7 @@ void CAscTabWidget::updateTabIcon(int index) bool is_active = isActiveWidget() && index == currentIndex(); int tab_type = etUndefined; QString active_tab_color = "none"; - CTabBar::TabTheme tab_theme = is_active ? CTabBar::DarkTab : CTabBar::LightTab; +// CTabBar::TabTheme tab_theme = is_active ? CTabBar::DarkTab : CTabBar::LightTab; auto _is_editor_supports_theme = [&](int index) { CAscTabData& data = *(panel(index)->data()); @@ -484,7 +484,7 @@ void CAscTabWidget::updateTabIcon(int index) } if ( !is_active ) { - tab_theme = AscAppManager::themes().current().isDark() ? CTabBar::DarkTab : CTabBar::LightTab; +// tab_theme = GetCurrentTheme().isDark() ? CTabBar::DarkTab : CTabBar::LightTab; } else { switch ( tab_type ) { case etPresentation: active_tab_color = QString::fromStdWString(ui_theme.value(CTheme::ColorRole::ecrTabSlideActive)); break; @@ -494,12 +494,12 @@ void CAscTabWidget::updateTabIcon(int index) case etNewPortal: case etPortal: active_tab_color = QString::fromStdWString(ui_theme.value(CTheme::ColorRole::ecrTabSimpleActiveBackground)); - tab_theme = CTabBar::LightTab; +// tab_theme = CTabBar::LightTab; break; default: tab_type = etUndefined; active_tab_color = QString::fromStdWString(ui_theme.value(CTheme::ColorRole::ecrTabDefaultActiveBackground)); - tab_theme = AscAppManager::themes().isColorDark(active_tab_color) ? CTabBar::DarkTab : CTabBar::LightTab; +// tab_theme = AscAppManager::themes().isColorDark(active_tab_color) ? CTabBar::DarkTab : CTabBar::LightTab; break; } } @@ -1070,12 +1070,7 @@ void CAscTabWidget::setFullScreen(bool apply, int id) if (m_dataFullScreen) { disconnect(cefConnection); -#ifdef _LINUX AscAppManager::mainWindow()->show(false); -#else - AscAppManager::mainWindow()->show(false); -#endif - int index = m_dataFullScreen->tabindex(); fsWidget = qobject_cast(m_dataFullScreen->widget()); widget(index)->layout()->addWidget(fsWidget); @@ -1134,43 +1129,43 @@ void CAscTabWidget::setStyleSheet(const QString& stylesheet) { QStackedWidget::setStyleSheet(stylesheet); - auto _string_to_color = [](const QString& str) -> QColor { - int r = -1, g = -1, b = -1; - QRegExp re("^#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})$", Qt::CaseInsensitive); - if ( re.indexIn(str) < 0 ) { - re.setPattern("^#([a-f0-9])([a-f0-9])([a-f0-9])$"); - - if ( !(re.indexIn(str) < 0) ) { - r = (re.cap(1)+re.cap(1)).toInt(nullptr, 16), - g = (re.cap(2)+re.cap(2)).toInt(nullptr, 16), - b = (re.cap(3)+re.cap(3)).toInt(nullptr, 16); - } - } else { - r = re.cap(1).toInt(nullptr, 16), - g = re.cap(2).toInt(nullptr, 16), - b = re.cap(3).toInt(nullptr, 16); - } +// auto _string_to_color = [](const QString& str) -> QColor { +// int r = -1, g = -1, b = -1; +// QRegExp re("^#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})$", Qt::CaseInsensitive); +// if ( re.indexIn(str) < 0 ) { +// re.setPattern("^#([a-f0-9])([a-f0-9])([a-f0-9])$"); + +// if ( !(re.indexIn(str) < 0) ) { +// r = (re.cap(1)+re.cap(1)).toInt(nullptr, 16), +// g = (re.cap(2)+re.cap(2)).toInt(nullptr, 16), +// b = (re.cap(3)+re.cap(3)).toInt(nullptr, 16); +// } +// } else { +// r = re.cap(1).toInt(nullptr, 16), +// g = re.cap(2).toInt(nullptr, 16), +// b = re.cap(3).toInt(nullptr, 16); +// } - if ( r < 0 || g < 0 || b < 0 ) - return QColor(); - else return {r,g,b}; - }; +// if ( r < 0 || g < 0 || b < 0 ) +// return QColor(); +// else return {r,g,b}; +// }; - QRegExp r("QTabBar::tab-label\\s?\\{\\s?active:\\s?([^;]{4,7});normal:\\s?([^;]{4,7})"); +// QRegExp r("QTabBar::tab-label\\s?\\{\\s?active:\\s?([^;]{4,7});normal:\\s?([^;]{4,7})"); // if (!(r.indexIn(stylesheet) < 0)) { // ((CTabBar *)tabBar())->setTabTextColor(QPalette::Active, _string_to_color(r.cap(1)) ); // ((CTabBar *)tabBar())->setTabTextColor(QPalette::Inactive, _string_to_color(r.cap(2)) ); // } - r.setPattern("QTabBar::tab-icon\\s*\\{([^\\}]+)"); - if ( !(r.indexIn(stylesheet) < 0) ) { - QRegExp ri("width:\\s*(\\d+);\\s*height:\\s*(\\d+)"); +// r.setPattern("QTabBar::tab-icon\\s*\\{([^\\}]+)"); +// if ( !(r.indexIn(stylesheet) < 0) ) { +// QRegExp ri("width:\\s*(\\d+);\\s*height:\\s*(\\d+)"); - if ( !(ri.indexIn(r.cap(1)) < 0) ) { - m_tabIconSize.setWidth(ri.cap(1).toInt()); - m_tabIconSize.setHeight(ri.cap(2).toInt()); - } - } +// if ( !(ri.indexIn(r.cap(1)) < 0) ) { +// m_tabIconSize.setWidth(ri.cap(1).toInt()); +// m_tabIconSize.setHeight(ri.cap(2).toInt()); +// } +// } } void CAscTabWidget::applyUITheme(const std::wstring& theme) diff --git a/win-linux/src/components/asctabwidget.h b/win-linux/src/components/asctabwidget.h index f9f9fd1e2..671e3ca37 100644 --- a/win-linux/src/components/asctabwidget.h +++ b/win-linux/src/components/asctabwidget.h @@ -119,7 +119,7 @@ class CAscTabWidget : public QStackedWidget, public CScalingWrapper m_defWidthParams; bool m_isCustomStyle; CTabIconSet m_mapTabIcons; - QSize m_tabIconSize; +// QSize m_tabIconSize; CTabBar *m_pBar; signals: diff --git a/win-linux/src/components/cfiledialog.cpp b/win-linux/src/components/cfiledialog.cpp index c809392f7..7b69fd1ed 100644 --- a/win-linux/src/components/cfiledialog.cpp +++ b/win-linux/src/components/cfiledialog.cpp @@ -470,35 +470,35 @@ int CFileDialogWrapper::getFormat() return m_format; } -QString CFileDialogWrapper::joinFilters() const -{ - auto _get_all_exts = [] (const QList& l) { - QRegExp re("[\\w\\s]+\\((\\*\\.\\w+)\\)"); - QString extns; - for ( auto f : l ) { - if ( !(re.indexIn(f) < 0) ) { - if ( !extns.isEmpty() ) - extns.append(" "); - - extns.append( re.cap(1) ); - } - } - - return extns; - }; - - QString _out; - QList _vl(m_mapFilters.values()); -// _vl.insert(1, tr("All supported documents") + " (" + _get_all_exts(_vl) + ")"); - for ( auto f : _vl ) { - if ( !_out.isEmpty() ) - _out.append(";;"); - - _out.append(f); - } - - return _out; -} +//QString CFileDialogWrapper::joinFilters() const +//{ +// auto _get_all_exts = [] (const QList& l) { +// QRegExp re("[\\w\\s]+\\((\\*\\.\\w+)\\)"); +// QString extns; +// for ( auto f : l ) { +// if ( !(re.indexIn(f) < 0) ) { +// if ( !extns.isEmpty() ) +// extns.append(" "); + +// extns.append( re.cap(1) ); +// } +// } + +// return extns; +// }; + +// QString _out; +// QList _vl(m_mapFilters.values()); +//// _vl.insert(1, tr("All supported documents") + " (" + _get_all_exts(_vl) + ")"); +// for ( auto f : _vl ) { +// if ( !_out.isEmpty() ) +// _out.append(";;"); + +// _out.append(f); +// } + +// return _out; +//} QString CFileDialogWrapper::joinExtentions(const QString &filter) const { diff --git a/win-linux/src/components/cfiledialog.h b/win-linux/src/components/cfiledialog.h index 20c08448b..6870943f9 100644 --- a/win-linux/src/components/cfiledialog.h +++ b/win-linux/src/components/cfiledialog.h @@ -70,7 +70,7 @@ class CFileDialogWrapper : public QObject private: QString getFilter(const QString&) const; int getKey(const QString &value); - QString joinFilters() const; +// QString joinFilters() const; QString joinExtentions(const QString&) const; QString m_title; QString m_filters; diff --git a/win-linux/src/windows/cmainwindow.cpp b/win-linux/src/windows/cmainwindow.cpp index 3bfd37ec7..5b94349ca 100644 --- a/win-linux/src/windows/cmainwindow.cpp +++ b/win-linux/src/windows/cmainwindow.cpp @@ -60,7 +60,6 @@ #include "../version.h" #endif -#define TOP_NATIVE_WINDOW_HANDLE this using namespace std::placeholders; using namespace NSEditorApi; @@ -495,12 +494,6 @@ void CMainWindow::onTabsCountChanged(int count, int i, int d) if ( count == 0 ) { toggleButtonMain(true); } - if ( d < 0 ) { - //RecalculatePlaces(); - } else - QTimer::singleShot(200, [=]{ - //RecalculatePlaces(); - }); } void CMainWindow::onEditorAllowedClose(int uid) From 1277814644afd6a20e8353637d9ddff3d105f584 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Fri, 30 Jun 2023 15:47:16 +0300 Subject: [PATCH 082/298] [win-linux] replacing long expressions with definitions --- win-linux/src/components/asctabwidget.cpp | 21 +++++++++++---------- win-linux/src/defines.h | 2 ++ win-linux/src/prop/cmainwindowimpl.cpp | 2 +- win-linux/src/windows/ceditorwindow_p.h | 16 ++++++++-------- win-linux/src/windows/cmainwindow.cpp | 14 +++++++------- win-linux/src/windows/cpresenterwindow.cpp | 6 +++--- win-linux/src/windows/cwindowbase.cpp | 6 +++--- 7 files changed, 35 insertions(+), 32 deletions(-) diff --git a/win-linux/src/components/asctabwidget.cpp b/win-linux/src/components/asctabwidget.cpp index 9b5bbf614..9f899b380 100644 --- a/win-linux/src/components/asctabwidget.cpp +++ b/win-linux/src/components/asctabwidget.cpp @@ -42,6 +42,7 @@ #include "ceditortools.h" #include "ctabundockevent.h" +#define indexIsValid(i) (!(i < 0) && i < count()) using namespace std; @@ -265,7 +266,7 @@ int CAscTabWidget::addEditor(const COpenOptions& opts) void CAscTabWidget::closeEditor(int i, bool m, bool r) { - if (!(i < 0) && i < count()) { + if (indexIsValid(i)) { CTabPanel * view = panel(i); CAscTabData * doc = view->data(); @@ -474,8 +475,8 @@ void CAscTabWidget::updateTabIcon(int index) CAscTabData& data = *(panel(index)->data()); return data.isViewType(cvwtEditor) && (data.features().empty() || data.hasFeature(L"uithemes")); }; - const CTheme& ui_theme = AscAppManager::themes().current().isDark() && _is_editor_supports_theme(index) ? - AscAppManager::themes().current() : AscAppManager::themes().defaultLight(); + const CTheme& ui_theme = GetCurrentTheme().isDark() && _is_editor_supports_theme(index) ? + GetCurrentTheme() : AscAppManager::themes().defaultLight(); tab_type = pEditor->GetEditorType(); switch ( tab_type ) { @@ -910,7 +911,7 @@ int CAscTabWidget::modifiedCount() int CAscTabWidget::viewByIndex(int index) { - if (!(index < 0) && index < count()) { + if (indexIsValid(index)) { CCefView * view = panel(index)->cef(); return view ? view->GetId() : -1; } @@ -920,7 +921,7 @@ int CAscTabWidget::viewByIndex(int index) QString CAscTabWidget::titleByIndex(int index, bool mod) { - if (!(index < 0) && index < count()) { + if (indexIsValid(index)) { const CAscTabData * doc = panel(index)->data(); if (doc) return doc->title(mod); @@ -941,7 +942,7 @@ QString CAscTabWidget::urlByView(int id) bool CAscTabWidget::modifiedByIndex(int index) { - if (!(index < 0) && index < count()) { + if (indexIsValid(index)) { const CAscTabData * doc = panel(index)->data(); return doc->hasChanges() && !doc->closed(); } @@ -1025,7 +1026,7 @@ int CAscTabWidget::findFragmented(const QString& portalname) bool CAscTabWidget::isFragmented(int index) { - if (!(index < 0) && index < count()) { + if (indexIsValid(index)) { const CTabPanel * cefpanel = panel(index); const CAscTabData * doc = cefpanel->data(); return /*!doc->closed() &&*/ doc->isViewType(cvwtEditor) && ((CCefViewEditor *)cefpanel->cef())->CheckCloudCryptoNeedBuild(); @@ -1052,7 +1053,7 @@ int CAscTabWidget::findProcessed() const bool CAscTabWidget::isProcessed(int index) const { - if (!(index < 0) && index < count()) { + if (indexIsValid(index)) { const CTabPanel * cefpanel = panel(index); const CAscTabData * doc = cefpanel->data(); @@ -1172,11 +1173,11 @@ void CAscTabWidget::applyUITheme(const std::wstring& theme) { reloadTabIcons(); updateIcons(); - m_pBar->setIgnoreActiveTabColor(AscAppManager::themes().current().isDark()); + m_pBar->setIgnoreActiveTabColor(GetCurrentTheme().isDark()); m_pBar->polish(); style()->polish(this); - QColor back_color = AscAppManager::themes().current().color(CTheme::ColorRole::ecrWindowBackground); + QColor back_color = GetColorByRole(ecrWindowBackground); for (int i(count()); i-- > 0; ) { panel(i)->setBackground(back_color); } diff --git a/win-linux/src/defines.h b/win-linux/src/defines.h index 7af6ba755..467eb88cb 100644 --- a/win-linux/src/defines.h +++ b/win-linux/src/defines.h @@ -78,6 +78,8 @@ AscAppManager::themes().themeActualId(theme) #define GetColorByRole(role) \ GetCurrentTheme().color(CTheme::ColorRole::role) +#define GetColorValueByRole(role) \ + GetCurrentTheme().value(CTheme::ColorRole::role) #define IsPackage(type) (AppOptions::packageType() == AppOptions::AppPackageType::type) #define LOCAL_PATH_OPEN 1 diff --git a/win-linux/src/prop/cmainwindowimpl.cpp b/win-linux/src/prop/cmainwindowimpl.cpp index 86256e3ab..1198a12af 100644 --- a/win-linux/src/prop/cmainwindowimpl.cpp +++ b/win-linux/src/prop/cmainwindowimpl.cpp @@ -85,7 +85,7 @@ void CMainWindowImpl::refreshAboutVersion() // } #ifndef __OS_WIN_XP - _json_obj["uitheme"] = QString::fromStdWString(AscAppManager::themes().current().id()); + _json_obj["uitheme"] = QString::fromStdWString(GetCurrentTheme().id()); #endif #ifdef Q_OS_WIN diff --git a/win-linux/src/windows/ceditorwindow_p.h b/win-linux/src/windows/ceditorwindow_p.h index b9f0d58b8..e9f50996e 100644 --- a/win-linux/src/windows/ceditorwindow_p.h +++ b/win-linux/src/windows/ceditorwindow_p.h @@ -130,7 +130,7 @@ class CEditorWindowPrivate : public CCefEventsGate btnHome->setIcon(":/title/icons/buttons.svg", "svg-btn-home"); //btnHome->setToolTip(CEditorWindow::tr("Open main window")); btnHome->setProperty("ToolTip", CEditorWindow::tr("Open main window")); - btnHome->setIconOpacity(AscAppManager::themes().current().color(CTheme::ColorRole::ecrButtonNormalOpacity)); + btnHome->setIconOpacity(GetColorByRole(ecrButtonNormalOpacity)); m_mapTitleButtons["home"] = btnHome; connect(btnHome, &QPushButton::clicked, std::bind(&CEditorWindow::onClickButtonHome, window)); leftboxbuttons->layout()->addWidget(btnHome); @@ -147,7 +147,7 @@ class CEditorWindowPrivate : public CCefEventsGate btn->setDisabled(jsonobj["disabled"].toBool()); btn->setIconSize(QSize(20,20) * window->m_dpiRatio); btn->setMouseTracking(true); - btn->setIconOpacity(AscAppManager::themes().current().color(CTheme::ColorRole::ecrButtonNormalOpacity)); + btn->setIconOpacity(GetColorByRole(ecrButtonNormalOpacity)); if ( jsonobj.contains("visible") && !jsonobj["visible"].toBool() ) { btn->hide(); } @@ -337,7 +337,7 @@ class CEditorWindowPrivate : public CCefEventsGate if ( canExtendTitle() && window->isCustomWindowStyle() ) { window->m_pMainPanel->setProperty("window", "pretty"); - changeTheme(AscAppManager::themes().current().id()); + changeTheme(GetCurrentTheme().id()); } } @@ -346,20 +346,20 @@ class CEditorWindowPrivate : public CCefEventsGate std::wstring background, border; switch (panel()->data()->contentType()) { case etDocument: - background = AscAppManager::themes().current().value(CTheme::ColorRole::ecrTabWordActive); + background = GetColorValueByRole(ecrTabWordActive); border = background; break; case etPresentation: - background = AscAppManager::themes().current().value(CTheme::ColorRole::ecrTabSlideActive); + background = GetColorValueByRole(ecrTabSlideActive); border = background; break; case etSpreadsheet: - background = AscAppManager::themes().current().value(CTheme::ColorRole::ecrTabCellActive); + background = GetColorValueByRole(ecrTabCellActive); border = background; break; default: - background = AscAppManager::themes().current().value(CTheme::ColorRole::ecrWindowBackground); - border = AscAppManager::themes().current().value(CTheme::ColorRole::ecrWindowBorder); + background = GetColorValueByRole(ecrWindowBackground); + border = GetColorValueByRole(ecrWindowBorder); } window->setWindowColors(QColor(QString::fromStdWString(background)), QColor(QString::fromStdWString(border))); diff --git a/win-linux/src/windows/cmainwindow.cpp b/win-linux/src/windows/cmainwindow.cpp index 5b94349ca..d7bbeb2b2 100644 --- a/win-linux/src/windows/cmainwindow.cpp +++ b/win-linux/src/windows/cmainwindow.cpp @@ -188,8 +188,8 @@ bool CMainWindow::holdView(int id) const void CMainWindow::applyTheme(const std::wstring& theme) { CWindowPlatform::applyTheme(theme); - m_pMainPanel->setProperty("uitheme", QString::fromStdWString(AscAppManager::themes().themeActualId(theme))); - m_pMainPanel->setProperty("uithemetype", AscAppManager::themes().current().stype()); + m_pMainPanel->setProperty("uitheme", QString::fromStdWString(GetActualTheme(theme))); + m_pMainPanel->setProperty("uithemetype", GetCurrentTheme().stype()); for (int i(m_pTabs->count()); !(--i < 0);) { CAscTabData& _doc = *m_pTabs->panel(i)->data(); if ( _doc.isViewType(cvwtEditor) && !_doc.closed() ) { @@ -203,14 +203,14 @@ void CMainWindow::applyTheme(const std::wstring& theme) foreach (auto btn, m_pTopButtons) btn->style()->polish(btn); } - m_pTabs->applyUITheme(AscAppManager::themes().themeActualId(theme)); + m_pTabs->applyUITheme(GetActualTheme(theme)); m_pMainPanel->style()->polish(m_pMainPanel); m_pMainPanel->update(); - m_pButtonMain->setIcon(MAIN_ICON_PATH, AscAppManager::themes().current().isDark() ? "logo-light" : "logo-dark"); + m_pButtonMain->setIcon(MAIN_ICON_PATH, GetCurrentTheme().isDark() ? "logo-light" : "logo-dark"); m_pButtonMain->setIconSize(MAIN_ICON_SIZE * m_dpiRatio); if (m_pWidgetDownload && m_pWidgetDownload->toolButton()) { - m_pWidgetDownload->applyTheme(QString::fromStdWString(AscAppManager::themes().themeActualId(theme))); + m_pWidgetDownload->applyTheme(QString::fromStdWString(GetActualTheme(theme))); m_pWidgetDownload->toolButton()->style()->polish(m_pWidgetDownload->toolButton()); } } @@ -394,7 +394,7 @@ QWidget* CMainWindow::createMainPanel(QWidget *parent) _pMainGridLayout->addWidget(m_pTabs, 1, 0, 1, 3); m_pTabs->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); m_pTabs->activate(false); - m_pTabs->applyUITheme(AscAppManager::themes().current().id()); + m_pTabs->applyUITheme(GetCurrentTheme().id()); connect(m_pTabs, SIGNAL(currentChanged(int)), this, SLOT(onTabChanged(int))); connect(pTabBar, SIGNAL(tabBarClicked(int)), this, SLOT(onTabClicked(int))); @@ -1349,7 +1349,7 @@ void CMainWindow::updateScalingFactor(double dpiratio) m_pTabs->setStyleSheet(_style); // m_pTabs->updateScalingFactor(dpiratio); m_pTabs->reloadTabIcons(); - m_pButtonMain->setIcon(MAIN_ICON_PATH, AscAppManager::themes().current().isDark() ? "logo-light" : "logo-dark"); + m_pButtonMain->setIcon(MAIN_ICON_PATH, GetCurrentTheme().isDark() ? "logo-light" : "logo-dark"); m_pButtonMain->setIconSize(MAIN_ICON_SIZE * dpiratio); if (m_pWidgetDownload && m_pWidgetDownload->toolButton()) { m_pWidgetDownload->updateScalingFactor(dpiratio); diff --git a/win-linux/src/windows/cpresenterwindow.cpp b/win-linux/src/windows/cpresenterwindow.cpp index 056cfa94f..6bd6b267f 100644 --- a/win-linux/src/windows/cpresenterwindow.cpp +++ b/win-linux/src/windows/cpresenterwindow.cpp @@ -74,8 +74,8 @@ CPresenterWindow::~CPresenterWindow() void CPresenterWindow::applyTheme(const std::wstring& theme) { CWindowPlatform::applyTheme(theme); - m_pMainPanel->setProperty("uitheme", QString::fromStdWString(AscAppManager::themes().themeActualId(theme))); - m_pMainPanel->setProperty("uithemetype", AscAppManager::themes().current().stype()); + m_pMainPanel->setProperty("uitheme", QString::fromStdWString(GetActualTheme(theme))); + m_pMainPanel->setProperty("uithemetype", GetCurrentTheme().stype()); if (m_boxTitleBtns) { m_labelTitle->style()->polish(m_labelTitle); if (m_pTopButtons[BtnType::Btn_Minimize]) { @@ -105,7 +105,7 @@ QWidget * CPresenterWindow::createMainPanel(QWidget * parent, const QString& tit { QWidget * mainPanel = new QWidget(parent); mainPanel->setObjectName("mainPanel"); - mainPanel->setProperty("uitheme", QString::fromStdWString(AscAppManager::themes().current().id())); + mainPanel->setProperty("uitheme", QString::fromStdWString(GetCurrentTheme().id())); mainPanel->setStyleSheet(AscAppManager::getWindowStylesheets(m_dpiRatio)); QGridLayout * mainGridLayout = new QGridLayout(mainPanel); diff --git a/win-linux/src/windows/cwindowbase.cpp b/win-linux/src/windows/cwindowbase.cpp index c5b223963..b8e69c643 100644 --- a/win-linux/src/windows/cwindowbase.cpp +++ b/win-linux/src/windows/cwindowbase.cpp @@ -135,8 +135,8 @@ void CWindowBase::setWindowColors(const QColor& background, const QColor& border void CWindowBase::applyTheme(const std::wstring& theme) { Q_UNUSED(theme) - QColor background = AscAppManager::themes().current().color(CTheme::ColorRole::ecrWindowBackground); - QColor border = AscAppManager::themes().current().color(CTheme::ColorRole::ecrWindowBorder); + QColor background = GetColorByRole(ecrWindowBackground); + QColor border = GetColorByRole(ecrWindowBorder); setWindowColors(background, border); } @@ -304,6 +304,6 @@ void CWindowBase::showEvent(QShowEvent *event) m_windowActivated = true; setGeometry(m_window_rect); adjustGeometry(); - applyTheme(AscAppManager::themes().current().id()); + applyTheme(GetCurrentTheme().id()); } } From 616a74532ef0bcd3992b487c1b6e6d24fcfc2a1b Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Fri, 30 Jun 2023 15:48:51 +0300 Subject: [PATCH 083/298] [win-linux] small refactoring --- win-linux/src/components/asctabwidget.cpp | 45 +++++++---------- win-linux/src/components/asctabwidget.h | 2 +- win-linux/src/components/cfiledialog.cpp | 2 +- win-linux/src/windows/ceditorwindow.cpp | 17 +++---- win-linux/src/windows/cmainwindow.cpp | 48 ++++++++----------- .../platform_linux/cwindowplatform.cpp | 8 +--- 6 files changed, 46 insertions(+), 76 deletions(-) diff --git a/win-linux/src/components/asctabwidget.cpp b/win-linux/src/components/asctabwidget.cpp index 9f899b380..946618be7 100644 --- a/win-linux/src/components/asctabwidget.cpp +++ b/win-linux/src/components/asctabwidget.cpp @@ -504,7 +504,7 @@ void CAscTabWidget::updateTabIcon(int index) break; } } - QString icon_name = is_active ? m_mapTabIcons.at(tab_type).second : m_mapTabIcons.at(tab_type).first; + const char *icon_name = is_active ? m_mapTabIcons.at(tab_type).second : m_mapTabIcons.at(tab_type).first; m_pBar->setTabIcon(index, QIcon(icon_name)); // m_pBar->setTabIconTheme(index, tab_theme); if ( index == currentIndex() ) { @@ -527,20 +527,19 @@ void CAscTabWidget::setTabIcons(CTabIconSet& icons) void CAscTabWidget::reloadTabIcons() { m_mapTabIcons.clear(); + const char *icons[] = {":/tabbar/icons/newdoc.svg", ":/tabbar/icons/de.svg", ":/tabbar/icons/pe.svg", + ":/tabbar/icons/docxf.svg", ":/tabbar/icons/se.svg", ":/tabbar/icons/portal_light.svg", + ":/tabbar/icons/portal.svg"}; + int portal_icon = GetCurrentTheme().isDark() ? 5 : 6; m_mapTabIcons.insert({ - {etUndefined, std::make_pair(":/tabbar/icons/newdoc.svg", ":/tabbar/icons/newdoc.svg")}, - {etDocument, std::make_pair(":/tabbar/icons/de.svg", ":/tabbar/icons/de.svg")}, - {etPresentation, std::make_pair(":/tabbar/icons/pe.svg", ":/tabbar/icons/pe.svg")}, - {etDocumentMasterForm, std::make_pair(":/tabbar/icons/docxf.svg", ":/tabbar/icons/docxf.svg")}, - {etSpreadsheet, std::make_pair(":/tabbar/icons/se.svg", ":/tabbar/icons/se.svg")} + {etUndefined, std::make_pair(icons[0], icons[0])}, + {etDocument, std::make_pair(icons[1], icons[1])}, + {etPresentation, std::make_pair(icons[2], icons[2])}, + {etDocumentMasterForm, std::make_pair(icons[3], icons[3])}, + {etSpreadsheet, std::make_pair(icons[4], icons[4])}, + {etPortal, std::make_pair(icons[portal_icon], icons[6])}, + {etNewPortal, std::make_pair(icons[portal_icon], icons[6])} }); - - AscAppManager::themes().current().isDark() ? - m_mapTabIcons.insert({{etPortal, std::make_pair(":/tabbar/icons/portal_light.svg", ":/tabbar/icons/portal.svg")}, - {etNewPortal, std::make_pair(":/tabbar/icons/portal_light.svg", ":/tabbar/icons/portal.svg")}}) : - m_mapTabIcons.insert({{etPortal, std::make_pair(":/tabbar/icons/portal.svg", ":/tabbar/icons/portal.svg")}, - {etNewPortal, std::make_pair(":/tabbar/icons/portal.svg", ":/tabbar/icons/portal.svg")}}); - } /* @@ -698,10 +697,7 @@ bool CAscTabWidget::updatePortal(int index,const QString& url) CTabPanel * _panel = panel(index); if ( _panel->data()->contentType() == etPortal ) { - if ( url.isEmpty() ) - _panel->cef()->load(_panel->data()->url()); - else _panel->cef()->load(url.toStdWString()); - + _panel->cef()->load(url.isEmpty() ? _panel->data()->url() : url.toStdWString()); return true; } } @@ -952,19 +948,12 @@ bool CAscTabWidget::modifiedByIndex(int index) bool CAscTabWidget::isLocalByIndex(int index) { - if (!(index < 0) && index < count()) { - return panel(index)->data()->isLocal(); - } - - return true; + return indexIsValid(index) ? panel(index)->data()->isLocal() : true; } -bool CAscTabWidget::closedByIndex(int index) { - if (!(index < 0) && index < count()) { - return panel(index)->data()->closed(); - } - - return true; +bool CAscTabWidget::closedByIndex(int index) +{ + return indexIsValid(index) ? panel(index)->data()->closed() : true; } MapEditors CAscTabWidget::modified(const QString& portalname) diff --git a/win-linux/src/components/asctabwidget.h b/win-linux/src/components/asctabwidget.h index 671e3ca37..e65e00327 100644 --- a/win-linux/src/components/asctabwidget.h +++ b/win-linux/src/components/asctabwidget.h @@ -110,7 +110,7 @@ class CAscTabWidget : public QStackedWidget, public CScalingWrapper } }; - typedef std::map< int, std::pair > CTabIconSet; + typedef std::map< int, std::pair > CTabIconSet; private: std::map m_mapDownloads; diff --git a/win-linux/src/components/cfiledialog.cpp b/win-linux/src/components/cfiledialog.cpp index 7b69fd1ed..d55196a50 100644 --- a/win-linux/src/components/cfiledialog.cpp +++ b/win-linux/src/components/cfiledialog.cpp @@ -229,7 +229,7 @@ QString CFileDialogWrapper::getFilter(const QString& extension) const return tr("PowerPoint Presentation") + " (*." + out + ")"; } else { out.replace(0, 1, extension.left(1).toUpper()); - return tr("%1 File (*.%2)").arg(out).arg(out.toLower()); + return tr("%1 File (*.%2)").arg(out, out.toLower()); } } diff --git a/win-linux/src/windows/ceditorwindow.cpp b/win-linux/src/windows/ceditorwindow.cpp index 0800d59ab..e0a7e1077 100644 --- a/win-linux/src/windows/ceditorwindow.cpp +++ b/win-linux/src/windows/ceditorwindow.cpp @@ -197,7 +197,6 @@ void CEditorWindow::applyTheme(const std::wstring& theme) QWidget * CEditorWindow::createMainPanel(QWidget * parent, const QString& title) { - bool isCustom = isCustomWindowStyle(); QWidget * mainPanel = new QWidget(parent); mainPanel->setObjectName("mainPanel"); @@ -206,7 +205,7 @@ QWidget * CEditorWindow::createMainPanel(QWidget * parent, const QString& title) mainGridLayout->setMargin(0); mainPanel->setLayout(mainGridLayout); - if (isCustom) { + if (isCustomWindowStyle()) { m_boxTitleBtns = createTopPanel(mainPanel); m_boxTitleBtns->setObjectName("box-title-tools"); @@ -219,21 +218,13 @@ QWidget * CEditorWindow::createMainPanel(QWidget * parent, const QString& title) static_cast(m_boxTitleBtns->layout())->insertWidget(0, m_labelTitle); if (d_ptr->usedOldEditorVersion) // For old editors only static_cast(m_boxTitleBtns->layout())->insertStretch(0); - } - - mainPanel->setProperty("zoom", QString::number(m_dpiRatio) + "x"); - mainPanel->setProperty("uitheme", QString::fromStdWString(AscAppManager::themes().current().id())); - mainPanel->setStyleSheet(AscAppManager::getWindowStylesheets(m_dpiRatio) + m_css); - bool _canExtendTitle = false; - if (isCustom) { if ( !d_ptr->canExtendTitle() ) { mainGridLayout->addWidget(m_boxTitleBtns, 0, 0); m_labelTitle->setText(APP_TITLE); } else { if (d_ptr->panel()->data()->contentType() != etUndefined) mainPanel->setProperty("window", "pretty"); - _canExtendTitle = true; int pos = (d_ptr->usedOldEditorVersion) ? 3 : 2; // For old editors only auto *pIconSpacer = new QSpacerItem(ICON_SPACER_WIDTH, 5, QSizePolicy::Fixed, QSizePolicy::Fixed); auto *pTopLayout = static_cast(m_boxTitleBtns->layout()); @@ -248,6 +239,10 @@ QWidget * CEditorWindow::createMainPanel(QWidget * parent, const QString& title) // gradient.setColorAt(1, QColor("#e4e4e4")); } + mainPanel->setProperty("zoom", QString::number(m_dpiRatio) + "x"); + mainPanel->setProperty("uitheme", QString::fromStdWString(GetCurrentTheme().id())); + mainPanel->setStyleSheet(AscAppManager::getWindowStylesheets(m_dpiRatio) + m_css); + if ( !d_ptr->panel() ) { // QCefView * pMainWidget = AscAppManager::createViewer(centralWidget); // pMainWidget->Create(&AscAppManager::getInstance(), cvwtSimple); @@ -267,7 +262,7 @@ QWidget * CEditorWindow::createMainPanel(QWidget * parent, const QString& title) mainGridLayout->addWidget(m_pMainView, 1, 0, 1, 2); mainGridLayout->setRowStretch(1,1); - if (_canExtendTitle) { + if (d_ptr->canExtendTitle()) { if (d_ptr->usedOldEditorVersion) // For old editors only mainGridLayout->addWidget(m_boxTitleBtns, 1, 0, Qt::AlignTop); else { diff --git a/win-linux/src/windows/cmainwindow.cpp b/win-linux/src/windows/cmainwindow.cpp index d7bbeb2b2..bd80de125 100644 --- a/win-linux/src/windows/cmainwindow.cpp +++ b/win-linux/src/windows/cmainwindow.cpp @@ -105,10 +105,7 @@ QRect CMainWindow::windowRect() const QString CMainWindow::documentName(int vid) { int i = tabWidget()->tabIndexByView(vid); - if ( !(i < 0) ) { - return tabWidget()->panel(i)->data()->title(); - } - return ""; + return (i < 0) ? "" : tabWidget()->panel(i)->data()->title(); } void CMainWindow::selectView(int viewid) @@ -378,8 +375,7 @@ QWidget* CMainWindow::createMainPanel(QWidget *parent) QObject::connect(m_pButtonMain, SIGNAL(clicked()), this, SLOT(pushButtonMainClicked())); QPalette palette; - if (isCustomWindowStyle()) { - } else { + if (!isCustomWindowStyle()) { // m_pButtonMain->setProperty("theme", "light"); QLinearGradient gradient(mainPanel->rect().topLeft(), QPoint(mainPanel->rect().left(), 29)); gradient.setColorAt(0, QColor(0xeee)); @@ -457,17 +453,11 @@ void CMainWindow::toggleButtonMain(bool toggle, bool delay) { auto _toggle = [=] (bool state) { if (m_pTabs->isActiveWidget() == state) { - if ( state ) { - m_pButtonMain->setProperty("class", "active"); - m_pTabs->activate(false); - m_pMainWidget->setHidden(false); - } else { - m_pButtonMain->setProperty("class", "normal"); - m_pTabs->activate(true); - m_pMainWidget->setHidden(true); + m_pButtonMain->setProperty("class", state ? "active" : "normal"); + m_pTabs->activate(!state); + m_pMainWidget->setHidden(!state); + if (!state) m_pTabs->setFocusedView(); - } - onTabChanged(m_pTabs->currentIndex()); } }; @@ -617,8 +607,7 @@ int CMainWindow::trySaveDocument(int index) toggleButtonMain(false); m_pTabs->setCurrentIndex(index); - modal_res = CMessage::showMessage(TOP_NATIVE_WINDOW_HANDLE, - getSaveMessage().arg(m_pTabs->titleByIndex(index)), + modal_res = CMessage::showMessage(this, getSaveMessage().arg(m_pTabs->titleByIndex(index)), MsgType::MSG_WARN, MsgBtns::mbYesDefNoCancel); switch (modal_res) { case MODAL_RESULT_NO: break; @@ -683,7 +672,7 @@ void CMainWindow::doOpenLocalFile(COpenOptions& opts) if (!info.isFile()) { return; } if (!info.isReadable()) { QTimer::singleShot(0, this, [=] { - CMessage::error(TOP_NATIVE_WINDOW_HANDLE, QObject::tr("Access to file '%1' is denied!").arg(opts.url)); + CMessage::error(this, QObject::tr("Access to file '%1' is denied!").arg(opts.url)); }); return; } @@ -694,7 +683,7 @@ void CMainWindow::doOpenLocalFile(COpenOptions& opts) } else if (result == -255) { QTimer::singleShot(0, this, [=] { - CMessage::error(TOP_NATIVE_WINDOW_HANDLE, tr("File format not supported.")); + CMessage::error(this, tr("File format not supported.")); }); } bringToTop(); @@ -718,8 +707,7 @@ void CMainWindow::onLocalFileRecent(const COpenOptions& opts) if ( !match.hasMatch() ) { QFileInfo _info(opts.url); if ( opts.srctype != etRecoveryFile && !_info.exists() ) { - int modal_res = CMessage::showMessage(TOP_NATIVE_WINDOW_HANDLE, - tr("%1 doesn't exists!
Remove file from the list?").arg(_info.fileName()), + int modal_res = CMessage::showMessage(this, tr("%1 doesn't exists!
Remove file from the list?").arg(_info.fileName()), MsgType::MSG_WARN, MsgBtns::mbYesDefNo); if (modal_res == MODAL_RESULT_YES) { AscAppManager::sendCommandTo(SEND_TO_ALL_START_PAGE, "file:skip", QString::number(opts.id)); @@ -735,7 +723,7 @@ void CMainWindow::onLocalFileRecent(const COpenOptions& opts) toggleButtonMain(false); } else if (result == -255) { - CMessage::error(TOP_NATIVE_WINDOW_HANDLE, tr("File format not supported.")); + CMessage::error(this, tr("File format not supported.")); } } @@ -779,7 +767,7 @@ void CMainWindow::onFileLocation(int uid, QString param) // else { // } } else { - CMessage::info(TOP_NATIVE_WINDOW_HANDLE, tr("Document must be saved firstly.")); + CMessage::info(this, tr("Document must be saved firstly.")); } } else { QRegularExpression _re("^((?:https?:\\/{2})?[^\\s\\/]+)", QRegularExpression::CaseInsensitiveOption); @@ -866,7 +854,9 @@ void CMainWindow::onDocumentName(void * data) } void CMainWindow::onEditorConfig(int, std::wstring cfg) -{} +{ + Q_UNUSED(cfg) +} void CMainWindow::onWebAppsFeatures(int id, std::wstring opts) { @@ -918,8 +908,7 @@ void CMainWindow::onDocumentSave(int id, bool cancel) void CMainWindow::onDocumentSaveInnerRequest(int id) { - int modal_res = CMessage::showMessage(TOP_NATIVE_WINDOW_HANDLE, - tr("Document must be saved to continue.
Save the document?"), + int modal_res = CMessage::showMessage(this, tr("Document must be saved to continue.
Save the document?"), MsgType::MSG_CONFIRM, MsgBtns::mbYesDefNo); CAscEditorSaveQuestion * pData = new CAscEditorSaveQuestion; pData->put_Value(modal_res == MODAL_RESULT_YES); @@ -1026,6 +1015,7 @@ void CMainWindow::goStart() void CMainWindow::onDocumentPrint(void * opts) { + Q_UNUSED(opts) #ifdef __OS_WIN_XP if (QPrinterInfo::availablePrinterNames().size() == 0) { CMessage::info(TOP_NATIVE_WINDOW_HANDLE, tr("There are no printers available")); @@ -1230,9 +1220,9 @@ void CMainWindow::onKeyDown(void * eventData) EditorJSVariables::setVariable("helpUrl", _dir + "/apps"); EditorJSVariables::apply(); - CMessage::error(TOP_NATIVE_WINDOW_HANDLE, "Successfully"); + CMessage::error(this, "Successfully"); } else { - CMessage::error(TOP_NATIVE_WINDOW_HANDLE, "Failed"); + CMessage::error(this, "Failed"); } } } diff --git a/win-linux/src/windows/platform_linux/cwindowplatform.cpp b/win-linux/src/windows/platform_linux/cwindowplatform.cpp index 380f38cb6..ec100397f 100644 --- a/win-linux/src/windows/platform_linux/cwindowplatform.cpp +++ b/win-linux/src/windows/platform_linux/cwindowplatform.cpp @@ -93,12 +93,8 @@ void CWindowPlatform::setWindowColors(const QColor& background, const QColor& bo void CWindowPlatform::adjustGeometry() { - if (!isMaximized()) { - const int border = int(CX11Decoration::customWindowBorderWith() * m_dpiRatio); - setContentsMargins(border, border, border, border); - } else { - setContentsMargins(0, 0, 0, 0); - } + int border = isMaximized() ? 0 : qRound(CX11Decoration::customWindowBorderWith() * m_dpiRatio); + setContentsMargins(border, border, border, border); } /** Protected **/ From 65e8a33fd953b0c4fb5032bb47c781d0729512d8 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Sun, 2 Jul 2023 16:42:26 +0300 Subject: [PATCH 084/298] [win-linux] refactoring ctabbar.cpp --- win-linux/src/components/ctabbar.cpp | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/win-linux/src/components/ctabbar.cpp b/win-linux/src/components/ctabbar.cpp index 8f0ce9aff..6e0626c87 100644 --- a/win-linux/src/components/ctabbar.cpp +++ b/win-linux/src/components/ctabbar.cpp @@ -689,11 +689,7 @@ void CTabBar::removeTab(int index) d->recalcWidth(); } else { const int initialMaxIndex = d->tabList.size(); // max index before deletion - if (index < initialMaxIndex) { - d->onCurrentChanged(index); - } else { - d->onCurrentChanged(initialMaxIndex - 1); - } + d->onCurrentChanged(index < initialMaxIndex ? index : initialMaxIndex - 1); } } else { d->onCurrentChanged(d->currentIndex - 1); @@ -703,11 +699,7 @@ void CTabBar::removeTab(int index) d->recalcWidth(); } else { const int initialMaxIndex = d->tabList.size(); // max index before deletion - if (index < initialMaxIndex) { - d->onCurrentChanged(index); - } else { - d->onCurrentChanged(-1); - } + d->onCurrentChanged(index < initialMaxIndex ? index : -1); } } } From 3c87fbfc869e26d99d316185954560a5163e39d5 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Mon, 3 Jul 2023 14:13:22 +0300 Subject: [PATCH 085/298] [win-linux] add scale 225% --- win-linux/res/styles/download.qss | 8 +++++++ win-linux/res/styles/editor.qss | 13 +++++++++++ win-linux/res/styles/message.qss | 12 ++++++++++ win-linux/res/styles/styles@2.25x.qss | 23 +++++++++++++++++++ win-linux/res/styles/tabbar.qss | 8 +++++++ win-linux/resources.qrc | 3 +++ .../src/cascapplicationmanagerwrapper.cpp | 6 ++++- win-linux/src/cascapplicationmanagerwrapper.h | 1 + win-linux/src/utils.cpp | 5 +++- 9 files changed, 77 insertions(+), 2 deletions(-) create mode 100644 win-linux/res/styles/styles@2.25x.qss diff --git a/win-linux/res/styles/download.qss b/win-linux/res/styles/download.qss index 65bfd8437..98e2caf0d 100644 --- a/win-linux/res/styles/download.qss +++ b/win-linux/res/styles/download.qss @@ -80,6 +80,14 @@ CDownloadWidget[zoom="2x"] QLabel#labelName {font-size: 32px;} CDownloadWidget[zoom="2x"] QScrollBar:vertical {width: 20px;} CDownloadWidget[zoom="2x"] QScrollBar::handle:vertical {min-height: 50px; border-radius: 6px;} +/* 2.25x */ +CDownloadWidget[zoom="2.25x"] QPushButton#buttonCancel {padding-left: 14px; padding-right: 14px; min-height: 50px; font-size: 27px;} +CDownloadWidget[zoom="2.25x"] QProgressBar {border-radius: 5px; max-height: 11px; margin-right: 23px; margin-top: 2px;} +CDownloadWidget[zoom="2.25x"] QProgressBar::chunk {border-radius: 5px;} +CDownloadWidget[zoom="2.25x"] QLabel#labelName {font-size: 36px;} +CDownloadWidget[zoom="2.25x"] QScrollBar:vertical {width: 23px;} +CDownloadWidget[zoom="2.25x"] QScrollBar::handle:vertical {min-height: 56px; border-radius: 7px;} + /* 2.5x */ CDownloadWidget[zoom="2.5x"] QPushButton#buttonCancel {padding-left: 15px; padding-right: 15px; min-height: 55px; font-size: 30px;} CDownloadWidget[zoom="2.5x"] QProgressBar {border-radius: 5px; max-height: 13px; margin-right: 25px; margin-top: 3px;} diff --git a/win-linux/res/styles/editor.qss b/win-linux/res/styles/editor.qss index 846cf471a..4b4a9a037 100644 --- a/win-linux/res/styles/editor.qss +++ b/win-linux/res/styles/editor.qss @@ -99,6 +99,19 @@ QPushButton#toolButtonClose:pressed {background-color: #d75050;} font-size: 24px; } +/* 2.25x */ +#mainPanel[zoom="2.25x"] #toolButtonMinimize, +#mainPanel[zoom="2.25x"] #toolButtonClose, +#mainPanel[zoom="2.25x"] #toolButtonMaximize +{ + padding: 11px 27px 16px; +} +#mainPanel[zoom="2.25x"] #iconuser, +#mainPanel[zoom="2.25x"] #labelTitle +{ + font-size: 27px; +} + /* 2.5x */ #mainPanel[zoom="2.5x"] #toolButtonMinimize, #mainPanel[zoom="2.5x"] #toolButtonClose, diff --git a/win-linux/res/styles/message.qss b/win-linux/res/styles/message.qss index 8909373a8..afebf8d3f 100644 --- a/win-linux/res/styles/message.qss +++ b/win-linux/res/styles/message.qss @@ -27,6 +27,9 @@ QLabel[class=msg-icon][type=msg-confirm] { #messageBody[scaling="2x"] QLabel[class=msg-report] { font-size: 22px; } +#messageBody[scaling="2.25x"] QLabel[class=msg-report] { + font-size: 25px; +} #messageBody[scaling="2.5x"] QLabel[class=msg-report] { font-size: 28px; } @@ -68,6 +71,11 @@ QLabel[class=msg-icon][type=msg-confirm] { height: 38px; font-size: 19px; } +#messageBody[scaling="2.25x"] QPushButton { + padding:0 45px; + height: 50px; + font-size: 25px; +} #messageBody[scaling="2.5x"] QPushButton { padding:0 50px; height: 55px; @@ -118,6 +126,7 @@ QPushButton { border: 1px solid rgba(255,255,255,.8); } +#messageBody[uitheme=theme-dark][scaling="2.25x"] QPushButton, #messageBody[uitheme=theme-dark][scaling="2x"] QPushButton, #messageBody[uitheme=theme-dark][scaling="1.75x"] QPushButton, #messageBody[uitheme=theme-dark][scaling="1.5x"] QPushButton @@ -150,6 +159,7 @@ QPushButton { #messageBody[uitheme=theme-dark][scaling="2x"] QPushButton:focus { border-width: 4px; } +#messageBody[uitheme=theme-dark][scaling="2.25x"] QPushButton:focus, #messageBody[uitheme=theme-dark][scaling="2.5x"] QPushButton:focus { border-width: 5px; } @@ -189,6 +199,7 @@ QPushButton { border: 1px solid #e8e8e8; } +#messageBody[uitheme=theme-contrast-dark][scaling="2.25x"] QPushButton, #messageBody[uitheme=theme-contrast-dark][scaling="2x"] QPushButton, #messageBody[uitheme=theme-contrast-dark][scaling="1.75x"] QPushButton, #messageBody[uitheme=theme-contrast-dark][scaling="1.5x"] QPushButton @@ -221,6 +232,7 @@ QPushButton { #messageBody[uitheme=theme-contrast-dark][scaling="2x"] QPushButton:focus { border-width: 4px; } +#messageBody[uitheme=theme-contrast-dark][scaling="2.25x"] QPushButton:focus, #messageBody[uitheme=theme-contrast-dark][scaling="2.5x"] QPushButton:focus { border-width: 5px; } diff --git a/win-linux/res/styles/styles@2.25x.qss b/win-linux/res/styles/styles@2.25x.qss new file mode 100644 index 000000000..40d69e067 --- /dev/null +++ b/win-linux/res/styles/styles@2.25x.qss @@ -0,0 +1,23 @@ +#CX11Caption {min-width: 394px;} +#labelAppTitle {margin-top: -5px; font-size: 25px;} + +QPushButton {border: 2px solid #cbcbcb; padding: 0 45px; height: 50px; border-radius: 5px; font-size: 25px;} + +QPushButton#toolButtonMaximize, +QPushButton#toolButtonMinimize, + QPushButton#toolButtonClose {padding: 11px 27px 16px;} + +QPushButton#toolButtonMain {font-size: 23px; border-right-width: 2px;} +QPushButton#toolButtonMain[theme=light] {border-width: 2px; border-bottom: 0 none;} +QPushButton#toolButtonMain[class=normal], + QPushButton#toolButtonMain[class=normal]:hover {border-bottom-width: 2px;} + +QPushButton#toolButtonDownload {max-width: 90px; width: 90px; max-height: 63px; height: 63px;} + +/* ToolTip*/ + +#CToolTip>QLabel {min-height: 59px; margin: 0px; padding-left: 23px; padding-right: 23px; + font-size: 25px; border: 2px solid #c0c0c0; border-radius: 10px;} + +#mainPanel[uitheme=theme-dark] #CToolTip>QLabel {border: 2px solid #666666;} +#mainPanel[uitheme=theme-contrast-dark] #CToolTip>QLabel {border: 2px solid #696969;} diff --git a/win-linux/res/styles/tabbar.qss b/win-linux/res/styles/tabbar.qss index 3160f399a..5f126b67b 100644 --- a/win-linux/res/styles/tabbar.qss +++ b/win-linux/res/styles/tabbar.qss @@ -176,6 +176,14 @@ Tab #tabButton {width: 16px; max-width: 16px; max-height: 16px; border-width: 2p #mainPanel[zoom="2x"] Tab #tabText {font-size: 20px;} #mainPanel[zoom="2x"] Tab #tabButton {width: 32px; max-width: 32px; max-height: 32px; border-width: 2px;} +/* 2.25x */ +#mainPanel[zoom="2.25x"] CTabBar #tabScroll {min-width: 72px; max-width: 72px;} +#mainPanel[zoom="2.25x"] CTabBar #tabScroll>QToolButton {max-height: 63px;} +#mainPanel[zoom="2.25x"] Tab {min-width: 92px; max-width: 304px; width: 304px; height: 63px; border-right-width: 2px;} +#mainPanel[zoom="2.25x"] Tab #tabIcon {padding-left: 9px; padding-right: 9px; min-width: 36px; min-height: 36px; max-width: 36px; max-height: 36px;} +#mainPanel[zoom="2.25x"] Tab #tabText {font-size: 23px;} +#mainPanel[zoom="2.25x"] Tab #tabButton {width: 36px; max-width: 36px; max-height: 36px; border-width: 2px;} + /* 2.5x */ #mainPanel[zoom="2.5x"] CTabBar #tabScroll {min-width: 80px; max-width: 80px;} #mainPanel[zoom="2.5x"] CTabBar #tabScroll>QToolButton {max-height: 70px;} diff --git a/win-linux/resources.qrc b/win-linux/resources.qrc index 0b62953b0..240415981 100644 --- a/win-linux/resources.qrc +++ b/win-linux/resources.qrc @@ -98,6 +98,9 @@ res/styles/styles@2x.qss + + res/styles/styles@2.25x.qss + res/styles/styles@2.5x.qss diff --git a/win-linux/src/cascapplicationmanagerwrapper.cpp b/win-linux/src/cascapplicationmanagerwrapper.cpp index 934386aaf..cce1218e0 100644 --- a/win-linux/src/cascapplicationmanagerwrapper.cpp +++ b/win-linux/src/cascapplicationmanagerwrapper.cpp @@ -1061,6 +1061,7 @@ void CAscApplicationManagerWrapper::initializeApp() _app.addStylesheets(CScalingFactor::SCALING_FACTOR_1_5, ":styles@1.5x/styles.qss"); _app.addStylesheets(CScalingFactor::SCALING_FACTOR_1_75, ":styles@1.75x/styles.qss"); _app.addStylesheets(CScalingFactor::SCALING_FACTOR_2, ":styles@2x/styles.qss"); + _app.addStylesheets(CScalingFactor::SCALING_FACTOR_2_25, ":styles@2.25x/styles.qss"); _app.addStylesheets(CScalingFactor::SCALING_FACTOR_2_5, ":styles@2.5x/styles.qss"); _app.addStylesheets(CScalingFactor::SCALING_FACTOR_3, ":styles@3x/styles.qss"); _app.addStylesheets(CScalingFactor::SCALING_FACTOR_3_5, ":styles@3.5x/styles.qss"); @@ -1489,9 +1490,12 @@ QString CAscApplicationManagerWrapper::getWindowStylesheets(double dpifactor) if ( dpifactor > 2.5 ) return getWindowStylesheets(CScalingFactor::SCALING_FACTOR_3); else - if ( dpifactor > 2.0 ) + if ( dpifactor > 2.25 ) return getWindowStylesheets(CScalingFactor::SCALING_FACTOR_2_5); else + if ( dpifactor > 2.0 ) + return getWindowStylesheets(CScalingFactor::SCALING_FACTOR_2_25); + else if ( dpifactor > 1.75 ) return getWindowStylesheets(CScalingFactor::SCALING_FACTOR_2); else diff --git a/win-linux/src/cascapplicationmanagerwrapper.h b/win-linux/src/cascapplicationmanagerwrapper.h index 52affd405..c8e7503f0 100644 --- a/win-linux/src/cascapplicationmanagerwrapper.h +++ b/win-linux/src/cascapplicationmanagerwrapper.h @@ -83,6 +83,7 @@ enum class CScalingFactor SCALING_FACTOR_1_5, SCALING_FACTOR_1_75, SCALING_FACTOR_2, + SCALING_FACTOR_2_25, SCALING_FACTOR_2_5, SCALING_FACTOR_3, SCALING_FACTOR_3_5, diff --git a/win-linux/src/utils.cpp b/win-linux/src/utils.cpp index ce1a38044..9517514dc 100644 --- a/win-linux/src/utils.cpp +++ b/win-linux/src/utils.cpp @@ -212,6 +212,7 @@ namespace Scaling { case 150: return L"1.5"; case 175: return L"1.75"; case 200: return L"2"; + case 225: return L"2.25"; case 250: return L"2.5"; case 300: return L"3"; case 350: return L"3.5"; @@ -229,6 +230,7 @@ namespace Scaling { if ( value == L"1.5" ) return "150"; else if ( value == L"1.75" ) return "175"; else if ( value == L"2" ) return "200"; else + if ( value == L"2.25" ) return "225"; else if ( value == L"2.5" ) return "250"; else if ( value == L"3" ) return "300"; else if ( value == L"3.5" ) return "350"; else @@ -515,7 +517,8 @@ inline double choose_scaling(double s) else if ( s > 3.5 ) return 4; else if ( s > 3 ) return 3.5; else if ( s > 2.5 ) return 3; - else if ( s > 2 ) return 2.5; + else if ( s > 2.25 ) return 2.5; + else if ( s > 2 ) return 2.25; else if ( s > 1.75 ) return 2; else if ( s > 1.5 ) return 1.75; else if ( s > 1.25 ) return 1.5; From 064f169b6558fa421f72463c06abe024efd5917f Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Tue, 4 Jul 2023 00:05:24 +0300 Subject: [PATCH 086/298] [win-linux] reduce the tab moving animation time --- win-linux/src/components/ctabbar.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/win-linux/src/components/ctabbar.cpp b/win-linux/src/components/ctabbar.cpp index 6e0626c87..2428cdb31 100644 --- a/win-linux/src/components/ctabbar.cpp +++ b/win-linux/src/components/ctabbar.cpp @@ -45,7 +45,7 @@ #define ANIMATION_DEFAULT_MS 0 #define ANIMATION_SCROLL_MS 60 -#define ANIMATION_MOVE_TAB_MS 500 +#define ANIMATION_MOVE_TAB_MS 350 #define TABSPACING 0 #define DEFAULT_ICON_SIZE QSize(16,16) #define _tabRect(i) tabList[i]->geometry() From fcaf4cf8629a2660b785600eac328a5c550a311d Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Tue, 4 Jul 2023 00:23:18 +0300 Subject: [PATCH 087/298] [win-linux] small refactoring CTabBar --- win-linux/src/components/ctabbar.cpp | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/win-linux/src/components/ctabbar.cpp b/win-linux/src/components/ctabbar.cpp index 2428cdb31..6ce379475 100644 --- a/win-linux/src/components/ctabbar.cpp +++ b/win-linux/src/components/ctabbar.cpp @@ -50,6 +50,7 @@ #define DEFAULT_ICON_SIZE QSize(16,16) #define _tabRect(i) tabList[i]->geometry() #define tabIndex(i) tabList[i]->index +#define signum(a) (a ? 1 : -1); class Tab : public QFrame @@ -264,8 +265,7 @@ int CTabBar::CTabBarPrivate::getIntersectedOffset(int index) QRect tabRect = _tabRect(index); if (!tabArea->rect().contains(tabRect) && tabArea->rect().intersects(tabRect)) { QRect interRect = tabArea->rect().intersected(tabRect); - int sign = (interRect.x() == 0) ? -1 : 1; - return sign * (cellWidth() - interRect.width()); + return (cellWidth() - interRect.width()) * signum(interRect.x() != 0); } } return 0; @@ -295,8 +295,7 @@ int CTabBar::CTabBarPrivate::getLayoutsIntersectedIndex(Tab *tab, int &offsetX) for (int i = 0; i < tabLayouts.size(); i++) { if (i != tab->index && tabRect.intersects(tabLayouts[i])) { QRect interRect = tabRect.intersected(tabLayouts[i]); - int sign = (tabRect.x() < tabLayouts[i].x()) ? -1 : 1; - offsetX = sign * interRect.width(); + offsetX = interRect.width() * signum(tabRect.x() >= tabLayouts[i].x()); return i; } } @@ -643,9 +642,7 @@ void CTabBar::moveTab(int from, int to) int from_index = d->tabIndex(from); d->tabIndex(from) = d->tabIndex(to); d->tabIndex(to) = from_index; - Tab *from_tab = d->tabList[from]; - d->tabList[from] = d->tabList[to]; - d->tabList[to] = from_tab; + std::swap(d->tabList[from], d->tabList[to]); d->scrollTo(to); emit tabMoved(from, to); } @@ -967,7 +964,7 @@ bool CTabBar::eventFilter(QObject *watched, QEvent *event) int offsetX; const int interIndex = d->getLayoutsIntersectedIndex(d->movedTab, offsetX); if (/*interIndex != -1 &&*/ d->movedTab->index != interIndex && offsetX != 0) { - const int sign = (offsetX >= 0) ? 1 : -1; + const int sign = signum(offsetX > 0); if (sign * offsetX > d->movedTab->width()/2) { if (d->indexIsValid(interIndex + sign)) { int delta = d->tabLayouts[interIndex + sign].x() - d->_tabRect(interIndex).x(); From 3adc6d787a08e019776e16cbdf8e7d0fd80cbad3 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Tue, 4 Jul 2023 00:24:30 +0300 Subject: [PATCH 088/298] [win-linux] comment out unused code CTabBar --- win-linux/src/components/ctabbar.cpp | 60 ++++++++++++++-------------- win-linux/src/components/ctabbar.h | 4 +- 2 files changed, 32 insertions(+), 32 deletions(-) diff --git a/win-linux/src/components/ctabbar.cpp b/win-linux/src/components/ctabbar.cpp index 6ce379475..768ea163f 100644 --- a/win-linux/src/components/ctabbar.cpp +++ b/win-linux/src/components/ctabbar.cpp @@ -628,24 +628,24 @@ int CTabBar::insertTab(int index, const QIcon &icon, const QString &text) return actual_index; } -void CTabBar::moveTab(int from, int to) -{ - while (d->animationInProgress) - qApp->processEvents(); - - if (from == to || !d->indexIsValid(from) || !d->indexIsValid(to)) - return; - - int posX = d->_tabRect(from).x(); - d->tabList[from]->move(d->_tabRect(to).x(), 0); - d->tabList[to]->move(posX, 0); - int from_index = d->tabIndex(from); - d->tabIndex(from) = d->tabIndex(to); - d->tabIndex(to) = from_index; - std::swap(d->tabList[from], d->tabList[to]); - d->scrollTo(to); - emit tabMoved(from, to); -} +//void CTabBar::moveTab(int from, int to) +//{ +// while (d->animationInProgress) +// qApp->processEvents(); + +// if (from == to || !d->indexIsValid(from) || !d->indexIsValid(to)) +// return; + +// int posX = d->_tabRect(from).x(); +// d->tabList[from]->move(d->_tabRect(to).x(), 0); +// d->tabList[to]->move(posX, 0); +// int from_index = d->tabIndex(from); +// d->tabIndex(from) = d->tabIndex(to); +// d->tabIndex(to) = from_index; +// std::swap(d->tabList[from], d->tabList[to]); +// d->scrollTo(to); +// emit tabMoved(from, to); +//} void CTabBar::removeTab(int index) { @@ -1063,18 +1063,18 @@ bool CTabBar::eventFilter(QObject *watched, QEvent *event) } break; } - case QEvent::MouseButtonDblClick: { - QMouseEvent* mouse_event = dynamic_cast(event); - if (mouse_event->button() == Qt::LeftButton) { - for (int i = 0; i < d->tabList.size(); i++) { - if (d->tabList[i]->underMouse()) { - emit tabBarDoubleClicked(i); - return true; - } - } - } - break; - } +// case QEvent::MouseButtonDblClick: { +// QMouseEvent* mouse_event = dynamic_cast(event); +// if (mouse_event->button() == Qt::LeftButton) { +// for (int i = 0; i < d->tabList.size(); i++) { +// if (d->tabList[i]->underMouse()) { +// emit tabBarDoubleClicked(i); +// return true; +// } +// } +// } +// break; +// } default: break; } diff --git a/win-linux/src/components/ctabbar.h b/win-linux/src/components/ctabbar.h index 76f415de9..7075fa4aa 100644 --- a/win-linux/src/components/ctabbar.h +++ b/win-linux/src/components/ctabbar.h @@ -56,7 +56,7 @@ class CTabBar : public QFrame QSize iconSize() const; int insertTab(int index, const QString &text); int insertTab(int index, const QIcon &icon, const QString &text); - void moveTab(int from, int to); +// void moveTab(int from, int to); void removeTab(int index); void setElideMode(Qt::TextElideMode mode); void setIconSize(const QSize &size); @@ -89,7 +89,7 @@ class CTabBar : public QFrame void currentChanged(int index); void onCurrentChangedByWhell(int index); void tabBarClicked(int index); - void tabBarDoubleClicked(int index); +// void tabBarDoubleClicked(int index); void tabCloseRequested(int index); void tabMoved(int from, int to); void tabUndock(int index, bool &accepted); From 390c63d22167932a6e27e46405dbdbba97db8f3f Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Tue, 4 Jul 2023 00:26:37 +0300 Subject: [PATCH 089/298] [win-linux] refactoring CTabBarPrivate::reorderIndexes --- win-linux/src/components/ctabbar.cpp | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/win-linux/src/components/ctabbar.cpp b/win-linux/src/components/ctabbar.cpp index 768ea163f..68587c1de 100644 --- a/win-linux/src/components/ctabbar.cpp +++ b/win-linux/src/components/ctabbar.cpp @@ -438,17 +438,13 @@ void CTabBar::CTabBarPrivate::changeScrollerState() void CTabBar::CTabBarPrivate::reorderIndexes() { - QVector dupTabList = tabList; - for (int i = 0; i < tabList.size(); i++) { - if (tabIndex(i) != i) { - for (int j = 0; j < tabList.size(); j++) { - if (j != i && dupTabList[j]->index == i) { - tabList[i] = dupTabList[j]; - break; - } - } - } + const int size = tabList.size(); + QVector dupTabList(size, nullptr); + for (int i = 0; i < size; i++) { + Q_ASSERT(tabIndex(i) > -1 && tabIndex(i) < size); + dupTabList[tabIndex(i)] = tabList[i]; } + tabList = std::move(dupTabList); } void CTabBar::CTabBarPrivate::recalcWidth() From ddc37d73d04bfa69fe460db7381b45a16752a9ba Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Tue, 4 Jul 2023 00:31:26 +0300 Subject: [PATCH 090/298] [win-linux] refactoring CTabBar tab moving --- win-linux/src/components/ctabbar.cpp | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/win-linux/src/components/ctabbar.cpp b/win-linux/src/components/ctabbar.cpp index 68587c1de..34e1be2c7 100644 --- a/win-linux/src/components/ctabbar.cpp +++ b/win-linux/src/components/ctabbar.cpp @@ -962,16 +962,17 @@ bool CTabBar::eventFilter(QObject *watched, QEvent *event) if (/*interIndex != -1 &&*/ d->movedTab->index != interIndex && offsetX != 0) { const int sign = signum(offsetX > 0); if (sign * offsetX > d->movedTab->width()/2) { - if (d->indexIsValid(interIndex + sign)) { - int delta = d->tabLayouts[interIndex + sign].x() - d->_tabRect(interIndex).x(); - d->slide(interIndex, interIndex, delta, ANIMATION_MOVE_TAB_MS); - } - d->tabIndex(interIndex) += sign; - d->movedTab->index = d->tabIndex(interIndex) - sign; - d->currentIndex = d->movedTab->index; - emit tabMoved(d->currentIndex, d->tabIndex(interIndex)); - emit currentChanged(d->currentIndex); - d->reorderIndexes(); + const int destIndex = interIndex + sign; + Q_ASSERT(destIndex > -1 && destIndex < d->tabList.size()); + + int delta = d->tabLayouts[destIndex].x() - d->_tabRect(interIndex).x(); + d->slide(interIndex, interIndex, delta, ANIMATION_MOVE_TAB_MS); + d->movedTab->index = interIndex; + d->tabIndex(interIndex) = destIndex; + d->currentIndex = interIndex; + std::swap(d->tabList[interIndex], d->tabList[destIndex]); + emit tabMoved(interIndex, destIndex); + emit currentChanged(interIndex); } } if (!d->tabArea->rect().contains(me->pos()) && d->tabArea->rect().right() >= me->x()) { From c5f30e979c660ac86d35994690a7967ace1a6983 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Tue, 4 Jul 2023 00:32:59 +0300 Subject: [PATCH 091/298] [win-linux] fix CTabBar behavior when moving the mouse too fast --- win-linux/src/components/ctabbar.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/win-linux/src/components/ctabbar.cpp b/win-linux/src/components/ctabbar.cpp index 34e1be2c7..61d971cf2 100644 --- a/win-linux/src/components/ctabbar.cpp +++ b/win-linux/src/components/ctabbar.cpp @@ -956,7 +956,11 @@ bool CTabBar::eventFilter(QObject *watched, QEvent *event) QMouseEvent* me = dynamic_cast(event); if (me->buttons().testFlag(Qt::LeftButton)) { if (d->movedTab && !d->lock) { - d->movedTab->move(me->x() - d->movedTabPressPosX, 0); + int currPosX = d->movedTab->x() + d->movedTabPressPosX; + int diffX = me->x() - currPosX; + const int signDiffX = signum(diffX > 0); + currPosX += qMin(diffX * signDiffX, d->cellWidth()/3) * signDiffX; + d->movedTab->move(currPosX - d->movedTabPressPosX, 0); int offsetX; const int interIndex = d->getLayoutsIntersectedIndex(d->movedTab, offsetX); if (/*interIndex != -1 &&*/ d->movedTab->index != interIndex && offsetX != 0) { @@ -975,7 +979,7 @@ bool CTabBar::eventFilter(QObject *watched, QEvent *event) emit currentChanged(interIndex); } } - if (!d->tabArea->rect().contains(me->pos()) && d->tabArea->rect().right() >= me->x()) { + if (!d->tabArea->rect().contains(QPoint(currPosX, me->y())) && d->tabArea->rect().right() >= currPosX) { if (d->currentIndex != d->movedTabIndex) d->reorderIndexes(); bool accepted = false; From fcb3b7d2ab635975caf3f003ea18bdb565028389 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Tue, 4 Jul 2023 13:55:50 +0300 Subject: [PATCH 092/298] [win-linux] restrict movement of tabs --- win-linux/src/components/ctabbar.cpp | 40 +++++++++++++++------------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/win-linux/src/components/ctabbar.cpp b/win-linux/src/components/ctabbar.cpp index 61d971cf2..824940662 100644 --- a/win-linux/src/components/ctabbar.cpp +++ b/win-linux/src/components/ctabbar.cpp @@ -956,27 +956,29 @@ bool CTabBar::eventFilter(QObject *watched, QEvent *event) QMouseEvent* me = dynamic_cast(event); if (me->buttons().testFlag(Qt::LeftButton)) { if (d->movedTab && !d->lock) { - int currPosX = d->movedTab->x() + d->movedTabPressPosX; - int diffX = me->x() - currPosX; + int currPosX = d->movedTab->x(); + int diffX = me->x() - currPosX - d->movedTabPressPosX; const int signDiffX = signum(diffX > 0); currPosX += qMin(diffX * signDiffX, d->cellWidth()/3) * signDiffX; - d->movedTab->move(currPosX - d->movedTabPressPosX, 0); - int offsetX; - const int interIndex = d->getLayoutsIntersectedIndex(d->movedTab, offsetX); - if (/*interIndex != -1 &&*/ d->movedTab->index != interIndex && offsetX != 0) { - const int sign = signum(offsetX > 0); - if (sign * offsetX > d->movedTab->width()/2) { - const int destIndex = interIndex + sign; - Q_ASSERT(destIndex > -1 && destIndex < d->tabList.size()); - - int delta = d->tabLayouts[destIndex].x() - d->_tabRect(interIndex).x(); - d->slide(interIndex, interIndex, delta, ANIMATION_MOVE_TAB_MS); - d->movedTab->index = interIndex; - d->tabIndex(interIndex) = destIndex; - d->currentIndex = interIndex; - std::swap(d->tabList[interIndex], d->tabList[destIndex]); - emit tabMoved(interIndex, destIndex); - emit currentChanged(interIndex); + if (currPosX >= d->tabLayouts[0].x() && currPosX <= d->tabLayouts[d->tabLayouts.size() - 1].x()) { + d->movedTab->move(currPosX, 0); + int offsetX; + const int interIndex = d->getLayoutsIntersectedIndex(d->movedTab, offsetX); + if (/*interIndex != -1 &&*/ d->movedTab->index != interIndex && offsetX != 0) { + const int sign = signum(offsetX > 0); + if (sign * offsetX > d->movedTab->width()/2) { + const int destIndex = interIndex + sign; + Q_ASSERT(destIndex > -1 && destIndex < d->tabList.size()); + + int delta = d->tabLayouts[destIndex].x() - d->_tabRect(interIndex).x(); + d->slide(interIndex, interIndex, delta, ANIMATION_MOVE_TAB_MS); + d->movedTab->index = interIndex; + d->tabIndex(interIndex) = destIndex; + d->currentIndex = interIndex; + std::swap(d->tabList[interIndex], d->tabList[destIndex]); + emit tabMoved(interIndex, destIndex); + emit currentChanged(interIndex); + } } } if (!d->tabArea->rect().contains(QPoint(currPosX, me->y())) && d->tabArea->rect().right() >= currPosX) { From ccd7663b6db9472d33bfa8853ffabf71ac38fd97 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Tue, 4 Jul 2023 13:59:19 +0300 Subject: [PATCH 093/298] [win-linux] revert changes --- win-linux/src/components/ctabbar.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/win-linux/src/components/ctabbar.cpp b/win-linux/src/components/ctabbar.cpp index 824940662..da3a0edff 100644 --- a/win-linux/src/components/ctabbar.cpp +++ b/win-linux/src/components/ctabbar.cpp @@ -981,7 +981,7 @@ bool CTabBar::eventFilter(QObject *watched, QEvent *event) } } } - if (!d->tabArea->rect().contains(QPoint(currPosX, me->y())) && d->tabArea->rect().right() >= currPosX) { + if (!d->tabArea->rect().contains(me->pos()) && d->tabArea->rect().right() >= me->x()) { if (d->currentIndex != d->movedTabIndex) d->reorderIndexes(); bool accepted = false; From a13c3f8bef02da8fedf9da53157c8f5fdada33e9 Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Tue, 4 Jul 2023 21:51:21 +0300 Subject: [PATCH 094/298] [start page] support for 225% --- common/loginpage/src/panelsettings.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/loginpage/src/panelsettings.js b/common/loginpage/src/panelsettings.js index b7461d0dd..e7c65853a 100644 --- a/common/loginpage/src/panelsettings.js +++ b/common/loginpage/src/panelsettings.js @@ -603,7 +603,7 @@ this.view.render(); - const _scaling = [100, 125, 150, 175, 200, 250, 300, 350, 400, 450, 500]; + const _scaling = [100, 125, 150, 175, 200, 225, 250, 300, 350, 400, 450, 500]; let _scaling_items = ''; _scaling.forEach(val => _scaling_items += ``); $('#opts-ui-scaling .combobox', this.view.$panel).append($(_scaling_items)); From a7059a4b16a672786754994e44e012c6e8ee3734 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Wed, 5 Jul 2023 12:58:43 +0300 Subject: [PATCH 095/298] [win] debug --- win-linux/src/windows/cmainwindow.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/win-linux/src/windows/cmainwindow.cpp b/win-linux/src/windows/cmainwindow.cpp index bd80de125..d39b90cbb 100644 --- a/win-linux/src/windows/cmainwindow.cpp +++ b/win-linux/src/windows/cmainwindow.cpp @@ -1018,7 +1018,7 @@ void CMainWindow::onDocumentPrint(void * opts) Q_UNUSED(opts) #ifdef __OS_WIN_XP if (QPrinterInfo::availablePrinterNames().size() == 0) { - CMessage::info(TOP_NATIVE_WINDOW_HANDLE, tr("There are no printers available")); + CMessage::info(this, tr("There are no printers available")); return; } #endif From db97c7a571805d60e98be46afa54a9d3d60a2f7a Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Wed, 5 Jul 2023 14:15:42 +0300 Subject: [PATCH 096/298] [start page] refactoring for fonts --- common/loginpage/src/index.html | 40 +------------------------- common/loginpage/src/index.html.deploy | 40 +------------------------- 2 files changed, 2 insertions(+), 78 deletions(-) diff --git a/common/loginpage/src/index.html b/common/loginpage/src/index.html index eedbf178a..a63da307a 100644 --- a/common/loginpage/src/index.html +++ b/common/loginpage/src/index.html @@ -63,45 +63,7 @@ @font-face { font-family: 'Open Sans'; - src: url('../../package/fonts/OpenSans-Bold.ttf'); - font-weight: bold; - } - @font-face { - font-family: 'Open Sans'; - src: url('../../package/fonts/OpenSans-BoldItalic.ttf'); - font-weight: normal; - font-style: italic; - } - @font-face { - font-family: 'Open Sans'; - src: url('../../package/fonts/OpenSans-ExtraBold.ttf'); - font-weight: bolder; - } - @font-face { - font-family: 'Open Sans'; - src: url('../../package/fonts/OpenSans-ExtraBoldItalic.ttf'); - font-weight: bolder; - font-style: italic; - } - @font-face { - font-family: 'Open Sans'; - src: url('../../package/fonts/OpenSans-Italic.ttf'); - font-style: italic; - } - @font-face { - font-family: 'Open Sans'; - src: url('../../package/fonts/OpenSans-Light.ttf'); - font-weight: 100; - } - @font-face { - font-family: 'Open Sans'; - src: url('../../package/fonts/OpenSans-LightItalic.ttf'); - font-weight: lighter; - font-style: italic; - } - @font-face { - font-family: 'Open Sans'; - src: url('../../package/fonts/OpenSans-Regular.ttf'); + src: url('../../../../core-fonts/opensans/OpenSans-Regular.ttf'); font-weight: normal; } diff --git a/common/loginpage/src/index.html.deploy b/common/loginpage/src/index.html.deploy index 15ddcbfc6..845f55c9a 100644 --- a/common/loginpage/src/index.html.deploy +++ b/common/loginpage/src/index.html.deploy @@ -50,45 +50,7 @@ @font-face { font-family: 'Open Sans'; - src: url('fonts/OpenSans-Bold.ttf'); - font-weight: bold; - } - @font-face { - font-family: 'Open Sans'; - src: url('fonts/OpenSans-BoldItalic.ttf'); - font-weight: normal; - font-style: italic; - } - @font-face { - font-family: 'Open Sans'; - src: url('fonts/OpenSans-ExtraBold.ttf'); - font-weight: bolder; - } - @font-face { - font-family: 'Open Sans'; - src: url('fonts/OpenSans-ExtraBoldItalic.ttf'); - font-weight: bolder; - font-style: italic; - } - @font-face { - font-family: 'Open Sans'; - src: url('fonts/OpenSans-Italic.ttf'); - font-style: italic; - } - @font-face { - font-family: 'Open Sans'; - src: url('fonts/OpenSans-Light.ttf'); - font-weight: 100; - } - @font-face { - font-family: 'Open Sans'; - src: url('fonts/OpenSans-LightItalic.ttf'); - font-weight: lighter; - font-style: italic; - } - @font-face { - font-family: 'Open Sans'; - src: url('fonts/OpenSans-Regular.ttf'); + src: url('fonts/opensans/OpenSans-Regular.ttf'); font-weight: normal; } From 683f2ab741b32503a857c8a7426a4897bcd090d9 Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Wed, 5 Jul 2023 15:07:02 +0300 Subject: [PATCH 097/298] [start page] fix stylesheets for scaling 225% --- common/loginpage/src/htmlutils.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/common/loginpage/src/htmlutils.js b/common/loginpage/src/htmlutils.js index 4bbaaf83f..2484e6697 100644 --- a/common/loginpage/src/htmlutils.js +++ b/common/loginpage/src/htmlutils.js @@ -7,11 +7,11 @@ function checkScaling() { screen and (min-resolution: 1.5dppx) and (max-resolution: 1.74dppx)`, 'pixel-ratio__1_75': `screen and (-webkit-min-device-pixel-ratio: 1.75) and (-webkit-max-device-pixel-ratio: 1.99), screen and (min-resolution: 1.75dppx) and (max-resolution: 1.99dppx)`, - 'pixel-ratio__2': `screen and (-webkit-min-device-pixel-ratio: 2) and (-webkit-max-device-pixel-ratio: 2.49), - screen and (min-resolution: 2dppx) and (max-resolution: 2.49dppx), - screen and (min-resolution: 192dpi) and (max-resolution: 239dpi)`, - 'pixel-ratio__2_5': `screen and (-webkit-min-device-pixel-ratio: 2.5), screen and (min-resolution: 2.5dppx), - screen and (min-resolution: 240dpi)`, + 'pixel-ratio__2': `screen and (-webkit-min-device-pixel-ratio: 2) and (-webkit-max-device-pixel-ratio: 2.24), + screen and (min-resolution: 2dppx) and (max-resolution: 2.24dppx), + screen and (min-resolution: 192dpi) and (max-resolution: 215dpi)`, + 'pixel-ratio__2_5': `screen and (-webkit-min-device-pixel-ratio: 2.25), screen and (min-resolution: 2.25dppx), + screen and (min-resolution: 216dpi)`, }; for (var c in matches) { From fdeaf8c43f84cf9e64a16375315603dd0e88715c Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Wed, 5 Jul 2023 22:42:28 +0300 Subject: [PATCH 098/298] [win] debug --- win-linux/src/main.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/win-linux/src/main.cpp b/win-linux/src/main.cpp index fb413e2bf..6a57cae37 100644 --- a/win-linux/src/main.cpp +++ b/win-linux/src/main.cpp @@ -140,7 +140,9 @@ int main( int argc, char *argv[] ) } app.setAttribute(Qt::AA_UseHighDpiPixmaps); +#if (QT_VERSION >= QT_VERSION_CHECK(5, 7, 0)) app.setAttribute(Qt::AA_UseStyleSheetPropagationInWidgetStyles); +#endif app.setStyle(QStyleFactory::create("Fusion")); /* the order is important */ From 36091cce8c64a2073bed8a4cc304463b69927c2a Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Fri, 7 Jul 2023 12:19:41 +0300 Subject: [PATCH 099/298] [win] refactoring cwindowplatform.cpp --- .../windows/platform_win/cwindowplatform.cpp | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/win-linux/src/windows/platform_win/cwindowplatform.cpp b/win-linux/src/windows/platform_win/cwindowplatform.cpp index cd0fee4b3..b0224f484 100644 --- a/win-linux/src/windows/platform_win/cwindowplatform.cpp +++ b/win-linux/src/windows/platform_win/cwindowplatform.cpp @@ -101,6 +101,19 @@ void CWindowPlatform::toggleResizeable() m_isResizeable = !m_isResizeable; } +void CWindowPlatform::bringToTop() +{ + if (IsIconic(m_hWnd)) { + ShowWindow(m_hWnd, SW_RESTORE); + } + WindowHelper::bringToTop(m_hWnd); +} + +void CWindowPlatform::show(bool maximized) +{ + maximized ? CWindowBase::showMaximized() : CWindowBase::show(); +} + void CWindowPlatform::adjustGeometry() { if (windowState().testFlag(Qt::WindowMinimized) || windowState().testFlag(Qt::WindowNoState)) { @@ -133,6 +146,8 @@ void CWindowPlatform::adjustGeometry() } } +/** Private **/ + bool CWindowPlatform::isTaskbarAutoHideOn() { APPBARDATA ABData; @@ -140,21 +155,6 @@ bool CWindowPlatform::isTaskbarAutoHideOn() return (SHAppBarMessage(ABM_GETSTATE, &ABData) & ABS_AUTOHIDE) != 0; } -void CWindowPlatform::bringToTop() -{ - if (IsIconic(m_hWnd)) { - ShowWindow(m_hWnd, SW_RESTORE); - } - WindowHelper::bringToTop(m_hWnd); -} - -void CWindowPlatform::show(bool maximized) -{ - maximized ? CWindowBase::showMaximized() : CWindowBase::show(); -} - -/** Private **/ - void CWindowPlatform::setResizeableAreaWidth(int width) { m_resAreaWidth = (width < 0) ? 0 : width; From 7857ad8e375a598ac97f0ca712da76e0288ca8b1 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Fri, 7 Jul 2023 12:20:43 +0300 Subject: [PATCH 100/298] [win] add session state handling --- .../src/windows/platform_win/cwindowplatform.cpp | 16 ++++++++++++++++ .../src/windows/platform_win/cwindowplatform.h | 6 +++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/win-linux/src/windows/platform_win/cwindowplatform.cpp b/win-linux/src/windows/platform_win/cwindowplatform.cpp index b0224f484..1ecd5820e 100644 --- a/win-linux/src/windows/platform_win/cwindowplatform.cpp +++ b/win-linux/src/windows/platform_win/cwindowplatform.cpp @@ -146,6 +146,13 @@ void CWindowPlatform::adjustGeometry() } } +/** Protected **/ + +bool CWindowPlatform::isSessionInProgress() +{ + return m_isSessionInProgress; +} + /** Private **/ bool CWindowPlatform::isTaskbarAutoHideOn() @@ -379,6 +386,15 @@ bool CWindowPlatform::nativeEvent(const QByteArray &eventType, void *message, lo case WM_ERASEBKGND: return true; + case WM_QUERYENDSESSION: + m_isSessionInProgress = false; + break; + + case WM_ENDSESSION: + if (!msg->wParam) + m_isSessionInProgress = true; + break; + default: break; } diff --git a/win-linux/src/windows/platform_win/cwindowplatform.h b/win-linux/src/windows/platform_win/cwindowplatform.h index e170bfb90..ac520a49d 100644 --- a/win-linux/src/windows/platform_win/cwindowplatform.h +++ b/win-linux/src/windows/platform_win/cwindowplatform.h @@ -52,6 +52,9 @@ class CWindowPlatform : public CWindowBase virtual void show(bool); virtual void adjustGeometry() final; +protected: + bool isSessionInProgress(); + private: bool isTaskbarAutoHideOn(); void setResizeableAreaWidth(int); @@ -64,7 +67,8 @@ class CWindowPlatform : public CWindowBase bool m_borderless, m_closed, m_isResizeable, - m_allowMaximize; + m_allowMaximize, + m_isSessionInProgress = true; }; #endif // CWINDOWPLATFORM_H From 7274efaa7503809f460ef2d15f19ecfe1e14bb3e Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Fri, 7 Jul 2023 12:21:24 +0300 Subject: [PATCH 101/298] [win-linux] add feature 47865 --- win-linux/src/windows/cmainwindow.cpp | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/win-linux/src/windows/cmainwindow.cpp b/win-linux/src/windows/cmainwindow.cpp index d39b90cbb..ac176825e 100644 --- a/win-linux/src/windows/cmainwindow.cpp +++ b/win-linux/src/windows/cmainwindow.cpp @@ -244,6 +244,31 @@ void CMainWindow::close() } else { onFullScreen(-1, false); +#ifdef _WIN32 + if (isSessionInProgress() && m_pTabs->count() > 1) { +#else + if (m_pTabs->count() > 1) { +#endif + GET_REGISTRY_USER(reg_user); + if (!reg_user.value("ignoreMsgAboutOpenTabs", false).toBool()) { + for (int i = 0; i < m_pTabs->count(); i++) { + if (!m_pTabs->modifiedByIndex(i)) { + bool dontAskAgain = false; + int res = CMessage::showMessage(this, tr("More than one document is open.
Close the window anyway?"), + MsgType::MSG_WARN, MsgBtns::mbYesDefNo, &dontAskAgain, + tr("Don't ask again.")); + if (dontAskAgain) + reg_user.setValue("ignoreMsgAboutOpenTabs", true); + if (res != MODAL_RESULT_YES) { + AscAppManager::cancelClose(); + return; + } + break; + } + } + } + } + for (int i(m_pTabs->count()); i-- > 0;) { if ( !m_pTabs->closedByIndex(i) ) { if ( !m_pTabs->isProcessed(i) ) { From 2a08895e00a41767e96e85af064a3dcaa86d16db Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Sat, 8 Jul 2023 22:15:49 +0300 Subject: [PATCH 102/298] [linux] adaptation for tar.xz archive --- win-linux/extras/update-daemon/src/classes/csvcmanager.cpp | 4 ++-- .../update-daemon/src/classes/platform_linux/cunzip.cpp | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/win-linux/extras/update-daemon/src/classes/csvcmanager.cpp b/win-linux/extras/update-daemon/src/classes/csvcmanager.cpp index 23e6ea4f1..facdb7317 100644 --- a/win-linux/extras/update-daemon/src/classes/csvcmanager.cpp +++ b/win-linux/extras/update-daemon/src/classes/csvcmanager.cpp @@ -62,8 +62,8 @@ # define APP_HELPER "/editors_helper" # define DAEMON_NAME "/updatesvc" # define SUBFOLDER "/desktopeditors" -# define ARCHIVE_EXT TEXT(".tar.gz") -# define ARCHIVE_PATTERN TEXT("*.tar.gz") +# define ARCHIVE_EXT TEXT(".tar.xz") +# define ARCHIVE_PATTERN TEXT("*.tar.xz") # define sleep(a) usleep(a*1000) #endif diff --git a/win-linux/extras/update-daemon/src/classes/platform_linux/cunzip.cpp b/win-linux/extras/update-daemon/src/classes/platform_linux/cunzip.cpp index 4b7bccabb..cd62e2560 100644 --- a/win-linux/extras/update-daemon/src/classes/platform_linux/cunzip.cpp +++ b/win-linux/extras/update-daemon/src/classes/platform_linux/cunzip.cpp @@ -47,7 +47,7 @@ int unzipArchive(const string &zipFilePath, const string &folderPath, std::atomi } struct archive *arch = archive_read_new(); - archive_read_support_filter_gzip(arch); + archive_read_support_filter_xz(arch); archive_read_support_format_tar(arch); if (archive_read_open_filename(arch, zipFilePath.c_str(), BLOCK_SIZE) != ARCHIVE_OK) { error = "Cannot open archive"; From aa8519843d3555242a42eb990ec2b2394ad94ed6 Mon Sep 17 00:00:00 2001 From: Oleg Korshul Date: Sun, 9 Jul 2023 23:22:55 +0300 Subject: [PATCH 103/298] Fix build --- win-linux/src/ccefeventstransformer.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/win-linux/src/ccefeventstransformer.h b/win-linux/src/ccefeventstransformer.h index 15caff975..d7b0dc3db 100644 --- a/win-linux/src/ccefeventstransformer.h +++ b/win-linux/src/ccefeventstransformer.h @@ -34,8 +34,7 @@ #define CCEFEVENTTRANSFORMER_H #include -#include "Word_Api/Editor_Api.h" - +#include "applicationmanager_events.h" class CCefEventsTransformer : public NSEditorApi::CAscCefMenuEventListener { From 96e836e5b699b832db6a691093204869c3d4ba6e Mon Sep 17 00:00:00 2001 From: "Oleg.Korshul" Date: Mon, 10 Jul 2023 01:29:48 +0500 Subject: [PATCH 104/298] Remove links to deleted files --- macos/ONLYOFFICE.xcodeproj/project.pbxproj | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/macos/ONLYOFFICE.xcodeproj/project.pbxproj b/macos/ONLYOFFICE.xcodeproj/project.pbxproj index 07c1d34a8..b61c2e7a1 100644 --- a/macos/ONLYOFFICE.xcodeproj/project.pbxproj +++ b/macos/ONLYOFFICE.xcodeproj/project.pbxproj @@ -845,7 +845,6 @@ FC5A2D3B1BAC075E001ACEB1 /* cefapplication.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cefapplication.h; sourceTree = ""; }; FC5A2D3C1BAC075E001ACEB1 /* cefview.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cefview.h; sourceTree = ""; }; FC5A2D3D1BAC075E001ACEB1 /* keyboardchecker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = keyboardchecker.h; sourceTree = ""; }; - FC5A2D3E1BAC075E001ACEB1 /* qascprinter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = qascprinter.h; sourceTree = ""; }; FC5A2D3F1BAC075E001ACEB1 /* spellchecker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = spellchecker.h; sourceTree = ""; }; FC5A2D411BAC075E001ACEB1 /* Array.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Array.h; sourceTree = ""; }; FC5A2D421BAC075E001ACEB1 /* ASCVariant.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ASCVariant.h; sourceTree = ""; }; @@ -861,11 +860,8 @@ FC5A2D4D1BAC075E001ACEB1 /* Directory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Directory.h; sourceTree = ""; }; FC5A2D4E1BAC075E001ACEB1 /* File.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = File.h; sourceTree = ""; }; FC5A2D4F1BAC075E001ACEB1 /* Path.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Path.h; sourceTree = ""; }; - FC5A2D501BAC075E001ACEB1 /* String.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = String.h; sourceTree = ""; }; FC5A2D511BAC075E001ACEB1 /* StringBuilder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StringBuilder.h; sourceTree = ""; }; FC5A2D521BAC075E001ACEB1 /* Types.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Types.h; sourceTree = ""; }; - FC5A2D541BAC075E001ACEB1 /* Editor_Api.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Editor_Api.h; sourceTree = ""; }; - FC5A2D551BAC075E001ACEB1 /* Editor_Defines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Editor_Defines.h; sourceTree = ""; }; FC64391921B52DAF00A25CD1 /* NSDictionary+Extensions.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSDictionary+Extensions.h"; sourceTree = ""; }; FC64391A21B52E5700A25CD1 /* NSDictionary+Extensions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSDictionary+Extensions.m"; sourceTree = ""; }; FC659BF71C75EE8B00C99776 /* ASCAboutController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ASCAboutController.h; sourceTree = ""; }; @@ -1283,7 +1279,6 @@ FC591593208DC6CE0006F664 /* xmlsec */, FC5A2D351BAC075E001ACEB1 /* ChromiumBasedEditors */, FC5A2D401BAC075E001ACEB1 /* common */, - FC5A2D531BAC075E001ACEB1 /* Word_Api */, ); name = include; sourceTree = ""; @@ -1327,7 +1322,6 @@ FC5A2D3C1BAC075E001ACEB1 /* cefview.h */, FC5A2D3D1BAC075E001ACEB1 /* keyboardchecker.h */, FCD65B931BDFAFCB008361F1 /* nsascprinter.h */, - FC5A2D3E1BAC075E001ACEB1 /* qascprinter.h */, FC5A2D3F1BAC075E001ACEB1 /* spellchecker.h */, ); path = include; @@ -1346,7 +1340,6 @@ FC5A2D4D1BAC075E001ACEB1 /* Directory.h */, FC5A2D4E1BAC075E001ACEB1 /* File.h */, FC5A2D4F1BAC075E001ACEB1 /* Path.h */, - FC5A2D501BAC075E001ACEB1 /* String.h */, FC5A2D511BAC075E001ACEB1 /* StringBuilder.h */, FC5A2D521BAC075E001ACEB1 /* Types.h */, ); @@ -1367,16 +1360,6 @@ path = CPEncodings; sourceTree = ""; }; - FC5A2D531BAC075E001ACEB1 /* Word_Api */ = { - isa = PBXGroup; - children = ( - FC5A2D541BAC075E001ACEB1 /* Editor_Api.h */, - FC5A2D551BAC075E001ACEB1 /* Editor_Defines.h */, - ); - name = Word_Api; - path = ../../core/DesktopEditor/Word_Api; - sourceTree = SOURCE_ROOT; - }; FC67182F1BD918250028600F /* Vendor */ = { isa = PBXGroup; children = ( From afe488ae8ab103bea4c6db4e07cde4a7e85ea9c2 Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Mon, 10 Jul 2023 14:33:04 +0300 Subject: [PATCH 105/298] [win-nix] refactoring --- win-linux/src/cthemes.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/win-linux/src/cthemes.cpp b/win-linux/src/cthemes.cpp index 0ed5f15c5..f4a825084 100644 --- a/win-linux/src/cthemes.cpp +++ b/win-linux/src/cthemes.cpp @@ -452,6 +452,10 @@ auto CThemes::setCurrentTheme(const std::wstring& name) -> void GET_REGISTRY_USER(_reg_user); // _reg_user.setValue(REGISTRY_THEME_KEY, QString::fromStdWString(name)); _reg_user.setValue(REGISTRY_THEME_KEY_7_2, QString::fromStdWString(name)); + + // TODO: remove after ver 7.5. back to keep theme id in REGISTRY_THEME_KEY + if ( _reg_user.contains(REGISTRY_THEME_KEY_7_2) ) + _reg_user.remove(REGISTRY_THEME_KEY_7_2); } } From 877994bf8228ec90f5f68ae7bc9b6329d073110a Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Mon, 10 Jul 2023 14:35:33 +0300 Subject: [PATCH 106/298] [start] local theme didn't show in combobox --- common/loginpage/src/htmlutils.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/loginpage/src/htmlutils.js b/common/loginpage/src/htmlutils.js index 4bbaaf83f..172c7ac06 100644 --- a/common/loginpage/src/htmlutils.js +++ b/common/loginpage/src/htmlutils.js @@ -48,7 +48,7 @@ var params = (function() { let ui_theme_name = params.uitheme || localStorage.getItem("ui-theme"), ui_theme_type; if ( !!ui_theme_name ) { - if ( /^{".+"}$/.test(ui_theme_name) ) { + if ( /^{".+"}+$/.test(ui_theme_name) ) { const obj = JSON.parse(ui_theme_name); ui_theme_name = obj['id'] || 'theme-dark'; ui_theme_type = obj['type']; From 77bbe349d291ab3327653441588df8d139d8205b Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Mon, 10 Jul 2023 22:46:04 +0300 Subject: [PATCH 107/298] [win-nix] debug --- win-linux/src/windows/cmainwindow.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/win-linux/src/windows/cmainwindow.cpp b/win-linux/src/windows/cmainwindow.cpp index 3b86f0f98..f8a0ea3e7 100644 --- a/win-linux/src/windows/cmainwindow.cpp +++ b/win-linux/src/windows/cmainwindow.cpp @@ -525,7 +525,6 @@ void CMainWindow::onEditorAllowedClose(int uid) _view->deleteLater(); m_pTabs->tabBar()->removeTab(_index); - m_pTabs->removeTab(_index); //m_pTabs->adjustTabsSize(); onTabChanged(m_pTabs->currentIndex()); From 709a6e4ff287078db32cc8dcc8479455e19a7e5b Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Wed, 12 Jul 2023 00:29:31 +0300 Subject: [PATCH 108/298] [themes] load local theme on app launch --- win-linux/src/components/asctabwidget.cpp | 2 +- win-linux/src/cthemes.cpp | 87 ++++++++++++++++------- 2 files changed, 61 insertions(+), 28 deletions(-) diff --git a/win-linux/src/components/asctabwidget.cpp b/win-linux/src/components/asctabwidget.cpp index 7804f36a0..1f813aded 100644 --- a/win-linux/src/components/asctabwidget.cpp +++ b/win-linux/src/components/asctabwidget.cpp @@ -474,7 +474,7 @@ void CAscTabWidget::updateTabIcon(int index) CAscTabData& data = *(panel(index)->data()); return data.isViewType(cvwtEditor) && (data.features().empty() || data.hasFeature(L"uithemes")); }; - const CTheme& ui_theme = GetCurrentTheme().isDark() && _is_editor_supports_theme(index) ? + const CTheme& ui_theme = /*GetCurrentTheme().isDark() &&*/ _is_editor_supports_theme(index) ? GetCurrentTheme() : AscAppManager::themes().defaultLight(); tab_type = pEditor->GetEditorType(); diff --git a/win-linux/src/cthemes.cpp b/win-linux/src/cthemes.cpp index eedd1d989..4031deab2 100644 --- a/win-linux/src/cthemes.cpp +++ b/win-linux/src/cthemes.cpp @@ -102,7 +102,7 @@ class CTheme::CThemePrivate { if ( it != NSTheme::map_alias_names.end() && colorValues.contains(it->second) ) { - jsonValues[color_name.second] = colorValues.value(it->second); + jsonValues[color_name.second] = colorValues.value(it->second).toString(); } } } @@ -111,7 +111,7 @@ class CTheme::CThemePrivate { jsonValues = obj.value("values").toObject(); } - is_system = false; +// is_system = false; } auto setDefaultThemes(const CTheme * const l, const CTheme * const d) -> void { @@ -127,6 +127,7 @@ class CTheme::CThemePrivate { QJsonObject jsonValues; const CTheme * defdark = nullptr, * deflight = nullptr; + QString source_file; }; /* @@ -181,12 +182,25 @@ class CThemes::CThemesPrivate { if ( user_theme == THEME_ID_SYSTEM ) user_theme = THEME_DEFAULT_LIGHT_ID; #endif - if ( user_theme == THEME_ID_SYSTEM || rc_themes.find(user_theme) == rc_themes.end() ) { - current = new CTheme(rc_themes.at(is_system_theme_dark ? THEME_DEFAULT_DARK_ID : THEME_DEFAULT_LIGHT_ID)); - current->m_priv->is_system = true; - } else current = new CTheme(rc_themes.at(user_theme)); + current = new CTheme; current->m_priv->setDefaultThemes(getDefault(NSTheme::ThemeType::ttDark), getDefault(NSTheme::ThemeType::ttLight)); + if ( user_theme.endsWith(".json") ) { + QDir directory(qApp->applicationDirPath() + "/uicolorthemes"); + QString filepath{directory.absoluteFilePath(user_theme)}; + + if ( !QFile::exists(filepath) || !current->fromFile(filepath) ) { + user_theme = THEME_ID_SYSTEM; + } + } else + if ( rc_themes.find(user_theme) == rc_themes.end() || !current->fromFile(rc_themes.at(user_theme)) ) { + user_theme = THEME_ID_SYSTEM; + } + + if ( user_theme == THEME_ID_SYSTEM ) { + current->fromFile(rc_themes.at(is_system_theme_dark ? THEME_DEFAULT_DARK_ID : THEME_DEFAULT_LIGHT_ID)); + current->m_priv->is_system = true; + } } ~CThemesPrivate() @@ -199,25 +213,40 @@ class CThemes::CThemesPrivate { auto setCurrent(const QString& id) -> bool { - if ( id != THEME_ID_SYSTEM ) { - if ( rc_themes.find(id) != rc_themes.end() ) { - return current->fromFile(rc_themes.at(id)); - } else - if ( local_themes.find(id) != local_themes.end() ) { - return current->fromJson(local_themes.at(id)); - } - } else { - QString visual_theme_id = is_system_theme_dark ? THEME_DEFAULT_DARK_ID : THEME_DEFAULT_LIGHT_ID; - if ( current->id() != visual_theme_id.toStdWString() ) { - if ( !current->fromFile(rc_themes.at(visual_theme_id)) ) - return false; + if ( current->id() != id ) { + if ( id != THEME_ID_SYSTEM ) { + delete current; + + current = new CTheme; + current->m_priv->setDefaultThemes(getDefault(NSTheme::ThemeType::ttDark), getDefault(NSTheme::ThemeType::ttLight)); + if ( rc_themes.find(id) != rc_themes.end() ) { + return current->fromFile(rc_themes.at(id)); + } else + if ( local_themes.find(id) != local_themes.end() ) { + if ( current->fromJson(local_themes.at(id).second) ) { + current->m_priv->source_file = local_themes.at(id).first; + return true; + } +// return current->fromJson(local_themes.at(id)); + } + } else { + QString visual_theme_id = is_system_theme_dark ? THEME_DEFAULT_DARK_ID : THEME_DEFAULT_LIGHT_ID; + if ( current->id() != visual_theme_id.toStdWString() ) { + delete current; + + current = new CTheme; + if ( !current->fromFile(rc_themes.at(visual_theme_id)) ) + return false; + } + + current->m_priv->is_system = true; + return true; } - current->m_priv->is_system = true; - return true; + return false; } - return false; + return true; } auto getDefault(NSTheme::ThemeType type) -> const CTheme * const @@ -259,8 +288,8 @@ class CThemes::CThemesPrivate { if ( validateTheme(objRoot) ) { json_themes_array.append(objRoot); - local_themes[objRoot.value("id").toString()] = data; - parseLocalTheme(doc.object()); + local_themes[objRoot.value("id").toString()] = std::make_pair(filename,data); +// parseLocalTheme(doc.object()); } } } @@ -284,7 +313,7 @@ class CThemes::CThemesPrivate { CThemes & parent; std::map rc_themes; - std::map local_themes; + std::map> local_themes; bool is_system_theme_dark = false; CTheme * current = nullptr; @@ -358,8 +387,9 @@ auto CTheme::stype() const -> QString auto CTheme::value(ColorRole r) const -> std::wstring { if ( NSTheme::map_names.find(r) != NSTheme::map_names.end() ) { - if ( m_priv->jsonValues.contains(NSTheme::map_names.at(r)) ) + if ( m_priv->jsonValues.contains(NSTheme::map_names.at(r)) ) { return m_priv->jsonValues.value(NSTheme::map_names.at(r)).toString().toStdWString(); + } } return L""; @@ -448,12 +478,15 @@ auto CThemes::setCurrentTheme(const std::wstring& name) -> void { if ( !isThemeCurrent(name) && m_priv->setCurrent(QString::fromStdWString(name)) ) { GET_REGISTRY_USER(_reg_user); -// _reg_user.setValue(REGISTRY_THEME_KEY, QString::fromStdWString(name)); - _reg_user.setValue(REGISTRY_THEME_KEY_7_2, QString::fromStdWString(name)); + + if ( !m_priv->current->m_priv->source_file.isEmpty() ) + _reg_user.setValue(REGISTRY_THEME_KEY, m_priv->current->m_priv->source_file); + else _reg_user.setValue(REGISTRY_THEME_KEY, QString::fromStdWString(name)); // TODO: remove after ver 7.5. back to keep theme id in REGISTRY_THEME_KEY if ( _reg_user.contains(REGISTRY_THEME_KEY_7_2) ) _reg_user.remove(REGISTRY_THEME_KEY_7_2); + } } From 7d168ffd9e2a154be968e5e3b04793cc533ae1e9 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Wed, 12 Jul 2023 12:12:12 +0300 Subject: [PATCH 109/298] [win-linux] debug --- win-linux/src/cthemes.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/win-linux/src/cthemes.cpp b/win-linux/src/cthemes.cpp index 4031deab2..96cb7dda2 100644 --- a/win-linux/src/cthemes.cpp +++ b/win-linux/src/cthemes.cpp @@ -213,7 +213,7 @@ class CThemes::CThemesPrivate { auto setCurrent(const QString& id) -> bool { - if ( current->id() != id ) { + if ( current->id() != id.toStdWString() ) { if ( id != THEME_ID_SYSTEM ) { delete current; From ecac28f3f588e1339e1362de784fb160f2ba6f44 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Sun, 16 Jul 2023 13:38:39 +0300 Subject: [PATCH 110/298] [win-linux] refactoring CDownloadWidget styles --- win-linux/res/styles/download.qss | 4 +++- win-linux/src/components/cdownloadwidget.cpp | 1 + win-linux/src/main.cpp | 3 --- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/win-linux/res/styles/download.qss b/win-linux/res/styles/download.qss index 98e2caf0d..7059a7ff2 100644 --- a/win-linux/res/styles/download.qss +++ b/win-linux/res/styles/download.qss @@ -1,6 +1,6 @@ CDownloadWidget {background: #ffffff;} - +QWidget#contentArea {background: #ffffff;} QPushButton {padding: 0px; font-weight: normal;} QPushButton:hover {background-color: #cecece;} QPushButton:pressed {background-color: #b7b7b7;} @@ -28,6 +28,7 @@ QAbstractScrollArea::corner {background: transparent;} /* dark theme */ CDownloadWidget[uitheme="theme-dark"] {background: #404040;} +CDownloadWidget[uitheme="theme-dark"] QWidget#contentArea {background: #404040;} CDownloadWidget[uitheme="theme-dark"] QPushButton#buttonCancel {color: #d9d9d9;} CDownloadWidget[uitheme="theme-dark"] QPushButton#buttonCancel:hover {background: #555;} CDownloadWidget[uitheme="theme-dark"] QPushButton#buttonCancel:pressed {background: #606060;} @@ -35,6 +36,7 @@ CDownloadWidget[uitheme="theme-dark"] QLabel#labelName {color: #d9d9d9;} /* contrast theme */ CDownloadWidget[uitheme="theme-contrast-dark"] {background: #2a2a2a;} +CDownloadWidget[uitheme="theme-contrast-dark"] QWidget#contentArea {background: #2a2a2a;} CDownloadWidget[uitheme="theme-contrast-dark"] QPushButton#buttonCancel {color: #d9d9d9;} CDownloadWidget[uitheme="theme-contrast-dark"] QPushButton#buttonCancel:hover {background: #555;} CDownloadWidget[uitheme="theme-contrast-dark"] QPushButton#buttonCancel:pressed {background: #606060;} diff --git a/win-linux/src/components/cdownloadwidget.cpp b/win-linux/src/components/cdownloadwidget.cpp index cab63871c..1fe54eadc 100644 --- a/win-linux/src/components/cdownloadwidget.cpp +++ b/win-linux/src/components/cdownloadwidget.cpp @@ -82,6 +82,7 @@ CDownloadWidget::CDownloadWidget(QWidget *parent) m_pArea->setWidgetResizable(true); m_pContentArea = new QWidget(m_pArea); + m_pContentArea->setObjectName("contentArea"); QVBoxLayout *lut = new QVBoxLayout(m_pContentArea); lut->setContentsMargins(MARGINS, MARGINS, MARGINS, MARGINS); lut->setSpacing(SPACING); diff --git a/win-linux/src/main.cpp b/win-linux/src/main.cpp index 6a57cae37..d3c0f8a1f 100644 --- a/win-linux/src/main.cpp +++ b/win-linux/src/main.cpp @@ -140,9 +140,6 @@ int main( int argc, char *argv[] ) } app.setAttribute(Qt::AA_UseHighDpiPixmaps); -#if (QT_VERSION >= QT_VERSION_CHECK(5, 7, 0)) - app.setAttribute(Qt::AA_UseStyleSheetPropagationInWidgetStyles); -#endif app.setStyle(QStyleFactory::create("Fusion")); /* the order is important */ From 647ab3770517614b755a26e195b200291429beac Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Tue, 25 Jul 2023 17:47:45 +0300 Subject: [PATCH 111/298] [win-linux] fix bug 63462 --- win-linux/src/cascapplicationmanagerwrapper.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/win-linux/src/cascapplicationmanagerwrapper.cpp b/win-linux/src/cascapplicationmanagerwrapper.cpp index cce1218e0..8b2f56440 100644 --- a/win-linux/src/cascapplicationmanagerwrapper.cpp +++ b/win-linux/src/cascapplicationmanagerwrapper.cpp @@ -1845,7 +1845,7 @@ void CAscApplicationManagerWrapper::onDownloadSaveDialog(const std::wstring& nam /*#ifdef Q_OS_WIN HWND parent = GetActiveWindow(); #else*/ - QWidget * parent = mainWindow(); + QWidget * parent = WindowHelper::activeWindow(); //#endif if ( parent ) { From 51df40033eb114400304d9ad93ddca551da2ee4b Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Tue, 25 Jul 2023 17:48:07 +0300 Subject: [PATCH 112/298] [win-linux] remove unused code --- win-linux/src/cascapplicationmanagerwrapper.cpp | 5 ----- 1 file changed, 5 deletions(-) diff --git a/win-linux/src/cascapplicationmanagerwrapper.cpp b/win-linux/src/cascapplicationmanagerwrapper.cpp index 8b2f56440..e09f2b8eb 100644 --- a/win-linux/src/cascapplicationmanagerwrapper.cpp +++ b/win-linux/src/cascapplicationmanagerwrapper.cpp @@ -1842,12 +1842,7 @@ void CAscApplicationManagerWrapper::unbindReceiver(const CCefEventsGate * receiv void CAscApplicationManagerWrapper::onDownloadSaveDialog(const std::wstring& name, uint id) { -/*#ifdef Q_OS_WIN - HWND parent = GetActiveWindow(); -#else*/ QWidget * parent = WindowHelper::activeWindow(); -//#endif - if ( parent ) { static bool saveInProcess = false; if ( !saveInProcess ) { From af5f05e96762c8559cc4928a6348b5cfd7e738a2 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Tue, 1 Aug 2023 15:09:06 +0300 Subject: [PATCH 113/298] [win-linux] fix bug 55852 --- win-linux/src/windows/ceditorwindow_p.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/win-linux/src/windows/ceditorwindow_p.h b/win-linux/src/windows/ceditorwindow_p.h index e9f50996e..9fc215e0f 100644 --- a/win-linux/src/windows/ceditorwindow_p.h +++ b/win-linux/src/windows/ceditorwindow_p.h @@ -393,9 +393,8 @@ class CEditorWindowPrivate : public CCefEventsGate void onDocumentChanged(int id, bool state) override { + CCefEventsGate::onDocumentChanged(id, state); if ( panel()->data()->hasChanges() != state ) { - CCefEventsGate::onDocumentChanged(id, state); - if ( canExtendTitle() && window->isCustomWindowStyle() ) { window->setWindowTitle(m_panel->data()->title()); window->m_boxTitleBtns->repaint(); From 607da2a831d255e5fa4c8b2a0ce9b75b5ad111a7 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Tue, 1 Aug 2023 17:03:47 +0300 Subject: [PATCH 114/298] [win] add print dialog --- win-linux/defaults.pri | 2 + win-linux/src/platform_win/printdialog.cpp | 451 +++++++++++++++++++++ win-linux/src/platform_win/printdialog.h | 75 ++++ win-linux/src/windows/ceditorwindow_p.h | 4 +- win-linux/src/windows/cmainwindow.cpp | 3 +- 5 files changed, 533 insertions(+), 2 deletions(-) create mode 100644 win-linux/src/platform_win/printdialog.cpp create mode 100644 win-linux/src/platform_win/printdialog.h diff --git a/win-linux/defaults.pri b/win-linux/defaults.pri index 1188b0428..dc4dcdb5c 100644 --- a/win-linux/defaults.pri +++ b/win-linux/defaults.pri @@ -260,6 +260,7 @@ core_windows { $$PWD/src/windows/platform_win/caption.h \ $$PWD/src/platform_win/singleapplication.h \ $$PWD/src/platform_win/filechooser.h \ + $$PWD/src/platform_win/printdialog.h \ $$PWD/src/platform_win/message.h \ $$PWD/src/platform_win/resource.h @@ -267,6 +268,7 @@ core_windows { $$PWD/src/windows/platform_win/csnap.cpp \ $$PWD/src/platform_win/singleapplication.cpp \ $$PWD/src/platform_win/filechooser.cpp \ + $$PWD/src/platform_win/printdialog.cpp \ $$PWD/src/platform_win/message.cpp updmodule:!build_xp { diff --git a/win-linux/src/platform_win/printdialog.cpp b/win-linux/src/platform_win/printdialog.cpp new file mode 100644 index 000000000..1f5a8c4ac --- /dev/null +++ b/win-linux/src/platform_win/printdialog.cpp @@ -0,0 +1,451 @@ +/* + * (c) Copyright Ascensio System SIA 2010-2019 + * + * This program is a free software product. You can redistribute it and/or + * modify it under the terms of the GNU Affero General Public License (AGPL) + * version 3 as published by the Free Software Foundation. In accordance with + * Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect + * that Ascensio System SIA expressly excludes the warranty of non-infringement + * of any third-party rights. + * + * This program is distributed WITHOUT ANY WARRANTY; without even the implied + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For + * details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html + * + * You can contact Ascensio System SIA at 20A-12 Ernesta Birznieka-Upisha + * street, Riga, Latvia, EU, LV-1050. + * + * The interactive user interfaces in modified source and object code versions + * of the Program must display Appropriate Legal Notices, as required under + * Section 5 of the GNU AGPL version 3. + * + * Pursuant to Section 7(b) of the License you must retain the original Product + * logo when distributing the program. Pursuant to Section 7(e) we decline to + * grant you any rights under trademark law for use of our trademarks. + * + * All the Product's GUI elements, including illustrations and icon sets, as + * well as technical writing content are licensed under the terms of the + * Creative Commons Attribution-ShareAlike 4.0 International. See the License + * terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode + * + */ + +#include +#include +#include "printdialog.h" +#include "utils.h" + +#define MAXPAGERANGES 32 +#define PRINT_DIALOG_REG_KEY L"Software\\Microsoft\\Print\\UnifiedPrintDialog\0" +#define PRINT_DIALOG_REG_VALUE L"PreferLegacyPrintDialog\0" + +typedef QPageSize::PageSizeId PageSize; + + +auto getPaperSizeFromPageSize(PageSize page_size)->int +{ + switch (page_size) { +// case PageSize::A0: +// return DMPAPER_USER; +// case PageSize::A1: +// return DMPAPER_USER; + case PageSize::A2: + return DMPAPER_A2; + case PageSize::A3: + return DMPAPER_A3; + case PageSize::A4: + return DMPAPER_A4; + case PageSize::A5: + return DMPAPER_A5; + case PageSize::A6: + return DMPAPER_A6; + case PageSize::B5: + return DMPAPER_B5; + case PageSize::Tabloid: + return DMPAPER_TABLOID; + case PageSize::EnvelopeDL: + return DMPAPER_ENV_DL; + case PageSize::Comm10E: + return DMPAPER_ENV_10; + case PageSize::SuperB: + return DMPAPER_B_PLUS; + case PageSize::TabloidExtra: + return DMPAPER_TABLOID_EXTRA; + case PageSize::Letter: + return DMPAPER_LETTER; + case PageSize::Legal: + return DMPAPER_LEGAL; + case PageSize::EnvelopeChou3: + return DMPAPER_JENV_CHOU3; + default: + return DMPAPER_USER; + } +} + +auto resetLegacyPrintDialog()->void +{ + HKEY hKey = NULL; + if (RegOpenKeyEx(HKEY_CURRENT_USER, PRINT_DIALOG_REG_KEY, 0, KEY_ALL_ACCESS, &hKey) == ERROR_SUCCESS) { + DWORD pvData = 0, pcbData = sizeof(DWORD); + if (RegGetValue(hKey, NULL, PRINT_DIALOG_REG_VALUE, RRF_RT_REG_DWORD, NULL, &pvData, &pcbData) == ERROR_SUCCESS) { + if (pvData == 1) { + pvData = 0; + RegSetValueEx(hKey, PRINT_DIALOG_REG_VALUE, 0, REG_DWORD, (const BYTE*)&pvData, sizeof(DWORD)); + } + } + RegCloseKey(hKey); + } +} + +struct PrintDialogCallback : public IPrintDialogCallback +{ +public: + PrintDialogCallback(bool *dialog_was_changed) : + m_dialog_was_changed(dialog_was_changed) + {} +private: + virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void **ppv) noexcept final { + if (riid == IID_IUnknown || riid == IID_IPrintDialogCallback) { + *ppv = static_cast(this); + AddRef(); + return S_OK; + } + *ppv = nullptr; + return E_NOINTERFACE; + } + virtual ULONG STDMETHODCALLTYPE AddRef() noexcept final { + return 1; + } + virtual ULONG STDMETHODCALLTYPE Release() noexcept final { + return 1; + } + virtual HRESULT STDMETHODCALLTYPE HandleMessage(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam, + LRESULT *pResult) noexcept final { + return S_FALSE; + } + virtual HRESULT InitDone() noexcept final { + if (m_dialog_was_changed && *m_dialog_was_changed) // Restore print dialog type + resetLegacyPrintDialog(); + return S_FALSE; + } + virtual HRESULT SelectionChange() noexcept final { + return S_FALSE; + } + + bool *m_dialog_was_changed = nullptr; +}; + +PrintDialog::PrintDialog(QPrinter *printer, QWidget *parent) : + m_printer(printer), + m_parent(parent), + m_title(QString()), + m_options(PrintOptions()) +{ + m_print_range = (PrintRange)printer->printRange(); + if (m_printer->collateCopies()) + m_options |= PrintOption::PrintCollateCopies; + m_page_ranges.append(PageRanges(m_printer->fromPage(), m_printer->toPage())); +} + +PrintDialog::~PrintDialog() +{ + +} + +void PrintDialog::setWindowTitle(const QString &title) +{ + m_title = title; +} + +void PrintDialog::setEnabledOptions(PrintOptions enbl_opts) +{ + m_options = enbl_opts; +} + +void PrintDialog::setOptions(PrintOptions opts) +{ + m_options = opts; +} + +void PrintDialog::setPrintRange(PrintRange print_range) +{ + m_print_range = print_range; +} + +QDialog::DialogCode PrintDialog::exec() +{ + HWND parent_hwnd = (m_parent) ? (HWND)m_parent->winId() : NULL; + auto qt_printer_name = m_printer->printerName().toStdWString(); + auto qt_resolution = m_printer->resolution(); + auto qt_orient = m_printer->pageLayout().orientation(); + auto qt_duplex = m_printer->duplex(); + auto qt_color_mode = m_printer->colorMode(); + auto qt_copy_count = m_printer->copyCount(); +// auto qt_page_order = m_printer->pageOrder(); +// auto qt_output_filename = m_printer->outputFileName().toStdWString(); +// auto qt_doc_name = m_printer->docName(); +// auto qt_full_page = m_printer->fullPage(); +// auto qt_color_count = m_printer->colorCount(); +// auto qt_supported_res = m_printer->supportedResolutions(); +// auto qt_supports_multi_copies = m_printer->supportsMultipleCopies(); +// auto qt_selection_option = m_printer->printerSelectionOption(); +// auto qt_output_format = m_printer->outputFormat(); +// auto qt_paper_source = m_printer->paperSource(); + + // Qt-PrintOptions: + // None = 0 + // PrintToFile = 1 + // PrintSelection = 2 + // PrintPageRange = 4 + // PrintShowPageSize = 8 - not applied + // PrintCollateCopies = 16 + // DontUseSheet = 32 - not applied + // PrintCurrentPage = 64 + DWORD flags = ( + PD_ALLPAGES +// PD_COLLATE | +// PD_ENABLEPRINTTEMPLATE | +// PD_ENABLEPRINTTEMPLATEHANDLE | +// PD_EXCLUSIONFLAGS | +// PD_HIDEPRINTTOFILE | +// PD_NOWARNING | +// PD_PRINTTOFILE | +// PD_RETURNDC | +// PD_RETURNDEFAULT | +// PD_RETURNIC | +// PD_USELARGETEMPLATE + ); + + if (!m_options.testFlag(PrintOption::PrintToFile)) + flags |= PD_DISABLEPRINTTOFILE; + + if (!m_options.testFlag(PrintOption::PrintSelection)) + flags |= PD_NOSELECTION; + + if (!m_options.testFlag(PrintOption::PrintPageRange)) + flags |= PD_NOPAGENUMS; + + if (!m_options.testFlag(PrintOption::PrintCollateCopies)) + flags |= PD_USEDEVMODECOPIESANDCOLLATE; + + if (!m_options.testFlag(PrintOption::PrintCurrentPage)) + flags |= PD_NOCURRENTPAGE; + + // Qt-PrintRange: + // AllPages = 0 + // Selection = 1 + // PageRange = 2 + // CurrentPage = 3 + if (m_print_range == PrintRange::Selection) + flags |= PD_SELECTION; + else + if (m_print_range == PrintRange::PageRange) + flags |= PD_PAGENUMS; + else + if (m_print_range == PrintRange::CurrentPage) + flags |= PD_CURRENTPAGE; + + PRINTPAGERANGE *page_ranges = (PRINTPAGERANGE*)GlobalAlloc(GPTR, MAXPAGERANGES * sizeof(PRINTPAGERANGE)); + Q_ASSERT(page_ranges != nullptr); + page_ranges[0] = {(DWORD)m_printer->fromPage(), (DWORD)m_printer->toPage()}; + + // Input settings + LPDEVMODE pDevMode = NULL; + { + HANDLE hPrinter = NULL; + LPWSTR pPrinterName = &qt_printer_name[0]; + if (OpenPrinter(pPrinterName, &hPrinter, NULL)) { + DWORD dwNeeded = 0, dwRet = 0; + dwNeeded = DocumentProperties(parent_hwnd, hPrinter, pPrinterName, NULL, NULL, 0); + Q_ASSERT(dwNeeded >= sizeof(DEVMODE)); + pDevMode = (LPDEVMODE)GlobalAlloc(GPTR, dwNeeded); + dwRet = DocumentProperties(parent_hwnd, hPrinter, pPrinterName, pDevMode, NULL, DM_OUT_BUFFER); + if (dwRet == IDOK) { + if (pDevMode->dmFields & DM_YRESOLUTION) + pDevMode->dmYResolution = qt_resolution; + + if (pDevMode->dmFields & DM_COLOR) + pDevMode->dmColor = (qt_color_mode == QPrinter::Color) ? DMCOLOR_COLOR : DMCOLOR_MONOCHROME; + +// if (pDevMode->dmFields & DM_COLLATE) +// pDevMode->dmCollate = DMCOLLATE_TRUE; + + if (pDevMode->dmFields & DM_COPIES) + pDevMode->dmCopies = qt_copy_count; + + if (pDevMode->dmFields & DM_ORIENTATION) + pDevMode->dmOrientation = (qt_orient == QPageLayout::Portrait) ? DMORIENT_PORTRAIT : DMORIENT_LANDSCAPE; + + // Qt-Duplex: + // DuplexNone = 0 + // DuplexAuto = 1 - not applied + // DuplexLongSide = 2 + // DuplexShortSide = 3 + if (pDevMode->dmFields & DM_DUPLEX) { + pDevMode->dmDuplex = (qt_duplex == QPrinter::DuplexLongSide) ? DMDUP_HORIZONTAL : + (qt_duplex == QPrinter::DuplexShortSide) ? DMDUP_VERTICAL : DMDUP_SIMPLEX; + } + + if (pDevMode->dmFields & DM_PAPERSIZE) + pDevMode->dmPaperSize = getPaperSizeFromPageSize(m_printer->pageLayout().pageSize().id()); + + QPageSize ps = m_printer->pageLayout().pageSize(); + QSizeF page_size = ps.size(QPageSize::Millimeter); + if (pDevMode->dmFields & DM_PAPERWIDTH) + pDevMode->dmPaperWidth = qRound(10 * page_size.width()); + if (pDevMode->dmFields & DM_PAPERLENGTH) + pDevMode->dmPaperLength = qRound(10 * page_size.height()); + + dwRet = DocumentProperties(parent_hwnd, hPrinter, pPrinterName, pDevMode, pDevMode, DM_IN_BUFFER | DM_OUT_BUFFER); + } + if (dwRet != IDOK) { + free(pDevMode); + pDevMode = NULL; + } + ClosePrinter(hPrinter); + } + } + + // Switch to legacy print dialog + bool dialog_was_changed = false; + if (Utils::getWinVersion() >= Utils::WinVer::Win11) { + HKEY hKey = NULL; + if (RegOpenKeyEx(HKEY_CURRENT_USER, PRINT_DIALOG_REG_KEY, 0, KEY_ALL_ACCESS, &hKey) == ERROR_SUCCESS) { + DWORD pvData = 0, pcbData = sizeof(DWORD); + LSTATUS status = RegGetValue(hKey, NULL, PRINT_DIALOG_REG_VALUE, RRF_RT_REG_DWORD, NULL, &pvData, &pcbData); + if (status == ERROR_SUCCESS || status == ERROR_FILE_NOT_FOUND) { + if (pvData == 0) { + pvData = 1; + if (RegSetValueEx(hKey, PRINT_DIALOG_REG_VALUE, 0, REG_DWORD, (const BYTE*)&pvData, sizeof(DWORD)) == ERROR_SUCCESS) + dialog_was_changed = true; + } + } + RegCloseKey(hKey); + } + } + + // Init dialog + PRINTDLGEX dlg; + ZeroMemory(&dlg, sizeof(dlg)); + dlg.lStructSize = sizeof(dlg); + dlg.Flags = flags; +// dlg.ExclusionFlags = PD_EXCL_COPIESANDCOLLATE; + dlg.hwndOwner = parent_hwnd; + dlg.hInstance = NULL; + dlg.hDevNames = NULL; + dlg.hDevMode = (HGLOBAL)pDevMode; + dlg.nStartPage = START_PAGE_GENERAL; + dlg.nCopies = qt_copy_count; + dlg.nMaxPageRanges = MAXPAGERANGES; + dlg.nPageRanges = 1; + dlg.lpPageRanges = page_ranges; + dlg.nMinPage = (DWORD)m_printer->fromPage(); + dlg.nMaxPage = (DWORD)m_printer->toPage(); + PrintDialogCallback clb(&dialog_was_changed); + dlg.lpCallback = static_cast(&clb); + + QDialog::DialogCode exit_code = QDialog::DialogCode::Rejected; + if (PrintDlgEx(&dlg) == S_OK) { + switch (dlg.dwResultAction) { + case PD_RESULT_PRINT: { + LPDEVMODE pDevmode = (LPDEVMODE)GlobalLock(dlg.hDevMode); + if (pDevmode) { + m_printer->setPrinterName(QString::fromStdWString(pDevmode->dmDeviceName)); + m_printer->setColorMode(pDevmode->dmColor == DMCOLOR_COLOR ? QPrinter::Color : QPrinter::GrayScale); + m_print_range = (dlg.Flags & PD_SELECTION) ? PrintRange::Selection : + (dlg.Flags & PD_PAGENUMS) ? PrintRange::PageRange : + (dlg.Flags & PD_CURRENTPAGE) ? PrintRange::CurrentPage : PrintRange::AllPages; + + m_page_ranges.clear(); + for (DWORD i = 0; i < dlg.nPageRanges; i++) { + int start = dlg.lpPageRanges[i].nFromPage; + int end = dlg.lpPageRanges[i].nToPage; + if (start > end) + for (int j = start; j >= end; j--) + m_page_ranges.append(PageRanges(j, j)); + else + m_page_ranges.append(PageRanges(start, end)); + + if (i == 0) + m_printer->setFromTo(start > end ? end : start, start > end ? start : end); + } + m_printer->setCollateCopies(bool(dlg.Flags & PD_COLLATE)); + m_printer->setDuplex(pDevmode->dmDuplex == DMDUP_HORIZONTAL ? QPrinter::DuplexLongSide : + pDevmode->dmDuplex == DMDUP_VERTICAL ? QPrinter::DuplexShortSide : QPrinter::DuplexNone); + + m_printer->setCopyCount(pDevmode->dmCopies); +// auto path = QUrl::fromPercentEncoding(QByteArray(output_uri)).replace("file://", ""); +// m_printer->setOutputFileName(path); + double width = double(pDevmode->dmPaperWidth)/10; + double height = double(pDevmode->dmPaperLength)/10; + QPageSize ps(QSizeF(width, height), QPageSize::Millimeter); + m_printer->setPageSize(ps); + m_printer->setPageOrientation(pDevmode->dmOrientation == DMORIENT_PORTRAIT ? QPageLayout::Portrait : QPageLayout::Landscape); + } + GlobalUnlock(dlg.hDevMode); + exit_code = QDialog::DialogCode::Accepted; + break; + } + default: + break; + } + + if (dlg.hDevMode) + GlobalFree(dlg.hDevMode); + if (dlg.hDevNames) + GlobalFree(dlg.hDevNames); + // if (dlg.hDC) + // DeleteDC(dlg.hDC); + } else { + if (dialog_was_changed) // Restore print dialog type + resetLegacyPrintDialog(); + if (pDevMode) + GlobalFree(pDevMode); + } + GlobalFree(page_ranges); + + return exit_code; +} + +PrintRange PrintDialog::printRange() +{ + return m_print_range; +} + +PrintOptions PrintDialog::enabledOptions() +{ + return m_options; +} + +PrintOptions PrintDialog::options() +{ + return m_options; +} + +QVector PrintDialog::getPageRanges() +{ + return m_page_ranges; +} + +int PrintDialog::fromPage() +{ + return m_printer->fromPage(); +} + +int PrintDialog::toPage() +{ + return m_printer->toPage(); +} + +void PrintDialog::setFromTo(int from, int to) +{ + m_printer->setFromTo(from, to); + if (!m_page_ranges.isEmpty()) + m_page_ranges.clear(); + m_page_ranges.append(PageRanges(m_printer->fromPage(), m_printer->toPage())); +} + +void PrintDialog::accept() +{ + +} diff --git a/win-linux/src/platform_win/printdialog.h b/win-linux/src/platform_win/printdialog.h new file mode 100644 index 000000000..64633b59c --- /dev/null +++ b/win-linux/src/platform_win/printdialog.h @@ -0,0 +1,75 @@ +/* + * (c) Copyright Ascensio System SIA 2010-2019 + * + * This program is a free software product. You can redistribute it and/or + * modify it under the terms of the GNU Affero General Public License (AGPL) + * version 3 as published by the Free Software Foundation. In accordance with + * Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect + * that Ascensio System SIA expressly excludes the warranty of non-infringement + * of any third-party rights. + * + * This program is distributed WITHOUT ANY WARRANTY; without even the implied + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For + * details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html + * + * You can contact Ascensio System SIA at 20A-12 Ernesta Birznieka-Upisha + * street, Riga, Latvia, EU, LV-1050. + * + * The interactive user interfaces in modified source and object code versions + * of the Program must display Appropriate Legal Notices, as required under + * Section 5 of the GNU AGPL version 3. + * + * Pursuant to Section 7(b) of the License you must retain the original Product + * logo when distributing the program. Pursuant to Section 7(e) we decline to + * grant you any rights under trademark law for use of our trademarks. + * + * All the Product's GUI elements, including illustrations and icon sets, as + * well as technical writing content are licensed under the terms of the + * Creative Commons Attribution-ShareAlike 4.0 International. See the License + * terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode + * + */ + +#ifndef PRINTDIALOG_H +#define PRINTDIALOG_H + +#include +#include +#include +#include "components/cprintdialog.h" + +typedef QAbstractPrintDialog::PrintDialogOption PrintOption; +typedef QAbstractPrintDialog::PrintDialogOptions PrintOptions; +typedef QAbstractPrintDialog::PrintRange PrintRange; + + +class PrintDialog +{ +public: + PrintDialog(QPrinter *printer, QWidget *parent); + ~PrintDialog(); + + void setWindowTitle(const QString &title); + void setEnabledOptions(PrintOptions enbl_opts); + void setOptions(PrintOptions opts); + void setPrintRange(PrintRange print_range); + QDialog::DialogCode exec(); + void accept(); + PrintRange printRange(); + PrintOptions enabledOptions(); + PrintOptions options(); + QVector getPageRanges(); + int fromPage(); + int toPage(); + void setFromTo(int from, int to); + +private: + QPrinter *m_printer; + QWidget *m_parent; + QString m_title; + PrintOptions m_options; + PrintRange m_print_range; + QVector m_page_ranges; +}; + +#endif // PRINTDIALOG_H diff --git a/win-linux/src/windows/ceditorwindow_p.h b/win-linux/src/windows/ceditorwindow_p.h index 9fc215e0f..1e60b66da 100644 --- a/win-linux/src/windows/ceditorwindow_p.h +++ b/win-linux/src/windows/ceditorwindow_p.h @@ -59,6 +59,8 @@ #ifdef __linux__ # include "platform_linux/gtkprintdialog.h" +#else +# include "platform_win/printdialog.h" #endif #define TOP_PANEL_OFFSET 6*TOOLBTN_WIDTH @@ -490,7 +492,7 @@ class CEditorWindowPrivate : public CCefEventsGate #ifdef _WIN32 printer->setOutputFileName(""); - CPrintDialog * dialog = new CPrintDialog(printer, window->handle()); + PrintDialog * dialog = new PrintDialog(printer, window->handle()); #else QFileInfo info(documentName); QString pdfName = Utils::lastPath(LOCAL_PATH_SAVE) + "/" + info.baseName() + ".pdf"; diff --git a/win-linux/src/windows/cmainwindow.cpp b/win-linux/src/windows/cmainwindow.cpp index f8a0ea3e7..ecdc55624 100644 --- a/win-linux/src/windows/cmainwindow.cpp +++ b/win-linux/src/windows/cmainwindow.cpp @@ -51,6 +51,7 @@ #ifdef _WIN32 # include "shlobj.h" +# include #else # include #endif @@ -1085,7 +1086,7 @@ void CMainWindow::onDocumentPrint(void * opts) #ifdef _WIN32 printer->setOutputFileName(""); - CPrintDialog * dialog = new CPrintDialog(printer, this); + PrintDialog * dialog = new PrintDialog(printer, this); #else QFileInfo info(documentName); QString pdfName = Utils::lastPath(LOCAL_PATH_SAVE) + "/" + info.baseName() + ".pdf"; From f50b42d116cbb8beca48a7979ad3a5e2a0b4fb2b Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Wed, 2 Aug 2023 08:12:54 +0300 Subject: [PATCH 115/298] [win-linux] fix tab close button color --- win-linux/res/styles/tabbar.qss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/win-linux/res/styles/tabbar.qss b/win-linux/res/styles/tabbar.qss index 5f126b67b..406e42a61 100644 --- a/win-linux/res/styles/tabbar.qss +++ b/win-linux/res/styles/tabbar.qss @@ -87,7 +87,7 @@ CTabBar[active=false] Tab[selected=true][hovered=true] #tabButton:pressed {image #mainPanel[uitheme=theme-contrast-dark] CTabBar[active=false] Tab[selected=true][hovered=true] #tabButton:hover {image: url(:/tabbar/icons/close_active_hover.svg);} #mainPanel[uitheme=theme-contrast-dark] Tab[selected=false][hovered=true] #tabButton:pressed, #mainPanel[uitheme=theme-contrast-dark] CTabBar[active=false] Tab[selected=true][hovered=true] #tabButton:pressed {image: url(:/tabbar/icons/close_active_pressed.svg);} -#mainPanel[uitheme=theme-contrast-dark] Tab[selected=true] #tabButton:pressed {background: #424242;} +#mainPanel[uitheme=theme-contrast-dark] Tab[selected=true] #tabButton:pressed {background: #cc0000;} #mainPanel[uitheme=theme-contrast-dark] Tab[selected=true][custom=true] #tabButton:pressed {background: transparent;} /* portal */ From 6b3098415a711aa60ea2bfaf2157d477aa4b048d Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Wed, 2 Aug 2023 08:14:11 +0300 Subject: [PATCH 116/298] [win-linux] fix presentation tab color --- win-linux/res/icons/tabbar/tabicon_pe_normal.svg | 4 ++-- win-linux/res/styles/theme-classic-light.json | 2 +- win-linux/res/styles/theme-light.json | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/win-linux/res/icons/tabbar/tabicon_pe_normal.svg b/win-linux/res/icons/tabbar/tabicon_pe_normal.svg index 877bdaeb6..79756b762 100644 --- a/win-linux/res/icons/tabbar/tabicon_pe_normal.svg +++ b/win-linux/res/icons/tabbar/tabicon_pe_normal.svg @@ -39,11 +39,11 @@ style="stroke:#f0f0f0;stroke-opacity:0.341176" /> diff --git a/win-linux/res/styles/theme-classic-light.json b/win-linux/res/styles/theme-classic-light.json index 1694a7202..448b2afc5 100644 --- a/win-linux/res/styles/theme-classic-light.json +++ b/win-linux/res/styles/theme-classic-light.json @@ -3,7 +3,7 @@ "type": "light", "values": { "brand-word": "#446995", - "brand-slide": "#aa5252", + "brand-slide": "#be664f", "brand-cell": "#40865c", "window-background": "#f1f1f1", diff --git a/win-linux/res/styles/theme-light.json b/win-linux/res/styles/theme-light.json index dc263423a..c80b90cf7 100644 --- a/win-linux/res/styles/theme-light.json +++ b/win-linux/res/styles/theme-light.json @@ -3,7 +3,7 @@ "type": "light", "values": { "brand-word": "#446995", - "brand-slide": "#aa5252", + "brand-slide": "#be664f", "brand-cell": "#40865c", "window-background": "#f1f1f1", From 9462c92386fef8cd12b8ae99bf5cacc366c108da Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Wed, 2 Aug 2023 15:28:32 +0300 Subject: [PATCH 117/298] [linux] refactoring gtkfilechooser.cpp --- win-linux/src/platform_linux/gtkfilechooser.cpp | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/win-linux/src/platform_linux/gtkfilechooser.cpp b/win-linux/src/platform_linux/gtkfilechooser.cpp index c441d7a97..51a3f41a7 100755 --- a/win-linux/src/platform_linux/gtkfilechooser.cpp +++ b/win-linux/src/platform_linux/gtkfilechooser.cpp @@ -118,8 +118,7 @@ static void nativeFileDialog(const Window &parent_xid, if (mode != Gtk::Mode::FOLDER) { parseString(&list, flt, ";;"); for (guint i = 0; i < g_slist_length(list); i++) { - char *flt_name = (char*)g_slist_nth(list, i)->data; - if (flt_name != NULL) { + if (char *flt_name = (char*)g_slist_nth(list, i)->data) { GtkFileFilter *filter = gtk_file_filter_new(); gtk_file_filter_set_name(filter, flt_name); //g_print("%s\n", flt_name); @@ -144,10 +143,8 @@ static void nativeFileDialog(const Window &parent_xid, } } gtk_file_chooser_add_filter(chooser, filter); - if (sel_filter && *sel_filter) { - if (strcmp(flt_name, *sel_filter) == 0) - gtk_file_chooser_set_filter(chooser, filter); - } + if (sel_filter && *sel_filter && strcmp(flt_name, *sel_filter) == 0) + gtk_file_chooser_set_filter(chooser, filter); } } } From be6d980787f938aaaff45a25dbd0e46d96502fac Mon Sep 17 00:00:00 2001 From: Kirill Volkov Date: Wed, 2 Aug 2023 16:34:29 +0300 Subject: [PATCH 118/298] Change welcome images Removed backgraund --- common/loginpage/res/img/connect1.svg | 292 +++++++++---------- common/loginpage/res/img/connect1_dark.svg | 317 +++++++++------------ common/loginpage/res/img/connect2.svg | 274 +++++++++--------- common/loginpage/res/img/connect2_dark.svg | 277 +++++++++--------- common/loginpage/res/img/connect3.svg | 204 ++++++------- common/loginpage/res/img/connect3_dark.svg | 211 +++++++------- common/loginpage/res/img/welcome.svg | 224 ++++++++++++++- common/loginpage/res/img/welcome_dark.svg | 224 ++++++++++++++- 8 files changed, 1200 insertions(+), 823 deletions(-) diff --git a/common/loginpage/res/img/connect1.svg b/common/loginpage/res/img/connect1.svg index 75e6a5179..eba86a885 100644 --- a/common/loginpage/res/img/connect1.svg +++ b/common/loginpage/res/img/connect1.svg @@ -1,179 +1,147 @@ - - - - - + + + + - - - - - - - - - - - - - - - - - + + + - - - - - - - + + + + + + + - - - - - - - - - - - - - + - + - - - - - - - - - - - - - - - - - - - - - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - diff --git a/common/loginpage/res/img/connect1_dark.svg b/common/loginpage/res/img/connect1_dark.svg index 53b9d8770..aa988f5a5 100644 --- a/common/loginpage/res/img/connect1_dark.svg +++ b/common/loginpage/res/img/connect1_dark.svg @@ -1,182 +1,147 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - diff --git a/common/loginpage/res/img/connect2.svg b/common/loginpage/res/img/connect2.svg index cf9a4f8ea..dae0cee87 100644 --- a/common/loginpage/res/img/connect2.svg +++ b/common/loginpage/res/img/connect2.svg @@ -1,166 +1,156 @@ - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - - - + + + - + - - - - + + + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + - - - - - - + + - - - - - - - - - + + + + + + + - - - - - - + + + + + + - - - - - - - - - - - + + + + + + + + + + + - - - - - - - - - + + + + + + + + + - - + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + - diff --git a/common/loginpage/res/img/connect2_dark.svg b/common/loginpage/res/img/connect2_dark.svg index cbff8163d..634c3d3fd 100644 --- a/common/loginpage/res/img/connect2_dark.svg +++ b/common/loginpage/res/img/connect2_dark.svg @@ -1,138 +1,151 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - + + - diff --git a/common/loginpage/res/img/connect3.svg b/common/loginpage/res/img/connect3.svg index f87c31b51..467d5efa1 100644 --- a/common/loginpage/res/img/connect3.svg +++ b/common/loginpage/res/img/connect3.svg @@ -1,121 +1,129 @@ - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + - + - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - + - - - - - + - + - + - + + + + + + + + - diff --git a/common/loginpage/res/img/connect3_dark.svg b/common/loginpage/res/img/connect3_dark.svg index 645797930..ef65d50f9 100644 --- a/common/loginpage/res/img/connect3_dark.svg +++ b/common/loginpage/res/img/connect3_dark.svg @@ -1,119 +1,124 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - + - + - + + + + + - - + + - diff --git a/common/loginpage/res/img/welcome.svg b/common/loginpage/res/img/welcome.svg index 1d80592b3..825b7be8d 100644 --- a/common/loginpage/res/img/welcome.svg +++ b/common/loginpage/res/img/welcome.svg @@ -1,5 +1,219 @@ - - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/common/loginpage/res/img/welcome_dark.svg b/common/loginpage/res/img/welcome_dark.svg index 34c987719..a5045d2fa 100644 --- a/common/loginpage/res/img/welcome_dark.svg +++ b/common/loginpage/res/img/welcome_dark.svg @@ -1,5 +1,219 @@ - - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 3c687938363085ff00c7840cd8512483d6b956c4 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Wed, 2 Aug 2023 16:44:38 +0300 Subject: [PATCH 119/298] [win-linux] debug --- win-linux/src/components/cfiledialog.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/win-linux/src/components/cfiledialog.cpp b/win-linux/src/components/cfiledialog.cpp index d55196a50..1de53466d 100644 --- a/win-linux/src/components/cfiledialog.cpp +++ b/win-linux/src/components/cfiledialog.cpp @@ -245,7 +245,7 @@ QStringList CFileDialogWrapper::modalOpen(const QString& path, const QString& fi #else " (*.docx *.doc *.odt *.ott *.rtf *.docm *.dot *.dotx *.dotm *.fb2 *.fodt *.wps *.wpt *.xml *.pdf *.djv *.djvu *.sxw *.stw *.xps);;" + #endif - tr("Spreadsheets") + " (*.xlsx *.xls *.xlsm *.xlsb *.ods *.ots *.xltx *.xltm *.xml *.fods *.et *.ett *.sxc);;" + + tr("Spreadsheets") + " (*.xlsx *.xls *.xlsm *.xlsb *.ods *.ots *.xltx *.xltm *.xml *.fods *.et *.ett *.sxc);;" + tr("Presentations") + " (*.pptx *.ppt *.odp *.otp *.ppsm *.ppsx *.pps *.potx *.pot *.potm *.fodp *.dps *.dpt *.sxi);;" + tr("Web Page") + " (*.html *.htm *.mht *.mhtml *.epub);;" + tr("Text files") + " (*.txt *.csv)"; From 4a66f1d9b74d18cb31a78e13c2e611cde0b23298 Mon Sep 17 00:00:00 2001 From: Kirill Volkov Date: Wed, 2 Aug 2023 19:27:46 +0300 Subject: [PATCH 120/298] change welcome images Add symbols tag --- common/loginpage/res/img/connect1.svg | 2 ++ common/loginpage/res/img/connect1_dark.svg | 2 ++ common/loginpage/res/img/connect2.svg | 2 ++ common/loginpage/res/img/connect2_dark.svg | 2 ++ common/loginpage/res/img/connect3.svg | 2 ++ common/loginpage/res/img/connect3_dark.svg | 2 ++ common/loginpage/res/img/welcome.svg | 2 ++ common/loginpage/res/img/welcome_dark.svg | 2 ++ 8 files changed, 16 insertions(+) diff --git a/common/loginpage/res/img/connect1.svg b/common/loginpage/res/img/connect1.svg index eba86a885..4fde96697 100644 --- a/common/loginpage/res/img/connect1.svg +++ b/common/loginpage/res/img/connect1.svg @@ -1,4 +1,5 @@ + @@ -144,4 +145,5 @@ + diff --git a/common/loginpage/res/img/connect1_dark.svg b/common/loginpage/res/img/connect1_dark.svg index aa988f5a5..deac5d42a 100644 --- a/common/loginpage/res/img/connect1_dark.svg +++ b/common/loginpage/res/img/connect1_dark.svg @@ -1,4 +1,5 @@ + @@ -144,4 +145,5 @@ + diff --git a/common/loginpage/res/img/connect2.svg b/common/loginpage/res/img/connect2.svg index dae0cee87..273148935 100644 --- a/common/loginpage/res/img/connect2.svg +++ b/common/loginpage/res/img/connect2.svg @@ -1,4 +1,5 @@ + @@ -153,4 +154,5 @@ + diff --git a/common/loginpage/res/img/connect2_dark.svg b/common/loginpage/res/img/connect2_dark.svg index 634c3d3fd..ff3d26d3f 100644 --- a/common/loginpage/res/img/connect2_dark.svg +++ b/common/loginpage/res/img/connect2_dark.svg @@ -1,4 +1,5 @@ + @@ -148,4 +149,5 @@ + diff --git a/common/loginpage/res/img/connect3.svg b/common/loginpage/res/img/connect3.svg index 467d5efa1..94cfbd7f5 100644 --- a/common/loginpage/res/img/connect3.svg +++ b/common/loginpage/res/img/connect3.svg @@ -1,4 +1,5 @@ + @@ -126,4 +127,5 @@ + diff --git a/common/loginpage/res/img/connect3_dark.svg b/common/loginpage/res/img/connect3_dark.svg index ef65d50f9..2b2edc10b 100644 --- a/common/loginpage/res/img/connect3_dark.svg +++ b/common/loginpage/res/img/connect3_dark.svg @@ -1,4 +1,5 @@ + @@ -121,4 +122,5 @@ + diff --git a/common/loginpage/res/img/welcome.svg b/common/loginpage/res/img/welcome.svg index 825b7be8d..5586e09b7 100644 --- a/common/loginpage/res/img/welcome.svg +++ b/common/loginpage/res/img/welcome.svg @@ -1,4 +1,5 @@ + @@ -216,4 +217,5 @@ + diff --git a/common/loginpage/res/img/welcome_dark.svg b/common/loginpage/res/img/welcome_dark.svg index a5045d2fa..e01213368 100644 --- a/common/loginpage/res/img/welcome_dark.svg +++ b/common/loginpage/res/img/welcome_dark.svg @@ -1,4 +1,5 @@ + @@ -216,4 +217,5 @@ + From 2ff579b0014194c49207b1089b2b88f4ff167f68 Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Thu, 3 Aug 2023 17:05:18 +0300 Subject: [PATCH 121/298] [win-nix] handle portal login event --- .../src/cascapplicationmanagerwrapper.cpp | 4 ++++ win-linux/src/windows/cmainwindow.cpp | 18 ++++++++++++++++++ win-linux/src/windows/cmainwindow.h | 1 + 3 files changed, 23 insertions(+) diff --git a/win-linux/src/cascapplicationmanagerwrapper.cpp b/win-linux/src/cascapplicationmanagerwrapper.cpp index e09f2b8eb..569f33602 100644 --- a/win-linux/src/cascapplicationmanagerwrapper.cpp +++ b/win-linux/src/cascapplicationmanagerwrapper.cpp @@ -248,6 +248,10 @@ bool CAscApplicationManagerWrapper::processCommonEvent(NSEditorApi::CAscCefMenuE } else if ( cmd.compare(L"portal:login") == 0 ) { AscAppManager::sendCommandTo(SEND_TO_ALL_START_PAGE, L"portal:login", pData->get_Param()); + if ( m_pMainWindow ) { + m_pMainWindow->onPortalLogin(event->get_SenderId(), pData->get_Param()); + } + return true; } else if ( cmd.compare(L"portal:logout") == 0 ) { diff --git a/win-linux/src/windows/cmainwindow.cpp b/win-linux/src/windows/cmainwindow.cpp index f8a0ea3e7..6e159479b 100644 --- a/win-linux/src/windows/cmainwindow.cpp +++ b/win-linux/src/windows/cmainwindow.cpp @@ -691,6 +691,24 @@ void CMainWindow::onPortalLogout(std::wstring wjson) } } +void CMainWindow::onPortalLogin(int viewid, const std::wstring &json) +{ + if ( !(json.find(L"uiTheme") == std::wstring::npos) ) { + QJsonParseError jerror; + QJsonDocument jdoc = QJsonDocument::fromJson(QString::fromStdWString(json).toLatin1(), &jerror); + + if( jerror.error == QJsonParseError::NoError ) { + QJsonObject objRoot = jdoc.object(); + QString _ui_theme = objRoot["uiTheme"].toString(); + if ( !_ui_theme.isEmpty() ) { +// onFileLocation(vid, _url); + } + } + + m_pTabs->tabIndexByView(viewid); + } +} + void CMainWindow::doOpenLocalFile(COpenOptions& opts) { QFileInfo info(opts.url); diff --git a/win-linux/src/windows/cmainwindow.h b/win-linux/src/windows/cmainwindow.h index 1a8969351..0f826a69b 100644 --- a/win-linux/src/windows/cmainwindow.h +++ b/win-linux/src/windows/cmainwindow.h @@ -136,6 +136,7 @@ public slots: void onFileLocation(int, QString); void onPortalOpen(QString); void onPortalLogout(std::wstring portal); + void onPortalLogin(int viewid, const std::wstring& json); void onPortalNew(QString); void onPortalCreate(); void onOutsideAuth(QString); From d2cf6e5f1c7e85c0e3261086eded18ed869c6eb9 Mon Sep 17 00:00:00 2001 From: Semyon Bezrukov Date: Thu, 3 Aug 2023 17:40:00 +0300 Subject: [PATCH 122/298] Fix make_zip script (#916) --- win-linux/package/windows/make_zip.ps1 | 37 +++++++++++++++++++------- 1 file changed, 27 insertions(+), 10 deletions(-) diff --git a/win-linux/package/windows/make_zip.ps1 b/win-linux/package/windows/make_zip.ps1 index 93642490f..5701b86aa 100644 --- a/win-linux/package/windows/make_zip.ps1 +++ b/win-linux/package/windows/make_zip.ps1 @@ -1,8 +1,8 @@ param ( + [Parameter(Mandatory)][string]$Target, [string]$BuildDir = "build", [string]$DesktopDir = "DesktopEditors", [string]$MultimediaDir, - [Parameter(Mandatory)][string]$OutFile, [switch]$ExcludeHelp, [switch]$Sign, [string]$CertName = "Ascensio System SIA", @@ -12,6 +12,14 @@ param ( $ErrorActionPreference = "Stop" Set-Location $PSScriptRoot +$Suffix = switch ( $Target ) +{ + "windows_x64" { "x64" } + "windows_x86" { "x86" } + "windows_x64_xp" { "x64-xp" } + "windows_x86_xp" { "x86-xp" } +} + # Check directory if ( -Not (Test-Path -Path $BuildDir) ) { Write-Error "Path $BuildDir does not exist" @@ -24,12 +32,12 @@ if ( $Sign ) { $SignFiles = Get-ChildItem *.exe, *.dll, converter\*.exe, converter\*.dll ` | Resolve-Path -Relative # Sign - Write-Host "signtool sign /a /n $CertName /t $TimestampServer /v $SignFiles" -ForegroundColor Yellow + Write-Host "signtool sign /a /n $CertName /t $TimestampServer $SignFiles" -ForegroundColor Yellow & signtool sign /a /n $CertName /t $TimestampServer /v $SignFiles if ( $LastExitCode -ne 0 ) { throw } # Verify - Write-Host "signtool verify /pa /all /v $SignFiles" -ForegroundColor Yellow - & signtool verify /pa /all /v $SignFiles + Write-Host "signtool verify /pa /all $SignFiles" -ForegroundColor Yellow + & signtool verify /pa /all $SignFiles if ( $LastExitCode -ne 0 ) { throw } Set-Location $PSScriptRoot @@ -44,8 +52,8 @@ if ( $Sign ) { & signtool sign /a /n $CertName /t $TimestampServer /v $SignFiles if ( $LastExitCode -ne 0 ) { throw } # Verify - Write-Host "signtool verify /pa /all /v $SignFiles" -ForegroundColor Yellow - & signtool verify /pa /all /v $SignFiles + Write-Host "signtool verify /pa /all $SignFiles" -ForegroundColor Yellow + & signtool verify /pa /all $SignFiles if ( $LastExitCode -ne 0 ) { throw } Set-Location $PSScriptRoot @@ -53,11 +61,20 @@ if ( $Sign ) { } # Create archive + +$OutFile = "$Env:COMPANY_NAME-$DesktopDir-$Env:PRODUCT_VERSION.$Env:BUILD_NUMBER-$Suffix.zip" if ( !$ExcludeHelp ) { - Write-Host "7z a -y $OutFile .\$BuildDir\*" -ForegroundColor Yellow - & 7z a -y $OutFile .\$BuildDir\* + Write-Host "7z a -y $OutFile .\$BuildDir\$DesktopDir\*" -ForegroundColor Yellow + & 7z a -y $OutFile .\$BuildDir\$DesktopDir\* } else { - Write-Host "7z a -y $OutFile .\$BuildDir\* -xr!$DesktopDir\editors\web-apps\apps\*\main\resources\help" -ForegroundColor Yellow - & 7z a -y $OutFile .\$BuildDir\* -xr!$DesktopDir\editors\web-apps\apps\*\main\resources\help + Write-Host "7z a -y $OutFile .\$BuildDir\$DesktopDir\* -xr!editors\web-apps\apps\*\main\resources\help" -ForegroundColor Yellow + & 7z a -y $OutFile .\$BuildDir\$DesktopDir\* -xr!editors\web-apps\apps\*\main\resources\help } if ( $LastExitCode -ne 0 ) { throw } + +if ( $MultimediaDir ) { + $OutFile = "$Env:COMPANY_NAME-$MultimediaDir-$Env:PRODUCT_VERSION.$Env:BUILD_NUMBER-$Suffix.zip" + Write-Host "7z a -y $OutFile .\$BuildDir\$MultimediaDir\*" -ForegroundColor Yellow + & 7z a -y $OutFile .\$BuildDir\$MultimediaDir\* + if ( $LastExitCode -ne 0 ) { throw } +} From 12245828faac1feddf86579dae56598c574cdbbe Mon Sep 17 00:00:00 2001 From: Kirill Volkov Date: Thu, 3 Aug 2023 18:05:24 +0300 Subject: [PATCH 123/298] Changed some strokes to outline --- common/loginpage/res/img/welcome.svg | 86 +++++++++++------------ common/loginpage/res/img/welcome_dark.svg | 86 +++++++++++------------ 2 files changed, 86 insertions(+), 86 deletions(-) diff --git a/common/loginpage/res/img/welcome.svg b/common/loginpage/res/img/welcome.svg index 5586e09b7..2369567c5 100644 --- a/common/loginpage/res/img/welcome.svg +++ b/common/loginpage/res/img/welcome.svg @@ -1,28 +1,28 @@ - - + + - + - + - - + + - + @@ -33,13 +33,13 @@ - + - - + + - + @@ -62,10 +62,10 @@ - - - - + + + + @@ -89,12 +89,12 @@ - - - - - - + + + + + + @@ -103,7 +103,7 @@ - + @@ -111,13 +111,13 @@ - + - - + + - + @@ -141,16 +141,16 @@ - - - + + + - + @@ -158,7 +158,7 @@ - + @@ -187,33 +187,33 @@ - - - - + + + + - + - - + + - + - + - + - + - + diff --git a/common/loginpage/res/img/welcome_dark.svg b/common/loginpage/res/img/welcome_dark.svg index e01213368..cb79a82e9 100644 --- a/common/loginpage/res/img/welcome_dark.svg +++ b/common/loginpage/res/img/welcome_dark.svg @@ -1,28 +1,28 @@ - - - +C id="welcome-dark" viewBox="0 0 377 193"> + + - + - + - + - + @@ -33,11 +33,11 @@ - + - - + + @@ -62,9 +62,9 @@ - - - + + + @@ -87,13 +87,13 @@ - + - - - - - + + + + + @@ -102,7 +102,7 @@ - + @@ -110,13 +110,13 @@ - + - - + + - + @@ -140,16 +140,16 @@ - - - + + + - + @@ -157,7 +157,7 @@ - + @@ -186,36 +186,36 @@ - - + + - + - + - - - - - + + + + + - + - + - + - + - + From 9e3b813a6b5dc647e8996d1929ae85682d6d1c96 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Fri, 4 Aug 2023 08:31:01 +0300 Subject: [PATCH 124/298] [win] debug --- win-linux/src/platform_win/printdialog.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/win-linux/src/platform_win/printdialog.cpp b/win-linux/src/platform_win/printdialog.cpp index 1f5a8c4ac..bae9f6e57 100644 --- a/win-linux/src/platform_win/printdialog.cpp +++ b/win-linux/src/platform_win/printdialog.cpp @@ -123,12 +123,12 @@ struct PrintDialogCallback : public IPrintDialogCallback LRESULT *pResult) noexcept final { return S_FALSE; } - virtual HRESULT InitDone() noexcept final { + virtual HRESULT STDMETHODCALLTYPE InitDone() noexcept final { if (m_dialog_was_changed && *m_dialog_was_changed) // Restore print dialog type resetLegacyPrintDialog(); return S_FALSE; } - virtual HRESULT SelectionChange() noexcept final { + virtual HRESULT STDMETHODCALLTYPE SelectionChange() noexcept final { return S_FALSE; } From 9d3574b6a5b154c64bd1f29c7515b24f2da79b9d Mon Sep 17 00:00:00 2001 From: Kirill Volkov Date: Fri, 4 Aug 2023 11:02:25 +0300 Subject: [PATCH 125/298] Corrected the symbol tag --- common/loginpage/res/img/welcome_dark.svg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/loginpage/res/img/welcome_dark.svg b/common/loginpage/res/img/welcome_dark.svg index cb79a82e9..9f9ebfc17 100644 --- a/common/loginpage/res/img/welcome_dark.svg +++ b/common/loginpage/res/img/welcome_dark.svg @@ -1,5 +1,5 @@ -C id="welcome-dark" viewBox="0 0 377 193"> + From 9d0a94d9f758bc23e66dc24777b7dbd2538fb1c3 Mon Sep 17 00:00:00 2001 From: Kirill Volkov Date: Fri, 4 Aug 2023 11:33:43 +0300 Subject: [PATCH 126/298] corrected the mistakes --- common/loginpage/res/img/connect1.svg | 86 +++++++-------- common/loginpage/res/img/connect1_dark.svg | 76 ++++++------- common/loginpage/res/img/connect2.svg | 120 ++++++++++---------- common/loginpage/res/img/connect2_dark.svg | 121 +++++++++++---------- common/loginpage/res/img/connect3.svg | 92 ++++++++-------- common/loginpage/res/img/connect3_dark.svg | 84 +++++++------- 6 files changed, 290 insertions(+), 289 deletions(-) diff --git a/common/loginpage/res/img/connect1.svg b/common/loginpage/res/img/connect1.svg index 4fde96697..67d102bc4 100644 --- a/common/loginpage/res/img/connect1.svg +++ b/common/loginpage/res/img/connect1.svg @@ -1,41 +1,41 @@ - - - + + + - - + + - - - + + + - - - + + + - + - + - - + + - + @@ -83,10 +83,10 @@ - - - - + + + + @@ -96,10 +96,10 @@ - + - + @@ -110,40 +110,40 @@ - - - - - - - + + + + + + + - - + + - + - - - - - + + + + + - - + + - + - + - + - + diff --git a/common/loginpage/res/img/connect1_dark.svg b/common/loginpage/res/img/connect1_dark.svg index deac5d42a..8f3d819de 100644 --- a/common/loginpage/res/img/connect1_dark.svg +++ b/common/loginpage/res/img/connect1_dark.svg @@ -1,41 +1,41 @@ - - + + - - + + - + - - + + - + - + - + - - + + - + @@ -83,10 +83,10 @@ - - - - + + + + @@ -96,10 +96,10 @@ - + - + @@ -110,40 +110,40 @@ - - - - - - - + + + + + + + - - + + - + - + - - - + + + - + - + - + - + - + diff --git a/common/loginpage/res/img/connect2.svg b/common/loginpage/res/img/connect2.svg index 273148935..5c18a3cd9 100644 --- a/common/loginpage/res/img/connect2.svg +++ b/common/loginpage/res/img/connect2.svg @@ -1,26 +1,26 @@ - - + + - - + + - - - + + + - - - + + + @@ -29,53 +29,53 @@ - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - - + + - + - - - - - + + + + + @@ -86,10 +86,10 @@ - - + + - + @@ -99,15 +99,15 @@ - - - - - - - - - + + + + + + + + + @@ -143,14 +143,14 @@ - + - + - + diff --git a/common/loginpage/res/img/connect2_dark.svg b/common/loginpage/res/img/connect2_dark.svg index ff3d26d3f..3ab9df80c 100644 --- a/common/loginpage/res/img/connect2_dark.svg +++ b/common/loginpage/res/img/connect2_dark.svg @@ -1,25 +1,25 @@ - - + + - - + + - - - + + + - - - + + + @@ -28,53 +28,53 @@ - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - - + + - + - - - - - + + + + + @@ -82,13 +82,14 @@ - + - - - - + + + + + @@ -98,15 +99,15 @@ - - - - - - - - - + + + + + + + + + @@ -142,10 +143,10 @@ - + - + diff --git a/common/loginpage/res/img/connect3.svg b/common/loginpage/res/img/connect3.svg index 94cfbd7f5..5151d7a2a 100644 --- a/common/loginpage/res/img/connect3.svg +++ b/common/loginpage/res/img/connect3.svg @@ -1,23 +1,23 @@ - - - - - - - + + + + + + + - - - - - + + + + + - - - - - + + + + + @@ -41,19 +41,19 @@ - + - + - - - - - - - + + + + + + + @@ -68,64 +68,64 @@ - - - - + + + + - + - + - - + + - - + + - - + + - + - + - + - + - + - + - + - + diff --git a/common/loginpage/res/img/connect3_dark.svg b/common/loginpage/res/img/connect3_dark.svg index 2b2edc10b..c3f0c6ea4 100644 --- a/common/loginpage/res/img/connect3_dark.svg +++ b/common/loginpage/res/img/connect3_dark.svg @@ -1,24 +1,24 @@ - - - - - - - - - - - + + + + + + + + + + + - - - - - + + + + + - + @@ -40,19 +40,19 @@ - + - + - - - - - + + + + + @@ -67,58 +67,58 @@ - - - - + + + + - + - + - - + + - - + + - - + + - + - + - + - + - + - + From 7d8e315ea785e2c526aa4127d3804f733b4df528 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Fri, 4 Aug 2023 12:42:08 +0300 Subject: [PATCH 127/298] [win-linux] refactoring csvcmanager.cpp --- .../update-daemon/src/classes/csvcmanager.cpp | 75 +++++++------------ 1 file changed, 29 insertions(+), 46 deletions(-) diff --git a/win-linux/extras/update-daemon/src/classes/csvcmanager.cpp b/win-linux/extras/update-daemon/src/classes/csvcmanager.cpp index facdb7317..a7f1568ad 100644 --- a/win-linux/extras/update-daemon/src/classes/csvcmanager.cpp +++ b/win-linux/extras/update-daemon/src/classes/csvcmanager.cpp @@ -390,17 +390,14 @@ void CSvcManager::startReplacingFiles() #ifdef _WIN32 # ifndef DONT_VERIFY_SIGNATURE // Verify the signature of executable files - if (!NS_File::verifyEmbeddedSignature(updPath + APP_LAUNCH_NAME)) { - NS_Logger::WriteLog(L"Update cancelled. The file signature is missing: " + updPath + APP_LAUNCH_NAME, true); - return; - } - if (!NS_File::verifyEmbeddedSignature(updPath + APP_LAUNCH_NAME2)) { - NS_Logger::WriteLog(L"Update cancelled. The file signature is missing: " + updPath + APP_LAUNCH_NAME2, true); - return; - } - if (!NS_File::verifyEmbeddedSignature(updPath + DAEMON_NAME)) { - NS_Logger::WriteLog(L"Update cancelled. The file signature is missing: " + updPath + DAEMON_NAME, true); - return; + { + tstring apps[] = {APP_LAUNCH_NAME, APP_LAUNCH_NAME2, APP_HELPER, DAEMON_NAME}; + for (int i = 0; i < sizeof(apps) / sizeof(apps[0]); i++) { + if (!NS_File::verifyEmbeddedSignature(updPath + apps[i])) { + NS_Logger::WriteLog(L"Update cancelled. The file signature is missing: " + updPath + apps[i], true); + return; + } + } } # endif #endif @@ -413,33 +410,22 @@ void CSvcManager::startReplacingFiles() // Wait until the main app closes { - int retries = 10; #ifdef _WIN32 - tstring app(APP_LAUNCH_NAME2); + tstring apps[] = {APP_LAUNCH_NAME2, APP_HELPER}; #else - tstring app(APP_LAUNCH_NAME); + tstring apps[] = {APP_LAUNCH_NAME, APP_HELPER}; #endif - app = app.substr(1); - while (NS_File::isProcessRunning(app) && retries-- > 0) - sleep(500); - - if (NS_File::isProcessRunning(app)) { - NS_Logger::WriteLog(TEXT("Update cancelled. The main application is not closed!"), true); - return; - } - } - - // Wait until editors_helper.exe closes - { - int retries = 10; - tstring app(APP_HELPER); - app = app.substr(1); - while (NS_File::isProcessRunning(app) && retries-- > 0) - sleep(500); - - if (NS_File::isProcessRunning(app)) { - NS_Logger::WriteLog(TEXT("Update cancelled. The editors_helper is not closed!"), true); - return; + for (int i = 0; i < sizeof(apps) / sizeof(apps[0]); i++) { + int retries = 10; + tstring app(apps[i]); + app = app.substr(1); + while (NS_File::isProcessRunning(app) && retries-- > 0) + sleep(500); + + if (NS_File::isProcessRunning(app)) { + NS_Logger::WriteLog(TEXT("Update cancelled. The ") + app + TEXT(" is not closed!"), true); + return; + } } } @@ -479,13 +465,14 @@ void CSvcManager::startReplacingFiles() } #ifdef _WIN32 - // To support a version with unins000 files inside the working folder - if (NS_File::fileExists(tmpPath + L"/unins000.msg")) - NS_File::replaceFile(tmpPath + L"/unins000.msg", appPath + L"/unins000.msg"); - if (NS_File::fileExists(tmpPath + L"/unins000.dat")) - NS_File::replaceFile(tmpPath + L"/unins000.dat", appPath + L"/unins000.dat"); - if (NS_File::fileExists(tmpPath + L"/unins000.exe")) - NS_File::replaceFile(tmpPath + L"/unins000.exe", appPath + L"/unins000.exe"); + // Moving the necessary files to their original location + { + tstring files[] = {L"/unins000.msg", L"/unins000.dat", L"/unins000.exe", L"/converter/package.config"}; + for (int i = 0; i < sizeof(files) / sizeof(files[0]); i++) { + if (NS_File::fileExists(tmpPath + files[i])) + NS_File::replaceFile(tmpPath + files[i], appPath + files[i]); + } + } // To support a version without updatesvc.exe inside the working folder if (!NS_File::fileExists(appPath + DAEMON_NAME)) @@ -493,10 +480,6 @@ void CSvcManager::startReplacingFiles() else NS_File::replaceFile(tmpPath + DAEMON_NAME, appPath + DAEMON_NAME_OLD); - // Package type sync - if (NS_File::fileExists(tmpPath + TEXT("/converter/package.config"))) - NS_File::replaceFile(tmpPath + TEXT("/converter/package.config"), appPath + TEXT("/converter/package.config")); - // Update version in registry { wstring ver; From 55f97447aa05222854957eac07f9c0c3f057051b Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Fri, 4 Aug 2023 12:48:22 +0300 Subject: [PATCH 128/298] [win-linux] adaptation of the update service to the archive structure --- .../extras/update-daemon/src/classes/csvcmanager.cpp | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/win-linux/extras/update-daemon/src/classes/csvcmanager.cpp b/win-linux/extras/update-daemon/src/classes/csvcmanager.cpp index a7f1568ad..d05612c53 100644 --- a/win-linux/extras/update-daemon/src/classes/csvcmanager.cpp +++ b/win-linux/extras/update-daemon/src/classes/csvcmanager.cpp @@ -50,6 +50,7 @@ # define DAEMON_NAME L"/updatesvc.exe" # define DAEMON_NAME_OLD L"/~updatesvc.exe" # define RESTART_BATCH L"/svcrestart.bat" +# define SUBFOLDER TEXT("/" REG_APP_NAME) # define ARCHIVE_EXT TEXT(".zip") # define ARCHIVE_PATTERN TEXT("*.zip") # define sleep(a) Sleep(a) @@ -381,6 +382,7 @@ void CSvcManager::startReplacingFiles() { tstring appPath = NS_File::appPath(); tstring updPath = NS_File::parentPath(appPath) + UPDATE_PATH; + tstring updSubPath = NS_File::fileExists(updPath + SUBFOLDER + APP_LAUNCH_NAME) ? updPath + SUBFOLDER : updPath; tstring tmpPath = NS_File::parentPath(appPath) + BACKUP_PATH; if (!NS_File::dirExists(updPath)) { NS_Logger::WriteLog(TEXT("Update cancelled. Can't find folder: ") + updPath, true); @@ -393,8 +395,8 @@ void CSvcManager::startReplacingFiles() { tstring apps[] = {APP_LAUNCH_NAME, APP_LAUNCH_NAME2, APP_HELPER, DAEMON_NAME}; for (int i = 0; i < sizeof(apps) / sizeof(apps[0]); i++) { - if (!NS_File::verifyEmbeddedSignature(updPath + apps[i])) { - NS_Logger::WriteLog(L"Update cancelled. The file signature is missing: " + updPath + apps[i], true); + if (!NS_File::verifyEmbeddedSignature(updSubPath + apps[i])) { + NS_Logger::WriteLog(L"Update cancelled. The file signature is missing: " + updSubPath + apps[i], true); return; } } @@ -446,11 +448,7 @@ void CSvcManager::startReplacingFiles() } // Move update path to app path -#ifdef _WIN32 - if (!NS_File::replaceFolder(updPath, appPath, true)) { -#else - if (!NS_File::replaceFolder(updPath + SUBFOLDER, appPath, true)) { -#endif + if (!NS_File::replaceFolder(updSubPath, appPath, true)) { NS_Logger::WriteLog(TEXT("Update cancelled. Can't move updates to App path: ") + NS_Utils::GetLastErrorAsString(), true); if (NS_File::dirExists(appPath) && !NS_File::removeDirRecursively(appPath)) { From 39ee3c0b044d8f53f392654a24ba7a06e06fd8b0 Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Sat, 5 Aug 2023 00:24:35 +0300 Subject: [PATCH 129/298] [start page] fix bug 63432 --- common/loginpage/src/panelsettings.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/common/loginpage/src/panelsettings.js b/common/loginpage/src/panelsettings.js index 05d593f48..04cc3ecaa 100644 --- a/common/loginpage/src/panelsettings.js +++ b/common/loginpage/src/panelsettings.js @@ -633,9 +633,9 @@ } function _on_lang_changed(ol,nl) { - $('option[value=silent]', this.view.$panel).attr('data-subtext', utils.Lang.settOptDescAUpdateSilent); - $('option[value=ask]', this.view.$panel).attr('data-subtext', utils.Lang.settOptDescAUpdateAsk); - $('option[value=disabled]', this.view.$panel).attr('data-subtext', utils.Lang.settOptDescDisabled); + // $('option[value=silent]', this.view.$panel).attr('data-subtext', utils.Lang.settOptDescAUpdateSilent); + // $('option[value=ask]', this.view.$panel).attr('data-subtext', utils.Lang.settOptDescAUpdateAsk); + // $('option[value=disabled]', this.view.$panel).attr('data-subtext', utils.Lang.settOptDescDisabled); // for ( let k of Object.keys(themes_map) ) { // const t = themes_map[k] From da4f499b1fd8b39e4606763ee439f1996ffc739a Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Sun, 6 Aug 2023 21:45:32 +0300 Subject: [PATCH 130/298] [macos] fix tab's color for PE --- .../Code/Extensions/NSColor+Extensions.m | 2 +- .../Contents.json | 22 +++++++++---------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/macos/ONLYOFFICE/Code/Extensions/NSColor+Extensions.m b/macos/ONLYOFFICE/Code/Extensions/NSColor+Extensions.m index bfc3e04e0..1002c23a3 100644 --- a/macos/ONLYOFFICE/Code/Extensions/NSColor+Extensions.m +++ b/macos/ONLYOFFICE/Code/Extensions/NSColor+Extensions.m @@ -64,7 +64,7 @@ + (NSColor *) brendPresentationEditor { if (@available(macOS 10.13, *)) { return [NSColor colorNamed:@"brend-PresentationEditor"]; } - return UIColorFromRGB(0xaa5252); + return UIColorFromRGB(0xbe664f); } @end diff --git a/macos/ONLYOFFICE/Images.xcassets/Colors/Editors/brend-PresentationEditor.colorset/Contents.json b/macos/ONLYOFFICE/Images.xcassets/Colors/Editors/brend-PresentationEditor.colorset/Contents.json index 139d1a466..ffc4ad622 100644 --- a/macos/ONLYOFFICE/Images.xcassets/Colors/Editors/brend-PresentationEditor.colorset/Contents.json +++ b/macos/ONLYOFFICE/Images.xcassets/Colors/Editors/brend-PresentationEditor.colorset/Contents.json @@ -1,20 +1,20 @@ { - "info" : { - "version" : 1, - "author" : "xcode" - }, "colors" : [ { - "idiom" : "universal", "color" : { "color-space" : "srgb", "components" : { - "red" : "0.666", "alpha" : "1.000", - "blue" : "0.321", - "green" : "0.321" + "blue" : "0x4F", + "green" : "0x66", + "red" : "0xBE" } - } + }, + "idiom" : "universal" } - ] -} \ No newline at end of file + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} From 735cc88f13412c812729cd5bd1f0c72ccc3922af Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Sun, 6 Aug 2023 22:22:32 +0300 Subject: [PATCH 131/298] [macos] fix pe tab icons --- .../ppt_desktop.png | Bin 104 -> 198 bytes .../ppt_desktop_2x.png | Bin 151 -> 218 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/macos/ONLYOFFICE/Images.xcassets/Tabs/icon_tabs_pe_active.imageset/ppt_desktop.png b/macos/ONLYOFFICE/Images.xcassets/Tabs/icon_tabs_pe_active.imageset/ppt_desktop.png index 2a773eb880b85adb0d00f4dbea2c4aade26e50f4..de4dcaf1064ccec262fd33a16b0e89cf5dd1db7f 100644 GIT binary patch delta 169 zcmc~e#yCNxp0PN{-HBn{IhmIX3=Aykj=qiz3>*8o|0J>k`J4qFk;M!Qe1}1p@p%4< z6rfUt!(Zl;W~!_4`PJDE?Zaqg)+TqDBp(OIsw TRqNdZpgjzpu6{1-oD!MoKF{I*Fa)hWziA2Z$$&LKR6IKfLtXw=(q#@MUa9eMdoXD(`ea{&^ e=RJA0N||BxMaRl18x;E)fWXt$&t;ucLK6T|W*u?> diff --git a/macos/ONLYOFFICE/Images.xcassets/Tabs/icon_tabs_pe_active.imageset/ppt_desktop_2x.png b/macos/ONLYOFFICE/Images.xcassets/Tabs/icon_tabs_pe_active.imageset/ppt_desktop_2x.png index 4c38113a138100437826b62f5266007044331ef2..29a6147dd7d54c09743938ffabc876879f7be1c8 100644 GIT binary patch delta 190 zcmbQvc#Cm@NGZx^prw85kH?(j9#r85lP9bN@+X1@buyJR*x382Ao@Fyrz3 z6)8Z$d`}n05D)Lf-2B}Rrpd+`oA1DxPdiTJA mNS-$irVcktnAvCCkY)(3P}p Date: Sun, 6 Aug 2023 22:39:57 +0300 Subject: [PATCH 132/298] [macos] compressed icons --- .../ppt_desktop.png | Bin 198 -> 127 bytes .../ppt_desktop_2x.png | Bin 218 -> 129 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/macos/ONLYOFFICE/Images.xcassets/Tabs/icon_tabs_pe_active.imageset/ppt_desktop.png b/macos/ONLYOFFICE/Images.xcassets/Tabs/icon_tabs_pe_active.imageset/ppt_desktop.png index de4dcaf1064ccec262fd33a16b0e89cf5dd1db7f..df031091f7c97970a3e2ea0b221929a1840fb845 100644 GIT binary patch delta 109 zcmX@cSU*7`or#%&fx&G@?M)!X8Q>G*x+*AWUz-2_|NocVE@lG?GL{7S1s}Qd{@!^Y zN5#{{F@)oKvH&kHZvqF9XcP!s9p;>}?r*HaB=`G;ls*J~1so|H+%cvnotok0jU4lyR6j-*G4NDK*YL dm4|CY7(P17wYF-#n*g+j!PC{xWt~$(695{!J{AA~ diff --git a/macos/ONLYOFFICE/Images.xcassets/Tabs/icon_tabs_pe_active.imageset/ppt_desktop_2x.png b/macos/ONLYOFFICE/Images.xcassets/Tabs/icon_tabs_pe_active.imageset/ppt_desktop_2x.png index 29a6147dd7d54c09743938ffabc876879f7be1c8..271a30ef673117c478dfd0c62059a1c571d0eb50 100644 GIT binary patch delta 112 zcmcb`*vL3RB9n=kfq}s-&dm@=aR&H=xYlKa?Mw6j|NlR45yw=ZAY)08UvS;`=$2R@ zN6pj4F+}2WvH&kDGkaSA2Zuu6MlP0VO2*TgQrJ2gU&>9|!_3dZpu0C--tp6gR-g_B MPgg&ebxsLQ03J^vh5!Hn delta 202 zcmZoU}oXkrghb7(7*O7r?V?XzwL{=c5v%n*= zn1O-sFbFdq&tH)O6wLQ@aSZYBPF{1GV|D3|@0&Xt`yMa|SIa)$XY&7lfL$!3@RViN z5?g2FF(?;Wp1Z@48Yuq8pTA*~Lc)ii5_emlFgeFO>s^+$t1+GHH<7gabNq wYx{xxVAHz?4n*?2aWHkbS;EXd Date: Mon, 7 Aug 2023 13:15:40 +0300 Subject: [PATCH 133/298] [win-linux] merge providers folder after update via archive --- .../update-daemon/src/classes/csvcmanager.cpp | 20 +++++++++++++++++++ .../src/platform_linux/utils.cpp | 8 ++++++-- .../update-daemon/src/platform_linux/utils.h | 2 +- .../update-daemon/src/platform_win/utils.cpp | 12 ++++++++--- .../update-daemon/src/platform_win/utils.h | 2 +- 5 files changed, 37 insertions(+), 7 deletions(-) diff --git a/win-linux/extras/update-daemon/src/classes/csvcmanager.cpp b/win-linux/extras/update-daemon/src/classes/csvcmanager.cpp index d05612c53..140a09f74 100644 --- a/win-linux/extras/update-daemon/src/classes/csvcmanager.cpp +++ b/win-linux/extras/update-daemon/src/classes/csvcmanager.cpp @@ -70,6 +70,7 @@ #define UPDATE_PATH TEXT("/" REG_APP_NAME "Updates") #define BACKUP_PATH TEXT("/" REG_APP_NAME "Backup") +#define PROVIDERS_PATH TEXT("/providers") #define SUCCES_UNPACKED TEXT("/success_unpacked.txt") using std::vector; @@ -506,6 +507,25 @@ void CSvcManager::startReplacingFiles() } #endif + // Merging provider folders + { + tstring err; + std::list old_providers, new_providers; + if (NS_File::GetFilesList(tmpPath + PROVIDERS_PATH, &old_providers, err, true, true)) { + if (NS_File::GetFilesList(appPath + PROVIDERS_PATH, &new_providers, err, true, true)) { + for (auto &path : old_providers) { + if (std::find(new_providers.begin(), new_providers.end(), path) == new_providers.end()) { + if (!NS_File::replaceFolder(tmpPath + PROVIDERS_PATH + path, appPath + PROVIDERS_PATH + path)) { + NS_Logger::WriteLog(TEXT("An error occurred while replace providers: ") + NS_Utils::GetLastErrorAsString()); + } + } + } + } else + NS_Logger::WriteLog(DEFAULT_ERROR_MESSAGE + TEXT(" ") + err); + } else + NS_Logger::WriteLog(DEFAULT_ERROR_MESSAGE + TEXT(" ") + err); + } + // Remove Backup dir NS_File::removeDirRecursively(tmpPath); diff --git a/win-linux/extras/update-daemon/src/platform_linux/utils.cpp b/win-linux/extras/update-daemon/src/platform_linux/utils.cpp index 00638dcb1..3e4d8dd44 100644 --- a/win-linux/extras/update-daemon/src/platform_linux/utils.cpp +++ b/win-linux/extras/update-daemon/src/platform_linux/utils.cpp @@ -160,7 +160,7 @@ namespace NS_File app_path = parentPath(path); } - bool GetFilesList(const string &path, list *lst, string &error, bool ignore_locked) + bool GetFilesList(const string &path, list *lst, string &error, bool ignore_locked, bool folders_only) { DIR *dir = opendir(path.c_str()); if (!dir) { @@ -185,12 +185,16 @@ namespace NS_File if (S_ISDIR(info.st_mode)) { if (ignore_locked && access(_path, R_OK) != 0) continue; + if (folders_only) { + lst->push_back(string("/") + entry->d_name); + continue; + } if (!GetFilesList(_path, lst, error, ignore_locked)) { closedir(dir); return false; } } else - if (S_ISREG(info.st_mode)) + if (!folders_only && S_ISREG(info.st_mode)) lst->push_back(_path); } diff --git a/win-linux/extras/update-daemon/src/platform_linux/utils.h b/win-linux/extras/update-daemon/src/platform_linux/utils.h index b1c6de020..56795f027 100644 --- a/win-linux/extras/update-daemon/src/platform_linux/utils.h +++ b/win-linux/extras/update-daemon/src/platform_linux/utils.h @@ -54,7 +54,7 @@ int ShowMessage(string str, bool showError = false); namespace NS_File { void setAppPath(const string &path); -bool GetFilesList(const string &path, list *lst, string &error, bool ignore_locked = false); +bool GetFilesList(const string &path, list *lst, string &error, bool ignore_locked = false, bool folders_only = false); bool readFile(const string &filePath, list &linesList); bool writeToFile(const string &filePath, list &linesList); bool runProcess(const string &fileName, const string &args); diff --git a/win-linux/extras/update-daemon/src/platform_win/utils.cpp b/win-linux/extras/update-daemon/src/platform_win/utils.cpp index 876b462b6..3f8fc9535 100644 --- a/win-linux/extras/update-daemon/src/platform_win/utils.cpp +++ b/win-linux/extras/update-daemon/src/platform_win/utils.cpp @@ -90,7 +90,7 @@ namespace NS_Utils namespace NS_File { - bool GetFilesList(const wstring &path, list *lst, wstring &error, bool ignore_locked) + bool GetFilesList(const wstring &path, list *lst, wstring &error, bool ignore_locked, bool folders_only) { wstring searchPath = toNativeSeparators(path) + L"\\*"; if (searchPath.size() > MAX_PATH - 1) { @@ -111,12 +111,18 @@ namespace NS_File if (ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { if (!wcscmp(ffd.cFileName, L".") || !wcscmp(ffd.cFileName, L"..")) continue; + if (folders_only) { + lst->push_back(L"/" + wstring(ffd.cFileName)); + continue; + } if (!GetFilesList(path + L"/" + wstring(ffd.cFileName), lst, error, ignore_locked)) { FindClose(hFind); return false; } - } else - lst->push_back(path + L"/" + wstring(ffd.cFileName)); + } else { + if (!folders_only) + lst->push_back(path + L"/" + wstring(ffd.cFileName)); + } } while (FindNextFile(hFind, &ffd) != 0); diff --git a/win-linux/extras/update-daemon/src/platform_win/utils.h b/win-linux/extras/update-daemon/src/platform_win/utils.h index b8b8fb0ad..5fa44db0c 100644 --- a/win-linux/extras/update-daemon/src/platform_win/utils.h +++ b/win-linux/extras/update-daemon/src/platform_win/utils.h @@ -54,7 +54,7 @@ int ShowMessage(wstring str, bool showError = false); namespace NS_File { -bool GetFilesList(const wstring &path, list *lst, wstring &error, bool ignore_locked = false); +bool GetFilesList(const wstring &path, list *lst, wstring &error, bool ignore_locked = false, bool folders_only = false); bool readFile(const wstring &filePath, list &linesList); bool writeToFile(const wstring &filePath, list &linesList); bool runProcess(const wstring &fileName, const wstring &args); From 99c235f3d2c730633ded0d22c9958c2ed7062a67 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Tue, 8 Aug 2023 14:16:59 +0300 Subject: [PATCH 134/298] [win] fix bug 63589 --- win-linux/src/cascapplicationmanagerwrapper.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/win-linux/src/cascapplicationmanagerwrapper.cpp b/win-linux/src/cascapplicationmanagerwrapper.cpp index e09f2b8eb..0a91bb601 100644 --- a/win-linux/src/cascapplicationmanagerwrapper.cpp +++ b/win-linux/src/cascapplicationmanagerwrapper.cpp @@ -887,7 +887,9 @@ void CAscApplicationManagerWrapper::handleInputCmd(const std::vector& v if ( !_app.m_pMainWindow ) { _app.m_pMainWindow = _app.prepareMainWindow(_start_rect); _app.m_pMainWindow->show(reg_user.value("maximized", false).toBool()); - } + } else + if (!_app.m_pMainWindow->isVisible()) + _app.m_pMainWindow->show(_app.m_pMainWindow->windowState().testFlag(Qt::WindowMaximized)); _app.mainWindow()->attachEditor(panel); QTimer::singleShot(100, &_app, [&]{ From 550c550c577000bac21db7332bb70bf8aee74b3d Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Wed, 9 Aug 2023 11:35:32 +0300 Subject: [PATCH 135/298] [start page] locked extra features checking --- common/loginpage/src/utils.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/loginpage/src/utils.js b/common/loginpage/src/utils.js index 00957b43b..ff9c2e302 100644 --- a/common/loginpage/src/utils.js +++ b/common/loginpage/src/utils.js @@ -384,5 +384,5 @@ function getUrlParams() { } utils.inParams = getUrlParams(); -utils.brandCheck = opts => true; +utils.brandCheck = opts => false; utils.isWinXp = utils.inParams.osver == 'winxp' || /windows nt 5/i.test(navigator.appVersion); From 598fead09988b01d7807734e5917dd5d24df9127 Mon Sep 17 00:00:00 2001 From: Maria-Sukhova Date: Wed, 9 Aug 2023 13:24:54 +0300 Subject: [PATCH 136/298] renamed Chinese traditional --- .../loginpage/locale/{zh-HK.js => zh-tw.js} | 2 +- .../{zh-Hant.xliff => zh-tw.xliff} | 14 +- win-linux/langs/{zh_HK.qm => zh_tw.qm} | Bin win-linux/langs/{zh_HK.ts => zh_tw.ts} | 2 +- win-linux/package/windows/associate_page.iss | 144 +++++++++--------- win-linux/package/windows/common.iss | 38 ++--- win-linux/package/windows/uninstall_page.iss | 8 +- 7 files changed, 104 insertions(+), 104 deletions(-) rename common/loginpage/locale/{zh-HK.js => zh-tw.js} (99%) rename macos/Localization/{zh-Hant.xliff => zh-tw.xliff} (99%) rename win-linux/langs/{zh_HK.qm => zh_tw.qm} (100%) rename win-linux/langs/{zh_HK.ts => zh_tw.ts} (99%) diff --git a/common/loginpage/locale/zh-HK.js b/common/loginpage/locale/zh-tw.js similarity index 99% rename from common/loginpage/locale/zh-HK.js rename to common/loginpage/locale/zh-tw.js index f8514414d..92d344c6c 100644 --- a/common/loginpage/locale/zh-HK.js +++ b/common/loginpage/locale/zh-tw.js @@ -1,4 +1,4 @@ -l10n.zh_HK = { +l10n.zh_tw = { welWelcome: '歡迎使用 ONLYOFFICE 桌面編輯器!', welDescr: '以離線方式在文件上工作,或將套件連線至您的雲端:ONLYOFFICE, ownCloud, Nextcloud', btnConnect: '立即連線', diff --git a/macos/Localization/zh-Hant.xliff b/macos/Localization/zh-tw.xliff similarity index 99% rename from macos/Localization/zh-Hant.xliff rename to macos/Localization/zh-tw.xliff index 3dfb24ea8..287f2c3b2 100644 --- a/macos/Localization/zh-Hant.xliff +++ b/macos/Localization/zh-tw.xliff @@ -1,6 +1,6 @@ - +
@@ -67,7 +67,7 @@
- +
@@ -453,7 +453,7 @@ We have a special offer for you.
- +
@@ -492,7 +492,7 @@ The trial period will end in %d days, after that you will not be able to create
- +
@@ -1259,7 +1259,7 @@ The trial period will end in %d days, after that you will not be able to create
- +
@@ -1306,7 +1306,7 @@ The trial period will end in %d days, after that you will not be able to create
- +
@@ -1318,7 +1318,7 @@ The trial period will end in %d days, after that you will not be able to create
- +
diff --git a/win-linux/langs/zh_HK.qm b/win-linux/langs/zh_tw.qm similarity index 100% rename from win-linux/langs/zh_HK.qm rename to win-linux/langs/zh_tw.qm diff --git a/win-linux/langs/zh_HK.ts b/win-linux/langs/zh_tw.ts similarity index 99% rename from win-linux/langs/zh_HK.ts rename to win-linux/langs/zh_tw.ts index 29a9165db..2eb311dc5 100644 --- a/win-linux/langs/zh_HK.ts +++ b/win-linux/langs/zh_tw.ts @@ -1,6 +1,6 @@ - + CAscApplicationManagerWrapper diff --git a/win-linux/package/windows/associate_page.iss b/win-linux/package/windows/associate_page.iss index f733e5f22..73caecc2c 100644 --- a/win-linux/package/windows/associate_page.iss +++ b/win-linux/package/windows/associate_page.iss @@ -44,8 +44,8 @@ no.AssociateDescription =Tilknytt filtyper for Office-dokumenter til {#ASSC_APP_ uk.AssociateDescription =Асоціювати типи файлів офісних документів з {#ASSC_APP_NAME} be.AssociateDescription =Звязаць тыпы файлаў дакументаў офіса з {#ASSC_APP_NAME} gl.AssociateDescription =Asociar tipos de ficheiros de documentos de oficina con {#ASSC_APP_NAME} -;si.AssociateDescription ={#ASSC_APP_NAME} සමඟ කාර්යාල ලේඛන ගොනු වර්ග සම්බන්ධ කරන්න -;zh_HK.AssociateDescription =與文書處理檔案類型聯結{#ASSC_APP_NAME} +si.AssociateDescription ={#ASSC_APP_NAME} සමඟ කාර්යාල ලේඛන ගොනු වර්ග සම්බන්ධ කරන්න +zh_tw.AssociateDescription =與文書處理檔案類型聯結{#ASSC_APP_NAME} en.AssociateCaption =File Associations bg.AssociateCaption =Свързвания на файлове @@ -86,8 +86,8 @@ no.AssociateCaption =Filtilknytninger uk.AssociateCaption =Асоціації файлів be.AssociateCaption =Асацыяцыя файлаў gl.AssociateCaption =Asociacións do ficheiro -;si.AssociateCaption =ගොනු නිශ්‍රය -;zh_HK.AssociateCaption =檔案聯結 +si.AssociateCaption =ගොනු නිශ්‍රය +zh_tw.AssociateCaption =檔案聯結 en.AssociateDont =Do not associate ca.AssociateDont =No associar @@ -128,8 +128,8 @@ no.AssociateDont =Ikke tilknytt uk.AssociateDont =Не асоціювати be.AssociateDont =Не звязваць gl.AssociateDont =Non asociar -;si.AssociateDont =නිශ්‍ර කොකරන්න -;zh_HK.AssociateDont =不要聯結 +si.AssociateDont =නිශ්‍ර කොකරන්න +zh_tw.AssociateDont =不要聯結 en.AssociateAll =Associate all bg.AssociateAll =Свържи всички @@ -170,8 +170,8 @@ no.AssociateAll =Tilknytt alle uk.AssociateAll =Асоціювати всі be.AssociateAll =Звязаць усе gl.AssociateAll =Asociar todo -;si.AssociateAll =සියල්ල නිහ්ශ්‍රය -;zh_HK.AssociateAll =全部聯結 +si.AssociateAll =සියල්ල නිහ්ශ්‍රය +zh_tw.AssociateAll =全部聯結 en.AssociateSel =Associate selected bg.AssociateSel =Свържи избраните @@ -212,8 +212,8 @@ no.AssociateSel =Tilknytning valgt uk.AssociateSel =Асоціювати вибрані be.AssociateSel =Звязаць выбраныя gl.AssociateSel =Asociación seleccionada -;si.AssociateSel =තේරූ දෑ නිහ්ශ්‍රය -;zh_HK.AssociateSel =聯結已選定 +si.AssociateSel =තේරූ දෑ නිහ්ශ්‍රය +zh_tw.AssociateSel =聯結已選定 en.AssociateAudio =File types bg.AssociateAudio =Типове файлове @@ -254,8 +254,8 @@ no.AssociateAudio =Filtyper uk.AssociateAudio =Типи файлів be.AssociateAudio =Тыпы файлаў gl.AssociateAudio =Tipos de ficheiros -;si.AssociateAudio =ගොනු වර්ග -;zh_HK.AssociateAudio =檔案類型 +si.AssociateAudio =ගොනු වර්ග +zh_tw.AssociateAudio =檔案類型 en.extMSWord =Microsoft Word Document bg.extMSWord =Microsoft Word документ @@ -296,8 +296,8 @@ no.extMSWord =Microsoft Word-dokument uk.extMSWord =Документ Microsoft Word be.extMSWord =Дакумент Microsoft Word gl.extMSWord =Documentos de Microsoft Word -;si.extMSWord =මයික්‍රොසොෆ්ට් වර්ඩ් ලේඛනය -;zh_HK.extMSWord =Microsoft Word 文件 +si.extMSWord =මයික්‍රොසොෆ්ට් වර්ඩ් ලේඛනය +zh_tw.extMSWord =Microsoft Word 文件 en.extMSExcel =Microsoft Excel Workbook bg.extMSExcel =Microsoft Excel работна книга @@ -338,8 +338,8 @@ no.extMSExcel =Microsoft Excel-arbeidsbok uk.extMSExcel =Книга Microsoft Excel be.extMSExcel =Рабочы сшытак Microsoft Excel gl.extMSExcel =Caderno de traballo do Microsoft Excel -;si.extMSExcel =මයික්‍රොසොෆ්ට් එක්සෙල් ලේඛනය -;zh_HK.extMSExcel =Microsoft Excel 活頁簿 +si.extMSExcel =මයික්‍රොසොෆ්ට් එක්සෙල් ලේඛනය +zh_tw.extMSExcel =Microsoft Excel 活頁簿 en.extMSPresentation =Microsoft PowerPoint Presentation bg.extMSPresentation =Microsoft PowerPoint презентация @@ -380,8 +380,8 @@ no.extMSPresentation =Microsoft PowerPoint-presentasjon uk.extMSPresentation =Презентація Microsoft PowerPoint be.extMSPresentation =Прэзентацыя Microsoft PowerPoint gl.extMSPresentation =Presentación de PowerPoint de Microsoft -;si.extMSPresentation =මයික්‍රොසොෆ්ට් පවර්පොයින්ට් සමර්පණය -;zh_HK.extMSPresentation =Microsoft PowerPoint 簡報 +si.extMSPresentation =මයික්‍රොසොෆ්ට් පවර්පොයින්ට් සමර්පණය +zh_tw.extMSPresentation =Microsoft PowerPoint 簡報 en.extMSSlideshow =Microsoft PowerPoint Slideshow bg.extMSSlideshow =Microsoft PowerPoint слайдшоу @@ -422,8 +422,8 @@ no.extMSSlideshow =Microsoft PowerPoint-lysbildefremvisning uk.extMSSlideshow =Показ слайдів Microsoft PowerPoint be.extMSSlideshow =Слайд-шоу Microsoft PowerPoint gl.extMSSlideshow =Presentación de Microsoft PowerPoint -;si.extMSSlideshow =මයික්‍රොසොෆ්ට් පවර්පොයින්ට් සල්යිඩ්ෂෝ -;zh_HK.extMSSlideshow =Microsoft PowerPoint 投影片 +si.extMSSlideshow =මයික්‍රොසොෆ්ට් පවර්පොයින්ට් සල්යිඩ්ෂෝ +zh_tw.extMSSlideshow =Microsoft PowerPoint 投影片 en.extODT =OpenDocument Text File bg.extODT =OpenDocument текстов файл @@ -464,8 +464,8 @@ no.extODT =OpenDocument-tekstfil uk.extODT =Текстовий файл OpenDocument be.extODT =Тэкставы файл OpenDocument gl.extODT =Ficheiro de texto OpenDocument -;si.extODT =ඕපන්ඩොකියුමන්ට් පෙළ ලේඛනය -;zh_HK.extODT =OpenDocument Text 文件 +si.extODT =ඕපන්ඩොකියුමන්ට් පෙළ ලේඛනය +zh_tw.extODT =OpenDocument Text 文件 en.extODS =OpenDocument Spreadsheet bg.extODS =OpenDocument електронна таблица @@ -506,8 +506,8 @@ no.extODS =OpenDocument-regneark uk.extODS =Електронна таблиця OpenDocument be.extODS =Электронная табліца OpenDocument gl.extODS =Folla de cálculo de OpenDocument -;si.extODS =ඕපන්ඩොකියුමන්ට් පැතුරුම්පත -;zh_HK.extODS =OpenDocument 試算表 +si.extODS =ඕපන්ඩොකියුමන්ට් පැතුරුම්පත +zh_tw.extODS =OpenDocument 試算表 en.extODP =OpenDocument Presentation bg.extODP =OpenDocument презентация @@ -548,8 +548,8 @@ no.extODP =OpenDocument-presentasjon uk.extODP =Презентація OpenDocument be.extODP =Прэзентацыя OpenDocument gl.extODP =Presentación de OpenDocument -;si.extODP =ඕපන්ඩොකියුමන්ට් සමර්පණය -;zh_HK.extODP =OpenDocument 簡報 +si.extODP =ඕපන්ඩොකියුමන්ට් සමර්පණය +zh_tw.extODP =OpenDocument 簡報 en.extDOC =Word 97-2003 Document bg.extDOC =Word 97-2003 документ @@ -590,8 +590,8 @@ no.extDOC =Word 97-2003-dokument uk.extDOC =Документ Word 97-2003 be.extDOC =Дакумент Word 97-2003 gl.extDOC =Documento Word 97-2003 -;si.extDOC =වර්ඩ් 97-2003 ලේඛනය -;zh_HK.extDOC =Word 97-2003 文件 +si.extDOC =වර්ඩ් 97-2003 ලේඛනය +zh_tw.extDOC =Word 97-2003 文件 en.extDOCX =Office Open XML Document bg.extDOCX =Office Open XML документ @@ -632,8 +632,8 @@ no.extDOCX =Office Open XML-dokument uk.extDOCX =Документ Office Open XML be.extDOCX =Дакумент Office Open XML gl.extDOCX =Documento Office Open XML -;si.extDOCX =ඔෆිස් විවෘත XML ලේඛනය -;zh_HK.extDOCX =Office Open XML 文件 +si.extDOCX =ඔෆිස් විවෘත XML ලේඛනය +zh_tw.extDOCX =Office Open XML 文件 en.extDOCXF =ONLYOFFICE Form Template bg.extDOCXF =ONLYOFFICE Шаблон на формуляр @@ -674,8 +674,8 @@ no.extDOCXF =ONLYOFFICE-Skjemamal uk.extDOCXF =Шаблон форми ONLYOFFICE be.extDOCXF =Шаблон формы ONLYOFFICE gl.extDOCXF =ONLYOFFICE Modelo de formulario -;si.extDOCXF =ඔන්ලිඔෆිස් ආකෘතිපත්‍ර අච්චුව -;zh_HK.extDOCXF =ONLYOFFICE 文档表单模板 +si.extDOCXF =ඔන්ලිඔෆිස් ආකෘතිපත්‍ර අච්චුව +zh_tw.extDOCXF =ONLYOFFICE 文档表单模板 en.extXLS =Excel 97-2003 Spreadsheet bg.extXLS =Excel 97-2003 таблица @@ -716,8 +716,8 @@ no.extXLS =Microsoft Excel 97-2003-regneark uk.extXLS =Електронна таблиця Excel 97-2003 be.extXLS =Электронная табліца Excel 97-2003 gl.extXLS =Folla de cálculo Excel 97-2003 -;si.extXLS =එක්සෙල් 97-2003 පැතුරුම්පත -;zh_HK.extXLS =Excel 97-2003 試算表 +si.extXLS =එක්සෙල් 97-2003 පැතුරුම්පත +zh_tw.extXLS =Excel 97-2003 試算表 en.extXLSX =Office Open XML Spreadsheet bg.extXLSX =Office Open XML таблица @@ -758,8 +758,8 @@ no.extXLSX =Office Open XML-regneark uk.extXLSX =Електронна таблиця Office Open XML be.extXLSX =Электронная табліца Office Open XML gl.extXLSX =Folla de cálcula Office Open XML -;si.extXLSX =ඔෆිස් විවෘත XML පැතුරුම්පත -;zh_HK.extXLSX =Office Open XML 試算表 +si.extXLSX =ඔෆිස් විවෘත XML පැතුරුම්පත +zh_tw.extXLSX =Office Open XML 試算表 en.extPPT =PowerPoint 97-2003 Presentation bg.extPPT =PowerPoint 97-2003 Презентация @@ -800,8 +800,8 @@ no.extPPT =PowerPoint 97-2003-presentasjon uk.extPPT =Презентація PowerPoint 97-2003 be.extPPT =Прэзентацыя PowerPoint 97-2003 gl.extPPT =Presentación de Powerpoint 97-2003 -;si.extPPT =පවර්පොයින්ට් 97-2003 සමර්පණය -;zh_HK.extPPT =PowerPoint 97-2003 簡報 +si.extPPT =පවර්පොයින්ට් 97-2003 සමර්පණය +zh_tw.extPPT =PowerPoint 97-2003 簡報 en.extPPTX =Office Open XML Presentation bg.extPPTX =Office Open XML Презентация @@ -842,8 +842,8 @@ no.extPPTX =Office Open XML-presentasjon uk.extPPTX =Презентація Office Open XML be.extPPTX =Прэзентацыя Office Open XML gl.extPPTX =Presentación do Office Open XML -;si.extPPTX =ඔෆිස් විවෘත XML සමර්පණය -;zh_HK.extPPTX =Office Open XML 簡報 +si.extPPTX =ඔෆිස් විවෘත XML සමර්පණය +zh_tw.extPPTX =Office Open XML 簡報 en.extPPS =PowerPoint 97-2003 Slide Show bg.extPPS =PowerPoint 97-2003 Слайдшоу @@ -884,8 +884,8 @@ no.extPPS =Microsoft PowerPoint 97-2003-lysbildefremvisning uk.extPPS =Показ слайдів PowerPoint 97-2003 be.extPPS =Слайд-шоу PowerPoint 97-2003 gl.extPPS =Presentación de diapositivas de Powerpoint 97-2003 -;si.extPPS =පවර්පොයින්ට් 97-2003 චිත්‍රකාච දැක්ම -;zh_HK.extPPS =PowerPoint 97-2003投影片 +si.extPPS =පවර්පොයින්ට් 97-2003 චිත්‍රකාච දැක්ම +zh_tw.extPPS =PowerPoint 97-2003投影片 en.extPPSX =Office Open XML Slide Show bg.extPPSX =Office Open XML Слайдшоу @@ -926,8 +926,8 @@ no.extPPSX =Office Open XML-lysbildefremvisning uk.extPPSX =Показ слайдів Office Open XML be.extPPSX =Слайд-шоу Office Open XML gl.extPPSX =Presentación de diapositivas de Office Open XML -;si.extPPSX =ඔෆිස් විවෘත XML චිත්‍රකාච දැක්ම -;zh_HK.extPPSX =Office Open XML 投影片 +si.extPPSX =ඔෆිස් විවෘත XML චිත්‍රකාච දැක්ම +zh_tw.extPPSX =Office Open XML 投影片 en.extRTF =Rich Text Format File bg.extRTF =Файл с богат текстов формат @@ -968,8 +968,8 @@ no.extRTF =Rikt tekstformat-fil uk.extRTF =Файл вдосконаленого текстового формату be.extRTF =Багаты тэкставы дакумент gl.extRTF =Ficheiro con formato de texto enriquecido -;si.extRTF =පොහොසත් පෙළ ආකෘති ගොනුව -;zh_HK.extRTF =Rich Text Format 文件 +si.extRTF =පොහොසත් පෙළ ආකෘති ගොනුව +zh_tw.extRTF =Rich Text Format 文件 en.extCSV =Comma Separated Values bg.extCSV =Стойности, разделени със запетая @@ -1010,8 +1010,8 @@ no.extCSV =Kommadelte verdier uk.extCSV =Значення, розділені комами be.extCSV =Значэнні, падзеленыя коскамі gl.extCSV =Valores separados por comas -;si.extCSV =අල්පවිරාම මගින් වෙන්කළ අගයන් -;zh_HK.extCSV =逗點分隔值 +si.extCSV =අල්පවිරාම මගින් වෙන්කළ අගයන් +zh_tw.extCSV =逗點分隔值 en.extPDF =Portable Document bg.extPDF =Преносим документ @@ -1052,8 +1052,8 @@ no.extPDF =Portable Document uk.extPDF =Портативний документ be.extPDF =Пераносны дакумент gl.extPDF =Documento portátil -;si.extPDF =සුවහ ලේඛනය -;zh_HK.extPDF =PDF 檔案 +si.extPDF =සුවහ ලේඛනය +zh_tw.extPDF =PDF 檔案 en.extDJVU =Digital Document bg.extDJVU =Дигитален документ @@ -1094,8 +1094,8 @@ no.extDJVU =Digitalt dokument uk.extDJVU =Цифровий документ be.extDJVU =Лічбавы дакумент gl.extDJVU =Documento dixital -;si.extDJVU =සංඛ්‍යාංක ලේඛනය -;zh_HK.extDJVU =DjVu 檔案 +si.extDJVU =සංඛ්‍යාංක ලේඛනය +zh_tw.extDJVU =DjVu 檔案 en.extXPS =OpenXPS Document bg.extXPS =OpenXPS Документ @@ -1136,8 +1136,8 @@ no.extXPS =OpenXPS-dokument uk.extXPS =Документ OpenXPS be.extXPS =Дакумент OpenXPS gl.extXPS =Documento OpenXPS -;si.extXPS =ඕපන්XPS ලේඛනය -;zh_HK.extXPS =OpenXPS 檔案 +si.extXPS =ඕපන්XPS ලේඛනය +zh_tw.extXPS =OpenXPS 檔案 en.extOFORM =ONLYOFFICE Fillable Online Form bg.extOFORM =ONLYOFFICE Онлайн формуляр за попълване @@ -1178,8 +1178,8 @@ no.extOFORM =ONLYOFFICE utfyllbart elektronisk skjema uk.extOFORM =Онлайн-форма для заповнення ONLYOFFICE be.extOFORM =Запаўняльная анлайн-форма ONLYOFFICE gl.extOFORM =Formulario en liña encheble ONLYOFFICE -;si.extOFORM =ඔන්ලිඔෆිස් පුරවන මාර්ගගත ආකෘතිපත්‍ර -;zh_HK.extOFORM =ONLYOFFICE可填写的在线表格 +si.extOFORM =ඔන්ලිඔෆිස් පුරවන මාර්ගගත ආකෘතිපත්‍ර +zh_tw.extOFORM =ONLYOFFICE可填写的在线表格 ;====================================================================================================== en.jumpDOCX =New document @@ -1221,8 +1221,8 @@ no.jumpDOCX =Nytt dokument uk.jumpDOCX =Новий документ be.jumpDOCX =Новы дакумент gl.jumpDOCX =Novo documento -;si.jumpDOCX =නව ලේඛනය -;zh_HK.jumpDOCX =新文件 +si.jumpDOCX =නව ලේඛනය +zh_tw.jumpDOCX =新文件 en.jumpXLSX =New spreadsheet bg.jumpXLSX =Нова електронна таблица @@ -1263,8 +1263,8 @@ no.jumpXLSX =Nytt regneark uk.jumpXLSX =Нова таблиця be.jumpXLSX =Новая электронная табліца gl.jumpXLSX =Nova folla de cálculo -;si.jumpXLSX =නව පැතුරුම්පත -;zh_HK.jumpXLSX =新試算表 +si.jumpXLSX =නව පැතුරුම්පත +zh_tw.jumpXLSX =新試算表 en.jumpPPTX =New presentation bg.jumpPPTX =Нова презентация @@ -1305,8 +1305,8 @@ no.jumpPPTX =Ny presentasjon uk.jumpPPTX =Нова презентація be.jumpPPTX =Новая прэзентацыя gl.jumpPPTX =Nova presentación -;si.jumpPPTX =නව සමර්පණය -;zh_HK.jumpPPTX =新簡報 +si.jumpPPTX =නව සමර්පණය +zh_tw.jumpPPTX =新簡報 en.jumpDOCXF =New form template bg.jumpDOCXF =Нов шаблон на формуляр @@ -1347,8 +1347,8 @@ no.jumpDOCXF =Ny skjemamal uk.jumpDOCXF =Новий шаблон форми be.jumpDOCXF =Новы шаблон формы gl.jumpDOCXF =Novo Modelo de Formulario -;si.jumpDOCXF =නව ආකෘතිපත්‍ර අච්චුව -;zh_HK.jumpDOCXF =New form template +si.jumpDOCXF =නව ආකෘතිපත්‍ර අච්චුව +zh_tw.jumpDOCXF =New form template en.defprogAppDescription=Free desktop office suite for document editing and collaboration bg.defprogAppDescription=Безплатен офис пакет за редактиране и съвместна работа по документи @@ -1389,8 +1389,8 @@ no.defprogAppDescription=Gratis office-pakke til PC for dokumentredigering og sa uk.defprogAppDescription=Безкоштовний пакет настільних офісних програм для редагування документів та спільної роботи be.defprogAppDescription=Бясплатны настольны офісны пакет для рэдагавання дакументаў і сумеснай працы gl.defprogAppDescription=Suite ofimática de escritorio gratuíta para a edición e colaboración de documentos -;si.defprogAppDescription=ලේඛන සංස්කරණය සහ සහයෝගිත්‍වය සඳහා නොමිලේ වැඩතල කාර්යාල කට්ටලය -;zh_HK.defprogAppDescription=使用於檔案編輯和協作的免費桌面辦公套件 +si.defprogAppDescription=ලේඛන සංස්කරණය සහ සහයෝගිත්‍වය සඳහා නොමිලේ වැඩතල කාර්යාල කට්ටලය +zh_tw.defprogAppDescription=使用於檔案編輯和協作的免費桌面辦公套件 en.warnWin10FileAssociationDesc=To associate the files with the application, open the following window after the installation is complete: bg.warnWin10FileAssociationDesc=За да свържете файловете с приложението, отворете следния прозорец, след като инсталацията приключи: @@ -1431,8 +1431,8 @@ no.warnWin10FileAssociationDesc=For å tilknytte filene til programmet, åpne de uk.warnWin10FileAssociationDesc=Щоб асоціювати файли з програмою, після завершення інсталяції відкрийте таке вікно: be.warnWin10FileAssociationDesc=Каб звязаць файлы з прыкладаннем, пасля завяршэння ўстаноўкі адкрыйце наступнае акно: gl.warnWin10FileAssociationDesc=Para asociar os ficheiros co aplicativo, abra a seguinte xanela despois de completar a instalación: -;si.warnWin10FileAssociationDesc=යෙදුම සමඟ ගොනු නිහ්ශ්‍රයට, ස්ථාපනය අවසන් වූ පසු පහත කවුළුව විවෘත කරන්න: -;zh_HK.warnWin10FileAssociationDesc=當安裝完成後,開啟以下的視窗將檔案與應用程式聯結: +si.warnWin10FileAssociationDesc=යෙදුම සමඟ ගොනු නිහ්ශ්‍රයට, ස්ථාපනය අවසන් වූ පසු පහත කවුළුව විවෘත කරන්න: +zh_tw.warnWin10FileAssociationDesc=當安裝完成後,開啟以下的視窗將檔案與應用程式聯結: en.warnWin10FileAssociationPath=Settings > Apps > Default apps bg.warnWin10FileAssociationPath=Настройки> Приложения> Приложение по подразбиране @@ -1473,8 +1473,8 @@ no.warnWin10FileAssociationPath=Innstillinger > Apper > Standard-apper uk.warnWin10FileAssociationPath=Налаштування > Програми > Програми за замовчуванням be.warnWin10FileAssociationPath=Налады> Прыкладанні> Прыкладанні па змаўчанні gl.warnWin10FileAssociationPath=Configuración> Aplicativos> Aplicativos por defecto -;si.warnWin10FileAssociationPath=සැකසුම් > යෙදුම් > පෙරනිමි යෙදුම් -;zh_HK.warnWin10FileAssociationPath=設定 > 應用程式 > 預設應用程式 +si.warnWin10FileAssociationPath=සැකසුම් > යෙදුම් > පෙරනිමි යෙදුම් +zh_tw.warnWin10FileAssociationPath=設定 > 應用程式 > 預設應用程式 en.runOpenDefaultApps=Open Default apps bg.runOpenDefaultApps=Отвори приложения по подразбиране @@ -1515,8 +1515,8 @@ no.runOpenDefaultApps=Åpne standard-apper uk.runOpenDefaultApps=Відкрити програми за замовчуванням be.runOpenDefaultApps=Адкрыць прыкладанні па змаўчанні gl.runOpenDefaultApps=Abrir aplicativos por defecto -;si.runOpenDefaultApps=පෙරනිමි යෙදුම් අරින්න -;zh_HK.runOpenDefaultApps=開啟預設應用程式 +si.runOpenDefaultApps=පෙරනිමි යෙදුම් අරින්න +zh_tw.runOpenDefaultApps=開啟預設應用程式 [Run] Filename: ms-settings:defaultapps; Description: {cm:runOpenDefaultApps}; Flags:postinstall shellexec nowait unchecked; MinVersion: 10.0.10240; diff --git a/win-linux/package/windows/common.iss b/win-linux/package/windows/common.iss index df15f6ba5..8d327602f 100644 --- a/win-linux/package/windows/common.iss +++ b/win-linux/package/windows/common.iss @@ -156,8 +156,8 @@ Name: no; MessagesFile: compiler:Languages\Norwegian.isl; LicenseFile: {#sBr Name: uk; MessagesFile: compiler:Languages\Ukrainian.isl; LicenseFile: {#sBrandingFolder}\common\package\license\{#LIC_FILE}.rtf; Name: be; MessagesFile: compiler:Languages\Belarusian.isl; LicenseFile: {#sBrandingFolder}\common\package\license\{#LIC_FILE}.rtf; Name: gl; MessagesFile: compiler:Languages\Galician.isl; LicenseFile: {#sBrandingFolder}\common\package\license\{#LIC_FILE}.rtf; -;Name: si; MessagesFile: compiler:Languages\Sinhala.isl; LicenseFile: {#sBrandingFolder}\common\package\license\{#LIC_FILE}.rtf; -;Name: zh_HK; MessagesFile: compiler:Languages\ChineseTraditional.isl; LicenseFile: {#sBrandingFolder}\common\package\license\{#LIC_FILE}.rtf; +Name: si; MessagesFile: compiler:Languages\Sinhala.isl; LicenseFile: {#sBrandingFolder}\common\package\license\{#LIC_FILE}.rtf; +Name: zh_tw; MessagesFile: compiler:Languages\ChineseTraditional.isl; LicenseFile: {#sBrandingFolder}\common\package\license\{#LIC_FILE}.rtf; [LangOptions] lo.LanguageName=ພາສາລາວ @@ -207,8 +207,8 @@ no.Launch =Kjør %1 uk.Launch =Запустити %1 be.Launch =Запусціць %1 gl.Launch =Iniciar %1 -;si.Launch =%1 දියත් කරන්න -;zh_HK.Launch =啓動 %1 +si.Launch =%1 දියත් කරන්න +zh_tw.Launch =啓動 %1 ;====================================================================================================== en.CreateDesktopIcon =Create %1 &desktop icon bg.CreateDesktopIcon =Създаване на %1 &икона на работния плот @@ -249,8 +249,8 @@ no.CreateDesktopIcon =Opprett %1 &skrivebordsikon uk.CreateDesktopIcon =Створити &іконку %1 на робочому столі be.CreateDesktopIcon =Стварыце значок %1 на &працоўным стале gl.CreateDesktopIcon =Crear unha icona de escritorio& %1 -;si.CreateDesktopIcon =%1 වැඩතල නිරූපකය සාදන්න -;zh_HK.CreateDesktopIcon =建立 %1 和桌面圖示 +si.CreateDesktopIcon =%1 වැඩතල නිරූපකය සාදන්න +zh_tw.CreateDesktopIcon =建立 %1 和桌面圖示 ;====================================================================================================== en.InstallAdditionalComponents =Installing additional system components. Please wait... ca.InstallAdditionalComponents =Instal·lació de components de sistema addicionals. Si us plau, espereu... @@ -291,8 +291,8 @@ no.InstallAdditionalComponents =Installerer flere systemkomponenter. Vennligst v uk.InstallAdditionalComponents =Інсталюються додаткові компоненти системи. Зачекайте... be.InstallAdditionalComponents =Устаноўка дадатковых кампанентаў сістэмы. Калі ласка пачакай... gl.InstallAdditionalComponents =Estase a instalar compoñentes adicionais do sistema. Agarda... -;si.InstallAdditionalComponents =අතිරේක පද්ධති සංරචක ස්ථාපනය වෙමින්. රැඳී සිටින්න... -;zh_HK.InstallAdditionalComponents =正在安裝附加系統元件,請稍候... +si.InstallAdditionalComponents =අතිරේක පද්ධති සංරචක ස්ථාපනය වෙමින්. රැඳී සිටින්න... +zh_tw.InstallAdditionalComponents =正在安裝附加系統元件,請稍候... ;====================================================================================================== en.AdditionalTasks =Tasks: bg.AdditionalTasks =Задачи: @@ -333,8 +333,8 @@ no.AdditionalTasks =Oppgaver: uk.AdditionalTasks =Завдання: be.AdditionalTasks =Задачы: gl.AdditionalTasks =Tarefas: -;si.AdditionalTasks =කාර්යයන්: -;zh_HK.AdditionalTasks =工作: +si.AdditionalTasks =කාර්යයන්: +zh_tw.AdditionalTasks =工作: ;====================================================================================================== en.Uninstall =Uninstall bg.AdditionalTasks =Деинсталиране @@ -375,8 +375,8 @@ no.Uninstall =Avinstaller uk.Uninstall =Видалити be.Uninstall =Выдаліць gl.Uninstall =Desinstalar -;si.Uninstall =අස්ථාපනය -;zh_HK.Uninstall =解除安裝 +si.Uninstall =අස්ථාපනය +zh_tw.Uninstall =解除安裝 ;====================================================================================================== en.WarningWrongArchitecture =You are trying to install the %1-bit application version over the %2-bit version installed. Please uninstall the previous version first or download the correct version for installation. bg.WarningWrongArchitecture =Опитвате се да инсталирате %1-битовата версия на приложението над инсталираната %2-битова версия. Моля, деинсталирайте първо предишната версия или изтеглете правилната версия за инсталиране. @@ -417,8 +417,8 @@ no.WarningWrongArchitecture =Du forsøker å installere %1-bits-versjonen av pro uk.WarningWrongArchitecture =Ви намагаєтесь інсталювати %1-розрядну версію програми поверх інстальованої %2-розрядної версії. Спочатку видаліть попередню версію або завантажте належну версію для інсталяції. be.WarningWrongArchitecture =Вы спрабуеце ўсталяваць %1-бітную версію прыкладання паверх усталяванай %2-бітнай версіі. Спачатку выдаліце папярэднюю версію або загрузіце правільную версію для ўстаноўкі. gl.WarningWrongArchitecture =Está a intentar instalar a versión do aplicativo %1 bits sobre a versión instalada de %2 bits. Desinstale primeiro a versión anterior ou descargue a versión correcta para a instalación. -;si.WarningWrongArchitecture =ඔබ ස්ථාපිත බිටු-%2 අනුවාදයට උඩින්ග යෙදුමේ බිටු-%1 අනුවාදය ස්ථාපනයට තැත් කරයි. කරුණාකර පෙර අනුවාදය අස්ථාපනය කරන්න හෝ ස්ථාපනය සඳහා නිවැරදි අනුවාදය බාගන්න. -;zh_HK.WarningWrongArchitecture =您正在嘗試安裝 %1-bit 應用程式版本超過 %2-bit 目前已安裝的版本。 請先解除安裝先前的版本或下載正確的版本再進行安裝。 +si.WarningWrongArchitecture =ඔබ ස්ථාපිත බිටු-%2 අනුවාදයට උඩින්ග යෙදුමේ බිටු-%1 අනුවාදය ස්ථාපනයට තැත් කරයි. කරුණාකර පෙර අනුවාදය අස්ථාපනය කරන්න හෝ ස්ථාපනය සඳහා නිවැරදි අනුවාදය බාගන්න. +zh_tw.WarningWrongArchitecture =您正在嘗試安裝 %1-bit 應用程式版本超過 %2-bit 目前已安裝的版本。 請先解除安裝先前的版本或下載正確的版本再進行安裝。 ;====================================================================================================== en.UpdateAppRunning=Setup has detected that %1 is currently running.%n%nIt'll be closed automatically. Click OK to continue, or Cancel to exit. @@ -460,8 +460,8 @@ no.UpdateAppRunning=Installasjonen har oppdaget at %1 kjører for øyeblikket.%n uk.UpdateAppRunning=Програма інсталяції виявила, що запущено %1.%n%nЦя програма буде закрита автоматично. Натисніть "ОК", щоб продовжити, або "Скасувати", щоб вийти. be.UpdateAppRunning=Налада выявіла, што %1 зараз працуе.%n%nЯно будзе аўтаматычна зачынена. Націсніце OK, каб працягнуць, або Адмяніць, каб выйсці. gl.UpdateAppRunning=A instalación detectou que %1 está en execución.%En% Pecharase automaticamente. Preme en Aceptar para continuar ou en Cancelar para saír. -;si.UpdateAppRunning=%1 දැනට ධාවනය වන බව පිහිටුමට අනාවරණය වී ඇත.%n%nඑය ස්වයංක්‍රීයව වසා දමනු ඇත. ඉදිරියට යාමට හරි ද, හෝ පිටවීමට අවලංගු ද ඔබන්න. -;zh_HK.UpdateAppRunning=安裝程式偵測到 %1 正在執行中。%n%n將會自動關閉。 點擊 確認 繼續,或 取消 離開。 +si.UpdateAppRunning=%1 දැනට ධාවනය වන බව පිහිටුමට අනාවරණය වී ඇත.%n%nඑය ස්වයංක්‍රීයව වසා දමනු ඇත. ඉදිරියට යාමට හරි ද, හෝ පිටවීමට අවලංගු ද ඔබන්න. +zh_tw.UpdateAppRunning=安裝程式偵測到 %1 正在執行中。%n%n將會自動關閉。 點擊 確認 繼續,或 取消 離開。 ;====================================================================================================== en.WarningClearAppData =Do you want to clear the user settings and application cached data? bg.WarningClearAppData =Искате ли да изчистите потребителските настройки и кешираните данни на приложението? @@ -502,8 +502,8 @@ no.WarningClearAppData =Vil du slette brukerinnstillinger og bufrede data for pr uk.WarningClearAppData =Очистити налаштування користувача та кешовані дані програми? be.WarningClearAppData =Хочаце ачысціць налады карыстальніка і кэшаваныя даныя прыкладання? gl.WarningClearAppData =Quere borrar a configuración do usuario e os datos da caché do aplicativo? -;si.WarningClearAppData =ඔබට පරිශ්‍රීලක සැකසුම් හා නිහිතගත යෙදුමේ දත්ත හිස් කිරීමට අවශ්‍යද? -;zh_HK.WarningClearAppData =您想要清除使用者設定和應用程式內的快取資料嗎? +si.WarningClearAppData =ඔබට පරිශ්‍රීලක සැකසුම් හා නිහිතගත යෙදුමේ දත්ත හිස් කිරීමට අවශ්‍යද? +zh_tw.WarningClearAppData =您想要清除使用者設定和應用程式內的快取資料嗎? ;====================================================================================================== @@ -527,7 +527,7 @@ gl.WarningClearAppData =Quere borrar a configuración do usuario e os datos da c ;be.AssociateDescription =Звязаць тыпы файлаў дакументаў офіса з %1 ;gl.AssociateDescription =Asociar tipos de ficheiros de documentos de oficina con %1 ;si.AssociateDescription =%1 සමඟ කාර්යාල ලේඛන ගොනු වර්ග සම්බන්ධ කරන්න -;zh_HK.AssociateDescription =與文書處理檔案類型聯結 %1 +;zh_tw.AssociateDescription =與文書處理檔案類型聯結 %1 ;====================================================================================================== en.UpdateService =Update service for {#sAppName} cs.UpdateService =Služba aktualizace {#sAppName} diff --git a/win-linux/package/windows/uninstall_page.iss b/win-linux/package/windows/uninstall_page.iss index 57468eb16..5a9e8ba5d 100644 --- a/win-linux/package/windows/uninstall_page.iss +++ b/win-linux/package/windows/uninstall_page.iss @@ -13,8 +13,8 @@ pl.UninstallPageLabel=Kliknij Odinstaluj, aby rozpocząć proces odinstalowywani lo.UninstallPageLabel=ກົດປຸ່ມຖອນການຕິດຕັ້ງ ເພື່ອດຳເນີນການຖອນການຕິດຕັ້ງ. nl.UninstallPageLabel=Druk op Verwijderen om verder te gaan met het verwijderen. hy_AM.UninstallPageLabel=Ապատեղադրեք՝ ապատեղադրումը շարունակելու համար: -;si.UninstallPageLabel=අස්ථාපනය සඳහා ඉදිරියට යාමට අස්ථාපනය ඔබන්න. -;zh_HK.UninstallPageLabel=按解除安裝以進行解除安裝。 +si.UninstallPageLabel=අස්ථාපනය සඳහා ඉදිරියට යාමට අස්ථාපනය ඔබන්න. +zh_tw.UninstallPageLabel=按解除安裝以進行解除安裝。 da.UninstallPageLabel=Tryk Afinstaller for at fortsætte med afinstallationen. @@ -31,8 +31,8 @@ pl.UninstallOptionClearData=Usuń wszystkie ustawienia użytkownika oraz dane pa lo.UninstallOptionClearData=ລືບຂໍ້ມູນທີ່ເຫັບໄວ້ໃນແອັບພລິເຄຊັ່ນ ແລະ ລືບການຕັ້ງຄ່າຜູ້ໃຊ້ທັ້ງໝົດ nl.UninstallOptionClearData=Alle gebruikersinstellingen en cachegegevens van toepassingen wissen hy_AM.UninstallOptionClearData=Մաքրել օգտատիրոջ բոլոր կարգավորումները և հավելվածի քեշավորված տվյալները -;si.UninstallOptionClearData=සියළුම පරිශ්‍රීලක සැකසුම් හා නිහිතගත යෙදුමේ දත්ත මකන්න -;zh_HK.UninstallOptionClearData=清除所有使用者戶設定和應用程序暫存資料 +si.UninstallOptionClearData=සියළුම පරිශ්‍රීලක සැකසුම් හා නිහිතගත යෙදුමේ දත්ත මකන්න +zh_tw.UninstallOptionClearData=清除所有使用者戶設定和應用程序暫存資料 da.UninstallOptionClearData=Slet alle brugerdata og applikationens cachede data From 9b896dd105bf04a086b840f04c99ea019dae6aff Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Wed, 9 Aug 2023 14:57:32 +0300 Subject: [PATCH 137/298] [all] fix bug 63498 --- common/loginpage/src/index.html | 2 +- win-linux/defaults.pri | 2 +- win-linux/resources.qrc | 2 +- win-linux/src/clangater.cpp | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/common/loginpage/src/index.html b/common/loginpage/src/index.html index a63da307a..373ce341f 100644 --- a/common/loginpage/src/index.html +++ b/common/loginpage/src/index.html @@ -169,7 +169,7 @@

Create new

- + diff --git a/win-linux/defaults.pri b/win-linux/defaults.pri index dc4dcdb5c..569152f18 100644 --- a/win-linux/defaults.pri +++ b/win-linux/defaults.pri @@ -47,7 +47,7 @@ TRANSLATIONS = ./langs/en.ts \ ./langs/uk.ts \ ./langs/vi.ts \ ./langs/be.ts \ - ./langs/zh_HK.ts \ + ./langs/zh_TW.ts \ ./langs/si.ts diff --git a/win-linux/resources.qrc b/win-linux/resources.qrc index 240415981..43cb1640e 100644 --- a/win-linux/resources.qrc +++ b/win-linux/resources.qrc @@ -160,7 +160,7 @@ langs/uk.qm langs/vi.qm langs/zh_CN.qm - langs/zh_HK.qm + langs/zh_TW.qm langs/qtbase_ru.qm diff --git a/win-linux/src/clangater.cpp b/win-linux/src/clangater.cpp index 03a1ef6a8..f08353ef8 100644 --- a/win-linux/src/clangater.cpp +++ b/win-linux/src/clangater.cpp @@ -122,7 +122,7 @@ class CLangater::CLangaterIntf ,{"pt-PT", "Português (Portugal)"} ,{"pl-PL", "Polski"} ,{"zh-CN", "简体中文"} - ,{"zh-HK", "繁體中文"} + ,{"zh-TW", "繁體中文"} ,{"ca-ES", "Catalan"} ,{"da-DK", "Dansk"} ,{"el-GR", "Ελληνικά"} From b92e781dbc66b4eda807a2c4ec630dedaaa95923 Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Thu, 10 Aug 2023 13:12:10 +0300 Subject: [PATCH 138/298] Update common.iss --- win-linux/package/windows/common.iss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/win-linux/package/windows/common.iss b/win-linux/package/windows/common.iss index 8d327602f..1ffd18c1d 100644 --- a/win-linux/package/windows/common.iss +++ b/win-linux/package/windows/common.iss @@ -156,7 +156,7 @@ Name: no; MessagesFile: compiler:Languages\Norwegian.isl; LicenseFile: {#sBr Name: uk; MessagesFile: compiler:Languages\Ukrainian.isl; LicenseFile: {#sBrandingFolder}\common\package\license\{#LIC_FILE}.rtf; Name: be; MessagesFile: compiler:Languages\Belarusian.isl; LicenseFile: {#sBrandingFolder}\common\package\license\{#LIC_FILE}.rtf; Name: gl; MessagesFile: compiler:Languages\Galician.isl; LicenseFile: {#sBrandingFolder}\common\package\license\{#LIC_FILE}.rtf; -Name: si; MessagesFile: compiler:Languages\Sinhala.isl; LicenseFile: {#sBrandingFolder}\common\package\license\{#LIC_FILE}.rtf; +Name: si; MessagesFile: compiler:Languages\Sinhala.islu; LicenseFile: {#sBrandingFolder}\common\package\license\{#LIC_FILE}.rtf; Name: zh_tw; MessagesFile: compiler:Languages\ChineseTraditional.isl; LicenseFile: {#sBrandingFolder}\common\package\license\{#LIC_FILE}.rtf; [LangOptions] From 7ccbb5d0849be46458410f8a6feb4f19aa9d11db Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Thu, 10 Aug 2023 13:32:44 +0300 Subject: [PATCH 139/298] [start page] fix bug 32077 --- common/loginpage/src/dialogconnect.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/common/loginpage/src/dialogconnect.js b/common/loginpage/src/dialogconnect.js index 0ced89477..be559afe2 100644 --- a/common/loginpage/src/dialogconnect.js +++ b/common/loginpage/src/dialogconnect.js @@ -173,7 +173,7 @@ window.DialogConnect = function(params) { _require_portal_info(protocol + portal, provider).then( _callback, obj => { - if ( obj.status == 'error' && obj.response.status == 404 ) { + if ( obj.status == 'error' && (obj.response.status == 404 || obj.response.statusCode == 404) ) { protocol = protocol == "https://" ? "http://" : "https://"; return _require_portal_info(protocol + portal, provider); } else _callback(obj); @@ -262,6 +262,12 @@ window.DialogConnect = function(params) { } }, error: function(e, status, error) { +// AscSimpleRequest +// include/base/internal/cef_net_error_list.h +// A connection attempt was refused. +// NET_ERROR(CONNECTION_REFUSED, -102) + + if ( e.statusCode == -102 ) e.statusCode = 404; reject({status:status, response:e}); } }); From 9e1e60bda98257f2f6d064c9e5691ebc61bb38ff Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 10 Aug 2023 13:48:08 +0000 Subject: [PATCH 140/298] Initialize changelogs for v7.5.0 --- .../ONLYOFFICE/changes/7.5.0/changes.html | 137 ++++++++++++++++++ .../ONLYOFFICE/changes/7.5.0/changes.ru.html | 137 ++++++++++++++++++ .../windows/update/changes/7.5.0/changes.html | 100 +++++++++++++ .../update/changes/7.5.0/changes_ru.html | 100 +++++++++++++ 4 files changed, 474 insertions(+) create mode 100644 macos/ONLYOFFICE/update/updates/ONLYOFFICE/changes/7.5.0/changes.html create mode 100644 macos/ONLYOFFICE/update/updates/ONLYOFFICE/changes/7.5.0/changes.ru.html create mode 100644 win-linux/package/windows/update/changes/7.5.0/changes.html create mode 100644 win-linux/package/windows/update/changes/7.5.0/changes_ru.html diff --git a/macos/ONLYOFFICE/update/updates/ONLYOFFICE/changes/7.5.0/changes.html b/macos/ONLYOFFICE/update/updates/ONLYOFFICE/changes/7.5.0/changes.html new file mode 100644 index 000000000..b25fd0008 --- /dev/null +++ b/macos/ONLYOFFICE/update/updates/ONLYOFFICE/changes/7.5.0/changes.html @@ -0,0 +1,137 @@ + + + + + ONLYOFFICE Release Notes + + + +
+

ONLYOFFICE 7.5.0 - {{DATE}}

+ +

New Features

+ +

All Editors

+
    +
  • TODO
  • +
+

Document Editor

+
    +
  • TODO
  • +
+

Spreadsheet Editor

+
    +
  • TODO
  • +
+

Presentation Editor

+
    +
  • TODO
  • +
+

Forms

+
    +
  • TODO
  • +
+ +

Fixes

+ +

All Editors

+
    +
  • TODO
  • +
+

Document Editor

+
    +
  • TODO
  • +
+

Spreadsheet Editor

+
    +
  • TODO
  • +
+

Presentation Editor

+
    +
  • TODO
  • +
+

Forms

+
    +
  • TODO
  • +
+
+ + diff --git a/macos/ONLYOFFICE/update/updates/ONLYOFFICE/changes/7.5.0/changes.ru.html b/macos/ONLYOFFICE/update/updates/ONLYOFFICE/changes/7.5.0/changes.ru.html new file mode 100644 index 000000000..031da627a --- /dev/null +++ b/macos/ONLYOFFICE/update/updates/ONLYOFFICE/changes/7.5.0/changes.ru.html @@ -0,0 +1,137 @@ + + + + + История изменений ONLYOFFICE + + + +
+

ONLYOFFICE 7.5.0 - {{DATE}}

+ +

Новые функции

+ +

Все редакторы

+
    +
  • TODO
  • +
+

Редактор документов

+
    +
  • TODO
  • +
+

Редактор таблиц

+
    +
  • TODO
  • +
+

Редактор презентаций

+
    +
  • TODO
  • +
+

Формы

+
    +
  • TODO
  • +
+ +

Исправления

+ +

Все редакторы

+
    +
  • TODO
  • +
+

Редактор документов

+
    +
  • TODO
  • +
+

Редактор таблиц

+
    +
  • TODO
  • +
+

Редактор презентаций

+
    +
  • TODO
  • +
+

Формы

+
    +
  • TODO
  • +
+
+ + diff --git a/win-linux/package/windows/update/changes/7.5.0/changes.html b/win-linux/package/windows/update/changes/7.5.0/changes.html new file mode 100644 index 000000000..4e0070197 --- /dev/null +++ b/win-linux/package/windows/update/changes/7.5.0/changes.html @@ -0,0 +1,100 @@ + + + + + ONLYOFFICE Desktop Editors Release Notes + + + +
+

ONLYOFFICE Desktop Editors 7.5.0 - {{DATE}}

+ +

New Features

+ +

All Editors

+
    +
  • TODO
  • +
+

Document Editor

+
    +
  • TODO
  • +
+

Spreadsheet Editor

+
    +
  • TODO
  • +
+

Presentation Editor

+
    +
  • TODO
  • +
+

Forms

+
    +
  • TODO
  • +
+ +

Fixes

+ +

All Editors

+
    +
  • TODO
  • +
+

Document Editor

+
    +
  • TODO
  • +
+

Spreadsheet Editor

+
    +
  • TODO
  • +
+

Presentation Editor

+
    +
  • TODO
  • +
+

Forms

+
    +
  • TODO
  • +
+ + +
+ + diff --git a/win-linux/package/windows/update/changes/7.5.0/changes_ru.html b/win-linux/package/windows/update/changes/7.5.0/changes_ru.html new file mode 100644 index 000000000..d7cc70e23 --- /dev/null +++ b/win-linux/package/windows/update/changes/7.5.0/changes_ru.html @@ -0,0 +1,100 @@ + + + + + История изменений ONLYOFFICE Desktop Editors + + + +
+

ONLYOFFICE Desktop Editors 7.5.0 - {{DATE}}

+ +

Новые функции

+ +

Все редакторы

+
    +
  • TODO
  • +
+

Редактор документов

+
    +
  • TODO
  • +
+

Редактор таблиц

+
    +
  • TODO
  • +
+

Редактор презентаций

+
    +
  • TODO
  • +
+

Формы

+
    +
  • TODO
  • +
+ +

Исправления

+ +

Все редакторы

+
    +
  • TODO
  • +
+

Редактор документов

+
    +
  • TODO
  • +
+

Редактор таблиц

+
    +
  • TODO
  • +
+

Редактор презентаций

+
    +
  • TODO
  • +
+

Формы

+
    +
  • TODO
  • +
+ + +
+ + From 5de40f0b35b9ba2a644b93515e9082bf4efb151d Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Sat, 12 Aug 2023 00:45:55 +0300 Subject: [PATCH 141/298] [win-nix] correct lang name --- win-linux/langs/{zh_tw.qm => zh_TW.qm} | Bin win-linux/langs/{zh_tw.ts => zh_TW.ts} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename win-linux/langs/{zh_tw.qm => zh_TW.qm} (100%) rename win-linux/langs/{zh_tw.ts => zh_TW.ts} (100%) diff --git a/win-linux/langs/zh_tw.qm b/win-linux/langs/zh_TW.qm similarity index 100% rename from win-linux/langs/zh_tw.qm rename to win-linux/langs/zh_TW.qm diff --git a/win-linux/langs/zh_tw.ts b/win-linux/langs/zh_TW.ts similarity index 100% rename from win-linux/langs/zh_tw.ts rename to win-linux/langs/zh_TW.ts From 517e6f321b5fbfdc2b5832b2fd94c25ba999c459 Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Sun, 13 Aug 2023 17:32:06 +0300 Subject: [PATCH 142/298] [win-nix] handle "open from template" editor's command --- .../src/cascapplicationmanagerwrapper.cpp | 10 ++++++ win-linux/src/cascapplicationmanagerwrapper.h | 1 + .../cascapplicationmanagerwrapper_private.h | 31 +++++++++++++----- win-linux/src/ceditortools.cpp | 32 ++++++++++++++++++- win-linux/src/ceditortools.h | 1 + win-linux/src/components/asctabwidget.h | 1 + win-linux/src/components/ctabpanel.cpp | 7 +++- win-linux/src/components/ctabpanel.h | 1 + 8 files changed, 74 insertions(+), 10 deletions(-) diff --git a/win-linux/src/cascapplicationmanagerwrapper.cpp b/win-linux/src/cascapplicationmanagerwrapper.cpp index 0a91bb601..360e259c3 100644 --- a/win-linux/src/cascapplicationmanagerwrapper.cpp +++ b/win-linux/src/cascapplicationmanagerwrapper.cpp @@ -1926,6 +1926,16 @@ QString CAscApplicationManagerWrapper::newFileName(int format) } } +QString CAscApplicationManagerWrapper::newFileName(const std::wstring& format) +{ + int _f = format == L"word" ? AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX : + format == L"cell" ? AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLSX : + format == L"form" ? AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCXF : + format == L"slide" ? AVS_OFFICESTUDIO_FILE_PRESENTATION_PPTX : AVS_OFFICESTUDIO_FILE_UNKNOWN; + + return newFileName(_f); +} + /*void CAscApplicationManagerWrapper::checkUpdates() { //APP_CAST(_app); diff --git a/win-linux/src/cascapplicationmanagerwrapper.h b/win-linux/src/cascapplicationmanagerwrapper.h index c8e7503f0..5bbcddf78 100644 --- a/win-linux/src/cascapplicationmanagerwrapper.h +++ b/win-linux/src/cascapplicationmanagerwrapper.h @@ -189,6 +189,7 @@ private slots: static bool canAppClose(); static QCefView * createViewer(QWidget * parent); static QString newFileName(int format); + static QString newFileName(const std::wstring& format); static CThemes & themes(); static CPrintData& printData(); diff --git a/win-linux/src/cascapplicationmanagerwrapper_private.h b/win-linux/src/cascapplicationmanagerwrapper_private.h index 03714536f..779332077 100644 --- a/win-linux/src/cascapplicationmanagerwrapper_private.h +++ b/win-linux/src/cascapplicationmanagerwrapper_private.h @@ -239,16 +239,31 @@ class CAscApplicationManagerWrapper_Private } else if ( cmd.compare(L"create:new") == 0 ) { const std::wstring & format = data.get_Param(); - int _f = format == L"word" ? AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX : - format == L"cell" ? AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLSX : - format == L"form" ? AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCXF : - format == L"slide" ? AVS_OFFICESTUDIO_FILE_PRESENTATION_PPTX : AVS_OFFICESTUDIO_FILE_UNKNOWN; - COpenOptions opts{m_appmanager.newFileName(_f), etNewFile}; - opts.format = _f; - opts.parent_id = event.m_nSenderId; + if ( format.rfind(L"template:", 0) == 0 ) { + std::wstring type = format.substr(format.size() - 4); + std::wstring file_path = CEditorTools::getlocaltemplate(type, event.m_nSenderId).toStdWString(); + + if ( !file_path.empty() ) { + COpenOptions opts{file_path, etTemplateFile}; + opts.name = m_appmanager.newFileName(type); + opts.parent_id = event.m_nSenderId; + + openDocument(opts); + } + } else { + int _f = format == L"word" ? AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX : + format == L"cell" ? AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLSX : + format == L"form" ? AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCXF : + format == L"slide" ? AVS_OFFICESTUDIO_FILE_PRESENTATION_PPTX : AVS_OFFICESTUDIO_FILE_UNKNOWN; + + COpenOptions opts{m_appmanager.newFileName(_f), etNewFile}; + opts.format = _f; + opts.parent_id = event.m_nSenderId; + + openDocument(opts); + } - openDocument(opts); return true; } diff --git a/win-linux/src/ceditortools.cpp b/win-linux/src/ceditortools.cpp index 9d01b13a1..73fe1d446 100644 --- a/win-linux/src/ceditortools.cpp +++ b/win-linux/src/ceditortools.cpp @@ -199,6 +199,33 @@ namespace CEditorTools return _path; } + QString getlocaltemplate(const std::wstring& editor, int parentid) + { + ParentHandle parent; + if ( !(parentid < 0) ) + parent = AscAppManager::windowHandleFromId(parentid); + else parent = qApp->activeWindow(); + + QString _filter; + if ( editor.compare(L"cell") == 0 ) { + _filter = CFileDialogWrapper::tr("Spreadsheet template") + " (*.xltx *.xltm *.ots)"; + } else + if ( editor.compare(L"slide") == 0 ) { + _filter = CFileDialogWrapper::tr("Presentation template") + " (*.potx *.otp)"; + } else { + _filter = CFileDialogWrapper::tr("Document template") + " (*.dotx *.ott)"; + } + + CFileDialogWrapper dlg(parent); + + QString _path = Utils::lastPath(LOCAL_PATH_OPEN); + if ( !(_path = dlg.modalOpenSingle(_path, _filter)).isEmpty() ) { + Utils::keepLastPath(LOCAL_PATH_OPEN, QFileInfo(_path).absolutePath()); + } + + return _path; + } + std::wstring getFolder(const std::wstring& path, int parentid) { ParentHandle parent; @@ -252,6 +279,9 @@ namespace CEditorTools } else if (opts.srctype == etNewFile) { panel->createLocalFile(editorTypeFromFormat(opts.format), opts.name.toStdWString()); + } else + if (opts.srctype == etTemplateFile) { + panel->createLocalFile(L"", opts.name.toStdWString()); } else { panel->cef()->load(opts.wurl); } @@ -259,7 +289,7 @@ namespace CEditorTools if ( result ) { CAscTabData * data = new CAscTabData(opts.name); data->setUrl(opts.wurl); - data->setIsLocal( opts.srctype == etLocalFile || opts.srctype == etNewFile || + data->setIsLocal( opts.srctype == etLocalFile || opts.srctype == etNewFile || opts.srctype == etTemplateFile || (opts.srctype == etRecentFile && !CExistanceController::isFileRemote(opts.url)) ); if ( opts.srctype == etNewFile ) diff --git a/win-linux/src/ceditortools.h b/win-linux/src/ceditortools.h index 20fdabd89..d6d129247 100644 --- a/win-linux/src/ceditortools.h +++ b/win-linux/src/ceditortools.h @@ -57,6 +57,7 @@ namespace CEditorTools void print(const sPrintConf&); void getlocalfile(void * data); QString getlocalfile(const std::wstring& path, int parentid = -1); + QString getlocaltemplate(const std::wstring& editor, int parentid); std::wstring getFolder(const std::wstring&, int parentid = -1); auto createEditorPanel(const COpenOptions& opts, const QRect& rect = QRect()) -> CTabPanel *; diff --git a/win-linux/src/components/asctabwidget.h b/win-linux/src/components/asctabwidget.h index e65e00327..192714c44 100644 --- a/win-linux/src/components/asctabwidget.h +++ b/win-linux/src/components/asctabwidget.h @@ -38,6 +38,7 @@ #include "cscalingwrapper.h" #include "ctabpanel.h" +#define etTemplateFile AscEditorType(255) #define etLocalFile AscEditorType(254) #define etRecoveryFile AscEditorType(253) #define etRecentFile AscEditorType(252) diff --git a/win-linux/src/components/ctabpanel.cpp b/win-linux/src/components/ctabpanel.cpp index 2fd0b2f37..405317000 100644 --- a/win-linux/src/components/ctabpanel.cpp +++ b/win-linux/src/components/ctabpanel.cpp @@ -1,5 +1,5 @@ -#include "components/ctabpanel.h" +#include "ctabpanel.h" #include "cascapplicationmanagerwrapper.h" #include "defines.h" #include "cefview.h" @@ -124,6 +124,11 @@ void CTabPanel::createLocalFile(int format, const std::wstring& name) static_cast(m_pViewer->GetCefView())->CreateLocalFile(format, name); } +void CTabPanel::createLocalFile(const std::wstring& templatepath, const std::wstring& name) +{ + static_cast(m_pViewer->GetCefView())->CreateLocalFile(0, name, templatepath); +} + bool CTabPanel::openRecoverFile(int id) { return static_cast(m_pViewer->GetCefView())->OpenRecoverFile(id); diff --git a/win-linux/src/components/ctabpanel.h b/win-linux/src/components/ctabpanel.h index 48b7648fe..eaae80cec 100644 --- a/win-linux/src/components/ctabpanel.h +++ b/win-linux/src/components/ctabpanel.h @@ -30,6 +30,7 @@ class CTabPanel : public QWidget void openLocalFile(const std::wstring& sFilePath, int nFileFormat, const std::wstring& params); bool openLocalFile(const std::wstring& sFilePath, const std::wstring& params); void createLocalFile(int nFileFormat, const std::wstring& sName = L""); + void createLocalFile(const std::wstring& templatepath, const std::wstring& name); bool openRecoverFile(int id); bool openRecentFile(int id); bool isReady(); From 9ceefb96cf5022ce0aca9e7bf92777df689641b5 Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Sun, 13 Aug 2023 17:32:32 +0300 Subject: [PATCH 143/298] [win-nix] update translations --- win-linux/src/components/cfiledialog.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/win-linux/src/components/cfiledialog.cpp b/win-linux/src/components/cfiledialog.cpp index 1de53466d..30a094776 100644 --- a/win-linux/src/components/cfiledialog.cpp +++ b/win-linux/src/components/cfiledialog.cpp @@ -63,11 +63,11 @@ CFileDialogWrapper::CFileDialogWrapper(QWidget * parent) : QObject(parent) { m_mapFilters[AVS_OFFICESTUDIO_FILE_UNKNOWN] = tr("All files (*.*)"); - m_mapFilters[AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX] = tr("DOCX Document (*.docx)"); - m_mapFilters[AVS_OFFICESTUDIO_FILE_DOCUMENT_DOTX] = tr("Document template (*.dotx)"); + m_mapFilters[AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX] = tr("DOCX Document") + " (*.docx)"; + m_mapFilters[AVS_OFFICESTUDIO_FILE_DOCUMENT_DOTX] = tr("Document template") + " (*.dotx)"; m_mapFilters[AVS_OFFICESTUDIO_FILE_DOCUMENT_DOC] = tr("DOC Document (*.doc)"); m_mapFilters[AVS_OFFICESTUDIO_FILE_DOCUMENT_ODT] = tr("ODT Document (*.odt)"); - m_mapFilters[AVS_OFFICESTUDIO_FILE_DOCUMENT_OTT] = tr("OpenDocument Document template (*.ott)"); + m_mapFilters[AVS_OFFICESTUDIO_FILE_DOCUMENT_OTT] = tr("OpenDocument Document template") + " (*.ott)"; m_mapFilters[AVS_OFFICESTUDIO_FILE_DOCUMENT_RTF] = tr("RTF File (*.rtf)"); m_mapFilters[AVS_OFFICESTUDIO_FILE_DOCUMENT_TXT] = tr("TXT File (*.txt)"); m_mapFilters[AVS_OFFICESTUDIO_FILE_DOCUMENT_HTML] = tr("HTML File (*.html)"); @@ -80,18 +80,18 @@ CFileDialogWrapper::CFileDialogWrapper(QWidget * parent) : QObject(parent) m_mapFilters[AVS_OFFICESTUDIO_FILE_PRESENTATION_PPTX] = tr("PPTX File (*.pptx)"); m_mapFilters[AVS_OFFICESTUDIO_FILE_PRESENTATION_PPT] = tr("PPT File (*.ppt)"); - m_mapFilters[AVS_OFFICESTUDIO_FILE_PRESENTATION_POTX] = tr("Presentation template (*.potx)"); + m_mapFilters[AVS_OFFICESTUDIO_FILE_PRESENTATION_POTX] = tr("Presentation template") + " (*.potx)"; m_mapFilters[AVS_OFFICESTUDIO_FILE_PRESENTATION_ODP] = tr("ODP File (*.odp)"); - m_mapFilters[AVS_OFFICESTUDIO_FILE_PRESENTATION_OTP] = tr("OpenDocument Presentation Template (*.otp)"); + m_mapFilters[AVS_OFFICESTUDIO_FILE_PRESENTATION_OTP] = tr("OpenDocument Presentation Template") + " (*.otp)"; m_mapFilters[AVS_OFFICESTUDIO_FILE_PRESENTATION_PPSX] = tr("PPSX File (*.ppsx)"); m_mapFilters[AVS_OFFICESTUDIO_FILE_PRESENTATION_PPTM] = tr("Macro-enabled Presentation File (*.pptm)"); m_mapFilters[AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLSX] = tr("XLSX File (*.xlsx)"); - m_mapFilters[AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLTX] = tr("Spreadsheet template (*.xltx)"); - m_mapFilters[AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLTM] = tr("Macro-enabled spreadsheet template (*.xltm)"); + m_mapFilters[AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLTX] = tr("Spreadsheet template") + " (*.xltx)"; + m_mapFilters[AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLTM] = tr("Macro-enabled spreadsheet template") + " (*.xltm)"; m_mapFilters[AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLS] = tr("XLS File (*.xls)"); m_mapFilters[AVS_OFFICESTUDIO_FILE_SPREADSHEET_ODS] = tr("ODS File (*.ods)"); - m_mapFilters[AVS_OFFICESTUDIO_FILE_SPREADSHEET_OTS] = tr("OpenDocument Spreadsheet Template (*.ots)"); + m_mapFilters[AVS_OFFICESTUDIO_FILE_SPREADSHEET_OTS] = tr("OpenDocument Spreadsheet Template") + " (*.ots)"; m_mapFilters[AVS_OFFICESTUDIO_FILE_SPREADSHEET_CSV] = tr("CSV File (*.csv)"); m_mapFilters[AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_PDF] = tr("PDF File (*.pdf)"); From 95cd30c830c048a03caf9f4bc660d09885070145 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Sun, 13 Aug 2023 20:54:37 +0300 Subject: [PATCH 144/298] [win] fix bug 63631 --- win-linux/src/platform_win/printdialog.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/win-linux/src/platform_win/printdialog.cpp b/win-linux/src/platform_win/printdialog.cpp index bae9f6e57..93bd231a0 100644 --- a/win-linux/src/platform_win/printdialog.cpp +++ b/win-linux/src/platform_win/printdialog.cpp @@ -82,6 +82,7 @@ auto getPaperSizeFromPageSize(PageSize page_size)->int } } +#ifndef __OS_WIN_XP auto resetLegacyPrintDialog()->void { HKEY hKey = NULL; @@ -96,6 +97,7 @@ auto resetLegacyPrintDialog()->void RegCloseKey(hKey); } } +#endif struct PrintDialogCallback : public IPrintDialogCallback { @@ -124,8 +126,10 @@ struct PrintDialogCallback : public IPrintDialogCallback return S_FALSE; } virtual HRESULT STDMETHODCALLTYPE InitDone() noexcept final { +#ifndef __OS_WIN_XP if (m_dialog_was_changed && *m_dialog_was_changed) // Restore print dialog type resetLegacyPrintDialog(); +#endif return S_FALSE; } virtual HRESULT STDMETHODCALLTYPE SelectionChange() noexcept final { @@ -308,6 +312,7 @@ QDialog::DialogCode PrintDialog::exec() // Switch to legacy print dialog bool dialog_was_changed = false; +#ifndef __OS_WIN_XP if (Utils::getWinVersion() >= Utils::WinVer::Win11) { HKEY hKey = NULL; if (RegOpenKeyEx(HKEY_CURRENT_USER, PRINT_DIALOG_REG_KEY, 0, KEY_ALL_ACCESS, &hKey) == ERROR_SUCCESS) { @@ -323,6 +328,7 @@ QDialog::DialogCode PrintDialog::exec() RegCloseKey(hKey); } } +#endif // Init dialog PRINTDLGEX dlg; @@ -397,8 +403,10 @@ QDialog::DialogCode PrintDialog::exec() // if (dlg.hDC) // DeleteDC(dlg.hDC); } else { +#ifndef __OS_WIN_XP if (dialog_was_changed) // Restore print dialog type resetLegacyPrintDialog(); +#endif if (pDevMode) GlobalFree(pDevMode); } From 5f73ef5429c7c37a01a30b04caed4f2f1f9c718f Mon Sep 17 00:00:00 2001 From: Oleg Korshul Date: Fri, 18 Aug 2023 14:57:56 +0300 Subject: [PATCH 145/298] Change add videoplayer library --- win-linux/defaults.pri | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/win-linux/defaults.pri b/win-linux/defaults.pri index 569152f18..2e4cbe71e 100644 --- a/win-linux/defaults.pri +++ b/win-linux/defaults.pri @@ -190,7 +190,8 @@ PLATFORM_BUILD=$$CORE_BUILDS_PLATFORM_PREFIX core_linux:LIBS += -Wl,-unresolved-symbols=ignore-in-shared-libs -ADD_DEPENDENCY(PdfFile, DjVuFile, XpsFile, HtmlRenderer, UnicodeConverter, hunspell, ooxmlsignature, kernel, kernel_network, graphics, videoplayer, ascdocumentscore, qtascdocumentscore) +ADD_DEPENDENCY(PdfFile, DjVuFile, XpsFile, HtmlRenderer, UnicodeConverter, hunspell, ooxmlsignature, kernel, kernel_network, graphics, ascdocumentscore, qtascdocumentscore) +include($$CORE_ROOT_DIR/../desktop-sdk/ChromiumBasedEditors/videoplayerlib/videoplayerlib_deps.pri) core_linux { QT += network x11extras From 1b60feb7d05a1478f87bb7baedbee5a2d4a7f11f Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Wed, 23 Aug 2023 00:06:34 +0300 Subject: [PATCH 146/298] [all] fix bug 63668 --- macos/ONLYOFFICE/Code/Utils/ASCConstants.m | 2 +- win-linux/src/components/cfiledialog.cpp | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/macos/ONLYOFFICE/Code/Utils/ASCConstants.m b/macos/ONLYOFFICE/Code/Utils/ASCConstants.m index 73df71e61..adbdf5b5b 100644 --- a/macos/ONLYOFFICE/Code/Utils/ASCConstants.m +++ b/macos/ONLYOFFICE/Code/Utils/ASCConstants.m @@ -55,7 +55,7 @@ + (id)shared { } + (NSArray *)images { - return @[@"jpg", @"jpeg", @"png", @"gif", @"bmp", @"tif", @"tiff", @"ico"]; + return @[@"jpg", @"jpeg", @"png", @"gif", @"bmp", @"tif", @"tiff", @"ico", @"svg"]; } + (NSArray *)videos { diff --git a/win-linux/src/components/cfiledialog.cpp b/win-linux/src/components/cfiledialog.cpp index 30a094776..73604ea9c 100644 --- a/win-linux/src/components/cfiledialog.cpp +++ b/win-linux/src/components/cfiledialog.cpp @@ -98,6 +98,7 @@ CFileDialogWrapper::CFileDialogWrapper(QWidget * parent) : QObject(parent) m_mapFilters[AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_PDFA] = tr("PDFA File (*.pdf)"); m_mapFilters[AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_DJVU] = tr("DJVU File (*.djvu)"); m_mapFilters[AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_XPS] = tr("XPS File (*.xps)"); + m_mapFilters[AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_SVG] = tr("SVG Image (*.svg)"); m_mapFilters[AVS_OFFICESTUDIO_FILE_IMAGE_JPG] = tr("JPG Image (*.jpg *.jpeg)"); m_mapFilters[AVS_OFFICESTUDIO_FILE_IMAGE_PNG] = tr("PNG Image (*.png)"); @@ -293,18 +294,20 @@ QString CFileDialogWrapper::modalOpenSingle(const QString& path, const QString& QStringList CFileDialogWrapper::modalOpenImage(const QString& path) { - QString selected = tr("All Images") + " (*.jpeg *.jpg *.png *.gif *.bmp)"; + QString selected = tr("All Images") + " (*.jpeg *.jpg *.png *.gif *.bmp *.svg)"; QString filter = m_mapFilters[AVS_OFFICESTUDIO_FILE_UNKNOWN]; filter.append(";;" + selected + ";;" + tr("Jpeg (*.jpeg *.jpg);;Png (*.png);;Gif (*.gif);;Bmp (*.bmp)")); + filter.append(";;" + m_mapFilters[AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_SVG]); return modalOpen(path, filter, &selected, false); } QStringList CFileDialogWrapper::modalOpenImages(const QString& path) { - QString selected = tr("All Images") + " (*.jpeg *.jpg *.png *.gif *.bmp)"; + QString selected = tr("All Images") + " (*.jpeg *.jpg *.png *.gif *.bmp *.svg)"; QString filter = m_mapFilters[AVS_OFFICESTUDIO_FILE_UNKNOWN]; filter.append(";;" + selected + ";;" + tr("Jpeg (*.jpeg *.jpg);;Png (*.png);;Gif (*.gif);;Bmp (*.bmp)")); + filter.append(";;" + m_mapFilters[AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_SVG]); return modalOpen(path, filter, &selected, true); } From e5b292c129193105a979f7097570293c69f5155f Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Wed, 23 Aug 2023 11:15:29 +0300 Subject: [PATCH 147/298] [start page] fix bug 51094 --- common/loginpage/src/panelwelcome.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/common/loginpage/src/panelwelcome.js b/common/loginpage/src/panelwelcome.js index 892a438c3..84432a407 100644 --- a/common/loginpage/src/panelwelcome.js +++ b/common/loginpage/src/panelwelcome.js @@ -84,7 +84,8 @@ init: function() { baseController.prototype.init.apply(this, arguments); - const is_dark_theme = localStorage.getItem('ui-theme') == 'theme-dark'; + const ui_theme = localStorage.getItem('ui-theme'); + const is_dark_theme = ui_theme == 'theme-dark' || ui_theme == 'theme-contrast-dark'; let img = ``; if (window.utils.inParams.osver == 'winxp' || /windows nt 5/i.test(navigator.appVersion)) { From d3609a306d65da599fabeccb8c5669f2445cbeb5 Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Wed, 23 Aug 2023 18:59:13 +0300 Subject: [PATCH 148/298] [macos] handle creation new doc from local template --- .../Common/ASCCommonViewController.mm | 35 ++++++++++++++-- .../Controllers/Common/ASCEventsController.mm | 42 ++++++++++++++----- macos/ONLYOFFICE/Code/Utils/ASCConstants.h | 1 + macos/ONLYOFFICE/Code/Views/NSCefView.h | 1 + macos/ONLYOFFICE/Code/Views/NSCefView.mm | 10 +++++ 5 files changed, 75 insertions(+), 14 deletions(-) diff --git a/macos/ONLYOFFICE/Code/Controllers/Common/ASCCommonViewController.mm b/macos/ONLYOFFICE/Code/Controllers/Common/ASCCommonViewController.mm index 25acd83c3..2bf815b9a 100644 --- a/macos/ONLYOFFICE/Code/Controllers/Common/ASCCommonViewController.mm +++ b/macos/ONLYOFFICE/Code/Controllers/Common/ASCCommonViewController.mm @@ -71,6 +71,7 @@ #import "ASCThemesController.h" #import "ASCEditorJSVariables.h" #import "ASCPresentationReporter.h" +#import "ASCDocumentType.h" #import #define rootTabId @"1CEF624D-9FF3-432B-9967-61361B5BFE8B" @@ -735,8 +736,30 @@ - (void)safeCloseTabsWithChanges { - (void)onCEFCreateTab:(NSNotification *)notification { if (notification && notification.userInfo) { - NSDictionary * params = (NSDictionary *)notification.userInfo; - + NSMutableDictionary * params = [notification.userInfo mutableCopy]; + + if ([params[@"action"] isEqualToNumber:@(ASCTabActionCreateLocalFileFromTemplate)]) { + NSOpenPanel * openPanel = [NSOpenPanel openPanel]; + NSMutableArray * filter = [NSMutableArray array]; + + if ( [params[@"type"] isEqualToNumber:@(ASCDocumentTypePresentation)] ) { + [filter addObjectsFromArray:@[@"potx", @"otp"]]; + } else if ( [params[@"type"] isEqualToNumber:@(ASCDocumentTypeSpreadsheet)] ) { + [filter addObjectsFromArray:@[@"xltx", @"xltm", @"ots"]]; + } else { + [filter addObjectsFromArray:@[@"dotx", @"ott"]]; + } + + openPanel.canChooseDirectories = NO; + openPanel.allowsMultipleSelection = NO; + openPanel.canChooseFiles = YES; + openPanel.allowedFileTypes = filter; + + if ([openPanel runModal] == NSModalResponseOK) { + [params setValue:[[openPanel URL] path] forKey:@"template"]; + } else return; + } + ASCTabView *tab = [[ASCTabView alloc] initWithFrame:CGRectZero]; tab.title = [NSString stringWithFormat:@"%@...", NSLocalizedString(@"Opening", nil)]; tab.type = ASCTabViewTypeOpening; @@ -1787,6 +1810,7 @@ - (void)tabs:(ASCTabsControl *)control didAddTab:(ASCTabView *)tab { break; } + case ASCTabActionCreateLocalFileFromTemplate: case ASCTabActionCreateLocalFile: { int docType = CEFDocumentDocument; if ( [tab.params[@"type"] isKindOfClass:[NSString class]] ) { @@ -1814,7 +1838,12 @@ - (void)tabs:(ASCTabsControl *)control didAddTab:(ASCTabView *)tab { break; } - [cefView createFileWithName:docName type:docType]; + if (action == ASCTabActionCreateLocalFile ) { + [cefView createFileWithName:docName type:docType]; + } else { + [cefView createFileWithNameFromTemplate:docName tplpath:tab.params[@"template"]]; + } + break; } diff --git a/macos/ONLYOFFICE/Code/Controllers/Common/ASCEventsController.mm b/macos/ONLYOFFICE/Code/Controllers/Common/ASCEventsController.mm index 83e2c4993..f55dc5698 100644 --- a/macos/ONLYOFFICE/Code/Controllers/Common/ASCEventsController.mm +++ b/macos/ONLYOFFICE/Code/Controllers/Common/ASCEventsController.mm @@ -683,24 +683,44 @@ virtual void OnEvent(NSEditorApi::CAscCefMenuEvent* pRawEvent) NSString * nsParam = (NSString *)[NSString stringWithstdwstring:param]; ASCDocumentType docType = ASCDocumentTypeUnknown; - if ([nsParam isEqualToString:@"word"]) { - docType = ASCDocumentTypeDocument; - } else if ([nsParam isEqualToString:@"cell"]) { - docType = ASCDocumentTypeSpreadsheet; - } else if ([nsParam isEqualToString:@"slide"]) { - docType = ASCDocumentTypePresentation; - } else if ([nsParam isEqualToString:@"form"]) { - docType = ASCDocumentTypeForm; - } + if ([nsParam hasPrefix:@"template:"]) { + if ([nsParam hasSuffix:@"word"]) { + docType = ASCDocumentTypeDocument; + } else + if ([nsParam hasSuffix:@"slide"]) { + docType = ASCDocumentTypePresentation; + } else + if ([nsParam hasSuffix:@"cell"]) { + docType = ASCDocumentTypeSpreadsheet; + } - if (docType != ASCDocumentTypeUnknown) { [[NSNotificationCenter defaultCenter] postNotificationName:CEFEventNameCreateTab object:nil userInfo:@{ - @"action" : @(ASCTabActionCreateLocalFile), + @"action" : @(ASCTabActionCreateLocalFileFromTemplate), @"type" : @(docType), @"active" : @(YES) }]; + } else { + if ([nsParam isEqualToString:@"word"]) { + docType = ASCDocumentTypeDocument; + } else if ([nsParam isEqualToString:@"cell"]) { + docType = ASCDocumentTypeSpreadsheet; + } else if ([nsParam isEqualToString:@"slide"]) { + docType = ASCDocumentTypePresentation; + } else if ([nsParam isEqualToString:@"form"]) { + docType = ASCDocumentTypeForm; + } + + if (docType != ASCDocumentTypeUnknown) { + [[NSNotificationCenter defaultCenter] postNotificationName:CEFEventNameCreateTab + object:nil + userInfo:@{ + @"action" : @(ASCTabActionCreateLocalFile), + @"type" : @(docType), + @"active" : @(YES) + }]; + } } } else if (cmd.find(L"open:folder") != std::wstring::npos) { [[NSNotificationCenter defaultCenter] postNotificationName:CEFEventNameOpenLocalFile diff --git a/macos/ONLYOFFICE/Code/Utils/ASCConstants.h b/macos/ONLYOFFICE/Code/Utils/ASCConstants.h index 964893a51..6155b4987 100644 --- a/macos/ONLYOFFICE/Code/Utils/ASCConstants.h +++ b/macos/ONLYOFFICE/Code/Utils/ASCConstants.h @@ -51,6 +51,7 @@ typedef NS_ENUM(int, ASCTabActionType) { ASCTabActionOpenPortal, ASCTabActionOpenUrl, ASCTabActionCreateLocalFile, + ASCTabActionCreateLocalFileFromTemplate, ASCTabActionOpenLocalFile, ASCTabActionOpenLocalRecentFile, ASCTabActionOpenLocalRecoverFile, diff --git a/macos/ONLYOFFICE/Code/Views/NSCefView.h b/macos/ONLYOFFICE/Code/Views/NSCefView.h index c4830bf04..733919494 100644 --- a/macos/ONLYOFFICE/Code/Views/NSCefView.h +++ b/macos/ONLYOFFICE/Code/Views/NSCefView.h @@ -57,6 +57,7 @@ - (void)loadWithUrl:(NSString *)url; - (void)createFileWithName:(NSString *)name type:(NSInteger)type; +- (void)createFileWithNameFromTemplate:(NSString *)name tplpath:(NSString *)path; - (void)openFileWithName:(NSString *)name type:(NSInteger)type; - (void)openRecentFileWithId:(NSInteger)index; - (void)openRecoverFileWithId:(NSInteger)index; diff --git a/macos/ONLYOFFICE/Code/Views/NSCefView.mm b/macos/ONLYOFFICE/Code/Views/NSCefView.mm index 9b4f67055..bab06128f 100644 --- a/macos/ONLYOFFICE/Code/Views/NSCefView.mm +++ b/macos/ONLYOFFICE/Code/Views/NSCefView.mm @@ -158,6 +158,16 @@ - (void)createFileWithName:(NSString *)name type:(NSInteger)type { } } +- (void)createFileWithNameFromTemplate:(NSString *)name tplpath:(NSString *)path { + if (m_pCefView) { + CCefViewEditor * editorView = dynamic_cast(m_pCefView->GetCefView()); + + if (editorView) { + editorView->CreateLocalFile(0, [name stdwstring], [path stdwstring]); + } + } +} + - (void)openFileWithName:(NSString *)name type:(NSInteger)type { if (m_pCefView) { CCefViewEditor * editorView = dynamic_cast(m_pCefView->GetCefView()); From 8819f368afda4da0b359a3ff098025019a49d8c9 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Fri, 25 Aug 2023 09:40:46 +0300 Subject: [PATCH 149/298] [win-linux] fix switching tabs with Ctrl+Tab shortcut --- win-linux/src/components/asctabwidget.cpp | 9 ++++++++- win-linux/src/windows/cmainwindow.cpp | 2 +- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/win-linux/src/components/asctabwidget.cpp b/win-linux/src/components/asctabwidget.cpp index 1f813aded..cf9f7efb2 100644 --- a/win-linux/src/components/asctabwidget.cpp +++ b/win-linux/src/components/asctabwidget.cpp @@ -142,6 +142,11 @@ CAscTabWidget::CAscTabWidget(QWidget *parent, CTabBar *_pBar) static int _dropedindex = -1; QObject::connect(this, &CAscTabWidget::currentChanged, this, [=](int index) { QTimer::singleShot(0, this, [=]() { + if (index != -1 && index != m_pBar->currentIndex()) { + m_pBar->blockSignals(true); + m_pBar->setCurrentIndex(index); + m_pBar->blockSignals(false); + } updateIcons(); }); setFocusedView(); @@ -171,7 +176,9 @@ CAscTabWidget::CAscTabWidget(QWidget *parent, CTabBar *_pBar) } }); auto turnOffAltHints = [=](int old_index, int index) { - this->setCurrentIndex(index); + QTimer::singleShot(0, this, [=]() { + setCurrentIndex(index); + }); if (old_index > -1) AscAppManager::sendCommandTo(panel(old_index)->cef(), L"althints:show", L"false"); }; diff --git a/win-linux/src/windows/cmainwindow.cpp b/win-linux/src/windows/cmainwindow.cpp index ecdc55624..d1b148a3f 100644 --- a/win-linux/src/windows/cmainwindow.cpp +++ b/win-linux/src/windows/cmainwindow.cpp @@ -521,11 +521,11 @@ void CMainWindow::onEditorAllowedClose(int uid) } else { int _index = m_pTabs->tabIndexByView(uid); if ( !(_index < 0) ) { + m_pTabs->tabBar()->removeTab(_index); QWidget * _view = m_pTabs->widget(_index); m_pTabs->removeWidget(_view); _view->deleteLater(); - m_pTabs->tabBar()->removeTab(_index); //m_pTabs->adjustTabsSize(); onTabChanged(m_pTabs->currentIndex()); From 179d936d22a2cc729fd6e25f9901f530cad55a95 Mon Sep 17 00:00:00 2001 From: Roman Demidov Date: Fri, 25 Aug 2023 13:11:25 +0300 Subject: [PATCH 150/298] Fix bug #63450 : 'New Docxf' context menu item is absent on Linux (#936) --- .../linux/common/usr/bin/desktopeditors.m4 | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/win-linux/package/linux/common/usr/bin/desktopeditors.m4 b/win-linux/package/linux/common/usr/bin/desktopeditors.m4 index 217a99407..8674188fd 100644 --- a/win-linux/package/linux/common/usr/bin/desktopeditors.m4 +++ b/win-linux/package/linux/common/usr/bin/desktopeditors.m4 @@ -8,6 +8,7 @@ set_names() { NEW_DOCX_NAME="Nový dokument" NEW_XLSX_NAME="Nový sešit" NEW_PPTX_NAME="Nová prezentace" + NEW_DOCXF_NAME="Nová šablona formuláře" ;; de*) SOURCE_DOC_DIR="$SOURCE_DOC_DIR/de-DE" @@ -15,6 +16,7 @@ set_names() { NEW_DOCX_NAME="Neues Dokument" NEW_XLSX_NAME="Neues Tabellendokument" NEW_PPTX_NAME="Neue Präsentation" + NEW_DOCXF_NAME="Neue Formularvorlage" ;; es*) SOURCE_DOC_DIR="$SOURCE_DOC_DIR/es-ES" @@ -22,6 +24,7 @@ set_names() { NEW_DOCX_NAME="Documento nuevo" NEW_XLSX_NAME="Hoja de cálculo nueva" NEW_PPTX_NAME="Presentación nueva" + NEW_DOCXF_NAME="Nueva plantilla de formulario" ;; fr*) SOURCE_DOC_DIR="$SOURCE_DOC_DIR/fr-FR" @@ -29,6 +32,7 @@ set_names() { NEW_DOCX_NAME="Nouveau document" NEW_XLSX_NAME="Nouveau classeur" NEW_PPTX_NAME="Nouvelle présentation" + NEW_DOCXF_NAME="Nouveau modèle de formulaire" ;; it*) SOURCE_DOC_DIR="$SOURCE_DOC_DIR/it-IT" @@ -36,6 +40,7 @@ set_names() { NEW_DOCX_NAME="Nuovo documento" NEW_XLSX_NAME="Nuovo foglio di calcolo" NEW_PPTX_NAME="Nuova presentazione" + NEW_DOCXF_NAME="Nuovo modello di modulo" ;; pt*) SOURCE_DOC_DIR="$SOURCE_DOC_DIR/pt-BR" @@ -43,6 +48,7 @@ set_names() { NEW_DOCX_NAME="Novo Documento" NEW_XLSX_NAME="Nova planilha" NEW_PPTX_NAME="Nova apresentação" + NEW_DOCXF_NAME="Novo Formulário Mestre" ;; ru*) SOURCE_DOC_DIR="$SOURCE_DOC_DIR/ru-RU" @@ -50,6 +56,7 @@ set_names() { NEW_DOCX_NAME="Новый документ" NEW_XLSX_NAME="Новая эл.таблица" NEW_PPTX_NAME="Новая презентация" + NEW_DOCXF_NAME="Новый шаблон формы" ;; *) SOURCE_DOC_DIR="$SOURCE_DOC_DIR/en-US" @@ -57,6 +64,7 @@ set_names() { NEW_DOCX_NAME="New Document" NEW_XLSX_NAME="New Spreadsheet" NEW_PPTX_NAME="New Presentation" + NEW_DOCXF_NAME="New form template" ;; esac } @@ -66,6 +74,7 @@ set_names_ru() { NEW_DOCX_NAME="Новый документ" NEW_XLSX_NAME="Новая эл.таблица" NEW_PPTX_NAME="Новая презентация" + NEW_DOCXF_NAME="Новый шаблон формы" } check_templates() { @@ -88,6 +97,7 @@ check_templates() { TEMPLATE_DOCX="$TEMPLATE_DIR/$NEW_DOCX_NAME.docx" TEMPLATE_XLSX="$TEMPLATE_DIR/$NEW_XLSX_NAME.xlsx" TEMPLATE_PPTX="$TEMPLATE_DIR/$NEW_PPTX_NAME.pptx" + TEMPLATE_DOCXF="$TEMPLATE_DIR/$NEW_DOCXF_NAME.docxf" mkdir -p $TEMPLATE_DIR @@ -105,6 +115,11 @@ check_templates() { then cp $SOURCE_DOC_DIR/$SOURCE_DOC_NAME.pptx "$TEMPLATE_PPTX" fi + + if [ $(ls -A $TEMPLATE_DIR/*.docxf 2>/dev/null | wc -l) -eq 0 ] + then + cp $SOURCE_DOC_DIR/$SOURCE_DOC_NAME.docxf "$TEMPLATE_DOCXF" + fi } check_templates "$@" From db82756bbcdc563022eec8cd4f7c0fc5d025ebd2 Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Tue, 29 Aug 2023 17:36:58 +0300 Subject: [PATCH 151/298] [start page] changed "update" area on page About --- common/loginpage/src/css/colors.less | 2 + common/loginpage/src/css/colors_classic.less | 1 + common/loginpage/src/index.html | 1 + common/loginpage/src/index.html.deploy | 1 + common/loginpage/src/panelabout.js | 66 +++++++++++++++++++- common/loginpage/src/styles.less | 45 ++++++++++++- 6 files changed, 114 insertions(+), 2 deletions(-) diff --git a/common/loginpage/src/css/colors.less b/common/loginpage/src/css/colors.less index bd5e74df8..e6ab0849d 100644 --- a/common/loginpage/src/css/colors.less +++ b/common/loginpage/src/css/colors.less @@ -44,6 +44,7 @@ --text-contrast-background: #fff; --icon-normal: fade(#000, 80%); + --icon-success: #090; --disabled-element-opacity: .4; --theme-inverted-image-filter: none; @@ -93,6 +94,7 @@ @text-contrast-background: var(--text-contrast-background); @icon-normal: var(--icon-normal); +@icon-success: var(--icon-success); @disabled-element-opacity: var(--disabled-element-opacity); @theme-inverted-image-filter: var(--theme-inverted-image-filter); diff --git a/common/loginpage/src/css/colors_classic.less b/common/loginpage/src/css/colors_classic.less index b5649a6d2..608e40a27 100644 --- a/common/loginpage/src/css/colors_classic.less +++ b/common/loginpage/src/css/colors_classic.less @@ -46,6 +46,7 @@ /*--icon-normal: fade(#000, 80%);*/ /*--icon-notification-badge: #000;*/ + --icon-success: #5b9f27; /*--disabled-element-opacity: .4;*/ /*--theme-inverted-image-filter: none;*/ diff --git a/common/loginpage/src/index.html b/common/loginpage/src/index.html index 373ce341f..3fd7b6e22 100644 --- a/common/loginpage/src/index.html +++ b/common/loginpage/src/index.html @@ -124,6 +124,7 @@

Create new

+ diff --git a/common/loginpage/src/panelabout.js b/common/loginpage/src/panelabout.js index b4cebab9f..304f8fbab 100644 --- a/common/loginpage/src/panelabout.js +++ b/common/loginpage/src/panelabout.js @@ -70,6 +70,17 @@ if ( !!_ext_ver ) _opts.version += ` (${_ext_ver.trim()})`; var _lang = utils.Lang; + const _updates_status = `
+
+ + + + +
+
+ +
+
`; let _html = `
@@ -82,6 +93,7 @@
${_lang.aboutProFeaturesAvailable}
${_opts.edition}

${_lang.checkUpdates}

+ ${_updates_status} ${_lang.aboutChangelog}

${_opts.site} @@ -159,7 +171,15 @@ this.updates = param == 'on'; if ( this.view ) { - this.view.$panel.find('.ver-checkupdate')[this.updates?'show':'hide'](); + // this.view.$panel.find('.ver-checkupdate')[this.updates?'show':'hide'](); + this.view.$panel.find('.idx-update-cnt')[this.updates?'show':'hide'](); + + if ( this.updates ) { + const $btn = $('#idx-update-btnaction') + $btn.click(e => { + sdk.execCommand('updates:action', $btn.data('action')); + }); + } } } else if (/^updates:checking/.test(cmd)) { @@ -198,9 +218,53 @@ if ( opts.disabled != undefined ) { $label.attr('disabled', opts.disabled ? 'disabled' : false); } + } else + if (/updates:status/.test(cmd)) { + on_updates_info.call(this, JSON.parse(param)) } }; + const on_updates_info = function(info) { + if ( info.text ) { + $('#idx-update-status-text', this.view.$panel).text(info.text); + } + + if ( info.icon ) { + const $icon = $('#idx-update-status-icon', this.view.$panel); + + let icon_id; + switch (info.icon) { + case 'error': icon_id = 'error'; break; + case 'load': icon_id = 'load'; break; + case 'lastcheck': icon_id = 'lastcheck'; break; + default: icon_id = 'success'; break; + } + + $icon.attr('data-icon', icon_id); + $('use', $icon).attr('href', `#${icon_id}`) + } + + if ( info.button ) { + const $button = $('#idx-update-btnaction', this.view.$panel); + if ( info.button.text ) { + $button.text(info.button.text); + $button.data("action", info.button.action); + } + + if ( info.button.lock ) { + $button.disable(info.button.lock=='true'); + } + + if ( info.button == 'lock' ) { + $button.disable(true); + } else + if ( info.button == 'unlock' ) { + $button.disable(false); + } + + } + } + return { init: function() { baseController.prototype.init.apply(this, arguments); diff --git a/common/loginpage/src/styles.less b/common/loginpage/src/styles.less index 4ebd3a886..9f2ec25b3 100644 --- a/common/loginpage/src/styles.less +++ b/common/loginpage/src/styles.less @@ -1179,4 +1179,47 @@ li.menu-item { align-items: center; justify-content: center; } -} \ No newline at end of file +} + +#idx-update-cnt { + background-color: @background-tabbar; + border-radius: 5px; + padding: 20px 30px; + margin: 10px 0; + max-width: 800px; + + .status-field { + height: 40px; + + &:first-child { + margin-bottom: 20px; + } + } + + #idx-update-status-icon { + width: 28px; + height: 28px; +/* display: block;*/ + margin-right: 8px; + + &[data-icon=success] { + fill: @icon-success; + } + &[data-icon=error] { + fill: @border-error; + } + &[data-icon=load], &[data-icon=lastcheck] { + fill: @highlight-text-select; + } + + &[data-icon=load] { + animation: rotate 1.5s linear infinite; + } + + @keyframes rotate { + to { + transform: rotate(360deg); + } + } + } +} From 2b6c1cb102dc30dc379e382325cb68996587f31f Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Tue, 29 Aug 2023 17:38:15 +0300 Subject: [PATCH 152/298] [start page] fixed "disabled" button state --- common/loginpage/src/css/component.less | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/common/loginpage/src/css/component.less b/common/loginpage/src/css/component.less index f328b2cb9..480694fc7 100644 --- a/common/loginpage/src/css/component.less +++ b/common/loginpage/src/css/component.less @@ -38,12 +38,12 @@ button { background-color: @highlight-button-hover; } - &:active { + &:active:not(:disabled) { border-color: @highlight-button-pressed; background-color: @highlight-button-pressed; } - &.btn--landing { + &.btn--landing:not(:disabled) { &:hover { background-color: @highlight-accent-button-hover; } From bd9577ff8a9495d3c245f7b35f23e79373a2c254 Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Tue, 29 Aug 2023 17:44:18 +0300 Subject: [PATCH 153/298] [start page] debug --- win-linux/src/cascapplicationmanagerwrapper.cpp | 3 +++ win-linux/src/prop/cmainwindowimpl.cpp | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/win-linux/src/cascapplicationmanagerwrapper.cpp b/win-linux/src/cascapplicationmanagerwrapper.cpp index 360e259c3..084e93508 100644 --- a/win-linux/src/cascapplicationmanagerwrapper.cpp +++ b/win-linux/src/cascapplicationmanagerwrapper.cpp @@ -375,6 +375,9 @@ bool CAscApplicationManagerWrapper::processCommonEvent(NSEditorApi::CAscCefMenuE } return true; + } else + if ( !(cmd.find(L"updates:action") == std::wstring::npos) ) { + qDebug() << "updates action" << pData->get_Param(); } break; } diff --git a/win-linux/src/prop/cmainwindowimpl.cpp b/win-linux/src/prop/cmainwindowimpl.cpp index 1198a12af..72be32811 100644 --- a/win-linux/src/prop/cmainwindowimpl.cpp +++ b/win-linux/src/prop/cmainwindowimpl.cpp @@ -64,7 +64,7 @@ void CMainWindowImpl::refreshAboutVersion() _json_obj["appname"] = WINDOW_NAME; _json_obj["rights"] = "© " ABOUT_COPYRIGHT_STR; _json_obj["link"] = URL_SITE; - _json_obj["changelog"] = "https://github.com/ONLYOFFICE/DesktopEditors/blob/master/CHANGELOG.md"; +// _json_obj["changelog"] = "https://github.com/ONLYOFFICE/DesktopEditors/blob/master/CHANGELOG.md"; QString _package = QSettings(qApp->applicationDirPath() + "/converter/package.config", QSettings::IniFormat).value("package").toString(); if ( !_package.isEmpty() ) From bf35bef00bf37ce1a7f87b7557db6b36c1385ab0 Mon Sep 17 00:00:00 2001 From: Maxim Kadushkin Date: Wed, 30 Aug 2023 22:46:22 +0300 Subject: [PATCH 154/298] Update cascapplicationmanagerwrapper.cpp --- win-linux/src/cascapplicationmanagerwrapper.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/win-linux/src/cascapplicationmanagerwrapper.cpp b/win-linux/src/cascapplicationmanagerwrapper.cpp index 084e93508..3a01ec300 100644 --- a/win-linux/src/cascapplicationmanagerwrapper.cpp +++ b/win-linux/src/cascapplicationmanagerwrapper.cpp @@ -377,7 +377,7 @@ bool CAscApplicationManagerWrapper::processCommonEvent(NSEditorApi::CAscCefMenuE return true; } else if ( !(cmd.find(L"updates:action") == std::wstring::npos) ) { - qDebug() << "updates action" << pData->get_Param(); + // qDebug() << "updates action" << pData->get_Param(); } break; } From 5367efb3a4f4281785f6975be2997dae6cc99e6b Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Thu, 31 Aug 2023 19:59:20 +0300 Subject: [PATCH 155/298] [win-linux] update manager: small refactoring --- .../update-daemon/src/classes/csvcmanager.cpp | 3 +++ .../update-daemon/src/platform_win/main.cpp | 2 +- .../src/platform_win/svccontrol.cpp | 1 + .../src/platform_win/svccontrol.h | 1 - .../update-daemon/src/platform_win/utils.cpp | 4 ++-- .../src/cascapplicationmanagerwrapper.cpp | 12 ---------- win-linux/src/chelp.cpp | 2 +- win-linux/src/cupdatemanager.cpp | 23 ++++--------------- win-linux/src/cupdatemanager.h | 4 ---- 9 files changed, 13 insertions(+), 39 deletions(-) diff --git a/win-linux/extras/update-daemon/src/classes/csvcmanager.cpp b/win-linux/extras/update-daemon/src/classes/csvcmanager.cpp index 140a09f74..27ece90ff 100644 --- a/win-linux/extras/update-daemon/src/classes/csvcmanager.cpp +++ b/win-linux/extras/update-daemon/src/classes/csvcmanager.cpp @@ -40,6 +40,9 @@ #include "../../src/defines.h" #include "../../src/prop/defines_p.h" #ifdef _WIN32 +# ifndef WIN32_LEAN_AND_MEAN +# define WIN32_LEAN_AND_MEAN +# endif # include "platform_win/utils.h" # include # include diff --git a/win-linux/extras/update-daemon/src/platform_win/main.cpp b/win-linux/extras/update-daemon/src/platform_win/main.cpp index de86204fa..21852e682 100644 --- a/win-linux/extras/update-daemon/src/platform_win/main.cpp +++ b/win-linux/extras/update-daemon/src/platform_win/main.cpp @@ -95,7 +95,7 @@ int __cdecl _tmain (int argc, TCHAR *argv[]) CApplication app; CSvcManager upd; - socket.onMessageReceived([&app](void *buff, size_t bufsize) { + socket.onMessageReceived([&app](void *buff, size_t) { if (strcmp((const char*)buff, "stop") == 0) app.exit(0); }); diff --git a/win-linux/extras/update-daemon/src/platform_win/svccontrol.cpp b/win-linux/extras/update-daemon/src/platform_win/svccontrol.cpp index 21fe343a8..e6863fca9 100644 --- a/win-linux/extras/update-daemon/src/platform_win/svccontrol.cpp +++ b/win-linux/extras/update-daemon/src/platform_win/svccontrol.cpp @@ -33,6 +33,7 @@ #include "svccontrol.h" #include "platform_win/utils.h" #include +#include #define SVC_ERROR ((DWORD)0xC0020001L) diff --git a/win-linux/extras/update-daemon/src/platform_win/svccontrol.h b/win-linux/extras/update-daemon/src/platform_win/svccontrol.h index 70a5845ce..6efe381da 100644 --- a/win-linux/extras/update-daemon/src/platform_win/svccontrol.h +++ b/win-linux/extras/update-daemon/src/platform_win/svccontrol.h @@ -35,7 +35,6 @@ #include "version.h" #include -#include #include #define SERVICE_NAME TEXT(VER_PRODUCTNAME_STR) diff --git a/win-linux/extras/update-daemon/src/platform_win/utils.cpp b/win-linux/extras/update-daemon/src/platform_win/utils.cpp index 3f8fc9535..d7ecff139 100644 --- a/win-linux/extras/update-daemon/src/platform_win/utils.cpp +++ b/win-linux/extras/update-daemon/src/platform_win/utils.cpp @@ -78,11 +78,11 @@ namespace NS_Utils if (showError) str += L" " + GetLastErrorAsString(); wchar_t *title = const_cast(TEXT(VER_PRODUCTNAME_STR)); - size_t title_size = wcslen(title) * sizeof(wchar_t); + DWORD title_size = (DWORD)wcslen(title) * sizeof(wchar_t); DWORD res; DWORD session_id = WTSGetActiveConsoleSessionId(); WTSSendMessageW(WTS_CURRENT_SERVER_HANDLE, session_id, title, title_size, - const_cast(str.c_str()), str.size() * sizeof(wchar_t), + const_cast(str.c_str()), (DWORD)str.size() * sizeof(wchar_t), MB_OK | MB_ICONERROR | MB_SERVICE_NOTIFICATION_NT3X | MB_SETFOREGROUND, 8, &res, TRUE); return res; } diff --git a/win-linux/src/cascapplicationmanagerwrapper.cpp b/win-linux/src/cascapplicationmanagerwrapper.cpp index 3a01ec300..22c4efe7e 100644 --- a/win-linux/src/cascapplicationmanagerwrapper.cpp +++ b/win-linux/src/cascapplicationmanagerwrapper.cpp @@ -84,9 +84,6 @@ CAscApplicationManagerWrapper::CAscApplicationManagerWrapper(CAscApplicationMana #ifdef _UPDMODULE m_pUpdateManager = new CUpdateManager(this); - connect(m_pUpdateManager, &CUpdateManager::progresChanged, this, [=](const int &percent) { - AscAppManager::sendCommandTo(0, "updates:download", QString("{\"progress\":\"%1\"}").arg(QString::number(percent))); - }); #endif } @@ -375,9 +372,6 @@ bool CAscApplicationManagerWrapper::processCommonEvent(NSEditorApi::CAscCefMenuE } return true; - } else - if ( !(cmd.find(L"updates:action") == std::wstring::npos) ) { - // qDebug() << "updates action" << pData->get_Param(); } break; } @@ -1636,15 +1630,9 @@ bool CAscApplicationManagerWrapper::applySettings(const wstring& wstrjson) _reg_user.setValue("editorWindowMode", m_private->m_openEditorWindow); } #ifdef _UPDMODULE -#ifdef Q_OS_WIN if ( objRoot.contains("autoupdatemode") ) { m_pUpdateManager->setNewUpdateSetting(objRoot["autoupdatemode"].toString()); } -#else - if ( objRoot.contains("checkupdatesinterval") ) { - m_pUpdateManager->setNewUpdateSetting(objRoot["checkupdatesinterval"].toString()); - } -#endif #endif } else { /* parse settings error */ diff --git a/win-linux/src/chelp.cpp b/win-linux/src/chelp.cpp index 57872a1da..4d7382133 100644 --- a/win-linux/src/chelp.cpp +++ b/win-linux/src/chelp.cpp @@ -62,7 +62,7 @@ void CHelp::out() " --xdg-desktop-portal use portals instead of gtk file chooser (the flag is saved for subsequent sessions)\n" " --xdg-desktop-portal=default use portals instead of gtk file chooser for current session\n" " --native-file-dialog use non Qt dialog\n" - " --updates-appcast-url=\"\" set URL for updates\n" + " --updates-appcast-channel=dev set development URL for updates\n" " --updates-reset reset all update options\n"; #ifdef _WIN32 diff --git a/win-linux/src/cupdatemanager.cpp b/win-linux/src/cupdatemanager.cpp index b65c3f781..f08d8aa2d 100644 --- a/win-linux/src/cupdatemanager.cpp +++ b/win-linux/src/cupdatemanager.cpp @@ -54,6 +54,7 @@ # define DAEMON_NAME "/updatesvc" #endif +#define modeToEnum(mod) ((mod == "silent") ? UpdateMode::SILENT : (mod == "ask") ? UpdateMode::ASK : UpdateMode::DISABLE) #define WStrToTStr(str) QStrToTStr(QString::fromStdWString(str)) #define CHECK_ON_STARTUP_MS 9000 #define CMD_ARGUMENT_UPDATES_CHANNEL L"--updates-appcast-channel" @@ -384,7 +385,7 @@ void CUpdateManager::updateNeededCheking() void CUpdateManager::onProgressSlot(const int percent) { - emit progresChanged(percent); + AscAppManager::sendCommandTo(0, "updates:download", QString("{\"progress\":\"%1\"}").arg(QString::number(percent))); } void CUpdateManager::onError(const QString &error) @@ -536,19 +537,11 @@ void CUpdateManager::handleAppClose() sendMessage(MSG_StopDownload); } -void CUpdateManager::scheduleRestartForUpdate() -{ - m_restartForUpdate = true; -} - void CUpdateManager::setNewUpdateSetting(const QString& _rate) { GET_REGISTRY_USER(reg_user); reg_user.setValue("autoUpdateMode", _rate); - int mode = (_rate == "silent") ? - UpdateMode::SILENT : (_rate == "ask") ? - UpdateMode::ASK : UpdateMode::DISABLE; - if (mode == UpdateMode::DISABLE) + if (modeToEnum(_rate) == UpdateMode::DISABLE) { destroyStartupTimer(m_pCheckOnStartupTimer); // QTimer::singleShot(3000, this, &CUpdateManager::updateNeededCheking); } @@ -572,16 +565,11 @@ void CUpdateManager::skipVersion() int CUpdateManager::getUpdateMode() { GET_REGISTRY_USER(reg_user); - const QString mode = reg_user.value("autoUpdateMode", "ask").toString(); - return (mode == "silent") ? - UpdateMode::SILENT : (mode == "ask") ? - UpdateMode::ASK : UpdateMode::DISABLE; + return modeToEnum(reg_user.value("autoUpdateMode", "ask").toString()); } void CUpdateManager::onLoadCheckFinished(const QString &filePath) { -// if (m_lock) -// return; m_manualCheck = true; QFile jsonFile(filePath); if ( jsonFile.open(QIODevice::ReadOnly) ) { @@ -661,7 +649,6 @@ void CUpdateManager::onCheckFinished(bool error, bool updateExist, const QString } else { QString args = QString("{\"version\":\"%1\"}").arg(version); AscAppManager::sendCommandTo(0, "updates:checking", args); - AscAppManager::sendCommandToAllEditors(L"updates:checking", args.toStdWString()); m_dialogSchedule->addToSchedule("showUpdateMessage"); } break; @@ -711,7 +698,7 @@ void CUpdateManager::showStartInstallMessage(QWidget *parent) m_lock = false; switch (result) { case WinDlg::DLG_RESULT_INSTALL: { - scheduleRestartForUpdate(); + m_restartForUpdate = true; AscAppManager::closeAppWindows(); break; } diff --git a/win-linux/src/cupdatemanager.h b/win-linux/src/cupdatemanager.h index b042614f3..d7c331b88 100644 --- a/win-linux/src/cupdatemanager.h +++ b/win-linux/src/cupdatemanager.h @@ -74,7 +74,6 @@ class CUpdateManager: public QObject void skipVersion(); int getUpdateMode(); QString getVersion() const; - void scheduleRestartForUpdate(); void handleAppClose(); void loadUpdates(); void installUpdates(); @@ -82,9 +81,6 @@ class CUpdateManager: public QObject public slots: void checkUpdates(bool manualCheck = false); -signals: - void progresChanged(const int percent); - private: void init(); void clearTempFiles(const QString &except = QString()); From ce202ff83e4e6c1454f2838c4efc18efb30cf36a Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Thu, 31 Aug 2023 20:42:12 +0300 Subject: [PATCH 156/298] [win-linux] update manager: set a timer to check for updates once a day --- win-linux/src/cupdatemanager.cpp | 89 +++++++++++++++----------------- win-linux/src/cupdatemanager.h | 8 +-- 2 files changed, 46 insertions(+), 51 deletions(-) diff --git a/win-linux/src/cupdatemanager.cpp b/win-linux/src/cupdatemanager.cpp index f08d8aa2d..78daea188 100644 --- a/win-linux/src/cupdatemanager.cpp +++ b/win-linux/src/cupdatemanager.cpp @@ -56,6 +56,7 @@ #define modeToEnum(mod) ((mod == "silent") ? UpdateMode::SILENT : (mod == "ask") ? UpdateMode::ASK : UpdateMode::DISABLE) #define WStrToTStr(str) QStrToTStr(QString::fromStdWString(str)) +#define DAY_TO_SEC 24*3600 #define CHECK_ON_STARTUP_MS 9000 #define CMD_ARGUMENT_UPDATES_CHANNEL L"--updates-appcast-channel" #ifndef URL_APPCAST_UPDATES @@ -130,16 +131,6 @@ auto currentArch()->QString #endif } -auto destroyStartupTimer(QTimer* &timer)->void -{ - if (timer) { - if (timer->isActive()) - timer->stop(); - timer->deleteLater(); - timer = nullptr; - } -} - auto getFileHash(const QString &fileName)->QString { QFile file(fileName); @@ -227,9 +218,13 @@ CUpdateManager::CUpdateManager(QObject *parent): if ( !m_checkUrl.empty()) { CLogger::log("Updates is on, URL: " + QString::fromStdWString(m_checkUrl)); -// m_pTimer = new QTimer(this); -// m_pTimer->setSingleShot(false); -// connect(m_pTimer, SIGNAL(timeout()), this, SLOT(checkUpdates())); + m_pIntervalTimer = new QTimer(this); + m_pIntervalTimer->setSingleShot(false); + connect(m_pIntervalTimer, SIGNAL(timeout()), this, SLOT(checkUpdates())); + m_pIntervalStartTimer = new QTimer(this); + m_pIntervalStartTimer->setSingleShot(true); + m_pIntervalStartTimer->setInterval(CHECK_ON_STARTUP_MS); + connect(m_pIntervalStartTimer, &QTimer::timeout, this, &CUpdateManager::updateNeededCheking); if (IsPackage(Portable)) runProcess(QStrToTStr(qApp->applicationDirPath()) + DAEMON_NAME, TEXT("--run-as-app")); init(); @@ -257,15 +252,9 @@ void CUpdateManager::init() m_savedPackageData->fileName = reg_user.value("file", QString()).toString(); m_savedPackageData->fileType = reg_user.value("type", QString()).toString(); m_savedPackageData->version = reg_user.value("version", QString()).toString(); -// m_lastCheck = time_t(reg_user.value("last_check", 0).toLongLong()); + m_lastCheck = time_t(reg_user.value("last_check", 0).toLongLong()); + m_interval = reg_user.value("interval", DAY_TO_SEC).toInt(); reg_user.endGroup(); - if (getUpdateMode() != UpdateMode::DISABLE) { - m_pCheckOnStartupTimer = new QTimer(this); - m_pCheckOnStartupTimer->setSingleShot(true); - m_pCheckOnStartupTimer->setInterval(CHECK_ON_STARTUP_MS); - connect(m_pCheckOnStartupTimer, &QTimer::timeout, this, &CUpdateManager::updateNeededCheking); - m_pCheckOnStartupTimer->start(); - } m_socket->onMessageReceived([this](void *data, size_t) { tstring str((const tchar*)data), tmp; @@ -334,12 +323,20 @@ void CUpdateManager::clearTempFiles(const QString &except) void CUpdateManager::checkUpdates(bool manualCheck) { + m_pIntervalStartTimer->stop(); + m_lastCheck = time(nullptr); + GET_REGISTRY_USER(reg_user); + reg_user.beginGroup("Updates"); + reg_user.setValue("last_check", static_cast(m_lastCheck)); + reg_user.endGroup(); + if (getUpdateMode() != UpdateMode::DISABLE) + m_pIntervalStartTimer->start(); + if (m_lock) return; m_lock = true; AscAppManager::sendCommandTo(0, "updates:link", "lock"); m_manualCheck = manualCheck; - destroyStartupTimer(m_pCheckOnStartupTimer); m_packageData->clear(); #ifdef CHECK_DIRECTORY @@ -350,37 +347,24 @@ void CUpdateManager::checkUpdates(bool manualCheck) } #endif -// m_lastCheck = time(nullptr); -// GET_REGISTRY_USER(reg_user); -// reg_user.beginGroup("Updates"); -// reg_user.setValue("last_check", static_cast(m_lastCheck)); -// reg_user.endGroup(); - if (!sendMessage(MSG_CheckUpdates, WStrToTStr(m_checkUrl))) { m_dialogSchedule->addToSchedule("criticalMsg", QObject::tr("An error occurred while check updates: Update Service not found!")); } -// QTimer::singleShot(3000, this, [=]() { -// updateNeededCheking(); -// }); } void CUpdateManager::updateNeededCheking() { - checkUpdates(); -// if (m_pTimer) { -// m_pTimer->stop(); -// int interval = 0; -// const time_t DAY_TO_SEC = 24*3600; -// const time_t curr_time = time(nullptr); -// const time_t elapsed_time = curr_time - m_lastCheck; -// if (elapsed_time > DAY_TO_SEC) { -// checkUpdates(); -// } else { -// interval = static_cast(DAY_TO_SEC - elapsed_time); -// m_pTimer->setInterval(interval*1000); -// m_pTimer->start(); -// } -// } + if (m_pIntervalTimer) { + m_pIntervalTimer->stop(); + int elapsed_time = int(time(nullptr) - m_lastCheck); + if (elapsed_time > m_interval) { + checkUpdates(); + } else { + int remaining_time = 1000 * (m_interval - elapsed_time); + m_pIntervalTimer->setInterval(remaining_time < CHECK_ON_STARTUP_MS + 1000 ? CHECK_ON_STARTUP_MS + 1000 : remaining_time); + m_pIntervalTimer->start(); + } + } } void CUpdateManager::onProgressSlot(const int percent) @@ -476,6 +460,12 @@ void CUpdateManager::installUpdates() } } +void CUpdateManager::launchIntervalStartTimer() +{ + if (getUpdateMode() != UpdateMode::DISABLE) + m_pIntervalStartTimer->start(); +} + QString CUpdateManager::getVersion() const { return m_packageData->version; @@ -542,8 +532,11 @@ void CUpdateManager::setNewUpdateSetting(const QString& _rate) GET_REGISTRY_USER(reg_user); reg_user.setValue("autoUpdateMode", _rate); if (modeToEnum(_rate) == UpdateMode::DISABLE) { - destroyStartupTimer(m_pCheckOnStartupTimer); -// QTimer::singleShot(3000, this, &CUpdateManager::updateNeededCheking); + m_pIntervalStartTimer->stop(); + m_pIntervalTimer->stop(); + } else { + m_pIntervalStartTimer->start(); + } } void CUpdateManager::cancelLoading() diff --git a/win-linux/src/cupdatemanager.h b/win-linux/src/cupdatemanager.h index d7c331b88..5941de98b 100644 --- a/win-linux/src/cupdatemanager.h +++ b/win-linux/src/cupdatemanager.h @@ -77,6 +77,7 @@ class CUpdateManager: public QObject void handleAppClose(); void loadUpdates(); void installUpdates(); + void launchIntervalStartTimer(); public slots: void checkUpdates(bool manualCheck = false); @@ -103,10 +104,11 @@ public slots: m_manualCheck = false, m_lock = false; -// QTimer *m_pTimer = nullptr; -// time_t m_lastCheck; + time_t m_lastCheck = 0; + int m_interval = 0; - QTimer *m_pCheckOnStartupTimer = nullptr; + QTimer *m_pIntervalStartTimer = nullptr, + *m_pIntervalTimer = nullptr; wstring m_checkUrl; class DialogSchedule; From 4f38e4207bb9d322f615774cbc929869f1174abb Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Thu, 31 Aug 2023 20:44:05 +0300 Subject: [PATCH 157/298] [win-linux] update manager: ability to change the update interval --- win-linux/src/chelp.cpp | 1 + win-linux/src/cupdatemanager.cpp | 10 ++++++++++ 2 files changed, 11 insertions(+) diff --git a/win-linux/src/chelp.cpp b/win-linux/src/chelp.cpp index 4d7382133..b585f5340 100644 --- a/win-linux/src/chelp.cpp +++ b/win-linux/src/chelp.cpp @@ -63,6 +63,7 @@ void CHelp::out() " --xdg-desktop-portal=default use portals instead of gtk file chooser for current session\n" " --native-file-dialog use non Qt dialog\n" " --updates-appcast-channel=dev set development URL for updates\n" + " --updates-interval=
`; let _html = `
+

${_lang.actAbout}

-
- -

-
${_opts.appname} ${_lang.strVersion} ${_opts.version}
+
+ +
+

${_opts.appname}

+

${_lang.strVersion} ${_opts.version}

+
+

+ + ${_updates_status}
${_lang.aboutProFeaturesAvailable}
${_opts.edition}

-
${_lang.checkUpdates}

- ${_updates_status} +

${_lang.aboutChangelog}

${_opts.site} @@ -152,14 +159,14 @@ } this.view.renderpanel(this.view.paneltemplate(args)); - const $label = this.view.$panel.find('.ver-checkupdate'); - $label.on('click', (e) => { - if ( performance.now() - last_click_time < 1000 ) return; - last_click_time = performance.now(); - - window.sdk.execCommand('update', $label.data('state')); - }); - $label[this.updates===true?'show':'hide'](); + // const $label = this.view.$panel.find('.ver-checkupdate'); + // $label.on('click', (e) => { + // if ( performance.now() - last_click_time < 1000 ) return; + // last_click_time = performance.now(); + + // window.sdk.execCommand('update', $label.data('state')); + // }); + // $label[this.updates===true?'show':'hide'](); if ( args.opts ) { this.view.$panel.find('.ver-changelog')[!!args.opts.changelog?'show':'hide'](); } @@ -183,41 +190,41 @@ } } else if (/^updates:checking/.test(cmd)) { - const $label = this.view.$panel.find('.ver-checkupdate'); - const opts = JSON.parse(param); - if ( opts.version == 'no' ) { - $label.text(utils.Lang.updateNoUpdates); - } else { - $label.text(utils.Lang.updateAvialable.replace('$1', opts.version)); - $label.data('state', 'download'); - } - $label.show(); + // const $label = this.view.$panel.find('.ver-checkupdate'); + // const opts = JSON.parse(param); + // if ( opts.version == 'no' ) { + // $label.text(utils.Lang.updateNoUpdates); + // } else { + // $label.text(utils.Lang.updateAvialable.replace('$1', opts.version)); + // $label.data('state', 'download'); + // } + // $label.show(); } else if (/updates:download/.test(cmd)) { - const opts = JSON.parse(param); - const $label = this.view.$panel.find('.ver-checkupdate'); - - if ( opts.progress == 'done' ) { - $label.text(utils.Lang.updateDownloadFinished); - $label.data('state', 'install'); - } else - if ( opts.progress == 'aborted' ) { - $label.text(utils.Lang.updateDownloadCanceled); - } else { - $label.text(utils.Lang.updateDownloadProgress.replace('$1', opts.progress)); - $label.data('state', 'abort'); - } + // const opts = JSON.parse(param); + // const $label = this.view.$panel.find('.ver-checkupdate'); + + // if ( opts.progress == 'done' ) { + // $label.text(utils.Lang.updateDownloadFinished); + // $label.data('state', 'install'); + // } else + // if ( opts.progress == 'aborted' ) { + // $label.text(utils.Lang.updateDownloadCanceled); + // } else { + // $label.text(utils.Lang.updateDownloadProgress.replace('$1', opts.progress)); + // $label.data('state', 'abort'); + // } } else if (/updates:link/.test(cmd)) { - const $label = this.view.$panel.find('.ver-checkupdate'); - let opts = {}; - if ( param == 'lock' || param == 'unlock' ) - opts.disabled = param == 'lock'; - else opts = JSON.parse(param); - - if ( opts.disabled != undefined ) { - $label.attr('disabled', opts.disabled ? 'disabled' : false); - } + // const $label = this.view.$panel.find('.ver-checkupdate'); + // let opts = {}; + // if ( param == 'lock' || param == 'unlock' ) + // opts.disabled = param == 'lock'; + // else opts = JSON.parse(param); + + // if ( opts.disabled != undefined ) { + // $label.attr('disabled', opts.disabled ? 'disabled' : false); + // } } else if (/updates:status/.test(cmd)) { on_updates_info.call(this, JSON.parse(param)) diff --git a/common/loginpage/src/styles.less b/common/loginpage/src/styles.less index b8d099faf..6ebd99e45 100644 --- a/common/loginpage/src/styles.less +++ b/common/loginpage/src/styles.less @@ -898,6 +898,7 @@ li.menu-item { font-size: 13px; user-select: text; color: @text-normal; + margin-top: 10px; .row-copyright { margin-bottom: 0; @@ -1185,7 +1186,7 @@ li.menu-item { background-color: @background-tabbar; border-radius: 5px; padding: 20px 30px; - margin: 10px 0; + margin: 25px 0; max-width: 800px; .status-field { @@ -1223,3 +1224,24 @@ li.menu-item { } } } + +#idx-about-cut-logo { + width: 52px; + overflow: hidden; + margin-right: 15px; + height: 45px; +} + +#idx-about-appname { + font-weight: bold; + font-size: 18px; + margin: -8px 0 0 0; +} + +#idx-about-version { + margin: 4px 0 -4px; +} + +.hidden { + display: none; +} \ No newline at end of file From ec3e560082ef05bab40063c603e30cc0b9a42eca Mon Sep 17 00:00:00 2001 From: Maria-Sukhova Date: Thu, 14 Sep 2023 17:15:17 +0300 Subject: [PATCH 232/298] added fr --- win-linux/langs/fr.ts | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/win-linux/langs/fr.ts b/win-linux/langs/fr.ts index bf7613270..87cbe8f1a 100644 --- a/win-linux/langs/fr.ts +++ b/win-linux/langs/fr.ts @@ -589,23 +589,23 @@ This folder configuration does not allow for updates! The folder name should be: - + Cette configuration de dossier ne permet pas les mises à jour ! Le nom du dossier doit être : A new version of %1 is available! - La nouvelle version de %1 est disponible ! + La nouvelle version de %1 est disponible ! %1 %2 is now available (you have %3). Would you like to download it now? - %1 %2 est disponible (vous avez %3). Voulez-vous le télécharger maintenant ? + %1 %2 est disponible (vous avez %3). Voulez-vous le télécharger maintenant ? %1 %2 is now downloaded (you have %3). Would you like to install it now? - %1 %2 est téléchargé (vous avez %3). Voulez-vous l'installer maintenant ? + %1 %2 est téléchargé (vous avez %3). Voulez-vous l'installer maintenant ? @@ -637,13 +637,13 @@ XML File (*.xml) - + Fichier XML (*.xml) Access to file '%1' is denied! - + L'accès au fichier "%1" est refusé ! @@ -698,78 +698,78 @@ An error occurred while check updates: Update Service not found! - + Une erreur s'est produite lors de la vérification des mises à jour : Service de mise à jour introuvable ! An error occurred while loading updates: Update Service not found! - + Une erreur s'est produite lors du chargement des mises à jour : Service de mise à jour introuvable ! An error occurred while unzip updates: Update Service not found! - + Une erreur s'est produite lors de la décompression des mises à jour : Service de mise à jour introuvable ! An error occurred while start install updates! - + Une erreur s'est produite lors de l'installation des mises à jour ! An error occurred while start replacing files: Update Service not found! - + Une erreur s'est produite lors du lancement du remplacement des fichiers : Service de mise à jour introuvable ! Cancel - Annuler + Annuler Yes - Oui + Oui No - Non + Non OK - OK + OK Skip - Ignorer + Ignorer Buy Now - + Acheter maintenant Activate - + Activer Continue - + Continuer An error occurred while opening the portal:<br>%1 - + Une erreur s'est produite lors de l'ouverture du portail : <br>%1 App can't working correctly under admin rights. - + L'application ne peut pas fonctionner correctement avec des droits d'administrateur. &OK From fd29b0b576d238d946325d70f53f75b6a526010f Mon Sep 17 00:00:00 2001 From: Maria-Sukhova Date: Fri, 15 Sep 2023 12:30:57 +0300 Subject: [PATCH 233/298] added zh --- win-linux/langs/zh_CN.ts | 42 ++++++++++++++++++++-------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/win-linux/langs/zh_CN.ts b/win-linux/langs/zh_CN.ts index 0bd6e122e..bea3e5979 100644 --- a/win-linux/langs/zh_CN.ts +++ b/win-linux/langs/zh_CN.ts @@ -589,23 +589,23 @@ This folder configuration does not allow for updates! The folder name should be: - + 此文件夹配置不允许更新!文件夹名称应为: A new version of %1 is available! - %1 的新版本现已发布! + %1 的新版本现已发布! %1 %2 is now available (you have %3). Would you like to download it now? - %1 %2 现已可用(您使用的是 %3)。您是否要立即下载新版本? + %1 %2 现已可用(您使用的是 %3)。您是否要立即下载新版本? %1 %2 is now downloaded (you have %3). Would you like to install it now? - %1 %2 已经下载完成(您使用的是 %3)。您是否要立即安装新版本? + %1 %2 已经下载完成(您使用的是 %3)。您是否要立即安装新版本? @@ -637,13 +637,13 @@ XML File (*.xml) - + XML 文件 (*.xml) Access to file '%1' is denied! - + 拒绝访问‘%1’文件! @@ -698,78 +698,78 @@ An error occurred while check updates: Update Service not found! - + 检查更新时发生错误: 未找到更新服务! An error occurred while loading updates: Update Service not found! - + 加载更新时发生错误: 未找到更新服务! An error occurred while unzip updates: Update Service not found! - + 解压更新时发生错误: 未找到更新服务! An error occurred while start install updates! - + 开始安装更新时发生错误! An error occurred while start replacing files: Update Service not found! - + 开始替换文件时发生错误: 未找到更新服务! Cancel - 取消 + 取消 Yes - + No - + OK - 确定 + 确定 Skip - 跳过 + 跳过 Buy Now - + 立即购买 Activate - + 激活 Continue - + 继续 An error occurred while opening the portal:<br>%1 - + 打开门户网站时发生错误: <br>%1 App can't working correctly under admin rights. - + 应用程序在管理员权限下无法正常运行。 &OK From 3397fbb0810d9a96e16539c95ed7475d4be3eaf2 Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Fri, 15 Sep 2023 21:22:09 +0300 Subject: [PATCH 234/298] [start page] fix lang changing --- common/loginpage/src/panelabout.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/common/loginpage/src/panelabout.js b/common/loginpage/src/panelabout.js index 66ad2e658..2b1624d26 100644 --- a/common/loginpage/src/panelabout.js +++ b/common/loginpage/src/panelabout.js @@ -62,7 +62,7 @@ ViewAbout.prototype.paneltemplate = function(args) { var _opts = args.opts; !!_opts.active && (_opts.edition = !!_opts.edition ? _opts.edition + ' ' + _opts.active : _opts.active); - _opts.edition = !!_opts.edition ? `
${_opts.edition}
` : ''; + _opts.edition = !!_opts.edition ? `
${_opts.edition}
` : ''; let _ext_ver = ''; if ( !!_opts.arch ) _ext_ver += `${_opts.arch == 'x64' ? 'x64' : 'x86'}`; @@ -116,10 +116,6 @@ return _html; }; - ViewAbout.prototype.renderpanel = function(template) { - this.$panel && this.$panel.empty(); - this.$panel.append(template); - }; window.ControllerAbout = ControllerAbout; @@ -156,9 +152,13 @@ this.view = new ViewAbout(args); this.view.render(); this.view.$menuitem.removeClass('extra'); + this.view.$panel.append(this.view.paneltemplate(args)); + } else { + if ( !!args.opts?.edition ) { + $('#idx-ver-edition').html(args.opts.edition); + } } - this.view.renderpanel(this.view.paneltemplate(args)); // const $label = this.view.$panel.find('.ver-checkupdate'); // $label.on('click', (e) => { // if ( performance.now() - last_click_time < 1000 ) return; From 77dc95bfddffde8fdc3a80bfa16fcea7fab02cdf Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Mon, 18 Sep 2023 12:08:16 +0300 Subject: [PATCH 235/298] [start page] fix About page markup --- common/loginpage/src/panelabout.js | 10 +++++----- common/loginpage/src/styles.less | 6 +++++- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/common/loginpage/src/panelabout.js b/common/loginpage/src/panelabout.js index 66ad2e658..903cf1a2f 100644 --- a/common/loginpage/src/panelabout.js +++ b/common/loginpage/src/panelabout.js @@ -62,7 +62,7 @@ ViewAbout.prototype.paneltemplate = function(args) { var _opts = args.opts; !!_opts.active && (_opts.edition = !!_opts.edition ? _opts.edition + ' ' + _opts.active : _opts.active); - _opts.edition = !!_opts.edition ? `
${_opts.edition}
` : ''; + _opts.edition = !!_opts.edition ? `
${_opts.edition}
` : ''; let _ext_ver = ''; if ( !!_opts.arch ) _ext_ver += `${_opts.arch == 'x64' ? 'x64' : 'x86'}`; @@ -99,10 +99,10 @@ ${_updates_status}
${_lang.aboutProFeaturesAvailable}
- ${_opts.edition}

-

- ${_lang.aboutChangelog}

-

+ ${_opts.edition} + + + ${_opts.site}
`+ // '
'+ diff --git a/common/loginpage/src/styles.less b/common/loginpage/src/styles.less index 6ebd99e45..270d6cd37 100644 --- a/common/loginpage/src/styles.less +++ b/common/loginpage/src/styles.less @@ -1242,6 +1242,10 @@ li.menu-item { margin: 4px 0 -4px; } +.about-field { + margin-bottom: 10px; +} + .hidden { display: none; -} \ No newline at end of file +} From 1d11d89af916bf083842799263ccca923486bb97 Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Mon, 18 Sep 2023 12:52:51 +0300 Subject: [PATCH 236/298] [win-nix] debug --- win-linux/src/cascapplicationmanagerwrapper.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/win-linux/src/cascapplicationmanagerwrapper.cpp b/win-linux/src/cascapplicationmanagerwrapper.cpp index 5cc4da1c7..3cde3fda7 100644 --- a/win-linux/src/cascapplicationmanagerwrapper.cpp +++ b/win-linux/src/cascapplicationmanagerwrapper.cpp @@ -242,10 +242,11 @@ bool CAscApplicationManagerWrapper::processCommonEvent(NSEditorApi::CAscCefMenuE } if ( InputArgs::contains(L"--system-title-bar") ) { - QJsonObject json{{"style:change", QJsonObject{{"element","body"}, - {"action", "merge"}, - {"style","#title-doc-name{display:none}"}}}}; - sendCommandTo(ptr, L"window:features", Utils::stringifyJson(json).toStdWString()); + { + QJsonObject json{{"element","body"}, + {"action", "merge"}, + {"style","#title-doc-name{display:none}"}}; + sendCommandTo(ptr, L"style:change", Utils::stringifyJson(json).toStdWString()); } } return true; From 731040279af2cb4890a4509bd30ee1f798ad0423 Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Mon, 18 Sep 2023 13:08:34 +0300 Subject: [PATCH 237/298] [win-nix] fixed misspeeling --- win-linux/src/cascapplicationmanagerwrapper.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/win-linux/src/cascapplicationmanagerwrapper.cpp b/win-linux/src/cascapplicationmanagerwrapper.cpp index 3cde3fda7..a0a96d542 100644 --- a/win-linux/src/cascapplicationmanagerwrapper.cpp +++ b/win-linux/src/cascapplicationmanagerwrapper.cpp @@ -242,7 +242,6 @@ bool CAscApplicationManagerWrapper::processCommonEvent(NSEditorApi::CAscCefMenuE } if ( InputArgs::contains(L"--system-title-bar") ) { - { QJsonObject json{{"element","body"}, {"action", "merge"}, {"style","#title-doc-name{display:none}"}}; From 169a06c2d55446af617b157c1cf3aea329bcaf20 Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Mon, 18 Sep 2023 23:32:21 +0300 Subject: [PATCH 238/298] [start page] fix missed fonts --- common/loginpage/src/index.html | 10 ++++++++++ common/loginpage/src/index.html.deploy | 13 ++++++++++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/common/loginpage/src/index.html b/common/loginpage/src/index.html index 3fd7b6e22..e12abd707 100644 --- a/common/loginpage/src/index.html +++ b/common/loginpage/src/index.html @@ -66,6 +66,16 @@ src: url('../../../../core-fonts/opensans/OpenSans-Regular.ttf'); font-weight: normal; } + @font-face { + font-family: 'Open Sans'; + src: url('../../../../core-fonts/opensans/OpenSans-Light.ttf'); + font-weight: 100; + } + @font-face { + font-family: 'Open Sans'; + src: url('../../../../core-fonts/opensans/OpenSans-Bold.ttf'); + font-weight: bold; + } diff --git a/common/loginpage/src/index.html.deploy b/common/loginpage/src/index.html.deploy index d8f0d2bfd..c952730ce 100644 --- a/common/loginpage/src/index.html.deploy +++ b/common/loginpage/src/index.html.deploy @@ -50,9 +50,20 @@ @font-face { font-family: 'Open Sans'; - src: url('fonts/opensans/OpenSans-Regular.ttf'); + /*src: url('fonts/opensans/OpenSans-Regular.ttf');*/ + src: url('fonts/OpenSans-Regular.ttf'); font-weight: normal; } + @font-face { + font-family: 'Open Sans'; + src: url('fonts/OpenSans-Bold.ttf'); + font-weight: bold; + } + @font-face { + font-family: 'Open Sans'; + src: url('fonts/OpenSans-Light.ttf'); + font-weight: 100; + } From 07bdfafe9c4f1ed74f7d804ace99a478512bf2a2 Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Mon, 18 Sep 2023 23:33:13 +0300 Subject: [PATCH 239/298] [start page] fix some pages min width --- common/loginpage/src/styles.less | 2 ++ 1 file changed, 2 insertions(+) diff --git a/common/loginpage/src/styles.less b/common/loginpage/src/styles.less index 270d6cd37..2b38d3c4c 100644 --- a/common/loginpage/src/styles.less +++ b/common/loginpage/src/styles.less @@ -306,10 +306,12 @@ li.menu-item { &.settings { overflow-x: hidden; + min-width: 450px; } &.about { overflow-x: scroll; + min-width: 450px; } &.templates { From 437aa77af5ea3bc345e0cd6318dd2564d269949c Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Wed, 20 Sep 2023 12:36:16 +0300 Subject: [PATCH 240/298] [macos] fix bug 64144 --- .../Controllers/Common/ASCEventsController.mm | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/macos/ONLYOFFICE/Code/Controllers/Common/ASCEventsController.mm b/macos/ONLYOFFICE/Code/Controllers/Common/ASCEventsController.mm index f55dc5698..39ea11b20 100644 --- a/macos/ONLYOFFICE/Code/Controllers/Common/ASCEventsController.mm +++ b/macos/ONLYOFFICE/Code/Controllers/Common/ASCEventsController.mm @@ -280,16 +280,15 @@ virtual void OnEvent(NSEditorApi::CAscCefMenuEvent* pRawEvent) break; } - case ASC_MENU_EVENT_TYPE_CEF_LOCALFILE_RECENTOPEN: +// case ASC_MENU_EVENT_TYPE_CEF_LOCALFILE_RECENTOPEN: case ASC_MENU_EVENT_TYPE_CEF_LOCALFILE_RECOVEROPEN: { NSEditorApi::CAscLocalOpenFileRecent_Recover* pData = (NSEditorApi::CAscLocalOpenFileRecent_Recover*)pEvent->m_pData; - BOOL isRecover = pData->get_IsRecover(); [[NSNotificationCenter defaultCenter] postNotificationName:CEFEventNameCreateTab object:nil userInfo:@{ - @"action" : isRecover ? @(ASCTabActionOpenLocalRecoverFile) : @(ASCTabActionOpenLocalRecentFile), + @"action" : @(ASCTabActionOpenLocalRecoverFile), @"active" : @(YES), @"fileId" : @(pData->get_Id()), @"path" : [NSString stringWithstdwstring:pData->get_Path()] @@ -752,7 +751,16 @@ virtual void OnEvent(NSEditorApi::CAscCefMenuEvent* pRawEvent) } } } else if (cmd.find(L"open:recent") != std::wstring::npos) { - NSLog(@"open:recent"); + if (NSDictionary * json = [[NSString stringWithstdwstring:param] dictionary]) { + [[NSNotificationCenter defaultCenter] postNotificationName:CEFEventNameCreateTab + object:nil + userInfo:@{ + @"action" : @(ASCTabActionOpenLocalRecentFile), + @"active" : @(YES), + @"fileId" : json[@"id"], + @"path" : json[@"path"] + }]; + } } else if (cmd.find(L"webapps:features") != std::wstring::npos) { CAscApplicationManager * appManager = [NSAscApplicationWorker getAppManager]; CCefView * pCefView = appManager->GetViewById(senderId); From 9605bde4753c6b36d05c63f228ec0f9f56c2380c Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Wed, 20 Sep 2023 12:37:17 +0300 Subject: [PATCH 241/298] [macos] debug for recent files opening --- .../Code/Controllers/Common/ASCCommonViewController.mm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/macos/ONLYOFFICE/Code/Controllers/Common/ASCCommonViewController.mm b/macos/ONLYOFFICE/Code/Controllers/Common/ASCCommonViewController.mm index ca6ccb4f0..55cd1984e 100644 --- a/macos/ONLYOFFICE/Code/Controllers/Common/ASCCommonViewController.mm +++ b/macos/ONLYOFFICE/Code/Controllers/Common/ASCCommonViewController.mm @@ -647,7 +647,7 @@ - (BOOL)canOpenFile:(NSString *)path tab:(ASCTabView *)tab { if (path) { - NSURL * urlFile = [NSURL URLWithString:[path stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLPathAllowedCharacterSet]]]; + NSURL * urlFile = [NSURL URLWithString:[path stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]]]; if (urlFile && [urlFile host]) { canOpen = YES; From fb10640afe094a7d54a0ad6239fb97c824512a26 Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Wed, 20 Sep 2023 14:13:37 +0300 Subject: [PATCH 242/298] [macos] refactoring --- .../Controllers/Common/ASCThemesController.m | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/macos/ONLYOFFICE/Code/Controllers/Common/ASCThemesController.m b/macos/ONLYOFFICE/Code/Controllers/Common/ASCThemesController.m index 82fa90acc..fe1b8a77a 100644 --- a/macos/ONLYOFFICE/Code/Controllers/Common/ASCThemesController.m +++ b/macos/ONLYOFFICE/Code/Controllers/Common/ASCThemesController.m @@ -103,18 +103,18 @@ + (NSColor*)color:(NSString*)name forTheme:(NSString*)theme { return [NSColor colorNamed:@"tab-portal-activeColor"]; else return kColorRGBA(255, 255, 255, 1.0); } - } else if ([name isEqualToString:tabWordActiveBackgroundColor]) { + } else { if ( [theme isEqualToString:uiThemeDark] ) return UIColorFromRGB(0x2a2a2a); else if ( [theme isEqualToString:uiThemeContrastDark] ) return UIColorFromRGB(0x1e1e1e); - else return [NSColor brendDocumentEditor]; - } else if ([name isEqualToString:tabCellActiveBackgroundColor]) { - if ( [theme isEqualToString:uiThemeDark] ) return UIColorFromRGB(0x2a2a2a); - else if ( [theme isEqualToString:uiThemeContrastDark] ) return UIColorFromRGB(0x1e1e1e); - else return [NSColor brendSpreadsheetEditor]; - } else if ([name isEqualToString:tabSlideActiveBackgroundColor]) { - if ( [theme isEqualToString:uiThemeDark] ) return UIColorFromRGB(0x2a2a2a); - else if ( [theme isEqualToString:uiThemeContrastDark] ) return UIColorFromRGB(0x1e1e1e); - else return [NSColor brendPresentationEditor]; + else { + if ([name isEqualToString:tabWordActiveBackgroundColor]) { + return [NSColor brendDocumentEditor]; + } else if ([name isEqualToString:tabCellActiveBackgroundColor]) { + return [NSColor brendSpreadsheetEditor]; + } else if ([name isEqualToString:tabSlideActiveBackgroundColor]) { + return [NSColor brendPresentationEditor]; + } + } } return NULL; From c264b2fd6f2616a5ae544c0a4289edfc971d27f8 Mon Sep 17 00:00:00 2001 From: Kirill Volkov Date: Thu, 21 Sep 2023 00:14:46 +0300 Subject: [PATCH 243/298] Change img --- common/loginpage/res/img/connect2.svg | 107 +++++++++------------ common/loginpage/res/img/connect2_dark.svg | 89 +++++++++-------- 2 files changed, 91 insertions(+), 105 deletions(-) diff --git a/common/loginpage/res/img/connect2.svg b/common/loginpage/res/img/connect2.svg index 5c18a3cd9..fcbaf71f2 100644 --- a/common/loginpage/res/img/connect2.svg +++ b/common/loginpage/res/img/connect2.svg @@ -1,16 +1,13 @@ - - - - + + - - + @@ -29,53 +26,53 @@ - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + - - + + - + - - + + - - + + - - - - - - - + + + + + + + @@ -86,10 +83,10 @@ - + - + @@ -99,13 +96,13 @@ - - - + + + - + - + @@ -144,15 +141,5 @@ - - - - - - - - - - diff --git a/common/loginpage/res/img/connect2_dark.svg b/common/loginpage/res/img/connect2_dark.svg index 3ab9df80c..95892d8f3 100644 --- a/common/loginpage/res/img/connect2_dark.svg +++ b/common/loginpage/res/img/connect2_dark.svg @@ -2,14 +2,13 @@ - - + + - - + @@ -18,7 +17,7 @@ - + @@ -28,53 +27,53 @@ - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - - + + - + - - - - - + + + + + @@ -85,11 +84,11 @@ - + - + @@ -99,11 +98,11 @@ - - - + + + - + From 7724b6603d426b327709bb67d70f316b10f6d083 Mon Sep 17 00:00:00 2001 From: Evgeniy Antonyuk Date: Thu, 21 Sep 2023 19:07:16 +0500 Subject: [PATCH 244/298] fix Bug 63804 - Remove gconf from dependencies since it's deprecated (#970) --- win-linux/package/linux/deb/template/control.m4 | 1 - 1 file changed, 1 deletion(-) diff --git a/win-linux/package/linux/deb/template/control.m4 b/win-linux/package/linux/deb/template/control.m4 index 84009b3a6..07a386b20 100644 --- a/win-linux/package/linux/deb/template/control.m4 +++ b/win-linux/package/linux/deb/template/control.m4 @@ -23,7 +23,6 @@ ifelse(M4_PACKAGE_EDITION, full, libatk1.0-0, libgtk-3-0, libcairo2, - libgconf-2-4, libstdc++6 (>=4.8), fonts-dejavu | ttf-dejavu, fonts-liberation, From 9c38fb44667ebc6eebf38b97865df2c1270fc167 Mon Sep 17 00:00:00 2001 From: Semyon Bezrukov Date: Mon, 25 Sep 2023 10:15:44 +0300 Subject: [PATCH 245/298] Fix installer custom pages elements dpi (#971) --- win-linux/package/windows/associate_page.iss | 11 +++-------- win-linux/package/windows/uninstall_page.iss | 3 ++- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/win-linux/package/windows/associate_page.iss b/win-linux/package/windows/associate_page.iss index be0f8f134..137d7ca39 100644 --- a/win-linux/package/windows/associate_page.iss +++ b/win-linux/package/windows/associate_page.iss @@ -1725,21 +1725,16 @@ begin end else begin labelDesc := TNewStaticText.Create(associatePage); labelDesc.Parent := associatePage.Surface; + labelDesc.Width := associatePage.SurfaceWidth; labelDesc.WordWrap := True; labelDesc.Caption := ExpandConstant('{cm:warnWin10FileAssociationDesc}'); - labelDesc.AutoSize := True; - labelDesc.Width := associatePage.SurfaceWidth; - labelDesc.Left := 0; - labelDesc.Top := 0; labelPath := TNewStaticText.Create(associatePage); labelPath.Parent := associatePage.Surface; + labelPath.Top := labelDesc.Top + labelDesc.Height + ScaleY(8); + labelPath.Width := associatePage.SurfaceWidth; labelPath.WordWrap := True; labelPath.Caption := ExpandConstant('{cm:warnWin10FileAssociationPath}'); - labelPath.AutoSize := True; - labelPath.Width := associatePage.SurfaceWidth; - labelPath.Left := 0; - labelPath.Top := labelDesc.Top + 50; labelPath.Font.Style := [fsBold]; end end else begin diff --git a/win-linux/package/windows/uninstall_page.iss b/win-linux/package/windows/uninstall_page.iss index df7c09f74..206255041 100644 --- a/win-linux/package/windows/uninstall_page.iss +++ b/win-linux/package/windows/uninstall_page.iss @@ -74,9 +74,10 @@ begin CheckBox := TNewCheckBox.Create(UninstallProgressForm); CheckBox.Parent := UninstallFirstPage; - CheckBox.Top := PageText.Top + ScaleY(50); + CheckBox.Top := PageText.Top + PageText.Height + ScaleY(8); CheckBox.Left := PageText.Left; CheckBox.Width := UninstallProgressForm.Width; + CheckBox.Height := ScaleY(17); CheckBox.Caption := ' ' + ExpandConstant('{cm:UninstallOptionClearData}'); UninstallProgressForm.InnerNotebook.ActivePage := UninstallFirstPage; From 8e0761e6048070b3350e5f09fbf03276c029362d Mon Sep 17 00:00:00 2001 From: Maria-Sukhova Date: Mon, 25 Sep 2023 11:11:03 +0300 Subject: [PATCH 246/298] added translations --- win-linux/langs/en.ts | 66 +++++++++++++++++------------------ win-linux/langs/es.ts | 72 +++++++++++++++++++------------------- win-linux/langs/hy.ts | 70 ++++++++++++++++++------------------- win-linux/langs/it_IT.ts | 74 ++++++++++++++++++++-------------------- win-linux/langs/pt_BR.ts | 72 +++++++++++++++++++------------------- win-linux/langs/ro.ts | 72 +++++++++++++++++++------------------- win-linux/langs/ru.ts | 72 +++++++++++++++++++------------------- win-linux/langs/zh_CN.ts | 72 +++++++++++++++++++------------------- 8 files changed, 285 insertions(+), 285 deletions(-) diff --git a/win-linux/langs/en.ts b/win-linux/langs/en.ts index 192323c8f..d3827207e 100644 --- a/win-linux/langs/en.ts +++ b/win-linux/langs/en.ts @@ -307,27 +307,27 @@ DOCX Document - + OpenDocument Document template - + OpenDocument Document Template OpenDocument Presentation Template - + Macro-enabled spreadsheet template - + Macro-enabled Spreadsheet Template OpenDocument Spreadsheet Template - + @@ -357,7 +357,7 @@ SVG Image (*.svg) - + @@ -441,19 +441,19 @@ Spreadsheet template - + Spreadsheet Template Presentation template - + Presentation Template Document template - + Document Template @@ -499,12 +499,12 @@ More than one document is open.<br>Close the window anyway? - + Don't ask again. - + @@ -586,7 +586,7 @@ Last check performed - + @@ -602,31 +602,31 @@ Check for updates - + To finish updating, restart app - + Restart - + Checking for updates... - + Updates are not allowed! - + @@ -651,81 +651,81 @@ Downloading new version %1 (0%) - + Cancel - + An error occurred while loading updates: package Url is empty! - + Update package error: md5 sum does not match the original. - + Preparing update... - + An error occurred while unzip updates: Update Service not found! - + Update is available (version %1) - + Download update - + Current version is up to date - + Update is available - + Current version - + Update version - + Would you like to download update now? - + Update is ready to install - + Would you like to restart app now? - + @@ -784,7 +784,7 @@ Install later - + diff --git a/win-linux/langs/es.ts b/win-linux/langs/es.ts index 2072c66ad..b4bb1873d 100644 --- a/win-linux/langs/es.ts +++ b/win-linux/langs/es.ts @@ -335,27 +335,27 @@ DOCX Document - + Documento DOCX OpenDocument Document template - + Plantilla de documento OpenDocument OpenDocument Presentation Template - + Plantilla de presentación OpenDocument Macro-enabled spreadsheet template - + Plantilla de hoja de cálculo compatible con macros OpenDocument Spreadsheet Template - + Plantilla de hoja de cálculo OpenDocument @@ -385,7 +385,7 @@ SVG Image (*.svg) - + Imagen SVG (*.svg) @@ -469,19 +469,19 @@ Spreadsheet template - + Plantilla de hoja de cálculo Presentation template - + Plantilla de presentación Document template - + Plantilla de documento @@ -566,12 +566,12 @@ More than one document is open.<br>Close the window anyway? - + Hay más de un documento abierto. ¿Cerrar la ventana de todos modos? Don't ask again. - + No volver a preguntar. @@ -680,7 +680,7 @@ Last check performed - + Se ha realizado la última comprobación @@ -696,31 +696,31 @@ Check for updates - + Comprobando las actualizaciones To finish updating, restart app - + Para terminar la actualización, reinicie la aplicación Restart - + Reiniciar Checking for updates... - + Comprobando las actualizaciones... Updates are not allowed! - + ¡Las actualizaciones no están permitidas! @@ -730,96 +730,96 @@ An error occurred while check updates: Update Service not found! - + Se ha producido un error al comprobar las actualizaciones: ¡No se ha encontrado el servicio de actualización! Downloading new version %1 (%2%) - + Descargando la nueva versión %1 (%2%) An error occurred while loading updates: Update Service not found! - + Se ha producido un error al cargar las actualizaciones: ¡No se ha encontrado el servicio de actualización! Downloading new version %1 (0%) - + Descargando la nueva versión %1 (0%) Cancel - Cancelar + Cancelar An error occurred while loading updates: package Url is empty! - + Se ha producido un error al cargar las actualizaciones: ¡La Url del paquete está vacía! Update package error: md5 sum does not match the original. - + Error al actualizar el paquete: la suma md5 no coincide con la original. Preparing update... - + Preparando la actualización... An error occurred while unzip updates: Update Service not found! - + Se ha producido un error al descomprimir las actualizaciones: ¡No se ha encontrado el servicio de actualización! Update is available (version %1) - + La actualización está disponible (versión %1) Download update - Descargar actualización + Descargar actualización Current version is up to date - + La versión actual está actualizada Update is available - + La actualización está disponible Current version - + Versión actual Update version - + Versión de actualización Would you like to download update now? - + ¿Desea descargar la actualización ahora? Update is ready to install - + La actualización está lista para instalarse Would you like to restart app now? - + ¿Desea reiniciar la aplicación ahora? A new version of %1 is available! @@ -902,7 +902,7 @@ Install later - + Instalar más tarde diff --git a/win-linux/langs/hy.ts b/win-linux/langs/hy.ts index bd08c1283..b577756d6 100644 --- a/win-linux/langs/hy.ts +++ b/win-linux/langs/hy.ts @@ -320,27 +320,27 @@ DOCX Document - + DOCX փաստաթուղթ OpenDocument Document template - + ԲացՓաստաթուղթ Փաստաթղթի ձևանմուշ OpenDocument Presentation Template - + ԲացՓաստաթուղթ Ներկայացման ձևանմուշ Macro-enabled spreadsheet template - + Մակրո միացված աղյուսակի ձևանմուշ OpenDocument Spreadsheet Template - + ԲացՓաստաթուղթ Աղյուսակի ձևանմուշ @@ -370,7 +370,7 @@ SVG Image (*.svg) - + SVG Պատկեր (*.svg) @@ -454,19 +454,19 @@ Spreadsheet template - + Աղյուսակի ձևանմուշ Presentation template - + Ներկայացման ձևանմուշ Document template - + Փաստաթղթի ձևանմուշ @@ -512,12 +512,12 @@ More than one document is open.<br>Close the window anyway? - + Մեկից ավելի փաստաթղթեր բաց են:<br>Ամեն դեպքում փակե՞լ պատուհանը։ Don't ask again. - + Այլևս չհարցնել։ @@ -622,7 +622,7 @@ Last check performed - + Կատարված վերջին ստուգումը @@ -638,31 +638,31 @@ Check for updates - + Թարմացումների ստուգում To finish updating, restart app - + Թարմացումն ավարտելու համար վերագործարկեք հավելվածը Restart - + Վերագործարկել Checking for updates... - + Թարմացումների ստուգում... Updates are not allowed! - + Թարմացումներն անթույլատրելի են: @@ -672,96 +672,96 @@ An error occurred while check updates: Update Service not found! - + Թարմացումները ստուգելիս սխալ առաջացավ՝ թարմացման ծառայությունը չի գտնվել: Downloading new version %1 (%2%) - + Նոր տարբերակի ներբեռնում %1 (%2%) An error occurred while loading updates: Update Service not found! - + Թարմացումները բեռնելիս սխալ է տեղի ունեցել՝ թարմացման ծառայությունը չի գտնվել: Downloading new version %1 (0%) - + Նոր տարբերակի ներբեռնում %1 (0%) Cancel - Չեղարկել + Չեղարկել An error occurred while loading updates: package Url is empty! - + Թարմացումները բեռնելիս սխալ տեղի ունեցավ՝ փաթեթի URL-ը դատարկ է: Update package error: md5 sum does not match the original. - + Փաթեթի թարմացման սխալ՝ md5 գումարը չի համապատասխանում բնօրինակին: Preparing update... - + Թարմացման նախապատրաստում... An error occurred while unzip updates: Update Service not found! - + Թարմացումներն անջատելիս սխալ տեղի ունեցավ` թարմացման ծառայությունը չի գտնվել: Update is available (version %1) - + Թարմացումը հասանելի է (տարբերակ %1) Download update - + Ներբեռնել թարմացումը Current version is up to date - + Ներկայիս տարբերակը արդիական է Update is available - + Թարմացումը հասանելի է Current version - + Ներկայիս տարբերակը Update version - + Թարմացնել տարբերակը Would you like to download update now? - + Ցանկանու՞մ եք ներբեռնել թարմացումը հիմա: Update is ready to install - + Թարմացումը պատրաստ է տեղադրման Would you like to restart app now? - + Ցանկանու՞մ եք վերագործարկել հավելվածը հիմա: diff --git a/win-linux/langs/it_IT.ts b/win-linux/langs/it_IT.ts index 9f293d3bd..20cccf66f 100644 --- a/win-linux/langs/it_IT.ts +++ b/win-linux/langs/it_IT.ts @@ -195,7 +195,7 @@ There are no printers available - Non ci sono stampanti disponibili + Non ci sono stampanti disponibili @@ -335,27 +335,27 @@ DOCX Document - + Documento DOCX OpenDocument Document template - + Modello di documento OpenDocument OpenDocument Presentation Template - + Modello di presentazione OpenDocument Macro-enabled spreadsheet template - + Modello di foglio di calcolo abilitato per le macro OpenDocument Spreadsheet Template - + Modello di foglio di calcolo OpenDocument @@ -385,7 +385,7 @@ SVG Image (*.svg) - + Immagine SVG (*.svg) @@ -469,19 +469,19 @@ Spreadsheet template - + Modello di foglio di calcolo Presentation template - + Modello di presentazione Document template - + Modello di documento @@ -527,12 +527,12 @@ More than one document is open.<br>Close the window anyway? - + Sono aperti più documenti.<br>Chiudere comunque la finestra? Don't ask again. - + Non chiedermelo più. @@ -641,7 +641,7 @@ Last check performed - + Ultimo controllo effettuato @@ -657,31 +657,31 @@ Check for updates - + Controllo degli aggiornamenti in corso To finish updating, restart app - + Per completare l'aggiornamento, riavvia l'app Restart - + Riavvia Checking for updates... - + Controllo degli aggiornamenti in corso... Updates are not allowed! - + Gli aggiornamenti non sono consentiti! @@ -691,96 +691,96 @@ An error occurred while check updates: Update Service not found! - + Si è verificato un errore durante il controllo degli aggiornamenti: Servizio aggiornamenti non è stato trovato! Downloading new version %1 (%2%) - + Download della nuova versione %1 (%2%) An error occurred while loading updates: Update Service not found! - + Si è verificato un errore durante il caricamento degli aggiornamenti: Servizio aggiornamenti non è stato trovato! Downloading new version %1 (0%) - + Download della nuova versione %1 (0%) Cancel - Annulla + Annulla An error occurred while loading updates: package Url is empty! - + Si è verificato un errore durante il caricamento degli aggiornamenti: l'URL del pacchetto è vuoto! Update package error: md5 sum does not match the original. - + Errore del pacchetto di aggiornamento: la somma md5 non corrisponde all'originale. Preparing update... - + Preparazione dell'aggiornamento in corso... An error occurred while unzip updates: Update Service not found! - + Si è verificato un errore durante l'estrazione degli aggiornamenti: Servizio aggiornamenti non è stato trovato! Update is available (version %1) - + L'aggiornamento è disponibile (versione %1) Download update - Scaricare l'aggiornamento + Scaricare l'aggiornamento Current version is up to date - + La versione presente è aggiornata Update is available - + L'aggiornamento è disponibile Current version - + Versione attuale Update version - + Aggiorna versione Would you like to download update now? - + Desideri scaricare l'aggiornamento ora? Update is ready to install - + L'aggiornamento è pronto per l'installazione Would you like to restart app now? - + Desideri riavviare l'app ora? A new version of %1 is available! @@ -863,7 +863,7 @@ Install later - + Installa più tardi diff --git a/win-linux/langs/pt_BR.ts b/win-linux/langs/pt_BR.ts index 56bc5bf2c..79ff43e98 100644 --- a/win-linux/langs/pt_BR.ts +++ b/win-linux/langs/pt_BR.ts @@ -336,27 +336,27 @@ DOCX Document - + Documento DOCX OpenDocument Document template - + Modelo de documento OpenDocument OpenDocument Presentation Template - + Modelo de apresentação OpenDocument Macro-enabled spreadsheet template - + Modelo de planilha habilitado para macro OpenDocument Spreadsheet Template - + Modelo de planilha OpenDocument @@ -386,7 +386,7 @@ SVG Image (*.svg) - + Imagem SVG (*.svg) @@ -470,19 +470,19 @@ Spreadsheet template - + Modelo de planilha Presentation template - + Modelo de apresentação Document template - + Modelo de documento @@ -528,12 +528,12 @@ More than one document is open.<br>Close the window anyway? - + Mais de um documento está aberto.<br>Fechar a janela mesmo assim? Don't ask again. - + Não pergunte novamente. @@ -642,7 +642,7 @@ Last check performed - + Última verificação realizada @@ -658,31 +658,31 @@ Check for updates - + Verificando atualizações To finish updating, restart app - + Para terminar a atualização, reinicie o aplicativo Restart - + Reiniciar Checking for updates... - + Verificando atualizações... Updates are not allowed! - + Atualizações não são permitidas! @@ -692,96 +692,96 @@ An error occurred while check updates: Update Service not found! - + Ocorreu um erro ao verificar atualizações: Serviço de atualização não encontrado! Downloading new version %1 (%2%) - + Baixando a nova versão %1 (%2%) An error occurred while loading updates: Update Service not found! - + Ocorreu um erro ao carregar atualizações: Serviço de atualização não encontrado! Downloading new version %1 (0%) - + Baixando a nova versão %1 (0%) Cancel - Cancelar + Cancelar An error occurred while loading updates: package Url is empty! - + Ocorreu um erro ao carregar atualizações: o URL do pacote está vazio! Update package error: md5 sum does not match the original. - + Erro no pacote de atualização: a soma md5 não corresponde ao original. Preparing update... - + Preparando atualização... An error occurred while unzip updates: Update Service not found! - + Ocorreu um erro ao descompactar atualizações: Serviço de atualização não encontrado! Update is available (version %1) - + A atualização está disponível (versão %1) Download update - Baixar atualização + Baixar atualização Current version is up to date - + A versão atual está atualizada Update is available - + A atualização está disponível Current version - + Versão Atual Update version - + Versão atualizada Would you like to download update now? - + Gostaria de baixar a atualização agora? Update is ready to install - + A atualização está pronta para ser instalada Would you like to restart app now? - + Gostaria de reiniciar o aplicativo agora? A new version of %1 is available! @@ -864,7 +864,7 @@ Install later - + Instale depois diff --git a/win-linux/langs/ro.ts b/win-linux/langs/ro.ts index 092139289..fe67a4862 100644 --- a/win-linux/langs/ro.ts +++ b/win-linux/langs/ro.ts @@ -335,27 +335,27 @@ DOCX Document - + Document DOCX OpenDocument Document template - + Document șablon OpenDocument OpenDocument Presentation Template - + Șablon de prezentare OpenDocument Macro-enabled spreadsheet template - + Șablon de foaie de calcul cu macrocomenzi activate OpenDocument Spreadsheet Template - + Șablon de foaie de calcul OpenDocument @@ -385,7 +385,7 @@ SVG Image (*.svg) - + Imaginea SVG (*.svg) @@ -469,19 +469,19 @@ Spreadsheet template - + Șablon de foaie de calcul Presentation template - + Șablon de prezentare Document template - + Document șablon @@ -527,12 +527,12 @@ More than one document is open.<br>Close the window anyway? - + Mai multe documente sunt deschise.<br>Doriți să închideți fereastra oricum? Don't ask again. - + Nu mai întreba din nou. @@ -641,7 +641,7 @@ Last check performed - + Ultima verificare efectuată @@ -657,31 +657,31 @@ Check for updates - + Verificarea a actualizărilor To finish updating, restart app - + Pentru a finaliza actualizarea, reporniți aplicația Restart - + Repornire Checking for updates... - + Verificarea a actualizărilor... Updates are not allowed! - + Actualizări nu sunt permise! @@ -691,96 +691,96 @@ An error occurred while check updates: Update Service not found! - + A intervenit o eroare în timpul verificării a actualizărilor: Serviciu de Actualizare nu s-a găsit! Downloading new version %1 (%2%) - + Descărcarea noii versiuni %1 (%2%) An error occurred while loading updates: Update Service not found! - + A intervenit o eroare în timpul incărcării a actualizărilor: Serviciu de Actualizare nu s-a găsit! Downloading new version %1 (0%) - + Descărcarea noii versiuni %1 (0%) Cancel - Revocare + Revocare An error occurred while loading updates: package Url is empty! - + A intervenit o eroare la încărcarea actualizărilor: Pachetul URL este gol! Update package error: md5 sum does not match the original. - + Eroare de actualizare a pachetului: suma md5 nu se potrivește cu suma modelului. Preparing update... - + Pregătire pentru actualizarea... An error occurred while unzip updates: Update Service not found! - + A intervenit o eroare în timpul dezarhivării a actualizărilor: Serviciu de Actualizare nu s-a găsit! Update is available (version %1) - + O actualizare este disponibilă (versiune %1) Download update - Descărcare actualizare + Descărcare actualizare Current version is up to date - + Versiunea curentă este actualizată Update is available - + Actualizarea este disponibilă Current version - + Versiunea curentă Update version - + Actualizați versiunea Would you like to download update now? - + Doriți să descărcați actualizarea acum? Update is ready to install - + Actualizarea este gata de instalare Would you like to restart app now? - + Doriți să reporniți aplicația acum? A new version of %1 is available! @@ -863,7 +863,7 @@ Install later - + Instalare ulterioară diff --git a/win-linux/langs/ru.ts b/win-linux/langs/ru.ts index c157cb788..fdf4bf2df 100644 --- a/win-linux/langs/ru.ts +++ b/win-linux/langs/ru.ts @@ -335,27 +335,27 @@ DOCX Document - + Документ DOCX OpenDocument Document template - + Шаблон документа OpenDocument OpenDocument Presentation Template - + Шаблон презентации OpenDocument Macro-enabled spreadsheet template - + Шаблон электронной таблицы с поддержкой макросов OpenDocument Spreadsheet Template - + Шаблон электронной таблицы OpenDocument @@ -385,7 +385,7 @@ SVG Image (*.svg) - + Изображение SVG (*.svg) @@ -469,19 +469,19 @@ Spreadsheet template - + Шаблон электронной таблицы Presentation template - + Шаблон презентации Document template - + Шаблон документа @@ -527,12 +527,12 @@ More than one document is open.<br>Close the window anyway? - + Открыто более одного документа.<br>Все равно закрыть окно? Don't ask again. - + Больше не спрашивать. @@ -645,7 +645,7 @@ Last check performed - + Последняя проверка выполнена @@ -661,31 +661,31 @@ Check for updates - + Проверка обновлений To finish updating, restart app - + Для завершения обновления перезапустите приложение Restart - + Перезапустить Checking for updates... - + Проверка обновлений... Updates are not allowed! - + Обновления не разрешены! @@ -695,96 +695,96 @@ An error occurred while check updates: Update Service not found! - + При проверке обновлений произошла ошибка: Сервис обновлений не найден! Downloading new version %1 (%2%) - + Загрузка новой версии %1 (%2%) An error occurred while loading updates: Update Service not found! - + При загрузке обновлений произошла ошибка: Сервис обновлений не найден! Downloading new version %1 (0%) - + Загрузка новой версии %1 (0%) Cancel - Отмена + Отмена An error occurred while loading updates: package Url is empty! - + При загрузке обновлений произошла ошибка: URL-адрес пакета пуст! Update package error: md5 sum does not match the original. - + Ошибка при обновлении пакета: сумма md5 не соответствует оригиналу. Preparing update... - + Подготовка обновления... An error occurred while unzip updates: Update Service not found! - + При разархивировании обновлений произошла ошибка: Сервис обновлений не найден! Update is available (version %1) - + Доступно обновление (версия %1) Download update - Скачать обновление + Скачать обновление Current version is up to date - + Текущая версия является актуальной Update is available - + Обновление доступно Current version - + Текущая версия Update version - + Обновить версию Would you like to download update now? - + Хотите загрузить обновление сейчас? Update is ready to install - + Обновление готово к установке Would you like to restart app now? - + Хотите перезапустить приложение сейчас? A new version of %1 is available! @@ -859,7 +859,7 @@ Install later - + Установить позже diff --git a/win-linux/langs/zh_CN.ts b/win-linux/langs/zh_CN.ts index 5f68c56f8..2ddf5770a 100644 --- a/win-linux/langs/zh_CN.ts +++ b/win-linux/langs/zh_CN.ts @@ -335,27 +335,27 @@ DOCX Document - + DOCX 文档 OpenDocument Document template - + OpenDocument 文本文档模板 OpenDocument Presentation Template - + OpenDocument 演示文稿模板 Macro-enabled spreadsheet template - + 支持宏的电子表格模板 OpenDocument Spreadsheet Template - + OpenDocument 电子表格模板 @@ -385,7 +385,7 @@ SVG Image (*.svg) - + SVG 图像 (*.svg) @@ -469,19 +469,19 @@ Spreadsheet template - + 电子表格模板 Presentation template - + 演示文稿模板 Document template - + 文本文档模板 @@ -527,12 +527,12 @@ More than one document is open.<br>Close the window anyway? - + 您还有其他已打开的文档。<br>无论如何都要关闭? Don't ask again. - + 别再问了。 @@ -641,7 +641,7 @@ Last check performed - + 上次检查 @@ -657,31 +657,31 @@ Check for updates - + 检查更新 To finish updating, restart app - + 要完成更新,请重新启动应用程序 Restart - + 重新启动 Checking for updates... - + 检查更新... Updates are not allowed! - + 不允许更新! @@ -691,96 +691,96 @@ An error occurred while check updates: Update Service not found! - + 检查更新时发生错误: 未找到更新服务! Downloading new version %1 (%2%) - + 下载新版本 %1 (%2%) An error occurred while loading updates: Update Service not found! - + 加载更新时发生错误: 未找到更新服务! Downloading new version %1 (0%) - + 下载新版本 %1 (0%) Cancel - 取消 + 取消 An error occurred while loading updates: package Url is empty! - + 加载更新时发生错误:软件包 Url 为空! Update package error: md5 sum does not match the original. - + 更新软件包错误:md5 不匹配。 Preparing update... - + 准备更新... An error occurred while unzip updates: Update Service not found! - + 解压更新时发生错误: 未找到更新服务! Update is available (version %1) - + 可更新(版本 %1) Download update - 下载更新 + 下载更新 Current version is up to date - + 当前版本已更新 Update is available - + 可更新 Current version - + 当前版本 Update version - + 更新版本 Would you like to download update now? - + 现在要下载更新吗? Update is ready to install - + 更新已准备就绪,可以安装 Would you like to restart app now? - + 现在要重启应用程序吗? A new version of %1 is available! @@ -863,7 +863,7 @@ Install later - + 稍后安装 From 4bd5595407b9e74cc6767f5c3efc979d57efd78a Mon Sep 17 00:00:00 2001 From: Oleg Korshul Date: Mon, 25 Sep 2023 17:33:54 +0300 Subject: [PATCH 247/298] Fix build with new version videoplayer library --- win-linux/src/cascapplicationmanagerwrapper.cpp | 4 ---- 1 file changed, 4 deletions(-) diff --git a/win-linux/src/cascapplicationmanagerwrapper.cpp b/win-linux/src/cascapplicationmanagerwrapper.cpp index a0a96d542..57104dace 100644 --- a/win-linux/src/cascapplicationmanagerwrapper.cpp +++ b/win-linux/src/cascapplicationmanagerwrapper.cpp @@ -78,8 +78,6 @@ CAscApplicationManagerWrapper::CAscApplicationManagerWrapper(CAscApplicationMana }; m_queueToClose->setcallback(callback_); - NSBaseVideoLibrary::Init(nullptr); - m_themes = std::make_shared(); #ifdef _UPDMODULE @@ -89,8 +87,6 @@ CAscApplicationManagerWrapper::CAscApplicationManagerWrapper(CAscApplicationMana CAscApplicationManagerWrapper::~CAscApplicationManagerWrapper() { - NSBaseVideoLibrary::Destroy(); - delete m_queueToClose, m_queueToClose = nullptr; // CSingleWindow * _sw = nullptr; From 0a51b7c0b096c7c5eb3b7292a7f23a5dc7e8d557 Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Mon, 25 Sep 2023 22:42:01 +0300 Subject: [PATCH 248/298] [win-nix] fix type for editors --- .../src/cascapplicationmanagerwrapper.cpp | 4 +- win-linux/src/casctabdata.cpp | 10 ++-- win-linux/src/ceditortools.cpp | 12 ++--- win-linux/src/components/asctabwidget.cpp | 51 ++++++++++--------- win-linux/src/components/asctabwidget.h | 2 +- win-linux/src/components/ctabpanel.cpp | 4 +- win-linux/src/components/ctabpanel.h | 2 +- win-linux/src/windows/ceditorwindow.cpp | 2 +- win-linux/src/windows/ceditorwindow_p.h | 28 +++++----- win-linux/src/windows/cmainwindow.cpp | 2 +- 10 files changed, 59 insertions(+), 58 deletions(-) diff --git a/win-linux/src/cascapplicationmanagerwrapper.cpp b/win-linux/src/cascapplicationmanagerwrapper.cpp index 57104dace..39b640d87 100644 --- a/win-linux/src/cascapplicationmanagerwrapper.cpp +++ b/win-linux/src/cascapplicationmanagerwrapper.cpp @@ -800,7 +800,7 @@ void CAscApplicationManagerWrapper::handleInputCmd(const std::vector& v for (const auto& arg: vargs) { COpenOptions open_opts; open_opts.name = QCoreApplication::translate("CAscTabWidget", "Document"); - open_opts.srctype = etUndefined; + open_opts.srctype = AscEditorType::etUndefined; const size_t p = arg.find(prefix); if ( p == 0 ) { @@ -830,7 +830,7 @@ void CAscApplicationManagerWrapper::handleInputCmd(const std::vector& v open_opts.wurl = arg; } - if (open_opts.srctype == etUndefined) { + if (open_opts.srctype == AscEditorType::etUndefined) { if ( _app.m_pMainWindow && _app.m_private->bringEditorToFront(QString::fromStdWString(open_opts.wurl)) ) { continue; } else diff --git a/win-linux/src/casctabdata.cpp b/win-linux/src/casctabdata.cpp index 42db1f8e5..b524da9a9 100644 --- a/win-linux/src/casctabdata.cpp +++ b/win-linux/src/casctabdata.cpp @@ -39,7 +39,7 @@ CAscTabData::CAscTabData(const QString& t, CefType wt) , _is_local(false) , _vtype(wt) , _url() - , _typeContent(etUndefined) + , _typeContent(AscEditorType::etUndefined) {} CAscTabData::CAscTabData(const QString& t, AscEditorType ct) @@ -48,10 +48,10 @@ CAscTabData::CAscTabData(const QString& t, AscEditorType ct) , _typeContent(ct) { switch (ct) { - case etDocument: - case etSpreadsheet: - case etPresentation: - case etDocumentViewer: + case AscEditorType::etDocument: + case AscEditorType::etSpreadsheet: + case AscEditorType::etPresentation: + case AscEditorType::etPdf: _vtype = cvwtEditor; break; default: diff --git a/win-linux/src/ceditortools.cpp b/win-linux/src/ceditortools.cpp index 715eca490..cd5c06618 100644 --- a/win-linux/src/ceditortools.cpp +++ b/win-linux/src/ceditortools.cpp @@ -312,24 +312,24 @@ namespace CEditorTools auto editorTypeFromFormat(int format) -> AscEditorType { if ( format == AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCXF ) { - return etDocumentMasterForm; + return AscEditorType::etDocumentMasterForm; } else if ( (format > AVS_OFFICESTUDIO_FILE_DOCUMENT && format < AVS_OFFICESTUDIO_FILE_PRESENTATION) || format == AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_PDF || format == AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_PDFA || format == AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_DJVU ) - return etDocument; + return AscEditorType::etDocument; else if ( format > AVS_OFFICESTUDIO_FILE_PRESENTATION && format < AVS_OFFICESTUDIO_FILE_SPREADSHEET ) - return etPresentation; + return AscEditorType::etPresentation; else if (format > AVS_OFFICESTUDIO_FILE_SPREADSHEET && format < AVS_OFFICESTUDIO_FILE_CROSSPLATFORM ) { - return etSpreadsheet; + return AscEditorType::etSpreadsheet; } else if (format > AVS_OFFICESTUDIO_FILE_CROSSPLATFORM && format < AVS_OFFICESTUDIO_FILE_IMAGE ) - return etDocumentViewer; + return AscEditorType::etPdf; - return etUndefined; + return AscEditorType::etUndefined; } auto processLocalFileSaveAs(const CAscCefMenuEvent * event) -> void { diff --git a/win-linux/src/components/asctabwidget.cpp b/win-linux/src/components/asctabwidget.cpp index c92ac613a..ca9a21346 100644 --- a/win-linux/src/components/asctabwidget.cpp +++ b/win-linux/src/components/asctabwidget.cpp @@ -67,11 +67,11 @@ template class VPtr */ COpenOptions::COpenOptions() : - srctype(etUndefined), id(-1) + srctype(AscEditorType::etUndefined), id(-1) {} COpenOptions::COpenOptions(wstring _url_) : - COpenOptions(_url_, etUndefined, -1) + COpenOptions(_url_, AscEditorType::etUndefined, -1) {} COpenOptions::COpenOptions(wstring _url_, AscEditorType _srctype_) : @@ -440,20 +440,20 @@ int CAscTabWidget::insertPanel(QWidget * panel, int index) const CTheme & ui_theme = AscAppManager::themes().current(); const AscEditorType tab_type = tabdata->contentType(); switch ( tab_type ) { - case etPresentation: + case AscEditorType::etPresentation: tabcolor = QString::fromStdWString(ui_theme.value(CTheme::ColorRole::ecrTabSlideActive)); m_pBar->setTabThemeType(tabindex, CTabBar::DarkTab); break; - case etSpreadsheet: + case AscEditorType::etSpreadsheet: tabcolor = QString::fromStdWString(ui_theme.value(CTheme::ColorRole::ecrTabCellActive)); m_pBar->setTabThemeType(tabindex, CTabBar::DarkTab); break; - case etDocumentMasterForm: - case etDocument: + case AscEditorType::etDocumentMasterForm: + case AscEditorType::etDocument: tabcolor = QString::fromStdWString(ui_theme.value(CTheme::ColorRole::ecrTabWordActive)); m_pBar->setTabThemeType(tabindex, CTabBar::DarkTab); break; - case etDocumentViewer: + case AscEditorType::etPdf: tabcolor = QString::fromStdWString(ui_theme.value(CTheme::ColorRole::ecrTabViewerActive)); m_pBar->setTabThemeType(tabindex, CTabBar::DarkTab); break; @@ -498,12 +498,12 @@ void CAscTabWidget::reloadTabIcons() ":/tabbar/icons/portal.svg", ":/tabbar/icons/pdf.svg"}; int portal_icon = GetCurrentTheme().isDark() ? 5 : 6; m_mapTabIcons.insert({ - {etUndefined, std::make_pair(icons[0], icons[0])}, - {etDocument, std::make_pair(icons[1], icons[1])}, - {etPresentation, std::make_pair(icons[2], icons[2])}, - {etDocumentMasterForm, std::make_pair(icons[3], icons[3])}, - {etSpreadsheet, std::make_pair(icons[4], icons[4])}, - {etDocumentViewer, std::make_pair(icons[7], icons[7])}, + {AscEditorType::etUndefined, std::make_pair(icons[0], icons[0])}, + {AscEditorType::etDocument, std::make_pair(icons[1], icons[1])}, + {AscEditorType::etPresentation, std::make_pair(icons[2], icons[2])}, + {AscEditorType::etDocumentMasterForm, std::make_pair(icons[3], icons[3])}, + {AscEditorType::etSpreadsheet, std::make_pair(icons[4], icons[4])}, + {AscEditorType::etPdf, std::make_pair(icons[7], icons[7])}, {etPortal, std::make_pair(icons[portal_icon], icons[6])}, {etNewPortal, std::make_pair(icons[portal_icon], icons[6])} }); @@ -620,7 +620,7 @@ int CAscTabWidget::openCloudDocument(COpenOptions& opts, bool select, bool force m_pBar->setCurrentIndex(tabIndex); } else { opts.name = tr("Document"); -// opts.type = etUndefined; +// opts.type = AscEditorType::etUndefined; tabIndex = addEditor(opts); if (select && !(tabIndex < 0)) @@ -790,26 +790,26 @@ void CAscTabWidget::applyDocumentChanging(int id, int type) panel(tabIndex)->data()->setContentType(AscEditorType(type)); const CTheme & ui_theme = AscAppManager::themes().current(); - switch (type) { - case etDocument: + switch (AscEditorType(type)) { + case AscEditorType::etDocument: panel(tabIndex)->applyLoader("loader:style", "word"); m_pBar->setTabThemeType(tabIndex, CTabBar::DarkTab); m_pBar->setActiveTabColor(tabIndex, QString::fromStdWString(ui_theme.value(CTheme::ColorRole::ecrTabWordActive))); break; - case etSpreadsheet: + case AscEditorType::etSpreadsheet: panel(tabIndex)->applyLoader("loader:style", "cell"); m_pBar->setTabThemeType(tabIndex, CTabBar::DarkTab); m_pBar->setActiveTabColor(tabIndex, QString::fromStdWString(ui_theme.value(CTheme::ColorRole::ecrTabCellActive))); break; - case etPresentation: + case AscEditorType::etPresentation: panel(tabIndex)->applyLoader("loader:style", "slide"); m_pBar->setTabThemeType(tabIndex, CTabBar::DarkTab); m_pBar->setActiveTabColor(tabIndex, QString::fromStdWString(ui_theme.value(CTheme::ColorRole::ecrTabSlideActive))); break; - case etDocumentViewer: + case AscEditorType::etPdf: panel(tabIndex)->applyLoader("loader:style", "pdf"); m_pBar->setTabThemeType(tabIndex, CTabBar::DarkTab); m_pBar->setActiveTabColor(tabIndex, @@ -818,7 +818,8 @@ void CAscTabWidget::applyDocumentChanging(int id, int type) default: break; } - const char *icon_name = tabIndex == m_pBar->currentIndex() ? m_mapTabIcons.at(type).second : m_mapTabIcons.at(type).first; + const char *icon_name = tabIndex == m_pBar->currentIndex() ? + m_mapTabIcons.at(AscEditorType(type)).second : m_mapTabIcons.at(AscEditorType(type)).first; m_pBar->setTabIcon(tabIndex, QIcon(icon_name)); } } @@ -1186,17 +1187,17 @@ void CAscTabWidget::applyUITheme(const std::wstring& theme) panel(i)->setBackground(back_color); switch ( panel(i)->data()->contentType() ) { - case etPresentation: + case AscEditorType::etPresentation: m_pBar->setActiveTabColor(i, tab_color.at(2)); break; - case etSpreadsheet: + case AscEditorType::etSpreadsheet: m_pBar->setActiveTabColor(i, tab_color.at(1)); break; - case etDocumentMasterForm: - case etDocument: + case AscEditorType::etDocumentMasterForm: + case AscEditorType::etDocument: m_pBar->setActiveTabColor(i, tab_color.at(0)); break; - case etDocumentViewer: + case AscEditorType::etPdf: m_pBar->setActiveTabColor(i, QString::fromStdWString(ui_theme.value(CTheme::ColorRole::ecrTabViewerActive))); break; default: break; diff --git a/win-linux/src/components/asctabwidget.h b/win-linux/src/components/asctabwidget.h index 9a3d30a0f..bdaa57da1 100644 --- a/win-linux/src/components/asctabwidget.h +++ b/win-linux/src/components/asctabwidget.h @@ -111,7 +111,7 @@ class CAscTabWidget : public QStackedWidget, public CScalingWrapper } }; - typedef std::map< int, std::pair > CTabIconSet; + typedef std::map< AscEditorType, std::pair > CTabIconSet; private: std::map m_mapDownloads; diff --git a/win-linux/src/components/ctabpanel.cpp b/win-linux/src/components/ctabpanel.cpp index 405317000..2b7493863 100644 --- a/win-linux/src/components/ctabpanel.cpp +++ b/win-linux/src/components/ctabpanel.cpp @@ -119,14 +119,14 @@ bool CTabPanel::openLocalFile(const std::wstring& path, const std::wstring& para return true; } -void CTabPanel::createLocalFile(int format, const std::wstring& name) +void CTabPanel::createLocalFile(AscEditorType format, const std::wstring& name) { static_cast(m_pViewer->GetCefView())->CreateLocalFile(format, name); } void CTabPanel::createLocalFile(const std::wstring& templatepath, const std::wstring& name) { - static_cast(m_pViewer->GetCefView())->CreateLocalFile(0, name, templatepath); + static_cast(m_pViewer->GetCefView())->CreateLocalFile(AscEditorType::etUndefined, name, templatepath); } bool CTabPanel::openRecoverFile(int id) diff --git a/win-linux/src/components/ctabpanel.h b/win-linux/src/components/ctabpanel.h index eaae80cec..9daaf7b21 100644 --- a/win-linux/src/components/ctabpanel.h +++ b/win-linux/src/components/ctabpanel.h @@ -29,7 +29,7 @@ class CTabPanel : public QWidget void openLocalFile(const std::wstring& sFilePath, int nFileFormat, const std::wstring& params); bool openLocalFile(const std::wstring& sFilePath, const std::wstring& params); - void createLocalFile(int nFileFormat, const std::wstring& sName = L""); + void createLocalFile(AscEditorType nFileFormat, const std::wstring& sName = L""); void createLocalFile(const std::wstring& templatepath, const std::wstring& name); bool openRecoverFile(int id); bool openRecentFile(int id); diff --git a/win-linux/src/windows/ceditorwindow.cpp b/win-linux/src/windows/ceditorwindow.cpp index bccf3c919..c57733101 100644 --- a/win-linux/src/windows/ceditorwindow.cpp +++ b/win-linux/src/windows/ceditorwindow.cpp @@ -223,7 +223,7 @@ QWidget * CEditorWindow::createMainPanel(QWidget * parent, const QString& title) mainGridLayout->addWidget(m_boxTitleBtns, 0, 0); m_labelTitle->setText(APP_TITLE); } else { - if (d_ptr->panel()->data()->contentType() != etUndefined) + if (d_ptr->panel()->data()->contentType() != AscEditorType::etUndefined) mainPanel->setProperty("window", "pretty"); int pos = (d_ptr->usedOldEditorVersion) ? 3 : 2; // For old editors only auto *pIconSpacer = new QSpacerItem(ICON_SPACER_WIDTH, 5, QSizePolicy::Fixed, QSizePolicy::Fixed); diff --git a/win-linux/src/windows/ceditorwindow_p.h b/win-linux/src/windows/ceditorwindow_p.h index 26f3e0577..83c3778fc 100644 --- a/win-linux/src/windows/ceditorwindow_p.h +++ b/win-linux/src/windows/ceditorwindow_p.h @@ -69,25 +69,25 @@ using namespace NSEditorApi; -auto prepare_editor_css(int type, const CTheme& theme) -> QString { +auto prepare_editor_css(AscEditorType type, const CTheme& theme) -> QString { std::wstring c; switch (type) { default: c = theme.value(CTheme::ColorRole::ecrTabWordActive); break; - case etDocument: c = theme.value(CTheme::ColorRole::ecrTabWordActive); break; - case etPresentation: c = theme.value(CTheme::ColorRole::ecrTabSlideActive); break; - case etSpreadsheet: c = theme.value(CTheme::ColorRole::ecrTabCellActive); break; - case etDocumentViewer: c = theme.value(CTheme::ColorRole::ecrTabViewerActive); break; + case AscEditorType::etDocument: c = theme.value(CTheme::ColorRole::ecrTabWordActive); break; + case AscEditorType::etPresentation: c = theme.value(CTheme::ColorRole::ecrTabSlideActive); break; + case AscEditorType::etSpreadsheet: c = theme.value(CTheme::ColorRole::ecrTabCellActive); break; + case AscEditorType::etPdf: c = theme.value(CTheme::ColorRole::ecrTabViewerActive); break; } QString g_css(Utils::readStylesheets(":/styles/editor.qss")); return g_css.arg(QString::fromStdWString(c)); } -auto editor_color(int type) -> QColor { +auto editor_color(AscEditorType type) -> QColor { switch (type) { - case etDocument: return GetColorByRole(ecrTabWordActive); - case etPresentation: return GetColorByRole(ecrTabSlideActive); - case etSpreadsheet: return GetColorByRole(ecrTabCellActive); - case etDocumentViewer: return GetColorByRole(ecrTabViewerActive); + case AscEditorType::etDocument: return GetColorByRole(ecrTabWordActive); + case AscEditorType::etPresentation: return GetColorByRole(ecrTabSlideActive); + case AscEditorType::etSpreadsheet: return GetColorByRole(ecrTabCellActive); + case AscEditorType::etPdf: return GetColorByRole(ecrTabViewerActive); default: return GetColorByRole(ecrTabWordActive); } } @@ -350,19 +350,19 @@ class CEditorWindowPrivate : public CCefEventsGate { std::wstring background, border; switch (panel()->data()->contentType()) { - case etDocument: + case AscEditorType::etDocument: background = GetColorValueByRole(ecrTabWordActive); border = background; break; - case etPresentation: + case AscEditorType::etPresentation: background = GetColorValueByRole(ecrTabSlideActive); border = background; break; - case etSpreadsheet: + case AscEditorType::etSpreadsheet: background = GetColorValueByRole(ecrTabCellActive); border = background; break; - case etDocumentViewer: + case AscEditorType::etPdf: background = GetColorValueByRole(ecrTabViewerActive); border = background; break; diff --git a/win-linux/src/windows/cmainwindow.cpp b/win-linux/src/windows/cmainwindow.cpp index 295a07108..7a9c726fe 100644 --- a/win-linux/src/windows/cmainwindow.cpp +++ b/win-linux/src/windows/cmainwindow.cpp @@ -1311,7 +1311,7 @@ void CMainWindow::onPortalNew(QString in) if (!(_tab_index < 0)) { int _uid = m_pTabs->viewByIndex(_tab_index); m_pTabs->applyDocumentChanging(_uid, _name, _domain); - m_pTabs->applyDocumentChanging(_uid, etPortal); + m_pTabs->applyDocumentChanging(_uid, int(etPortal)); onTabChanged(m_pTabs->currentIndex()); } } From 5a2695bd8608b58426aebfd6939c6cd548b2b13d Mon Sep 17 00:00:00 2001 From: "Oleg.Korshul" Date: Tue, 26 Sep 2023 10:35:06 +0300 Subject: [PATCH 249/298] Fix build --- macos/ONLYOFFICE/Code/Views/NSCefView.mm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/macos/ONLYOFFICE/Code/Views/NSCefView.mm b/macos/ONLYOFFICE/Code/Views/NSCefView.mm index bab06128f..8acbc3924 100644 --- a/macos/ONLYOFFICE/Code/Views/NSCefView.mm +++ b/macos/ONLYOFFICE/Code/Views/NSCefView.mm @@ -153,7 +153,7 @@ - (void)createFileWithName:(NSString *)name type:(NSInteger)type { CCefViewEditor * editorView = dynamic_cast(m_pCefView->GetCefView()); if (editorView) { - editorView->CreateLocalFile((int)type, [name stdwstring]); + editorView->CreateLocalFile((AscEditorType)type, [name stdwstring]); } } } @@ -163,7 +163,7 @@ - (void)createFileWithNameFromTemplate:(NSString *)name tplpath:(NSString *)path CCefViewEditor * editorView = dynamic_cast(m_pCefView->GetCefView()); if (editorView) { - editorView->CreateLocalFile(0, [name stdwstring], [path stdwstring]); + editorView->CreateLocalFile(AscEditorType::etDocument, [name stdwstring], [path stdwstring]); } } } From a29970ef6b8f0ba6e558b74d8f19943bf9bea225 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Tue, 26 Sep 2023 14:39:38 +0300 Subject: [PATCH 250/298] [win-linux] replace processEvents() --- win-linux/src/ceditortools.cpp | 2 +- win-linux/src/components/cprintprogress.cpp | 3 +- win-linux/src/components/ctabbar.cpp | 33 +++++++++++---------- win-linux/src/utils.h | 1 + win-linux/src/windows/cmainwindow.cpp | 6 ++-- 5 files changed, 24 insertions(+), 21 deletions(-) diff --git a/win-linux/src/ceditortools.cpp b/win-linux/src/ceditortools.cpp index cd5c06618..9b09c0b5e 100644 --- a/win-linux/src/ceditortools.cpp +++ b/win-linux/src/ceditortools.cpp @@ -70,7 +70,7 @@ namespace CEditorTools c.context->AddRef(); _progress.setProgress(curr, count); - qApp->processEvents(); + PROCESSEVENTS(); pData = new CAscPrintPage(); pData->put_Context(c.context); diff --git a/win-linux/src/components/cprintprogress.cpp b/win-linux/src/components/cprintprogress.cpp index 030612538..96b3dcc1f 100644 --- a/win-linux/src/components/cprintprogress.cpp +++ b/win-linux/src/components/cprintprogress.cpp @@ -42,6 +42,7 @@ //#define WINVER 0x0500 # include #else +# include "cascapplicationmanagerwrapper.h" # include "windows/platform_linux/cx11decoration.h" #endif // Q_WS_WIN32 @@ -159,7 +160,7 @@ void CPrintProgress::startProgress() #ifdef __linux while ( !m_showed ) { - qApp->processEvents(); + PROCESSEVENTS(); } #endif } diff --git a/win-linux/src/components/ctabbar.cpp b/win-linux/src/components/ctabbar.cpp index 7bf90e756..ca5ac07be 100644 --- a/win-linux/src/components/ctabbar.cpp +++ b/win-linux/src/components/ctabbar.cpp @@ -53,6 +53,7 @@ #define _tabRect(i) tabList[i]->geometry() #define tabIndex(i) tabList[i]->index #define signum(a) (a ? 1 : -1); +#define PROCESSEVENTS() AscAppManager::getInstance().processEvents() class Tab : public QFrame @@ -448,7 +449,7 @@ void CTabBar::CTabBarPrivate::slide(int from, int to, int offset, int animation_ void CTabBar::CTabBarPrivate::scrollToDirection(int direction) { while (animationInProgress) - qApp->processEvents(); + PROCESSEVENTS(); if (tabList.isEmpty()) return; @@ -467,7 +468,7 @@ void CTabBar::CTabBarPrivate::scrollToDirection(int direction) void CTabBar::CTabBarPrivate::scrollTo(int index) { while (animationInProgress) - qApp->processEvents(); + PROCESSEVENTS(); if (!indexIsValid(index)) return; @@ -484,7 +485,7 @@ void CTabBar::CTabBarPrivate::scrollTo(int index) void CTabBar::CTabBarPrivate::onCurrentChanged(int index) { while (animationInProgress) - qApp->processEvents(); + PROCESSEVENTS(); recalcWidth(); @@ -507,7 +508,7 @@ void CTabBar::CTabBarPrivate::onTabWidthChanged(int width) { Q_UNUSED(width) while (animationInProgress) - qApp->processEvents(); + PROCESSEVENTS(); if (!tabList.isEmpty()) iconSize = tabList[0]->icon_label->size(); @@ -563,7 +564,7 @@ void CTabBar::CTabBarPrivate::recalcWidth() tabArea->setMinimumWidth(minWidth); tabArea->setMaximumWidth(minWidth * tabList.size()); owner->setMaximumWidth(tabArea->maximumWidth() + scrollFrame->maximumWidth()); - qApp->processEvents(); + PROCESSEVENTS(); } bool CTabBar::CTabBarPrivate::indexIsValid(int index) @@ -630,7 +631,7 @@ CTabBar::~CTabBar() int CTabBar::addTab(const QString &text) { while (d->animationInProgress) - qApp->processEvents(); + PROCESSEVENTS(); const int lastIndex = d->tabList.size() - 1; const int posX = (lastIndex == -1) ? 0 : d->nextTabPosByPrev(lastIndex); @@ -688,18 +689,18 @@ QSize CTabBar::iconSize() const int CTabBar::insertTab(int index, const QString &text) { while (d->animationInProgress) - qApp->processEvents(); + PROCESSEVENTS(); if (!d->indexIsValid(index)) return addTab(text); while (d->animationInProgress) - qApp->processEvents(); + PROCESSEVENTS(); int posX = d->_tabRect(index).left(); d->slide(index, d->tabList.size() - 1, d->cellWidth(), ANIMATION_DEFAULT_MS); while (d->animationInProgress) - qApp->processEvents(); + PROCESSEVENTS(); Tab *tab = new Tab(d->tabArea); tab->move(posX, 0); @@ -737,7 +738,7 @@ int CTabBar::insertTab(int index, const QIcon &icon, const QString &text) void CTabBar::removeTab(int index) { while (d->animationInProgress) - qApp->processEvents(); + PROCESSEVENTS(); if (!d->indexIsValid(index)) return; @@ -748,14 +749,14 @@ void CTabBar::removeTab(int index) if (prevIndex > -1) { d->slide(0, prevIndex, d->cellWidth(), ANIMATION_DEFAULT_MS); while (d->animationInProgress) - qApp->processEvents(); + PROCESSEVENTS(); } } else { const int nextIndex = index + 1; if (nextIndex < d->tabList.size()) { d->slide(nextIndex, d->tabList.size() - 1, -1 * d->cellWidth(), ANIMATION_DEFAULT_MS); while (d->animationInProgress) - qApp->processEvents(); + PROCESSEVENTS(); } } @@ -878,7 +879,7 @@ void CTabBar::setTabToolTip(int index, const QString &text) void CTabBar::setCurrentIndex(int index) { while (d->animationInProgress) - qApp->processEvents(); + PROCESSEVENTS(); if (/*!d->indexIsValid(index) ||*/ index == d->currentIndex) return; @@ -1099,7 +1100,7 @@ bool CTabBar::eventFilter(QObject *watched, QEvent *event) QTimer::singleShot(0, this, [=]() { removeTab(d->currentIndex); while (d->animationInProgress) - qApp->processEvents(); + PROCESSEVENTS(); d->changeScrollerState(); }); } @@ -1133,7 +1134,7 @@ bool CTabBar::eventFilter(QObject *watched, QEvent *event) else d->scrollTo(i); while (d->animationInProgress) - qApp->processEvents(); + PROCESSEVENTS(); QCursor::setPos(oldCurPos); d->lock = false; return true; @@ -1147,7 +1148,7 @@ bool CTabBar::eventFilter(QObject *watched, QEvent *event) QMouseEvent* mouse_event = dynamic_cast(event); if (mouse_event->button() == Qt::LeftButton) { while (d->animationInProgress) - qApp->processEvents(); + PROCESSEVENTS(); if (d->movedTab) { if (d->currentIndex != d->movedTabIndex) { d->reorderIndexes(); diff --git a/win-linux/src/utils.h b/win-linux/src/utils.h index a90e95f36..b94545869 100644 --- a/win-linux/src/utils.h +++ b/win-linux/src/utils.h @@ -41,6 +41,7 @@ #endif #include "components/cfullscrwidget.h" +#define PROCESSEVENTS() AscAppManager::getInstance().processEvents() namespace InputArgs { auto init(int argc, char** const argv) -> void; diff --git a/win-linux/src/windows/cmainwindow.cpp b/win-linux/src/windows/cmainwindow.cpp index 7a9c726fe..d1c9790d4 100644 --- a/win-linux/src/windows/cmainwindow.cpp +++ b/win-linux/src/windows/cmainwindow.cpp @@ -287,7 +287,7 @@ void CMainWindow::close() } } - qApp->processEvents(); + PROCESSEVENTS(); } } } @@ -1138,7 +1138,7 @@ void CMainWindow::onDocumentPrint(void * opts) if ( AscAppManager::printData().isQuickPrint() ) { dialog->accept(); } else modal_res = dialog->exec(); - qApp->processEvents(); + PROCESSEVENTS(); if ( modal_res == QDialog::Accepted ) { if ( !AscAppManager::printData().isQuickPrint() ) @@ -1209,7 +1209,7 @@ void CMainWindow::onFullScreen(int id, bool apply) if (isHidden()) { m_pTabs->setFullScreen(apply); toggleButtonMain(false); - QCoreApplication::processEvents(); + PROCESSEVENTS(); focus(); } } From 93907d3898034c8cf42b2073f2f24c6122bd2fb5 Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Wed, 27 Sep 2023 01:46:30 +0300 Subject: [PATCH 251/298] [macos] support for pdf editor --- macos/ONLYOFFICE.xcodeproj/project.pbxproj | 18 ++++---- .../Common/ASCCommonViewController.mm | 33 +++++++------- .../Controllers/Common/ASCEventsController.mm | 23 +++++----- .../Controllers/Common/ASCThemesController.h | 1 + .../Controllers/Common/ASCThemesController.m | 2 + ...rController.m => ASCTitleBarController.mm} | 41 ++++++++++++++---- .../Code/Controls/ASCTabs/ASCTabView.m | 10 +++++ macos/ONLYOFFICE/Code/Enums/ASCDocumentType.h | 20 --------- macos/ONLYOFFICE/Code/Enums/ASCTabViewType.h | 1 + .../Code/Extensions/NSColor+Extensions.h | 1 + .../Code/Extensions/NSColor+Extensions.m | 7 +++ macos/ONLYOFFICE/Code/Utils/ASCConstants.h | 7 --- macos/ONLYOFFICE/Code/Views/NSCefView.h | 2 +- macos/ONLYOFFICE/Code/Views/NSCefView.mm | 4 +- .../Colors/Editors/Contents.json | 6 +-- .../brand-PdfEditor.colorset/Contents.json | 20 +++++++++ .../Contents.json | 22 ++++++++++ .../pdf_desktop.png | Bin 0 -> 279 bytes .../pdf_desktop_2x.png | Bin 0 -> 361 bytes .../Contents.json | 22 ++++++++++ .../pdf_desktop.png | Bin 0 -> 279 bytes .../pdf_desktop_2x.png | Bin 0 -> 361 bytes 22 files changed, 160 insertions(+), 80 deletions(-) rename macos/ONLYOFFICE/Code/Controllers/MainWindow/{ASCTitleBarController.m => ASCTitleBarController.mm} (93%) delete mode 100644 macos/ONLYOFFICE/Code/Enums/ASCDocumentType.h create mode 100644 macos/ONLYOFFICE/Images.xcassets/Colors/Editors/brand-PdfEditor.colorset/Contents.json create mode 100644 macos/ONLYOFFICE/Images.xcassets/Tabs/icon_tabs_pdf_active.imageset/Contents.json create mode 100644 macos/ONLYOFFICE/Images.xcassets/Tabs/icon_tabs_pdf_active.imageset/pdf_desktop.png create mode 100644 macos/ONLYOFFICE/Images.xcassets/Tabs/icon_tabs_pdf_active.imageset/pdf_desktop_2x.png create mode 100644 macos/ONLYOFFICE/Images.xcassets/Tabs/icon_tabs_pdf_inactive.imageset/Contents.json create mode 100644 macos/ONLYOFFICE/Images.xcassets/Tabs/icon_tabs_pdf_inactive.imageset/pdf_desktop.png create mode 100644 macos/ONLYOFFICE/Images.xcassets/Tabs/icon_tabs_pdf_inactive.imageset/pdf_desktop_2x.png diff --git a/macos/ONLYOFFICE.xcodeproj/project.pbxproj b/macos/ONLYOFFICE.xcodeproj/project.pbxproj index f93cab4cf..e329e2f11 100644 --- a/macos/ONLYOFFICE.xcodeproj/project.pbxproj +++ b/macos/ONLYOFFICE.xcodeproj/project.pbxproj @@ -79,7 +79,7 @@ FC0BD6A1258B63F700C47F95 /* ASCPopoverLightView.m in Sources */ = {isa = PBXBuildFile; fileRef = FC1127581BBAAC8000AA3648 /* ASCPopoverLightView.m */; }; FC0BD6A2258B63F700C47F95 /* NSCefView.mm in Sources */ = {isa = PBXBuildFile; fileRef = FC98BAD51BAC43B400747944 /* NSCefView.mm */; }; FC0BD6A3258B63F700C47F95 /* ASCTabsControl.m in Sources */ = {isa = PBXBuildFile; fileRef = FCC77C8C206CEE85001B7837 /* ASCTabsControl.m */; }; - FC0BD6A4258B63F700C47F95 /* ASCTitleBarController.m in Sources */ = {isa = PBXBuildFile; fileRef = FCA9A1921BA6DE2700ABF3AB /* ASCTitleBarController.m */; }; + FC0BD6A4258B63F700C47F95 /* ASCTitleBarController.mm in Sources */ = {isa = PBXBuildFile; fileRef = FCA9A1921BA6DE2700ABF3AB /* ASCTitleBarController.mm */; }; FC0BD6A5258B63F700C47F95 /* SFBPopover.m in Sources */ = {isa = PBXBuildFile; fileRef = FC3BFDFB1BBE83AB0040C904 /* SFBPopover.m */; }; FC0BD6A6258B63F700C47F95 /* ASCEventsController.mm in Sources */ = {isa = PBXBuildFile; fileRef = FC3B77841BB2A94300DB9705 /* ASCEventsController.mm */; }; FC0BD6A7258B63F700C47F95 /* ASCAboutController.m in Sources */ = {isa = PBXBuildFile; fileRef = FC659BF81C75EE8B00C99776 /* ASCAboutController.m */; }; @@ -221,7 +221,7 @@ FCA3F3102570EC9500DCAB12 /* file-epub.icns in Resources */ = {isa = PBXBuildFile; fileRef = FCA3F3062570EC9500DCAB12 /* file-epub.icns */; }; FCA4502E1C2063460007134D /* ASCSharedSettings.m in Sources */ = {isa = PBXBuildFile; fileRef = FCA4502D1C2063460007134D /* ASCSharedSettings.m */; }; FCA9A1901BA6DC6000ABF3AB /* ASCCommonViewController.mm in Sources */ = {isa = PBXBuildFile; fileRef = FCA9A18F1BA6DC6000ABF3AB /* ASCCommonViewController.mm */; }; - FCA9A1951BA6DE2700ABF3AB /* ASCTitleBarController.m in Sources */ = {isa = PBXBuildFile; fileRef = FCA9A1921BA6DE2700ABF3AB /* ASCTitleBarController.m */; }; + FCA9A1951BA6DE2700ABF3AB /* ASCTitleBarController.mm in Sources */ = {isa = PBXBuildFile; fileRef = FCA9A1921BA6DE2700ABF3AB /* ASCTitleBarController.mm */; }; FCA9A1961BA6DE2700ABF3AB /* ASCTitleWindowController.mm in Sources */ = {isa = PBXBuildFile; fileRef = FCA9A1941BA6DE2700ABF3AB /* ASCTitleWindowController.mm */; }; FCAA9A3E1BBA802100F3C47F /* ASCDownloadCellView.m in Sources */ = {isa = PBXBuildFile; fileRef = FCAA9A3D1BBA802100F3C47F /* ASCDownloadCellView.m */; }; FCAA9A441BBA817B00F3C47F /* ASCDownloadViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FCAA9A431BBA817B00F3C47F /* ASCDownloadViewController.m */; }; @@ -260,7 +260,7 @@ FCB4C6DA26DD018B0012C20D /* ASCPopoverLightView.m in Sources */ = {isa = PBXBuildFile; fileRef = FC1127581BBAAC8000AA3648 /* ASCPopoverLightView.m */; }; FCB4C6DB26DD018B0012C20D /* NSCefView.mm in Sources */ = {isa = PBXBuildFile; fileRef = FC98BAD51BAC43B400747944 /* NSCefView.mm */; }; FCB4C6DC26DD018B0012C20D /* ASCTabsControl.m in Sources */ = {isa = PBXBuildFile; fileRef = FCC77C8C206CEE85001B7837 /* ASCTabsControl.m */; }; - FCB4C6DD26DD018B0012C20D /* ASCTitleBarController.m in Sources */ = {isa = PBXBuildFile; fileRef = FCA9A1921BA6DE2700ABF3AB /* ASCTitleBarController.m */; }; + FCB4C6DD26DD018B0012C20D /* ASCTitleBarController.mm in Sources */ = {isa = PBXBuildFile; fileRef = FCA9A1921BA6DE2700ABF3AB /* ASCTitleBarController.mm */; }; FCB4C6DE26DD018B0012C20D /* SFBPopover.m in Sources */ = {isa = PBXBuildFile; fileRef = FC3BFDFB1BBE83AB0040C904 /* SFBPopover.m */; }; FCB4C6DF26DD018B0012C20D /* ASCEventsController.mm in Sources */ = {isa = PBXBuildFile; fileRef = FC3B77841BB2A94300DB9705 /* ASCEventsController.mm */; }; FCB4C6E026DD018B0012C20D /* ASCAboutController.m in Sources */ = {isa = PBXBuildFile; fileRef = FC659BF81C75EE8B00C99776 /* ASCAboutController.m */; }; @@ -786,7 +786,6 @@ BE95F0A623E9FF590045E0CB /* mac_cefview.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = mac_cefview.h; sourceTree = ""; }; FC033D251BB13B9900F6C55F /* mac_application.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mac_application.h; sourceTree = ""; }; FC035A5B24855E8C00AF820F /* ASCTabViewType.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ASCTabViewType.h; sourceTree = ""; }; - FC035A5C2485625400AF820F /* ASCDocumentType.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ASCDocumentType.h; sourceTree = ""; }; FC09073D1C1855A400D9E881 /* editors */ = {isa = PBXFileReference; lastKnownFileType = folder; name = editors; path = Vendor/ONLYOFFICE/editors; sourceTree = SOURCE_ROOT; }; FC0907401C186A7A00D9E881 /* converter */ = {isa = PBXFileReference; lastKnownFileType = folder; name = converter; path = Vendor/ONLYOFFICE/converter; sourceTree = SOURCE_ROOT; }; FC0BD6FB258B63F700C47F95 /* ONLYOFFICE.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ONLYOFFICE.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -937,7 +936,7 @@ FCA9A18E1BA6DC6000ABF3AB /* ASCCommonViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ASCCommonViewController.h; sourceTree = ""; }; FCA9A18F1BA6DC6000ABF3AB /* ASCCommonViewController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ASCCommonViewController.mm; sourceTree = ""; }; FCA9A1911BA6DE2700ABF3AB /* ASCTitleBarController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ASCTitleBarController.h; sourceTree = ""; }; - FCA9A1921BA6DE2700ABF3AB /* ASCTitleBarController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ASCTitleBarController.m; sourceTree = ""; }; + FCA9A1921BA6DE2700ABF3AB /* ASCTitleBarController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ASCTitleBarController.mm; sourceTree = ""; }; FCA9A1931BA6DE2700ABF3AB /* ASCTitleWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ASCTitleWindowController.h; sourceTree = ""; }; FCA9A1941BA6DE2700ABF3AB /* ASCTitleWindowController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ASCTitleWindowController.mm; sourceTree = ""; }; FCAA9A3C1BBA802100F3C47F /* ASCDownloadCellView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ASCDownloadCellView.h; sourceTree = ""; }; @@ -1147,7 +1146,6 @@ isa = PBXGroup; children = ( FC035A5B24855E8C00AF820F /* ASCTabViewType.h */, - FC035A5C2485625400AF820F /* ASCDocumentType.h */, ); path = Enums; sourceTree = ""; @@ -1717,7 +1715,7 @@ FCA0B33E1B9EB5960073EDD4 /* ASCTitleWindow.h */, FCA0B33F1B9EB5960073EDD4 /* ASCTitleWindow.m */, FCA9A1911BA6DE2700ABF3AB /* ASCTitleBarController.h */, - FCA9A1921BA6DE2700ABF3AB /* ASCTitleBarController.m */, + FCA9A1921BA6DE2700ABF3AB /* ASCTitleBarController.mm */, FCA9A1931BA6DE2700ABF3AB /* ASCTitleWindowController.h */, FCA9A1941BA6DE2700ABF3AB /* ASCTitleWindowController.mm */, FC25A1A51C2E844800063A42 /* ASCTabViewController.h */, @@ -2305,7 +2303,7 @@ FC0BD6A1258B63F700C47F95 /* ASCPopoverLightView.m in Sources */, FC0BD6A2258B63F700C47F95 /* NSCefView.mm in Sources */, FC0BD6A3258B63F700C47F95 /* ASCTabsControl.m in Sources */, - FC0BD6A4258B63F700C47F95 /* ASCTitleBarController.m in Sources */, + FC0BD6A4258B63F700C47F95 /* ASCTitleBarController.mm in Sources */, FC0BD6A5258B63F700C47F95 /* SFBPopover.m in Sources */, FC0BD6A6258B63F700C47F95 /* ASCEventsController.mm in Sources */, FC0BD6A7258B63F700C47F95 /* ASCAboutController.m in Sources */, @@ -2380,7 +2378,7 @@ FCB4C6DA26DD018B0012C20D /* ASCPopoverLightView.m in Sources */, FCB4C6DB26DD018B0012C20D /* NSCefView.mm in Sources */, FCB4C6DC26DD018B0012C20D /* ASCTabsControl.m in Sources */, - FCB4C6DD26DD018B0012C20D /* ASCTitleBarController.m in Sources */, + FCB4C6DD26DD018B0012C20D /* ASCTitleBarController.mm in Sources */, FCB4C6DE26DD018B0012C20D /* SFBPopover.m in Sources */, FCB4C6DF26DD018B0012C20D /* ASCEventsController.mm in Sources */, FCB4C6E026DD018B0012C20D /* ASCAboutController.m in Sources */, @@ -2455,7 +2453,7 @@ FC1127591BBAAC8000AA3648 /* ASCPopoverLightView.m in Sources */, FC98BAD61BAC43B400747944 /* NSCefView.mm in Sources */, FCC77C94206CEE85001B7837 /* ASCTabsControl.m in Sources */, - FCA9A1951BA6DE2700ABF3AB /* ASCTitleBarController.m in Sources */, + FCA9A1951BA6DE2700ABF3AB /* ASCTitleBarController.mm in Sources */, FC3BFE001BBE83AB0040C904 /* SFBPopover.m in Sources */, FC3B77851BB2A94300DB9705 /* ASCEventsController.mm in Sources */, FC659BFA1C75EE8B00C99776 /* ASCAboutController.m in Sources */, diff --git a/macos/ONLYOFFICE/Code/Controllers/Common/ASCCommonViewController.mm b/macos/ONLYOFFICE/Code/Controllers/Common/ASCCommonViewController.mm index 55cd1984e..343e4d76c 100644 --- a/macos/ONLYOFFICE/Code/Controllers/Common/ASCCommonViewController.mm +++ b/macos/ONLYOFFICE/Code/Controllers/Common/ASCCommonViewController.mm @@ -71,7 +71,6 @@ #import "ASCThemesController.h" #import "ASCEditorJSVariables.h" #import "ASCPresentationReporter.h" -#import "ASCDocumentType.h" #import #define rootTabId @"1CEF624D-9FF3-432B-9967-61361B5BFE8B" @@ -397,7 +396,7 @@ - (void)onTouchBarItemTap:(id)sender senderId:(NSString *)senderId { object:nil userInfo:@{ @"action" : @(ASCTabActionCreateLocalFile), - @"type" : @(CEFDocumentDocument), + @"type" : @(int(AscEditorType::etDocument)), @"active" : @(YES) }]; } else if ([senderId isEqualToString:[NSString stringWithFormat:kCreationButtonIdentifier, @"spreadsheet"]]) { @@ -405,7 +404,7 @@ - (void)onTouchBarItemTap:(id)sender senderId:(NSString *)senderId { object:nil userInfo:@{ @"action" : @(ASCTabActionCreateLocalFile), - @"type" : @(CEFDocumentSpreadsheet), + @"type" : @(int(AscEditorType::etSpreadsheet)), @"active" : @(YES) }]; } else if ([senderId isEqualToString:[NSString stringWithFormat:kCreationButtonIdentifier, @"presentation"]]) { @@ -413,7 +412,7 @@ - (void)onTouchBarItemTap:(id)sender senderId:(NSString *)senderId { object:nil userInfo:@{ @"action" : @(ASCTabActionCreateLocalFile), - @"type" : @(CEFDocumentPresentation), + @"type" : @(int(AscEditorType::etPresentation)), @"active" : @(YES) }]; } else { @@ -743,9 +742,9 @@ - (void)onCEFCreateTab:(NSNotification *)notification { NSOpenPanel * openPanel = [NSOpenPanel openPanel]; NSMutableArray * filter = [NSMutableArray array]; - if ( [params[@"type"] isEqualToNumber:@(ASCDocumentTypePresentation)] ) { + if ( [params[@"type"] isEqualToNumber:@((int)AscEditorType::etPresentation)] ) { [filter addObjectsFromArray:@[@"potx", @"otp"]]; - } else if ( [params[@"type"] isEqualToNumber:@(ASCDocumentTypeSpreadsheet)] ) { + } else if ( [params[@"type"] isEqualToNumber:@((int)AscEditorType::etSpreadsheet)] ) { [filter addObjectsFromArray:@[@"xltx", @"xltm", @"ots"]]; } else { [filter addObjectsFromArray:@[@"dotx", @"ott"]]; @@ -1820,30 +1819,32 @@ - (void)tabs:(ASCTabsControl *)control didAddTab:(ASCTabView *)tab { case ASCTabActionCreateLocalFileFromTemplate: case ASCTabActionCreateLocalFile: { - int docType = CEFDocumentDocument; + AscEditorType docType = AscEditorType::etDocument; if ( [tab.params[@"type"] isKindOfClass:[NSString class]] ) { NSString * param = tab.params[@"type"]; - if ([param isEqualToString:@"cell"]) docType = CEFDocumentSpreadsheet; - else if ([param isEqualToString:@"slide"]) docType = CEFDocumentPresentation; - else if ([param isEqualToString:@"form"]) docType = CEFDocumentForm; - else /*if ([param isEqualToString:@"word"])*/ docType = CEFDocumentDocument; - } else docType = [tab.params[@"type"] intValue]; + if ([param isEqualToString:@"cell"]) docType = AscEditorType::etSpreadsheet; + else if ([param isEqualToString:@"slide"]) docType = AscEditorType::etPresentation; + else if ([param isEqualToString:@"form"]) docType = AscEditorType::etDocumentMasterForm; +// else /*if ([param isEqualToString:@"word"])*/ docType = AscEditorType::etDocument; + } else docType = (AscEditorType)[tab.params[@"type"] intValue]; NSString * docName = NSLocalizedString(@"Untitled", nil); switch (docType) { - case CEFDocumentDocument: + case AscEditorType::etDocument: docName = [NSString stringWithFormat:NSLocalizedString(@"Document %ld.docx", nil), ++documentNameCounter]; break; - case CEFDocumentSpreadsheet: + case AscEditorType::etSpreadsheet: docName = [NSString stringWithFormat:NSLocalizedString(@"Spreadsheet %ld.xlsx", nil), ++spreadsheetNameCounter]; break; - case CEFDocumentPresentation: + case AscEditorType::etPresentation: docName = [NSString stringWithFormat:NSLocalizedString(@"Presentation %ld.pptx", nil), ++presentationNameCounter]; break; - case CEFDocumentForm: + case AscEditorType::etDocumentMasterOForm: + case AscEditorType::etDocumentMasterForm: docName = [NSString stringWithFormat:NSLocalizedString(@"Document %ld.docxf", nil), ++documentNameCounter]; break; + default: break; } if (action == ASCTabActionCreateLocalFile ) { diff --git a/macos/ONLYOFFICE/Code/Controllers/Common/ASCEventsController.mm b/macos/ONLYOFFICE/Code/Controllers/Common/ASCEventsController.mm index 39ea11b20..f557b627e 100644 --- a/macos/ONLYOFFICE/Code/Controllers/Common/ASCEventsController.mm +++ b/macos/ONLYOFFICE/Code/Controllers/Common/ASCEventsController.mm @@ -40,7 +40,6 @@ #import "ASCEventsController.h" #import "ASCConstants.h" -#import "ASCDocumentType.h" #import "ASCExternalController.h" #import "ASCPresentationReporter.h" #import "ASCSharedSettings.h" @@ -680,43 +679,43 @@ virtual void OnEvent(NSEditorApi::CAscCefMenuEvent* pRawEvent) /// Create local files NSString * nsParam = (NSString *)[NSString stringWithstdwstring:param]; - ASCDocumentType docType = ASCDocumentTypeUnknown; + AscEditorType docType = AscEditorType::etUndefined; if ([nsParam hasPrefix:@"template:"]) { if ([nsParam hasSuffix:@"word"]) { - docType = ASCDocumentTypeDocument; + docType = AscEditorType::etDocument; } else if ([nsParam hasSuffix:@"slide"]) { - docType = ASCDocumentTypePresentation; + docType = AscEditorType::etPresentation; } else if ([nsParam hasSuffix:@"cell"]) { - docType = ASCDocumentTypeSpreadsheet; + docType = AscEditorType::etSpreadsheet; } [[NSNotificationCenter defaultCenter] postNotificationName:CEFEventNameCreateTab object:nil userInfo:@{ @"action" : @(ASCTabActionCreateLocalFileFromTemplate), - @"type" : @(docType), + @"type" : @(int(docType)), @"active" : @(YES) }]; } else { if ([nsParam isEqualToString:@"word"]) { - docType = ASCDocumentTypeDocument; + docType = AscEditorType::etDocument; } else if ([nsParam isEqualToString:@"cell"]) { - docType = ASCDocumentTypeSpreadsheet; + docType = AscEditorType::etSpreadsheet; } else if ([nsParam isEqualToString:@"slide"]) { - docType = ASCDocumentTypePresentation; + docType = AscEditorType::etPresentation; } else if ([nsParam isEqualToString:@"form"]) { - docType = ASCDocumentTypeForm; + docType = AscEditorType::etDocumentMasterForm; } - if (docType != ASCDocumentTypeUnknown) { + if ( docType != AscEditorType::etUndefined ) { [[NSNotificationCenter defaultCenter] postNotificationName:CEFEventNameCreateTab object:nil userInfo:@{ @"action" : @(ASCTabActionCreateLocalFile), - @"type" : @(docType), + @"type" : @(int(docType)), @"active" : @(YES) }]; } diff --git a/macos/ONLYOFFICE/Code/Controllers/Common/ASCThemesController.h b/macos/ONLYOFFICE/Code/Controllers/Common/ASCThemesController.h index 2d20dbba5..a65be81f9 100644 --- a/macos/ONLYOFFICE/Code/Controllers/Common/ASCThemesController.h +++ b/macos/ONLYOFFICE/Code/Controllers/Common/ASCThemesController.h @@ -48,6 +48,7 @@ static NSString * const btnPortalActiveBackgroundColor = @"portal-button-backgr static NSString * const tabWordActiveBackgroundColor = @"tab-word-background-active-color"; static NSString * const tabCellActiveBackgroundColor = @"tab-cell-background-active-color"; static NSString * const tabSlideActiveBackgroundColor = @"tab-slide-background-active-color"; +static NSString * const tabPdfActiveBackgroundColor = @"tab-pdf-background-active-color"; @interface ASCThemesController : NSObject diff --git a/macos/ONLYOFFICE/Code/Controllers/Common/ASCThemesController.m b/macos/ONLYOFFICE/Code/Controllers/Common/ASCThemesController.m index fe1b8a77a..86ebc46c2 100644 --- a/macos/ONLYOFFICE/Code/Controllers/Common/ASCThemesController.m +++ b/macos/ONLYOFFICE/Code/Controllers/Common/ASCThemesController.m @@ -113,6 +113,8 @@ + (NSColor*)color:(NSString*)name forTheme:(NSString*)theme { return [NSColor brendSpreadsheetEditor]; } else if ([name isEqualToString:tabSlideActiveBackgroundColor]) { return [NSColor brendPresentationEditor]; + } else if ([name isEqualToString:tabPdfActiveBackgroundColor]) { + return [NSColor brandPdfEditor]; } } } diff --git a/macos/ONLYOFFICE/Code/Controllers/MainWindow/ASCTitleBarController.m b/macos/ONLYOFFICE/Code/Controllers/MainWindow/ASCTitleBarController.mm similarity index 93% rename from macos/ONLYOFFICE/Code/Controllers/MainWindow/ASCTitleBarController.m rename to macos/ONLYOFFICE/Code/Controllers/MainWindow/ASCTitleBarController.mm index 65816f5f1..963ae301a 100644 --- a/macos/ONLYOFFICE/Code/Controllers/MainWindow/ASCTitleBarController.m +++ b/macos/ONLYOFFICE/Code/Controllers/MainWindow/ASCTitleBarController.mm @@ -50,8 +50,9 @@ #import "ASCDownloadViewController.h" #import "ASCDownloadController.h" #import "ASCMenuButtonCell.h" -#import "ASCDocumentType.h" #import "ASCThemesController.h" +#import "ASCApplicationManager.h" + static float kASCWindowDefaultTrafficButtonsLeftMargin = 0; static float kASCWindowMinTitleWidth = 0; @@ -124,6 +125,26 @@ - (void)initialize { self.downloadWidthConstraint.constant = .0f; self.downloadImageView.canDrawSubviewsIntoLayer = YES; + self.downloadImageView.animates = NO; + self.downloadImageView.hidden = NO; + + NSDataAsset * asset = [[NSDataAsset alloc] initWithName:@"progress_download_icon"]; + NSBitmapImageRep * rep = [[NSBitmapImageRep alloc] initWithData:[asset data]]; + int framescount = [[rep valueForProperty:NSImageFrameCount] intValue]; + [rep setProperty:NSImageCurrentFrame withValue:[NSNumber numberWithUnsignedInt:15]]; + NSData *repData = [rep representationUsingType:NSPNGFileType properties:nil]; + NSImage * img = [[NSImage alloc] initWithData:repData]; + [self.downloadImageView setImage:img]; + +// NSImage * image = [NSImage imageNamed:@"progress_download_icon"]; +// if ( image ) { +// +// NSLog(@"download1: image loaded, %d", framescount); +//// self.downloadImageView.image = image; +// [self.downloadImageView setImage:img]; +// } else { +// NSLog(@"download1: load failed"); +// } kASCWindowDefaultTrafficButtonsLeftMargin = NSWidth(self.closeButtonFullscreen.frame) - 2.0; // OSX 10.11 magic @@ -172,7 +193,8 @@ - (void)initialize { [[[ASCDownloadController sharedInstance] multicastDelegate] addDelegate:self]; [self.tabsControl.multicastDelegate addDelegate:self]; - [self.userProfileButton setHidden:YES]; +// [self.userProfileButton setHidden:YES]; + [self.userProfileButton setHidden:NO]; [self.portalButton setState:NSControlStateValueOn]; [self.tabsControl removeAllConstraints]; @@ -245,7 +267,7 @@ - (void)doLayout { // Layout title and tabs CGFloat containerWidth = CGRectGetWidth(self.titleContainerView.frame); - CGFloat maxTabsWidth = containerWidth - kASCWindowMinTitleWidth; + CGFloat maxTabsWidth = containerWidth - kASCWindowMinTitleWidth - 100; CGFloat actualTabsWidth = self.tabsControl.maxTabWidth * [self.tabsControl.tabs count]; self.tabsControl.frame = CGRectMake(0, 0, MIN(actualTabsWidth, maxTabsWidth), CGRectGetHeight(self.tabsControl.frame)); @@ -257,7 +279,6 @@ - (void)viewWillTransitionToSize:(NSSize)newSize { #pragma mark - #pragma mark CEF events handler - - (void)onCEFChangedTabEditorType:(NSNotification *)notification { if (notification && notification.userInfo) { NSDictionary * params = (NSDictionary *)notification.userInfo; @@ -266,13 +287,15 @@ - (void)onCEFChangedTabEditorType:(NSNotification *)notification { ASCTabView * tab = [self.tabsControl tabWithUUID:viewId]; +// NSLog(@"on change editor type %ld %lu", type); + if (tab) { ASCTabViewType docType = ASCTabViewTypeUnknown; - switch (type) { - case ASCDocumentTypeDocument : docType = ASCTabViewTypeDocument; break; - case ASCDocumentTypeSpreadsheet : docType = ASCTabViewTypeSpreadsheet; break; - case ASCDocumentTypePresentation : docType = ASCTabViewTypePresentation; break; - + switch (AscEditorType(type)) { + case AscEditorType::etDocument : docType = ASCTabViewTypeDocument; break; + case AscEditorType::etSpreadsheet : docType = ASCTabViewTypeSpreadsheet; break; + case AscEditorType::etPresentation : docType = ASCTabViewTypePresentation; break; + case AscEditorType::etPdf : docType = ASCTabViewTypePdf; break; default: break; } diff --git a/macos/ONLYOFFICE/Code/Controls/ASCTabs/ASCTabView.m b/macos/ONLYOFFICE/Code/Controls/ASCTabs/ASCTabView.m index 105b54f4e..704dbac3d 100644 --- a/macos/ONLYOFFICE/Code/Controls/ASCTabs/ASCTabView.m +++ b/macos/ONLYOFFICE/Code/Controls/ASCTabs/ASCTabView.m @@ -113,6 +113,8 @@ - (void)initialize { @{@"normal": @"icon_tabs_se_inactive", @"active": @"icon_tabs_se_active"}, // ASCTabViewTypePresentation @{@"normal": @"icon_tabs_pe_inactive", @"active": @"icon_tabs_pe_active"}, + // ASCTabViewTypePdf + @{@"normal": @"icon_tabs_pdf_inactive", @"active": @"icon_tabs_pdf_active"}, // ASCTabViewTypePortal @{@"normal": @"icon_tab_portal_active", @"active": @"icon_tab_portal_active"} ] @@ -245,6 +247,14 @@ - (void)setType:(ASCTabViewType)type { } else { tabViewCell.activeTextColor = UIColorFromRGB(0xffffff); } + } else if (type == ASCTabViewTypePdf) { + tabViewCell.activeColor = [ASCThemesController currentThemeColor:tabPdfActiveBackgroundColor]; + tabViewCell.clickColor = [ASCThemesController currentThemeColor:tabPdfActiveBackgroundColor]; + if (@available(macOS 10.13, *)) { + tabViewCell.activeTextColor = [NSColor colorNamed:@"tab-editorsActiveTextColor"]; + } else { + tabViewCell.activeTextColor = UIColorFromRGB(0xffffff); + } } if (_delegate && [_delegate respondsToSelector:@selector(tabDidUpdate:)]) { diff --git a/macos/ONLYOFFICE/Code/Enums/ASCDocumentType.h b/macos/ONLYOFFICE/Code/Enums/ASCDocumentType.h deleted file mode 100644 index 52e135b87..000000000 --- a/macos/ONLYOFFICE/Code/Enums/ASCDocumentType.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// ASCDocumentType.h -// ONLYOFFICE -// -// Created by Alexander Yuzhin on 01.06.2020. -// Copyright © 2020 Ascensio System SIA. All rights reserved. -// - -#ifndef ASCDocumentType_h -#define ASCDocumentType_h - -typedef NS_ENUM(NSUInteger, ASCDocumentType) { - ASCDocumentTypeDocument, - ASCDocumentTypePresentation, - ASCDocumentTypeSpreadsheet, - ASCDocumentTypeForm, - ASCDocumentTypeUnknown = NSUIntegerMax -}; - -#endif /* ASCDocumentType_h */ diff --git a/macos/ONLYOFFICE/Code/Enums/ASCTabViewType.h b/macos/ONLYOFFICE/Code/Enums/ASCTabViewType.h index c0668f332..ca80a50dc 100644 --- a/macos/ONLYOFFICE/Code/Enums/ASCTabViewType.h +++ b/macos/ONLYOFFICE/Code/Enums/ASCTabViewType.h @@ -15,6 +15,7 @@ typedef NS_ENUM(NSUInteger, ASCTabViewType) { ASCTabViewTypeDocument, ASCTabViewTypeSpreadsheet, ASCTabViewTypePresentation, + ASCTabViewTypePdf, ASCTabViewTypePortal }; diff --git a/macos/ONLYOFFICE/Code/Extensions/NSColor+Extensions.h b/macos/ONLYOFFICE/Code/Extensions/NSColor+Extensions.h index 56d5b91cd..ebabd3ff8 100644 --- a/macos/ONLYOFFICE/Code/Extensions/NSColor+Extensions.h +++ b/macos/ONLYOFFICE/Code/Extensions/NSColor+Extensions.h @@ -55,6 +55,7 @@ + (NSColor *) brendDocumentEditor; + (NSColor *) brendSpreadsheetEditor; + (NSColor *) brendPresentationEditor; ++ (NSColor *) brandPdfEditor; @end @interface NSColor (Extensions) diff --git a/macos/ONLYOFFICE/Code/Extensions/NSColor+Extensions.m b/macos/ONLYOFFICE/Code/Extensions/NSColor+Extensions.m index 1002c23a3..5706a284a 100644 --- a/macos/ONLYOFFICE/Code/Extensions/NSColor+Extensions.m +++ b/macos/ONLYOFFICE/Code/Extensions/NSColor+Extensions.m @@ -67,6 +67,13 @@ + (NSColor *) brendPresentationEditor { return UIColorFromRGB(0xbe664f); } ++ (NSColor *) brandPdfEditor { + if (@available(macOS 10.13, *)) { + return [NSColor colorNamed:@"brand-PdfEditor"]; + } + return UIColorFromRGB(0xaa5252); +} + @end #pragma mark - Extensions diff --git a/macos/ONLYOFFICE/Code/Utils/ASCConstants.h b/macos/ONLYOFFICE/Code/Utils/ASCConstants.h index 6155b4987..e27588153 100644 --- a/macos/ONLYOFFICE/Code/Utils/ASCConstants.h +++ b/macos/ONLYOFFICE/Code/Utils/ASCConstants.h @@ -58,13 +58,6 @@ typedef NS_ENUM(int, ASCTabActionType) { ASCTabActionSaveLocalFile, }; -typedef NS_ENUM(int, CEFDocumentType) { - CEFDocumentDocument = 0, - CEFDocumentSpreadsheet = 2, - CEFDocumentPresentation = 1, - CEFDocumentForm = 3, -}; - static NSString * const kRegHelpUrl = @"kRegHelpUrl"; static NSString * const kHelpUrl = @"kHelpUrl"; static NSString * const kRegistrationPortalUrl = @"kRegistrationPortalUrl"; diff --git a/macos/ONLYOFFICE/Code/Views/NSCefView.h b/macos/ONLYOFFICE/Code/Views/NSCefView.h index 733919494..abfcecbe6 100644 --- a/macos/ONLYOFFICE/Code/Views/NSCefView.h +++ b/macos/ONLYOFFICE/Code/Views/NSCefView.h @@ -56,7 +56,7 @@ - (NSString *)originalUrl; - (void)loadWithUrl:(NSString *)url; -- (void)createFileWithName:(NSString *)name type:(NSInteger)type; +- (void)createFileWithName:(NSString *)name type:(AscEditorType)type; - (void)createFileWithNameFromTemplate:(NSString *)name tplpath:(NSString *)path; - (void)openFileWithName:(NSString *)name type:(NSInteger)type; - (void)openRecentFileWithId:(NSInteger)index; diff --git a/macos/ONLYOFFICE/Code/Views/NSCefView.mm b/macos/ONLYOFFICE/Code/Views/NSCefView.mm index 8acbc3924..28fb4ae5f 100644 --- a/macos/ONLYOFFICE/Code/Views/NSCefView.mm +++ b/macos/ONLYOFFICE/Code/Views/NSCefView.mm @@ -148,7 +148,7 @@ - (void)loadWithUrl:(NSString *)url { } } -- (void)createFileWithName:(NSString *)name type:(NSInteger)type { +- (void)createFileWithName:(NSString *)name type:(AscEditorType)type { if (m_pCefView) { CCefViewEditor * editorView = dynamic_cast(m_pCefView->GetCefView()); @@ -163,7 +163,7 @@ - (void)createFileWithNameFromTemplate:(NSString *)name tplpath:(NSString *)path CCefViewEditor * editorView = dynamic_cast(m_pCefView->GetCefView()); if (editorView) { - editorView->CreateLocalFile(AscEditorType::etDocument, [name stdwstring], [path stdwstring]); + editorView->CreateLocalFile(AscEditorType::etUndefined, [name stdwstring], [path stdwstring]); } } } diff --git a/macos/ONLYOFFICE/Images.xcassets/Colors/Editors/Contents.json b/macos/ONLYOFFICE/Images.xcassets/Colors/Editors/Contents.json index da4a164c9..73c00596a 100644 --- a/macos/ONLYOFFICE/Images.xcassets/Colors/Editors/Contents.json +++ b/macos/ONLYOFFICE/Images.xcassets/Colors/Editors/Contents.json @@ -1,6 +1,6 @@ { "info" : { - "version" : 1, - "author" : "xcode" + "author" : "xcode", + "version" : 1 } -} \ No newline at end of file +} diff --git a/macos/ONLYOFFICE/Images.xcassets/Colors/Editors/brand-PdfEditor.colorset/Contents.json b/macos/ONLYOFFICE/Images.xcassets/Colors/Editors/brand-PdfEditor.colorset/Contents.json new file mode 100644 index 000000000..87ea86c5a --- /dev/null +++ b/macos/ONLYOFFICE/Images.xcassets/Colors/Editors/brand-PdfEditor.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0x52", + "green" : "0x52", + "red" : "0xaa" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/macos/ONLYOFFICE/Images.xcassets/Tabs/icon_tabs_pdf_active.imageset/Contents.json b/macos/ONLYOFFICE/Images.xcassets/Tabs/icon_tabs_pdf_active.imageset/Contents.json new file mode 100644 index 000000000..aac2accab --- /dev/null +++ b/macos/ONLYOFFICE/Images.xcassets/Tabs/icon_tabs_pdf_active.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "pdf_desktop.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "pdf_desktop_2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/macos/ONLYOFFICE/Images.xcassets/Tabs/icon_tabs_pdf_active.imageset/pdf_desktop.png b/macos/ONLYOFFICE/Images.xcassets/Tabs/icon_tabs_pdf_active.imageset/pdf_desktop.png new file mode 100644 index 0000000000000000000000000000000000000000..5e25461b272e4916628578f43f3b5148b32d4787 GIT binary patch literal 279 zcmeAS@N?(olHy`uVBq!ia0vp^{24nJ z@ErkR#;MwT(m+AU64!{5;QX|b^2DN4hVt@qz0ADq;^f4FRK5J7^x5xhq=1U1c)B=- zXiQvs$(FClK%)KQ@}sTN57w?}c56Jn(qhJsLanDP1`%DtYP@FpSN>mnIQ_fiD!uH_ zEYr^1_hyb{VL4Hv!jkaN_EHGTw%p?pnZ1^wO8fH6EwXFxSRdbe!qvuspa1&vGpFNZ z`;<7+?tiluY~MU}R*>~EEl-21ku3W+@9uMt?68>eH*c2a*86|I+L{Kq-}=S8SJzl^ U!A|a1K=(0ty85}Sb4q9e0H76R5&!@I literal 0 HcmV?d00001 diff --git a/macos/ONLYOFFICE/Images.xcassets/Tabs/icon_tabs_pdf_active.imageset/pdf_desktop_2x.png b/macos/ONLYOFFICE/Images.xcassets/Tabs/icon_tabs_pdf_active.imageset/pdf_desktop_2x.png new file mode 100644 index 0000000000000000000000000000000000000000..4fdbe6dbe26ea5665b02cc99d5133d25bef59ea7 GIT binary patch literal 361 zcmeAS@N?(olHy`uVBq!ia0vp^av;pX1|+Qw)-3{3EX7WqAsj$Z!;#Vf4nJ z$hLzpWB=2SsX#%=64!{5;QX|b^2DN4hVt@qz0ADq;^f4FRK5J7^x5xhq=1T^dAc}; zcyzwKcAD>?gUGRu`!BWJ=wN-X5)pB&?a0%KIx%twmUW)?zBt9>LY8E;Pf$@%>CbJG z&*(pYayljGvfE*{P4nJ z@ErkR#;MwT(m+AU64!{5;QX|b^2DN4hVt@qz0ADq;^f4FRK5J7^x5xhq=1U1c)B=- zXiQvs$(FClK%)KQ@}sTN57w?}c56Jn(qhJsLanDP1`%DtYP@FpSN>mnIQ_fiD!uH_ zEYr^1_hyb{VL4Hv!jkaN_EHGTw%p?pnZ1^wO8fH6EwXFxSRdbe!qvuspa1&vGpFNZ z`;<7+?tiluY~MU}R*>~EEl-21ku3W+@9uMt?68>eH*c2a*86|I+L{Kq-}=S8SJzl^ U!A|a1K=(0ty85}Sb4q9e0H76R5&!@I literal 0 HcmV?d00001 diff --git a/macos/ONLYOFFICE/Images.xcassets/Tabs/icon_tabs_pdf_inactive.imageset/pdf_desktop_2x.png b/macos/ONLYOFFICE/Images.xcassets/Tabs/icon_tabs_pdf_inactive.imageset/pdf_desktop_2x.png new file mode 100644 index 0000000000000000000000000000000000000000..4fdbe6dbe26ea5665b02cc99d5133d25bef59ea7 GIT binary patch literal 361 zcmeAS@N?(olHy`uVBq!ia0vp^av;pX1|+Qw)-3{3EX7WqAsj$Z!;#Vf4nJ z$hLzpWB=2SsX#%=64!{5;QX|b^2DN4hVt@qz0ADq;^f4FRK5J7^x5xhq=1T^dAc}; zcyzwKcAD>?gUGRu`!BWJ=wN-X5)pB&?a0%KIx%twmUW)?zBt9>LY8E;Pf$@%>CbJG z&*(pYayljGvfE*{P Date: Wed, 27 Sep 2023 14:00:03 +0300 Subject: [PATCH 252/298] [win-linux] fix user icon size --- win-linux/res/styles/editor.qss | 26 ++++++++++++------------- win-linux/src/windows/ceditorwindow_p.h | 2 +- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/win-linux/res/styles/editor.qss b/win-linux/res/styles/editor.qss index fd7f5058d..31e7ec879 100644 --- a/win-linux/res/styles/editor.qss +++ b/win-linux/res/styles/editor.qss @@ -2,7 +2,7 @@ #box-title-tools {background-color: %1;} #box-title-tools QLabel {font-family: "Arial", "Helvetica", "Helvetica Neue", sans-serif;} #labelTitle {color: #444; font-weight: bold;} -#iconuser {color: %1; background: #d9ffffff; font-size: 12px;} +#iconuser {color: %1; background: #d9ffffff; font-size: 10px;} QPushButton[act=tool]:hover {background-color: rgba(0,0,0,20%);} QPushButton#toolButtonClose:hover {background-color: #d42b2b;} QPushButton#toolButtonClose:pressed {background-color: #d75050;} @@ -54,7 +54,7 @@ QPushButton#toolButtonClose:pressed {background-color: #d75050;} { padding: 6px 15px 9px; } -#mainPanel[zoom="1.25x"] #iconuser, +#mainPanel[zoom="1.25x"] #iconuser {font-size: 13px;} #mainPanel[zoom="1.25x"] #labelTitle { font-size: 15px; @@ -67,7 +67,7 @@ QPushButton#toolButtonClose:pressed {background-color: #d75050;} { padding: 8px 18px 11px; } -#mainPanel[zoom="1.5x"] #iconuser, +#mainPanel[zoom="1.5x"] #iconuser {font-size: 15px;} #mainPanel[zoom="1.5x"] #labelTitle { font-size: 18px; @@ -80,7 +80,7 @@ QPushButton#toolButtonClose:pressed {background-color: #d75050;} { padding: 9px 21px 12px; } -#mainPanel[zoom="1.75x"] #iconuser, +#mainPanel[zoom="1.75x"] #iconuser {font-size: 18px;} #mainPanel[zoom="1.75x"] #labelTitle { font-size: 21px; @@ -93,7 +93,7 @@ QPushButton#toolButtonClose:pressed {background-color: #d75050;} { padding: 10px 24px 14px; } -#mainPanel[zoom="2x"] #iconuser, +#mainPanel[zoom="2x"] #iconuser {font-size: 21px;} #mainPanel[zoom="2x"] #labelTitle { font-size: 24px; @@ -106,7 +106,7 @@ QPushButton#toolButtonClose:pressed {background-color: #d75050;} { padding: 11px 27px 16px; } -#mainPanel[zoom="2.25x"] #iconuser, +#mainPanel[zoom="2.25x"] #iconuser {font-size: 23px;} #mainPanel[zoom="2.25x"] #labelTitle { font-size: 27px; @@ -119,7 +119,7 @@ QPushButton#toolButtonClose:pressed {background-color: #d75050;} { padding: 13px 30px 18px; } -#mainPanel[zoom="2.5x"] #iconuser, +#mainPanel[zoom="2.5x"] #iconuser {font-size: 25px;} #mainPanel[zoom="2.5x"] #labelTitle { font-size: 30px; @@ -132,7 +132,7 @@ QPushButton#toolButtonClose:pressed {background-color: #d75050;} { padding: 14px 33px 19px; } -#mainPanel[zoom="2.75x"] #iconuser, +#mainPanel[zoom="2.75x"] #iconuser {font-size: 28px;} #mainPanel[zoom="2.75x"] #labelTitle { font-size: 33px; @@ -145,7 +145,7 @@ QPushButton#toolButtonClose:pressed {background-color: #d75050;} { padding: 15px 36px 21px; } -#mainPanel[zoom="3x"] #iconuser, +#mainPanel[zoom="3x"] #iconuser {font-size: 30px;} #mainPanel[zoom="3x"] #labelTitle { font-size: 36px; @@ -158,7 +158,7 @@ QPushButton#toolButtonClose:pressed {background-color: #d75050;} { padding: 18px 42px 25px; } -#mainPanel[zoom="3.5x"] #iconuser, +#mainPanel[zoom="3.5x"] #iconuser {font-size: 35px;} #mainPanel[zoom="3.5x"] #labelTitle { font-size: 42px; @@ -171,7 +171,7 @@ QPushButton#toolButtonClose:pressed {background-color: #d75050;} { padding: 20px 48px 28px; } -#mainPanel[zoom="4x"] #iconuser, +#mainPanel[zoom="4x"] #iconuser {font-size: 40px;} #mainPanel[zoom="4x"] #labelTitle { font-size: 48px; @@ -184,7 +184,7 @@ QPushButton#toolButtonClose:pressed {background-color: #d75050;} { padding: 23px 54px 32px; } -#mainPanel[zoom="4.5x"] #iconuser, +#mainPanel[zoom="4.5x"] #iconuser {font-size: 45px;} #mainPanel[zoom="4.5x"] #labelTitle { font-size: 54px; @@ -197,7 +197,7 @@ QPushButton#toolButtonClose:pressed {background-color: #d75050;} { padding: 25px 60px 35px; } -#mainPanel[zoom="5x"] #iconuser, +#mainPanel[zoom="5x"] #iconuser {font-size: 50px;} #mainPanel[zoom="5x"] #labelTitle { font-size: 60px; diff --git a/win-linux/src/windows/ceditorwindow_p.h b/win-linux/src/windows/ceditorwindow_p.h index 83c3778fc..fdd50c356 100644 --- a/win-linux/src/windows/ceditorwindow_p.h +++ b/win-linux/src/windows/ceditorwindow_p.h @@ -722,7 +722,7 @@ class CEditorWindowPrivate : public CCefEventsGate void adjustIconUser() { - iconuser->setFixedHeight(0.85 * TOOLBTN_HEIGHT * window->m_dpiRatio); + iconuser->setFixedHeight(20 * window->m_dpiRatio); iconuser->setFixedWidth(iconuser->height()); iconuser->setStyleSheet(QString("#iconuser {border-radius: %1px;}") .arg(QString::number(iconuser->height()/2))); From c934aefdc6abe06775ca65bb5b88d3984002f627 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Wed, 27 Sep 2023 14:01:15 +0300 Subject: [PATCH 253/298] [win-linux] fix font weight in window title --- win-linux/res/styles/editor.qss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/win-linux/res/styles/editor.qss b/win-linux/res/styles/editor.qss index 31e7ec879..cf6accba1 100644 --- a/win-linux/res/styles/editor.qss +++ b/win-linux/res/styles/editor.qss @@ -1,7 +1,7 @@ #mainPanel {background-color: %1;} #box-title-tools {background-color: %1;} #box-title-tools QLabel {font-family: "Arial", "Helvetica", "Helvetica Neue", sans-serif;} -#labelTitle {color: #444; font-weight: bold;} +#labelTitle {color: #444; font-weight: normal;} #iconuser {color: %1; background: #d9ffffff; font-size: 10px;} QPushButton[act=tool]:hover {background-color: rgba(0,0,0,20%);} QPushButton#toolButtonClose:hover {background-color: #d42b2b;} From 101502225727676db244e6bae965f7987837f764 Mon Sep 17 00:00:00 2001 From: Semyon Bezrukov Date: Wed, 27 Sep 2023 15:04:51 +0300 Subject: [PATCH 254/298] Sign vlc plugins (#976) --- win-linux/package/windows/make_zip.ps1 | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/win-linux/package/windows/make_zip.ps1 b/win-linux/package/windows/make_zip.ps1 index 5701b86aa..5da7361d8 100644 --- a/win-linux/package/windows/make_zip.ps1 +++ b/win-linux/package/windows/make_zip.ps1 @@ -29,7 +29,8 @@ if ( $Sign ) { if ( $DesktopDir ) { Set-Location "$BuildDir\$DesktopDir" - $SignFiles = Get-ChildItem *.exe, *.dll, converter\*.exe, converter\*.dll ` + $SignFiles = Get-ChildItem ` + *.exe, *.dll, converter\*.exe, converter\*.dll, plugins\*\*.dll ` | Resolve-Path -Relative # Sign Write-Host "signtool sign /a /n $CertName /t $TimestampServer $SignFiles" -ForegroundColor Yellow @@ -46,7 +47,8 @@ if ( $Sign ) { if ( $MultimediaDir ) { Set-Location "$BuildDir\$MultimediaDir" - $SignFiles = Get-ChildItem *.exe, *.dll | Resolve-Path -Relative + $SignFiles = Get-ChildItem *.exe, *.dll, plugins\*\*.dll ` + | Resolve-Path -Relative # Sign Write-Host "signtool sign /a /n $CertName /t $TimestampServer /v $SignFiles" -ForegroundColor Yellow & signtool sign /a /n $CertName /t $TimestampServer /v $SignFiles From af689bc026e0c596e48747d8f18f630eff3385fb Mon Sep 17 00:00:00 2001 From: Roman Demidov Date: Wed, 27 Sep 2023 15:34:45 +0300 Subject: [PATCH 255/298] Add changelog for DEB and RPM (#965) * Add changelog for DEB and RPM * Small changes * Small changes * Small changes * Small changes * Small changes * Small changes --- .github/workflows/init-changelogs.yaml | 6 +- .gitignore | 2 + common/changes/7.0.0/changes.html | 38 ++++++++++ common/changes/7.0.0/changes_ru.html | 38 ++++++++++ common/changes/7.0.1/changes.html | 33 ++++++++ common/changes/7.0.1/changes_ru.html | 33 ++++++++ common/changes/7.1.0/changes.html | 52 +++++++++++++ common/changes/7.1.0/changes_ru.html | 53 +++++++++++++ common/changes/7.1.1/changes.html | 31 ++++++++ common/changes/7.1.1/changes_ru.html | 31 ++++++++ common/changes/7.2.0/changes.html | 59 +++++++++++++++ common/changes/7.2.0/changes_ru.html | 59 +++++++++++++++ common/changes/7.2.1/changes.html | 75 +++++++++++++++++++ common/changes/7.2.1/changes_ru.html | 65 ++++++++++++++++ common/changes/7.3.0/changes.html | 70 +++++++++++++++++ common/changes/7.3.0/changes_ru.html | 70 +++++++++++++++++ common/changes/7.3.3/changes.html | 37 +++++++++ common/changes/7.3.3/changes_ru.html | 37 +++++++++ common/changes/7.4.0/changes.html | 69 +++++++++++++++++ common/changes/7.4.0/changes_ru.html | 69 +++++++++++++++++ common/changes/7.4.1/changes.html | 33 ++++++++ common/changes/7.4.1/changes_ru.html | 33 ++++++++ common/changes/7.5.0/changes.html | 47 ++++++++++++ common/changes/7.5.0/changes_ru.html | 47 ++++++++++++ common/changes/template/changes.html | 47 ++++++++++++ common/changes/template/changes_ru.html | 47 ++++++++++++ win-linux/package/linux/Makefile | 57 +++++++++++++- .../linux/common/usr/share/doc/NEWS.m4 | 3 + .../package/linux/deb/template/changelog.m4 | 7 +- win-linux/package/linux/rpm/common.spec | 3 + 30 files changed, 1243 insertions(+), 8 deletions(-) create mode 100644 common/changes/7.0.0/changes.html create mode 100644 common/changes/7.0.0/changes_ru.html create mode 100644 common/changes/7.0.1/changes.html create mode 100644 common/changes/7.0.1/changes_ru.html create mode 100644 common/changes/7.1.0/changes.html create mode 100644 common/changes/7.1.0/changes_ru.html create mode 100644 common/changes/7.1.1/changes.html create mode 100644 common/changes/7.1.1/changes_ru.html create mode 100644 common/changes/7.2.0/changes.html create mode 100644 common/changes/7.2.0/changes_ru.html create mode 100644 common/changes/7.2.1/changes.html create mode 100644 common/changes/7.2.1/changes_ru.html create mode 100644 common/changes/7.3.0/changes.html create mode 100644 common/changes/7.3.0/changes_ru.html create mode 100644 common/changes/7.3.3/changes.html create mode 100644 common/changes/7.3.3/changes_ru.html create mode 100644 common/changes/7.4.0/changes.html create mode 100644 common/changes/7.4.0/changes_ru.html create mode 100644 common/changes/7.4.1/changes.html create mode 100644 common/changes/7.4.1/changes_ru.html create mode 100644 common/changes/7.5.0/changes.html create mode 100644 common/changes/7.5.0/changes_ru.html create mode 100644 common/changes/template/changes.html create mode 100644 common/changes/template/changes_ru.html create mode 100644 win-linux/package/linux/common/usr/share/doc/NEWS.m4 diff --git a/.github/workflows/init-changelogs.yaml b/.github/workflows/init-changelogs.yaml index 0a0650927..b545c81a2 100644 --- a/.github/workflows/init-changelogs.yaml +++ b/.github/workflows/init-changelogs.yaml @@ -24,11 +24,13 @@ jobs: run: | CHANGES_WIN=win-linux/package/windows/update/changes CHANGES_MAC=macos/ONLYOFFICE/update/updates/ONLYOFFICE/changes + CHANGES_LINUX=common/changes - rm -rfv $CHANGES_WIN/$VERSION $CHANGES_MAC/$VERSION + rm -rfv $CHANGES_WIN/$VERSION $CHANGES_MAC/$VERSION $CHANGES_LINUX/$VERSION cp -fRTv $CHANGES_WIN/0.0.0 $CHANGES_WIN/$VERSION cp -fRTv $CHANGES_MAC/0.0.0 $CHANGES_MAC/$VERSION - find $CHANGES_WIN/$VERSION $CHANGES_MAC/$VERSION -name "*.html" -print \ + cp -fRTv $CHANGES_LINUX/template $CHANGES_LINUX/$VERSION + find $CHANGES_WIN/$VERSION $CHANGES_MAC/$VERSION $CHANGES_LINUX/$VERSION -name "*.html" -print \ -exec sed -e 's/0.0.0/'${VERSION}'/g' -e 's/000/'${VERSION//./}'/g' -i {} \; - name: Commit changes diff --git a/.gitignore b/.gitignore index 3575b07cb..be9e64c6a 100644 --- a/.gitignore +++ b/.gitignore @@ -14,6 +14,7 @@ win-linux/package/windows/index.html win-linux/package/linux/common/opt win-linux/package/linux/common/usr/share/applications/variables.m4 win-linux/package/linux/common/usr/share/flyfm/templates/desktopeditors.*.desktop +win-linux/package/linux/common/usr/share/doc/*/* win-linux/package/linux/common/help /win-linux/package/linux/deb*/build /win-linux/package/linux/deb*/*.buildinfo @@ -31,6 +32,7 @@ common/loginpage/build/node_modules/* common/loginpage/deploy/* common/loginpage/src/dlglogin.min.js common/converter/* +common/changes/*/changes_??? */.svn/* .DS_Store diff --git a/common/changes/7.0.0/changes.html b/common/changes/7.0.0/changes.html new file mode 100644 index 000000000..8e50d3de9 --- /dev/null +++ b/common/changes/7.0.0/changes.html @@ -0,0 +1,38 @@ +

ONLYOFFICE Desktop Editors 7.2.1 - 2022-01-17

+

New Features

+
    +
  • Added Liferay provider connection options
  • +
  • Added kDrive provider connection options
  • +
  • Added ability to launch editor in a single window
  • +
  • New UI languages (Belarusian, Bulgarian, Catalan, Danish, Dutch, Finnish, Greek, Hungarian, Indonesian, Japanese, Korean, Latvian, Norwegian, Romanian, Slovene, Swedish, Turkish, Ukrainian, Vietnamese, Lao)
  • +
  • 125% and 175% interface scaling support (Windows, Linux)
  • +
  • Ability to setup editor launch mode
  • +
+

Document Editor

+
    +
  • Completely new mode for creating, filling and sharing forms
  • +
  • Dark Mode (dark canvas background and other interface changes)
  • +
  • New settings to change review mode Track Changes Display
  • +
  • Ability to select local file for Mail Merge
  • +
  • New setting for AutoFormat as you type -> hyperlinks and network paths
  • +
+

Spreadsheet Editor

+
    +
  • Version History
  • +
  • Ability to protect spreadsheet files and separate sheets
  • +
  • Ability to show other users cursor in co-edit mode
  • +
  • Ability to separate sheets and status bar
  • +
  • pt-br formulas description and translation
  • +
  • Do not loose Query Table data
  • +
  • Copy sheet with drag-n-drop with holding ctrl
  • +
+

Presentation Editor

+
    +
  • Ability to display animations
  • +
  • Slide animation settings moved to top Tab
  • +
  • Ability to save presentation to JPG and PNG
  • +
+

Fixes

+
    +
  • All editors received countless fixes
  • +
\ No newline at end of file diff --git a/common/changes/7.0.0/changes_ru.html b/common/changes/7.0.0/changes_ru.html new file mode 100644 index 000000000..2a36fb28c --- /dev/null +++ b/common/changes/7.0.0/changes_ru.html @@ -0,0 +1,38 @@ +

ONLYOFFICE Desktop Editors 7.2.1 - 2022-01-17

+

Новые функции

+
    +
  • Добавлены настройки подключения провайдера Liferay
  • +
  • Добавлены настройки подключения провайдера kDrive
  • +
  • Добавлена возможность запуска редактора в отдельном окне
  • +
  • Новые языки интерфейса (белорусский, болгарский, каталонский, датский, голландский, финский, греческий, венгерский, индонезийский, японский, корейский, латышский, норвежский, румынский, словенский, шведский, турецкий, украинский, вьетнамский, лаосский)
  • +
  • Поддержка масштаба интерфейса 125% и 175% (Windows, Linux)
  • +
  • Возможность настройки режима запуска редактора
  • +
+

Редактор документов

+
    +
  • Абсолютно новый режим создания, заполнения форм и предоставления доступа к ним
  • +
  • Темный режим (темный фон канвы и другие изменения интерфейса)
  • +
  • Новые настройки для изменения режима отображения рецензий
  • +
  • Возможность выбрать локальный файл для Слияния
  • +
  • Новая настройка для Автоформата при вводе -> Адреса в Интернете и сетевые пути гиперссылками
  • +
+

Редактор таблиц

+
    +
  • История версий
  • +
  • Возможность защиты файлов электронных таблиц и отдельных листов
  • +
  • Возможность показывать курсоры других пользователей в режиме совместного редактирования
  • +
  • Возможность разделять панель листов и строку состояния
  • +
  • Описания и переводы формул для бразильского варианта португальского языка (pt-br)
  • +
  • Исправление проблемы с потерей данных таблицы запросов
  • +
  • Копирование листа путем перетаскивания, удерживая клавишу ctrl
  • +
+

Редактор презентаций

+
    +
  • Возможность отображения анимаций
  • +
  • Настройки анимации слайдов перенесены в верхнюю вкладку
  • +
  • Возможность сохранения презентации в форматы JPG и PNG
  • +
+

Исправления

+
    +
  • Многочисленные исправления всех компонентов
  • +
diff --git a/common/changes/7.0.1/changes.html b/common/changes/7.0.1/changes.html new file mode 100644 index 000000000..02480b9f5 --- /dev/null +++ b/common/changes/7.0.1/changes.html @@ -0,0 +1,33 @@ +

ONLYOFFICE Desktop Editors 7.2.1 - 2022-02-22

+

New Features

+

All Editors

+
    +
  • Spelling language detection
  • +
+

Spreadsheet Editor

+
    +
  • French (Switzerland) regional setting (Bug #53978)
  • +
+

Fixes

+

Document Editor

+
    +
  • Fix changes in text position (Bug #54485)
  • +
  • Fix JS error while changing font in some files (Bug #55280)
  • +
  • Fix the problem with calculating the position of flow objects lying in a table cell (Bug #51933)
  • +
  • Fix the problem with calculating the position of a drawing object in the header (Bug #55398)
  • +
  • Fix the problem with calculating header/footer. Forbid to change the page number of a header when calculation in progress (Bug #55403)
  • +
  • Fix the problem with calculating the position of a drawing lying in a table cell with vertical alignment to the bottom or center (Bug #55406)
  • +
  • Fix the problem with calculating page count stage (Bug #55458)
  • +
  • Fix the problem with text position calculation for rotated table cells (Bug #54200)
  • +
  • Fix Shift + '(' shortcut (Bug #55356)
  • +
+

Spreadsheet Editor

+
    +
  • Fix opening protected workbook in Excel (Bug #55027)
  • +
  • Fix JS error while Find and Replace empty cell (Bug #54999)
  • +
  • Fix compatibility of some files with Excel (Bug #54956)
  • +
+

Presentation Editor

+
    +
  • Fix shape position in slideshow mode (Bug #55068)
  • +
diff --git a/common/changes/7.0.1/changes_ru.html b/common/changes/7.0.1/changes_ru.html new file mode 100644 index 000000000..cabd16231 --- /dev/null +++ b/common/changes/7.0.1/changes_ru.html @@ -0,0 +1,33 @@ +

ONLYOFFICE Desktop Editors 7.2.1 - 2022-02-22

+

Новые функции

+

Все редакторы

+
    +
  • Распознавания языка проверки правописания
  • +
+

Редактор таблиц

+
    +
  • Français (Suisse) региональные настройки (Bug #53978)
  • +
+

Исправления

+

Редактор документов

+
    +
  • Исправление изменений в позиции текста (Bug #54485)
  • +
  • Исправление JS ошибки при изменении шрифта в некоторых документах (Bug #55280)
  • +
  • Исправление ошибки вычисления позиции объекта в ячейке таблицы(Bug #51933)
  • +
  • Исправление ошибки вычисления позиции объекта, лежащего в колонтитуле (Bug #55398)
  • +
  • Исправление ошибки вычисления позиции колонтитулов. Запрещено изменять номер страницы в заголовке во время подсчета (Bug #55403)
  • +
  • Исправление ошибки вычисления позиции изображения в таблице, имеющей вертикальное выравнивание "по середине" и "по нижнему краю" (Bug #55406)
  • +
  • Исправление функции подсчета количества страниц (Bug #55458)
  • +
  • Исправление ошибки вычисления позиции текста в ячейке, имеющей поворот (Bug #54200)
  • +
  • Исправление горячих клавиш Shift + '(' (Bug #55356)
  • +
+

Редактор таблиц

+
    +
  • Исправление открытия защищенной книги в Excel (Bug #55027)
  • +
  • Исправление JS ошибки при замене пустой ячейки с помощью "Поиск и Замена" (Bug #54999)
  • +
  • Исправление совместимости некоторых файлов с Excel (Bug #54956)
  • +
+

Редактор презентаций

+
    +
  • Исправление позиции фигуры в режиме слайдшоу (Bug #55068)
  • +
diff --git a/common/changes/7.1.0/changes.html b/common/changes/7.1.0/changes.html new file mode 100644 index 000000000..faacaa9be --- /dev/null +++ b/common/changes/7.1.0/changes.html @@ -0,0 +1,52 @@ +

ONLYOFFICE Desktop Editors 7.2.1 - 2022-05-13

+

New Features

+
    +
  • Use system scaling option for screen on Windows 10 and later
  • +
  • New menu for inserting shapes (with list of recent used)
  • +
  • Ability to edit points of a selected shapes
  • +
  • Ability to open new diagram types: Pyramid, Bar (Pyramid), vertical and horizontal cylinders, vertical and horizontal cones
  • +
  • Ability to crop a selected image to shape
  • +
  • Ability to see your file protection password when entering it
  • +
  • Support for SmartArt objects without converting into a group of objects
  • +
  • New interface languages: Galego/Galician
  • +
  • Gradient fill icon shows the chosen colors
  • +
+

Document Editor

+
    +
  • Ability to convert PDF/XPS files into editable files
  • +
  • New toolbar tab: View
  • +
  • Ability to accept/reject changes from the context menu
  • +
  • Ability to use special symbols when searching within documents
  • +
  • Ability to add a period with a double-space
  • +
  • Add Chinese/Japanese/Italian language to Watermark settings
  • +
  • New viewer for PDF, XPS, DJVU files with major performance improvements All operations are performed on the client side
  • +
  • Ability to use the Page Thumbnails panel and to display the document's contents on the left sidebar for PDF files
  • +
  • Support for external and internal links in PDF opening
  • +
  • Ability to use Hand/Select tools in PDF viewer
  • +
  • The Document Info section of the Data tab contains information about PDF, XPS, DJVU files
  • +
+

Spreadsheet Editor

+
    +
  • Using a built-in preview panel before printing out a spreadsheet
  • +
  • New view settings: Combine sheet and status bars, Always show toolbar, Interface theme, Show frozen panes shadow
  • +
  • New currencies as per ISO 4217 without needing to change the locale
  • +
  • Using tips when working with formulas for tables
  • +
  • Ability to set a text qualifier when importing text from TXT/CSV
  • +
  • Support for XLSB files for opening
  • +
+

Presentation Editor

+
    +
  • New toolbar tabs: Animation, View
  • +
  • Animations can be added to the presentation
  • +
  • Ability to duplicate slides using the Add slide menu
  • +
  • Ability to move a slide to beginning/end using a slide context menu
  • +
  • Ability to add a period with double-space
  • +
+

Forms

+
    +
  • Ability to zoom a form
  • +
+

Fixes

+
    +
  • All editors received countless fixes
  • +
\ No newline at end of file diff --git a/common/changes/7.1.0/changes_ru.html b/common/changes/7.1.0/changes_ru.html new file mode 100644 index 000000000..eff784aa6 --- /dev/null +++ b/common/changes/7.1.0/changes_ru.html @@ -0,0 +1,53 @@ +

ONLYOFFICE Desktop Editors 7.2.1 - 2022-05-13

+

Новые функции

+
    +
  • Используются системные настройки масштабирования для монитора на Windows 10 и выше
  • +
  • Новое меню для вставки или изменения автофигур
  • +
  • Новый раздел с последними использованными автофигурами на вкладке Вставка
  • +
  • Возможность изменять точки выбранной автофигуры
  • +
  • Поддержка новых типов диаграмм: вертикальные и горизонтальные пирамиды, вертикальные и горизонтальные цилиндры, вертикальные и горизонтальные конусы
  • +
  • Возможность обрезки изображения по фигуре
  • +
  • Возможность просмотра пароля при вводе
  • +
  • Поддержка объектов SmartArt при открытии без конвертации в группу фигур
  • +
  • Новый язык интерфейса Galego
  • +
  • Миниатюры градиентной заливки генерируются в зависимости от выбранных цветов
  • +
+

Редактор документов

+
    +
  • Возможность конвертации PDF и XPS файлов в редактируемые форматы
  • +
  • Новая вкладка Просмотр
  • +
  • Возможность принимать или отклонять рецензирование из контекстного меню
  • +
  • Возможность использовать спецсимволы для поиска
  • +
  • Возможность автозамены двойного пробела точкой
  • +
  • Китайский, японский, итальянский языки в настойках watermark
  • +
  • Новый просмотрщик PDF, XPS, DJVU файлов с многочисленными улучшениями
  • +
  • Возможность просмотра миниатюр и навигации по содержанию для режима просмотра PDF
  • +
  • Поддержка внешних и внутренних ссылок при открытии PDF
  • +
  • Возможность использования обычного курсора или курсора-руки при просмотре PDF
  • +
  • Расширенная информация в Сведениях о документе при открытии PDF, XPS, DJVU файлов
  • +
+

Редактор таблиц

+
    +
  • Панель предварительного просмотра перед печатью
  • +
  • Новые настройки на вкладке Просмотр: объединение строки листов и состояния, Всегда отображать панель инструментов, Тема интерфейса, Показывать тень для закрепленных областей
  • +
  • Расширен список валют для денежного формата ячеек в соответствии с ISO 4217 без необходимости изменения локализации
  • +
  • Подсказки в формулах для форматированных таблиц
  • +
  • Возможность выбора разделителя при импорте TXT или CSV
  • +
  • Добавлено открытие файлов формата XLSB
  • +
+

Редактор презентаций

+
    +
  • Добавлены вкладки Анимация и Просмотр
  • +
  • Возможность добавления анимации в презентацию
  • +
  • Возможность дублирования слайда из меню Добавить слайд
  • +
  • Возможность переместить слайд в начало или конец презентации, используя контекстное меню
  • +
  • Возможность автозамены двойного пробела точкой
  • +
+

Формы

+
    +
  • Возможность изменения масштаба документа в режиме заполнения форм
  • +
+

Исправления

+
    +
  • Многочисленные исправления всех компонентов
  • +
diff --git a/common/changes/7.1.1/changes.html b/common/changes/7.1.1/changes.html new file mode 100644 index 000000000..93eecbb7b --- /dev/null +++ b/common/changes/7.1.1/changes.html @@ -0,0 +1,31 @@ +

ONLYOFFICE Desktop Editors 7.2.1 - 2022-07-13

+

Fixes

+

All Editors

+
    +
  • Fix rendering list of fonts if there is a lot of fonts (Bug #46495)
  • +
  • Fix rendering of some Chinese fonts (Bug #48564)
  • +
  • Update help entries
  • +
+

Document Editor

+
    +
  • Fix lost text box in Header (Bug #56940)
  • +
  • Fix incorrect table width for some doc file (Bug #56901)
  • +
  • Fix convert of some docx files (Bug #57068, Bug #57177)
  • +
  • Fix color of SmartArt figures in docx -> odt convert (Bug #57104)
  • +
  • Fix page count in specific doc file (Bug #57334)
  • +
  • Fix insert page with merge cells and drag'n'drop (Bug #57305)
  • +
  • Fix zoom while touch-pad scrolling (Bug #56029)
  • +
  • Hide "Create new" for offline pdf/djvu/xps files
  • +
+

Spreadsheet Editor

+
    +
  • Fix all sheets display while saving as pdf (Bug #49163)
  • +
  • Fix zoom change with touch-pad on MacOS (Bug #57249)
  • +
+

Presentation Editor

+
    +
  • Fix re-save of some pptx files (Bug #57070)
  • +
  • Fix test align for some odp files (Bug #57214)
  • +
  • Fix saving SmartArt in groups (Bug #57112)
  • +
  • Fix crash on drawing animation labels by shape track
  • +
diff --git a/common/changes/7.1.1/changes_ru.html b/common/changes/7.1.1/changes_ru.html new file mode 100644 index 000000000..c3e2aeb91 --- /dev/null +++ b/common/changes/7.1.1/changes_ru.html @@ -0,0 +1,31 @@ +

ONLYOFFICE Desktop Editors 7.2.1 - 2022-07-13

+

Исправления

+

Все редакторы

+
    +
  • Исправлена отрисовка в списке шрифтов при большом количестве шрифтов (Bug #46495)
  • +
  • Исправлена отрисовка китайских шрифтов (Bug #48564)
  • +
  • Обновлены разделы справки
  • +
+

Редактор документов

+
    +
  • Исправлено отображение текстового поля в колонтитуле (Bug #56940)
  • +
  • Исправлено некорректное отображение таблицы для определенных doc файлов (Bug #56901)
  • +
  • Исправлена конвертация некоторых docx файлов (Bug #57068, Bug #57177)
  • +
  • Исправлен цвет SmartArt автофигур при конвертации docx -> odt (Bug #57104)
  • +
  • Исправлено определение количества страниц для определенных doc файлов (Bug #57334)
  • +
  • Исправлена вставка страницы с объединенной ячейкой через drag'n'drop (Bug #57305)
  • +
  • Исправлено масштабирование во время прокрутки документа через сенсорную панель (Bug #56029)
  • +
  • Убрали опцию "Создать новый..." для оффлайн pdf/djvu/xps файлов
  • +
+

Редактор таблиц

+
    +
  • Исправлено отображение листов в процессе сохранения в формат pdf (Bug #49163)
  • +
  • Исправлено изменение масштаба с помощью сенсорной панели на MacOS (Bug #57249)
  • +
+

Редактор презентаций

+
    +
  • Исправлено повторное сохранение определенных pptx файлов (Bug #57070)
  • +
  • Исправлено выравнивание текста в определенных odp файлах (Bug #57214)
  • +
  • Исправлено сохранение SmartArt в группах (Bug #57112)
  • +
  • Исправлено падение при отрисовке надписей анимации во время перемещения фигуры
  • +
diff --git a/common/changes/7.2.0/changes.html b/common/changes/7.2.0/changes.html new file mode 100644 index 000000000..e27d4d632 --- /dev/null +++ b/common/changes/7.2.0/changes.html @@ -0,0 +1,59 @@ +

ONLYOFFICE Desktop Editors 7.2.1 - 2022-09-23

+

New Features

+
    +
  • Show warning on macros execution if connection to another host. Fix CVE-2021-43446
  • +
  • Vector printing if the page does not contain gradient fills
  • +
  • Removed the restriction on the minimum window size
  • +
  • Top toolbar optimizations for smaller screens
  • +
  • Added the ability to choose "Contrast Dark" or "System default" interface theme
  • +
  • Redone of icons in header line
  • +
  • Redone of settings page in the editors
  • +
  • New interface languages - "Portuguese (Portugal)" and "Armenian"
  • +
  • Improved color selection component
  • +
  • The ability to disable the alternative menu in the editors
  • +
  • Completely redesigned search inside the document
  • +
  • New hotkeys for "Special Paste"
  • +
  • Added "Cut" and "Select All" buttons to the toolbar next to Copy/Paste
  • +
  • Major improvements in Font engine (For languages like Bengali or Sinhala) (only in Document Editor and Presentation Editor)
  • +
  • Ligatures support
  • +
  • Ability to insert tables as OLE object
  • +
  • Support for images as a bulleted list and the ability to work with them
  • +
  • Major improvements in "EMF" and "WMF" files rendering
  • +
+

Document Editor

+
    +
  • Ability to remove Header/Footer from toolbar
  • +
  • Ability to insert current heading in TOC
  • +
  • New warning if there is no TOC in document
  • +
  • Navigation panel renamed to "Headings"
  • +
  • Major improvements in "pdf", "djvu", "xps" convert to "docx"
  • +
  • Correct display greek letters as numbered list items
  • +
+

Spreadsheet Editor

+
    +
  • Ability to "Switch rows and columns" for Chart
  • +
  • New "Italiano (Svizzera)" language for regional settings
  • +
  • Row number highlight for filter
  • +
  • Remove "First sheet" and "Last sheet" from bottom toolbar
  • +
  • Selection of copied range
  • +
  • Pivot table option - "Auto-fit column widths on update"
  • +
  • 1904 date system support
  • +
+

Presentation Editor

+
    +
  • Animation with Custom path
  • +
  • New advanced settings "Placement" tab for graphic images
  • +
  • Added VLC libs so codecs are not required for video and audio playback
  • +
+

Forms

+
    +
  • Search in embedded and forms mode
  • +
  • Change field width for "Comb of characters"-enabled field
  • +
  • Ability to set tag for field
  • +
  • New "Format" and "Allowed Symbols" settings for field
  • +
  • New field types - "Phone number", "Email Address" and "Complex Field"
  • +
+

Fixes

+
    +
  • All editors received countless fixes
  • +
\ No newline at end of file diff --git a/common/changes/7.2.0/changes_ru.html b/common/changes/7.2.0/changes_ru.html new file mode 100644 index 000000000..c0c0af2ec --- /dev/null +++ b/common/changes/7.2.0/changes_ru.html @@ -0,0 +1,59 @@ +

ONLYOFFICE Desktop Editors 7.2.1 - 2022-09-23

+

Новые функции

+
    +
  • Предупреждение с запросом разрешения пользователя при выполнении запросов из макросов (исправление CVE-2021-43446)
  • +
  • Векторная печать текста, если на странице нет градиентных заливок
  • +
  • Убран минимальный размер окна
  • +
  • Уменьшение кнопок на тулбаре за счет переноса текста
  • +
  • "Темная контрастная" и "Системная" темы интерфейса
  • +
  • Обновлено поведение иконок на тулбаре
  • +
  • Обновленная страница "Дополнительные параметры"
  • +
  • Новые языки интерфейса - "Армянский" и "Португальский (Португалия)"
  • +
  • Изменен компонент для выбора цвета
  • +
  • Возможность отключения вызова альтернативного меню в редакторах
  • +
  • Полностью изменен дизайн окна поиска в редакторах
  • +
  • Горячие клавиши для "Специальной вставки"
  • +
  • Добавлены кнопки "Вырезать" и "Выделить все" на главном тулбаре рядом с "Копировать" и "Вставить"
  • +
  • Значительно улучшена работа с текстом и шрифтами и добавлена поддержка таких языков как Бенгали и Сингальский (только в редакторе документов и презентаций)
  • +
  • Добавлена настройка лигатур
  • +
  • Возможность вставки электронных таблиц в виде OLE-объектов
  • +
  • Возможность выбора изображения в качестве маркера для списка
  • +
  • Значительно улучшено отображение "EMF" и "WMF" файлов
  • +
+

Редактор документов

+
    +
  • Удаление колонтитулов из тулбара
  • +
  • Кнопка включения текущего заголовка в оглавление
  • +
  • Предупреждение при обновлении таблицы оглавления, если в документе его нет
  • +
  • Панель навигации переименована в "Заголовки"
  • +
  • Значительное улучшение конвертации "PDF", "DjVu" и "XPS" в "DOCX"
  • +
  • Греческие символы в нумерованных списках на открытие
  • +
+

Редактор таблиц

+
    +
  • Возможность "Переключить строку/столбец" в настройках диаграммы
  • +
  • В региональные настройки добавлен язык "Italiano (Svizzera)"
  • +
  • Подсветка номеров строк при фильтрации данных
  • +
  • Убраны кнопки "Первый лист" и "Последний лист" из статус бара
  • +
  • Выделение скопированного диапазона
  • +
  • Настройка для отключения "Автоматически изменять ширину столбцов при обновлении"
  • +
  • Настройка системы дат 1904
  • +
+

Редактор презентаций

+
    +
  • Добавлена анимация движения "Пользовательский путь"
  • +
  • Новая вкладка "Положение" для графических объектов
  • +
  • Библиотеки VLC для воспроизведения видео и аудио
  • +
+

Формы

+
    +
  • Добавлено окно для поиска
  • +
  • Настройка ширины ячейки для форм с включенной опцией "Комбинировать символы"
  • +
  • Добавлена настройка Тег для полей
  • +
  • Новые настройки "Формат" и "Допустимые символы" для полей
  • +
  • Новые поля для ввода "Номер телефона", "Адрес Email" и "Составное поле"
  • +
+

Исправления

+
    +
  • Многочисленные исправления всех компонентов
  • +
diff --git a/common/changes/7.2.1/changes.html b/common/changes/7.2.1/changes.html new file mode 100644 index 000000000..a0b15635e --- /dev/null +++ b/common/changes/7.2.1/changes.html @@ -0,0 +1,75 @@ +

ONLYOFFICE Desktop Editors 7.2.1 - 2022-10-21

+

New Features

+
    +
  • Add support for the 'REGISTER_NONE' and 'REGISTER_' parameters to set associations during silent installation of msi package (Windows only).
  • +
+

Fixes

+
    +
  • Major improvements in the fonts render engine. Removal of `Alternative input` settings
  • +
  • Fix opening the "Open Files" window (Bug #33107)
  • +
  • Fix image loss when printing a file on Linux (Bug #59266)
  • +
  • Fix image cropping when printing a file (Bug #59263)
  • +
  • Fix the application crash when printing the PPTX file (Bug # 59354)
  • +
  • Fix the application crash when printing the PDF file which contains a raster image (Bug #59161)
  • +
  • Fix printing images in the OXPS files (Bug #59226)
  • +
  • Fix printing 3D charts (Bug #59187)
  • +
  • Fix printing the current page of the XLSX file (Bug #59208)
  • +
  • Fix proportions when printing on a sheet which does not coincide with the original format (Bug #59223)
  • +
  • Fix simultaneous opening of several application windows by shortcut (Bug # 36633)
  • +
  • Fix updating data about the VCRedist 2013 package installation (Bug #58771)
  • +
  • Fix switching to the correct tab when opening a file with Drag'n'Drop (Bug #59024)
  • +
  • Fix image rotation when printing a file (Bug #59258)
  • +
  • Fix closing a document which are opened in separate window using the context menu (Bug #58347)
  • +
  • Fix choosing a certificate when signing a document on Linux (Bug #59116)
  • +
  • Bring the Contrast Dark theme name to a single view in the application settings (Bug #58753)
  • +
  • Fix the problem with the window focus when clicking on the document area (Bug #56672)
  • +
  • Change the name of the system theme in the application settings from System default to Same as system (Bug #59010)
  • +
+

Document Editor

+
    +
  • Fix numbering in Portuguese or Basque language (Bug #59091)
  • +
  • Fix the problem with review types when splitting a paragraph (Bug #58512)
  • +
  • Fix the problem with the special paste button (Bug #59149)
  • +
  • Fix crash on opening docx (Bug #59212)
  • +
  • Fix the problem with reading the `rPrChange` property and review such files (Bug #59205)
  • +
  • Fix scrolling in the co-edit view mode (Bug #57928)
  • +
  • Fix the problem with performing the global undo (Bug #59270)
  • +
  • Fix the problem with setting the bold property for text in the complex script (Bug #59289)
  • +
  • Fix the special paste position (Bug #59139)
  • +
  • Fix saving a document in the Final / Original modes (Bug #59347)
  • +
  • Fix the problem with updating content of a Ref field (Bug #58606, Bug #59278)
  • +
+

Spreadsheet Editor

+
    +
  • Fix hangup on opening the xlsx file (Bug #58112)
  • +
  • Fix special paste via hotkeys (Bug #59148)
  • +
+

Presentation Editor

+
    +
  • Fix animations problems (Bug #59301)
  • +
  • Fix opening the pptx file (Bug #59308)
  • +
+

PDF Viewer

+
    +
  • Fix search highlight (Bug #59069)
  • +
  • Fix tooltip language for preview (Bug #59087)
  • +
+

Forms

+
    +
  • Implement saving text field formats to PDF (Bug #58901)
  • +
  • Add a default form key when creating new forms
  • +
  • Fix image track display (Bug #59120)
  • +
  • Fix the problem with highlight of a fixed form (Bug #59105)
  • +
  • Fix duplicating fixed forms when saving to PDF
  • +
  • Fix saving a form field format (Bug #58901)
  • +
  • Fix the problem with converting a complex field to a fixed form (Bug #59262)
  • +
  • Fix field detection in selection (Bug #59278)
  • +
  • Fix the problem with entering text to a form (Bug #59290)
  • +
  • Fix the context menu for some forms files (Bug #59278)
  • +
  • Fix the problem with working with complex fields and simple fields (Bug #59345)
  • +
  • Fix keys list problems (Bug #59377)
  • +
  • Fix the problem with canceling filling in the form on form blur (Bug #59373)
  • +
  • Fix the problem with a key of complex forms (Bug #59374)
  • +
  • Fix the complex form filling problem for forms with the same key (Bug #59375)
  • +
  • Fix the problem with printing form borders filled with placeholders (Bug #59378)
  • +
diff --git a/common/changes/7.2.1/changes_ru.html b/common/changes/7.2.1/changes_ru.html new file mode 100644 index 000000000..0e1c50989 --- /dev/null +++ b/common/changes/7.2.1/changes_ru.html @@ -0,0 +1,65 @@ +

ONLYOFFICE Desktop Editors 7.2.1 - 2022-10-21

+

Новые функции

+
    +
  • Добавлена поддержка опций 'REGISTER_NONE' и 'REGISTER_<тип_файла>' для установки ассоциаций в режиме тихой установки msi на Windows.
  • +
+

Исправления

+
    +
  • Значительные улучшения отрисовщика шрифтов. Убрана настройка альтернативного ввода 'Иероглифы'
  • +
  • Исправлен вызов окна «Открыть Файл» (Bug #33107)
  • +
  • Исправлена потеря изображений при печати Linux системах(Bug #59266)
  • +
  • Исправлена обрезка изображений при печати (Bug #59263)
  • +
  • Исправлено падение приложения при печати PPTX файла (Bug #59354)
  • +
  • Исправлено падение приложения при печати PDF файлов, содержащих растровые изображения (Bug #59161)
  • +
  • Исправлена печать изображений в OXPS файлах (Bug #59226)
  • +
  • Исправлена печать 3D диаграмм (Bug #59187)
  • +
  • Исправлена печать текущего листа в XLSX файлах (Bug #59208)
  • +
  • Исправлено непропорциональное растяжение листа XLSX файла при печати, если исходный формат отличается от формата принтера (Bug #59223)
  • +
  • Исправлено одновременное открытие нескольких главных окон приложения (Bug #36633)
  • +
  • Исправлено обновление данных о пакете VCRedist 2013 без его установки (Bug #58771)
  • +
  • Исправлено переключение приложения на документ, если он открыт переносом (Bug #59024)
  • +
  • Исправлено масштабирование и поворот изображения при печати (Bug #59258)
  • +
  • Исправлено закрытие отдельного окна приложения через контекстное меню панели задач (Bug #58347)
  • +
  • Исправлен вызов окна выбора сертификата при подписании документа, если он открыт в отдельном окне для Linux систем(Bug #59116)
  • +
  • Исправлена проблема с переключением фокуса после клика в документ в отдельном окне (Bug #56672)
  • +
  • Название системной темы в окне приложения и редакторах приведено к общему виду (Bug #59010)
  • +
+

Редактор документов

+
    +
  • Исправлены проблемы с нумерацией на португальском или баскском языках (Bug #59091)
  • +
  • Исправлена проблема определения рецензирования при разрыве параграфа в процессе ввода текста (Bug #58512)
  • +
  • Исправлена проблема с отображением кнопки специальной вставки (Bug #59149)
  • +
  • Исправлено падение при открытии определенного DOCX (Bug #59212)
  • +
  • Исправлено чтение свойства `rPrChange` при открытии DOCX файлов (Bug #59205)
  • +
  • Исправлена прокрутка страницы в совместном редактировании и режиме просмотра с изменениями в реальном времени (Bug #57928)
  • +
  • Исправлены проблемы при выполнении общей отмены действий в режиме просмотра с изменениями в реальном времени (Bug #59270)
  • +
  • Исправлено применений свойства жирности для текста, введенного композитным вводом (Bug #59289)
  • +
  • Исправлена проблема с позицией кнопки специальной вставки (Bug #59139)
  • +
  • Исправлено сохранение документа в режимах Измененный документ / Исходный документ (Bug #59347)
  • +
  • Исправлена проблема с определением полей заголовков (Bug #59278, Bug #58606)
  • +
+

Редактор таблиц

+
    +
  • Исправлено зависание приложения при открытии определенного XLSX файла (Bug #58112)
  • +
  • Исправлена работа горячих клавиш специальной вставки (Bug #59148)
  • +
+

Редактор презентаций

+
    +
  • Исправлено применение анимации к объектам (Bug #59301)
  • +
  • Исправлено открытие определенного PPTX файла (Bug #59308)
  • +
+

Формы

+
    +
  • Реализовано сохранение формата текстовых полей в PDF (Bug #58901)
  • +
  • Добавлен ключ по умолчанию при создании новой формы
  • +
  • Исправлено отображение трека поля изображение (Bug #59120)
  • +
  • Исправлена проблема с заливкой поля фиксированного размера (Bug #59105)
  • +
  • Исправлено дублирование полей при сохранении формы в PDF
  • +
  • Исправлено заполнение составного поля фиксированного размера (Bug #59262)
  • +
  • Исправлена проблема при удалении композитного ввода в поле формы (Bug #59290)
  • +
  • Исправлены проблемы смешивания ключей полей разных типов (Bug #59377)
  • +
  • Исправлены проблемы при заполнении поля и ее отмены (Bug #59373)
  • +
  • Исправлено одновременное заполнение полей с различными ключами (Bug #59374)
  • +
  • Исправлено определение типов полей с различными ключами при их заполнении (Bug #59375)
  • +
  • Исправлена некорректная печать пустых составных полей (Bug #59378)
  • +
diff --git a/common/changes/7.3.0/changes.html b/common/changes/7.3.0/changes.html new file mode 100644 index 000000000..c880bb35a --- /dev/null +++ b/common/changes/7.3.0/changes.html @@ -0,0 +1,70 @@ +

ONLYOFFICE Desktop Editors 7.3.0 - 2023-01-31

+

New Features

+
    +
  • Unified appearance for tooltips (Windows, Linux)
  • +
  • Window shadow effect (Windows only)
  • +
  • Jump List (Tasks) for the application shortcut in the start menu and taskbar (Windows 7 and later)
  • +
  • Abandoning the third-party update window and reworking the Check for updates automatically option (Windows 7 and later)
  • +
  • Dialog windows (file manager and print) are replaced with the system ones (Linux only)
  • +
  • Support for xdg-desktop-portal in the file dialog window (Linux only)
  • +
  • Use the file name when printing to PDF by default (Linux only)
  • +
  • Equation quick access panel
  • +
  • 3D Rotation settings for 3D charts
  • +
  • Display of chart error bars (for opening only)
  • +
  • Inserting Smart Art objects
  • +
  • Uzbek dictionaries for spell checking: `Uzbek (Cyrillic)` and `Uzbek (Latin)`
  • +
  • Presets for inserting horizontal and vertical text boxes
  • +
  • Ability to hide left and right panel on the `View` tab of the top toolbar
  • +
  • Width of the styles / themes panel now fits the whole number of items
  • +
  • Grouping for table templates
  • +
  • Cell styles in the OLE object editor
  • +
  • Ability to resize dialog windows for editing charts, OLE objects, and mail merge recipients
  • +
  • Unified appearance for dialog windows, context menus, toolbar, etc.
  • +
  • Optimizing display of comments
  • +
  • Changed metafiles conversion to SVG
  • +
  • Reading and writing PDF are combined in a single library to optimize work
  • +
  • Quick print function (Windows, Linux)
  • +
  • Changed default logic of work with local documents locked for editing (Windows, Linux)
  • +
+

Document Editor

+
    +
  • Support for entering equations in two modes (Unicode and LaTeX)
  • +
  • Ability to protect a document by setting a restriction on editing
  • +
  • Button for accessing to statistics in the status bar
  • +
  • Support of relative links to local files
  • +
+

Spreadsheet Editor

+
    +
  • Watch Window
  • +
  • Ability to select multiple items using Ctrl/Shift in the Watch Window
  • +
  • Support for new functions: `TEXTBEFORE`, `TEXTAFTER`, `TEXTSPLIT`, `VSTACK`, `HSTACK`, `TOROW`, `TOCOL`, `WRAPROWS`, `WRAPCOLS`, `TAKE`, `DROP`, `CHOOSEROWS`, `CHOOSECOLS`
  • +
  • Support for updating links to external files and the ability to create these links
  • +
  • Ability to add a link between files within the portal using Paste Special
  • +
  • Ability to insert data from the XML file (XML Spreadsheet 2003 is supported)
  • +
  • Changed preview size for cell styles
  • +
  • Support of relative links to local files
  • +
+

Presentation Editor

+
    +
  • Support for entering equations in two modes (Unicode and LaTeX)
  • +
  • Guides and Gridlines settings in the `View` tab and the context menu
  • +
  • Tooltips when moving guides and the ability to remove the selected guide
  • +
  • Paste Special parameters for a slide
  • +
  • Ability to save a shape (graphic object) as a picture in the context menu
  • +
+

Forms

+
    +
  • New fields: `Date and time`, `Zip Code`, `Credit Card`
  • +
  • Managing roles: adding, editing, removing roles, assigning them to fields
  • +
  • Ability to preview the `DOCXF` file from the point of view of each created role
  • +
+

Fixes

+
    +
  • Fix the XSS vulnerability when creating a new style
  • +
  • Changed the Signature Setup window
  • +
  • New captions to fields
  • +
  • Show sign date option is enabled by default when adding a signature
  • +
  • Tip in the Instructions for signer field
  • +
  • Fixed application path when installing MSI in non-English locales (DesktopEditors#1157)
  • +
  • All editors received countless fixes
  • +
\ No newline at end of file diff --git a/common/changes/7.3.0/changes_ru.html b/common/changes/7.3.0/changes_ru.html new file mode 100644 index 000000000..6992f719e --- /dev/null +++ b/common/changes/7.3.0/changes_ru.html @@ -0,0 +1,70 @@ +

ONLYOFFICE Desktop Editors 7.3.0 - 2023-01-31

+

Новые функции

+
    +
  • Всплывающие подсказки приведены к одному виду (Windows, Linux)
  • +
  • Добавлен эффект тени окна (Windows)
  • +
  • Добавлены Задачи для ярлыка приложения в меню Пуск и Панели задач (Windows 7 и выше)
  • +
  • Изменена опция «Проверять наличие обновлений автоматически» в настройках приложения (Windows 7 и выше)
  • +
  • Замена диалоговых окон (файлового менеджера и печати) приложения на системные (Linux)
  • +
  • Добавлена поддержка xdg-desktop-portal для файлового диалога (Linux)
  • +
  • При печати в PDF по умолчанию используется оригинальное имя файла (Linux)
  • +
  • Добавлена панель быстрого доступа к уравнениям
  • +
  • Добавлены настройки поворота для объемных диаграмм
  • +
  • Добавлено отображение планок погрешностей (только на открытие)
  • +
  • Добавлена возможность вставки SmartArt объектов
  • +
  • Добавлен узбекский словарь для проверки орфографии: «Uzbek (Cyrillic)» и «Uzbek (Latin)»
  • +
  • Добавлены шаблоны для вставки надписи
  • +
  • Во вкладку Вид верхней панели инструментов добавлены настройки скрытия правой и левой панелей
  • +
  • Ширина компонента со стилями и темами подстраивается под целое число элементов
  • +
  • Для шаблонов таблиц (во всех редакторах), сводных таблиц и стилей ячеек (в редакторе таблиц) добавлено разбиение по группам
  • +
  • В редактор OLE-объектов добавлены стили ячеек
  • +
  • Добавлена возможность изменять размеры окон диалогов редактирования диаграмм, OLE-объектов и получателей слияния
  • +
  • Реализован единый вид диалогов в редакторах, контекстных меню, тулбаре и т.п.
  • +
  • Оптимизировано отображения комментариев
  • +
  • Изменена конвертация метафайлов в SVG
  • +
  • Чтение и запись PDF объединено в одной библиотеке, для оптимизации работы
  • +
  • Добавлена функция быстрой печати (Windows, Linux)
  • +
  • Изменена логика работы по умолчанию с локальными документами, заблокированными для изменения (Windows, Linux)
  • +
+

Редактор документов

+
    +
  • Добавлена поддержка набора формул в двух режимах Unicode и LaTeX
  • +
  • Добавлена возможность защитить документ, выставив ограничение на редактирование
  • +
  • В строку состояния добавлена кнопка для доступа к статистике документа
  • +
  • Добавлена поддержка относительных ссылок на локальные файлы
  • +
+

Редактор таблиц

+
    +
  • Добавлено окно контрольного значения
  • +
  • В окне контрольного значения реализован множественный выбор элементов в списке (c Ctrl/Shift)
  • +
  • Добавлена поддержка новых функций: `TEXTBEFORE`, `TEXTAFTER`, `TEXTSPLIT`, `VSTACK`, `HSTACK`, `TOROW`, `TOCOL`, `WRAPROWS`, `WRAPCOLS`, `TAKE`, `DROP`, `CHOOSEROWS`, `CHOOSECOLS
  • +
  • Добавлена поддержка обновления ссылок на внешние файлы, а так же их создания
  • +
  • Добавлена возможность добавлять связь между файлами одного портала с помощью специальной вставки
  • +
  • Добавлена возможность вставки данных из XML файла (поддерживается XML Spreadsheet 2003)
  • +
  • Изменены размеры эскизов стилей ячеек
  • +
  • Добавлена поддержка относительных ссылок на локальные файлы
  • +
+

Редактор презентаций

+
    +
  • Добавлена поддержка набора формул в двух режимах Unicode и LaTeX
  • +
  • Добавлены настройки направляющих и сетки на вкладку Вид и в контекстное меню слайда
  • +
  • Добавлены подсказки при перемещении направляющих и возможность удаления выбранной направляющей
  • +
  • Добавлены опции специальной вставки для слайда
  • +
  • В контекстное меню добавлена возможность сохранять фигуру (графический объект) как рисунок
  • +
+

Формы

+
    +
  • Добавлены новые поля: «Дата и время», «Индекс», «Кредитная карта»
  • +
  • Добавлено управление ролями: добавление, редактирование, удаление и их назначение для полей
  • +
  • Возможность предварительного просмотра файла `DOCXF` с точки зрения каждой созданной роли
  • +
+

Исправления

+
    +
  • Исправлена XSS уязвимость при добавлении нового стиля
  • +
  • Изменено окно Настройка подписи
  • +
  • Добавлены подписи к полям
  • +
  • При добавлении подписи по умолчанию устанавливается опция «Показывать дату подписи в строке подписи»
  • +
  • В поле «Инструкции для подписывающего» добавлена подсказка
  • +
  • Исправлен путь приложения при установке MSI для систем с языками отличными от английского (DesktopEditors#1157)
  • +
  • Многочисленные исправления всех компонентов
  • +
diff --git a/common/changes/7.3.3/changes.html b/common/changes/7.3.3/changes.html new file mode 100644 index 000000000..0ed894f97 --- /dev/null +++ b/common/changes/7.3.3/changes.html @@ -0,0 +1,37 @@ +

ONLYOFFICE Desktop Editors 7.3.3 - 2023-03-16

+

Fixes

+
    +
  • Fix display of the editor window minimized in the Maximize mode (Bug 58402)
  • +
  • Fix moving the file placed in a separate window (for Linux) (Bug 45037)
  • +
  • Fix display of the application window when connecting the second monitor (Bug 60899)
  • +
  • Fix the year in the About section (for MacOS) (Bug 61421)
  • +
  • Fix the application vulnerability which allows to load a library from the home directory (for Linux) (Bug 60244)
  • +
  • Fix a new file name when creating in Polish interface language (Bug 60764)
  • +
  • Fix display of the Help contents (Bug 61144)
  • +
  • Fix an encrypted file name when saving, if it is specified in Cyrillic (Bug 61243)
  • +
  • Fix display of the More button when the application scaling is more than 100% (Bug 61219)
  • +
  • Fix crash of the editor when opening a document in a separate window (Bug 61262)
  • +
  • Fix display of the Print to PDF button in the Print preview window for German interface language (Bug 61510)
  • +
+

Spreadsheet Editor

+
    +
  • Fix hangup of the editor when printing the XLSX file (Bug 61019)
  • +
  • Fix display of the Edit formatting rule window when the interface scaling is 125% and 175% (Bug 60952)
  • +
  • Fix printing a spreadsheet if the page size settings are specified (Bug 61214)
  • +
  • Fix changing the date format when saving the workbook to PDF (Bug 56499)
  • +
  • Fix saving data to the PDF format from the XLSX file (Bug 60334)
  • +
+

Presentation Editor

+
    +
  • Fix crash when uploading a presentation to the Private Room (Bug 51001)
  • +
  • Fix display of the presentation themes in the Private Room with the Classic, Green leaf, Lines, Safari templates (Bug 61430)
  • +
+

PDF Viewer

+
    +
  • Fix endless loading of the PDF file (Bug 60923)
  • +
  • Fix printing an empty sheet in the PDF files (Bug 61192)
  • +
+

Forms

+
    +
  • Fix crash when opening the OFORM files (Bug 61142)
  • +
diff --git a/common/changes/7.3.3/changes_ru.html b/common/changes/7.3.3/changes_ru.html new file mode 100644 index 000000000..b8790039c --- /dev/null +++ b/common/changes/7.3.3/changes_ru.html @@ -0,0 +1,37 @@ +

ONLYOFFICE Desktop Editors 7.3.3 - 2023-03-16

+

Исправления

+
    +
  • Исправлено отображение окна редактора, свернутого в режиме Maximize (Bug 58402)
  • +
  • Исправлено перемещение файла, вынесенного в отдельное окно (для Linux) (Bug 45037)
  • +
  • Исправлено отображение окна приложения при подключении второго монитора (Bug 60899)
  • +
  • Исправлен год в разделе «О программе» (для MacOS) (Bug 61421)
  • +
  • Исправлена уязвимость приложения, позволяющая осуществить загрузку библиотеки из домашнего каталога (для Linux) (Bug 60244)
  • +
  • Исправлено имя нового файла при создании на польском языке интерфейса (Bug 60764)
  • +
  • Исправлено отображение содержимого в Справке (Bug 61144)
  • +
  • Исправлено имя зашифрованного файла при сохранении, если оно задано кириллицей, (Bug 61243)
  • +
  • Исправлено отображение кнопки «Ещё» при масштабе приложения более 100% (Bug 61219)
  • +
  • Исправлено падение редактора при открытии документа в отдельном окне (Bug 61262)
  • +
  • Исправлено отображение кнопки «Печать в PDF» в окне предварительного просмотра печати для немецкого языка интерфейса (Bug 61510)
  • +
+

Редактор таблиц

+
    +
  • Исправлено зависание редактора при печати XLSX файла (Bug 61019)
  • +
  • Исправлено отображение окна "Изменение правила форматирования" при масштабе интерфейса 125% и 175% (Bug 60952)
  • +
  • Исправлена печать таблицы, если указаны настройки размера страницы (Bug 61214)
  • +
  • Исправлено изменение формата даты при сохранении книги в PDF (Bug 56499)
  • +
  • Исправлено сохранение данных в PDF формат XLSX файла (Bug 60334)
  • +
+

Редактор презентаций

+
    +
  • Исправлено падение при загрузке презентации в приватную комнату (Bug 51001)
  • +
  • Исправлено отображение тем презентации приватной комнаты c шаблонами Classic, Green leaf, Lines, Safari (Bug 61430)
  • +
+

Формы

+
    +
  • Исправлено падение при открытии OFORM файлов (Bug 61142)
  • +
+

PDF

+
    +
  • Исправлена бесконечная загрузка PDF файла (Bug 60923)
  • +
  • Исправлена печать пустого листа в PDF файлах (Bug 61192)
  • +
diff --git a/common/changes/7.4.0/changes.html b/common/changes/7.4.0/changes.html new file mode 100644 index 000000000..61ca113a9 --- /dev/null +++ b/common/changes/7.4.0/changes.html @@ -0,0 +1,69 @@ +

ONLYOFFICE Desktop Editors 7.4.0 - 2023-06-14

+ +

New Features

+ +

All Editors

+
    +
  • The Templates section with online form search has been added to the main page
  • +
  • The application now uses system (native) dialog boxes
  • +
  • Added application update service for Windows systems
  • +
  • The pages in the File menu have been redesigned and correspond to a single style
  • +
  • The print preview window has added the ability to specify: page range, number of copies, printing on both sides and the Print to PDF button
  • +
  • The Draw tab has been added to the Editors toolbar
  • +
  • The Eyedropper tool and hints for color names have been added to the color selection menu
  • +
  • Added the ability to copy style between graphic objects
  • +
  • The Save as picture item has been added to the context menu of graphic objects
  • +
  • Added opacity settings for fill and borders of graphic objects; autoshapes, charts, images and others
  • +
  • Added support for Radar charts
  • +
  • Added formats for opening in Editors: MHTML, SXC, ET, ETT, SXI, DPS, DPT, SXW, STW, WPS, WPT
  • +
  • Column headers have been added in some dialog windows with lists
  • +
  • The number of results found has been added to the search box
  • +
  • Added regional settings for the Danish language da-DK (Dansk (Danmark))
  • +
  • Added help in Turkish
  • +
  • Added a new Plugin Manager
  • +
+

Document Editor

+
    +
  • Added the ability to merge documents
  • +
  • The ability to change the width and spacing of each column independently has been added to the column settings window
  • +
  • Expanded the number of settings for numbered and multi-level lists
  • +
  • Added the Recently used section in the lists menu for the current document
  • +
  • Added the ability to apply the list from the List Options window
  • +
  • Added the ability to export a document as PNG/JPG images
  • +
  • Added a list of exceptions for autocorrect capital letters
  • +
+

Spreadsheet Editor

+
    +
  • Add the support for new functions; SEQUENCE, XMATCH, EXPAND, FILTER, ARRAYTOTEXT, SORT
  • +
  • Added translation of formulas into Armenian
  • +
  • The ability to change the case of text has been added to the Home toolbar
  • +
  • Page Break Preview mode has been added to the View toolbar
  • +
  • In the Print range settings, the Current sheet option has been replaced with Active sheets
  • +
  • The ability to set First page number has been added to the print settings
  • +
  • Long/short date formats have been added to the drop-down list of cell formats
  • +
  • Items for working with pivot tables have been added to the context menu
  • +
  • The Protect sheet settings window now includes Allow edit ranges
  • +
  • Added the ability to export a spreadsheet as PNG/JPG images
  • +
+

Presentation Editor

+
    +
  • Added a list of exceptions for autocorrect capital letters
  • +
+

Forms

+
    +
  • The position of the forms with the Fixed size field option is now calculated from the beginning of the page
  • +
  • Fixed rendering of the frame at the active field for forms with the Fixed size field option
  • +
  • Ability to add a new form without leaving the current one
  • +
  • Filling in the view mode (the View Form button remains)
  • +
  • In Edit mode, the current shape has the same fill as all the others
  • +
  • It is forbidden to fill out forms inside a document sheet in Edit mode
  • +
  • Since it is forbidden to fill out forms in Edit mode, the default value setting (Default value) has been added to the right panel
  • +
  • Optimized the work of subforms inside complex forms
  • +
+ +

Fixes

+ +

All Editors

+
    +
  • Same as system item has been removed from the application settings (Interface theme) for Linux systems
  • +
diff --git a/common/changes/7.4.0/changes_ru.html b/common/changes/7.4.0/changes_ru.html new file mode 100644 index 000000000..3b13b2081 --- /dev/null +++ b/common/changes/7.4.0/changes_ru.html @@ -0,0 +1,69 @@ +

ONLYOFFICE Desktop Editors 7.4.0 - 2023-06-14

+ +

Новые функции

+ +

Все редакторы

+
    +
  • На главную страницу добавлен раздел Шаблоны с поиском форм онлайн
  • +
  • Приложение теперь использует системные диалоговые окна
  • +
  • Добавлен сервис обновления приложения для Windows систем
  • +
  • Страницы в меню Файл переработаны и соответствуют единому стилю
  • +
  • В окно предварительного просмотра печати добавлены возможности указать: диапазон страниц, количество копий, печать на обеих сторонах и кнопка Печать в PDF
  • +
  • На панель инструментов в редакторы добавлена вкладка Рисование
  • +
  • В меню выбора цвета добавлен инструмент Пипетка и подсказки для названий цветов
  • +
  • Добавлена возможность копировать стиль между графическими объектами
  • +
  • В контекстное меню графических объектов добавлен пункт Сохранить как рисунок
  • +
  • Добавлены настройки непрозрачности заливки и границ для графических объектов; автофигур, диаграмм, изображений и других
  • +
  • Добавлена поддержка лепестковых диаграмм
  • +
  • Добавлены форматы на открытие в редакторах: MHTML, SXC, ET, ETT, SXI, DPS, DPT, SXW, STW, WPS, WPT
  • +
  • В некоторых диалоговых окнах со списками добавлены заголовки столбцов
  • +
  • В окно поиска добавлено количество найденных результатов
  • +
  • Добавлены региональные настройки для датского языка da-DK (Dansk (Danmark))
  • +
  • Добавлена справка на турецком языке
  • +
  • Добавлен новый Менеджер плагинов
  • +
+

Редактор документов

+
    +
  • Добавлена возможность слияния документов
  • +
  • В окно настройки колонок добавлена возможность изменять ширину и интервал каждой независимо
  • +
  • Расширено количество настроек для нумерованных и многоуровневых списков
  • +
  • Добавлен раздел Последние использованные в меню списков для текущего документа
  • +
  • Добавлена возможность применять список из окна Параметры списка
  • +
  • Добавлена возможность экспорта документа в виде изображений формата PNG/JPG
  • +
  • Добавлен список исключений для автозамены заглавных букв
  • +
+

Редактор таблиц

+
    +
  • Добавлена поддержка новых функций; ПОСЛЕД, ПОИСКПОЗХ, РАЗВЕРНУТЬ, ФИЛЬТР, МАССИВВТЕКС, СОРТ
  • +
  • Добавлен перевод формул на армянский язык
  • +
  • На Главную панель инструментов добавлена возможность изменения регистра текста
  • +
  • На панели инструментов Вид добавлен Страничный режим
  • +
  • В настройках Диапазон печати опция Текущий лист заменена на Активные листы
  • +
  • В настройках печати добавлена возможность задавать Номер первой страницы
  • +
  • В раскрывающийся список форматов ячейки добавлены длинный/краткий форматы даты
  • +
  • В контекстное меню добавлены пункты для работы со сводными таблицами
  • +
  • Окно с настройками Защитить лист теперь включает в себя Разрешить редактировать диапазоны
  • +
  • Добавлена возможность экспорта электронной таблицы в виде изображений формата PNG/JPG
  • +
+

Редактор презентаций

+
    +
  • Добавлен список исключений для автозамены заглавных букв
  • +
+

Формы

+
    +
  • Позиция форм с опцией Поле фиксированного размера теперь рассчитывается от начала страницы
  • +
  • Исправлена отрисовка рамки у активного поля для форм с опцией Поле фиксированного размера
  • +
  • Возможность добавлять новую форму, не выходя из текущей
  • +
  • Заполнение в режиме просмотра (кнопка Посмотреть форму остается)
  • +
  • В режиме редактирования у текущей формы заливка такая же как и у всех остальных
  • +
  • Запрещено заполнение форм внутри листа документа в режиме редактирования
  • +
  • Поскольку запрещено заполнение форм в режиме редактирования, в правую панель добавлена настройка значения по-умолчанию (Значение по умолчанию)
  • +
  • Оптимизирована работа подформ внутри сложных форм
  • +
+ +

Исправления

+ +

Все редакторы

+
    +
  • Из настроек приложения удалён пункт Системная (Тема интерфейса) для Linux систем
  • +
diff --git a/common/changes/7.4.1/changes.html b/common/changes/7.4.1/changes.html new file mode 100644 index 000000000..74a774f76 --- /dev/null +++ b/common/changes/7.4.1/changes.html @@ -0,0 +1,33 @@ +

ONLYOFFICE Desktop Editors 7.4.1 - 2023-07-31

+ +

Fixes

+ +

All Editors

+
    +
  • Fixed vulnerabilities with checking the integrity of a digital signature, after manipulations with the document structure
  • +
  • Editors now display the correct error when trying to write a file, opened in another application
  • +
  • Fixed an error that occurs when opening multiple files using drag'n'drop
  • +
  • Fixed an issue when opening templates which contain slashes in their names
  • +
  • Fixed incorrect name for the next tab after closing and saving the document in front of it
  • +
  • The latest changes in the file are now included when sending via the Send plugin, if they have not been saved
  • +
  • Fixed the processing of the link, that ends with default.aspx, when connecting to the Workspace portal
  • +
  • The Open file location button for a document opened from the portal in a separate window without the main one now works
  • +
  • Fixed working with tabs when documents are opened from the portal and the user logs out on the Connect to cloud page
  • +
  • Fixed online help for macOS systems
  • +
  • Updated sets of application icons for Jump List (Tasks) on Windows systems
  • +
  • All components in Windows installation packages are now digitally signed
  • +
  • A large number of fixes and improvements to the MSI installation package
  • +
+

Document Editor

+
    +
  • Fixed displaying of nonprinting characters after calling the print preview window
  • +
+

Spreadsheet Editor

+
    +
  • Fixed displaying of a document when printing to PDF if the width/height of columns/rows were changed
  • +
  • Fixed the scrollbar display in the filtering window for legacy systems
  • +
+

Presentation Editor

+
    +
  • Fixed an error during slideshow autorun and with system scale >200% when opening multiple files using drag'n'drop
  • +
diff --git a/common/changes/7.4.1/changes_ru.html b/common/changes/7.4.1/changes_ru.html new file mode 100644 index 000000000..7f6be93b4 --- /dev/null +++ b/common/changes/7.4.1/changes_ru.html @@ -0,0 +1,33 @@ +

ONLYOFFICE Desktop Editors 7.4.1 - 2023-07-31

+ +

Исправления

+ +

Все редакторы

+
    +
  • Исправлены уязвимости с проверкой целостности цифровой подписи, после манипуляций со структурой документа
  • +
  • Редакторы теперь отображают корректную ошибку при попытке записать файл, открытый в другом приложении
  • +
  • Исправлена ошибка, возникающая при открытии нескольких файлов с помощью drag'n'drop
  • +
  • Исправлена проблема при открытии шаблонов, в имени которых присутствуют слэши
  • +
  • Исправлено некорректное имя для следующей вкладки после закрытия и сохранения документа перед ней
  • +
  • Последние изменения в файле теперь включаются при отправке через плагин Отправить, если не были сохранены
  • +
  • Исправлена обработка ссылки, которая заканчивается default.aspx, при подключении к Workspace порталу
  • +
  • Кнопка Открыть расположение файла для документа, открытого с портала в отдельном окне без главного, теперь работает
  • +
  • Исправлена работа с вкладками, когда документы открыты с портала и пользователь выходит из системы на странице Подключиться к облаку
  • +
  • Исправлена работа онлайн справки для macOS систем
  • +
  • Обновлены наборы иконок приложения для Списка Переходов (Задач) на системах Windows
  • +
  • Все компоненты в пакетах установки под Windows теперь имеют цифровую подпись
  • +
  • Большое количество исправлений и доработок пакета установки MSI
  • +
+

Редактор документов

+
    +
  • Исправлено отображение непечатаемых символов после вызова окна предварительного просмотра печати
  • +
+

Редактор таблиц

+
    +
  • Исправлено отображение документа при печати в PDF, если ширина/высота столбцов/строк были изменены
  • +
  • Исправлено отображение полосы прокрутки в окне фильтрации для устаревших систем
  • +
+

Редактор презентаций

+
    +
  • Исправлена ошибка во время автозапуска слайдшоу и с системным масштабом >200%, при открытии нескольких файлов с помощью drag'n'drop
  • +
diff --git a/common/changes/7.5.0/changes.html b/common/changes/7.5.0/changes.html new file mode 100644 index 000000000..49758ab9a --- /dev/null +++ b/common/changes/7.5.0/changes.html @@ -0,0 +1,47 @@ +

ONLYOFFICE Desktop Editors 7.5.0 - {{DATE}}

+ +

New Features

+ +

All Editors

+
    +
  • TODO
  • +
+

Document Editor

+
    +
  • TODO
  • +
+

Spreadsheet Editor

+
    +
  • TODO
  • +
+

Presentation Editor

+
    +
  • TODO
  • +
+

Forms

+
    +
  • TODO
  • +
+ +

Fixes

+ +

All Editors

+
    +
  • TODO
  • +
+

Document Editor

+
    +
  • TODO
  • +
+

Spreadsheet Editor

+
    +
  • TODO
  • +
+

Presentation Editor

+
    +
  • TODO
  • +
+

Forms

+
    +
  • TODO
  • +
diff --git a/common/changes/7.5.0/changes_ru.html b/common/changes/7.5.0/changes_ru.html new file mode 100644 index 000000000..858ab7bd3 --- /dev/null +++ b/common/changes/7.5.0/changes_ru.html @@ -0,0 +1,47 @@ +

ONLYOFFICE Desktop Editors 7.5.0 - {{DATE}}

+ +

Новые функции

+ +

Все редакторы

+
    +
  • TODO
  • +
+

Редактор документов

+
    +
  • TODO
  • +
+

Редактор таблиц

+
    +
  • TODO
  • +
+

Редактор презентаций

+
    +
  • TODO
  • +
+

Формы

+
    +
  • TODO
  • +
+ +

Исправления

+ +

Все редакторы

+
    +
  • TODO
  • +
+

Редактор документов

+
    +
  • TODO
  • +
+

Редактор таблиц

+
    +
  • TODO
  • +
+

Редактор презентаций

+
    +
  • TODO
  • +
+

Формы

+
    +
  • TODO
  • +
diff --git a/common/changes/template/changes.html b/common/changes/template/changes.html new file mode 100644 index 000000000..cac6d44d9 --- /dev/null +++ b/common/changes/template/changes.html @@ -0,0 +1,47 @@ +

ONLYOFFICE Desktop Editors 0.0.0 - {{DATE}}

+ +

New Features

+ +

All Editors

+
    +
  • TODO
  • +
+

Document Editor

+
    +
  • TODO
  • +
+

Spreadsheet Editor

+
    +
  • TODO
  • +
+

Presentation Editor

+
    +
  • TODO
  • +
+

Forms

+
    +
  • TODO
  • +
+ +

Fixes

+ +

All Editors

+
    +
  • TODO
  • +
+

Document Editor

+
    +
  • TODO
  • +
+

Spreadsheet Editor

+
    +
  • TODO
  • +
+

Presentation Editor

+
    +
  • TODO
  • +
+

Forms

+
    +
  • TODO
  • +
diff --git a/common/changes/template/changes_ru.html b/common/changes/template/changes_ru.html new file mode 100644 index 000000000..8c008b477 --- /dev/null +++ b/common/changes/template/changes_ru.html @@ -0,0 +1,47 @@ +

ONLYOFFICE Desktop Editors 0.0.0 - {{DATE}}

+ +

Новые функции

+ +

Все редакторы

+
    +
  • TODO
  • +
+

Редактор документов

+
    +
  • TODO
  • +
+

Редактор таблиц

+
    +
  • TODO
  • +
+

Редактор презентаций

+
    +
  • TODO
  • +
+

Формы

+
    +
  • TODO
  • +
+ +

Исправления

+ +

Все редакторы

+
    +
  • TODO
  • +
+

Редактор документов

+
    +
  • TODO
  • +
+

Редактор таблиц

+
    +
  • TODO
  • +
+

Редактор презентаций

+
    +
  • TODO
  • +
+

Формы

+
    +
  • TODO
  • +
diff --git a/win-linux/package/linux/Makefile b/win-linux/package/linux/Makefile index 1f662e894..6f66ec215 100644 --- a/win-linux/package/linux/Makefile +++ b/win-linux/package/linux/Makefile @@ -72,6 +72,12 @@ DEB_ASTRA = deb-astra/$(PACKAGE_NAME)_$(PACKAGE_VERSION)$(DEB_ASTRA_RELEASE_SUFF TAR = $(TAR_PACKAGE_DIR)/$(PACKAGE_NAME)-$(PACKAGE_VERSION)$(TAR_RELEASE_SUFFIX)-$(TAR_ARCH).tar.xz HELP_TAR = $(TAR_PACKAGE_DIR)/$(PACKAGE_NAME)-help-$(PACKAGE_VERSION)$(TAR_RELEASE_SUFFIX)-any.tar.xz +CHANGELOG_RPM = common/usr/share/doc/$(PACKAGE_NAME)/NEWS +CHANGELOG_RPM_M4 = common/usr/share/doc/NEWS.m4 +CHANGELOG_DEB = deb/build/debian/changelog +CHANGELOG_DEB_M4 = deb/template/changelog.m4 +CHANGELOG_DEB_ASTRA = deb-astra/build/debian/changelog + ifeq ($(COMPANY_NAME), ONLYOFFICE) DESKTOPEDITORS_PREFIX := $(COMPANY_NAME_LOW)/$(PRODUCT_NAME_LOW) DESKTOPEDITORS_EXEC := $(PACKAGE_NAME) @@ -101,8 +107,9 @@ endif LINUX_DEPS += $(BIN_FILES) LINUX_DEPS += $(DESKTOP_FILES) LINUX_DEPS += $(SYMLINK) +LINUX_DEPS += $(CHANGELOG_RPM) -DEB_DEPS += deb/build/debian/changelog +DEB_DEPS += $(CHANGELOG_DEB) DEB_DEPS += deb/build/debian/compat DEB_DEPS += deb/build/debian/control DEB_DEPS += deb/build/debian/postinst @@ -115,7 +122,7 @@ DEB_DEPS += deb/build/debian/$(PACKAGE_NAME).install DEB_DEPS += deb/build/debian/$(PACKAGE_NAME).links DEB_DEPS += deb/build/debian/$(PACKAGE_NAME)-help.install -DEB_ASTRA_DEPS += deb-astra/build/debian/changelog +DEB_ASTRA_DEPS += $(CHANGELOG_DEB_ASTRA) DEB_ASTRA_DEPS += deb-astra/build/debian/compat DEB_ASTRA_DEPS += deb-astra/build/debian/control DEB_ASTRA_DEPS += deb-astra/build/debian/postinst @@ -192,6 +199,14 @@ else endif RPM_PARAMS += --define '_binary_payload w7.xzdio' +CHANGES_DIR = ../../../common/changes +ifeq ($(COMPANY_NAME), ONLYOFFICE) + CHANGES_HTML = changes.html +else + CHANGES_HTML = changes_ru.html +endif +CHANGES_DIR_LIST = $(shell ls -r $(CHANGES_DIR) | grep -v template) + .PHONY: all clean branding packages rpm deb deb-astra apt-rpm suse-rpm tar desktopeditor qt-redist libstdc++-addon libc-addon all: rpm deb apt-rpm urpmi suse-rpm tar @@ -249,6 +264,8 @@ clean: apt-rpm/$(PACKAGE_NAME).spec \ urpmi/$(PACKAGE_NAME).spec \ suse-rpm/$(PACKAGE_NAME).spec \ + $(shell dirname $(CHANGELOG_RPM)) \ + $(CHANGES_DIR)/*/changes_??? \ $(INSTALLER) branding: $(BRANDING_DIR) @@ -310,6 +327,42 @@ deb/build/debian/% : deb/template/% deb/build/debian/% : deb/template/%.m4 mkdir -pv $(@D) && m4 $(M4_DEB_PARAMS) $< > $@ +$(CHANGELOG_DEB_ASTRA) : $(CHANGELOG_DEB) + mkdir -p $(shell dirname $(CHANGELOG_DEB_ASTRA)) + cp $(CHANGELOG_DEB) $(CHANGELOG_DEB_ASTRA) + +$(CHANGELOG_DEB) : $(CHANGELOG_DEB_M4) $(CHANGELOG_RPM) + $(foreach dir, \ + $(CHANGES_DIR_LIST), \ + $(shell \ + sed 's/^[^ *]/* &/' $(CHANGES_DIR)/$(dir)/changes_rpm | \ + sed 's/^/ /' \ + > $(CHANGES_DIR)/$(dir)/changes_deb; \ + mkdir -p deb/build/debian; \ + m4 $(M4_DEB_PARAMS) -D M4_PACKAGE_VERSION='$(dir)' -D M4_DATE='$(shell date -d "$(shell grep \"releasedate\" $(CHANGES_DIR)/$(dir)/$(CHANGES_HTML) | sed 's/.* - //' | sed 's/<\/span>.*//' | sed 's/{{DATE}}/$(shell date -R)/')" -R)' $(CHANGELOG_DEB_M4) | sed '2r $(CHANGES_DIR)/$(dir)/changes_deb' >> $(CHANGELOG_DEB))) + +$(CHANGELOG_RPM) : + $(foreach dir, \ + $(CHANGES_DIR_LIST), \ + $(shell \ + sed '/DOCTYPE/,/div class/d' $(CHANGES_DIR)/$(dir)/$(CHANGES_HTML) | \ + sed '/div class/,/html/d' | \ + sed 's/<\/li>//g' | \ + sed 's/<\/h4>//g' | \ + sed 's/<\/h2>/:/g' | \ + sed 's///g' | \ + sed 's/<\/code>//g' | \ + sed 's/ \{,\}
  • / - /g' | \ + sed 's/ \{,\}

    /* /g' | \ + sed 's/ \{,\}

    //g' | \ + sed '/
      /d' | \ + sed '/<\/ul>/d' | \ + sed '/

      /d' | \ + sed '/^$$/d' \ + > $(CHANGES_DIR)/$(dir)/changes_rpm; \ + mkdir -p $(shell dirname $(CHANGELOG_RPM)); \ + m4 $(M4_PARAMS) -D M4_VERSION='$(dir)' -D M4_DATE_SHORT='$(shell date -d "$(shell grep \"releasedate\" $(CHANGES_DIR)/$(dir)/$(CHANGES_HTML) | sed 's/.* - //' | sed 's/<\/span>.*//' | sed 's/{{DATE}}/$(shell date -R)/')" -I)' $(CHANGELOG_RPM_M4) | sed '2r $(CHANGES_DIR)/$(dir)/changes_rpm' >> $(CHANGELOG_RPM))) + deb/build/debian/$(PACKAGE_NAME).% : deb/template/package.%.m4 mkdir -pv $(@D) && m4 $(M4_DEB_PARAMS) $< > $@ diff --git a/win-linux/package/linux/common/usr/share/doc/NEWS.m4 b/win-linux/package/linux/common/usr/share/doc/NEWS.m4 new file mode 100644 index 000000000..4e5b036bb --- /dev/null +++ b/win-linux/package/linux/common/usr/share/doc/NEWS.m4 @@ -0,0 +1,3 @@ +News in M4_VERSION, M4_DATE_SHORT +------------------------- + diff --git a/win-linux/package/linux/deb/template/changelog.m4 b/win-linux/package/linux/deb/template/changelog.m4 index 6cb73bd67..791f9157f 100644 --- a/win-linux/package/linux/deb/template/changelog.m4 +++ b/win-linux/package/linux/deb/template/changelog.m4 @@ -1,6 +1,5 @@ -M4_PACKAGE_NAME (M4_PACKAGE_VERSION) stable; urgency=low +M4_PACKAGE_NAME (M4_PACKAGE_VERSION) stable; urgency=medium - * Initial release. - -- M4_PUBLISHER_NAME Wed, 21 Sep 2016 09:50:00 +0000 - \ No newline at end of file + -- M4_PUBLISHER_NAME M4_DATE + diff --git a/win-linux/package/linux/rpm/common.spec b/win-linux/package/linux/rpm/common.spec index 1a3c778c6..f24701e62 100644 --- a/win-linux/package/linux/rpm/common.spec +++ b/win-linux/package/linux/rpm/common.spec @@ -44,6 +44,8 @@ cp -r $COMMON/opt/desktopeditors/* $DESKTOPEDITORS_PREFIX cp -t $BIN_DIR $COMMON/usr/bin/%{_desktopeditors_exec} cp -t $DATA_DIR/applications $COMMON/usr/share/applications/%{_desktopeditors_exec}.desktop echo "package = rpm" > $DESKTOPEDITORS_PREFIX/converter/package.config +mkdir -p $DATA_DIR/doc/%{_desktopeditors_exec} +cp $COMMON/usr/share/doc/%{_desktopeditors_exec}/NEWS $DATA_DIR/doc/%{_desktopeditors_exec} %if "%{_company_name}" == "ONLYOFFICE" # help @@ -72,6 +74,7 @@ rm -rf "%{buildroot}" %files %attr(-, root, root) /opt/* %attr(-, root, root) %{_datadir}/applications/* +%attr(-, root, root) %{_datadir}/doc/* %attr(755, root, root) %{_bindir}/%{_desktopeditors_exec} %if "%{_company_name}" == "ONLYOFFICE" %attr(-, root, root) %{_bindir}/desktopeditors From 445e617441d9e125aec63bf5935f88f3940e4571 Mon Sep 17 00:00:00 2001 From: Roman Demidov Date: Wed, 27 Sep 2023 15:35:21 +0300 Subject: [PATCH 256/298] Fix bug 64068 : File mimeapps.list was changed after installation (#967) --- .../package/linux/deb/template/postinst.m4 | 18 +++--------------- win-linux/package/linux/rpm/common.spec | 17 +++-------------- 2 files changed, 6 insertions(+), 29 deletions(-) diff --git a/win-linux/package/linux/deb/template/postinst.m4 b/win-linux/package/linux/deb/template/postinst.m4 index b64430dc5..34306e083 100644 --- a/win-linux/package/linux/deb/template/postinst.m4 +++ b/win-linux/package/linux/deb/template/postinst.m4 @@ -20,23 +20,11 @@ if [ -x "$UPDATE_MENUS" ]; then update-menus fi -MIMEAPPS_LIST="/usr/share/applications/mimeapps.list" -if [ ! -f "$MIMEAPPS_LIST" ]; then - echo "[Default Applications]" >"$MIMEAPPS_LIST" -fi -if [ $(cat "$MIMEAPPS_LIST" | grep x-scheme-handler/M4_SCHEME_HANDLER | wc -l) -eq "0" ]; then - echo "x-scheme-handler/M4_SCHEME_HANDLER=M4_DESKTOPEDITORS_EXEC.desktop" >>"$MIMEAPPS_LIST" -fi -if [ $(cat "$MIMEAPPS_LIST" | grep text/docxf | wc -l) -eq "0" ]; then - echo "text/docxf=M4_DESKTOPEDITORS_EXEC.desktop" >>"$MIMEAPPS_LIST" -fi -if [ $(cat "$MIMEAPPS_LIST" | grep text/oform | wc -l) -eq "0" ]; then - echo "text/oform=M4_DESKTOPEDITORS_EXEC.desktop" >>"$MIMEAPPS_LIST" -fi - ifelse(M4_COMPANY_NAME, ONLYOFFICE, xdg-mime install --mode system /opt/M4_DESKTOPEDITORS_PREFIX/mimetypes/onlyoffice-docxf.xml -xdg-mime install --mode system /opt/M4_DESKTOPEDITORS_PREFIX/mimetypes/onlyoffice-oform.xml, +xdg-mime install --mode system /opt/M4_DESKTOPEDITORS_PREFIX/mimetypes/onlyoffice-oform.xml +update-mime-database /usr/share/mime +update-desktop-database /usr/share/applications, if [ -f /etc/astra_version ] && [ -f /etc/X11/trusted ]; then sed -i '\|/opt/M4_DESKTOPEDITORS_PREFIX/DesktopEditors|d' /etc/X11/trusted echo '/opt/M4_DESKTOPEDITORS_PREFIX/DesktopEditors(KBD_R)' >> /etc/X11/trusted diff --git a/win-linux/package/linux/rpm/common.spec b/win-linux/package/linux/rpm/common.spec index f24701e62..b377d76d9 100644 --- a/win-linux/package/linux/rpm/common.spec +++ b/win-linux/package/linux/rpm/common.spec @@ -124,23 +124,12 @@ if [ -x "$UPDATE_MENUS" ]; then update-menus fi -MIMEAPPS_LIST="/usr/share/applications/mimeapps.list" -if [ ! -f "$MIMEAPPS_LIST" ]; then - echo "[Default Applications]" >"$MIMEAPPS_LIST" -fi -if [ $(cat "$MIMEAPPS_LIST" | grep x-scheme-handler/%{_scheme_handler} | wc -l) -eq "0" ]; then - echo "x-scheme-handler/%{_scheme_handler}=%{_desktopeditors_exec}.desktop" >>"$MIMEAPPS_LIST" -fi -if [ $(cat "$MIMEAPPS_LIST" | grep text/docxf | wc -l) -eq "0" ]; then - echo "text/docxf=%{_desktopeditors_exec}.desktop" >>"$MIMEAPPS_LIST" -fi -if [ $(cat "$MIMEAPPS_LIST" | grep text/oform | wc -l) -eq "0" ]; then - echo "text/oform=%{_desktopeditors_exec}.desktop" >>"$MIMEAPPS_LIST" -fi - xdg-mime install --mode system /opt/%{_desktopeditors_prefix}/mimetypes/onlyoffice-docxf.xml xdg-mime install --mode system /opt/%{_desktopeditors_prefix}/mimetypes/onlyoffice-oform.xml +update-mime-database /usr/share/mime +update-desktop-database /usr/share/applications + # Update cache of .desktop file MIME types. Non-fatal since it's just a cache. #update-desktop-database > /dev/null 2>&1 || true From 04c1d12072e63e5a4bf7e171205d2562530739c0 Mon Sep 17 00:00:00 2001 From: Maxim Kadushkin Date: Thu, 28 Sep 2023 12:32:33 +0300 Subject: [PATCH 257/298] [start page] fix bug 64390 --- common/loginpage/src/panelabout.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/loginpage/src/panelabout.js b/common/loginpage/src/panelabout.js index 95dd96e73..1b5b9fbbe 100644 --- a/common/loginpage/src/panelabout.js +++ b/common/loginpage/src/panelabout.js @@ -154,7 +154,7 @@ this.view.$menuitem.removeClass('extra'); this.view.$panel.append(this.view.paneltemplate(args)); } else { - if ( !!args.opts?.edition ) { + if ( !!args.opts && !!args.opts.edition ) { $('#idx-ver-edition').html(args.opts.edition); } } From bfe7d81be0e32e77a56e0f980a80d5da3535882a Mon Sep 17 00:00:00 2001 From: Roman Demidov Date: Thu, 28 Sep 2023 13:06:08 +0300 Subject: [PATCH 258/298] Fix changes for changelog for DEB and RPM (#979) --- win-linux/package/linux/rpm/common.spec | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/win-linux/package/linux/rpm/common.spec b/win-linux/package/linux/rpm/common.spec index b377d76d9..347874c9a 100644 --- a/win-linux/package/linux/rpm/common.spec +++ b/win-linux/package/linux/rpm/common.spec @@ -44,8 +44,8 @@ cp -r $COMMON/opt/desktopeditors/* $DESKTOPEDITORS_PREFIX cp -t $BIN_DIR $COMMON/usr/bin/%{_desktopeditors_exec} cp -t $DATA_DIR/applications $COMMON/usr/share/applications/%{_desktopeditors_exec}.desktop echo "package = rpm" > $DESKTOPEDITORS_PREFIX/converter/package.config -mkdir -p $DATA_DIR/doc/%{_desktopeditors_exec} -cp $COMMON/usr/share/doc/%{_desktopeditors_exec}/NEWS $DATA_DIR/doc/%{_desktopeditors_exec} +mkdir -p $DATA_DIR/doc/%{_package_name} +cp $COMMON/usr/share/doc/%{_package_name}/NEWS $DATA_DIR/doc/%{_package_name} %if "%{_company_name}" == "ONLYOFFICE" # help From 6ca1d242b9db0e1eadef0da72d7e5afb4bca1298 Mon Sep 17 00:00:00 2001 From: Kirill Volkov Date: Thu, 28 Sep 2023 14:33:52 +0300 Subject: [PATCH 259/298] Change welcome imaage --- common/loginpage/res/img/welcome.svg | 2 -- common/loginpage/res/img/welcome_dark.svg | 2 -- 2 files changed, 4 deletions(-) diff --git a/common/loginpage/res/img/welcome.svg b/common/loginpage/res/img/welcome.svg index 2369567c5..fbe42c676 100644 --- a/common/loginpage/res/img/welcome.svg +++ b/common/loginpage/res/img/welcome.svg @@ -141,8 +141,6 @@ - - diff --git a/common/loginpage/res/img/welcome_dark.svg b/common/loginpage/res/img/welcome_dark.svg index 9f9ebfc17..cb3a5e3cc 100644 --- a/common/loginpage/res/img/welcome_dark.svg +++ b/common/loginpage/res/img/welcome_dark.svg @@ -140,8 +140,6 @@ - - From df0381751d7b0dc1a056078c832133559b2a56da Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Fri, 29 Sep 2023 00:03:47 +0300 Subject: [PATCH 260/298] [macos] fix for support pdf --- .../Code/TouchBar/Controllers/ASCTouchBarController.m | 4 ++++ macos/ONLYOFFICE/Code/TouchBar/Models/ASCTabTouchBar.h | 3 ++- macos/ONLYOFFICE/Code/TouchBar/Views/ASCTabTouchBarItem.m | 4 ++++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/macos/ONLYOFFICE/Code/TouchBar/Controllers/ASCTouchBarController.m b/macos/ONLYOFFICE/Code/TouchBar/Controllers/ASCTouchBarController.m index 2714fbb26..9cbae6051 100644 --- a/macos/ONLYOFFICE/Code/TouchBar/Controllers/ASCTouchBarController.m +++ b/macos/ONLYOFFICE/Code/TouchBar/Controllers/ASCTouchBarController.m @@ -186,6 +186,10 @@ - (BOOL)updateTabInfoFor:(ASCTabView *)tab { isChange = self.tabs[index].type != ASCTabTouchBarTypePresentation; self.tabs[index].type = ASCTabTouchBarTypePresentation; break; + case ASCTabViewTypePdf: + isChange = self.tabs[index].type != ASCTabTouchBarTypePdf; + self.tabs[index].type = ASCTabTouchBarTypePdf; + break; default: isChange = self.tabs[index].type != ASCTabTouchBarTypePortal; self.tabs[index].type = ASCTabTouchBarTypePortal; diff --git a/macos/ONLYOFFICE/Code/TouchBar/Models/ASCTabTouchBar.h b/macos/ONLYOFFICE/Code/TouchBar/Models/ASCTabTouchBar.h index f0d4c7f52..d66f2681c 100644 --- a/macos/ONLYOFFICE/Code/TouchBar/Models/ASCTabTouchBar.h +++ b/macos/ONLYOFFICE/Code/TouchBar/Models/ASCTabTouchBar.h @@ -47,7 +47,8 @@ typedef NS_ENUM(NSInteger, ASCTabTouchBarType) ASCTabTouchBarTypeSpreadsheet = 2, ASCTabTouchBarTypePresentation = 3, ASCTabTouchBarTypePortal = 4, - ASCTabTouchBarTypePage = 5 + ASCTabTouchBarTypePage = 5, + ASCTabTouchBarTypePdf = 6 }; NS_ASSUME_NONNULL_BEGIN diff --git a/macos/ONLYOFFICE/Code/TouchBar/Views/ASCTabTouchBarItem.m b/macos/ONLYOFFICE/Code/TouchBar/Views/ASCTabTouchBarItem.m index 8f03f7883..fb5b2e945 100644 --- a/macos/ONLYOFFICE/Code/TouchBar/Views/ASCTabTouchBarItem.m +++ b/macos/ONLYOFFICE/Code/TouchBar/Views/ASCTabTouchBarItem.m @@ -137,6 +137,10 @@ - (void)updateInfo { self.layer.backgroundColor = [[NSColor brendPresentationEditor] CGColor]; [_imageView setImage:[NSImage imageNamed:@"touchbar-tab-presentation"]]; break; + case ASCTabTouchBarTypePdf: + self.layer.backgroundColor = [[NSColor brandPdfEditor] CGColor]; + [_imageView setImage:[NSImage imageNamed:@"touchbar-tab-document"]]; + break; default: self.layer.backgroundColor = [[NSColor whiteColor] CGColor]; [_imageView setImage:[NSImage imageNamed:NSImageNameTouchBarOpenInBrowserTemplate]]; From f2e2093379d863cdd72fb01ff930a89af9c5ac0b Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Fri, 29 Sep 2023 09:28:30 +0300 Subject: [PATCH 261/298] [win-linux] update translations --- win-linux/langs/be.ts | 154 +++++++++++++++++---------------- win-linux/langs/bg.ts | 154 +++++++++++++++++---------------- win-linux/langs/ca.ts | 154 +++++++++++++++++---------------- win-linux/langs/cs.ts | 154 +++++++++++++++++---------------- win-linux/langs/da.ts | 154 +++++++++++++++++---------------- win-linux/langs/de.ts | 154 +++++++++++++++++---------------- win-linux/langs/el_GR.ts | 154 +++++++++++++++++---------------- win-linux/langs/en.qm | Bin 9807 -> 13619 bytes win-linux/langs/en.ts | 173 ++++++++++++++++++------------------- win-linux/langs/es.qm | Bin 13171 -> 20057 bytes win-linux/langs/es.ts | 173 ++++++++++++++++++------------------- win-linux/langs/et.ts | 154 +++++++++++++++++---------------- win-linux/langs/fi.ts | 154 +++++++++++++++++---------------- win-linux/langs/fr.qm | Bin 13147 -> 15592 bytes win-linux/langs/fr.ts | 179 ++++++++++++++++++++------------------- win-linux/langs/ga.ts | 154 +++++++++++++++++---------------- win-linux/langs/gl.ts | 154 +++++++++++++++++---------------- win-linux/langs/hi.ts | 154 +++++++++++++++++---------------- win-linux/langs/hr.ts | 154 +++++++++++++++++---------------- win-linux/langs/hu.ts | 154 +++++++++++++++++---------------- win-linux/langs/hy.qm | Bin 10950 -> 18795 bytes win-linux/langs/hy.ts | 172 ++++++++++++++++++------------------- win-linux/langs/id.ts | 154 +++++++++++++++++---------------- win-linux/langs/it_IT.qm | Bin 12955 -> 19895 bytes win-linux/langs/it_IT.ts | 175 +++++++++++++++++++------------------- win-linux/langs/ja.qm | Bin 10400 -> 12017 bytes win-linux/langs/ja.ts | 179 ++++++++++++++++++++------------------- win-linux/langs/ko.ts | 154 +++++++++++++++++---------------- win-linux/langs/lo.ts | 154 +++++++++++++++++---------------- win-linux/langs/lt.ts | 154 +++++++++++++++++---------------- win-linux/langs/lv.ts | 154 +++++++++++++++++---------------- win-linux/langs/nl.ts | 154 +++++++++++++++++---------------- win-linux/langs/no.ts | 154 +++++++++++++++++---------------- win-linux/langs/pl.ts | 154 +++++++++++++++++---------------- win-linux/langs/pt_BR.qm | Bin 12430 -> 18935 bytes win-linux/langs/pt_BR.ts | 178 +++++++++++++++++++------------------- win-linux/langs/pt_PT.ts | 154 +++++++++++++++++---------------- win-linux/langs/ro.qm | Bin 12811 -> 19453 bytes win-linux/langs/ro.ts | 173 ++++++++++++++++++------------------- win-linux/langs/ru.qm | Bin 12448 -> 18570 bytes win-linux/langs/ru.ts | 172 ++++++++++++++++++------------------- win-linux/langs/si.ts | 154 +++++++++++++++++---------------- win-linux/langs/sk.ts | 154 +++++++++++++++++---------------- win-linux/langs/sl.ts | 154 +++++++++++++++++---------------- win-linux/langs/sv.ts | 154 +++++++++++++++++---------------- win-linux/langs/tr.ts | 154 +++++++++++++++++---------------- win-linux/langs/uk.ts | 154 +++++++++++++++++---------------- win-linux/langs/vi.ts | 154 +++++++++++++++++---------------- win-linux/langs/zh_CN.qm | Bin 9150 -> 13266 bytes win-linux/langs/zh_CN.ts | 173 ++++++++++++++++++------------------- win-linux/langs/zh_TW.ts | 154 +++++++++++++++++---------------- 51 files changed, 3352 insertions(+), 3169 deletions(-) diff --git a/win-linux/langs/be.ts b/win-linux/langs/be.ts index 54053603d..17c208a7c 100644 --- a/win-linux/langs/be.ts +++ b/win-linux/langs/be.ts @@ -4,7 +4,7 @@ CAscApplicationManagerWrapper - + Presenter View Рэжым дакладчыка @@ -21,18 +21,18 @@ Усе вокны рэдактара будуць зачыненыя. Вы хочаце працягнуць? - - + + Document%1.docx Дакумент%1.docx - + Book%1.xlsx Кніга%1.xlsx - + Presentation%1.pptx Прэзентацыя%1.pptx @@ -40,8 +40,8 @@ CAscTabWidget - - + + Document Адкрываецца... @@ -144,22 +144,22 @@ CEditorWindow - + Open main window Адкрыць галоўнае акно - + Document must be saved to continue.<br>Save the document? Каб працягнуць, дакумент трэба захаваць.<br>Захаваць дакумент? - + Print Document Друкаваць дакумент - + Document must be saved firstly. Спачатку трэба захаваць дакумент. @@ -169,7 +169,7 @@ %1 быў зменены.<br>Хочаце захаваць змены? - + Some data will lost.<br>Continue? Калі вы працягнеце захоўваць у гэтым фармаце, усе функцыі, акрамя тэксту, будуць страчаны.<br>Вы ўпэўнены, што хочаце працягнуць? @@ -177,7 +177,7 @@ CEditorWindowPrivate - + There are no printers available @@ -515,43 +515,43 @@ - - + + File format not supported. Фармат файла не падтрымліваецца - + %1 doesn't exists!<br>Remove file from the list? %1 недаступны. Яго можна перайменаваць, перамясціць або выдаліць.<br>Хочаце выдаліць файл са спісу? - + Document must be saved firstly. Спачатку трэба захаваць дакумент. - + Document must be saved to continue.<br>Save the document? Каб працягнуць, дакумент трэба захаваць.<br>Захаваць дакумент? - + There are no printers available - + Print Document Друкаваць дакумент - + Sign Up Зарэгістравацца - + %1 is modified.<br>Do you want to keep changes? %1 быў зменены.<br>Захаваць змены? @@ -590,22 +590,22 @@ CPrintProgress - + Document is printing: page %1 of %2 Друкаванне дакумента: старонка %1 з %2 - + Document is preparing Рыхтаванне дакумента - + &Cancel &Скасаваць - + Printing... Друкаванне... @@ -614,147 +614,153 @@ CUpdateManager - - + + Last check performed - - - - - - - - - - + + + + + + + + + + - + + Check for updates - - - + + Unable to check update: URL not defined. + + + + + + To finish updating, restart app - - - + + + Restart - + Checking for updates... - + Updates are not allowed! - + This folder configuration does not allow for updates! The folder name should be: - + An error occurred while check updates: Update Service not found! - + Downloading new version %1 (%2%) - + An error occurred while loading updates: Update Service not found! - + Downloading new version %1 (0%) - - + + Cancel Скасаваць - + An error occurred while loading updates: package Url is empty! - + Update package error: md5 sum does not match the original. - + Preparing update... - + An error occurred while unzip updates: Update Service not found! - + Update is available (version %1) - + Download update - - + + Current version is up to date - + Update is available - - + + Current version - - + + Update version - + Would you like to download update now? - + Update is ready to install - + Would you like to restart app now? @@ -788,12 +794,12 @@ - + Access to file '%1' is denied! - + Read only @@ -852,12 +858,12 @@ - + An error occurred while start install updates! - + An error occurred while start replacing files: Update Service not found! diff --git a/win-linux/langs/bg.ts b/win-linux/langs/bg.ts index 839cd4c8d..c728caf01 100644 --- a/win-linux/langs/bg.ts +++ b/win-linux/langs/bg.ts @@ -4,7 +4,7 @@ CAscApplicationManagerWrapper - + Presenter View Изглед на водещия @@ -21,18 +21,18 @@ Всички редакторски прозорци ще бъдат затворени. Искате ли да продължите? - - + + Document%1.docx Документ%1.docx - + Book%1.xlsx Книга%1.xlsx - + Presentation%1.pptx Презентация%1.pptx @@ -56,8 +56,8 @@ CAscTabWidget - - + + Document Отваряне… @@ -160,22 +160,22 @@ CEditorWindow - + Open main window Отвори главен прозорец - + Document must be saved to continue.<br>Save the document? Документът трябва да бъде запазен, за да продължите.<br>Запазвате ли документа? - + Print Document Принтирай документ - + Document must be saved firstly. Документът първо трябва да бъде запазен. @@ -185,7 +185,7 @@ %1 бе модифициран.<br>Искате ли да запазите промените? - + Some data will lost.<br>Continue? Ако продължите да запазите в този формат, всички характеристики, освен текста, ще бъдат загубени.<br>Сигурни ли сте, че искате да продължите? @@ -193,7 +193,7 @@ CEditorWindowPrivate - + There are no printers available Няма налични принтери @@ -531,43 +531,43 @@ - - + + File format not supported. Форматът на файла не се поддържа. - + %1 doesn't exists!<br>Remove file from the list? %1 не е наличен. Може да е преименуван, преместен или изтрит.<br>Искате ли да премахнете файла от списъка? - + Document must be saved firstly. Документът първо трябва да бъде запазен. - + Document must be saved to continue.<br>Save the document? Документът трябва да бъде запазен, за да продължите.<br>Запазвате ли документа? - + There are no printers available Няма налични принтери - + Print Document Принтирай документ - + Sign Up Създай портал - + %1 is modified.<br>Do you want to keep changes? %1 бе модифициран.<br>Искате ли да запазите промените? @@ -610,22 +610,22 @@ CPrintProgress - + Document is printing: page %1 of %2 Принтиране на документ: страница %1 от %2 - + Document is preparing Подготвяне на документ - + &Cancel &Отказ - + Printing... Принтиране… @@ -634,147 +634,153 @@ CUpdateManager - - + + Last check performed - - - - - - - - - - + + + + + + + + + + - + + Check for updates - - - + + Unable to check update: URL not defined. + + + + + + To finish updating, restart app - - - + + + Restart - + Checking for updates... - + Updates are not allowed! - + This folder configuration does not allow for updates! The folder name should be: - + An error occurred while check updates: Update Service not found! - + Downloading new version %1 (%2%) - + An error occurred while loading updates: Update Service not found! - + Downloading new version %1 (0%) - - + + Cancel Отказ - + An error occurred while loading updates: package Url is empty! - + Update package error: md5 sum does not match the original. - + Preparing update... - + An error occurred while unzip updates: Update Service not found! - + Update is available (version %1) - + Download update Изтеглете актуализация - - + + Current version is up to date - + Update is available - - + + Current version - - + + Update version - + Would you like to download update now? - + Update is ready to install - + Would you like to restart app now? @@ -824,12 +830,12 @@ - + Access to file '%1' is denied! - + Read only Само за четене @@ -892,12 +898,12 @@ Пуснете бележки - + An error occurred while start install updates! - + An error occurred while start replacing files: Update Service not found! diff --git a/win-linux/langs/ca.ts b/win-linux/langs/ca.ts index 65554271e..4a5325add 100644 --- a/win-linux/langs/ca.ts +++ b/win-linux/langs/ca.ts @@ -4,7 +4,7 @@ CAscApplicationManagerWrapper - + Presenter View Vista del presentador @@ -21,18 +21,18 @@ Totes les finestres de l'editor es tancaran. Vols continuar? - - + + Document%1.docx Document%1.docx - + Book%1.xlsx Book%1.xlsx - + Presentation%1.pptx Presentation%1.pptx @@ -40,8 +40,8 @@ CAscTabWidget - - + + Document Obrint... @@ -149,27 +149,27 @@ %1 ha estat modificat.<br>Voleu desar els canvis? - + Some data will lost.<br>Continue? Si continueu guardant en aquest format, es perdran totes les funcions, excepte el text.<br>Estàs segur que vols continuar? - + Open main window Obre la finstra principal - + Document must be saved to continue.<br>Save the document? El document s'ha de desar per a continuar.<br>Desar el document? - + Print Document Imprimir el document - + Document must be saved firstly. El document s'ha de desar abans. @@ -177,7 +177,7 @@ CEditorWindowPrivate - + There are no printers available @@ -515,43 +515,43 @@ - - + + File format not supported. El format de fitxer no és compatible. - + %1 doesn't exists!<br>Remove file from the list? %1 No està disponible. Es pot canviar el nom, moure-lo o suprimir-lo.<br>Voleu eliminar el fitxer de la llista? - + Document must be saved firstly. El document s'ha de desar abans. - + Document must be saved to continue.<br>Save the document? El document s'ha de desar per a continuar.<br>Desar el document? - + There are no printers available - + Print Document Imprimir el document - + Sign Up Crear portal - + %1 is modified.<br>Do you want to keep changes? %1 ha estat modificat.<br>Voleu desar els canvis? @@ -590,22 +590,22 @@ CPrintProgress - + Document is printing: page %1 of %2 Imprimint el document: pàgina %1 of %2 - + Document is preparing Preparant el document - + &Cancel &Cancel·lar - + Printing... Imprimint... @@ -614,147 +614,153 @@ CUpdateManager - - + + Last check performed - - - - - - - - - - + + + + + + + + + + - + + Check for updates - - - + + Unable to check update: URL not defined. + + + + + + To finish updating, restart app - - - + + + Restart - + Checking for updates... - + Updates are not allowed! - + This folder configuration does not allow for updates! The folder name should be: - + An error occurred while check updates: Update Service not found! - + Downloading new version %1 (%2%) - + An error occurred while loading updates: Update Service not found! - + Downloading new version %1 (0%) - - + + Cancel Cancel·lar - + An error occurred while loading updates: package Url is empty! - + Update package error: md5 sum does not match the original. - + Preparing update... - + An error occurred while unzip updates: Update Service not found! - + Update is available (version %1) - + Download update - - + + Current version is up to date - + Update is available - - + + Current version - - + + Update version - + Would you like to download update now? - + Update is ready to install - + Would you like to restart app now? @@ -784,12 +790,12 @@ - + Access to file '%1' is denied! - + Read only @@ -848,12 +854,12 @@ - + An error occurred while start install updates! - + An error occurred while start replacing files: Update Service not found! diff --git a/win-linux/langs/cs.ts b/win-linux/langs/cs.ts index be7e5607b..1440e505e 100644 --- a/win-linux/langs/cs.ts +++ b/win-linux/langs/cs.ts @@ -4,7 +4,7 @@ CAscApplicationManagerWrapper - + Presenter View Náhled prezentace @@ -21,18 +21,18 @@ Všechna okna editoru budou zavřena. Chceš pokračovat? - - + + Document%1.docx Dokument%1.docx - + Book%1.xlsx Sešit%1.xlsx - + Presentation%1.pptx Prezentace%1.pptx @@ -56,8 +56,8 @@ CAscTabWidget - - + + Document Otevírám... @@ -160,22 +160,22 @@ CEditorWindow - + Open main window Otevřít hlavní okno - + Document must be saved to continue.<br>Save the document? Než budete pokračovat, musíte dokument uložit.<br>Chcete dokument uložit? - + Print Document Vytisknout dokument - + Document must be saved firstly. Dokument musíte nejprve uložit. @@ -185,7 +185,7 @@ %1 byl upraven.<br>Chcete uložit tyto změny? - + Some data will lost.<br>Continue? Pokud budete pokračovat v ukládání v tomto formátu, vše kromě textu bude ztraceno.<br>Opravdu chcete pokračovat? @@ -193,7 +193,7 @@ CEditorWindowPrivate - + There are no printers available Nejsou k dispozici žádné tiskárny @@ -531,43 +531,43 @@ - - + + File format not supported. Formát souboru není podporován. - + %1 doesn't exists!<br>Remove file from the list? %1 není dostupný. Možná byl přejmenován, přesunut nebo smazán.<br>Chcete odstranit soubor ze seznamu? - + Document must be saved firstly. Dokument musíte nejprve uložit. - + Document must be saved to continue.<br>Save the document? Než budete pokračovat, musíte dokument uložit.<br>Chcete dokument uložit? - + There are no printers available Nejsou k dispozici žádné tiskárny - + Print Document Vytisknout dokument - + Sign Up Vytvořit kanceláře cloud - + %1 is modified.<br>Do you want to keep changes? %1 byl upraven.<br>Chcete uložit tyto změny? @@ -610,22 +610,22 @@ CPrintProgress - + Document is printing: page %1 of %2 Tisk dokumentu: strana %1 z %2 - + Document is preparing Připravuji dokument - + &Cancel &Storno - + Printing... Tisk... @@ -634,147 +634,153 @@ CUpdateManager - - + + Last check performed - - - - - - - - - - + + + + + + + + + + - + + Check for updates - - - + + Unable to check update: URL not defined. + + + + + + To finish updating, restart app - - - + + + Restart - + Checking for updates... - + Updates are not allowed! - + This folder configuration does not allow for updates! The folder name should be: - + An error occurred while check updates: Update Service not found! - + Downloading new version %1 (%2%) - + An error occurred while loading updates: Update Service not found! - + Downloading new version %1 (0%) - - + + Cancel Storno - + An error occurred while loading updates: package Url is empty! - + Update package error: md5 sum does not match the original. - + Preparing update... - + An error occurred while unzip updates: Update Service not found! - + Update is available (version %1) - + Download update Stáhnout aktualizaci - - + + Current version is up to date - + Update is available - - + + Current version - - + + Update version - + Would you like to download update now? - + Update is ready to install - + Would you like to restart app now? @@ -824,12 +830,12 @@ - + Access to file '%1' is denied! - + Read only Pouze pro čtení @@ -892,12 +898,12 @@ Poznámky k vydání - + An error occurred while start install updates! - + An error occurred while start replacing files: Update Service not found! diff --git a/win-linux/langs/da.ts b/win-linux/langs/da.ts index 44a554639..3fe551e80 100644 --- a/win-linux/langs/da.ts +++ b/win-linux/langs/da.ts @@ -4,7 +4,7 @@ CAscApplicationManagerWrapper - + Presenter View Præsentationsvisning @@ -21,18 +21,18 @@ Alle editorvinduerne lukkes. Vil du fortsætte? - - + + Document%1.docx Dokument%1.docx - + Book%1.xlsx Bog%1.xlsx - + Presentation%1.pptx Præsentation%1.pptx @@ -52,8 +52,8 @@ CAscTabWidget - - + + Document Åbner... @@ -161,27 +161,27 @@ %1 er blevet modificeret.<br>Vil du gemme ændringerne? - + Some data will lost.<br>Continue? Hvis du fortsætter med at gemme i dette format vil alle funktioner undtagen teksten blive væk.<br>Er du sikker på du vil fortsætte? - + Open main window Åbn hovedvindue - + Document must be saved to continue.<br>Save the document? Dokumentet skal gemmes for at fortsætte.<br>Gem dokumentet? - + Print Document Udskriv dokument - + Document must be saved firstly. Dokumentet skal gemmes først. @@ -189,7 +189,7 @@ CEditorWindowPrivate - + There are no printers available Der er ingen printere tilgængelige @@ -527,43 +527,43 @@ - - + + File format not supported. Filformat er ikke understøttet. - + %1 doesn't exists!<br>Remove file from the list? %1 er ikke tilgængeligt. Det er måske omdøbt, flyttet eller slettet.<br>Vil du fjerne filen fra listen? - + Document must be saved firstly. Dokumentet skal gemmes først. - + Document must be saved to continue.<br>Save the document? Dokument skal gemmes for at fortsætte. <br>Gem dokumentet? - + There are no printers available Der er ingen printere tilgængelige - + Print Document Udskriv dokument - + Sign Up Opret portal - + %1 is modified.<br>Do you want to keep changes? %1 er blevet ændret.<br>Vil du gemme ændringerne? @@ -606,22 +606,22 @@ CPrintProgress - + Document is printing: page %1 of %2 Udskriver dokument: page %1 af %2 - + Document is preparing Forbereder dokument - + &Cancel &Annuller - + Printing... Udskriver... @@ -630,147 +630,153 @@ CUpdateManager - - + + Last check performed - - - - - - - - - - + + + + + + + + + + - + + Check for updates - - - + + Unable to check update: URL not defined. + + + + + + To finish updating, restart app - - - + + + Restart - + Checking for updates... - + Updates are not allowed! - + This folder configuration does not allow for updates! The folder name should be: - + An error occurred while check updates: Update Service not found! - + Downloading new version %1 (%2%) - + An error occurred while loading updates: Update Service not found! - + Downloading new version %1 (0%) - - + + Cancel Annuller - + An error occurred while loading updates: package Url is empty! - + Update package error: md5 sum does not match the original. - + Preparing update... - + An error occurred while unzip updates: Update Service not found! - + Update is available (version %1) - + Download update Download opdatering - - + + Current version is up to date - + Update is available - - + + Current version - - + + Update version - + Would you like to download update now? - + Update is ready to install - + Would you like to restart app now? @@ -820,12 +826,12 @@ - + Access to file '%1' is denied! - + Read only Kun læsning @@ -888,12 +894,12 @@ Udgivelsesnoter - + An error occurred while start install updates! - + An error occurred while start replacing files: Update Service not found! diff --git a/win-linux/langs/de.ts b/win-linux/langs/de.ts index e36fba844..90226ef48 100644 --- a/win-linux/langs/de.ts +++ b/win-linux/langs/de.ts @@ -4,7 +4,7 @@ CAscApplicationManagerWrapper - + Presenter View Referentenansicht @@ -21,18 +21,18 @@ Alle Editor-Fenster werden geschlossen. Möchten Sie fortfahren? - - + + Document%1.docx Dokument%1.docx - + Book%1.xlsx Buch%1.xlsx - + Presentation%1.pptx Präsentation%1.pptx @@ -56,8 +56,8 @@ CAscTabWidget - - + + Document Öffnung... @@ -160,22 +160,22 @@ CEditorWindow - + Open main window Hauptfenster öffnen - + Document must be saved to continue.<br>Save the document? Das Dokument muss gespeichert werden, um fortzusetzen.<br>Möchten Sie das Dokument speichern? - + Print Document Dokument drucken - + Document must be saved firstly. Das Dokument muss zuerst gespeichert werden. @@ -185,7 +185,7 @@ %1 wurde geändert.<br>Möchten Sie diese Änderungen speichern? - + Some data will lost.<br>Continue? Wenn Sie mit dem Speichern in diesem Format fortsetzen, werden alle Objekte außer Text verloren gehen.<br>Möchten Sie wirklich fortsetzen? @@ -193,7 +193,7 @@ CEditorWindowPrivate - + There are no printers available Keine Drucker vorhanden @@ -535,43 +535,43 @@ - - + + File format not supported. Dateiformat wird nicht unterstützt. - + %1 doesn't exists!<br>Remove file from the list? %1 ist nicht verfügbar. Es wurde vermutlich umbenannt, gelöscht oder verschoben.<br>Wollen Sie die Datei aus der Liste entfernen? - + Document must be saved firstly. Das Dokument muss zuerst gespeichert werden. - + Document must be saved to continue.<br>Save the document? Das Dokument muss gespeichert werden, um fortzusetzen.<br>Möchten Sie das Dokument speichern? - + There are no printers available Keine Drucker vorhanden - + Print Document Dokument drucken - + Sign Up Cloud-Büro erstellen - + %1 is modified.<br>Do you want to keep changes? %1 wurde geändert.<br>Möchten Sie diese Änderungen speichern? @@ -614,22 +614,22 @@ CPrintProgress - + Document is printing: page %1 of %2 Der Druck des Dokuments: Seite %1 von %2 - + Document is preparing Vorbereitung des Dokuments - + &Cancel &Abbrechen - + Printing... Drucken… @@ -638,147 +638,153 @@ CUpdateManager - - + + Last check performed - - - - - - - - - - + + + + + + + + + + - + + Check for updates - - - + + Unable to check update: URL not defined. + + + + + + To finish updating, restart app - - - + + + Restart - + Checking for updates... - + Updates are not allowed! - + This folder configuration does not allow for updates! The folder name should be: - + An error occurred while check updates: Update Service not found! - + Downloading new version %1 (%2%) - + An error occurred while loading updates: Update Service not found! - + Downloading new version %1 (0%) - - + + Cancel Abbrechen - + An error occurred while loading updates: package Url is empty! - + Update package error: md5 sum does not match the original. - + Preparing update... - + An error occurred while unzip updates: Update Service not found! - + Update is available (version %1) - + Download update Update herunterladen - - + + Current version is up to date - + Update is available - - + + Current version - - + + Update version - + Would you like to download update now? - + Update is ready to install - + Would you like to restart app now? @@ -828,12 +834,12 @@ - + Access to file '%1' is denied! - + Read only Schreibgeschützt @@ -896,12 +902,12 @@ Hinweise zur Veröffentlichung - + An error occurred while start install updates! - + An error occurred while start replacing files: Update Service not found! diff --git a/win-linux/langs/el_GR.ts b/win-linux/langs/el_GR.ts index 90bff05e5..e8106b8b1 100644 --- a/win-linux/langs/el_GR.ts +++ b/win-linux/langs/el_GR.ts @@ -4,7 +4,7 @@ CAscApplicationManagerWrapper - + Presenter View Προβολή παρουσιαστή @@ -21,18 +21,18 @@ Όλα τα παράθυρα του προγράμματος επεξεργασίας θα κλείσουν. Θέλετε να συνεχίσετε; - - + + Document%1.docx Έγγραφο%1.docx - + Book%1.xlsx Βιβλίο%1.xlsx - + Presentation%1.pptx Παρουσίαση%1.pptx @@ -40,8 +40,8 @@ CAscTabWidget - - + + Document Άνοιγμα... @@ -144,22 +144,22 @@ CEditorWindow - + Open main window Άνοιγμα κύριου παραθύρου - + Document must be saved to continue.<br>Save the document? Το έγγραφο πρέπει να αποθηκευτεί για να συνεχίσετε.<br>Αποθήκευση εγγράφου; - + Print Document Εκτύπωση εγγράφου - + Document must be saved firstly. Το έγγραφο πρέπει να αποθηκευτεί πρώτα. @@ -169,7 +169,7 @@ Το %1 έχει τροποποιηθεί.<br>Θέλετε να αποθηκεύσετε τις αλλαγές; - + Some data will lost.<br>Continue? Αν συνεχίσετε την αποθήκευση σε αυτή τη μορφή, όλες οι δυνατότητες, εκτός του κειμένου, θα χαθούν.<br>Θέλετε να συνεχίσετε; @@ -177,7 +177,7 @@ CEditorWindowPrivate - + There are no printers available @@ -515,43 +515,43 @@ - - + + File format not supported. Η μορφή αρχείου δεν υποστηρίζεται. - + %1 doesn't exists!<br>Remove file from the list? Το %1 δεν είναι διαθέσιμο. Μπορεί να έχει μετονομαστεί, μετακινηθεί ή διαγραφεί.<br>Θέλετε να αφαιρέσετε το αρχείο από τη λίστα; - + Document must be saved firstly. Το έγγραφο πρέπει να αποθηκευτεί πρώτα. - + Document must be saved to continue.<br>Save the document? Το έγγραφο πρέπει να αποθηκευτεί για να συνεχίσετε.<br>Αποθήκευση εγγράφου; - + There are no printers available - + Print Document Εκτύπωση εγγράφου - + Sign Up Δημιουργία πύλης - + %1 is modified.<br>Do you want to keep changes? Το %1 έχει τροποποιηθεί.<br>Θέλετε να αποθηκεύσετε τις αλλαγές; @@ -590,22 +590,22 @@ CPrintProgress - + Document is printing: page %1 of %2 Εκτύπωση εγγράφου: σελίδα %1 από %2 - + Document is preparing Προετοιμασία εγγράφου - + &Cancel &Ακύρωση - + Printing... Εκτύπωση... @@ -614,147 +614,153 @@ CUpdateManager - - + + Last check performed - - - - - - - - - - + + + + + + + + + + - + + Check for updates - - - + + Unable to check update: URL not defined. + + + + + + To finish updating, restart app - - - + + + Restart - + Checking for updates... - + Updates are not allowed! - + This folder configuration does not allow for updates! The folder name should be: - + An error occurred while check updates: Update Service not found! - + Downloading new version %1 (%2%) - + An error occurred while loading updates: Update Service not found! - + Downloading new version %1 (0%) - - + + Cancel Ακύρωση - + An error occurred while loading updates: package Url is empty! - + Update package error: md5 sum does not match the original. - + Preparing update... - + An error occurred while unzip updates: Update Service not found! - + Update is available (version %1) - + Download update - - + + Current version is up to date - + Update is available - - + + Current version - - + + Update version - + Would you like to download update now? - + Update is ready to install - + Would you like to restart app now? @@ -788,12 +794,12 @@ - + Access to file '%1' is denied! - + Read only @@ -852,12 +858,12 @@ - + An error occurred while start install updates! - + An error occurred while start replacing files: Update Service not found! diff --git a/win-linux/langs/en.qm b/win-linux/langs/en.qm index 91c99822d0a0bb93663ad340d4937d4c9def949c..2d6167dc7795054c65313b29bac1d6950a2a6d2f 100644 GIT binary patch delta 3981 zcmb_e3s4m29seKqe(iBQkB9Ja$MNuSh$hwGqayeqg%AU#v5v*%ZsAt$b}zeoAlkaI zF*EIyX-HO69YtxT#$fFjCC0Wk9n-)h#du<$+t9J|1JX{uW9%34*EBAAL3-<*e7AxPkg+T-Cq* z!7h-&`hfnU^E|+`+XnM3R9F@^q^!Gy7g7wX&s70rf6uU1lMXOzk)io>4nU_fu-shS zKVsm1UjvXcY}onPcX5Bf&|kR*9RS174{$&IykST|n(?u5zUK&lXN9qK+K(`buNj{| zvjre?ukqlj0~lf>XT16j8eY85lu=fV_%)dFD?dh*(@fK&o6)nEOq(}7gNA)(dS)FW zRFY}xdSN3nfNAiM8N<8M^v=rz$geS7xQ5|On{WEc)r;RV%n!K#iD~e-x#1>-4s@Bj zr1ud2eDjW1_aj0Vk;=H3MVk*?N5Ms_%*S3w=uYZ$=HRCaWf(zzb`fj9a zEzXQQG_2Y}FGh$wr8j*jgEmea^WnZ>cY(mGhXKdSh@t!TswtFKY zp{ca}a`zx2bIEpi?W>4g?pmZA{kn_P&9w=-EO0jbC78mG)6Cy=wRylxqc2`&U$+`ki(vPBYfTX?A9u=0>PI zFP`VL%kjnRbSiHUH(c!$Q5hZ2Qe+uY=a1twMMpg}4@*Dm6Katgk;=SCt#lv7WGbfE zw{{`4bEs`e3|2!>nFLpyU@Zg6igne!Fb&6I@&MrvlxzU4lw~DMg)cqh(U&t#)^9-b!L*%o0h9=&rO*( zp0K?72*cem=gwl3U0JHv9`~4gj|z;4&eIahbENUE53#%Mf-!d+M%g#&YHt6<^kl6L z(U`8BPR;R+XJGmmUH96heCgWnbT&M`g4BfRR)&;J_lfPT%9Gi}%HFKi52N%FXut>v z7zr8zAVLsV%!JWN8*TBu3Xf)c3<@c*JCmz?p*hc79n&o_olWbE@7A&aa1%^mL znj<{NkU%0+2rCjE!S*d|78X~9cu~E>kPem$@EwHaIy>l2C7ERO?<8}RlpeQTUQ)>s zMi6*`@P2<(5HQ#sK{mt?e~|IFk!U1V1#zo&k&B6NDCk30tH6&pQ?%< z*U=mTBxtm^@$XJ1E*(!rh^OTM%e8(jS{6^BWvr42?Qc`#xLODi83Du8k~*j0$GA{M zxlL^3|8qil(v&Sv44<w!2nxf2Z!kr3na&Mj2K6}<)p+r$6GqNmi&oC z%$BDjBE6Otr9@#w7y+RTW4TPOIu+YXgcj~*`u|2kzE9m4A7ey`7Np4)tZED*<}G|E zzzD?8b1iIZRERgu0MCfAYNbOVYyqRvp@1}EYe+E3935te804d&0BL3_rr=e6BTrgb zjunIPyhQhA671Qk$%KwXCO11Z(NxfOnQo`qkUDH8XB+87$aaT|lqAv>GhzzKkbPIP zI@mgijM>U^XnQC$xd9ak?vX|k>z@@Q9C(n3(J(gS1ms~_@&{uLm>1YqmZL-WFF>p& z`EI+U64Iw!f37$KqJbkpZOpMyGgE2JMco-$dLE1pcVsfy<$ zmW!%@<|-wHgOt4{UI|2fH3}-1@{hvl+N4K#b*)XR|5j`-)BCAj*U-jBVqdqs4=dL^ jlr#B>x>~YajUK*}Hiko`>Zwb+h7rdg|3gGRNu&8Me43LP delta 877 zcmXYveMl2=7{|Z2+ue5C?bdXjXL@r^_D2@IsJ$0usij1eS`<>65N5=zs0ahsI|Wj! z!&EYQ6;TYSn^{;vWo3WVsEAUrR%T@c(i;(k_N;YqeD3%B?)N<3=lgr~&7oxhwSZLs zZZ5$1Va&S?@N$%iCt>Pt2TWfOlT!;=0@$~_g!UVvOo~NQTQA^v$+Qe50MZ7g<<~F3 zRed5P`%^9&&hGsI7@RD+>H*AWcXgx#oWQWkr^ah;d4 zO6QC<_INsX&sd*#lN8S2Ok=5lFv3kd(*lTf++y2x+OOtzyb%CfAJ?|o`d|V7mI=T<$T#!A7C`{6}}8wAK-m=Ntkknum8NB z;@!NSwUz{J=fnFc9($P&YeeT2Q@MH+NO^2J8L9^2wwYR2Hj_<0vpgl68ZI=a?cC!h zMT&V()gdbQ)?9OHHz|erew#qbokFJPJNda zwa)9J0-m5Xr;MWxhpf5dCs1K`lTu5jr!UzDO{xN z9Z6Y2v{g#3$U3GmO6Q~~<>7zyBVm!`^3o5=Qpt6n7&j=nBM0n^qJf zV~*SpPp?()H}awu=QynYbo8=%u{_D3HzbT>wH1n_sp=)|x4MeHZTf9jDz7=b+x6Gp k83w&;@-#-vpE^;SoBlvc%Sh7#86UN}%zV=kN@`%3zuSS@1^@s6 diff --git a/win-linux/langs/en.ts b/win-linux/langs/en.ts index d3827207e..93f0bd5ae 100644 --- a/win-linux/langs/en.ts +++ b/win-linux/langs/en.ts @@ -4,7 +4,7 @@ CAscApplicationManagerWrapper - + Presenter View @@ -17,18 +17,18 @@ All the editor windows will be closed. Do you want to continue? - - + + Document%1.docx - + Book%1.xlsx - + Presentation%1.pptx @@ -36,8 +36,8 @@ CAscTabWidget - - + + Document Opening... @@ -140,22 +140,22 @@ CEditorWindow - + Open main window - + Document must be saved to continue.<br>Save the document? The document must be saved to continue.<br>Save the document? - + Print Document Print document - + Document must be saved firstly. The document must be saved first. @@ -165,7 +165,7 @@ %1 has been modified.<br>Do you want to save the changes? - + Some data will lost.<br>Continue? If you continue saving in this format all features except the text will be lost.<br>Are you sure you want to continue? @@ -173,7 +173,7 @@ CEditorWindowPrivate - + There are no printers available @@ -507,43 +507,43 @@ - - + + File format not supported. File format is not supported - + %1 doesn't exists!<br>Remove file from the list? %1 is not available. It might be renamed, moved or deleted.<br>Do you want to remove the file from the list? - + Document must be saved firstly. The document must be saved first. - + Document must be saved to continue.<br>Save the document? The document must be saved to continue.<br>Save the document? - + There are no printers available - + Print Document Print document - + Sign Up Create portal - + %1 is modified.<br>Do you want to keep changes? %1 has been modified.<br>Do you want to save the changes? @@ -559,22 +559,22 @@ CPrintProgress - + Document is printing: page %1 of %2 Printing document: page %1 of %2 - + Document is preparing Preparing document - + &Cancel - + Printing... @@ -583,147 +583,153 @@ CUpdateManager - - + + Last check performed - - - - - - - - - - + + + + + + + + + + - + + Check for updates - - - + + Unable to check update: URL not defined. + + + + + + To finish updating, restart app - - - + + + Restart - + Checking for updates... - + Updates are not allowed! - + This folder configuration does not allow for updates! The folder name should be: - + An error occurred while check updates: Update Service not found! - + Downloading new version %1 (%2%) - + An error occurred while loading updates: Update Service not found! - + Downloading new version %1 (0%) - - + + Cancel - + An error occurred while loading updates: package Url is empty! - + Update package error: md5 sum does not match the original. - + Preparing update... - + An error occurred while unzip updates: Update Service not found! - + Update is available (version %1) - + Download update - - + + Current version is up to date - + Update is available - - + + Current version - - + + Update version - + Would you like to download update now? - + Update is ready to install - + Would you like to restart app now? @@ -753,12 +759,12 @@ - + Access to file '%1' is denied! - + Read only @@ -817,28 +823,12 @@ - - - An error occurred while check updates: Update Service not found! - - - - - An error occurred while loading updates: Update Service not found! - - - - - An error occurred while unzip updates: Update Service not found! - - - - + An error occurred while start install updates! An error occurred while start installing updates! - + An error occurred while start replacing files: Update Service not found! @@ -889,9 +879,8 @@ - App can't working correctly under admin rights. - App can't work correctly under admin rights. + App can't work correctly under admin rights. diff --git a/win-linux/langs/es.qm b/win-linux/langs/es.qm index 70c36c05400e23c62dbb0f79e6894cf7d4a38566..e3ecc2d66c5d3ff0b46fb5570ce9f4375ca6e30e 100644 GIT binary patch literal 20057 zcmeHP3vgUlc|NkOx3zls5#iX*wG%mtV`N)-S~iX)tz^sC*2a<_DHFog?$v7T-M!1b zyOL}ug$^*3rjUWAO$O4CPAP=)CMlr_4TX3J@0Q0*NlS4uVJ3wknKVGAEe-v?bMA9@ z@3lfQ&~`c+`D!2c{O|Ao&wu{wJr87hzxvGkZ~w-o^$)-9p3nc_Lqdo~!@gx~YD9*uH(1jIw{2XDIsq8k`NPVv0~zHg=oD)UHhLFjem{>4qPLeANhn3?GK5b zvD<~{{DPQR^F1MYZW3=fa*Ggc8`SlR*NYE+^!q}*;_Kqv-9H!NnxuH_eIF3wx*Hm{ zf8)=D*!^6?p~g#vxVouf?*48eMxJQ+-7ow|h>LD(xb+v?g}8F4;ocv;LWtGp8t#4m zc_Ci;m4+u;J|{%SpDx?=vERe>>1FxtW8io7vb*2>GsyAOa`E6DVDQ-To_&yI_v@BV zR>1#t=aySLuMuMN?aSxy9~5GLa`_`iCxqzw&*hKaFfByW26bImSpN5S{hbi68eabI z7lZEFpRBmK5B#sWcEzoo7YWg@X~i8A4++uoado}w8|s?OHa7nXawOi}c;#L9LJyyB z9PM}jeEfCe*jt~5e7|Tc|F9KuY;OGMz9+HHA2xpa-IrjUry3u89`r_5Ha_}~cY>dH zHU8i+Q;7bnnp$4~z5U;5>bd!GA@=QSI`+L$AufHa=`{^&gh<}mH1li`e1EekSG-Dy z%dTlEei8EYJ=b){k6$Z9^LX!*2#`;@tEq_OdO+RnF{k{*vFCJCb_VB2Rug70lO-u5@&#&y%3ZRbC?3vuvd`<@5E z*8#nKY^D+V{C@lRx+`GMC)IV|3+;#UtQ7Wh-&`jx91pr^~;v2y4vu|`;R-C&Q1xT-Pf@?`7I%~{77B*{-UGzwts^k@9xk(^(*-4 zH#_cqbmiSx?cJkb=~sD#Kt~+ z-e;-nM0aB2IlSJqBBAlVwe1OQ4A$Wc@Zhz(p=>3Ysm(L?U8#9UXx4<43|1j~BS3E1k;5$2;pTYOn zJ>1!O&o|*kyF0i168?7eV&`4|06f_FhR)A^dpZ2{=Q)7U+wqs^6^BGl%m_=EqEGA; z17cC+g)J6a=!Q-BZ67hs(|tP!7W4LEGhS~P9k$cMrBXhZ*2_7wcvvs$S;IPE>7|lk zHE>Z)B(YptR761-qA1GV;u-nAzj$ZTOjimw7D&8a1qPZk7f$w4_nib9tLY){Z7~dfvqFL{nnI5zvIb zE8?uwyasagrSyvz-(zRpSg{Q6N(b!bsvwG)WGpil*bBROygt^}W1u`2Mf^Z4@n}u> zx}whJh2d$SM=@~PIHO%i^6?1b6&Obu!dV0GcD$%2NUgFSE!@js^qfHu2Hf! zo68#m0|QZP?0wN}xIP-rYdsEWhVlhScEP^7v=%Wtn0A^*^8Y)N&hSFld_7962VMiupdWI&lctsr(8|V{x+|4x0gj#^V(5Y>4 zgJ<*2eLJ-|-PUFd#7BBgFJ_I*fHtMi8_p~H26EgnI+n?mP3uIim@yY*zDmjpCnpOi zdYQ82OkFNi{;CPjKCN=aY7Z?+$Yy<0#J5-ws(NP@{$zn09j{G^X1vm;>C4oB>(ewL@sR%iQ+dBC z9&LFS&1+!4pvpkE0#}|&x8Z$@9u3zqxE68ALS`+7Vr@)PcpP`~yOhZHd`-OGk&stE zBHhx#cQ4;nHcgoY*k3Q}uuVR%TA#@q^pn-0xQESINyzZu?7-D9s09JN zUu=cS`oy5P!lRS`$czK3wf?OGeS=qU;hs^xp^Eq5#_XW8>=}rlY^Sz1M#v6HXrC6~ zcZhq26rX-^7QdE6JzvW^Kwi&VhMqa28H+i)Y)c&{P3??X(H3<0F=Ep)N_jnPXt}af zdK80~iRn77Nc}$!hoB>aHBa)kVOVvdfbFN;u0$=m!&y{ewTs!5#8)jnUMY8LK((DD zz?@`Lxm#m(yJv}1=&^JsMqjPltRh8kW1(orSyTgh1?6yazK$rNgZlMH+i)e5Gv$hL z3yx#It4kBB4YmqK7tfhws49BBs@y1yiU*~>G(MjXsIY5v>bU2gX?s3ahga8W98eHYYvT?!dAqy>;UZb`q5WW0UzRhrd(?Q=P$u6h{q~f`H6|ug(~nZ*(_3@yAH)(2JiC)?-@%S8}S^4=5Z+}jn7Opf`3hM z8pH-Yqs~IAV8-Yg9~tz-nw^Qy8K-IpD&L|ii!w{=keRiIdY^DWM3OBg?_KUmO86F= zP;OP=Dt->{6`-Mj;txz8KICyYS1#mZ6+bA8E8WQunm7pG+wVz#3WT$G#mvdSSz7p{ zdJm@ds~keVK2^$U{MX3F5-fv+TF8~bUDziBB4RgwQc_Fq_e%1W`eZ+JGV8HPghSNH zdq!l2aPOIsuY8t=4uU_$Ev}O3D|YWrVRH!yO2sT*?9a{eMK(8!7bArdU(6Iru|m~) zmNIBb=3W+9bnFG_Z^mP~fDKhSpv|ts2c|u{73RvZ1h1{}tiy0!?xL7p(r{w7GhHok zr^e5GJ@g!&9GUQ`nKQXqa>ro`mDAkf-baRdN!jh8aFfU~n8m1HCa4y3A;3=mVLfe` zuQZA*?=o7jdEAEDCwG+_;{K@Hdi~laK5M0t0Mu1u-d3-_+}CBGOUT+aW#PnTvF@$vDZ5}K6&(T zn7vukig)f`zn>UY0gT6lOHGv_#UyOk_@fsP8@ZkLY7p;_r3AyF7*^cPV=eGR_@>9u z<`6?6OqpIngdUAy>OydGA=Wm9Sepu9$5J?}U+SxUMHv}K6|*i*lzNvKgB0jj81;h>3=;xP6EzVs!0doh5CJ*m{xNniewy%@{n zkr*aZ025Xb7QSOj0AiA_zuQt-)`y+0RLZX}kW6ElU>O*d@RzO!oFj+zFdfuGIbILf zM`VW*ptpiLlgPa&TLm46@Js}#b~V*YBlH9-!mjC)KKhjxSNC1+=15cU9;_YE@ND{kGUE?#GY|z-|7k5 za>AI=QfM5<@wB;)23_B9+JxSM9q8R;ymB~h)q|d=xod^|49?*7hwyj(w5VpZ{3OwJ z@{qq{!Jt-bdPrT6fu$u!XHYDd9KnX4962x+%gA6|{kml*`{6_r<;MJ>EF&#`gR;M zVIHPnW-zFRQ*<(3b;fksFiN3w^%~ZH^QY=HEd1X)Q?C(mn{#~1X_-6<6*@khl_AAI z;mNK#UAF==3SCK)eyQ81H97qvhZ1VmPB|k9)d`b1qFzY&A+Oqb)hBQMc;&irR@m%e z=;iQuUwuyA4j5I(!#teyQy^s{v{VnkQUmN?svbClT@w%E?1irh8Pt&q-RkKBRgI`K zdewqdQ!D)25ANNEO`J8CF=V2dMStvpL1Ut+p$@)r1kUdm&ai@}7tbu{XX?lKOCDLM zG2Q^gr2{Boc`V{KM2Kiqn^FKLMKJ2(CD-PuT(+nkD>1FsEc%-|tgj)g;jD#6AH;GW zb2$v521WeJH*qMJHi|Zy!j+;^`gR6Tbpj_{^3=aaY=MUA4>&b%@h6-TqjEkZWtmyb zHQVyuerHqUp47U-A2p8XX?2a)-hzvudsEUeq>!bK>#cvNYJi1Os$5n>K@347;Zp;S zWxM4LrWZUOE)Da5JttTg!eCt1&;a=6tkyRe#nJi*j>6Mr?NU`()th9i)!k!qC*ux> z5v0_-uD_vEL9IenoqVgKXt(9gJ7xkwOgK=ZGn{#1F6QV2*K@Y1Qb+eVK&eJ!)M%RW z9)3&J4ob%g-1t2UfXZ`Ab(E{1p*|&!!*B95y>Gav8J1;Qnwd^lEDO%KFh|5o&l%~{ zTBU?J8N(hzl<^O3%CP3)v=RtsO}OnQWd`-JGxIMU@4GKSc?5#&|7f+1M5&GQh48AE zptz6!78G{~%GSg&sGZ5uO`60ERo!x1NGx_MWVQ{{*n;T+Puja=m6Y`KX-4ufE6+59 zes%dwq#vFCwbel}Y_O^3YFK2u6Ly5<|3#r#DW1)hUV=w0X*@PDS{uWAk#=0|DIjyf zeMuVhK&E?Cf(eQ!SBfaqNWL_RsGjiS(Y;90WjF>%dw^dn?|L-T2&LS>5hg=m?XB85 zN}NO+bRLs?c+x3a78O>i(yhB@D5z@TI{0+KhAOIzoJxr^bOh!o9tNLNi!J74h9-={qYTljjQmqG-{QKqDVqc(LfOd(R)288y#)7M7X8!)Z z!9LkMsOPQ+UIu1%fE~Yqf&uAhR(3>lawG&=s09UJsN*tNolE?4ymhgdsTIzru8Jeae59xIV=0voI0P)Wh<6^wh;YO%!=~i zFg>3)7lLrKNy9|2ds9)zWU@VHR`MB4;}1nzmWO?mpI*bxwlguWCQXQo)u6@UW4~l zY!cnbG9%fIVMd~RAL*)rUixu9kj94`Vcfb=?pKDiLgpHbL>K(nLWd?jC)*gNmBZnv zo|i3}dcy9g$@Ge)T7j!GW5QwP0?GfVxJR1!!eyqbA2$N1ksyvyTP#=oJzKA00Wlz- zB5**(h~A5(&{0Yv;0aj_M9Rv_m|hdyXT^u8j-fspNe^_Fww#by#gYDe?lgKxC`X)> z>0}F_-hyl-)icAvD#pU7MD|?o;MhVHF5$C!EN!l3DS%P2?EL?MfO@u{&u+Zv1A*on zCudIKflRskr~9ka%7|j~%ZBgJVD-AOm&=2g%kjAz1jzc$>h8L#^H1t?JfG6 zJe#<@Z|CK#hBHPHCjfFI8RA7flI~8s_ytMJaJnoXtzq5@-SP5184_B0HdGnDn4S{b z#6-v-0y7-d;}67N_t8`o)?UWk8MP~C^OprSyS{u}UC$5k?4)mJjW%xmwORHHj9@5- z^Hz0XS091BlFburAWAS*jyTEA0U^8AE1rCrrDED+HfHHrkx5P!Hf~-C9?99i@iyOq zcx|c2u;fOWPc>bj-4}A`b%7nbva$!to~@ckDrdAKru-i-LN_m|GZDI@N0L(ywKz|X zdSqJM2l#4S_~qONhuAskpBA$ z0g%&rksAm+q|4C7wh!HuFi6X4C&V7lYQjY#r`FZ66mdg7a_N!km{1j>#s_TVBu;3t zZFLr_AFaVoLc(3NB0I=6rdh#ex5vV=BWBGvF7RK9gm~;lRP%IE9lofCdicDk?ontx zidl9Xh2`b{%MiMGi|o5oFaEKes%b;53va28qj)%;59h-!>QTeca+hHohD~`}Dw_Z0 zO`P&Oaomn4g*9vd>#M)3TKyg$tL0Rdj+FfXi delta 950 zcmXAneMnPb6vm&syL-30k2_~NH*Ir%Y^F;M3v3xwsKvy-w2}}tq%tuqqCzxUNd=Xa zbyF7=R#2f>MprYjq7N-2Fh~MTqag}re?%E%^m*+5^}FxOd(ZQn=bYh7%=GqpyPsVL za2bHgt1x-?ycS4K0ZN_$sc)h7JpzP)!uUpT*8rsafTp({&_6(Eb^~B~jKgb60G(Z- z%ZBT1!+^DdX_>GAVP>Y~`*&d8B4$k64H%nL-dld09ToiZhg8jnzLAAV7Cix~y^-DD znMM*?wl~iQg#2Xtmu&!eyF#0R{SieaE$Qka7fFQGs_RS<028AQ_#Ob-+X@qREA-sv zG=Jj&@eJp=+yaCOT&D3p>D=S?eh}ctoJy{3`8X9g$=y8@O$8>o{-Fybe42azZWjI#*@T;_SjaB3n z+P*dcFz*o-#ZFV$IYRy~5t#24>h=x-ju4@t<2sPoqRFkGx6-^?pR zdtnFlyF;P-nBir=mHM7C^40l(-D3>PdJV*$QkWzdt@U52zfGc*BiRtMXkA4N{Vh6X z&$eQPQA-s@v;XNwY`o}j(Sw*s(a}e=*ND#9AHoYnXExC?sxYEZ^rq96JMM_(FKFVn zm*NrCHrmc`g$c=G!{;&D+VkRzAgw63)nvLlK;y_Tb-iI}lHKJL&J2CQid>YV6nn5s z9#NN>rE``h`BcQ9S~l8iRZ?-dMJ|cyVx=Rl38~M0MIK7X)kud@PspDZOsSXRKEv1(s})pJ(PU(m-~hl CAscApplicationManagerWrapper - + Presenter View Vista del presentador @@ -21,18 +21,18 @@ Todas las ventanas del editor estarán cerradas. ¿Quiere continuar? - - + + Document%1.docx Documento%1.docx - + Book%1.xlsx Libro%1.xlsx - + Presentation%1.pptx Presentación%1.pptx @@ -56,8 +56,8 @@ CAscTabWidget - - + + Document Abriendo... @@ -160,22 +160,22 @@ CEditorWindow - + Open main window Abrir la ventana principal - + Document must be saved to continue.<br>Save the document? El documento debe guardarse para continuar.<br>¿Guardar el documento? - + Print Document Imprimir documento - + Document must be saved firstly. Primero debe guardar el documento. @@ -185,7 +185,7 @@ %1 ha sido modificado.<br>¿Quiere guardar los cambios? - + Some data will lost.<br>Continue? Si sigue guardando en este formato, todas las características, a excepción del texto, se perderán.<br>¿Está seguro de que quiere continuar? @@ -193,7 +193,7 @@ CEditorWindowPrivate - + There are no printers available No hay impresoras disponibles @@ -574,43 +574,43 @@ No volver a preguntar. - - + + File format not supported. El formato del archivo no es compatible. - + %1 doesn't exists!<br>Remove file from the list? %1 no está disponible. Es posible que haya sido renombrado, transferido o eliminado.<br>¿Desea eliminar el archivo de la lista? - + Document must be saved firstly. Primero debe guardar el documento. - + Document must be saved to continue.<br>Save the document? El documento debe guardarse para continuar.<br>¿Guardar el documento? - + There are no printers available No hay impresoras disponibles - + Print Document Imprimir documento - + Sign Up Crear cuenta en la nube - + %1 is modified.<br>Do you want to keep changes? %1 ha sido modificado.<br>¿Quiere guardar los cambios? @@ -653,22 +653,22 @@ CPrintProgress - + Document is printing: page %1 of %2 Imprimiendo documento: página %1 de %2 - + Document is preparing Preparando documento - + &Cancel &Cancelar - + Printing... Imprimiendo... @@ -677,161 +677,167 @@ CUpdateManager - - + + Last check performed Se ha realizado la última comprobación - - - - - - - - - - + + + + + + + + + + - + + Check for updates Comprobando las actualizaciones - - - + + Unable to check update: URL not defined. + + + + + + To finish updating, restart app Para terminar la actualización, reinicie la aplicación - - - + + + Restart Reiniciar - + Checking for updates... Comprobando las actualizaciones... - + Updates are not allowed! ¡Las actualizaciones no están permitidas! - + This folder configuration does not allow for updates! The folder name should be: Esta configuración de carpeta no permite actualizaciones. El nombre de la carpeta debe ser: - + An error occurred while check updates: Update Service not found! Se ha producido un error al comprobar las actualizaciones: ¡No se ha encontrado el servicio de actualización! - + Downloading new version %1 (%2%) Descargando la nueva versión %1 (%2%) - + An error occurred while loading updates: Update Service not found! Se ha producido un error al cargar las actualizaciones: ¡No se ha encontrado el servicio de actualización! - + Downloading new version %1 (0%) Descargando la nueva versión %1 (0%) - - + + Cancel Cancelar - + An error occurred while loading updates: package Url is empty! Se ha producido un error al cargar las actualizaciones: ¡La Url del paquete está vacía! - + Update package error: md5 sum does not match the original. Error al actualizar el paquete: la suma md5 no coincide con la original. - + Preparing update... Preparando la actualización... - + An error occurred while unzip updates: Update Service not found! Se ha producido un error al descomprimir las actualizaciones: ¡No se ha encontrado el servicio de actualización! - + Update is available (version %1) La actualización está disponible (versión %1) - + Download update Descargar actualización - - + + Current version is up to date La versión actual está actualizada - + Update is available La actualización está disponible - - + + Current version Versión actual - - + + Update version Versión de actualización - + Would you like to download update now? ¿Desea descargar la actualización ahora? - + Update is ready to install La actualización está lista para instalarse - + Would you like to restart app now? ¿Desea reiniciar la aplicación ahora? A new version of %1 is available! - ¡Una nueva versión de %1 está disponible! + ¡Una nueva versión de %1 está disponible! %1 %2 is now available (you have %3). Would you like to download it now? - %1 %2 ya está disponible (usted tiene %3). ¿Desea descargarlo ahora? + %1 %2 ya está disponible (usted tiene %3). ¿Desea descargarlo ahora? %1 %2 is now downloaded (you have %3). Would you like to install it now? - %1 %2 ya está descargado (usted tiene %3). ¿Desea instalarlo ahora? + %1 %2 ya está descargado (usted tiene %3). ¿Desea instalarlo ahora? @@ -867,12 +873,12 @@ - + Access to file '%1' is denied! ¡El acceso al archivo '%1' está denegado! - + Read only Solo lectura @@ -935,28 +941,24 @@ Notas de la versión - - An error occurred while check updates: Update Service not found! - Se ha producido un error al comprobar las actualizaciones: ¡No se ha encontrado el servicio de actualización! + Se ha producido un error al comprobar las actualizaciones: ¡No se ha encontrado el servicio de actualización! - An error occurred while loading updates: Update Service not found! - Se ha producido un error al cargar las actualizaciones: ¡No se ha encontrado el servicio de actualización! + Se ha producido un error al cargar las actualizaciones: ¡No se ha encontrado el servicio de actualización! - An error occurred while unzip updates: Update Service not found! - Se ha producido un error al extraer las actualizaciones: ¡No se ha encontrado el servicio de actualización! + Se ha producido un error al extraer las actualizaciones: ¡No se ha encontrado el servicio de actualización! - + An error occurred while start install updates! Se ha producido un error al iniciar la instalación de actualizaciones. - + An error occurred while start replacing files: Update Service not found! Se ha producido un error al iniciar la sustitución de archivos: ¡No se ha encontrado el servicio de actualización! @@ -1007,9 +1009,8 @@ Se ha producido un error al abrir el portal: <br>%1 - App can't working correctly under admin rights. - La app no puede funcionar correctamente con los derechos de administrador. + La app no puede funcionar correctamente con los derechos de administrador. &OK diff --git a/win-linux/langs/et.ts b/win-linux/langs/et.ts index 0b3f34488..ce9bf29d6 100644 --- a/win-linux/langs/et.ts +++ b/win-linux/langs/et.ts @@ -4,7 +4,7 @@ CAscApplicationManagerWrapper - + Presenter View Esitaja vaade @@ -21,18 +21,18 @@ Kõik redigeerija aknad suletakse. Kas sa soovid jätkata? - - + + Document%1.docx Dokument%1.docx - + Book%1.xlsx Raamat%1.xlsx - + Presentation%1.pptx Esitlus%1.pptx @@ -40,8 +40,8 @@ CAscTabWidget - - + + Document Avamine... @@ -149,27 +149,27 @@ %1 on muudetud.<br>Kas sa tahad muudatused salvestada? - + Some data will lost.<br>Continue? Kui sa jätkad selles formaadis salvestamist, siis kõik peale teksti kaob ära.<br> Oled kindel, et tahad jätkata? - + Open main window Ava peamine aken - + Document must be saved to continue.<br>Save the document? Dokument tuleb salvestada, et jätkata.<br>Salvestasid dokumendi? - + Print Document Prindi dokument - + Document must be saved firstly. Dokument tuleb enne salvestada. @@ -177,7 +177,7 @@ CEditorWindowPrivate - + There are no printers available @@ -515,43 +515,43 @@ - - + + File format not supported. Faili formaati ei toetata. - + %1 doesn't exists!<br>Remove file from the list? %1 ei ole saadaval. Ta võib olla uue nimega, muudetud või kustutatud.<br> Kas sa soovid faili listist eemaldada? - + Document must be saved firstly. Dokument tuleb enne salvestada. - + Document must be saved to continue.<br>Save the document? Dokument tuleb salvestada, et jätkata.<br>Salvestasid dokumendi? - + There are no printers available - + Print Document Prindi dokument - + Sign Up Loo portaal - + %1 is modified.<br>Do you want to keep changes? %1 on muudetud.<br>Kas sa tahad muutused salvestada? @@ -590,22 +590,22 @@ CPrintProgress - + Document is printing: page %1 of %2 Dokumendi printimine: Lehekülg %1 osa %2 - + Document is preparing Dokumendi ettevalmistamine - + &Cancel &Tühista - + Printing... Printimine... @@ -614,147 +614,153 @@ CUpdateManager - - + + Last check performed - - - - - - - - - - + + + + + + + + + + - + + Check for updates - - - + + Unable to check update: URL not defined. + + + + + + To finish updating, restart app - - - + + + Restart - + Checking for updates... - + Updates are not allowed! - + This folder configuration does not allow for updates! The folder name should be: - + An error occurred while check updates: Update Service not found! - + Downloading new version %1 (%2%) - + An error occurred while loading updates: Update Service not found! - + Downloading new version %1 (0%) - - + + Cancel Tühista - + An error occurred while loading updates: package Url is empty! - + Update package error: md5 sum does not match the original. - + Preparing update... - + An error occurred while unzip updates: Update Service not found! - + Update is available (version %1) - + Download update - - + + Current version is up to date - + Update is available - - + + Current version - - + + Update version - + Would you like to download update now? - + Update is ready to install - + Would you like to restart app now? @@ -784,12 +790,12 @@ - + Access to file '%1' is denied! - + Read only @@ -848,12 +854,12 @@ - + An error occurred while start install updates! - + An error occurred while start replacing files: Update Service not found! diff --git a/win-linux/langs/fi.ts b/win-linux/langs/fi.ts index 3b73fdbc3..122775555 100644 --- a/win-linux/langs/fi.ts +++ b/win-linux/langs/fi.ts @@ -4,7 +4,7 @@ CAscApplicationManagerWrapper - + Presenter View Esittäjän näkymä @@ -21,18 +21,18 @@ Kaikki muokkaus-ikkunat suljetaan. Haluatko jatkaa? - - + + Document%1.docx Dokumentti%1.docx - + Book%1.xlsx Työkirja%1.xlsx - + Presentation%1.pptx Esitys%1.pptx @@ -40,8 +40,8 @@ CAscTabWidget - - + + Document Avataan... @@ -149,27 +149,27 @@ %1 on muokattu.<br>Haluatko tallentaa muutokset? - + Some data will lost.<br>Continue? Jos jatkat tallennusta tässä muodossa, kaikki muut ominaisuudet paitsi teksti menetetään. <br>Oletko varma, että haluat jatkaa? - + Open main window Avaa pääikkuna - + Document must be saved to continue.<br>Save the document? Dokumentti on tallennettava ennen jatkamista.<br>Tallennetaanko dokumentti? - + Print Document Tulosta dokumentti - + Document must be saved firstly. Dokumentti tulee tallentaa ensin. @@ -177,7 +177,7 @@ CEditorWindowPrivate - + There are no printers available @@ -515,43 +515,43 @@ - - + + File format not supported. Tiedoston tyyppi ei ole tuettu. - + %1 doesn't exists!<br>Remove file from the list? %1 ei ole saatavilla. Se voi olla nimetty uudelleen, siirretty tai poistettu.<br>Haluatko poistaa tiedoston listalta? - + Document must be saved firstly. Dokumentti tulee tallentaa ensin. - + Document must be saved to continue.<br>Save the document? Dokumentti on tallennettava ennen jatkamista.<br>Tallennetaanko dokumentti? - + There are no printers available - + Print Document Tulosta dokumentti - + Sign Up Luo portaali - + %1 is modified.<br>Do you want to keep changes? %1 on muokattu.<br>Haluatko tallentaa muutokset? @@ -590,22 +590,22 @@ CPrintProgress - + Document is printing: page %1 of %2 Tulostetaan dokumenttia: sivu %1 / %2 - + Document is preparing Valmistellaan dokumnettia - + &Cancel &Peruuta - + Printing... Tulostetaan... @@ -614,147 +614,153 @@ CUpdateManager - - + + Last check performed - - - - - - - - - - + + + + + + + + + + - + + Check for updates - - - + + Unable to check update: URL not defined. + + + + + + To finish updating, restart app - - - + + + Restart - + Checking for updates... - + Updates are not allowed! - + This folder configuration does not allow for updates! The folder name should be: - + An error occurred while check updates: Update Service not found! - + Downloading new version %1 (%2%) - + An error occurred while loading updates: Update Service not found! - + Downloading new version %1 (0%) - - + + Cancel Peruuta - + An error occurred while loading updates: package Url is empty! - + Update package error: md5 sum does not match the original. - + Preparing update... - + An error occurred while unzip updates: Update Service not found! - + Update is available (version %1) - + Download update - - + + Current version is up to date - + Update is available - - + + Current version - - + + Update version - + Would you like to download update now? - + Update is ready to install - + Would you like to restart app now? @@ -788,12 +794,12 @@ - + Access to file '%1' is denied! - + Read only @@ -852,12 +858,12 @@ - + An error occurred while start install updates! - + An error occurred while start replacing files: Update Service not found! diff --git a/win-linux/langs/fr.qm b/win-linux/langs/fr.qm index 74230b0828e1fb19ff72cc72505f529ebe469542..4c037850015afc977e201d663c34b3e0c5c3441e 100644 GIT binary patch delta 2488 zcmb_dYfKzf6h6BP%Pxd2kZ36>>s?@3K)SNLK}0E*R6|=UC2cfNhuPWP!C_`IJG)SS zxatoRO=C(Xt<}V~{_uy!7!0B@#WeMi)JHU_HolGiqcNJOjrE7G@6N&^?>3mp%)R&A zbMHCdIo~<+b!6_yF|TimDEC$(yFW9w{Dg5IQOo;8huMtj>UlLu?_Vl%}= zjp}5&x~xUBpMK;Dj(y;uvnPpY(2<&HBx*f9d9FLZ{(R2KyJm@+u9|taP}|w7=ZQk6 zaxZ-G3{lbRx!-=J5mg>`y8qrv)Yj@O8Tx_fmbaaQmwJhAy3cvP?FORefO*i?;c2gY zm8iBRFIxTtZugi^+p6zvZ*m*#?HG19SNulgiMa><+=44+ z-A9d2iOPR=AAjuyqWV8FWAl)E=B+P@O3D4n#wes1q{`f)@13De`ar+mwg+kPRs`ALuG`Humi(DTMc2e9pxi8>0W4M%-# z`XUXIN)j==Iv$CV_%cdR0P_SHn8zW}D2yE$Yp$zctz(x#npq2&r|2@IGDYx;BtTb& zo;t6^wZ|YySobpe9_!IEC}a$FVmW{<9oO*VlKFdsHv*xI8w|^XB(?+^fpu=v=i+&B z;=Q9sWsq5eea}Q`Rs4(ai=egwe+~endENk;PIgJ^#`MEg0y2XV|EeX)!6~tq*N=0Nt;H$!RzjcKQ;TTrD1ecjH zPZe$*M(t#aVgG@coB*$tu%t6lQzLRTsSAdzsVuBX35)fDqG;pL(HElOV+Uf=!XZ@{ zlUO3AC6zE6kvbW#j_KQWG~3d<;ZFec7V*qk?hBSjnSzfY!5QEcKH zEwom7YH^@Mc^Zg)T+FgTOyZxc1uz~vV>%)_tr|il$9e}ecvcTO|@GK|s29(TV z3a*7IVFm$Nf{jb~->a#HtR|)D%fY*Ida9`pO8jTEP?Lvf52}|@4b@SQCJ-BiYP0z)I<%*s S_3;XK_6@1AHc#-w+7Vz}nS4pkt05ZK0g_f|dwgK|6@=Ra`<2EAyu z(5uc24DwNv%NZ@%(`7pu7<5f0?`KqV(vRTinO4C71RO`#a569m&f+vt`pm$MJ!S<1km84sbgn>e@by~)5J!7$mJNsUQQa&kJ8oR&T#w`&qB z1A~Gqx0{qE&=eL3t@V@JCkJS{j0JbP+$x~orcU0@6vw4`lviTHCk6&No5||TR+BTC z{Y3fs7oG#Ug_nQ(C1#)_i!*_qf3W!qvySHE^XAHv_ZU=dPBSuLoa|>32^28cY-(Z2 JGWmdw1_1XmSM&e? diff --git a/win-linux/langs/fr.ts b/win-linux/langs/fr.ts index 27f115411..bebb3f403 100644 --- a/win-linux/langs/fr.ts +++ b/win-linux/langs/fr.ts @@ -4,7 +4,7 @@ CAscApplicationManagerWrapper - + Presenter View Mode présentateur @@ -21,18 +21,18 @@ Toutes les fenêtres de l'éditeur seront fermées. Voulez-vous continuer ? - - + + Document%1.docx Document%1.docx - + Book%1.xlsx Livre%1.xlsx - + Presentation%1.pptx Diaporama%1.pptx @@ -56,8 +56,8 @@ CAscTabWidget - - + + Document Ouverture... @@ -160,22 +160,22 @@ CEditorWindow - + Open main window Ouvrir la fenêtre principale - + Document must be saved to continue.<br>Save the document? Le document doit être enregistré pour continuer.<br>Enregistrer le document ? - + Print Document Imprimer document - + Document must be saved firstly. Le document doit d’abord être enregistré. @@ -185,7 +185,7 @@ %1 a été modifié.<br>Voulez-vous enregistrer les changements ? - + Some data will lost.<br>Continue? Si vous continuez à enregistrer dans ce format toutes les fonctions sauf le texte seront perdues.<br>Êtes-vous sûr de vouloir continuer ? @@ -193,7 +193,7 @@ CEditorWindowPrivate - + There are no printers available Il n'y a pas d'imprimantes disponibles @@ -535,43 +535,43 @@ - - + + File format not supported. Format de fichier non pris en charge. - + %1 doesn't exists!<br>Remove file from the list? %1 n’est pas disponible. Il peut être renomé, supprimé ou déplacé.<br>Voulez-vous supprimer le fichier de la liste ? - + Document must be saved firstly. Le document doit d’abord être enregistré. - + Document must be saved to continue.<br>Save the document? Le document doit être enregistré pour continuer.<br>Enregistrer le document ? - + There are no printers available Il n'y a pas d'imprimantes disponibles - + Print Document Imprimer document - + Sign Up Créer bureau de cloud - + %1 is modified.<br>Do you want to keep changes? %1 a été modifié.<br>Voulez-vous enregistrer les changements ? @@ -614,22 +614,22 @@ CPrintProgress - + Document is printing: page %1 of %2 Impression du document: page %1 sur %2 - + Document is preparing Préparation du document - + &Cancel &Annuler - + Printing... Impression... @@ -638,161 +638,167 @@ CUpdateManager - - + + Last check performed - - - - - - - - - - + + + + + + + + + + - + + Check for updates - - - + + Unable to check update: URL not defined. + + + + + + To finish updating, restart app - - - + + + Restart - + Checking for updates... - + Updates are not allowed! - + This folder configuration does not allow for updates! The folder name should be: Cette configuration de dossier ne permet pas les mises à jour ! Le nom du dossier doit être : - + An error occurred while check updates: Update Service not found! - + Une erreur s'est produite lors de la vérification des mises à jour : Service de mise à jour introuvable ! - + Downloading new version %1 (%2%) - + An error occurred while loading updates: Update Service not found! - + Une erreur s'est produite lors du chargement des mises à jour : Service de mise à jour introuvable ! - + Downloading new version %1 (0%) - - + + Cancel Annuler - + An error occurred while loading updates: package Url is empty! - + Update package error: md5 sum does not match the original. - + Preparing update... - + An error occurred while unzip updates: Update Service not found! - + Une erreur s'est produite lors de la décompression des mises à jour : Service de mise à jour introuvable ! - + Update is available (version %1) - + Download update Télécharger la mise à jour - - + + Current version is up to date - + Update is available - - + + Current version - - + + Update version - + Would you like to download update now? - + Update is ready to install - + Would you like to restart app now? A new version of %1 is available! - La nouvelle version de %1 est disponible ! + La nouvelle version de %1 est disponible ! %1 %2 is now available (you have %3). Would you like to download it now? - %1 %2 est disponible (vous avez %3). Voulez-vous le télécharger maintenant ? + %1 %2 est disponible (vous avez %3). Voulez-vous le télécharger maintenant ? %1 %2 is now downloaded (you have %3). Would you like to install it now? - %1 %2 est téléchargé (vous avez %3). Voulez-vous l'installer maintenant ? + %1 %2 est téléchargé (vous avez %3). Voulez-vous l'installer maintenant ? @@ -828,12 +834,12 @@ - + Access to file '%1' is denied! L'accès au fichier "%1" est refusé ! - + Read only Lecture seule @@ -896,28 +902,24 @@ Notes de mise à jour - - An error occurred while check updates: Update Service not found! - Une erreur s'est produite lors de la vérification des mises à jour : Service de mise à jour introuvable ! + Une erreur s'est produite lors de la vérification des mises à jour : Service de mise à jour introuvable ! - An error occurred while loading updates: Update Service not found! - Une erreur s'est produite lors du chargement des mises à jour : Service de mise à jour introuvable ! + Une erreur s'est produite lors du chargement des mises à jour : Service de mise à jour introuvable ! - An error occurred while unzip updates: Update Service not found! - Une erreur s'est produite lors de la décompression des mises à jour : Service de mise à jour introuvable ! + Une erreur s'est produite lors de la décompression des mises à jour : Service de mise à jour introuvable ! - + An error occurred while start install updates! Une erreur s'est produite lors de l'installation des mises à jour ! - + An error occurred while start replacing files: Update Service not found! Une erreur s'est produite lors du lancement du remplacement des fichiers : Service de mise à jour introuvable ! @@ -968,9 +970,8 @@ Une erreur s'est produite lors de l'ouverture du portail : <br>%1 - App can't working correctly under admin rights. - L'application ne peut pas fonctionner correctement avec des droits d'administrateur. + L'application ne peut pas fonctionner correctement avec des droits d'administrateur. &OK diff --git a/win-linux/langs/ga.ts b/win-linux/langs/ga.ts index 697b15d9c..d472c48af 100644 --- a/win-linux/langs/ga.ts +++ b/win-linux/langs/ga.ts @@ -4,7 +4,7 @@ CAscApplicationManagerWrapper - + Presenter View Amharc an Láithreora @@ -21,18 +21,18 @@ Dúnfar na fuinneoga eagarthóra go léir. Ar mhaith leat leanúint ar aghaidh? - - + + Document%1.docx Doiciméad%1.docx - + Book%1.xlsx Book%1.xlsx - + Presentation%1.pptx Cur i láthair%1.pptx @@ -40,8 +40,8 @@ CAscTabWidget - - + + Document Ag oscailt... @@ -149,27 +149,27 @@ Mionathraíodh %1.<br>Ar mhaith leat na hathruithe a shábháil? - + Some data will lost.<br>Continue? Má leanann tú ar aghaidh ag sábháil san fhormáid seo caillfear gach gné seachas an téacs.<br> An bhfuil tú cinnte gur mhaith leat leanúint ar aghaidh? - + Open main window Oscail an phríomhfhuinneog - + Document must be saved to continue.<br>Save the document? Caithfear an doiciméad a shábháil chun leanúint ar aghaidh.<br>Sábháil an doiciméad? - + Print Document Doiciméad a phriontáil - + Document must be saved firstly. Caithfear an doiciméad a shábháil ar dtús. @@ -177,7 +177,7 @@ CEditorWindowPrivate - + There are no printers available @@ -519,43 +519,43 @@ - - + + File format not supported. Ní thacaítear le formáid comhaid. - + %1 doesn't exists!<br>Remove file from the list? Níl %1 ar fáil.D’fhéadfaí é a athainmniú, a bhogadh nó a scriosadh.<br>Ar mhaith leat an comhad a bhaint den liosta? - + Document must be saved firstly. Caithfear an doiciméad a shábháil ar dtús. - + Document must be saved to continue.<br>Save the document? Caithfear an doiciméad a shábháil chun leanúint ar aghaidh.<br>Sábháil an doiciméad? - + There are no printers available - + Print Document Doiciméad a phriontáil - + Sign Up Cruthaigh tairseach - + %1 is modified.<br>Do you want to keep changes? Mionathraíodh %1.<br>Ar mhaith leat na hathruithe a shábháil? @@ -594,22 +594,22 @@ CPrintProgress - + Document is printing: page %1 of %2 Doiciméad priontála; leathanach %1 de %2 - + Document is preparing Doiciméad a ullmhú - + &Cancel &Cealaigh - + Printing... Priontáil... @@ -618,147 +618,153 @@ CUpdateManager - - + + Last check performed - - - - - - - - - - + + + + + + + + + + - + + Check for updates - - - + + Unable to check update: URL not defined. + + + + + + To finish updating, restart app - - - + + + Restart - + Checking for updates... - + Updates are not allowed! - + This folder configuration does not allow for updates! The folder name should be: - + An error occurred while check updates: Update Service not found! - + Downloading new version %1 (%2%) - + An error occurred while loading updates: Update Service not found! - + Downloading new version %1 (0%) - - + + Cancel Cealaigh - + An error occurred while loading updates: package Url is empty! - + Update package error: md5 sum does not match the original. - + Preparing update... - + An error occurred while unzip updates: Update Service not found! - + Update is available (version %1) - + Download update - - + + Current version is up to date - + Update is available - - + + Current version - - + + Update version - + Would you like to download update now? - + Update is ready to install - + Would you like to restart app now? @@ -788,12 +794,12 @@ - + Access to file '%1' is denied! - + Read only @@ -852,12 +858,12 @@ - + An error occurred while start install updates! - + An error occurred while start replacing files: Update Service not found! diff --git a/win-linux/langs/gl.ts b/win-linux/langs/gl.ts index 68d63cca0..05eccc6fb 100644 --- a/win-linux/langs/gl.ts +++ b/win-linux/langs/gl.ts @@ -4,7 +4,7 @@ CAscApplicationManagerWrapper - + Presenter View Vista do presentador @@ -21,18 +21,18 @@ Pecharanse todas as xanelas do editor. Queres continuar? - - + + Document%1.docx Documento%1.docx - + Book%1.xlsx Libro%1.xlsx - + Presentation%1.pptx Presentación%1.pptx @@ -40,8 +40,8 @@ CAscTabWidget - - + + Document Abrindo... @@ -144,22 +144,22 @@ CEditorWindow - + Open main window Abrir xanela principal - + Document must be saved to continue.<br>Save the document? O documento ten que gardarse para poder continuar.<br>Gardar o documento? - + Print Document Imprimir documento - + Document must be saved firstly. O documento débese gardar primeiro. @@ -169,7 +169,7 @@ Modificouse %1.<br>Queres gardar os cambios? - + Some data will lost.<br>Continue? Se continúas gardando neste formato todas as características excepto o texto, perderanse.<br>Ten a certeza de querer continuar? @@ -177,7 +177,7 @@ CEditorWindowPrivate - + There are no printers available @@ -515,43 +515,43 @@ - - + + File format not supported. O formato ficheiro non está soportado. - + %1 doesn't exists!<br>Remove file from the list? %1 non está dispoñible. Puido ser renomeado, movio ou eliminado.<br>Quere eliminar o ficheiro da lista? - + Document must be saved firstly. O documento débese gardar primeiro. - + Document must be saved to continue.<br>Save the document? O documento ten que gardarse para poder continuar.<br>Gardar o documento? - + There are no printers available - + Print Document Imprimir documento - + Sign Up Crear portal - + %1 is modified.<br>Do you want to keep changes? Modificouse %1<br>Queres gardar os cambios? @@ -590,22 +590,22 @@ CPrintProgress - + Document is printing: page %1 of %2 Imprimindo documento: páxina %1 de %2 - + Document is preparing Preparando o documento - + &Cancel &Cancelar - + Printing... Imprimindo... @@ -614,147 +614,153 @@ CUpdateManager - - + + Last check performed - - - - - - - - - - + + + + + + + + + + - + + Check for updates - - - + + Unable to check update: URL not defined. + + + + + + To finish updating, restart app - - - + + + Restart - + Checking for updates... - + Updates are not allowed! - + This folder configuration does not allow for updates! The folder name should be: - + An error occurred while check updates: Update Service not found! - + Downloading new version %1 (%2%) - + An error occurred while loading updates: Update Service not found! - + Downloading new version %1 (0%) - - + + Cancel Cancelar - + An error occurred while loading updates: package Url is empty! - + Update package error: md5 sum does not match the original. - + Preparing update... - + An error occurred while unzip updates: Update Service not found! - + Update is available (version %1) - + Download update - - + + Current version is up to date - + Update is available - - + + Current version - - + + Update version - + Would you like to download update now? - + Update is ready to install - + Would you like to restart app now? @@ -784,12 +790,12 @@ - + Access to file '%1' is denied! - + Read only @@ -848,12 +854,12 @@ - + An error occurred while start install updates! - + An error occurred while start replacing files: Update Service not found! diff --git a/win-linux/langs/hi.ts b/win-linux/langs/hi.ts index a22ea5a8e..6ffe0fcc8 100644 --- a/win-linux/langs/hi.ts +++ b/win-linux/langs/hi.ts @@ -4,7 +4,7 @@ CAscApplicationManagerWrapper - + Presenter View प्रस्तुतकर्ता दृश्य @@ -21,18 +21,18 @@ सभी संपादन विंडो बंद हो जाएँगी। क्या आप जारी रखना चाहते हैं? - - + + Document%1.docx दस्तावेज़%1.डॉक्स - + Book%1.xlsx बुक%1.एक्सएलएसएक्स - + Presentation%1.pptx प्रस्तुति%1.पीपीटीएक्स @@ -40,8 +40,8 @@ CAscTabWidget - - + + Document खुल रहा है... @@ -149,27 +149,27 @@ %1 को संशोधित कर लिया गया है।<br>क्या आप बदलावों को सहेजना चाहते हैं? - + Some data will lost.<br>Continue? यदि आप इसी प्रारूप में सहेजना जारी रखेंगे तो टेक्स्ट के आलावा सभी विशेषताएँ लुप्त हो जाएँगी।<br>क्या आप सुनिश्चित तौर पर जारी रखना चाहते हैं? - + Open main window मुख्य विंडो खोलें - + Document must be saved to continue.<br>Save the document? जारी रखने के लिए दस्तावेज़ को सहेजना आवश्यक है।<br>दस्तावेज़ को सहेजें? - + Print Document दस्तावेज़ को प्रिंट करें - + Document must be saved firstly. दस्तावेज़ को पहले सहेजना आवश्यक है। @@ -177,7 +177,7 @@ CEditorWindowPrivate - + There are no printers available @@ -515,43 +515,43 @@ - - + + File format not supported. फ़ाइल प्रारूप समर्थित नहीं है। - + %1 doesn't exists!<br>Remove file from the list? %1 यह उपलब्ध नहीं है। शायद इसका नाम बदला गया है, इसे कहीं और डाला गया है या इसे डिलीट कर दिया गया है।<br>क्या आप सूची से यह फ़ाइल को हटाना चाहते हैं? - + Document must be saved firstly. दस्तावेज़ को पहले सहेजना आवश्यक है। - + Document must be saved to continue.<br>Save the document? जारी रखने के लिए दस्तावेज़ को सहेजना आवश्यक है।<br>दस्तावेज़ को सहेजें? - + There are no printers available - + Print Document दस्तावेज़ को प्रिंट करें - + Sign Up पोर्टल बनाएँ - + %1 is modified.<br>Do you want to keep changes? %1 को संशोधित कर लिया गया है। <br>क्या आप बदलावों को सहेजना चाहते हैं? @@ -590,22 +590,22 @@ CPrintProgress - + Document is printing: page %1 of %2 दस्तावेज़ प्रिंट हो रहा है: पेज %2 में से %1 - + Document is preparing दस्तावेज़ को तैयार कर रहे हैं - + &Cancel &रद्द करें - + Printing... प्रिंट हो रहा है... @@ -614,147 +614,153 @@ CUpdateManager - - + + Last check performed - - - - - - - - - - + + + + + + + + + + - + + Check for updates - - - + + Unable to check update: URL not defined. + + + + + + To finish updating, restart app - - - + + + Restart - + Checking for updates... - + Updates are not allowed! - + This folder configuration does not allow for updates! The folder name should be: - + An error occurred while check updates: Update Service not found! - + Downloading new version %1 (%2%) - + An error occurred while loading updates: Update Service not found! - + Downloading new version %1 (0%) - - + + Cancel रद्द करें - + An error occurred while loading updates: package Url is empty! - + Update package error: md5 sum does not match the original. - + Preparing update... - + An error occurred while unzip updates: Update Service not found! - + Update is available (version %1) - + Download update - - + + Current version is up to date - + Update is available - - + + Current version - - + + Update version - + Would you like to download update now? - + Update is ready to install - + Would you like to restart app now? @@ -784,12 +790,12 @@ - + Access to file '%1' is denied! - + Read only @@ -848,12 +854,12 @@ - + An error occurred while start install updates! - + An error occurred while start replacing files: Update Service not found! diff --git a/win-linux/langs/hr.ts b/win-linux/langs/hr.ts index 7ef589752..1545a1007 100644 --- a/win-linux/langs/hr.ts +++ b/win-linux/langs/hr.ts @@ -4,7 +4,7 @@ CAscApplicationManagerWrapper - + Presenter View Prikaz prezentatora @@ -21,18 +21,18 @@ Svi prozori uređivača bit će zatvoreni. Želite li nastaviti? - - + + Document%1.docx Dokument%1.docx - + Book%1.xlsx Knjiga%1.xlsx - + Presentation%1.pptx Prezentacija%1.pptx @@ -40,8 +40,8 @@ CAscTabWidget - - + + Document Otvaranje... @@ -149,27 +149,27 @@ %1 je izmijenjen.<br>Želite li spremiti promjene? - + Some data will lost.<br>Continue? Ako nastavite spremanje u ovom formatu, izgubiti će se sve značajke osim teksta.<br>Jeste li sigurni da želite nastaviti? - + Open main window Otvori glavni prozor - + Document must be saved to continue.<br>Save the document? Dokument se mora spremiti za nastavak.<br>Želite li spremiti dokument? - + Print Document Ispis dokumenta - + Document must be saved firstly. Dokument se najprije mora spremiti. @@ -177,7 +177,7 @@ CEditorWindowPrivate - + There are no printers available @@ -515,43 +515,43 @@ - - + + File format not supported. Format datoteke nije podržan. - + %1 doesn't exists!<br>Remove file from the list? %1 nije dostupna. Možda je preimenovana, premještena ili izbrisana.<br>Želite li ukloniti datoteku s popisa? - + Document must be saved firstly. Dokument se najprije mora spremiti. - + Document must be saved to continue.<br>Save the document? Dokument se mora spremiti za nastavak.<br>Želite li spremiti dokument? - + There are no printers available - + Print Document Ispis dokumenta - + Sign Up Stvorite portal - + %1 is modified.<br>Do you want to keep changes? %1 je izmijenjen.<br>Želite li spremiti promjene? @@ -590,22 +590,22 @@ CPrintProgress - + Document is printing: page %1 of %2 Ispisivanje dokumenta: stranica %1 od %2 - + Document is preparing Pripremanje dokumenta - + &Cancel &Odustani - + Printing... Ispisivanje... @@ -614,147 +614,153 @@ CUpdateManager - - + + Last check performed - - - - - - - - - - + + + + + + + + + + - + + Check for updates - - - + + Unable to check update: URL not defined. + + + + + + To finish updating, restart app - - - + + + Restart - + Checking for updates... - + Updates are not allowed! - + This folder configuration does not allow for updates! The folder name should be: - + An error occurred while check updates: Update Service not found! - + Downloading new version %1 (%2%) - + An error occurred while loading updates: Update Service not found! - + Downloading new version %1 (0%) - - + + Cancel Odustani - + An error occurred while loading updates: package Url is empty! - + Update package error: md5 sum does not match the original. - + Preparing update... - + An error occurred while unzip updates: Update Service not found! - + Update is available (version %1) - + Download update - - + + Current version is up to date - + Update is available - - + + Current version - - + + Update version - + Would you like to download update now? - + Update is ready to install - + Would you like to restart app now? @@ -784,12 +790,12 @@ - + Access to file '%1' is denied! - + Read only @@ -848,12 +854,12 @@ - + An error occurred while start install updates! - + An error occurred while start replacing files: Update Service not found! diff --git a/win-linux/langs/hu.ts b/win-linux/langs/hu.ts index 9bdeb28c0..18903dba4 100644 --- a/win-linux/langs/hu.ts +++ b/win-linux/langs/hu.ts @@ -4,7 +4,7 @@ CAscApplicationManagerWrapper - + Presenter View Előadói nézet @@ -21,18 +21,18 @@ Minden szerkesztőablak bezárásra kerül. Folytatja a műveletet? - - + + Document%1.docx Dokumentum%1.docx - + Book%1.xlsx Munkafüzet%1.xlsx - + Presentation%1.pptx Bemutató%1.pptx @@ -40,8 +40,8 @@ CAscTabWidget - - + + Document Megnyitás... @@ -149,27 +149,27 @@ %1 módosítva lett.<br>Menti a módosításokat? - + Some data will lost.<br>Continue? Amennyiben ebben a formátumban szeretné menteni, a szövegen kívül minden funkciót elveszít.<br>Biztos, hogy folytatja? - + Open main window Főablak megnyitása - + Document must be saved to continue.<br>Save the document? A folytatáshoz mentenie kell a dokumentumot.<br>Menti a dokumentumot? - + Print Document Dokumentum nyomtatása - + Document must be saved firstly. Előbb mentenie kell a dokumentumot. @@ -177,7 +177,7 @@ CEditorWindowPrivate - + There are no printers available @@ -515,43 +515,43 @@ - - + + File format not supported. A fájlformátum nem támogatott. - + %1 doesn't exists!<br>Remove file from the list? %1 nem elérhető. Lehet, hogy átnevezésre, áthelyezésre vagy törlésre került.<br>Eltávolítja a fájlt a listáról? - + Document must be saved firstly. Előbb mentenie kell a dokumentumot. - + Document must be saved to continue.<br>Save the document? A folytatáshoz mentenie kell a dokumentumot.<br>Menti a dokumentumot? - + There are no printers available - + Print Document Dokumentum nyomtatása - + Sign Up Portál létrehozása - + %1 is modified.<br>Do you want to keep changes? %1 módosítva lett.<br>Menti a módosításokat? @@ -590,22 +590,22 @@ CPrintProgress - + Document is printing: page %1 of %2 Dokumentum nyomtatása: %1/%2 oldal - + Document is preparing Dokumentum előkészítése - + &Cancel &Mégse - + Printing... Nyomtatás... @@ -614,147 +614,153 @@ CUpdateManager - - + + Last check performed - - - - - - - - - - + + + + + + + + + + - + + Check for updates - - - + + Unable to check update: URL not defined. + + + + + + To finish updating, restart app - - - + + + Restart - + Checking for updates... - + Updates are not allowed! - + This folder configuration does not allow for updates! The folder name should be: - + An error occurred while check updates: Update Service not found! - + Downloading new version %1 (%2%) - + An error occurred while loading updates: Update Service not found! - + Downloading new version %1 (0%) - - + + Cancel Mégse - + An error occurred while loading updates: package Url is empty! - + Update package error: md5 sum does not match the original. - + Preparing update... - + An error occurred while unzip updates: Update Service not found! - + Update is available (version %1) - + Download update - - + + Current version is up to date - + Update is available - - + + Current version - - + + Update version - + Would you like to download update now? - + Update is ready to install - + Would you like to restart app now? @@ -784,12 +790,12 @@ - + Access to file '%1' is denied! - + Read only @@ -848,12 +854,12 @@ - + An error occurred while start install updates! - + An error occurred while start replacing files: Update Service not found! diff --git a/win-linux/langs/hy.qm b/win-linux/langs/hy.qm index c2571065ab3bfe0ed97117717a792d8e94055714..20848212c5cc9965f3c0ec3789882458b0695749 100644 GIT binary patch literal 18795 zcmeHP3ve9eeg9;6^|Vg1EZf2{@>;h15VmXy8?bC_>tWe4mUUS2gC@qT?pCMsooEp)ErT!}}4E5-6Dz2qlyzeFP>HLQ-g%Nzynaw3*Uo3PVdu+o4H+|L@!V zcK7afEgmzS>2y4&z32b^{{HK2-;6fC^4|S-zP5bnpI-OKx6VJt7*ockk97@nGdB0D zc(IkSIcvqWD~anMV_kb0JN6yMdb4b9|F;>d_`bNV`Z80#1OPo(vGNzc&RF$aR=?{` z#zL>K{)KNcHvbqqyZ;ztl@W1WeL4HelRsjt@dozNL%(FK{Vw+7`yOWO((6k$y!Iet zm%mW5Pg%j(Mzdt>+4+oZuPZtAXFq3b(TS4V{(S>uYkpet_|Gq5Y{4TXkAL_fW0$m- zyj}4;WAh%Gv*l}NaD8`9a>FjhcK+9#hh{ziAKxxzFWe0Rhf3>r-Uj&HrGq)pf9d(s zO#5cW)bEr|JlnxocWdd32l^SSD=&R{$1r%lM_ex|Fa4_r{+zKZ-Y@;n&jIhk^K*~3 zfc}R1xwq9WW~}7mxp(*f31j6y5!a1d#dXIHrTo|6qvko~k_R4#99~d*YQ70N{z%z% z?p^S`Q!)Rp5`3u2lRN(baBfnb{+(rz>muca4}tH>BJb^R22Xs&3@on)+jXT`}AH$(qFskr$l))!})ckL-lW678Mk03xK>upU(^J;(pB1a$oGnSt4_cDPx#&Os=NE|$LGJSdhEAJerK!x@Oy7Ewyn47 znfZ{*x)oK=J%R6i?t`j7egoHKuUEbG{1*5@s(RZCpsVLh^{x>G@_eHFTOqF7 zZm8autc3htuZ}f60ejh19W&Yi_qFQm`7h)5CDp%wJKmo&QvKpF*wc!#c?(J)r{-Jc zb)Eo!$}i^q-oyA_-ORlErXYusm*#!#zLy}sYvz6Z^WT8npBC4(&(HhImm4AX2W!es z41vC~nugvVFt+k3aqWDtrt$WFh1@1<)Te&U*p}lpkH2`9vGrf5`S1_mcb%o7Mg?@& z&JQ*2#6O)uf~vf+?Qziar%kh%-k z#iiEuhR~MF5f_#>hpudfoSMEA+SB|r{O{3F{JZx+u9?ueIXe7uhq$)x3*GtN+wj}_ zLf?H0{yF!Z&|Al#k0nOv7Z<(H*oN)3AHm)>{!Q%zuOl9` z9j$%tjZ)a@`8a~n-FU_pDVHhTbhGw6wQPC9_lI zcztnCS2og>PAB6L&5RqV0WGD)^vvOmmQL%L5(3$*3@Ms&N;!kSab-%mQOPKA3w)Fr zEaC!R+iOH}<9f;jil`BpJ&N7R1VGOyX&{+UqKdAZvQVU1nwc&X3&I&a3k;lGph>6A z*`isc^a1dUVgN}FkFy+UMoBOgC==k2xHF}&LKZ4LqaKRule3gpqtd})pBB&nI|fDI zpM+asONk)XkOqdek;Cz5OgFj2S1CII;WQpX>JiXPG@ikGM0XN&gAWOBL64p>_B#b$OSJ6+F7XL|SXMf5Z$DLjbj zBp1ZA5|bE~y0}y0Sv6&tYBrZn8yQoN`XTC6dbxJaDCYo}*Z^ptI(fep;2npQgyeFuKsuo%<54x8iBFIzg9JY|S8*pJsIUly zpaxq>!&P8sw$`!I1>7wy!9u=?*AQr1Qog3$Y()iOXE%ZHyojne8mJ+kP~AbIn6sz> z#>8Dm3b%epPwElVZK{59okCbhATa9C*eIS+prp`KU@my?lrm28$FmsQ#zt6%ZC9?u z@1n|#41EOW9KK=TJ;TzJS?GGot&-UG!x|NaqvK{}5V{Kpi!Sz1ki}D`Co&dM(0?eKVIw+JFiEPg?2>5q zvt^2Mr||t-@ZA}%K;r2%TZi{X@Ql<;Dvj{ZDHh&tb?tU7(xgaeF(Pdn%1_Kj z%hWSa9Y8t~u}H=wE>DV0376c1qMeA51QoRf;8LU{f}uA_=0=dIB{RAfomTa!c-G8v z3HKW6w2@OMHP|VX1mcUZ}$&%Px1Es#s1Dm2V`PNzFlqn?xNqMkIc`YCevM?98 zf^@qGv7da58nY<}s)Se7m5as=4krlA0cC&(s2NTqMPw2JIX9`4l8arQ5(8*s`1>=; zaeVKbkiHaH1g-RhOK5dHLx-fPMzRxuQro0#;RsMqaXT#%$|a&GI}SuS7pnT+y@w7; zT+!nbxjTe1w~i$KIptd|Y4 z9(JTSBB{L^06roi2Ptqr;O%Go*fqHJ;a@+X@5+OYfdr4b*DGJ-3KbRRq)VQBOu33w)Ki8=$vFVv}+0lsCwAQBt|e{3Q}kvMpSkgOHHEagLv7=RJB^ImLn_`R$Iv9 zDEM>di@Lt<4$0u?NN~p3gV9QY*BdiD6!07kBopA&7Ah%W6uwG%JYT?Lm_?04HZB40 z86Mat@sF9~$v^>ju)QqIb_294%1iwnhyGB^@~lYDb-Z#=HSP`X7O|hK^>{j_(qBCm zh|mN=0mzQ~Hed%0kg%=z7iKArUZmwTe z9IB-lZX0R7^2Qmd&mpdEV9&7B-1wLoh;lC*Ku8?{=V?ClOh7qQkHvhQ*76Z4n{n&+ z4gvK8gWdfO1;$7`kc9mhw@|7@bYSaYuGF48S&LU}yjl~pP1~IFr62~X<1RU@8PFmb zW4)fD0xqh$2dt7fj9JG6iKAJNO`KXloQA$tRAn^D!z2Kb%Zt`BmNa|G$)>5u%8uze zDymt;(QYIPGWZly5rzF6Op;!avhrml8eM#1nXiG2nRZF0Zm>5jMPNjOjj}TUaUTC3 zgjp}bAs51IpvZ><5K^6U%4$Izj|j^B#Jk%&8U}lZJ?YVi27AapkW(yECt>%LlYaT*8o|JfkV zlfkfC24=7f)`9aRau}6d)SDJ&bLUfs$3@{}E{4e)b@aT_;x7X^Z7nWr)WroSv(lCp zhmA=+6Eay~YhSaF)`?k7KDNyOEj| zD1nlzHQmE25nFjkDcUn+kXAk6<-o8LUNUBIcv;DY*dgxRG!H%lH^clwx){wP+#SOF zp+hd`&Q1h7_fo|>W2TmmMwB#;JtYNI&WFWafg)RxQ$IAOW&$UdjK#|lnhK&Cz>IQ0gj^&}l2c9IS){{*7mB=h_cWQ8FZxZBb!Das%; zg_g_5So-F}|nS z5=AueZ3@|Rbn5+#rcTrsp2Y7?;`eltH@gE-+dIU9iq0p=X8}dvv=46RDE(GxZggZ2 zHS}z1wP_t0ETEE_N(XaEoG9=kgX*3EoT0f6MeRcm;>631a||DJ zxIwYmIaeeJIgm)T^4NrP<2}mV01mK4F>XY$ZiG`@B0ulMBcbbQ&$(^^1ONM{x&u z)pKY3H@93kmh@45O5MC>dKb5fW1GQ@i3a3!rb;d^9F{P<;}f-dyh!4kM)XZO8SIn? z>+PUWoE6fU;R#f7WcCyW2nrQg;;>x|Xz4TSY}-Zo)&T=2peB|XR3qgaqmy$OXzj&e zD~?_1JGylMu4<|2No~5gS2usUWAFmSEam536!TJGh`js+ukC1*?<|g#55;3C^rBMwPRwD)^Hpi zBUu*1)a{Gu40PjyuN;N8FxN(cr6pea+kts6j9y}1;l+&p3y3?hC>7IHglJ<_ZRzl% zV-dGB7rwmZr)n-Fz?0ifg;Ki%hnW;M$kopZ_p!4DXeW7*BqL;bpqm1Xvn(b~UFp!6 zvgB#bZQKRTZU@Dh1qBy^Ou)=|_!%`|Xv>A*#K+b?G&hy|1DPHH88?UmpnzrC zPZ9+P#VTTl3Wc*=Jf!T;lKpN!_Gu>!TKyCPnEAv4D8{_4dkVS~u=x=#JID@TthAnc zU=*KFyu!L0gcNh>c>AoGOly$@dBwp@l7cg4n&z~xhVS)d&@M5_Y>Amdv-V+;UH2L5 z*VnvrsT1+^r_k=K)(b;Dg?_QlS88PKPB0+5cb4nt_i%Sa^0#UB^Sh3Z13xdAE#_Fr z>|KatU@PQhrDr-NLYFW>@^4B8hHDw8wuj;ihF=rdfx_JrejIep1}bDlrcV1Vgaxe( z-f{NaFV4e7)|^YzjuC}1Kg{;D%@v&h)g5oRR@^+<`=gdx{2+IOC((}O%ZIcsrlK}h zjzgxiH9VoUFsCm@3odq6Nl__%(v~OXvNbIoExcJRW_mk61rZxThC>3DLH$YC=ug2W zWd~FxL||7jl#yoWT$-ye&jBd1$y~K?pN7p-k(hA54OPNOSAHVD%;N}lo}`YK7O}nc ziV(SXt(k6}5jBdX+W<#c!ly4}@DWloUjWZvJ1#$sP2-Pw~{%v|r`+;_*C;8eTx6pXGv7x|MA)jJ+XeuCP0}c-F@-V@s^+4yw zm8*xx;9#SCT1mUJqw!cS!|yrbEj%w5v}DqlbO)B@Dz+o-AEh+xU}ndRTr!H?;!abKrV*ACy$_n*E3(?fDh~|jfq|3dR4b$W;70-?d8-T~H!Nk_y{CxERT~x*$OU>KilP<8@IZ~ ziqnWIz9D6s4f9Z`&s`wnQ0CzP8(HrYM*M{1E}T!Pj{;0(al)l9CthbeS2h#x41?ojsqtx$s6}#?5*<1m75EfAep#Sqsvf376}(f zt=m0dE$`v+*Dl$_J&QD=pg7I%^y1wE9|}m08wEO8D&K6z;Del7_wNS6O3;waoByam zDVlZhuGp#9T*6;m>?j`(1!vE^NSipU_sO`M|{S-x}|+JRgY0Ug&8hyhCFy1khWq;6`@@^N<~-1?ug~lt`1oBN10DX!9dfBy20CSYaVssLQ)B26XPy zvolt~6atjn7DlBjiCP>jkY!PdusU8otZ|Qi?8Nj*hc$bG`4hKK@b-=FO}N0&#$!D7 zSR=Nxj1^<0`pdg>)9QYM-_h;)(X4u4&o3H^-3=xYRoFM&6qwIv)0lZkxsFE*N0YJ` z;7iq1Y|{<{-Jv1eh!==>Wgmi3A(1z1!>1z7pg49}kLE0*rRaWZ+&V{&gVqJz zy!V8Q*8?6h+dPgVQX^%alib&F#{!(hKwm&NUbzPbHT|M~QfZN%ZxDFEt||hy&>Nlm z(?T}59G?RgC}^&-N12w2oU`93_=e9d^d73#;KV}QMN8#~&;gCL3JQ9Osqz4}U2&+8 zg~hZe+Q(O%ji|mwq5g^^AvaNHvnNX9U8~C1y2H>`4ig{?K5B%V| z#t)O#z!r@K4Pwy}v{MC{5y3=KJ9j7%=gpEwsMhV0-rsP6iW>~YoS;~_JD=bo?I16^ zDqat8RoSkHh8!`Oqacr_2yBhuC2_Sw#;7?-m8__03ryEp-?NVIsHft09ZaFGaNpig icf@sf!<2P%gNLj#-sL<0#YpKjdDixuC=}+Dmi!MEEOgfZ delta 811 zcmXAnTS!z<6o&sZbIzIj8D~bv(b3V=@lvT#R9KLTjy5TIOQNI%BTA?dNuvzXiXJLU z@nmRMEX2H&;3>;2q0*etG??xb4H9Ab5M9U~v|4hWKK9Sr`~TP4Yo>{LQrs9`tMCHc zT0oH?GwviY4~W|hls+cj1nV9G)Dtoz&q6ia3+PywUCn^N;>gBQK(j;UqBykoyaj?P znaAX13rHza4i~xsW4h9tx{1tNWd_Z$+nn@} zIgzb51_Mku+v2_tsNTzrc`Y-xfm8j91`M0IC6_vZfNUr@~2cXSYTaz;ZWt@6(^&tv0uC70KfC521 z(nEoa_cTRw0ucL9Q(v{$2ZVYxw;xcafm51kYaxxyqWQ};0#VPkCaZ&J*0#7WlD<(RN&I0`(d%L+}PNnDp1yH1z8hYUlO>UKH0XtFM`RB5dZ z`>nSy$Eke3eoaj~$us&32Y%9kM)bWUwh2!q*Fq5h@JL5h52ZSQJ8}Yk_}c z2386wt7-M@W}$qPe#-hxX#O@ued~l#KdlZsZ8Ww`(1#o>r~ULv<7|drsxXZ((s@fi zBVG+UEuFG{W~3?G7$f=YTNTo1M7L6W6+I@-$85Ov!>JO}5 CAscApplicationManagerWrapper - + Presenter View Ներկայացնողի դիտում @@ -21,18 +21,18 @@ Խմբագրիչի բոլոր պատուհանները կփակվեն։ Ցանկանու՞մ եք շարունակել։ - - + + Document%1.docx Փաստաթուղթ%1.docx - + Book%1.xlsx Գիրք%1.xlsx - + Presentation%1.pptx Շնորհանդես%1.pptx @@ -40,8 +40,8 @@ CAscTabWidget - - + + Document Բացվում է... @@ -149,27 +149,27 @@ %1 փոփոխվել է։<br>Ցանկանու՞մ եք պահպանել փոփոխությունները։ - + Some data will lost.<br>Continue? Եթե շարունակեք պահպանել այս ֆորմատով, բոլոր գործառույթները, բացի տեքստից, կկորչեն։<br>Վստա՞հ եք, որ ցանկանում եք շարունակել։ - + Open main window Բացել հիմնական պատուհանը - + Document must be saved to continue.<br>Save the document? Շարունակելու համար պետք է պահպանել փաստաթուղթը։<br>Պահպանե՞լ փաստաթուղթը։ - + Print Document Տպել փաստաթուղթը։ - + Document must be saved firstly. Առաջին հերթին պետք է պահպանել փաստաթուղթը։ @@ -177,7 +177,7 @@ CEditorWindowPrivate - + There are no printers available Տպիչներ չկան @@ -299,12 +299,11 @@ Excel Open XML Աղյուսակի ձևանմուշ (*.xltx) - Macro-enabled spreadsheet template (*.xltm) - Մակրո-միացված աղյուսակի ձևանմուշ (*.xltm) + Մակրո-միացված աղյուսակի ձևանմուշ (*.xltm) - + XLS File (*.xls) Excel 97-2003 աղյուսակ (*.xls) @@ -520,43 +519,43 @@ Այլևս չհարցնել։ - - + + File format not supported. Ֆայլի ֆորմատը հասանելի չէ։ - + %1 doesn't exists!<br>Remove file from the list? %1 հասանելի չէ։ Հնարավոր է, որ այն անվանափոխվել է, տեղափոխվել կամ ջնջվել։<br>Ցանկանու՞մ եք ֆայլը հեռացնել ցանկից։ - + Document must be saved firstly. Առաջին հերթին պետք է պահպանել փաստաթուղթը։ - + Document must be saved to continue.<br>Save the document? Շարունակելու համար պետք է պահպանել փաստաթուղթը։<br>Պահպանե՞լ փաստաթուղթը։ - + There are no printers available Տպիչներ չկան - + Print Document Տպել փաստաթուղթը։ - + Sign Up Ստեղծել պորտալ - + %1 is modified.<br>Do you want to keep changes? %1 փոփոխվել է<br>Ցանկանու՞մ եք պահպանել փոփոխությունները։ @@ -595,22 +594,22 @@ CPrintProgress - + Document is printing: page %1 of %2 Փաստաթուղթը տպվում է՝ էջ %1 %2-ից - + Document is preparing Փաստաթուղթը պատրաստվում է - + &Cancel &Չեղարկել - + Printing... Տպվում է... @@ -619,147 +618,153 @@ CUpdateManager - - + + Last check performed Կատարված վերջին ստուգումը - - - - - - - - - - + + + + + + + + + + - + + Check for updates Թարմացումների ստուգում - - - + + Unable to check update: URL not defined. + + + + + + To finish updating, restart app Թարմացումն ավարտելու համար վերագործարկեք հավելվածը - - - + + + Restart Վերագործարկել - + Checking for updates... Թարմացումների ստուգում... - + Updates are not allowed! Թարմացումներն անթույլատրելի են: - + This folder configuration does not allow for updates! The folder name should be: Այս թղթապանակի կազմաձևումը թույլ չի տալիս թարմացումներ: Թղթապանակի անվանումը պետք է լինի՝ - + An error occurred while check updates: Update Service not found! Թարմացումները ստուգելիս սխալ առաջացավ՝ թարմացման ծառայությունը չի գտնվել: - + Downloading new version %1 (%2%) Նոր տարբերակի ներբեռնում %1 (%2%) - + An error occurred while loading updates: Update Service not found! Թարմացումները բեռնելիս սխալ է տեղի ունեցել՝ թարմացման ծառայությունը չի գտնվել: - + Downloading new version %1 (0%) Նոր տարբերակի ներբեռնում %1 (0%) - - + + Cancel Չեղարկել - + An error occurred while loading updates: package Url is empty! Թարմացումները բեռնելիս սխալ տեղի ունեցավ՝ փաթեթի URL-ը դատարկ է: - + Update package error: md5 sum does not match the original. Փաթեթի թարմացման սխալ՝ md5 գումարը չի համապատասխանում բնօրինակին: - + Preparing update... Թարմացման նախապատրաստում... - + An error occurred while unzip updates: Update Service not found! Թարմացումներն անջատելիս սխալ տեղի ունեցավ` թարմացման ծառայությունը չի գտնվել: - + Update is available (version %1) Թարմացումը հասանելի է (տարբերակ %1) - + Download update Ներբեռնել թարմացումը - - + + Current version is up to date Ներկայիս տարբերակը արդիական է - + Update is available Թարմացումը հասանելի է - - + + Current version Ներկայիս տարբերակը - - + + Update version Թարմացնել տարբերակը - + Would you like to download update now? Ցանկանու՞մ եք ներբեռնել թարմացումը հիմա: - + Update is ready to install Թարմացումը պատրաստ է տեղադրման - + Would you like to restart app now? Ցանկանու՞մ եք վերագործարկել հավելվածը հիմա: @@ -793,12 +798,12 @@ - + Access to file '%1' is denied! '%1' ֆայլի մատչումը արգելված է: - + Read only Միայն կարդալու համար @@ -857,28 +862,24 @@ Թողարկման նշումներ - - An error occurred while check updates: Update Service not found! - Թարմացումները ստուգելիս սխալ է տեղի ունեցել ՝ Թարմացման ծառայությունը չի գտնվել: + Թարմացումները ստուգելիս սխալ է տեղի ունեցել ՝ Թարմացման ծառայությունը չի գտնվել: - An error occurred while loading updates: Update Service not found! - Թարմացումները բեռնելիս սխալ է տեղի ունեցել՝ Թարմացման ծառայությունը չի գտնվել: + Թարմացումները բեռնելիս սխալ է տեղի ունեցել՝ Թարմացման ծառայությունը չի գտնվել: - An error occurred while unzip updates: Update Service not found! - Թարմացումներն անջատելիս սխալ տեղի ունեցավ՝ Թարմացման ծառայությունը չի գտնվել: + Թարմացումներն անջատելիս սխալ տեղի ունեցավ՝ Թարմացման ծառայությունը չի գտնվել: - + An error occurred while start install updates! Տեղադրման թարմացումները սկսելիս սխալ առաջացավ: - + An error occurred while start replacing files: Update Service not found! Սխալ է տեղի ունեցել ֆայլերը փոխարինելիս՝ Թարմացման ծառայությունը չի գտնվել: @@ -929,9 +930,8 @@ Պորտալը բացելիս սխալ տեղի ունեցավ՝<br>%1 - App can't working correctly under admin rights. - Հավելվածը չի կարող ճիշտ աշխատել ադմինիստրատորի իրավունքների ներքո: + Հավելվածը չի կարող ճիշտ աշխատել ադմինիստրատորի իրավունքների ներքո: &OK diff --git a/win-linux/langs/id.ts b/win-linux/langs/id.ts index 043bad341..e2e46151b 100644 --- a/win-linux/langs/id.ts +++ b/win-linux/langs/id.ts @@ -4,7 +4,7 @@ CAscApplicationManagerWrapper - + Presenter View Tampilan Penyaji @@ -17,18 +17,18 @@ Semua jendela editor akan ditutup. Apakah Anda ingin melanjutkan? - - + + Document%1.docx Dokumen%1.docx - + Book%1.xlsx Buku%1.xlsx - + Presentation%1.pptx Presentasi%1.pptx @@ -36,8 +36,8 @@ CAscTabWidget - - + + Document Membuka... @@ -140,22 +140,22 @@ CEditorWindow - + Open main window Buka jendela utama - + Document must be saved to continue.<br>Save the document? Dokumen harus disimpan untuk melanjutkan.<br>Simpan dokumen? - + Print Document Cetak Dokumen - + Document must be saved firstly. Dokumen harus disimpan terlebih dahulu. @@ -165,7 +165,7 @@ %1 telah berubah. Simpan perubahan? - + Some data will lost.<br>Continue? Jika Anda masih menyimpan dalam format ini semua fitur kecuali teks akan hilang.<br>Yakin ingin melanjutkan? @@ -173,7 +173,7 @@ CEditorWindowPrivate - + There are no printers available @@ -515,43 +515,43 @@ - - + + File format not supported. Format file tidak didukung. - + %1 doesn't exists!<br>Remove file from the list? %1 tidak tersedia.Mungkin telah berganti nama, berpindah atau hilang.<br>Hapus file dari daftar? - + Document must be saved firstly. Dokumen harus disimpan terlebih dahulu. - + Document must be saved to continue.<br>Save the document? Dokumen harus disimpan untuk melanjutkan.<br>Simpan dokumen? - + There are no printers available - + Print Document Cetak Dokumen - + Sign Up Buat portal - + %1 is modified.<br>Do you want to keep changes? %1 telah berubah.<br>Simpan perubahan? @@ -590,22 +590,22 @@ CPrintProgress - + Document is printing: page %1 of %2 Mencetak dokumen: halaman %1 dari %2 - + Document is preparing Menyiapkan dokumen - + &Cancel &Batal - + Printing... Mencetak... @@ -614,147 +614,153 @@ CUpdateManager - - + + Last check performed - - - - - - - - - - + + + + + + + + + + - + + Check for updates - - - + + Unable to check update: URL not defined. + + + + + + To finish updating, restart app - - - + + + Restart - + Checking for updates... - + Updates are not allowed! - + This folder configuration does not allow for updates! The folder name should be: - + An error occurred while check updates: Update Service not found! - + Downloading new version %1 (%2%) - + An error occurred while loading updates: Update Service not found! - + Downloading new version %1 (0%) - - + + Cancel Batal - + An error occurred while loading updates: package Url is empty! - + Update package error: md5 sum does not match the original. - + Preparing update... - + An error occurred while unzip updates: Update Service not found! - + Update is available (version %1) - + Download update - - + + Current version is up to date - + Update is available - - + + Current version - - + + Update version - + Would you like to download update now? - + Update is ready to install - + Would you like to restart app now? @@ -788,12 +794,12 @@ - + Access to file '%1' is denied! - + Read only Hanya baca @@ -852,12 +858,12 @@ - + An error occurred while start install updates! - + An error occurred while start replacing files: Update Service not found! diff --git a/win-linux/langs/it_IT.qm b/win-linux/langs/it_IT.qm index b520f898106f4280a2e6ffecd4a73da86ba38678..de27eb241dcdb12880cc34059a19c49b84ab291f 100644 GIT binary patch literal 19895 zcmeHP3ve7~eg9-zZ|fvKBa9y_#flXtkso=>#)+P`jBF{A{74~$)!piJ@!jtAZcmcU zG=xl`E#sk-HcWUGLZKunl=3Rjl%@&EBn{)>NxT}94CYrd02>>KP$wc2gRzfzZRl-K^=P!i2C=I(9n z6!7>|{m30Z0^Rv~_uI`vtouU!2e1DQ)_HgRM}Kb{)_JJ@{$~MiAY1>~KfDe2jMsnj z8;%e=Ufa<83&1)+K>Hr{swG^6FmjZZ!fw6DFnY2&V8Ayy`vwheqsh>QQCX=mv*pzA-IUUTO4 z(2I>tufGZW=|9zU_N_~}K{P$`!Db=W+}`x~J5GHlKCBDn!@ooA3Pi`-Ql2SRIFZnm_Oi*1hWL=1+X)>q2z?y!ms- zc7WbDG(Wj<3i3bI{EPZG3vtQaEo(Mzg?=Pj%md)>{`ozCtoqJmD8had%YNAM$@_5KmK803`4t?ydRoqX`dZk*ldb#j2VMss zXdRiY7h?NZ>*%J7Au;c)?HAvGYvg+NXe3Gn@<#G~h6pY`*Jb2mdCFa7PrzrEyXA@=;Bz40kr zzbV(=e)kukMO)f0`Wf`?^6#|2>&x&5yB}@;V3a8?vcO;p4Nyjlkx=Ty(0zNKt&sS)Q}h6aksfqXujNt$lPv5%OxnYIci3T8fU z73#RGA%?MBQj|naSi%;rUOXkg_ZM#;c9Nx>WxD{7a+1ph&?_cI0ZSLl%bVhiq`=0x zq9QNy0P6!zVkw_@ z3a*uk0zMAlHkKtp8N7-hE(1VWEKZH7B;C`cn#gJfY#Om$=u$EuC65hJh#U?f;-Qf# zD=yJXN~()^U#^;Ltc8X;-<5q^ajuK_7u?|f+MUk(zN zt8Ye4bJE-k7*QLS^*9%4Je#EtB1>v`b`=(ir01x2E-Z_P@wkHy;9%gZV%;`0lFGPF;Y7wxIg2tL9ff8wT~NtTFiBEUg_Fat#88C| zo-wt^03RBRk1G=^KONZS*`JXs6}e_J8tA;`IiM3pf#{KubfpZX zE>NYZnE1{Luzk9M$;$Gp+2Awz+6aS|E#rg1nQ~%4q9I+lx{rUp2a> zogCzCx+bKM%^F#!=t^A}Dl0~m3Ji*)07B-dOpFN+LopHZ#ig{ELL&>95Zd@Oix-js zEx2tn^H#w!OuTG|nE<_e(J&W~Fq^Yki<+@M zxLCtTz|oAtRU5rK`+D|X%q79rwwZj*=a2MSu8?AD_er*csZOt6QF=NDux1Eo~Pk*mZlGK^Z4&WdJECeYOA zzLZJx8>F##XGL28uW4*NS1d|G1r`Eq>KK|nu2nBtT!`hXWQW}<`O@T^@ zTL7vQ0Je7c@bP0BTI!aCQY^UrHNl;bl(U4qR$MJEgB|V0-{qP@6>EIkT0cB7q}?uc z0r4Xi?B<$ahf(?tiIZAs+pz3Oy>6Vq#>Ek!tnyQeO*tGd^C(GC8d&`(Du^3#9L3)l zV2xCev;=+k$?7EhQH?;Eu%)?J(t0CMsfy2<%r!bXyH*aC?@E6cWuh|y1*dW|IF#T~ zXF;UuKzLOFO+eKN3{DIW^t}vCo~BZ(d9P3M+L6g)gIay8d}%h8*eigH-}&;mP7qlD zqFMN|7(q{reEGcTL1#=co^c4IE^D?{tVuifTqXn zd3?@cr2w-J%^Vrmc+I=HY%H^{g31QHJLP*AW!gav;ue5TZSdVn#{zW$LM`Oc;VtZg0T8hdf0L3&-gS9-rhYjHj?HN_$v@bcyk`(3k#EYM z&B`+$<^IFKPhpFrMEc@=`zBE!f`YuA#>v6V98c1jIh+jU@;sT%D_1B}kj43%pOC@;YrOfCl#;A7G{q ztt`QH_Mty4PxWhOT;a`|u$zg{Lyb;%2%V4znOTN4PDOBLInLvJsC9)6)ij+QmH-}I&hEBC^8Q^rl!=qi9I`&Q~tOP|9Z(?))O z5{fb&pgfPTxD@bzYbPhCPx`dyi%YS{O~yunNw^Va3M9jgeTUOAIqByT z2%fQMjK`wkDfsz$f&JbvFJ^+gaN~J#X&@Tp;ciRiyvbKH|2v<~jg#3@8ht?a5@cp4 zPh+XQDwbNM7d2R~_3wg7XVEH5I&2sQJx!bz?v8LUkv>mD+Ykh?tkhytBz+mZYFlvC z*uD<)1kc4N-gwc?%aqi&!O+dtM^eU4Pk7wR4f=?VsTtob72J5YRLez7ql4nR2zE_^ z^~##*;{g{@T!?oOo6)6V*~u+Oueqx>rLoDRS=K09+yk-9+AjM&Y_oVduv(Ed0vQzE zT4^iqsf{|>lvRjRpKBu2=e+SrW4}Hac$O2TjX-|rdCO3Bu9sdNSUQ$F`>Rwbs5GoE zm};qB1f8vlXml#U46kG6r0?0>rFhS_y()QDEjYew;F^-ejJ4$I9gJ97IJgrwi|XZC zFB*Td+8mF5X7GOGz|I$_NklW5__;n7{iE5B1w zZtLj<+t7JQ>2x-3)uRDD^4AM#5@ew}JosF@aj2%Ee8=B$a@?;pFd7x>^4a-Xez6lD z=*r_+!9WL8{6NPstypCC*5tDnWm#@dYvo^pL4@k7lam3e^YK)FrMwvt9CM(vuG~%G zhJ;bxgJi0s+Qe!Y$1jNK)VWel9+mUI6!)ps)Xt46ohfEs&DI0AP_ad-xAgrDk12VD z+RkT=<2C%~G5t+5p3x(y_5IB!Zil2Ct7z|V%iAGc+~c3Jat`)?Wi~KZaB>E>B(vBp zk=r4yLr1V@7}yB@^=)470{)mN$vG(ud12q0$XD#;oU*KZXeYZ0{a@!kb`>)JcXzR? zNbL=5U~;g>l0KXJx(xADe|8Lh8kh{|7K(7(1j43K=E3YNm~MDHt~SIa_!@RRh%@UT8X~J8j{@Qm9wf~KjCn{7g>k2h_c3Iv zehKHglnK*#X~Lu!|j=C(=L9uZ}gRka_Gk=)}xcL6wL%9Rh@iMQQVd41);ub*Qm=xX%S5nY<=*ALi+RVX+G z!$~Gfg#r|Gah{$oId3IT8Kpd?P^@Ayv|X{)dRMV1b5&Ved-DUqn3%k%P59iMnX z8OSnEG2dg(i;0PYQB34SAN1^bu<_v+6&tf+hd3stWTVdWDYS03BsfIn`9Nhg%s^=? zzP24$Hly-p@)RxqSRu=Rg-)}3I#SnO7-J=IYTAn=1k59Y5LlS=x5R5T);dXo-&G}Zm>LAufk7o-EeP{kZ5p~VFAux!`xB< zlQvb#bFPhUJqm-pa6Sxpp6^vbj&@QBOM7Jv5syEqiRQ8pqhO57ntc%*V_-C83aDI* z%5VL-bT1GGIiZq?UO86S6KEWufuf*OfVQ>h@tT=LZ_nNy*+!_P(uZFVban$FzoCNR z{-ay-Gt>IDHlN)*S>n?c5k z9x7O2(iJAf2h~(wS=Nadb4nn}sHb9>`S^<5IAs-Gv*1S2@J!ig)bs>1HVz0?J9OrD z;a-SRbmnc|go#%esU(O#Ux^UGPVCX(LJ_QxN8V_de3vzu< zlo1NU6!9TUWY}8XH_Xh#u;*mgn^WX-nRKZjp9_>N9htV7*{rh|bZT7&CVjn|Y!j2m z#d)WcO<~HuKT=nI1G+-^USUc;Pzyai#A^z>TXZUX>PgBM=jsk{R8zBUhTT~^Q=C`& z0$aWmbGTCe1|G?b(t&>HK#Yq5EV|2@{W=YMT{+@w50h+l3z2a+Obw1sW!kOgN>|@RG46ur{?fDV44zFf|Q{B5~AOqrM=O9 zN!AXDi5lf)^+i4QA3W(V6X@lmvR3Lha;YmZ0G;!#3SFV(ylkX6g$%Y$&8%z-)nY(5 z3jA;ZR~6Ybe-mZ!=SdaDv17-+Lv<411!n%{@q@fljj6C_Q`_`@w%)0L!vf?p0BEw& zby(3g-%$ilHIq*Uli_S)|B4v|?xAX!feHPKPDp>mar|uN6#7+2Tf*4|JlmpdTGe8B ze+{(4-Y1yY(5F|U&|Qr}z!SxS|NqT`ip_$?8zyFN!6T2dPjG$NN3n!dVU1phW*B_V zVTass*@5rqx|v<4aZR|m+&YjH+diLyKo}034>;rT$T7)34h8^nBN^NmX z14&mt#!_|t^M4K_1pd|+q_X#-Ce4kd1`Wr{C+N&+N{q_%YW;ez2=PS|yeFzAXOo!e zGrPll5Zui6b1$W5PZej*zF?$8Mw~KH%Sf*@VSQ1AsRW`Nrpl>kv06XQJtwNXph8Og zmR&Hxqx)r4rMoRv^%>|hnYJo{c`d~M*(TtjcuuKDpJXY_=ZenL3=AoGCu}S!6K!v! zvFuv4lo|(1r;VeI{J#;QTbI$32wmTyn*n4!Y9S4x$$M4TonhhWg#| zTE%S$nO9bA`l?FR3&DKE9`)(vM%(W{n=^9XxZ*p_QV z&Hh!>r!umXt6-Rab!DYqQ7`G0)^H_+E5!Ujz8qTiimKdO8#maeytH~^bPf_(lrr%L z)!L_>Id_rSu*!_9)RCiI%5_%`v@W442|i}jaWe3f(Ng&#qY$dAAO+w4R^C{lRlkFD JW<_1ye*@(6x4i%W delta 1068 zcmZvaeM}Q~7{|ZY>s@<&xejPcdFfFo1uU;|O9rS>1E^IH2P0-%l;~(!4T6E%DI`{n z{-F{DFPJL6M2s^qrqR<>!t@WO5&dJvIhMWXY|LiV5Z!zUYBuz#7ymPtyU+ced+vF@ z&r7tQ>G$_I!|XDEn+0fUR2GDYwLrnAK;sWU(f`o;E&@VGrF#zR#b|_LFK0vNW&(v0d#TO`d@#z6&m}p$TczV7`!bC}+Ma4xcqoOnK-+Ce1{jYv z;`<)Z?^KyLrqX+j)4g^B;@4dMp+O+w0#{)^PkGLB!8-!NNRqhWd4ExWBixxi85CfQ z8~=4bC9dXf|K0|;3wdFh5)?-HhKULwL*!Tg+e(6d<^!!C(z%&$9V4NcHa_xjC7|2K zEAu}ifjjxwR5?x5aAbbGIF0@7FMhCVqFrlvj7+lwm!_Dj8YeHW0p zSl`vTotk`D-@R`GDTV&>ut3UZ3Lj-XrDkUf_5X=L{&Jx^coT4bBlMj;4&=R5>3t=f zyFi^uJ}lg~*8w??glVpam~BX~OMs`z5b+(PVU!zA?5>Gd)?rW*NO|5mLv-i?kn-3N z8z}>{_l>hhDN#{{v1&C(l};HKq|TsLUQ_AqGFG>cu(TJ(W@(5v=ce4q+QY7LQxZe^ zGtQXGJ4qMcX6oNSx|utsQ(v5=rCF)c^NZ=~xP$7RH1nPH)Q}0YwemWUWmGw1h1t>b zgzEc8ba0f`azk`1Bql1N6hEhkDpMy_O8svcM&^JhdC0-lBTAQvPPgca|6pT8R~6BI zKxJ~8SoSe(xwJ?OT%n1lbcx$Ee!%oxWzJf$@9|w~R7|`QqZQ@8vRID(NaJu?qCc@T z$%z0^?4mcMVgcIFj1~lxKeV|Ca-DsbGAH@AR=JuU)X3>JyQ0fH&C1!H8*)R=fU+hx zT_^up)ULQoCN*;JBDd@+waV7=Cgt-AiIKCaYROnahGlYTjagpmJ7z0^53T4x5UVIn z3q9N6S85kGF*fV_KFPP16z3M9{;hjRb%zUny4w+;bBL}uDU9r`_FLZh#uLPC2dcl7 Iduwvu0JFagCjbBd diff --git a/win-linux/langs/it_IT.ts b/win-linux/langs/it_IT.ts index 20cccf66f..abee30987 100644 --- a/win-linux/langs/it_IT.ts +++ b/win-linux/langs/it_IT.ts @@ -4,7 +4,7 @@ CAscApplicationManagerWrapper - + Presenter View Visualizzazione del presenter @@ -21,18 +21,18 @@ Tutte le finestre dell'editor verranno chiuse. Vuoi continuare? - - + + Document%1.docx Documento%1.docx - + Book%1.xlsx Foglio%1.xlsx - + Presentation%1.pptx Presentazione%1.pptx @@ -56,8 +56,8 @@ CAscTabWidget - - + + Document Apertura... @@ -160,22 +160,22 @@ CEditorWindow - + Open main window Aprire la finestra principale - + Document must be saved to continue.<br>Save the document? Il documento deve essere salvato per continuare.<br>Salvare il documento? - + Print Document Stampa documento - + Document must be saved firstly. Il documento deve essere prima salvato. @@ -185,7 +185,7 @@ %1 è stato modificato.<br>Desideri salvare le modifiche? - + Some data will lost.<br>Continue? Se continua a salvare in questo formato tutte le caratteristiche tranne il testo saranno perse.<br>Sei sicuro di voler continuare? @@ -193,7 +193,7 @@ CEditorWindowPrivate - + There are no printers available Non ci sono stampanti disponibili @@ -535,43 +535,43 @@ Non chiedermelo più. - - + + File format not supported. Tipo di file non supportato. - + %1 doesn't exists!<br>Remove file from the list? %1 non è disponibile. Il file è stato rinominato, spostato o rimosso.<br>Vuoi Rimuoverlo da questa lista? - + Document must be saved firstly. Il documento deve essere prima salvato. - + Document must be saved to continue.<br>Save the document? Il documento deve essere salvato per continuare.<br>Salvare il documento? - + There are no printers available Non ci sono stampanti disponibili - + Print Document Stampa documento - + Sign Up Crea cloud office - + %1 is modified.<br>Do you want to keep changes? %1 è stato modificato.<br>Desideri salvare le modifiche? @@ -614,22 +614,22 @@ CPrintProgress - + Document is printing: page %1 of %2 Stampa del documento: pagina %1 di %2 - + Document is preparing Preparazione del documento - + &Cancel &Annulla - + Printing... Stampa in corso... @@ -638,161 +638,167 @@ CUpdateManager - - + + Last check performed Ultimo controllo effettuato - - - - - - - - - - + + + + + + + + + + - + + Check for updates Controllo degli aggiornamenti in corso - - - + + Unable to check update: URL not defined. + + + + + + To finish updating, restart app Per completare l'aggiornamento, riavvia l'app - - - + + + Restart Riavvia - + Checking for updates... Controllo degli aggiornamenti in corso... - + Updates are not allowed! Gli aggiornamenti non sono consentiti! - + This folder configuration does not allow for updates! The folder name should be: La configurazione di questa cartella non consente di applicare gli aggiornamenti! Il nome della cartella dovrebbe essere: - + An error occurred while check updates: Update Service not found! Si è verificato un errore durante il controllo degli aggiornamenti: Servizio aggiornamenti non è stato trovato! - + Downloading new version %1 (%2%) Download della nuova versione %1 (%2%) - + An error occurred while loading updates: Update Service not found! Si è verificato un errore durante il caricamento degli aggiornamenti: Servizio aggiornamenti non è stato trovato! - + Downloading new version %1 (0%) Download della nuova versione %1 (0%) - - + + Cancel Annulla - + An error occurred while loading updates: package Url is empty! Si è verificato un errore durante il caricamento degli aggiornamenti: l'URL del pacchetto è vuoto! - + Update package error: md5 sum does not match the original. Errore del pacchetto di aggiornamento: la somma md5 non corrisponde all'originale. - + Preparing update... Preparazione dell'aggiornamento in corso... - + An error occurred while unzip updates: Update Service not found! Si è verificato un errore durante l'estrazione degli aggiornamenti: Servizio aggiornamenti non è stato trovato! - + Update is available (version %1) L'aggiornamento è disponibile (versione %1) - + Download update Scaricare l'aggiornamento - - + + Current version is up to date La versione presente è aggiornata - + Update is available L'aggiornamento è disponibile - - + + Current version Versione attuale - - + + Update version Aggiorna versione - + Would you like to download update now? Desideri scaricare l'aggiornamento ora? - + Update is ready to install L'aggiornamento è pronto per l'installazione - + Would you like to restart app now? Desideri riavviare l'app ora? A new version of %1 is available! - La nuova versione di %1 è disponibile! + La nuova versione di %1 è disponibile! %1 %2 is now available (you have %3). Would you like to download it now? - %1 %2 è ora disponibile (e tu hai %3). Vuoi scaricarlo ora? + %1 %2 è ora disponibile (e tu hai %3). Vuoi scaricarlo ora? %1 %2 is now downloaded (you have %3). Would you like to install it now? - %1 %2 è stato scaricato (hai %3). Vuoi installarlo ora? + %1 %2 è stato scaricato (hai %3). Vuoi installarlo ora? @@ -828,12 +834,12 @@ - + Access to file '%1' is denied! L'accesso al file '%1' è negato! - + Read only Sola lettura @@ -857,7 +863,7 @@ Install on Next Start - Installa al prossimo avvio + Installa al prossimo avvio @@ -896,28 +902,24 @@ Note di rilascio - - An error occurred while check updates: Update Service not found! - Si è verificato un errore durante la verifica degli aggiornamenti: il Servizio aggiornamenti non è stato trovato! + Si è verificato un errore durante la verifica degli aggiornamenti: il Servizio aggiornamenti non è stato trovato! - An error occurred while loading updates: Update Service not found! - Si è verificato un errore durante il caricamento degli aggiornamenti: il Servizio aggiornamenti non è stato trovato! + Si è verificato un errore durante il caricamento degli aggiornamenti: il Servizio aggiornamenti non è stato trovato! - An error occurred while unzip updates: Update Service not found! - Si è verificato un errore durante la decompressione degli aggiornamenti: il Servizio aggiornamenti non è stato trovato! + Si è verificato un errore durante la decompressione degli aggiornamenti: il Servizio aggiornamenti non è stato trovato! - + An error occurred while start install updates! Si è verificato un errore durante l'installazione degli aggiornamenti! - + An error occurred while start replacing files: Update Service not found! Si è verificato un errore all'inizio della sostituzione dei file: il Servizio aggiornamenti non è stato trovato! @@ -968,9 +970,8 @@ Si è verificato un errore durante l'apertura del portale:<br>%1 - App can't working correctly under admin rights. - L'app non può funzionare correttamente con i diritti di amministratore. + L'app non può funzionare correttamente con i diritti di amministratore. &OK diff --git a/win-linux/langs/ja.qm b/win-linux/langs/ja.qm index 6948d14ba3a8ee22e092ba88e3ec93bbd1d19d88..3f1697b435757310d681607ad0ecff48ed35691c 100644 GIT binary patch delta 1822 zcmbW1ZA@Eb6vt0n=&MjAnJ^6a@X}WuIVB`IwxR5W%&Y^-i=a4J+k0s%mwW5&Ep*Fb zHTpqbmJDt-aei=HX5!T7%!WFdK{Jg+jUQOp)VL+nm__+uwwahHil-o*#ZVVN+&s7U zp7WgF^Z);EkNB?bI#6165+HX2fadDb>YSpr3BdUhK=(NS_iv*Q+^KcLXot%Xp11?R z-aMML7duG~(C0bJWgr|Qh*-8thAods~LR}C7^eUra_1Yn!V zo&M@Y0L%5+@vr*EI#0#NjvzDu))dU>@&v)+1t#oGYv zUPGv4kf5%pFKFy7?k9~ShY~atjGw$=0=Vt0@sFY-0OjAAYRYfW2)(IwKA*O@U>Z@* z0~9`HI(YgOdOx0id_Ka(@U$(Z1D;-bxlR7v}ILB%_HMF+0a(8GBrK7NMS zuc{ZdwR#)v;C@rJ>Y7XP=hj{WC>yt0kA4ZDH(1}D(UA`M5rBJ2PANKM$xb|m=kOwa zit{*)V~O{N_BXD>UVIgQq$l3~z45!T1D~R+d!aa^c7ooY$1~_197Yaz;1E@Hp^Bl! zT8%NKnx3u)>qW-PvLrJp7>vs@&#{4UMBrI4%m*ubSv<=56+TwW+81wFD=+s)f;v$Y5;Mm~z zhqx@L|J46hvHzthE{hr$_eP>=>g>?!@rq}YyRj8ToW&D3haaLiw65zgSty|<<3Qda zPwUUvjw9HETmLp%yWG{5hf;4D?eaV}P;@$|rU`db_11-AVCf+E+QN|-St@Y6%z~2G z6A8uTO@1XJiHwu@*rMZpL68QhNM1fe8EXsk%UzqF#7p758OYN5V33c+m?E*BR1O_BkAo2z$BPl3D>G1L4Zfzp z6MRt7(B}f?kg4Sio$C=CPM^hCA5#G| zjGS#AnfLJ-4jVSd_pnB3K&`NCD$JpHC(?Eqw@9KA5##)+CR?>`1A|W330`2!5y gxSn3NYxJZ{IOpu;l5a}NW9;-1O;jE3?jZp>t0;QqvV_f|dwgY;82&VS+z3@XBG zp;w(57$jOImor+jr^|LSFeuwh-p{D!q;iI%XIcdV5O5q_!^yzFvxn0}=`+v>HqPKb zd_Wf%a`u#5W?&GH;hefFmP>w(2AwpJ~=?sMPG5J%dKKyUVLh+Jgik=jXH8aTwwj#D z>?g|4zwjIb0~`h*47c2 WT&1Qnxl)gJ^E&MtOp`C^$pZknCtIxm diff --git a/win-linux/langs/ja.ts b/win-linux/langs/ja.ts index 2acd682cb..60be4172c 100644 --- a/win-linux/langs/ja.ts +++ b/win-linux/langs/ja.ts @@ -4,7 +4,7 @@ CAscApplicationManagerWrapper - + Presenter View プレゼンタービュー @@ -21,18 +21,18 @@ すべての編集画面が閉じます。続けますか? - - + + Document%1.docx ドキュメント%1.docx - + Book%1.xlsx ブック%1.xlsx - + Presentation%1.pptx プレゼンテーション%1.pptx @@ -56,8 +56,8 @@ CAscTabWidget - - + + Document 開いています... @@ -165,27 +165,27 @@ %1 を変更しました。<br>変更を保存しますか? - + Some data will lost.<br>Continue? このフォーマットで保存すると、テキストを除く全ての機能が失われます。<br>続けますか? - + Open main window メイン画面を開く - + Document must be saved to continue.<br>Save the document? 続けるには、ドキュメントを保存する必要があります。<br>ドキュメントを保存しますか? - + Print Document ドキュメントを印刷 - + Document must be saved firstly. ドキュメントを最初に保存する必要があります。 @@ -193,7 +193,7 @@ CEditorWindowPrivate - + There are no printers available 利用可能なプリンターはありません @@ -535,43 +535,43 @@ - - + + File format not supported. ファイルフォーマットがサポートされていません。 - + %1 doesn't exists!<br>Remove file from the list? %1 は利用できません。名前を変更したか、移動または削除された可能性があります。<br>リストからファイルを削除しますか? - + Document must be saved firstly. ドキュメントを最初に保存する必要があります。 - + Document must be saved to continue.<br>Save the document? 続けるには、ドキュメントを保存する必要があります。<br>ドキュメントを保存しますか? - + There are no printers available 利用可能なプリンターはありません - + Print Document ドキュメントを印刷 - + Sign Up ポータルを作成 - + %1 is modified.<br>Do you want to keep changes? %1 を変更しました。<br>変更を保存しますか? @@ -614,22 +614,22 @@ CPrintProgress - + Document is printing: page %1 of %2 ドキュメントを印刷中: %2 ページ中 %1 ページ - + Document is preparing ドキュメントを準備中 - + &Cancel &キャンセル - + Printing... 印刷中... @@ -638,161 +638,167 @@ CUpdateManager - - + + Last check performed - - - - - - - - - - + + + + + + + + + + - + + Check for updates - - - + + Unable to check update: URL not defined. + + + + + + To finish updating, restart app - - - + + + Restart - + Checking for updates... - + Updates are not allowed! - + This folder configuration does not allow for updates! The folder name should be: このフォルダの設定では、アップデートが許可されていません。フォルダ名は次のようにしてください: - + An error occurred while check updates: Update Service not found! - + アップデートを確認中にエラーが発生しました:アップデートサービスが見つかりませんでした! - + Downloading new version %1 (%2%) - + An error occurred while loading updates: Update Service not found! - + アップデートの起動中にエラーが発生しました:サービスが見つかりませんでした! - + Downloading new version %1 (0%) - - + + Cancel キャンセル - + An error occurred while loading updates: package Url is empty! - + Update package error: md5 sum does not match the original. - + Preparing update... - + An error occurred while unzip updates: Update Service not found! - + アップデートのアーカイブを解除中にエラーが発生しました:アップデートサービスが見つかりませんでした! - + Update is available (version %1) - + Download update アップデートをダウンロードする - - + + Current version is up to date - + Update is available - - + + Current version - - + + Update version - + Would you like to download update now? - + Update is ready to install - + Would you like to restart app now? A new version of %1 is available! - %1の新バージョンがリリースされました! + %1の新バージョンがリリースされました! %1 %2 is now available (you have %3). Would you like to download it now? - %1 %2 が利用可能になりました(あなたは %3 を持っています)。今すぐダウンロードしますか? + %1 %2 が利用可能になりました(あなたは %3 を持っています)。今すぐダウンロードしますか? %1 %2 is now downloaded (you have %3). Would you like to install it now? - %1 %2 がダウンロードされました(あなたは %3 を持っています)。今すぐインストールしますか? + %1 %2 がダウンロードされました(あなたは %3 を持っています)。今すぐインストールしますか? @@ -828,12 +834,12 @@ - + Access to file '%1' is denied! '%1'へのアクセスが拒否されました! - + Read only 閲覧のみ @@ -896,28 +902,24 @@ リリースノート - - An error occurred while check updates: Update Service not found! - アップデートを確認中にエラーが発生しました:アップデートサービスが見つかりませんでした! + アップデートを確認中にエラーが発生しました:アップデートサービスが見つかりませんでした! - An error occurred while loading updates: Update Service not found! - アップデートの起動中にエラーが発生しました:サービスが見つかりませんでした! + アップデートの起動中にエラーが発生しました:サービスが見つかりませんでした! - An error occurred while unzip updates: Update Service not found! - アップデートのアーカイブを解除中にエラーが発生しました:アップデートサービスが見つかりませんでした! + アップデートのアーカイブを解除中にエラーが発生しました:アップデートサービスが見つかりませんでした! - + An error occurred while start install updates! アップデートのインストール中にエラーが発生しました! - + An error occurred while start replacing files: Update Service not found! ファイルの移動中にエラーが発生しました:アップデートサービスが見つかりませんでした! @@ -968,9 +970,8 @@ ポータルを開く中にエラーが発生しました:<br>%1 - App can't working correctly under admin rights. - このアプリは、管理者のアクセス権で正しく動かない可能性があります。 + このアプリは、管理者のアクセス権で正しく動かない可能性があります。 &OK diff --git a/win-linux/langs/ko.ts b/win-linux/langs/ko.ts index fd4fa4b8a..62cb90326 100644 --- a/win-linux/langs/ko.ts +++ b/win-linux/langs/ko.ts @@ -4,7 +4,7 @@ CAscApplicationManagerWrapper - + Presenter View 발표자 보기 @@ -17,18 +17,18 @@ 업데이트 중입니다. 업데이트를 취소하고 애플케이이션을 닫으시겠습니까? - - + + Document%1.docx Document%1.docx - + Book%1.xlsx Book%1.xlsx - + Presentation%1.pptx Presentation%1.pptx @@ -36,8 +36,8 @@ CAscTabWidget - - + + Document 여는 중... @@ -145,27 +145,27 @@ %1이 수정되었습니다.<br>변경 사항을 저장하시겠습니까? - + Some data will lost.<br>Continue? 계속 이 형식으로 저장할 경우 텍스트를 제외한 모든 기능을 잃게 됩니다.<br>정말로 계속하시겠습니까? - + Open main window 메인 창 열기 - + Document must be saved to continue.<br>Save the document? 계속하려면 문서를 저장해야 합니다.<br>문서를 저장하시겠습니까? - + Print Document 문서 인쇄 - + Document must be saved firstly. 문서를 먼저 저장해야 합니다. @@ -173,7 +173,7 @@ CEditorWindowPrivate - + There are no printers available @@ -511,43 +511,43 @@ - - + + File format not supported. 지원되지 않는 파일 형식입니다. - + %1 doesn't exists!<br>Remove file from the list? %1이 이용 불가합니다. 이름이 변경되었거나, 이동되었거나, 삭제된 것 같습니다.<br>목록에서 파일을 제거하시겠습니까? - + Document must be saved firstly. 문서를 먼저 저장해야 합니다. - + Document must be saved to continue.<br>Save the document? 계속하려면 문서를 저장해야 합니다.<br>문서를 저장하시겠습니까? - + There are no printers available - + Print Document 문서 인쇄 - + Sign Up 포털 생성 - + %1 is modified.<br>Do you want to keep changes? %1이 수정되었습니다.<br>변경 사항을 저장하시겠습니까? @@ -586,22 +586,22 @@ CPrintProgress - + Document is printing: page %1 of %2 문서 인쇄 중: %2 페이지 중 %1 - + Document is preparing 문서 준비 중 - + &Cancel &취소 - + Printing... 인쇄 중... @@ -610,147 +610,153 @@ CUpdateManager - - + + Last check performed - - - - - - - - - - + + + + + + + + + + - + + Check for updates - - - + + Unable to check update: URL not defined. + + + + + + To finish updating, restart app - - - + + + Restart - + Checking for updates... - + Updates are not allowed! - + This folder configuration does not allow for updates! The folder name should be: - + An error occurred while check updates: Update Service not found! - + Downloading new version %1 (%2%) - + An error occurred while loading updates: Update Service not found! - + Downloading new version %1 (0%) - - + + Cancel 취소 - + An error occurred while loading updates: package Url is empty! - + Update package error: md5 sum does not match the original. - + Preparing update... - + An error occurred while unzip updates: Update Service not found! - + Update is available (version %1) - + Download update - - + + Current version is up to date - + Update is available - - + + Current version - - + + Update version - + Would you like to download update now? - + Update is ready to install - + Would you like to restart app now? @@ -784,12 +790,12 @@ - + Access to file '%1' is denied! - + Read only @@ -848,12 +854,12 @@ - + An error occurred while start install updates! - + An error occurred while start replacing files: Update Service not found! diff --git a/win-linux/langs/lo.ts b/win-linux/langs/lo.ts index 19cb74218..7dbfcf6a1 100644 --- a/win-linux/langs/lo.ts +++ b/win-linux/langs/lo.ts @@ -4,7 +4,7 @@ CAscApplicationManagerWrapper - + Presenter View ມຸມມອງຜູ້ນຳສະເໜີ @@ -21,18 +21,18 @@ ບັນນາທິການທັງ ໝົດ ຈະຖືກປິດ. ທ່ານຕ້ອງການ ດຳ ເນີນການຕໍ່ບໍ? - - + + Document%1.docx ເອກະສານ%1.docx - + Book%1.xlsx ປື້ມ%1.xlsx - + Presentation%1.pptx ການນຳສະເໜີ%1.pptx @@ -40,8 +40,8 @@ CAscTabWidget - - + + Document ກຳລັງເປີດ @@ -144,22 +144,22 @@ CEditorWindow - + Open main window ເປີດໜ້າຕ່າງຫຼັກ - + Document must be saved to continue.<br>Save the document? ເອກະສານຕ້ອງຖືກບັນທຶກເພື່ອສືບຕໍ່.<br>ບັນທຶກເອກະສານບໍ່? - + Print Document ພິມເອກະສານ - + Document must be saved firstly. ເອກະສານຕ້ອງໄດ້ເກັບໄວ້ກ່ອນ. @@ -169,7 +169,7 @@ %1 ຖືກແກ້ໄຂແລ້ວ.<br>ທ່ານຕ້ອງການບັນທຶກການປ່ຽນແປງບໍ່? - + Some data will lost.<br>Continue? ຖ້າທ່ານສືບຕໍ່ບັນທຶກໃນຮູບແບບນີ້ທຸກລັກສະນະຍົກເວັ້ນຂໍ້ຄວາມຈະຫາຍໄປ.<br>ທ່ານແນ່ໃຈບໍ່ວ່າທ່ານຕ້ອງການ ດຳ ເນີນຕໍ່ໄປ? @@ -177,7 +177,7 @@ CEditorWindowPrivate - + There are no printers available ບໍ່ມີເຄື່ອງພິມທີ່ມີຢູ່ @@ -519,43 +519,43 @@ - - + + File format not supported. ຮູບແບບເອກະສານບໍ່ຮອງຮັບ. - + %1 doesn't exists!<br>Remove file from the list? ບໍ່ມີ. ມັນອາດຈະຖືກປ່ຽນຊື່, ຍ້າຍຫລືລຶບ.<br>ທ່ານຕ້ອງການທີ່ຈະເອົາໄຟລ໌ນັ້ນອອກຈາກບັນຊີບໍ? - + Document must be saved firstly. ເອກະສານຕ້ອງໄດ້ເກັບໄວ້ກ່ອນ. - + Document must be saved to continue.<br>Save the document? ເອກະສານຕ້ອງຖືກບັນທຶກເພື່ອສືບຕໍ່.<br>ບັນທຶກເອກະສານບໍ່? - + There are no printers available ບໍ່ມີເຄື່ອງພິມທີ່ມີຢູ່ - + Print Document ພິມເອກະສານ - + Sign Up ສ້າງຈຸດເຊື່ອມຕໍ່ - + %1 is modified.<br>Do you want to keep changes? %1 ໄດ້ຖືກແກ້ໄຂແລ້ວ.<br>ທ່ານຕ້ອງການທີ່ຈະບັນທຶກການປ່ຽນແປງ? @@ -594,22 +594,22 @@ CPrintProgress - + Document is printing: page %1 of %2 ເອກະສານການພິມ: ໜ້າ%1 ຂອງ%2: - + Document is preparing ການກະກຽມເອກະສານ - + &Cancel &ຍົກເລີກ - + Printing... ກຳລັງພິມ... @@ -618,147 +618,153 @@ CUpdateManager - - + + Last check performed - - - - - - - - - - + + + + + + + + + + - + + Check for updates - - - + + Unable to check update: URL not defined. + + + + + + To finish updating, restart app - - - + + + Restart - + Checking for updates... - + Updates are not allowed! - + This folder configuration does not allow for updates! The folder name should be: ການຕັ້ງຄ່າໂຟນເດີນີ້ບໍ່ອະນຸຍາດໃຫ້ອັບເດດ! ຊື່ໂຟນເດີຄວນຈະເປັນ: - + An error occurred while check updates: Update Service not found! ມີຂໍ້ຜິດພາດເກີດຂຶ້ນໃນຂະນະທີ່ກວດສອບການອັບເດດ: ບໍ່ພົບບໍລິການອັບເດດ! - + Downloading new version %1 (%2%) - + An error occurred while loading updates: Update Service not found! ເກີດຄວາມຜິດພາດໃນລະຫວ່າງການໂຫຼດອັບເດດ: ບໍ່ພົບບໍລິການອັບເດດ! - + Downloading new version %1 (0%) - - + + Cancel ຍົກເລີກ - + An error occurred while loading updates: package Url is empty! - + Update package error: md5 sum does not match the original. - + Preparing update... - + An error occurred while unzip updates: Update Service not found! ມີຂໍ້ຜິດພາດເກີດຂຶ້ນໃນຂະນະທີ່ unzip ອັບເດດ: ບໍ່ພົບບໍລິການອັບເດດ! - + Update is available (version %1) - + Download update ດາວໂຫລດອັບເດດ - - + + Current version is up to date - + Update is available - - + + Current version - - + + Update version - + Would you like to download update now? - + Update is ready to install - + Would you like to restart app now? @@ -804,12 +810,12 @@ - + Access to file '%1' is denied! ການເຂົ້າເຖິງໄຟລ໌ '%1' ຖືກປະຕິເສດ! - + Read only ອ່ານ​ຢ່າງ​ດຽວ @@ -884,12 +890,12 @@ ມີຂໍ້ຜິດພາດເກີດຂຶ້ນໃນຂະນະທີ່ unzip ອັບເດດ: ບໍ່ພົບບໍລິການອັບເດດ! - + An error occurred while start install updates! ເກີດຄວາມຜິດພາດຂຶ້ນໃນຂະນະທີ່ ເລີ່ມຕິດຕັ້ງ ອັບເດດ! - + An error occurred while start replacing files: Update Service not found! ເກີດຄວາມຜິດພາດຂຶ້ນໃນຂະນະທີ່ເລີ່ມປ່ຽນໄຟລ໌: ບໍ່ພົບບໍລິການອັບເດດ! diff --git a/win-linux/langs/lt.ts b/win-linux/langs/lt.ts index d1bc47a2e..1af003fc4 100644 --- a/win-linux/langs/lt.ts +++ b/win-linux/langs/lt.ts @@ -4,7 +4,7 @@ CAscApplicationManagerWrapper - + Presenter View Peržiūros rėžimas @@ -21,18 +21,18 @@ Visi redagavimo langai bus uždaryti. Ar norite tęsti? - - + + Document%1.docx Documentas%1.docx - + Book%1.xlsx Knyga%1.xlsx - + Presentation%1.pptx Prezentacija%1.pptx @@ -40,8 +40,8 @@ CAscTabWidget - - + + Document Atidaroma... @@ -149,27 +149,27 @@ %1 buvo pakeistas.<br>Ar norite išsaugoti pakeitimus? - + Some data will lost.<br>Continue? Jei ir toliau saugosite šiuo formatu, visos funkcijos, išskyrus tekstą, bus prarastos.<br>Ar norite tęsti? - + Open main window Atidaryti pagrindinį langą - + Document must be saved to continue.<br>Save the document? Norint tęsti, dokumentas privalo būti išsaugotas.<br>Išsaugoti dokumentą? - + Print Document Spausdinti dokumentą - + Document must be saved firstly. Dokumentas pirma turi būti išsaugotas. @@ -177,7 +177,7 @@ CEditorWindowPrivate - + There are no printers available @@ -515,43 +515,43 @@ - - + + File format not supported. Failo formatas nepalaikomas. - + %1 doesn't exists!<br>Remove file from the list? %1 negalimas. Jis galėjo būti pervardytas, perkeltas arba ištrintas.<br>Ar norite panaikinti failą iš sąrašo? - + Document must be saved firstly. Dokumentas pirma turi būti išsaugotas. - + Document must be saved to continue.<br>Save the document? Norint tęsti, dokumentas privalo būti išsaugotas.<br>Išsaugoti dokumentą? - + There are no printers available - + Print Document Spausdinti dokumentą - + Sign Up Sukurti portalą - + %1 is modified.<br>Do you want to keep changes? %1 buvo pakeistas.<br>Ar norite išsaugoti pakeitimus? @@ -590,22 +590,22 @@ CPrintProgress - + Document is printing: page %1 of %2 Dokumentas spausdinamas: puslapis %1 iš %2 - + Document is preparing Dokumentas ruošiamas - + &Cancel &Atšaukti - + Printing... Spausdinama... @@ -614,147 +614,153 @@ CUpdateManager - - + + Last check performed - - - - - - - - - - + + + + + + + + + + - + + Check for updates - - - + + Unable to check update: URL not defined. + + + + + + To finish updating, restart app - - - + + + Restart - + Checking for updates... - + Updates are not allowed! - + This folder configuration does not allow for updates! The folder name should be: - + An error occurred while check updates: Update Service not found! - + Downloading new version %1 (%2%) - + An error occurred while loading updates: Update Service not found! - + Downloading new version %1 (0%) - - + + Cancel Atšaukti - + An error occurred while loading updates: package Url is empty! - + Update package error: md5 sum does not match the original. - + Preparing update... - + An error occurred while unzip updates: Update Service not found! - + Update is available (version %1) - + Download update - - + + Current version is up to date - + Update is available - - + + Current version - - + + Update version - + Would you like to download update now? - + Update is ready to install - + Would you like to restart app now? @@ -784,12 +790,12 @@ - + Access to file '%1' is denied! - + Read only @@ -848,12 +854,12 @@ - + An error occurred while start install updates! - + An error occurred while start replacing files: Update Service not found! diff --git a/win-linux/langs/lv.ts b/win-linux/langs/lv.ts index d89242ae3..295c0ef1c 100644 --- a/win-linux/langs/lv.ts +++ b/win-linux/langs/lv.ts @@ -4,7 +4,7 @@ CAscApplicationManagerWrapper - + Presenter View Prezentētāja Skats @@ -21,18 +21,18 @@ Visi rediģēšanas logi tiks aizvērti. Vai jūs vēlaties turpināt? - - + + Document%1.docx Dokuments%1.docx - + Book%1.xlsx Grāmata%1.xlsx - + Presentation%1.pptx Prezentācija%1.pptx @@ -40,8 +40,8 @@ CAscTabWidget - - + + Document Notiek atvēršana... @@ -149,27 +149,27 @@ %1 tika izmainīts.<br>Vai jūs vēlaties saglabāt izmaiņas? - + Some data will lost.<br>Continue? Ja jūs turpināsiet saglabāt šajā formātā, visas iezīmes zudīs, izņemot tekstu.<br>Vai esat pārliecināts, ka vēlaties turpināt? - + Open main window Atvērt galveno logu - + Document must be saved to continue.<br>Save the document? Dokuments jāsaglabā, lai turpinātu.<br>Saglabāt dokumentu? - + Print Document Izprintēt dokumentu - + Document must be saved firstly. Dokuments vispirms jāsaglabā. @@ -177,7 +177,7 @@ CEditorWindowPrivate - + There are no printers available @@ -515,43 +515,43 @@ - - + + File format not supported. Faila formāts netiek atbalstīts. - + %1 doesn't exists!<br>Remove file from the list? %1 nav pieejams. Tas varētu būt pārdēvēts, pārvietots vai izdzēsts.<br>Vai jūs vēlaties izņemt failu no saraksta? - + Document must be saved firstly. Dokuments vispirms jāsaglabā. - + Document must be saved to continue.<br>Save the document? Dokuments jāsaglabā, lai turpinātu.<br>Saglabāt dokumentu? - + There are no printers available - + Print Document Izprintēt dokumentu - + Sign Up Izveidot portālu - + %1 is modified.<br>Do you want to keep changes? %1 tika izmainīts.<br>Vai jūs vēlaties saglabāt izmaiņas? @@ -590,22 +590,22 @@ CPrintProgress - + Document is printing: page %1 of %2 Dokuments tiek printēts: %1 lapa no %2 - + Document is preparing Dokuments tiek sagatavots - + &Cancel &Atcelt - + Printing... Notiek printēšana... @@ -614,147 +614,153 @@ CUpdateManager - - + + Last check performed - - - - - - - - - - + + + + + + + + + + - + + Check for updates - - - + + Unable to check update: URL not defined. + + + + + + To finish updating, restart app - - - + + + Restart - + Checking for updates... - + Updates are not allowed! - + This folder configuration does not allow for updates! The folder name should be: - + An error occurred while check updates: Update Service not found! - + Downloading new version %1 (%2%) - + An error occurred while loading updates: Update Service not found! - + Downloading new version %1 (0%) - - + + Cancel Atcelt - + An error occurred while loading updates: package Url is empty! - + Update package error: md5 sum does not match the original. - + Preparing update... - + An error occurred while unzip updates: Update Service not found! - + Update is available (version %1) - + Download update - - + + Current version is up to date - + Update is available - - + + Current version - - + + Update version - + Would you like to download update now? - + Update is ready to install - + Would you like to restart app now? @@ -788,12 +794,12 @@ - + Access to file '%1' is denied! - + Read only @@ -852,12 +858,12 @@ - + An error occurred while start install updates! - + An error occurred while start replacing files: Update Service not found! diff --git a/win-linux/langs/nl.ts b/win-linux/langs/nl.ts index 738539830..933b22360 100644 --- a/win-linux/langs/nl.ts +++ b/win-linux/langs/nl.ts @@ -4,7 +4,7 @@ CAscApplicationManagerWrapper - + Presenter View Presentatieweergave @@ -21,18 +21,18 @@ Alle bewerkingsvensters worden gesloten. Wilt u doorgaan? - - + + Document%1.docx Document%1.docx - + Book%1.xlsx Boek%1.xlsx - + Presentation%1.pptx Presentatie%1.pptx @@ -40,8 +40,8 @@ CAscTabWidget - - + + Document Openen... @@ -149,27 +149,27 @@ %1 is aangepast.<br>Wilt u de veranderingen opslaan? - + Some data will lost.<br>Continue? Als u doorgaat met het opslaan in dit formaat zullen alle functies, behalve de tekst, verloren gaan.<br>Weet u zeker dat u wilt doorgaan? - + Open main window Hoofdvenster openen - + Document must be saved to continue.<br>Save the document? The Document moet worden opgeslagen om verder te kunnen gaan.<br>Document opslaan? - + Print Document Print document - + Document must be saved firstly. Het document moet eerst worden opgeslagen. @@ -177,7 +177,7 @@ CEditorWindowPrivate - + There are no printers available @@ -515,43 +515,43 @@ - - + + File format not supported. Bestandsformaat wordt niet ondersteund. - + %1 doesn't exists!<br>Remove file from the list? %1 is niet beschikbaar. Het is misschien hernoemd, verplaatst of verwijderd.<br>Wilt u het bestand van de lijst verwijderen?? - + Document must be saved firstly. Het document moet eerst worden opgeslagen. - + Document must be saved to continue.<br>Save the document? The Document moet worden opgeslagen om verder te kunnen gaan.<br>Document opslaan? - + There are no printers available - + Print Document Print document - + Sign Up Portaal aanmaken - + %1 is modified.<br>Do you want to keep changes? %1 is aangepast.<br>Wilt u de veranderingen opslaan? @@ -590,22 +590,22 @@ CPrintProgress - + Document is printing: page %1 of %2 Document afdrukken: pagina %1 van %2 - + Document is preparing Document voorbereiden - + &Cancel &Annuleren - + Printing... Printen... @@ -614,147 +614,153 @@ CUpdateManager - - + + Last check performed - - - - - - - - - - + + + + + + + + + + - + + Check for updates - - - + + Unable to check update: URL not defined. + + + + + + To finish updating, restart app - - - + + + Restart - + Checking for updates... - + Updates are not allowed! - + This folder configuration does not allow for updates! The folder name should be: - + An error occurred while check updates: Update Service not found! - + Downloading new version %1 (%2%) - + An error occurred while loading updates: Update Service not found! - + Downloading new version %1 (0%) - - + + Cancel Annuleren - + An error occurred while loading updates: package Url is empty! - + Update package error: md5 sum does not match the original. - + Preparing update... - + An error occurred while unzip updates: Update Service not found! - + Update is available (version %1) - + Download update - - + + Current version is up to date - + Update is available - - + + Current version - - + + Update version - + Would you like to download update now? - + Update is ready to install - + Would you like to restart app now? @@ -788,12 +794,12 @@ - + Access to file '%1' is denied! - + Read only @@ -852,12 +858,12 @@ - + An error occurred while start install updates! - + An error occurred while start replacing files: Update Service not found! diff --git a/win-linux/langs/no.ts b/win-linux/langs/no.ts index 7bca964a0..5dcb0d05a 100644 --- a/win-linux/langs/no.ts +++ b/win-linux/langs/no.ts @@ -4,7 +4,7 @@ CAscApplicationManagerWrapper - + Presenter View Presentasjonsvisning @@ -21,18 +21,18 @@ Alle redigeringsvinduene vil lukkes. Vil du fortsette? - - + + Document%1.docx Dokument%1.docx - + Book%1.xlsx Bok%1.xlsx - + Presentation%1.pptx Presentasjon%1.pptx @@ -40,8 +40,8 @@ CAscTabWidget - - + + Document Åpner... @@ -149,27 +149,27 @@ %1 har blitt endret.<br>Vil du lagre endringene? - + Some data will lost.<br>Continue? Hvis du fortsetter å lagre i dette formatet, vil alle funksjoner bortsett fra teksten gå tapt.<br>Er du sikker på at du vil fortsette? - + Open main window Åpne hovedvinduet - + Document must be saved to continue.<br>Save the document? Dokumentet må lagres for å kunne fortsette.<br>Lagre dokumentet? - + Print Document Skriv ut dokumentet - + Document must be saved firstly. Dokumentet må lagres først. @@ -177,7 +177,7 @@ CEditorWindowPrivate - + There are no printers available @@ -515,43 +515,43 @@ - - + + File format not supported. Filformatet støttes ikke. - + %1 doesn't exists!<br>Remove file from the list? %1 er ikke tilgjengelig. Den kan gis nytt navn, flyttes eller slettes.<br>Vil du fjerne filen fra listen? - + Document must be saved firstly. Dokumentet må lagres først. - + Document must be saved to continue.<br>Save the document? Dokumentet må lagres for å kunne fortsette.<br>Lagre dokumentet? - + There are no printers available - + Print Document Skriv ut dokumentet - + Sign Up Opprett portal - + %1 is modified.<br>Do you want to keep changes? %1 har blit endret.<br>Vil du lagre endringene? @@ -590,22 +590,22 @@ CPrintProgress - + Document is printing: page %1 of %2 Skriver ut dokument: side %1 av %2 - + Document is preparing Forbereder dokument - + &Cancel &Avbryt - + Printing... Skriver ut... @@ -614,147 +614,153 @@ CUpdateManager - - + + Last check performed - - - - - - - - - - + + + + + + + + + + - + + Check for updates - - - + + Unable to check update: URL not defined. + + + + + + To finish updating, restart app - - - + + + Restart - + Checking for updates... - + Updates are not allowed! - + This folder configuration does not allow for updates! The folder name should be: - + An error occurred while check updates: Update Service not found! - + Downloading new version %1 (%2%) - + An error occurred while loading updates: Update Service not found! - + Downloading new version %1 (0%) - - + + Cancel Avbryt - + An error occurred while loading updates: package Url is empty! - + Update package error: md5 sum does not match the original. - + Preparing update... - + An error occurred while unzip updates: Update Service not found! - + Update is available (version %1) - + Download update - - + + Current version is up to date - + Update is available - - + + Current version - - + + Update version - + Would you like to download update now? - + Update is ready to install - + Would you like to restart app now? @@ -784,12 +790,12 @@ - + Access to file '%1' is denied! - + Read only @@ -848,12 +854,12 @@ - + An error occurred while start install updates! - + An error occurred while start replacing files: Update Service not found! diff --git a/win-linux/langs/pl.ts b/win-linux/langs/pl.ts index 305f1a14d..e43d72047 100644 --- a/win-linux/langs/pl.ts +++ b/win-linux/langs/pl.ts @@ -4,7 +4,7 @@ CAscApplicationManagerWrapper - + Presenter View Widok Prezentera @@ -21,18 +21,18 @@ Wszystkie okna edytora zostaną zamknięte. Czy chcesz kontynuować? - - + + Document%1.docx Dokument%1.docx - + Book%1.xlsx Skoroszyt%1.xlsx - + Presentation%1.pptx Prezentacja%1.pptx @@ -40,8 +40,8 @@ CAscTabWidget - - + + Document Otwieranie... @@ -144,22 +144,22 @@ CEditorWindow - + Open main window Otwórz okno główne - + Document must be saved to continue.<br>Save the document? Dokument musi być zapisany, aby kontynuować.<br>Zapisać dokument? - + Print Document Drukuj dokument - + Document must be saved firstly. Dokument musi być najpierw zapisany. @@ -169,7 +169,7 @@ %1 został zmieniony.<br>Czy chcesz zapisać zmiany? - + Some data will lost.<br>Continue? Jeśli będziesz kontynuować zapisywanie w tym formacie, wszystkie funkcje z wyjątkiem tekstu zostaną utracone.<br>Czy na pewno chcesz kontynuować? @@ -177,7 +177,7 @@ CEditorWindowPrivate - + There are no printers available @@ -515,43 +515,43 @@ - - + + File format not supported. Nieobsługiwany format pliku. - + %1 doesn't exists!<br>Remove file from the list? %1 jest niedostępny. Został przeniesiony, usunięty lub zmieniono jego nazwę.<br>Czy chcesz usunąć plik z listy? - + Document must be saved firstly. Dokument musi być najpierw zapisany. - + Document must be saved to continue.<br>Save the document? Dokument musi być zapisany, aby kontynuować.<br>Zapisać dokument? - + There are no printers available - + Print Document Drukuj dokument - + Sign Up Utwórz pakiet w chmurze - + %1 is modified.<br>Do you want to keep changes? %1 został zmieniony.<br>Czy chcesz zapisać zmiany? @@ -590,22 +590,22 @@ CPrintProgress - + Document is printing: page %1 of %2 Drukowanie dokumentu: strona %1 z %2 - + Document is preparing Przygotowywanie dokumentu - + &Cancel &Anuluj - + Printing... Drukowanie... @@ -614,147 +614,153 @@ CUpdateManager - - + + Last check performed - - - - - - - - - - + + + + + + + + + + - + + Check for updates - - - + + Unable to check update: URL not defined. + + + + + + To finish updating, restart app - - - + + + Restart - + Checking for updates... - + Updates are not allowed! - + This folder configuration does not allow for updates! The folder name should be: - + An error occurred while check updates: Update Service not found! - + Downloading new version %1 (%2%) - + An error occurred while loading updates: Update Service not found! - + Downloading new version %1 (0%) - - + + Cancel Anuluj - + An error occurred while loading updates: package Url is empty! - + Update package error: md5 sum does not match the original. - + Preparing update... - + An error occurred while unzip updates: Update Service not found! - + Update is available (version %1) - + Download update - - + + Current version is up to date - + Update is available - - + + Current version - - + + Update version - + Would you like to download update now? - + Update is ready to install - + Would you like to restart app now? @@ -788,12 +794,12 @@ - + Access to file '%1' is denied! - + Read only @@ -852,12 +858,12 @@ - + An error occurred while start install updates! - + An error occurred while start replacing files: Update Service not found! diff --git a/win-linux/langs/pt_BR.qm b/win-linux/langs/pt_BR.qm index df3bb4db68d4f50268aaf3f334b2b5ac95c61dda..4b7b1b6b2a145f634ef5433d20871fd9fe53211f 100644 GIT binary patch delta 5957 zcmb_gdvp}#6~D`7H@kUk-j5A=d`SpNmXHSzkq|>d5+tWUBms?blumXhn}OY#?aXXK zu)0R=A8k1poYLZmz!Vj%08gcExH4R|XZvZ;aLQ?lL0FIB1 zb?ygXyBh#H{tU^79t23ugzT&U+OgYdMUq-2~tqHP&hc?s?#KfWl!oeAj7! z1*_obo(X_OZcD=-?u3PK>6m4;trDQgV;OoZ3!wEG%MHJL4 zhaX#j?!3G67x_hQxAn!nzXDkLwDn)J(PrL(q-(1XT+Syu-^!0Po=n=^{S-i(+m?J5 z5v7mX=Iz~&F735-r2icEc*@pw>xYQ+3!D0u6CnFz+XHRy0$6t19=WXyL$u2FuSU47_G35W`C?o(TuTDUmsUOuP(_!Zb~3)?t=XJblMexwwUJ(R+=Vu+V+PPy^;-|@ksl-=Dw#2ar&xpxPJa7oHTzkd}& zcr;})3nNpvKjrcJ@V?o{Qx3k2D@#o|_QXeOn(u zSzCH;=MjLaCC0jJFuid669j&LdW1cE7NGgk^!0$g{w!_8fx!h-6tP9ryOLV=- zwR8#AdHHn_*JTwLs?yh7t12D=Xb-!DXYas`Latk9@mT0*jMej~Yu87|G4yWNv&XOk zZ4TG5O_-9Ri0hy3lK>5W%SiqR?{{y>$oSC3G=x3dhHyq?eRU0oY)}G7x zLC#!Q0}}Xv$A=|gbfk?}mt<$f?qn(-3;em?H6#^?42FP% z0TA$c0aQHp>2^YRB;$uc5dVAen5@@;2kIe&e=44@HNn-a;k>dmpBK4-0Pka0$h?9e zIaQEEwo(Z2tj1Fx3aLSDEUP4P#kr8tbO-@(AnHH}(w6{c!l;-ELkY<|=TnAwUNxhT z4BG9bMUztD=2B#nyvXShlTibH1d(R1~t+00H!tX3JPY+;Y)X{$0RAVyM%i*Ygkk-R0D}m_tKBr; zU2<9n*o^n~>DPww$_f2ml92kZ2? zs=&w)RlawK_ika~kPjtDX=WSr1J=jO!-AJ*qNK7xDJ=TRwKqM53nymiiWm1c-1X1Q zk-&@{S#cpp0utvFME^`(`Oa5!B@)jG3GN2yh1IymMVV4y&^=C1BK{;;7}L}kvgj9W7)nLIze@#=V~@t&BY}wP z+f=80z?r5?rkN&r3Wt~~G3}_QSex)%DYU{0jFbRdr^GQX$kRboK@$S2fht&lpZFMo zlnHaP zQ4e^8LvxZBKPZFdM#;UrqH?lIrXzPkm!4fhZKyWMK6Ojd?ig;P-%-U96X@QU+K2S= z2;wt_*u;4=r7WNvpXt$`lk|Q^QiXORx(vjO(l$gxhTBlpVaG91uUkKagc_6rK3-;C zNgNdXVcD1*eG;$e9fAu4u<<1nMmbxL4KezV$OU<(3`yaDj}7q6EE%U|?YJkm%!ea& zY>Fi>WJE}zqjNN#VS~F0>hO@#7mq37B<ik3bWi(V(ze#7Dbx)QJS5ISr0aLRUk$~O|j^e`A{qZuYq2a4jG(pWu83LuE+ zaUek6R&Gbe#Rd+V#0=~4b`>2dB9whJOthK3;Gr_B^<;73;9$)BS(-^y+is?CCP$c5V?RZw96`{3GH;& zC&t4S-7Gk+NpV0M|x*C2GMH*rGr9m6adAXgf*bEKK9~(E|_}IbfGzoUIC~9s6!E+g(MjZ zt(jg3s+!JmLY^VMxW+{#5OLDEc)`aT1GNMSJJLC#J1|Z6O$X{Pl)mSv9|i8QTB6H{@kdqt5bO5(1B1TR&@J`kKW50l?~Co|{#&N*L%aeFI5$w7VwAWQ}f z^hB9cOPohs0+inZM*W1*cNH*y)tQrWrZMd6CPi6iMnq@UYr*t)Bw()UWffpb61BoIAT}fpY^S*Uq&UEc@efUFl6TWg zn@tD$wgL$cP3;R>0n2i;b4*DP;JxOYO?5y_z+4yDNy9y6Zah>&rZC^`kjQ+QG$Hjn z4SBS*=(h}HuaX+8`++2r)YNqf$Q-LPTanIPp~=JzN}rqyY1k8`KSBsdtFXj4RbV8u zgndUTzQfYGH`-XeMT_y0c}Az@eEVlIF0~9?EC7rl>y*n>Xw*!rw^9Jqwbs&vY#QY~ zommam+3QIxq0G8QZKu_&X63vysGhbB=g41m*(L?ZOXO_LHRR3p**aHrQN!Ij(-hm? zUN`l9$u0&K0f|%Wu_b+gr$%SyF1tJQjryAxtZ8SWUM%qBHH1 z+%))}=8_`c8KA2vm=)#31KMzla{e(-n|$L3@)GF{D&}K7Do_Q#_R=`V!D`|TYa5&n zqxL9qok4q=($6zT+I^Ov9@a)@{191v-WJxV6lw`$S`F;R!~%9Oe CAscApplicationManagerWrapper - + Presenter View Vista de apresentador @@ -21,18 +21,18 @@ Todas as janelas do editor serão fechadas. Quer continuar? - - + + Document%1.docx Documento%1.docx - + Book%1.xlsx Planilha%1.xlsx - + Presentation%1.pptx Apresentação%1.pptx @@ -56,8 +56,8 @@ CAscTabWidget - - + + Document Abrindo... @@ -160,22 +160,22 @@ CEditorWindow - + Open main window Abrir a janela principal - + Document must be saved to continue.<br>Save the document? O documento deve estar salvo para continuar.<br>Salvar o documento? - + Print Document Imprimir documento - + Document must be saved firstly. O documento deve ser salvo primeiro. @@ -185,7 +185,7 @@ %1 foi modificado.<br>Deseja salvar as alterações? - + Some data will lost.<br>Continue? Se continuar salvando nesse formato, a formatação será perdida.<br>Quer continuar? @@ -193,7 +193,7 @@ CEditorWindowPrivate - + There are no printers available Não há impressoras disponíveis @@ -315,12 +315,11 @@ Modelo de planilha do Excel Open XML (*.xltx) - Macro-enabled spreadsheet template (*.xltm) - Modelo de planilha habilitado para macro (*.xltm) + Modelo de planilha habilitado para macro (*.xltm) - + XLS File (*.xls) Folha de cálculo do Excel 97-2003 (*.xls) @@ -536,43 +535,43 @@ Não pergunte novamente. - - + + File format not supported. Formato de arquivo não suportado. - + %1 doesn't exists!<br>Remove file from the list? %1 não está disponível. Ele foi movido ou excluído.<br>Deseja remover o arquivo da lista? - + Document must be saved firstly. O documento deve ser salvo primeiro. - + Document must be saved to continue.<br>Save the document? O documento deve estar salvo para continuar.<br>Salvar o documento? - + There are no printers available Não há impressoras disponíveis - + Print Document Imprimir documento - + Sign Up Criar escritório na nuvem - + %1 is modified.<br>Do you want to keep changes? %1 foi modificado.<br>Deseja salvar as alterações? @@ -615,22 +614,22 @@ CPrintProgress - + Document is printing: page %1 of %2 Imprimindo documento: página %1 de %2 - + Document is preparing Preparando documento - + &Cancel &Cancelar - + Printing... Imprimindo... @@ -639,161 +638,167 @@ CUpdateManager - - + + Last check performed Última verificação realizada - - - - - - - - - - + + + + + + + + + + - + + Check for updates Verificando atualizações - - - + + Unable to check update: URL not defined. + + + + + + To finish updating, restart app Para terminar a atualização, reinicie o aplicativo - - - + + + Restart Reiniciar - + Checking for updates... Verificando atualizações... - + Updates are not allowed! Atualizações não são permitidas! - + This folder configuration does not allow for updates! The folder name should be: Esta configuração de pasta não permite atualizações! O nome da pasta deve ser: - + An error occurred while check updates: Update Service not found! Ocorreu um erro ao verificar atualizações: Serviço de atualização não encontrado! - + Downloading new version %1 (%2%) Baixando a nova versão %1 (%2%) - + An error occurred while loading updates: Update Service not found! Ocorreu um erro ao carregar atualizações: Serviço de atualização não encontrado! - + Downloading new version %1 (0%) Baixando a nova versão %1 (0%) - - + + Cancel Cancelar - + An error occurred while loading updates: package Url is empty! Ocorreu um erro ao carregar atualizações: o URL do pacote está vazio! - + Update package error: md5 sum does not match the original. Erro no pacote de atualização: a soma md5 não corresponde ao original. - + Preparing update... Preparando atualização... - + An error occurred while unzip updates: Update Service not found! Ocorreu um erro ao descompactar atualizações: Serviço de atualização não encontrado! - + Update is available (version %1) A atualização está disponível (versão %1) - + Download update Baixar atualização - - + + Current version is up to date A versão atual está atualizada - + Update is available A atualização está disponível - - + + Current version Versão Atual - - + + Update version Versão atualizada - + Would you like to download update now? Gostaria de baixar a atualização agora? - + Update is ready to install A atualização está pronta para ser instalada - + Would you like to restart app now? Gostaria de reiniciar o aplicativo agora? A new version of %1 is available! - Uma nova versão do %1 está disponível! + Uma nova versão do %1 está disponível! %1 %2 is now available (you have %3). Would you like to download it now? - %1 %2 agora está disponível (você tem %3). Deseja baixá-lo agora? + %1 %2 agora está disponível (você tem %3). Deseja baixá-lo agora? %1 %2 is now downloaded (you have %3). Would you like to install it now? - %1 %2 foi baixado (você tem %3). Você gostaria de instalar agora? + %1 %2 foi baixado (você tem %3). Você gostaria de instalar agora? @@ -829,12 +834,12 @@ - + Access to file '%1' is denied! Acesso ao arquivo '%1' negado! - + Read only Somente leitura @@ -897,28 +902,24 @@ Notas de lançamento - - An error occurred while check updates: Update Service not found! - Ocorreu um erro ao verificar atualizações: Serviço de atualização não encontrado! + Ocorreu um erro ao verificar atualizações: Serviço de atualização não encontrado! - An error occurred while loading updates: Update Service not found! - Corrija um erro ao verificar atualizações: Serviço de atualização não encontrado! + Corrija um erro ao verificar atualizações: Serviço de atualização não encontrado! - An error occurred while unzip updates: Update Service not found! - Ocorreu um erro ao descompactar atualizações: Serviço de atualização não encontrado! + Ocorreu um erro ao descompactar atualizações: Serviço de atualização não encontrado! - + An error occurred while start install updates! Ocorreu um erro ao iniciar a instalação das atualizações! - + An error occurred while start replacing files: Update Service not found! Ocorreu um erro ao iniciar a substituição de arquivos: Serviço de atualização não encontrado! @@ -969,9 +970,8 @@ Ocorreu um erro ao abrir o portal: <br>%1 - App can't working correctly under admin rights. - O aplicativo não funciona corretamente com direitos de administrador. + O aplicativo não funciona corretamente com direitos de administrador. &OK diff --git a/win-linux/langs/pt_PT.ts b/win-linux/langs/pt_PT.ts index 798159544..c44e93091 100644 --- a/win-linux/langs/pt_PT.ts +++ b/win-linux/langs/pt_PT.ts @@ -4,7 +4,7 @@ CAscApplicationManagerWrapper - + Presenter View Vista do Apresentador @@ -21,18 +21,18 @@ Todas as janelas do editor serão fechadas. Deseja continuar? - - + + Document%1.docx Documento%1.docx - + Book%1.xlsx Livro%1.xlsx - + Presentation%1.pptx Apresentação%1.pptx @@ -40,8 +40,8 @@ CAscTabWidget - - + + Document A abrir... @@ -149,27 +149,27 @@ %1 foi modificado.<br>Quer guardar as alterações? - + Some data will lost.<br>Continue? Se deseja continuar a guardar neste formato todas as funcionalidades excepto o texto serão perdidas.<br>Tem a certeza que quer continuar? - + Open main window Abrir janela principal - + Document must be saved to continue.<br>Save the document? Tem de guardar o documento para continuar.<br>Guardar o documento? - + Print Document Imprimir documento - + Document must be saved firstly. O documento tem de ser guardado primeiro. @@ -177,7 +177,7 @@ CEditorWindowPrivate - + There are no printers available @@ -515,43 +515,43 @@ - - + + File format not supported. O Formato do Ficheiro não é suportado. - + %1 doesn't exists!<br>Remove file from the list? %1 não está disponível. Ele pode ter sido renomeado, movido de lugar ou apagado.<br>Deseja remover o ficheiro da lista? - + Document must be saved firstly. O documento tem de ser guardado primeiro. - + Document must be saved to continue.<br>Save the document? Tem de guardar o documento para continuar.<br>Guardar o documento? - + There are no printers available - + Print Document Imprimir documento - + Sign Up Criar Portal - + %1 is modified.<br>Do you want to keep changes? %1 foi modificado.<br>Quer guardar as alterações? @@ -590,22 +590,22 @@ CPrintProgress - + Document is printing: page %1 of %2 A imprimir o documento: página %1 of %2 - + Document is preparing A preparar o documento - + &Cancel &Cancelar - + Printing... A imprimir... @@ -614,147 +614,153 @@ CUpdateManager - - + + Last check performed - - - - - - - - - - + + + + + + + + + + - + + Check for updates - - - + + Unable to check update: URL not defined. + + + + + + To finish updating, restart app - - - + + + Restart - + Checking for updates... - + Updates are not allowed! - + This folder configuration does not allow for updates! The folder name should be: - + An error occurred while check updates: Update Service not found! - + Downloading new version %1 (%2%) - + An error occurred while loading updates: Update Service not found! - + Downloading new version %1 (0%) - - + + Cancel Cancelar - + An error occurred while loading updates: package Url is empty! - + Update package error: md5 sum does not match the original. - + Preparing update... - + An error occurred while unzip updates: Update Service not found! - + Update is available (version %1) - + Download update - - + + Current version is up to date - + Update is available - - + + Current version - - + + Update version - + Would you like to download update now? - + Update is ready to install - + Would you like to restart app now? @@ -788,12 +794,12 @@ - + Access to file '%1' is denied! - + Read only @@ -852,12 +858,12 @@ - + An error occurred while start install updates! - + An error occurred while start replacing files: Update Service not found! diff --git a/win-linux/langs/ro.qm b/win-linux/langs/ro.qm index 8f4f7cb07cbd99dcc5dd4cdaf4c7e9fb603f58db..4642997b24bb6521140c8ffa827038e23c3069cc 100644 GIT binary patch delta 6238 zcmbtY3vg8B6+WBIzVg@*$eTR=yhuWlC5fUTp?Pf*NE--{pg5`E&F)Qd<>uaX?`{HN z%GQp~)Rt+{3lvAJ*r_6j^${H(sI3)h>H{C0v}#o%QyjGxv0AB)O3%6XW_J?;LY>U! zzxVF_&pF>Y-+BD|bMM!`GHuTa#ohy8sRxMZ*4I`Su3Z4F2>=_O1z2W=*p8R6~+qM&64nRlh1i;*z;QEyt0OFGLwR9icb?^;<%;(|A9sdEi zWDmS~+g^ahH<=c_^lJz~U7@MdQV3AvH4Q$J4AAsD(~tge0wDc>Y1`+E0LtDo?LUzT zkn*f)|LM~J6(Q4c`{MwKXJVGz7Xonh#E6U90Njto-0|bj5XgVcaA-GL*lV8Kv<+a% zUUOFv0WAK)?5|!7P_WuO{74M~eBFF_O$Q1{zQjD<*aKkA(buev=2vci2B3b6`HT6e zINcn3bul7Hy)1THQaXSsKX!M=lK}R+^|hv4Ut1C_wlfICdBReD`+oGqF^fC#F*M`} zOWO@65&3dU;Ftq}v|0`}{R8FPY%=Q-onNfp=Jw`{eA4+2y^ZW{>Y+=Q-JWxM6&tpIuBwgap8VN5G* z?>~=*U;Zz9+M-qf^L6&T=65g@U|$&A0x)mbzGd`AfOfC_#;egoODy(nyEfqlupc?- zK#zWIfBv4s0GG-3zn{dI&u_7Rov|11?{!>S@F_sj4oCM_P6Tk&5!x2`3qbxM$IgfE z0=SgvYs-jZ-)AUzvBmMoQ*R)7e&BdvZ3#g0QOEmfYXHhmJHD}O$F(djIV~3rTOY?Y zpo{BS+}7hCpq#C7yF2zESKM*?enB3rj(gz63H0FZxUppPOr;X{=mC5$=h{%*6R+V# zesA35<4XWy--};*2rX;3#JBZX0E(`PZ_g@2i!asJh8N>IMF)DSH+~@Z0A|XO_yM^Z zLzf?~y!~6;uf*TI9iPYiEdKBY&pNOdiC{ta}qPQ{~Hbe zI*~ni29cjk+<*9b0N3%v)Aw!wSbC!~!-9s->2PK&!*$+-GnekOIepFT)z?sAyna#q znKQQ-Unu%eU)vvb<{rU&_Lh^;#&3&yT9A52z1Elf#mg)VTz zIy>>til4;RF84Y$yQo;rNmZBRLMzDNfglV44-y1`#bg2peIVjgD=eIYj88

      )01Uh+h(W*l{j@ywqs&F+VHpK0IFDbhV|u&MH5z zAYd*a$P(*`pib|cRhAA|%}QSwwkv;{yzVHxQR2ov$bQ+ptaMhHKJcS6M~%pEbQcz$ zI?cW)tm*@WvFelTS$8RPU{pC600AS*;}wH$xB`~pS_%un1quw~w`F0O$=z2hV;w`> z0MAMnx|HDo_0{<~YAAnKdd;l%5$0^Qs=$$w5{)j(n6cD?7HfwKRwBcgW{rUBNsVcQ ztxvPct69kKsf_Qr!uHH*m8FsZQ~5qo&^RuiOCYryi<80C`?8gx|a6&8{DF-&^tUE5hSlX!Z>O32)DUWZ7EG1J63u; zCiEw0Mhz5~fTnpE|4Vp}`G=<{*`Ua4biwF}nG`-cS&&m=j(`sJYH%~zW$ zvO?e00pvU#_(j7f^mEaJv%u%S9e&HX;EOWn6{LX+b3jID$3<~K)WSiTV}Qncow45@ z?^XCNF`n00A!4}K!kYEai5I*^cp}*V(nE}ja>E6~^l_ezR5RB4MTTjBr82OYVw@2g zzbJ?VZYIr%m!ld~%HrXRBYFnbJIaz-BmG^79+XA}-v!25eWrX#Pc7EnsC=CkyYt2` zoOH=x={=4`0*p{|d(PkAGqD>6&`cG8W?yMV+r0YVZ^3daP9*k*0E2;zy<|XT{a5w790Yj3Ag= zNXHcys-tR}hP?A>sL~aztHq?mMuz57)1Fb_4Z={qQmdLO@8~CBVb`a2a!SA`!am-Q zfgHlpOxEW&!743QRL)6--dB8j^zbgICRJn0n!$*oxv&QJ`m~Nh zeGBD<&9JTEl>p}tkmAr$tN>HiMmHl074@A+x26*1(S!!j4r+@G73f1L8i;rFhS8!4 zH{Rihsx`m?jf$Ms%xNF_ub=8!NNa4gUBr(7`S=CRA~fxWM^$>!c#p~t`KC{Mo8D10 zRn%p9>YZVft9u5Ki2btY<^9YfOZ~z?(60}RUYS?4ZpVogB6k0%jLK&{I29PXByNaj z%Agz+y{wO~(;`*akCB=VnxIg#GrBo&6sxs(TY=`0vEeWn!wiQ{$k!gwJ;H^J&g+p` zzaR<9pk72UuoVpFTnZQCd_D?UX5Gw?p(;|tsZSNN+^AHaXEb>912@bGBF^<{V@0NU z9dwb2^!jqmd!@#-GL?(@@bdO^S%&hW8yV4uD4-uj1huy+ zGb<~ifzBP9selL)A{W(n%QKVrLK}jNj9gxN4U%$T7|MW*2NOp_odVruZ(ESOQYQakRUM8i5g=_q_SziYY-E)%aBw3tvt$orAW ze8H7kCT*63OcXZa{4Jw{^vZ6uOjJD5sFkJmSruMTG9l=*br+niJ1VU-y*502JKee) z#yTsqP00@gwJAO|RHCIu2|gin`Vl0}Khg7dZnMY3D+&SZr?I=FxVnV8 zqL-Hh^e8E^t?uf(miJJ9pdTNb(OFdXhfxwr4aeHv>(d!kZXoU22uoR1~9~uaKC~RQ$xrR_WYf)RGLzYkWV;a}d$*Z_Jg2X_- z>Ef}3G-pN5T2y`MT!;o6#J`}ERv3lrTqyLytCt~hYOc$-;m@wqBlzUSW0(PfW@|bC zQqoYnjvN-TxnOak_C|cu4vE?NDN%bg>+Bqws&g|BiILj1{QQ`4t`IqoHg6(@&v#fn zE1=onPS8@{rv-yke_xeux3vT}vz79Qda%-6l7hc@(P%)FCrf9L-YrW3K??F??^K#h zrc!m%m0G0zh+yzk>jF`IF0n)F6QbH&l|FXNbta~s!8-f_g3eFvs6xbjQ$ML}!jdFL ZHMTkHR&=s<%2NDAWz&#YroL3&@ITTEw3z?^ delta 957 zcmXYvdq@;v6vfZZ?9A@$?9TdXUA28^u9;7IK$%6^YPMug3yLT!3fYK_(8843ilkC0 zbJCQGEGknrf=02@`lA$$B72bZKw2!L0Lr^WxNFL9Dvk=&~;q_#E%HesRcrSeTxeKgIQ(# zVO$722duj^%|lT@ghSK(?He#LOf#sz4w%N6jLUxbA+2Dxrsq(@EzFs{Ur5Mz79I7} zVGX;pZ3>W5!FDb80HIUa-Z?7(-lj4tn*9+&4_gYfYhBbRqDEU~js!HZ+ImkXpueax zF;8XE0!}wJ0g#5cd@2@hhLY0mmwS<0l^p>gT<_sZ=-fzS|@;b`f9yVI82m#w%H?fpMdJ za6kQze#r-AV$6uH&~})NF}j*Q{~locOI^#dCWW7Igal!Wp{M*qnYa-w-^yt1a15;&#OwZ(Y1*GftJH1VbRfX!`+$nFE;W~)qm zZL(I6lH)wd%8`%|k7UgyhEJC4|LUk>l`%e*_F=YCYm7mP9T!-c7T0YpgnU;qFB diff --git a/win-linux/langs/ro.ts b/win-linux/langs/ro.ts index fe67a4862..75f234170 100644 --- a/win-linux/langs/ro.ts +++ b/win-linux/langs/ro.ts @@ -4,7 +4,7 @@ CAscApplicationManagerWrapper - + Presenter View Vizualizarea prezentator @@ -21,18 +21,18 @@ Toate ferestrele vor fi închise. Doriți sã continuați? - - + + Document%1.docx Document%1.docx - + Book%1.xlsx Registru%1.xlsx - + Presentation%1.pptx Prezentare%1.pptx @@ -56,8 +56,8 @@ CAscTabWidget - - + + Document Deschidere... @@ -165,27 +165,27 @@ %1 a fost modificat.<br>Dori?i sã salvați modificãrile? - + Some data will lost.<br>Continue? Dacã salvați în acest format de fișier, este posibil ca unele dintre caracteristici sã se piardã, cu excepția textului.<br>Sunteți sigur cã doriți sã continuați? - + Open main window Deschidere fereastră principală - + Document must be saved to continue.<br>Save the document? Este necesar sã salvați documentul înainte de a putea continua .<br>Doriți sã salvați documentul? - + Print Document Imprimare document - + Document must be saved firstly. Mai întâi, salvați documentul. @@ -193,7 +193,7 @@ CEditorWindowPrivate - + There are no printers available Nu a fost găsită nicio imprimantă @@ -535,43 +535,43 @@ Nu mai întreba din nou. - - + + File format not supported. Formatul fișierului nu este compatibil. - + %1 doesn't exists!<br>Remove file from the list? %1 nu este disponibil. Îl puteți redenumi, deplasa sau șterge.<br>Doriți sã-l eliminați din lista? - + Document must be saved firstly. Mai întâi, salvați documentul. - + Document must be saved to continue.<br>Save the document? - + There are no printers available Nu a fost găsită nicio imprimantă - + Print Document Imprimare document - + Sign Up Crearea unui portal - + %1 is modified.<br>Do you want to keep changes? %1 a fost modificat.<br>Doriți sã salvați modificãrile? @@ -614,22 +614,22 @@ CPrintProgress - + Document is printing: page %1 of %2 Imprimare document: pagina %1 din %2 - + Document is preparing Pregãtirea documentului - + &Cancel &Revocare - + Printing... Imprimare... @@ -638,161 +638,167 @@ CUpdateManager - - + + Last check performed Ultima verificare efectuată - - - - - - - - - - + + + + + + + + + + - + + Check for updates Verificarea a actualizărilor - - - + + Unable to check update: URL not defined. + + + + + + To finish updating, restart app Pentru a finaliza actualizarea, reporniți aplicația - - - + + + Restart Repornire - + Checking for updates... Verificarea a actualizărilor... - + Updates are not allowed! Actualizări nu sunt permise! - + This folder configuration does not allow for updates! The folder name should be: Actualizări nu sunt acceptate pentru această configurație a folderului! Nume de folder trebuie să fie: - + An error occurred while check updates: Update Service not found! A intervenit o eroare în timpul verificării a actualizărilor: Serviciu de Actualizare nu s-a găsit! - + Downloading new version %1 (%2%) Descărcarea noii versiuni %1 (%2%) - + An error occurred while loading updates: Update Service not found! A intervenit o eroare în timpul incărcării a actualizărilor: Serviciu de Actualizare nu s-a găsit! - + Downloading new version %1 (0%) Descărcarea noii versiuni %1 (0%) - - + + Cancel Revocare - + An error occurred while loading updates: package Url is empty! A intervenit o eroare la încărcarea actualizărilor: Pachetul URL este gol! - + Update package error: md5 sum does not match the original. Eroare de actualizare a pachetului: suma md5 nu se potrivește cu suma modelului. - + Preparing update... Pregătire pentru actualizarea... - + An error occurred while unzip updates: Update Service not found! A intervenit o eroare în timpul dezarhivării a actualizărilor: Serviciu de Actualizare nu s-a găsit! - + Update is available (version %1) O actualizare este disponibilă (versiune %1) - + Download update Descărcare actualizare - - + + Current version is up to date Versiunea curentă este actualizată - + Update is available Actualizarea este disponibilă - - + + Current version Versiunea curentă - - + + Update version Actualizați versiunea - + Would you like to download update now? Doriți să descărcați actualizarea acum? - + Update is ready to install Actualizarea este gata de instalare - + Would you like to restart app now? Doriți să reporniți aplicația acum? A new version of %1 is available! - Este disponibilă o nouă versiune a aplicației %1! + Este disponibilă o nouă versiune a aplicației %1! %1 %2 is now available (you have %3). Would you like to download it now? - Aplicația %1 este disponibilă în versiunea %2 (versiunea dvs %3). Doriți să încărcați acum? + Aplicația %1 este disponibilă în versiunea %2 (versiunea dvs %3). Doriți să încărcați acum? %1 %2 is now downloaded (you have %3). Would you like to install it now? - Aplicația %1 %2 a fost încărcată (versiunea dvs %3). Doriți să instalați acum? + Aplicația %1 %2 a fost încărcată (versiunea dvs %3). Doriți să instalați acum? @@ -828,12 +834,12 @@ - + Access to file '%1' is denied! Acces la fișierul '%1' refuzat! - + Read only Doar în citire @@ -896,28 +902,24 @@ Note de lansare - - An error occurred while check updates: Update Service not found! - A intervenit o eroare în timpul verificării a actualizărilor: Serviciu de Actualizare nu s-a găsit. + A intervenit o eroare în timpul verificării a actualizărilor: Serviciu de Actualizare nu s-a găsit. - An error occurred while loading updates: Update Service not found! - A intervenit o eroare în timpul încărcării a actualizărilor: Serviciu de Actualizare nu s-a găsit. + A intervenit o eroare în timpul încărcării a actualizărilor: Serviciu de Actualizare nu s-a găsit. - An error occurred while unzip updates: Update Service not found! - A intervenit o eroare în timpul dezarhivării a actualizărilor: Serviciu de Actualizare nu s-a găsit. + A intervenit o eroare în timpul dezarhivării a actualizărilor: Serviciu de Actualizare nu s-a găsit. - + An error occurred while start install updates! A intervenit o eroare în timpul instalării a actualizărilor: - + An error occurred while start replacing files: Update Service not found! A intervenit o eroare în timpul înlocuirii a fișierelor: Serviciu de Actualizare nu s-a găsit. @@ -968,9 +970,8 @@ A intervenit o eroare în timpul deschiderii a portalului:<br>%1 - App can't working correctly under admin rights. - Aplicația nu funcționează corect cu privilegii de administrator. + Aplicația nu funcționează corect cu privilegii de administrator. &OK diff --git a/win-linux/langs/ru.qm b/win-linux/langs/ru.qm index d2e1b669dee780c7531a69504a52cb1933d23191..008ae928ba1121ce933388ba537affc1d0aecfd7 100644 GIT binary patch delta 5606 zcmc&&dvH|c6+fHY-E5X*L!NA2o0~wMuG_E<5OqmJ>z^X>-b7sAZ-|U1 zwY6d;>3>Q@9yg^t{ScAqL&{omJCXSy_2s@wlvz#NR;(vV9n;o|x9EWbuM^Gtl8){E zil{M<-q^K=sOckJ!wdIPGc7LH_3P&o*^Ii;M>2^zdUV$weUB*jdENHEHxN}_uiN)t zK2dhMZr|zCL^bcl1mCmYb7by63kko9j3pv;758YA% zr`hyJPD5Y&PW|ye-AR*_v04A-8!}P(orctJpwNB7khS)0BF8@rt6udIm0n}GQkP5Q zdcZLJ86sdfBppF%)iR`Z_6H{ zmXy?%vM)e`p46eQ%|xBGsoNv35S1KBz5Vb52>V@FCvo9=GxfnQA-G9SedKYteqK2B z_p87?mm~Fqyh{<@wW;6ecMw(YHf82n5q^_NaKXi`M$>ig{1t*unRfQwjprURJ@{kh z!JAD7pMRCe88l60!ZQnBF+I8;&lL`ve*H4ml2xXYziK1mq&e-2jsTe_I%mnSo~Uf& zoSuSe#PoA*b?%+hA54X-dgqK-_ah00=8VXV5d4`UC*@6+9ZJjA!7*hOX^yS1L;tt5 zpX|9G4q217YcmYjJ)ZXSUB}?q6KM}!c^HnqOIxc4(|&i{0!QDUZrD0RWW6Rmr~5^s z1>3Z>?cH?Cj?Y2VHD7EMpT!Se)?y~qqae_MPCi-n7=YxdVx2q(`>~C z6&!8$MDB(i+$WB6G@o`={@~)4k?rPa*}mQ|6QF5rO>o z%^&4|MpXaDjFeCDoaOC|jQjoouI|dH_!<mhf-oL z&di*ChL4D2<3S;!T#{8hHI%cAvtO0?F!9`S9J6x{&ck)F5{84KpAV0RM8O{(6~)LI>h84!lS&-3)U`mogY$CjP};$H6i0qh zWn8dzU|f{q(Bl^gHe|YH$?H_^vt;X9mG=CC1b}DAxg;cp;VvN(kR^WQj6duvX34rZ zS3pxu9C7IxnuZcQk)UYGRJc1ibHOZaDstrst0_1441@{RD*LRjE1wn?Gz`&Y)Jr^7 zQ4Q5om^RS}RmVYO4qevE_l*f7B41TgAKo;g49+c9t}nTxyk(Zob6Ti0@cB78iP#e$ zOj-C-hVB|J6LE8L{oGQ{4svv;f8AUsNMplZE7ye8!}U{r9M#-zS*nciLU1E6P#4#taq4d%DgFonp)WpQrx1cT7T z&Op*)Tu)2x$8Sb9cBeBA%jsM$heSRyDoDI6iM&6SO?)8C%b;I<`*6tR4a#BmjL1&} zB)>et3(}SeVN2)K#>&@{^0#v(0N)Dn%zhV?+p#)0yCT%(HnZf>_FDnR1@AZkn?YfI zYQ%Fka^QEVda4O~Zgx&!=QO`|z=$@u0U1K2ao}BUi5Ej5ImF98Uo;d#=1q(Sf+Fu5 z6@44|=(t~qh+zl6O1wY&Ro?D++LvkAF=zs3%loh z*n_g*4@e^yi~jp@&z}SRB30>S0HF;Wb#fW4B1zNe*{|}L(($>KE zMTSE0)YvmCRC{I;z{YSFwZ$o$=~bz@0i2D|lW{P!_FTuR+K}4##1GF?4>NKkoUgC1 zXCf9Aab*Y=Yb1T}*#JVOC7~PM8;Fa@@UlFSBK#&X6h`%DM@PFabQFRHAj*lqj0!5&aOb!I(ehBl$dcj8GWt8MsVFYdeCejyx*m9KFzgfNexs4+WoZL0Vdc+JIn z1jL|hGIlK(m_?IpG|zD%G*d)k6iF`NN)&5@B{Qxr5^ z3+A2KvRG?#a*H5SYk{m8_Os3q2RyiP6l~fc2mNA*_sP%46CJG2nNxf z5;CNeUx~IAJ0xWYVv}n zaS_?EZUsAqO+p~ZCQ5b;b6(DwM}RBO!!jcVSk3fUz9eMHIppzGvGhl(s9BEqNx08slb6EtrwZhTSbJ!2=R34Jzwu@^gQHk!Gg5$GpZoIjKzvGrfhWaYIo% zKF9?cBR?fhR4!QUQB7pkhh2H$cNmU+7Kvtj8E2iGH=$NKV(_M0k2)tf_%VN(oexLH zFyzGOGA2ZPqv~KIhXNx3NeHU-bg>l%G_uG*VJpxN_AQ3=eZrLd#dKtSjom76w2} zO1UDgo~%Y&FU@%S@6WFWxtkQ&{-NMI9YN9Co3 zYbMvIy_vC=@o;*S#z=x4R`&&#c#>Vr_Qu6o^>_Eq7llQnB zLV7vaI9}d(mSO%lPR&^?buqsI)$AlzhpCI24QFQU`tu>wYMYk%!RevqY`5>2jc#Qe z9)qjB{4N97>G&h>F3zE|UmH}zF7(>4^unf~c?JcaI%R=R7kYg-D+C2x0q0HPIu%<( zu`$IH-NLVsCzSl!&dMCseD)@%wK%n+#KUj&%2FgCMa8M!TD?xkD@W^d=Bw7Twu&|r ze=@yKEwMo!|G^MLQ_i}UWGBxp&~gUFb2Tl;AV2+Dycxwbm@qNTUA?@Y?_pVjx8luX K!D?ll&GR3RA+4_f delta 944 zcmXYvX-E`d7{~v!bL`F@vw5_xtB$6ttw&jDhn@6VviG5(uqiS_TJ!#FI?F;R;}G(q*;#QTs~tCqLDl+VPDPuCch#0v z!Vr76*bP|UvOTjFkyfL|h?(qm40Y>!lIhM;*r-R@4T7(~=9N(7xhA!B~UpgF1y^iC1o*$*cKEChe24K`y zK^&q2sRxD9XE{L3a$(hHFCY{M9&ZM%y9DoT5{>l;4FfAlz$K`&myn=C2=1bNd!G^Ye%9#Dsm{(u-XglEO*0(Nf_EU)223vYAz-AayHdO;51%~RXy%hdFL(LH%nZj_d zO(gTBVrKkT3VV)N@>>Fu)5V&NPk?BnSl`hEB>mCo3W}ZADH)qnd}k}B(8I+cJ^(n& zj3G7|NC+4k+$U&%jj{RAyy4FBjcN#)Cmk?$wZ13gEym!LEP(TxreCE(Y3ZiCRXiZi zHO+A(Q=XJ{AIyBwTis>59Z@O@@B4^FD&bz zevfH%8qD{5?9}&pi%?YpM2)wE=RN}BDm0ERwb%n+sJ~*#&Qn?GyJXKNh8&gT;dMlv z#>mAQqksIPAF)3rIgt*?K}o(xjH;I6hJOgVCB@|tM<)Geqm(t7UU~Fs$cn z-D-NB=^CBQQvJt%3TjB|4$>3lK3T129@2!5Te}{!G|6@kFvdY&uyYP>1~-Mv;Kr%F zT+s-{H*%-C&^DJ-^P<-2)OoR|Sfw!Gg>uk&L=7Z<5|o!|K4qUY&9-bE2|# fQkmK@Gn`R;*={92XROkm^GzMdO<^q$?LP0= diff --git a/win-linux/langs/ru.ts b/win-linux/langs/ru.ts index fdf4bf2df..ab8df5afc 100644 --- a/win-linux/langs/ru.ts +++ b/win-linux/langs/ru.ts @@ -4,7 +4,7 @@ CAscApplicationManagerWrapper - + Presenter View Режим докладчика @@ -21,18 +21,18 @@ Будут закрыты все окна редакторов. Продолжить? - - + + Document%1.docx Документ%1.docx - + Book%1.xlsx Книга%1.xlsx - + Presentation%1.pptx Презентация%1.pptx @@ -56,8 +56,8 @@ CAscTabWidget - - + + Document Открытие... @@ -160,22 +160,22 @@ CEditorWindow - + Open main window Открыть главное окно - + Document must be saved to continue.<br>Save the document? Необходимо сохранить документ для продолжения.<br>Сохранить? - + Print Document Печать документа - + Document must be saved firstly. Сначала необходимо сохранить документ. @@ -185,7 +185,7 @@ Файл %1 был изменен.<br>Вы хотите сохранить изменения? - + Some data will lost.<br>Continue? Если Вы продолжите сохранение в этот формат, весь функционал, кроме текста, будет потерян.<br>Вы действительно хотите продолжить? @@ -193,7 +193,7 @@ CEditorWindowPrivate - + There are no printers available Нет доступных принтеров @@ -535,43 +535,43 @@ Больше не спрашивать. - - + + File format not supported. Формат файла не поддерживается. - + %1 doesn't exists!<br>Remove file from the list? %1 недоступен. Возможно, он был переименован, перемещен или удален.<br>Хотите удалить его из списка? - + Document must be saved firstly. Сначала необходимо сохранить документ. - + Document must be saved to continue.<br>Save the document? Необходимо сохранить документ для продолжения.<br>Сохранить? - + There are no printers available Нет доступных принтеров - + Print Document Печать документа - + Sign Up Создать облачный офис - + %1 is modified.<br>Do you want to keep changes? Файл %1 был изменен.<br>Вы хотите сохранить изменения? @@ -614,22 +614,22 @@ CPrintProgress - + Document is printing: page %1 of %2 Печать документа: страница %1 из %2 - + Document is preparing Подготовка документа - + &Cancel &Отмена - + Printing... Печать... @@ -642,161 +642,167 @@ - - + + Last check performed Последняя проверка выполнена - - - - - - - - - - + + + + + + + + + + - + + Check for updates Проверка обновлений - - - + + Unable to check update: URL not defined. + + + + + + To finish updating, restart app Для завершения обновления перезапустите приложение - - - + + + Restart Перезапустить - + Checking for updates... Проверка обновлений... - + Updates are not allowed! Обновления не разрешены! - + This folder configuration does not allow for updates! The folder name should be: Данная конфигурация папки не позволяет устанавливать обновления! Имя папки должно быть: - + An error occurred while check updates: Update Service not found! При проверке обновлений произошла ошибка: Сервис обновлений не найден! - + Downloading new version %1 (%2%) Загрузка новой версии %1 (%2%) - + An error occurred while loading updates: Update Service not found! При загрузке обновлений произошла ошибка: Сервис обновлений не найден! - + Downloading new version %1 (0%) Загрузка новой версии %1 (0%) - - + + Cancel Отмена - + An error occurred while loading updates: package Url is empty! При загрузке обновлений произошла ошибка: URL-адрес пакета пуст! - + Update package error: md5 sum does not match the original. Ошибка при обновлении пакета: сумма md5 не соответствует оригиналу. - + Preparing update... Подготовка обновления... - + An error occurred while unzip updates: Update Service not found! При разархивировании обновлений произошла ошибка: Сервис обновлений не найден! - + Update is available (version %1) Доступно обновление (версия %1) - + Download update Скачать обновление - - + + Current version is up to date Текущая версия является актуальной - + Update is available Обновление доступно - - + + Current version Текущая версия - - + + Update version Обновить версию - + Would you like to download update now? Хотите загрузить обновление сейчас? - + Update is ready to install Обновление готово к установке - + Would you like to restart app now? Хотите перезапустить приложение сейчас? A new version of %1 is available! - Доступна новая версия %1! + Доступна новая версия %1! %1 %2 is now available (you have %3). Would you like to download it now? - Доступна версия %2 %1 (текущая версия %3). Хотите скачать ее прямо сейчас? + Доступна версия %2 %1 (текущая версия %3). Хотите скачать ее прямо сейчас? %1 %2 is now downloaded (you have %3). Would you like to install it now? - Загружена версия %2 %1 (текущая версия %3). Хотите установить ее прямо сейчас? + Загружена версия %2 %1 (текущая версия %3). Хотите установить ее прямо сейчас? @@ -824,12 +830,12 @@ - + Access to file '%1' is denied! Доступ к файлу '%1' запрещен! - + Read only Только чтение @@ -892,28 +898,24 @@ Примечания к выпуску - - An error occurred while check updates: Update Service not found! - При проверке обновлений произошла ошибка: Сервис обновлений не найден! + При проверке обновлений произошла ошибка: Сервис обновлений не найден! - An error occurred while loading updates: Update Service not found! - При загрузке обновлений произошла ошибка: Сервис обновлений не найден! + При загрузке обновлений произошла ошибка: Сервис обновлений не найден! - An error occurred while unzip updates: Update Service not found! - При разархивировании обновлений произошла ошибка: Сервис обновлений не найден! + При разархивировании обновлений произошла ошибка: Сервис обновлений не найден! - + An error occurred while start install updates! При запуске установки обновлений произошла ошибка! - + An error occurred while start replacing files: Update Service not found! При запуске замены файлов произошла ошибка: Сервис обновлений не найден! @@ -965,7 +967,7 @@ App can't working correctly under admin rights. - Приложение работает некорректно при запуске с правами администратора. + Приложение работает некорректно при запуске с правами администратора. diff --git a/win-linux/langs/si.ts b/win-linux/langs/si.ts index 46743ef01..d3da63f30 100644 --- a/win-linux/langs/si.ts +++ b/win-linux/langs/si.ts @@ -4,7 +4,7 @@ CAscApplicationManagerWrapper - + Presenter View ඉදිරිපත්කරුගේ දැක්ම @@ -17,18 +17,18 @@ All the editor windows will be closed. Do you want to continue? - - + + Document%1.docx ලේඛනය%1.docx - + Book%1.xlsx පොත%1.xlsx - + Presentation%1.pptx සමර්පණය%1.pptx @@ -52,8 +52,8 @@ CAscTabWidget - - + + Document විවෘත වෙමින්... @@ -156,22 +156,22 @@ CEditorWindow - + Open main window ප්‍රධාන කවුළුව අරින්න - + Document must be saved to continue.<br>Save the document? ඉදිරියට යාමට ලේඛනය සුරැකිය යුතුය. <br>ලේඛනය සුරකින්නද? - + Print Document ලේඛනය මුද්‍රණය - + Document must be saved firstly. පළමුව ලේඛනය සුරැකිය යුතුය. @@ -181,7 +181,7 @@ %1 දැනටමත් පවතී.<br>ඔබට වෙනස්කම් සුරැකීමට වුවමනාද? - + Some data will lost.<br>Continue? ඔබ මෙම ආකෘතියෙන් දිගටම සුරැකුවහොත් පෙළ හැර අනෙකුත් සියළුම විශේෂාංග නැති වී යනු ඇත. <br>ඔබට ඉදිරියට යාමට වුවමනාද? @@ -189,7 +189,7 @@ CEditorWindowPrivate - + There are no printers available කිසිදු මුද්‍රකයක් නැත @@ -527,43 +527,43 @@ - - + + File format not supported. ගොනුවේ ආකෘතියට සහාය නොදක්වයි. - + %1 doesn't exists!<br>Remove file from the list? %1 නොතිබේ. එය යළි නම් කර, ගෙන ගොස් හෝ මකා දමා විය හැකිය. <br>ඔබට ලැයිස්තුවෙන් ගොනුව ඉවත් කිරීමට අවශ්‍යද? - + Document must be saved firstly. පළමුව ලේඛනය සුරැකිය යුතුය. - + Document must be saved to continue.<br>Save the document? ඉදිරියට යාමට ලේඛනය සුරැකිය යුතුය. <br>ලේඛනය සුරකින්නද? - + There are no printers available කිසිදු මුද්‍රකයක් නැත - + Print Document ලේඛනය මුද්‍රණය - + Sign Up ද්වාරය සාදන්න - + %1 is modified.<br>Do you want to keep changes? %1 සංශෝධිතයි. <br>ඔබට වෙනස්කම් සුරැකීමට වුවමනාද? @@ -606,22 +606,22 @@ CPrintProgress - + Document is printing: page %1 of %2 ලේඛනය මුද්‍රණය වෙමින්: %2 න් %1 පිටුව - + Document is preparing ලේඛනය සූදානම් කෙරෙමින් - + &Cancel &අවලංගු - + Printing... මුද්‍රණය වෙමින්... @@ -630,147 +630,153 @@ CUpdateManager - - + + Last check performed - - - - - - - - - - + + + + + + + + + + - + + Check for updates - - - + + Unable to check update: URL not defined. + + + + + + To finish updating, restart app - - - + + + Restart - + Checking for updates... - + Updates are not allowed! - + This folder configuration does not allow for updates! The folder name should be: - + An error occurred while check updates: Update Service not found! - + Downloading new version %1 (%2%) - + An error occurred while loading updates: Update Service not found! - + Downloading new version %1 (0%) - - + + Cancel අවලංගු - + An error occurred while loading updates: package Url is empty! - + Update package error: md5 sum does not match the original. - + Preparing update... - + An error occurred while unzip updates: Update Service not found! - + Update is available (version %1) - + Download update යාවත්කාලය බාගන්න - - + + Current version is up to date - + Update is available - - + + Current version - - + + Update version - + Would you like to download update now? - + Update is ready to install - + Would you like to restart app now? @@ -820,12 +826,12 @@ - + Access to file '%1' is denied! - + Read only කියවීමට පමණි @@ -888,12 +894,12 @@ නිකුතු සටහන - + An error occurred while start install updates! - + An error occurred while start replacing files: Update Service not found! diff --git a/win-linux/langs/sk.ts b/win-linux/langs/sk.ts index 243c99000..c0fbc0c7f 100644 --- a/win-linux/langs/sk.ts +++ b/win-linux/langs/sk.ts @@ -4,7 +4,7 @@ CAscApplicationManagerWrapper - + Presenter View Režim prezentácie @@ -21,18 +21,18 @@ Všetky okná editora budú zatvorené. Chceš pokračovať? - - + + Document%1.docx Dokument%1.docx - + Book%1.xlsx Zošit%1.xlsx - + Presentation%1.pptx Prezentácia%1.pptx @@ -40,8 +40,8 @@ CAscTabWidget - - + + Document Otváranie... @@ -144,22 +144,22 @@ CEditorWindow - + Open main window Otvoriť hlavné okno - + Document must be saved to continue.<br>Save the document? Dokument musí byť uložený, aby ste mohli pokračovať.<br>Uložiť dokument? - + Print Document Vytlačiť dokument - + Document must be saved firstly. Dokument musí byť uložený ako prvý. @@ -169,7 +169,7 @@ %1 bol upravený.<br>Chcete zmeny zachovať? - + Some data will lost.<br>Continue? Ak budete pokračovať v ukladaní v tomto formáte, všetky funkcie okrem textu sa stratia.<br>Ste si istý, že chcete pokračovať? @@ -177,7 +177,7 @@ CEditorWindowPrivate - + There are no printers available @@ -515,43 +515,43 @@ - - + + File format not supported. Formát súboru nie je podporovaný. - + %1 doesn't exists!<br>Remove file from the list? %1 neexistuje.<br>Odstrániť súbor zo zoznamu? - + Document must be saved firstly. Dokument musí byť uložený ako prvý. - + Document must be saved to continue.<br>Save the document? Dokument musí byť uložený, aby ste mohli pokračovať.<br>Uložiť dokument? - + There are no printers available - + Print Document Vytlačiť dokument - + Sign Up Vytvoriť kancelárie cloud - + %1 is modified.<br>Do you want to keep changes? %1 bol upravený.<br>Chcete zmeny zachovať? @@ -590,22 +590,22 @@ CPrintProgress - + Document is printing: page %1 of %2 Tlačí sa dokument: strana %1 z %2 - + Document is preparing Dokument sa pripravuje - + &Cancel &Zrušiť - + Printing... Tlačí sa... @@ -614,147 +614,153 @@ CUpdateManager - - + + Last check performed - - - - - - - - - - + + + + + + + + + + - + + Check for updates - - - + + Unable to check update: URL not defined. + + + + + + To finish updating, restart app - - - + + + Restart - + Checking for updates... - + Updates are not allowed! - + This folder configuration does not allow for updates! The folder name should be: - + An error occurred while check updates: Update Service not found! - + Downloading new version %1 (%2%) - + An error occurred while loading updates: Update Service not found! - + Downloading new version %1 (0%) - - + + Cancel Zrušiť - + An error occurred while loading updates: package Url is empty! - + Update package error: md5 sum does not match the original. - + Preparing update... - + An error occurred while unzip updates: Update Service not found! - + Update is available (version %1) - + Download update - - + + Current version is up to date - + Update is available - - + + Current version - - + + Update version - + Would you like to download update now? - + Update is ready to install - + Would you like to restart app now? @@ -788,12 +794,12 @@ - + Access to file '%1' is denied! - + Read only @@ -852,12 +858,12 @@ - + An error occurred while start install updates! - + An error occurred while start replacing files: Update Service not found! diff --git a/win-linux/langs/sl.ts b/win-linux/langs/sl.ts index b20d19f12..43394ad41 100644 --- a/win-linux/langs/sl.ts +++ b/win-linux/langs/sl.ts @@ -4,7 +4,7 @@ CAscApplicationManagerWrapper - + Presenter View Pogled predstavitelja @@ -21,18 +21,18 @@ Vsa okna urejevalnika bodo zaprta. Ali želite nadaljevati? - - + + Document%1.docx Dokument%1.docx - + Book%1.xlsx Knjiga%1.xlsx - + Presentation%1.pptx Predstavitev%1.pptx @@ -40,8 +40,8 @@ CAscTabWidget - - + + Document Odpiranje... @@ -149,27 +149,27 @@ %1 je bil spremenjen.<br>Želite shraniti spremembe? - + Some data will lost.<br>Continue? Če želite nadaljevati s shranjevanjem v tem formatu, bodo izgubljene vse lastnosti, razen teksta.<br>Ste prepričani, da želite nadaljevati? - + Open main window Odpri glavno okno - + Document must be saved to continue.<br>Save the document? Dokument mora biti shranjen pred nadaljevanjem.<br>Želiš shraniti dokument? - + Print Document Natisni dokument - + Document must be saved firstly. Dokument mora biti najprej shranjen. @@ -177,7 +177,7 @@ CEditorWindowPrivate - + There are no printers available @@ -515,43 +515,43 @@ - - + + File format not supported. Format datoteke ni podprt. - + %1 doesn't exists!<br>Remove file from the list? %1 ni na voljo. Lahko je bil preimenovan, premaknjen ali izbrisan.<br>Ali želite, da ga izbrišemo iz seznama? - + Document must be saved firstly. Dokument mora biti najprej shranjen. - + Document must be saved to continue.<br>Save the document? Dokument mora biti shranjen pred nadaljevanjem.<br>Želiš shraniti dokument? - + There are no printers available - + Print Document Natisni dokument - + Sign Up Ustvari portal - + %1 is modified.<br>Do you want to keep changes? %1 je bil spremenjen.<br>Želite shraniti spremembe? @@ -590,22 +590,22 @@ CPrintProgress - + Document is printing: page %1 of %2 Tiskanje dokumenta: stran %1 od %2 - + Document is preparing Pripravljanje dokumenta - + &Cancel &Prekliči - + Printing... Tiskanje... @@ -614,147 +614,153 @@ CUpdateManager - - + + Last check performed - - - - - - - - - - + + + + + + + + + + - + + Check for updates - - - + + Unable to check update: URL not defined. + + + + + + To finish updating, restart app - - - + + + Restart - + Checking for updates... - + Updates are not allowed! - + This folder configuration does not allow for updates! The folder name should be: - + An error occurred while check updates: Update Service not found! - + Downloading new version %1 (%2%) - + An error occurred while loading updates: Update Service not found! - + Downloading new version %1 (0%) - - + + Cancel Prekliči - + An error occurred while loading updates: package Url is empty! - + Update package error: md5 sum does not match the original. - + Preparing update... - + An error occurred while unzip updates: Update Service not found! - + Update is available (version %1) - + Download update - - + + Current version is up to date - + Update is available - - + + Current version - - + + Update version - + Would you like to download update now? - + Update is ready to install - + Would you like to restart app now? @@ -788,12 +794,12 @@ - + Access to file '%1' is denied! - + Read only @@ -852,12 +858,12 @@ - + An error occurred while start install updates! - + An error occurred while start replacing files: Update Service not found! diff --git a/win-linux/langs/sv.ts b/win-linux/langs/sv.ts index 81130bb57..ca05dd730 100644 --- a/win-linux/langs/sv.ts +++ b/win-linux/langs/sv.ts @@ -4,7 +4,7 @@ CAscApplicationManagerWrapper - + Presenter View Presentationsvy @@ -21,18 +21,18 @@ Alla redigeringsfönster kommer att stängas. Vill du fortsätta? - - + + Document%1.docx Dokument%1.docx - + Book%1.xlsx Kalkylblad%1.xlsx - + Presentation%1.pptx Presentation%1.pptx @@ -40,8 +40,8 @@ CAscTabWidget - - + + Document Öppnar... @@ -149,27 +149,27 @@ %1 har ändrats.<br>Vill du spara ändringarna? - + Some data will lost.<br>Continue? Om du fortsätter med att spara i detta format så kommer alla funktioner utom texten att gå förlorade.<br>Är du säker på att du vill fortsätta? - + Open main window Öppna huvudfönster - + Document must be saved to continue.<br>Save the document? Dokumentet måste sparas för att fortsätta.<br>Spara dokument? - + Print Document Skriv ut dokument - + Document must be saved firstly. Dokumentet måste sparas först. @@ -177,7 +177,7 @@ CEditorWindowPrivate - + There are no printers available @@ -515,43 +515,43 @@ - - + + File format not supported. Filformatet stöds inte. - + %1 doesn't exists!<br>Remove file from the list? %1 är inte tillgänlig. Det är möjligt att filen har bytt namn, flyttats eller tagits bort.<br>Vill du ta bort filen från listan? - + Document must be saved firstly. Dokumentet måste sparas först. - + Document must be saved to continue.<br>Save the document? Dokumentet måste sparas för att fortsätta.<br>Spara dokument? - + There are no printers available - + Print Document Skriv ut dokument - + Sign Up Skapa portal - + %1 is modified.<br>Do you want to keep changes? %1 har ändrats.<br>Vill du spara ändringarna? @@ -590,22 +590,22 @@ CPrintProgress - + Document is printing: page %1 of %2 Skriver ut dokument: sida %1 av %2 - + Document is preparing Förbereder dokument - + &Cancel &Avbryt - + Printing... Skriver ut... @@ -614,147 +614,153 @@ CUpdateManager - - + + Last check performed - - - - - - - - - - + + + + + + + + + + - + + Check for updates - - - + + Unable to check update: URL not defined. + + + + + + To finish updating, restart app - - - + + + Restart - + Checking for updates... - + Updates are not allowed! - + This folder configuration does not allow for updates! The folder name should be: - + An error occurred while check updates: Update Service not found! - + Downloading new version %1 (%2%) - + An error occurred while loading updates: Update Service not found! - + Downloading new version %1 (0%) - - + + Cancel Avbryt - + An error occurred while loading updates: package Url is empty! - + Update package error: md5 sum does not match the original. - + Preparing update... - + An error occurred while unzip updates: Update Service not found! - + Update is available (version %1) - + Download update - - + + Current version is up to date - + Update is available - - + + Current version - - + + Update version - + Would you like to download update now? - + Update is ready to install - + Would you like to restart app now? @@ -784,12 +790,12 @@ - + Access to file '%1' is denied! - + Read only @@ -848,12 +854,12 @@ - + An error occurred while start install updates! - + An error occurred while start replacing files: Update Service not found! diff --git a/win-linux/langs/tr.ts b/win-linux/langs/tr.ts index 41f3d8473..f1bf11eba 100644 --- a/win-linux/langs/tr.ts +++ b/win-linux/langs/tr.ts @@ -4,7 +4,7 @@ CAscApplicationManagerWrapper - + Presenter View Sunucu Görünümü @@ -21,18 +21,18 @@ Tüm editor pencereleri kapatılacaktır. Devam etmek istiyor musunuz? - - + + Document%1.docx Belge%1.docx - + Book%1.xlsx Kitap%1.xlsx - + Presentation%1.pptx Sunum%1.pptx @@ -40,8 +40,8 @@ CAscTabWidget - - + + Document Açılıyor... @@ -149,27 +149,27 @@ %1 değiştirildi.<br>Değişiklikleri kaydetmek istiyor musunuz? - + Some data will lost.<br>Continue? Bu formatta kaydetmeye devam ederseniz, metin haricindeki tüm özellikler kaybedilecektir.<br>;Devam etmek istediğinize emin misiniz? - + Open main window Ana pencereyi aç - + Document must be saved to continue.<br>Save the document? Devam edebilmek için belgenin kaydedilmesi gerekli.<br>Belgeyi kaydet? - + Print Document Belgeyi yazdır - + Document must be saved firstly. Belge önce kaydedilmelidir. @@ -177,7 +177,7 @@ CEditorWindowPrivate - + There are no printers available @@ -515,43 +515,43 @@ - - + + File format not supported. Dosya format desteklenmiyor. - + %1 doesn't exists!<br>Remove file from the list? %1 mevcut değil. Yeniden isimlendirilmiş, taşınmış veya silimiş olabilir.<br>Dosyayı listeden kaldırmak istediğinize emin misiniz? - + Document must be saved firstly. Belge önce kaydedilmelidir. - + Document must be saved to continue.<br>Save the document? Devam edebilmek için belgenin kaydedilmesi gerekli.<br>Belgeyi kaydet? - + There are no printers available - + Print Document Belgeyi yazdır - + Sign Up Portal oluştur - + %1 is modified.<br>Do you want to keep changes? %1 değiştirildi.<br>Değişiklikleri kaydetmek istiyor musunuz? @@ -590,22 +590,22 @@ CPrintProgress - + Document is printing: page %1 of %2 Belge yazdırılıyor: sayfa %2’nin %1’i - + Document is preparing Belge hazırlanıyor - + &Cancel &İptal - + Printing... Yazdırılıyor... @@ -614,147 +614,153 @@ CUpdateManager - - + + Last check performed - - - - - - - - - - + + + + + + + + + + - + + Check for updates - - - + + Unable to check update: URL not defined. + + + + + + To finish updating, restart app - - - + + + Restart - + Checking for updates... - + Updates are not allowed! - + This folder configuration does not allow for updates! The folder name should be: - + An error occurred while check updates: Update Service not found! - + Downloading new version %1 (%2%) - + An error occurred while loading updates: Update Service not found! - + Downloading new version %1 (0%) - - + + Cancel İptal - + An error occurred while loading updates: package Url is empty! - + Update package error: md5 sum does not match the original. - + Preparing update... - + An error occurred while unzip updates: Update Service not found! - + Update is available (version %1) - + Download update - - + + Current version is up to date - + Update is available - - + + Current version - - + + Update version - + Would you like to download update now? - + Update is ready to install - + Would you like to restart app now? @@ -788,12 +794,12 @@ - + Access to file '%1' is denied! - + Read only @@ -852,12 +858,12 @@ - + An error occurred while start install updates! - + An error occurred while start replacing files: Update Service not found! diff --git a/win-linux/langs/uk.ts b/win-linux/langs/uk.ts index 2b78da7af..82dc6a7ab 100644 --- a/win-linux/langs/uk.ts +++ b/win-linux/langs/uk.ts @@ -4,7 +4,7 @@ CAscApplicationManagerWrapper - + Presenter View Режим доповідача @@ -21,18 +21,18 @@ Усі вікна редактора будуть закриті. Продовжити? - - + + Document%1.docx Документ%1.docx - + Book%1.xlsx Книга%1.xlsx - + Presentation%1.pptx Презентація%1.pptx @@ -40,8 +40,8 @@ CAscTabWidget - - + + Document Відкриття... @@ -149,27 +149,27 @@ %1 змінено.<br>Зберегти зміни? - + Some data will lost.<br>Continue? Якщо продовжити зберігання в цьому форматі, усі функції, крім тексту, буде втрачено.<br>Продовжити? - + Open main window Відкрити головне вікно - + Document must be saved to continue.<br>Save the document? Щоб продовжити, потрібно зберегти документ.<br>Зберегти документ? - + Print Document Друк документа - + Document must be saved firstly. You must save the document first. @@ -177,7 +177,7 @@ CEditorWindowPrivate - + There are no printers available @@ -515,43 +515,43 @@ - - + + File format not supported. Формат файлу не підтримується. - + %1 doesn't exists!<br>Remove file from the list? Файл %1 недоступний. Він може бути перейменований, переміщений або видалений.<br>Видалити цей файл зі списку? - + Document must be saved firstly. You must save the document first. - + Document must be saved to continue.<br>Save the document? Щоб продовжити, потрібно зберегти документ.<br>Зберегти документ? - + There are no printers available - + Print Document Друк документа - + Sign Up Створити портал - + %1 is modified.<br>Do you want to keep changes? %1 змінено.<br>Зберегти зміни? @@ -590,22 +590,22 @@ CPrintProgress - + Document is printing: page %1 of %2 Друк документа: сторінка %1 з %2 - + Document is preparing Підготовка документа - + &Cancel &Відмінити - + Printing... Друк... @@ -614,147 +614,153 @@ CUpdateManager - - + + Last check performed - - - - - - - - - - + + + + + + + + + + - + + Check for updates - - - + + Unable to check update: URL not defined. + + + + + + To finish updating, restart app - - - + + + Restart - + Checking for updates... - + Updates are not allowed! - + This folder configuration does not allow for updates! The folder name should be: - + An error occurred while check updates: Update Service not found! - + Downloading new version %1 (%2%) - + An error occurred while loading updates: Update Service not found! - + Downloading new version %1 (0%) - - + + Cancel Відмінити - + An error occurred while loading updates: package Url is empty! - + Update package error: md5 sum does not match the original. - + Preparing update... - + An error occurred while unzip updates: Update Service not found! - + Update is available (version %1) - + Download update - - + + Current version is up to date - + Update is available - - + + Current version - - + + Update version - + Would you like to download update now? - + Update is ready to install - + Would you like to restart app now? @@ -788,12 +794,12 @@ - + Access to file '%1' is denied! - + Read only @@ -852,12 +858,12 @@ - + An error occurred while start install updates! - + An error occurred while start replacing files: Update Service not found! diff --git a/win-linux/langs/vi.ts b/win-linux/langs/vi.ts index 9b7676a26..f66e1e187 100644 --- a/win-linux/langs/vi.ts +++ b/win-linux/langs/vi.ts @@ -4,7 +4,7 @@ CAscApplicationManagerWrapper - + Presenter View Chế độ xem của người thuyết trình @@ -21,18 +21,18 @@ Tất cả màn hình chỉnh sửa sẽ được đóng. Bạn có muốn tiếp tục không? - - + + Document%1.docx Document%1.docx - + Book%1.xlsx Book%1.xlsx - + Presentation%1.pptx Presentation%1.pptx @@ -40,8 +40,8 @@ CAscTabWidget - - + + Document Đang mở... @@ -149,27 +149,27 @@ %1 đã được chỉnh sửa.<br>Bạn có muốn lưu thay đổi không? - + Some data will lost.<br>Continue? Nếu bạn tiếp tục lưu theo định dạng này, tất cả các tính năng ngoại trừ văn bản sẽ bị mất đi.<br>Bạn có chắc muốn tiếp tục không? - + Open main window Mở cửa sổ chính - + Document must be saved to continue.<br>Save the document? Phải lưu tài liệu để tiếp tục.<br>Lưu tài liệu? - + Print Document In tài liệu - + Document must be saved firstly. Cần lưu tài liệu trước. @@ -177,7 +177,7 @@ CEditorWindowPrivate - + There are no printers available @@ -515,43 +515,43 @@ - - + + File format not supported. Định dạng tập tin không được hỗ trợ. - + %1 doesn't exists!<br>Remove file from the list? Không có %1. Có thể nó đã được đổi tên, chuyển đi hay xóa.<br>Bạn có muốn xóa tập tin này khỏi danh sách không? - + Document must be saved firstly. Cần lưu tài liệu trước. - + Document must be saved to continue.<br>Save the document? Phải lưu tài liệu để tiếp tục.<br>Lưu tài liệu? - + There are no printers available - + Print Document In tài liệu - + Sign Up Tạo cổng - + %1 is modified.<br>Do you want to keep changes? %1 đã được chỉnh sửa.<br>Bạn có muốn lưu thay đổi không?? @@ -590,22 +590,22 @@ CPrintProgress - + Document is printing: page %1 of %2 Đang in tài liệu: trang %1 trên %2 - + Document is preparing Đang chuẩn bị tài liệu - + &Cancel &Hủy - + Printing... Đang in... @@ -614,147 +614,153 @@ CUpdateManager - - + + Last check performed - - - - - - - - - - + + + + + + + + + + - + + Check for updates - - - + + Unable to check update: URL not defined. + + + + + + To finish updating, restart app - - - + + + Restart - + Checking for updates... - + Updates are not allowed! - + This folder configuration does not allow for updates! The folder name should be: - + An error occurred while check updates: Update Service not found! - + Downloading new version %1 (%2%) - + An error occurred while loading updates: Update Service not found! - + Downloading new version %1 (0%) - - + + Cancel Hủy - + An error occurred while loading updates: package Url is empty! - + Update package error: md5 sum does not match the original. - + Preparing update... - + An error occurred while unzip updates: Update Service not found! - + Update is available (version %1) - + Download update - - + + Current version is up to date - + Update is available - - + + Current version - - + + Update version - + Would you like to download update now? - + Update is ready to install - + Would you like to restart app now? @@ -788,12 +794,12 @@ - + Access to file '%1' is denied! - + Read only @@ -852,12 +858,12 @@ - + An error occurred while start install updates! - + An error occurred while start replacing files: Update Service not found! diff --git a/win-linux/langs/zh_CN.qm b/win-linux/langs/zh_CN.qm index 30364d1387028fd5b2766a9010fda3d3ccdd98d8..2f4195ef98e510157207eb3cf867074ca52d74f5 100644 GIT binary patch delta 4621 zcmb7H3vg3q7Cve7ZgN9QA1SuY-(ue-rA1UKBDF>AOq&#WCiix3l9tA` zS6p1Ipe@EaxQf&r6;K$_>iWP{+=bPZRTmr`bw{`AGK)IGiagd)>7GCDFs+Yan3LYz z|NFoHJKs6y&&$h?J4Xv8`5pkpH2|_BkyvvQV>>|2>j2$<0WhBcdCSWH%Bn~#C<4VF z0G}H`b@)jDRS>e4jR9!RLQBrO02!abCQCQIe{&=jc;V4~9{^--fFrxk0nE*Y4<8r@ zxO}y&_RWW20hFDSwJPQUl&q4up3MZPdP8>0p%Vaxw`AMS*8&sHW{v1I%-6 ze16mtJi;s2Kgag2(6OaF~xwkVz+F(J+&#lZ`>UzJPo z`uq2T1lr#yKKf7qxNNUda}hV3cTAbJ{u6-8CCZiWHUSu4Qm&Kb095Z)+P>xio}N5Lm99Xj}`xTvSfphR?HGm6IWiIcC+>bDshrGL^G%81c2L zd)^+x=l@eZ-mzQ4bjejG-$3G}`_;L%&8Xk7+SK?lK*3pcRp4ek*^v6?;O&^+o7A_j zM}^8-)Z6achzme{WS<7p+pm6O&tcT}BlSN|VLG#d>K}~bh-c7TQSuEcv`=IGo){9s2ZhT=$@MN6Ulw{Wsd(cT)v-Y7hMVT~zRH?F4!ZOh>iP zJ&y0q{$Bgyag2GT+Q}Cd0i>_VSbXI{WM*EFvCO6b$nVX#VNNA7wnbv)A2V7#8kA~R zhO_8#T<}STQ>a7Wb0HxuSIU1#H(Q3nRw}t@Bz$T9f{coBhl!M#5vD1MWy(C{>PDM z-pLdl!M}6gV+dWx>}SX_jI*kvagP1Mj->u&<;(o1_-ysWmi+jDe=F)xxHyk zNXjk^9m|*R8n2PzT04qe!hlgVQZh4rJBE6>kH93aA1z z_@E!0P?<=Ib=7jx;$@v2si-ph`kj?DDWNK(Sgo6ucXl$>*rpS=8b6j_uI;SuxNGc` z<#+Sb;`pZs^}k9Wy@- z7K05$Si((ieR1t=?JGxr7~a(38~bX?6bHSgO%OTacd?8%pG;AhNobd8ffTb!+zgpb;iUJV8={F%&2HilOl&O{ApVOZ zuE*;eZ(&iYUL!f&_$Czq%1BAT`*-!1(uAFTet(12|A(_>cah{6zcJFqPLJ{VStbM zk>>_t97$;%sVJ>4txSUF+Sr6%bEbu#9|xD{*fISW`uv%}wH9q}F--`NxC%L~tj`}U z;yzBqYXQIbQ9e-V`qB35R&)L|K`&cnielz4UoXYKQatFF%KuU)iVYLj@2zN2yL^OVGtEb_QZKltAb_gWfg2aAJtbh$92J%Y!A}KPFkQm~>&^j4t9?FGqYXA>eTk8`nTpk)~}MMZ=rcZL`e^ zQ_^j{5If(7djl20j141kN~SJ>^tgGq&lRZ~l&gl|5T$1)Y+v6@=T}-!N3Dx}i#lL- zw9VoH*?!jTp|^vX7H3BmPpK20ozlc9#Ts@p5~+xm6x#I?rzZ7nBc-(d3^l~B>W03U z(pgViPOKZg<47EPPJ$)9whYqRa`Sjvk7p*bgn~vIZgeDh!2t`g>FTYEwztif67#ho ziXQ8#;px;sypDy$7x3a}jON(O`t7dpI21&;)6KJ;;@m?`)r6h9R{$(m8<&^gmSXRht|&_`Qe89POc zv;&fST7^jyv8d5*=X^d&u!mj|%1i6YX?JySygPb$RY$w+CeH2;-vH#oA@4PD(bSE0 zzq_B_kw?i2sf=Eb#!lLnmjff!y`Uriz>QB&y?Lpl}kNU>J3avlJ&+P z-xM3LhqZ@CDvJJ7SFsd2>flkU@2+{4zPOC4>jQ(tA`FBMmt=+}Nm-tJ=s!bW#lKcJ z3B2FU2e{BV@|Y>8?_yF4U*8g`azcOVh!exb#Kl`1hf XXRT>#B{xvh;GKM<*Hal9oooI-OTRe) delta 958 zcmXYwc}Ns-6vw}_bL`F@v%9*x?z--1mfCiz1z|;YS#8**1xeY45o&}%Scn^KMFo-6 z=AapNP!ytALX%W_UK_ z1TbwHSND zr0C~I9;ydSNBJ3+bF}_AU;0u+80Jd8acVcsAi$sA8&3yZ;oBb{pu(H@7f;s#?pi?{ zpaSvv!jgwG0Ou*8;ByHHMTFv#aTLE7N?J)YCPS!sw}SR_f;uga1j~f3ZIq81B6KOl zXjWh7+eM94>nrbUrnp1ju&6FfL*xvuu`_7`y9^^Xgvju_AymGD3Vt(GRF{z{3~h}f z<;RQT6Tea?jbiR^3GiJND@yMJj?-e*nG--MapeH9-QoZrAr=|! zE*bFj8fyXv=`v(v-JW@ao%xNboy@)8jAt9(0`_~xuJaiHyVNxK0u_pHF=Z9-fGgiL zE7nf}1sZ*RQ}$XCi!L=4$_=#sl@erKVOPW)&5*xqn0aD3d2zYs+A{KH!se!BXQuiQCID!xHCZVyS@b*pLI zqQ=<$Qq{-TG?$2Uql=y>d)R6{dVBB>v7YT@=_Xr>=@*$xUvT92ELgrN6G=!@pK*SZ zveL;Zb8W?Hzpaj?z@s{xw-`0W{Y$5;@$OavaqCr`ua#2jd j!zU_bqpOvjV=^h1OmVWZJI$gzNG(tc(*&K;JkIwQ9Bl3# diff --git a/win-linux/langs/zh_CN.ts b/win-linux/langs/zh_CN.ts index 2ddf5770a..4d82447dc 100644 --- a/win-linux/langs/zh_CN.ts +++ b/win-linux/langs/zh_CN.ts @@ -4,7 +4,7 @@ CAscApplicationManagerWrapper - + Presenter View 演示者视图 @@ -21,18 +21,18 @@ 所有编辑器窗口都将关闭。 你想继续吗? - - + + Document%1.docx 文档%1.docx - + Book%1.xlsx 工作簿%1.xlsx - + Presentation%1.pptx 演示文稿%1.pptx @@ -56,8 +56,8 @@ CAscTabWidget - - + + Document 打开中... @@ -160,22 +160,22 @@ CEditorWindow - + Open main window 打开主要窗口 - + Document must be saved to continue.<br>Save the document? 文档必须先保存才能继续。<br>是否保存文档? - + Print Document 打印文件 - + Document must be saved firstly. 必须先保存文档。 @@ -185,7 +185,7 @@ %1已被修改。<br>您要保存更改吗? - + Some data will lost.<br>Continue? 如果您继续以此格式保存,除文本之外的所有功能将丢失。<br>您确定要继续吗? @@ -193,7 +193,7 @@ CEditorWindowPrivate - + There are no printers available 无可用的打印机 @@ -535,43 +535,43 @@ 别再问了。 - - + + File format not supported. 不支持该文件格式。 - + %1 doesn't exists!<br>Remove file from the list? %1不可用。它可能被重命名、移动或删除。<br>您要从列表中删除该文件吗? - + Document must be saved firstly. 必须先保存文档。 - + Document must be saved to continue.<br>Save the document? 文档必须先保存才能继续。<br>是否保存文档? - + There are no printers available 无可用的打印机 - + Print Document 打印文件 - + Sign Up 创建门户 - + %1 is modified.<br>Do you want to keep changes? %1已被修改。<br>您要保存更改吗? @@ -614,22 +614,22 @@ CPrintProgress - + Document is printing: page %1 of %2 正在打印文档:第%1页,共%2页 - + Document is preparing 准备文件中 - + &Cancel &取消 - + Printing... 打印中… @@ -638,161 +638,167 @@ CUpdateManager - - + + Last check performed 上次检查 - - - - - - - - - - + + + + + + + + + + - + + Check for updates 检查更新 - - - + + Unable to check update: URL not defined. + + + + + + To finish updating, restart app 要完成更新,请重新启动应用程序 - - - + + + Restart 重新启动 - + Checking for updates... 检查更新... - + Updates are not allowed! 不允许更新! - + This folder configuration does not allow for updates! The folder name should be: 此文件夹配置不允许更新!文件夹名称应为: - + An error occurred while check updates: Update Service not found! 检查更新时发生错误: 未找到更新服务! - + Downloading new version %1 (%2%) 下载新版本 %1 (%2%) - + An error occurred while loading updates: Update Service not found! 加载更新时发生错误: 未找到更新服务! - + Downloading new version %1 (0%) 下载新版本 %1 (0%) - - + + Cancel 取消 - + An error occurred while loading updates: package Url is empty! 加载更新时发生错误:软件包 Url 为空! - + Update package error: md5 sum does not match the original. 更新软件包错误:md5 不匹配。 - + Preparing update... 准备更新... - + An error occurred while unzip updates: Update Service not found! 解压更新时发生错误: 未找到更新服务! - + Update is available (version %1) 可更新(版本 %1) - + Download update 下载更新 - - + + Current version is up to date 当前版本已更新 - + Update is available 可更新 - - + + Current version 当前版本 - - + + Update version 更新版本 - + Would you like to download update now? 现在要下载更新吗? - + Update is ready to install 更新已准备就绪,可以安装 - + Would you like to restart app now? 现在要重启应用程序吗? A new version of %1 is available! - %1 的新版本现已发布! + %1 的新版本现已发布! %1 %2 is now available (you have %3). Would you like to download it now? - %1 %2 现已可用(您使用的是 %3)。您是否要立即下载新版本? + %1 %2 现已可用(您使用的是 %3)。您是否要立即下载新版本? %1 %2 is now downloaded (you have %3). Would you like to install it now? - %1 %2 已经下载完成(您使用的是 %3)。您是否要立即安装新版本? + %1 %2 已经下载完成(您使用的是 %3)。您是否要立即安装新版本? @@ -828,12 +834,12 @@ - + Access to file '%1' is denied! 拒绝访问‘%1’文件! - + Read only 只读 @@ -896,28 +902,24 @@ 产品发布新闻 - - An error occurred while check updates: Update Service not found! - 检查更新时发生错误: 未找到更新服务! + 检查更新时发生错误: 未找到更新服务! - An error occurred while loading updates: Update Service not found! - 加载更新时发生错误: 未找到更新服务! + 加载更新时发生错误: 未找到更新服务! - An error occurred while unzip updates: Update Service not found! - 解压更新时发生错误: 未找到更新服务! + 解压更新时发生错误: 未找到更新服务! - + An error occurred while start install updates! 开始安装更新时发生错误! - + An error occurred while start replacing files: Update Service not found! 开始替换文件时发生错误: 未找到更新服务! @@ -968,9 +970,8 @@ 打开门户网站时发生错误: <br>%1 - App can't working correctly under admin rights. - 应用程序在管理员权限下无法正常运行。 + 应用程序在管理员权限下无法正常运行。 &OK diff --git a/win-linux/langs/zh_TW.ts b/win-linux/langs/zh_TW.ts index 74699f943..8086d38bc 100644 --- a/win-linux/langs/zh_TW.ts +++ b/win-linux/langs/zh_TW.ts @@ -4,7 +4,7 @@ CAscApplicationManagerWrapper - + Presenter View 簡報者檢視畫面 @@ -21,18 +21,18 @@ 所有編輯器視窗將會關閉。您要繼續嗎? - - + + Document%1.docx 文件%1.docx - + Book%1.xlsx 書%1.xlsx - + Presentation%1.pptx 簡報%1.pptx @@ -56,8 +56,8 @@ CAscTabWidget - - + + Document 開啟中... @@ -165,27 +165,27 @@ %1 已經被修改。<br>您要儲存變更嗎? - + Some data will lost.<br>Continue? 如您繼續以此格式儲存,除了文字以外的所有功能都將會遺失。<br>您確定要繼續嗎? - + Open main window 開啟主視窗 - + Document must be saved to continue.<br>Save the document? 必須先儲存文件才能繼續。<br>儲存文件? - + Print Document 列印文件 - + Document must be saved firstly. 必須先儲存文件。 @@ -193,7 +193,7 @@ CEditorWindowPrivate - + There are no printers available 沒有可用的印表機 @@ -531,43 +531,43 @@ - - + + File format not supported. 不支援檔案格式。 - + %1 doesn't exists!<br>Remove file from the list? %1 無法使用。它可能已被重新命名、移動或刪除。<br>您要從清單中移除檔案嗎? - + Document must be saved firstly. 文件必須先完成儲存。 - + Document must be saved to continue.<br>Save the document? 必須先儲存文件才能繼續。<br>儲存文件? - + There are no printers available 沒有可用的印表機 - + Print Document 列印文件 - + Sign Up 建立入口 - + %1 is modified.<br>Do you want to keep changes? %1 已經被修改。<br>您要儲存變更嗎? @@ -610,22 +610,22 @@ CPrintProgress - + Document is printing: page %1 of %2 文件列印中:第 %1 頁,共 %2 頁 - + Document is preparing 文件準備中 - + &Cancel &取消 - + Printing... 列印中... @@ -634,147 +634,153 @@ CUpdateManager - - + + Last check performed - - - - - - - - - - + + + + + + + + + + - + + Check for updates - - - + + Unable to check update: URL not defined. + + + + + + To finish updating, restart app - - - + + + Restart - + Checking for updates... - + Updates are not allowed! - + This folder configuration does not allow for updates! The folder name should be: - + An error occurred while check updates: Update Service not found! - + Downloading new version %1 (%2%) - + An error occurred while loading updates: Update Service not found! - + Downloading new version %1 (0%) - - + + Cancel 取消 - + An error occurred while loading updates: package Url is empty! - + Update package error: md5 sum does not match the original. - + Preparing update... - + An error occurred while unzip updates: Update Service not found! - + Update is available (version %1) - + Download update 下載更新 - - + + Current version is up to date - + Update is available - - + + Current version - - + + Update version - + Would you like to download update now? - + Update is ready to install - + Would you like to restart app now? @@ -824,12 +830,12 @@ - + Access to file '%1' is denied! - + Read only 只讀 @@ -892,12 +898,12 @@ 發行說明 - + An error occurred while start install updates! - + An error occurred while start replacing files: Update Service not found! From 774c80bcfc773f6f8d518b5a77f3d0d597081de7 Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Fri, 29 Sep 2023 14:34:24 +0300 Subject: [PATCH 262/298] [win-nix] for bug 64388 --- win-linux/src/cascapplicationmanagerwrapper_private.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/win-linux/src/cascapplicationmanagerwrapper_private.h b/win-linux/src/cascapplicationmanagerwrapper_private.h index 779332077..12c7fd1e7 100644 --- a/win-linux/src/cascapplicationmanagerwrapper_private.h +++ b/win-linux/src/cascapplicationmanagerwrapper_private.h @@ -239,9 +239,10 @@ class CAscApplicationManagerWrapper_Private } else if ( cmd.compare(L"create:new") == 0 ) { const std::wstring & format = data.get_Param(); + const std::wstring search_tpl = L"template:"; - if ( format.rfind(L"template:", 0) == 0 ) { - std::wstring type = format.substr(format.size() - 4); + if ( format.rfind(search_tpl, 0) == 0 ) { + std::wstring type = format.substr(search_tpl.length()); std::wstring file_path = CEditorTools::getlocaltemplate(type, event.m_nSenderId).toStdWString(); if ( !file_path.empty() ) { From fc5f9bba7ce0a47b3ac5528f2769c58b671792f3 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Fri, 29 Sep 2023 18:47:02 +0300 Subject: [PATCH 263/298] [win-linux] Fix update initialization --- .../src/cascapplicationmanagerwrapper.cpp | 47 +++++++++---------- win-linux/src/cascapplicationmanagerwrapper.h | 2 +- 2 files changed, 24 insertions(+), 25 deletions(-) diff --git a/win-linux/src/cascapplicationmanagerwrapper.cpp b/win-linux/src/cascapplicationmanagerwrapper.cpp index 39b640d87..c7e68a906 100644 --- a/win-linux/src/cascapplicationmanagerwrapper.cpp +++ b/win-linux/src/cascapplicationmanagerwrapper.cpp @@ -79,10 +79,6 @@ CAscApplicationManagerWrapper::CAscApplicationManagerWrapper(CAscApplicationMana m_queueToClose->setcallback(callback_); m_themes = std::make_shared(); - -#ifdef _UPDMODULE - m_pUpdateManager = new CUpdateManager(this); -#endif } CAscApplicationManagerWrapper::~CAscApplicationManagerWrapper() @@ -113,7 +109,8 @@ CAscApplicationManagerWrapper::~CAscApplicationManagerWrapper() } #if defined (_UPDMODULE) // Start update installation - m_pUpdateManager->handleAppClose(); + if (m_pUpdateManager) + m_pUpdateManager->handleAppClose(); #endif // m_vecEditors.clear(); } @@ -294,20 +291,22 @@ bool CAscApplicationManagerWrapper::processCommonEvent(NSEditorApi::CAscCefMenuE } else #ifdef _UPDMODULE if ( !(cmd.find(L"updates:action") == std::wstring::npos) ) { // params: check, download, install, abort - const QString params = QString::fromStdWString(pData->get_Param()); - if (params == "check") { - m_pUpdateManager->checkUpdates(true); - } else - if (params == "download") { - m_pUpdateManager->loadUpdates(); - } else - if (params == "install") { - m_pUpdateManager->installUpdates(); - } else - if (params == "abort") { - m_pUpdateManager->cancelLoading(); + if (m_pUpdateManager) { + const QString params = QString::fromStdWString(pData->get_Param()); + if (params == "check") { + m_pUpdateManager->checkUpdates(true); + } else + if (params == "download") { + m_pUpdateManager->loadUpdates(); + } else + if (params == "install") { + m_pUpdateManager->installUpdates(); + } else + if (params == "abort") { + m_pUpdateManager->cancelLoading(); + } + return true; } - return true; } else #endif if ( cmd.compare(L"title:button") == 0 ) { @@ -921,16 +920,15 @@ void CAscApplicationManagerWrapper::handleInputCmd(const std::vector& v void CAscApplicationManagerWrapper::onDocumentReady(int uid) { #ifdef _UPDMODULE + if (!m_pUpdateManager) { + m_pUpdateManager = new CUpdateManager(this); + m_pUpdateManager->launchIntervalStartTimer(); + } if (uid < 0) { QTimer::singleShot(50, this, [=]() { m_pUpdateManager->refreshStartPage(); }); } - static bool lock = false; - if (!lock) { - lock = true; - m_pUpdateManager->launchIntervalStartTimer(); - } #endif } @@ -1658,7 +1656,8 @@ bool CAscApplicationManagerWrapper::applySettings(const wstring& wstrjson) } #ifdef _UPDMODULE if ( objRoot.contains("autoupdatemode") ) { - m_pUpdateManager->setNewUpdateSetting(objRoot["autoupdatemode"].toString()); + if (m_pUpdateManager) + m_pUpdateManager->setNewUpdateSetting(objRoot["autoupdatemode"].toString()); } #endif } else { diff --git a/win-linux/src/cascapplicationmanagerwrapper.h b/win-linux/src/cascapplicationmanagerwrapper.h index 0e6f04b8d..3e6fa2788 100644 --- a/win-linux/src/cascapplicationmanagerwrapper.h +++ b/win-linux/src/cascapplicationmanagerwrapper.h @@ -215,7 +215,7 @@ private slots: CAscApplicationManagerWrapper(CAscApplicationManagerWrapper_Private *); #ifdef _UPDMODULE - CUpdateManager *m_pUpdateManager; + CUpdateManager *m_pUpdateManager = nullptr; #endif }; From a5b208eeda7537f47fc904180ce744360da5a22c Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Tue, 3 Oct 2023 06:46:52 +0300 Subject: [PATCH 264/298] [win-linux] fix language switching on the start page --- .../update-daemon/src/classes/csvcmanager.cpp | 13 +- .../src/cascapplicationmanagerwrapper.cpp | 4 + win-linux/src/cupdatemanager.cpp | 119 ++++++++++++------ win-linux/src/cupdatemanager.h | 17 ++- 4 files changed, 106 insertions(+), 47 deletions(-) diff --git a/win-linux/extras/update-daemon/src/classes/csvcmanager.cpp b/win-linux/extras/update-daemon/src/classes/csvcmanager.cpp index df77bb364..b6d751e54 100644 --- a/win-linux/extras/update-daemon/src/classes/csvcmanager.cpp +++ b/win-linux/extras/update-daemon/src/classes/csvcmanager.cpp @@ -278,8 +278,7 @@ void CSvcManager::onCompleteUnzip(const int error) } else if (error == UNZIP_ERROR) { - tstring error(_T("An error occured while unpacking the archive")); - if (!m_socket->sendMessage(MSG_OtherError, error)) + if (!m_socket->sendMessage(MSG_OtherError, _T("SVC_TXT_ERR_UNPACKING"))) NS_Logger::WriteLog(DEFAULT_ERROR_MESSAGE); } else @@ -307,18 +306,18 @@ void CSvcManager::onCompleteSlot(const int error, const tstring &filePath) // Pause or Stop } else if (error == -1) { - m_socket->sendMessage(MSG_OtherError, _T("Update download failed: out of memory!")); + m_socket->sendMessage(MSG_OtherError, _T("SVC_TXT_ERR_DNL_OUT_MEM")); } else if (error == -2) { - m_socket->sendMessage(MSG_OtherError, _T("Update download failed: server connection error!")); + m_socket->sendMessage(MSG_OtherError, _T("SVC_TXT_ERR_DNL_CONN")); } else if (error == -3) { - m_socket->sendMessage(MSG_OtherError, _T("Update download failed: wrong URL!")); + m_socket->sendMessage(MSG_OtherError, _T("SVC_TXT_ERR_DNL_URL")); } else if (error == -4) { - m_socket->sendMessage(MSG_OtherError, _T("Update download failed: unable to create file!")); + m_socket->sendMessage(MSG_OtherError, _T("SVC_TXT_ERR_DNL_CREAT")); } else { - m_socket->sendMessage(MSG_OtherError, _T("Update download failed: network error!")); + m_socket->sendMessage(MSG_OtherError, _T("SVC_TXT_ERR_DNL_INET")); } } diff --git a/win-linux/src/cascapplicationmanagerwrapper.cpp b/win-linux/src/cascapplicationmanagerwrapper.cpp index c7e68a906..23cf84d98 100644 --- a/win-linux/src/cascapplicationmanagerwrapper.cpp +++ b/win-linux/src/cascapplicationmanagerwrapper.cpp @@ -1610,6 +1610,10 @@ bool CAscApplicationManagerWrapper::applySettings(const wstring& wstrjson) _reg_user.setValue("locale", _lang_id); CLangater::reloadTranslations(_lang_id); +#ifdef _UPDMODULE + if (m_pUpdateManager) + m_pUpdateManager->refreshStartPage(); +#endif } } diff --git a/win-linux/src/cupdatemanager.cpp b/win-linux/src/cupdatemanager.cpp index d1219a0e5..0cd1f65c5 100644 --- a/win-linux/src/cupdatemanager.cpp +++ b/win-linux/src/cupdatemanager.cpp @@ -74,6 +74,35 @@ using std::vector; +const char *SVC_TXT_ERR_UNPACKING = QT_TRANSLATE_NOOP("CUpdateManager", "An error occured while unpacking the archive"), + *SVC_TXT_ERR_DNL_OUT_MEM = QT_TRANSLATE_NOOP("CUpdateManager", "Update download failed: out of memory!"), + *SVC_TXT_ERR_DNL_CONN = QT_TRANSLATE_NOOP("CUpdateManager", "Update download failed: server connection error!"), + *SVC_TXT_ERR_DNL_URL = QT_TRANSLATE_NOOP("CUpdateManager", "Update download failed: wrong URL!"), + *SVC_TXT_ERR_DNL_CREAT = QT_TRANSLATE_NOOP("CUpdateManager", "Update download failed: unable to create file!"), + *SVC_TXT_ERR_DNL_INET = QT_TRANSLATE_NOOP("CUpdateManager", "Update download failed: network error!"), + *SVC_TXT_ERR_OTHER = QT_TRANSLATE_NOOP("CUpdateManager", "A service error has occurred!"), + + *TXT_LAST_CHECK = QT_TRANSLATE_NOOP("CUpdateManager", "Last check performed %1"), + *TXT_UPDATED = QT_TRANSLATE_NOOP("CUpdateManager", "Current version is up to date"), + *TXT_CHECKING_UPD = QT_TRANSLATE_NOOP("CUpdateManager", "Checking for updates..."), + *TXT_AVAILABLE_UPD = QT_TRANSLATE_NOOP("CUpdateManager", "Update is available (version %1)"), + *TXT_DOWNLOADING_UPD = QT_TRANSLATE_NOOP("CUpdateManager", "Downloading new version %1 (%2%)"), + *TXT_PREPARING_UPD = QT_TRANSLATE_NOOP("CUpdateManager", "Preparing update..."), + *TXT_RESTART_TO_UPD = QT_TRANSLATE_NOOP("CUpdateManager", "To finish updating, restart app"), + *TXT_ERR_NOT_ALLOWED = QT_TRANSLATE_NOOP("CUpdateManager", "Updates are not allowed!"), + *TXT_ERR_URL = QT_TRANSLATE_NOOP("CUpdateManager", "Unable to check update: URL not defined."), + *TXT_ERR_PACK_URL = QT_TRANSLATE_NOOP("CUpdateManager", "An error occurred while loading updates: package Url is empty!"), + *TXT_ERR_CHECK = QT_TRANSLATE_NOOP("CUpdateManager", "An error occurred while check updates: Update Service not found!"), + *TXT_ERR_LOAD = QT_TRANSLATE_NOOP("CUpdateManager", "An error occurred while loading updates: Update Service not found!"), + *TXT_ERR_UNZIP = QT_TRANSLATE_NOOP("CUpdateManager", "An error occurred while unzip updates: Update Service not found!"), + *TXT_ERR_JSON = QT_TRANSLATE_NOOP("CUpdateManager", "Error opening JSON file."), + *TXT_ERR_MD5 = QT_TRANSLATE_NOOP("CUpdateManager", "Update package error: md5 sum does not match the original."), + + *BTN_TXT_CHECK = QT_TRANSLATE_NOOP("CUpdateManager", "Check for updates"), + *BTN_TXT_DOWNLOAD = QT_TRANSLATE_NOOP("CUpdateManager", "Download update"), + *BTN_TXT_RESTART = QT_TRANSLATE_NOOP("CUpdateManager", "Restart"), + *BTN_TXT_CANCEL = QT_TRANSLATE_NOOP("CUpdateManager", "Cancel"); + class CUpdateManager::DialogSchedule : public QObject { Q_OBJECT @@ -111,7 +140,7 @@ CUpdateManager::DialogSchedule::DialogSchedule(QObject *owner) : m_shedule_vec.removeFirst(); if (m_shedule_vec.isEmpty()) { m_timer->stop(); - qobject_cast(owner)->refreshStartPage({"", "", "", "", "false"}); + qobject_cast(owner)->refreshStartPage({"", {}, nullptr, "", "false"}); } } }); @@ -122,7 +151,7 @@ void CUpdateManager::DialogSchedule::addToSchedule(const QString &method, const m_shedule_vec.push_back({method, text}); if (!m_timer->isActive()) { m_timer->start(); - qobject_cast(m_owner)->refreshStartPage({"", "", "", "", "true"}); + qobject_cast(m_owner)->refreshStartPage({"", {}, nullptr, "", "true"}); } } @@ -252,14 +281,14 @@ CUpdateManager::CUpdateManager(QObject *parent): m_pLastCheckMsgTimer->setSingleShot(true); m_pLastCheckMsgTimer->setInterval(RESET_MESSAGE_MS); connect(m_pLastCheckMsgTimer, &QTimer::timeout, this, [=]() { - refreshStartPage({"lastcheck", tr("Last check performed ") + formattedTime(m_lastCheck)}); + refreshStartPage({"lastcheck", {TXT_LAST_CHECK, formattedTime(m_lastCheck)}}); }); if (IsPackage(Portable)) runProcess(QStrToTStr(qApp->applicationDirPath()) + DAEMON_NAME, _T("--run-as-app")); init(); } else { CLogger::log("Updates is off, URL is empty."); - refreshStartPage({"error", tr("Unable to check update: URL not defined."), tr("Check for updates"), "", "true"}); + refreshStartPage({"error", {TXT_ERR_URL}, BTN_TXT_CHECK, "", "true"}); } } @@ -284,8 +313,7 @@ void CUpdateManager::init() m_savedPackageData->fileType = reg_user.value("type", QString()).toString(); m_savedPackageData->version = reg_user.value("version", QString()).toString(); m_lastCheck = time_t(reg_user.value("last_check", 0).toLongLong()); - refreshStartPage({"lastcheck", tr("Last check performed ") + formattedTime(m_lastCheck), - tr("Check for updates"), "check", "false"}); + refreshStartPage({"lastcheck", {TXT_LAST_CHECK, formattedTime(m_lastCheck)}, BTN_TXT_CHECK, "check", "false"}); m_interval = reg_user.value("interval", DAY_TO_SEC).toInt(); if (m_interval < MINIMUM_INTERVAL) m_interval = MINIMUM_INTERVAL; @@ -304,7 +332,7 @@ void CUpdateManager::init() break; case MSG_ShowStartInstallMessage: { - refreshStartPage({"success", tr("To finish updating, restart app"), tr("Restart"), "install", "false"}); + refreshStartPage({"success", {TXT_RESTART_TO_UPD}, BTN_TXT_RESTART, "install", "false"}); QMetaObject::invokeMethod(m_dialogSchedule, "addToSchedule", Qt::QueuedConnection, Q_ARG(QString, QString("showStartInstallMessage"))); break; } @@ -364,13 +392,13 @@ void CUpdateManager::checkUpdates(bool manualCheck) __GLOBAL_LOCK - refreshStartPage({"load", tr("Checking for updates..."), tr("Check for updates"), "check", "true"}); + refreshStartPage({"load", {TXT_CHECKING_UPD}, BTN_TXT_CHECK, "check", "true"}); m_manualCheck = manualCheck; m_packageData->clear(); #ifdef CHECK_DIRECTORY if (QFileInfo(qApp->applicationDirPath()).baseName() != QString(REG_APP_NAME)) { - refreshStartPage({"error", tr("Updates are not allowed!")}); + refreshStartPage({"error", {TXT_ERR_NOT_ALLOWED}}); m_dialogSchedule->addToSchedule("criticalMsg", tr("This folder configuration does not allow for " "updates! The folder name should be: ") + QString(REG_APP_NAME)); return; @@ -378,8 +406,7 @@ void CUpdateManager::checkUpdates(bool manualCheck) #endif if (!m_socket->sendMessage(MSG_CheckUpdates, WStrToTStr(m_checkUrl))) { - refreshStartPage({"error", tr("An error occurred while check updates: Update Service not found!"), - tr("Check for updates"), "check", "false"}); + refreshStartPage({"error", {TXT_ERR_CHECK}, BTN_TXT_CHECK, "check", "false"}); __UNLOCK // m_dialogSchedule->addToSchedule("criticalMsg", QObject::tr("An error occurred while check updates: Update Service not found!")); } @@ -402,12 +429,31 @@ void CUpdateManager::updateNeededCheking() void CUpdateManager::onProgressSlot(const int percent) { - refreshStartPage({"", tr("Downloading new version %1 (%2%)").arg(m_packageData->version, QString::number(percent))}); + refreshStartPage({"", {TXT_DOWNLOADING_UPD, m_packageData->version, QString::number(percent)}}); } void CUpdateManager::onError(const QString &error) { - refreshStartPage({"error", error, tr("Check for updates"), "check", "false"}); + const char *_error = SVC_TXT_ERR_OTHER; + if (error == "SVC_TXT_ERR_UNPACKING") + _error = SVC_TXT_ERR_UNPACKING; + else + if (error == "SVC_TXT_ERR_DNL_OUT_MEM") + _error = SVC_TXT_ERR_DNL_OUT_MEM; + else + if (error == "SVC_TXT_ERR_DNL_CONN") + _error = SVC_TXT_ERR_DNL_CONN; + else + if (error == "SVC_TXT_ERR_DNL_URL") + _error = SVC_TXT_ERR_DNL_URL; + else + if (error == "SVC_TXT_ERR_DNL_CREAT") + _error = SVC_TXT_ERR_DNL_CREAT; + else + if (error == "SVC_TXT_ERR_DNL_INET") + _error = SVC_TXT_ERR_DNL_INET; + + refreshStartPage({"error", {_error}, BTN_TXT_CHECK, "check", "false"}); __UNLOCK // m_dialogSchedule->addToSchedule("criticalMsg", error); } @@ -466,21 +512,21 @@ void CUpdateManager::loadUpdates() __UNLOCK unzipIfNeeded(); } else { - refreshStartPage({"success", tr("To finish updating, restart app"), tr("Restart"), "install", "false"}); + refreshStartPage({"success", {TXT_RESTART_TO_UPD}, BTN_TXT_RESTART, "install", "false"}); m_dialogSchedule->addToSchedule("showStartInstallMessage"); } } else if (!m_packageData->packageUrl.empty()) { if (!m_socket->sendMessage(MSG_LoadUpdates, WStrToTStr(m_packageData->packageUrl), QStrToTStr(m_packageData->fileType))) { - refreshStartPage({"error", tr("An error occurred while loading updates: Update Service not found!"), tr("Check for updates"), "check", "false"}); + refreshStartPage({"error", {TXT_ERR_LOAD}, BTN_TXT_CHECK, "check", "false"}); __UNLOCK // m_dialogSchedule->addToSchedule("criticalMsg", QObject::tr("An error occurred while loading updates: Update Service not found!")); } else { - refreshStartPage({"load", tr("Downloading new version %1 (0%)").arg(m_packageData->version), tr("Cancel"), "abort", "false"}); + refreshStartPage({"load", {TXT_DOWNLOADING_UPD, m_packageData->version, "0"}, BTN_TXT_CANCEL, "abort", "false"}); } } else { - refreshStartPage({"error", tr("An error occurred while loading updates: package Url is empty!"), tr("Check for updates"), "check", "false"}); + refreshStartPage({"error", {TXT_ERR_PACK_URL}, BTN_TXT_CHECK, "check", "false"}); __UNLOCK } } @@ -502,10 +548,10 @@ void CUpdateManager::refreshStartPage(const Command &cmd) lock = false; if (!m_lastCommand.icon.isEmpty()) jsn["icon"] = m_lastCommand.icon; - if (!m_lastCommand.text.isEmpty()) - jsn["text"] = m_lastCommand.text; - if (!m_lastCommand.btn_text.isEmpty()) - btn_jsn["text"] = m_lastCommand.btn_text; + if (m_lastCommand.text.text != nullptr) + jsn["text"] = tr(m_lastCommand.text.text, "CUpdateManager").arg(m_lastCommand.text.arg1, m_lastCommand.text.arg2); + if (m_lastCommand.btn_text != nullptr) + btn_jsn["text"] = tr(m_lastCommand.btn_text, "CUpdateManager"); if (!m_lastCommand.btn_action.isEmpty()) btn_jsn["action"] = m_lastCommand.btn_action; if (!m_lastCommand.btn_lock.isEmpty()) @@ -515,13 +561,13 @@ void CUpdateManager::refreshStartPage(const Command &cmd) m_lastCommand.icon = cmd.icon; jsn["icon"] = cmd.icon; } - if (!cmd.text.isEmpty()) { + if (cmd.text.text != nullptr) { m_lastCommand.text = cmd.text; - jsn["text"] = cmd.text; + jsn["text"] = tr(cmd.text.text, "CUpdateManager").arg(cmd.text.arg1, cmd.text.arg2); } - if (!cmd.btn_text.isEmpty()) { + if (cmd.btn_text != nullptr) { m_lastCommand.btn_text = cmd.btn_text; - btn_jsn["text"] = cmd.btn_text; + btn_jsn["text"] = tr(cmd.btn_text, "CUpdateManager"); } if (!cmd.btn_action.isEmpty()) { m_lastCommand.btn_action = cmd.btn_action; @@ -554,8 +600,7 @@ QString CUpdateManager::getVersion() const void CUpdateManager::onLoadUpdateFinished(const QString &filePath) { if (getFileHash(filePath) != m_packageData->hash) { - refreshStartPage({"error", tr("Update package error: md5 sum does not match the original."), - tr("Check for updates"), "check", "false"}); + refreshStartPage({"error", {TXT_ERR_MD5}, BTN_TXT_CHECK, "check", "false"}); __UNLOCK // m_dialogSchedule->addToSchedule("criticalMsg", "Update package error: md5 sum does not match the original."); return; @@ -566,7 +611,7 @@ void CUpdateManager::onLoadUpdateFinished(const QString &filePath) __UNLOCK unzipIfNeeded(); } else { - refreshStartPage({"success", tr("To finish updating, restart app"), tr("Restart"), "install", "false"}); + refreshStartPage({"success", {TXT_RESTART_TO_UPD}, BTN_TXT_RESTART, "install", "false"}); m_dialogSchedule->addToSchedule("showStartInstallMessage"); } } @@ -575,9 +620,9 @@ void CUpdateManager::unzipIfNeeded() { __GLOBAL_LOCK - refreshStartPage({"load", tr("Preparing update..."), tr("Cancel"), "abort", "true"}); + refreshStartPage({"load", {TXT_PREPARING_UPD}, BTN_TXT_CANCEL, "abort", "true"}); if (!m_socket->sendMessage(MSG_UnzipIfNeeded, QStrToTStr(m_packageData->fileName), QStrToTStr(m_packageData->version))) { - refreshStartPage({"error", tr("An error occurred while unzip updates: Update Service not found!"), tr("Check for updates"), "check", "false"}); + refreshStartPage({"error", {TXT_ERR_UNZIP}, BTN_TXT_CHECK, "check", "false"}); __UNLOCK // m_dialogSchedule->addToSchedule("criticalMsg", QObject::tr("An error occurred while unzip updates: Update Service not found!")); } @@ -631,8 +676,7 @@ void CUpdateManager::setNewUpdateSetting(const QString& _rate) void CUpdateManager::cancelLoading() { - refreshStartPage({"lastcheck", tr("Last check performed ") + formattedTime(m_lastCheck), - tr("Check for updates"), "check", "false"}); + refreshStartPage({"lastcheck", {TXT_LAST_CHECK, formattedTime(m_lastCheck)}, BTN_TXT_CHECK, "check", "false"}); m_socket->sendMessage(MSG_StopDownload); __UNLOCK } @@ -711,7 +755,7 @@ void CUpdateManager::onLoadCheckFinished(const QString &filePath) onCheckFinished(false, false, "", ""); } } else { - onCheckFinished(true, false, "", "Error opening JSON file."); + onCheckFinished(true, false, "", ""); } } @@ -730,19 +774,18 @@ void CUpdateManager::onCheckFinished(bool error, bool updateExist, const QString __UNLOCK loadUpdates(); } else { - refreshStartPage({"lastcheck", tr("Update is available (version %1)").arg(version), - tr("Download update"), "download", "false"}); + refreshStartPage({"lastcheck", {TXT_AVAILABLE_UPD, version}, BTN_TXT_DOWNLOAD, "download", "false"}); m_dialogSchedule->addToSchedule("showUpdateMessage"); } break; } } else { - refreshStartPage({"success", tr("Current version is up to date"), tr("Check for updates"), "check", "false"}); + refreshStartPage({"success", {TXT_UPDATED}, BTN_TXT_CHECK, "check", "false"}); m_pLastCheckMsgTimer->start(); __UNLOCK; } } else { - refreshStartPage({"error", changelog, tr("Check for updates"), "check", "false"}); + refreshStartPage({"error", {TXT_ERR_JSON}, BTN_TXT_CHECK, "check", "false"}); __UNLOCK // m_dialogSchedule->addToSchedule("criticalMsg", changelog); } @@ -761,7 +804,7 @@ void CUpdateManager::showUpdateMessage(QWidget *parent) { break; case WinDlg::DLG_RESULT_SKIP: { skipVersion(); - refreshStartPage({"success", tr("Current version is up to date"), tr("Check for updates"), "check", "false"}); + refreshStartPage({"success", {TXT_UPDATED}, BTN_TXT_CHECK, "check", "false"}); m_pLastCheckMsgTimer->start(); break; } diff --git a/win-linux/src/cupdatemanager.h b/win-linux/src/cupdatemanager.h index 574977db4..345e32d46 100644 --- a/win-linux/src/cupdatemanager.h +++ b/win-linux/src/cupdatemanager.h @@ -56,12 +56,25 @@ enum UpdateMode { DISABLE=0, SILENT=1, ASK=2 }; +struct ComplexText { + ComplexText(const char *_text = nullptr, const QString &_arg1 = "", const QString &_arg2 = "") : + text(_text), arg1(_arg1), arg2(_arg2) {} + const char *text = nullptr; + QString arg1, arg2; +}; + struct Command { + Command(const QString &_icon = "", const ComplexText &_text = ComplexText(), const char *_btn_text = nullptr, + const QString &_btn_action = "", const QString &_btn_lock = "") : + icon(_icon), text(_text), btn_text(_btn_text), btn_action(_btn_action), btn_lock(_btn_lock) {} bool isEmpty() const { - return (icon.isEmpty() && text.isEmpty() && btn_text.isEmpty() && + return (icon.isEmpty() && text.text == nullptr && btn_text == nullptr && btn_action.isEmpty() && btn_lock.isEmpty()); } - QString icon, text, btn_text, btn_action, btn_lock; + QString icon; + ComplexText text; + const char *btn_text = nullptr; + QString btn_action, btn_lock; }; class CUpdateManager: public QObject From a3a883dcfdbd122013c3f3f9d51add9fccec8562 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Tue, 3 Oct 2023 06:51:27 +0300 Subject: [PATCH 265/298] [win-linux] update translations --- win-linux/langs/be.ts | 143 +++++++++++++++++++++------------------ win-linux/langs/bg.ts | 143 +++++++++++++++++++++------------------ win-linux/langs/ca.ts | 143 +++++++++++++++++++++------------------ win-linux/langs/cs.ts | 143 +++++++++++++++++++++------------------ win-linux/langs/da.ts | 143 +++++++++++++++++++++------------------ win-linux/langs/de.ts | 143 +++++++++++++++++++++------------------ win-linux/langs/el_GR.ts | 143 +++++++++++++++++++++------------------ win-linux/langs/en.qm | Bin 13619 -> 13481 bytes win-linux/langs/en.ts | 143 +++++++++++++++++++++------------------ win-linux/langs/es.qm | Bin 20057 -> 19769 bytes win-linux/langs/es.ts | 143 +++++++++++++++++++++++---------------- win-linux/langs/et.ts | 143 +++++++++++++++++++++------------------ win-linux/langs/fi.ts | 143 +++++++++++++++++++++------------------ win-linux/langs/fr.ts | 143 +++++++++++++++++++++------------------ win-linux/langs/ga.ts | 143 +++++++++++++++++++++------------------ win-linux/langs/gl.ts | 143 +++++++++++++++++++++------------------ win-linux/langs/hi.ts | 143 +++++++++++++++++++++------------------ win-linux/langs/hr.ts | 143 +++++++++++++++++++++------------------ win-linux/langs/hu.ts | 143 +++++++++++++++++++++------------------ win-linux/langs/hy.qm | Bin 18795 -> 18541 bytes win-linux/langs/hy.ts | 143 +++++++++++++++++++++++---------------- win-linux/langs/id.ts | 143 +++++++++++++++++++++------------------ win-linux/langs/it_IT.qm | Bin 19895 -> 19627 bytes win-linux/langs/it_IT.ts | 143 +++++++++++++++++++++++---------------- win-linux/langs/ja.ts | 143 +++++++++++++++++++++------------------ win-linux/langs/ko.ts | 143 +++++++++++++++++++++------------------ win-linux/langs/lo.ts | 143 +++++++++++++++++++++------------------ win-linux/langs/lt.ts | 143 +++++++++++++++++++++------------------ win-linux/langs/lv.ts | 143 +++++++++++++++++++++------------------ win-linux/langs/nl.ts | 143 +++++++++++++++++++++------------------ win-linux/langs/no.ts | 143 +++++++++++++++++++++------------------ win-linux/langs/pl.ts | 143 +++++++++++++++++++++------------------ win-linux/langs/pt_BR.qm | Bin 18935 -> 18679 bytes win-linux/langs/pt_BR.ts | 143 +++++++++++++++++++++++---------------- win-linux/langs/pt_PT.ts | 143 +++++++++++++++++++++------------------ win-linux/langs/ro.qm | Bin 19453 -> 19193 bytes win-linux/langs/ro.ts | 143 +++++++++++++++++++++++---------------- win-linux/langs/ru.qm | Bin 18570 -> 18444 bytes win-linux/langs/ru.ts | 143 +++++++++++++++++++++++---------------- win-linux/langs/si.ts | 143 +++++++++++++++++++++------------------ win-linux/langs/sk.ts | 143 +++++++++++++++++++++------------------ win-linux/langs/sl.ts | 143 +++++++++++++++++++++------------------ win-linux/langs/sv.ts | 143 +++++++++++++++++++++------------------ win-linux/langs/tr.ts | 143 +++++++++++++++++++++------------------ win-linux/langs/uk.ts | 143 +++++++++++++++++++++------------------ win-linux/langs/vi.ts | 143 +++++++++++++++++++++------------------ win-linux/langs/zh_CN.qm | Bin 13266 -> 13092 bytes win-linux/langs/zh_CN.ts | 143 +++++++++++++++++++++++---------------- win-linux/langs/zh_TW.ts | 143 +++++++++++++++++++++------------------ 49 files changed, 3267 insertions(+), 2596 deletions(-) diff --git a/win-linux/langs/be.ts b/win-linux/langs/be.ts index 17c208a7c..357e68fbd 100644 --- a/win-linux/langs/be.ts +++ b/win-linux/langs/be.ts @@ -4,7 +4,7 @@ CAscApplicationManagerWrapper - + Presenter View Рэжым дакладчыка @@ -21,18 +21,18 @@ Усе вокны рэдактара будуць зачыненыя. Вы хочаце працягнуць? - - + + Document%1.docx Дакумент%1.docx - + Book%1.xlsx Кніга%1.xlsx - + Presentation%1.pptx Прэзентацыя%1.pptx @@ -40,7 +40,7 @@ CAscTabWidget - + Document Адкрываецца... @@ -613,154 +613,169 @@ CUpdateManager - - - - Last check performed - - - - - - - - - - - - - - - - + Check for updates - + Unable to check update: URL not defined. - - - + To finish updating, restart app - - - + Restart - + Checking for updates... - + Updates are not allowed! - + This folder configuration does not allow for updates! The folder name should be: - + An error occurred while check updates: Update Service not found! - + Downloading new version %1 (%2%) - + An error occurred while loading updates: Update Service not found! - - Downloading new version %1 (0%) - - - - - + Cancel Скасаваць - + An error occurred while loading updates: package Url is empty! - + Update package error: md5 sum does not match the original. - + Preparing update... - + An error occurred while unzip updates: Update Service not found! - + Update is available (version %1) - + Download update - - + Current version is up to date - + + An error occured while unpacking the archive + + + + + Update download failed: out of memory! + + + + + Update download failed: server connection error! + + + + + Update download failed: wrong URL! + + + + + Update download failed: unable to create file! + + + + + Update download failed: network error! + + + + + A service error has occurred! + + + + + Last check performed %1 + + + + + Error opening JSON file. + + + + Update is available - - + + Current version - - + + Update version - + Would you like to download update now? - + Update is ready to install - + Would you like to restart app now? @@ -858,12 +873,12 @@ - + An error occurred while start install updates! - + An error occurred while start replacing files: Update Service not found! diff --git a/win-linux/langs/bg.ts b/win-linux/langs/bg.ts index c728caf01..71c6c12cc 100644 --- a/win-linux/langs/bg.ts +++ b/win-linux/langs/bg.ts @@ -4,7 +4,7 @@ CAscApplicationManagerWrapper - + Presenter View Изглед на водещия @@ -21,18 +21,18 @@ Всички редакторски прозорци ще бъдат затворени. Искате ли да продължите? - - + + Document%1.docx Документ%1.docx - + Book%1.xlsx Книга%1.xlsx - + Presentation%1.pptx Презентация%1.pptx @@ -56,7 +56,7 @@ CAscTabWidget - + Document Отваряне… @@ -633,154 +633,169 @@ CUpdateManager - - - - Last check performed - - - - - - - - - - - - - - - - + Check for updates - + Unable to check update: URL not defined. - - - + To finish updating, restart app - - - + Restart - + Checking for updates... - + Updates are not allowed! - + This folder configuration does not allow for updates! The folder name should be: - + An error occurred while check updates: Update Service not found! - + Downloading new version %1 (%2%) - + An error occurred while loading updates: Update Service not found! - - Downloading new version %1 (0%) - - - - - + Cancel Отказ - + An error occurred while loading updates: package Url is empty! - + Update package error: md5 sum does not match the original. - + Preparing update... - + An error occurred while unzip updates: Update Service not found! - + Update is available (version %1) - + Download update Изтеглете актуализация - - + Current version is up to date - + + An error occured while unpacking the archive + + + + + Update download failed: out of memory! + + + + + Update download failed: server connection error! + + + + + Update download failed: wrong URL! + + + + + Update download failed: unable to create file! + + + + + Update download failed: network error! + + + + + A service error has occurred! + + + + + Last check performed %1 + + + + + Error opening JSON file. + + + + Update is available - - + + Current version - - + + Update version - + Would you like to download update now? - + Update is ready to install - + Would you like to restart app now? @@ -898,12 +913,12 @@ Пуснете бележки - + An error occurred while start install updates! - + An error occurred while start replacing files: Update Service not found! diff --git a/win-linux/langs/ca.ts b/win-linux/langs/ca.ts index 4a5325add..3472b4e25 100644 --- a/win-linux/langs/ca.ts +++ b/win-linux/langs/ca.ts @@ -4,7 +4,7 @@ CAscApplicationManagerWrapper - + Presenter View Vista del presentador @@ -21,18 +21,18 @@ Totes les finestres de l'editor es tancaran. Vols continuar? - - + + Document%1.docx Document%1.docx - + Book%1.xlsx Book%1.xlsx - + Presentation%1.pptx Presentation%1.pptx @@ -40,7 +40,7 @@ CAscTabWidget - + Document Obrint... @@ -613,154 +613,169 @@ CUpdateManager - - - - Last check performed - - - - - - - - - - - - - - - - + Check for updates - + Unable to check update: URL not defined. - - - + To finish updating, restart app - - - + Restart - + Checking for updates... - + Updates are not allowed! - + This folder configuration does not allow for updates! The folder name should be: - + An error occurred while check updates: Update Service not found! - + Downloading new version %1 (%2%) - + An error occurred while loading updates: Update Service not found! - - Downloading new version %1 (0%) - - - - - + Cancel Cancel·lar - + An error occurred while loading updates: package Url is empty! - + Update package error: md5 sum does not match the original. - + Preparing update... - + An error occurred while unzip updates: Update Service not found! - + Update is available (version %1) - + Download update - - + Current version is up to date - + + An error occured while unpacking the archive + + + + + Update download failed: out of memory! + + + + + Update download failed: server connection error! + + + + + Update download failed: wrong URL! + + + + + Update download failed: unable to create file! + + + + + Update download failed: network error! + + + + + A service error has occurred! + + + + + Last check performed %1 + + + + + Error opening JSON file. + + + + Update is available - - + + Current version - - + + Update version - + Would you like to download update now? - + Update is ready to install - + Would you like to restart app now? @@ -854,12 +869,12 @@ - + An error occurred while start install updates! - + An error occurred while start replacing files: Update Service not found! diff --git a/win-linux/langs/cs.ts b/win-linux/langs/cs.ts index 1440e505e..91c14599a 100644 --- a/win-linux/langs/cs.ts +++ b/win-linux/langs/cs.ts @@ -4,7 +4,7 @@ CAscApplicationManagerWrapper - + Presenter View Náhled prezentace @@ -21,18 +21,18 @@ Všechna okna editoru budou zavřena. Chceš pokračovat? - - + + Document%1.docx Dokument%1.docx - + Book%1.xlsx Sešit%1.xlsx - + Presentation%1.pptx Prezentace%1.pptx @@ -56,7 +56,7 @@ CAscTabWidget - + Document Otevírám... @@ -633,154 +633,169 @@ CUpdateManager - - - - Last check performed - - - - - - - - - - - - - - - - + Check for updates - + Unable to check update: URL not defined. - - - + To finish updating, restart app - - - + Restart - + Checking for updates... - + Updates are not allowed! - + This folder configuration does not allow for updates! The folder name should be: - + An error occurred while check updates: Update Service not found! - + Downloading new version %1 (%2%) - + An error occurred while loading updates: Update Service not found! - - Downloading new version %1 (0%) - - - - - + Cancel Storno - + An error occurred while loading updates: package Url is empty! - + Update package error: md5 sum does not match the original. - + Preparing update... - + An error occurred while unzip updates: Update Service not found! - + Update is available (version %1) - + Download update Stáhnout aktualizaci - - + Current version is up to date - + + An error occured while unpacking the archive + + + + + Update download failed: out of memory! + + + + + Update download failed: server connection error! + + + + + Update download failed: wrong URL! + + + + + Update download failed: unable to create file! + + + + + Update download failed: network error! + + + + + A service error has occurred! + + + + + Last check performed %1 + + + + + Error opening JSON file. + + + + Update is available - - + + Current version - - + + Update version - + Would you like to download update now? - + Update is ready to install - + Would you like to restart app now? @@ -898,12 +913,12 @@ Poznámky k vydání - + An error occurred while start install updates! - + An error occurred while start replacing files: Update Service not found! diff --git a/win-linux/langs/da.ts b/win-linux/langs/da.ts index 3fe551e80..736c7a393 100644 --- a/win-linux/langs/da.ts +++ b/win-linux/langs/da.ts @@ -4,7 +4,7 @@ CAscApplicationManagerWrapper - + Presenter View Præsentationsvisning @@ -21,18 +21,18 @@ Alle editorvinduerne lukkes. Vil du fortsætte? - - + + Document%1.docx Dokument%1.docx - + Book%1.xlsx Bog%1.xlsx - + Presentation%1.pptx Præsentation%1.pptx @@ -52,7 +52,7 @@ CAscTabWidget - + Document Åbner... @@ -629,154 +629,169 @@ CUpdateManager - - - - Last check performed - - - - - - - - - - - - - - - - + Check for updates - + Unable to check update: URL not defined. - - - + To finish updating, restart app - - - + Restart - + Checking for updates... - + Updates are not allowed! - + This folder configuration does not allow for updates! The folder name should be: - + An error occurred while check updates: Update Service not found! - + Downloading new version %1 (%2%) - + An error occurred while loading updates: Update Service not found! - - Downloading new version %1 (0%) - - - - - + Cancel Annuller - + An error occurred while loading updates: package Url is empty! - + Update package error: md5 sum does not match the original. - + Preparing update... - + An error occurred while unzip updates: Update Service not found! - + Update is available (version %1) - + Download update Download opdatering - - + Current version is up to date - + + An error occured while unpacking the archive + + + + + Update download failed: out of memory! + + + + + Update download failed: server connection error! + + + + + Update download failed: wrong URL! + + + + + Update download failed: unable to create file! + + + + + Update download failed: network error! + + + + + A service error has occurred! + + + + + Last check performed %1 + + + + + Error opening JSON file. + + + + Update is available - - + + Current version - - + + Update version - + Would you like to download update now? - + Update is ready to install - + Would you like to restart app now? @@ -894,12 +909,12 @@ Udgivelsesnoter - + An error occurred while start install updates! - + An error occurred while start replacing files: Update Service not found! diff --git a/win-linux/langs/de.ts b/win-linux/langs/de.ts index 90226ef48..58f85d8e1 100644 --- a/win-linux/langs/de.ts +++ b/win-linux/langs/de.ts @@ -4,7 +4,7 @@ CAscApplicationManagerWrapper - + Presenter View Referentenansicht @@ -21,18 +21,18 @@ Alle Editor-Fenster werden geschlossen. Möchten Sie fortfahren? - - + + Document%1.docx Dokument%1.docx - + Book%1.xlsx Buch%1.xlsx - + Presentation%1.pptx Präsentation%1.pptx @@ -56,7 +56,7 @@ CAscTabWidget - + Document Öffnung... @@ -637,154 +637,169 @@ CUpdateManager - - - - Last check performed - - - - - - - - - - - - - - - - + Check for updates - + Unable to check update: URL not defined. - - - + To finish updating, restart app - - - + Restart - + Checking for updates... - + Updates are not allowed! - + This folder configuration does not allow for updates! The folder name should be: - + An error occurred while check updates: Update Service not found! - + Downloading new version %1 (%2%) - + An error occurred while loading updates: Update Service not found! - - Downloading new version %1 (0%) - - - - - + Cancel Abbrechen - + An error occurred while loading updates: package Url is empty! - + Update package error: md5 sum does not match the original. - + Preparing update... - + An error occurred while unzip updates: Update Service not found! - + Update is available (version %1) - + Download update Update herunterladen - - + Current version is up to date - + + An error occured while unpacking the archive + + + + + Update download failed: out of memory! + + + + + Update download failed: server connection error! + + + + + Update download failed: wrong URL! + + + + + Update download failed: unable to create file! + + + + + Update download failed: network error! + + + + + A service error has occurred! + + + + + Last check performed %1 + + + + + Error opening JSON file. + + + + Update is available - - + + Current version - - + + Update version - + Would you like to download update now? - + Update is ready to install - + Would you like to restart app now? @@ -902,12 +917,12 @@ Hinweise zur Veröffentlichung - + An error occurred while start install updates! - + An error occurred while start replacing files: Update Service not found! diff --git a/win-linux/langs/el_GR.ts b/win-linux/langs/el_GR.ts index e8106b8b1..d6c0e3bc0 100644 --- a/win-linux/langs/el_GR.ts +++ b/win-linux/langs/el_GR.ts @@ -4,7 +4,7 @@ CAscApplicationManagerWrapper - + Presenter View Προβολή παρουσιαστή @@ -21,18 +21,18 @@ Όλα τα παράθυρα του προγράμματος επεξεργασίας θα κλείσουν. Θέλετε να συνεχίσετε; - - + + Document%1.docx Έγγραφο%1.docx - + Book%1.xlsx Βιβλίο%1.xlsx - + Presentation%1.pptx Παρουσίαση%1.pptx @@ -40,7 +40,7 @@ CAscTabWidget - + Document Άνοιγμα... @@ -613,154 +613,169 @@ CUpdateManager - - - - Last check performed - - - - - - - - - - - - - - - - + Check for updates - + Unable to check update: URL not defined. - - - + To finish updating, restart app - - - + Restart - + Checking for updates... - + Updates are not allowed! - + This folder configuration does not allow for updates! The folder name should be: - + An error occurred while check updates: Update Service not found! - + Downloading new version %1 (%2%) - + An error occurred while loading updates: Update Service not found! - - Downloading new version %1 (0%) - - - - - + Cancel Ακύρωση - + An error occurred while loading updates: package Url is empty! - + Update package error: md5 sum does not match the original. - + Preparing update... - + An error occurred while unzip updates: Update Service not found! - + Update is available (version %1) - + Download update - - + Current version is up to date - + + An error occured while unpacking the archive + + + + + Update download failed: out of memory! + + + + + Update download failed: server connection error! + + + + + Update download failed: wrong URL! + + + + + Update download failed: unable to create file! + + + + + Update download failed: network error! + + + + + A service error has occurred! + + + + + Last check performed %1 + + + + + Error opening JSON file. + + + + Update is available - - + + Current version - - + + Update version - + Would you like to download update now? - + Update is ready to install - + Would you like to restart app now? @@ -858,12 +873,12 @@ - + An error occurred while start install updates! - + An error occurred while start replacing files: Update Service not found! diff --git a/win-linux/langs/en.qm b/win-linux/langs/en.qm index 2d6167dc7795054c65313b29bac1d6950a2a6d2f..ca4e19159f2986b23fad753db34dd60e79e8db33 100644 GIT binary patch delta 454 zcmdm-wK8*poZ<`y23BhZ2F7{_ttSVh{TUea7#JAh4>K_6AD?J1&Zs;w+(Lp;|Li;l z1`Sz8A68`s29-aI8CwMz7<8m2t~WE%y~Z@Z;R^!;lL#}zZlIA2w#-5fJq!%$519Q+ z_c1W21u_>Inldm*HZqrOH3AynHCdcdj!9$nWOGJ6CY^de3(Rl^p|C z$#WKPw8lyTZJj$go=MD0t)1icyRQrkA{HEfB^Cf3v60h6=`#ZZR~TpTA3g>KT_Mh% zlFL9x$#YKKvXp^A^$vvAdCs|Y?@a~Lwp&l2@$as(bVjXbK+>Yts*z@Ram(T7!;fkEXDW5!lN1_qre6PKGY=><%@FD9iC#q3|Y52*GubCIDb z1A}BEbJ$l}CAYCpI$y`YAU=waL5Y`Zd7n7YPx@RN&RhjL+-LH4CUwTWljWJkq_hjTeR6;<5KrVzms`caz?{#W zo^J?LG<&i?vpwU($^Fdwitl(OCVT=0jxVpm#{UcqnhCrsk2EqcD6iuEzB(SrUpe_c zvmKLx=wx{oV8E(R4rhsHyPXM)l7!8BSmM CAscApplicationManagerWrapper - + Presenter View @@ -17,18 +17,18 @@ All the editor windows will be closed. Do you want to continue? - - + + Document%1.docx - + Book%1.xlsx - + Presentation%1.pptx @@ -36,7 +36,7 @@ CAscTabWidget - + Document Opening... @@ -582,154 +582,169 @@ CUpdateManager - - - - Last check performed - - - - - - - - - - - - - - - - + Check for updates - + Unable to check update: URL not defined. - - - + To finish updating, restart app - - - + Restart - + Checking for updates... - + Updates are not allowed! - + This folder configuration does not allow for updates! The folder name should be: - + An error occurred while check updates: Update Service not found! - + Downloading new version %1 (%2%) - + An error occurred while loading updates: Update Service not found! - - Downloading new version %1 (0%) - - - - - + Cancel - + An error occurred while loading updates: package Url is empty! - + Update package error: md5 sum does not match the original. - + Preparing update... - + An error occurred while unzip updates: Update Service not found! - + Update is available (version %1) - + Download update - - + Current version is up to date - + + An error occured while unpacking the archive + + + + + Update download failed: out of memory! + + + + + Update download failed: server connection error! + + + + + Update download failed: wrong URL! + + + + + Update download failed: unable to create file! + + + + + Update download failed: network error! + + + + + A service error has occurred! + + + + + Last check performed %1 + + + + + Error opening JSON file. + + + + Update is available - - + + Current version - - + + Update version - + Would you like to download update now? - + Update is ready to install - + Would you like to restart app now? @@ -823,12 +838,12 @@ - + An error occurred while start install updates! An error occurred while start installing updates! - + An error occurred while start replacing files: Update Service not found! diff --git a/win-linux/langs/es.qm b/win-linux/langs/es.qm index e3ecc2d66c5d3ff0b46fb5570ce9f4375ca6e30e..80513a4003983af163c2870ec6bf34032961ccbd 100644 GIT binary patch delta 466 zcmcaPhjHgD#tCwYGZ+|Htr-}YEFrXO4UqO{U~r9MV2D4=z~B))(O!(nU3Fr(g#@Gi z*?9~MR*xBdSd|$VOxPGRwhA&ZI9{5#-pt6Ag=v1n7oa&Wm>G5h&148=7INqTst#cG zFWtw$V78UH$k3F5L1`*;*;XS41~-$*;*4@kHinbU8TFW)!zZUR+8H_gVLfqUCIf>& zAM4#)`3wvi#%!Gb#DR(rvkApMWMHs2U<JT z{=>(>;3C1>kC|U zk6r@(qro-9a}EQ8ZZFsJK9Ccexi*}+3UuP0$?VK(Ozwe`^_j(_?B8+w{0IYd_x8X2hYjz%yvwcwv*>G>nYhj$8|Kxon@D&JxG&`ZN<5J7t^Cuzg}(V^wI#&Id{rLR&@; zc$ZUYJM(W(Eg6iC6Jn_E1$n2%WJwudxh9^?902NkTql^A)5EPoG4sWFSa31#7Cs^v zjCJo6+gd&WZnvUoz6Qu&R2&m>0N+hMC-{y2r^>5y{ebzsa_mSN&@koa832_d+{#Se zz+>rROCC@)DGgjdM?9qI2P#1SQkof^0xHU-4`0@Ro%PbMTf<;74`;@(Rg?>KnmfVE<)x`pORK zi>n{b&QtbTzRvcrK!lq`gVFt4)6hW~%wbL3G)8ls*2EJffafR=i7r-kh!2Xz7T0%e z?$B47kwYs#`U5!MYVS>50Bm0E`u#BAit{CM2ld>XWoNaocyrcqrGKrR{^rv7v#bfb z5a26SH98v#P$X@1uApV+PRB0MR#3#{%G|EQXhaM$+7O{VN#_VU(2nzjtw<2pv8ntZ z>?OW)^A;tg6W!!b;3P3oQdZFg`G1w1hDcAZ9Bqq5&&b`e CAscApplicationManagerWrapper - + Presenter View Vista del presentador @@ -21,18 +21,18 @@ Todas las ventanas del editor estarán cerradas. ¿Quiere continuar? - - + + Document%1.docx Documento%1.docx - + Book%1.xlsx Libro%1.xlsx - + Presentation%1.pptx Presentación%1.pptx @@ -56,7 +56,7 @@ CAscTabWidget - + Document Abriendo... @@ -676,154 +676,177 @@ CUpdateManager - - - Last check performed - Se ha realizado la última comprobación - - - - - - - - - - - - - - - + Se ha realizado la última comprobación + + + Check for updates Comprobando las actualizaciones - + Unable to check update: URL not defined. - - - + To finish updating, restart app Para terminar la actualización, reinicie la aplicación - - - + Restart Reiniciar - + Checking for updates... Comprobando las actualizaciones... - + Updates are not allowed! ¡Las actualizaciones no están permitidas! - + This folder configuration does not allow for updates! The folder name should be: Esta configuración de carpeta no permite actualizaciones. El nombre de la carpeta debe ser: - + An error occurred while check updates: Update Service not found! Se ha producido un error al comprobar las actualizaciones: ¡No se ha encontrado el servicio de actualización! - + Downloading new version %1 (%2%) Descargando la nueva versión %1 (%2%) - + An error occurred while loading updates: Update Service not found! Se ha producido un error al cargar las actualizaciones: ¡No se ha encontrado el servicio de actualización! - Downloading new version %1 (0%) - Descargando la nueva versión %1 (0%) + Descargando la nueva versión %1 (0%) - - + Cancel Cancelar - + An error occurred while loading updates: package Url is empty! Se ha producido un error al cargar las actualizaciones: ¡La Url del paquete está vacía! - + Update package error: md5 sum does not match the original. Error al actualizar el paquete: la suma md5 no coincide con la original. - + Preparing update... Preparando la actualización... - + An error occurred while unzip updates: Update Service not found! Se ha producido un error al descomprimir las actualizaciones: ¡No se ha encontrado el servicio de actualización! - + Update is available (version %1) La actualización está disponible (versión %1) - + Download update Descargar actualización - - + Current version is up to date La versión actual está actualizada - + + An error occured while unpacking the archive + + + + + Update download failed: out of memory! + + + + + Update download failed: server connection error! + + + + + Update download failed: wrong URL! + + + + + Update download failed: unable to create file! + + + + + Update download failed: network error! + + + + + A service error has occurred! + + + + + Last check performed %1 + + + + + Error opening JSON file. + + + + Update is available La actualización está disponible - - + + Current version Versión actual - - + + Update version Versión de actualización - + Would you like to download update now? ¿Desea descargar la actualización ahora? - + Update is ready to install La actualización está lista para instalarse - + Would you like to restart app now? ¿Desea reiniciar la aplicación ahora? @@ -953,12 +976,12 @@ Se ha producido un error al extraer las actualizaciones: ¡No se ha encontrado el servicio de actualización! - + An error occurred while start install updates! Se ha producido un error al iniciar la instalación de actualizaciones. - + An error occurred while start replacing files: Update Service not found! Se ha producido un error al iniciar la sustitución de archivos: ¡No se ha encontrado el servicio de actualización! diff --git a/win-linux/langs/et.ts b/win-linux/langs/et.ts index ce9bf29d6..1b56f7796 100644 --- a/win-linux/langs/et.ts +++ b/win-linux/langs/et.ts @@ -4,7 +4,7 @@ CAscApplicationManagerWrapper - + Presenter View Esitaja vaade @@ -21,18 +21,18 @@ Kõik redigeerija aknad suletakse. Kas sa soovid jätkata? - - + + Document%1.docx Dokument%1.docx - + Book%1.xlsx Raamat%1.xlsx - + Presentation%1.pptx Esitlus%1.pptx @@ -40,7 +40,7 @@ CAscTabWidget - + Document Avamine... @@ -613,154 +613,169 @@ CUpdateManager - - - - Last check performed - - - - - - - - - - - - - - - - + Check for updates - + Unable to check update: URL not defined. - - - + To finish updating, restart app - - - + Restart - + Checking for updates... - + Updates are not allowed! - + This folder configuration does not allow for updates! The folder name should be: - + An error occurred while check updates: Update Service not found! - + Downloading new version %1 (%2%) - + An error occurred while loading updates: Update Service not found! - - Downloading new version %1 (0%) - - - - - + Cancel Tühista - + An error occurred while loading updates: package Url is empty! - + Update package error: md5 sum does not match the original. - + Preparing update... - + An error occurred while unzip updates: Update Service not found! - + Update is available (version %1) - + Download update - - + Current version is up to date - + + An error occured while unpacking the archive + + + + + Update download failed: out of memory! + + + + + Update download failed: server connection error! + + + + + Update download failed: wrong URL! + + + + + Update download failed: unable to create file! + + + + + Update download failed: network error! + + + + + A service error has occurred! + + + + + Last check performed %1 + + + + + Error opening JSON file. + + + + Update is available - - + + Current version - - + + Update version - + Would you like to download update now? - + Update is ready to install - + Would you like to restart app now? @@ -854,12 +869,12 @@ - + An error occurred while start install updates! - + An error occurred while start replacing files: Update Service not found! diff --git a/win-linux/langs/fi.ts b/win-linux/langs/fi.ts index 122775555..0ea8071ec 100644 --- a/win-linux/langs/fi.ts +++ b/win-linux/langs/fi.ts @@ -4,7 +4,7 @@ CAscApplicationManagerWrapper - + Presenter View Esittäjän näkymä @@ -21,18 +21,18 @@ Kaikki muokkaus-ikkunat suljetaan. Haluatko jatkaa? - - + + Document%1.docx Dokumentti%1.docx - + Book%1.xlsx Työkirja%1.xlsx - + Presentation%1.pptx Esitys%1.pptx @@ -40,7 +40,7 @@ CAscTabWidget - + Document Avataan... @@ -613,154 +613,169 @@ CUpdateManager - - - - Last check performed - - - - - - - - - - - - - - - - + Check for updates - + Unable to check update: URL not defined. - - - + To finish updating, restart app - - - + Restart - + Checking for updates... - + Updates are not allowed! - + This folder configuration does not allow for updates! The folder name should be: - + An error occurred while check updates: Update Service not found! - + Downloading new version %1 (%2%) - + An error occurred while loading updates: Update Service not found! - - Downloading new version %1 (0%) - - - - - + Cancel Peruuta - + An error occurred while loading updates: package Url is empty! - + Update package error: md5 sum does not match the original. - + Preparing update... - + An error occurred while unzip updates: Update Service not found! - + Update is available (version %1) - + Download update - - + Current version is up to date - + + An error occured while unpacking the archive + + + + + Update download failed: out of memory! + + + + + Update download failed: server connection error! + + + + + Update download failed: wrong URL! + + + + + Update download failed: unable to create file! + + + + + Update download failed: network error! + + + + + A service error has occurred! + + + + + Last check performed %1 + + + + + Error opening JSON file. + + + + Update is available - - + + Current version - - + + Update version - + Would you like to download update now? - + Update is ready to install - + Would you like to restart app now? @@ -858,12 +873,12 @@ - + An error occurred while start install updates! - + An error occurred while start replacing files: Update Service not found! diff --git a/win-linux/langs/fr.ts b/win-linux/langs/fr.ts index bebb3f403..df7b93fae 100644 --- a/win-linux/langs/fr.ts +++ b/win-linux/langs/fr.ts @@ -4,7 +4,7 @@ CAscApplicationManagerWrapper - + Presenter View Mode présentateur @@ -21,18 +21,18 @@ Toutes les fenêtres de l'éditeur seront fermées. Voulez-vous continuer ? - - + + Document%1.docx Document%1.docx - + Book%1.xlsx Livre%1.xlsx - + Presentation%1.pptx Diaporama%1.pptx @@ -56,7 +56,7 @@ CAscTabWidget - + Document Ouverture... @@ -637,154 +637,169 @@ CUpdateManager - - - - Last check performed - - - - - - - - - - - - - - - - + Check for updates - + Unable to check update: URL not defined. - - - + To finish updating, restart app - - - + Restart - + Checking for updates... - + Updates are not allowed! - + This folder configuration does not allow for updates! The folder name should be: Cette configuration de dossier ne permet pas les mises à jour ! Le nom du dossier doit être : - + An error occurred while check updates: Update Service not found! Une erreur s'est produite lors de la vérification des mises à jour : Service de mise à jour introuvable ! - + Downloading new version %1 (%2%) - + An error occurred while loading updates: Update Service not found! Une erreur s'est produite lors du chargement des mises à jour : Service de mise à jour introuvable ! - - Downloading new version %1 (0%) - - - - - + Cancel Annuler - + An error occurred while loading updates: package Url is empty! - + Update package error: md5 sum does not match the original. - + Preparing update... - + An error occurred while unzip updates: Update Service not found! Une erreur s'est produite lors de la décompression des mises à jour : Service de mise à jour introuvable ! - + Update is available (version %1) - + Download update Télécharger la mise à jour - - + Current version is up to date - + + An error occured while unpacking the archive + + + + + Update download failed: out of memory! + + + + + Update download failed: server connection error! + + + + + Update download failed: wrong URL! + + + + + Update download failed: unable to create file! + + + + + Update download failed: network error! + + + + + A service error has occurred! + + + + + Last check performed %1 + + + + + Error opening JSON file. + + + + Update is available - - + + Current version - - + + Update version - + Would you like to download update now? - + Update is ready to install - + Would you like to restart app now? @@ -914,12 +929,12 @@ Une erreur s'est produite lors de la décompression des mises à jour : Service de mise à jour introuvable ! - + An error occurred while start install updates! Une erreur s'est produite lors de l'installation des mises à jour ! - + An error occurred while start replacing files: Update Service not found! Une erreur s'est produite lors du lancement du remplacement des fichiers : Service de mise à jour introuvable ! diff --git a/win-linux/langs/ga.ts b/win-linux/langs/ga.ts index d472c48af..57e2c6093 100644 --- a/win-linux/langs/ga.ts +++ b/win-linux/langs/ga.ts @@ -4,7 +4,7 @@ CAscApplicationManagerWrapper - + Presenter View Amharc an Láithreora @@ -21,18 +21,18 @@ Dúnfar na fuinneoga eagarthóra go léir. Ar mhaith leat leanúint ar aghaidh? - - + + Document%1.docx Doiciméad%1.docx - + Book%1.xlsx Book%1.xlsx - + Presentation%1.pptx Cur i láthair%1.pptx @@ -40,7 +40,7 @@ CAscTabWidget - + Document Ag oscailt... @@ -617,154 +617,169 @@ CUpdateManager - - - - Last check performed - - - - - - - - - - - - - - - - + Check for updates - + Unable to check update: URL not defined. - - - + To finish updating, restart app - - - + Restart - + Checking for updates... - + Updates are not allowed! - + This folder configuration does not allow for updates! The folder name should be: - + An error occurred while check updates: Update Service not found! - + Downloading new version %1 (%2%) - + An error occurred while loading updates: Update Service not found! - - Downloading new version %1 (0%) - - - - - + Cancel Cealaigh - + An error occurred while loading updates: package Url is empty! - + Update package error: md5 sum does not match the original. - + Preparing update... - + An error occurred while unzip updates: Update Service not found! - + Update is available (version %1) - + Download update - - + Current version is up to date - + + An error occured while unpacking the archive + + + + + Update download failed: out of memory! + + + + + Update download failed: server connection error! + + + + + Update download failed: wrong URL! + + + + + Update download failed: unable to create file! + + + + + Update download failed: network error! + + + + + A service error has occurred! + + + + + Last check performed %1 + + + + + Error opening JSON file. + + + + Update is available - - + + Current version - - + + Update version - + Would you like to download update now? - + Update is ready to install - + Would you like to restart app now? @@ -858,12 +873,12 @@ - + An error occurred while start install updates! - + An error occurred while start replacing files: Update Service not found! diff --git a/win-linux/langs/gl.ts b/win-linux/langs/gl.ts index 05eccc6fb..747217117 100644 --- a/win-linux/langs/gl.ts +++ b/win-linux/langs/gl.ts @@ -4,7 +4,7 @@ CAscApplicationManagerWrapper - + Presenter View Vista do presentador @@ -21,18 +21,18 @@ Pecharanse todas as xanelas do editor. Queres continuar? - - + + Document%1.docx Documento%1.docx - + Book%1.xlsx Libro%1.xlsx - + Presentation%1.pptx Presentación%1.pptx @@ -40,7 +40,7 @@ CAscTabWidget - + Document Abrindo... @@ -613,154 +613,169 @@ CUpdateManager - - - - Last check performed - - - - - - - - - - - - - - - - + Check for updates - + Unable to check update: URL not defined. - - - + To finish updating, restart app - - - + Restart - + Checking for updates... - + Updates are not allowed! - + This folder configuration does not allow for updates! The folder name should be: - + An error occurred while check updates: Update Service not found! - + Downloading new version %1 (%2%) - + An error occurred while loading updates: Update Service not found! - - Downloading new version %1 (0%) - - - - - + Cancel Cancelar - + An error occurred while loading updates: package Url is empty! - + Update package error: md5 sum does not match the original. - + Preparing update... - + An error occurred while unzip updates: Update Service not found! - + Update is available (version %1) - + Download update - - + Current version is up to date - + + An error occured while unpacking the archive + + + + + Update download failed: out of memory! + + + + + Update download failed: server connection error! + + + + + Update download failed: wrong URL! + + + + + Update download failed: unable to create file! + + + + + Update download failed: network error! + + + + + A service error has occurred! + + + + + Last check performed %1 + + + + + Error opening JSON file. + + + + Update is available - - + + Current version - - + + Update version - + Would you like to download update now? - + Update is ready to install - + Would you like to restart app now? @@ -854,12 +869,12 @@ - + An error occurred while start install updates! - + An error occurred while start replacing files: Update Service not found! diff --git a/win-linux/langs/hi.ts b/win-linux/langs/hi.ts index 6ffe0fcc8..e7bd20cf3 100644 --- a/win-linux/langs/hi.ts +++ b/win-linux/langs/hi.ts @@ -4,7 +4,7 @@ CAscApplicationManagerWrapper - + Presenter View प्रस्तुतकर्ता दृश्य @@ -21,18 +21,18 @@ सभी संपादन विंडो बंद हो जाएँगी। क्या आप जारी रखना चाहते हैं? - - + + Document%1.docx दस्तावेज़%1.डॉक्स - + Book%1.xlsx बुक%1.एक्सएलएसएक्स - + Presentation%1.pptx प्रस्तुति%1.पीपीटीएक्स @@ -40,7 +40,7 @@ CAscTabWidget - + Document खुल रहा है... @@ -613,154 +613,169 @@ CUpdateManager - - - - Last check performed - - - - - - - - - - - - - - - - + Check for updates - + Unable to check update: URL not defined. - - - + To finish updating, restart app - - - + Restart - + Checking for updates... - + Updates are not allowed! - + This folder configuration does not allow for updates! The folder name should be: - + An error occurred while check updates: Update Service not found! - + Downloading new version %1 (%2%) - + An error occurred while loading updates: Update Service not found! - - Downloading new version %1 (0%) - - - - - + Cancel रद्द करें - + An error occurred while loading updates: package Url is empty! - + Update package error: md5 sum does not match the original. - + Preparing update... - + An error occurred while unzip updates: Update Service not found! - + Update is available (version %1) - + Download update - - + Current version is up to date - + + An error occured while unpacking the archive + + + + + Update download failed: out of memory! + + + + + Update download failed: server connection error! + + + + + Update download failed: wrong URL! + + + + + Update download failed: unable to create file! + + + + + Update download failed: network error! + + + + + A service error has occurred! + + + + + Last check performed %1 + + + + + Error opening JSON file. + + + + Update is available - - + + Current version - - + + Update version - + Would you like to download update now? - + Update is ready to install - + Would you like to restart app now? @@ -854,12 +869,12 @@ - + An error occurred while start install updates! - + An error occurred while start replacing files: Update Service not found! diff --git a/win-linux/langs/hr.ts b/win-linux/langs/hr.ts index 1545a1007..2fb7c3465 100644 --- a/win-linux/langs/hr.ts +++ b/win-linux/langs/hr.ts @@ -4,7 +4,7 @@ CAscApplicationManagerWrapper - + Presenter View Prikaz prezentatora @@ -21,18 +21,18 @@ Svi prozori uređivača bit će zatvoreni. Želite li nastaviti? - - + + Document%1.docx Dokument%1.docx - + Book%1.xlsx Knjiga%1.xlsx - + Presentation%1.pptx Prezentacija%1.pptx @@ -40,7 +40,7 @@ CAscTabWidget - + Document Otvaranje... @@ -613,154 +613,169 @@ CUpdateManager - - - - Last check performed - - - - - - - - - - - - - - - - + Check for updates - + Unable to check update: URL not defined. - - - + To finish updating, restart app - - - + Restart - + Checking for updates... - + Updates are not allowed! - + This folder configuration does not allow for updates! The folder name should be: - + An error occurred while check updates: Update Service not found! - + Downloading new version %1 (%2%) - + An error occurred while loading updates: Update Service not found! - - Downloading new version %1 (0%) - - - - - + Cancel Odustani - + An error occurred while loading updates: package Url is empty! - + Update package error: md5 sum does not match the original. - + Preparing update... - + An error occurred while unzip updates: Update Service not found! - + Update is available (version %1) - + Download update - - + Current version is up to date - + + An error occured while unpacking the archive + + + + + Update download failed: out of memory! + + + + + Update download failed: server connection error! + + + + + Update download failed: wrong URL! + + + + + Update download failed: unable to create file! + + + + + Update download failed: network error! + + + + + A service error has occurred! + + + + + Last check performed %1 + + + + + Error opening JSON file. + + + + Update is available - - + + Current version - - + + Update version - + Would you like to download update now? - + Update is ready to install - + Would you like to restart app now? @@ -854,12 +869,12 @@ - + An error occurred while start install updates! - + An error occurred while start replacing files: Update Service not found! diff --git a/win-linux/langs/hu.ts b/win-linux/langs/hu.ts index 18903dba4..541a0f309 100644 --- a/win-linux/langs/hu.ts +++ b/win-linux/langs/hu.ts @@ -4,7 +4,7 @@ CAscApplicationManagerWrapper - + Presenter View Előadói nézet @@ -21,18 +21,18 @@ Minden szerkesztőablak bezárásra kerül. Folytatja a műveletet? - - + + Document%1.docx Dokumentum%1.docx - + Book%1.xlsx Munkafüzet%1.xlsx - + Presentation%1.pptx Bemutató%1.pptx @@ -40,7 +40,7 @@ CAscTabWidget - + Document Megnyitás... @@ -613,154 +613,169 @@ CUpdateManager - - - - Last check performed - - - - - - - - - - - - - - - - + Check for updates - + Unable to check update: URL not defined. - - - + To finish updating, restart app - - - + Restart - + Checking for updates... - + Updates are not allowed! - + This folder configuration does not allow for updates! The folder name should be: - + An error occurred while check updates: Update Service not found! - + Downloading new version %1 (%2%) - + An error occurred while loading updates: Update Service not found! - - Downloading new version %1 (0%) - - - - - + Cancel Mégse - + An error occurred while loading updates: package Url is empty! - + Update package error: md5 sum does not match the original. - + Preparing update... - + An error occurred while unzip updates: Update Service not found! - + Update is available (version %1) - + Download update - - + Current version is up to date - + + An error occured while unpacking the archive + + + + + Update download failed: out of memory! + + + + + Update download failed: server connection error! + + + + + Update download failed: wrong URL! + + + + + Update download failed: unable to create file! + + + + + Update download failed: network error! + + + + + A service error has occurred! + + + + + Last check performed %1 + + + + + Error opening JSON file. + + + + Update is available - - + + Current version - - + + Update version - + Would you like to download update now? - + Update is ready to install - + Would you like to restart app now? @@ -854,12 +869,12 @@ - + An error occurred while start install updates! - + An error occurred while start replacing files: Update Service not found! diff --git a/win-linux/langs/hy.qm b/win-linux/langs/hy.qm index 20848212c5cc9965f3c0ec3789882458b0695749..bea4f8fc11a21fda2f569215d2d24507406a17a3 100644 GIT binary patch delta 464 zcmXAmUr3Wt7{;G-&NlabbISy`DLQqLp`dfqxy{+P&y9jYkTC5+=Wc>!1%jB~h!o+S z$kstni57u~|H!aiNxQKqP%k3HKcSIbN$9{O-DG;itLNs&^Za<<-!I5PjKplEV}RBV z(DI8^2SqjmY6lQm20}yefSCrv@q1n?ajd-p>efh;_6ktlOCBUI1J~{Gw;pFUO+5W0 zYEleKq7p4ER~;7cUDo_01-R0z$LR)2mRVoY1vEBr3n?aydq@>k?(is4Tnz)-FPr1Q zr3vlMb~kYKmrnX`5o|`68~zE@@9J9DLqO@KuASro%5%O!Zc_CPFQ#T%`-yv~O%5LF zhr;=Qdxb}+`F2ga{`=uEkiVxtvAzas5>l-_1DNhhE&ohFz$6X#eiL4m(&+n1;hA%h z%951)umxBSq?OidVylpUrZ&50P9EIb7uZ92?AA-5;#i&8RPnc3jhEB delta 608 zcmX|8T}YE*6n@_C^V_~{%vRvkLEEQcHY1&DZnoLxehRFCMTtb247WCQZ8=SaN;BxL za`T0d3JbcJT2LV)qVh(&F+~c5{zUYu2#Yci!l>7RF3x#4@AGiZdCt3>B%cRJQeQ9( z2o8WV{zG?^VJ+Z305nbjzV?($%Xtr`>MJF@yLkuL-A2l0h5*}B;up37rVbLxYzCZ~ zRN6*O70G zEe(r+V_H@>=LHJh$c~d7z|}@)$$p(XDIb{a0rYnH=;1V=JS6`(1)yS#mT`KI_k(!3 zAs?_l5wBeDX73PR+*bga*W%RhBw(o#-+x&J@|VP4dCY_5s=`vZ0%QjjN7l31ly%zA zX?3m1(;nR-f|W z^c+y-qifuD&f7~3yjE9rUgeLn9k#wwh4rKCs{2&ocsWze&|2QfS&z|vzO>Ljq|Qrz zXD8}XOOJj7ds@^ZlYPLh6Y8~ljewn}3ry`RriLslSACb(XPuP0=bPEj430g^S}~Jq zy3^(;HK7Pbal^Tcg~1o^ibdmrU~?=i#X?H=fCg-b%y-`pWYApIYa;}5iVNKKJYQ>%0)lsFYnoDK!0 LjmBdSY~z|g!mXzW diff --git a/win-linux/langs/hy.ts b/win-linux/langs/hy.ts index abed045a4..88481717d 100644 --- a/win-linux/langs/hy.ts +++ b/win-linux/langs/hy.ts @@ -4,7 +4,7 @@ CAscApplicationManagerWrapper - + Presenter View Ներկայացնողի դիտում @@ -21,18 +21,18 @@ Խմբագրիչի բոլոր պատուհանները կփակվեն։ Ցանկանու՞մ եք շարունակել։ - - + + Document%1.docx Փաստաթուղթ%1.docx - + Book%1.xlsx Գիրք%1.xlsx - + Presentation%1.pptx Շնորհանդես%1.pptx @@ -40,7 +40,7 @@ CAscTabWidget - + Document Բացվում է... @@ -617,154 +617,177 @@ CUpdateManager - - - Last check performed - Կատարված վերջին ստուգումը - - - - - - - - - - - - - - - + Կատարված վերջին ստուգումը + + + Check for updates Թարմացումների ստուգում - + Unable to check update: URL not defined. - - - + To finish updating, restart app Թարմացումն ավարտելու համար վերագործարկեք հավելվածը - - - + Restart Վերագործարկել - + Checking for updates... Թարմացումների ստուգում... - + Updates are not allowed! Թարմացումներն անթույլատրելի են: - + This folder configuration does not allow for updates! The folder name should be: Այս թղթապանակի կազմաձևումը թույլ չի տալիս թարմացումներ: Թղթապանակի անվանումը պետք է լինի՝ - + An error occurred while check updates: Update Service not found! Թարմացումները ստուգելիս սխալ առաջացավ՝ թարմացման ծառայությունը չի գտնվել: - + Downloading new version %1 (%2%) Նոր տարբերակի ներբեռնում %1 (%2%) - + An error occurred while loading updates: Update Service not found! Թարմացումները բեռնելիս սխալ է տեղի ունեցել՝ թարմացման ծառայությունը չի գտնվել: - Downloading new version %1 (0%) - Նոր տարբերակի ներբեռնում %1 (0%) + Նոր տարբերակի ներբեռնում %1 (0%) - - + Cancel Չեղարկել - + An error occurred while loading updates: package Url is empty! Թարմացումները բեռնելիս սխալ տեղի ունեցավ՝ փաթեթի URL-ը դատարկ է: - + Update package error: md5 sum does not match the original. Փաթեթի թարմացման սխալ՝ md5 գումարը չի համապատասխանում բնօրինակին: - + Preparing update... Թարմացման նախապատրաստում... - + An error occurred while unzip updates: Update Service not found! Թարմացումներն անջատելիս սխալ տեղի ունեցավ` թարմացման ծառայությունը չի գտնվել: - + Update is available (version %1) Թարմացումը հասանելի է (տարբերակ %1) - + Download update Ներբեռնել թարմացումը - - + Current version is up to date Ներկայիս տարբերակը արդիական է - + + An error occured while unpacking the archive + + + + + Update download failed: out of memory! + + + + + Update download failed: server connection error! + + + + + Update download failed: wrong URL! + + + + + Update download failed: unable to create file! + + + + + Update download failed: network error! + + + + + A service error has occurred! + + + + + Last check performed %1 + + + + + Error opening JSON file. + + + + Update is available Թարմացումը հասանելի է - - + + Current version Ներկայիս տարբերակը - - + + Update version Թարմացնել տարբերակը - + Would you like to download update now? Ցանկանու՞մ եք ներբեռնել թարմացումը հիմա: - + Update is ready to install Թարմացումը պատրաստ է տեղադրման - + Would you like to restart app now? Ցանկանու՞մ եք վերագործարկել հավելվածը հիմա: @@ -874,12 +897,12 @@ Թարմացումներն անջատելիս սխալ տեղի ունեցավ՝ Թարմացման ծառայությունը չի գտնվել: - + An error occurred while start install updates! Տեղադրման թարմացումները սկսելիս սխալ առաջացավ: - + An error occurred while start replacing files: Update Service not found! Սխալ է տեղի ունեցել ֆայլերը փոխարինելիս՝ Թարմացման ծառայությունը չի գտնվել: diff --git a/win-linux/langs/id.ts b/win-linux/langs/id.ts index e2e46151b..b8dfd731b 100644 --- a/win-linux/langs/id.ts +++ b/win-linux/langs/id.ts @@ -4,7 +4,7 @@ CAscApplicationManagerWrapper - + Presenter View Tampilan Penyaji @@ -17,18 +17,18 @@ Semua jendela editor akan ditutup. Apakah Anda ingin melanjutkan? - - + + Document%1.docx Dokumen%1.docx - + Book%1.xlsx Buku%1.xlsx - + Presentation%1.pptx Presentasi%1.pptx @@ -36,7 +36,7 @@ CAscTabWidget - + Document Membuka... @@ -613,154 +613,169 @@ CUpdateManager - - - - Last check performed - - - - - - - - - - - - - - - - + Check for updates - + Unable to check update: URL not defined. - - - + To finish updating, restart app - - - + Restart - + Checking for updates... - + Updates are not allowed! - + This folder configuration does not allow for updates! The folder name should be: - + An error occurred while check updates: Update Service not found! - + Downloading new version %1 (%2%) - + An error occurred while loading updates: Update Service not found! - - Downloading new version %1 (0%) - - - - - + Cancel Batal - + An error occurred while loading updates: package Url is empty! - + Update package error: md5 sum does not match the original. - + Preparing update... - + An error occurred while unzip updates: Update Service not found! - + Update is available (version %1) - + Download update - - + Current version is up to date - + + An error occured while unpacking the archive + + + + + Update download failed: out of memory! + + + + + Update download failed: server connection error! + + + + + Update download failed: wrong URL! + + + + + Update download failed: unable to create file! + + + + + Update download failed: network error! + + + + + A service error has occurred! + + + + + Last check performed %1 + + + + + Error opening JSON file. + + + + Update is available - - + + Current version - - + + Update version - + Would you like to download update now? - + Update is ready to install - + Would you like to restart app now? @@ -858,12 +873,12 @@ - + An error occurred while start install updates! - + An error occurred while start replacing files: Update Service not found! diff --git a/win-linux/langs/it_IT.qm b/win-linux/langs/it_IT.qm index de27eb241dcdb12880cc34059a19c49b84ab291f..9428852cd9b123dfc911668ea71170161babe57d 100644 GIT binary patch delta 466 zcmdl!n{o9_#tCwYGZ+|Htr-}Yd?B>UDz5va6#>}uAXeL8Avyej%P&Eg$ zf9XC31~YT!B12OK1|@aovaLo846c(Vi!;hGS$~{t&Zx)abaZk$qn(jM0qcnyGZ`2J zd|2<^%4c9uuV>@@C(gj&X3r)R`;dXbZVg-LRc8hU~Q*GrBRk@=TUz z5@WJRo@~w}$K@`?(Hbksz+jm_Ii5+(%j_`6?RQ@p7^J>%{FPV$bjWW`6Q$1#4E!pb z!GHJ|7@V6pdrB@dFetWiPTjJUfx*-TLOW}6Zryv6fkEOg=jl*&pj};)k2A?BSlp9M1VTABT_goijhflxCS} zgQ)=2IRWan>#XW#;l4uwM+x3-LnP%3rNFt1j-Jc-0 z8ByzsMBVY<68% z>!#NMQ$;O3`~&PutM4tJ2dwAR)%ghEQjs+}9mo))jNaEo`ei2+K5v}<=HtR+nbXD` zAaRFR(*g^c_?mM$O(Q8gc5p40CUVH3JJx|P5=bMCaU>xjO6vseQxp?4YFrG%G-8xZ nBZEO&Df?fqJ~((fEk#FT(J|>%EH#`=jmL(hn)pK1@ksj@;2EA) diff --git a/win-linux/langs/it_IT.ts b/win-linux/langs/it_IT.ts index abee30987..1de9c25b9 100644 --- a/win-linux/langs/it_IT.ts +++ b/win-linux/langs/it_IT.ts @@ -4,7 +4,7 @@ CAscApplicationManagerWrapper - + Presenter View Visualizzazione del presenter @@ -21,18 +21,18 @@ Tutte le finestre dell'editor verranno chiuse. Vuoi continuare? - - + + Document%1.docx Documento%1.docx - + Book%1.xlsx Foglio%1.xlsx - + Presentation%1.pptx Presentazione%1.pptx @@ -56,7 +56,7 @@ CAscTabWidget - + Document Apertura... @@ -637,154 +637,177 @@ CUpdateManager - - - Last check performed - Ultimo controllo effettuato - - - - - - - - - - - - - - - + Ultimo controllo effettuato + + + Check for updates Controllo degli aggiornamenti in corso - + Unable to check update: URL not defined. - - - + To finish updating, restart app Per completare l'aggiornamento, riavvia l'app - - - + Restart Riavvia - + Checking for updates... Controllo degli aggiornamenti in corso... - + Updates are not allowed! Gli aggiornamenti non sono consentiti! - + This folder configuration does not allow for updates! The folder name should be: La configurazione di questa cartella non consente di applicare gli aggiornamenti! Il nome della cartella dovrebbe essere: - + An error occurred while check updates: Update Service not found! Si è verificato un errore durante il controllo degli aggiornamenti: Servizio aggiornamenti non è stato trovato! - + Downloading new version %1 (%2%) Download della nuova versione %1 (%2%) - + An error occurred while loading updates: Update Service not found! Si è verificato un errore durante il caricamento degli aggiornamenti: Servizio aggiornamenti non è stato trovato! - Downloading new version %1 (0%) - Download della nuova versione %1 (0%) + Download della nuova versione %1 (0%) - - + Cancel Annulla - + An error occurred while loading updates: package Url is empty! Si è verificato un errore durante il caricamento degli aggiornamenti: l'URL del pacchetto è vuoto! - + Update package error: md5 sum does not match the original. Errore del pacchetto di aggiornamento: la somma md5 non corrisponde all'originale. - + Preparing update... Preparazione dell'aggiornamento in corso... - + An error occurred while unzip updates: Update Service not found! Si è verificato un errore durante l'estrazione degli aggiornamenti: Servizio aggiornamenti non è stato trovato! - + Update is available (version %1) L'aggiornamento è disponibile (versione %1) - + Download update Scaricare l'aggiornamento - - + Current version is up to date La versione presente è aggiornata - + + An error occured while unpacking the archive + + + + + Update download failed: out of memory! + + + + + Update download failed: server connection error! + + + + + Update download failed: wrong URL! + + + + + Update download failed: unable to create file! + + + + + Update download failed: network error! + + + + + A service error has occurred! + + + + + Last check performed %1 + + + + + Error opening JSON file. + + + + Update is available L'aggiornamento è disponibile - - + + Current version Versione attuale - - + + Update version Aggiorna versione - + Would you like to download update now? Desideri scaricare l'aggiornamento ora? - + Update is ready to install L'aggiornamento è pronto per l'installazione - + Would you like to restart app now? Desideri riavviare l'app ora? @@ -914,12 +937,12 @@ Si è verificato un errore durante la decompressione degli aggiornamenti: il Servizio aggiornamenti non è stato trovato! - + An error occurred while start install updates! Si è verificato un errore durante l'installazione degli aggiornamenti! - + An error occurred while start replacing files: Update Service not found! Si è verificato un errore all'inizio della sostituzione dei file: il Servizio aggiornamenti non è stato trovato! diff --git a/win-linux/langs/ja.ts b/win-linux/langs/ja.ts index 60be4172c..726bd7661 100644 --- a/win-linux/langs/ja.ts +++ b/win-linux/langs/ja.ts @@ -4,7 +4,7 @@ CAscApplicationManagerWrapper - + Presenter View プレゼンタービュー @@ -21,18 +21,18 @@ すべての編集画面が閉じます。続けますか? - - + + Document%1.docx ドキュメント%1.docx - + Book%1.xlsx ブック%1.xlsx - + Presentation%1.pptx プレゼンテーション%1.pptx @@ -56,7 +56,7 @@ CAscTabWidget - + Document 開いています... @@ -637,154 +637,169 @@ CUpdateManager - - - - Last check performed - - - - - - - - - - - - - - - - + Check for updates - + Unable to check update: URL not defined. - - - + To finish updating, restart app - - - + Restart - + Checking for updates... - + Updates are not allowed! - + This folder configuration does not allow for updates! The folder name should be: このフォルダの設定では、アップデートが許可されていません。フォルダ名は次のようにしてください: - + An error occurred while check updates: Update Service not found! アップデートを確認中にエラーが発生しました:アップデートサービスが見つかりませんでした! - + Downloading new version %1 (%2%) - + An error occurred while loading updates: Update Service not found! アップデートの起動中にエラーが発生しました:サービスが見つかりませんでした! - - Downloading new version %1 (0%) - - - - - + Cancel キャンセル - + An error occurred while loading updates: package Url is empty! - + Update package error: md5 sum does not match the original. - + Preparing update... - + An error occurred while unzip updates: Update Service not found! アップデートのアーカイブを解除中にエラーが発生しました:アップデートサービスが見つかりませんでした! - + Update is available (version %1) - + Download update アップデートをダウンロードする - - + Current version is up to date - + + An error occured while unpacking the archive + + + + + Update download failed: out of memory! + + + + + Update download failed: server connection error! + + + + + Update download failed: wrong URL! + + + + + Update download failed: unable to create file! + + + + + Update download failed: network error! + + + + + A service error has occurred! + + + + + Last check performed %1 + + + + + Error opening JSON file. + + + + Update is available - - + + Current version - - + + Update version - + Would you like to download update now? - + Update is ready to install - + Would you like to restart app now? @@ -914,12 +929,12 @@ アップデートのアーカイブを解除中にエラーが発生しました:アップデートサービスが見つかりませんでした! - + An error occurred while start install updates! アップデートのインストール中にエラーが発生しました! - + An error occurred while start replacing files: Update Service not found! ファイルの移動中にエラーが発生しました:アップデートサービスが見つかりませんでした! diff --git a/win-linux/langs/ko.ts b/win-linux/langs/ko.ts index 62cb90326..e7520e595 100644 --- a/win-linux/langs/ko.ts +++ b/win-linux/langs/ko.ts @@ -4,7 +4,7 @@ CAscApplicationManagerWrapper - + Presenter View 발표자 보기 @@ -17,18 +17,18 @@ 업데이트 중입니다. 업데이트를 취소하고 애플케이이션을 닫으시겠습니까? - - + + Document%1.docx Document%1.docx - + Book%1.xlsx Book%1.xlsx - + Presentation%1.pptx Presentation%1.pptx @@ -36,7 +36,7 @@ CAscTabWidget - + Document 여는 중... @@ -609,154 +609,169 @@ CUpdateManager - - - - Last check performed - - - - - - - - - - - - - - - - + Check for updates - + Unable to check update: URL not defined. - - - + To finish updating, restart app - - - + Restart - + Checking for updates... - + Updates are not allowed! - + This folder configuration does not allow for updates! The folder name should be: - + An error occurred while check updates: Update Service not found! - + Downloading new version %1 (%2%) - + An error occurred while loading updates: Update Service not found! - - Downloading new version %1 (0%) - - - - - + Cancel 취소 - + An error occurred while loading updates: package Url is empty! - + Update package error: md5 sum does not match the original. - + Preparing update... - + An error occurred while unzip updates: Update Service not found! - + Update is available (version %1) - + Download update - - + Current version is up to date - + + An error occured while unpacking the archive + + + + + Update download failed: out of memory! + + + + + Update download failed: server connection error! + + + + + Update download failed: wrong URL! + + + + + Update download failed: unable to create file! + + + + + Update download failed: network error! + + + + + A service error has occurred! + + + + + Last check performed %1 + + + + + Error opening JSON file. + + + + Update is available - - + + Current version - - + + Update version - + Would you like to download update now? - + Update is ready to install - + Would you like to restart app now? @@ -854,12 +869,12 @@ - + An error occurred while start install updates! - + An error occurred while start replacing files: Update Service not found! diff --git a/win-linux/langs/lo.ts b/win-linux/langs/lo.ts index 7dbfcf6a1..5111fab62 100644 --- a/win-linux/langs/lo.ts +++ b/win-linux/langs/lo.ts @@ -4,7 +4,7 @@ CAscApplicationManagerWrapper - + Presenter View ມຸມມອງຜູ້ນຳສະເໜີ @@ -21,18 +21,18 @@ ບັນນາທິການທັງ ໝົດ ຈະຖືກປິດ. ທ່ານຕ້ອງການ ດຳ ເນີນການຕໍ່ບໍ? - - + + Document%1.docx ເອກະສານ%1.docx - + Book%1.xlsx ປື້ມ%1.xlsx - + Presentation%1.pptx ການນຳສະເໜີ%1.pptx @@ -40,7 +40,7 @@ CAscTabWidget - + Document ກຳລັງເປີດ @@ -617,154 +617,169 @@ CUpdateManager - - - - Last check performed - - - - - - - - - - - - - - - - + Check for updates - + Unable to check update: URL not defined. - - - + To finish updating, restart app - - - + Restart - + Checking for updates... - + Updates are not allowed! - + This folder configuration does not allow for updates! The folder name should be: ການຕັ້ງຄ່າໂຟນເດີນີ້ບໍ່ອະນຸຍາດໃຫ້ອັບເດດ! ຊື່ໂຟນເດີຄວນຈະເປັນ: - + An error occurred while check updates: Update Service not found! ມີຂໍ້ຜິດພາດເກີດຂຶ້ນໃນຂະນະທີ່ກວດສອບການອັບເດດ: ບໍ່ພົບບໍລິການອັບເດດ! - + Downloading new version %1 (%2%) - + An error occurred while loading updates: Update Service not found! ເກີດຄວາມຜິດພາດໃນລະຫວ່າງການໂຫຼດອັບເດດ: ບໍ່ພົບບໍລິການອັບເດດ! - - Downloading new version %1 (0%) - - - - - + Cancel ຍົກເລີກ - + An error occurred while loading updates: package Url is empty! - + Update package error: md5 sum does not match the original. - + Preparing update... - + An error occurred while unzip updates: Update Service not found! ມີຂໍ້ຜິດພາດເກີດຂຶ້ນໃນຂະນະທີ່ unzip ອັບເດດ: ບໍ່ພົບບໍລິການອັບເດດ! - + Update is available (version %1) - + Download update ດາວໂຫລດອັບເດດ - - + Current version is up to date - + + An error occured while unpacking the archive + + + + + Update download failed: out of memory! + + + + + Update download failed: server connection error! + + + + + Update download failed: wrong URL! + + + + + Update download failed: unable to create file! + + + + + Update download failed: network error! + + + + + A service error has occurred! + + + + + Last check performed %1 + + + + + Error opening JSON file. + + + + Update is available - - + + Current version - - + + Update version - + Would you like to download update now? - + Update is ready to install - + Would you like to restart app now? @@ -890,12 +905,12 @@ ມີຂໍ້ຜິດພາດເກີດຂຶ້ນໃນຂະນະທີ່ unzip ອັບເດດ: ບໍ່ພົບບໍລິການອັບເດດ! - + An error occurred while start install updates! ເກີດຄວາມຜິດພາດຂຶ້ນໃນຂະນະທີ່ ເລີ່ມຕິດຕັ້ງ ອັບເດດ! - + An error occurred while start replacing files: Update Service not found! ເກີດຄວາມຜິດພາດຂຶ້ນໃນຂະນະທີ່ເລີ່ມປ່ຽນໄຟລ໌: ບໍ່ພົບບໍລິການອັບເດດ! diff --git a/win-linux/langs/lt.ts b/win-linux/langs/lt.ts index 1af003fc4..db99cf29b 100644 --- a/win-linux/langs/lt.ts +++ b/win-linux/langs/lt.ts @@ -4,7 +4,7 @@ CAscApplicationManagerWrapper - + Presenter View Peržiūros rėžimas @@ -21,18 +21,18 @@ Visi redagavimo langai bus uždaryti. Ar norite tęsti? - - + + Document%1.docx Documentas%1.docx - + Book%1.xlsx Knyga%1.xlsx - + Presentation%1.pptx Prezentacija%1.pptx @@ -40,7 +40,7 @@ CAscTabWidget - + Document Atidaroma... @@ -613,154 +613,169 @@ CUpdateManager - - - - Last check performed - - - - - - - - - - - - - - - - + Check for updates - + Unable to check update: URL not defined. - - - + To finish updating, restart app - - - + Restart - + Checking for updates... - + Updates are not allowed! - + This folder configuration does not allow for updates! The folder name should be: - + An error occurred while check updates: Update Service not found! - + Downloading new version %1 (%2%) - + An error occurred while loading updates: Update Service not found! - - Downloading new version %1 (0%) - - - - - + Cancel Atšaukti - + An error occurred while loading updates: package Url is empty! - + Update package error: md5 sum does not match the original. - + Preparing update... - + An error occurred while unzip updates: Update Service not found! - + Update is available (version %1) - + Download update - - + Current version is up to date - + + An error occured while unpacking the archive + + + + + Update download failed: out of memory! + + + + + Update download failed: server connection error! + + + + + Update download failed: wrong URL! + + + + + Update download failed: unable to create file! + + + + + Update download failed: network error! + + + + + A service error has occurred! + + + + + Last check performed %1 + + + + + Error opening JSON file. + + + + Update is available - - + + Current version - - + + Update version - + Would you like to download update now? - + Update is ready to install - + Would you like to restart app now? @@ -854,12 +869,12 @@ - + An error occurred while start install updates! - + An error occurred while start replacing files: Update Service not found! diff --git a/win-linux/langs/lv.ts b/win-linux/langs/lv.ts index 295c0ef1c..ac966efb9 100644 --- a/win-linux/langs/lv.ts +++ b/win-linux/langs/lv.ts @@ -4,7 +4,7 @@ CAscApplicationManagerWrapper - + Presenter View Prezentētāja Skats @@ -21,18 +21,18 @@ Visi rediģēšanas logi tiks aizvērti. Vai jūs vēlaties turpināt? - - + + Document%1.docx Dokuments%1.docx - + Book%1.xlsx Grāmata%1.xlsx - + Presentation%1.pptx Prezentācija%1.pptx @@ -40,7 +40,7 @@ CAscTabWidget - + Document Notiek atvēršana... @@ -613,154 +613,169 @@ CUpdateManager - - - - Last check performed - - - - - - - - - - - - - - - - + Check for updates - + Unable to check update: URL not defined. - - - + To finish updating, restart app - - - + Restart - + Checking for updates... - + Updates are not allowed! - + This folder configuration does not allow for updates! The folder name should be: - + An error occurred while check updates: Update Service not found! - + Downloading new version %1 (%2%) - + An error occurred while loading updates: Update Service not found! - - Downloading new version %1 (0%) - - - - - + Cancel Atcelt - + An error occurred while loading updates: package Url is empty! - + Update package error: md5 sum does not match the original. - + Preparing update... - + An error occurred while unzip updates: Update Service not found! - + Update is available (version %1) - + Download update - - + Current version is up to date - + + An error occured while unpacking the archive + + + + + Update download failed: out of memory! + + + + + Update download failed: server connection error! + + + + + Update download failed: wrong URL! + + + + + Update download failed: unable to create file! + + + + + Update download failed: network error! + + + + + A service error has occurred! + + + + + Last check performed %1 + + + + + Error opening JSON file. + + + + Update is available - - + + Current version - - + + Update version - + Would you like to download update now? - + Update is ready to install - + Would you like to restart app now? @@ -858,12 +873,12 @@ - + An error occurred while start install updates! - + An error occurred while start replacing files: Update Service not found! diff --git a/win-linux/langs/nl.ts b/win-linux/langs/nl.ts index 933b22360..9b56232f9 100644 --- a/win-linux/langs/nl.ts +++ b/win-linux/langs/nl.ts @@ -4,7 +4,7 @@ CAscApplicationManagerWrapper - + Presenter View Presentatieweergave @@ -21,18 +21,18 @@ Alle bewerkingsvensters worden gesloten. Wilt u doorgaan? - - + + Document%1.docx Document%1.docx - + Book%1.xlsx Boek%1.xlsx - + Presentation%1.pptx Presentatie%1.pptx @@ -40,7 +40,7 @@ CAscTabWidget - + Document Openen... @@ -613,154 +613,169 @@ CUpdateManager - - - - Last check performed - - - - - - - - - - - - - - - - + Check for updates - + Unable to check update: URL not defined. - - - + To finish updating, restart app - - - + Restart - + Checking for updates... - + Updates are not allowed! - + This folder configuration does not allow for updates! The folder name should be: - + An error occurred while check updates: Update Service not found! - + Downloading new version %1 (%2%) - + An error occurred while loading updates: Update Service not found! - - Downloading new version %1 (0%) - - - - - + Cancel Annuleren - + An error occurred while loading updates: package Url is empty! - + Update package error: md5 sum does not match the original. - + Preparing update... - + An error occurred while unzip updates: Update Service not found! - + Update is available (version %1) - + Download update - - + Current version is up to date - + + An error occured while unpacking the archive + + + + + Update download failed: out of memory! + + + + + Update download failed: server connection error! + + + + + Update download failed: wrong URL! + + + + + Update download failed: unable to create file! + + + + + Update download failed: network error! + + + + + A service error has occurred! + + + + + Last check performed %1 + + + + + Error opening JSON file. + + + + Update is available - - + + Current version - - + + Update version - + Would you like to download update now? - + Update is ready to install - + Would you like to restart app now? @@ -858,12 +873,12 @@ - + An error occurred while start install updates! - + An error occurred while start replacing files: Update Service not found! diff --git a/win-linux/langs/no.ts b/win-linux/langs/no.ts index 5dcb0d05a..7297bfd96 100644 --- a/win-linux/langs/no.ts +++ b/win-linux/langs/no.ts @@ -4,7 +4,7 @@ CAscApplicationManagerWrapper - + Presenter View Presentasjonsvisning @@ -21,18 +21,18 @@ Alle redigeringsvinduene vil lukkes. Vil du fortsette? - - + + Document%1.docx Dokument%1.docx - + Book%1.xlsx Bok%1.xlsx - + Presentation%1.pptx Presentasjon%1.pptx @@ -40,7 +40,7 @@ CAscTabWidget - + Document Åpner... @@ -613,154 +613,169 @@ CUpdateManager - - - - Last check performed - - - - - - - - - - - - - - - - + Check for updates - + Unable to check update: URL not defined. - - - + To finish updating, restart app - - - + Restart - + Checking for updates... - + Updates are not allowed! - + This folder configuration does not allow for updates! The folder name should be: - + An error occurred while check updates: Update Service not found! - + Downloading new version %1 (%2%) - + An error occurred while loading updates: Update Service not found! - - Downloading new version %1 (0%) - - - - - + Cancel Avbryt - + An error occurred while loading updates: package Url is empty! - + Update package error: md5 sum does not match the original. - + Preparing update... - + An error occurred while unzip updates: Update Service not found! - + Update is available (version %1) - + Download update - - + Current version is up to date - + + An error occured while unpacking the archive + + + + + Update download failed: out of memory! + + + + + Update download failed: server connection error! + + + + + Update download failed: wrong URL! + + + + + Update download failed: unable to create file! + + + + + Update download failed: network error! + + + + + A service error has occurred! + + + + + Last check performed %1 + + + + + Error opening JSON file. + + + + Update is available - - + + Current version - - + + Update version - + Would you like to download update now? - + Update is ready to install - + Would you like to restart app now? @@ -854,12 +869,12 @@ - + An error occurred while start install updates! - + An error occurred while start replacing files: Update Service not found! diff --git a/win-linux/langs/pl.ts b/win-linux/langs/pl.ts index e43d72047..48e762c7b 100644 --- a/win-linux/langs/pl.ts +++ b/win-linux/langs/pl.ts @@ -4,7 +4,7 @@ CAscApplicationManagerWrapper - + Presenter View Widok Prezentera @@ -21,18 +21,18 @@ Wszystkie okna edytora zostaną zamknięte. Czy chcesz kontynuować? - - + + Document%1.docx Dokument%1.docx - + Book%1.xlsx Skoroszyt%1.xlsx - + Presentation%1.pptx Prezentacja%1.pptx @@ -40,7 +40,7 @@ CAscTabWidget - + Document Otwieranie... @@ -613,154 +613,169 @@ CUpdateManager - - - - Last check performed - - - - - - - - - - - - - - - - + Check for updates - + Unable to check update: URL not defined. - - - + To finish updating, restart app - - - + Restart - + Checking for updates... - + Updates are not allowed! - + This folder configuration does not allow for updates! The folder name should be: - + An error occurred while check updates: Update Service not found! - + Downloading new version %1 (%2%) - + An error occurred while loading updates: Update Service not found! - - Downloading new version %1 (0%) - - - - - + Cancel Anuluj - + An error occurred while loading updates: package Url is empty! - + Update package error: md5 sum does not match the original. - + Preparing update... - + An error occurred while unzip updates: Update Service not found! - + Update is available (version %1) - + Download update - - + Current version is up to date - + + An error occured while unpacking the archive + + + + + Update download failed: out of memory! + + + + + Update download failed: server connection error! + + + + + Update download failed: wrong URL! + + + + + Update download failed: unable to create file! + + + + + Update download failed: network error! + + + + + A service error has occurred! + + + + + Last check performed %1 + + + + + Error opening JSON file. + + + + Update is available - - + + Current version - - + + Update version - + Would you like to download update now? - + Update is ready to install - + Would you like to restart app now? @@ -858,12 +873,12 @@ - + An error occurred while start install updates! - + An error occurred while start replacing files: Update Service not found! diff --git a/win-linux/langs/pt_BR.qm b/win-linux/langs/pt_BR.qm index 4b7b1b6b2a145f634ef5433d20871fd9fe53211f..c6d58e7f75f5303bfe5971051124c8cc69cb981f 100644 GIT binary patch delta 465 zcmex9neqEX#tCwYGZ+|Htr-}YfEYwOIsj>ZAT7hd5Pz6~!G(XKy%>|z^NHaW5{&w1 z=P@vtPh|9ARc2r?)MCuoD#*ZKdv4--Gb4vnO!FJQ0L{6=%&;41CPOr{kV6jxgV`Tu z|I&R7492sWiwsQ}7!>|9mu)oyn*U|8IHMes#o5W`jCxG=nv>HR?Tl=NSWn!T$-uy0 z!g}{sJ_CcAB^&2IaRvsbb~d5dhYSqXC2XNrof#OEG}xjUMHv|EqbFZybYpT%nk>&G z#$*~e*_=s^%Q=OkHC7U6bNb|XCUH+@j@$3PGB8Mf;P@-CfPulpp3_9>GXn#k9%t|$ zKA;f~ID1Mi1KpL*Id#iY1_q-e5ZZns=hnS985qPra-I%VXJD{k&WPKJhCWqF^=`3;Vj!QFvkz=y?49k4u&C!-~1OSrefzbc} delta 614 zcmX|7T}YE*6n@@!x_z6?EO5FHnqMo+{@j+j&A+MJ3L-)Jk%3||wohHnE#_YY30`zn zr0b;!l$`w^h&5*K0UQTe*US#UGnY&` zdBfA>s!4Wz(=_$Xk@uP=;iv$VElvN-QJVT$Y-bi;IV)_el-HX@JM(Z47vsz%`v$Z- z+dcp_VQur053rVKTUkC(e^M;6fVbd++wXfZy5aemD;l5&WSPL&=o`KMgib+86Le_ zqU_5e&G&IX6Ga-6Tx-Z_j8cYOn>n49N&2gr(;0UFwIR`@@o?vw7}k_pt2>N^BR}a! zQ%2?S7Et9j-k%==j{G*Jr`oAr6szR+KNLk-^xr-a$U3L<-iiRn_D(;`8ZTotV#Vb; zY)3H;NSVvEgd%@@AQp`W!;x605>p41el^h(iN};;hf-n}4Q{!m3d@M17ZG$L2nGF6 zk)W!B5F%v_pAaWKL3)s!5nLt?XT1N{ CAscApplicationManagerWrapper - + Presenter View Vista de apresentador @@ -21,18 +21,18 @@ Todas as janelas do editor serão fechadas. Quer continuar? - - + + Document%1.docx Documento%1.docx - + Book%1.xlsx Planilha%1.xlsx - + Presentation%1.pptx Apresentação%1.pptx @@ -56,7 +56,7 @@ CAscTabWidget - + Document Abrindo... @@ -637,154 +637,177 @@ CUpdateManager - - - Last check performed - Última verificação realizada - - - - - - - - - - - - - - - + Última verificação realizada + + + Check for updates Verificando atualizações - + Unable to check update: URL not defined. - - - + To finish updating, restart app Para terminar a atualização, reinicie o aplicativo - - - + Restart Reiniciar - + Checking for updates... Verificando atualizações... - + Updates are not allowed! Atualizações não são permitidas! - + This folder configuration does not allow for updates! The folder name should be: Esta configuração de pasta não permite atualizações! O nome da pasta deve ser: - + An error occurred while check updates: Update Service not found! Ocorreu um erro ao verificar atualizações: Serviço de atualização não encontrado! - + Downloading new version %1 (%2%) Baixando a nova versão %1 (%2%) - + An error occurred while loading updates: Update Service not found! Ocorreu um erro ao carregar atualizações: Serviço de atualização não encontrado! - Downloading new version %1 (0%) - Baixando a nova versão %1 (0%) + Baixando a nova versão %1 (0%) - - + Cancel Cancelar - + An error occurred while loading updates: package Url is empty! Ocorreu um erro ao carregar atualizações: o URL do pacote está vazio! - + Update package error: md5 sum does not match the original. Erro no pacote de atualização: a soma md5 não corresponde ao original. - + Preparing update... Preparando atualização... - + An error occurred while unzip updates: Update Service not found! Ocorreu um erro ao descompactar atualizações: Serviço de atualização não encontrado! - + Update is available (version %1) A atualização está disponível (versão %1) - + Download update Baixar atualização - - + Current version is up to date A versão atual está atualizada - + + An error occured while unpacking the archive + + + + + Update download failed: out of memory! + + + + + Update download failed: server connection error! + + + + + Update download failed: wrong URL! + + + + + Update download failed: unable to create file! + + + + + Update download failed: network error! + + + + + A service error has occurred! + + + + + Last check performed %1 + + + + + Error opening JSON file. + + + + Update is available A atualização está disponível - - + + Current version Versão Atual - - + + Update version Versão atualizada - + Would you like to download update now? Gostaria de baixar a atualização agora? - + Update is ready to install A atualização está pronta para ser instalada - + Would you like to restart app now? Gostaria de reiniciar o aplicativo agora? @@ -914,12 +937,12 @@ Ocorreu um erro ao descompactar atualizações: Serviço de atualização não encontrado! - + An error occurred while start install updates! Ocorreu um erro ao iniciar a instalação das atualizações! - + An error occurred while start replacing files: Update Service not found! Ocorreu um erro ao iniciar a substituição de arquivos: Serviço de atualização não encontrado! diff --git a/win-linux/langs/pt_PT.ts b/win-linux/langs/pt_PT.ts index c44e93091..975a16f16 100644 --- a/win-linux/langs/pt_PT.ts +++ b/win-linux/langs/pt_PT.ts @@ -4,7 +4,7 @@ CAscApplicationManagerWrapper - + Presenter View Vista do Apresentador @@ -21,18 +21,18 @@ Todas as janelas do editor serão fechadas. Deseja continuar? - - + + Document%1.docx Documento%1.docx - + Book%1.xlsx Livro%1.xlsx - + Presentation%1.pptx Apresentação%1.pptx @@ -40,7 +40,7 @@ CAscTabWidget - + Document A abrir... @@ -613,154 +613,169 @@ CUpdateManager - - - - Last check performed - - - - - - - - - - - - - - - - + Check for updates - + Unable to check update: URL not defined. - - - + To finish updating, restart app - - - + Restart - + Checking for updates... - + Updates are not allowed! - + This folder configuration does not allow for updates! The folder name should be: - + An error occurred while check updates: Update Service not found! - + Downloading new version %1 (%2%) - + An error occurred while loading updates: Update Service not found! - - Downloading new version %1 (0%) - - - - - + Cancel Cancelar - + An error occurred while loading updates: package Url is empty! - + Update package error: md5 sum does not match the original. - + Preparing update... - + An error occurred while unzip updates: Update Service not found! - + Update is available (version %1) - + Download update - - + Current version is up to date - + + An error occured while unpacking the archive + + + + + Update download failed: out of memory! + + + + + Update download failed: server connection error! + + + + + Update download failed: wrong URL! + + + + + Update download failed: unable to create file! + + + + + Update download failed: network error! + + + + + A service error has occurred! + + + + + Last check performed %1 + + + + + Error opening JSON file. + + + + Update is available - - + + Current version - - + + Update version - + Would you like to download update now? - + Update is ready to install - + Would you like to restart app now? @@ -858,12 +873,12 @@ - + An error occurred while start install updates! - + An error occurred while start replacing files: Update Service not found! diff --git a/win-linux/langs/ro.qm b/win-linux/langs/ro.qm index 4642997b24bb6521140c8ffa827038e23c3069cc..de31e0cbdd2fccc7c26571271a224aaa77029876 100644 GIT binary patch delta 639 zcmXAndq`7p6vw}JcXzwLJC39q!ffRmK8-Mm{Fwkhe7y9FE!FSvA;eXIFHXcoVAPGYCqSTP%r=p zMS!XKbDgVm}>dXQ43A{%!l2TfV_*3 zl+**7#3Ylf>7k1?z1 zI}mf8)&1E(ICb*e-p5#MCmxgMjyTdj8*JeLpo48#}?zXcEzi1 V);fm{&?{L+o~l{y$dkf6`5!1Ds_p;) delta 708 zcmX|9T}V@57=F${~I-vML-<^E3^C^4l+!{Ij<}f)(M{Bs~;t*gP;>tTo*|Na}axFk=1=lrU zCg(*tg3+^uXJjK|VjWuf7-KgVedT8suK`gr{HG;9km*;7TRSO6hcdeMGhmmL)eBA_ ztxH+M!~l*Wd5&=>xDKiM-*yAZGpf;wVL)S4t;|w{f^V{s)t_}Y3O%*)6onT;S58wO z!t{L+(ESo-N2Y*$zwlx8Cy?k6Hsgk<9uxCYe*lq}#mYZB$Yov(1>XTFlj6YRyFi{4 zX2&UUc#U)|yg2dvJrI9Td|jOhl+24Ov4?@|b#aUD#U5lE)Vf$bV5n0!*jIr8TdUQ>FU2X-CRxDyPNCojzQIgO`{@+a45 zn)RdfkkguGe=bmzB6~PHYaNh7oGEpGls2ySJEh*#N{{}M>8keL)OoQhB^|jJx$QXa75G{;DE^)`m6}GI%9Hhe_Y~P%ckSt%cC2=|F z2D!u}LAw4(tMy5K{AswRS$IsvLBLKDGDbDh)+G90A;dNH1cj-cdi@p(^3 VCw+k?f1ushC~b?6zqA$T{sB;PwABCr diff --git a/win-linux/langs/ro.ts b/win-linux/langs/ro.ts index 75f234170..71c5712d3 100644 --- a/win-linux/langs/ro.ts +++ b/win-linux/langs/ro.ts @@ -4,7 +4,7 @@ CAscApplicationManagerWrapper - + Presenter View Vizualizarea prezentator @@ -21,18 +21,18 @@ Toate ferestrele vor fi închise. Doriți sã continuați? - - + + Document%1.docx Document%1.docx - + Book%1.xlsx Registru%1.xlsx - + Presentation%1.pptx Prezentare%1.pptx @@ -56,7 +56,7 @@ CAscTabWidget - + Document Deschidere... @@ -637,154 +637,177 @@ CUpdateManager - - - Last check performed - Ultima verificare efectuată - - - - - - - - - - - - - - - + Ultima verificare efectuată + + + Check for updates Verificarea a actualizărilor - + Unable to check update: URL not defined. - - - + To finish updating, restart app Pentru a finaliza actualizarea, reporniți aplicația - - - + Restart Repornire - + Checking for updates... Verificarea a actualizărilor... - + Updates are not allowed! Actualizări nu sunt permise! - + This folder configuration does not allow for updates! The folder name should be: Actualizări nu sunt acceptate pentru această configurație a folderului! Nume de folder trebuie să fie: - + An error occurred while check updates: Update Service not found! A intervenit o eroare în timpul verificării a actualizărilor: Serviciu de Actualizare nu s-a găsit! - + Downloading new version %1 (%2%) Descărcarea noii versiuni %1 (%2%) - + An error occurred while loading updates: Update Service not found! A intervenit o eroare în timpul incărcării a actualizărilor: Serviciu de Actualizare nu s-a găsit! - Downloading new version %1 (0%) - Descărcarea noii versiuni %1 (0%) + Descărcarea noii versiuni %1 (0%) - - + Cancel Revocare - + An error occurred while loading updates: package Url is empty! A intervenit o eroare la încărcarea actualizărilor: Pachetul URL este gol! - + Update package error: md5 sum does not match the original. Eroare de actualizare a pachetului: suma md5 nu se potrivește cu suma modelului. - + Preparing update... Pregătire pentru actualizarea... - + An error occurred while unzip updates: Update Service not found! A intervenit o eroare în timpul dezarhivării a actualizărilor: Serviciu de Actualizare nu s-a găsit! - + Update is available (version %1) O actualizare este disponibilă (versiune %1) - + Download update Descărcare actualizare - - + Current version is up to date Versiunea curentă este actualizată - + + An error occured while unpacking the archive + + + + + Update download failed: out of memory! + + + + + Update download failed: server connection error! + + + + + Update download failed: wrong URL! + + + + + Update download failed: unable to create file! + + + + + Update download failed: network error! + + + + + A service error has occurred! + + + + + Last check performed %1 + + + + + Error opening JSON file. + + + + Update is available Actualizarea este disponibilă - - + + Current version Versiunea curentă - - + + Update version Actualizați versiunea - + Would you like to download update now? Doriți să descărcați actualizarea acum? - + Update is ready to install Actualizarea este gata de instalare - + Would you like to restart app now? Doriți să reporniți aplicația acum? @@ -914,12 +937,12 @@ A intervenit o eroare în timpul dezarhivării a actualizărilor: Serviciu de Actualizare nu s-a găsit. - + An error occurred while start install updates! A intervenit o eroare în timpul instalării a actualizărilor: - + An error occurred while start replacing files: Update Service not found! A intervenit o eroare în timpul înlocuirii a fișierelor: Serviciu de Actualizare nu s-a găsit. diff --git a/win-linux/langs/ru.qm b/win-linux/langs/ru.qm index 008ae928ba1121ce933388ba537affc1d0aecfd7..8481542e3358a19ec8d47580d81d9035a51962ec 100644 GIT binary patch delta 495 zcmXAmO=uHQ6ot=wFBxYhBxY18wD|7RRn)f z!HopT^dYn=RzwkX5v4{Kts=Bgp;ZJa{uCE=BW_guU#Rs-7nj3@dk^P+_pDEYrfNosY+*+aifb$D*r+}U{zSBbUv;HnSO7y3fflQqgg6n}zGTGBu4QzSt*E6Pb zjgFoCCVVCtCPn}hSyQemrft@L=n-JPX9tWc6S}M->0Lf!gi8KRQoxdc#B+C=Dg{B+aq6uZE ze5M=&Iv;SCYJEH8g^%BX*lzhxRNT4QSJG`?fyj1c@OMNQ+*hgxUjT^-<@~+tfN^12 zv!2p;_!`iLl-Z)-vUQrz(0IEwte$xHL5zJ?NBS-S?RE9y)d6u@MZIzEe@;!kGdC}C z{@^Rv2AW^uI@4lisIX4~*7b(G_$|S9FyvJXp!+CynL|o^jOoe!;b`rPV8g<#cb5RW z5WYEm3h1EWpSNAnFYr$+OSjE%Jz$9yFW^eY_lnOqPg zJSbJO{h$R!y-1=KwbmdW^kCzqR!R>&sE8Pb$Ze%L4OHhkaIp9atp#bDN3NbznWMAv-Pr{oeSkK( zb^gBLmTi07KzM&k!5;;b#br#_sKu+~8!hn`nWqE8EnON*}~F3_K%6FhHEHJQuJXm(H27lQSqN=fmH`>CRg*Z cNR;MGADb|Zl>DFc(i4W4I$Qixlg42CUzqfVoB#j- diff --git a/win-linux/langs/ru.ts b/win-linux/langs/ru.ts index ab8df5afc..c575aede1 100644 --- a/win-linux/langs/ru.ts +++ b/win-linux/langs/ru.ts @@ -4,7 +4,7 @@ CAscApplicationManagerWrapper - + Presenter View Режим докладчика @@ -21,18 +21,18 @@ Будут закрыты все окна редакторов. Продолжить? - - + + Document%1.docx Документ%1.docx - + Book%1.xlsx Книга%1.xlsx - + Presentation%1.pptx Презентация%1.pptx @@ -56,7 +56,7 @@ CAscTabWidget - + Document Открытие... @@ -641,154 +641,177 @@ Ошибка подключения к серверу! - - - Last check performed - Последняя проверка выполнена - - - - - - - - - - - - - - - + Последняя проверка выполнена + + + Check for updates Проверка обновлений - + Unable to check update: URL not defined. - - - + To finish updating, restart app Для завершения обновления перезапустите приложение - - - + Restart Перезапустить - + Checking for updates... Проверка обновлений... - + Updates are not allowed! Обновления не разрешены! - + This folder configuration does not allow for updates! The folder name should be: Данная конфигурация папки не позволяет устанавливать обновления! Имя папки должно быть: - + An error occurred while check updates: Update Service not found! При проверке обновлений произошла ошибка: Сервис обновлений не найден! - + Downloading new version %1 (%2%) Загрузка новой версии %1 (%2%) - + An error occurred while loading updates: Update Service not found! При загрузке обновлений произошла ошибка: Сервис обновлений не найден! - Downloading new version %1 (0%) - Загрузка новой версии %1 (0%) + Загрузка новой версии %1 (0%) - - + Cancel Отмена - + An error occurred while loading updates: package Url is empty! При загрузке обновлений произошла ошибка: URL-адрес пакета пуст! - + Update package error: md5 sum does not match the original. Ошибка при обновлении пакета: сумма md5 не соответствует оригиналу. - + Preparing update... Подготовка обновления... - + An error occurred while unzip updates: Update Service not found! При разархивировании обновлений произошла ошибка: Сервис обновлений не найден! - + Update is available (version %1) Доступно обновление (версия %1) - + Download update Скачать обновление - - + Current version is up to date Текущая версия является актуальной - + + An error occured while unpacking the archive + + + + + Update download failed: out of memory! + + + + + Update download failed: server connection error! + + + + + Update download failed: wrong URL! + + + + + Update download failed: unable to create file! + + + + + Update download failed: network error! + + + + + A service error has occurred! + + + + + Last check performed %1 + Последняя проверка выполнена %1 + + + + Error opening JSON file. + + + + Update is available Обновление доступно - - + + Current version Текущая версия - - + + Update version Обновить версию - + Would you like to download update now? Хотите загрузить обновление сейчас? - + Update is ready to install Обновление готово к установке - + Would you like to restart app now? Хотите перезапустить приложение сейчас? @@ -910,12 +933,12 @@ При разархивировании обновлений произошла ошибка: Сервис обновлений не найден! - + An error occurred while start install updates! При запуске установки обновлений произошла ошибка! - + An error occurred while start replacing files: Update Service not found! При запуске замены файлов произошла ошибка: Сервис обновлений не найден! diff --git a/win-linux/langs/si.ts b/win-linux/langs/si.ts index d3da63f30..e1b59885e 100644 --- a/win-linux/langs/si.ts +++ b/win-linux/langs/si.ts @@ -4,7 +4,7 @@ CAscApplicationManagerWrapper - + Presenter View ඉදිරිපත්කරුගේ දැක්ම @@ -17,18 +17,18 @@ All the editor windows will be closed. Do you want to continue? - - + + Document%1.docx ලේඛනය%1.docx - + Book%1.xlsx පොත%1.xlsx - + Presentation%1.pptx සමර්පණය%1.pptx @@ -52,7 +52,7 @@ CAscTabWidget - + Document විවෘත වෙමින්... @@ -629,154 +629,169 @@ CUpdateManager - - - - Last check performed - - - - - - - - - - - - - - - - + Check for updates - + Unable to check update: URL not defined. - - - + To finish updating, restart app - - - + Restart - + Checking for updates... - + Updates are not allowed! - + This folder configuration does not allow for updates! The folder name should be: - + An error occurred while check updates: Update Service not found! - + Downloading new version %1 (%2%) - + An error occurred while loading updates: Update Service not found! - - Downloading new version %1 (0%) - - - - - + Cancel අවලංගු - + An error occurred while loading updates: package Url is empty! - + Update package error: md5 sum does not match the original. - + Preparing update... - + An error occurred while unzip updates: Update Service not found! - + Update is available (version %1) - + Download update යාවත්කාලය බාගන්න - - + Current version is up to date - + + An error occured while unpacking the archive + + + + + Update download failed: out of memory! + + + + + Update download failed: server connection error! + + + + + Update download failed: wrong URL! + + + + + Update download failed: unable to create file! + + + + + Update download failed: network error! + + + + + A service error has occurred! + + + + + Last check performed %1 + + + + + Error opening JSON file. + + + + Update is available - - + + Current version - - + + Update version - + Would you like to download update now? - + Update is ready to install - + Would you like to restart app now? @@ -894,12 +909,12 @@ නිකුතු සටහන - + An error occurred while start install updates! - + An error occurred while start replacing files: Update Service not found! diff --git a/win-linux/langs/sk.ts b/win-linux/langs/sk.ts index c0fbc0c7f..acdb4aa78 100644 --- a/win-linux/langs/sk.ts +++ b/win-linux/langs/sk.ts @@ -4,7 +4,7 @@ CAscApplicationManagerWrapper - + Presenter View Režim prezentácie @@ -21,18 +21,18 @@ Všetky okná editora budú zatvorené. Chceš pokračovať? - - + + Document%1.docx Dokument%1.docx - + Book%1.xlsx Zošit%1.xlsx - + Presentation%1.pptx Prezentácia%1.pptx @@ -40,7 +40,7 @@ CAscTabWidget - + Document Otváranie... @@ -613,154 +613,169 @@ CUpdateManager - - - - Last check performed - - - - - - - - - - - - - - - - + Check for updates - + Unable to check update: URL not defined. - - - + To finish updating, restart app - - - + Restart - + Checking for updates... - + Updates are not allowed! - + This folder configuration does not allow for updates! The folder name should be: - + An error occurred while check updates: Update Service not found! - + Downloading new version %1 (%2%) - + An error occurred while loading updates: Update Service not found! - - Downloading new version %1 (0%) - - - - - + Cancel Zrušiť - + An error occurred while loading updates: package Url is empty! - + Update package error: md5 sum does not match the original. - + Preparing update... - + An error occurred while unzip updates: Update Service not found! - + Update is available (version %1) - + Download update - - + Current version is up to date - + + An error occured while unpacking the archive + + + + + Update download failed: out of memory! + + + + + Update download failed: server connection error! + + + + + Update download failed: wrong URL! + + + + + Update download failed: unable to create file! + + + + + Update download failed: network error! + + + + + A service error has occurred! + + + + + Last check performed %1 + + + + + Error opening JSON file. + + + + Update is available - - + + Current version - - + + Update version - + Would you like to download update now? - + Update is ready to install - + Would you like to restart app now? @@ -858,12 +873,12 @@ - + An error occurred while start install updates! - + An error occurred while start replacing files: Update Service not found! diff --git a/win-linux/langs/sl.ts b/win-linux/langs/sl.ts index 43394ad41..a58bc911d 100644 --- a/win-linux/langs/sl.ts +++ b/win-linux/langs/sl.ts @@ -4,7 +4,7 @@ CAscApplicationManagerWrapper - + Presenter View Pogled predstavitelja @@ -21,18 +21,18 @@ Vsa okna urejevalnika bodo zaprta. Ali želite nadaljevati? - - + + Document%1.docx Dokument%1.docx - + Book%1.xlsx Knjiga%1.xlsx - + Presentation%1.pptx Predstavitev%1.pptx @@ -40,7 +40,7 @@ CAscTabWidget - + Document Odpiranje... @@ -613,154 +613,169 @@ CUpdateManager - - - - Last check performed - - - - - - - - - - - - - - - - + Check for updates - + Unable to check update: URL not defined. - - - + To finish updating, restart app - - - + Restart - + Checking for updates... - + Updates are not allowed! - + This folder configuration does not allow for updates! The folder name should be: - + An error occurred while check updates: Update Service not found! - + Downloading new version %1 (%2%) - + An error occurred while loading updates: Update Service not found! - - Downloading new version %1 (0%) - - - - - + Cancel Prekliči - + An error occurred while loading updates: package Url is empty! - + Update package error: md5 sum does not match the original. - + Preparing update... - + An error occurred while unzip updates: Update Service not found! - + Update is available (version %1) - + Download update - - + Current version is up to date - + + An error occured while unpacking the archive + + + + + Update download failed: out of memory! + + + + + Update download failed: server connection error! + + + + + Update download failed: wrong URL! + + + + + Update download failed: unable to create file! + + + + + Update download failed: network error! + + + + + A service error has occurred! + + + + + Last check performed %1 + + + + + Error opening JSON file. + + + + Update is available - - + + Current version - - + + Update version - + Would you like to download update now? - + Update is ready to install - + Would you like to restart app now? @@ -858,12 +873,12 @@ - + An error occurred while start install updates! - + An error occurred while start replacing files: Update Service not found! diff --git a/win-linux/langs/sv.ts b/win-linux/langs/sv.ts index ca05dd730..1caf2d8ec 100644 --- a/win-linux/langs/sv.ts +++ b/win-linux/langs/sv.ts @@ -4,7 +4,7 @@ CAscApplicationManagerWrapper - + Presenter View Presentationsvy @@ -21,18 +21,18 @@ Alla redigeringsfönster kommer att stängas. Vill du fortsätta? - - + + Document%1.docx Dokument%1.docx - + Book%1.xlsx Kalkylblad%1.xlsx - + Presentation%1.pptx Presentation%1.pptx @@ -40,7 +40,7 @@ CAscTabWidget - + Document Öppnar... @@ -613,154 +613,169 @@ CUpdateManager - - - - Last check performed - - - - - - - - - - - - - - - - + Check for updates - + Unable to check update: URL not defined. - - - + To finish updating, restart app - - - + Restart - + Checking for updates... - + Updates are not allowed! - + This folder configuration does not allow for updates! The folder name should be: - + An error occurred while check updates: Update Service not found! - + Downloading new version %1 (%2%) - + An error occurred while loading updates: Update Service not found! - - Downloading new version %1 (0%) - - - - - + Cancel Avbryt - + An error occurred while loading updates: package Url is empty! - + Update package error: md5 sum does not match the original. - + Preparing update... - + An error occurred while unzip updates: Update Service not found! - + Update is available (version %1) - + Download update - - + Current version is up to date - + + An error occured while unpacking the archive + + + + + Update download failed: out of memory! + + + + + Update download failed: server connection error! + + + + + Update download failed: wrong URL! + + + + + Update download failed: unable to create file! + + + + + Update download failed: network error! + + + + + A service error has occurred! + + + + + Last check performed %1 + + + + + Error opening JSON file. + + + + Update is available - - + + Current version - - + + Update version - + Would you like to download update now? - + Update is ready to install - + Would you like to restart app now? @@ -854,12 +869,12 @@ - + An error occurred while start install updates! - + An error occurred while start replacing files: Update Service not found! diff --git a/win-linux/langs/tr.ts b/win-linux/langs/tr.ts index f1bf11eba..9ea5714e0 100644 --- a/win-linux/langs/tr.ts +++ b/win-linux/langs/tr.ts @@ -4,7 +4,7 @@ CAscApplicationManagerWrapper - + Presenter View Sunucu Görünümü @@ -21,18 +21,18 @@ Tüm editor pencereleri kapatılacaktır. Devam etmek istiyor musunuz? - - + + Document%1.docx Belge%1.docx - + Book%1.xlsx Kitap%1.xlsx - + Presentation%1.pptx Sunum%1.pptx @@ -40,7 +40,7 @@ CAscTabWidget - + Document Açılıyor... @@ -613,154 +613,169 @@ CUpdateManager - - - - Last check performed - - - - - - - - - - - - - - - - + Check for updates - + Unable to check update: URL not defined. - - - + To finish updating, restart app - - - + Restart - + Checking for updates... - + Updates are not allowed! - + This folder configuration does not allow for updates! The folder name should be: - + An error occurred while check updates: Update Service not found! - + Downloading new version %1 (%2%) - + An error occurred while loading updates: Update Service not found! - - Downloading new version %1 (0%) - - - - - + Cancel İptal - + An error occurred while loading updates: package Url is empty! - + Update package error: md5 sum does not match the original. - + Preparing update... - + An error occurred while unzip updates: Update Service not found! - + Update is available (version %1) - + Download update - - + Current version is up to date - + + An error occured while unpacking the archive + + + + + Update download failed: out of memory! + + + + + Update download failed: server connection error! + + + + + Update download failed: wrong URL! + + + + + Update download failed: unable to create file! + + + + + Update download failed: network error! + + + + + A service error has occurred! + + + + + Last check performed %1 + + + + + Error opening JSON file. + + + + Update is available - - + + Current version - - + + Update version - + Would you like to download update now? - + Update is ready to install - + Would you like to restart app now? @@ -858,12 +873,12 @@ - + An error occurred while start install updates! - + An error occurred while start replacing files: Update Service not found! diff --git a/win-linux/langs/uk.ts b/win-linux/langs/uk.ts index 82dc6a7ab..7e3d9e758 100644 --- a/win-linux/langs/uk.ts +++ b/win-linux/langs/uk.ts @@ -4,7 +4,7 @@ CAscApplicationManagerWrapper - + Presenter View Режим доповідача @@ -21,18 +21,18 @@ Усі вікна редактора будуть закриті. Продовжити? - - + + Document%1.docx Документ%1.docx - + Book%1.xlsx Книга%1.xlsx - + Presentation%1.pptx Презентація%1.pptx @@ -40,7 +40,7 @@ CAscTabWidget - + Document Відкриття... @@ -613,154 +613,169 @@ CUpdateManager - - - - Last check performed - - - - - - - - - - - - - - - - + Check for updates - + Unable to check update: URL not defined. - - - + To finish updating, restart app - - - + Restart - + Checking for updates... - + Updates are not allowed! - + This folder configuration does not allow for updates! The folder name should be: - + An error occurred while check updates: Update Service not found! - + Downloading new version %1 (%2%) - + An error occurred while loading updates: Update Service not found! - - Downloading new version %1 (0%) - - - - - + Cancel Відмінити - + An error occurred while loading updates: package Url is empty! - + Update package error: md5 sum does not match the original. - + Preparing update... - + An error occurred while unzip updates: Update Service not found! - + Update is available (version %1) - + Download update - - + Current version is up to date - + + An error occured while unpacking the archive + + + + + Update download failed: out of memory! + + + + + Update download failed: server connection error! + + + + + Update download failed: wrong URL! + + + + + Update download failed: unable to create file! + + + + + Update download failed: network error! + + + + + A service error has occurred! + + + + + Last check performed %1 + + + + + Error opening JSON file. + + + + Update is available - - + + Current version - - + + Update version - + Would you like to download update now? - + Update is ready to install - + Would you like to restart app now? @@ -858,12 +873,12 @@ - + An error occurred while start install updates! - + An error occurred while start replacing files: Update Service not found! diff --git a/win-linux/langs/vi.ts b/win-linux/langs/vi.ts index f66e1e187..af4029f44 100644 --- a/win-linux/langs/vi.ts +++ b/win-linux/langs/vi.ts @@ -4,7 +4,7 @@ CAscApplicationManagerWrapper - + Presenter View Chế độ xem của người thuyết trình @@ -21,18 +21,18 @@ Tất cả màn hình chỉnh sửa sẽ được đóng. Bạn có muốn tiếp tục không? - - + + Document%1.docx Document%1.docx - + Book%1.xlsx Book%1.xlsx - + Presentation%1.pptx Presentation%1.pptx @@ -40,7 +40,7 @@ CAscTabWidget - + Document Đang mở... @@ -613,154 +613,169 @@ CUpdateManager - - - - Last check performed - - - - - - - - - - - - - - - - + Check for updates - + Unable to check update: URL not defined. - - - + To finish updating, restart app - - - + Restart - + Checking for updates... - + Updates are not allowed! - + This folder configuration does not allow for updates! The folder name should be: - + An error occurred while check updates: Update Service not found! - + Downloading new version %1 (%2%) - + An error occurred while loading updates: Update Service not found! - - Downloading new version %1 (0%) - - - - - + Cancel Hủy - + An error occurred while loading updates: package Url is empty! - + Update package error: md5 sum does not match the original. - + Preparing update... - + An error occurred while unzip updates: Update Service not found! - + Update is available (version %1) - + Download update - - + Current version is up to date - + + An error occured while unpacking the archive + + + + + Update download failed: out of memory! + + + + + Update download failed: server connection error! + + + + + Update download failed: wrong URL! + + + + + Update download failed: unable to create file! + + + + + Update download failed: network error! + + + + + A service error has occurred! + + + + + Last check performed %1 + + + + + Error opening JSON file. + + + + Update is available - - + + Current version - - + + Update version - + Would you like to download update now? - + Update is ready to install - + Would you like to restart app now? @@ -858,12 +873,12 @@ - + An error occurred while start install updates! - + An error occurred while start replacing files: Update Service not found! diff --git a/win-linux/langs/zh_CN.qm b/win-linux/langs/zh_CN.qm index 2f4195ef98e510157207eb3cf867074ca52d74f5..6da1559f563ddf2717d6d552baccc41d1b1af1a9 100644 GIT binary patch delta 459 zcmXAmUr19?9LK-soNeyhakBKNs8C*5;i1BMeQNZ^Kh`$5^Yx%>w*?>MDJ1F79{ZU{~j0wJd0Jtkmq{<06PBV$p zF2GyP7Y?w#!TgHRJjz8cKc~`rTqd+1Fn;B-rM-YZLG+A`nIJ(Xz}DR$aVE@q6J&%j znwQkot*bz7SlzOG1Tf91&oTy}Zj3B4$1HwPb7!#+F#OPrpDX|xm1eyRz%@mJthF(4 zp1;{@rbtcv?ZGQ_4t`-$0JK@YT%4yIpZJg8DnRvB{;N^J8tKn-UmCw2E~c;8wLtIz&Yk66M0ITSszS&|cJ;1~zCsQ#xs8 z8>rdPjm=*Nq+7bJi8$anK~|_ZFidPJnygG>s&g8DLlOw8XXjMg&PGeKHg`>)&Ky^K zkl;dyRuAgwt(N~AgPI=O(R6RBJKffiOes=I?v=7~rYD(BNv@FOsV5IT7O&VWcG(jz mlr>2I*9?)io=Z}DLT>MpF3OqCbmoHGA(17wY4)inDgFUAJf8dj diff --git a/win-linux/langs/zh_CN.ts b/win-linux/langs/zh_CN.ts index 4d82447dc..e3a5855a3 100644 --- a/win-linux/langs/zh_CN.ts +++ b/win-linux/langs/zh_CN.ts @@ -4,7 +4,7 @@ CAscApplicationManagerWrapper - + Presenter View 演示者视图 @@ -21,18 +21,18 @@ 所有编辑器窗口都将关闭。 你想继续吗? - - + + Document%1.docx 文档%1.docx - + Book%1.xlsx 工作簿%1.xlsx - + Presentation%1.pptx 演示文稿%1.pptx @@ -56,7 +56,7 @@ CAscTabWidget - + Document 打开中... @@ -637,154 +637,177 @@ CUpdateManager - - - Last check performed - 上次检查 - - - - - - - - - - - - - - - + 上次检查 + + + Check for updates 检查更新 - + Unable to check update: URL not defined. - - - + To finish updating, restart app 要完成更新,请重新启动应用程序 - - - + Restart 重新启动 - + Checking for updates... 检查更新... - + Updates are not allowed! 不允许更新! - + This folder configuration does not allow for updates! The folder name should be: 此文件夹配置不允许更新!文件夹名称应为: - + An error occurred while check updates: Update Service not found! 检查更新时发生错误: 未找到更新服务! - + Downloading new version %1 (%2%) 下载新版本 %1 (%2%) - + An error occurred while loading updates: Update Service not found! 加载更新时发生错误: 未找到更新服务! - Downloading new version %1 (0%) - 下载新版本 %1 (0%) + 下载新版本 %1 (0%) - - + Cancel 取消 - + An error occurred while loading updates: package Url is empty! 加载更新时发生错误:软件包 Url 为空! - + Update package error: md5 sum does not match the original. 更新软件包错误:md5 不匹配。 - + Preparing update... 准备更新... - + An error occurred while unzip updates: Update Service not found! 解压更新时发生错误: 未找到更新服务! - + Update is available (version %1) 可更新(版本 %1) - + Download update 下载更新 - - + Current version is up to date 当前版本已更新 - + + An error occured while unpacking the archive + + + + + Update download failed: out of memory! + + + + + Update download failed: server connection error! + + + + + Update download failed: wrong URL! + + + + + Update download failed: unable to create file! + + + + + Update download failed: network error! + + + + + A service error has occurred! + + + + + Last check performed %1 + + + + + Error opening JSON file. + + + + Update is available 可更新 - - + + Current version 当前版本 - - + + Update version 更新版本 - + Would you like to download update now? 现在要下载更新吗? - + Update is ready to install 更新已准备就绪,可以安装 - + Would you like to restart app now? 现在要重启应用程序吗? @@ -914,12 +937,12 @@ 解压更新时发生错误: 未找到更新服务! - + An error occurred while start install updates! 开始安装更新时发生错误! - + An error occurred while start replacing files: Update Service not found! 开始替换文件时发生错误: 未找到更新服务! diff --git a/win-linux/langs/zh_TW.ts b/win-linux/langs/zh_TW.ts index 8086d38bc..338384901 100644 --- a/win-linux/langs/zh_TW.ts +++ b/win-linux/langs/zh_TW.ts @@ -4,7 +4,7 @@ CAscApplicationManagerWrapper - + Presenter View 簡報者檢視畫面 @@ -21,18 +21,18 @@ 所有編輯器視窗將會關閉。您要繼續嗎? - - + + Document%1.docx 文件%1.docx - + Book%1.xlsx 書%1.xlsx - + Presentation%1.pptx 簡報%1.pptx @@ -56,7 +56,7 @@ CAscTabWidget - + Document 開啟中... @@ -633,154 +633,169 @@ CUpdateManager - - - - Last check performed - - - - - - - - - - - - - - - - + Check for updates - + Unable to check update: URL not defined. - - - + To finish updating, restart app - - - + Restart - + Checking for updates... - + Updates are not allowed! - + This folder configuration does not allow for updates! The folder name should be: - + An error occurred while check updates: Update Service not found! - + Downloading new version %1 (%2%) - + An error occurred while loading updates: Update Service not found! - - Downloading new version %1 (0%) - - - - - + Cancel 取消 - + An error occurred while loading updates: package Url is empty! - + Update package error: md5 sum does not match the original. - + Preparing update... - + An error occurred while unzip updates: Update Service not found! - + Update is available (version %1) - + Download update 下載更新 - - + Current version is up to date - + + An error occured while unpacking the archive + + + + + Update download failed: out of memory! + + + + + Update download failed: server connection error! + + + + + Update download failed: wrong URL! + + + + + Update download failed: unable to create file! + + + + + Update download failed: network error! + + + + + A service error has occurred! + + + + + Last check performed %1 + + + + + Error opening JSON file. + + + + Update is available - - + + Current version - - + + Update version - + Would you like to download update now? - + Update is ready to install - + Would you like to restart app now? @@ -898,12 +913,12 @@ 發行說明 - + An error occurred while start install updates! - + An error occurred while start replacing files: Update Service not found! From 9b8f71213cd40260291735e3f4e705cd74393a05 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Tue, 3 Oct 2023 09:42:08 +0300 Subject: [PATCH 266/298] Revert "Merge pull request #875 from ONLYOFFICE/feature/download_widget" This reverts commit eb652e4c4c322a84f4b15252dc7c12e985d8677c, reversing changes made to 55d5e39a087802b5812ea42812e1a8fad0c47e3d. --- win-linux/res/icons/downloading.gif | Bin 0 -> 2669 bytes win-linux/res/icons/downloading.svg | 4 - win-linux/res/icons/downloading@1.5x.gif | Bin 0 -> 3481 bytes win-linux/res/icons/downloading_2x.gif | Bin 0 -> 3235 bytes win-linux/res/styles/download.qss | 147 ----------- win-linux/res/styles/styles.qss | 100 +++++++- win-linux/res/styles/styles@1.25x.qss | 42 +++- win-linux/res/styles/styles@1.5x.qss | 42 +++- win-linux/res/styles/styles@1.75x.qss | 42 +++- win-linux/res/styles/styles@2.5x.qss | 50 +++- win-linux/res/styles/styles@2x.qss | 50 +++- win-linux/res/styles/styles@3.5x.qss | 50 +++- win-linux/res/styles/styles@3x.qss | 50 +++- win-linux/res/styles/styles@4.5x.qss | 50 +++- win-linux/res/styles/styles@4x.qss | 50 +++- win-linux/res/styles/styles@5x.qss | 50 +++- win-linux/resources.qrc | 4 +- win-linux/src/components/cdownloadwidget.cpp | 241 +++++++++++-------- win-linux/src/components/cdownloadwidget.h | 34 ++- win-linux/src/components/cpushbutton.cpp | 203 ++++++++++++---- win-linux/src/components/cpushbutton.h | 36 ++- win-linux/src/windows/cmainwindow.cpp | 35 +-- 22 files changed, 927 insertions(+), 353 deletions(-) create mode 100644 win-linux/res/icons/downloading.gif delete mode 100644 win-linux/res/icons/downloading.svg create mode 100644 win-linux/res/icons/downloading@1.5x.gif create mode 100644 win-linux/res/icons/downloading_2x.gif delete mode 100644 win-linux/res/styles/download.qss diff --git a/win-linux/res/icons/downloading.gif b/win-linux/res/icons/downloading.gif new file mode 100644 index 0000000000000000000000000000000000000000..642e7ea61f9075f2ed3d56884eacba76b6bbc685 GIT binary patch literal 2669 zcmaJ?c|cS59S`@7^#BDtVnFdA$IG2S(2x+M3Z@VXN)bcyfB-p6!hIwXfh2?+gd>C_ zTm}#ns?<7l?Pk|)o!dOR7ImF#cXanUcXt>2yzxVroKA-RL`+ncc%I47- z!bnsk>QfC$Y97nBT&e0BG4u=whprcxW^f%>6c!h=`&z2jon^e3u3v1oIk+8jMdtIv z=jOD|*)!(8n;(86Fq~_$jh-+~D{T|`XGh<=^FgX{>6qgNY;mi{ui8f@v)iWyLpM2w zg-XZk9o;>*@4jDTm{@-But8_2wT)qQm-wv%`&;K4`p>;}`+=mhAJV_cYQK2WINoV@ zX4`M@OpEF5bELD2kY*O&FmY@7k#WG)q_-9trVMsxu5~HTG?&&iVz$}_2M6`Wt||BQ z*u>=Bd-oXnOEmrEO7r;es7q%XEH=3xAlE~a+0u5lU2PdPTdkzdC35GIplkNp?T7UC z1#0_3wrSy=JIhwbNT;Q@t9MZ6x?r4KH1#^f9gY(749)PyyUQPUy5ua@*&WEq!K zebfD8Zs+(^s_wjU_;Q-=e7k+W?>2_IfNVq2dco`n&L<)ttatdVUz2JL~Ut5_H|Vn8E4IdUb8rr@Yp5kw}UX$%}hB`}EO z6f}_l(eMNs9wK205R*V%5Y054BR3YLL6 zQi6f;TlwFA|MTyEeg4mX{QYl#{mY*p|LLn6vxPI+xSKqwy#?s|W zuP-iKyf8m^es*TseQs)UVtmXsIx;-u9CQry_x0L)Y*vf8+tg(==sP>w&+6LFXf>@Z z%}tFB^>wv1YL)V|LN1e5S5-!PC~Bf`T%LxO_>1N^~fXXodELE$J3Dg}Ijz^@?^g$ki*Tie=lIN6*dIwP0e z%{A(pdwQ&GEdv96t&YLI;TETBe0b8~JUBDsY|gmQ?99wP`buWonP*x-s0dUL3aE#K zXcHTEuTS)`g#(*EutjLon7Xtr{%Zd%KK3wR4*>Rc+VyR1$)~WVl8@K#B^>v`gaS+; zz--V)zO0M%@90R_Y)nYmexN4B2NnWgK>!x#frT7G9STX>n7T2kAGgRn92?Uf- zK*79-k`7xHR?kP0JJbb+xMk3o+e-8)VMUHG1Bve@CWp8K*wnznGW(4 z!jqaOP>)wHyjH2DOZri$D#T88z#lmQla7`qLj&qpTH;`rR2~XWPo4N^m zVN)Vzcad)&d6no|#nzo$>4APMzrZ+LDK3tO2-xgAPhK9~7(tLAh95G^FPfik&RA^r zbgWN(5iz7dDcTJ?h&wjKhr*%p<(lsDEKQy!Ypuo@KVWjQ#qB;gJL@BWR2XT6cx{|U z7q^yS;|KKig6VkL-njd1~2UsjE zJv}~1B#Bj|C@?-yR9&X8PLAzL{u1Qs{CH|7-me#zyk;tCu~?oHL`E@Md-~){Cr?+N Y&{sBhbv*}Joo3H@a@l(B8C2^30nP4VX8-^I literal 0 HcmV?d00001 diff --git a/win-linux/res/icons/downloading.svg b/win-linux/res/icons/downloading.svg deleted file mode 100644 index b358e294b..000000000 --- a/win-linux/res/icons/downloading.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/win-linux/res/icons/downloading@1.5x.gif b/win-linux/res/icons/downloading@1.5x.gif new file mode 100644 index 0000000000000000000000000000000000000000..37feb0d98c44d0f38c1ab4fe5d3c3018bcc6ab31 GIT binary patch literal 3481 zcmd6oXd^}~Fcdl+yG z$>|KvZjQ;RI+s_@%x^l9cZqtgQru!VUsRc0qKe3>7vySuGh1Xu3VLRXR9>E0ta6oh zeW2)RzGFO|D)&CG4wh6Um(`z4D~K(=v?r}0BQwi4U3;SFN~XFY{9@&)%(4S1<+0^m zhm?H*d7S~py)sQh=iP_8`N#dnhwn-+?@evIqaUdoo~yWZw{2`Ou%!2h>h{OFvDQ1& zcc*6xuH2Tj4Ww(D=NBIeGD})IueEgcOw7(HDz%){{6XVlVQs6dqVa}qJh^qaw7s{u zLVK%!P+8kVOV>6H-|rk-Xdb>-b8GB`qGxzyyk~eqPxLBJiE4(!_c_Kq~tgy9JH`}3`Nv!HlRA0U^KG#1nJ2^Rd zR8}`OJ0F{==;+gxRBHPs<_r%W*L^(NHZ&Dp`qAXVBU!1sb71tGx^-~szQJG!`B0(K zHYcbq85ce|nxVOAm`o|Dxlq*>lHGXSFf}$YomSmGFfeGmci%7T(yhq{cP3^c%C0xx z9*r$(I;U#wnOKOHH%EL}8kbigP`34q&l_eII2AWI%C1D!m9T=guHi|;)GV*OO`NZp zSa_6QD0j{5mKT>OmC9$&o;`p59Qr?aIXvGO>>Cm8;}z;l#uH6VKuO?HWKbxY#uPKb z-@W@11x!{PEJjDev0R=f=9`S&}1T+NFcfrNMszz&4WnsAniskzc9c}$d2&{qxmg+fp4A|j#w=4 zAP^D~67UHwc)l=}K%!Eq1R|M0CgZ>goG6JWW+vizBJ7F+4HmJ4T!EO&=b;frW;Fkd z*b@UPeX)gjK~T_-!aNavX+wAxKc0}t6c9*wA|XB=+1Ju)kvI(gsf?Gd7DXfpU_uxy z;-3++V6Ys!0)yWDx)HJvRO1mM_5=j%oGb8&YkQ`|@-UvDavM4@`Ql3l27 z-Y#Aw+6v3yiNs7E3tsW&0`FyZ_ph=ZK0=r&<_jbE{8K9_2<7m_d=ZB)K$A&$GTP|~ zm&fKOh@6obz1T7h7IM$RY(F7C9=+6L5AI6}0NbVRj*g+=+?Xz89EC_>;@qQMsW@gd znYi24l@vo{x?z@i_W#;E0w{`rBxO}{Rvv*kA|HP|2jI((Ckf_(<0Ay;#N_#Z{{63i z{_y=jzWe*%{`&1-o<05M&wu*k*I#}4#UGx0{@LT-Kl=2O-#uJhcrZVA|K9A3ae8WU z;_mp^=!ikD8y>ndIMCmB`{P@^H*Z}3=vvR!?yk;`_O>gRTQ9XVH#IiY*J*2Os;eq1 zG-{QyTv1k9Qd}f2EXdEx&5>niWlA$HO48F(FMODC{#Dbb zt&t<$Lx%SPYXf}GgsCzt&7&d`y@=?a?9HK9AQZG7*l&j_fW1J~FG1M`-!#_L4C0N$ zQAye-0cx&^$;${dL_)nFHZTrG>IH?>j@HJcvUH+K75NzU|7MnzDzZO+d%%*J=Pd z`i{q4T(nR6R_{(nhTJJU_-m22{s7si54)Z(w4MX9QH7z-guLD=tc^CkZq24mfUFIWr9-hPcJ!wq8e5d@ z$b4VB!ysgh^%n2%zzmt#xkR5IMr6@GGW+?15<~IZ7n-7)$ws+?c;WOr-d#`ZxvVR_ z2SxRHYo`cwmkwAERA0}O=(?SOjJsX^jH5Sw2wJaV1a-fSv#2KA+hGGZLNNPXxQhgYq!U!^1E z$J)7^1ijY!=UIBotfh9VPigtM#bN6W0DM{*f84dbevmR~H+uNzLQ+K;1mg+5Bn zu_V;3H(Nbb#0lv?4Qhn@y@o6|?K1XJBK4Cwc2cXsKsCLib|_~nlC0CINV2l*owuZc zMr{L)DoO==sWE7rjmmMgyU1hh7Ld3ghh+!kfDASjM4bSlZk+}qyA2Fhjzrx82-~QB z5m_V@2qTP6in}0y;zAHQCWaLr9xZwm)?Aw>$Wlfw8ke z-+VWLu{(mv_;Wx;t=3#A09>MXLX9c4gY>Q2-#6}}9@PuBy!Dnf)^Y*qy8S9zW^aL8 zbMqnm2JnV~8eR9;>gTpa8S&X*YKJx8N*b~72JReWYN%ggW&nEwYV2q+jXP8kZY=Qx qw(^$E*4VS_5Zg7E2x4Oj-d=+mm*Zz7`X190eNj>?e={>^&wl}clL;aK literal 0 HcmV?d00001 diff --git a/win-linux/res/icons/downloading_2x.gif b/win-linux/res/icons/downloading_2x.gif new file mode 100644 index 0000000000000000000000000000000000000000..791e1d9d3a70bf505fdbdba0b1042ad784a34c31 GIT binary patch literal 3235 zcmbVNcR-VO8V)i=R76A&ln@j_Mh0XmDujTb3;~7K(FPJA0!d85hJ2AdLs$~_MwTE5 zG6g}ji2JUmR$Do4YHG&NjptVqPGa zl>Cy;T_Jf&c9z`Qh=U(`wRv*o3U?n$1WSsU&sd+s6Wap`7X-$`;y0@sR!M|)w z**6)TS(shXlu^-qwDba!mH&9|+D$jZqLS2XU+Xv-=tXUkjs3wnaml^%*dxw86X z$(f3(>b!i#5qVoeo-(SSF0rs$R#=r$R34I36Oh;LncKz8=@I5u9+MT&6RPh&d*v@J zi9g-MK$=5~+T&8P1dW&YwZq2?J9A5`of9kKJE!+2DP>(#-2)@}we3~CW8TuzQ`w4# zGf&fdrt-Qc$r-%`Ma6I4ym|Zft=ZdEUMzn%x|>;eFSh zSRp$&oGZZwaYK20N8C5VV>m326fyf|G81{7R`xg$>M4S+YuZ!z@E%@e$3zJBM3_Lz2 zCdMwt-cBG2#S`gtI-WqnlSsBuVJnW~OW3ite6jfgg9}$2EaC|zJOLkzGO~jNQ4&WS zbUJS#Qt0WqNX!@8y)$GNEQrL%vW0k}9RVL1iTZk1EtdFlzi;D%)nflRAs6q<6$_$7 z!CWXeUjW1Gep(1Egl-t#A|5P-9pNGfj*8^+CGIYcIQYem!{acRL}voaiRenD6C7A% zB9TrbySUO^NKQ5hM`(xEOu-vUqs7 zd^j;8I2tN%|Mky*{QYm={q-+@{?i}-@cTF4e)GGpU;p+uuYUdV#q+smPoK=rJpSs- zM-RVvaR1(~KL6z}?%uh5>*kH?)7PdxyLx5v^2GS1vC)eo!$X4u{TKRr&-Zkn>*_q) z(caeDa;CYdv7x@Mwx+tOvZB09S$evpxTvr|kuT57&B@Nn%t%j5O-Vi_L!?QG3Gs2U zG0{;HvFM~wz>kawKfwzN4dHTvgV>*ba{SoQBOiYh7;yNIzn||xA8#+u1N%MP_qn;U zT$s*Id-v>i+_jTIr%@?n2YV8cfVZ=?vEE^2x!q#hR&$&g)^y8e6XQ)rh8qnw=&#pX zr@MB|YMoWuE44H=)YVj1zy)LWotnBf2Eo|CT?2mth8T=yf=rs6k}7py!J<-GE8Nra zQ}<_O7qj*&6dn#0l@%V!d}>uyKy4barM0a&wXKubk&<-2x34?7Z!oD}I&`6bw0C6u z{N>53<5Q#4LpKI*jdf2B_ml43e=zdk5$U1*%*6r@rq;8)Jac#;kyT^kgQn;i+k{CWwiu`FcHb)yySj`cS3@Wu`LB_LS5VjFx#; zc9s^hNl#I*E)I!{+QH%Mh|))vVDtc^0T>Gz2CROZo{?#{DJM6_PRp;Lus}=2FH~8k zqc7E0+ZYq0qgJ^DstZspfZ}BofbIckaCT1aC-QuSp-xe8k)hhgvhp%D#8_BcXRLy# zm>O}pMv=%;`8B|y4IJb}4kzFsqa1}r#Vb#jDpwl8q`kE_*VWf)Bb)cNv~ET^B6%%5 zL}e+H&U+@CWlRiU+6zqH)it%cjtz|sx)DuH5lif#ji9Yq{wM(*2xvgCtG=PJ zsc8vV>%RskE(dD>SPzt)epY!Nj6mGlJI;1?o$D~-_VyXIY8wlM#@avFtQxTD1FMhB z2i9{8*0V6$g@G*i`5|jNVRLU^FG1UAXn06lf1_x8LPsCbSJMd%)lrLEI`tJGVgMq6 zGL1tJIgPEWA#z)f!2Y~o>I|6rUKko3hDHP5iOpvgTW{8dlj7Y!FlcBza&cs(n$E=K z3AMN#oNLoN;-nC7J&3o7bjgr0Ach`Gu1snmQN?0aB?ie+Tl3^m2GL;&)P2bDu*QcIkvwY4eEQfg(YF3&f$iuWxpDUP@GFRv)K-Ca{#S6`pl zv|zJ^2Fi3$b{!ZTVvJlIC0`n!aGtz!6*F~h`ucT}{p~xq0}tH2djO9A!$+QO=;?oG zulabHHoC`yGGy%I66iF*Gb@dYKnCI#?4!|mZ+c^oKHUu(n5!{xWYkXz#_@8NM~3i6BbDU zm89hXMx!ctLcumNu|GseY~c$LviKB~4}vlol$}AD3Ca{uPC{qfx}8Y;7&#lh>+S)sa1;obKtO?5B%!hBUPgpoXf`s$ za+P|T`YKDr%G5efZfX^M7|qwV)j+iEI1u^#cqiy(x)nN!-eP03B|6z4Y8x6*4FM2n qU=INSmIwrOb<32|o7+T&xNFQO8$n>ls)&aJ06nNBB>|@}JO2%8H|O{O literal 0 HcmV?d00001 diff --git a/win-linux/res/styles/download.qss b/win-linux/res/styles/download.qss deleted file mode 100644 index 1db227a6f..000000000 --- a/win-linux/res/styles/download.qss +++ /dev/null @@ -1,147 +0,0 @@ - -CDownloadWidget {background: #ffffff;} -QWidget#contentArea {background: #ffffff;} -QPushButton {padding: 0px; font-weight: normal;} -QPushButton:hover {background-color: #cecece;} -QPushButton:pressed {background-color: #b7b7b7;} -QPushButton::menu-indicator {width: 0px; height: 0px;} -QPushButton#buttonCancel {border: none; margin: 0px; padding: 0px; color: #666666; font-family: "Open Sans", sans-serif, "Arial";} - -QProgressBar {background-color: #cacaca; border-color: #cacaca;} -QProgressBar::chunk {background-color: #2b86b7;} - -QLabel#labelName {color: #666666; font-family: "Open Sans", sans-serif, "Arial";} - -QScrollArea {border: none;} -QScrollBar {background: transparent;} -QScrollBar:vertical {margin: 0px; border: none; border-radius: 0px; background: transparent;} -QScrollBar::handle:vertical {background: #cacaca;} -QScrollBar::add-line:vertical {height: 10px; border: none; border-radius: 0px; - background: transparent; subcontrol-position: bottom; subcontrol-origin: margin;} -QScrollBar::sub-line:vertical {height: 10px; border: none; border-radius: 0px; - background: transparent; subcontrol-position: top; subcontrol-origin: margin;} -QScrollBar::up-arrow:vertical, -QScrollBar::down-arrow:vertical {background: none;} -QScrollBar::add-page:vertical, -QScrollBar::sub-page:vertical {background: none;} -QAbstractScrollArea::corner {background: transparent;} - -/* dark theme */ -CDownloadWidget[uitheme="theme-dark"] {background: #404040;} -CDownloadWidget[uitheme="theme-dark"] QWidget#contentArea {background: #404040;} -CDownloadWidget[uitheme="theme-dark"] QPushButton#buttonCancel {color: #d9d9d9;} -CDownloadWidget[uitheme="theme-dark"] QPushButton#buttonCancel:hover {background: #555;} -CDownloadWidget[uitheme="theme-dark"] QPushButton#buttonCancel:pressed {background: #606060;} -CDownloadWidget[uitheme="theme-dark"] QLabel#labelName {color: #d9d9d9;} - -/* contrast theme */ -CDownloadWidget[uitheme="theme-contrast-dark"] {background: #2a2a2a;} -CDownloadWidget[uitheme="theme-contrast-dark"] QWidget#contentArea {background: #2a2a2a;} -CDownloadWidget[uitheme="theme-contrast-dark"] QPushButton#buttonCancel {color: #d9d9d9;} -CDownloadWidget[uitheme="theme-contrast-dark"] QPushButton#buttonCancel:hover {background: #555;} -CDownloadWidget[uitheme="theme-contrast-dark"] QPushButton#buttonCancel:pressed {background: #606060;} -CDownloadWidget[uitheme="theme-contrast-dark"] QLabel#labelName {color: #d9d9d9;} - -/* 1.0x */ -QPushButton#buttonCancel {padding-left: 6px; padding-right: 6px; min-height: 22px; font-size: 12px;} -QProgressBar {border-radius: 2px; max-height: 5px; margin-right: 10px; margin-top: 1px;} -QProgressBar::chunk {border-radius: 2px;} -QLabel#labelName {font-size: 16px;} -QScrollBar:vertical {width: 10px;} -QScrollBar::handle:vertical {min-height: 25px; border-radius: 3px;} - -/* 1.25x */ -CDownloadWidget[zoom="1.25x"] QPushButton#buttonCancel {padding-left: 8px; padding-right: 8px; min-height: 28px; font-size: 15px;} -CDownloadWidget[zoom="1.25x"] QProgressBar {border-radius: 2px; max-height: 6px; margin-right: 13px; margin-top: 1px;} -CDownloadWidget[zoom="1.25x"] QProgressBar::chunk {border-radius: 2px;} -CDownloadWidget[zoom="1.25x"] QLabel#labelName {font-size: 20px;} -CDownloadWidget[zoom="1.25x"] QScrollBar:vertical {width: 13px;} -CDownloadWidget[zoom="1.25x"] QScrollBar::handle:vertical {min-height: 31px; border-radius: 4px;} - -/* 1.5x */ -CDownloadWidget[zoom="1.5x"] QPushButton#buttonCancel {padding-left: 9px; padding-right: 9px; min-height: 33px; font-size: 18px;} -CDownloadWidget[zoom="1.5x"] QProgressBar {border-radius: 3px; max-height: 8px; margin-right: 15px; margin-top: 2px;} -CDownloadWidget[zoom="1.5x"] QProgressBar::chunk {border-radius: 3px;} -CDownloadWidget[zoom="1.5x"] QLabel#labelName {font-size: 24px;} -CDownloadWidget[zoom="1.5x"] QScrollBar:vertical {width: 15px;} -CDownloadWidget[zoom="1.5x"] QScrollBar::handle:vertical {min-height: 38px; border-radius: 5px;} - -/* 1.75x */ -CDownloadWidget[zoom="1.75x"] QPushButton#buttonCancel {padding-left: 11px; padding-right: 11px; min-height: 39px; font-size: 18px;} -CDownloadWidget[zoom="1.75x"] QProgressBar {border-radius: 3px; max-height: 8px; margin-right: 15px; margin-top: 2px;} -CDownloadWidget[zoom="1.75x"] QProgressBar::chunk {border-radius: 3px;} -CDownloadWidget[zoom="1.75x"] QLabel#labelName {font-size: 24px;} -CDownloadWidget[zoom="1.75x"] QScrollBar:vertical {width: 18px;} -CDownloadWidget[zoom="1.75x"] QScrollBar::handle:vertical {min-height: 44px; border-radius: 5px;} - -/* 2.0x */ -CDownloadWidget[zoom="2x"] QPushButton#buttonCancel {padding-left: 12px; padding-right: 12px; min-height: 44px; font-size: 24px;} -CDownloadWidget[zoom="2x"] QProgressBar {border-radius: 4px; max-height: 10px; margin-right: 20px; margin-top: 2px;} -CDownloadWidget[zoom="2x"] QProgressBar::chunk {border-radius: 4px;} -CDownloadWidget[zoom="2x"] QLabel#labelName {font-size: 32px;} -CDownloadWidget[zoom="2x"] QScrollBar:vertical {width: 20px;} -CDownloadWidget[zoom="2x"] QScrollBar::handle:vertical {min-height: 50px; border-radius: 6px;} - -/* 2.25x */ -CDownloadWidget[zoom="2.25x"] QPushButton#buttonCancel {padding-left: 14px; padding-right: 14px; min-height: 50px; font-size: 27px;} -CDownloadWidget[zoom="2.25x"] QProgressBar {border-radius: 5px; max-height: 11px; margin-right: 23px; margin-top: 2px;} -CDownloadWidget[zoom="2.25x"] QProgressBar::chunk {border-radius: 5px;} -CDownloadWidget[zoom="2.25x"] QLabel#labelName {font-size: 36px;} -CDownloadWidget[zoom="2.25x"] QScrollBar:vertical {width: 23px;} -CDownloadWidget[zoom="2.25x"] QScrollBar::handle:vertical {min-height: 56px; border-radius: 7px;} - -/* 2.5x */ -CDownloadWidget[zoom="2.5x"] QPushButton#buttonCancel {padding-left: 15px; padding-right: 15px; min-height: 55px; font-size: 30px;} -CDownloadWidget[zoom="2.5x"] QProgressBar {border-radius: 5px; max-height: 13px; margin-right: 25px; margin-top: 3px;} -CDownloadWidget[zoom="2.5x"] QProgressBar::chunk {border-radius: 5px;} -CDownloadWidget[zoom="2.5x"] QLabel#labelName {font-size: 40px;} -CDownloadWidget[zoom="2.5x"] QScrollBar:vertical {width: 25px;} -CDownloadWidget[zoom="2.5x"] QScrollBar::handle:vertical {min-height: 63px; border-radius: 8px;} - -/* 2.75x */ -CDownloadWidget[zoom="2.75x"] QPushButton#buttonCancel {padding-left: 17px; padding-right: 17px; min-height: 61px; font-size: 33px;} -CDownloadWidget[zoom="2.75x"] QProgressBar {border-radius: 6px; max-height: 14px; margin-right: 28px; margin-top: 3px;} -CDownloadWidget[zoom="2.75x"] QProgressBar::chunk {border-radius: 6px;} -CDownloadWidget[zoom="2.75x"] QLabel#labelName {font-size: 44px;} -CDownloadWidget[zoom="2.75x"] QScrollBar:vertical {width: 28px;} -CDownloadWidget[zoom="2.75x"] QScrollBar::handle:vertical {min-height: 69px; border-radius: 8px;} - -/* 3.0x */ -CDownloadWidget[zoom="3x"] QPushButton#buttonCancel {padding-left: 18px; padding-right: 18px; min-height: 66px; font-size: 36px;} -CDownloadWidget[zoom="3x"] QProgressBar {border-radius: 6px; max-height: 15px; margin-right: 30px; margin-top: 3px;} -CDownloadWidget[zoom="3x"] QProgressBar::chunk {border-radius: 6px;} -CDownloadWidget[zoom="3x"] QLabel#labelName {font-size: 48px;} -CDownloadWidget[zoom="3x"] QScrollBar:vertical {width: 30px;} -CDownloadWidget[zoom="3x"] QScrollBar::handle:vertical {min-height: 75px; border-radius: 9px;} - -/* 3.5x */ -CDownloadWidget[zoom="3.5x"] QPushButton#buttonCancel {padding-left: 21px; padding-right: 21px; min-height: 77px; font-size: 42px;} -CDownloadWidget[zoom="3.5x"] QProgressBar {border-radius: 7px; max-height: 18px; margin-right: 35px; margin-top: 4px;} -CDownloadWidget[zoom="3.5x"] QProgressBar::chunk {border-radius: 7px;} -CDownloadWidget[zoom="3.5x"] QLabel#labelName {font-size: 56px;} -CDownloadWidget[zoom="3.5x"] QScrollBar:vertical {width: 35px;} -CDownloadWidget[zoom="3.5x"] QScrollBar::handle:vertical {min-height: 88px; border-radius: 11px;} - -/* 4.0x */ -CDownloadWidget[zoom="4x"] QPushButton#buttonCancel {padding-left: 24px; padding-right: 24px; min-height: 88px; font-size: 48px;} -CDownloadWidget[zoom="4x"] QProgressBar {border-radius: 8px; max-height: 20px; margin-right: 40px; margin-top: 4px;} -CDownloadWidget[zoom="4x"] QProgressBar::chunk {border-radius: 8px;} -CDownloadWidget[zoom="4x"] QLabel#labelName {font-size: 64px;} -CDownloadWidget[zoom="4x"] QScrollBar:vertical {width: 40px;} -CDownloadWidget[zoom="4x"] QScrollBar::handle:vertical {min-height: 100px; border-radius: 12px;} - -/* 4.5x */ -CDownloadWidget[zoom="4.5x"] QPushButton#buttonCancel {padding-left: 27px; padding-right: 27px; min-height: 99px; font-size: 54px;} -CDownloadWidget[zoom="4.5x"] QProgressBar {border-radius: 9px; max-height: 23px; margin-right: 45px; margin-top: 5px;} -CDownloadWidget[zoom="4.5x"] QProgressBar::chunk {border-radius: 9px;} -CDownloadWidget[zoom="4.5x"] QLabel#labelName {font-size: 72px;} -CDownloadWidget[zoom="4.5x"] QScrollBar:vertical {width: 45px;} -CDownloadWidget[zoom="4.5x"] QScrollBar::handle:vertical {min-height: 113px; border-radius: 14px;} - -/* 5.0x */ -CDownloadWidget[zoom="5x"] QPushButton#buttonCancel {padding-left: 30px; padding-right: 30px; min-height: 110px; font-size: 60px;} -CDownloadWidget[zoom="5x"] QProgressBar {border-radius: 10px; max-height: 25px; margin-right: 50px; margin-top: 5px;} -CDownloadWidget[zoom="5x"] QProgressBar::chunk {border-radius: 10px;} -CDownloadWidget[zoom="5x"] QLabel#labelName {font-size: 80px;} -CDownloadWidget[zoom="5x"] QScrollBar:vertical {width: 50px;} -CDownloadWidget[zoom="5x"] QScrollBar::handle:vertical {min-height: 125px; border-radius: 15px;} diff --git a/win-linux/res/styles/styles.qss b/win-linux/res/styles/styles.qss index ef9bbcc48..28a17e0e0 100644 --- a/win-linux/res/styles/styles.qss +++ b/win-linux/res/styles/styles.qss @@ -128,7 +128,22 @@ QPushButton#toolButtonMain[class=normal]:hover { /*border-bottom: 1px solid #b6b6b6;*/ /*}*/ -QPushButton::menu-indicator {width: 0px; height: 0px;} +QPushButton::menu-indicator { + /*border: 1px solid white;*/ + width: 10px; + height: 10px; + image: url(:/menu_indicator_normal_light.svg); + left: -2px; + top: -2px; +} + +QPushButton::menu-indicator:disabled { + image: url(:/menu_indicator_pressed_light.svg); +} + +QPushButton::menu-indicator:hover { + image: url(:/menu_indicator_hover_light.svg); +} /*QPushButton[theme=dark]::menu-indicator {*/ /*border-image: url(:/res/icons/menu-indicator-dark.png) 0 0 0 0 repeat repeat;*/ @@ -142,7 +157,15 @@ QPushButton::menu-indicator {width: 0px; height: 0px;} /*border-image: url(:/res/icons/menu-indicator-dark.png) 0 10 0 0 repeat repeat;*/ /*}*/ -QPushButton#toolButtonDownload {max-width: 40px; width: 40px; max-height: 28px; height: 28px;} +QPushButton#toolButtonDownload { + background-origin: content; + padding: 6px; +} + +QPushButton#toolButtonDownload::menu-indicator { + top: -10px; + left: -4px; +} /**************************/ /* dark theme definitions */ @@ -190,15 +213,13 @@ QPushButton#toolButtonDownload {max-width: 40px; width: 40px; max-height: 28px; } #mainPanel[uitheme=theme-dark] QPushButton#toolButtonMinimize:hover, - #mainPanel[uitheme=theme-dark] QPushButton#toolButtonMaximize:hover, - #mainPanel[uitheme=theme-dark] QPushButton#toolButtonDownload:hover + #mainPanel[uitheme=theme-dark] QPushButton#toolButtonMaximize:hover { background-color: #555; } #mainPanel[uitheme=theme-dark] QPushButton#toolButtonMinimize:pressed, - #mainPanel[uitheme=theme-dark] QPushButton#toolButtonMaximize:pressed, - #mainPanel[uitheme=theme-dark] QPushButton#toolButtonDownload:pressed + #mainPanel[uitheme=theme-dark] QPushButton#toolButtonMaximize:pressed { background-color: #606060; } @@ -231,8 +252,7 @@ QPushButton#toolButtonDownload {max-width: 40px; width: 40px; max-height: 28px; } #mainPanel[uitheme=theme-contrast-dark] QPushButton#toolButtonMinimize:hover, - #mainPanel[uitheme=theme-contrast-dark] QPushButton#toolButtonMaximize:hover, - #mainPanel[uitheme=theme-contrast-dark] QPushButton#toolButtonDownload:hover + #mainPanel[uitheme=theme-contrast-dark] QPushButton#toolButtonMaximize:hover { background-color: #555; } @@ -254,6 +274,70 @@ QPushButton#toolButtonDownload {max-width: 40px; width: 40px; max-height: 28px; } +/* download widget */ + +QMenu#menuButtonDownload { + /*padding: 0;*/ + border: 1px solid #d1d1d1; + background-color: #fafafa; +} + +QMenu[hdpi]#menuButtonDownload { + border-width: 2px; +} + + +CDownloadWidget QProgressBar { + background-color: #cacaca; + border-color: #cacaca; + border-radius: 2px; + max-height: 5px; + margin-right: 10px; + margin-top: 1px; + min-width: 200px; +} + +CDownloadWidget[hdpi] QProgressBar { + border-radius: 4px; + max-height: 10px; + margin-right: 20px; + margin-top: 2px; + min-width: 400px; +} + +CDownloadWidget QProgressBar::chunk { + background-color: #2b86b7; + border-radius: 2px; +} + +CDownloadWidget[hdpi] QProgressBar::chunk { + border-radius: 4px; +} + +CDownloadWidget QPushButton#buttonCancel { + border: none; + margin: 0; + padding: 0; + color: #666666; + font-family: 'Open Sans',sans-serif,Arial; + font-size: 12px; +} + +CDownloadWidget[hdpi] QPushButton#buttonCancel { + font-size: 24px; +} + +CDownloadWidget QLabel#labelName { + color: #666666; + font-size: 16px; + font-family: 'Open Sans',sans-serif,Arial; +} + +CDownloadWidget[hdpi] QLabel#labelName { + color: #f00; + font-size: 32px; +} + /* ToolTip*/ #CToolTip>QLabel { diff --git a/win-linux/res/styles/styles@1.25x.qss b/win-linux/res/styles/styles@1.25x.qss index a50f718a1..0cd76e02a 100644 --- a/win-linux/res/styles/styles@1.25x.qss +++ b/win-linux/res/styles/styles@1.25x.qss @@ -34,7 +34,47 @@ QPushButton#toolButtonMain[class=normal], border-bottom-width: 1px; } -QPushButton#toolButtonDownload {max-width: 50px; width: 50px; max-height: 35px; height: 35px;} +QPushButton::menu-indicator { + width: 13px; + height: 13px; + left: -2px; + top: -2px; +} + +QPushButton#toolButtonDownload { + padding: 7px; +} + +QPushButton#toolButtonDownload::menu-indicator { + top: -13px; + left: -5px; +} + +/* download widget */ + +QMenu[hdpi]#menuButtonDownload { + border-width: 1px; +} + +CDownloadWidget[hdpi] QProgressBar { + border-radius: 2px; + max-height: 6px; + margin-right: 13px; + margin-top: 1px; + min-width: 500px; +} + +CDownloadWidget[hdpi] QProgressBar::chunk { + border-radius: 2px; +} + +CDownloadWidget[hdpi] QPushButton#buttonCancel { + font-size: 15px; +} + +CDownloadWidget[hdpi] QLabel#labelName { + font-size: 20px; +} /* ToolTip*/ diff --git a/win-linux/res/styles/styles@1.5x.qss b/win-linux/res/styles/styles@1.5x.qss index 7395675ae..0389858d2 100644 --- a/win-linux/res/styles/styles@1.5x.qss +++ b/win-linux/res/styles/styles@1.5x.qss @@ -35,7 +35,47 @@ QPushButton#toolButtonMain[class=normal], border-bottom-width: 2px; } -QPushButton#toolButtonDownload {max-width: 60px; width: 60px; max-height: 42px; height: 42px;} +QPushButton::menu-indicator { + width: 15px; + height: 15px; + left: -3px; + top: -2px; +} + +QPushButton#toolButtonDownload { + padding: 9px; +} + +QPushButton#toolButtonDownload::menu-indicator { + top: -15px; + left: -6px; +} + +/* download widget */ + +QMenu[hdpi]#menuButtonDownload { + border-width: 2px; +} + +CDownloadWidget[hdpi] QProgressBar { + border-radius: 3px; + max-height: 8px; + margin-right: 15px; + margin-top: 2px; + min-width: 600px; +} + +CDownloadWidget[hdpi] QProgressBar::chunk { + border-radius: 3px; +} + +CDownloadWidget[hdpi] QPushButton#buttonCancel { + font-size: 18px; +} + +CDownloadWidget[hdpi] QLabel#labelName { + font-size: 24px; +} /* ToolTip*/ diff --git a/win-linux/res/styles/styles@1.75x.qss b/win-linux/res/styles/styles@1.75x.qss index 75caea111..1245afee0 100644 --- a/win-linux/res/styles/styles@1.75x.qss +++ b/win-linux/res/styles/styles@1.75x.qss @@ -35,7 +35,47 @@ QPushButton#toolButtonMain[class=normal], border-bottom-width: 2px; } -QPushButton#toolButtonDownload {max-width: 70px; width: 70px; max-height: 49px; height: 49px;} +QPushButton::menu-indicator { + width: 18px; + height: 18px; + left: -4px; + top: -2px; +} + +QPushButton#toolButtonDownload { + padding: 11px; +} + +QPushButton#toolButtonDownload::menu-indicator { + top: -18px; + left: -7px; +} + +/* download widget */ + +QMenu[hdpi]#menuButtonDownload { + border-width: 2px; +} + +CDownloadWidget[hdpi] QProgressBar { + border-radius: 3px; + max-height: 8px; + margin-right: 15px; + margin-top: 2px; + min-width: 600px; +} + +CDownloadWidget[hdpi] QProgressBar::chunk { + border-radius: 3px; +} + +CDownloadWidget[hdpi] QPushButton#buttonCancel { + font-size: 18px; +} + +CDownloadWidget[hdpi] QLabel#labelName { + font-size: 24px; +} /* ToolTip*/ diff --git a/win-linux/res/styles/styles@2.5x.qss b/win-linux/res/styles/styles@2.5x.qss index 478af4844..cc2b828e7 100644 --- a/win-linux/res/styles/styles@2.5x.qss +++ b/win-linux/res/styles/styles@2.5x.qss @@ -36,7 +36,55 @@ QPushButton#toolButtonMain[class=normal], border-bottom-width: 3px; } -QPushButton#toolButtonDownload {max-width: 100px; width: 100px; max-height: 70px; height: 70px;} +QPushButton::menu-indicator { + width: 25px; + height: 25px; + left: -5px; + top: -3px; +} + +/*QPushButton[theme=dark]::menu-indicator:disabled {*/ + /*border-image: url(:/res/icons/menu-indicator-dark.png) 0 0 0 20 repeat repeat;*/ +/*}*/ + +/*QPushButton[theme=dark]::menu-indicator:hover {*/ + /*border-image: url(:/res/icons/menu-indicator-dark.png) 0 20 0 0 repeat repeat;*/ +/*}*/ + +QPushButton#toolButtonDownload { + padding: 15px; +} + +QPushButton#toolButtonDownload::menu-indicator { + top: -25px; + left: -10px; +} + +/* download widget */ + +QMenu[hdpi]#menuButtonDownload { + border-width: 3px; +} + +CDownloadWidget[hdpi] QProgressBar { + border-radius: 5px; + max-height: 13px; + margin-right: 25px; + margin-top: 3px; + min-width: 500px; +} + +CDownloadWidget[hdpi] QProgressBar::chunk { + border-radius: 5px; +} + +CDownloadWidget[hdpi] QPushButton#buttonCancel { + font-size: 30px; +} + +CDownloadWidget[hdpi] QLabel#labelName { + font-size: 40px; +} /* ToolTip*/ diff --git a/win-linux/res/styles/styles@2x.qss b/win-linux/res/styles/styles@2x.qss index ccfdf15fd..019c6537b 100644 --- a/win-linux/res/styles/styles@2x.qss +++ b/win-linux/res/styles/styles@2x.qss @@ -36,7 +36,55 @@ QPushButton#toolButtonMain[class=normal], border-bottom-width: 2px; } -QPushButton#toolButtonDownload {max-width: 80px; width: 80px; max-height: 56px; height: 56px;} +QPushButton::menu-indicator { + width: 20px; + height: 20px; + left: -4px; + top: -2px; +} + +/*QPushButton[theme=dark]::menu-indicator:disabled {*/ + /*border-image: url(:/res/icons/menu-indicator-dark.png) 0 0 0 20 repeat repeat;*/ +/*}*/ + +/*QPushButton[theme=dark]::menu-indicator:hover {*/ + /*border-image: url(:/res/icons/menu-indicator-dark.png) 0 20 0 0 repeat repeat;*/ +/*}*/ + +QPushButton#toolButtonDownload { + padding: 12px; +} + +QPushButton#toolButtonDownload::menu-indicator { + top: -20px; + left: -8px; +} + +/* download widget */ + +QMenu[hdpi]#menuButtonDownload { + border-width: 2px; +} + +CDownloadWidget[hdpi] QProgressBar { + border-radius: 4px; + max-height: 10px; + margin-right: 20px; + margin-top: 2px; + min-width: 400px; +} + +CDownloadWidget[hdpi] QProgressBar::chunk { + border-radius: 4px; +} + +CDownloadWidget[hdpi] QPushButton#buttonCancel { + font-size: 24px; +} + +CDownloadWidget[hdpi] QLabel#labelName { + font-size: 32px; +} /* ToolTip*/ diff --git a/win-linux/res/styles/styles@3.5x.qss b/win-linux/res/styles/styles@3.5x.qss index 94ae90f5e..3749433f7 100644 --- a/win-linux/res/styles/styles@3.5x.qss +++ b/win-linux/res/styles/styles@3.5x.qss @@ -36,7 +36,55 @@ QPushButton#toolButtonMain[class=normal], border-bottom-width: 4px; } -QPushButton#toolButtonDownload {max-width: 140px; width: 140px; max-height: 98px; height: 98px;} +QPushButton::menu-indicator { + width: 35px; + height: 35px; + left: -7px; + top: -4px; +} + +/*QPushButton[theme=dark]::menu-indicator:disabled {*/ + /*border-image: url(:/res/icons/menu-indicator-dark.png) 0 0 0 20 repeat repeat;*/ +/*}*/ + +/*QPushButton[theme=dark]::menu-indicator:hover {*/ + /*border-image: url(:/res/icons/menu-indicator-dark.png) 0 20 0 0 repeat repeat;*/ +/*}*/ + +QPushButton#toolButtonDownload { + padding: 21px; +} + +QPushButton#toolButtonDownload::menu-indicator { + top: -35px; + left: -14px; +} + +/* download widget */ + +QMenu[hdpi]#menuButtonDownload { + border-width: 4px; +} + +CDownloadWidget[hdpi] QProgressBar { + border-radius: 7px; + max-height: 18px; + margin-right: 35px; + margin-top: 4px; + min-width: 700px; +} + +CDownloadWidget[hdpi] QProgressBar::chunk { + border-radius: 7px; +} + +CDownloadWidget[hdpi] QPushButton#buttonCancel { + font-size: 42px; +} + +CDownloadWidget[hdpi] QLabel#labelName { + font-size: 56px; +} /* ToolTip*/ diff --git a/win-linux/res/styles/styles@3x.qss b/win-linux/res/styles/styles@3x.qss index f3d46c9d5..5eb525d8e 100644 --- a/win-linux/res/styles/styles@3x.qss +++ b/win-linux/res/styles/styles@3x.qss @@ -36,7 +36,55 @@ QPushButton#toolButtonMain[class=normal], border-bottom-width: 3px; } -QPushButton#toolButtonDownload {max-width: 120px; width: 120px; max-height: 84px; height: 84px;} +QPushButton::menu-indicator { + width: 30px; + height: 30px; + left: -6px; + top: -3px; +} + +/*QPushButton[theme=dark]::menu-indicator:disabled {*/ + /*border-image: url(:/res/icons/menu-indicator-dark.png) 0 0 0 20 repeat repeat;*/ +/*}*/ + +/*QPushButton[theme=dark]::menu-indicator:hover {*/ + /*border-image: url(:/res/icons/menu-indicator-dark.png) 0 20 0 0 repeat repeat;*/ +/*}*/ + +QPushButton#toolButtonDownload { + padding: 18px; +} + +QPushButton#toolButtonDownload::menu-indicator { + top: -30px; + left: -12px; +} + +/* download widget */ + +QMenu[hdpi]#menuButtonDownload { + border-width: 3px; +} + +CDownloadWidget[hdpi] QProgressBar { + border-radius: 6px; + max-height: 15px; + margin-right: 30px; + margin-top: 3px; + min-width: 600px; +} + +CDownloadWidget[hdpi] QProgressBar::chunk { + border-radius: 6px; +} + +CDownloadWidget[hdpi] QPushButton#buttonCancel { + font-size: 36px; +} + +CDownloadWidget[hdpi] QLabel#labelName { + font-size: 48px; +} /* ToolTip*/ diff --git a/win-linux/res/styles/styles@4.5x.qss b/win-linux/res/styles/styles@4.5x.qss index a004fbeb5..a746b6230 100644 --- a/win-linux/res/styles/styles@4.5x.qss +++ b/win-linux/res/styles/styles@4.5x.qss @@ -36,7 +36,55 @@ QPushButton#toolButtonMain[class=normal], border-bottom-width: 5px; } -QPushButton#toolButtonDownload {max-width: 180px; width: 180px; max-height: 126px; height: 126px;} +QPushButton::menu-indicator { + width: 45px; + height: 45px; + left: -9px; + top: -5px; +} + +/*QPushButton[theme=dark]::menu-indicator:disabled {*/ + /*border-image: url(:/res/icons/menu-indicator-dark.png) 0 0 0 20 repeat repeat;*/ +/*}*/ + +/*QPushButton[theme=dark]::menu-indicator:hover {*/ + /*border-image: url(:/res/icons/menu-indicator-dark.png) 0 20 0 0 repeat repeat;*/ +/*}*/ + +QPushButton#toolButtonDownload { + padding: 27px; +} + +QPushButton#toolButtonDownload::menu-indicator { + top: -45px; + left: -18px; +} + +/* download widget */ + +QMenu[hdpi]#menuButtonDownload { + border-width: 5px; +} + +CDownloadWidget[hdpi] QProgressBar { + border-radius: 9px; + max-height: 23px; + margin-right: 45px; + margin-top: 5px; + min-width: 900px; +} + +CDownloadWidget[hdpi] QProgressBar::chunk { + border-radius: 9px; +} + +CDownloadWidget[hdpi] QPushButton#buttonCancel { + font-size: 54px; +} + +CDownloadWidget[hdpi] QLabel#labelName { + font-size: 72px; +} /* ToolTip*/ diff --git a/win-linux/res/styles/styles@4x.qss b/win-linux/res/styles/styles@4x.qss index 1a5a938ba..783d8ce5e 100644 --- a/win-linux/res/styles/styles@4x.qss +++ b/win-linux/res/styles/styles@4x.qss @@ -36,7 +36,55 @@ QPushButton#toolButtonMain[class=normal], border-bottom-width: 4px; } -QPushButton#toolButtonDownload {max-width: 160px; width: 160px; max-height: 112px; height: 112px;} +QPushButton::menu-indicator { + width: 40px; + height: 40px; + left: -8px; + top: -4px; +} + +/*QPushButton[theme=dark]::menu-indicator:disabled {*/ + /*border-image: url(:/res/icons/menu-indicator-dark.png) 0 0 0 20 repeat repeat;*/ +/*}*/ + +/*QPushButton[theme=dark]::menu-indicator:hover {*/ + /*border-image: url(:/res/icons/menu-indicator-dark.png) 0 20 0 0 repeat repeat;*/ +/*}*/ + +QPushButton#toolButtonDownload { + padding: 24px; +} + +QPushButton#toolButtonDownload::menu-indicator { + top: -40px; + left: -16px; +} + +/* download widget */ + +QMenu[hdpi]#menuButtonDownload { + border-width: 4px; +} + +CDownloadWidget[hdpi] QProgressBar { + border-radius: 8px; + max-height: 20px; + margin-right: 40px; + margin-top: 4px; + min-width: 800px; +} + +CDownloadWidget[hdpi] QProgressBar::chunk { + border-radius: 8px; +} + +CDownloadWidget[hdpi] QPushButton#buttonCancel { + font-size: 48px; +} + +CDownloadWidget[hdpi] QLabel#labelName { + font-size: 64px; +} /* ToolTip*/ diff --git a/win-linux/res/styles/styles@5x.qss b/win-linux/res/styles/styles@5x.qss index c92019bd9..3ad2e3f24 100644 --- a/win-linux/res/styles/styles@5x.qss +++ b/win-linux/res/styles/styles@5x.qss @@ -36,7 +36,55 @@ QPushButton#toolButtonMain[class=normal], border-bottom-width: 5px; } -QPushButton#toolButtonDownload {max-width: 200px; width: 200px; max-height: 140px; height: 140px;} +QPushButton::menu-indicator { + width: 50px; + height: 50px; + left: -10px; + top: -5px; +} + +/*QPushButton[theme=dark]::menu-indicator:disabled {*/ + /*border-image: url(:/res/icons/menu-indicator-dark.png) 0 0 0 20 repeat repeat;*/ +/*}*/ + +/*QPushButton[theme=dark]::menu-indicator:hover {*/ + /*border-image: url(:/res/icons/menu-indicator-dark.png) 0 20 0 0 repeat repeat;*/ +/*}*/ + +QPushButton#toolButtonDownload { + padding: 30px; +} + +QPushButton#toolButtonDownload::menu-indicator { + top: -50px; + left: -20px; +} + +/* download widget */ + +QMenu[hdpi]#menuButtonDownload { + border-width: 5px; +} + +CDownloadWidget[hdpi] QProgressBar { + border-radius: 10px; + max-height: 25px; + margin-right: 50px; + margin-top: 5px; + min-width: 1000px; +} + +CDownloadWidget[hdpi] QProgressBar::chunk { + border-radius: 10px; +} + +CDownloadWidget[hdpi] QPushButton#buttonCancel { + font-size: 60px; +} + +CDownloadWidget[hdpi] QLabel#labelName { + font-size: 80px; +} /* ToolTip*/ diff --git a/win-linux/resources.qrc b/win-linux/resources.qrc index 0234ca3e4..0d400f3b8 100644 --- a/win-linux/resources.qrc +++ b/win-linux/resources.qrc @@ -7,7 +7,8 @@ res/icons/message_info.svg res/icons/message_confirm.svg res/icons/message_warn.svg - res/icons/downloading.svg + res/icons/downloading.gif + res/icons/downloading_2x.gif res/icons/close.svg res/icons/close_light.svg res/icons/minimize.svg @@ -85,7 +86,6 @@ res/styles/editor.qss res/styles/message.qss res/styles/tabbar.qss - res/styles/download.qss res/styles/styles@1.5x.qss diff --git a/win-linux/src/components/cdownloadwidget.cpp b/win-linux/src/components/cdownloadwidget.cpp index 1fe54eadc..725fea38a 100644 --- a/win-linux/src/components/cdownloadwidget.cpp +++ b/win-linux/src/components/cdownloadwidget.cpp @@ -31,81 +31,100 @@ */ #include "components/cdownloadwidget.h" -#include "components/celipsislabel.h" -#include "cascapplicationmanagerwrapper.h" + #include #include #include +#include +#include +#include +#include #include -#include +#include +#include "qcefview.h" #include "common/Types.h" +#include "windows/cwindowbase.h" + +#include -#define DOWNLOAD_WIDGET_MIN_SIZE QSize(450, 250) -#define MARGINS 6 -#define SPACING 6 +#define DOWNLOAD_WIDGET_MAX_WIDTH 350 using namespace NSEditorApi; +CProfileMenuFilter::CProfileMenuFilter(QObject *parent) + : QObject(parent), _parentButton(NULL) +{} + +bool CProfileMenuFilter::eventFilter(QObject * obj, QEvent *event) +{ + if (!_parentButton) + return false; + + QMenu * menu = dynamic_cast(obj); + if ( event->type() == QEvent::Show && obj == _parentButton->menu() ) { + QPoint pos = ((QWidget*)_parentButton->parent())->mapToGlobal(_parentButton->pos()); + pos += QPoint(_parentButton->width() - menu->width(), _parentButton->height() + 6); + _parentButton->menu()->move(pos); + + return true; + } + + return false; +} -class CDownloadWidget::CDownloadItem +void CProfileMenuFilter::setMenuButton(QPushButton * button) { + _parentButton = button; +} + +class CDownloadWidget::CDownloadItem { public: CDownloadItem(QWidget * w) : _p_progress(w), _is_temp(true) {} QWidget * progress() const { return _p_progress; } + bool is_temporary() const { return _is_temp; } void set_is_temporary(bool v) { _is_temp = v; } - private: QWidget * _p_progress; bool _is_temp; }; - CDownloadWidget::CDownloadWidget(QWidget *parent) - : QDialog(parent) + : QWidget(parent) + , CScalingWrapper(parent) , m_pToolButton(new CPushButton) { - setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); - setMinimumSize(DOWNLOAD_WIDGET_MIN_SIZE); - - QVBoxLayout *main_lut = new QVBoxLayout(this); - main_lut->setContentsMargins(0, 0, 0, 0); - main_lut->setSpacing(0); - setLayout(main_lut); - - m_pArea = new QScrollArea(this); - m_pArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); - m_pArea->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded); - m_pArea->setWidgetResizable(true); - - m_pContentArea = new QWidget(m_pArea); - m_pContentArea->setObjectName("contentArea"); - QVBoxLayout *lut = new QVBoxLayout(m_pContentArea); - lut->setContentsMargins(MARGINS, MARGINS, MARGINS, MARGINS); - lut->setSpacing(SPACING); - m_pContentArea->setLayout(lut); - m_pArea->setWidget(m_pContentArea); - main_lut->addWidget(m_pArea); - m_pContentArea->setGeometry(0, 0, width(), height()); - - connect(this, &CDownloadWidget::downloadCanceled, this, [=](int id) { - AscAppManager::getInstance().CancelDownload(id); - slot_downloadCanceled(id); - }); + setLayout(new QVBoxLayout); + m_defMargins = QMargins(layout()->contentsMargins()); + m_defSpacing = layout()->spacing(); + + connect(this, &CDownloadWidget::downloadCanceled, this, &CDownloadWidget::slot_downloadCanceled, Qt::QueuedConnection); + + setMaximumWidth(DOWNLOAD_WIDGET_MAX_WIDTH); m_pToolButton->setObjectName("toolButtonDownload"); - m_pToolButton->setProperty("act", "tool"); - m_pToolButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); - m_pToolButton->setVisible(false); - connect(m_pToolButton, &QPushButton::clicked, this, [=]() { - show(); - }); - m_pToolButton->setAnimatedIcon(":/downloading.svg"); - QSpacerItem *spacer = new QSpacerItem(5, 5, QSizePolicy::Fixed, QSizePolicy::Expanding); - lut->addSpacerItem(spacer); + m_pToolButton->setFixedSize(QSize(33, TOOLBTN_HEIGHT)); + m_pToolButton->setVisible(false, false); + + QPair _icon_download{":/res/icons/downloading.gif", ":/res/icons/downloading_2x.gif"}; + m_pToolButton->setAnimatedIcon( _icon_download ); + + QMenu * menuDownload = new QMenu; + QWidgetAction * waction = new QWidgetAction(menuDownload); + waction->setDefaultWidget(this); + menuDownload->setObjectName("menuButtonDownload"); + menuDownload->addAction(waction); + + m_pToolButton->setMenu(menuDownload); + + CProfileMenuFilter * eventFilter = new CProfileMenuFilter(this); + eventFilter->setMenuButton(m_pToolButton); + menuDownload->installEventFilter(eventFilter); + + applyScaling(scaling()); } CDownloadWidget::~CDownloadWidget() @@ -120,19 +139,15 @@ QPushButton * CDownloadWidget::toolButton() QWidget * CDownloadWidget::addFile(const QString& fn, int id) { - QWidget * widget = new QWidget(m_pContentArea); + QWidget * widget = new QWidget(this); QGridLayout * grid = new QGridLayout; - CElipsisLabel * name = new CElipsisLabel(fn); + QLabel * name = new QLabel(fn); name->setObjectName("labelName"); - name->setEllipsisMode(Qt::ElideRight); - name->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); QProgressBar * progress = new QProgressBar; - progress->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); QPushButton * cancel = new QPushButton(tr("Cancel")); cancel->setObjectName("buttonCancel"); - cancel->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); - connect(cancel, &QPushButton::clicked, qApp, [=](){ + connect(cancel, &QPushButton::clicked, [=](){ emit downloadCanceled(id); }); @@ -141,14 +156,14 @@ QWidget * CDownloadWidget::addFile(const QString& fn, int id) grid->setColumnStretch(0, 1); grid->setColumnStretch(1, 0); - grid->addWidget(name, 0, 0, 1, 1); + grid->addWidget(name, 0, 0, 1, -1); grid->addWidget(progress, 1, 0, 1, 1); grid->addWidget(cancel, 1, 1, 1, 1); widget->setLayout(grid); - if (QVBoxLayout *lut = dynamic_cast(m_pContentArea->layout())) - lut->insertWidget(lut->count() - 1, widget); - widget->show(); + layout()->addWidget(widget); + + updateLayoutGeomentry(); return widget; } @@ -168,6 +183,8 @@ void CDownloadWidget::downloadProcess(void * info) slot_downloadCanceled(id); } else { if (iter == m_mapDownloads.end()) { +// ADDREFINTERFACE(pData); + QString path = QString::fromStdWString(pData->get_FilePath()), file_name = "Unconfirmed"; @@ -188,10 +205,21 @@ void CDownloadWidget::downloadProcess(void * info) } } } + updateProgress(iter, pData); } } +void CDownloadWidget::updateLayoutGeomentry() +{ + adjustSize(); + + if (m_pToolButton && m_pToolButton->menu()) { + QActionEvent e(QEvent::ActionChanged, m_pToolButton->menu()->actions().at(0)); + QApplication::sendEvent(m_pToolButton->menu(), &e); + } +} + void CDownloadWidget::slot_downloadCanceled(int id) { removeFile(id); @@ -207,29 +235,35 @@ void CDownloadWidget::removeFile(MapItem iter) if (iter != m_mapDownloads.end()) { CDownloadItem * di = static_cast((*iter).second); +// CAscDownloadFileInfo * pData = reinterpret_cast(di->info()); +// RELEASEINTERFACE(pData) + QWidget * pItemWidget = di->progress(); + layout()->removeWidget(pItemWidget); RELEASEOBJECT(pItemWidget) RELEASEOBJECT(di) + updateLayoutGeomentry(); m_mapDownloads.erase(iter); - if (!m_mapDownloads.size() && m_pToolButton->isVisible()) { - m_pToolButton->deleteLater(); - deleteLater(); - } + + m_pToolButton->menu()->close(); + if (!m_mapDownloads.size() && m_pToolButton->isVisible()) + m_pToolButton->hide(); } } void CDownloadWidget::updateProgress(MapItem iter, void * data) { - CElipsisLabel * label_name; + QLabel * label_name; QProgressBar * progress; CDownloadItem * d_item; CAscDownloadFileInfo * pData; d_item = static_cast((*iter).second); if (d_item) { +// pData = reinterpret_cast(d_item->info()); pData = reinterpret_cast(data); progress = qobject_cast(d_item->progress()->layout()->itemAt(1)->widget()); @@ -241,10 +275,14 @@ void CDownloadWidget::updateProgress(MapItem iter, void * data) QString path = QString().fromStdWString(pData->get_FilePath()); if (!path.isEmpty()) { - label_name = static_cast(d_item->progress()->layout()->itemAt(0)->widget()); - label_name->setText(getFileName(path)); + label_name = qobject_cast(d_item->progress()->layout()->itemAt(0)->widget()); + + QFontMetrics metrics(label_name->font()); + label_name->setText(metrics.elidedText(getFileName(path), Qt::ElideRight, DOWNLOAD_WIDGET_MAX_WIDTH - 36)); d_item->set_is_temporary(false); + d_item->progress()->adjustSize(); + if ( !m_pToolButton->isVisible()) { m_pToolButton->setVisible(true); } @@ -264,49 +302,62 @@ QString CDownloadWidget::getFileName(const QString& path) const return ""; } -void CDownloadWidget::closeEvent(QCloseEvent *ev) +void CDownloadWidget::resizeEvent(QResizeEvent * e) { - ev->ignore(); - hide(); +// qDebug() << "resize: " << e->size(); } -void CDownloadWidget::polish() +void CDownloadWidget::applyScaling(double factor) { - style()->polish(this); - m_pArea->style()->polish(m_pArea); - m_pArea->verticalScrollBar()->style()->polish(m_pArea->verticalScrollBar()); - m_pContentArea->style()->polish(m_pContentArea); - for (int i(0); i < m_pContentArea->layout()->count(); ++i) { - auto item = m_pContentArea->layout()->itemAt(i); - if (item && item->widget()) { - QWidget * _d_item = item->widget(); - int j = _d_item->layout()->count(); - while ( !(--j < 0) ) { - QWidget * _qw = _d_item->layout()->itemAt(j)->widget(); - _qw->style()->polish(_qw); - } + if ( factor > 1 ) { + setProperty("hdpi", true); + m_pToolButton->menu()->setProperty("hdpi", true); + } else { + setProperty("hdpi", QVariant(QVariant::Invalid)); + m_pToolButton->menu()->setProperty("hdpi", QVariant(QVariant::Invalid)); + } + + layout()->setContentsMargins(m_defMargins * factor); + layout()->setSpacing(int(m_defSpacing * factor)); + + m_pToolButton->setScaling(factor); + setMaximumWidth(int(DOWNLOAD_WIDGET_MAX_WIDTH * factor)); + + for (int i(0); i < layout()->count(); ++i) { + QWidget * _d_item = layout()->itemAt(i)->widget(); + + int j = _d_item->layout()->count(); + while ( !(--j < 0) ) { + QWidget * _qw = _d_item->layout()->itemAt(j)->widget(); + + _qw->style()->unpolish(_qw); + _qw->style()->polish(_qw); } } -} -void CDownloadWidget::updateScalingFactor(double factor) -{ - setProperty("zoom", QString::number(factor) + "x"); - setMinimumSize(DOWNLOAD_WIDGET_MIN_SIZE * factor); - m_pArea->verticalScrollBar()->setFixedWidth(qRound(10 * factor)); - int mrg = qRound(MARGINS * factor); - m_pContentArea->layout()->setContentsMargins(mrg, mrg, mrg, mrg); - m_pContentArea->layout()->setSpacing(qRound(SPACING * factor)); - m_pToolButton->setIconSize((QSizeF(20,20) * factor).toSize()); - polish(); +// qApp->setStyleSheet(qApp->styleSheet()); +// style()->unpolish(this); +// style()->polish(this); +// update(); + + m_pToolButton->menu()->style()->unpolish(m_pToolButton->menu()); + m_pToolButton->menu()->style()->polish(m_pToolButton->menu()); + QPixmap::grabWidget(m_pToolButton->menu()); } -void CDownloadWidget::applyTheme(const QString &theme) +void CDownloadWidget::updateScalingFactor(double f) { - setProperty("uitheme", theme); - polish(); + CScalingWrapper::updateScalingFactor(f); + applyScaling(scaling()); } +//void CDownloadWidget::updateProgress() +//{ +// for (auto e : m_mapDownloads) { +// updateProgress(e); +// } +//} + //void CDownloadWidget::cancelAll() //{ // for (auto e : m_mapDownloads) { diff --git a/win-linux/src/components/cdownloadwidget.h b/win-linux/src/components/cdownloadwidget.h index febfe088e..921f1598d 100644 --- a/win-linux/src/components/cdownloadwidget.h +++ b/win-linux/src/components/cdownloadwidget.h @@ -33,14 +33,25 @@ #ifndef CDOWNLOADWIDGET_H #define CDOWNLOADWIDGET_H -#include -#include +#include #include "cpushbutton.h" +#include "cscalingwrapper.h" +//class CProfileMenuFilter; +class CProfileMenuFilter : public QObject { +public: + CProfileMenuFilter(QObject *); + + bool eventFilter(QObject *, QEvent *); + void setMenuButton(QPushButton *); +private: + QPushButton * _parentButton; +}; -class CDownloadWidget : public QDialog +class CDownloadWidget : public QWidget, public CScalingWrapper { Q_OBJECT + class CDownloadItem; typedef std::map::const_iterator MapItem; @@ -50,24 +61,27 @@ class CDownloadWidget : public QDialog void downloadProcess(void *); QPushButton * toolButton(); +// void updateProgress(); // void cancelAll(); - void updateScalingFactor(double); - void applyTheme(const QString&); + + void updateScalingFactor(double) override; protected: QWidget * addFile(const QString&, int); void removeFile(int); void removeFile(MapItem); + void updateLayoutGeomentry(); void updateProgress(MapItem, void *); QString getFileName(const QString&) const; - void closeEvent(QCloseEvent *) final; + + void applyScaling(double); + void resizeEvent(QResizeEvent *); private: - void polish(); - CPushButton * m_pToolButton = nullptr; - QScrollArea * m_pArea = nullptr; - QWidget *m_pContentArea = nullptr; + CPushButton * m_pToolButton; std::map m_mapDownloads; + QMargins m_defMargins; + int m_defSpacing; signals: void downloadCanceled(int); diff --git a/win-linux/src/components/cpushbutton.cpp b/win-linux/src/components/cpushbutton.cpp index 7ffa93c95..ba69acaee 100644 --- a/win-linux/src/components/cpushbutton.cpp +++ b/win-linux/src/components/cpushbutton.cpp @@ -31,66 +31,179 @@ */ #include "components/cpushbutton.h" -#include -#include -#define ANIMATION_MS 2500 +#include +#include +#include +#include +#include -CPushButton::CPushButton(QWidget *parent) - : QPushButton(parent) +CPushButton::CPushButton(double scaling) + : CPushButton(Q_NULLPTR, scaling) {} +CPushButton::CPushButton(QWidget *parent, double scaling) + : QPushButton(parent) + , _movie(Q_NULLPTR) + , _dpi_ratio(scaling) +{ + setIconSize(QSize(16,16) * _dpi_ratio); + + int START_OPACITY = 0; + + QGraphicsOpacityEffect * effect = new QGraphicsOpacityEffect(this); + effect->setOpacity(START_OPACITY); + setGraphicsEffect(effect); + + _animation = new QPropertyAnimation(effect, "opacity"); + _animation->setDuration(500); + _animation->setStartValue(START_OPACITY); + _animation->setEndValue(1.0); + + connect(_animation, SIGNAL(finished()), this, SLOT(onAnimationFinished())); +} + CPushButton::~CPushButton() { - if (m_animation) { - m_animation->stop(); - m_animation->disconnect(); - delete m_animation, m_animation = nullptr; + if (_movie) { + disconnect(_movie, SIGNAL(finished()), _movie, SLOT(start())); + _movie->stop(); + + delete _movie, _movie = NULL; + } + + if ( _animation ) { + disconnect(_animation, SIGNAL(finished())); + delete _animation, _animation = NULL; + } +} + +void CPushButton::setAnimatedIcon(QPair& icon, bool autostart) +{ + _icon = QPair(icon); + applyAnimatedIcon(_dpi_ratio > 1 ? _icon.first : _icon.second); + + if ( autostart && _movie->frameCount() > 0 ) { + _movie->start(); } } -void CPushButton::setAnimatedIcon(const QString &path) +void CPushButton::applyAnimatedIcon(const QString& f) { - if (m_animation) { - m_animation->stop(); - m_animation->disconnect(); - delete m_animation, m_animation = nullptr; + if ( !f.isEmpty() ) { + if (Q_NULLPTR == _movie) { + _movie = new QMovie(f); + connect(_movie, SIGNAL(frameChanged(int)), this, SLOT(setButtonIcon(int))); + } else { + disconnect(_movie, SIGNAL(finished()), _movie, SLOT(start())); + + _movie->stop(); + _movie->setFileName(f); + } + + if (_movie->loopCount() != -1) { + connect(_movie, SIGNAL(finished()), _movie, SLOT(start())); + } } +} + +void CPushButton::setButtonIcon(int frame) +{ + Q_UNUSED(frame) + + repaint(); +} + +void CPushButton::startIconAnimation(bool start) +{ + if (_movie) { + if (start) { + if (_movie->state() != QMovie::Running) + _movie->start(); + } else { + if (_movie->state() == QMovie::Running) + _movie->jumpToFrame(0); + _movie->stop(); + } + } +} + +void CPushButton::setEnabled(bool enable) +{ + startIconAnimation(enable); + + QPushButton::setEnabled(enable); +} + +void CPushButton::setVisible(bool visible, bool animation) +{ + animation ? setVisible(visible) : QPushButton::setVisible(visible); +} + +void CPushButton::setVisible(bool visible) +{ + if (visible != QPushButton::isVisible()) { + if (visible) QPushButton::setVisible(visible); + + startIconAnimation(visible); + + if( _animation->state() == QAbstractAnimation::Running ) + _animation->pause(); + + _animation->setDirection(visible ? QAbstractAnimation::Forward : QAbstractAnimation::Backward); + _animation->start(); + +// if (!visible) QPushButton::setVisible(visible); + } +} + +void CPushButton::paintEvent(QPaintEvent * e) +{ + Q_UNUSED(e) + +// QPushButton::paintEvent(e); +// return; + + QStylePainter p(this); + p.setOpacity(255); + + QStyleOptionButton option; + initStyleOption(&option); + + option.icon = QIcon(); + p.drawControl(QStyle::CE_PushButton, option); + + p.drawItemPixmap( QRect(QPoint(0, int(5*_dpi_ratio)), option.iconSize), + Qt::AlignLeft | Qt::AlignVCenter, _movie->currentPixmap() ); +} + +void CPushButton::onAnimationFinished() +{ + if (_animation->direction() == QAbstractAnimation::Backward) { + QPushButton::setVisible(false); + } +} + +void CPushButton::setScaling(double s) +{ + _dpi_ratio = s; + + setIconSize(QSize(16, 16) * _dpi_ratio); + bool autostart = _movie->state() == QMovie::Running; + applyAnimatedIcon(_dpi_ratio > 1 ? _icon.second : _icon.first); + + if ( !_fixed_size.isEmpty() ) + QPushButton::setFixedSize( _fixed_size * _dpi_ratio ); - if (m_renderer) - delete m_renderer, m_renderer = nullptr; - m_renderer = new QSvgRenderer(path, this); - - m_animation = new QVariantAnimation(this); - m_animation->setStartValue(0.0); - m_animation->setKeyValueAt(0.5, 1.0); - m_animation->setEndValue(0.0); - m_animation->setDuration(ANIMATION_MS); - m_animation->setLoopCount(-1); - m_animation->setEasingCurve(QEasingCurve::Linear); - connect(m_animation, &QVariantAnimation::valueChanged, this, [=](const QVariant &val) { - double opacity = round(val.toReal() * 100) / 100; - if (qRound(opacity * 100) % 2 == 0) // frequency limitation - applyAnimatedIcon(opacity); - }); - m_animation->start(QAbstractAnimation::KeepWhenStopped); + if ( autostart ) + _movie->start(); } -void CPushButton::applyAnimatedIcon(double opacity) +void CPushButton::setFixedSize(const QSize& s) { - if (m_renderer && m_renderer->isValid()) { - QSize icon_size = iconSize(); - QImage img(icon_size, QImage::Format_ARGB32); - img.fill(Qt::transparent); - QPixmap pixmap = QPixmap::fromImage(img, Qt::NoFormatConversion); - - QPainter painter(&pixmap); - painter.setCompositionMode(QPainter::CompositionMode_SourceOver); - painter.setRenderHint(QPainter::Antialiasing); - painter.setOpacity(opacity); - m_renderer->render(&painter, QRect(QPoint(0,0), icon_size)); - painter.end(); - setIcon(QIcon(pixmap)); + if ( !s.isEmpty() ) { + _fixed_size = QSize(s); + QPushButton::setFixedSize( _fixed_size * _dpi_ratio ); } } diff --git a/win-linux/src/components/cpushbutton.h b/win-linux/src/components/cpushbutton.h index b02ec2c12..7f9d689d2 100644 --- a/win-linux/src/components/cpushbutton.h +++ b/win-linux/src/components/cpushbutton.h @@ -34,21 +34,43 @@ #define CPUSHBUTTON_H #include -#include -#include +#include class CPushButton : public QPushButton { Q_OBJECT + public: - explicit CPushButton(QWidget *parent = nullptr); + explicit CPushButton(QWidget *parent, double scaling); + CPushButton(double scaling = 1); ~CPushButton(); - void setAnimatedIcon(const QString &path); + + void setAnimatedIcon(QPair&, bool autostart = false); + void startIconAnimation(bool); + + void setEnabled(bool); + void setVisible(bool visible, bool animation); + void setScaling(double); + void setFixedSize(const QSize&); + +protected: + void paintEvent(QPaintEvent *); private: - void applyAnimatedIcon(double); - QVariantAnimation * m_animation = nullptr; - QSvgRenderer *m_renderer = nullptr; + QMovie * _movie; + QPropertyAnimation * _animation; + QPair _icon; + QSize _fixed_size; + double _dpi_ratio; + + void applyAnimatedIcon(const QString&); + +signals: + +public slots: + void setButtonIcon(int); + void setVisible(bool visible); + void onAnimationFinished(); }; #endif // CPUSHBUTTON_H diff --git a/win-linux/src/windows/cmainwindow.cpp b/win-linux/src/windows/cmainwindow.cpp index d1c9790d4..003f1fd25 100644 --- a/win-linux/src/windows/cmainwindow.cpp +++ b/win-linux/src/windows/cmainwindow.cpp @@ -207,10 +207,6 @@ void CMainWindow::applyTheme(const std::wstring& theme) m_pButtonMain->setIcon(MAIN_ICON_PATH, GetCurrentTheme().isDark() ? "logo-light" : "logo-dark"); m_pButtonMain->setIconSize(MAIN_ICON_SIZE * m_dpiRatio); - if (m_pWidgetDownload && m_pWidgetDownload->toolButton()) { - m_pWidgetDownload->applyTheme(QString::fromStdWString(GetActualTheme(theme))); - m_pWidgetDownload->toolButton()->style()->polish(m_pWidgetDownload->toolButton()); - } } /** Private **/ @@ -967,24 +963,17 @@ void CMainWindow::onDocumentSaveInnerRequest(int id) void CMainWindow::onDocumentDownload(void * info) { - CAscDownloadFileInfo *pData = reinterpret_cast(info); - if (!pData->get_IsCanceled()) { - if ( !m_pWidgetDownload ) { - m_pWidgetDownload = new CDownloadWidget(this); - connect(m_pWidgetDownload, &QWidget::destroyed, this, [=]() { - m_pWidgetDownload = nullptr; - }); - QHBoxLayout * layoutBtns = qobject_cast(m_boxTitleBtns->layout()); - layoutBtns->insertWidget(1, m_pWidgetDownload->toolButton()); - m_pWidgetDownload->show(); - std::vector files{":/styles/download.qss"}; - m_pWidgetDownload->setStyleSheet(Utils::readStylesheets(&files)); - m_pWidgetDownload->applyTheme(m_pMainPanel->property("uitheme").toString()); - m_pWidgetDownload->updateScalingFactor(m_dpiRatio); - m_pWidgetDownload->move(geometry().bottomRight() - m_pWidgetDownload->rect().bottomRight()); - } - m_pWidgetDownload->downloadProcess(info); + if ( !m_pWidgetDownload ) { + m_pWidgetDownload = new CDownloadWidget(this); + + QHBoxLayout * layoutBtns = qobject_cast(m_boxTitleBtns->layout()); + layoutBtns->insertWidget(1, m_pWidgetDownload->toolButton()); } + + m_pWidgetDownload->downloadProcess(info); + +// CAscDownloadFileInfo * pData = reinterpret_cast(info); +// RELEASEINTERFACE(pData); } void CMainWindow::onDocumentFragmented(int id, bool isfragmented) @@ -1387,10 +1376,6 @@ void CMainWindow::updateScalingFactor(double dpiratio) m_pTabs->reloadTabIcons(); m_pButtonMain->setIcon(MAIN_ICON_PATH, GetCurrentTheme().isDark() ? "logo-light" : "logo-dark"); m_pButtonMain->setIconSize(MAIN_ICON_SIZE * dpiratio); - if (m_pWidgetDownload && m_pWidgetDownload->toolButton()) { - m_pWidgetDownload->updateScalingFactor(dpiratio); - m_pWidgetDownload->toolButton()->style()->polish(m_pWidgetDownload->toolButton()); - } } void CMainWindow::setScreenScalingFactor(double factor, bool resize) From 2c4fea65ff3549a784ea97a526b4a3f8b1fc68f3 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Tue, 3 Oct 2023 10:16:59 +0300 Subject: [PATCH 267/298] [win-linux] fix styles for old download widget --- win-linux/res/styles/styles@2.25x.qss | 42 ++++++++++++++++++++++++++- win-linux/res/styles/styles@2.75x.qss | 42 ++++++++++++++++++++++++++- 2 files changed, 82 insertions(+), 2 deletions(-) diff --git a/win-linux/res/styles/styles@2.25x.qss b/win-linux/res/styles/styles@2.25x.qss index 40d69e067..9138094d4 100644 --- a/win-linux/res/styles/styles@2.25x.qss +++ b/win-linux/res/styles/styles@2.25x.qss @@ -12,7 +12,47 @@ QPushButton#toolButtonMain[theme=light] {border-width: 2px; border-bottom: 0 non QPushButton#toolButtonMain[class=normal], QPushButton#toolButtonMain[class=normal]:hover {border-bottom-width: 2px;} -QPushButton#toolButtonDownload {max-width: 90px; width: 90px; max-height: 63px; height: 63px;} +QPushButton::menu-indicator { + width: 23px; + height: 23px; + left: -5px; + top: -2px; +} + +QPushButton#toolButtonDownload { + padding: 14px; +} + +QPushButton#toolButtonDownload::menu-indicator { + top: -23px; + left: -9px; +} + +/* download widget */ + +QMenu[hdpi]#menuButtonDownload { + border-width: 2px; +} + +CDownloadWidget[hdpi] QProgressBar { + border-radius: 5px; + max-height: 11px; + margin-right: 23px; + margin-top: 2px; + min-width: 450px; +} + +CDownloadWidget[hdpi] QProgressBar::chunk { + border-radius: 5px; +} + +CDownloadWidget[hdpi] QPushButton#buttonCancel { + font-size: 27px; +} + +CDownloadWidget[hdpi] QLabel#labelName { + font-size: 36px; +} /* ToolTip*/ diff --git a/win-linux/res/styles/styles@2.75x.qss b/win-linux/res/styles/styles@2.75x.qss index c03f393b4..907a61359 100644 --- a/win-linux/res/styles/styles@2.75x.qss +++ b/win-linux/res/styles/styles@2.75x.qss @@ -36,7 +36,47 @@ QPushButton#toolButtonMain[class=normal], border-bottom-width: 3px; } -QPushButton#toolButtonDownload {max-width: 110px; width: 110px; max-height: 77px; height: 77px;} +QPushButton::menu-indicator { + width: 28px; + height: 28px; + left: -6px; + top: -3px; +} + +QPushButton#toolButtonDownload { + padding: 17px; +} + +QPushButton#toolButtonDownload::menu-indicator { + top: -28px; + left: -11px; +} + +/* download widget */ + +QMenu[hdpi]#menuButtonDownload { + border-width: 3px; +} + +CDownloadWidget[hdpi] QProgressBar { + border-radius: 6px; + max-height: 14px; + margin-right: 28px; + margin-top: 3px; + min-width: 550px; +} + +CDownloadWidget[hdpi] QProgressBar::chunk { + border-radius: 6px; +} + +CDownloadWidget[hdpi] QPushButton#buttonCancel { + font-size: 33px; +} + +CDownloadWidget[hdpi] QLabel#labelName { + font-size: 44px; +} /* ToolTip*/ From 5d505aee537983c4a73414552519c5a8cb582b3f Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Tue, 3 Oct 2023 23:19:49 +0300 Subject: [PATCH 268/298] [win-nix] fix bug 64448 --- .../src/cascapplicationmanagerwrapper.cpp | 21 +++++++++++++------ win-linux/src/cthemes.cpp | 6 +++--- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/win-linux/src/cascapplicationmanagerwrapper.cpp b/win-linux/src/cascapplicationmanagerwrapper.cpp index c7e68a906..7790a80b4 100644 --- a/win-linux/src/cascapplicationmanagerwrapper.cpp +++ b/win-linux/src/cascapplicationmanagerwrapper.cpp @@ -342,16 +342,25 @@ bool CAscApplicationManagerWrapper::processCommonEvent(NSEditorApi::CAscCefMenuE QRegularExpressionMatch match = re.match(QString::fromStdWString(pData->get_Param())); if ( match.hasMatch() ) { bool is_dark = match.captured(1) == "dark"; - m_themes->onSystemDarkColorScheme(is_dark); + + if ( m_themes->isSystemSchemeDark() != is_dark ) { + m_themes->onSystemDarkColorScheme(is_dark); + + QJsonObject jparams{{"theme", QJsonObject{{"system", match.captured(1)}}}}; + QString params = Utils::stringifyJson(jparams); + for (auto i: GetViewsId()) { + sendCommandTo(GetViewById(i), L"renderervars:changed", params.toStdWString()); + } #ifndef Q_OS_WIN - for (auto i: GetViewsId()) { - sendCommandTo(GetViewById(i), cmd, pData->get_Param()); - } +// for (auto i: GetViewsId()) { +// sendCommandTo(GetViewById(i), cmd, pData->get_Param()); +// } #endif - if ( themes().current().isSystem() && themes().current().isDark() != is_dark ) - applyTheme(themes().current().id()); + if ( themes().current().isSystem() && themes().current().isDark() != is_dark ) + applyTheme(themes().current().id()); + } } diff --git a/win-linux/src/cthemes.cpp b/win-linux/src/cthemes.cpp index 921eddcd6..012e46020 100644 --- a/win-linux/src/cthemes.cpp +++ b/win-linux/src/cthemes.cpp @@ -212,9 +212,9 @@ class CThemes::CThemesPrivate { } } - auto setCurrent(const QString& id) -> bool + auto setCurrent(const QString& id, bool force = false) -> bool { - if ( current->id() != id.toStdWString() ) { + if ( current->id() != id.toStdWString() || force ) { if ( id != THEME_ID_SYSTEM ) { delete current; @@ -477,7 +477,7 @@ auto CThemes::defaultLight() -> const CTheme& auto CThemes::setCurrentTheme(const std::wstring& name) -> void { - if ( !isThemeCurrent(name) && m_priv->setCurrent(QString::fromStdWString(name)) ) { + if ( !isThemeCurrent(name) && m_priv->setCurrent(QString::fromStdWString(name), true) ) { GET_REGISTRY_USER(_reg_user); if ( !m_priv->current->m_priv->source_file.isEmpty() ) From c14e27513e16d23b19e927e306b1ea5b302ae721 Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Wed, 4 Oct 2023 11:57:38 +0300 Subject: [PATCH 269/298] [win-nix] fix bug 64479 --- win-linux/src/windows/ceditorwindow_p.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/win-linux/src/windows/ceditorwindow_p.h b/win-linux/src/windows/ceditorwindow_p.h index fdd50c356..d47e026bb 100644 --- a/win-linux/src/windows/ceditorwindow_p.h +++ b/win-linux/src/windows/ceditorwindow_p.h @@ -743,6 +743,7 @@ class CEditorWindowPrivate : public CCefEventsGate void onWebAppsFeatures(int, std::wstring f) override { + bool is_read_only = panel()->data()->hasFeature(L"readonly\":"); panel()->data()->setFeatures(f); if ( m_panel->data()->hasFeature(L"uitype\":\"fillform") ) { @@ -753,7 +754,7 @@ class CEditorWindowPrivate : public CCefEventsGate qobject_cast(boxtitlelabel->layout())->insertWidget(0, iconCrypted()); } - if ( panel()->data()->hasFeature(L"readonly\":") && boxtitlelabel ) { + if ( is_read_only != panel()->data()->hasFeature(L"readonly\":") && boxtitlelabel ) { window->setWindowTitle(m_panel->data()->title()); window->m_boxTitleBtns->repaint(); } From ab9ae2271f305b3794884674f751c46fe2b5b075 Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Wed, 4 Oct 2023 21:32:11 +0300 Subject: [PATCH 270/298] [start page] 64480 --- common/loginpage/res/img/update_status.svg | 2 -- 1 file changed, 2 deletions(-) diff --git a/common/loginpage/res/img/update_status.svg b/common/loginpage/res/img/update_status.svg index 0aad5dd47..ab82b5d1a 100644 --- a/common/loginpage/res/img/update_status.svg +++ b/common/loginpage/res/img/update_status.svg @@ -1,8 +1,6 @@ From ca3b2b4f529bc78de9eb68f77e845941c6c4eb3f Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Wed, 4 Oct 2023 22:16:25 +0300 Subject: [PATCH 271/298] [win-nix] fix bug 64496 --- win-linux/res/styles/theme-contrast-dark.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/win-linux/res/styles/theme-contrast-dark.json b/win-linux/res/styles/theme-contrast-dark.json index a13c6495b..f388b42da 100644 --- a/win-linux/res/styles/theme-contrast-dark.json +++ b/win-linux/res/styles/theme-contrast-dark.json @@ -5,7 +5,7 @@ "brand-word": "#1e1e1e", "brand-slide": "#1e1e1e", "brand-cell": "#1e1e1e", - "brand-pdf": "#2a2a2a", + "brand-pdf": "#1e1e1e", "window-background": "#2a2a2a", "window-border": "#616161", From 20246d711a2bf25136b757f2b103f3b122155b63 Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Wed, 4 Oct 2023 23:08:52 +0300 Subject: [PATCH 272/298] [win] exclude vlc-cache-gen.exe from app zip --- win-linux/package/windows/make_zip.ps1 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/win-linux/package/windows/make_zip.ps1 b/win-linux/package/windows/make_zip.ps1 index 5da7361d8..041d0be45 100644 --- a/win-linux/package/windows/make_zip.ps1 +++ b/win-linux/package/windows/make_zip.ps1 @@ -67,10 +67,10 @@ if ( $Sign ) { $OutFile = "$Env:COMPANY_NAME-$DesktopDir-$Env:PRODUCT_VERSION.$Env:BUILD_NUMBER-$Suffix.zip" if ( !$ExcludeHelp ) { Write-Host "7z a -y $OutFile .\$BuildDir\$DesktopDir\*" -ForegroundColor Yellow - & 7z a -y $OutFile .\$BuildDir\$DesktopDir\* + & 7z a -y $OutFile .\$BuildDir\$DesktopDir\* -xr!vlc-cache-gen.exe } else { Write-Host "7z a -y $OutFile .\$BuildDir\$DesktopDir\* -xr!editors\web-apps\apps\*\main\resources\help" -ForegroundColor Yellow - & 7z a -y $OutFile .\$BuildDir\$DesktopDir\* -xr!editors\web-apps\apps\*\main\resources\help + & 7z a -y $OutFile .\$BuildDir\$DesktopDir\* -xr!editors\web-apps\apps\*\main\resources\help -xr!vlc-cache-gen.exe } if ( $LastExitCode -ne 0 ) { throw } From c26d8e0706f7ddc65647e7a18797c0ec82265955 Mon Sep 17 00:00:00 2001 From: Maxim Kadushkin Date: Thu, 5 Oct 2023 00:20:42 +0300 Subject: [PATCH 273/298] revert make_zip.ps1 due to errors --- win-linux/package/windows/make_zip.ps1 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/win-linux/package/windows/make_zip.ps1 b/win-linux/package/windows/make_zip.ps1 index 041d0be45..5da7361d8 100644 --- a/win-linux/package/windows/make_zip.ps1 +++ b/win-linux/package/windows/make_zip.ps1 @@ -67,10 +67,10 @@ if ( $Sign ) { $OutFile = "$Env:COMPANY_NAME-$DesktopDir-$Env:PRODUCT_VERSION.$Env:BUILD_NUMBER-$Suffix.zip" if ( !$ExcludeHelp ) { Write-Host "7z a -y $OutFile .\$BuildDir\$DesktopDir\*" -ForegroundColor Yellow - & 7z a -y $OutFile .\$BuildDir\$DesktopDir\* -xr!vlc-cache-gen.exe + & 7z a -y $OutFile .\$BuildDir\$DesktopDir\* } else { Write-Host "7z a -y $OutFile .\$BuildDir\$DesktopDir\* -xr!editors\web-apps\apps\*\main\resources\help" -ForegroundColor Yellow - & 7z a -y $OutFile .\$BuildDir\$DesktopDir\* -xr!editors\web-apps\apps\*\main\resources\help -xr!vlc-cache-gen.exe + & 7z a -y $OutFile .\$BuildDir\$DesktopDir\* -xr!editors\web-apps\apps\*\main\resources\help } if ( $LastExitCode -ne 0 ) { throw } From ee490a25ba728a2e2236145d4f2762697f7ad214 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Thu, 5 Oct 2023 13:50:31 +0300 Subject: [PATCH 274/298] [win-linux] ceditorwindow: small refactoring --- win-linux/src/windows/ceditorwindow.cpp | 4 +--- win-linux/src/windows/ceditorwindow_p.h | 9 +++++++-- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/win-linux/src/windows/ceditorwindow.cpp b/win-linux/src/windows/ceditorwindow.cpp index c57733101..1460dd331 100644 --- a/win-linux/src/windows/ceditorwindow.cpp +++ b/win-linux/src/windows/ceditorwindow.cpp @@ -76,10 +76,8 @@ CEditorWindow::CEditorWindow(const QRect& rect, CTabPanel* panel) AscAppManager::bindReceiver(panel->cef()->GetId(), d_ptr.get()); AscAppManager::sendCommandTo(panel->cef(), L"editor:config", L"request"); - QFileInfo i{QString::fromStdWString(panel->data()->url())}; - if ( i.suffix() == "oform" || panel->data()->hasFeature(L"uitype\":\"fillform") ) { + if (d_ptr->fillformMode()) d_ptr->ffWindowCustomize(); - } QTimer::singleShot(200, this, [=]() { if (d_ptr->canExtendTitle()) diff --git a/win-linux/src/windows/ceditorwindow_p.h b/win-linux/src/windows/ceditorwindow_p.h index d47e026bb..41b0a70c6 100644 --- a/win-linux/src/windows/ceditorwindow_p.h +++ b/win-linux/src/windows/ceditorwindow_p.h @@ -178,7 +178,7 @@ class CEditorWindowPrivate : public CCefEventsGate auto extendableTitleToSimple() -> void { Q_ASSERT(window->m_boxTitleBtns != nullptr); QGridLayout * const _layout = static_cast(window->m_pMainPanel->layout()); - if ( !_layout->findChild(window->m_boxTitleBtns->objectName()) ) { + if ( !_layout->itemAtPosition(0,0) && !_layout->findChild(window->m_boxTitleBtns->objectName()) ) { _layout->addWidget(window->m_boxTitleBtns,0,0,Qt::AlignTop); if (iconuser) iconuser->hide(); @@ -821,6 +821,11 @@ class CEditorWindowPrivate : public CCefEventsGate return m_panel->data()->hasFeature(L"viewmode\":true"); } + auto fillformMode() -> bool { + QFileInfo i{QString::fromStdWString(m_panel->data()->url())}; + return i.suffix() == "oform" || m_panel->data()->hasFeature(L"uitype\":\"fillform"); + } + auto calcTitleLabelWidth(int basewidth) const -> int { if ( iconuser ) basewidth -= iconuser->width(); @@ -868,7 +873,7 @@ class CEditorWindowPrivate : public CCefEventsGate auto ffWindowCustomize() -> void { Q_ASSERT(window->m_boxTitleBtns != nullptr); QGridLayout * const _layout = static_cast(window->m_pMainPanel->layout()); - if ( !_layout->findChild(window->m_boxTitleBtns->objectName()) ) { + if ( !_layout->itemAtPosition(0,0) && !_layout->findChild(window->m_boxTitleBtns->objectName()) ) { _layout->addWidget(window->m_boxTitleBtns,0,0,Qt::AlignTop); } } From 9162bcf6b9ade6c9ba499c7b1e127fa42b93a98b Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Thu, 5 Oct 2023 14:06:16 +0300 Subject: [PATCH 275/298] [win-linux] ceditorwindow: fix layout in window title for oform --- win-linux/src/windows/ceditorwindow_p.h | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/win-linux/src/windows/ceditorwindow_p.h b/win-linux/src/windows/ceditorwindow_p.h index 41b0a70c6..66bb4b811 100644 --- a/win-linux/src/windows/ceditorwindow_p.h +++ b/win-linux/src/windows/ceditorwindow_p.h @@ -118,7 +118,7 @@ class CEditorWindowPrivate : public CCefEventsGate void init(CTabPanel * const p) override { CCefEventsGate::init(p); - if (!m_panel->data()->hasFeature(L"btnhome") || viewerMode()) { // For old editors only + if (!m_panel->data()->hasFeature(L"btnhome") || viewerMode() || fillformMode()) { // For old editors only usedOldEditorVersion = true; leftboxbuttons = new QWidget; leftboxbuttons->setLayout(new QHBoxLayout); @@ -202,7 +202,7 @@ class CEditorWindowPrivate : public CCefEventsGate auto centerTitle(double dpiRatio)->void { - int left_btns = viewerMode() ? 1 : 6; + int left_btns = (viewerMode() || fillformMode()) ? 1 : 6; int right_btns = 3; int spacing = window->m_boxTitleBtns->layout()->spacing(); int left_offset = left_btns*TOOLBTN_WIDTH + 3*spacing; // added extra spacing @@ -210,7 +210,7 @@ class CEditorWindowPrivate : public CCefEventsGate int diffW = (left_offset - right_offset)*dpiRatio; if (iconuser) { diffW -= ICON_SPACER_WIDTH + spacing*dpiRatio; - if (!viewerMode()) { + if (!viewerMode() && !fillformMode()) { diffW -= iconuser->width() + spacing*dpiRatio; } } @@ -229,7 +229,7 @@ class CEditorWindowPrivate : public CCefEventsGate if( jerror.error == QJsonParseError::NoError ) { QJsonObject objRoot = jdoc.object(); - if ( viewerMode() ) + if ( viewerMode() && !fillformMode()) extendableTitleToSimple(); if ( canExtendTitle() ) { @@ -312,7 +312,7 @@ class CEditorWindowPrivate : public CCefEventsGate panel()->data()->setFeatures(L"old version of editor"); extendableTitleToSimple(); } - if (m_panel->data()->hasFeature(L"btnhome") && usedOldEditorVersion && !viewerMode()) { // For old editors only + if (m_panel->data()->hasFeature(L"btnhome") && usedOldEditorVersion && !viewerMode() && !fillformMode()) { // For old editors only usedOldEditorVersion = false; adjustToNewEditorVersion(); } @@ -748,6 +748,7 @@ class CEditorWindowPrivate : public CCefEventsGate if ( m_panel->data()->hasFeature(L"uitype\":\"fillform") ) { ffWindowCustomize(); + centerTitle(window->m_dpiRatio); } if ( panel()->data()->hasFeature(L"crypted\":true") && boxtitlelabel && !iconcrypted ) { @@ -875,6 +876,8 @@ class CEditorWindowPrivate : public CCefEventsGate QGridLayout * const _layout = static_cast(window->m_pMainPanel->layout()); if ( !_layout->itemAtPosition(0,0) && !_layout->findChild(window->m_boxTitleBtns->objectName()) ) { _layout->addWidget(window->m_boxTitleBtns,0,0,Qt::AlignTop); + if (iconuser) + iconuser->hide(); } } }; From adc5dd4377298504dec515e91f3e4d83129d163f Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Thu, 5 Oct 2023 14:16:41 +0300 Subject: [PATCH 276/298] [win-linux] ceditorwindow: fix text truncation in window title for oform --- win-linux/src/windows/ceditorwindow_p.h | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/win-linux/src/windows/ceditorwindow_p.h b/win-linux/src/windows/ceditorwindow_p.h index 66bb4b811..a3d9ad721 100644 --- a/win-linux/src/windows/ceditorwindow_p.h +++ b/win-linux/src/windows/ceditorwindow_p.h @@ -878,6 +878,13 @@ class CEditorWindowPrivate : public CCefEventsGate _layout->addWidget(window->m_boxTitleBtns,0,0,Qt::AlignTop); if (iconuser) iconuser->hide(); + auto layout = qobject_cast(window->m_boxTitleBtns->layout()); + auto stretch = layout->takeAt(1); + if (stretch) + delete stretch; + stretch = layout->takeAt(2); + if (stretch) + delete stretch; } } }; From 04072b00dbac3892c60b9f354dee360c160d2452 Mon Sep 17 00:00:00 2001 From: Roman Demidov Date: Thu, 5 Oct 2023 14:52:35 +0300 Subject: [PATCH 277/298] Fix DEB package name (#988) --- win-linux/package/linux/Makefile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/win-linux/package/linux/Makefile b/win-linux/package/linux/Makefile index 6f66ec215..0ace12af0 100644 --- a/win-linux/package/linux/Makefile +++ b/win-linux/package/linux/Makefile @@ -340,6 +340,8 @@ $(CHANGELOG_DEB) : $(CHANGELOG_DEB_M4) $(CHANGELOG_RPM) > $(CHANGES_DIR)/$(dir)/changes_deb; \ mkdir -p deb/build/debian; \ m4 $(M4_DEB_PARAMS) -D M4_PACKAGE_VERSION='$(dir)' -D M4_DATE='$(shell date -d "$(shell grep \"releasedate\" $(CHANGES_DIR)/$(dir)/$(CHANGES_HTML) | sed 's/.* - //' | sed 's/<\/span>.*//' | sed 's/{{DATE}}/$(shell date -R)/')" -R)' $(CHANGELOG_DEB_M4) | sed '2r $(CHANGES_DIR)/$(dir)/changes_deb' >> $(CHANGELOG_DEB))) + $(shell \ + sed -i 's/$(PRODUCT_VERSION)/$(PACKAGE_VERSION)/' $(CHANGELOG_DEB)) $(CHANGELOG_RPM) : $(foreach dir, \ From f5fdbf9f5ef4e11cfca62bd5c41a1fdd51679ecf Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Thu, 5 Oct 2023 19:03:07 +0300 Subject: [PATCH 278/298] [linux] fix bug 59726 --- win-linux/src/windows/cmainwindow.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/win-linux/src/windows/cmainwindow.cpp b/win-linux/src/windows/cmainwindow.cpp index 003f1fd25..e930d2b1c 100644 --- a/win-linux/src/windows/cmainwindow.cpp +++ b/win-linux/src/windows/cmainwindow.cpp @@ -308,7 +308,7 @@ void CMainWindow::dragEnterEvent(QDragEnterEvent *event) return; QSet _exts; - _exts << "docx" << "doc" << "odt" << "rtf" << "txt" << "doct" << "dotx" << "ott"; + _exts << "docx" << "doc" << "odt" << "rtf" << "txt" << "doct" << "dotx" << "ott" << "docxf" << "oform"; _exts << "html" << "mht" << "epub"; _exts << "pptx" << "ppt" << "odp" << "ppsx" << "pptt" << "potx" << "otp"; _exts << "xlsx" << "xls" << "ods" << "csv" << "xlst" << "xltx" << "ots"; From 21d62fb5643852402a2123bb57c08d5be3490d97 Mon Sep 17 00:00:00 2001 From: Maxim Kadushkin Date: Thu, 5 Oct 2023 21:05:44 +0300 Subject: [PATCH 279/298] Update make_zip.ps1 --- win-linux/package/windows/make_zip.ps1 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/win-linux/package/windows/make_zip.ps1 b/win-linux/package/windows/make_zip.ps1 index 5da7361d8..87dc55f01 100644 --- a/win-linux/package/windows/make_zip.ps1 +++ b/win-linux/package/windows/make_zip.ps1 @@ -67,10 +67,10 @@ if ( $Sign ) { $OutFile = "$Env:COMPANY_NAME-$DesktopDir-$Env:PRODUCT_VERSION.$Env:BUILD_NUMBER-$Suffix.zip" if ( !$ExcludeHelp ) { Write-Host "7z a -y $OutFile .\$BuildDir\$DesktopDir\*" -ForegroundColor Yellow - & 7z a -y $OutFile .\$BuildDir\$DesktopDir\* + & 7z a -y $OutFile .\$BuildDir\$DesktopDir\* -xr!.\vlc-cache-gen.exe } else { Write-Host "7z a -y $OutFile .\$BuildDir\$DesktopDir\* -xr!editors\web-apps\apps\*\main\resources\help" -ForegroundColor Yellow - & 7z a -y $OutFile .\$BuildDir\$DesktopDir\* -xr!editors\web-apps\apps\*\main\resources\help + & 7z a -y $OutFile .\$BuildDir\$DesktopDir\* -xr!editors\web-apps\apps\*\main\resources\help -xr!.\vlc-cache-gen.exe } if ( $LastExitCode -ne 0 ) { throw } From 772e6282fd245e811573900a5d65c5e8c8b47a97 Mon Sep 17 00:00:00 2001 From: Maxim Kadushkin Date: Fri, 6 Oct 2023 00:34:40 +0300 Subject: [PATCH 280/298] Update make_zip.ps1 --- win-linux/package/windows/make_zip.ps1 | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/win-linux/package/windows/make_zip.ps1 b/win-linux/package/windows/make_zip.ps1 index 87dc55f01..736523879 100644 --- a/win-linux/package/windows/make_zip.ps1 +++ b/win-linux/package/windows/make_zip.ps1 @@ -66,11 +66,11 @@ if ( $Sign ) { $OutFile = "$Env:COMPANY_NAME-$DesktopDir-$Env:PRODUCT_VERSION.$Env:BUILD_NUMBER-$Suffix.zip" if ( !$ExcludeHelp ) { - Write-Host "7z a -y $OutFile .\$BuildDir\$DesktopDir\*" -ForegroundColor Yellow - & 7z a -y $OutFile .\$BuildDir\$DesktopDir\* -xr!.\vlc-cache-gen.exe + Write-Host "7z a -y $OutFile .\$BuildDir\$DesktopDir\* -xr!vlc-cache-gen.exe" -ForegroundColor Yellow + & 7z a -y $OutFile .\$BuildDir\$DesktopDir\* -xr!"vlc-cache-gen.exe" } else { - Write-Host "7z a -y $OutFile .\$BuildDir\$DesktopDir\* -xr!editors\web-apps\apps\*\main\resources\help" -ForegroundColor Yellow - & 7z a -y $OutFile .\$BuildDir\$DesktopDir\* -xr!editors\web-apps\apps\*\main\resources\help -xr!.\vlc-cache-gen.exe + Write-Host "7z a -y $OutFile .\$BuildDir\$DesktopDir\* -xr!editors\web-apps\apps\*\main\resources\help -xr!vlc-cache-gen.exe" -ForegroundColor Yellow + & 7z a -y $OutFile .\$BuildDir\$DesktopDir\* -xr!editors\web-apps\apps\*\main\resources\help -xr!"vlc-cache-gen.exe" } if ( $LastExitCode -ne 0 ) { throw } From 50564aecc2fdd3ba7e3a8b2b6f26690f54779988 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Fri, 6 Oct 2023 08:46:54 +0300 Subject: [PATCH 281/298] [win] csvcmanager: fix app version in app display name after update --- .../extras/update-daemon/src/classes/csvcmanager.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/win-linux/extras/update-daemon/src/classes/csvcmanager.cpp b/win-linux/extras/update-daemon/src/classes/csvcmanager.cpp index b6d751e54..8b89db22d 100644 --- a/win-linux/extras/update-daemon/src/classes/csvcmanager.cpp +++ b/win-linux/extras/update-daemon/src/classes/csvcmanager.cpp @@ -163,6 +163,15 @@ auto restartService()->void CloseHandle(pi.hProcess); CloseHandle(pi.hThread); } + +auto verToAppVer(const wstring &ver)->wstring +{ + size_t pos = ver.find(L'.'); + if (pos == std::wstring::npos) + return ver; + pos = ver.find(L'.', pos + 1); + return (pos == std::wstring::npos) ? ver : ver.substr(0, pos); +} #endif CSvcManager::CSvcManager(): @@ -503,7 +512,7 @@ void CSvcManager::startReplacingFiles(const tstring &packageType, const bool res wstring app_key(app_name); app_key += (packageType == TEXT("iss")) ? L"_is1" : L""; if (RegOpenKeyEx(hKey, app_key.c_str(), 0, KEY_ALL_ACCESS, &hAppKey) == ERROR_SUCCESS) { - wstring disp_name = app_name + L" " + ver + L" (" + currentArch().substr(1) + L")"; + wstring disp_name = app_name + L" " + verToAppVer(ver) + L" (" + currentArch().substr(1) + L")"; if (RegSetValueEx(hAppKey, TEXT("DisplayName"), 0, REG_SZ, (const BYTE*)disp_name.c_str(), (DWORD)(disp_name.length() + 1) * sizeof(WCHAR)) != ERROR_SUCCESS) NS_Logger::WriteLog(L"Can't update DisplayName in registry!"); if (RegSetValueEx(hAppKey, TEXT("DisplayVersion"), 0, REG_SZ, (const BYTE*)ver.c_str(), (DWORD)(ver.length() + 1) * sizeof(WCHAR)) != ERROR_SUCCESS) From 70b035ad536681ce19d78a3972ef0b405636bd78 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Fri, 6 Oct 2023 08:51:22 +0300 Subject: [PATCH 282/298] [win-linux] fix the position of the icon 'encrypted' --- win-linux/src/components/celipsislabel.cpp | 7 +++++++ win-linux/src/components/celipsislabel.h | 4 ++++ win-linux/src/windows/ceditorwindow_p.h | 24 +++++++++++++++------- 3 files changed, 28 insertions(+), 7 deletions(-) diff --git a/win-linux/src/components/celipsislabel.cpp b/win-linux/src/components/celipsislabel.cpp index ee4f978e2..05f31704c 100644 --- a/win-linux/src/components/celipsislabel.cpp +++ b/win-linux/src/components/celipsislabel.cpp @@ -62,6 +62,13 @@ void CElipsisLabel::resizeEvent(QResizeEvent *event) if ( event->size().width() != event->oldSize().width() ) { QString elt = ellipsis_text_(this, orig_text, elide_mode); QLabel::setText(elt); + QFontMetrics fm(font()); +#if (QT_VERSION < QT_VERSION_CHECK(5,11,0)) + int textWidth = fm.width(elt); +#else + int textWidth = fm.horizontalAdvance(elt); +#endif + emit onResize(event->size(), textWidth); } } diff --git a/win-linux/src/components/celipsislabel.h b/win-linux/src/components/celipsislabel.h index 194992fce..a3ff8df8a 100644 --- a/win-linux/src/components/celipsislabel.h +++ b/win-linux/src/components/celipsislabel.h @@ -38,6 +38,7 @@ class CElipsisLabel : public QLabel { + Q_OBJECT public: CElipsisLabel(const QString &text, QWidget *parent = Q_NULLPTR); CElipsisLabel(QWidget *parent = Q_NULLPTR, Qt::WindowFlags f = Qt::WindowFlags()); @@ -46,6 +47,9 @@ class CElipsisLabel : public QLabel auto setEllipsisMode(Qt::TextElideMode) -> void; auto updateText() -> void; +signals: + void onResize(QSize size, int textWidth); + protected: virtual void resizeEvent(QResizeEvent *event) final; using QLabel::setText; diff --git a/win-linux/src/windows/ceditorwindow_p.h b/win-linux/src/windows/ceditorwindow_p.h index a3d9ad721..c74d022de 100644 --- a/win-linux/src/windows/ceditorwindow_p.h +++ b/win-linux/src/windows/ceditorwindow_p.h @@ -65,6 +65,7 @@ #define TOP_PANEL_OFFSET 6*TOOLBTN_WIDTH #define ICON_SPACER_WIDTH 9 +#define ICON_SIZE QSize(20,20) using namespace NSEditorApi; @@ -605,6 +606,7 @@ class CEditorWindowPrivate : public CCefEventsGate if ( iconcrypted ) { iconcrypted->setPixmap(QIcon{":/title/icons/secure.svg"}.pixmap(QSize(20,20) * f)); + iconcrypted->setFixedSize(ICON_SIZE * f); } for (const auto& btn: m_mapTitleButtons) { @@ -730,12 +732,22 @@ class CEditorWindowPrivate : public CCefEventsGate QLabel * iconCrypted() { - Q_ASSERT(window->m_boxTitleBtns != nullptr); + Q_ASSERT(window->m_labelTitle != nullptr); if ( !iconcrypted ) { - iconcrypted = new QLabel(window->m_boxTitleBtns); + iconcrypted = new QLabel(window->m_labelTitle); iconcrypted->setObjectName("iconcrypted"); iconcrypted->setPixmap(QIcon{":/title/icons/secure.svg"}.pixmap(QSize(20,20) * window->m_dpiRatio)); + iconcrypted->setFixedSize(ICON_SIZE * window->m_dpiRatio); + int y = (window->m_labelTitle->height() - ICON_SIZE.height() * window->m_dpiRatio)/2; + iconcrypted->move(0, y); + connect(window->m_labelTitle, &CElipsisLabel::onResize, this, [=](QSize size, int textWidth) { + if (iconcrypted) { + int x = (size.width() - textWidth)/2 - ((ICON_SIZE.width() + 6) * window->m_dpiRatio); + int y = (size.height() - ICON_SIZE.height() * window->m_dpiRatio)/2; + iconcrypted->move(x, y); + } + }); } return iconcrypted; @@ -752,7 +764,7 @@ class CEditorWindowPrivate : public CCefEventsGate } if ( panel()->data()->hasFeature(L"crypted\":true") && boxtitlelabel && !iconcrypted ) { - qobject_cast(boxtitlelabel->layout())->insertWidget(0, iconCrypted()); + iconCrypted(); } if ( is_read_only != panel()->data()->hasFeature(L"readonly\":") && boxtitlelabel ) { @@ -855,13 +867,11 @@ class CEditorWindowPrivate : public CCefEventsGate boxtitlelabel->layout()->setSpacing(0); boxtitlelabel->layout()->setMargin(0); boxtitlelabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); - + boxtitlelabel->layout()->addWidget(window->m_labelTitle); if ( m_panel->data()->hasFeature(L"crypted\":true") && !iconcrypted ) { - boxtitlelabel->layout()->addWidget(iconCrypted()); + iconCrypted(); } - boxtitlelabel->layout()->addWidget(window->m_labelTitle); - if (usedOldEditorVersion) { // For old editors only _layout->insertWidget(1, boxtitlelabel); if ( _layout->itemAt(0)->widget() != leftboxbuttons ) From 3bc5cbb445b4f704e70c328b77249cbfaf361a90 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Fri, 6 Oct 2023 08:52:10 +0300 Subject: [PATCH 283/298] [win-linux] fix bug 64503 --- win-linux/src/windows/cmainwindow.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/win-linux/src/windows/cmainwindow.cpp b/win-linux/src/windows/cmainwindow.cpp index e930d2b1c..f523f4e5a 100644 --- a/win-linux/src/windows/cmainwindow.cpp +++ b/win-linux/src/windows/cmainwindow.cpp @@ -242,9 +242,9 @@ void CMainWindow::close() onFullScreen(-1, false); #ifdef _WIN32 - if (isSessionInProgress() && m_pTabs->count() > 1) { + if (isSessionInProgress() && m_pTabs->count(cvwtEditor) > 1) { #else - if (m_pTabs->count() > 1) { + if (m_pTabs->count(cvwtEditor) > 1) { #endif GET_REGISTRY_USER(reg_user); if (!reg_user.value("ignoreMsgAboutOpenTabs", false).toBool()) { From e861f3dd45e58e3cda7596791b03a644b5ad850b Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Fri, 6 Oct 2023 17:03:48 +0300 Subject: [PATCH 284/298] [win] fix theme changing. "system theme" became hidden --- win-linux/src/cascapplicationmanagerwrapper.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/win-linux/src/cascapplicationmanagerwrapper.cpp b/win-linux/src/cascapplicationmanagerwrapper.cpp index abd17be92..ca265ebf5 100644 --- a/win-linux/src/cascapplicationmanagerwrapper.cpp +++ b/win-linux/src/cascapplicationmanagerwrapper.cpp @@ -1716,8 +1716,7 @@ void CAscApplicationManagerWrapper::applyTheme(const wstring& theme, bool force) {"type", _app.m_themes->current().stype()}, {"id", QString::fromStdWString(_app.m_themes->current().id())} #ifndef Q_OS_LINUX -// ,{"system", _app.m_themes->isSystemSchemeDark() ? "dark" : "light"} - ,{"system", "disabled"} + ,{"system", _app.m_themes->isSystemSchemeDark() ? "dark" : "light"} #else ,{"system", "disabled"} #endif From 1906a01e47708b427e69e9c521ddbc2b7a0ca1df Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Fri, 6 Oct 2023 17:17:47 +0300 Subject: [PATCH 285/298] [win-linux] fix bug 64506 --- win-linux/src/components/ctabbar.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/win-linux/src/components/ctabbar.cpp b/win-linux/src/components/ctabbar.cpp index ca5ac07be..a1f1c4ab1 100644 --- a/win-linux/src/components/ctabbar.cpp +++ b/win-linux/src/components/ctabbar.cpp @@ -1149,7 +1149,7 @@ bool CTabBar::eventFilter(QObject *watched, QEvent *event) if (mouse_event->button() == Qt::LeftButton) { while (d->animationInProgress) PROCESSEVENTS(); - if (d->movedTab) { + if (d->movedTab && !d->lock) { if (d->currentIndex != d->movedTabIndex) { d->reorderIndexes(); int posX = d->tabLayouts[d->currentIndex].x(); From 86133907f0b9d1f7ff183751be1057786a5c3c93 Mon Sep 17 00:00:00 2001 From: Maria-Sukhova Date: Mon, 9 Oct 2023 18:09:26 +0300 Subject: [PATCH 286/298] updated translations .ts, locale --- common/loginpage/locale/bg.js | 17 ++++ common/loginpage/locale/ca.js | 16 ++++ common/loginpage/locale/el.js | 8 +- common/loginpage/locale/fr.js | 3 + common/loginpage/locale/lv.js | 17 ++++ common/loginpage/locale/pt-BR.js | 3 + common/loginpage/locale/ro.js | 3 + common/loginpage/locale/sk.js | 17 ++++ common/loginpage/locale/sl.js | 17 ++++ common/loginpage/locale/tr.js | 17 ++++ common/loginpage/locale/uk.js | 17 ++++ win-linux/langs/bg.ts | 102 ++++++++++----------- win-linux/langs/ca.ts | 146 +++++++++++++++---------------- win-linux/langs/el_GR.ts | 146 ++++++++++++++++--------------- win-linux/langs/en.ts | 22 ++--- win-linux/langs/fr.ts | 90 +++++++++---------- win-linux/langs/ja.ts | 86 +++++++++--------- win-linux/langs/lv.ts | 144 +++++++++++++++--------------- win-linux/langs/pt_BR.ts | 20 ++--- win-linux/langs/ro.ts | 20 ++--- win-linux/langs/ru.ts | 18 ++-- win-linux/langs/sk.ts | 144 +++++++++++++++--------------- win-linux/langs/sl.ts | 144 +++++++++++++++--------------- win-linux/langs/tr.ts | 144 +++++++++++++++--------------- win-linux/langs/uk.ts | 144 +++++++++++++++--------------- 25 files changed, 817 insertions(+), 688 deletions(-) diff --git a/common/loginpage/locale/bg.js b/common/loginpage/locale/bg.js index 191420376..e102efe07 100644 --- a/common/loginpage/locale/bg.js +++ b/common/loginpage/locale/bg.js @@ -91,4 +91,21 @@ l10n.bg = { settOptLaunchMode: 'Отвори файл', settOptLaunchInTab: 'В раздела', settOptLaunchInWindow: 'В прозореца', + settSpellcheckDetection: 'Откриване на езиково спелуване', + settOptDisabled: 'Деактивирано', + settOptEnabled: 'Активирано', + aboutChangelog: 'Дневник за промени', + updateNoUpdates: 'Приложението е актуално', + updateAvialable: 'Налична е версия $1. Натиснете за изтегляне.', + settOptThemeSystem: 'Същото като в системата', + settOptThemeContrastDark: 'Контрастно Тъмно', + settAUpdateMode: 'Режим за автоматично актуализиране', + settOptAUpdateSilent: 'Тих режим', + settOptAUpdateAsk: 'Помолете за изтегляне', + updateDownloadFinished: 'Изтеглянето приключи. Натиснете за инсталиране', + updateDownloadCanceled: 'Изтеглянето е отказано', + updateDownloadProgress: 'Изтегляне $1%. Натиснете за прекратяване', + settOptDescDisabled: "Автоматичната проверка за актуализации ще бъде деактивирана", + settOptDescAUpdateSilent: "Изтегляне на актуализации и питане преди инсталиране", + settOptDescAUpdateAsk: "Ще бъдете известени за всички стъпки на актуализирането", } \ No newline at end of file diff --git a/common/loginpage/locale/ca.js b/common/loginpage/locale/ca.js index dd54252f1..61d9ceecd 100644 --- a/common/loginpage/locale/ca.js +++ b/common/loginpage/locale/ca.js @@ -56,6 +56,7 @@ l10n.ca = { actActivate: 'Activa', actAbout: 'Sobre', actSettings: 'Configuració', + actTemplates: 'Plantilles', licKeyHolder: 'clau d\'activació d\'entrada', btnActivate: 'Activa', licGetLicense: 'Obtenir ara la teva llicencia', @@ -90,6 +91,21 @@ l10n.ca = { settOptLaunchMode: 'Obre fitxer', settOptLaunchInTab: 'En una pestanya', settOptLaunchInWindow: 'En una finestra', + settSpellcheckDetection: 'Detecció ortogràfica de la llengua', + settOptDisabled: 'Desactivat', + settOptEnabled: 'Activat', + aboutChangelog: 'Registre de canvis', + updateNoUpdates: 'App actualitzada', + updateAvialable: 'La versió $1 està disponible. Feu clic per descarregar-la.', settOptThemeSystem: 'Igual que el sistema', settOptThemeContrastDark: 'Contrast fosc', + settAUpdateMode: 'Mode d\'actualització automàtica', + settOptAUpdateSilent: 'Mode silenciós', + settOptAUpdateAsk: 'Demanar descarregar-la', + updateDownloadFinished: 'La descàrrega ha finalitzat. Feu clic per instal·lar', + updateDownloadCanceled: 'Descàrrega cancel·lada', + updateDownloadProgress: 'Descarregant $1%. Fes clic per pausar', + settOptDescDisabled: "S'inhabilitarà la comprovació d'actualitzacions automàtiques", + settOptDescAUpdateSilent: "Descarregar actualitzacions i preguntar abans d'instal·lar-les", + settOptDescAUpdateAsk: "Se li notificaran tots els passos de les actualitzacions", } diff --git a/common/loginpage/locale/el.js b/common/loginpage/locale/el.js index 58e760d25..0fcc62f75 100644 --- a/common/loginpage/locale/el.js +++ b/common/loginpage/locale/el.js @@ -44,10 +44,10 @@ l10n.el = { pshPhone: 'αριθμός τηλεφώνου', pshCode: 'κωδικός από μήνυμα κειμένου', loginNoteAssignPhone: 'Ο έλεγχος ταυτότητας δύο παραγόντων είναι ενεργοποιημένος για να παρέχει επιπλέον ασφάλεια στο ONLYOFFICE cloud. Εισαγάγετε τον αριθμό του κινητού σας τηλεφώνου για να συνεχίσετε την εργασία σας στο cloud office. Ο αριθμός κινητού τηλεφώνου πρέπει να εισαχθεί χρησιμοποιώντας μια διεθνή μορφή με κωδικό χώρας.', - loginNoteApplyCode: 'Ο έλεγχος ταυτότητας δύο παραγόντων είναι ενεργοποιημένος. Ο κωδικός έχει αποσταλεί στον αριθμό $1.', - newDoc: 'Εγγραφο', - newXlsx: 'Υπολογιστικο φυλλο', - newPptx: 'Παρουσιαση', + loginNoteApplyCode: 'Ο έλεγχος ταυτότητας δύο παραγόντων είναι ενεργοποιημένος. Ο κωδικός έχει αποσταλεί στον αριθμό $1.', + newDoc: 'Έγγραφο', + newXlsx: 'Υπολογιστικό φύλλο', + newPptx: 'Παρουσίαση', newForm: 'Πρότυπο φόρμας', actCreateNew: 'Δημιουργία νέου', actRecentFiles: 'Πρόσφατα αρχεία', diff --git a/common/loginpage/locale/fr.js b/common/loginpage/locale/fr.js index d86a8c340..de1374e0f 100644 --- a/common/loginpage/locale/fr.js +++ b/common/loginpage/locale/fr.js @@ -105,4 +105,7 @@ l10n.fr = { updateDownloadFinished: 'Téléchargement terminé. Cliquez pour installer', updateDownloadCanceled: 'Téléchargement annulé', updateDownloadProgress: 'Téléchargement de $1%. Cliquez pour arrêter', + settOptDescDisabled: "Vérification automatique des mises à jour sera désactivée", + settOptDescAUpdateSilent: "Télécharger les mises à jour et demander avant l'installation", + settOptDescAUpdateAsk: "Vous serez averti de toutes les étapes de mise à jour", } diff --git a/common/loginpage/locale/lv.js b/common/loginpage/locale/lv.js index 60cd555c8..f321543e4 100644 --- a/common/loginpage/locale/lv.js +++ b/common/loginpage/locale/lv.js @@ -91,4 +91,21 @@ l10n.lv = { settOptLaunchMode: 'Atvērt failu', settOptLaunchInTab: 'Cilnē', settOptLaunchInWindow: 'Logā', + settSpellcheckDetection: 'Pareizrakstības valodas noteikšana', + settOptDisabled: 'Atspējots', + settOptEnabled: 'Iespējots', + aboutChangelog: 'Izmaiņu žurnāls', + updateNoUpdates: 'Lietotne ir atjaunināta', + updateAvialable: 'Ir pieejama versija $1. Noklikšķiniet, lai lejupielādētu.', + settOptThemeSystem: 'Tas pats kā sistēma', + settOptThemeContrastDark: 'Tumšs kontrasts', + settAUpdateMode: 'Automātiskās atjaunināšanas režīms', + settOptAUpdateSilent: 'Klusuma režīms', + settOptAUpdateAsk: 'Lūgt lejupielādēt', + updateDownloadFinished: 'Lejupielāde ir pabeigta. Noklikšķiniet, lai instalētu', + updateDownloadCanceled: 'Lejupielāde ir atcelta', + updateDownloadProgress: 'Lejupielādē $1%. Noklikšķiniet, lai apturētu', + settOptDescDisabled: "Atjauninājumu automātiskā pārbaude tiks atspējota", + settOptDescAUpdateSilent: "Lejupielādēt atjauninājumus un jautāt pirms instalēšanas", + settOptDescAUpdateAsk: "Jums tiks paziņots par visām atjaunināšanas darbībām", } diff --git a/common/loginpage/locale/pt-BR.js b/common/loginpage/locale/pt-BR.js index 77029a5a8..397da521a 100644 --- a/common/loginpage/locale/pt-BR.js +++ b/common/loginpage/locale/pt-BR.js @@ -105,4 +105,7 @@ l10n.pt_BR = { updateDownloadFinished: 'Download finalizado. Clique para instalar', updateDownloadCanceled: 'Download cancelado', updateDownloadProgress: 'Baixando $1%. Clique para parar', + settOptDescDisabled: "A verificação automática de atualizações será desativada", + settOptDescAUpdateSilent: "Baixe atualizações e pergunte antes de instalar", + settOptDescAUpdateAsk: "Você será notificado sobre todas as etapas de atualização", } diff --git a/common/loginpage/locale/ro.js b/common/loginpage/locale/ro.js index 73e9deeb5..50fdde003 100644 --- a/common/loginpage/locale/ro.js +++ b/common/loginpage/locale/ro.js @@ -105,4 +105,7 @@ l10n.ro = { updateDownloadFinished: 'Descărcare încheiată. Faceți clic pentru a instala', updateDownloadCanceled: 'Descărcare anulată', updateDownloadProgress: 'Se descarcă $1%. Faceți clic pentru a opri descărcarea', + settOptDescDisabled: "Verificarea automată a actualizărilor va fi dezactivată", + settOptDescAUpdateSilent: "Descarcă actualizări și întreabă înainte de a instala", + settOptDescAUpdateAsk: "Veți primi notificări privind fiecare etapă de actualizare", } diff --git a/common/loginpage/locale/sk.js b/common/loginpage/locale/sk.js index 81c2c9e94..6fa281f9d 100644 --- a/common/loginpage/locale/sk.js +++ b/common/loginpage/locale/sk.js @@ -91,4 +91,21 @@ l10n.sk = { settOptLaunchMode: 'Otvoriť súbor', settOptLaunchInTab: 'V tabuľke', settOptLaunchInWindow: 'V okne', + settSpellcheckDetection: 'Rozpoznávanie jazyka pravopisu', + settOptDisabled: 'Vypnuté', + settOptEnabled: 'Zapnuté', + aboutChangelog: 'Protokol zmien', + updateNoUpdates: 'Aplikácia je aktuálna', + updateAvialable: 'Je dostupná verzia $1. Kliknite, aby ste si ju stiahli.', + settOptThemeSystem: 'Rovnaké ako systém', + settOptThemeContrastDark: 'Kontrast tmavý', + settAUpdateMode: 'Režim automatickej aktualizácie', + settOptAUpdateSilent: 'Tichý režim', + settOptAUpdateAsk: 'Spýtať sa pred sťahovaním', + updateDownloadFinished: 'Sťahovanie ukončené. Kliknite, aby sa spustila inštalácia', + updateDownloadCanceled: 'Sťahovanie bolo zrušené', + updateDownloadProgress: 'Sťahovanie $1%. Kliknutím zastavíte', + settOptDescDisabled: "Automatické sledovanie aktualizácií bude vypnuté", + settOptDescAUpdateSilent: "Stiahnuť aktualizácie a spýtať sa pred inštaláciou", + settOptDescAUpdateAsk: "Budete upozornení na všetky kroky aktualizácií", } diff --git a/common/loginpage/locale/sl.js b/common/loginpage/locale/sl.js index 5ef357c60..85bf0f651 100644 --- a/common/loginpage/locale/sl.js +++ b/common/loginpage/locale/sl.js @@ -91,4 +91,21 @@ l10n.sl = { settOptLaunchMode: 'Odpri datoteko', settOptLaunchInTab: 'V zavihku', settOptLaunchInWindow: 'V oknu', + settSpellcheckDetection: 'Zaznavanje črkovanja jezika', + settOptDisabled: 'Onemogočeno', + settOptEnabled: 'Omogočeno', + aboutChangelog: 'Dnevnik sprememb', + updateNoUpdates: 'Aplikacija je posodobljena', + updateAvialable: 'Verzija $1 je na voljo. Kliknite za prenos.', + settOptThemeSystem: 'Enako kot sistem', + settOptThemeContrastDark: 'Temen kontrast', + settAUpdateMode: 'Način samodejnega posodabljanja', + settOptAUpdateSilent: 'Tihi način', + settOptAUpdateAsk: 'Vprašaj pred prenosom', + updateDownloadFinished: 'Prenos končan. Kliknite za namestitev', + updateDownloadCanceled: 'Prenos preklican', + updateDownloadProgress: 'Prenašanje $1%. Kliknite za zaustavitev', + settOptDescDisabled: "Samodejno preverjanje posodobitev bo onemogočeno", + settOptDescAUpdateSilent: "Prenesite posodobitve in vprašaj pred namestitvijo", + settOptDescAUpdateAsk: "O vseh korakih posodobitve boste obveščeni", } diff --git a/common/loginpage/locale/tr.js b/common/loginpage/locale/tr.js index a537c4e12..a557e7660 100644 --- a/common/loginpage/locale/tr.js +++ b/common/loginpage/locale/tr.js @@ -91,4 +91,21 @@ l10n.tr = { settOptLaunchMode: 'Dosya aç', settOptLaunchInTab: 'Sekmede', settOptLaunchInWindow: 'Pencerede', + settSpellcheckDetection: 'Yazım dili algılama', + settOptDisabled: 'Devre Dışı', + settOptEnabled: 'Devrede', + aboutChangelog: 'Değişiklik günlüğü', + updateNoUpdates: 'Uygulama güncel', + updateAvialable: '$1 sürümü mevcut. İndirmek İçin Tıklayın.', + settOptThemeSystem: 'Sistemin aynısı', + settOptThemeContrastDark: 'Kontrast Koyu', + settAUpdateMode: 'Otomatik güncelleme modu', + settOptAUpdateSilent: 'Sessiz mod', + settOptAUpdateAsk: 'İndirmek için sor', + updateDownloadFinished: 'İndirme tamamlandı. Kurmak için tıklayın', + updateDownloadCanceled: 'İndirme iptal edildi', + updateDownloadProgress: '$1% indiriliyor. Durdurmak için tıklayın', + settOptDescDisabled: "Güncellemelerin otomatik olarak kontrol edilmesi devre dışı bırakılacak", + settOptDescAUpdateSilent: "Güncellemeleri indir ve yüklemeden önce sor", + settOptDescAUpdateAsk: "Tüm güncelleme adımları hakkında bilgilendirileceksiniz", } diff --git a/common/loginpage/locale/uk.js b/common/loginpage/locale/uk.js index 84152a33b..b1183b955 100644 --- a/common/loginpage/locale/uk.js +++ b/common/loginpage/locale/uk.js @@ -91,4 +91,21 @@ l10n.uk = { settOptLaunchMode: 'Відкрити файл', settOptLaunchInTab: 'У вкладці', settOptLaunchInWindow: 'У вікні', + settSpellcheckDetection: 'Визначення мови перевірки правопису', + settOptDisabled: 'Вимкнено', + settOptEnabled: 'Увімкнено', + aboutChangelog: 'Журнал змін', + updateNoUpdates: 'Застосунок актуальний', + updateAvialable: 'Доступна версія $1. Клацніть, щоб завантажити.', + settOptThemeSystem: 'Системна', + settOptThemeContrastDark: 'Контрастна темна', + settAUpdateMode: 'Режим автооновлення', + settOptAUpdateSilent: 'Беззвучний режим', + settOptAUpdateAsk: 'Попросити завантажити', + updateDownloadFinished: 'Завантаження завершено. Клацніть, щоб інсталювати', + updateDownloadCanceled: 'Завантаження скасовано', + updateDownloadProgress: 'Завантаження $1%. Клацніть, щоб припинити', + settOptDescDisabled: "Автоматичну перевірку оновлень буде вимкнено", + settOptDescAUpdateSilent: "Завантажити оновлення та запитати перед інсталюванням", + settOptDescAUpdateAsk: "Ви будете сповіщені про всі етапи оновлення", } diff --git a/win-linux/langs/bg.ts b/win-linux/langs/bg.ts index 71c6c12cc..18977b83b 100644 --- a/win-linux/langs/bg.ts +++ b/win-linux/langs/bg.ts @@ -303,7 +303,7 @@ Macro-enabled Presentation File (*.pptm) - + Макро-активиран Презентационен Файл (*.pptm) @@ -331,27 +331,27 @@ DOCX Document - + DOCX документ OpenDocument Document template - + OpenDocument Шаблон за Документ OpenDocument Presentation Template - + OpenDocument Шаблон за Презентация Macro-enabled spreadsheet template - + Макро-активиран Шаблон за Таблица OpenDocument Spreadsheet Template - + OpenDocument Шаблон за Таблица @@ -381,7 +381,7 @@ SVG Image (*.svg) - + SVG изображение (*.svg) @@ -465,19 +465,19 @@ Spreadsheet template - + Шаблон за таблица Presentation template - + Шаблон за презентация Document template - + Шаблон за документ @@ -523,12 +523,12 @@ More than one document is open.<br>Close the window anyway? - + Отворени са повече от един документ.<br>Затваряне на прозореца въпреки това? Don't ask again. - + Не питай повторно. @@ -635,92 +635,92 @@ Check for updates - + Проверка за актуализации Unable to check update: URL not defined. - + Неуспешна проверка на актуализация: URL адресът не е дефиниран. To finish updating, restart app - + За да завършите актуализацията, рестартирайте приложението Restart - + Рестартирай Checking for updates... - + Проверяваме за актуализации… Updates are not allowed! - + Актуализациите не са позволени! This folder configuration does not allow for updates! The folder name should be: - + Конфигурацията на тази папка не позволява актуализации! Името на папката трябва да бъде: An error occurred while check updates: Update Service not found! - + Появи се грешка при проверка на актуализациите: Услугата за актуализиране не е намерена! Downloading new version %1 (%2%) - + Изтегляне на нова версия %1 (%2%) An error occurred while loading updates: Update Service not found! - + Появи се грешка при проверка на актуализациите: Услугата за актуализиране не е намерена! Cancel - Отказ + Отказ An error occurred while loading updates: package Url is empty! - + Появи се грешка при проверка на актуализациите: URL адресът на пакета е празен! Update package error: md5 sum does not match the original. - + Грешка в пакета за актуализиране: md5 сумата не съвпада с оригинала. Preparing update... - + Подготвяне на актуализация… An error occurred while unzip updates: Update Service not found! - + Появи се грешка при разархивирането на актуализациите: Услугата за актуализиране не е намерена! Update is available (version %1) - + Налична е актуализация (версия %1) Download update - Изтеглете актуализация + Изтеглете актуализация Current version is up to date - + Настоящата версия е актуална @@ -760,7 +760,7 @@ Last check performed %1 - + Последна проверка, извършена %1 @@ -770,34 +770,34 @@ Update is available - + Налична е актуализация Current version - + Настояща версия Update version - + Актуализирай версия Would you like to download update now? - + Бихте ли желали да изтеглите актуализация сега? Update is ready to install - + Актуализацията е готова за инсталиране Would you like to restart app now? - + Бихте ли желали да рестартирате приложението сега? A new version of %1 is available! @@ -841,13 +841,13 @@ XML File (*.xml) - + XML Файл (*.xml) Access to file '%1' is denied! - + Достъпът до файл '%1' е отказан! @@ -880,7 +880,7 @@ Install later - + Инсталирай по-късно @@ -915,58 +915,58 @@ An error occurred while start install updates! - + Появи се грешка при старта на инсталиране на актуализациите! An error occurred while start replacing files: Update Service not found! - + Появи се грешка при старта на замяна на файловете: Услугата за актуализиране не е намерена! Cancel - Отказ + Отказ Yes - Да + Да No - Не + Не OK - ОК + ОК Skip - Пропусни + Пропусни Buy Now - + Купи Сега Activate - + Активирай Continue - + Продължи An error occurred while opening the portal:<br>%1 - + Появи се грешка при отварянето на портал:<br>%1 &OK diff --git a/win-linux/langs/ca.ts b/win-linux/langs/ca.ts index 3472b4e25..ed24eb206 100644 --- a/win-linux/langs/ca.ts +++ b/win-linux/langs/ca.ts @@ -95,7 +95,7 @@ Open Document - Obre el document + Obre el document @@ -179,7 +179,7 @@ There are no printers available - + No hi ha cap impressora disponible @@ -287,7 +287,7 @@ Macro-enabled Presentation File (*.pptm) - + Fitxer de presentació macroactiva (*.pptm) @@ -315,27 +315,27 @@ DOCX Document - + Document DOCX OpenDocument Document template - + Plantilla de document OpenDocument OpenDocument Presentation Template - + Plantilla de presentació OpenDocument Macro-enabled spreadsheet template - + Plantilla de full de càlcul amb macros OpenDocument Spreadsheet Template - + Plantilla de full de càlcul OpenDocument @@ -365,12 +365,12 @@ SVG Image (*.svg) - + Imatge SVG (*.svg) JPG Image (*.jpg *.jpeg) - + Imatge JPG (*.jpg *.jpeg) @@ -443,25 +443,25 @@ All supported files - + Tots els fitxers admesos Spreadsheet template - + Plantilla de full de càlcul Presentation template - + Plantilla de presentació Document template - + Plantilla de document @@ -499,7 +499,7 @@ Select Folder - + Seleccionar una carpeta @@ -507,53 +507,53 @@ More than one document is open.<br>Close the window anyway? - + Hi ha més d'un document obert.<br>Voleu tancar la finestra de totes maneres? Don't ask again. - + No tornar a preguntar. File format not supported. - El format de fitxer no és compatible. + El format de fitxer no és compatible. %1 doesn't exists!<br>Remove file from the list? - %1 No està disponible. Es pot canviar el nom, moure-lo o suprimir-lo.<br>Voleu eliminar el fitxer de la llista? + %1 No està disponible. Es pot canviar el nom, moure-lo o suprimir-lo.<br>Voleu eliminar el fitxer de la llista? Document must be saved firstly. - El document s'ha de desar abans. + El document s'ha de desar abans. Document must be saved to continue.<br>Save the document? - El document s'ha de desar per a continuar.<br>Desar el document? + El document s'ha de desar per a continuar.<br>Desar el document? There are no printers available - + No hi ha cap impressora disponible Print Document - Imprimir el document + Imprimir el document Sign Up - Crear portal + Crear portal %1 is modified.<br>Do you want to keep changes? - %1 ha estat modificat.<br>Voleu desar els canvis? + %1 ha estat modificat.<br>Voleu desar els canvis? @@ -615,92 +615,92 @@ Check for updates - + Comprovar si hi ha actualitzacions Unable to check update: URL not defined. - + No s'ha pogut comprovar l'actualització: l'URL no està definida. To finish updating, restart app - + Per finalitzar l'actualització, reinicia l'aplicació Restart - + Reiniciar Checking for updates... - + S'estan comprovant les actualitzacions... Updates are not allowed! - + No es permeten actualitzacions! This folder configuration does not allow for updates! The folder name should be: - + Aquesta configuració de carpeta no permet actualitzacions! El nom de la carpeta hauria de ser: An error occurred while check updates: Update Service not found! - + S'ha produït un error en comprovar les actualitzacions: no s'ha trobat el servei d'actualització! Downloading new version %1 (%2%) - + S'està baixant la versió nova %1 (%2%) An error occurred while loading updates: Update Service not found! - + S'ha produït un error en carregar les actualitzacions: no s'ha trobat el servei d'actualització! Cancel - Cancel·lar + Cancel·lar An error occurred while loading updates: package Url is empty! - + S'ha produït un error en carregar les actualitzacions: l'URL del paquet està buit! Update package error: md5 sum does not match the original. - + Error en actualitzar el paquet: la suma md5 no coincideix amb l'original. Preparing update... - + S'està preparant l'actualització... An error occurred while unzip updates: Update Service not found! - + S'ha produït un error en descomprimir les actualitzacions: no s'ha trobat el servei d'actualització! Update is available (version %1) - + Hi ha una actualització disponible (versió %1) Download update - + Baixar l'actualització Current version is up to date - + La versió actual està actualitzada @@ -740,7 +740,7 @@ Last check performed %1 - + Última comprovació realitzada %1 @@ -750,34 +750,34 @@ Update is available - + Hi ha una actualització disponible Current version - + Versió actual Update version - + Actualitzar la versió Would you like to download update now? - + Voleu baixar l'actualització ara? Update is ready to install - + L'actualització està preparada per instal·lar Would you like to restart app now? - + Voleu reiniciar l'aplicació ara? @@ -801,128 +801,128 @@ XML File (*.xml) - + Fitxer XML (*.xml) Access to file '%1' is denied! - + S'ha denegat l'accés al fitxer '%1'! Read only - + Només lectura Skip this version - + Ometre aquesta versió Remind me later - + Recorda'm-ho més tard Install update - + Instal·lar l'actualització Install later - + Instal·lar més tard Save and Restart Now - + Desar i reiniciar ara Save and Install Now - + Desar i actualitzar ara Download update - + Baixar l'actualització Software Update - + Actualitzar el programari Release notes - + Notes de publicació An error occurred while start install updates! - + S'ha produït un error en iniciar la instal·lació d'actualitzacions! An error occurred while start replacing files: Update Service not found! - + S'ha produït un error en iniciar la substitució dels fitxers: no s'ha trobat el servei d'actualització! Cancel - Cancel·lar + Cancel·lar Yes - + No - No + No OK - D'accord + D'accord Skip - + Ometre Buy Now - + Comprar ara Activate - + Activar Continue - + Continuar An error occurred while opening the portal:<br>%1 - + S'ha produït un error en obrir el portal:<br>%1 &OK diff --git a/win-linux/langs/el_GR.ts b/win-linux/langs/el_GR.ts index d6c0e3bc0..27de60a16 100644 --- a/win-linux/langs/el_GR.ts +++ b/win-linux/langs/el_GR.ts @@ -95,7 +95,7 @@ Open Document - Άνοιγμα εγγράφου + Άνοιγμα εγγράφου @@ -179,7 +179,7 @@ There are no printers available - + Δεν υπάρχουν διαθέσιμοι εκτυπωτές @@ -287,7 +287,7 @@ Macro-enabled Presentation File (*.pptm) - + Αρχείο παρουσίασης με δυνατότητα μακροεντολών (*.pptm) @@ -315,27 +315,28 @@ DOCX Document - + Έγγραφο DOCX OpenDocument Document template - + Πρότυπο παρουσίασης OpenDocument + Πρότυπο εγγράφου OpenDocument OpenDocument Presentation Template - + Macro-enabled spreadsheet template - + Πρότυπο λογιστικού φύλλου με δυνατότητα χρήσης μακροεντολών OpenDocument Spreadsheet Template - + Πρότυπο υπολογιστικού φύλλου OpenDocument @@ -365,12 +366,12 @@ SVG Image (*.svg) - + Εικόνα SVG (*.svg) JPG Image (*.jpg *.jpeg) - + Εικόνα JPG (*.jpg *.jpeg) @@ -443,25 +444,25 @@ All supported files - + Όλα τα υποστηριζόμενα αρχεία Spreadsheet template - + Πρότυπο υπολογιστικού φύλλου Presentation template - + Πρότυπο παρουσίασης Document template - + Πρότυπο εγγράφου @@ -499,7 +500,7 @@ Select Folder - + Επιλογή φακέλου @@ -507,53 +508,53 @@ More than one document is open.<br>Close the window anyway? - + Περισσότερα από ένα έγγραφα είναι ανοιχτά.<br>Κλείσιμο του παραθύρου ούτως ή άλλως; Don't ask again. - + Να μην ξαναγίνει ερώτηση. File format not supported. - Η μορφή αρχείου δεν υποστηρίζεται. + Η μορφή αρχείου δεν υποστηρίζεται. %1 doesn't exists!<br>Remove file from the list? - Το %1 δεν είναι διαθέσιμο. Μπορεί να έχει μετονομαστεί, μετακινηθεί ή διαγραφεί.<br>Θέλετε να αφαιρέσετε το αρχείο από τη λίστα; + Το %1 δεν είναι διαθέσιμο. Μπορεί να έχει μετονομαστεί, μετακινηθεί ή διαγραφεί.<br>Θέλετε να αφαιρέσετε το αρχείο από τη λίστα; Document must be saved firstly. - Το έγγραφο πρέπει να αποθηκευτεί πρώτα. + Το έγγραφο πρέπει να αποθηκευτεί πρώτα. Document must be saved to continue.<br>Save the document? - Το έγγραφο πρέπει να αποθηκευτεί για να συνεχίσετε.<br>Αποθήκευση εγγράφου; + Το έγγραφο πρέπει να αποθηκευτεί για να συνεχίσετε.<br>Αποθήκευση εγγράφου; There are no printers available - + Δεν υπάρχουν διαθέσιμοι εκτυπωτές Print Document - Εκτύπωση εγγράφου + Εκτύπωση εγγράφου Sign Up - Δημιουργία πύλης + Δημιουργία πύλης %1 is modified.<br>Do you want to keep changes? - Το %1 έχει τροποποιηθεί.<br>Θέλετε να αποθηκεύσετε τις αλλαγές; + Το %1 έχει τροποποιηθεί.<br>Θέλετε να αποθηκεύσετε τις αλλαγές; @@ -615,92 +616,93 @@ Check for updates - + Έλεγχος για ενημερώσεις Unable to check update: URL not defined. - + Δεν είναι δυνατός ο έλεγχος της ενημέρωσης: Δεν έχει οριστεί URL. To finish updating, restart app - + Επανεκκίνηση + Για να ολοκληρώσετε την ενημέρωση, επανεκκινήστε την εφαρμογή Restart - + Checking for updates... - + Γίνεται έλεγχος για ενημερώσεις... Updates are not allowed! - + Οι ενημερώσεις δεν επιτρέπονται! This folder configuration does not allow for updates! The folder name should be: - + Αυτή η διαμόρφωση φακέλου δεν επιτρέπει ενημερώσεις! Το όνομα του φακέλου θα πρέπει να είναι: An error occurred while check updates: Update Service not found! - + Προέκυψε σφάλμα κατά τον έλεγχο των ενημερώσεων: Η υπηρεσία ενημέρωσης δεν βρέθηκε! Downloading new version %1 (%2%) - + Λήψη νέας έκδοσης %1 (%2%) An error occurred while loading updates: Update Service not found! - + Εμφανίστηκε σφάλμα κατά τη φόρτωση ενημερώσεων: Η υπηρεσία ενημέρωσης δεν βρέθηκε! Cancel - Ακύρωση + Ακύρωση An error occurred while loading updates: package Url is empty! - + Εμφανίστηκε σφάλμα κατά τη φόρτωση ενημερώσεων: Η Url του πακέτου είναι κενή! Update package error: md5 sum does not match the original. - + Σφάλμα πακέτου ενημέρωσης: Το άθροισμα md5 δεν ταιριάζει με το αρχικό. Preparing update... - + Προετοιμασία ενημέρωσης... An error occurred while unzip updates: Update Service not found! - + Εμφανίστηκε σφάλμα κατά την αποσυμπίεση των ενημερώσεων: Η υπηρεσία ενημερώσεων δεν βρέθηκε! Update is available (version %1) - + Η ενημέρωση είναι διαθέσιμη (έκδοση %1) Download update - + Λήψη ενημέρωσης Current version is up to date - + Η τρέχουσα έκδοση είναι ενημερωμένη @@ -740,7 +742,7 @@ Last check performed %1 - + Έγινε ο τελευταίος έλεγχος %1 @@ -750,34 +752,34 @@ Update is available - + Η ενημέρωση είναι διαθέσιμη Current version - + Τρέχουσα έκδοση Update version - + Έκδοση ενημέρωσης Would you like to download update now? - + Θα θέλατε να κατεβάσετε την ενημέρωση τώρα; Update is ready to install - + Η ενημέρωση είναι έτοιμη για εγκατάσταση Would you like to restart app now? - + Θα θέλατε να κάνετε επανεκκίνηση της εφαρμογής τώρα; @@ -805,48 +807,48 @@ XML File (*.xml) - + Αρχείο XML (*.xml) Access to file '%1' is denied! - + Η πρόσβαση στο αρχείο '%1' δεν επιτρέπεται! Read only - + Μόνο για ανάγνωση Skip this version - + Παράλειψη αυτής της έκδοσης Remind me later - + Υπενθύμιση αργότερα Install update - + Εγκατάσταση ενημέρωσης Install later - + Εγκατάσταση αργότερα Save and Restart Now - + Αποθήκευση και επανεκκίνηση τώρα @@ -858,75 +860,75 @@ Download update - + Λήψη ενημέρωσης Software Update - + Ενημέρωση λογισμικού Release notes - + Σημειώσεις έκδοσης An error occurred while start install updates! - + Εμφανίστηκε σφάλμα κατά την έναρξη εγκατάστασης ενημερώσεων! An error occurred while start replacing files: Update Service not found! - + Εμφανίστηκε σφάλμα κατά την έναρξη αντικατάστασης αρχείων: Η υπηρεσία ενημερώσεων δεν βρέθηκε! Cancel - Ακύρωση + Ακύρωση Yes - Ναι + Ναι No - Όχι + Όχι OK - Εντάξει + Εντάξει Skip - + Παράλειψη Buy Now - + Αγορά τώρα Activate - + Ενεργοποίηση Continue - + Συνέχεια An error occurred while opening the portal:<br>%1 - + Εμφανίστηκε σφάλμα κατά το άνοιγμα της πύλης:<br>%1 &OK diff --git a/win-linux/langs/en.ts b/win-linux/langs/en.ts index 7734534cf..8082350d3 100644 --- a/win-linux/langs/en.ts +++ b/win-linux/langs/en.ts @@ -589,7 +589,7 @@ Unable to check update: URL not defined. - + @@ -639,7 +639,7 @@ An error occurred while loading updates: package Url is empty! - + An error occurred while loading updates: package URL is empty! @@ -674,47 +674,47 @@ An error occured while unpacking the archive - + An error occurred while unpacking the archive Update download failed: out of memory! - + Update download failed: server connection error! - + Update download failed: wrong URL! - + Update download failed: unable to create file! - + Update download failed: network error! - + A service error has occurred! - + Last check performed %1 - + Error opening JSON file. - + diff --git a/win-linux/langs/fr.ts b/win-linux/langs/fr.ts index df7b93fae..8ebbb6fbf 100644 --- a/win-linux/langs/fr.ts +++ b/win-linux/langs/fr.ts @@ -335,27 +335,27 @@ DOCX Document - + Document DOCX OpenDocument Document template - + Modèle de document OpenDocument OpenDocument Presentation Template - + Modèle de présentation OpenDocument Macro-enabled spreadsheet template - + Modèle de feuille de calcul avec les macros activées OpenDocument Spreadsheet Template - + Modèle de feuille de calcul OpenDocument @@ -385,7 +385,7 @@ SVG Image (*.svg) - + Image SVG (*.svg) @@ -469,19 +469,19 @@ Spreadsheet template - + Modèle de feuille de calcul Presentation template - + Modèle de présentation Document template - + Modèle de document texte @@ -527,12 +527,12 @@ More than one document is open.<br>Close the window anyway? - + Plus d'un document est ouvert.<br>Fermer de toute façon la fenêtre ? Don't ask again. - + Ne plus demander. @@ -639,32 +639,32 @@ Check for updates - + Vérification des mises à jour Unable to check update: URL not defined. - + Impossible de vérifier la mise à jour : URL non définie. To finish updating, restart app - + Pour terminer la mise à jour, redémarrez l'application Restart - + Redémarrer Checking for updates... - + Vérification des mises à jour... Updates are not allowed! - + Les mises à jour ne sont pas autorisées ! @@ -674,134 +674,134 @@ An error occurred while check updates: Update Service not found! - Une erreur s'est produite lors de la vérification des mises à jour : Service de mise à jour introuvable ! + Une erreur s'est produite lors de la vérification des mises à jour : Service de mise à jour introuvable ! Downloading new version %1 (%2%) - + Téléchargement de la nouvelle version %1 (%2%) An error occurred while loading updates: Update Service not found! - Une erreur s'est produite lors du chargement des mises à jour : Service de mise à jour introuvable ! + Une erreur s'est produite lors du chargement des mises à jour : Service de mise à jour introuvable ! Cancel - Annuler + Annuler An error occurred while loading updates: package Url is empty! - + Une erreur s'est produite lors du chargement des mises à jour : l'URL du paquet est vide ! Update package error: md5 sum does not match the original. - + Erreur de mise à jour du paquet : la somme md5 ne correspond pas à l'original. Preparing update... - + Préparation de la mise à jour... An error occurred while unzip updates: Update Service not found! - Une erreur s'est produite lors de la décompression des mises à jour : Service de mise à jour introuvable ! + Une erreur s'est produite lors de la décompression des mises à jour : Service de mise à jour introuvable ! Update is available (version %1) - + La mise à jour est disponible (version %1) Download update - Télécharger la mise à jour + Télécharger la mise à jour Current version is up to date - + La version actuelle est à jour An error occured while unpacking the archive - + Une erreur s'est produite lors de la décompression de l'archive Update download failed: out of memory! - + Le téléchargement de la mise à jour a échoué : manque de mémoire ! Update download failed: server connection error! - + Le téléchargement de la mise à jour a échoué : erreur de connexion au serveur ! Update download failed: wrong URL! - + Le téléchargement de la mise à jour a échoué : URL incorrecte ! Update download failed: unable to create file! - + Le téléchargement de la mise à jour a échoué : impossible de créer un fichier ! Update download failed: network error! - + Le téléchargement de la mise à jour a échoué : erreur de connexion au réseau ! A service error has occurred! - + Une erreur de service s'est produite ! Last check performed %1 - + Dernière vérification effectuée %1 Error opening JSON file. - + Erreur d'ouverture du fichier JSON. Update is available - + La mise à jour est disponible Current version - + Version actuelle Update version - + Version actualisée Would you like to download update now? - + Souhaitez-vous télécharger la mise à jour maintenant ? Update is ready to install - + La mise à jour est prête à être installée Would you like to restart app now? - + Souhaitez-vous redémarrer l'application maintenant ? A new version of %1 is available! @@ -851,7 +851,7 @@ Access to file '%1' is denied! - L'accès au fichier "%1" est refusé ! + L'accès au fichier '%1' est refusé ! @@ -884,7 +884,7 @@ Install later - + Installer ultérieurement diff --git a/win-linux/langs/ja.ts b/win-linux/langs/ja.ts index 726bd7661..792e6c77c 100644 --- a/win-linux/langs/ja.ts +++ b/win-linux/langs/ja.ts @@ -335,17 +335,17 @@ DOCX Document - + DOCXドキュメント OpenDocument Document template - + OpenDocument ドキュメントのテンプレート OpenDocument Presentation Template - + OpenDocument プレゼンテーションのテンプレート @@ -355,7 +355,7 @@ OpenDocument Spreadsheet Template - + OpenDocumentスプレッドシートのテンプレート @@ -385,7 +385,7 @@ SVG Image (*.svg) - + SVG画像 (*.svg) @@ -469,19 +469,19 @@ Spreadsheet template - + スプレッドシートのテンプレート Presentation template - + プレゼンテーションのテンプレート Document template - + ドキュメントのテンプレート @@ -527,12 +527,12 @@ More than one document is open.<br>Close the window anyway? - + 複数のドキュメントが開いています。<br>そのままでウィンドウを閉じてもよろしいですか? Don't ask again. - + 二度と聞かないようにします。 @@ -639,32 +639,32 @@ Check for updates - + アップデートをチェックしています Unable to check update: URL not defined. - + アップデートを確認できません: URL が定義されていません。 To finish updating, restart app - + 更新を終了するには、アプリを再起動してください Restart - + 再起動 Checking for updates... - + アップデートをチェックしています… Updates are not allowed! - + アップデートは許可されていません! @@ -674,134 +674,134 @@ An error occurred while check updates: Update Service not found! - アップデートを確認中にエラーが発生しました:アップデートサービスが見つかりませんでした! + アップデートを確認中にエラーが発生しました:アップデートサービスが見つかりませんでした! Downloading new version %1 (%2%) - + 新しいバージョン%1 (%2%) をダウンロードしています An error occurred while loading updates: Update Service not found! - アップデートの起動中にエラーが発生しました:サービスが見つかりませんでした! + アップデートの起動中にエラーが発生しました:サービスが見つかりませんでした! Cancel - キャンセル + キャンセル An error occurred while loading updates: package Url is empty! - + 更新のロード中にエラーが発生しました: パッケージ URLが空です! Update package error: md5 sum does not match the original. - + パッケージの更新エラー:md5 sum がオリジナルと一致しません。 Preparing update... - + アップデートの準備中です… An error occurred while unzip updates: Update Service not found! - アップデートのアーカイブを解除中にエラーが発生しました:アップデートサービスが見つかりませんでした! + アップデートのアーカイブを解除中にエラーが発生しました:アップデートサービスが見つかりませんでした! Update is available (version %1) - + 更新が利用可能です (バージョン %1) Download update - アップデートをダウンロードする + アップデートをダウンロードする Current version is up to date - + 現在のバージョンは最新です An error occured while unpacking the archive - + アーカイブの解凍中にエラーが発生しました Update download failed: out of memory! - + アップデートのダウンロードに失敗しました: メモリ不足です Update download failed: server connection error! - + アップデートのダウンロードに失敗しました: サーバー接続エラー Update download failed: wrong URL! - + アップデートのダウンロードに失敗しました: URLが間違っています Update download failed: unable to create file! - + 更新のダウンロードに失敗しました: ファイルを作成できません Update download failed: network error! - + ダウンロードの更新に失敗しました:ネットワークエラー A service error has occurred! - + サービスエラーが発生しました! Last check performed %1 - + 最後に実行されたチェック %1 Error opening JSON file. - + JSON ファイルを開くときにエラーが発生しました。 Update is available - + アップデートが利用可能です Current version - + 現在のバージョン Update version - + バージョンの更新 Would you like to download update now? - + アップデートをダウンロードしますか? Update is ready to install - + アップデートをインストールする準備ができています Would you like to restart app now? - + アプリを再起動しますか? A new version of %1 is available! @@ -884,7 +884,7 @@ Install later - + 後でインストールする diff --git a/win-linux/langs/lv.ts b/win-linux/langs/lv.ts index ac966efb9..298b6fe6e 100644 --- a/win-linux/langs/lv.ts +++ b/win-linux/langs/lv.ts @@ -95,7 +95,7 @@ Open Document - Atvērt Dokumentu + Atvērt Dokumentu @@ -179,7 +179,7 @@ There are no printers available - + Nav pieejams neviens printeris @@ -287,7 +287,7 @@ Macro-enabled Presentation File (*.pptm) - + Prezentācijas fails ar iespējotu makro (*.pptm) @@ -315,27 +315,27 @@ DOCX Document - + DOCX dokuments OpenDocument Document template - + OpenDocument dokumenta veidne OpenDocument Presentation Template - + OpenDocument prezentācijas veidne Macro-enabled spreadsheet template - + Izklājlapas veidne ar iespējotu makro OpenDocument Spreadsheet Template - + OpenDocument izklājlapas veidne @@ -365,12 +365,12 @@ SVG Image (*.svg) - + SVG attēls (*.svg) JPG Image (*.jpg *.jpeg) - + JPG attēls (*.jpg *.jpeg) @@ -443,25 +443,25 @@ All supported files - + Visi atbalstītie faili Spreadsheet template - + Izklājlapas veidne Presentation template - + Prezentācijas veidne Document template - + Dokumenta veidne @@ -499,7 +499,7 @@ Select Folder - + Izvēlēties mapi @@ -507,53 +507,53 @@ More than one document is open.<br>Close the window anyway? - + Ir atvērts vairāk nekā viens dokuments.<br>Vai aizvērt logu tik un tā? Don't ask again. - + Nejautājiet vēlreiz. File format not supported. - Faila formāts netiek atbalstīts. + Faila formāts netiek atbalstīts. %1 doesn't exists!<br>Remove file from the list? - %1 nav pieejams. Tas varētu būt pārdēvēts, pārvietots vai izdzēsts.<br>Vai jūs vēlaties izņemt failu no saraksta? + %1 nav pieejams. Tas varētu būt pārdēvēts, pārvietots vai izdzēsts.<br>Vai jūs vēlaties izņemt failu no saraksta? Document must be saved firstly. - Dokuments vispirms jāsaglabā. + Dokuments vispirms jāsaglabā. Document must be saved to continue.<br>Save the document? - Dokuments jāsaglabā, lai turpinātu.<br>Saglabāt dokumentu? + Dokuments jāsaglabā, lai turpinātu.<br>Saglabāt dokumentu? There are no printers available - + Nav pieejams neviens printeris Print Document - Izprintēt dokumentu + Izprintēt dokumentu Sign Up - Izveidot portālu + Izveidot portālu %1 is modified.<br>Do you want to keep changes? - %1 tika izmainīts.<br>Vai jūs vēlaties saglabāt izmaiņas? + %1 tika izmainīts.<br>Vai jūs vēlaties saglabāt izmaiņas? @@ -615,92 +615,92 @@ Check for updates - + Meklēt atjauninājumus Unable to check update: URL not defined. - + Nevar pārbaudīt atjauninājumu: vietrādis URL nav definēts. To finish updating, restart app - + Lai pabeigtu atjaunināšanu, restartējiet lietotni Restart - + Restartēt Checking for updates... - + Notiek atjauninājumu pārbaude... Updates are not allowed! - + Atjauninājumi nav atļauti! This folder configuration does not allow for updates! The folder name should be: - + Šī mapes konfigurācija neļauj veikt atjauninājumus! Mapes nosaukumam ir jābūt šādam: An error occurred while check updates: Update Service not found! - + Pārbaudot atjauninājumus, radās kļūda: atjaunināšanas pakalpojums nav atrasts! Downloading new version %1 (%2%) - + Notiek jaunas versijas %1 lejupielāde (%2%) An error occurred while loading updates: Update Service not found! - + Ielādējot atjauninājumus, radās kļūda: atjaunināšanas pakalpojums nav atrasts! Cancel - Atcelt + Atcelt An error occurred while loading updates: package Url is empty! - + Ielādējot atjauninājumus, radās kļūda: pakotnes vietrādis URL ir tukšs! Update package error: md5 sum does not match the original. - + Atjaunināšanas pakotnes kļūda: md5 summa neatbilst oriģinālam. Preparing update... - + Sagatavo atjauninājumu... An error occurred while unzip updates: Update Service not found! - + Izpakojot atjauninājumus, radās kļūda: atjaunināšanas pakalpojums nav atrasts! Update is available (version %1) - + Ir pieejams atjauninājums (versija %1) Download update - + Lejupielādēt atjauninājumu Current version is up to date - + Pašreizējā versija ir atjaunināta @@ -740,7 +740,7 @@ Last check performed %1 - + Pēdējā pārbaude veikta %1 @@ -750,34 +750,34 @@ Update is available - + Ir pieejams atjauninājums Current version - + Pašreizējā versija Update version - + Atjaunināt versiju Would you like to download update now? - + Vai vēlaties lejupielādēt atjauninājumu tūlīt? Update is ready to install - + Atjauninājums ir gatavs instalēšanai Would you like to restart app now? - + Vai vēlaties restartēt lietotni tūlīt? @@ -805,48 +805,48 @@ XML File (*.xml) - + XML fails (*.xml) Access to file '%1' is denied! - + Piekļuve failam '%1' ir liegta! Read only - + Tikai lasāms Skip this version - + Izlaist šo versiju Remind me later - + Atgādināt man vēlāk Install update - + Instalēt atjauninājumu Install later - + Instalēt vēlāk Save and Restart Now - + Saglabāt un restartēt tagad @@ -858,75 +858,75 @@ Download update - + Lejupielādēt atjauninājumu Software Update - + Programmatūras atjauninājums Release notes - + Izlaiduma piezīmes An error occurred while start install updates! - + Uzsākot atjauninājumu instalēšanu, radās kļūda! An error occurred while start replacing files: Update Service not found! - + Sākot aizstāt failus, radās kļūda: atjaunināšanas pakalpojums nav atrasts! Cancel - Atcelt + Atcelt Yes - + No - + OK - Labi + Labi Skip - + Izlaist Buy Now - + Pirkt tagad Activate - + Aktivizēt Continue - + Turpināt An error occurred while opening the portal:<br>%1 - + Atverot portālu, radās kļūda:<br>%1 &OK diff --git a/win-linux/langs/pt_BR.ts b/win-linux/langs/pt_BR.ts index 7945b166a..e7a01f5bc 100644 --- a/win-linux/langs/pt_BR.ts +++ b/win-linux/langs/pt_BR.ts @@ -648,7 +648,7 @@ Unable to check update: URL not defined. - + Não foi possível verificar a atualização: URL não definido. @@ -737,47 +737,47 @@ An error occured while unpacking the archive - + Ocorreu um erro ao descompactar o arquivo Update download failed: out of memory! - + Falha no download da atualização: sem memória! Update download failed: server connection error! - + Falha no download da atualização: erro de conexão do servidor! Update download failed: wrong URL! - + Falha no download da atualização: URL errado! Update download failed: unable to create file! - + Falha no download da atualização: não foi possível criar o arquivo! Update download failed: network error! - + Falha no download da atualização: erro de rede! A service error has occurred! - + Ocorreu um erro de serviço! Last check performed %1 - + Última verificação realizada %1 Error opening JSON file. - + Erro ao abrir arquivo JSON. diff --git a/win-linux/langs/ro.ts b/win-linux/langs/ro.ts index 71c5712d3..df18f62b7 100644 --- a/win-linux/langs/ro.ts +++ b/win-linux/langs/ro.ts @@ -648,7 +648,7 @@ Unable to check update: URL not defined. - + Imposibil de verificat actualizarea: Adresa URL nu este definită. @@ -737,47 +737,47 @@ An error occured while unpacking the archive - + A intervenit o eroare în timpul dezarhivării Update download failed: out of memory! - + Descărcarea actualizării eșuată: memoria insuficientă! Update download failed: server connection error! - + Descărcarea actualizării eșuată: eroare de conectare la server! Update download failed: wrong URL! - + Descărcarea actualizării eșuată: adresa URL incorectă! Update download failed: unable to create file! - + Descărcarea actualizării eșuată: imposibil de creat fișierul! Update download failed: network error! - + Descărcarea actualizării eșuată: eroare de rețea! A service error has occurred! - + A intervenit o eroare de serviciu! Last check performed %1 - + Ultima verificare realizată %1 Error opening JSON file. - + Eroare la deschiderea fișierului JSON. diff --git a/win-linux/langs/ru.ts b/win-linux/langs/ru.ts index c575aede1..a715bd22b 100644 --- a/win-linux/langs/ru.ts +++ b/win-linux/langs/ru.ts @@ -652,7 +652,7 @@ Unable to check update: URL not defined. - + Невозможно проверить обновление: URL-адрес не определен. @@ -741,37 +741,37 @@ An error occured while unpacking the archive - + При распаковке архива произошла ошибка Update download failed: out of memory! - + Не удалось загрузить обновление: недостаточно памяти! Update download failed: server connection error! - + Не удалось загрузить обновление: ошибка подключения к серверу! Update download failed: wrong URL! - + Не удалось загрузить обновление: неверный URL-адрес! Update download failed: unable to create file! - + Не удалось загрузить обновление: невозможно создать файл! Update download failed: network error! - + Не удалось загрузить обновление: сетевая ошибка! A service error has occurred! - + Произошла ошибка сервиса! @@ -781,7 +781,7 @@ Error opening JSON file. - + Ошибка открытия файла JSON. diff --git a/win-linux/langs/sk.ts b/win-linux/langs/sk.ts index acdb4aa78..bbd3e0be5 100644 --- a/win-linux/langs/sk.ts +++ b/win-linux/langs/sk.ts @@ -95,7 +95,7 @@ Open Document - Otvoriť dokument + Otvoriť dokument @@ -179,7 +179,7 @@ There are no printers available - + Nie sú k dispozícii žiadne tlačiarne @@ -287,7 +287,7 @@ Macro-enabled Presentation File (*.pptm) - + Súbor prezentácie s podporou makra (*.pptm) @@ -315,27 +315,27 @@ DOCX Document - + Dokument DOCX OpenDocument Document template - + Šablóna dokumentu OpenDocument OpenDocument Presentation Template - + Šablóna prezentácie OpenDocument Macro-enabled spreadsheet template - + Šablóna tabuľky s podporou makra OpenDocument Spreadsheet Template - + Šablóna tabuľky OpenDocument @@ -365,12 +365,12 @@ SVG Image (*.svg) - + Obrázok SVG (*.svg) JPG Image (*.jpg *.jpeg) - + Obrázok JPG (*.jpg *.jpeg) @@ -443,25 +443,25 @@ All supported files - + Všetky podporované súbory Spreadsheet template - + Šablóna tabuľky Presentation template - + Šablóna prezentácie Document template - + Šablóna dokumentu @@ -499,7 +499,7 @@ Select Folder - + Vybrať priečinok @@ -507,53 +507,53 @@ More than one document is open.<br>Close the window anyway? - + Viac ako jeden dokument je otvorený.<br>Zatvoriť okno aj tak? Don't ask again. - + Nezobrazujte túto otázku znova. File format not supported. - Formát súboru nie je podporovaný. + Formát súboru nie je podporovaný. %1 doesn't exists!<br>Remove file from the list? - %1 neexistuje.<br>Odstrániť súbor zo zoznamu? + %1 neexistuje.<br>Odstrániť súbor zo zoznamu? Document must be saved firstly. - Dokument musí byť uložený ako prvý. + Dokument musí byť uložený ako prvý. Document must be saved to continue.<br>Save the document? - Dokument musí byť uložený, aby ste mohli pokračovať.<br>Uložiť dokument? + Dokument musí byť uložený, aby ste mohli pokračovať.<br>Uložiť dokument? There are no printers available - + Nie sú k dispozícii žiadne tlačiarne Print Document - Vytlačiť dokument + Vytlačiť dokument Sign Up - Vytvoriť kancelárie cloud + Vytvoriť kancelárie cloud %1 is modified.<br>Do you want to keep changes? - %1 bol upravený.<br>Chcete zmeny zachovať? + %1 bol upravený.<br>Chcete zmeny zachovať? @@ -615,92 +615,92 @@ Check for updates - + Skontrolujte si dostupnosť aktualizácií Unable to check update: URL not defined. - + Nie je možné skontrolovať aktualizáciu: URL nie je definovaná. To finish updating, restart app - + Ak chcete dokončiť aktualizáciu, reštartujte aplikáciu Restart - + Reštartovať Checking for updates... - + Kontrola dostupnosti aktualizácií... Updates are not allowed! - + Aktualizácie nie sú povolené! This folder configuration does not allow for updates! The folder name should be: - + Táto konfigurácia priečinka neumožňuje aktualizácie! Názov priečinka by mal byť: An error occurred while check updates: Update Service not found! - + Pri overovaní aktualizácií došlo k chybe: Služba aktualizácie nebola nájdená! Downloading new version %1 (%2%) - + Sťahovanie novej verzie %1 (%2%) An error occurred while loading updates: Update Service not found! - + Pri nahrávaní aktualizácií sa vyskytla chyba: Služba aktualizácie nebola nájdená! Cancel - Zrušiť + Zrušiť An error occurred while loading updates: package Url is empty! - + Pri nahrávaní aktualizácií sa vyskytla chyba: Url balíka je prázdny! Update package error: md5 sum does not match the original. - + Chyba aktualizačného balíka: súčet md5 sa nezhoduje s pôvodným. Preparing update... - + Príprava aktualizácie... An error occurred while unzip updates: Update Service not found! - + Pri rozbaľovaní súboru s aktualizáciou sa vyskytla chyba: Služba aktualizácie nebola nájdená! Update is available (version %1) - + Je dostupná aktualizácia (verzia %1) Download update - + Stiahnite si aktualizáciu Current version is up to date - + Aktuálna verzia je najnovšia @@ -740,7 +740,7 @@ Last check performed %1 - + Posledná vykonaná kontrola %1 @@ -750,34 +750,34 @@ Update is available - + Je dostupná aktualizácia Current version - + Aktuálna verzia Update version - + Verzia aktualizácie Would you like to download update now? - + Chcete si teraz stiahnuť aktualizáciu? Update is ready to install - + Aktualizácia je pripravená na inštaláciu Would you like to restart app now? - + Chcete teraz reštartovať aplikáciu? @@ -805,48 +805,48 @@ XML File (*.xml) - + Súbor XML (*.xml) Access to file '%1' is denied! - + Prístup k súboru '%1' je zamietnutý! Read only - + Iba na čítanie Skip this version - + Preskočiť túto verziu Remind me later - + Pripomenúť neskôr Install update - + Inštalovať aktualizáciu Install later - + Inštalovať neskôr Save and Restart Now - + Uložiť a reštartovať teraz @@ -858,75 +858,75 @@ Download update - + Stiahnite si aktualizáciu Software Update - + Aktualizácia softvéru Release notes - + Informácie o verzii An error occurred while start install updates! - + Pri spustení inštalácie aktualizácií došlo k chybe! An error occurred while start replacing files: Update Service not found! - + Pri spustení výmeny súborov došlo k chybe: Služba aktualizácie nebola nájdená! Cancel - Zrušiť + Zrušiť Yes - Áno + Áno No - Nie + Nie OK - OK + OK Skip - + Preskočiť Buy Now - + Kúpiť teraz Activate - + Aktivovať Continue - + Pokračovať An error occurred while opening the portal:<br>%1 - + Pri otvorení portálu došlo k chybe:<br>%1 &OK diff --git a/win-linux/langs/sl.ts b/win-linux/langs/sl.ts index a58bc911d..31da1dbfd 100644 --- a/win-linux/langs/sl.ts +++ b/win-linux/langs/sl.ts @@ -95,7 +95,7 @@ Open Document - Odpri dokument + Odpri dokument @@ -179,7 +179,7 @@ There are no printers available - + Na voljo ni nobenega tiskalnika @@ -287,7 +287,7 @@ Macro-enabled Presentation File (*.pptm) - + Prezentacijska datoteka z omogočenimi makroji (*.pptm) @@ -315,27 +315,27 @@ DOCX Document - + DOCX dokument OpenDocument Document template - + OpenDocument predloga dokumenta OpenDocument Presentation Template - + OpenDocument predloga prezentacije Macro-enabled spreadsheet template - + Predloga preglednice z omogočenimi makroji OpenDocument Spreadsheet Template - + OpenDocument predloga preglednice @@ -365,12 +365,12 @@ SVG Image (*.svg) - + SVG slika (*.svg) JPG Image (*.jpg *.jpeg) - + JPG slika (*.jpg *.jpeg) @@ -443,25 +443,25 @@ All supported files - + Vse podprte datoteke Spreadsheet template - + Predloga preglednice Presentation template - + Predstavitvena predloga Document template - + Predloga dokumenta @@ -499,7 +499,7 @@ Select Folder - + Izberi mapo @@ -507,53 +507,53 @@ More than one document is open.<br>Close the window anyway? - + Odprtih je več dokumentov.<br>Želite vseeno zapreti okno? Don't ask again. - + Ne vprašaj ponovno. File format not supported. - Format datoteke ni podprt. + Format datoteke ni podprt. %1 doesn't exists!<br>Remove file from the list? - %1 ni na voljo. Lahko je bil preimenovan, premaknjen ali izbrisan.<br>Ali želite, da ga izbrišemo iz seznama? + %1 ni na voljo. Lahko je bil preimenovan, premaknjen ali izbrisan.<br>Ali želite, da ga izbrišemo iz seznama? Document must be saved firstly. - Dokument mora biti najprej shranjen. + Dokument mora biti najprej shranjen. Document must be saved to continue.<br>Save the document? - Dokument mora biti shranjen pred nadaljevanjem.<br>Želiš shraniti dokument? + Dokument mora biti shranjen pred nadaljevanjem.<br>Želiš shraniti dokument? There are no printers available - + Na voljo ni nobenega tiskalnika Print Document - Natisni dokument + Natisni dokument Sign Up - Ustvari portal + Ustvari portal %1 is modified.<br>Do you want to keep changes? - %1 je bil spremenjen.<br>Želite shraniti spremembe? + %1 je bil spremenjen.<br>Želite shraniti spremembe? @@ -615,92 +615,92 @@ Check for updates - + Preverite posodobitve Unable to check update: URL not defined. - + Ni mogoče preveriti posodobitev: URL ni definiran. To finish updating, restart app - + Za dokončanje posodabljanja znova zaženite aplikacijo Restart - + Ponovno zaženi Checking for updates... - + Preverjanje posodobitev… Updates are not allowed! - + Posodobitve niso dovoljene! This folder configuration does not allow for updates! The folder name should be: - + Ta konfiguracija mape ne dovoljuje posodobitev! Ime mape mora biti: An error occurred while check updates: Update Service not found! - + Med preverjanjem posodobitev je prišlo do napake: Storitve posodabljanja ni bilo mogoče najti! Downloading new version %1 (%2%) - + Prenos nove verzije %1 (%2%) An error occurred while loading updates: Update Service not found! - + Med nalaganjem posodobitev je prišlo do napake: Storitve posodabljanja ni bilo mogoče najti! Cancel - Prekliči + Prekliči An error occurred while loading updates: package Url is empty! - + Med nalaganjem posodobitev je prišlo do napake: URL paketa je prazen! Update package error: md5 sum does not match the original. - + Napaka paketa posodobitve: vsota md5 se ne ujema z originalom. Preparing update... - + Pripravljanje posodobitev… An error occurred while unzip updates: Update Service not found! - + Med razpakiranjem posodobitev je prišlo do napake: storitve posodobitve ni bilo mogoče najti! Update is available (version %1) - + Posodobitev je na voljo (verzija %1) Download update - + Prenos posodobitev Current version is up to date - + Trenutna verzija je posodobljena @@ -740,7 +740,7 @@ Last check performed %1 - + Zadnje preverjanje opravljeno %1 @@ -750,34 +750,34 @@ Update is available - + Posodobitev je na voljo Current version - + Trenutna verzija Update version - + Posodobi verzijo Would you like to download update now? - + Ali želite zdaj prenesti posodobitve? Update is ready to install - + Posodobitev je pripravljena za namestitev Would you like to restart app now? - + Ali želite zdaj znova zagnati aplikacijo? @@ -805,48 +805,48 @@ XML File (*.xml) - + XML Datoteka (*.xml) Access to file '%1' is denied! - + Dostop do datoteke '%1' je zavrnjen! Read only - + Samo za branje Skip this version - + Preskoči to verzijo Remind me later - + Opomni me kasneje Install update - + Namesti posodobitve Install later - + Namesti kasneje Save and Restart Now - + Shrani in ponovno zaženi @@ -858,75 +858,75 @@ Download update - + Prenos posodobitev Software Update - + Posodobitev programske opreme Release notes - + Opombe ob izdaji An error occurred while start install updates! - + Med začetkom nameščanja posodobitev je prišlo do napake! An error occurred while start replacing files: Update Service not found! - + Med začetkom zamenjave datotek je prišlo do napake: storitve posodobitve ni bilo mogoče najti! Cancel - Prekliči + Prekliči Yes - Da + Da No - Ne + Ne OK - V redu + V redu Skip - + Preskoči Buy Now - + Kupi zdaj Activate - + Aktivacija Continue - + Nadaljuj An error occurred while opening the portal:<br>%1 - + Med odpiranjem portala je prišlo do napake:<br>%1 &OK diff --git a/win-linux/langs/tr.ts b/win-linux/langs/tr.ts index 9ea5714e0..64ec2d690 100644 --- a/win-linux/langs/tr.ts +++ b/win-linux/langs/tr.ts @@ -95,7 +95,7 @@ Open Document - Belge Aç + Belge Aç @@ -179,7 +179,7 @@ There are no printers available - + Kullanılabilir yazıcı yok @@ -287,7 +287,7 @@ Macro-enabled Presentation File (*.pptm) - + Makro Etkinleştirilmiş Sunum Dosyası (*.pptm) @@ -315,27 +315,27 @@ DOCX Document - + DOCX belgesi OpenDocument Document template - + OpenDocument Belge Şablonu OpenDocument Presentation Template - + OpenDocument Sunum Şablonu Macro-enabled spreadsheet template - + Makro Etkinleştirilmiş Elektronik Tablo Şablonu OpenDocument Spreadsheet Template - + OpenDocument Elektronik Tablo Şablonu @@ -365,12 +365,12 @@ SVG Image (*.svg) - + SVG Resmi (*.svg) JPG Image (*.jpg *.jpeg) - + JPG Resmi (*.jpg *.jpeg) @@ -443,25 +443,25 @@ All supported files - + Desteklenen tüm dosyalar Spreadsheet template - + Elektronik tablo şablonu Presentation template - + Sunum şablonu Document template - + Belge şablonu @@ -499,7 +499,7 @@ Select Folder - + Dosya Seç @@ -507,53 +507,53 @@ More than one document is open.<br>Close the window anyway? - + Birden fazla belge açık.<br>Yine de pencere kapatılsın mı? Don't ask again. - + Bir daha sorma. File format not supported. - Dosya format desteklenmiyor. + Dosya format desteklenmiyor. %1 doesn't exists!<br>Remove file from the list? - %1 mevcut değil. Yeniden isimlendirilmiş, taşınmış veya silimiş olabilir.<br>Dosyayı listeden kaldırmak istediğinize emin misiniz? + %1 mevcut değil. Yeniden isimlendirilmiş, taşınmış veya silimiş olabilir.<br>Dosyayı listeden kaldırmak istediğinize emin misiniz? Document must be saved firstly. - Belge önce kaydedilmelidir. + Belge önce kaydedilmelidir. Document must be saved to continue.<br>Save the document? - Devam edebilmek için belgenin kaydedilmesi gerekli.<br>Belgeyi kaydet? + Devam edebilmek için belgenin kaydedilmesi gerekli.<br>Belgeyi kaydet? There are no printers available - + Kullanılabilir yazıcı yok Print Document - Belgeyi yazdır + Belgeyi yazdır Sign Up - Portal oluştur + Portal oluştur %1 is modified.<br>Do you want to keep changes? - %1 değiştirildi.<br>Değişiklikleri kaydetmek istiyor musunuz? + %1 değiştirildi.<br>Değişiklikleri kaydetmek istiyor musunuz? @@ -615,92 +615,92 @@ Check for updates - + Güncellemeleri kontrol et Unable to check update: URL not defined. - + Güncelleme kontrol edilemiyor: URL tanımlı değil. To finish updating, restart app - + Güncellemeyi tamamlamak için uygulamayı yeniden başlatın Restart - + Tekrar başlat Checking for updates... - + Güncellemeler kontrol ediliyor... Updates are not allowed! - + Güncellemelere izin verilmiyor! This folder configuration does not allow for updates! The folder name should be: - + Bu klasör yapılandırması güncellemelere izin vermiyor! Klasör adı şöyle olmalıdır: An error occurred while check updates: Update Service not found! - + Güncellemeleri kontrol ederken bir hata oluştu: Güncelleme Hizmeti bulunamadı! Downloading new version %1 (%2%) - + Yeni sürüm %1 (%2%) indiriliyor An error occurred while loading updates: Update Service not found! - + Güncellemeler yüklenirken bir hata oluştu: Güncelleme Hizmeti bulunamadı! Cancel - İptal + İptal An error occurred while loading updates: package Url is empty! - + Güncellemeler yüklenirken bir hata oluştu: Paket bağlantısı boş! Update package error: md5 sum does not match the original. - + Güncelleme paketi hatası: md5 toplamı orijinalle eşleşmiyor. Preparing update... - + Güncelleme hazırlanıyor... An error occurred while unzip updates: Update Service not found! - + Güncellemelerin çıkarılması sırasında bir hata oluştu: Güncelleme Hizmeti bulunamadı! Update is available (version %1) - + Güncelleme mevcut (sürüm %1) Download update - + Güncellemeyi indir Current version is up to date - + Mevcut sürüm güncel @@ -740,7 +740,7 @@ Last check performed %1 - + Son kontrol yapıldı %1 @@ -750,34 +750,34 @@ Update is available - + Güncelleme mevcut Current version - + Şimdiki versiyonu Update version - + Sürümü güncelle Would you like to download update now? - + Güncellemeyi şimdi indirmek ister misiniz? Update is ready to install - + Güncelleme yüklenmeye hazır Would you like to restart app now? - + Uygulamayı şimdi yeniden başlatmak ister misiniz? @@ -805,48 +805,48 @@ XML File (*.xml) - + XML Dosyası (*.xml) Access to file '%1' is denied! - + '%1' dosyasına erişim reddedildi! Read only - + Salt okunur Skip this version - + Bu versiyonu atla Remind me later - + Bana daha sonra hatırlat Install update - + Güncellemeyi yükle Install later - + Daha sonra yükle Save and Restart Now - + Şimdi Kaydet ve Yeniden Başlat @@ -858,75 +858,75 @@ Download update - + Güncellemeyi indir Software Update - + Yazılım güncellemesi Release notes - + Sürüm notları An error occurred while start install updates! - + Güncellemeleri yüklemeye başlarken bir hata oluştu! An error occurred while start replacing files: Update Service not found! - + Dosyaları değiştirmeye başlarken bir hata oluştu: Güncelleme Hizmeti bulunamadı! Cancel - İptal + İptal Yes - Evet + Evet No - Hayır + Hayır OK - Tamam + Tamam Skip - + Atla Buy Now - + Şimdi Satın Al Activate - + Etkinleştir Continue - + Devam Et An error occurred while opening the portal:<br>%1 - + Portal açılırken bir hata oluştu:<br>%1 &OK diff --git a/win-linux/langs/uk.ts b/win-linux/langs/uk.ts index 7e3d9e758..0b525c836 100644 --- a/win-linux/langs/uk.ts +++ b/win-linux/langs/uk.ts @@ -95,7 +95,7 @@ Open Document - Відкрити документ + Відкрити документ @@ -179,7 +179,7 @@ There are no printers available - + Немає доступних принтерів @@ -287,7 +287,7 @@ Macro-enabled Presentation File (*.pptm) - + Файл презентації з підтримкою макросів (*.pptm) @@ -315,27 +315,27 @@ DOCX Document - + Документ DOCX OpenDocument Document template - + Шаблон документа OpenDocument OpenDocument Presentation Template - + Шаблон презентації OpenDocument Macro-enabled spreadsheet template - + Шаблон електронної таблиці з підтримкою макросів OpenDocument Spreadsheet Template - + Шаблон електронної таблиці OpenDocument @@ -365,12 +365,12 @@ SVG Image (*.svg) - + Зображення SVG (*.svg) JPG Image (*.jpg *.jpeg) - + Зображення JPG (*.jpg *.jpeg) @@ -443,25 +443,25 @@ All supported files - + Усі підтримувані файли Spreadsheet template - + Шаблон електронної таблиці Presentation template - + Шаблон презентації Document template - + Шаблон документа @@ -499,7 +499,7 @@ Select Folder - + Вибрати папку @@ -507,53 +507,53 @@ More than one document is open.<br>Close the window anyway? - + Відкрито більше одного документа.<br>Все одно закрити вікно? Don't ask again. - + Більше не запитувати. File format not supported. - Формат файлу не підтримується. + Формат файлу не підтримується. %1 doesn't exists!<br>Remove file from the list? - Файл %1 недоступний. Він може бути перейменований, переміщений або видалений.<br>Видалити цей файл зі списку? + Файл %1 недоступний. Він може бути перейменований, переміщений або видалений.<br>Видалити цей файл зі списку? Document must be saved firstly. - You must save the document first. + You must save the document first. Document must be saved to continue.<br>Save the document? - Щоб продовжити, потрібно зберегти документ.<br>Зберегти документ? + Щоб продовжити, потрібно зберегти документ.<br>Зберегти документ? There are no printers available - + Немає доступних принтерів Print Document - Друк документа + Друк документа Sign Up - Створити портал + Створити портал %1 is modified.<br>Do you want to keep changes? - %1 змінено.<br>Зберегти зміни? + %1 змінено.<br>Зберегти зміни? @@ -615,92 +615,92 @@ Check for updates - + Перевірка оновлень Unable to check update: URL not defined. - + Не вдалося перевірити оновлення: URL-адреса не визначена. To finish updating, restart app - + Щоб завершити оновлення, перезапустіть застосунок Restart - + Перезапустити Checking for updates... - + Перевіряння оновлень… Updates are not allowed! - + Оновлення не дозволені! This folder configuration does not allow for updates! The folder name should be: - + Ця конфігурація папки не дозволяє оновлення! Назва папки має бути: An error occurred while check updates: Update Service not found! - + Під час перевірки оновлень сталася помилка: служба оновлень не знайдена! Downloading new version %1 (%2%) - + Завантаження нової версії %1 (%2%) An error occurred while loading updates: Update Service not found! - + Під час завантаження оновлень сталася помилка: служба оновлень не знайдена! Cancel - Відмінити + Відмінити An error occurred while loading updates: package Url is empty! - + Під час завантаження оновлень сталася помилка: URL-адреса пакета порожня! Update package error: md5 sum does not match the original. - + Помилка пакета оновлення: сума md5 не відповідає оригіналу. Preparing update... - + Підготування оновлення… An error occurred while unzip updates: Update Service not found! - + Під час розпакування оновлень сталася помилка: служба оновлень не знайдена! Update is available (version %1) - + Оновлення доступне (версія %1) Download update - + Завантажити оновлення Current version is up to date - + Поточна версія є актуальною @@ -740,7 +740,7 @@ Last check performed %1 - + Останню перевірку виконано %1 @@ -750,34 +750,34 @@ Update is available - + Оновлення доступне Current version - + Поточна версія Update version - + Версія оновлення Would you like to download update now? - + Бажаєте завантажити оновлення зараз? Update is ready to install - + Оновлення готове до інсталювання Would you like to restart app now? - + Бажаєте перезапустити застосунок зараз? @@ -805,48 +805,48 @@ XML File (*.xml) - + Файл XML (*.xml) Access to file '%1' is denied! - + Доступ до файлу '%1' заборонено! Read only - + Лише для читання Skip this version - + Пропустити цю версію Remind me later - + Нагадати мені пізніше Install update - + Інсталювати оновлення Install later - + Інсталювати пізніше Save and Restart Now - + Зберегти й перезапустити зараз @@ -858,75 +858,75 @@ Download update - + Завантажити оновлення Software Update - + Оновлення програмного забезпечення Release notes - + Нотатки про випуск An error occurred while start install updates! - + Під час запуску інсталювання оновлень сталася помилка! An error occurred while start replacing files: Update Service not found! - + Під час запуску заміни файлів сталася помилка: служба оновлень не знайдена! Cancel - Відмінити + Відмінити Yes - Так + Так No - Ні + Ні OK - OK + OK Skip - + Пропустити Buy Now - + Купити зараз Activate - + Активувати Continue - + Продовжити An error occurred while opening the portal:<br>%1 - + Під час відкриття порталу сталася помилка:<br>%1 &OK From 9c9e3358ffed8566f5db784a44f1ffa09f09cc1f Mon Sep 17 00:00:00 2001 From: Semyon Bezrukov Date: Mon, 9 Oct 2023 19:00:19 +0300 Subject: [PATCH 287/298] Fix bug 64472, fix bug 64509 (#991) - Include visual elements in zip update file - Exclude vlc-cache-gen from zip update file --- win-linux/package/windows/common.iss | 5 +- win-linux/package/windows/make_zip.ps1 | 74 +++++++++++++++++++------- 2 files changed, 56 insertions(+), 23 deletions(-) diff --git a/win-linux/package/windows/common.iss b/win-linux/package/windows/common.iss index 3adb4bb20..9e09c5e1c 100644 --- a/win-linux/package/windows/common.iss +++ b/win-linux/package/windows/common.iss @@ -993,10 +993,9 @@ Source: {#sBrandingFolder}\win-linux\package\windows\data\VisualElementsManifest Source: {#sBrandingFolder}\win-linux\package\windows\data\visual_elements_icon_150x150.png; DestDir: {app}\browser; MinVersion: 6.3; Source: {#sBrandingFolder}\win-linux\package\windows\data\visual_elements_icon_71x71.png; DestDir: {app}\browser; MinVersion: 6.3; -#if defined(_WIN_XP) + defined(EMBED_HELP) Source: {#DEPLOY_PATH}\*; DestDir: {app}; Flags: recursesubdirs; -#else -Source: {#DEPLOY_PATH}\*; DestDir: {app}; Excludes: "editors\web-apps\apps\*\main\resources\help"; Flags: recursesubdirs; +#if defined(_WIN_XP) | defined(EMBED_HELP) +Source: "{#DEPLOY_PATH}-Help\*"; DestDir: {app}; Flags: recursesubdirs; #endif Source: {#DEPLOY_PATH}\*.exe; DestDir: {app}; Flags: signonce; Source: {#DEPLOY_PATH}\*.dll; DestDir: {app}; Flags: signonce; diff --git a/win-linux/package/windows/make_zip.ps1 b/win-linux/package/windows/make_zip.ps1 index 736523879..4313b6fbf 100644 --- a/win-linux/package/windows/make_zip.ps1 +++ b/win-linux/package/windows/make_zip.ps1 @@ -3,6 +3,7 @@ param ( [string]$BuildDir = "build", [string]$DesktopDir = "DesktopEditors", [string]$MultimediaDir, + [string]$BrandingDir = ".", [switch]$ExcludeHelp, [switch]$Sign, [string]$CertName = "Ascensio System SIA", @@ -19,16 +20,36 @@ $Suffix = switch ( $Target ) "windows_x64_xp" { "x64-xp" } "windows_x86_xp" { "x86-xp" } } +$DesktopHelpDir = "$DesktopDir-Help" # Check directory -if ( -Not (Test-Path -Path $BuildDir) ) { +if ( -Not (Test-Path $BuildDir) ) { Write-Error "Path $BuildDir does not exist" } -if ( $Sign ) { - if ( $DesktopDir ) { - Set-Location "$BuildDir\$DesktopDir" +# Copy VisualElements +Write-Host "Copy: $BrandingDir\data\VisualElementsManifest.xml > $BuildDir\$DesktopDir\DesktopEditors.VisualElementsManifest.xml" -ForegroundColor Yellow +Copy-Item -Path "$BrandingDir\data\VisualElementsManifest.xml" ` + -Destination "$BuildDir\$DesktopDir\DesktopEditors.VisualElementsManifest.xml" ` + -Force +Write-Host "Copy: $BrandingDir\data\visual_elements_icon_* > $BuildDir\$DesktopDir\browser" -ForegroundColor Yellow +New-Item "$BuildDir\$DesktopDir\browser" -ItemType Directory -Force | Out-Null +Copy-Item -Path "$BrandingDir\data\visual_elements_icon_*" ` + -Destination "$BuildDir\$DesktopDir\browser" -Force +# Move Help +Get-ChildItem "$BuildDir\$DesktopDir\editors\web-apps\apps\*\main\resources\help" -Directory ` + | ForEach-Object { + $src = Resolve-Path -Relative $_.FullName + $dst = $src -replace "$DesktopDir", "$DesktopHelpDir" + Write-Host "Move: $src > $dst" -ForegroundColor Yellow + New-Item $dst -ItemType Directory -Force | Out-Null + Move-Item -Path $src -Destination $dst -Force + } + +if ( $DesktopDir ) { + Set-Location "$BuildDir\$DesktopDir" + if ( $Sign ) { $SignFiles = Get-ChildItem ` *.exe, *.dll, converter\*.exe, converter\*.dll, plugins\*\*.dll ` | Resolve-Path -Relative @@ -40,13 +61,21 @@ if ( $Sign ) { Write-Host "signtool verify /pa /all $SignFiles" -ForegroundColor Yellow & signtool verify /pa /all $SignFiles if ( $LastExitCode -ne 0 ) { throw } - - Set-Location $PSScriptRoot + # VLC plugin cache + Write-Host ".\vlc-cache-gen $PWD\plugins" -ForegroundColor Yellow + & .\vlc-cache-gen "$PWD\plugins" + if ( $LastExitCode -ne 0 ) { throw } } + if ( Test-Path "vlc-cache-gen.exe" ) { + Write-Host "Delete: vlc-cache-gen.exe" -ForegroundColor Yellow + Remove-Item "vlc-cache-gen.exe" -Force + } + Set-Location $PSScriptRoot +} - if ( $MultimediaDir ) { - Set-Location "$BuildDir\$MultimediaDir" - +if ( $MultimediaDir ) { + Set-Location "$BuildDir\$MultimediaDir" + if ( $Sign ) { $SignFiles = Get-ChildItem *.exe, *.dll, plugins\*\*.dll ` | Resolve-Path -Relative # Sign @@ -57,23 +86,28 @@ if ( $Sign ) { Write-Host "signtool verify /pa /all $SignFiles" -ForegroundColor Yellow & signtool verify /pa /all $SignFiles if ( $LastExitCode -ne 0 ) { throw } - - Set-Location $PSScriptRoot + # VLC plugin cache + Write-Host ".\vlc-cache-gen $PWD\plugins" -ForegroundColor Yellow + & .\vlc-cache-gen "$PWD\plugins" + if ( $LastExitCode -ne 0 ) { throw } } + if ( Test-Path "vlc-cache-gen.exe" ) { + Write-Host "Delete: vlc-cache-gen.exe" -ForegroundColor Yellow + Remove-Item "vlc-cache-gen.exe" -Force + } + Set-Location $PSScriptRoot } -# Create archive - +# Create archives $OutFile = "$Env:COMPANY_NAME-$DesktopDir-$Env:PRODUCT_VERSION.$Env:BUILD_NUMBER-$Suffix.zip" +Write-Host "7z a -y $OutFile .\$BuildDir\$DesktopDir\*" -ForegroundColor Yellow +& 7z a -y $OutFile .\$BuildDir\$DesktopDir\* +if ( $LastExitCode -ne 0 ) { throw } if ( !$ExcludeHelp ) { - Write-Host "7z a -y $OutFile .\$BuildDir\$DesktopDir\* -xr!vlc-cache-gen.exe" -ForegroundColor Yellow - & 7z a -y $OutFile .\$BuildDir\$DesktopDir\* -xr!"vlc-cache-gen.exe" -} else { - Write-Host "7z a -y $OutFile .\$BuildDir\$DesktopDir\* -xr!editors\web-apps\apps\*\main\resources\help -xr!vlc-cache-gen.exe" -ForegroundColor Yellow - & 7z a -y $OutFile .\$BuildDir\$DesktopDir\* -xr!editors\web-apps\apps\*\main\resources\help -xr!"vlc-cache-gen.exe" + Write-Host "7z a -y $OutFile .\$BuildDir\$DesktopHelpDir\*" -ForegroundColor Yellow + & 7z a -y $OutFile .\$BuildDir\$DesktopHelpDir\* + if ( $LastExitCode -ne 0 ) { throw } } -if ( $LastExitCode -ne 0 ) { throw } - if ( $MultimediaDir ) { $OutFile = "$Env:COMPANY_NAME-$MultimediaDir-$Env:PRODUCT_VERSION.$Env:BUILD_NUMBER-$Suffix.zip" Write-Host "7z a -y $OutFile .\$BuildDir\$MultimediaDir\*" -ForegroundColor Yellow From 751f342491079ae801bae160e7fe33e09498f375 Mon Sep 17 00:00:00 2001 From: Maria-Sukhova Date: Tue, 10 Oct 2023 15:17:33 +0300 Subject: [PATCH 288/298] updated, edited translations .ts, locale --- common/loginpage/locale/es.js | 3 +++ common/loginpage/locale/hy.js | 8 ++++---- common/loginpage/locale/it.js | 3 +++ common/loginpage/locale/ja.js | 3 +++ win-linux/langs/es.ts | 20 ++++++++++---------- win-linux/langs/hy.ts | 20 ++++++++++---------- win-linux/langs/it_IT.ts | 22 +++++++++++----------- win-linux/langs/ru.ts | 2 +- 8 files changed, 45 insertions(+), 36 deletions(-) diff --git a/common/loginpage/locale/es.js b/common/loginpage/locale/es.js index 12aa998fc..f24883b6c 100644 --- a/common/loginpage/locale/es.js +++ b/common/loginpage/locale/es.js @@ -105,4 +105,7 @@ l10n.es = { updateDownloadFinished: 'Descarga finalizada. Haga clic para instalar', updateDownloadCanceled: 'Descarga cancelada', updateDownloadProgress: 'Descargando $1%. Haga clic para cancelar', + settOptDescDisabled: "Se desactivará la comprobación automática de actualizaciones", + settOptDescAUpdateSilent: "Descargar actualizaciones y preguntar antes de instalarlas", + settOptDescAUpdateAsk: "Se le notificarán todos los pasos de las actualizaciones", } diff --git a/common/loginpage/locale/hy.js b/common/loginpage/locale/hy.js index d0f387c49..21b62d8b1 100644 --- a/common/loginpage/locale/hy.js +++ b/common/loginpage/locale/hy.js @@ -9,7 +9,7 @@ l10n.hy = { btnBrowse: 'Զննել', btnNext: 'Հաջորդ', portalEmptyTitle: 'Միանալ Ձեր ամպին', - portalEmptyDescr: 'Պահպանեք Ձեր փաստաթղթերը ամպում, և դրանք ցանկացած պահի ցանկացած վայրում հասանելի կլինեն։ Կիսվեք և համագործակցեք դրանց միջոցով։ Զրուցեք Ձեր փաստաթղթի մեջ, ավելացրեք մեկնաբանություններ կամ կիսվեք դրանով՝ կարծիք ստանալու համար։', + portalEmptyDescr: 'Պահպանեք Ձեր փաստաթղթերը ամպում, և դրանք ցանկացած պահի ցանկացած վայրում հասանելի կլինեն։ Կիսվեք և համագործակցեք դրանց միջոցով։ Զրուցեք Ձեր փաստաթղթի մեջ, ավելացրեք մեկնաբանություններ կամ կիսվեք դրանով՝ կարծիք ստանալու համար։', portalEmptyAdv1: 'Դեռևս չունե՞ք ամպային հաշիվ։ Դարձեք առցանց ONLYOFFICE ամպային ծառայության հետ և
      անվճար փորձեք համագործակցային հնարավորությունները։', portalListTitle: 'Միացված ամպեր', textNoFiles: 'Ֆայլեր չկան', @@ -105,7 +105,7 @@ l10n.hy = { updateDownloadFinished: 'Ներբեռնումն ավարտված է։ Սեղմեք՝ տեղադրելու համար', updateDownloadCanceled: 'Ներբեռնումը չեղարկվել է', updateDownloadProgress: 'Ներբեռնվում է $1%: Սեղմեք դադարեցնելու համար', - settOptDescDisabled: "Ավտոմատ ստուգման թարմացումները կանջատվեն", - settOptDescAUpdateSilent: "Ներբեռնեք թարմացումները և հարցրեք նախքան տեղադրելը", - settOptDescAUpdateAsk: "Դուք կտեղեկացվեք թարմացումների բոլոր քայլերի մասին", + settOptDescDisabled: "Ավտոմատ ստուգման թարմացումները կանջատվեն։", + settOptDescAUpdateSilent: "Ներբեռնեք թարմացումները և հարցրեք նախքան տեղադրելը։", + settOptDescAUpdateAsk: "Դուք կտեղեկացվեք թարմացումների բոլոր քայլերի մասին։", } diff --git a/common/loginpage/locale/it.js b/common/loginpage/locale/it.js index 312781d10..3be7d4e54 100644 --- a/common/loginpage/locale/it.js +++ b/common/loginpage/locale/it.js @@ -105,4 +105,7 @@ l10n.it_IT = { updateDownloadFinished: 'Download completato. Clicca per installare', updateDownloadCanceled: 'Download annullato', updateDownloadProgress: 'Scaricamento $ 1%. Clicca per interrompere', + settOptDescDisabled: "Il controllo automatico degli aggiornamenti verrà disabilitato", + settOptDescAUpdateSilent: "Scarica gli aggiornamenti e chiedi prima dell'installazione", + settOptDescAUpdateAsk: "Riceverai una notifica su tutte le fasi di aggiornamento", } diff --git a/common/loginpage/locale/ja.js b/common/loginpage/locale/ja.js index affd36126..c1837a7b5 100644 --- a/common/loginpage/locale/ja.js +++ b/common/loginpage/locale/ja.js @@ -105,4 +105,7 @@ l10n.ja = { updateDownloadFinished: 'ダウンロードが完了しました。クリックしてインストールしてください', updateDownloadCanceled: 'ダウンロードがキャンセルされました', updateDownloadProgress: 'ダウンロードは$1%です。停止するにはクリックしてください', + settOptDescDisabled: "アップデートの自動チェックは無効になります", + settOptDescAUpdateSilent: "アップデートをダウンロードし、インストールする前に通知します", + settOptDescAUpdateAsk: "すべてのアップデート手順が通知されます", } diff --git a/win-linux/langs/es.ts b/win-linux/langs/es.ts index b84e2bfe7..3fa2bb594 100644 --- a/win-linux/langs/es.ts +++ b/win-linux/langs/es.ts @@ -687,7 +687,7 @@ Unable to check update: URL not defined. - + No se ha podido comprobar la actualización: la URL no está definida. @@ -776,47 +776,47 @@ An error occured while unpacking the archive - + Se ha producido un error al descomprimir el archivo Update download failed: out of memory! - + Error al descargar la actualización: ¡no hay memoria! Update download failed: server connection error! - + Error al descargar la actualización: ¡error de conexión con el servidor! Update download failed: wrong URL! - + Error al descargar la actualización: ¡URL incorrecta! Update download failed: unable to create file! - + Error al descargar la actualización: ¡no se ha podido crear el archivo! Update download failed: network error! - + Error al descargar la actualización: ¡error de red! A service error has occurred! - + ¡Se ha producido un error de servicio! Last check performed %1 - + Última comprobación realizada %1 Error opening JSON file. - + Error al abrir el archivo JSON. diff --git a/win-linux/langs/hy.ts b/win-linux/langs/hy.ts index 88481717d..00527a865 100644 --- a/win-linux/langs/hy.ts +++ b/win-linux/langs/hy.ts @@ -628,7 +628,7 @@ Unable to check update: URL not defined. - + Հնարավոր չէ ստուգել թարմացումը. URL-ը սահմանված չէ: @@ -717,47 +717,47 @@ An error occured while unpacking the archive - + Արխիվը բացելիս սխալ է տեղի ունեցել ։ Update download failed: out of memory! - + Թարմացման ներբեռնումը ձախողվեց՝ հիշողությունը սպառվել է: Update download failed: server connection error! - + Թարմացման ներբեռնումը ձախողվեց՝ սերվերի միացման սխալ: Update download failed: wrong URL! - + Թարմացման ներբեռնումը ձախողվեց՝ սխալ URL: Update download failed: unable to create file! - + Թարմացման ներբեռնումը ձախողվեց՝ հնարավոր չէ ստեղծել ֆայլ: Update download failed: network error! - + Թարմացման ներբեռնումը ձախողվեց՝ ցանցի սխալ: A service error has occurred! - + Ծառայության սխալ է տեղի ունեցել: Last check performed %1 - + Կատարված վերջին ստուգումը %1։ Error opening JSON file. - + JSON ֆայլի բացման սխալ: diff --git a/win-linux/langs/it_IT.ts b/win-linux/langs/it_IT.ts index 1de9c25b9..9fe39a37d 100644 --- a/win-linux/langs/it_IT.ts +++ b/win-linux/langs/it_IT.ts @@ -643,12 +643,12 @@ Check for updates - Controllo degli aggiornamenti in corso + Controlla gli aggiornamenti Unable to check update: URL not defined. - + Impossibile controllare l'aggiornamento: URL non definito. @@ -737,47 +737,47 @@ An error occured while unpacking the archive - + Si è verificato un errore durante la decompressione dell'archivio Update download failed: out of memory! - + Download dell'aggiornamento non riuscito: memoria esaurita! Update download failed: server connection error! - + Download dell'aggiornamento non riuscito: errore di connessione al server! Update download failed: wrong URL! - + Download dell'aggiornamento non riuscito: URL errato! Update download failed: unable to create file! - + Download dell'aggiornamento non riuscito: impossibile creare il file! Update download failed: network error! - + Download dell'aggiornamento non riuscito: errore di rete! A service error has occurred! - + Si è verificato un errore di servizio! Last check performed %1 - + Ultimo controllo effettuato %1 Error opening JSON file. - + Si è verificato un errore durante l'apertura del file JSON. diff --git a/win-linux/langs/ru.ts b/win-linux/langs/ru.ts index a715bd22b..8822a95c4 100644 --- a/win-linux/langs/ru.ts +++ b/win-linux/langs/ru.ts @@ -786,7 +786,7 @@ Update is available - Обновление доступно + Доступно обновление From 2147fd6a5470b769ca42f61227c939d405dff019 Mon Sep 17 00:00:00 2001 From: Semyon Bezrukov Date: Tue, 10 Oct 2023 18:50:21 +0300 Subject: [PATCH 289/298] Fix bug 64558 - Fix linux help package (#994) --- win-linux/package/linux/Makefile | 8 ++++---- win-linux/package/linux/rpm/common.spec | 10 ++-------- 2 files changed, 6 insertions(+), 12 deletions(-) diff --git a/win-linux/package/linux/Makefile b/win-linux/package/linux/Makefile index 0ace12af0..50c9a9137 100644 --- a/win-linux/package/linux/Makefile +++ b/win-linux/package/linux/Makefile @@ -281,10 +281,10 @@ desktopeditor: branding $(LINUX_DEPS) cp -rf ../../../common/package/mimetypes common/opt/desktopeditors ifeq ($(COMPANY_NAME), ONLYOFFICE) - for path in common documenteditor presentationeditor spreadsheeteditor; do \ - mkdir -p common/help/desktopeditors/editors/web-apps/apps/$$path/main/resources; \ - mv -ft common/help/desktopeditors/editors/web-apps/apps/$$path/main/resources \ - common/opt/desktopeditors/editors/web-apps/apps/$$path/main/resources/help; \ + for path in common/opt/desktopeditors/editors/web-apps/apps/*/main/resources/help; do \ + path_new=$$(echo $$path | sed 's|/opt/|/help/|'); \ + mkdir -p $$path_new; \ + mv -fT $$path $$path_new; \ done endif diff --git a/win-linux/package/linux/rpm/common.spec b/win-linux/package/linux/rpm/common.spec index 347874c9a..67a5cfbfa 100644 --- a/win-linux/package/linux/rpm/common.spec +++ b/win-linux/package/linux/rpm/common.spec @@ -78,10 +78,7 @@ rm -rf "%{buildroot}" %attr(755, root, root) %{_bindir}/%{_desktopeditors_exec} %if "%{_company_name}" == "ONLYOFFICE" %attr(-, root, root) %{_bindir}/desktopeditors -%exclude /opt/%{_desktopeditors_prefix}/editors/web-apps/apps/common/main/resources/help -%exclude /opt/%{_desktopeditors_prefix}/editors/web-apps/apps/documenteditor/main/resources/help -%exclude /opt/%{_desktopeditors_prefix}/editors/web-apps/apps/presentationeditor/main/resources/help -%exclude /opt/%{_desktopeditors_prefix}/editors/web-apps/apps/spreadsheeteditor/main/resources/help +%exclude /opt/%{_desktopeditors_prefix}/editors/web-apps/apps/*/main/resources/help %else %attr(755, root, root) %{_bindir}/%{_imageviewer_exec} %attr(755, root, root) %{_bindir}/%{_videoplayer_exec} @@ -92,10 +89,7 @@ rm -rf "%{buildroot}" %if "%{_company_name}" == "ONLYOFFICE" %files help %defattr(-, root, root, -) -/opt/%{_desktopeditors_prefix}/editors/web-apps/apps/common/main/resources/help -/opt/%{_desktopeditors_prefix}/editors/web-apps/apps/documenteditor/main/resources/help -/opt/%{_desktopeditors_prefix}/editors/web-apps/apps/presentationeditor/main/resources/help -/opt/%{_desktopeditors_prefix}/editors/web-apps/apps/spreadsheeteditor/main/resources/help +/opt/%{_desktopeditors_prefix}/editors/web-apps/apps/*/main/resources/help %endif %pre From 2a2a6654b211032fe426e667e3b3950285503889 Mon Sep 17 00:00:00 2001 From: Roman Demidov Date: Wed, 11 Oct 2023 14:45:38 +0300 Subject: [PATCH 290/298] Add console output for --changelog param for RPM (#995) * Add console output for --changelog param for RPM * Small changes --- win-linux/package/linux/Makefile | 21 +++++++++++++++---- .../linux/common/usr/share/doc/ChangeLog.m4 | 2 ++ win-linux/package/linux/rpm/common.spec | 4 ++++ 3 files changed, 23 insertions(+), 4 deletions(-) create mode 100644 win-linux/package/linux/common/usr/share/doc/ChangeLog.m4 diff --git a/win-linux/package/linux/Makefile b/win-linux/package/linux/Makefile index 50c9a9137..9ba820c5e 100644 --- a/win-linux/package/linux/Makefile +++ b/win-linux/package/linux/Makefile @@ -72,8 +72,10 @@ DEB_ASTRA = deb-astra/$(PACKAGE_NAME)_$(PACKAGE_VERSION)$(DEB_ASTRA_RELEASE_SUFF TAR = $(TAR_PACKAGE_DIR)/$(PACKAGE_NAME)-$(PACKAGE_VERSION)$(TAR_RELEASE_SUFFIX)-$(TAR_ARCH).tar.xz HELP_TAR = $(TAR_PACKAGE_DIR)/$(PACKAGE_NAME)-help-$(PACKAGE_VERSION)$(TAR_RELEASE_SUFFIX)-any.tar.xz -CHANGELOG_RPM = common/usr/share/doc/$(PACKAGE_NAME)/NEWS -CHANGELOG_RPM_M4 = common/usr/share/doc/NEWS.m4 +NEWS_RPM = common/usr/share/doc/$(PACKAGE_NAME)/NEWS +NEWS_RPM_M4 = common/usr/share/doc/NEWS.m4 +CHANGELOG_RPM = common/usr/share/doc/$(PACKAGE_NAME)/ChangeLog +CHANGELOG_RPM_M4 = common/usr/share/doc/ChangeLog.m4 CHANGELOG_DEB = deb/build/debian/changelog CHANGELOG_DEB_M4 = deb/template/changelog.m4 CHANGELOG_DEB_ASTRA = deb-astra/build/debian/changelog @@ -266,6 +268,7 @@ clean: suse-rpm/$(PACKAGE_NAME).spec \ $(shell dirname $(CHANGELOG_RPM)) \ $(CHANGES_DIR)/*/changes_??? \ + $(CHANGES_DIR)/*/news_??? \ $(INSTALLER) branding: $(BRANDING_DIR) @@ -335,7 +338,7 @@ $(CHANGELOG_DEB) : $(CHANGELOG_DEB_M4) $(CHANGELOG_RPM) $(foreach dir, \ $(CHANGES_DIR_LIST), \ $(shell \ - sed 's/^[^ *]/* &/' $(CHANGES_DIR)/$(dir)/changes_rpm | \ + sed 's/^[^ *]/* &/' $(CHANGES_DIR)/$(dir)/news_rpm | \ sed 's/^/ /' \ > $(CHANGES_DIR)/$(dir)/changes_deb; \ mkdir -p deb/build/debian; \ @@ -361,9 +364,19 @@ $(CHANGELOG_RPM) : sed '/<\/ul>/d' | \ sed '/

      /d' | \ sed '/^$$/d' \ + > $(CHANGES_DIR)/$(dir)/news_rpm; \ + mkdir -p $(shell dirname $(NEWS_RPM)); \ + m4 $(M4_PARAMS) -D M4_VERSION='$(dir)' -D M4_DATE_SHORT='$(shell date -d "$(shell grep \"releasedate\" $(CHANGES_DIR)/$(dir)/$(CHANGES_HTML) | sed 's/.* - //' | sed 's/<\/span>.*//' | sed 's/{{DATE}}/$(shell date -R)/')" -I)' $(NEWS_RPM_M4) | sed '2r $(CHANGES_DIR)/$(dir)/news_rpm' >> $(NEWS_RPM))) + + $(foreach dir, \ + $(CHANGES_DIR_LIST), \ + $(shell \ + sed 's/ - / - /' $(CHANGES_DIR)/$(dir)/news_rpm | \ + sed 's/* / - /' | \ + sed 's/^[^ *]/- &/' \ > $(CHANGES_DIR)/$(dir)/changes_rpm; \ mkdir -p $(shell dirname $(CHANGELOG_RPM)); \ - m4 $(M4_PARAMS) -D M4_VERSION='$(dir)' -D M4_DATE_SHORT='$(shell date -d "$(shell grep \"releasedate\" $(CHANGES_DIR)/$(dir)/$(CHANGES_HTML) | sed 's/.* - //' | sed 's/<\/span>.*//' | sed 's/{{DATE}}/$(shell date -R)/')" -I)' $(CHANGELOG_RPM_M4) | sed '2r $(CHANGES_DIR)/$(dir)/changes_rpm' >> $(CHANGELOG_RPM))) + m4 $(M4_PARAMS) -D M4_VERSION='$(dir)' -D M4_DATE='$(shell LC_TIME="en_US.UTF-8" date -d "$(shell grep \"releasedate\" $(CHANGES_DIR)/$(dir)/$(CHANGES_HTML) | sed 's/.* - //' | sed 's/<\/span>.*//' | sed 's/{{DATE}}/$(shell date -R)/')" +"%a %b %d %Y")' $(CHANGELOG_RPM_M4) | sed '1r $(CHANGES_DIR)/$(dir)/changes_rpm' >> $(CHANGELOG_RPM))) deb/build/debian/$(PACKAGE_NAME).% : deb/template/package.%.m4 mkdir -pv $(@D) && m4 $(M4_DEB_PARAMS) $< > $@ diff --git a/win-linux/package/linux/common/usr/share/doc/ChangeLog.m4 b/win-linux/package/linux/common/usr/share/doc/ChangeLog.m4 new file mode 100644 index 000000000..c95783f12 --- /dev/null +++ b/win-linux/package/linux/common/usr/share/doc/ChangeLog.m4 @@ -0,0 +1,2 @@ +* M4_DATE M4_PUBLISHER_NAME M4_VERSION + diff --git a/win-linux/package/linux/rpm/common.spec b/win-linux/package/linux/rpm/common.spec index 67a5cfbfa..ba9c62ebe 100644 --- a/win-linux/package/linux/rpm/common.spec +++ b/win-linux/package/linux/rpm/common.spec @@ -178,3 +178,7 @@ for icon in "/opt/%{_desktopeditors_prefix}/asc-de-"*.png; do size="${icon##*/asc-de-}" "$XDG_ICON_RESOURCE" install --size "${size%.png}" "$icon" "%{_package_name}" done + +%changelog + +%include ../common/usr/share/doc/%{_package_name}/ChangeLog From 1af4c7a748c11be01474421516b8fce0f12b8b39 Mon Sep 17 00:00:00 2001 From: Semyon Bezrukov Date: Thu, 12 Oct 2023 14:25:02 +0300 Subject: [PATCH 291/298] Fix windows desktop help paths (#996) --- win-linux/package/windows/make_zip.ps1 | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/win-linux/package/windows/make_zip.ps1 b/win-linux/package/windows/make_zip.ps1 index 4313b6fbf..46f052be6 100644 --- a/win-linux/package/windows/make_zip.ps1 +++ b/win-linux/package/windows/make_zip.ps1 @@ -40,11 +40,11 @@ Copy-Item -Path "$BrandingDir\data\visual_elements_icon_*" ` # Move Help Get-ChildItem "$BuildDir\$DesktopDir\editors\web-apps\apps\*\main\resources\help" -Directory ` | ForEach-Object { - $src = Resolve-Path -Relative $_.FullName - $dst = $src -replace "$DesktopDir", "$DesktopHelpDir" - Write-Host "Move: $src > $dst" -ForegroundColor Yellow - New-Item $dst -ItemType Directory -Force | Out-Null - Move-Item -Path $src -Destination $dst -Force + $src = $(Split-Path $_.FullName -Parent | Resolve-Path -Relative) + $dst = $src.Replace("\$DesktopDir\","\$DesktopHelpDir\") + Write-Host "Move: $src\help > $dst" -ForegroundColor Yellow + New-Item "$dst" -ItemType Directory | Out-Null + Move-Item -Path "$src\help" -Destination "$dst" } if ( $DesktopDir ) { From 3a0014b7225c409af4968e991b1f6e3bbb1e9a0b Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Thu, 12 Oct 2023 19:32:56 +0300 Subject: [PATCH 292/298] [deploy] changelog for ver 7.5.0 --- .../ONLYOFFICE/changes/7.5.0/changes.html | 77 ++++++++++++------ .../ONLYOFFICE/changes/7.5.0/changes.ru.html | 77 ++++++++++++------ .../windows/update/changes/7.5.0/changes.html | 80 ++++++++++++------- .../update/changes/7.5.0/changes_ru.html | 80 ++++++++++++------- 4 files changed, 206 insertions(+), 108 deletions(-) diff --git a/macos/ONLYOFFICE/update/updates/ONLYOFFICE/changes/7.5.0/changes.html b/macos/ONLYOFFICE/update/updates/ONLYOFFICE/changes/7.5.0/changes.html index b25fd0008..60bee6534 100644 --- a/macos/ONLYOFFICE/update/updates/ONLYOFFICE/changes/7.5.0/changes.html +++ b/macos/ONLYOFFICE/update/updates/ONLYOFFICE/changes/7.5.0/changes.html @@ -91,46 +91,71 @@

      New Features

      All Editors

        -
      • TODO
      • +
      • Added the support for >200% (225, 250, 275, 300, 350, 400, 450, 500 interface scaling)
      • +
      • In the “Open Recent” section, added files in the format corresponding to the editor from the “Recent files” list of the application
      • +
      • Updated VLC libraries (for Windows)
      • +
      • Updated the “About” page and the “Check for updates” block (for Windows)
      • +
      • Added a number of changes for the deb and rpm packages
      • +
      • scaling is preserved for future sessions
      • +
      • Add a menu for quick access to the most popular symbols to the button for inserting symbols
      • +
      • Support for SVG
      • +
      • Add a setting to hide the toolbar for equation
      • +
      • Add hints for images in SmartArt objects
      • +
      • Add the ability to open files protected with a password in the embedded viewer
      • +
      • Add the ability to edit points of the autoshape border to the right panel
      • +
      • Add the support for 225 and 275 interface scaling
      • +
      • Only Ctrl + ./Ctrl + , keyboard shortcuts are now used for superscript/subscript characters
      • +
      • Change keyboard shortcuts for moving through the text on macOS

      Document Editor

        -
      • TODO
      • +
      • Automatic hyphenation
      • +
      • Change the selection logic, add the “Smart paragraph selection” setting
      • +
      • Add the “Remove content control when contents are edited” setting
      • +
      • Change behavior of the Accept/Reject review buttons in the toolbar
      • +
      • Disable the Zoom out action for the Ctrl + Numpad keyboard shortcut due to the conflict with inserting an em dash
      • +
      • Change the keyboard shortcut for strikeout text formatting on macOS: Ctrl + 5 replaced with Cmd + Shift + X
      • +
      • Change the keyboard shortcut for inserting ellipsis on macOS: Ctrl + Option + . replaced with Option + ;

      Spreadsheet Editor

        -
      • TODO
      • +
      • The ability to display only formulas in cells
      • +
      • Trace precedents / dependents
      • +
      • New function: SORTBY
      • +
      • Margins presets for printing
      • +
      • Add the ability to set a number format in the field settings for pivot tables
      • +
      • The Show details feature for working with a Pivot Table
      • +
      • Improvement of the ability to open data on a new sheet by double-clicking a value in a Pivot Table
      • +
      • Autocompletion for days of the week and months when stretching a cell value
      • +
      • Drag-and-drop for columns and rows
      • +
      • Add filters by date and the ability to display data with the "Date" format in the form of a tree in the Autofilter window
      • +
      • Inserting images into headers/footers
      • +
      • External data update for the currently edited source file
      • +
      • .csv files preserve recently used Delimiter and Encoding settings in Local storage for future sessions
      • +
      • Insert page breaks
      • +
      • Add the ability to open the source for external links
      • +
      • Add the Alt + Down keyboard shortcut for opening the Autofilter window when the header of a column with a filter is selected
      • +

      Presentation Editor

        -
      • TODO
      • +
      • Add the "Morph" transition
      • +
      • Assigning names to objects
      • +
      • Selecting a slide for the start of numeration
      • +
      • Notes and Handouts in headers/footers settings
      • +
      • Slide placeholders have alternative descriptions
      • +
      • SmartArt insertion is available via a slide placeholder
      • +
      • Change the color of the Presentation Editor header
      • +
      • Add the ability to navigate to the specific slide with the consecutive pressing of the *slide number* + Enter when previewing a presentation
      • +
      • Change the keyboard shortcut for starting a presentation on macOS: Cmd + Shift + Return is used

      Forms

        -
      • TODO
      • -
      - -

      Fixes

      - -

      All Editors

      -
        -
      • TODO
      • -
      -

      Document Editor

      -
        -
      • TODO
      • -
      -

      Spreadsheet Editor

      -
        -
      • TODO
      • +
      • Bring settings on the right toolbar to unified appearance
      -

      Presentation Editor

      -
        -
      • TODO
      • -
      -

      Forms

      +

      PDF Edito

        -
      • TODO
      • +
      • Support for the PDF form, annotations, comments, draw

  • diff --git a/macos/ONLYOFFICE/update/updates/ONLYOFFICE/changes/7.5.0/changes.ru.html b/macos/ONLYOFFICE/update/updates/ONLYOFFICE/changes/7.5.0/changes.ru.html index 031da627a..5f14d7727 100644 --- a/macos/ONLYOFFICE/update/updates/ONLYOFFICE/changes/7.5.0/changes.ru.html +++ b/macos/ONLYOFFICE/update/updates/ONLYOFFICE/changes/7.5.0/changes.ru.html @@ -91,46 +91,71 @@

    Новые функции

    Все редакторы

      -
    • TODO
    • +
    • Добавлена поддержка масштабов интерфейса >200% (225, 250, 275, 300, 350, 400, 450, 500)
    • +
    • В раздел Open Recent добавлены файлы из списка Recent files приложения, по формату соответствующие редактору
    • +
    • Обновлены библиотеки VLC (для Windows)
    • +
    • Обновлена страница О программе и блок обновлений (для Windows)
    • +
    • Добавлен список изменений в deb и rpm пакеты
    • +
    • Добавлена возможность открывать редакторы с последним используемым масштабом
    • +
    • В кнопку вставки символов добавлено меню для быстрого доступа к наиболее популярным символам
    • +
    • Добавлена возможность вставки SVG
    • +
    • Добавлена настройка, позволяющая скрыть тулбар для уравнений
    • +
    • Добавлены подсказки к изображениям в SmartArt
    • +
    • Добавлена возможность открытия файлов с паролем в embedded viewer
    • +
    • В правую панель добавлена возможность редактировать точки для границы автофигуры
    • +
    • Добавлена поддержка масштабов интерфейса 225 и 275
    • +
    • Горячие клавиши для надстрочных/подстрочных знаков теперь только Ctrl + . / Ctrl + ,
    • +
    • Изменена работа перемещения по тексту с помощью горячих клавиш для macOS

    Редактор документов

      -
    • TODO
    • +
    • Добавлена возможность автоматической расстановки переносов
    • +
    • Изменена логика работы выделения, добавлена настройка "Smart paragraph selection"
    • +
    • Добавлена настройка "Удаления контрола при редактировании"
    • +
    • Изменено поведение кнопок для рецензирования в тулбаре Принять/Отклонить
    • +
    • Отключено действие Уменьшить для Ctrl + Numpad – из-за конфликта со вставкой короткого тире
    • +
    • Изменена клавиша применения Зачеркнутый c Ctrl + 5 на Cmd + Shift + X для macOS
    • +
    • Изменено сочетание для вставки многоточия для macOS с Ctrl + Option + . на Option + ;

    Редактор таблиц

      -
    • TODO
    • +
    • Добавлена возможность показать формулы в ячейках
    • +
    • Добавлена возможность отображения связей между формулами и ячейками
    • +
    • Добавлена поддержка новой функции SORTBY
    • +
    • В настройках печати переделана настройка Полей
    • +
    • В настройки полей для сводных таблиц добавлена возможность задать формат числа
    • +
    • В контекстное меню сводных таблиц добавлен пункт Показать детали для отображения подробных сведений о поле значений
    • +
    • Возможность показать детали двойным кликом по ячейке сводной таблицы
    • +
    • Добавлено автозаполнение днями недели и месяцами
    • +
    • Добавлена возможность перемещения строк и столбцов таблицы с помощью drag-n-drop
    • +
    • В окно Автофильтра добавлены фильтры по датам и вывод данных с форматом Дата в форме дерева
    • +
    • Добавлена возможность вставлять изображения в колонтитулы
    • +
    • Добавлена возможность обновления внешних данных в редакторе таблиц для файла-источника, который находится в процессе редактирования
    • +
    • Добавлено сохранение последних выбранных настроек Кодировки и Разделителя в Local Storage браузера
    • +
    • Добавлена возможность добавлять разрывы страниц
    • +
    • Добавлена возможность открытия источника для внешних ссылок
    • +
    • Добавлена горячая клавиша Alt + Down для вызова окна Автофильтра, если выделен заголовок столбца с фильтром

    Редактор презентаций

      -
    • TODO
    • -
    -

    Формы

    -
      -
    • TODO
    • -
    +
  • Добавлен переход "Трансформация"
  • +
  • Добавлена возможность задавать имя объекта на слайде
  • +
  • Добавлена возможность выбрать слайд, с которого начнется нумерация слайдов
  • +
  • Добавлена вкладка Заметки и раздаточные материалы в настройки колонтитулов
  • +
  • Добавлены подсказки к плейсхолдерам на слайдах в редакторе презентаций
  • +
  • Добавлена возможность добавлять SmartArt через плейсхолдер на слайде
  • +
  • Изменен цвет шапки редактора презентаций
  • +
  • Добавлена возможность перехода к нужному слайду через последовательное нажатие *номер слайда* + Enter в режиме демонстрации
  • +
  • Запуск слайдшоу в редакторе презентаций для macOS изменен на Cmd + Shift + Return
  • -

    Исправления

    - -

    Все редакторы

    -
      -
    • TODO
    • -
    -

    Редактор документов

    -
      -
    • TODO
    • -
    -

    Редактор таблиц

    -
      -
    • TODO
    -

    Редактор презентаций

    +

    Формы

      -
    • TODO
    • +
    • Названия настроек на правой панели инструментов приведены к общему виду
    -

    Формы

    +

    Редактор PDF

      -
    • TODO
    • +
    • Заполнение форм, аннотации, комментарии и рисование
    diff --git a/win-linux/package/windows/update/changes/7.5.0/changes.html b/win-linux/package/windows/update/changes/7.5.0/changes.html index 4e0070197..8bbface7e 100644 --- a/win-linux/package/windows/update/changes/7.5.0/changes.html +++ b/win-linux/package/windows/update/changes/7.5.0/changes.html @@ -10,7 +10,7 @@ font-family: "Lucida Grande", "Lucida Sans Unicode", Verdana, Lucida, Helvetica, sans-serif; } h1, h2, h3 { - color: #7.5.00; + color: #000; font-family: "Helvetica"; font-weight: normal; font-style: normal; @@ -52,48 +52,72 @@

    New Features

    All Editors

      -
    • TODO
    • +
    • Added the support for >200% (225, 250, 275, 300, 350, 400, 450, 500 interface scaling)
    • +
    • In the “Open Recent” section, added files in the format corresponding to the editor from the “Recent files” list of the application
    • +
    • Updated VLC libraries (for Windows)
    • +
    • Updated the “About” page and the “Check for updates” block (for Windows)
    • +
    • Added a number of changes for the deb and rpm packages
    • +
    • scaling is preserved for future sessions
    • +
    • Add a menu for quick access to the most popular symbols to the button for inserting symbols
    • +
    • Support for SVG
    • +
    • Add a setting to hide the toolbar for equation
    • +
    • Add hints for images in SmartArt objects
    • +
    • Add the ability to open files protected with a password in the embedded viewer
    • +
    • Add the ability to edit points of the autoshape border to the right panel
    • +
    • Add the support for 225 and 275 interface scaling
    • +
    • Only Ctrl + ./Ctrl + , keyboard shortcuts are now used for superscript/subscript characters
    • +
    • Change keyboard shortcuts for moving through the text on macOS

    Document Editor

      -
    • TODO
    • +
    • Automatic hyphenation
    • +
    • Change the selection logic, add the “Smart paragraph selection” setting
    • +
    • Add the “Remove content control when contents are edited” setting
    • +
    • Change behavior of the Accept/Reject review buttons in the toolbar
    • +
    • Disable the Zoom out action for the Ctrl + Numpad keyboard shortcut due to the conflict with inserting an em dash
    • +
    • Change the keyboard shortcut for strikeout text formatting on macOS: Ctrl + 5 replaced with Cmd + Shift + X
    • +
    • Change the keyboard shortcut for inserting ellipsis on macOS: Ctrl + Option + . replaced with Option + ;

    Spreadsheet Editor

      -
    • TODO
    • +
    • The ability to display only formulas in cells
    • +
    • Trace precedents / dependents
    • +
    • New function: SORTBY
    • +
    • Margins presets for printing
    • +
    • Add the ability to set a number format in the field settings for pivot tables
    • +
    • The Show details feature for working with a Pivot Table
    • +
    • Improvement of the ability to open data on a new sheet by double-clicking a value in a Pivot Table
    • +
    • Autocompletion for days of the week and months when stretching a cell value
    • +
    • Drag-and-drop for columns and rows
    • +
    • Add filters by date and the ability to display data with the "Date" format in the form of a tree in the Autofilter window
    • +
    • Inserting images into headers/footers
    • +
    • External data update for the currently edited source file
    • +
    • .csv files preserve recently used Delimiter and Encoding settings in Local storage for future sessions
    • +
    • Insert page breaks
    • +
    • Add the ability to open the source for external links
    • +
    • Add the Alt + Down keyboard shortcut for opening the Autofilter window when the header of a column with a filter is selected
    • +

    Presentation Editor

      -
    • TODO
    • +
    • Add the "Morph" transition
    • +
    • Assigning names to objects
    • +
    • Selecting a slide for the start of numeration
    • +
    • Notes and Handouts in headers/footers settings
    • +
    • Slide placeholders have alternative descriptions
    • +
    • SmartArt insertion is available via a slide placeholder
    • +
    • Change the color of the Presentation Editor header
    • +
    • Add the ability to navigate to the specific slide with the consecutive pressing of the *slide number* + Enter when previewing a presentation
    • +
    • Change the keyboard shortcut for starting a presentation on macOS: Cmd + Shift + Return is used

    Forms

      -
    • TODO
    • +
    • Bring settings on the right toolbar to unified appearance
    - -

    Fixes

    - -

    All Editors

    +

    PDF Edito

      -
    • TODO
    • +
    • Support for the PDF form, annotations, comments, draw
    -

    Document Editor

    -
      -
    • TODO
    • -
    -

    Spreadsheet Editor

    -
      -
    • TODO
    • -
    -

    Presentation Editor

    -
      -
    • TODO
    • -
    -

    Forms

    -
      -
    • TODO
    • -
    -
    diff --git a/win-linux/package/windows/update/changes/7.5.0/changes_ru.html b/win-linux/package/windows/update/changes/7.5.0/changes_ru.html index d7cc70e23..56c0facc8 100644 --- a/win-linux/package/windows/update/changes/7.5.0/changes_ru.html +++ b/win-linux/package/windows/update/changes/7.5.0/changes_ru.html @@ -10,7 +10,7 @@ font-family: "Lucida Grande", "Lucida Sans Unicode", Verdana, Lucida, Helvetica, sans-serif; } h1, h2, h3 { - color: #7.5.00; + color: #000; font-family: "Helvetica"; font-weight: normal; font-style: normal; @@ -52,48 +52,72 @@

    Новые функции

    Все редакторы

      -
    • TODO
    • +
    • Добавлена поддержка масштабов интерфейса >200% (225, 250, 275, 300, 350, 400, 450, 500)
    • +
    • В раздел Open Recent добавлены файлы из списка Recent files приложения, по формату соответствующие редактору
    • +
    • Обновлены библиотеки VLC (для Windows)
    • +
    • Обновлена страница О программе и блок обновлений (для Windows)
    • +
    • Добавлен список изменений в deb и rpm пакеты
    • +
    • Добавлена возможность открывать редакторы с последним используемым масштабом
    • +
    • В кнопку вставки символов добавлено меню для быстрого доступа к наиболее популярным символам
    • +
    • Добавлена возможность вставки SVG
    • +
    • Добавлена настройка, позволяющая скрыть тулбар для уравнений
    • +
    • Добавлены подсказки к изображениям в SmartArt
    • +
    • Добавлена возможность открытия файлов с паролем в embedded viewer
    • +
    • В правую панель добавлена возможность редактировать точки для границы автофигуры
    • +
    • Добавлена поддержка масштабов интерфейса 225 и 275
    • +
    • Горячие клавиши для надстрочных/подстрочных знаков теперь только Ctrl + . / Ctrl + ,
    • +
    • Изменена работа перемещения по тексту с помощью горячих клавиш для macOS

    Редактор документов

      -
    • TODO
    • +
    • Добавлена возможность автоматической расстановки переносов
    • +
    • Изменена логика работы выделения, добавлена настройка "Smart paragraph selection"
    • +
    • Добавлена настройка "Удаления контрола при редактировании"
    • +
    • Изменено поведение кнопок для рецензирования в тулбаре Принять/Отклонить
    • +
    • Отключено действие Уменьшить для Ctrl + Numpad – из-за конфликта со вставкой короткого тире
    • +
    • Изменена клавиша применения Зачеркнутый c Ctrl + 5 на Cmd + Shift + X для macOS
    • +
    • Изменено сочетание для вставки многоточия для macOS с Ctrl + Option + . на Option + ;

    Редактор таблиц

      -
    • TODO
    • +
    • Добавлена возможность показать формулы в ячейках
    • +
    • Добавлена возможность отображения связей между формулами и ячейками
    • +
    • Добавлена поддержка новой функции SORTBY
    • +
    • В настройках печати переделана настройка Полей
    • +
    • В настройки полей для сводных таблиц добавлена возможность задать формат числа
    • +
    • В контекстное меню сводных таблиц добавлен пункт Показать детали для отображения подробных сведений о поле значений
    • +
    • Возможность показать детали двойным кликом по ячейке сводной таблицы
    • +
    • Добавлено автозаполнение днями недели и месяцами
    • +
    • Добавлена возможность перемещения строк и столбцов таблицы с помощью drag-n-drop
    • +
    • В окно Автофильтра добавлены фильтры по датам и вывод данных с форматом Дата в форме дерева
    • +
    • Добавлена возможность вставлять изображения в колонтитулы
    • +
    • Добавлена возможность обновления внешних данных в редакторе таблиц для файла-источника, который находится в процессе редактирования
    • +
    • Добавлено сохранение последних выбранных настроек Кодировки и Разделителя в Local Storage браузера
    • +
    • Добавлена возможность добавлять разрывы страниц
    • +
    • Добавлена возможность открытия источника для внешних ссылок
    • +
    • Добавлена горячая клавиша Alt + Down для вызова окна Автофильтра, если выделен заголовок столбца с фильтром

    Редактор презентаций

      -
    • TODO
    • -
    -

    Формы

    -
      -
    • TODO
    • -
    - -

    Исправления

    +
  • Добавлен переход "Трансформация"
  • +
  • Добавлена возможность задавать имя объекта на слайде
  • +
  • Добавлена возможность выбрать слайд, с которого начнется нумерация слайдов
  • +
  • Добавлена вкладка Заметки и раздаточные материалы в настройки колонтитулов
  • +
  • Добавлены подсказки к плейсхолдерам на слайдах в редакторе презентаций
  • +
  • Добавлена возможность добавлять SmartArt через плейсхолдер на слайде
  • +
  • Изменен цвет шапки редактора презентаций
  • +
  • Добавлена возможность перехода к нужному слайду через последовательное нажатие *номер слайда* + Enter в режиме демонстрации
  • +
  • Запуск слайдшоу в редакторе презентаций для macOS изменен на Cmd + Shift + Return
  • -

    Все редакторы

    -
      -
    • TODO
    -

    Редактор документов

    -
      -
    • TODO
    • -
    -

    Редактор таблиц

    -
      -
    • TODO
    • -
    -

    Редактор презентаций

    +

    Формы

      -
    • TODO
    • +
    • Названия настроек на правой панели инструментов приведены к общему виду
    -

    Формы

    +

    Редактор PDF

      -
    • TODO
    • +
    • Заполнение форм, аннотации, комментарии и рисование
    -
    From 0d5fcff04feafa4baac46334daea14a25dd5f803 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Sat, 14 Oct 2023 14:18:27 +0300 Subject: [PATCH 293/298] [win] fix duplex mode --- win-linux/src/platform_win/printdialog.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/win-linux/src/platform_win/printdialog.cpp b/win-linux/src/platform_win/printdialog.cpp index 93bd231a0..9e61971f1 100644 --- a/win-linux/src/platform_win/printdialog.cpp +++ b/win-linux/src/platform_win/printdialog.cpp @@ -286,8 +286,8 @@ QDialog::DialogCode PrintDialog::exec() // DuplexLongSide = 2 // DuplexShortSide = 3 if (pDevMode->dmFields & DM_DUPLEX) { - pDevMode->dmDuplex = (qt_duplex == QPrinter::DuplexLongSide) ? DMDUP_HORIZONTAL : - (qt_duplex == QPrinter::DuplexShortSide) ? DMDUP_VERTICAL : DMDUP_SIMPLEX; + pDevMode->dmDuplex = (qt_duplex == QPrinter::DuplexLongSide) ? DMDUP_VERTICAL : + (qt_duplex == QPrinter::DuplexShortSide) ? DMDUP_HORIZONTAL : DMDUP_SIMPLEX; } if (pDevMode->dmFields & DM_PAPERSIZE) @@ -376,8 +376,8 @@ QDialog::DialogCode PrintDialog::exec() m_printer->setFromTo(start > end ? end : start, start > end ? start : end); } m_printer->setCollateCopies(bool(dlg.Flags & PD_COLLATE)); - m_printer->setDuplex(pDevmode->dmDuplex == DMDUP_HORIZONTAL ? QPrinter::DuplexLongSide : - pDevmode->dmDuplex == DMDUP_VERTICAL ? QPrinter::DuplexShortSide : QPrinter::DuplexNone); + m_printer->setDuplex(pDevmode->dmDuplex == DMDUP_VERTICAL ? QPrinter::DuplexLongSide : + pDevmode->dmDuplex == DMDUP_HORIZONTAL ? QPrinter::DuplexShortSide : QPrinter::DuplexNone); m_printer->setCopyCount(pDevmode->dmCopies); // auto path = QUrl::fromPercentEncoding(QByteArray(output_uri)).replace("file://", ""); From 6e5a6911dbf2aaa4a13bb4c28c6114ffb76cc195 Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Mon, 16 Oct 2023 15:30:38 +0300 Subject: [PATCH 294/298] [macos] fix changelog --- .../ONLYOFFICE/changes/7.5.0/changes.html | 31 +++++++++---------- .../ONLYOFFICE/changes/7.5.0/changes.ru.html | 10 +++--- 2 files changed, 20 insertions(+), 21 deletions(-) diff --git a/macos/ONLYOFFICE/update/updates/ONLYOFFICE/changes/7.5.0/changes.html b/macos/ONLYOFFICE/update/updates/ONLYOFFICE/changes/7.5.0/changes.html index 60bee6534..4cf83aa26 100644 --- a/macos/ONLYOFFICE/update/updates/ONLYOFFICE/changes/7.5.0/changes.html +++ b/macos/ONLYOFFICE/update/updates/ONLYOFFICE/changes/7.5.0/changes.html @@ -91,27 +91,27 @@

    New Features

    All Editors

      -
    • Added the support for >200% (225, 250, 275, 300, 350, 400, 450, 500 interface scaling)
    • -
    • In the “Open Recent” section, added files in the format corresponding to the editor from the “Recent files” list of the application
    • +
    • Added support for interface scales >200% (225, 250, 275, 300, 350, 400, 450, 500)
    • +
    • Files from the "Recent files" list of the application have been added to the "File" > “Open Recent” section, according to the editor formats
    • Updated VLC libraries (for Windows)
    • Updated the “About” page and the “Check for updates” block (for Windows)
    • -
    • Added a number of changes for the deb and rpm packages
    • -
    • scaling is preserved for future sessions
    • +
    • Added a list of changes to deb/rpm packages (for Linux)
    • +
    • The "Last used" option has been added to the editors settings for "Default Zoom Value"
    • Add a menu for quick access to the most popular symbols to the button for inserting symbols
    • -
    • Support for SVG
    • +
    • Support for SVG images
    • Add a setting to hide the toolbar for equation
    • Add hints for images in SmartArt objects
    • Add the ability to open files protected with a password in the embedded viewer
    • Add the ability to edit points of the autoshape border to the right panel
    • -
    • Add the support for 225 and 275 interface scaling
    • + //
    • Add the support for 225 and 275 interface scaling
    • Only Ctrl + ./Ctrl + , keyboard shortcuts are now used for superscript/subscript characters
    • Change keyboard shortcuts for moving through the text on macOS

    Document Editor

    • Automatic hyphenation
    • -
    • Change the selection logic, add the “Smart paragraph selection” setting
    • -
    • Add the “Remove content control when contents are edited” setting
    • +
    • Change the selection logic, add the “Smart paragraph selection” option in Advanced Setting
    • +
    • Add the “Remove content control when contents are edited” option to content control settings
    • Change behavior of the Accept/Reject review buttons in the toolbar
    • Disable the Zoom out action for the Ctrl + Numpad keyboard shortcut due to the conflict with inserting an em dash
    • Change the keyboard shortcut for strikeout text formatting on macOS: Ctrl + 5 replaced with Cmd + Shift + X
    • @@ -122,7 +122,7 @@

      Spreadsheet Editor

    • The ability to display only formulas in cells
    • Trace precedents / dependents
    • New function: SORTBY
    • -
    • Margins presets for printing
    • +
    • Added presets for "Margins" and the ability to show/hide "Print titles" in the "File" > "Print" menu
    • Add the ability to set a number format in the field settings for pivot tables
    • The Show details feature for working with a Pivot Table
    • Improvement of the ability to open data on a new sheet by double-clicking a value in a Pivot Table
    • @@ -131,8 +131,8 @@

      Spreadsheet Editor

    • Add filters by date and the ability to display data with the "Date" format in the form of a tree in the Autofilter window
    • Inserting images into headers/footers
    • External data update for the currently edited source file
    • -
    • .csv files preserve recently used Delimiter and Encoding settings in Local storage for future sessions
    • -
    • Insert page breaks
    • +
    • The last used Delimiter and Encoding setting for CSV files is now stored locally on the client side
    • +
    • The ability to insert page breaks from the Layout toolbar
    • Add the ability to open the source for external links
    • Add the Alt + Down keyboard shortcut for opening the Autofilter window when the header of a column with a filter is selected
    • @@ -140,12 +140,11 @@

      Spreadsheet Editor

      Presentation Editor

      • Add the "Morph" transition
      • -
      • Assigning names to objects
      • -
      • Selecting a slide for the start of numeration
      • +
      • Assigning names to objects in advanced settings
      • +
      • The "Number slides from" option has been added to the slide size settings
      • Notes and Handouts in headers/footers settings
      • Slide placeholders have alternative descriptions
      • SmartArt insertion is available via a slide placeholder
      • -
      • Change the color of the Presentation Editor header
      • Add the ability to navigate to the specific slide with the consecutive pressing of the *slide number* + Enter when previewing a presentation
      • Change the keyboard shortcut for starting a presentation on macOS: Cmd + Shift + Return is used
      @@ -153,9 +152,9 @@

      Forms

      • Bring settings on the right toolbar to unified appearance
      -

      PDF Edito

      +

      PDF Editor

        -
      • Support for the PDF form, annotations, comments, draw
      • +
      • Support for the PDF form, annotations, comments and drawings
    diff --git a/macos/ONLYOFFICE/update/updates/ONLYOFFICE/changes/7.5.0/changes.ru.html b/macos/ONLYOFFICE/update/updates/ONLYOFFICE/changes/7.5.0/changes.ru.html index 5f14d7727..a19321176 100644 --- a/macos/ONLYOFFICE/update/updates/ONLYOFFICE/changes/7.5.0/changes.ru.html +++ b/macos/ONLYOFFICE/update/updates/ONLYOFFICE/changes/7.5.0/changes.ru.html @@ -92,13 +92,13 @@

    Новые функции

    Все редакторы

    • Добавлена поддержка масштабов интерфейса >200% (225, 250, 275, 300, 350, 400, 450, 500)
    • -
    • В раздел Open Recent добавлены файлы из списка Recent files приложения, по формату соответствующие редактору
    • +
    • В меню "Файл" > "Открыть недавние" добавлены файлы из списка "Последние файлы" приложения, по формату соответствующие редактору
    • Обновлены библиотеки VLC (для Windows)
    • Обновлена страница О программе и блок обновлений (для Windows)
    • Добавлен список изменений в deb и rpm пакеты
    • Добавлена возможность открывать редакторы с последним используемым масштабом
    • В кнопку вставки символов добавлено меню для быстрого доступа к наиболее популярным символам
    • -
    • Добавлена возможность вставки SVG
    • +
    • Добавлена возможность вставки SVG изображений
    • Добавлена настройка, позволяющая скрыть тулбар для уравнений
    • Добавлены подсказки к изображениям в SmartArt
    • Добавлена возможность открытия файлов с паролем в embedded viewer
    • @@ -110,8 +110,8 @@

      Все редакторы

      Редактор документов

      • Добавлена возможность автоматической расстановки переносов
      • -
      • Изменена логика работы выделения, добавлена настройка "Smart paragraph selection"
      • -
      • Добавлена настройка "Удаления контрола при редактировании"
      • +
      • Изменена логика работы выделения, добавлена настройка "Использовать умное выделение абзацев"
      • +
      • Добавлена настройка "Удалять элемент управления содержимым при редактировании содержимого" в настройки элементов управления содержимым
      • Изменено поведение кнопок для рецензирования в тулбаре Принять/Отклонить
      • Отключено действие Уменьшить для Ctrl + Numpad – из-за конфликта со вставкой короткого тире
      • Изменена клавиша применения Зачеркнутый c Ctrl + 5 на Cmd + Shift + X для macOS
      • @@ -121,7 +121,7 @@

        Редактор таблиц

        • Добавлена возможность показать формулы в ячейках
        • Добавлена возможность отображения связей между формулами и ячейками
        • -
        • Добавлена поддержка новой функции SORTBY
        • +
        • Добавлена поддержка новой функции СОРТПО
        • В настройках печати переделана настройка Полей
        • В настройки полей для сводных таблиц добавлена возможность задать формат числа
        • В контекстное меню сводных таблиц добавлен пункт Показать детали для отображения подробных сведений о поле значений
        • From 96c8e512f7a8c4e72fae3a2a5841f1d94a694342 Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Mon, 16 Oct 2023 18:03:57 +0300 Subject: [PATCH 295/298] [deploy] fix changelog --- .../ONLYOFFICE/changes/7.5.0/changes.html | 1 - .../ONLYOFFICE/changes/7.5.0/changes.ru.html | 2 -- .../windows/update/changes/7.5.0/changes.html | 30 +++++++++---------- .../update/changes/7.5.0/changes_ru.html | 12 ++++---- 4 files changed, 19 insertions(+), 26 deletions(-) diff --git a/macos/ONLYOFFICE/update/updates/ONLYOFFICE/changes/7.5.0/changes.html b/macos/ONLYOFFICE/update/updates/ONLYOFFICE/changes/7.5.0/changes.html index 4cf83aa26..187e1fa85 100644 --- a/macos/ONLYOFFICE/update/updates/ONLYOFFICE/changes/7.5.0/changes.html +++ b/macos/ONLYOFFICE/update/updates/ONLYOFFICE/changes/7.5.0/changes.html @@ -103,7 +103,6 @@

          All Editors

        • Add hints for images in SmartArt objects
        • Add the ability to open files protected with a password in the embedded viewer
        • Add the ability to edit points of the autoshape border to the right panel
        • - //
        • Add the support for 225 and 275 interface scaling
        • Only Ctrl + ./Ctrl + , keyboard shortcuts are now used for superscript/subscript characters
        • Change keyboard shortcuts for moving through the text on macOS
        diff --git a/macos/ONLYOFFICE/update/updates/ONLYOFFICE/changes/7.5.0/changes.ru.html b/macos/ONLYOFFICE/update/updates/ONLYOFFICE/changes/7.5.0/changes.ru.html index a19321176..ef193fd38 100644 --- a/macos/ONLYOFFICE/update/updates/ONLYOFFICE/changes/7.5.0/changes.ru.html +++ b/macos/ONLYOFFICE/update/updates/ONLYOFFICE/changes/7.5.0/changes.ru.html @@ -103,7 +103,6 @@

        Все редакторы

      • Добавлены подсказки к изображениям в SmartArt
      • Добавлена возможность открытия файлов с паролем в embedded viewer
      • В правую панель добавлена возможность редактировать точки для границы автофигуры
      • -
      • Добавлена поддержка масштабов интерфейса 225 и 275
      • Горячие клавиши для надстрочных/подстрочных знаков теперь только Ctrl + . / Ctrl + ,
      • Изменена работа перемещения по тексту с помощью горячих клавиш для macOS
      @@ -144,7 +143,6 @@

      Редактор презентаций

    • Добавлена вкладка Заметки и раздаточные материалы в настройки колонтитулов
    • Добавлены подсказки к плейсхолдерам на слайдах в редакторе презентаций
    • Добавлена возможность добавлять SmartArt через плейсхолдер на слайде
    • -
    • Изменен цвет шапки редактора презентаций
    • Добавлена возможность перехода к нужному слайду через последовательное нажатие *номер слайда* + Enter в режиме демонстрации
    • Запуск слайдшоу в редакторе презентаций для macOS изменен на Cmd + Shift + Return
    • diff --git a/win-linux/package/windows/update/changes/7.5.0/changes.html b/win-linux/package/windows/update/changes/7.5.0/changes.html index 8bbface7e..cdfe6d5a8 100644 --- a/win-linux/package/windows/update/changes/7.5.0/changes.html +++ b/win-linux/package/windows/update/changes/7.5.0/changes.html @@ -52,27 +52,26 @@

      New Features

      All Editors

        -
      • Added the support for >200% (225, 250, 275, 300, 350, 400, 450, 500 interface scaling)
      • -
      • In the “Open Recent” section, added files in the format corresponding to the editor from the “Recent files” list of the application
      • +
      • Added support for interface scales >200% (225, 250, 275, 300, 350, 400, 450, 500)
      • +
      • Files from the "Recent files" list of the application have been added to the "File" > “Open Recent” section, according to the editor formats
      • Updated VLC libraries (for Windows)
      • Updated the “About” page and the “Check for updates” block (for Windows)
      • -
      • Added a number of changes for the deb and rpm packages
      • -
      • scaling is preserved for future sessions
      • +
      • Added a list of changes to deb/rpm packages (for Linux)
      • +
      • The "Last used" option has been added to the editors settings for "Default Zoom Value"
      • Add a menu for quick access to the most popular symbols to the button for inserting symbols
      • -
      • Support for SVG
      • +
      • Support for SVG images
      • Add a setting to hide the toolbar for equation
      • Add hints for images in SmartArt objects
      • Add the ability to open files protected with a password in the embedded viewer
      • Add the ability to edit points of the autoshape border to the right panel
      • -
      • Add the support for 225 and 275 interface scaling
      • Only Ctrl + ./Ctrl + , keyboard shortcuts are now used for superscript/subscript characters
      • Change keyboard shortcuts for moving through the text on macOS

      Document Editor

      • Automatic hyphenation
      • -
      • Change the selection logic, add the “Smart paragraph selection” setting
      • -
      • Add the “Remove content control when contents are edited” setting
      • +
      • Change the selection logic, add the “Smart paragraph selection” option in Advanced Setting
      • +
      • Add the “Remove content control when contents are edited” option to content control settings
      • Change behavior of the Accept/Reject review buttons in the toolbar
      • Disable the Zoom out action for the Ctrl + Numpad keyboard shortcut due to the conflict with inserting an em dash
      • Change the keyboard shortcut for strikeout text formatting on macOS: Ctrl + 5 replaced with Cmd + Shift + X
      • @@ -83,7 +82,7 @@

        Spreadsheet Editor

      • The ability to display only formulas in cells
      • Trace precedents / dependents
      • New function: SORTBY
      • -
      • Margins presets for printing
      • +
      • Added presets for "Margins" and the ability to show/hide "Print titles" in the "File" > "Print" menu
      • Add the ability to set a number format in the field settings for pivot tables
      • The Show details feature for working with a Pivot Table
      • Improvement of the ability to open data on a new sheet by double-clicking a value in a Pivot Table
      • @@ -92,8 +91,8 @@

        Spreadsheet Editor

      • Add filters by date and the ability to display data with the "Date" format in the form of a tree in the Autofilter window
      • Inserting images into headers/footers
      • External data update for the currently edited source file
      • -
      • .csv files preserve recently used Delimiter and Encoding settings in Local storage for future sessions
      • -
      • Insert page breaks
      • +
      • The last used Delimiter and Encoding setting for CSV files is now stored locally on the client side
      • +
      • The ability to insert page breaks from the Layout toolbar
      • Add the ability to open the source for external links
      • Add the Alt + Down keyboard shortcut for opening the Autofilter window when the header of a column with a filter is selected
      • @@ -101,12 +100,11 @@

        Spreadsheet Editor

        Presentation Editor

        • Add the "Morph" transition
        • -
        • Assigning names to objects
        • -
        • Selecting a slide for the start of numeration
        • +
        • Assigning names to objects in advanced settings
        • +
        • The "Number slides from" option has been added to the slide size settings
        • Notes and Handouts in headers/footers settings
        • Slide placeholders have alternative descriptions
        • SmartArt insertion is available via a slide placeholder
        • -
        • Change the color of the Presentation Editor header
        • Add the ability to navigate to the specific slide with the consecutive pressing of the *slide number* + Enter when previewing a presentation
        • Change the keyboard shortcut for starting a presentation on macOS: Cmd + Shift + Return is used
        @@ -114,9 +112,9 @@

        Forms

        • Bring settings on the right toolbar to unified appearance
        -

        PDF Edito

        +

        PDF Editor

          -
        • Support for the PDF form, annotations, comments, draw
        • +
        • Support for the PDF form, annotations, comments and drawings
        diff --git a/win-linux/package/windows/update/changes/7.5.0/changes_ru.html b/win-linux/package/windows/update/changes/7.5.0/changes_ru.html index 56c0facc8..c38f11147 100644 --- a/win-linux/package/windows/update/changes/7.5.0/changes_ru.html +++ b/win-linux/package/windows/update/changes/7.5.0/changes_ru.html @@ -53,26 +53,25 @@

        Новые функции

        Все редакторы

        • Добавлена поддержка масштабов интерфейса >200% (225, 250, 275, 300, 350, 400, 450, 500)
        • -
        • В раздел Open Recent добавлены файлы из списка Recent files приложения, по формату соответствующие редактору
        • +
        • В меню "Файл" > "Открыть недавние" добавлены файлы из списка "Последние файлы" приложения, по формату соответствующие редактору
        • Обновлены библиотеки VLC (для Windows)
        • Обновлена страница О программе и блок обновлений (для Windows)
        • Добавлен список изменений в deb и rpm пакеты
        • Добавлена возможность открывать редакторы с последним используемым масштабом
        • В кнопку вставки символов добавлено меню для быстрого доступа к наиболее популярным символам
        • -
        • Добавлена возможность вставки SVG
        • +
        • Добавлена возможность вставки SVG изображений
        • Добавлена настройка, позволяющая скрыть тулбар для уравнений
        • Добавлены подсказки к изображениям в SmartArt
        • Добавлена возможность открытия файлов с паролем в embedded viewer
        • В правую панель добавлена возможность редактировать точки для границы автофигуры
        • -
        • Добавлена поддержка масштабов интерфейса 225 и 275
        • Горячие клавиши для надстрочных/подстрочных знаков теперь только Ctrl + . / Ctrl + ,
        • Изменена работа перемещения по тексту с помощью горячих клавиш для macOS

        Редактор документов

        • Добавлена возможность автоматической расстановки переносов
        • -
        • Изменена логика работы выделения, добавлена настройка "Smart paragraph selection"
        • -
        • Добавлена настройка "Удаления контрола при редактировании"
        • +
        • Изменена логика работы выделения, добавлена настройка "Использовать умное выделение абзацев"
        • +
        • Добавлена настройка "Удалять элемент управления содержимым при редактировании содержимого" в настройки элементов управления содержимым
        • Изменено поведение кнопок для рецензирования в тулбаре Принять/Отклонить
        • Отключено действие Уменьшить для Ctrl + Numpad – из-за конфликта со вставкой короткого тире
        • Изменена клавиша применения Зачеркнутый c Ctrl + 5 на Cmd + Shift + X для macOS
        • @@ -82,7 +81,7 @@

          Редактор таблиц

          • Добавлена возможность показать формулы в ячейках
          • Добавлена возможность отображения связей между формулами и ячейками
          • -
          • Добавлена поддержка новой функции SORTBY
          • +
          • Добавлена поддержка новой функции СОРТПО
          • В настройках печати переделана настройка Полей
          • В настройки полей для сводных таблиц добавлена возможность задать формат числа
          • В контекстное меню сводных таблиц добавлен пункт Показать детали для отображения подробных сведений о поле значений
          • @@ -105,7 +104,6 @@

            Редактор презентаций

          • Добавлена вкладка Заметки и раздаточные материалы в настройки колонтитулов
          • Добавлены подсказки к плейсхолдерам на слайдах в редакторе презентаций
          • Добавлена возможность добавлять SmartArt через плейсхолдер на слайде
          • -
          • Изменен цвет шапки редактора презентаций
          • Добавлена возможность перехода к нужному слайду через последовательное нажатие *номер слайда* + Enter в режиме демонстрации
          • Запуск слайдшоу в редакторе презентаций для macOS изменен на Cmd + Shift + Return
          • From 9471cb6cba4c027546b69ca988aea3ad62877395 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Sat, 14 Oct 2023 18:11:16 +0300 Subject: [PATCH 296/298] [win] fix print range --- win-linux/src/platform_win/printdialog.cpp | 5 +++-- win-linux/src/platform_win/printdialog.h | 1 + 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/win-linux/src/platform_win/printdialog.cpp b/win-linux/src/platform_win/printdialog.cpp index 9e61971f1..31068f830 100644 --- a/win-linux/src/platform_win/printdialog.cpp +++ b/win-linux/src/platform_win/printdialog.cpp @@ -149,6 +149,7 @@ PrintDialog::PrintDialog(QPrinter *printer, QWidget *parent) : if (m_printer->collateCopies()) m_options |= PrintOption::PrintCollateCopies; m_page_ranges.append(PageRanges(m_printer->fromPage(), m_printer->toPage())); + m_pages_count = m_printer->toPage(); } PrintDialog::~PrintDialog() @@ -345,8 +346,8 @@ QDialog::DialogCode PrintDialog::exec() dlg.nMaxPageRanges = MAXPAGERANGES; dlg.nPageRanges = 1; dlg.lpPageRanges = page_ranges; - dlg.nMinPage = (DWORD)m_printer->fromPage(); - dlg.nMaxPage = (DWORD)m_printer->toPage(); + dlg.nMinPage = 1; + dlg.nMaxPage = (DWORD)m_pages_count; PrintDialogCallback clb(&dialog_was_changed); dlg.lpCallback = static_cast(&clb); diff --git a/win-linux/src/platform_win/printdialog.h b/win-linux/src/platform_win/printdialog.h index 64633b59c..3c45d1a39 100644 --- a/win-linux/src/platform_win/printdialog.h +++ b/win-linux/src/platform_win/printdialog.h @@ -70,6 +70,7 @@ class PrintDialog PrintOptions m_options; PrintRange m_print_range; QVector m_page_ranges; + int m_pages_count; }; #endif // PRINTDIALOG_H From d7b09f9755c98757c19f1def3dec02f3739e0df5 Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Mon, 16 Oct 2023 21:22:30 +0300 Subject: [PATCH 297/298] [deploy] fix changelog --- .../ONLYOFFICE/changes/7.5.0/changes.ru.html | 14 +++++++------- .../windows/update/changes/7.5.0/changes_ru.html | 15 +++++++-------- 2 files changed, 14 insertions(+), 15 deletions(-) diff --git a/macos/ONLYOFFICE/update/updates/ONLYOFFICE/changes/7.5.0/changes.ru.html b/macos/ONLYOFFICE/update/updates/ONLYOFFICE/changes/7.5.0/changes.ru.html index ef193fd38..f019935a7 100644 --- a/macos/ONLYOFFICE/update/updates/ONLYOFFICE/changes/7.5.0/changes.ru.html +++ b/macos/ONLYOFFICE/update/updates/ONLYOFFICE/changes/7.5.0/changes.ru.html @@ -95,8 +95,8 @@

            Все редакторы

          • В меню "Файл" > "Открыть недавние" добавлены файлы из списка "Последние файлы" приложения, по формату соответствующие редактору
          • Обновлены библиотеки VLC (для Windows)
          • Обновлена страница О программе и блок обновлений (для Windows)
          • -
          • Добавлен список изменений в deb и rpm пакеты
          • -
          • Добавлена возможность открывать редакторы с последним используемым масштабом
          • +
          • Добавлен список изменений в deb/rpm пакеты (для Linux)
          • +
          • В "Дополнительные параметры" редакторов в список "Стандартное значение масштаба" добавлена опция "Последний использованный"
          • В кнопку вставки символов добавлено меню для быстрого доступа к наиболее популярным символам
          • Добавлена возможность вставки SVG изображений
          • Добавлена настройка, позволяющая скрыть тулбар для уравнений
          • @@ -121,7 +121,7 @@

            Редактор таблиц

          • Добавлена возможность показать формулы в ячейках
          • Добавлена возможность отображения связей между формулами и ячейками
          • Добавлена поддержка новой функции СОРТПО
          • -
          • В настройках печати переделана настройка Полей
          • +
          • В меню "Файл" > "Печать" для опции "Поля" добавлены пресеты и возможность скрыть/показать для "Печатать залоговки"
          • В настройки полей для сводных таблиц добавлена возможность задать формат числа
          • В контекстное меню сводных таблиц добавлен пункт Показать детали для отображения подробных сведений о поле значений
          • Возможность показать детали двойным кликом по ячейке сводной таблицы
          • @@ -130,16 +130,16 @@

            Редактор таблиц

          • В окно Автофильтра добавлены фильтры по датам и вывод данных с форматом Дата в форме дерева
          • Добавлена возможность вставлять изображения в колонтитулы
          • Добавлена возможность обновления внешних данных в редакторе таблиц для файла-источника, который находится в процессе редактирования
          • -
          • Добавлено сохранение последних выбранных настроек Кодировки и Разделителя в Local Storage браузера
          • -
          • Добавлена возможность добавлять разрывы страниц
          • +
          • Последние использованные настройки "Кодировка" и "Разделитель" для CSV-файлов теперь хранятся локально на стороне клиента
          • +
          • На панель инструментов "Макет" добавлена возможность вставлять разрывы страниц
          • Добавлена возможность открытия источника для внешних ссылок
          • Добавлена горячая клавиша Alt + Down для вызова окна Автофильтра, если выделен заголовок столбца с фильтром

          Редактор презентаций

          • Добавлен переход "Трансформация"
          • -
          • Добавлена возможность задавать имя объекта на слайде
          • -
          • Добавлена возможность выбрать слайд, с которого начнется нумерация слайдов
          • +
          • В "Дополнительные параметры" для объектов на слайде добавлена возможность присваивать имена
          • +
          • В "Настройки размера слайда" добавлена опция "Нумеровать слайды с"
          • Добавлена вкладка Заметки и раздаточные материалы в настройки колонтитулов
          • Добавлены подсказки к плейсхолдерам на слайдах в редакторе презентаций
          • Добавлена возможность добавлять SmartArt через плейсхолдер на слайде
          • diff --git a/win-linux/package/windows/update/changes/7.5.0/changes_ru.html b/win-linux/package/windows/update/changes/7.5.0/changes_ru.html index c38f11147..73e3455b2 100644 --- a/win-linux/package/windows/update/changes/7.5.0/changes_ru.html +++ b/win-linux/package/windows/update/changes/7.5.0/changes_ru.html @@ -56,8 +56,8 @@

            Все редакторы

          • В меню "Файл" > "Открыть недавние" добавлены файлы из списка "Последние файлы" приложения, по формату соответствующие редактору
          • Обновлены библиотеки VLC (для Windows)
          • Обновлена страница О программе и блок обновлений (для Windows)
          • -
          • Добавлен список изменений в deb и rpm пакеты
          • -
          • Добавлена возможность открывать редакторы с последним используемым масштабом
          • +
          • Добавлен список изменений в deb/rpm пакеты (для Linux)
          • +
          • В "Дополнительные параметры" редакторов в список "Стандартное значение масштаба" добавлена опция "Последний использованный"
          • В кнопку вставки символов добавлено меню для быстрого доступа к наиболее популярным символам
          • Добавлена возможность вставки SVG изображений
          • Добавлена настройка, позволяющая скрыть тулбар для уравнений
          • @@ -82,7 +82,7 @@

            Редактор таблиц

          • Добавлена возможность показать формулы в ячейках
          • Добавлена возможность отображения связей между формулами и ячейками
          • Добавлена поддержка новой функции СОРТПО
          • -
          • В настройках печати переделана настройка Полей
          • +
          • В меню "Файл" > "Печать" для опции "Поля" добавлены пресеты и возможность скрыть/показать для "Печатать залоговки"
          • В настройки полей для сводных таблиц добавлена возможность задать формат числа
          • В контекстное меню сводных таблиц добавлен пункт Показать детали для отображения подробных сведений о поле значений
          • Возможность показать детали двойным кликом по ячейке сводной таблицы
          • @@ -91,22 +91,21 @@

            Редактор таблиц

          • В окно Автофильтра добавлены фильтры по датам и вывод данных с форматом Дата в форме дерева
          • Добавлена возможность вставлять изображения в колонтитулы
          • Добавлена возможность обновления внешних данных в редакторе таблиц для файла-источника, который находится в процессе редактирования
          • -
          • Добавлено сохранение последних выбранных настроек Кодировки и Разделителя в Local Storage браузера
          • -
          • Добавлена возможность добавлять разрывы страниц
          • +
          • Последние использованные настройки "Кодировка" и "Разделитель" для CSV-файлов теперь хранятся локально на стороне клиента
          • +
          • На панель инструментов "Макет" добавлена возможность вставлять разрывы страниц
          • Добавлена возможность открытия источника для внешних ссылок
          • Добавлена горячая клавиша Alt + Down для вызова окна Автофильтра, если выделен заголовок столбца с фильтром

          Редактор презентаций

          • Добавлен переход "Трансформация"
          • -
          • Добавлена возможность задавать имя объекта на слайде
          • -
          • Добавлена возможность выбрать слайд, с которого начнется нумерация слайдов
          • +
          • В "Дополнительные параметры" для объектов на слайде добавлена возможность присваивать имена
          • +
          • В "Настройки размера слайда" добавлена опция "Нумеровать слайды с"
          • Добавлена вкладка Заметки и раздаточные материалы в настройки колонтитулов
          • Добавлены подсказки к плейсхолдерам на слайдах в редакторе презентаций
          • Добавлена возможность добавлять SmartArt через плейсхолдер на слайде
          • Добавлена возможность перехода к нужному слайду через последовательное нажатие *номер слайда* + Enter в режиме демонстрации
          • Запуск слайдшоу в редакторе презентаций для macOS изменен на Cmd + Shift + Return
          • -

          Формы

            From 22a09eb308ab9e3168a4401986dfa86fb1447d05 Mon Sep 17 00:00:00 2001 From: Roman Demidov Date: Tue, 17 Oct 2023 09:19:22 +0300 Subject: [PATCH 298/298] Update changelog for ver 7.5.0 for Linux (#1001) --- common/changes/7.5.0/changes.html | 75 ++++++++++++++++++---------- common/changes/7.5.0/changes_ru.html | 74 +++++++++++++++++---------- 2 files changed, 97 insertions(+), 52 deletions(-) diff --git a/common/changes/7.5.0/changes.html b/common/changes/7.5.0/changes.html index 49758ab9a..2706f3016 100644 --- a/common/changes/7.5.0/changes.html +++ b/common/changes/7.5.0/changes.html @@ -4,44 +4,67 @@

            New Features

            All Editors

              -
            • TODO
            • +
            • Added support for interface scales >200% (225, 250, 275, 300, 350, 400, 450, 500)
            • +
            • Files from the "Recent files" list of the application have been added to the "File" > “Open Recent” section, according to the editor formats
            • +
            • Updated VLC libraries (for Windows)
            • +
            • Updated the “About” page and the “Check for updates” block (for Windows)
            • +
            • Added a list of changes to deb/rpm packages (for Linux)
            • +
            • The "Last used" option has been added to the editors settings for "Default Zoom Value"
            • +
            • Add a menu for quick access to the most popular symbols to the button for inserting symbols
            • +
            • Support for SVG images
            • +
            • Add a setting to hide the toolbar for equation
            • +
            • Add hints for images in SmartArt objects
            • +
            • Add the ability to open files protected with a password in the embedded viewer
            • +
            • Add the ability to edit points of the autoshape border to the right panel
            • +
            • Only Ctrl + ./Ctrl + , keyboard shortcuts are now used for superscript/subscript characters
            • +
            • Change keyboard shortcuts for moving through the text on macOS

            Document Editor

              -
            • TODO
            • +
            • Automatic hyphenation
            • +
            • Change the selection logic, add the “Smart paragraph selection” option in Advanced Setting
            • +
            • Add the “Remove content control when contents are edited” option to content control settings
            • +
            • Change behavior of the Accept/Reject review buttons in the toolbar
            • +
            • Disable the Zoom out action for the Ctrl + Numpad keyboard shortcut due to the conflict with inserting an em dash
            • +
            • Change the keyboard shortcut for strikeout text formatting on macOS: Ctrl + 5 replaced with Cmd + Shift + X
            • +
            • Change the keyboard shortcut for inserting ellipsis on macOS: Ctrl + Option + . replaced with Option + ;

            Spreadsheet Editor

              -
            • TODO
            • +
            • The ability to display only formulas in cells
            • +
            • Trace precedents / dependents
            • +
            • New function: SORTBY
            • +
            • Added presets for "Margins" and the ability to show/hide "Print titles" in the "File" > "Print" menu
            • +
            • Add the ability to set a number format in the field settings for pivot tables
            • +
            • The Show details feature for working with a Pivot Table
            • +
            • Improvement of the ability to open data on a new sheet by double-clicking a value in a Pivot Table
            • +
            • Autocompletion for days of the week and months when stretching a cell value
            • +
            • Drag-and-drop for columns and rows
            • +
            • Add filters by date and the ability to display data with the "Date" format in the form of a tree in the Autofilter window
            • +
            • Inserting images into headers/footers
            • +
            • External data update for the currently edited source file
            • +
            • The last used Delimiter and Encoding setting for CSV files is now stored locally on the client side
            • +
            • The ability to insert page breaks from the Layout toolbar
            • +
            • Add the ability to open the source for external links
            • +
            • Add the Alt + Down keyboard shortcut for opening the Autofilter window when the header of a column with a filter is selected
            • +

            Presentation Editor

              -
            • TODO
            • +
            • Add the "Morph" transition
            • +
            • Assigning names to objects in advanced settings
            • +
            • The "Number slides from" option has been added to the slide size settings
            • +
            • Notes and Handouts in headers/footers settings
            • +
            • Slide placeholders have alternative descriptions
            • +
            • SmartArt insertion is available via a slide placeholder
            • +
            • Add the ability to navigate to the specific slide with the consecutive pressing of the *slide number* + Enter when previewing a presentation
            • +
            • Change the keyboard shortcut for starting a presentation on macOS: Cmd + Shift + Return is used

            Forms

              -
            • TODO
            • -
            - -

            Fixes

            - -

            All Editors

            -
              -
            • TODO
            • -
            -

            Document Editor

            -
              -
            • TODO
            • -
            -

            Spreadsheet Editor

            -
              -
            • TODO
            • +
            • Bring settings on the right toolbar to unified appearance
            -

            Presentation Editor

            -
              -
            • TODO
            • -
            -

            Forms

            +

            PDF Editor

              -
            • TODO
            • +
            • Support for the PDF form, annotations, comments and drawings
            diff --git a/common/changes/7.5.0/changes_ru.html b/common/changes/7.5.0/changes_ru.html index 858ab7bd3..0427dd820 100644 --- a/common/changes/7.5.0/changes_ru.html +++ b/common/changes/7.5.0/changes_ru.html @@ -4,44 +4,66 @@

            Новые функции

            Все редакторы

              -
            • TODO
            • +
            • Добавлена поддержка масштабов интерфейса >200% (225, 250, 275, 300, 350, 400, 450, 500)
            • +
            • В меню "Файл" > "Открыть недавние" добавлены файлы из списка "Последние файлы" приложения, по формату соответствующие редактору
            • +
            • Обновлены библиотеки VLC (для Windows)
            • +
            • Обновлена страница О программе и блок обновлений (для Windows)
            • +
            • Добавлен список изменений в deb/rpm пакеты (для Linux)
            • +
            • В "Дополнительные параметры" редакторов в список "Стандартное значение масштаба" добавлена опция "Последний использованный"
            • +
            • В кнопку вставки символов добавлено меню для быстрого доступа к наиболее популярным символам
            • +
            • Добавлена возможность вставки SVG изображений
            • +
            • Добавлена настройка, позволяющая скрыть тулбар для уравнений
            • +
            • Добавлены подсказки к изображениям в SmartArt
            • +
            • Добавлена возможность открытия файлов с паролем в embedded viewer
            • +
            • В правую панель добавлена возможность редактировать точки для границы автофигуры
            • +
            • Горячие клавиши для надстрочных/подстрочных знаков теперь только Ctrl + . / Ctrl + ,
            • +
            • Изменена работа перемещения по тексту с помощью горячих клавиш для macOS

            Редактор документов

              -
            • TODO
            • +
            • Добавлена возможность автоматической расстановки переносов
            • +
            • Изменена логика работы выделения, добавлена настройка "Использовать умное выделение абзацев"
            • +
            • Добавлена настройка "Удалять элемент управления содержимым при редактировании содержимого" в настройки элементов управления содержимым
            • +
            • Изменено поведение кнопок для рецензирования в тулбаре Принять/Отклонить
            • +
            • Отключено действие Уменьшить для Ctrl + Numpad – из-за конфликта со вставкой короткого тире
            • +
            • Изменена клавиша применения Зачеркнутый c Ctrl + 5 на Cmd + Shift + X для macOS
            • +
            • Изменено сочетание для вставки многоточия для macOS с Ctrl + Option + . на Option + ;

            Редактор таблиц

              -
            • TODO
            • +
            • Добавлена возможность показать формулы в ячейках
            • +
            • Добавлена возможность отображения связей между формулами и ячейками
            • +
            • Добавлена поддержка новой функции СОРТПО
            • +
            • В меню "Файл" > "Печать" для опции "Поля" добавлены пресеты и возможность скрыть/показать для "Печатать залоговки"
            • +
            • В настройки полей для сводных таблиц добавлена возможность задать формат числа
            • +
            • В контекстное меню сводных таблиц добавлен пункт Показать детали для отображения подробных сведений о поле значений
            • +
            • Возможность показать детали двойным кликом по ячейке сводной таблицы
            • +
            • Добавлено автозаполнение днями недели и месяцами
            • +
            • Добавлена возможность перемещения строк и столбцов таблицы с помощью drag-n-drop
            • +
            • В окно Автофильтра добавлены фильтры по датам и вывод данных с форматом Дата в форме дерева
            • +
            • Добавлена возможность вставлять изображения в колонтитулы
            • +
            • Добавлена возможность обновления внешних данных в редакторе таблиц для файла-источника, который находится в процессе редактирования
            • +
            • Последние использованные настройки "Кодировка" и "Разделитель" для CSV-файлов теперь хранятся локально на стороне клиента
            • +
            • На панель инструментов "Макет" добавлена возможность вставлять разрывы страниц
            • +
            • Добавлена возможность открытия источника для внешних ссылок
            • +
            • Добавлена горячая клавиша Alt + Down для вызова окна Автофильтра, если выделен заголовок столбца с фильтром

            Редактор презентаций

              -
            • TODO
            • +
            • Добавлен переход "Трансформация"
            • +
            • В "Дополнительные параметры" для объектов на слайде добавлена возможность присваивать имена
            • +
            • В "Настройки размера слайда" добавлена опция "Нумеровать слайды с"
            • +
            • Добавлена вкладка Заметки и раздаточные материалы в настройки колонтитулов
            • +
            • Добавлены подсказки к плейсхолдерам на слайдах в редакторе презентаций
            • +
            • Добавлена возможность добавлять SmartArt через плейсхолдер на слайде
            • +
            • Добавлена возможность перехода к нужному слайду через последовательное нажатие *номер слайда* + Enter в режиме демонстрации
            • +
            • Запуск слайдшоу в редакторе презентаций для macOS изменен на Cmd + Shift + Return

            Формы

              -
            • TODO
            • +
            • Названия настроек на правой панели инструментов приведены к общему виду
            - -

            Исправления

            - -

            Все редакторы

            -
              -
            • TODO
            • -
            -

            Редактор документов

            -
              -
            • TODO
            • -
            -

            Редактор таблиц

            -
              -
            • TODO
            • -
            -

            Редактор презентаций

            -
              -
            • TODO
            • -
            -

            Формы

            +

            Редактор PDF

              -
            • TODO
            • +
            • Заполнение форм, аннотации, комментарии и рисование