weasis阅片相关功能切换机制的分析
2017-05-11 16:31
239 查看
在View2d中专门有一个方法用于按钮的创建
protected JPopupMenu buidContexMenu(final MouseEvent evt) {
JPopupMenu popupMenu = new JPopupMenu();
TitleMenuItem itemTitle = new TitleMenuItem(Messages.getString("View2d.left_mouse"), popupMenu.getInsets()); //$NON-NLS-1$
popupMenu.add(itemTitle);
final EventManager event = EventManager.getInstance();
popupMenu.setLabel(MouseActions.LEFT);
String action = event.getMouseActions().getLeft();
ButtonGroup groupButtons = new ButtonGroup();
ImageViewerPlugin<DicomImageElement> view = eventManager.getSelectedView2dContainer();
if (view != null) {
final ViewerToolBar toolBar = view.getViewerToolBar();
if (toolBar != null) {
ActionListener leftButtonAction = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() instanceof JRadioButtonMenuItem) {
JRadioButtonMenuItem item = (JRadioButtonMenuItem) e.getSource();
toolBar.changeButtonState(MouseActions.LEFT, item.getActionCommand());
}
}
};
List<ActionW> actionsButtons = ViewerToolBar.actionsButtons;
synchronized (actionsButtons) {
for (int i = 0; i < actionsButtons.size(); i++) {
ActionW b = actionsButtons.get(i);
JRadioButtonMenuItem radio =
new JRadioButtonMenuItem(b.getTitle(), b.getIcon(), b.cmd().equals(action));
radio.setActionCommand(b.cmd());
radio.setAccelerator(KeyStroke.getKeyStroke(b.getKeyCode(), b.getModifier()));
// Trigger the selected mouse action
radio.addActionListener(toolBar);
// Update the state of the button in the toolbar
radio.addActionListener(leftButtonAction);
popupMenu.add(radio);
groupButtons.add(radio);
}
}
}
}
在他里面为每一个右键条目都增加了监听器,一个用于同步更新toolbar上按钮的状态
另一个用于修改相应的鼠标监听事件,该方法在ViewerToolBar中
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() instanceof JRadioButtonMenuItem) {
JRadioButtonMenuItem item = (JRadioButtonMenuItem) e.getSource();
if (item.getParent() instanceof JPopupMenu) {
JPopupMenu pop = (JPopupMenu) item.getParent();
MouseActions mouseActions = eventManager.getMouseActions();
mouseActions.setAction(pop.getLabel(), item.getActionCommand());
ImageViewerPlugin<E> view = eventManager.getSelectedView2dContainer();
if (view != null) {
view.setMouseActions(mouseActions);
}
if (pop.getInvoker() instanceof DropDownButton) {
changeButtonState(pop.getLabel(), item.getActionCommand());
}
}
}
}
然后就调用到了ImageViewerPlugin的如下方法
public synchronized void setMouseActions(MouseActions mouseActions) {
if (mouseActions == null) {
for (DefaultView2d<E> v : view2ds) {
v.disableMouseAndKeyListener();
// Let the possibility to get the focus
v.iniDefaultMouseListener();
}
} else {
for (DefaultView2d<E> v : view2ds) {
v.enableMouseAndKeyListener(mouseActions);
}
}
}
最后就是我们熟悉的View2d的enableMouseAndKeyListener方法用于修改具体的鼠标事件
protected JPopupMenu buidContexMenu(final MouseEvent evt) {
JPopupMenu popupMenu = new JPopupMenu();
TitleMenuItem itemTitle = new TitleMenuItem(Messages.getString("View2d.left_mouse"), popupMenu.getInsets()); //$NON-NLS-1$
popupMenu.add(itemTitle);
final EventManager event = EventManager.getInstance();
popupMenu.setLabel(MouseActions.LEFT);
String action = event.getMouseActions().getLeft();
ButtonGroup groupButtons = new ButtonGroup();
ImageViewerPlugin<DicomImageElement> view = eventManager.getSelectedView2dContainer();
if (view != null) {
final ViewerToolBar toolBar = view.getViewerToolBar();
if (toolBar != null) {
ActionListener leftButtonAction = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() instanceof JRadioButtonMenuItem) {
JRadioButtonMenuItem item = (JRadioButtonMenuItem) e.getSource();
toolBar.changeButtonState(MouseActions.LEFT, item.getActionCommand());
}
}
};
List<ActionW> actionsButtons = ViewerToolBar.actionsButtons;
synchronized (actionsButtons) {
for (int i = 0; i < actionsButtons.size(); i++) {
ActionW b = actionsButtons.get(i);
JRadioButtonMenuItem radio =
new JRadioButtonMenuItem(b.getTitle(), b.getIcon(), b.cmd().equals(action));
radio.setActionCommand(b.cmd());
radio.setAccelerator(KeyStroke.getKeyStroke(b.getKeyCode(), b.getModifier()));
// Trigger the selected mouse action
radio.addActionListener(toolBar);
// Update the state of the button in the toolbar
radio.addActionListener(leftButtonAction);
popupMenu.add(radio);
groupButtons.add(radio);
}
}
}
}
在他里面为每一个右键条目都增加了监听器,一个用于同步更新toolbar上按钮的状态
另一个用于修改相应的鼠标监听事件,该方法在ViewerToolBar中
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() instanceof JRadioButtonMenuItem) {
JRadioButtonMenuItem item = (JRadioButtonMenuItem) e.getSource();
if (item.getParent() instanceof JPopupMenu) {
JPopupMenu pop = (JPopupMenu) item.getParent();
MouseActions mouseActions = eventManager.getMouseActions();
mouseActions.setAction(pop.getLabel(), item.getActionCommand());
ImageViewerPlugin<E> view = eventManager.getSelectedView2dContainer();
if (view != null) {
view.setMouseActions(mouseActions);
}
if (pop.getInvoker() instanceof DropDownButton) {
changeButtonState(pop.getLabel(), item.getActionCommand());
}
}
}
}
然后就调用到了ImageViewerPlugin的如下方法
public synchronized void setMouseActions(MouseActions mouseActions) {
if (mouseActions == null) {
for (DefaultView2d<E> v : view2ds) {
v.disableMouseAndKeyListener();
// Let the possibility to get the focus
v.iniDefaultMouseListener();
}
} else {
for (DefaultView2d<E> v : view2ds) {
v.enableMouseAndKeyListener(mouseActions);
}
}
}
最后就是我们熟悉的View2d的enableMouseAndKeyListener方法用于修改具体的鼠标事件
相关文章推荐
- XP下关于快速切换用户功能的相关编程
- [深入分析BREW机制]:Mod相关概念解析
- ListView回收机制相关分析
- android源码分析(一) - 语言切换机制
- hadoop2.0的DataNode与NameNode交互机制相关代码分析
- 智能客户端相关Application Block结构功能分析(一)
- Android源码分析一:语言切换机制
- ListView回收机制相关分析
- Android AdapterView 源码分析以及其相关回收机制的分析
- ListView回收机制相关分析
- 地理信息系统中的常规网络分析功能及相关算法
- 分析一个字符串生成相关查询条件,比如搜索相关文章的功能
- 内存屏障机制及内核相关源代码分析
- ListView回收机制相关分析
- Android AdapterView 源码分析以及其相关回收机制的分析
- XP下关于快速切换用户功能的相关编程
- Android笔记四 虚拟机Dalvik、Android各种java包功能、Android相关文件类型、应用程序结构分析、ADB
- [WP相关]WP无法留言问题分析总结,博客恢复留言功能通知
- DataNode与NameNode交互机制相关代码分析 推荐
- spark源码学习(二)---Master源码分析(1)-master的主备切换机制