Переглянути джерело

PDFTools(Android) - 1.ListBox 列表

liuxiaolong 1 рік тому
батько
коміт
001986caa0

BIN
compdfkit-repo/compdfkit-ui/ComPDFKit-UI.aar


BIN
compdfkit-repo/compdfkit/ComPDFKit.aar


+ 9 - 9
compdfkit-tools/src/main/java/com/compdfkit/tools/common/contextmenu/CListBoxContextMenuView.java

@@ -1,6 +1,6 @@
 /**
  * Copyright © 2014-2023 PDF Technologies, Inc. All Rights Reserved.
- *
+ * <p>
  * THIS SOURCE CODE AND ANY ACCOMPANYING DOCUMENTATION ARE PROTECTED BY INTERNATIONAL COPYRIGHT LAW
  * AND MAY NOT BE RESOLD OR REDISTRIBUTED. USAGE IS BOUND TO THE ComPDFKit LICENSE AGREEMENT.
  * UNAUTHORIZED REPRODUCTION OR DISTRIBUTION IS SUBJECT TO CIVIL AND CRIMINAL PENALTIES.
@@ -40,20 +40,20 @@ public class CListBoxContextMenuView implements ContextMenuListBoxProvider {
         menuView.addItem(R.string.tools_edit, v -> {
             CPDFWidgetItems widgetItems = (CPDFWidgetItems) listBoxWidgetImpl.onGetAnnotation();
             CListBoxEditFragment editFragment = CListBoxEditFragment.newInstance();
-            CPDFWidgetItem[] items = widgetItems.getOptions();
-            if (items != null && items.length > 0){
-                editFragment.setListBoxItems(Arrays.asList(items));
-            }
-            editFragment.setEditListListener(widgetItems1 -> {
-//                widgetItems.setOptionItems(Collections.);
+            editFragment.setPdfWidgetItems(widgetItems);
+            editFragment.setEditListListener((widgetItems1, selectedIndexs1) -> {
+                widgetItems.setOptionItems(widgetItems1, selectedIndexs1);
+                widgetItems.updateAp();
+                listBoxWidgetImpl.onAnnotAttrChange();
+                pageView.invalidate();
             });
-            if (helper.getReaderView().getContext() instanceof FragmentActivity){
+            if (helper.getReaderView().getContext() instanceof FragmentActivity) {
                 FragmentActivity fragmentActivity = (FragmentActivity) helper.getReaderView().getContext();
                 editFragment.show(fragmentActivity.getSupportFragmentManager(), "editFragment");
             }
             helper.dismissContextMenu();
         });
-        menuView.addItem(R.string.tools_context_menu_attribute,v -> {
+        menuView.addItem(R.string.tools_context_menu_attribute, v -> {
             CStyleManager styleManager = new CStyleManager(listBoxWidgetImpl, pageView);
             CAnnotStyle style = styleManager.getStyle(CStyleType.FORM_LIST_BOX);
             CStyleDialogFragment styleDialogFragment = CStyleDialogFragment.newInstance(style);

+ 4 - 0
compdfkit-tools/src/main/java/com/compdfkit/tools/common/utils/dialog/CCommonInputDialog.java

@@ -101,6 +101,10 @@ public class CCommonInputDialog extends AppCompatDialog {
         etMessage.setHint(hintMessageText);
     }
 
+    public void setEditTextValue(String value){
+        etMessage.setText(value);
+    }
+
     public void setCancelCallback(String cancelText, OnCancelClickListener cancelClickListener) {
         btnCancel.setText(cancelText);
         this.cancelClickListener = cancelClickListener;

+ 19 - 19
compdfkit-tools/src/main/java/com/compdfkit/tools/viewer/pdfbookmark/dialog/CEditBookmarkDialog.java

@@ -7,7 +7,7 @@
  * This notice may not be removed from this file.
  */
 
-package com.compdfkit.tools.viewer.pdfbookmark.dialog;
+package com.compdfkit.tools.common.utils.dialog;
 
 import android.app.Dialog;
 import android.content.Context;
@@ -29,24 +29,24 @@ import com.compdfkit.tools.R;
 import com.compdfkit.tools.common.utils.viewutils.CViewUtils;
 
 
