This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository faxtomail. See http://git.codelutin.com/faxtomail.git commit f9a175e5ee253abb70bbd68514969fad379a0bbd Author: Kevin Morin <morin@codelutin.com> Date: Thu May 7 12:16:57 2015 +0200 fixes #7077 Affichage d’une infobulle lorsqu’il y a des éléments groupés --- .../faxtomail/FaxToMailConfiguration.java | 12 ++ .../faxtomail/FaxToMailConfigurationOption.java | 18 +++ .../i18n/faxtomail-persistence_fr_FR.properties | 2 + .../ui/swing/content/demande/DemandesUI.jaxx | 6 +- .../swing/content/demande/DemandesUIHandler.java | 11 +- .../demandgroup/DemandGroupHighlightDialog.java | 138 +++++++++++++++++++++ .../faxtomail/ui/swing/util/CloseButton.java | 68 ++++++++++ .../i18n/faxtomail-ui-swing_fr_FR.properties | 1 + .../src/main/resources/icons/close-white.png | Bin 0 -> 233 bytes 9 files changed, 254 insertions(+), 2 deletions(-) diff --git a/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/FaxToMailConfiguration.java b/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/FaxToMailConfiguration.java index f73df3b..6358ed7 100644 --- a/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/FaxToMailConfiguration.java +++ b/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/FaxToMailConfiguration.java @@ -399,6 +399,18 @@ public class FaxToMailConfiguration extends ApplicationConfiguration { return applicationConfig.getOptionAsColor(FaxToMailConfigurationOption.COLOR_SELECTED_ROW.getKey()); } + public Color getColorGroupedDemandWarningDialog() { + return applicationConfig.getOptionAsColor(FaxToMailConfigurationOption.COLOR_GROUPED_DEMAND_WARNING_DIALOG.getKey()); + } + + public float getFontSizeGroupedDemandWarningDialog() { + return applicationConfig.getOptionAsFloat(FaxToMailConfigurationOption.FONT_SIZE_GROUPED_DEMAND_WARNING_DIALOG.getKey()); + } + + public int getDelayGroupedDemandWarningDialog() { + return applicationConfig.getOptionAsInt(FaxToMailConfigurationOption.DELAY_GROUPED_DEMAND_WARNING_DIALOG.getKey()); + } + public int getResultPerPage() { return applicationConfig.getOptionAsInt(FaxToMailConfigurationOption.RESULT_PER_PAGE.getKey()); } diff --git a/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/FaxToMailConfigurationOption.java b/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/FaxToMailConfigurationOption.java index 13a67d0..97e0081 100644 --- a/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/FaxToMailConfigurationOption.java +++ b/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/FaxToMailConfigurationOption.java @@ -286,6 +286,24 @@ defaults.put("Table.alternateRowColor", new Color(217, 217, 217)); Color.class ), + COLOR_GROUPED_DEMAND_WARNING_DIALOG("faxtomail.ui.color.groupedDemandWarningDialog", + n("faxtomail.ui.color.groupedDemandWarningDialog.description"), + new Color(255, 255, 0).toString(), + Color.class + ), + + FONT_SIZE_GROUPED_DEMAND_WARNING_DIALOG("faxtomail.ui.fontSize.groupedDemandWarningDialog", + n("faxtomail.ui.fontSize.groupedDemandWarningDialog.description"), + "20.0f", + Float.class + ), + + DELAY_GROUPED_DEMAND_WARNING_DIALOG("faxtomail.ui.delay.groupedDemandWarningDialog", + n("faxtomail.ui.delay.groupedDemandWarningDialog.description"), + "10000", + Integer.class + ), + SHORTCUT_CLOSE_POPUP( "faxtomail.ui.shortcut.closePopup", n("faxtomail.config.option.ui.shortcut.closePopup.description"), diff --git a/faxtomail-persistence/src/main/resources/i18n/faxtomail-persistence_fr_FR.properties b/faxtomail-persistence/src/main/resources/i18n/faxtomail-persistence_fr_FR.properties index fbc0a2d..82bb308 100644 --- a/faxtomail-persistence/src/main/resources/i18n/faxtomail-persistence_fr_FR.properties +++ b/faxtomail-persistence/src/main/resources/i18n/faxtomail-persistence_fr_FR.properties @@ -47,3 +47,5 @@ faxtomail.persistence.loader.error= faxtomail.persistence.mkDir.error= faxtomail.service.config.deleteTempDirectory.error= faxtomail.service.mkDir.error= +faxtomail.ui.color.delay.groupedDemandWarningDialog.description= +faxtomail.ui.color.groupedDemandWarningDialog.description= diff --git a/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandesUI.jaxx b/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandesUI.jaxx index f6032ad..71a57bd 100644 --- a/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandesUI.jaxx +++ b/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandesUI.jaxx @@ -22,13 +22,15 @@ #L% --> <JPanel id='demandsPanel' layout="{ new BorderLayout() }" - implements='com.franciaflex.faxtomail.ui.swing.util.FaxToMailUI<DemandesUIModel, DemandesUIHandler>'> + implements='com.franciaflex.faxtomail.ui.swing.util.FaxToMailUI<DemandesUIModel, DemandesUIHandler>' + onAncestorAdded="handler.showDemandGroupHighlightDialog()"> <import> com.franciaflex.faxtomail.ui.swing.FaxToMailUIContext com.franciaflex.faxtomail.ui.swing.util.FaxToMailUI com.franciaflex.faxtomail.ui.swing.util.FaxToMailUIUtil com.franciaflex.faxtomail.ui.swing.content.demande.demandgroup.ButtonEmailGroup + com.franciaflex.faxtomail.ui.swing.content.demande.demandgroup.DemandGroupHighlightDialog </import> <script><![CDATA[ @@ -63,4 +65,6 @@ <JButton id="groupButton" onActionPerformed="handler.group()"/> </JPanel> + <DemandGroupHighlightDialog id="demandGroupHighlightDialog" constructorParams="getHandler().getContext(), demandGroupButton"/> + </JPanel> diff --git a/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandesUIHandler.java b/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandesUIHandler.java index b4224b7..94b7d9c 100644 --- a/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandesUIHandler.java +++ b/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandesUIHandler.java @@ -155,6 +155,7 @@ public class DemandesUIHandler extends AbstractFaxToMailUIHandler<DemandesUIMode DemandeUIModel currentEmail = getContext().getCurrentEmail(); model.addDemand(currentEmail); + } protected void updateButtonEnability() { @@ -315,9 +316,11 @@ public class DemandesUIHandler extends AbstractFaxToMailUIHandler<DemandesUIMode } protected void closeButtonPopups() { + getUI().getDemandGroupHighlightDialog().setVisible(false); + DemandeUI demandeUI = (DemandeUI) getTabPanel().getSelectedComponent(); demandeUI.getHandler().closeButtonPopups(); - ui.getDemandGroupButton().setSelected(false); + getUI().getDemandGroupButton().setSelected(false); } public void save() { @@ -365,4 +368,10 @@ public class DemandesUIHandler extends AbstractFaxToMailUIHandler<DemandesUIMode AbstractApplicationAction action = getContext().getActionFactory().createLogicAction(this, actionClass); getContext().getActionEngine().runAction(action); } + + public void showDemandGroupHighlightDialog() { + if (getModel().getCurrentDemand().getGroupedDemandes().size() > 1) { + getUI().getDemandGroupHighlightDialog().setVisible(true); + } + } } diff --git a/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/demandgroup/DemandGroupHighlightDialog.java b/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/demandgroup/DemandGroupHighlightDialog.java new file mode 100644 index 0000000..05c7678 --- /dev/null +++ b/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/demandgroup/DemandGroupHighlightDialog.java @@ -0,0 +1,138 @@ +package com.franciaflex.faxtomail.ui.swing.content.demande.demandgroup; + +import com.franciaflex.faxtomail.ui.swing.FaxToMailUIContext; +import com.franciaflex.faxtomail.ui.swing.util.CloseButton; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.HierarchyBoundsAdapter; +import java.awt.event.HierarchyEvent; + +import static org.nuiton.i18n.I18n.t; + +/** + * @author Kevin Morin (Code Lutin) + * @since 1.3 + */ +public class DemandGroupHighlightDialog extends JDialog { + + protected final ButtonEmailGroup buttonEmailGroup; + protected boolean popupMoving; + protected final Timer timer; + + public DemandGroupHighlightDialog(FaxToMailUIContext context, ButtonEmailGroup buttonEmailGroup) { + super(context.getMainUI()); + + this.buttonEmailGroup = buttonEmailGroup; + + timer = new Timer(context.getConfig().getDelayGroupedDemandWarningDialog(), new ActionListener() { + public void actionPerformed(ActionEvent e) { + dispose(); + } + }); + + init(context.getConfig().getColorGroupedDemandWarningDialog(), + context.getConfig().getFontSizeGroupedDemandWarningDialog()); + } + + protected void init(Color bgColor, float fontSize) { + setUndecorated(true); + setAlwaysOnTop(true); + setResizable(false); + + getContentPane().setLayout(new BorderLayout()); + + JLabel jLabel = new JLabel(t("faxtomail.demandGroup.warning.label")); + jLabel.setFont(jLabel.getFont().deriveFont(Font.BOLD, fontSize)); + + JPanel messagePanel = new JPanel(); + messagePanel.setBackground(bgColor); + messagePanel.add(jLabel); + messagePanel.add(new CloseButton(new AbstractAction() { + @Override + public void actionPerformed(ActionEvent e) { + dispose(); + } + })); + + getContentPane().add(messagePanel, BorderLayout.CENTER); + + getContentPane().add(new ArrowPanel(bgColor), BorderLayout.SOUTH); + + pack(); + + buttonEmailGroup.addHierarchyBoundsListener(new HierarchyBoundsAdapter() { + + @Override + public void ancestorMoved(HierarchyEvent e) { + if (isShowing()) { + + // place dialog just under the button + popupMoving = true; + try { + place(); + + } finally { + popupMoving = false; + } + } + } + }); + } + + protected void place() { + Point point = new Point(buttonEmailGroup.getLocationOnScreen()); + point.translate(- getWidth() + buttonEmailGroup.getWidth(), - getHeight() - 5); + setLocation(point.getLocation()); + } + + @Override + public void setVisible(boolean b) { + if (!isVisible() && b) { + place(); + timer.start(); + + } else if (!b) { + timer.stop(); + } + + super.setVisible(b); + + } + + private class ArrowPanel extends JPanel { + private final int width = 10; + private final int height = 5; + private final Color arrowColor; + + ArrowPanel(Color color) { + arrowColor = color; + } + + @Override + public Dimension getPreferredSize() { + return new Dimension(width, height); + } + + @Override + public Color getBackground() { + return null; + } + + @Override + public void paint(Graphics g) { + Point point1 = new Point(getWidth() - 10, 0); + Point point2 = new Point(point1.x - width, point1.y); + Point point3 = new Point(point1.x - width / 2, point1.y + height); + + g.setColor(arrowColor); + g.drawLine(point1.x, point1.y, point2.x, point2.y); + g.drawLine(point1.x, point1.y, point3.x, point3.y); + g.drawLine(point2.x, point2.y, point3.x, point3.y); + g.fillPolygon(new int[]{point1.x, point2.x, point3.x}, new int[]{point1.y, point2.y, point3.y}, 3); + } + } + +} diff --git a/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/CloseButton.java b/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/CloseButton.java new file mode 100644 index 0000000..66aa28c --- /dev/null +++ b/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/CloseButton.java @@ -0,0 +1,68 @@ +package com.franciaflex.faxtomail.ui.swing.util; + +import jaxx.runtime.SwingUtil; + +import javax.swing.*; +import java.awt.*; +import java.awt.geom.Ellipse2D; + +/** + * @author Kevin Morin (Code Lutin) + * @since 1.3 + */ +public class CloseButton extends JButton { + + public CloseButton(AbstractAction action) { + super(action); + + setModel(new DefaultButtonModel()); + + init(null, SwingUtil.createImageIcon("close-white.png")); + + setBorder(BorderFactory.createEmptyBorder(1, 1, 1, 1)); + setBackground(Color.BLACK); + setContentAreaFilled(false); + setFocusPainted(false); + setAlignmentY(Component.TOP_ALIGNMENT); + + initShape(); + } + + protected Shape shape, base; + + protected void initShape() { + if (!getBounds().equals(base)) { + Dimension s = getPreferredSize(); + base = getBounds(); + shape = new Ellipse2D.Float(0, 0, s.width - 1, s.height - 1); + } + } + + @Override + public Dimension getPreferredSize() { + Icon icon = getIcon(); + Insets i = getInsets(); + int iw = Math.max(icon.getIconWidth(), icon.getIconHeight()); + return new Dimension(iw + i.right + i.left, iw + i.top + i.bottom); + } + + @Override + protected void paintBorder(Graphics g) { + initShape(); + Graphics2D g2 = (Graphics2D) g; + g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, + RenderingHints.VALUE_ANTIALIAS_ON); + g2.setColor(getBackground()); + //g2.setStroke(new BasicStroke(1.0f)); + g2.draw(shape); + g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, + RenderingHints.VALUE_ANTIALIAS_OFF); + } + + @Override + public boolean contains(int x, int y) { + initShape(); + return shape.contains(x, y); + //or return super.contains(x, y) && ((image.getRGB(x, y) >> 24) & 0xff) > 0; + } +} diff --git a/faxtomail-ui-swing/src/main/resources/i18n/faxtomail-ui-swing_fr_FR.properties b/faxtomail-ui-swing/src/main/resources/i18n/faxtomail-ui-swing_fr_FR.properties index 4d00e1a..d455bc8 100644 --- a/faxtomail-ui-swing/src/main/resources/i18n/faxtomail-ui-swing_fr_FR.properties +++ b/faxtomail-ui-swing/src/main/resources/i18n/faxtomail-ui-swing_fr_FR.properties @@ -88,6 +88,7 @@ faxtomail.demandGroup.action.tip=Éléments groupés avec l'élément courant faxtomail.demandGroup.empty=Aucun élément groupé faxtomail.demandGroup.text=Groupe (%s) faxtomail.demandGroup.title=Groupe +faxtomail.demandGroup.warning.label=Groupage faxtomail.demandGroupCellRenderer.text=(%s) faxtomail.demandReplies.action.forward.tip=Transmettre la réponse faxtomail.demandReplies.action.open.tip=Visualiser la réponse diff --git a/faxtomail-ui-swing/src/main/resources/icons/close-white.png b/faxtomail-ui-swing/src/main/resources/icons/close-white.png new file mode 100644 index 0000000..a1d0689 Binary files /dev/null and b/faxtomail-ui-swing/src/main/resources/icons/close-white.png differ -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.