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>.