-public class CEditBookmarkDialog extends DialogFragment {
+public class CEditDialog extends DialogFragment {
 
-    private static final String EXTRA_BOOKMARK_INFO = "extra_bookmark_info";
+    private static final String EXTRA_EDIT_TEXT_INFO = "extra_edit_text_info";
 
     private AppCompatTextView tvTitle;
 
-    private AppCompatEditText etBookmark;
+    private AppCompatEditText editText;
 
     private Button btnCancel;
 
     private Button btnAdd;
 
-    private OnEditBookmarkListener editBookmarkListener;
+    private OnEditBookmarkListener editListener;
 
-    public static CEditBookmarkDialog newInstance(String bookmarkInfo) {
-        CEditBookmarkDialog dialog = new CEditBookmarkDialog();
+    public static CEditDialog newInstance(String editTextInfo) {
+        CEditDialog dialog = new CEditDialog();
         Bundle bundle = new Bundle();
-        bundle.putString(EXTRA_BOOKMARK_INFO, bookmarkInfo);
+        bundle.putString(EXTRA_EDIT_TEXT_INFO, editTextInfo);
         dialog.setArguments(bundle);
         return dialog;
     }
@@ -58,7 +58,7 @@ public class CEditBookmarkDialog extends DialogFragment {
             getDialog().getWindow().setBackgroundDrawableResource(R.drawable.tools_dialog_background);
         }
         View rootView = inflater.inflate(R.layout.tools_bota_bookmark_input_dialog, container, false);
-        etBookmark = rootView.findViewById(R.id.tv_message);
+        editText = rootView.findViewById(R.id.tv_message);
         tvTitle = rootView.findViewById(R.id.tv_title);
         btnCancel = rootView.findViewById(R.id.btn_cancel);
         btnAdd = rootView.findViewById(R.id.btn_add);
@@ -69,17 +69,17 @@ public class CEditBookmarkDialog extends DialogFragment {
     public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
         super.onViewCreated(view, savedInstanceState);
         if (getArguments() != null) {
-            String defaultTitle = getArguments().getString(EXTRA_BOOKMARK_INFO);
-            etBookmark.setText(defaultTitle);
-            etBookmark.setSelection(defaultTitle.length());
+            String defaultTitle = getArguments().getString(EXTRA_EDIT_TEXT_INFO);
+            editText.setText(defaultTitle);
+            editText.setSelection(defaultTitle.length());
         }
-        CViewUtils.showKeyboard(etBookmark);
+        CViewUtils.showKeyboard(editText);
         btnCancel.setOnClickListener(v -> dismiss());
         btnAdd.setOnClickListener(v -> {
-            String title = etBookmark.getText().toString().trim();
-            if (!TextUtils.isEmpty(title)) {
-                if (editBookmarkListener != null) {
-                    editBookmarkListener.edit(title);
+            if (!TextUtils.isEmpty(editText.getText())) {
+                String title = editText.getText().toString().trim();
+                if (editListener != null) {
+                    editListener.edit(title);
                 }
             }
         });
@@ -105,8 +105,8 @@ public class CEditBookmarkDialog extends DialogFragment {
         };
     }
 
-    public void setEditBookmarkListener(OnEditBookmarkListener editBookmarkListener) {
-        this.editBookmarkListener = editBookmarkListener;
+    public void setEditListener(OnEditBookmarkListener editListener) {
+        this.editListener = editListener;
     }
 
     public interface OnEditBookmarkListener {

+ 68 - 8
compdfkit-tools/src/main/java/com/compdfkit/tools/form/pdfproperties/pdflistbox/CListBoxEditFragment.java

@@ -24,14 +24,20 @@ import androidx.recyclerview.widget.LinearLayoutManager;
 import androidx.recyclerview.widget.RecyclerView;
 
 import com.compdfkit.core.annotation.form.CPDFWidgetItem;
+import com.compdfkit.core.annotation.form.CPDFWidgetItems;
 import com.compdfkit.tools.R;
+import com.compdfkit.tools.common.utils.dialog.CCommonInputDialog;
 import com.compdfkit.tools.common.utils.dialog.CDialogFragmentUtil;
+import com.compdfkit.tools.common.utils.dialog.CEditDialog;
+import com.compdfkit.tools.common.utils.viewutils.CViewUtils;
+import com.compdfkit.tools.common.utils.window.CPopupMenuWindow;
 import com.compdfkit.tools.common.views.CToolBar;
 import com.google.android.material.bottomsheet.BottomSheetBehavior;
 import com.google.android.material.bottomsheet.BottomSheetDialogFragment;
 import com.google.android.material.floatingactionbutton.FloatingActionButton;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 import java.util.UUID;
 
@@ -45,7 +51,7 @@ public class CListBoxEditFragment extends BottomSheetDialogFragment {
 
     private AppCompatButton btnDone;
 
-    private List<CPDFWidgetItem> listBoxItems = new ArrayList<>();
+    private CPDFWidgetItems pdfWidgetItems;
 
     private CListBoxItemsAdapter itemsAdapter;
 
@@ -58,8 +64,8 @@ public class CListBoxEditFragment extends BottomSheetDialogFragment {
         return fragment;
     }
 
-    public void setListBoxItems(List<CPDFWidgetItem> list) {
-        this.listBoxItems.addAll(list);
+    public void setPdfWidgetItems(CPDFWidgetItems pdfWidgetItems) {
+        this.pdfWidgetItems = pdfWidgetItems;
     }
 
     @Override
@@ -67,7 +73,11 @@ public class CListBoxEditFragment extends BottomSheetDialogFragment {
         super.onStart();
         BottomSheetBehavior<View> behavior = BottomSheetBehavior.from((View) getView().getParent());
         CDialogFragmentUtil.setBottomSheetDialogFragmentFullScreen(getDialog(), behavior);
-        CDialogFragmentUtil.setDimAmount(getDialog(), 0F);
+        if (CViewUtils.isLandScape(getContext())){
+            CDialogFragmentUtil.setDimAmount(getDialog(), 2F);
+        }else {
+            CDialogFragmentUtil.setDimAmount(getDialog(), 0F);
+        }
     }
 
     @Nullable
@@ -85,13 +95,47 @@ public class CListBoxEditFragment extends BottomSheetDialogFragment {
     public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
         super.onViewCreated(view, savedInstanceState);
         itemsAdapter = new CListBoxItemsAdapter();
-        itemsAdapter.setList(listBoxItems);
+        itemsAdapter.setList(getItems());
+        itemsAdapter.addOnItemChildClickListener(R.id.iv_more, (adapter, view1, position) -> {
+            CPDFWidgetItem item = adapter.list.get(position);
+            CPopupMenuWindow menuWindow = new CPopupMenuWindow(getContext());
+            menuWindow.addItem(R.string.tools_edit, v1 -> {
+                CEditDialog editDialog = CEditDialog.newInstance(item.text);
+                editDialog.setEditListener(text -> {
+                    item.text = text;
+                    item.value = text;
+                    itemsAdapter.notifyItemChanged(position, "REFRESH");
+                    editDialog.dismiss();
+                });
+                editDialog.show(getChildFragmentManager(), "editDialog");
+            });
+            menuWindow.addItem(R.string.tools_delete, v1 -> {
+                itemsAdapter.remove(position);
+                menuWindow.dismiss();
+            });
+            menuWindow.showAsDropDown(view1);
+        });
+
+
         rvList.setLayoutManager(new LinearLayoutManager(getContext()));
         rvList.setAdapter(itemsAdapter);
         toolBar.setBackBtnClickListener(v -> dismiss());
         btnDone.setOnClickListener(v -> {
             if (editListListener != null) {
-                editListListener.widgets(itemsAdapter.list);
+                CPDFWidgetItem[] items = new CPDFWidgetItem[itemsAdapter.getItemCount()];
+                itemsAdapter.list.toArray(items);
+                int[] selectedIndexs = null;
+                CPDFWidgetItem selectedItem = getSelectedItem();
+                if (selectedItem != null){
+                    for (int i = 0; i < items.length; i++) {
+                        CPDFWidgetItem widgetItem = items[i];
+                        if (widgetItem.text.equals(selectedItem.text)){
+                            selectedIndexs = new int[1];
+                            selectedIndexs[0] = i;
+                        }
+                    }
+                }
+                editListListener.widgets(items, selectedIndexs);
             }
             dismiss();
         });
@@ -105,11 +149,27 @@ public class CListBoxEditFragment extends BottomSheetDialogFragment {
         });
     }
 
+    private CPDFWidgetItem getSelectedItem(){
+        int[] selectedIndexs = pdfWidgetItems.getSelectedIndexes();
+        CPDFWidgetItem selectedItem = null;
+        if (selectedIndexs != null && selectedIndexs.length > 0){
+            selectedItem = pdfWidgetItems.getOptionByIndex(selectedIndexs[0]);
+        }
+        return selectedItem;
+    }
+
+    private List<CPDFWidgetItem> getItems(){
+        if (pdfWidgetItems == null || pdfWidgetItems.getOptions() == null){
+            return new ArrayList<>();
+        }
+        return Arrays.asList(pdfWidgetItems.getOptions());
+    }
+
     public void setEditListListener(OnEditListListener editListListener) {
         this.editListListener = editListListener;
     }
 
-    public interface OnEditListListener{
-        void widgets(List<CPDFWidgetItem> widgetItems);
+    public interface OnEditListListener {
+        void widgets(CPDFWidgetItem[] widgetItems, int[] selectedIndexs);
     }
 }

+ 14 - 0
compdfkit-tools/src/main/java/com/compdfkit/tools/form/pdfproperties/pdflistbox/CListBoxItemsAdapter.java

@@ -12,11 +12,16 @@ package com.compdfkit.tools.form.pdfproperties.pdflistbox;
 import android.content.Context;
 import android.view.ViewGroup;
 
+import androidx.cardview.widget.CardView;
+import androidx.core.content.ContextCompat;
+
 import com.compdfkit.core.annotation.form.CPDFWidgetItem;
 import com.compdfkit.tools.R;
 import com.compdfkit.tools.common.utils.adapter.CBaseQuickAdapter;
 import com.compdfkit.tools.common.utils.adapter.CBaseQuickViewHolder;
 
+import java.util.List;
+
 
 public class CListBoxItemsAdapter extends CBaseQuickAdapter<CPDFWidgetItem, CBaseQuickViewHolder> {
 
@@ -30,4 +35,13 @@ public class CListBoxItemsAdapter extends CBaseQuickAdapter<CPDFWidgetItem, CBas
         holder.setText(R.id.tv_title, item.text);
 
     }
+
+    @Override
+    protected void onBindViewHolder(CBaseQuickViewHolder holder, int position, CPDFWidgetItem item, List<Object> payloads) {
+        if (payloads.isEmpty()) {
+            super.onBindViewHolder(holder, position, item, payloads);
+        } else {
+            onBindViewHolder(holder, position, item);
+        }
+    }
 }

+ 5 - 5
compdfkit-tools/src/main/java/com/compdfkit/tools/viewer/pdfbookmark/CPDFBookmarkFragment.java

@@ -30,7 +30,7 @@ import com.compdfkit.tools.R;
 import com.compdfkit.tools.common.interfaces.COnSetPDFDisplayPageIndexListener;
 import com.compdfkit.tools.common.views.pdfview.CPDFViewCtrl;
 import com.compdfkit.tools.viewer.pdfbookmark.adapter.CPDFBookmarkListAdapter;
-import com.compdfkit.tools.viewer.pdfbookmark.dialog.CEditBookmarkDialog;
+import com.compdfkit.tools.common.utils.dialog.CEditDialog;
 import com.google.android.material.floatingactionbutton.FloatingActionButton;
 
 import java.util.ArrayList;
@@ -90,8 +90,8 @@ public class CPDFBookmarkFragment extends Fragment {
         });
 
         bookmarkListAdapter.setEditBookmarkClickListener((bookmark, index) -> {
-            CEditBookmarkDialog editBookmarkDialog = CEditBookmarkDialog.newInstance(bookmark.getTitle());
-            editBookmarkDialog.setEditBookmarkListener(title -> {
+            CEditDialog editBookmarkDialog = CEditDialog.newInstance(bookmark.getTitle());
+            editBookmarkDialog.setEditListener(title -> {
                 if (pdfView != null) {
                     pdfView.getCPdfReaderView().getPDFDocument().getBookmarks()
                             .get(index)
@@ -110,8 +110,8 @@ public class CPDFBookmarkFragment extends Fragment {
                 Toast.makeText(getContext(), getString(R.string.tools_has_bookmark), Toast.LENGTH_SHORT).show();
                 return;
             }
-            CEditBookmarkDialog editBookmarkDialog = CEditBookmarkDialog.newInstance("");
-            editBookmarkDialog.setEditBookmarkListener(title -> {
+            CEditDialog editBookmarkDialog = CEditDialog.newInstance("");
+            editBookmarkDialog.setEditListener(title -> {
                 if (pdfView != null) {
                     int pageIndex = pdfView.currentPageIndex;
                     pdfView.getCPdfReaderView().getPDFDocument().addBookmark(new CPDFBookmark(

+ 1 - 0
compdfkit-tools/src/main/res/values/tools_strings.xml

@@ -268,6 +268,7 @@
     <string name="tools_check_box_start">Star</string>
     <string name="tools_check_radio_button">Radio Button</string>
     <string name="tools_check_list_box">List Box</string>
+    <string name="tools_add_list_box">Add List Box</string>
     <!-- Form End!!!-->
 
     <string name="tools_page_edit_toolbar_title">Page Edit</string>