43 |
43 |
import java.util.Enumeration;
|
44 |
44 |
import java.util.HashMap;
|
45 |
45 |
import java.util.Iterator;
|
|
46 |
import java.util.List;
|
46 |
47 |
import java.util.Map;
|
47 |
48 |
import java.util.Map.Entry;
|
48 |
49 |
import java.util.NoSuchElementException;
|
... | ... | |
52 |
53 |
import javax.swing.AbstractButton;
|
53 |
54 |
import javax.swing.ButtonGroup;
|
54 |
55 |
import javax.swing.ImageIcon;
|
|
56 |
import javax.swing.JButton;
|
55 |
57 |
import javax.swing.JComponent;
|
56 |
58 |
import javax.swing.JFileChooser;
|
57 |
59 |
import javax.swing.JFrame;
|
... | ... | |
62 |
64 |
import javax.swing.JPopupMenu;
|
63 |
65 |
import javax.swing.JSeparator;
|
64 |
66 |
import javax.swing.JToolBar;
|
|
67 |
import javax.swing.KeyStroke;
|
65 |
68 |
import javax.swing.MenuElement;
|
66 |
69 |
import javax.swing.SwingUtilities;
|
67 |
70 |
import javax.swing.Timer;
|
68 |
71 |
import javax.swing.WindowConstants;
|
69 |
72 |
import javax.swing.filechooser.FileFilter;
|
70 |
73 |
|
71 |
|
import org.slf4j.Logger;
|
72 |
|
import org.slf4j.LoggerFactory;
|
73 |
|
|
74 |
74 |
import org.gvsig.andami.IconThemeHelper;
|
75 |
75 |
import org.gvsig.andami.Launcher;
|
76 |
76 |
import org.gvsig.andami.LibraryExtension;
|
... | ... | |
93 |
93 |
import org.gvsig.andami.ui.mdiManager.MDIManager;
|
94 |
94 |
import org.gvsig.andami.ui.mdiManager.MDIManagerFactory;
|
95 |
95 |
import org.gvsig.gui.beans.controls.IControl;
|
|
96 |
import org.gvsig.tools.ToolsLocator;
|
|
97 |
import org.gvsig.tools.i18n.I18nManager;
|
96 |
98 |
import org.gvsig.tools.swing.api.ToolsSwingLocator;
|
97 |
99 |
import org.gvsig.tools.swing.icontheme.IconTheme;
|
98 |
|
import org.gvsig.tools.task.RunnableWithParameters;
|
|
100 |
import org.slf4j.Logger;
|
|
101 |
import org.slf4j.LoggerFactory;
|
99 |
102 |
|
100 |
103 |
/**
|
101 |
104 |
* Main application window.
|
... | ... | |
447 |
450 |
}
|
448 |
451 |
}
|
449 |
452 |
|
|
453 |
public void addTool(final ActionInfo action, final String toolBarName) {
|
|
454 |
I18nManager i18nManager = ToolsLocator.getI18nManager();
|
|
455 |
|
|
456 |
if (!SwingUtilities.isEventDispatchThread()) {
|
|
457 |
SwingUtilities.invokeLater(new Runnable() {
|
|
458 |
public void run() {
|
|
459 |
addTool(action, toolBarName);
|
|
460 |
}
|
|
461 |
});
|
|
462 |
return;
|
|
463 |
}
|
|
464 |
JToolBarButton btn = new JToolBarButton(action.getIcon());
|
|
465 |
btn.setMargin(new Insets(0, 0, 0, 0));
|
|
466 |
btn.addMouseListener(tooltipListener);
|
|
467 |
btn.addActionListener(this);
|
|
468 |
btn.setFocusable(false);
|
|
469 |
btn.setActionCommand(action.getCommand());
|
|
470 |
btn.setEnabled(false);
|
|
471 |
btn.setVisible(false);
|
|
472 |
btn.setName(action.getName());
|
|
473 |
if (action.getTooltip() != null) {
|
|
474 |
btn.setToolTip(i18nManager.getTranslation(action.getTooltip()));
|
|
475 |
}
|
|
476 |
|
|
477 |
SelectableToolBar jtb = (SelectableToolBar) toolBarMap.get(toolBarName);
|
|
478 |
if (jtb == null) {
|
|
479 |
jtb = new SelectableToolBar(toolBarName);
|
|
480 |
jtb.setRollover(true);
|
|
481 |
jtb.setAndamiVisibility(true);
|
|
482 |
toolBarMap.put(toolBarName, jtb);
|
|
483 |
toolBars.add(jtb);
|
|
484 |
}
|
|
485 |
jtb.add(btn);
|
|
486 |
|
|
487 |
controlClass.put(btn, action.getExtension().getClass());
|
|
488 |
}
|
|
489 |
|
450 |
490 |
/**
|
451 |
491 |
* Creates the needed menu structure to add the menu to the bar.
|
452 |
492 |
* Returns the father which must hold the menu which was
|
... | ... | |
464 |
504 |
* @return The proper father for the menu which was provided as parameter
|
465 |
505 |
*/
|
466 |
506 |
private JMenu createMenuAncestors(Menu menu, PluginClassLoader loader) {
|
|
507 |
return createMenuAncestors(menu.getText());
|
|
508 |
}
|
|
509 |
|
|
510 |
private JMenu createMenuAncestors(String text) {
|
|
511 |
I18nManager i18nManager = ToolsLocator.getI18nManager();
|
|
512 |
|
467 |
513 |
MenuElement menuPadre = null;
|
468 |
514 |
|
469 |
|
PluginServices ps =
|
470 |
|
PluginServices.getPluginServices(loader.getPluginName());
|
471 |
|
|
472 |
|
String[] menues = menu.getText().split("/");
|
473 |
|
ArrayList menuList = new ArrayList();
|
|
515 |
String[] menues = text.split("/");
|
|
516 |
List menuList = new ArrayList();
|
474 |
517 |
menuList.add(menues[0]);
|
475 |
518 |
menuPadre = getMenu(menuList, menuBar);
|
476 |
519 |
|
477 |
520 |
JMenu padre = null;
|
478 |
521 |
|
479 |
522 |
if (menuPadre == null) {
|
480 |
|
padre = new JMenu(ps.getText(menues[0]));
|
|
523 |
padre = new JMenu(i18nManager.getTranslation(menues[0]));
|
481 |
524 |
padre.setName(menues[0]);
|
482 |
525 |
menuBar.add(padre);
|
483 |
526 |
} else
|
484 |
527 |
if (menuPadre instanceof JMenu) {
|
485 |
528 |
padre = (JMenu) menuPadre;
|
486 |
529 |
} else {
|
487 |
|
logger.error(ps
|
488 |
|
.getText("error_creating_menu_Ancestor_does_not_exist"));
|
|
530 |
logger.error(i18nManager.getTranslation("error_creating_menu_Ancestor_does_not_exist"));
|
489 |
531 |
return null;
|
490 |
532 |
}
|
491 |
533 |
|
... | ... | |
540 |
582 |
controlClass.put(nuevoMenu, classExtension);
|
541 |
583 |
}
|
542 |
584 |
|
|
585 |
public void addMenu(final ActionInfo action, final String text) {
|
|
586 |
if (!SwingUtilities.isEventDispatchThread()) {
|
|
587 |
SwingUtilities.invokeLater(new Runnable() {
|
|
588 |
public void run() {
|
|
589 |
addMenu(action,text);
|
|
590 |
}
|
|
591 |
});
|
|
592 |
return;
|
|
593 |
}
|
|
594 |
JMenu menuPadre = createMenuAncestors(text);
|
|
595 |
JMenuItem nuevoMenu = createJMenuItem(action, text);
|
|
596 |
nuevoMenu.addMouseListener(tooltipListener);
|
|
597 |
menuPadre.add(nuevoMenu);
|
|
598 |
Class<? extends IExtension> classExtension = action.getExtension().getClass();
|
|
599 |
controlClass.put(nuevoMenu, classExtension);
|
|
600 |
}
|
|
601 |
|
543 |
602 |
/**
|
544 |
603 |
* Dado un array de nombres de menu, encuentra el men�
|
545 |
604 |
*
|
... | ... | |
550 |
609 |
*
|
551 |
610 |
* @return DOCUMENT ME!
|
552 |
611 |
*/
|
553 |
|
private javax.swing.JMenuItem getMenu(ArrayList nombres, MenuElement parent) {
|
|
612 |
private javax.swing.JMenuItem getMenu(List nombres, MenuElement parent) {
|
554 |
613 |
if (parent instanceof javax.swing.JMenu) {
|
555 |
614 |
javax.swing.JMenu parentItem = (javax.swing.JMenu) parent;
|
556 |
615 |
|
... | ... | |
626 |
685 |
* @param nombres
|
627 |
686 |
* @return
|
628 |
687 |
*/
|
629 |
|
private boolean lastMenuItemWithoutName(Component mc, ArrayList names) {
|
|
688 |
private boolean lastMenuItemWithoutName(Component mc, List names) {
|
630 |
689 |
|
631 |
690 |
/*
|
632 |
691 |
* names must have 1 string
|
... | ... | |
949 |
1008 |
return nuevoMenu;
|
950 |
1009 |
}
|
951 |
1010 |
|
|
1011 |
private JMenuItem createJMenuItem(ActionInfo action, String text) {
|
|
1012 |
I18nManager i18nManager = ToolsLocator.getI18nManager();
|
|
1013 |
JMenuItem nuevoMenu = null;
|
|
1014 |
String label = null;
|
|
1015 |
|
|
1016 |
if( text == null ) {
|
|
1017 |
label = action.getLabel();
|
|
1018 |
} else if( text.contains("/") ) {
|
|
1019 |
String[] ss = text.split("/");
|
|
1020 |
label = ss[ss.length-1];
|
|
1021 |
} else {
|
|
1022 |
label = text;
|
|
1023 |
}
|
|
1024 |
String translatedText = i18nManager.getTranslation(label);
|
|
1025 |
if( action.getIconName()!=null ) {
|
|
1026 |
ImageIcon image = action.getIcon();
|
|
1027 |
if ( image != null) {
|
|
1028 |
nuevoMenu = new JMenuItem(translatedText, image);
|
|
1029 |
} else {
|
|
1030 |
nuevoMenu = new JMenuItem(translatedText);
|
|
1031 |
}
|
|
1032 |
} else {
|
|
1033 |
nuevoMenu = new JMenuItem(translatedText);
|
|
1034 |
}
|
|
1035 |
nuevoMenu.setName(action.getName());
|
|
1036 |
KeyStroke key = action.getKeyStroke();
|
|
1037 |
if ( key!= null) {
|
|
1038 |
nuevoMenu.setAccelerator(key);
|
|
1039 |
}
|
|
1040 |
nuevoMenu.setActionCommand(action.getCommand());
|
|
1041 |
if (action.getTooltip() != null) {
|
|
1042 |
nuevoMenu.setToolTip(i18nManager.getTranslation(action.getTooltip()));
|
|
1043 |
}
|
|
1044 |
nuevoMenu.setEnabled(true);
|
|
1045 |
nuevoMenu.setVisible(true);
|
|
1046 |
nuevoMenu.addActionListener(action);
|
|
1047 |
return nuevoMenu;
|
|
1048 |
}
|
|
1049 |
|
952 |
1050 |
/**
|
953 |
1051 |
* Muestra u oculta el menu de nombre 'name'
|
954 |
1052 |
*
|