From 59f593ab81e904a97c27d4610bd5e7379bad6f3e Mon Sep 17 00:00:00 2001 From: daniel Date: Mon, 10 Oct 2016 11:35:58 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E8=AE=BE=E8=AE=A1=E5=99=A8=E8=B6=8A?= =?UTF-8?q?=E6=9D=A5=E8=B6=8A=E5=8D=A1=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../actions/cell/GlobalStyleMenuDef.java | 48 +++++++++++++++++-- .../com/fr/grid/selection/CellSelection.java | 7 ++- 2 files changed, 51 insertions(+), 4 deletions(-) diff --git a/designer/src/com/fr/design/actions/cell/GlobalStyleMenuDef.java b/designer/src/com/fr/design/actions/cell/GlobalStyleMenuDef.java index b33d269966..08cbf2d87d 100644 --- a/designer/src/com/fr/design/actions/cell/GlobalStyleMenuDef.java +++ b/designer/src/com/fr/design/actions/cell/GlobalStyleMenuDef.java @@ -8,19 +8,27 @@ import com.fr.base.BaseUtils; import com.fr.base.ConfigManager; import com.fr.base.NameStyle; import com.fr.design.actions.ElementCaseAction; +import com.fr.design.actions.TemplateComponentAction; import com.fr.design.actions.UpdateAction; import com.fr.design.gui.imenu.UIMenu; import com.fr.design.mainframe.CellElementPropertyPane; +import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.ElementCasePane; import com.fr.design.menu.KeySetUtils; import com.fr.design.menu.MenuDef; +import com.fr.design.selection.SelectionEvent; +import com.fr.design.selection.SelectionListener; import com.fr.design.style.StylePane; import com.fr.general.Inter; import com.fr.base.ConfigManagerProvider; +import com.fr.grid.selection.CellSelection; +import com.fr.grid.selection.Selection; import com.fr.stable.StringUtils; import com.fr.stable.pinyin.PinyinHelper; import java.awt.event.ActionEvent; +import java.awt.event.HierarchyEvent; +import java.awt.event.HierarchyListener; import java.util.Iterator; public class GlobalStyleMenuDef extends MenuDef { @@ -46,8 +54,9 @@ public class GlobalStyleMenuDef extends MenuDef { while (iterator.hasNext()) { String name = (String) iterator.next(); NameStyle nameStyle = NameStyle.getInstance(name); - - UpdateAction.UseMenuItem useMenuItem = new GlobalStyleSelection(ePane, nameStyle).createUseMenuItem(); + GlobalStyleSelection selection = new GlobalStyleSelection(ePane, nameStyle); + UpdateAction.UseMenuItem useMenuItem =selection.createUseMenuItem(); + selection.registerSelectionListener(ePane, useMenuItem); useMenuItem.setNameStyle(nameStyle); createdMenu.add(useMenuItem); } @@ -113,7 +122,9 @@ public class GlobalStyleMenuDef extends MenuDef { } - public static class GlobalStyleSelection extends ElementCaseAction { + + + public static class GlobalStyleSelection extends TemplateComponentAction { private NameStyle nameStyle; @@ -149,5 +160,36 @@ public class GlobalStyleMenuDef extends MenuDef { stylePane.updateGlobalStyle(getEditingComponent()); return true; } + + private SelectionListener createSelectionListener (){ + return new SelectionListener (){ + + @Override + public void selectionChanged(SelectionEvent e) { + update(); + if (DesignerContext.getFormatState() != DesignerContext.FORMAT_STATE_NULL) { + Selection selection = getEditingComponent().getSelection(); + if (selection instanceof CellSelection) { + CellSelection cellselection = (CellSelection) selection; + //样式处理 + getEditingComponent().setCellNeedTOFormat(cellselection); + } + } + } + }; + } + + + public void registerSelectionListener(final ElementCasePane ePane, UseMenuItem useMenuItem) { + + SelectionListener listener = createSelectionListener(); + ePane.addSelectionChangeListener(listener); + useMenuItem.addHierarchyListener(new HierarchyListener(){ + @Override + public void hierarchyChanged(HierarchyEvent e) { + ePane.removeSelectionChangeListener(listener); + } + }); + } } } \ No newline at end of file diff --git a/designer/src/com/fr/grid/selection/CellSelection.java b/designer/src/com/fr/grid/selection/CellSelection.java index ef7fa3e1e4..e7b5b493c4 100644 --- a/designer/src/com/fr/grid/selection/CellSelection.java +++ b/designer/src/com/fr/grid/selection/CellSelection.java @@ -24,6 +24,7 @@ import com.fr.design.mainframe.JTemplate; import com.fr.design.menu.KeySetUtils; import com.fr.design.report.RowColumnPane; import com.fr.design.selection.QuickEditor; +import com.fr.design.selection.SelectionListener; import com.fr.general.Inter; import com.fr.grid.GridUtils; import com.fr.report.cell.CellElement; @@ -36,6 +37,8 @@ import com.fr.stable.StableUtils; import javax.swing.*; import java.awt.*; +import java.awt.event.HierarchyEvent; +import java.awt.event.HierarchyListener; import java.util.ArrayList; import java.util.Iterator; import java.util.List; @@ -434,7 +437,9 @@ public class CellSelection extends Selection { String name = (String) iterato.next(); name = GlobalStyleMenuDef.judgeChina(name); NameStyle nameStyle = NameStyle.getInstance(name); - UpdateAction.UseMenuItem useMenuItem = new GlobalStyleSelection(ePane, nameStyle).createUseMenuItem(); + GlobalStyleSelection selection = new GlobalStyleSelection(ePane, nameStyle); + UpdateAction.UseMenuItem useMenuItem = selection.createUseMenuItem(); + selection.registerSelectionListener(ePane, useMenuItem); useMenuItem.setNameStyle(nameStyle); styleMenu.add(useMenuItem); } From a7ea035308f895222bf20a53fd70acee8b5e9d74 Mon Sep 17 00:00:00 2001 From: daniel Date: Mon, 10 Oct 2016 16:08:41 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E5=86=85=E5=AD=98=E9=87=8A=E6=94=BE?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../actions/cell/GlobalStyleMenuDef.java | 60 +++++++++++++------ .../com/fr/grid/selection/CellSelection.java | 4 +- .../com/fr/design/actions/UpdateAction.java | 27 +++++++++ .../src/com/fr/design/menu/MenuDef.java | 11 +++- 4 files changed, 77 insertions(+), 25 deletions(-) diff --git a/designer/src/com/fr/design/actions/cell/GlobalStyleMenuDef.java b/designer/src/com/fr/design/actions/cell/GlobalStyleMenuDef.java index 08cbf2d87d..98fde3f751 100644 --- a/designer/src/com/fr/design/actions/cell/GlobalStyleMenuDef.java +++ b/designer/src/com/fr/design/actions/cell/GlobalStyleMenuDef.java @@ -26,9 +26,8 @@ import com.fr.grid.selection.Selection; import com.fr.stable.StringUtils; import com.fr.stable.pinyin.PinyinHelper; -import java.awt.event.ActionEvent; -import java.awt.event.HierarchyEvent; -import java.awt.event.HierarchyListener; +import java.awt.*; +import java.awt.event.*; import java.util.Iterator; public class GlobalStyleMenuDef extends MenuDef { @@ -43,6 +42,36 @@ public class GlobalStyleMenuDef extends MenuDef { this.setIconPath("/com/fr/design/images/m_web/style.png"); } + protected ContainerListener getContainerListener() { + return containerListener; + } + + private ContainerListener containerListener = new ContainerListener() { + @Override + public void componentAdded(ContainerEvent e) { + + } + + @Override + public void componentRemoved(ContainerEvent e) { + Component c = e.getChild(); + c.dispatchEvent(new MenuDeleteEvent(c)); + } + }; + + private class MenuDeleteEvent extends UpdateAction.ComponentRemoveEvent { + + public MenuDeleteEvent(Component source) { + super(source); + } + + @Override + public void release(SelectionListener listener) { + ePane.removeSelectionChangeListener(listener); + } + } + + /** * 更新菜单项 */ @@ -54,9 +83,7 @@ public class GlobalStyleMenuDef extends MenuDef { while (iterator.hasNext()) { String name = (String) iterator.next(); NameStyle nameStyle = NameStyle.getInstance(name); - GlobalStyleSelection selection = new GlobalStyleSelection(ePane, nameStyle); - UpdateAction.UseMenuItem useMenuItem =selection.createUseMenuItem(); - selection.registerSelectionListener(ePane, useMenuItem); + UpdateAction.UseMenuItem useMenuItem =new GlobalStyleSelection(ePane, nameStyle).createUseMenuItem(); useMenuItem.setNameStyle(nameStyle); createdMenu.add(useMenuItem); } @@ -161,6 +188,14 @@ public class GlobalStyleMenuDef extends MenuDef { return true; } + public UseMenuItem createUseMenuItem() { + UseMenuItem useMenuItem = super.createUseMenuItem(); + SelectionListener listener = createSelectionListener(); + getEditingComponent().addSelectionChangeListener(listener); + useMenuItem.setSelectionListener(listener); + return useMenuItem; + } + private SelectionListener createSelectionListener (){ return new SelectionListener (){ @@ -178,18 +213,5 @@ public class GlobalStyleMenuDef extends MenuDef { } }; } - - - public void registerSelectionListener(final ElementCasePane ePane, UseMenuItem useMenuItem) { - - SelectionListener listener = createSelectionListener(); - ePane.addSelectionChangeListener(listener); - useMenuItem.addHierarchyListener(new HierarchyListener(){ - @Override - public void hierarchyChanged(HierarchyEvent e) { - ePane.removeSelectionChangeListener(listener); - } - }); - } } } \ No newline at end of file diff --git a/designer/src/com/fr/grid/selection/CellSelection.java b/designer/src/com/fr/grid/selection/CellSelection.java index e7b5b493c4..daaac7e26f 100644 --- a/designer/src/com/fr/grid/selection/CellSelection.java +++ b/designer/src/com/fr/grid/selection/CellSelection.java @@ -437,9 +437,7 @@ public class CellSelection extends Selection { String name = (String) iterato.next(); name = GlobalStyleMenuDef.judgeChina(name); NameStyle nameStyle = NameStyle.getInstance(name); - GlobalStyleSelection selection = new GlobalStyleSelection(ePane, nameStyle); - UpdateAction.UseMenuItem useMenuItem = selection.createUseMenuItem(); - selection.registerSelectionListener(ePane, useMenuItem); + UpdateAction.UseMenuItem useMenuItem = new GlobalStyleSelection(ePane, nameStyle).createUseMenuItem(); useMenuItem.setNameStyle(nameStyle); styleMenu.add(useMenuItem); } diff --git a/designer_base/src/com/fr/design/actions/UpdateAction.java b/designer_base/src/com/fr/design/actions/UpdateAction.java index 72cd74c537..93a553f9ca 100644 --- a/designer_base/src/com/fr/design/actions/UpdateAction.java +++ b/designer_base/src/com/fr/design/actions/UpdateAction.java @@ -12,10 +12,13 @@ import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.imenu.UICheckBoxMenuItem; import com.fr.design.gui.imenu.UIMenuItem; import com.fr.design.menu.ShortCut; +import com.fr.design.selection.SelectionListener; import com.fr.stable.StringUtils; import javax.swing.*; import java.awt.*; +import java.awt.event.ComponentEvent; +import java.awt.event.ContainerEvent; import java.beans.PropertyChangeListener; import java.util.HashMap; import java.util.Iterator; @@ -321,12 +324,24 @@ public abstract class UpdateAction extends ShortCut implements Action { toolBar.add(this.createToolBarComponent()); } + public abstract static class ComponentRemoveEvent extends ComponentEvent { + + private static int EVENT_DELETE= 3001; + + public ComponentRemoveEvent(Component source) { + super(source, EVENT_DELETE); + } + + public abstract void release(SelectionListener listener); + } + /** * 全局style的菜单 */ public static class UseMenuItem extends UIMenuItem { private NameStyle nameStyle; + private SelectionListener listener; public UseMenuItem(Action action) { super(action); @@ -337,6 +352,18 @@ public abstract class UpdateAction extends ShortCut implements Action { super(text, icon); } + protected void processEvent(AWTEvent e) { + if (e instanceof ComponentRemoveEvent) { + ((ComponentRemoveEvent) e).release(listener); + return; + } + super.processEvent(e); + } + + public void setSelectionListener(SelectionListener listener) { + this.listener = listener; + } + @Override public void paintComponent(Graphics g) { super.paintComponent(g); diff --git a/designer_base/src/com/fr/design/menu/MenuDef.java b/designer_base/src/com/fr/design/menu/MenuDef.java index aeee4dfb4d..bf85652fd2 100644 --- a/designer_base/src/com/fr/design/menu/MenuDef.java +++ b/designer_base/src/com/fr/design/menu/MenuDef.java @@ -13,9 +13,7 @@ import javax.swing.*; import javax.swing.event.MenuEvent; import javax.swing.event.MenuListener; import java.awt.*; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.awt.event.MouseListener; +import java.awt.event.*; import java.util.ArrayList; import java.util.List; @@ -164,11 +162,18 @@ public class MenuDef extends ShortCut { createdJMenu.setIcon(BaseUtils.readIcon(this.iconPath)); } createdJMenu.addMenuListener(menuDefListener); + ContainerListener listener = getContainerListener(); + if(listener != null){ + createdJMenu.getPopupMenu().addContainerListener(listener); + } } return createdJMenu; } + protected ContainerListener getContainerListener() { + return null; + } /** * 生成 JPopupMenu * @return 弹出菜单 From 9548f020d731195a1d244ad354a21a16623ec3d2 Mon Sep 17 00:00:00 2001 From: daniel Date: Mon, 10 Oct 2016 16:17:07 +0800 Subject: [PATCH 3/4] import --- designer/src/com/fr/grid/selection/CellSelection.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/designer/src/com/fr/grid/selection/CellSelection.java b/designer/src/com/fr/grid/selection/CellSelection.java index daaac7e26f..ef7fa3e1e4 100644 --- a/designer/src/com/fr/grid/selection/CellSelection.java +++ b/designer/src/com/fr/grid/selection/CellSelection.java @@ -24,7 +24,6 @@ import com.fr.design.mainframe.JTemplate; import com.fr.design.menu.KeySetUtils; import com.fr.design.report.RowColumnPane; import com.fr.design.selection.QuickEditor; -import com.fr.design.selection.SelectionListener; import com.fr.general.Inter; import com.fr.grid.GridUtils; import com.fr.report.cell.CellElement; @@ -37,8 +36,6 @@ import com.fr.stable.StableUtils; import javax.swing.*; import java.awt.*; -import java.awt.event.HierarchyEvent; -import java.awt.event.HierarchyListener; import java.util.ArrayList; import java.util.Iterator; import java.util.List; From 9e3fe437e286aebd904a9ec4c8f4d9649bfe8f2e Mon Sep 17 00:00:00 2001 From: daniel Date: Mon, 10 Oct 2016 16:23:35 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/actions/ElementCaseAction.java | 18 ++-------- .../actions/SelectionListenerAction.java | 36 +++++++++++++++++++ .../actions/cell/GlobalStyleMenuDef.java | 20 ++--------- 3 files changed, 40 insertions(+), 34 deletions(-) create mode 100644 designer/src/com/fr/design/actions/SelectionListenerAction.java diff --git a/designer/src/com/fr/design/actions/ElementCaseAction.java b/designer/src/com/fr/design/actions/ElementCaseAction.java index be9ff9f9a8..bfc0c8b4e5 100644 --- a/designer/src/com/fr/design/actions/ElementCaseAction.java +++ b/designer/src/com/fr/design/actions/ElementCaseAction.java @@ -10,24 +10,10 @@ import com.fr.grid.selection.Selection; import com.fr.design.selection.SelectionEvent; import com.fr.design.selection.SelectionListener; -public abstract class ElementCaseAction extends TemplateComponentAction { +public abstract class ElementCaseAction extends SelectionListenerAction { protected ElementCaseAction(ElementCasePane t) { super(t); - t.addSelectionChangeListener(new SelectionListener() { - - @Override - public void selectionChanged(SelectionEvent e) { - update(); - if (DesignerContext.getFormatState() != DesignerContext.FORMAT_STATE_NULL) { - Selection selection = getEditingComponent().getSelection(); - if (selection instanceof CellSelection) { - CellSelection cellselection = (CellSelection) selection; - //样式处理 - getEditingComponent().setCellNeedTOFormat(cellselection); - } - } - } - }); + t.addSelectionChangeListener(createSelectionListener()); } } \ No newline at end of file diff --git a/designer/src/com/fr/design/actions/SelectionListenerAction.java b/designer/src/com/fr/design/actions/SelectionListenerAction.java new file mode 100644 index 0000000000..48cd2d4f9a --- /dev/null +++ b/designer/src/com/fr/design/actions/SelectionListenerAction.java @@ -0,0 +1,36 @@ +package com.fr.design.actions; + +import com.fr.design.mainframe.DesignerContext; +import com.fr.design.mainframe.ElementCasePane; +import com.fr.design.selection.SelectionEvent; +import com.fr.design.selection.SelectionListener; +import com.fr.grid.selection.CellSelection; +import com.fr.grid.selection.Selection; + +/** + * Created by daniel on 2016/10/10. + */ +public abstract class SelectionListenerAction extends TemplateComponentAction { + + protected SelectionListenerAction(ElementCasePane elementCasePane) { + super(elementCasePane); + } + + protected SelectionListener createSelectionListener () { + return new SelectionListener() { + + @Override + public void selectionChanged(SelectionEvent e) { + update(); + if (DesignerContext.getFormatState() != DesignerContext.FORMAT_STATE_NULL) { + Selection selection = getEditingComponent().getSelection(); + if (selection instanceof CellSelection) { + CellSelection cellselection = (CellSelection) selection; + //样式处理 + getEditingComponent().setCellNeedTOFormat(cellselection); + } + } + } + }; + } +} diff --git a/designer/src/com/fr/design/actions/cell/GlobalStyleMenuDef.java b/designer/src/com/fr/design/actions/cell/GlobalStyleMenuDef.java index 98fde3f751..27adef643a 100644 --- a/designer/src/com/fr/design/actions/cell/GlobalStyleMenuDef.java +++ b/designer/src/com/fr/design/actions/cell/GlobalStyleMenuDef.java @@ -8,6 +8,7 @@ import com.fr.base.BaseUtils; import com.fr.base.ConfigManager; import com.fr.base.NameStyle; import com.fr.design.actions.ElementCaseAction; +import com.fr.design.actions.SelectionListenerAction; import com.fr.design.actions.TemplateComponentAction; import com.fr.design.actions.UpdateAction; import com.fr.design.gui.imenu.UIMenu; @@ -151,7 +152,7 @@ public class GlobalStyleMenuDef extends MenuDef { - public static class GlobalStyleSelection extends TemplateComponentAction { + public static class GlobalStyleSelection extends SelectionListenerAction { private NameStyle nameStyle; @@ -196,22 +197,5 @@ public class GlobalStyleMenuDef extends MenuDef { return useMenuItem; } - private SelectionListener createSelectionListener (){ - return new SelectionListener (){ - - @Override - public void selectionChanged(SelectionEvent e) { - update(); - if (DesignerContext.getFormatState() != DesignerContext.FORMAT_STATE_NULL) { - Selection selection = getEditingComponent().getSelection(); - if (selection instanceof CellSelection) { - CellSelection cellselection = (CellSelection) selection; - //样式处理 - getEditingComponent().setCellNeedTOFormat(cellselection); - } - } - } - }; - } } } \ No newline at end of file