Author: tchemit Date: 2008-02-14 15:32:14 +0000 (Thu, 14 Feb 2008) New Revision: 963 Added: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/ListTabRefreshHelper.java trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/MainUIRefreshHelper.java trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/SynchronizeTabRefreshHelper.java Modified: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/DetailTabRefreshHelper.java trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/SimExplorerMainUI.java Log: introduction d'une classe pour les refresh de chaque onglet + mutualisation code. Modified: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/DetailTabRefreshHelper.java =================================================================== --- trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/DetailTabRefreshHelper.java 2008-02-14 15:31:17 UTC (rev 962) +++ trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/DetailTabRefreshHelper.java 2008-02-14 15:32:14 UTC (rev 963) @@ -19,14 +19,14 @@ package fr.cemagref.simexplorer.is.ui.swing; import fr.cemagref.simexplorer.is.attachment.Attachment; -import fr.cemagref.simexplorer.is.entities.data.ExplorationApplication; +import fr.cemagref.simexplorer.is.entities.EntitiesAction; import fr.cemagref.simexplorer.is.entities.data.LoggableElement; import fr.cemagref.simexplorer.is.entities.metadata.MetaData; import fr.cemagref.simexplorer.is.entities.metadata.Version; +import fr.cemagref.simexplorer.is.ui.SimExplorer; import fr.cemagref.simexplorer.is.ui.swing.model.DetailTabModel; import fr.cemagref.simexplorer.is.ui.swing.model.HistoryModel; import fr.cemagref.simexplorer.is.ui.swing.model.JDetailTableModel; -import fr.cemagref.simexplorer.is.ui.swing.model.LoggableElementTreeHelper; import fr.cemagref.simexplorer.is.ui.swing.model.LoggableElementTreeNode; import static org.codelutin.i18n.I18n._; @@ -34,9 +34,7 @@ import javax.swing.DefaultListModel; import javax.swing.JList; import javax.swing.JTable; -import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeModel; -import javax.swing.tree.TreeNode; import java.awt.Dimension; import java.awt.Rectangle; import java.text.SimpleDateFormat; @@ -70,11 +68,11 @@ */ public static void refreshDetailActions(JDetailTab ui, DetailTabModel model, LoggableElementTreeNode node) { // refresh synchronize action button - refreshSynchroniseElementAction(ui, model); + refreshSynchroniseAction(ui, model); // refresh download LoggableElement button refreshDownloadElementAction(ui, model, node); // refresh delete button - refreshDeleteElementAction(ui, model); + refreshDeleteAction(ui, model); // refresh export button refreshExportAction(ui, model); // refresh download Attachment button @@ -82,39 +80,35 @@ } public static void refreshTreeDetailActions(JDetailTab ui, LoggableElementTreeNode node) { - String tooltip; - boolean enabled = node != null && !node.isLeaf() && node.getChildCount() > 0; - tooltip = !enabled ? null : _("simexplorer.action.collapseAll.tooltip", node.getUserObject()); - SimExplorerUIRefreshHelper.updateButton(ui.getCollapseAllDetail(), enabled, tooltip); - tooltip = !enabled ? null : _("simexplorer.action.expandAll.tooltip", node.getUserObject()); - SimExplorerUIRefreshHelper.updateButton(ui.getExpandAllDetail(), enabled, tooltip); + MainUIRefreshHelper.refreshTreeActions(ui.getCollapseAllDetail(), ui.getExpandAllDetail(), node); } public static void refreshDownloadElementAction(JDetailTab ui, DetailTabModel model, LoggableElementTreeNode node) { MetaData detail = model.getDetail(); - boolean enabled = detail != null || LoggableElementTreeHelper.canDownload(node); + //boolean enabled = detail != null || LoggableElementTreeHelper.canDownload(node); + boolean enabled = EntitiesAction.DOWNLOAD.accept(node); String tooltip = !enabled ? null : _("simexplorer.action.downloadLoggableElement.tooltip", detail == null ? node.getUserObject() : detail.getName() + " [" + model.getSelectedVersion() + "]"); - SimExplorerUIRefreshHelper.updateButton(ui.getDownloadElement(), enabled, tooltip); + MainUIRefreshHelper.updateButton(ui.getDownloadElement(), enabled, tooltip); } - protected static void refreshDeleteElementAction(JDetailTab ui, DetailTabModel model) { + protected static void refreshDeleteAction(JDetailTab ui, DetailTabModel model) { MetaData detail = model.getDetail(); - boolean enabled = detail != null; + //boolean enabled = detail != null; + boolean enabled = EntitiesAction.DELETE.accept(detail); String tooltip = !enabled ? null : _("simexplorer.action.deleteLoggableElement.tooltip", detail.getName() + " [" + model.getSelectedVersion() + "]"); - SimExplorerUIRefreshHelper.updateButton(ui.getDeleteElement(), enabled, tooltip); + MainUIRefreshHelper.updateButton(ui.getDeleteElement(), enabled, tooltip); } public static void refreshDownloadAttachmentAction(JDetailTab ui, DetailTabModel model) { Attachment attachment = model.getSelectedAttachment(); - MetaData detail = model.getDetail(); - boolean enabled = detail != null && attachment != null; + boolean enabled = model.getDetail() != null && attachment != null; String tooltip = !enabled ? null : _("simexplorer.action.downloadAttachment.tooltip", attachment); - SimExplorerUIRefreshHelper.updateButton(ui.getDownloadAttachment(), enabled, tooltip); + MainUIRefreshHelper.updateButton(ui.getDownloadAttachment(), enabled, tooltip); } public static void refreshDetailToTreeAction(JDetailTab ui, DetailTabModel model) { MetaData detail = model.getDetail(); - DefaultMutableTreeNode rootNode = (DefaultMutableTreeNode) model.getHistory().getCurrent(); + LoggableElementTreeNode rootNode = model.getHistory().getCurrent(); LoggableElement rootElement = (LoggableElement) rootNode.getUserObject(); MetaData data = rootElement.getMetaData(); Version version = model.getSelectedVersion(); @@ -126,22 +120,28 @@ boolean enabled = !(detail.getName().equals(data.getName()) && data.getVersion().equals(version)); String tooltip = !enabled ? null : _("simexplorer.action.detailToTree.tooltip", detail.getName() + " [" + version + "]"); - SimExplorerUIRefreshHelper.updateButton(ui.getDetailToTree(), enabled, tooltip); + MainUIRefreshHelper.updateButton(ui.getDetailToTree(), enabled, tooltip); } - public static void refreshSynchroniseElementAction(JDetailTab ui, DetailTabModel model) { + public static void refreshSynchroniseAction(JDetailTab ui, DetailTabModel model) { MetaData detail = model.getDetail(); - boolean enabled = detail != null; + boolean enabled = detail != null && SimExplorer.getContext().isConnected(); String tooltip = !enabled ? null : _("simexplorer.action.synchronize.tooltip", detail.getName() + " [" + model.getSelectedVersion() + "]"); - SimExplorerUIRefreshHelper.updateButton(ui.getShowTab_synchronize(), enabled, tooltip); + MainUIRefreshHelper.updateButton(ui.getShowTab_synchronize(), enabled, tooltip); } protected static void refreshExportAction(JDetailTab ui, DetailTabModel model) { MetaData detail = model.getDetail(); LoggableElement sNode = model.getSelectedNode(); - boolean enabled = sNode != null && sNode instanceof ExplorationApplication; - String tooltip = !enabled ? null : _("simexplorer.action.export.tooltip", detail.getName() + " [" + model.getSelectedVersion() + "]"); - SimExplorerUIRefreshHelper.updateButton(ui.getExportElement(), enabled, tooltip); + //boolean enabled = sNode != null && SimExplorer.getContext().isConnected() && sNode instanceof ExplorationApplication; + boolean enabled = SimExplorer.getContext().isConnected() && EntitiesAction.EXPORT.accept(sNode); + + String text=null; + if (enabled) { + text = detail.getName() + " [" + model.getSelectedVersion() + "]"; + } + MainUIRefreshHelper.refreshExportAction(enabled,model.isRemote(),text,ui.getExportElement()); + } public static void resetHistory(JDetailTab ui, DetailTabModel model, DefaultComboBoxModel historyModel) { @@ -160,20 +160,14 @@ boolean enabled = ui.getDetailVersions().getItemCount() > 1; ui.getDetailVersions().setEnabled(enabled); String text; - if (enabled) { - text = _("simexplorer.action.changeVersion.tooltip"); - } else { - text = null; - } + text = !enabled ? null : _("simexplorer.action.changeVersion.tooltip"); ui.getDetailVersions().setToolTipText(text); } // can not synchronize to tree - SimExplorerUIRefreshHelper.updateButton(ui.getDetailToTree(), false, null); + MainUIRefreshHelper.updateButton(ui.getDetailToTree(), false, null); } public static void resetDetailPanel(final JDetailTab ui) { - //ui.getDetailHeaderFromLocal().setVisible(false); - //ui.getDetailHeaderFromRemote().setVisible(false); ui.getDetailVersions().setVisible(false); ui.getDetailHeader().setText(_("simexplorer.node.nodetail")); ui.getDetailAttachmentsHeader().setText(_("simexplorer.node.noattachments")); @@ -186,15 +180,16 @@ ((JDetailTableModel) ui.getDetailTable().getModel()).setData(null); } - public static void updateDetailNavigationTree(JDetailTab ui, HistoryModel<TreeNode> model) { + public static void updateDetailNavigationTree(JDetailTab ui, HistoryModel<LoggableElementTreeNode> model) { // push it in tree model ((DefaultTreeModel) ui.getNavigationTree().getModel()).setRoot(model.getCurrent()); // by default select the root node ui.getNavigationTree().setSelectionRow(0); - boolean hasPrevious = model.size() > 1 && model.hastPrevious(); - SimExplorerUIRefreshHelper.updateButton(ui.getHistoryPrevious(), hasPrevious, hasPrevious ? _("simexplorer.action.historyPrevious.tooltip", model.getPrevious()) : null); - boolean hasNext = model.size() > 1 && model.hasNext(); - SimExplorerUIRefreshHelper.updateButton(ui.getHistoryNext(), hasNext, hasNext ? _("simexplorer.action.historyNext.tooltip", model.getNext()) : null); + boolean enabled; + enabled = model.size() > 1 && model.hasPrevious(); + MainUIRefreshHelper.updateButton(ui.getHistoryPrevious(), enabled, !enabled?null:_("simexplorer.action.historyPrevious.tooltip", model.getPrevious())); + enabled= model.size() > 1 && model.hasNext(); + MainUIRefreshHelper.updateButton(ui.getHistoryNext(), enabled, !enabled?null:_("simexplorer.action.historyNext.tooltip", model.getNext())); } public static void updateDetailPanel(Integer index, final JDetailTab ui, DetailTabModel model, LoggableElement selectedNode) { @@ -260,7 +255,7 @@ protected static int[] computeRows(int nbDescriptorRows, int nbAttachmentRows) { int[] result = new int[2]; int max = 14; - int maxOne = max/2; + int maxOne = max / 2; if (nbDescriptorRows == 0) { result[0] = 0; result[1] = nbAttachmentRows > max ? max : nbAttachmentRows; @@ -271,7 +266,7 @@ result[1] = 0; return result; } - if (nbAttachmentRows < maxOne+1 && nbDescriptorRows < maxOne+1) { + if (nbAttachmentRows < maxOne + 1 && nbDescriptorRows < maxOne + 1) { result[0] = nbDescriptorRows; result[1] = nbAttachmentRows; return result; @@ -280,13 +275,13 @@ result[0] = result[1] = maxOne; return result; } - if (nbDescriptorRows < maxOne+1) { + if (nbDescriptorRows < maxOne + 1) { result[0] = nbDescriptorRows; int i = max - nbDescriptorRows; result[1] = nbAttachmentRows < i ? nbAttachmentRows : i; return result; } - if (nbAttachmentRows < maxOne+1) { + if (nbAttachmentRows < maxOne + 1) { int i = max - nbAttachmentRows; result[0] = nbDescriptorRows < i ? nbDescriptorRows : i; result[1] = nbAttachmentRows; Copied: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/ListTabRefreshHelper.java (from rev 952, trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/DetailTabRefreshHelper.java) =================================================================== --- trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/ListTabRefreshHelper.java (rev 0) +++ trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/ListTabRefreshHelper.java 2008-02-14 15:32:14 UTC (rev 963) @@ -0,0 +1,163 @@ +/* +* ##% Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008 Code Lutin, +* Tony Chemit, Gabriel Landais +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License +* as published by the Free Software Foundation; either version 2 +* of the License, or (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* ##% */ +package fr.cemagref.simexplorer.is.ui.swing; + +import fr.cemagref.simexplorer.is.entities.EntitiesAction; +import fr.cemagref.simexplorer.is.entities.metadata.MetaData; +import fr.cemagref.simexplorer.is.ui.SimExplorer; +import fr.cemagref.simexplorer.is.ui.swing.model.ListTabModel; +import fr.cemagref.simexplorer.is.ui.swing.model.PaginationModel; +import static org.codelutin.i18n.I18n._; + +import javax.swing.JComboBox; +import javax.swing.SwingUtilities; + +/** + * Cette classe contient les méthodes utiles et réutilisables pour rafraichir + * les onglets de liste. + * <p/> + * Les méthodes utilisent les données stockées dans les modèles pour rafraichir + * les uis concernées. + * <p/> + * Note : <b>Dans toutes ces méthodes, NOS modèles ne doivent en aucun cas être modifiés</b> + * <p/> + * Par contre les modèles des ui peuvent être modifiés (par exemple modèle d'arbre, de liste) + * mais uniquement à partir de nos modèles. + * + * @author chemit + */ +public class ListTabRefreshHelper { + + /** + * Rafraichit un onglet de type liste à partir de son modèle. + * + * @param ui l'onglet de liste à utiliser + * @param model le modèle de liste à utiliser + */ + public static void refreshListTabUI(final JListTab ui, final ListTabModel model) { + + SwingUtilities.invokeLater(new Runnable() { + public void run() { + + // refresh search text + ui.getSearchText().setText(model.getQuery()); + + // refresh search actions + refreshSearchActions(ui, model); + + // refresh changePage combobox + refreshChangePageCombo(ui, model); + + // refresh changeSizor combo + refreshChangeSizorCombo(ui, model); + + // refresh pagination buttons + refreshPagination(ui, model.getPagination()); + + // table data model may have changed, must revalidate + ui.getTable().invalidate(); + + // parent must be repaint (will revalidate layout for table) + ui.repaint(); + } + }); + } + + public static void refreshListTablePopupMenu(final JListTab ui, final ListTabModel model) { + int index = model.getSelectedIndex(); + if (index == -1) { + // disable popupmenu + ui.getTablePopupMenu().setEnabled(false); + return; + } + ui.getTablePopupMenu().setEnabled(true); + MetaData data = model.get(index); + + String text = data.getName() + " [" + data.getVersion() + "]"; + + String tooltip = _("simexplorer.action.downloadLoggableElement.tooltip", text); + MainUIRefreshHelper.updateButton(ui.getDownloadElement(), EntitiesAction.DOWNLOAD.accept(data), tooltip); + + tooltip = _("simexplorer.action.deleteLoggableElement.tooltip", text); + MainUIRefreshHelper.updateButton(ui.getDeleteElement(), EntitiesAction.DELETE.accept(data), tooltip); + + boolean isConnected = SimExplorer.getContext().isConnected(); + boolean enabled = isConnected && EntitiesAction.EXPORT.accept(data); + + MainUIRefreshHelper.refreshExportAction(enabled,model.isRemote(),text,ui.getExportElement()); + + tooltip = _("simexplorer.action.synchronize.tooltip", text); + MainUIRefreshHelper.updateButton(ui.getShowTab_synchronize(), isConnected, tooltip); + } + + /** + * Rafraichit les actions de recherche d'un onglet de type liste. + * + * @param ui l'onglet de liste à utiliser + * @param model le modèle de liste à utiliser + */ + public static void refreshSearchActions(JListTab ui, ListTabModel model) { + String text = ui.getSearchText().getText(); + ui.getSearch().setEnabled(model.hasQuery() || !text.isEmpty()); + ui.getResetSearch().setEnabled(model.hasQuery() || !text.isEmpty()); + } + + public static void refreshPagination(JListTab ui, PaginationModel pagination) { + int page = pagination.getCurrentPage(); + boolean notLast = page + 1 < pagination.getNbPages(); + ui.getGoNextPage().setEnabled(notLast); + ui.getGoLastPage().setEnabled(notLast); + } + + public static void refreshChangeSizorCombo(JListTab ui, ListTabModel model) { + JComboBox combo = ui.getChangeSizor(); + String s = model.getPagination().getWidth() + ""; + if (!s.equals(String.valueOf(combo.getSelectedItem()))) { + combo.setEnabled(false); + combo.setSelectedItem(s); + combo.setEnabled(true); + } + } + + public static void refreshChangePageCombo(JListTab ui, ListTabModel model) { + JComboBox combo = ui.getGoPage(); + long size = model.getPagination().getNbPages(); + combo.setEnabled(false); + //System.out.println("page old size : " + combo.getItemCount() + " new size : " + size); + if (size < combo.getItemCount()) { + while (size < combo.getItemCount()) { + combo.removeItemAt(combo.getItemCount() - 1); + } + } else { + while (size > combo.getItemCount()) { + combo.addItem(combo.getItemCount()); + } + } + //System.out.println("new page size : " + combo.getItemCount()); + + combo.setSelectedIndex(model.getPagination().getCurrentPage()); + boolean b = combo.getItemCount() > 1; + combo.setEnabled(b); + ui.getCurrentPage().setEnabled(b); + } + + protected ListTabRefreshHelper() { + // do not instanciate me please + } +} \ No newline at end of file Copied: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/MainUIRefreshHelper.java (from rev 952, trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/SimExplorerUIRefreshHelper.java) =================================================================== --- trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/MainUIRefreshHelper.java (rev 0) +++ trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/MainUIRefreshHelper.java 2008-02-14 15:32:14 UTC (rev 963) @@ -0,0 +1,162 @@ +/* +* ##% Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008 Code Lutin, +* Tony Chemit, Gabriel Landais +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License +* as published by the Free Software Foundation; either version 2 +* of the License, or (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* ##% */ +package fr.cemagref.simexplorer.is.ui.swing; + +import fr.cemagref.simexplorer.is.entities.data.LoggableElement; +import fr.cemagref.simexplorer.is.ui.SimExplorer; +import fr.cemagref.simexplorer.is.ui.swing.actions.util.ChangeI18nAbstractAction; +import fr.cemagref.simexplorer.is.ui.swing.model.DetailTabModel; +import fr.cemagref.simexplorer.is.ui.swing.model.HistoryModel; +import fr.cemagref.simexplorer.is.ui.swing.model.LoggableElementTreeNode; +import fr.cemagref.simexplorer.is.ui.swing.model.ListTabModel; +import org.codelutin.i18n.CountryEnum; +import org.codelutin.i18n.LanguageEnum; + +import javax.swing.AbstractButton; +import javax.swing.JTabbedPane; +import java.util.regex.Matcher; + +/** + * Cette classe contient les méthodes utiles et réutilisables pour rafraichit + * les ui. + * <p/> + * Les méthodes utilisent les données stockées dans les modèles pour rafraichir + * les uis concernées. + * <p/> + * Note : <b>Dans toutes ces méthodes, NOS modèles ne doivent en aucun cas être modifiés</b> + * <p/> + * Par contre les modèles des ui peuvent être modifiés (par exemple modèle d'arbre, de liste) + * mais uniquement à partir de nos modèles. + * + * @author chemit + */ +public class MainUIRefreshHelper { + + /** + * Rafraichit les actions i18n dans le menu en fonction de la locale + * actuellement utilisée. + * + * @param ui l'ui principale + */ + public static void refreshI18nActions(SimExplorerMainUI ui) { + LanguageEnum language = SimExplorer.getContext().getConfig().getUserLanguage(); + CountryEnum country = SimExplorer.getContext().getConfig().getUserCountry(); + String[] actions = SimExplorerActionManager.getFactory().getActionNames(); + for (String actionName : actions) { + Matcher matcher = ChangeI18nAbstractAction.PATTERN_NAME.matcher(actionName); + if (!matcher.matches()) { + continue; + } + AbstractButton button = (AbstractButton) ui.getObjectById(actionName); + ChangeI18nAbstractAction action = (ChangeI18nAbstractAction) button.getAction(); + boolean enable = !action.equalsLocale(language, country); + button.setEnabled(enable); + } + } + + /** + * Rafraichit les uis après un changement de status de connexion de l'utilisateur. + * <p/> + * Si l'utilisateur est déconnecté, alors toutes les ui et actions liées au + * mode remote sont fermées et les actions correspondantes sont rendues + * inaccessibles. + * + * @param ui l'ui principale + * @param isConnected flag pour indique si l'utiliseur est connecté + * @param history l'historique de l'onglet de detail + */ + public static void refreshConnnectState(SimExplorerMainUI ui, final boolean isConnected, HistoryModel<LoggableElementTreeNode> history) { + + //SwingUtilities.invokeLater(new Runnable() { + // public void run() { + ui.getConnect().setEnabled(!isConnected); + ui.getUnconnect().setEnabled(isConnected); + ui.getShowTab_remote().setEnabled(isConnected); + ui.getToggleTab_remote().setEnabled(isConnected); + + JTabbedPane container = ui.getContent(); + DetailTabModel model = (DetailTabModel) SimExplorerTab.detail.getModel(); + JDetailTab tabUI = (JDetailTab) SimExplorerTab.detail.getUI(); + if (!isConnected) { + // close all connected ui + + if (SimExplorerTab.remote.isTabVisible(container)) { + // close tab + SimExplorerTab.remote.closeTab(container); + } + if (SimExplorerTab.synchronize.isTabVisible(container)) { + // close tab + SimExplorerTab.synchronize.closeTab(container); + } + if (SimExplorerTab.detail.isTabVisible(container) && history != null) { + if (history.isEmpty()) { + // close tab, no more history + SimExplorerTab.detail.closeTab(container); + } else { + // select current history element + LoggableElementTreeNode node = history.getCurrent(); + model.setRemote(node.isRemote()); + model.setRootNode((LoggableElement) node.getUserObject()); + DetailTabRefreshHelper.updateDetailNavigationTree(tabUI, model.getHistory()); + } + } + } + if (SimExplorerTab.detail.isTabVisible(container)) { + DetailTabRefreshHelper.refreshSynchroniseAction(tabUI, model); + DetailTabRefreshHelper.refreshExportAction(tabUI, model); + } + + if (SimExplorerTab.local.isTabVisible(container)) { + ListTabRefreshHelper.refreshListTablePopupMenu((JListTab)SimExplorerTab.local.getUI(), (ListTabModel) SimExplorerTab.local.getModel()); + } + // } + //}); + } + + protected static void updateButton(AbstractButton button, boolean enabled, String tooltip) { + button.setEnabled(enabled); + + button.setToolTipText(enabled?tooltip:null); + } + + protected MainUIRefreshHelper() { + // do not instanciate me please + } + + public static void refreshTreeActions(AbstractButton collapseButton, AbstractButton expandButton, LoggableElementTreeNode node) { + String tooltip; + boolean enabled = node != null && !node.isLeaf() && node.getChildCount() > 0; + tooltip = !enabled ? null : org.codelutin.i18n.I18n._("simexplorer.action.collapseAll.tooltip", node.getUserObject()); + updateButton(collapseButton, enabled, tooltip); + tooltip = !enabled ? null : org.codelutin.i18n.I18n._("simexplorer.action.expandAll.tooltip", node.getUserObject()); + updateButton(expandButton, enabled, tooltip); + } + + public static void refreshExportAction(boolean enabled, boolean remote, String text, AbstractButton button) { + String tooltip = null; + if (enabled) { + if (remote) { + tooltip = org.codelutin.i18n.I18n._("simexplorer.action.exportToLocal.tooltip", text); + } else { + tooltip = org.codelutin.i18n.I18n._("simexplorer.action.exportToRemote.tooltip", text); + } + } + updateButton(button, enabled, tooltip); + } +} Modified: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/SimExplorerMainUI.java =================================================================== --- trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/SimExplorerMainUI.java 2008-02-14 15:31:17 UTC (rev 962) +++ trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/SimExplorerMainUI.java 2008-02-14 15:32:14 UTC (rev 963) @@ -34,7 +34,7 @@ SimExplorerActionManager.loadActions(this, null); // repaint i18n actions - SimExplorerUIRefreshHelper.refreshI18nActions(this); + MainUIRefreshHelper.refreshI18nActions(this); } public void setStatus(final String msg) { Added: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/SynchronizeTabRefreshHelper.java =================================================================== --- trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/SynchronizeTabRefreshHelper.java (rev 0) +++ trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/SynchronizeTabRefreshHelper.java 2008-02-14 15:32:14 UTC (rev 963) @@ -0,0 +1,110 @@ +/* +* ##% Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008 Code Lutin, +* Tony Chemit, Gabriel Landais +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License +* as published by the Free Software Foundation; either version 2 +* of the License, or (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* ##% */ +package fr.cemagref.simexplorer.is.ui.swing; + +import fr.cemagref.simexplorer.is.entities.EntitiesAction; +import fr.cemagref.simexplorer.is.entities.data.LoggableElement; +import fr.cemagref.simexplorer.is.ui.swing.model.LoggableElementTreeHelper; +import fr.cemagref.simexplorer.is.ui.swing.model.LoggableElementTreeNode; +import fr.cemagref.simexplorer.is.ui.swing.model.SynchronizeTabModel; + +import javax.swing.JTree; +import javax.swing.tree.DefaultTreeModel; +import javax.swing.tree.TreeNode; + +/** + * Cette classe contient les méthodes utiles et réutilisables pour rafraichir + * les onglets de liste. + * <p/> + * Les méthodes utilisent les données stockées dans les modèles pour rafraichir + * les uis concernées. + * <p/> + * Note : <b>Dans toutes ces méthodes, NOS modèles ne doivent en aucun cas être modifiés</b> + * <p/> + * Par contre les modèles des ui peuvent être modifiés (par exemple modèle d'arbre, de liste) + * mais uniquement à partir de nos modèles. + * + * @author chemit + */ +public class SynchronizeTabRefreshHelper { + + public static void refreshExportElementToRemoteAction(JSynchronizeTab ui, SynchronizeTabModel model) { + LoggableElement sNode = model.getLocalSelectedNode(); + boolean enabled = EntitiesAction.EXPORT.accept(sNode); + String text = null; + if (enabled) { + text = sNode.getMetaData().getName() + " [" + sNode.getMetaData().getVersion() + "]"; + } + MainUIRefreshHelper.refreshExportAction(enabled, false, text, ui.getExportElementToRemote()); + } + + public static void refreshExportElementToLocalAction(JSynchronizeTab ui, SynchronizeTabModel model) { + LoggableElement sNode = model.getRemoteSelectedNode(); + boolean enabled = EntitiesAction.EXPORT.accept(sNode); + String text = null; + if (enabled) { + text = sNode.getMetaData().getName() + " [" + sNode.getMetaData().getVersion() + "]"; + } + MainUIRefreshHelper.refreshExportAction(enabled, true, text, ui.getExportElementToLocal()); + } + + public static void refreshTreeLocalActions(JSynchronizeTab ui, LoggableElementTreeNode node) { + MainUIRefreshHelper.refreshTreeActions(ui.getCollapseAllLocal(), ui.getExpandAllLocal(), node); + } + + public static void refreshTreeRemoteActions(JSynchronizeTab ui, LoggableElementTreeNode node) { + MainUIRefreshHelper.refreshTreeActions(ui.getCollapseAllRemote(), ui.getExpandAllRemote(), node); + } + + public static void updateSynchronizeNavigationTrees(JSynchronizeTab ui, SynchronizeTabModel model) { + + TreeNode sourceRoot = LoggableElementTreeHelper.buildLoggableElementNode(model.getSource(), model.isRemote()); + TreeNode destinationRoot = model.getDestination() == null ? null : LoggableElementTreeHelper.buildLoggableElementNode(model.getDestination(), !model.isRemote()); + + JTree sourceTree, destinationTree; + if (model.isRemote()) { + // source is remote + sourceTree = ui.getContentTreeRemote(); + destinationTree = ui.getContentTreeLocal(); + } else { + // source is local + sourceTree = ui.getContentTreeLocal(); + destinationTree = ui.getContentTreeRemote(); + } + + ((DefaultTreeModel) sourceTree.getModel()).setRoot(sourceRoot); + ((DefaultTreeModel) destinationTree.getModel()).setRoot(destinationRoot); + + // by default select the root node + sourceTree.setSelectionRow(0); + if (destinationRoot == null) { + destinationTree.getSelectionModel().clearSelection(); + + } else { + destinationTree.setSelectionRow(0); + } + //sourceTree.invalidate(); + //destinationTree.invalidate(); + //ui.repaint(); + } + + protected SynchronizeTabRefreshHelper() { + // do not instanciate me please + } +} \ No newline at end of file
participants (1)
-
tchemit@users.labs.libre-entreprise.org