branch develop updated (94eb3a90 -> 0d405ec6)
This is an automated email from the git hooks/post-receive script. New change to branch develop in repository faxtomail. See https://gitlab.nuiton.org/codelutin/faxtomail.git from 94eb3a90 refs #9986 new 0d405ec6 fixes #10003 : Plus derepérage dans la liste après déplacer ou archiver The 1 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference. Detailed log of new commits: commit 0d405ec64d424fb4d0d1890016cf3ba4bb2844fd Author: jcouteau <couteau@codelutin.com> Date: Wed Jul 4 10:14:51 2018 +0200 fixes #10003 : Plus derepérage dans la liste après déplacer ou archiver Summary of changes: .../demande/actions/ArchiveFromListAction.java | 19 +++--- .../demande/actions/LoadFolderEmailsAction.java | 60 ++++++++++++++-- .../demande/actions/SaveDemandeFromListAction.java | 79 ++++++++++++++++++++++ .../content/transmit/actions/TransmitAction.java | 12 ++-- 4 files changed, 150 insertions(+), 20 deletions(-) -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository faxtomail. See https://gitlab.nuiton.org/codelutin/faxtomail.git commit 0d405ec64d424fb4d0d1890016cf3ba4bb2844fd Author: jcouteau <couteau@codelutin.com> Date: Wed Jul 4 10:14:51 2018 +0200 fixes #10003 : Plus derepérage dans la liste après déplacer ou archiver --- .../demande/actions/ArchiveFromListAction.java | 19 +++--- .../demande/actions/LoadFolderEmailsAction.java | 60 ++++++++++++++-- .../demande/actions/SaveDemandeFromListAction.java | 79 ++++++++++++++++++++++ .../content/transmit/actions/TransmitAction.java | 12 ++-- 4 files changed, 150 insertions(+), 20 deletions(-) diff --git a/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/actions/ArchiveFromListAction.java b/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/actions/ArchiveFromListAction.java index f52f524e..d20805a9 100644 --- a/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/actions/ArchiveFromListAction.java +++ b/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/actions/ArchiveFromListAction.java @@ -56,17 +56,17 @@ public class ArchiveFromListAction extends SaveDemandeFromListAction { @Override public boolean prepareAction() throws Exception { - boolean result = super.prepareAction(); + boolean result; - demandsToArchive = new ArrayList<DemandeUIModel>(); + demandsToArchive = new ArrayList<>(); List<DemandeUIModel> currentEmails = getModel().getSelectedEmails(); - String notArchivableDemandTitles = ""; + StringBuilder notArchivableDemandTitles = new StringBuilder(); for (DemandeUIModel demandeUIModel : currentEmails) { // is the demand archivable? if (!demandeUIModel.isEditable() || !handler.isActionEnabled(demandeUIModel, MailAction.ARCHIVE)) { - notArchivableDemandTitles += "- " + demandeUIModel.getTitle() + "<br/>"; + notArchivableDemandTitles.append("- ").append(demandeUIModel.getTitle()).append("<br/>"); } else { demandsToArchive.add(demandeUIModel); @@ -75,13 +75,13 @@ public class ArchiveFromListAction extends SaveDemandeFromListAction { if (demandsToArchive.isEmpty()) { displayWarningMessage(t("faxtomail.alert.noDemandToArchive.title"), - t("faxtomail.alert.noDemandToArchive.message", notArchivableDemandTitles)); + t("faxtomail.alert.noDemandToArchive.message", notArchivableDemandTitles.toString())); result = false; } else { String message; - if (!notArchivableDemandTitles.isEmpty()) { - message = t("faxtomail.alert.archivesWithNotArchivableConfirmation.message", notArchivableDemandTitles); + if (notArchivableDemandTitles.length() > 0) { + message = t("faxtomail.alert.archivesWithNotArchivableConfirmation.message", notArchivableDemandTitles.toString()); } else if (demandsToArchive.size() == 1) { message = t("faxtomail.alert.archiveConfirmation.message"); @@ -98,7 +98,7 @@ public class ArchiveFromListAction extends SaveDemandeFromListAction { result = i == JOptionPane.YES_OPTION; } - return result; + return result && super.prepareAction(); } @Override @@ -144,14 +144,13 @@ public class ArchiveFromListAction extends SaveDemandeFromListAction { @Override public void postSuccessAction() { - super.postSuccessAction(); List<DemandeUIModel> selectedEmails = getModel().getSelectedEmails(); getModel().removeEmails(selectedEmails); //FIXME enlever la rustine if (getContext().isUseFolderCache()) { getContext().getCurrentFolderEmails().removeAllDemands(selectedEmails); } - getModel().setSelectedEmails(null); + super.postSuccessAction(); } } diff --git a/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/actions/LoadFolderEmailsAction.java b/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/actions/LoadFolderEmailsAction.java index 50e1651b..97e8bdd8 100644 --- a/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/actions/LoadFolderEmailsAction.java +++ b/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/actions/LoadFolderEmailsAction.java @@ -33,6 +33,7 @@ import com.franciaflex.faxtomail.ui.swing.actions.AbstractFaxToMailAction; import com.franciaflex.faxtomail.ui.swing.content.demande.DemandeListUI; import com.franciaflex.faxtomail.ui.swing.content.demande.DemandeListUIHandler; import com.franciaflex.faxtomail.ui.swing.content.demande.DemandeListUIModel; +import com.franciaflex.faxtomail.ui.swing.content.demande.DemandeUI; import com.franciaflex.faxtomail.ui.swing.content.demande.DemandeUIModel; import com.franciaflex.faxtomail.ui.swing.util.DemandeTableModel; import com.google.common.collect.Maps; @@ -59,6 +60,14 @@ public class LoadFolderEmailsAction extends AbstractFaxToMailAction<DemandeListU private final static Log log = LogFactory.getLog(LoadFolderEmailsAction.class); + protected List<DemandeUIModel> selectedEmails; + + //Ligne de l'élément courant avant rafraichissement + protected int selectedRowBeforeRefresh; + + //première ligne d'une multisélection avant rafraichissement + protected int firstSelectedRowBeforeRefresh; + public LoadFolderEmailsAction(DemandeListUIHandler handler) { super(handler, false); } @@ -70,6 +79,18 @@ public class LoadFolderEmailsAction extends AbstractFaxToMailAction<DemandeListU DemandeListUIModel model = getModel(); MailFolder folder = model.getSelectedFolder(); + //save selections before refresh + JXTable dataTable = getUI().getDataTable(); + DemandeTableModel dataTableModel = (DemandeTableModel) dataTable.getModel(); + selectedEmails = model.getSelectedEmails(); + firstSelectedRowBeforeRefresh = dataTable.getSelectedRow(); + + //Si on travaille sur un current email, on sauve la ligne (pour resélection après refresh) + DemandeUIModel currentEmail = getContext().getCurrentEmail(); + if (currentEmail != null) { + selectedRowBeforeRefresh = dataTableModel.getRowIndex(currentEmail); + } + if (folder == null) { result = false; @@ -77,15 +98,13 @@ public class LoadFolderEmailsAction extends AbstractFaxToMailAction<DemandeListU //FIXME enlever la rustine FaxToMailUIContext.FolderData currentFolderEmails = getContext().getCurrentFolderEmails(); if (getContext().isUseFolderCache() && folder.equals(currentFolderEmails.getFolder())) { - model.setEmails(new ArrayList<DemandeUIModel>(currentFolderEmails.getDemands())); + model.setEmails(new ArrayList<>(currentFolderEmails.getDemands())); PaginationResult<Email> paginationResult = currentFolderEmails.getPaginationResult(); model.setPaginationParameter(paginationResult.getCurrentPage()); model.setPaginationResult(paginationResult); result = false; } else { - final JXTable dataTable = getUI().getDataTable(); - setActionDescription(t("faxtomail.action.loadFolderEmails.tip", folder.getName())); // change name to save the state of the column width for every folder @@ -184,15 +203,44 @@ public class LoadFolderEmailsAction extends AbstractFaxToMailAction<DemandeListU DemandeUIModel currentEmail = getContext().getCurrentEmail(); - if (currentEmail != null) { - JXTable dataTable = getUI().getDataTable(); - DemandeTableModel dataTableModel = (DemandeTableModel) dataTable.getModel(); + //Cherche à resélectionner ce qui était sélectionné avant le refresh (ou l'action provoquant le refresh) + JXTable dataTable = getUI().getDataTable(); + DemandeTableModel dataTableModel = (DemandeTableModel) dataTable.getModel(); + + //Si des emails sont sélectionnés, on les resélectionne + if (selectedEmails != null && !selectedEmails.isEmpty()) { + for (DemandeUIModel email : selectedEmails) { + int row = dataTableModel.getRowIndex(email); + if (row > 0) { + dataTable.addRowSelectionInterval(row, row); + dataTable.scrollRowToVisible(row); + } + } + + //si rien de sélectionné = la sélection a disparu => re-sélectionne la première ligne de l'ancienne sélection + if (dataTable.getSelectedRow() < 0 && firstSelectedRowBeforeRefresh > 0) { + dataTable.addRowSelectionInterval(firstSelectedRowBeforeRefresh, firstSelectedRowBeforeRefresh); + dataTable.scrollRowToVisible(firstSelectedRowBeforeRefresh); + } + + } else if (currentEmail != null) { + //on reselectionne le current email que si pas d'autre sélection (sinon rajoute un élément non sélectionné + //à la sélection, potentiel commportement indésirable pour l'utilisateur ) int row = dataTableModel.getRowIndex(currentEmail); if (row > 0) { dataTable.setRowSelectionInterval(row, row); dataTable.scrollRowToVisible(row); + } else if (selectedRowBeforeRefresh > 0 && selectedRowBeforeRefresh<dataTable.getRowCount()) { + //si on retrouve pas le current email, sélectionne la ligne d'avant refresh + dataTable.setRowSelectionInterval(selectedRowBeforeRefresh, selectedRowBeforeRefresh); + dataTable.scrollRowToVisible(selectedRowBeforeRefresh); + } else if (selectedRowBeforeRefresh > 1 ){ + //si pas possible sélectionne la ligne précédent la ligne d'avant refresh + dataTable.setRowSelectionInterval(selectedRowBeforeRefresh-1, selectedRowBeforeRefresh-1); + dataTable.scrollRowToVisible(selectedRowBeforeRefresh-1); } } + //si pas de sélection ici c'est qu'on ne peut plus rien faire getHandler().resetTimer(); } diff --git a/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/actions/SaveDemandeFromListAction.java b/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/actions/SaveDemandeFromListAction.java index 7394fe5c..f7dc36d9 100644 --- a/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/actions/SaveDemandeFromListAction.java +++ b/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/actions/SaveDemandeFromListAction.java @@ -34,6 +34,10 @@ import com.franciaflex.faxtomail.ui.swing.content.demande.DemandeListUI; import com.franciaflex.faxtomail.ui.swing.content.demande.DemandeListUIHandler; import com.franciaflex.faxtomail.ui.swing.content.demande.DemandeListUIModel; import com.franciaflex.faxtomail.ui.swing.content.demande.DemandeUIModel; +import com.franciaflex.faxtomail.ui.swing.util.DemandeTableModel; +import org.jdesktop.swingx.JXTable; + +import java.util.List; /** * @author Kevin Morin (Code Lutin) @@ -43,6 +47,14 @@ public class SaveDemandeFromListAction extends AbstractFaxToMailAction<DemandeLi protected String[] modifiedProperties; + protected List<DemandeUIModel> selectedEmails; + + //Ligne de l'élément courant avant rafraichissement + protected int selectedRowBeforeRefresh; + + //première ligne d'une multisélection avant rafraichissement + protected int firstSelectedRowBeforeRefresh; + public SaveDemandeFromListAction(DemandeListUIHandler handler) { super(handler, false); } @@ -51,6 +63,25 @@ public class SaveDemandeFromListAction extends AbstractFaxToMailAction<DemandeLi modifiedProperties = properties; } + @Override + public boolean prepareAction() throws Exception { + + //save selections before performing action + DemandeListUIModel model = getModel(); + JXTable dataTable = getUI().getDataTable(); + DemandeTableModel dataTableModel = (DemandeTableModel) dataTable.getModel(); + selectedEmails = model.getSelectedEmails(); + firstSelectedRowBeforeRefresh = dataTable.getSelectedRow(); + + //Si on travaille sur un current email, on sauve la ligne (pour resélection après refresh) + DemandeUIModel currentEmail = getContext().getCurrentEmail(); + if (currentEmail != null) { + selectedRowBeforeRefresh = dataTableModel.getRowIndex(currentEmail); + } + + return super.prepareAction(); + } + @Override public void doAction() throws Exception { FaxToMailUIContext context = getContext(); @@ -70,4 +101,52 @@ public class SaveDemandeFromListAction extends AbstractFaxToMailAction<DemandeLi model.fromEntity(email); } } + + @Override + public void postSuccessAction() { + super.postSuccessAction(); + + DemandeUIModel currentEmail = getContext().getCurrentEmail(); + + //Cherche à resélectionner ce qui était sélectionné avant le refresh (ou l'action provoquant le refresh) + JXTable dataTable = getUI().getDataTable(); + DemandeTableModel dataTableModel = (DemandeTableModel) dataTable.getModel(); + + //Si des emails sont sélectionnés, on les resélectionne + if (selectedEmails != null && !selectedEmails.isEmpty()) { + for (DemandeUIModel email : selectedEmails) { + int row = dataTableModel.getRowIndex(email); + if (row > 0) { + dataTable.addRowSelectionInterval(row, row); + dataTable.scrollRowToVisible(row); + } + } + + //si rien de sélectionné = la sélection a disparu => re-sélectionne la première ligne de l'ancienne sélection + if (dataTable.getSelectedRow() < 0 && firstSelectedRowBeforeRefresh > 0) { + dataTable.addRowSelectionInterval(firstSelectedRowBeforeRefresh, firstSelectedRowBeforeRefresh); + dataTable.scrollRowToVisible(firstSelectedRowBeforeRefresh); + } + + } else if (currentEmail != null) { + //on reselectionne le current email que si pas d'autre sélection (sinon rajoute un élément non sélectionné + //à la sélection, potentiel commportement indésirable pour l'utilisateur ) + int row = dataTableModel.getRowIndex(currentEmail); + if (row > 0) { + dataTable.setRowSelectionInterval(row, row); + dataTable.scrollRowToVisible(row); + } else if (selectedRowBeforeRefresh > 0 && selectedRowBeforeRefresh<dataTable.getRowCount()) { + //si on retrouve pas le current email, sélectionne la ligne d'avant refresh + dataTable.setRowSelectionInterval(selectedRowBeforeRefresh, selectedRowBeforeRefresh); + dataTable.scrollRowToVisible(selectedRowBeforeRefresh); + } else if (selectedRowBeforeRefresh > 1 ){ + //si pas possible sélectionne la ligne précédent la ligne d'avant refresh + dataTable.setRowSelectionInterval(selectedRowBeforeRefresh-1, selectedRowBeforeRefresh-1); + dataTable.scrollRowToVisible(selectedRowBeforeRefresh-1); + } + } + //si pas de sélection ici c'est qu'on ne peut plus rien faire + + getHandler().resetTimer(); + } } diff --git a/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/transmit/actions/TransmitAction.java b/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/transmit/actions/TransmitAction.java index bff06a61..0b8d0227 100644 --- a/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/transmit/actions/TransmitAction.java +++ b/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/transmit/actions/TransmitAction.java @@ -27,9 +27,12 @@ package com.franciaflex.faxtomail.ui.swing.content.transmit.actions; import com.franciaflex.faxtomail.persistence.entities.MailFolder; import com.franciaflex.faxtomail.ui.swing.actions.AbstractFaxToMailAction; import com.franciaflex.faxtomail.ui.swing.content.demande.DemandeListUI; +import com.franciaflex.faxtomail.ui.swing.content.demande.DemandeListUIHandler; import com.franciaflex.faxtomail.ui.swing.content.demande.DemandeListUIModel; import com.franciaflex.faxtomail.ui.swing.content.demande.DemandeUI; import com.franciaflex.faxtomail.ui.swing.content.demande.DemandeUIModel; +import com.franciaflex.faxtomail.ui.swing.content.demande.actions.LoadFolderEmailsAction; +import com.franciaflex.faxtomail.ui.swing.content.pdfeditor.actions.DisplayPageAction; import com.franciaflex.faxtomail.ui.swing.content.transmit.MailFolderChooserUI; import com.franciaflex.faxtomail.ui.swing.content.transmit.MailFolderChooserUIHandler; import com.franciaflex.faxtomail.ui.swing.content.transmit.MailFolderChooserUIModel; @@ -137,10 +140,11 @@ public class TransmitAction extends AbstractFaxToMailAction<MailFolderChooserUIM } else if (DemandeListUI.class.isAssignableFrom(parentUI.getClass())) { DemandeListUI demandeListUI = (DemandeListUI) parentUI; - DemandeListUIModel listModel = demandeListUI.getModel(); - List<DemandeUIModel> demandList = new ArrayList<DemandeUIModel>(listModel.getEmails()); - demandList.removeAll(getModel().getDemandeUIModels()); - listModel.setEmails(demandList); + DemandeListUIHandler listHandler = demandeListUI.getHandler(); + + //update demand list using action to keep track of where we are in the list + LoadFolderEmailsAction loadFolderEmailsAction = new LoadFolderEmailsAction(listHandler); + getContext().getActionEngine().runAction(loadFolderEmailsAction); } } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
participants (1)
-
codelutin.com scm