From 71b47b519d2c295c2068dc89a8d75690fc7dd7e5 Mon Sep 17 00:00:00 2001 From: Livio Oswald <125505497+Lcoding15@users.noreply.github.com> Date: Sun, 25 Oct 2026 15:11:08 +0100 Subject: [PATCH] M3: a Page tools menu in the Pages panel (#4415) (#4583) * M3: a Page tools menu in the Pages panel (#4415) The Pages panel's header gets a Page tools menu beside Close: insert a blank page or pages from a file after the selection, rotate either way, extract and delete. Each runs the registered command on the selected thumbnails (the current page when none is) and is greyed out where the document's security withholds page changes. A menu rather than a row of buttons, so the thumbnails stay where they were and it fits any width. * M3: tests drive the Page tools menu's file items too (#4415) CodeRabbit on #4583: the parity evidence covered rotate, delete, blank page and permissions through the menu, not Insert pages from a file or Extract. A test now inserts a picked file's pages and extracts the selection from the menu; the parity entry cites it. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01LymhVaGZCWwB9HNEbLzeMM * M3: the Page tools menu in every catalog (#4415) Page tools and five of its items, in each language (AI-assisted, not separately native-reviewed, like the other recent entries). Insert a blank page after the selection was in the catalogs already and keeps its translation there. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01LymhVaGZCWwB9HNEbLzeMM * chore(ui): keep thumbnail_size's doc line on thumbnail_size Co-Authored-By: Claude Opus 5.5 --------- Co-authored-by: Claude Co-authored-by: Brandon Thomas --- crates/ui-egui/src/i18n/ar.tsv | 8 ++ crates/ui-egui/src/i18n/bg.tsv | 8 ++ crates/ui-egui/src/i18n/ca.tsv | 8 ++ crates/ui-egui/src/i18n/ckb.tsv | 8 ++ crates/ui-egui/src/i18n/cs.tsv | 8 ++ crates/ui-egui/src/i18n/de.tsv | 8 ++ crates/ui-egui/src/i18n/el.tsv | 8 ++ crates/ui-egui/src/i18n/es.tsv | 8 ++ crates/ui-egui/src/i18n/fi.tsv | 8 ++ crates/ui-egui/src/i18n/fr.tsv | 8 ++ crates/ui-egui/src/i18n/hi.tsv | 8 ++ crates/ui-egui/src/i18n/hu.tsv | 8 ++ crates/ui-egui/src/i18n/id.tsv | 8 ++ crates/ui-egui/src/i18n/it.tsv | 8 ++ crates/ui-egui/src/i18n/ja.tsv | 8 ++ crates/ui-egui/src/i18n/kk.tsv | 8 ++ crates/ui-egui/src/i18n/ko.tsv | 8 ++ crates/ui-egui/src/i18n/lo.tsv | 8 ++ crates/ui-egui/src/i18n/lt.tsv | 8 ++ crates/ui-egui/src/i18n/nb.tsv | 8 ++ crates/ui-egui/src/i18n/pl.tsv | 8 ++ crates/ui-egui/src/i18n/pt-br.tsv | 8 ++ crates/ui-egui/src/i18n/ro.tsv | 8 ++ crates/ui-egui/src/i18n/ru.tsv | 8 ++ crates/ui-egui/src/i18n/sl.tsv | 8 ++ crates/ui-egui/src/i18n/sq.tsv | 8 ++ crates/ui-egui/src/i18n/te.tsv | 8 ++ crates/ui-egui/src/i18n/th.tsv | 8 ++ crates/ui-egui/src/i18n/tr.tsv | 8 ++ crates/ui-egui/src/i18n/uk.tsv | 8 ++ crates/ui-egui/src/i18n/vi.tsv | 8 ++ crates/ui-egui/src/i18n/zh-hans.tsv | 8 ++ crates/ui-egui/src/i18n/zh-hant.tsv | 8 ++ crates/ui-egui/src/panels.rs | 37 +++++++ crates/ui-egui/tests/it/view.rs | 98 +++++++++++++++++++ .../ui-egui/tests/snapshots/panel_pages.txt | 1 + parity/acrobat-features.toml | 4 +- 37 files changed, 402 insertions(+), 2 deletions(-) diff --git a/crates/ui-egui/src/i18n/ar.tsv b/crates/ui-egui/src/i18n/ar.tsv index 25ddac1d5..8b951d6f6 100644 --- a/crates/ui-egui/src/i18n/ar.tsv +++ b/crates/ui-egui/src/i18n/ar.tsv @@ -2816,3 +2816,11 @@ certificate Version الإصدار # Date picker: Today button (#4274) (AI-assisted, not separately native-reviewed) Today اليوم @plural {n} reply|{n} replies {n} رد|{n} رد|{n} ردّان|{n} ردود|{n} ردًا|{n} رد + +# Pages panel: the Page tools menu (#4415) (AI-assisted, not separately native-reviewed) + Page tools أدوات الصفحات + Insert pages from a file after the selection… إدراج صفحات من ملف بعد التحديد… + Rotate the selected pages counterclockwise تدوير الصفحات المحددة عكس اتجاه عقارب الساعة + Rotate the selected pages clockwise تدوير الصفحات المحددة باتجاه عقارب الساعة + Extract the selected pages… استخراج الصفحات المحددة… + Delete the selected pages حذف الصفحات المحددة diff --git a/crates/ui-egui/src/i18n/bg.tsv b/crates/ui-egui/src/i18n/bg.tsv index a8af8ed65..c3a692c49 100644 --- a/crates/ui-egui/src/i18n/bg.tsv +++ b/crates/ui-egui/src/i18n/bg.tsv @@ -2503,3 +2503,11 @@ animation effects Off Изключени # Date picker: Today button (#4274) (AI-assisted, not separately native-reviewed) Today Днес @plural {n} reply|{n} replies {n} отговор|{n} отговора + +# Pages panel: the Page tools menu (#4415) (AI-assisted, not separately native-reviewed) + Page tools Инструменти за страници + Insert pages from a file after the selection… Вмъкване на страници от файл след избраното… + Rotate the selected pages counterclockwise Завъртане на избраните страници обратно на часовниковата стрелка + Rotate the selected pages clockwise Завъртане на избраните страници по часовниковата стрелка + Extract the selected pages… Извличане на избраните страници… + Delete the selected pages Изтриване на избраните страници diff --git a/crates/ui-egui/src/i18n/ca.tsv b/crates/ui-egui/src/i18n/ca.tsv index 42b036d16..cc888dc97 100644 --- a/crates/ui-egui/src/i18n/ca.tsv +++ b/crates/ui-egui/src/i18n/ca.tsv @@ -2801,3 +2801,11 @@ theme Appearance Aspecte Delete attachment Elimina l'adjunt Delete attachment {key} Elimina l'adjunt {key} @plural {n} reply|{n} replies {n} resposta|{n} respostes + +# Pages panel: the Page tools menu (#4415) (AI-assisted, not separately native-reviewed) + Page tools Eines de pàgina + Insert pages from a file after the selection… Insereix pàgines d'un fitxer després de la selecció… + Rotate the selected pages counterclockwise Gira les pàgines seleccionades en sentit antihorari + Rotate the selected pages clockwise Gira les pàgines seleccionades en sentit horari + Extract the selected pages… Extreu les pàgines seleccionades… + Delete the selected pages Suprimeix les pàgines seleccionades diff --git a/crates/ui-egui/src/i18n/ckb.tsv b/crates/ui-egui/src/i18n/ckb.tsv index 845f43784..db8fc1dab 100644 --- a/crates/ui-egui/src/i18n/ckb.tsv +++ b/crates/ui-egui/src/i18n/ckb.tsv @@ -2732,3 +2732,11 @@ certificate Version وەشان # Date picker: Today button (#4274) (AI-assisted, not separately native-reviewed) Today ئەمڕۆ @plural {n} reply|{n} replies {n} وەڵام|{n} وەڵام + +# Pages panel: the Page tools menu (#4415) (AI-assisted, not separately native-reviewed) + Page tools ئامرازەکانی پەڕە + Insert pages from a file after the selection… پەڕەکان لە فایلێکەوە لە دوای هەڵبژاردەکە دابنێ… + Rotate the selected pages counterclockwise پەڕە هەڵبژێردراوەکان پێچەوانەی میلی کاتژمێر بسوڕێنە + Rotate the selected pages clockwise پەڕە هەڵبژێردراوەکان بە ئاڕاستەی میلی کاتژمێر بسوڕێنە + Extract the selected pages… پەڕە هەڵبژێردراوەکان دەربهێنە… + Delete the selected pages پەڕە هەڵبژێردراوەکان بسڕەوە diff --git a/crates/ui-egui/src/i18n/cs.tsv b/crates/ui-egui/src/i18n/cs.tsv index 3cadb98e3..28fb4e1d6 100644 --- a/crates/ui-egui/src/i18n/cs.tsv +++ b/crates/ui-egui/src/i18n/cs.tsv @@ -2847,3 +2847,11 @@ certificate Version Verze # Date picker: Today button (#4274) (AI-assisted, not separately native-reviewed) Today Dnes @plural {n} reply|{n} replies {n} odpověď|{n} odpovědi|{n} odpovědí + +# Pages panel: the Page tools menu (#4415) (AI-assisted, not separately native-reviewed) + Page tools Nástroje stránek + Insert pages from a file after the selection… Vložit stránky ze souboru za výběr… + Rotate the selected pages counterclockwise Otočit vybrané stránky proti směru hodinových ručiček + Rotate the selected pages clockwise Otočit vybrané stránky po směru hodinových ručiček + Extract the selected pages… Extrahovat vybrané stránky… + Delete the selected pages Odstranit vybrané stránky diff --git a/crates/ui-egui/src/i18n/de.tsv b/crates/ui-egui/src/i18n/de.tsv index 7b9dcc06f..bc202ef1a 100644 --- a/crates/ui-egui/src/i18n/de.tsv +++ b/crates/ui-egui/src/i18n/de.tsv @@ -2541,3 +2541,11 @@ animation effects Off Aus # Date picker: Today button (#4274) (AI-assisted, not separately native-reviewed) Today Heute @plural {n} reply|{n} replies {n} Antwort|{n} Antworten + +# Pages panel: the Page tools menu (#4415) (AI-assisted, not separately native-reviewed) + Page tools Seitenwerkzeuge + Insert pages from a file after the selection… Seiten aus einer Datei nach der Auswahl einfügen… + Rotate the selected pages counterclockwise Ausgewählte Seiten gegen den Uhrzeigersinn drehen + Rotate the selected pages clockwise Ausgewählte Seiten im Uhrzeigersinn drehen + Extract the selected pages… Ausgewählte Seiten extrahieren… + Delete the selected pages Ausgewählte Seiten löschen diff --git a/crates/ui-egui/src/i18n/el.tsv b/crates/ui-egui/src/i18n/el.tsv index dbe796917..ebe796965 100644 --- a/crates/ui-egui/src/i18n/el.tsv +++ b/crates/ui-egui/src/i18n/el.tsv @@ -2546,3 +2546,11 @@ animation effects Off Ανενεργά # Date picker: Today button (#4274) (AI-assisted, not separately native-reviewed) Today Σήμερα @plural {n} reply|{n} replies {n} απάντηση|{n} απαντήσεις + +# Pages panel: the Page tools menu (#4415) (AI-assisted, not separately native-reviewed) + Page tools Εργαλεία σελίδων + Insert pages from a file after the selection… Εισαγωγή σελίδων από αρχείο μετά την επιλογή… + Rotate the selected pages counterclockwise Περιστροφή των επιλεγμένων σελίδων αριστερόστροφα + Rotate the selected pages clockwise Περιστροφή των επιλεγμένων σελίδων δεξιόστροφα + Extract the selected pages… Εξαγωγή των επιλεγμένων σελίδων… + Delete the selected pages Διαγραφή των επιλεγμένων σελίδων diff --git a/crates/ui-egui/src/i18n/es.tsv b/crates/ui-egui/src/i18n/es.tsv index 951a3dd8c..c839eb330 100644 --- a/crates/ui-egui/src/i18n/es.tsv +++ b/crates/ui-egui/src/i18n/es.tsv @@ -2863,3 +2863,11 @@ theme Appearance Aspecto # Date picker: Today button (#4274) (AI-assisted, not separately native-reviewed) Today Hoy @plural {n} reply|{n} replies {n} respuesta|{n} respuestas + +# Pages panel: the Page tools menu (#4415) (AI-assisted, not separately native-reviewed) + Page tools Herramientas de página + Insert pages from a file after the selection… Insertar páginas de un archivo después de la selección… + Rotate the selected pages counterclockwise Girar las páginas seleccionadas en sentido antihorario + Rotate the selected pages clockwise Girar las páginas seleccionadas en sentido horario + Extract the selected pages… Extraer las páginas seleccionadas… + Delete the selected pages Eliminar las páginas seleccionadas diff --git a/crates/ui-egui/src/i18n/fi.tsv b/crates/ui-egui/src/i18n/fi.tsv index cd5a8040d..a876b8aab 100644 --- a/crates/ui-egui/src/i18n/fi.tsv +++ b/crates/ui-egui/src/i18n/fi.tsv @@ -2810,3 +2810,11 @@ theme Appearance Teema Delete attachment Poista liite Delete attachment {key} Poista liite {key} @plural {n} reply|{n} replies {n} vastaus|{n} vastausta + +# Pages panel: the Page tools menu (#4415) (AI-assisted, not separately native-reviewed) + Page tools Sivutyökalut + Insert pages from a file after the selection… Lisää sivuja tiedostosta valinnan jälkeen… + Rotate the selected pages counterclockwise Kierrä valittuja sivuja vastapäivään + Rotate the selected pages clockwise Kierrä valittuja sivuja myötäpäivään + Extract the selected pages… Pura valitut sivut… + Delete the selected pages Poista valitut sivut diff --git a/crates/ui-egui/src/i18n/fr.tsv b/crates/ui-egui/src/i18n/fr.tsv index ea6008039..bb935754b 100644 --- a/crates/ui-egui/src/i18n/fr.tsv +++ b/crates/ui-egui/src/i18n/fr.tsv @@ -2806,3 +2806,11 @@ certificate Version Version # Date picker: Today button (#4274) (AI-assisted, not separately native-reviewed) Today Aujourd'hui @plural {n} reply|{n} replies {n} réponse|{n} réponses + +# Pages panel: the Page tools menu (#4415) (AI-assisted, not separately native-reviewed) + Page tools Outils de page + Insert pages from a file after the selection… Insérer des pages d'un fichier après la sélection… + Rotate the selected pages counterclockwise Faire pivoter les pages sélectionnées dans le sens antihoraire + Rotate the selected pages clockwise Faire pivoter les pages sélectionnées dans le sens horaire + Extract the selected pages… Extraire les pages sélectionnées… + Delete the selected pages Supprimer les pages sélectionnées diff --git a/crates/ui-egui/src/i18n/hi.tsv b/crates/ui-egui/src/i18n/hi.tsv index 7f403caba..8b1de38dc 100644 --- a/crates/ui-egui/src/i18n/hi.tsv +++ b/crates/ui-egui/src/i18n/hi.tsv @@ -2777,3 +2777,11 @@ theme Appearance स्वरूप Delete attachment अनुलग्नक हटाएँ Delete attachment {key} अनुलग्नक {key} हटाएँ @plural {n} reply|{n} replies {n} जवाब + +# Pages panel: the Page tools menu (#4415) (AI-assisted, not separately native-reviewed) + Page tools पृष्ठ उपकरण + Insert pages from a file after the selection… चयन के बाद किसी फ़ाइल से पृष्ठ डालें… + Rotate the selected pages counterclockwise चयनित पृष्ठों को वामावर्त घुमाएँ + Rotate the selected pages clockwise चयनित पृष्ठों को दक्षिणावर्त घुमाएँ + Extract the selected pages… चयनित पृष्ठ निकालें… + Delete the selected pages चयनित पृष्ठ हटाएँ diff --git a/crates/ui-egui/src/i18n/hu.tsv b/crates/ui-egui/src/i18n/hu.tsv index 33ced9925..71bf7d36c 100644 --- a/crates/ui-egui/src/i18n/hu.tsv +++ b/crates/ui-egui/src/i18n/hu.tsv @@ -2539,3 +2539,11 @@ animation effects Off Ki # Date picker: Today button (#4274) (AI-assisted, not separately native-reviewed) Today Ma @plural {n} reply|{n} replies {n} válasz|{n} válasz + +# Pages panel: the Page tools menu (#4415) (AI-assisted, not separately native-reviewed) + Page tools Oldaleszközök + Insert pages from a file after the selection… Oldalak beszúrása fájlból a kijelölés után… + Rotate the selected pages counterclockwise A kijelölt oldalak forgatása az óramutató járásával ellentétesen + Rotate the selected pages clockwise A kijelölt oldalak forgatása az óramutató járásával megegyezően + Extract the selected pages… A kijelölt oldalak kibontása… + Delete the selected pages A kijelölt oldalak törlése diff --git a/crates/ui-egui/src/i18n/id.tsv b/crates/ui-egui/src/i18n/id.tsv index 422fac279..409a04cf4 100644 --- a/crates/ui-egui/src/i18n/id.tsv +++ b/crates/ui-egui/src/i18n/id.tsv @@ -2778,3 +2778,11 @@ theme Appearance Tampilan Delete attachment Hapus lampiran Delete attachment {key} Hapus lampiran {key} @plural {n} reply|{n} replies {n} balasan + +# Pages panel: the Page tools menu (#4415) (AI-assisted, not separately native-reviewed) + Page tools Alat halaman + Insert pages from a file after the selection… Sisipkan halaman dari file setelah pilihan… + Rotate the selected pages counterclockwise Putar halaman yang dipilih berlawanan arah jarum jam + Rotate the selected pages clockwise Putar halaman yang dipilih searah jarum jam + Extract the selected pages… Ekstrak halaman yang dipilih… + Delete the selected pages Hapus halaman yang dipilih diff --git a/crates/ui-egui/src/i18n/it.tsv b/crates/ui-egui/src/i18n/it.tsv index 60ecf2de3..11a9d4869 100644 --- a/crates/ui-egui/src/i18n/it.tsv +++ b/crates/ui-egui/src/i18n/it.tsv @@ -2772,3 +2772,11 @@ certificate SHA-256 digest Impronta SHA-256 # Date picker: Today button (#4274) (AI-assisted, not separately native-reviewed) Today Oggi @plural {n} reply|{n} replies {n} risposta|{n} risposte + +# Pages panel: the Page tools menu (#4415) (AI-assisted, not separately native-reviewed) + Page tools Strumenti pagina + Insert pages from a file after the selection… Inserisci pagine da un file dopo la selezione… + Rotate the selected pages counterclockwise Ruota le pagine selezionate in senso antiorario + Rotate the selected pages clockwise Ruota le pagine selezionate in senso orario + Extract the selected pages… Estrai le pagine selezionate… + Delete the selected pages Elimina le pagine selezionate diff --git a/crates/ui-egui/src/i18n/ja.tsv b/crates/ui-egui/src/i18n/ja.tsv index db338ebb1..1a8c287bc 100644 --- a/crates/ui-egui/src/i18n/ja.tsv +++ b/crates/ui-egui/src/i18n/ja.tsv @@ -2540,3 +2540,11 @@ animation effects Off オフ # Date picker: Today button (#4274) (AI-assisted, not separately native-reviewed) Today 今日 @plural {n} reply|{n} replies {n} 件の返信 + +# Pages panel: the Page tools menu (#4415) (AI-assisted, not separately native-reviewed) + Page tools ページツール + Insert pages from a file after the selection… 選択範囲の後にファイルからページを挿入… + Rotate the selected pages counterclockwise 選択したページを反時計回りに回転 + Rotate the selected pages clockwise 選択したページを時計回りに回転 + Extract the selected pages… 選択したページを抽出… + Delete the selected pages 選択したページを削除 diff --git a/crates/ui-egui/src/i18n/kk.tsv b/crates/ui-egui/src/i18n/kk.tsv index ea0d0d0fb..a9eada974 100644 --- a/crates/ui-egui/src/i18n/kk.tsv +++ b/crates/ui-egui/src/i18n/kk.tsv @@ -2538,3 +2538,11 @@ animation effects Off Өшірулі # Date picker: Today button (#4274) (AI-assisted, not separately native-reviewed) Today Бүгін @plural {n} reply|{n} replies {n} жауап|{n} жауап + +# Pages panel: the Page tools menu (#4415) (AI-assisted, not separately native-reviewed) + Page tools Бет құралдары + Insert pages from a file after the selection… Таңдаудан кейін файлдан беттер кірістіру… + Rotate the selected pages counterclockwise Таңдалған беттерді сағат тіліне қарсы бұру + Rotate the selected pages clockwise Таңдалған беттерді сағат тілімен бұру + Extract the selected pages… Таңдалған беттерді шығарып алу… + Delete the selected pages Таңдалған беттерді жою diff --git a/crates/ui-egui/src/i18n/ko.tsv b/crates/ui-egui/src/i18n/ko.tsv index a9ee5b487..98b68e85c 100644 --- a/crates/ui-egui/src/i18n/ko.tsv +++ b/crates/ui-egui/src/i18n/ko.tsv @@ -2777,3 +2777,11 @@ theme Appearance 모양 Delete attachment 첨부 파일 삭제 Delete attachment {key} 첨부 파일 {key} 삭제 @plural {n} reply|{n} replies 답글 {n}개 + +# Pages panel: the Page tools menu (#4415) (AI-assisted, not separately native-reviewed) + Page tools 페이지 도구 + Insert pages from a file after the selection… 선택 영역 뒤에 파일에서 페이지 삽입… + Rotate the selected pages counterclockwise 선택한 페이지를 시계 반대 방향으로 회전 + Rotate the selected pages clockwise 선택한 페이지를 시계 방향으로 회전 + Extract the selected pages… 선택한 페이지 추출… + Delete the selected pages 선택한 페이지 삭제 diff --git a/crates/ui-egui/src/i18n/lo.tsv b/crates/ui-egui/src/i18n/lo.tsv index 3b702756b..331b24501 100644 --- a/crates/ui-egui/src/i18n/lo.tsv +++ b/crates/ui-egui/src/i18n/lo.tsv @@ -2448,3 +2448,11 @@ animation effects Off ປິດ # Date picker: Today button (#4274) (AI-assisted, not separately native-reviewed) Today ມື້ນີ້ @plural {n} reply|{n} replies ການຕອບກັບ {n} ລາຍການ + +# Pages panel: the Page tools menu (#4415) (AI-assisted, not separately native-reviewed) + Page tools ເຄື່ອງມືໜ້າ + Insert pages from a file after the selection… ແຊກໜ້າຈາກໄຟລ໌ຫຼັງການເລືອກ… + Rotate the selected pages counterclockwise ໝູນໜ້າທີ່ເລືອກທວນເຂັມໂມງ + Rotate the selected pages clockwise ໝູນໜ້າທີ່ເລືອກຕາມເຂັມໂມງ + Extract the selected pages… ແຍກໜ້າທີ່ເລືອກອອກ… + Delete the selected pages ລຶບໜ້າທີ່ເລືອກ diff --git a/crates/ui-egui/src/i18n/lt.tsv b/crates/ui-egui/src/i18n/lt.tsv index 058bbe905..2c151b255 100644 --- a/crates/ui-egui/src/i18n/lt.tsv +++ b/crates/ui-egui/src/i18n/lt.tsv @@ -2801,3 +2801,11 @@ theme Appearance Išvaizda # Date picker: Today button (#4274) (AI-assisted, not separately native-reviewed) Today Šiandien @plural {n} reply|{n} replies {n} atsakymas|{n} atsakymai|{n} atsakymų + +# Pages panel: the Page tools menu (#4415) (AI-assisted, not separately native-reviewed) + Page tools Puslapių įrankiai + Insert pages from a file after the selection… Įterpti puslapius iš failo po pasirinkimo… + Rotate the selected pages counterclockwise Pasukti pasirinktus puslapius prieš laikrodžio rodyklę + Rotate the selected pages clockwise Pasukti pasirinktus puslapius pagal laikrodžio rodyklę + Extract the selected pages… Išskleisti pasirinktus puslapius… + Delete the selected pages Ištrinti pasirinktus puslapius diff --git a/crates/ui-egui/src/i18n/nb.tsv b/crates/ui-egui/src/i18n/nb.tsv index bc5fc98f5..75c926a0e 100644 --- a/crates/ui-egui/src/i18n/nb.tsv +++ b/crates/ui-egui/src/i18n/nb.tsv @@ -2716,3 +2716,11 @@ key Space Mellomrom # AI-assisted additions for restoring the last view (#1767) (2026-10-22); not reviewed by a native speaker. Restore the last view (page, zoom and page display) when a document is opened again Gjenopprett den siste visningen (side, zoom og sidevisning) når et dokument åpnes igjen @plural {n} reply|{n} replies {n} svar|{n} svar + +# Pages panel: the Page tools menu (#4415) (AI-assisted, not separately native-reviewed) + Page tools Sideverktøy + Insert pages from a file after the selection… Sett inn sider fra en fil etter utvalget… + Rotate the selected pages counterclockwise Roter de valgte sidene mot klokken + Rotate the selected pages clockwise Roter de valgte sidene med klokken + Extract the selected pages… Trekk ut de valgte sidene… + Delete the selected pages Slett de valgte sidene diff --git a/crates/ui-egui/src/i18n/pl.tsv b/crates/ui-egui/src/i18n/pl.tsv index 056ca7d40..7d7673949 100644 --- a/crates/ui-egui/src/i18n/pl.tsv +++ b/crates/ui-egui/src/i18n/pl.tsv @@ -2636,3 +2636,11 @@ animation effects Off Wyłączone # Date picker: Today button (#4274) (AI-assisted, not separately native-reviewed) Today Dzisiaj @plural {n} reply|{n} replies {n} odpowiedź|{n} odpowiedzi|{n} odpowiedzi + +# Pages panel: the Page tools menu (#4415) (AI-assisted, not separately native-reviewed) + Page tools Narzędzia stron + Insert pages from a file after the selection… Wstaw strony z pliku po zaznaczeniu… + Rotate the selected pages counterclockwise Obróć zaznaczone strony w lewo + Rotate the selected pages clockwise Obróć zaznaczone strony w prawo + Extract the selected pages… Wyodrębnij zaznaczone strony… + Delete the selected pages Usuń zaznaczone strony diff --git a/crates/ui-egui/src/i18n/pt-br.tsv b/crates/ui-egui/src/i18n/pt-br.tsv index 1434c7c6e..371c8cc14 100644 --- a/crates/ui-egui/src/i18n/pt-br.tsv +++ b/crates/ui-egui/src/i18n/pt-br.tsv @@ -2825,3 +2825,11 @@ theme Appearance Aparência # Date picker: Today button (#4274) (AI-assisted, not separately native-reviewed) Today Hoje @plural {n} reply|{n} replies {n} resposta|{n} respostas + +# Pages panel: the Page tools menu (#4415) (AI-assisted, not separately native-reviewed) + Page tools Ferramentas de página + Insert pages from a file after the selection… Inserir páginas de um arquivo após a seleção… + Rotate the selected pages counterclockwise Girar as páginas selecionadas no sentido anti-horário + Rotate the selected pages clockwise Girar as páginas selecionadas no sentido horário + Extract the selected pages… Extrair as páginas selecionadas… + Delete the selected pages Excluir as páginas selecionadas diff --git a/crates/ui-egui/src/i18n/ro.tsv b/crates/ui-egui/src/i18n/ro.tsv index 7c739932e..09b313e73 100644 --- a/crates/ui-egui/src/i18n/ro.tsv +++ b/crates/ui-egui/src/i18n/ro.tsv @@ -2801,3 +2801,11 @@ theme Appearance Aspect Delete attachment Ștergere atașament Delete attachment {key} Ștergere atașament {key} @plural {n} reply|{n} replies {n} răspuns|{n} răspunsuri|{n} de răspunsuri + +# Pages panel: the Page tools menu (#4415) (AI-assisted, not separately native-reviewed) + Page tools Instrumente pentru pagini + Insert pages from a file after the selection… Inserează pagini dintr-un fișier după selecție… + Rotate the selected pages counterclockwise Rotește paginile selectate în sens antiorar + Rotate the selected pages clockwise Rotește paginile selectate în sens orar + Extract the selected pages… Extrage paginile selectate… + Delete the selected pages Șterge paginile selectate diff --git a/crates/ui-egui/src/i18n/ru.tsv b/crates/ui-egui/src/i18n/ru.tsv index bea98cd79..0523fe70c 100644 --- a/crates/ui-egui/src/i18n/ru.tsv +++ b/crates/ui-egui/src/i18n/ru.tsv @@ -2453,3 +2453,11 @@ animation effects Off Выкл # Date picker: Today button (#4274) (AI-assisted, not separately native-reviewed) Today Сегодня @plural {n} reply|{n} replies {n} ответ|{n} ответа|{n} ответов + +# Pages panel: the Page tools menu (#4415) (AI-assisted, not separately native-reviewed) + Page tools Инструменты страниц + Insert pages from a file after the selection… Вставить страницы из файла после выделения… + Rotate the selected pages counterclockwise Повернуть выбранные страницы против часовой стрелки + Rotate the selected pages clockwise Повернуть выбранные страницы по часовой стрелке + Extract the selected pages… Извлечь выбранные страницы… + Delete the selected pages Удалить выбранные страницы diff --git a/crates/ui-egui/src/i18n/sl.tsv b/crates/ui-egui/src/i18n/sl.tsv index ccbb42d57..3a7ea48c2 100644 --- a/crates/ui-egui/src/i18n/sl.tsv +++ b/crates/ui-egui/src/i18n/sl.tsv @@ -2545,3 +2545,11 @@ animation effects Off Izklopljeni # Date picker: Today button (#4274) (AI-assisted, not separately native-reviewed) Today Danes @plural {n} reply|{n} replies {n} odgovor|{n} odgovora|{n} odgovori|{n} odgovorov + +# Pages panel: the Page tools menu (#4415) (AI-assisted, not separately native-reviewed) + Page tools Orodja za strani + Insert pages from a file after the selection… Vstavi strani iz datoteke za izborom… + Rotate the selected pages counterclockwise Zavrti izbrane strani v nasprotni smeri urnega kazalca + Rotate the selected pages clockwise Zavrti izbrane strani v smeri urnega kazalca + Extract the selected pages… Izvleci izbrane strani… + Delete the selected pages Izbriši izbrane strani diff --git a/crates/ui-egui/src/i18n/sq.tsv b/crates/ui-egui/src/i18n/sq.tsv index a720a5333..70a6fbad7 100644 --- a/crates/ui-egui/src/i18n/sq.tsv +++ b/crates/ui-egui/src/i18n/sq.tsv @@ -2527,3 +2527,11 @@ animation effects Off Joaktiv Delete attachment Fshi bashkëngjitjen Delete attachment {key} Fshi bashkëngjitjen {key} @plural {n} reply|{n} replies {n} përgjigje|{n} përgjigje + +# Pages panel: the Page tools menu (#4415) (AI-assisted, not separately native-reviewed) + Page tools Mjetet e faqes + Insert pages from a file after the selection… Fut faqe nga një skedar pas përzgjedhjes… + Rotate the selected pages counterclockwise Rrotullo faqet e përzgjedhura në drejtim të kundërt me orën + Rotate the selected pages clockwise Rrotullo faqet e përzgjedhura në drejtim të orës + Extract the selected pages… Nxirr faqet e përzgjedhura… + Delete the selected pages Fshi faqet e përzgjedhura diff --git a/crates/ui-egui/src/i18n/te.tsv b/crates/ui-egui/src/i18n/te.tsv index 317d47f9b..2c8808aa4 100644 --- a/crates/ui-egui/src/i18n/te.tsv +++ b/crates/ui-egui/src/i18n/te.tsv @@ -2449,3 +2449,11 @@ animation effects Off ఆఫ్ # Date picker: Today button (#4274) (AI-assisted, not separately native-reviewed) Today ఈరోజు @plural {n} reply|{n} replies {n} ప్రత్యుత్తరం|{n} ప్రత్యుత్తరాలు + +# Pages panel: the Page tools menu (#4415) (AI-assisted, not separately native-reviewed) + Page tools పేజీ సాధనాలు + Insert pages from a file after the selection… ఎంపిక తర్వాత ఫైల్ నుండి పేజీలను చొప్పించు… + Rotate the selected pages counterclockwise ఎంచుకున్న పేజీలను అపసవ్య దిశలో తిప్పు + Rotate the selected pages clockwise ఎంచుకున్న పేజీలను సవ్య దిశలో తిప్పు + Extract the selected pages… ఎంచుకున్న పేజీలను సంగ్రహించు… + Delete the selected pages ఎంచుకున్న పేజీలను తొలగించు diff --git a/crates/ui-egui/src/i18n/th.tsv b/crates/ui-egui/src/i18n/th.tsv index 92bb15f1a..597a0dbb9 100644 --- a/crates/ui-egui/src/i18n/th.tsv +++ b/crates/ui-egui/src/i18n/th.tsv @@ -2703,3 +2703,11 @@ theme Appearance ลักษณะที่ปรากฏ # AI-assisted additions for restoring the last view (#1767) (2026-10-22); not reviewed by a native speaker. Restore the last view (page, zoom and page display) when a document is opened again คืนค่ามุมมองล่าสุด (หน้า การซูม และการแสดงหน้า) เมื่อเปิดเอกสารอีกครั้ง @plural {n} reply|{n} replies การตอบกลับ {n} รายการ + +# Pages panel: the Page tools menu (#4415) (AI-assisted, not separately native-reviewed) + Page tools เครื่องมือหน้า + Insert pages from a file after the selection… แทรกหน้าจากไฟล์หลังส่วนที่เลือก… + Rotate the selected pages counterclockwise หมุนหน้าที่เลือกทวนเข็มนาฬิกา + Rotate the selected pages clockwise หมุนหน้าที่เลือกตามเข็มนาฬิกา + Extract the selected pages… แยกหน้าที่เลือกออก… + Delete the selected pages ลบหน้าที่เลือก diff --git a/crates/ui-egui/src/i18n/tr.tsv b/crates/ui-egui/src/i18n/tr.tsv index bcdfe9a90..0d07fcc76 100644 --- a/crates/ui-egui/src/i18n/tr.tsv +++ b/crates/ui-egui/src/i18n/tr.tsv @@ -2536,3 +2536,11 @@ animation effects Off Kapalı # Date picker: Today button (#4274) (AI-assisted, not separately native-reviewed) Today Bugün @plural {n} reply|{n} replies {n} yanıt + +# Pages panel: the Page tools menu (#4415) (AI-assisted, not separately native-reviewed) + Page tools Sayfa araçları + Insert pages from a file after the selection… Seçimin ardından dosyadan sayfa ekle… + Rotate the selected pages counterclockwise Seçili sayfaları saat yönünün tersine döndür + Rotate the selected pages clockwise Seçili sayfaları saat yönünde döndür + Extract the selected pages… Seçili sayfaları ayıkla… + Delete the selected pages Seçili sayfaları sil diff --git a/crates/ui-egui/src/i18n/uk.tsv b/crates/ui-egui/src/i18n/uk.tsv index 599b4b63a..7531c9a75 100644 --- a/crates/ui-egui/src/i18n/uk.tsv +++ b/crates/ui-egui/src/i18n/uk.tsv @@ -2562,3 +2562,11 @@ animation effects Off Вимкнено # Date picker: Today button (#4274) (AI-assisted, not separately native-reviewed) Today Сьогодні @plural {n} reply|{n} replies {n} відповідь|{n} відповіді|{n} відповідей + +# Pages panel: the Page tools menu (#4415) (AI-assisted, not separately native-reviewed) + Page tools Інструменти сторінок + Insert pages from a file after the selection… Вставити сторінки з файлу після виділення… + Rotate the selected pages counterclockwise Повернути вибрані сторінки проти годинникової стрілки + Rotate the selected pages clockwise Повернути вибрані сторінки за годинниковою стрілкою + Extract the selected pages… Витягнути вибрані сторінки… + Delete the selected pages Видалити вибрані сторінки diff --git a/crates/ui-egui/src/i18n/vi.tsv b/crates/ui-egui/src/i18n/vi.tsv index 048f78f62..d9c375a6e 100644 --- a/crates/ui-egui/src/i18n/vi.tsv +++ b/crates/ui-egui/src/i18n/vi.tsv @@ -2807,3 +2807,11 @@ key Space Space # AI-assisted additions for restoring the last view (#1767) (2026-10-16); not reviewed by a native speaker. Restore the last view (page, zoom and page display) when a document is opened again Khôi phục chế độ xem gần nhất (trang, thu phóng và hiển thị trang) khi mở lại tài liệu @plural {n} reply|{n} replies {n} câu trả lời + +# Pages panel: the Page tools menu (#4415) (AI-assisted, not separately native-reviewed) + Page tools Công cụ trang + Insert pages from a file after the selection… Chèn trang từ tệp sau vùng chọn… + Rotate the selected pages counterclockwise Xoay các trang đã chọn ngược chiều kim đồng hồ + Rotate the selected pages clockwise Xoay các trang đã chọn theo chiều kim đồng hồ + Extract the selected pages… Trích xuất các trang đã chọn… + Delete the selected pages Xóa các trang đã chọn diff --git a/crates/ui-egui/src/i18n/zh-hans.tsv b/crates/ui-egui/src/i18n/zh-hans.tsv index 7ea3ca941..e2b1f7897 100644 --- a/crates/ui-egui/src/i18n/zh-hans.tsv +++ b/crates/ui-egui/src/i18n/zh-hans.tsv @@ -2504,3 +2504,11 @@ animation effects Off 关 # Date picker: Today button (#4274) (AI-assisted, not separately native-reviewed) Today 今天 @plural {n} reply|{n} replies {n} 条回复 + +# Pages panel: the Page tools menu (#4415) (AI-assisted, not separately native-reviewed) + Page tools 页面工具 + Insert pages from a file after the selection… 在所选内容后插入文件中的页面… + Rotate the selected pages counterclockwise 逆时针旋转所选页面 + Rotate the selected pages clockwise 顺时针旋转所选页面 + Extract the selected pages… 提取所选页面… + Delete the selected pages 删除所选页面 diff --git a/crates/ui-egui/src/i18n/zh-hant.tsv b/crates/ui-egui/src/i18n/zh-hant.tsv index b34cb787c..ecb5ff623 100644 --- a/crates/ui-egui/src/i18n/zh-hant.tsv +++ b/crates/ui-egui/src/i18n/zh-hant.tsv @@ -2490,3 +2490,11 @@ animation effects Off 關 # Date picker: Today button (#4274) (AI-assisted, not separately native-reviewed) Today 今天 @plural {n} reply|{n} replies {n} 則回覆 + +# Pages panel: the Page tools menu (#4415) (AI-assisted, not separately native-reviewed) + Page tools 頁面工具 + Insert pages from a file after the selection… 在所選內容後插入檔案中的頁面… + Rotate the selected pages counterclockwise 逆時針旋轉所選頁面 + Rotate the selected pages clockwise 順時針旋轉所選頁面 + Extract the selected pages… 擷取所選頁面… + Delete the selected pages 刪除所選頁面 diff --git a/crates/ui-egui/src/panels.rs b/crates/ui-egui/src/panels.rs index f043a1e99..535ba2e08 100644 --- a/crates/ui-egui/src/panels.rs +++ b/crates/ui-egui/src/panels.rs @@ -730,6 +730,11 @@ pub fn right_panel(app: &mut PdfCraftApp, ui: &mut egui::Ui) { if icons::button(ui, "x", 26.0, false, tl!("Close")).clicked() { close = true; } + if panel == RightPanel::Pages + && let Some(c) = page_tools(ui, !modal && view.panel_drag.is_none() && bm_editable) + { + panel_command = Some(c); + } // Right to left: close, "…", filter, search (Acrobat's order left to right). if panel == RightPanel::Comments { panel_command = crate::comments_panel::header_controls(ui, info, view, doc.comments_hidden()); @@ -1335,6 +1340,38 @@ fn outline_item(ui: &mut egui::Ui, t: &Tokens, info: &DocInfo, item: &OutlineIte } } +/// Page tools in the Pages panel's header (#4415): a menu, as Bookmark options is in its panel, +/// to insert a blank page or pages from a file, rotate, extract and delete. Each runs its +/// command on the selected pages (the current page when none is), so it does what Pages ▸ … +/// does; the items say so, apart from the thumbnails' own menu. `enabled` is false while the +/// document may not be assembled or a dialog is open. Returns the command a click asks for. +fn page_tools(ui: &mut egui::Ui, enabled: bool) -> Option<&'static str> { + let tools: [(&'static str, &str); 6] = [ + ("page.insert_blank", tl!("Insert a blank page after the selection")), + ("page.insert", tl!("Insert pages from a file after the selection…")), + ("page.rotate_ccw", tl!("Rotate the selected pages counterclockwise")), + ("page.rotate", tl!("Rotate the selected pages clockwise")), + ("page.extract", tl!("Extract the selected pages…")), + ("page.delete", tl!("Delete the selected pages")), + ]; + let mut picked = None; + ui.add_enabled_ui(enabled, |ui| { + let more = icons::button(ui, "ellipsis", 26.0, false, tl!("Page tools")); + egui::Popup::menu(&more).show(|ui| { + ui.set_min_width(260.0); + for (id, label) in tools { + let Some(spec) = pdfcraft_engine::commands::command(id) else { continue }; + let item = egui::Button::image_and_text(icons::image(spec.icon, 16.0, ui.visuals().text_color()), label); + if ui.add(item).clicked() { + picked = Some(id); + ui.close(); + } + } + }); + }); + picked +} + /// Size controls stay above the scroll area, so they remain reachable on long documents. fn thumbnail_size(ui: &mut egui::Ui, t: &Tokens, view: &mut crate::DocView, enabled: bool) { let before = view.thumbnail_zoom(); diff --git a/crates/ui-egui/tests/it/view.rs b/crates/ui-egui/tests/it/view.rs index 1e87d9a16..01e733e4d 100644 --- a/crates/ui-egui/tests/it/view.rs +++ b/crates/ui-egui/tests/it/view.rs @@ -2157,3 +2157,101 @@ fn full_screen_clicks_turn_pages_whatever_tool_was_on() { assert!(!h.state().full_screen); assert_eq!(h.state().quick_tool, QuickTool::Hand, "the tool from before is back"); } + +/// #4415: the Pages panel's Page tools menu. Each tool acts on the selected pages (the current +/// page when none is): rotate, delete and insert a blank page here, as Pages ▸ … does. +#[test] +fn the_pages_panel_tools_act_on_the_selected_pages() { + let mut h = harness(&[("panel", "pages")]); + let id = h.state().views[0].id; + let rotations = |h: &Harness<'static, PdfCraftApp>| h.state().session.get(id).unwrap().info.pages.iter().map(|p| p.rotation).collect::>(); + // The panel's Page tools menu, on the right-hand side of the window. + let tool = |h: &mut Harness<'static, PdfCraftApp>, label: &str| { + h.get_all_by_label("Page tools").find(|n| n.rect().left() > 1000.0).expect("Page tools in the Pages panel").click(); + h.run_steps(2); + h.get_by_label(label).click(); + h.run_steps(3); + }; + h.state_mut().views[0].select_pages(&[1, 2]); + h.run_steps(2); + tool(&mut h, "Rotate the selected pages clockwise"); + assert_eq!(rotations(&h), [0, 90, 90], "pages 2 and 3, the selection"); + tool(&mut h, "Rotate the selected pages counterclockwise"); + assert_eq!(rotations(&h), [0, 0, 0]); + h.state_mut().views[0].select_pages(&[0]); + h.run_steps(2); + tool(&mut h, "Delete the selected pages"); + assert_eq!(h.state().session.get(id).unwrap().info.pages.len(), 2, "page 1 deleted"); + tool(&mut h, "Insert a blank page after the selection"); + assert_eq!(h.state().session.get(id).unwrap().info.pages.len(), 3); + h.state_mut().execute("edit.undo"); + h.run_steps(2); + assert_eq!(h.state().session.get(id).unwrap().info.pages.len(), 2, "each is one undo step"); +} + +/// CodeRabbit on #4583: the Page tools menu's file items work from the menu too. Insert pages +/// from a file puts the picked file's pages after the selection; Extract the selected pages +/// opens Extract for the selection and writes it. +#[test] +fn the_pages_panel_tools_insert_from_a_file_and_extract() { + let dir = std::env::temp_dir().join(format!("pdfcraft-page-tools-{}", std::process::id())); + let _ = std::fs::remove_dir_all(&dir); + std::fs::create_dir_all(&dir).unwrap(); + let more = dir.join("more.pdf"); + std::fs::write(&more, PAGES).unwrap(); + let mut h = harness(&[("panel", "pages")]); + let id = h.state().views[0].id; + let count = |h: &Harness<'static, PdfCraftApp>| h.state().session.get(id).unwrap().info.pages.len(); + let tool = |h: &mut Harness<'static, PdfCraftApp>, label: &str| { + h.get_all_by_label("Page tools").find(|n| n.rect().left() > 1000.0).expect("Page tools in the Pages panel").click(); + h.run_steps(2); + h.get_by_label(label).click(); + h.run_steps(3); + }; + assert_eq!(count(&h), 3); + h.state_mut().views[0].select_pages(&[0]); + h.state_mut().pick_override = Some(vec![more.to_string_lossy().into_owned()]); + tool(&mut h, "Insert pages from a file after the selection…"); + h.run_steps(3); + assert_eq!(count(&h), 6, "the picked file's three pages are inserted"); + + let out = dir.join("out"); + std::fs::create_dir_all(&out).unwrap(); + h.state_mut().export_dir_override = Some(out.to_string_lossy().into_owned()); + h.state_mut().views[0].select_pages(&[1, 2]); + tool(&mut h, "Extract the selected pages…"); + assert_eq!(h.state().dialog, Some(pdfcraft_ui_egui::Dialog::Extract), "Extract opens for the selection"); + h.state_mut().extract_draft = pdfcraft_ui_egui::ExtractDraft { separate: true, ..Default::default() }; + h.get_all_by_label("Extract").last().unwrap().click(); + h.run_steps(3); + assert_eq!(std::fs::read_dir(&out).unwrap().count(), 2, "the two selected pages, each a file"); + let _ = std::fs::remove_dir_all(&dir); +} + +/// The Pages panel's Page tools are greyed out on a document whose security doesn't allow +/// page changes: the menu doesn't open, and nothing changes. +#[test] +fn the_pages_panel_tools_are_off_without_page_editing_permission() { + use egui_kittest::kittest::NodeT; + let mut h = harness(&[("panel", "pages")]); + { + let app = h.state_mut(); + app.apply_edit(pdfcraft_engine::Edit::Protect(pdfcraft_engine::Protection { + permissions_password: Some("owner".into()), + changes: pdfcraft_engine::Changes::None, + ..Default::default() + })); + let bytes = app.session.save_bytes(app.views[0].id).unwrap(); + app.open_bytes("restricted.pdf", None, bytes.as_ref().clone()).unwrap(); + } + h.run_steps(6); + let i = h.state().active.unwrap(); + let id = h.state().views[i].id; + assert!(!h.state().session.get(id).unwrap().allows_assembly()); + let tools = h.get_all_by_label("Page tools").find(|n| n.rect().left() > 1000.0).expect("Page tools"); + assert!(tools.accesskit_node().is_disabled(), "Page tools is greyed out"); + tools.click(); + h.run_steps(3); + assert!(h.query_by_label("Delete the selected pages").is_none(), "its menu doesn't open"); + assert_eq!(h.state().session.get(id).unwrap().info.pages.len(), 3); +} diff --git a/crates/ui-egui/tests/snapshots/panel_pages.txt b/crates/ui-egui/tests/snapshots/panel_pages.txt index 4e746f100..7f432057d 100644 --- a/crates/ui-egui/tests/snapshots/panel_pages.txt +++ b/crates/ui-egui/tests/snapshots/panel_pages.txt @@ -1,6 +1,7 @@ Label = "Pages" Label = "2" Button "Close" [off] +Button "Page tools" [off] Label = "Thumbnail size" Label = "100%" Button "Smaller thumbnails" [off] diff --git a/parity/acrobat-features.toml b/parity/acrobat-features.toml index de678e6fa..914411254 100644 --- a/parity/acrobat-features.toml +++ b/parity/acrobat-features.toml @@ -1274,8 +1274,8 @@ milestone = "M3" status = "shipped" commands = [] tools = [] -evidence = ["crates/ui-egui/tests/it/editing.rs::resized_pages_panel_thumbnails_reorder_multiple_pages_and_undo", "crates/ui-egui/tests/it/viewer.rs::pages_panel_thumbnail_zoom_is_bounded_independent_and_survives_reload", "crates/ui-egui/tests/it/viewer.rs::pages_panel_thumbnail_size_controls_show_more_pages_and_keep_the_selection", "crates/ui-egui/tests/it/viewer.rs::pages_panel_thumbnail_zoom_keeps_a_far_current_page_visible", "crates/ui-egui/tests/it/control.rs::thumbnail_size_is_settable_and_inspectable_through_the_control_channel", "crates/ui-egui/tests/it/ui.rs::theme_and_view_options_apply", "crates/ui-egui/tests/it/viewer.rs::going_to_a_far_page_scrolls_its_thumbnail_into_view", "crates/ui-egui/tests/it/viewer.rs::going_to_a_page_in_view_leaves_the_pages_panel_still", "crates/ui-egui/tests/it/viewer.rs::a_page_change_while_thumbnails_are_dragged_does_not_scroll_the_pages_panel"] -notes = "Thumbnail size: 50–150% with a slider and buttons above the scroll area (#3808), independent of document and Organize zoom. Accessible through ui.set thumbnail-zoom and ui.state active.thumbnail_zoom; retained on file reload, not persisted between sessions. The panel follows the current page (#2781): a page whose thumbnail is out of sight scrolls it into view, as little as it takes; a thumbnail already in view, or clicked, leaves the panel still, and a page change while the user scrolls the panel or drags thumbnails does not move it." +evidence = ["crates/ui-egui/tests/it/editing.rs::resized_pages_panel_thumbnails_reorder_multiple_pages_and_undo", "crates/ui-egui/tests/it/viewer.rs::pages_panel_thumbnail_zoom_is_bounded_independent_and_survives_reload", "crates/ui-egui/tests/it/viewer.rs::pages_panel_thumbnail_size_controls_show_more_pages_and_keep_the_selection", "crates/ui-egui/tests/it/viewer.rs::pages_panel_thumbnail_zoom_keeps_a_far_current_page_visible", "crates/ui-egui/tests/it/control.rs::thumbnail_size_is_settable_and_inspectable_through_the_control_channel", "crates/ui-egui/tests/it/ui.rs::theme_and_view_options_apply", "crates/ui-egui/tests/it/viewer.rs::going_to_a_far_page_scrolls_its_thumbnail_into_view", "crates/ui-egui/tests/it/viewer.rs::going_to_a_page_in_view_leaves_the_pages_panel_still", "crates/ui-egui/tests/it/viewer.rs::a_page_change_while_thumbnails_are_dragged_does_not_scroll_the_pages_panel", "crates/ui-egui/tests/it/view.rs::the_pages_panel_tools_act_on_the_selected_pages", "crates/ui-egui/tests/it/view.rs::the_pages_panel_tools_insert_from_a_file_and_extract", "crates/ui-egui/tests/it/view.rs::the_pages_panel_tools_are_off_without_page_editing_permission"] +notes = "Page tools menu in the panel's header (#4415): insert a blank page or pages from a file after the selection, rotate either way, extract and delete, each on the selected pages (the current one when none is), greyed out where the document's security withholds page changes. Thumbnail size: 50–150% with a slider and buttons above the scroll area (#3808), independent of document and Organize zoom. Accessible through ui.set thumbnail-zoom and ui.state active.thumbnail_zoom; retained on file reload, not persisted between sessions. The panel follows the current page (#2781): a page whose thumbnail is out of sight scrolls it into view, as little as it takes; a thumbnail already in view, or clicked, leaves the panel still, and a page change while the user scrolls the panel or drags thumbnails does not move it." [[feature]] id = "view.thumbnail-context-ops"