[Buix-commits] r290 - trunk/lutinvcs/lutinvcs-ui/src/main/java/org/codelutin/vcs/ui
Author: tchemit Date: 2008-04-02 09:13:17 +0000 (Wed, 02 Apr 2008) New Revision: 290 Added: trunk/lutinvcs/lutinvcs-ui/src/main/java/org/codelutin/vcs/ui/SynchUIHandler.java Log: handler de l'ui synch Copied: trunk/lutinvcs/lutinvcs-ui/src/main/java/org/codelutin/vcs/ui/SynchUIHandler.java (from rev 276, trunk/lutinvcs/lutinvcs-ui/src/main/java/org/codelutin/vcs/ui/SynchUIHandlerImpl.java) =================================================================== --- trunk/lutinvcs/lutinvcs-ui/src/main/java/org/codelutin/vcs/ui/SynchUIHandler.java (rev 0) +++ trunk/lutinvcs/lutinvcs-ui/src/main/java/org/codelutin/vcs/ui/SynchUIHandler.java 2008-04-02 09:13:17 UTC (rev 290) @@ -0,0 +1,162 @@ +package org.codelutin.vcs.ui; + +import org.codelutin.vcs.VCSAction; +import org.codelutin.vcs.VCSFileState; +import org.codelutin.vcs.ui.action.AbstractSynchUIHandler; +import org.codelutin.vcs.ui.action.VCSPopupAction; +import org.codelutin.vcs.ui.model.AbstractVCSFileStatesModel; +import org.codelutin.vcs.ui.model.SynchUIModel; +import org.codelutin.vcs.ui.model.SynchVCSFileStatesModel; + +import javax.swing.JTable; +import javax.swing.ListSelectionModel; +import javax.swing.event.ListSelectionEvent; +import javax.swing.event.ListSelectionListener; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.util.ArrayList; +import java.util.List; + +/** @author chemit */ +public class SynchUIHandler extends AbstractSynchUIHandler implements ListSelectionListener { + + protected final JSynchUI ui; + + public SynchUIHandler(JSynchUI ui) { + super(); + this.ui = ui; + } + + @Override + public void init() { + super.init(); + initTab(VCSUIConstants.ALL_MODEL_PROPERTY); + initTab(VCSUIConstants.LOCAL_MODEL_PROPERTY); + initTab(VCSUIConstants.REMOTE_MODEL_PROPERTY); + } + + private void initTab(String modelName) { + JTable table = ui.getTable(modelName); + SynchVCSFileStatesModel fileStatesModel = getModel().getModel(modelName); + table.setModel(fileStatesModel); + table.getSelectionModel().addListSelectionListener(this); + table.addMouseListener(new ListMouseListener(ui, fileStatesModel)); + JVCSPopup jvcsPopup = ui.getPopup(modelName); + jvcsPopup.setInvoker(table); + jvcsPopup.setDispatchAction(new VCSPopupAction(ui, modelName)); + } + + public SynchUIModel getModel() { + return ui.getModel(); + } + + public void doAllAction(VCSAction action, SynchVCSFileStatesModel model) { + log.info(action + " : " + model); + JTable table = ui.getTable(model.getName()); + ListSelectionModel selectionModel = table.getSelectionModel(); + if (action == VCSAction.REFRESH) { + selectionModel.clearSelection(); + // do refresh of all states + log.info("refresh :" + model.size()); + model.refresh(model.getStates()); + } else { + model.select(action, selectionModel); + // do action on selected items + doSelectAction(action, model); + } + } + + public void doSelectAction(VCSAction action, SynchVCSFileStatesModel model) { + log.info(action + " : " + model); + JTable table = ui.getTable(model.getName()); + ListSelectionModel selectionModel = table.getSelectionModel(); + if (selectionModel.isSelectionEmpty()) { + // nothing to do + return; + } + VCSFileState[] states = model.getData(selectionModel); + log.info("files to treate :" + states.length); + + } + + public void doSelectTabAction(SynchVCSFileStatesModel model) { + log.info(model); + + String tabModelName = model.getName(); + ui.cardLayout.show(ui.preview, tabModelName); + VCSAction[] actions = model.getActions(); + List<String> acts = new ArrayList<String>(); + for (VCSAction action : actions) { + acts.add(action.name().toLowerCase()); + } + boolean hasActions = actions.length > 0; + ui.getDiffAll().setEnabled(hasActions && acts.contains("diff")); + ui.getUpdateAll().setEnabled(hasActions && acts.contains("update")); + ui.getCommitAll().setEnabled(hasActions && acts.contains("commit")); + ui.getRevertAll().setEnabled(hasActions && acts.contains("revert")); + ui.getDeleteAll().setEnabled(hasActions && acts.contains("delete")); + ui.getRefreshAll().setEnabled(hasActions); + } + + public void valueChanged(ListSelectionEvent e) { + ListSelectionModel list = (ListSelectionModel) e.getSource(); + if (!list.getValueIsAdjusting()) { + log.info(list); + } + } + + private class ListMouseListener extends MouseAdapter { + + private final AbstractVCSFileStatesModel model; + private final ListSelectionModel selectionModel; + private final JTable jTable; + private final JVCSPopup jPopupMenu; + + public ListMouseListener(JSynchUI ui, AbstractVCSFileStatesModel model) { + this.model = model; + String modelName = model.getName(); + + jPopupMenu = ui.getPopup(modelName); + + jTable = ui.getTable(modelName); + selectionModel = jTable.getSelectionModel(); + // init actions + + } + + @Override + public void mousePressed(MouseEvent e) { + super.mousePressed(e); + initPopup(e); + } + + @Override + public void mouseReleased(MouseEvent e) { + super.mouseReleased(e); + initPopup(e); + } + + @Override + public void mouseClicked(MouseEvent e) { + // nothing to do + } + + protected void initPopup(MouseEvent e) { + if (e.isPopupTrigger() && !selectionModel.isSelectionEmpty()) { + List<String> acts = new ArrayList<String>(); + for (VCSAction action : model.getActions(selectionModel)) { + acts.add(action.name().toLowerCase()); + } + boolean hasActions = !acts.isEmpty(); + jPopupMenu.getDiff().setEnabled(hasActions && acts.contains("diff")); + jPopupMenu.getUpdate().setEnabled(hasActions && acts.contains("update")); + jPopupMenu.getCommit().setEnabled(hasActions && acts.contains("commit")); + jPopupMenu.getRevert().setEnabled(hasActions && acts.contains("revert")); + jPopupMenu.getDelete().setEnabled(hasActions && acts.contains("delete")); + jPopupMenu.getRefresh().setEnabled(hasActions); + // display popup + jPopupMenu.show(jTable, e.getX(), e.getY()); + } + } + } +}
participants (1)
-
tchemit@users.labs.libre-entreprise.org