From 2c8d6625b64fe05c840cc14667f14c326bc38dc0 Mon Sep 17 00:00:00 2001 From: Andreas Stefl Date: Sat, 10 Oct 2026 14:18:16 +0200 Subject: [PATCH] Take core 7.5.2, and edit rows, columns and CSV files Core 7.5 adds structural edits of a sheet, editing of a CSV file, a recalculation on save, and the language of a document. - The sheet tools get a "Rows and columns" tool. It inserts rows above or below, inserts columns left or right, or deletes the rows or columns of the selection. Lite offers Pro for it. - CoreLoader gets the document of a CSV file from CsvFile, so a CSV opens as an editable sheet and saves as a CSV. - LoadedDocument keeps Document.locale(). Read aloud uses that language if a voice for it is installed. - The page now refuses to edit a cut sheet with sheetCut. The app shows a message for it. - A save now computes the formulas that an edit made out of date, so the message about stale cells says so. The changed strings lose their old translations, and translate-app.py writes them again. Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_01436ppTFQHPk9S2wFYeFCWF --- CHANGELOG.md | 8 ++ .../droid/background/DocumentParcelTest.kt | 4 + .../app/opendocument/droid/test/CoreTest.kt | 31 ++++++ .../droid/test/MainActivityTests.kt | 50 ++++++++++ .../droid/background/CoreLoader.kt | 29 ++++-- .../droid/background/EditingKind.kt | 2 +- .../droid/background/LoadedDocument.kt | 8 +- .../droid/ui/TtsActionModeCallback.kt | 16 ++- .../droid/ui/activity/DocumentFragment.kt | 11 +++ .../droid/ui/activity/MainActivity.kt | 3 +- .../droid/ui/widget/EditingTools.kt | 97 +++++++++++++++++-- .../opendocument/droid/ui/widget/PageView.kt | 6 ++ .../main/res/drawable/ic_add_column_left.xml | 14 +++ .../main/res/drawable/ic_add_column_right.xml | 14 +++ .../main/res/drawable/ic_add_row_above.xml | 14 +++ .../main/res/drawable/ic_add_row_below.xml | 14 +++ .../main/res/drawable/ic_delete_columns.xml | 17 ++++ app/src/main/res/drawable/ic_delete_rows.xml | 14 +++ app/src/main/res/drawable/ic_table_edit.xml | 14 +++ app/src/main/res/values-ca/strings.xml | 5 - app/src/main/res/values-cs/strings.xml | 7 -- app/src/main/res/values-da/strings.xml | 5 - app/src/main/res/values-de/strings.xml | 5 - app/src/main/res/values-es/strings.xml | 5 - app/src/main/res/values-et/strings.xml | 5 - app/src/main/res/values-fr/strings.xml | 5 - app/src/main/res/values-ga/strings.xml | 8 -- app/src/main/res/values-hi/strings.xml | 5 - app/src/main/res/values-it/strings.xml | 5 - app/src/main/res/values-ja/strings.xml | 4 - app/src/main/res/values-ko/strings.xml | 4 - app/src/main/res/values-pl/strings.xml | 7 -- app/src/main/res/values-pt/strings.xml | 5 - app/src/main/res/values-ru/strings.xml | 7 -- app/src/main/res/values-sl/strings.xml | 7 -- app/src/main/res/values-sv/strings.xml | 5 - app/src/main/res/values-tr/strings.xml | 5 - app/src/main/res/values-zh/strings.xml | 4 - app/src/main/res/values/strings.xml | 16 ++- gradle/libs.versions.toml | 2 +- 40 files changed, 357 insertions(+), 130 deletions(-) create mode 100644 app/src/main/res/drawable/ic_add_column_left.xml create mode 100644 app/src/main/res/drawable/ic_add_column_right.xml create mode 100644 app/src/main/res/drawable/ic_add_row_above.xml create mode 100644 app/src/main/res/drawable/ic_add_row_below.xml create mode 100644 app/src/main/res/drawable/ic_delete_columns.xml create mode 100644 app/src/main/res/drawable/ic_delete_rows.xml create mode 100644 app/src/main/res/drawable/ic_table_edit.xml diff --git a/CHANGELOG.md b/CHANGELOG.md index a0a57fb7c9b7..4f24cee9b606 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,14 @@ section the body of the GitHub release, and refuses a version without one. `scri unsaved marks prints from the screen as before. - Printing starts on the paper and orientation of the document, for example A4 or a landscape slide. +- Rows and columns of a spreadsheet can be inserted and deleted. +- A CSV file can be edited and saved. +- Saving a spreadsheet computes again the formulas that an edit made out of date. +- Read aloud uses the language of the document, where a voice for it is installed. +- A printed document has one page on each sheet, without the grey background, and a dark + document prints in light colors. +- PDF images with transparency show correctly, and PDF text in small capitals can be + found and copied. ## 4.21.0 diff --git a/app/src/androidTest/java/app/opendocument/droid/background/DocumentParcelTest.kt b/app/src/androidTest/java/app/opendocument/droid/background/DocumentParcelTest.kt index fa914d608d6d..e32472bbd7a1 100644 --- a/app/src/androidTest/java/app/opendocument/droid/background/DocumentParcelTest.kt +++ b/app/src/androidTest/java/app/opendocument/droid/background/DocumentParcelTest.kt @@ -109,6 +109,7 @@ class DocumentParcelTest { editing = EditingKind.DOCUMENT, readsAsDocument = true, pageSize = null, + locale = null, ) val restored = roundTrip(document, LoadedDocument.CREATOR) @@ -120,6 +121,7 @@ class DocumentParcelTest { assertEquals(EditingKind.DOCUMENT, restored.editing) assertTrue(restored.readsAsDocument) assertNull(restored.pageSize) + assertNull(restored.locale) assertNull(restored.partCuts[0]) assertNull(restored.partCuts[2]) @@ -152,6 +154,7 @@ class DocumentParcelTest { editing = EditingKind.NONE, readsAsDocument = true, pageSize = PageSize(8268, 11693), + locale = "de-AT", ), LoadedDocument.CREATOR, ) @@ -163,6 +166,7 @@ class DocumentParcelTest { assertTrue(restored.readsAsDocument) assertEquals(8268, restored.pageSize?.widthMils) assertEquals(11693, restored.pageSize?.heightMils) + assertEquals("de-AT", restored.locale) } private fun roundTrip(value: T, creator: Parcelable.Creator): T { diff --git a/app/src/androidTest/java/app/opendocument/droid/test/CoreTest.kt b/app/src/androidTest/java/app/opendocument/droid/test/CoreTest.kt index 14ddc8e8cfb5..676bdddcbcd6 100644 --- a/app/src/androidTest/java/app/opendocument/droid/test/CoreTest.kt +++ b/app/src/androidTest/java/app/opendocument/droid/test/CoreTest.kt @@ -122,6 +122,37 @@ class CoreTest { result.delete() } + /** A csv is edited as a one-sheet spreadsheet, rows included, and saved as a csv. */ + @Test + fun testCsvEdit() { + val csv = File(cacheDir(), "rows.csv") + csv.writeText("a,b\nc,d\n") + extracted += csv + + coreLoader.host("csv-edit", csv.absolutePath, askEditing = true) + Assert.assertEquals(EditingKind.SHEET, coreLoader.editing) + + val result = + coreLoader.writeEdits( + csv.absolutePath, + null, + null, + EditingKind.SHEET, + """{"version":2,"ops":[{"op":"insertRows","sheet":0,"row":0,"count":1},""" + + """{"op":"setCell","sheet":0,"column":0,"row":0,""" + + """"value":{"type":"string","text":"$EDITED"}}]}""", + File(cacheDir(), "csv-edit-result").path, + ) + + // the core may write a byte order mark + Assert.assertEquals( + listOf("$EDITED,", "a,b", "c,d"), + result.readText().removePrefix("\uFEFF").lines().filter { it.isNotEmpty() }, + ) + + result.delete() + } + /** * The formats that used to be sent off for conversion instead: presentations, and the legacy * binary microsoft ones. The core renders all four, so the app hands them to it. diff --git a/app/src/androidTest/java/app/opendocument/droid/test/MainActivityTests.kt b/app/src/androidTest/java/app/opendocument/droid/test/MainActivityTests.kt index 6ba146628d85..8a65b473794c 100644 --- a/app/src/androidTest/java/app/opendocument/droid/test/MainActivityTests.kt +++ b/app/src/androidTest/java/app/opendocument/droid/test/MainActivityTests.kt @@ -27,6 +27,7 @@ import androidx.test.espresso.assertion.ViewAssertions.matches import androidx.test.espresso.intent.Intents import androidx.test.espresso.intent.VerificationModes.times import androidx.test.espresso.intent.matcher.IntentMatchers.hasAction +import androidx.test.espresso.matcher.RootMatchers.isPlatformPopup import androidx.test.espresso.matcher.ViewMatchers.isDisplayed import androidx.test.espresso.matcher.ViewMatchers.isEnabled import androidx.test.espresso.matcher.ViewMatchers.withClassName @@ -389,6 +390,55 @@ class MainActivityTests { } } + /** The rows and columns tool inserts a row over the pin in pro, and offers pro in lite. */ + @Test + fun aSheetRowIsInsertedFromTheStrip() { + respondToOpenDocumentWith(requireTestFile("spreadsheet-test.ods")) + + openDocumentThroughPicker() + waitForDocumentActions() + + onView(withContentDescription(R.string.menu_edit)).perform(clickThroughLongPress()) + + val activity = mainActivityActivityTestRule.activity + val documentFragment = requireNotNull(waitForDocumentFragment(activity, 10000)) + val pageView = requireNotNull(documentFragment.pageView) + + Assert.assertTrue( + "the sheet should turn editable", + waitFor(EDIT_MODE_TIMEOUT_MS) { pageAnswers(pageView, "odr.editing.isEnabled()") }, + ) + Assert.assertTrue("the formatting strip should come up", awaitEditingTools()) + Assert.assertTrue( + "the first cell should take the pin", + pageAnswers(pageView, "odr.sheet.pin({column: 0, row: 0})"), + ) + + onView(withContentDescription(R.string.tool_rows_columns)).perform(scrollTo(), click()) + + if (!Features.advancedEditing) { + awaitViewWithText(R.string.pro_offer_sheet) + onView(withText(R.string.pro_offer_sheet)).check(matches(isDisplayed())) + + return + } + + onView(withContentDescription(R.string.tool_insert_rows_above)) + .inRoot(isPlatformPopup()) + .perform(click()) + + Assert.assertTrue( + "a row should be inserted", + waitFor(EDIT_MODE_TIMEOUT_MS) { + pageAnswers(pageView, "odr.editing.getOperations().indexOf('insertRows') >= 0") + }, + ) + Assert.assertTrue( + "and the page should say so to the app", + waitFor(EDIT_MODE_TIMEOUT_MS) { documentFragment.hasUnsavedEdits() }, + ) + } + /** Lite edits a text document inside one paragraph, and the page itself holds it to that. */ @Test fun theEditionDecidesHowFarAnEditReaches() { diff --git a/app/src/main/java/app/opendocument/droid/background/CoreLoader.kt b/app/src/main/java/app/opendocument/droid/background/CoreLoader.kt index eca3b55bd6ce..58acf9301376 100644 --- a/app/src/main/java/app/opendocument/droid/background/CoreLoader.kt +++ b/app/src/main/java/app/opendocument/droid/background/CoreLoader.kt @@ -49,6 +49,10 @@ class CoreLoader(private val context: Context) { var pageSize: PageSize? = null private set + /** The language the document [host] last opened states, as a BCP 47 tag. */ + var locale: String? = null + private set + /** * Whether the core reads what [host] last opened as a document rather than only showing it - * true of csv and markdown as well as the document formats, false of an image or an archive. @@ -94,6 +98,7 @@ class CoreLoader(private val context: Context) { editing, readsAsDocument, pageSize, + locale, ) } @@ -128,14 +133,13 @@ class CoreLoader(private val context: Context) { throw OdrException.UnsupportedFileType("no charset could be detected: $inputPath") } - // one decode for both questions + // one decode for every question val paged = lastDocumentType in PAGED_DOCUMENT_TYPES - val document = - if (file.isDocumentFile && (askEditing || paged)) file.asDocumentFile().document() - else null + val document = if (askEditing || paged) documentOf(file) else null document.use { editing = if (askEditing) editingOf(file, it) else EditingKind.NONE pageSize = if (paged && it != null) pageSizeOf(it) else null + locale = it?.locale() } val htmlConfig = HtmlConfig() @@ -333,10 +337,11 @@ class CoreLoader(private val context: Context) { } EditingKind.DOCUMENT, EditingKind.SHEET -> - file.asDocumentFile().document().use { document -> - document.edit(payload) - document.save(outputFile.path) - } + checkNotNull(documentOf(file)) { "not a document: $inputPath" } + .use { document -> + document.edit(payload) + document.save(outputFile.path) + } } return outputFile @@ -374,6 +379,14 @@ class CoreLoader(private val context: Context) { else EditingKind.DOCUMENT } + /** The document [file] holds: a document file's, or the one sheet of a csv. */ + private fun documentOf(file: DecodedFile): Document? = + when { + file.isDocumentFile -> file.asDocumentFile().document() + file.isCsvFile -> file.asCsvFile().document() + else -> null + } + /** The first page's: a presentation has one size, and a drawing seldom more. */ private fun pageSizeOf(document: Document): PageSize? { val root = document.rootElement() ?: return null diff --git a/app/src/main/java/app/opendocument/droid/background/EditingKind.kt b/app/src/main/java/app/opendocument/droid/background/EditingKind.kt index 9fc7ba5d7905..b97a91434ad1 100644 --- a/app/src/main/java/app/opendocument/droid/background/EditingKind.kt +++ b/app/src/main/java/app/opendocument/droid/background/EditingKind.kt @@ -11,7 +11,7 @@ enum class EditingKind { /** A text document or a presentation. */ DOCUMENT, - /** A spreadsheet: one cell at a time. */ + /** A spreadsheet or a csv: its cells, rows and columns. */ SHEET, /** A pdf, which takes marks rather than edits. */ diff --git a/app/src/main/java/app/opendocument/droid/background/LoadedDocument.kt b/app/src/main/java/app/opendocument/droid/background/LoadedDocument.kt index d507ee23e925..a73e761b3d5d 100644 --- a/app/src/main/java/app/opendocument/droid/background/LoadedDocument.kt +++ b/app/src/main/java/app/opendocument/droid/background/LoadedDocument.kt @@ -5,8 +5,8 @@ import android.os.Parcel import android.os.Parcelable /** - * A rendered document with one URI per part. [partCuts] identifies truncated sheets; [editing] and - * [readsAsDocument] come from the core. + * A rendered document with one URI per part. [partCuts] identifies truncated sheets; [editing], + * [readsAsDocument], [pageSize] and [locale] come from the core. */ class LoadedDocument( val request: DocumentRequest, @@ -17,6 +17,7 @@ class LoadedDocument( val editing: EditingKind, val readsAsDocument: Boolean, val pageSize: PageSize?, + val locale: String?, ) : Parcelable { override fun describeContents(): Int = 0 @@ -32,6 +33,7 @@ class LoadedDocument( // 0 for none, which no page measures parcel.writeInt(pageSize?.widthMils ?: 0) parcel.writeInt(pageSize?.heightMils ?: 0) + parcel.writeString(locale) } companion object { @@ -60,6 +62,7 @@ class LoadedDocument( val readsAsDocument = ParcelUtil.readBoolean(parcel) val widthMils = parcel.readInt() val heightMils = parcel.readInt() + val locale = parcel.readString() return LoadedDocument( request, @@ -71,6 +74,7 @@ class LoadedDocument( readsAsDocument, if (widthMils > 0 && heightMils > 0) PageSize(widthMils, heightMils) else null, + locale, ) } diff --git a/app/src/main/java/app/opendocument/droid/ui/TtsActionModeCallback.kt b/app/src/main/java/app/opendocument/droid/ui/TtsActionModeCallback.kt index 9a36d56c25ff..026026d16d64 100644 --- a/app/src/main/java/app/opendocument/droid/ui/TtsActionModeCallback.kt +++ b/app/src/main/java/app/opendocument/droid/ui/TtsActionModeCallback.kt @@ -11,17 +11,21 @@ import android.widget.TextView import androidx.appcompat.view.ActionMode import app.opendocument.droid.R import app.opendocument.droid.ui.widget.PageView +import java.util.Locale /** * Reads the document out loud, one paragraph at a time: [PageView] hands the text of the paragraph * at [lastParagraphIndex] back through [ParagraphListener], and every finished utterance asks for - * the next one. + * the next one. [locale] is the document's language as a BCP 47 tag, read in where a voice has it. */ // the replacements for the deprecated utterance callback and parameter map need the utterance // queued with an id, which is a behaviour change rather than a rename @Suppress("DEPRECATION", "OVERRIDE_DEPRECATION") -class TtsActionModeCallback(private val context: Context, private val pageView: PageView) : - ActionMode.Callback, OnInitListener, ParagraphListener, OnUtteranceCompletedListener { +class TtsActionModeCallback( + private val context: Context, + private val pageView: PageView, + private val locale: String?, +) : ActionMode.Callback, OnInitListener, ParagraphListener, OnUtteranceCompletedListener { private lateinit var textToSpeech: TextToSpeech private lateinit var menu: Menu @@ -53,6 +57,12 @@ class TtsActionModeCallback(private val context: Context, private val pageView: textToSpeech.setOnUtteranceCompletedListener(this) + // otherwise the engine's own language, which is the phone's rather than the document's + locale + ?.let { Locale.forLanguageTag(it) } + ?.takeIf { textToSpeech.isLanguageAvailable(it) >= TextToSpeech.LANG_AVAILABLE } + ?.let { textToSpeech.setLanguage(it) } + menu.findItem(R.id.tts_play).isEnabled = true menu.findItem(R.id.tts_pause).isEnabled = true menu.findItem(R.id.tts_previous).isEnabled = true diff --git a/app/src/main/java/app/opendocument/droid/ui/activity/DocumentFragment.kt b/app/src/main/java/app/opendocument/droid/ui/activity/DocumentFragment.kt index aec900e3e609..ca43125aac35 100644 --- a/app/src/main/java/app/opendocument/droid/ui/activity/DocumentFragment.kt +++ b/app/src/main/java/app/opendocument/droid/ui/activity/DocumentFragment.kt @@ -513,6 +513,12 @@ class DocumentFragment : Fragment(), DocumentLoader.Listener { pageView?.formatStyle(style) } + override fun onEditStructure(function: String, where: String?) { + analyticsManager.report("edit_$function") + + pageView?.editStructure(function, where) + } + override fun onMarkTool(tool: String, color: Int, recolor: Boolean) { analyticsManager.report("edit_mark_$tool") @@ -568,6 +574,7 @@ class DocumentFragment : Fragment(), DocumentLoader.Listener { "shapes" -> R.string.edit_refused_shapes "readOnly" -> R.string.edit_refused_read_only "range" -> R.string.edit_refused_range + "sheetCut" -> R.string.edit_refused_sheet_cut else -> R.string.edit_refused_unsupported } @@ -1463,6 +1470,10 @@ class DocumentFragment : Fragment(), DocumentLoader.Listener { val pageSize: PageSize? get() = if (::state.isInitialized) state.lastDocument?.pageSize else null + /** The language the document states - see [CoreLoader.locale]. */ + val locale: String? + get() = if (::state.isInitialized) state.lastDocument?.locale else null + val lastFileType: String? get() = state.lastFile?.mimeType diff --git a/app/src/main/java/app/opendocument/droid/ui/activity/MainActivity.kt b/app/src/main/java/app/opendocument/droid/ui/activity/MainActivity.kt index e24ef390188f..701b8d6a674f 100644 --- a/app/src/main/java/app/opendocument/droid/ui/activity/MainActivity.kt +++ b/app/src/main/java/app/opendocument/droid/ui/activity/MainActivity.kt @@ -642,7 +642,8 @@ class MainActivity : AppCompatActivity() { analyticsManager.report("menu_tts") documentFragment?.pageView?.let { pageView -> - val ttsActionMode = TtsActionModeCallback(this, pageView) + val ttsActionMode = + TtsActionModeCallback(this, pageView, documentFragment.locale) this.ttsActionMode = ttsActionMode currentActionMode = startSupportActionMode(ttsActionMode) diff --git a/app/src/main/java/app/opendocument/droid/ui/widget/EditingTools.kt b/app/src/main/java/app/opendocument/droid/ui/widget/EditingTools.kt index 79daa5928ac5..9f2fce9c3f62 100644 --- a/app/src/main/java/app/opendocument/droid/ui/widget/EditingTools.kt +++ b/app/src/main/java/app/opendocument/droid/ui/widget/EditingTools.kt @@ -36,6 +36,9 @@ class EditingTools(context: Context, attributeSet: AttributeSet?) : /** State [style] on the selection, in the keys `odr.editing.format` takes. */ fun onFormat(style: JSONObject) + /** Call [function] of `odr.editing` on the selected rows or columns, with [where]. */ + fun onEditStructure(function: String, where: String?) + /** A marking tool was pressed, or given a new [color] where [recolor]. */ fun onMarkTool(tool: String, @ColorInt color: Int, recolor: Boolean) @@ -86,8 +89,9 @@ class EditingTools(context: Context, attributeSet: AttributeSet?) : } /** - * The formatting tools. A [sheet] takes a fill where a document takes a highlight, and no - * `justify`. [locked] adds pro's badge, and makes every tool but the free one offer pro. + * The formatting tools. A [sheet] takes a fill where a document takes a highlight, no + * `justify`, and the rows and columns tool. [locked] adds pro's badge, and makes every tool but + * the free one offer pro. */ fun showFormatting(sheet: Boolean, locked: Boolean) { reset(locked) @@ -159,6 +163,13 @@ class EditingTools(context: Context, attributeSet: AttributeSet?) : alignTool = align row.addView(align) + if (sheet) { + val structure = + newTool(R.drawable.ic_table_edit, R.string.tool_rows_columns, STRUCTURE_TOOL) + structure.setOnClickListener { ifOffered(STRUCTURE_TOOL) { showStructureEdits(it) } } + row.addView(structure) + } + setSelectionStyle(JSONObject()) visibility = View.VISIBLE @@ -412,11 +423,7 @@ class EditingTools(context: Context, attributeSet: AttributeSet?) : private fun showAlignments(anchor: View) { showRow(anchor, fill = false) { row, popup -> for (alignment in alignments) { - val choice = newTool(alignment.icon, alignment.label, ALIGN_TOOL) - // a choice carries no colour and no caption, so its icon is centred without the - // slot - (choice.findViewById(R.id.editing_tool_caption).parent as View).visibility = - View.GONE + val choice = newChoice(alignment.icon, alignment.label, ALIGN_TOOL) choice.isSelected = alignment.value == selectionAlign choice.setOnClickListener { popup.dismiss() @@ -429,6 +436,31 @@ class EditingTools(context: Context, attributeSet: AttributeSet?) : } } + /** The row and column edits, as a row of tools under the one that opened them. */ + private fun showStructureEdits(anchor: View) { + showRow(anchor, fill = false) { row, popup -> + for (edit in STRUCTURE_EDITS) { + val choice = newChoice(edit.icon, edit.label, STRUCTURE_TOOL) + choice.setOnClickListener { + popup.dismiss() + + listener?.onEditStructure(edit.function, edit.where) + } + + row.addView(choice) + } + } + } + + /** A tool in a row that a tool opened. */ + private fun newChoice(@DrawableRes icon: Int, @StringRes label: Int, name: String): View { + val choice = newTool(icon, label, name) + // a choice carries no colour and no caption, so its icon is centred without the slot + (choice.findViewById(R.id.editing_tool_caption).parent as View).visibility = View.GONE + + return choice + } + private fun showPalette(anchor: View, colors: List, picked: (Int) -> Unit) { showRow(anchor, fill = false) { row, popup -> val size = (44 * resources.displayMetrics.density).toInt() @@ -504,6 +536,14 @@ class EditingTools(context: Context, attributeSet: AttributeSet?) : @param:StringRes val label: Int, ) + /** A call of `odr.editing` on the rows or columns that the selection spans. */ + private class StructureEdit( + val function: String, + val where: String?, + @param:DrawableRes val icon: Int, + @param:StringRes val label: Int, + ) + private class Mark( val tool: String, @param:DrawableRes val icon: Int, @@ -522,9 +562,10 @@ class EditingTools(context: Context, attributeSet: AttributeSet?) : /** The colour behind a cell, which a sheet takes in place of a highlight. */ private const val FILL_COLOR = "fill" - /** The size and the alignment tools, which carry no colour and so are only names here. */ + /** The tools that carry no colour, and so are only names here. */ private const val SIZE_TOOL = "size" private const val ALIGN_TOOL = "align" + private const val STRUCTURE_TOOL = "structure" /** * The tools a locked strip still does the work of. The highlighter, under both names it @@ -576,6 +617,46 @@ class EditingTools(context: Context, attributeSet: AttributeSet?) : ), ) + private val STRUCTURE_EDITS = + listOf( + StructureEdit( + "insertRows", + "above", + R.drawable.ic_add_row_above, + R.string.tool_insert_rows_above, + ), + StructureEdit( + "insertRows", + "below", + R.drawable.ic_add_row_below, + R.string.tool_insert_rows_below, + ), + StructureEdit( + "deleteRows", + null, + R.drawable.ic_delete_rows, + R.string.tool_delete_rows, + ), + StructureEdit( + "insertColumns", + "left", + R.drawable.ic_add_column_left, + R.string.tool_insert_columns_left, + ), + StructureEdit( + "insertColumns", + "right", + R.drawable.ic_add_column_right, + R.string.tool_insert_columns_right, + ), + StructureEdit( + "deleteColumns", + null, + R.drawable.ic_delete_columns, + R.string.tool_delete_columns, + ), + ) + private val MARK_COLORS = listOf( NamedColor(0xffffe633.toInt(), R.string.color_yellow), diff --git a/app/src/main/java/app/opendocument/droid/ui/widget/PageView.kt b/app/src/main/java/app/opendocument/droid/ui/widget/PageView.kt index c64fac5fce23..7b691080e41e 100644 --- a/app/src/main/java/app/opendocument/droid/ui/widget/PageView.kt +++ b/app/src/main/java/app/opendocument/droid/ui/widget/PageView.kt @@ -498,6 +498,12 @@ constructor(context: Context, attributeSet: AttributeSet?) : evaluateJavascript("odr.editing.format($style)", null) } + /** Calls [function] of `odr.editing`, such as `insertRows`, on the selected rows or columns. */ + fun editStructure(function: String, where: String?) { + val argument = where?.let { JSONObject.quote(it) } ?: "" + evaluateJavascript("odr.editing.$function($argument)", null) + } + /** * A marking tool pressed, or given a new colour; [callback] gets the tool left armed. The page * marks a standing selection, and arms where there is none. diff --git a/app/src/main/res/drawable/ic_add_column_left.xml b/app/src/main/res/drawable/ic_add_column_left.xml new file mode 100644 index 000000000000..b1550087fc35 --- /dev/null +++ b/app/src/main/res/drawable/ic_add_column_left.xml @@ -0,0 +1,14 @@ + + + + + + + diff --git a/app/src/main/res/drawable/ic_add_column_right.xml b/app/src/main/res/drawable/ic_add_column_right.xml new file mode 100644 index 000000000000..953c0e291510 --- /dev/null +++ b/app/src/main/res/drawable/ic_add_column_right.xml @@ -0,0 +1,14 @@ + + + + + + + diff --git a/app/src/main/res/drawable/ic_add_row_above.xml b/app/src/main/res/drawable/ic_add_row_above.xml new file mode 100644 index 000000000000..17ab333fe437 --- /dev/null +++ b/app/src/main/res/drawable/ic_add_row_above.xml @@ -0,0 +1,14 @@ + + + + + + + diff --git a/app/src/main/res/drawable/ic_add_row_below.xml b/app/src/main/res/drawable/ic_add_row_below.xml new file mode 100644 index 000000000000..5477437dcd65 --- /dev/null +++ b/app/src/main/res/drawable/ic_add_row_below.xml @@ -0,0 +1,14 @@ + + + + + + + diff --git a/app/src/main/res/drawable/ic_delete_columns.xml b/app/src/main/res/drawable/ic_delete_columns.xml new file mode 100644 index 000000000000..0d411d1cacfc --- /dev/null +++ b/app/src/main/res/drawable/ic_delete_columns.xml @@ -0,0 +1,17 @@ + + + + + + + diff --git a/app/src/main/res/drawable/ic_delete_rows.xml b/app/src/main/res/drawable/ic_delete_rows.xml new file mode 100644 index 000000000000..45117920fb75 --- /dev/null +++ b/app/src/main/res/drawable/ic_delete_rows.xml @@ -0,0 +1,14 @@ + + + + + + + diff --git a/app/src/main/res/drawable/ic_table_edit.xml b/app/src/main/res/drawable/ic_table_edit.xml new file mode 100644 index 000000000000..2c71caacb5ea --- /dev/null +++ b/app/src/main/res/drawable/ic_table_edit.xml @@ -0,0 +1,14 @@ + + + + + + + diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml index ffaced8d8962..e9407652d959 100644 --- a/app/src/main/res/values-ca/strings.xml +++ b/app/src/main/res/values-ca/strings.xml @@ -124,7 +124,6 @@ Pro Part de Pro La negreta, la cursiva, els colors i la mida del text, així com afegir o unir paràgrafs, formen part d\'OpenDocument Reader Pro. El ressaltador està disponible a totes les edicions. - La negreta, la cursiva, els colors, la mida del text i l\'alineació de les cel·les formen part d\'OpenDocument Reader Pro. L\'emplenament està disponible a totes les edicions. Subratllar, ratllar i dibuixar en un PDF formen part d\'OpenDocument Reader Pro. El ressaltador està disponible a totes les edicions. Ara no Un salt de línia dins d\'un paràgraf no es pot desar. Premeu Retorn per a un paràgraf nou. @@ -135,8 +134,4 @@ Aquest document no es pot editar. Una edició no pot abastar una imatge o una taula. Aquesta edició no és possible aquí. - - %d cel·la amb fórmula mostra un resultat que la vostra edició ha deixat desactualitzat. El fitxer desat conserva la fórmula, i una aplicació de fulls de càlcul la torna a calcular. - %d cel·les amb fórmula mostren resultats que la vostra edició ha deixat desactualitzats. El fitxer desat conserva les fórmules, i una aplicació de fulls de càlcul les torna a calcular. - diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 2805f5e45978..40f4fba8cf26 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -124,7 +124,6 @@ Pro Součást verze Pro Tučné písmo, kurzíva, barvy, velikost textu a také přidávání a spojování odstavců jsou součástí OpenDocument Reader Pro. Zvýrazňovač je k dispozici ve všech verzích. - Tučné písmo, kurzíva, barvy, velikost textu a zarovnání buněk jsou součástí OpenDocument Reader Pro. Výplň je k dispozici ve všech verzích. Podtrhávání, přeškrtávání a kreslení v PDF jsou součástí OpenDocument Reader Pro. Zvýrazňovač je k dispozici ve všech verzích. Teď ne Zalomení řádku uvnitř odstavce nelze uložit. Pro nový odstavec stiskněte Enter. @@ -135,10 +134,4 @@ Tento dokument nelze upravit. Úprava nemůže zasahovat přes obrázek nebo tabulku. Tato úprava zde není možná. - - %d buňka se vzorcem ukazuje výsledek, který vaše úprava učinila zastaralým. Uložený soubor vzorec zachová a tabulkový program ho spočítá znovu. - %d buňky se vzorcem ukazují výsledky, které vaše úprava učinila zastaralými. Uložený soubor vzorce zachová a tabulkový program je spočítá znovu. - %d buňky se vzorcem ukazují výsledky, které vaše úprava učinila zastaralými. Uložený soubor vzorce zachová a tabulkový program je spočítá znovu. - %d buněk se vzorcem ukazuje výsledky, které vaše úprava učinila zastaralými. Uložený soubor vzorce zachová a tabulkový program je spočítá znovu. - diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index 50e4570923e4..1c08859f40fa 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -124,7 +124,6 @@ Pro En del af Pro Fed, kursiv, farver og tekststørrelse samt tilføjelse og sammenlægning af afsnit er en del af OpenDocument Reader Pro. Fremhævning er med i alle udgaver. - Fed, kursiv, farver, tekststørrelse og justering af celler er en del af OpenDocument Reader Pro. Fyld er med i alle udgaver. Understregning, gennemstregning og tegning på en PDF er en del af OpenDocument Reader Pro. Fremhævning er med i alle udgaver. Ikke nu Et linjeskift inde i et afsnit kan ikke gemmes. Tryk på Enter for et nyt afsnit. @@ -135,8 +134,4 @@ Dette dokument kan ikke redigeres. En redigering kan ikke strække sig over et billede eller en tabel. Den redigering er ikke mulig her. - - %d formelcelle viser et resultat, som din redigering har gjort forældet. Den gemte fil beholder formlen, og et regnearksprogram beregner den igen. - %d formelceller viser resultater, som din redigering har gjort forældede. Den gemte fil beholder formlerne, og et regnearksprogram beregner dem igen. - diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 47a466b60c78..38efe23fa8b9 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -124,7 +124,6 @@ Pro Teil von Pro Fett, kursiv, Farben und Textgröße sowie das Hinzufügen oder Zusammenführen von Absätzen sind Teil von OpenDocument Reader Pro. Das Hervorheben ist in jeder Version enthalten. - Fett, kursiv, Farben, Textgröße und die Ausrichtung von Zellen sind Teil von OpenDocument Reader Pro. Die Füllfarbe ist in jeder Version enthalten. Unterstreichen, Durchstreichen und Zeichnen in einem PDF sind Teil von OpenDocument Reader Pro. Das Hervorheben ist in jeder Version enthalten. Nicht jetzt Ein Zeilenumbruch innerhalb eines Absatzes kann nicht gespeichert werden. Drücken Sie die Eingabetaste für einen neuen Absatz. @@ -135,8 +134,4 @@ Dieses Dokument kann nicht bearbeitet werden. Eine Änderung kann nicht über ein Bild oder eine Tabelle hinausreichen. Diese Änderung ist hier nicht möglich. - - %d Formelzelle zeigt ein Ergebnis, das durch Ihre Änderung veraltet ist. Die gespeicherte Datei behält die Formel, und eine Tabellenkalkulation berechnet sie neu. - %d Formelzellen zeigen Ergebnisse, die durch Ihre Änderung veraltet sind. Die gespeicherte Datei behält die Formeln, und eine Tabellenkalkulation berechnet sie neu. - diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index d97e72ab60ec..515d22f92d11 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -124,7 +124,6 @@ Pro Parte de Pro La negrita, la cursiva, los colores y el tamaño del texto, así como añadir o unir párrafos, forman parte de OpenDocument Reader Pro. El resaltador está disponible en todas las versiones. - La negrita, la cursiva, los colores, el tamaño del texto y la alineación de las celdas forman parte de OpenDocument Reader Pro. El relleno está disponible en todas las versiones. Subrayar, tachar y dibujar en un PDF forman parte de OpenDocument Reader Pro. El resaltador está disponible en todas las versiones. Ahora no Un salto de línea dentro de un párrafo no se puede guardar. Pulse Intro para crear un párrafo nuevo. @@ -135,8 +134,4 @@ Este documento no se puede editar. Una edición no puede abarcar una imagen o una tabla. Esa edición no es posible aquí. - - %d celda con fórmula muestra un resultado que su edición dejó desactualizado. El archivo guardado conserva la fórmula y una aplicación de hojas de cálculo la vuelve a calcular. - %d celdas con fórmula muestran resultados que su edición dejó desactualizados. El archivo guardado conserva las fórmulas y una aplicación de hojas de cálculo las vuelve a calcular. - diff --git a/app/src/main/res/values-et/strings.xml b/app/src/main/res/values-et/strings.xml index 0d0190e3fccd..1e5d3aaf0283 100644 --- a/app/src/main/res/values-et/strings.xml +++ b/app/src/main/res/values-et/strings.xml @@ -124,7 +124,6 @@ Pro Osa Pro-versioonist Paks kiri, kaldkiri, värvid ja teksti suurus ning lõikude lisamine või ühendamine on OpenDocument Reader Pro osa. Esiletõst on saadaval kõigis versioonides. - Paks kiri, kaldkiri, värvid, teksti suurus ja lahtrite joondus on OpenDocument Reader Pro osa. Täide on saadaval kõigis versioonides. Allajoonimine, läbikriipsutamine ja joonistamine PDF-il on OpenDocument Reader Pro osa. Esiletõst on saadaval kõigis versioonides. Mitte praegu Reavahetust lõigu sees ei saa salvestada. Uue lõigu jaoks vajuta Enter. @@ -135,8 +134,4 @@ Seda dokumenti ei saa muuta. Muudatus ei saa ulatuda üle pildi ega tabeli. See muudatus pole siin võimalik. - - %d valemiga lahter näitab tulemust, mille sinu muudatus aegunuks muutis. Salvestatud fail säilitab valemi ja arvutustabelirakendus arvutab selle uuesti. - %d valemiga lahtrit näitavad tulemusi, mille sinu muudatus aegunuks muutis. Salvestatud fail säilitab valemid ja arvutustabelirakendus arvutab need uuesti. - diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 6f2acc3826b5..ecbaabf60a56 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -124,7 +124,6 @@ Pro Inclus dans Pro Le gras, l\'italique, les couleurs et la taille du texte, ainsi que l\'ajout ou la fusion de paragraphes, sont inclus dans OpenDocument Reader Pro. Le surligneur est disponible dans toutes les éditions. - Le gras, l\'italique, les couleurs, la taille du texte et l\'alignement des cellules sont inclus dans OpenDocument Reader Pro. Le remplissage est disponible dans toutes les éditions. Le soulignement, le barré et le dessin sur un PDF sont inclus dans OpenDocument Reader Pro. Le surligneur est disponible dans toutes les éditions. Pas maintenant Un saut de ligne à l\'intérieur d\'un paragraphe ne peut pas être enregistré. Appuyez sur Entrée pour créer un nouveau paragraphe. @@ -135,8 +134,4 @@ Ce document ne peut pas être modifié. Une modification ne peut pas s\'étendre sur une image ou un tableau. Cette modification n\'est pas possible ici. - - %d cellule de formule affiche un résultat que votre modification a rendu obsolète. Le fichier enregistré conserve la formule, et un tableur la recalcule. - %d cellules de formule affichent des résultats que votre modification a rendus obsolètes. Le fichier enregistré conserve les formules, et un tableur les recalcule. - diff --git a/app/src/main/res/values-ga/strings.xml b/app/src/main/res/values-ga/strings.xml index 5bac9c107cb1..295ea9010e5a 100644 --- a/app/src/main/res/values-ga/strings.xml +++ b/app/src/main/res/values-ga/strings.xml @@ -124,7 +124,6 @@ Pro Cuid de Pro Is cuid d\'OpenDocument Reader Pro iad trom, iodálach, dathanna agus méid an téacs, chomh maith le míreanna a chur leis nó a cheangal le chéile. Tá an t-aibhsitheoir i ngach eagrán. - Is cuid d\'OpenDocument Reader Pro iad trom, iodálach, dathanna, méid an téacs agus ailíniú na gceall. Tá an líonadh i ngach eagrán. Is cuid d\'OpenDocument Reader Pro é líne a chur faoi théacs nó tríd, agus tarraingt ar PDF. Tá an t-aibhsitheoir i ngach eagrán. Ní anois Ní féidir briseadh líne laistigh de mhír a shábháil. Brúigh Enter le haghaidh míre nua. @@ -135,11 +134,4 @@ Ní féidir an cháipéis seo a chur in eagar. Ní féidir le heagarthóireacht dul thar phictiúr ná thar tábla. Níl an eagarthóireacht sin indéanta anseo. - - Taispeánann %d chill fhoirmle toradh atá as dáta de bharr d\'eagarthóireachta. Coinníonn an comhad sábháilte an fhoirmle, agus ríomhann aip scarbhileog arís í. - Taispeánann %d cill fhoirmle torthaí atá as dáta de bharr d\'eagarthóireachta. Coinníonn an comhad sábháilte na foirmlí, agus ríomhann aip scarbhileog arís iad. - Taispeánann %d cill fhoirmle torthaí atá as dáta de bharr d\'eagarthóireachta. Coinníonn an comhad sábháilte na foirmlí, agus ríomhann aip scarbhileog arís iad. - Taispeánann %d cill fhoirmle torthaí atá as dáta de bharr d\'eagarthóireachta. Coinníonn an comhad sábháilte na foirmlí, agus ríomhann aip scarbhileog arís iad. - Taispeánann %d cill fhoirmle torthaí atá as dáta de bharr d\'eagarthóireachta. Coinníonn an comhad sábháilte na foirmlí, agus ríomhann aip scarbhileog arís iad. - diff --git a/app/src/main/res/values-hi/strings.xml b/app/src/main/res/values-hi/strings.xml index dcdc55c26c9d..f8f67f2a22ac 100644 --- a/app/src/main/res/values-hi/strings.xml +++ b/app/src/main/res/values-hi/strings.xml @@ -124,7 +124,6 @@ Pro Pro का हिस्सा बोल्ड, इटैलिक, रंग और टेक्स्ट का आकार, और नए अनुच्छेद जोड़ना या अनुच्छेदों को मिलाना OpenDocument Reader Pro में शामिल हैं। हाइलाइटर हर वर्शन में मिलता है। - सेल के लिए बोल्ड, इटैलिक, रंग, टेक्स्ट का साइज़ और अलाइनमेंट OpenDocument Reader Pro में शामिल हैं। रंग भरने की सुविधा हर वर्शन में मिलती है। PDF पर रेखांकन, काटना और ड्रॉ करना OpenDocument Reader Pro में शामिल हैं। हाइलाइटर हर वर्शन में मिलता है। अभी नहीं अनुच्छेद के भीतर लाइन ब्रेक सहेजा नहीं जा सकता। नए अनुच्छेद के लिए Enter दबाएँ। @@ -135,8 +134,4 @@ यह दस्तावेज़ संपादित नहीं किया जा सकता। कोई संपादन किसी चित्र या तालिका के पार नहीं जा सकता। यह संपादन यहाँ संभव नहीं है। - - %d सूत्र वाला सेल ऐसा परिणाम दिखा रहा है जो आपके संपादन से पुराना हो गया है। सहेजी गई फ़ाइल सूत्र को रखती है, और स्प्रेडशीट ऐप उसे फिर से गणना करता है। - %d सूत्र वाले सेल ऐसे परिणाम दिखा रहे हैं जो आपके संपादन से पुराने हो गए हैं। सहेजी गई फ़ाइल सूत्रों को रखती है, और स्प्रेडशीट ऐप उन्हें फिर से गणना करता है। - diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 7f200ea2bccc..381da03f1c2b 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -124,7 +124,6 @@ Pro Parte di Pro Grassetto, corsivo, colori e dimensione del testo, oltre all\'aggiunta o all\'unione di paragrafi, fanno parte di OpenDocument Reader Pro. L\'evidenziatore è disponibile in tutte le edizioni. - Grassetto, corsivo, colori, dimensione del testo e allineamento delle celle fanno parte di OpenDocument Reader Pro. Il riempimento è disponibile in tutte le edizioni. Sottolineare, barrare e disegnare su un PDF fanno parte di OpenDocument Reader Pro. L\'evidenziatore è disponibile in tutte le edizioni. Non ora Un\'interruzione di riga all\'interno di un paragrafo non può essere salvata. Premi Invio per un nuovo paragrafo. @@ -135,8 +134,4 @@ Questo documento non può essere modificato. Una modifica non può estendersi su un\'immagine o una tabella. Questa modifica non è possibile qui. - - %d cella con formula mostra un risultato reso obsoleto dalla tua modifica. Il file salvato mantiene la formula e un\'app per fogli di calcolo la ricalcola. - %d celle con formula mostrano risultati resi obsoleti dalla tua modifica. Il file salvato mantiene le formule e un\'app per fogli di calcolo le ricalcola. - diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index f49986b9e5f2..06d7579ecb3c 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -124,7 +124,6 @@ Pro Pro の機能 太字、斜体、色、文字サイズ、段落の追加や結合は OpenDocument Reader Pro の機能です。ハイライトはすべてのエディションで使えます。 - セルの太字、斜体、色、文字サイズ、配置は OpenDocument Reader Pro の機能です。塗りつぶしはすべてのエディションで使えます。 PDF への下線、取り消し線、描画は OpenDocument Reader Pro の機能です。ハイライトはすべてのエディションで使えます。 今はしない 段落内の改行は保存できません。新しい段落にするには Enter を押してください。 @@ -135,7 +134,4 @@ このドキュメントは編集できません。 画像や表をまたいで編集することはできません。 ここではその編集はできません。 - - %d 個の数式セルに、編集によって古くなった結果が表示されています。保存したファイルには数式が残り、表計算アプリで再計算されます。 - diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index f245da7a41f6..6a2b5a9f52db 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -124,7 +124,6 @@ Pro Pro 기능 굵게, 기울임꼴, 색상, 글자 크기, 단락 추가 및 합치기 기능은 OpenDocument Reader Pro에 포함되어 있습니다. 강조 표시는 모든 버전에서 사용할 수 있습니다. - 셀의 굵게, 기울임꼴, 색상, 글자 크기, 맞춤 기능은 OpenDocument Reader Pro에 포함되어 있습니다. 채우기는 모든 버전에서 사용할 수 있습니다. PDF의 밑줄, 취소선, 그리기 기능은 OpenDocument Reader Pro에 포함되어 있습니다. 강조 표시는 모든 버전에서 사용할 수 있습니다. 나중에 단락 안의 줄 바꿈은 저장할 수 없습니다. 새 단락을 만들려면 Enter를 누르세요. @@ -135,7 +134,4 @@ 이 문서는 편집할 수 없습니다. 편집 범위에 그림이나 표를 포함할 수 없습니다. 여기서는 그렇게 편집할 수 없습니다. - - 수식 셀 %d개에 편집으로 인해 오래된 결과가 표시됩니다. 저장된 파일에는 수식이 유지되며, 스프레드시트 앱에서 다시 계산합니다. - diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 59fb2b096750..2c3c83102ac8 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -124,7 +124,6 @@ Pro Część wersji Pro Pogrubienie, kursywa, kolory i rozmiar tekstu oraz dodawanie i łączenie akapitów są dostępne w OpenDocument Reader Pro. Zakreślacz jest dostępny w każdej wersji. - Pogrubienie, kursywa, kolory, rozmiar tekstu i wyrównanie komórek są dostępne w OpenDocument Reader Pro. Wypełnienie jest dostępne w każdej wersji. Podkreślanie, przekreślanie i rysowanie w plikach PDF są dostępne w OpenDocument Reader Pro. Zakreślacz jest dostępny w każdej wersji. Nie teraz Podziału wiersza wewnątrz akapitu nie można zapisać. Naciśnij Enter, aby utworzyć nowy akapit. @@ -135,10 +134,4 @@ Tego dokumentu nie można edytować. Edycja nie może obejmować obrazu ani tabeli. Ta edycja nie jest tu możliwa. - - %d komórka z formułą pokazuje wynik, który Twoja edycja zdezaktualizowała. Zapisany plik zachowuje formułę, a arkusz kalkulacyjny przeliczy ją ponownie. - %d komórki z formułami pokazują wyniki, które Twoja edycja zdezaktualizowała. Zapisany plik zachowuje formuły, a arkusz kalkulacyjny przeliczy je ponownie. - %d komórek z formułami pokazuje wyniki, które Twoja edycja zdezaktualizowała. Zapisany plik zachowuje formuły, a arkusz kalkulacyjny przeliczy je ponownie. - %d komórki z formułami pokazuje wyniki, które Twoja edycja zdezaktualizowała. Zapisany plik zachowuje formuły, a arkusz kalkulacyjny przeliczy je ponownie. - diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index fdff64361f58..1fcb6980ebd8 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -124,7 +124,6 @@ Pro Parte do Pro Negrito, itálico, cores e tamanho do texto, além de adicionar ou juntar parágrafos, fazem parte do OpenDocument Reader Pro. O marca-texto está disponível em todas as edições. - Negrito, itálico, cores, tamanho do texto e alinhamento de células fazem parte do OpenDocument Reader Pro. O preenchimento está disponível em todas as edições. Sublinhar, tachar e desenhar em um PDF fazem parte do OpenDocument Reader Pro. O marca-texto está disponível em todas as edições. Agora não Uma quebra de linha dentro de um parágrafo não pode ser salva. Pressione Enter para um novo parágrafo. @@ -135,8 +134,4 @@ Este documento não pode ser editado. Uma edição não pode abranger uma imagem ou uma tabela. Essa edição não é possível aqui. - - %d célula com fórmula mostra um resultado que sua edição desatualizou. O arquivo salvo mantém a fórmula, e um aplicativo de planilhas a calcula de novo. - %d células com fórmula mostram resultados que sua edição desatualizou. O arquivo salvo mantém as fórmulas, e um aplicativo de planilhas as calcula de novo. - diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index c159e12543ee..547589bbf0fb 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -124,7 +124,6 @@ Pro Входит в Pro Полужирный шрифт, курсив, цвета и размер текста, а также добавление и объединение абзацев входят в OpenDocument Reader Pro. Выделение цветом доступно во всех версиях. - Полужирный шрифт, курсив, цвета, размер текста и выравнивание ячеек входят в OpenDocument Reader Pro. Заливка доступна во всех версиях. Подчёркивание, зачёркивание и рисование в PDF входят в OpenDocument Reader Pro. Выделение доступно во всех версиях. Не сейчас Разрыв строки внутри абзаца нельзя сохранить. Нажмите Enter, чтобы начать новый абзац. @@ -135,10 +134,4 @@ Этот документ нельзя редактировать. Правка не может охватывать изображение или таблицу. Такая правка здесь невозможна. - - %d ячейка с формулой показывает результат, который ваша правка сделала устаревшим. Сохранённый файл сохраняет формулу, и табличный редактор пересчитает её. - %d ячейки с формулами показывают результаты, которые ваша правка сделала устаревшими. Сохранённый файл сохраняет формулы, и табличный редактор пересчитает их. - %d ячеек с формулами показывают результаты, которые ваша правка сделала устаревшими. Сохранённый файл сохраняет формулы, и табличный редактор пересчитает их. - %d ячейки с формулами показывают результаты, которые ваша правка сделала устаревшими. Сохранённый файл сохраняет формулы, и табличный редактор пересчитает их. - diff --git a/app/src/main/res/values-sl/strings.xml b/app/src/main/res/values-sl/strings.xml index 48f859ee7ce1..eb71c88e1b7a 100644 --- a/app/src/main/res/values-sl/strings.xml +++ b/app/src/main/res/values-sl/strings.xml @@ -124,7 +124,6 @@ Pro Del različice Pro Krepka in ležeča pisava, barve in velikost besedila ter dodajanje ali združevanje odstavkov so del različice OpenDocument Reader Pro. Označevalnik je na voljo v vseh izdajah. - Krepka in ležeča pisava, barve, velikost besedila in poravnava celic so del različice OpenDocument Reader Pro. Polnilo je na voljo v vseh izdajah. Podčrtovanje, prečrtovanje in risanje po PDF-ju so del različice OpenDocument Reader Pro. Označevalnik je na voljo v vseh izdajah. Ne zdaj Preloma vrstice znotraj odstavka ni mogoče shraniti. Za nov odstavek pritisnite Enter. @@ -135,10 +134,4 @@ Tega dokumenta ni mogoče urejati. Urejanje ne more segati prek slike ali tabele. To urejanje tukaj ni mogoče. - - %d celica s formulo prikazuje rezultat, ki ga je vaše urejanje naredilo zastarelega. Shranjena datoteka ohrani formulo, program za preglednice pa jo znova izračuna. - %d celici s formulo prikazujeta rezultata, ki ju je vaše urejanje naredilo zastarela. Shranjena datoteka ohrani formuli, program za preglednice pa ju znova izračuna. - %d celice s formulo prikazujejo rezultate, ki jih je vaše urejanje naredilo zastarele. Shranjena datoteka ohrani formule, program za preglednice pa jih znova izračuna. - %d celic s formulo prikazuje rezultate, ki jih je vaše urejanje naredilo zastarele. Shranjena datoteka ohrani formule, program za preglednice pa jih znova izračuna. - diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 2dbe7ac2fd74..43bcd9b1b48b 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -124,7 +124,6 @@ Pro En del av Pro Fet, kursiv, färger och textstorlek, samt att lägga till eller slå ihop stycken, ingår i OpenDocument Reader Pro. Överstrykningen finns i alla versioner. - Fet, kursiv, färger, textstorlek och justering av celler ingår i OpenDocument Reader Pro. Fyllningen finns i alla versioner. Understrykning, genomstrykning och att rita i en PDF ingår i OpenDocument Reader Pro. Överstrykningen finns i alla versioner. Inte nu En radbrytning inuti ett stycke kan inte sparas. Tryck på Enter för ett nytt stycke. @@ -135,8 +134,4 @@ Det här dokumentet kan inte redigeras. En redigering kan inte sträcka sig över en bild eller en tabell. Den redigeringen är inte möjlig här. - - %d formelcell visar ett resultat som din redigering har gjort inaktuellt. Den sparade filen behåller formeln, och ett kalkylprogram räknar ut den igen. - %d formelceller visar resultat som din redigering har gjort inaktuella. Den sparade filen behåller formlerna, och ett kalkylprogram räknar ut dem igen. - diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 676a9c63b7b7..8e299cd19379 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -124,7 +124,6 @@ Pro Pro\'nun bir parçası Kalın, italik, renkler ve metin boyutu ile paragraf ekleme veya birleştirme OpenDocument Reader Pro\'ya özeldir. Vurgulayıcı her sürümde kullanılabilir. - Hücrelerde kalın, italik, renkler, metin boyutu ve hizalama OpenDocument Reader Pro\'ya özeldir. Dolgu her sürümde kullanılabilir. PDF\'de altını çizme, üstünü çizme ve çizim yapma OpenDocument Reader Pro\'ya özeldir. Vurgulayıcı her sürümde kullanılabilir. Şimdi değil Paragraf içindeki bir satır sonu kaydedilemez. Yeni paragraf için Enter tuşuna basın. @@ -135,8 +134,4 @@ Bu belge düzenlenemez. Bir düzenleme bir resmin veya tablonun üzerinden geçemez. Bu düzenleme burada mümkün değil. - - %d formül hücresi, düzenlemenizin eskittiği bir sonuç gösteriyor. Kaydedilen dosya formülü korur ve bir hesap tablosu uygulaması onu yeniden hesaplar. - %d formül hücresi, düzenlemenizin eskittiği sonuçlar gösteriyor. Kaydedilen dosya formülleri korur ve bir hesap tablosu uygulaması onları yeniden hesaplar. - diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index 54e6a5d70ab8..c34dd84fbea4 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -124,7 +124,6 @@ Pro Pro 功能 粗体、斜体、颜色和文字大小,以及添加或合并段落,均为 OpenDocument Reader Pro 的功能。突出显示在所有版本中均可使用。 - 单元格的粗体、斜体、颜色、文字大小和对齐方式均为 OpenDocument Reader Pro 的功能。填充在所有版本中均可使用。 在 PDF 上添加下划线、删除线和绘图均为 OpenDocument Reader Pro 的功能。突出显示在所有版本中均可使用。 以后再说 段落内的换行无法保存。按 Enter 键可新建段落。 @@ -135,7 +134,4 @@ 此文档无法编辑。 编辑不能跨越图片或表格。 此处无法进行该编辑。 - - %d 个公式单元格显示的结果因您的编辑而过时。保存的文件会保留公式,电子表格应用会重新计算。 - diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 3cbe74537688..4f690985f6be 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -119,6 +119,15 @@ Center Align right Justify + + Rows and columns + Insert rows above + Insert rows below + Delete rows + Insert columns left + Insert columns right + Delete columns %1$s color @@ -142,7 +151,7 @@ free of it in both kinds of document, so that the mode is worth opening --> Part of Pro Bold, italic, colors and text size, and adding or joining paragraphs, are part of OpenDocument Reader Pro. The highlighter is in every edition. - Bold, italic, colors, text size and alignment of cells are part of OpenDocument Reader Pro. The fill is in every edition. + Bold, italic, colors, text size and alignment of cells, and inserting or deleting rows and columns, are part of OpenDocument Reader Pro. The fill is in every edition. Underlining, striking out and drawing on a PDF are part of OpenDocument Reader Pro. The highlighter is in every edition. Not now @@ -154,9 +163,10 @@ This document cannot be edited. An edit cannot reach over a picture or a table. That edit is not possible here. + Only part of this sheet is shown, so it cannot be edited here. - %d formula cell shows a result your edit made out of date. The saved file keeps the formula, and a spreadsheet app computes it again. - %d formula cells show results your edit made out of date. The saved file keeps the formulas, and a spreadsheet app computes them again. + %d formula cell shows a result your edit made out of date. Saving computes it again where it can. + %d formula cells show results your edit made out of date. Saving computes them again where it can. diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index b8e22b7648cb..7f65501b96f1 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -5,7 +5,7 @@ googleJavaFormat = "1.35.0" ktfmt = "0.64" # odrcore's JNI bindings, java and native in one AAR, published from OpenDocument.core -odrCore = "7.4.0" +odrCore = "7.5.2" androidxAnnotation = "1.11.0" androidxAppcompat = "1.8.0"