diff --git a/frontend/resources/locales.json b/frontend/resources/locales.json index 7cdd3bdaa..333811db2 100644 --- a/frontend/resources/locales.json +++ b/frontend/resources/locales.json @@ -2422,6 +2422,14 @@ "es" : "Ocultar reglas" } }, + "workspace.header.menu.select-all" : { + "translations" : { + "en" : "Select all", + "fr" : "", + "ru" : "", + "es" : "Seleccionar todo" + } + }, "workspace.header.menu.show-assets" : { "used-in" : [ "src/app/main/ui/workspace/header.cljs:210" ], "translations" : { diff --git a/frontend/src/app/main/data/workspace.cljs b/frontend/src/app/main/data/workspace.cljs index 3cc6bb702..ecc17a715 100644 --- a/frontend/src/app/main/data/workspace.cljs +++ b/frontend/src/app/main/data/workspace.cljs @@ -1596,6 +1596,7 @@ ;; Selection (def select-shape dws/select-shape) +(def select-all dws/select-all) (def deselect-all dws/deselect-all) (def select-shapes dwc/select-shapes) (def duplicate-selected dws/duplicate-selected) @@ -1630,7 +1631,7 @@ {"ctrl+i" #(st/emit! (toggle-layout-flags :assets)) "ctrl+l" #(st/emit! (toggle-layout-flags :sitemap :layers)) "ctrl+shift+r" #(st/emit! (toggle-layout-flags :rules)) - "ctrl+a" #(st/emit! (toggle-layout-flags :dynamic-alignment)) + "ctrl+a" #(st/emit! (select-all)) "ctrl+p" #(st/emit! (toggle-layout-flags :colorpalette)) "ctrl+'" #(st/emit! (toggle-layout-flags :display-grid)) "ctrl+shift+'" #(st/emit! (toggle-layout-flags :snap-grid)) diff --git a/frontend/src/app/main/data/workspace/selection.cljs b/frontend/src/app/main/data/workspace/selection.cljs index 2d33d9e54..d01e9c8b4 100644 --- a/frontend/src/app/main/data/workspace/selection.cljs +++ b/frontend/src/app/main/data/workspace/selection.cljs @@ -118,6 +118,23 @@ objects (dwc/lookup-page-objects state page-id)] (rx/of (dwc/expand-all-parents ids objects)))))) +(defn select-all + [] + (ptk/reify ::select-all + ptk/WatchEvent + (watch [_ state stream] + (let [page-id (:current-page-id state) + objects (dwc/lookup-page-objects state page-id) + is-not-blocked (fn [shape-id] (not (get-in state [:workspace-data + :pages-index page-id + :objects shape-id + :blocked] false)))] + (rx/of (->> (cph/select-toplevel-shapes objects) + (map :id) + (filter is-not-blocked) + (into lks/empty-linked-set) + (select-shapes))))))) + (defn deselect-all "Clear all possible state of drawing, edition or any similar action taken by the user. diff --git a/frontend/src/app/main/ui/workspace/header.cljs b/frontend/src/app/main/ui/workspace/header.cljs index 29cbdf18b..d79f42ce7 100644 --- a/frontend/src/app/main/ui/workspace/header.cljs +++ b/frontend/src/app/main/ui/workspace/header.cljs @@ -208,12 +208,15 @@ (tr "workspace.header.menu.show-assets"))] [:span.shortcut "Ctrl+i"]] + [:li {:on-click #(st/emit! (dw/select-all))} + [:span (tr "workspace.header.menu.select-all")] + [:span.shortcut "Ctrl+a"]] + [:li {:on-click #(st/emit! (dw/toggle-layout-flags :dynamic-alignment))} [:span (if (contains? layout :dynamic-alignment) (tr "workspace.header.menu.disable-dynamic-alignment") - (tr "workspace.header.menu.enable-dynamic-alignment"))] - [:span.shortcut "Ctrl+a"]] + (tr "workspace.header.menu.enable-dynamic-alignment"))]] (if (:is-shared file) [:li {:on-click on-remove-shared}