From ea62d02cedd7b6c90ebcb0ce73e30dc6ddd342c8 Mon Sep 17 00:00:00 2001 From: Mert Tümer Date: Fri, 25 May 2018 15:15:29 +0300 Subject: [Pardus] tdf#106371 ability to insert/delete tables Android Viewer MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This patch is sponsored by ULAKBIM/PARDUS project. Signed-off-by: Mert Tümer Change-Id: I2d160b53ad432be96deb6f13c0d91a6053744dc8 Reviewed-on: https://gerrit.libreoffice.org/54803 Tested-by: Jenkins Reviewed-by: Thorsten Behrens --- .../source/res/drawable/ic_grid_off_black_24dp.xml | 9 ++ .../source/res/drawable/ic_grid_on_black_24dp.xml | 9 ++ android/source/res/layout/number_picker.xml | 130 ++++++++++++++++ android/source/res/layout/toolbar_bottom.xml | 20 +++ android/source/res/values/strings.xml | 16 ++ .../java/org/libreoffice/FormattingController.java | 164 +++++++++++++++++++++ 6 files changed, 348 insertions(+) create mode 100644 android/source/res/drawable/ic_grid_off_black_24dp.xml create mode 100644 android/source/res/drawable/ic_grid_on_black_24dp.xml create mode 100644 android/source/res/layout/number_picker.xml (limited to 'android') diff --git a/android/source/res/drawable/ic_grid_off_black_24dp.xml b/android/source/res/drawable/ic_grid_off_black_24dp.xml new file mode 100644 index 000000000000..7cf3c950cc4b --- /dev/null +++ b/android/source/res/drawable/ic_grid_off_black_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/android/source/res/drawable/ic_grid_on_black_24dp.xml b/android/source/res/drawable/ic_grid_on_black_24dp.xml new file mode 100644 index 000000000000..b2ff9e5be07b --- /dev/null +++ b/android/source/res/drawable/ic_grid_on_black_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/android/source/res/layout/number_picker.xml b/android/source/res/layout/number_picker.xml new file mode 100644 index 000000000000..51463926c70f --- /dev/null +++ b/android/source/res/layout/number_picker.xml @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/android/source/res/layout/toolbar_bottom.xml b/android/source/res/layout/toolbar_bottom.xml index d944b2713f2a..d1476a57fa57 100644 --- a/android/source/res/layout/toolbar_bottom.xml +++ b/android/source/res/layout/toolbar_bottom.xml @@ -366,6 +366,26 @@ android:paddingBottom="12dp" android:paddingTop="12dp" app:srcCompat="@drawable/ic_folder_black_24dp" /> + + + + diff --git a/android/source/res/values/strings.xml b/android/source/res/values/strings.xml index 2a4ca0ab4e21..cbbce88d158c 100644 --- a/android/source/res/values/strings.xml +++ b/android/source/res/values/strings.xml @@ -179,5 +179,21 @@ Cut Back Text copied to the clipboard + Insert table + Select insert options: + Select delete options: + + + Insert Rows Before + Insert Rows After + Insert Columns Before + Insert Columns After + Insert Table + + + Delete Rows + Delete Columns + Delete Table + diff --git a/android/source/src/java/org/libreoffice/FormattingController.java b/android/source/src/java/org/libreoffice/FormattingController.java index 0ba72cf50875..0f49a57de997 100644 --- a/android/source/src/java/org/libreoffice/FormattingController.java +++ b/android/source/src/java/org/libreoffice/FormattingController.java @@ -14,8 +14,10 @@ import android.provider.MediaStore; import android.support.design.widget.Snackbar; import android.support.v4.content.FileProvider; import android.util.Log; +import android.view.LayoutInflater; import android.view.View; import android.widget.ImageButton; +import android.widget.TextView; import org.json.JSONException; import org.json.JSONObject; @@ -61,6 +63,9 @@ class FormattingController implements View.OnClickListener { mContext.findViewById(R.id.button_insert_rect).setOnClickListener(this); mContext.findViewById(R.id.button_insert_picture).setOnClickListener(this); + mContext.findViewById(R.id.button_insert_table).setOnClickListener(this); + mContext.findViewById(R.id.button_delete_table).setOnClickListener(this); + mContext.findViewById(R.id.button_font_shrink).setOnClickListener(this); mContext.findViewById(R.id.button_font_grow).setOnClickListener(this); @@ -132,6 +137,12 @@ class FormattingController implements View.OnClickListener { break; case R.id.button_insert_picture: insertPicture(); + case R.id.button_insert_table: + insertTable(); + break; + case R.id.button_delete_table: + deleteTable(); + break; } } @@ -208,6 +219,159 @@ class FormattingController implements View.OnClickListener { builder.show(); } + private void insertTable() { + final AlertDialog.Builder insertTableBuilder = new AlertDialog.Builder(mContext); + insertTableBuilder.setTitle(R.string.insert_table); + LayoutInflater layoutInflater = mContext.getLayoutInflater(); + View numberPicker = layoutInflater.inflate(R.layout.number_picker, null); + final int minValue = 1; + final int maxValue = 20; + TextView npRowPositive = numberPicker.findViewById(R.id.number_picker_rows_positive); + TextView npRowNegative = numberPicker.findViewById(R.id.number_picker_rows_negative); + TextView npColPositive = numberPicker.findViewById(R.id.number_picker_cols_positive); + TextView npColNegative = numberPicker.findViewById(R.id.number_picker_cols_negative); + final TextView npRowCount = numberPicker.findViewById(R.id.number_picker_row_count); + final TextView npColCount = numberPicker.findViewById(R.id.number_picker_col_count); + + View.OnClickListener positiveButtonClickListener = new View.OnClickListener() { + @Override + public void onClick(View v) { + int rowCount = Integer.parseInt(npRowCount.getText().toString()); + int colCount = Integer.parseInt(npColCount.getText().toString()); + switch (v.getId()){ + case R.id.number_picker_rows_positive: + if(rowCount < maxValue) + npRowCount.setText(String.valueOf(++rowCount)); + break; + case R.id.number_picker_cols_positive: + if(colCount < maxValue) + npColCount.setText(String.valueOf(++colCount)); + break; + } + } + }; + + View.OnClickListener negativeButtonClickListener = new View.OnClickListener() { + @Override + public void onClick(View v) { + int rowCount = Integer.parseInt(npRowCount.getText().toString()); + int colCount = Integer.parseInt(npColCount.getText().toString()); + switch (v.getId()){ + case R.id.number_picker_rows_negative: + if(rowCount > minValue) + npRowCount.setText(String.valueOf(--rowCount)); + break; + case R.id.number_picker_cols_negative: + if(colCount > minValue) + npColCount.setText(String.valueOf(--colCount)); + break; + } + } + }; + + npRowPositive.setOnClickListener(positiveButtonClickListener); + npColPositive.setOnClickListener(positiveButtonClickListener); + npRowNegative.setOnClickListener(negativeButtonClickListener); + npColNegative.setOnClickListener(negativeButtonClickListener); + + insertTableBuilder.setView(numberPicker); + insertTableBuilder.setNeutralButton("Cancel", null); + insertTableBuilder.setPositiveButton("OK", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + + try { + JSONObject cols = new JSONObject(); + cols.put("type", "long"); + cols.put("value", Integer.valueOf(npColCount.getText().toString())); + JSONObject rows = new JSONObject(); + rows.put("type","long"); + rows.put("value",Integer.valueOf(npRowCount.getText().toString())); + JSONObject params = new JSONObject(); + params.put("Columns", cols); + params.put("Rows", rows); + LOKitShell.sendEvent(new LOEvent(LOEvent.UNO_COMMAND, ".uno:InsertTable",params.toString())); + LibreOfficeMainActivity.setDocumentChanged(true); + } catch (JSONException e) { + e.printStackTrace(); + } + + } + }); + + AlertDialog.Builder insertBuilder = new AlertDialog.Builder(mContext); + insertBuilder.setTitle(R.string.select_insert_options); + insertBuilder.setNeutralButton("Cancel", null); + final int[] selectedItem = new int[1]; + insertBuilder.setSingleChoiceItems(mContext.getResources().getStringArray(R.array.insertrowscolumns), -1, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + selectedItem[0] = which; + } + }); + insertBuilder.setPositiveButton("OK", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + switch (selectedItem[0]){ + case 0: + LOKitShell.sendEvent(new LOEvent(LOEvent.UNO_COMMAND, ".uno:InsertRowsBefore")); + LibreOfficeMainActivity.setDocumentChanged(true); + break; + case 1: + LOKitShell.sendEvent(new LOEvent(LOEvent.UNO_COMMAND, ".uno:InsertRowsAfter")); + LibreOfficeMainActivity.setDocumentChanged(true); + break; + case 2: + LOKitShell.sendEvent(new LOEvent(LOEvent.UNO_COMMAND, ".uno:InsertColumnsBefore")); + LibreOfficeMainActivity.setDocumentChanged(true); + break; + case 3: + LOKitShell.sendEvent(new LOEvent(LOEvent.UNO_COMMAND, ".uno:InsertColumnsAfter")); + LibreOfficeMainActivity.setDocumentChanged(true); + break; + case 4: + insertTableBuilder.show(); + break; + + } + } + }); + insertBuilder.show(); + } + + private void deleteTable() { + AlertDialog.Builder deleteBuilder = new AlertDialog.Builder(mContext); + deleteBuilder.setTitle(R.string.select_delete_options); + deleteBuilder.setNeutralButton("Cancel",null); + final int[] selectedItem = new int[1]; + deleteBuilder.setSingleChoiceItems(mContext.getResources().getStringArray(R.array.deleterowcolumns), -1, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + selectedItem[0] = which; + } + }); + deleteBuilder.setPositiveButton("OK", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + switch (selectedItem[0]){ + case 0: + LOKitShell.sendEvent(new LOEvent(LOEvent.UNO_COMMAND, ".uno:DeleteRows")); + LibreOfficeMainActivity.setDocumentChanged(true); + break; + case 1: + LOKitShell.sendEvent(new LOEvent(LOEvent.UNO_COMMAND, ".uno:DeleteColumns")); + LibreOfficeMainActivity.setDocumentChanged(true); + break; + case 2: + LOKitShell.sendEvent(new LOEvent(LOEvent.UNO_COMMAND, ".uno:DeleteTable")); + LibreOfficeMainActivity.setDocumentChanged(true); + break; + } + } + }); + deleteBuilder.show(); + } + private void sendImagePickingIntent() { Intent intent = new Intent(); intent.setType("image/*"); -- cgit v1.2.3