From 59f593ab81e904a97c27d4610bd5e7379bad6f3e Mon Sep 17 00:00:00 2001 From: daniel Date: Mon, 10 Oct 2016 11:35:58 +0800 Subject: [PATCH 01/22] =?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 b33d26996..08cbf2d87 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 ef7fa3e1e..e7b5b493c 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 768c49fd4f4b2c3ea4c35bf55531cb8d690205bb Mon Sep 17 00:00:00 2001 From: PanLi320 <854954082@qq.com> Date: Mon, 10 Oct 2016 14:56:57 +0800 Subject: [PATCH 02/22] =?UTF-8?q?bugfix=EF=BC=9AQQ=E6=8E=88=E6=9D=83?= =?UTF-8?q?=E7=99=BB=E9=99=86=E4=B9=8B=E5=90=8E=EF=BC=8C=E5=85=B3=E9=97=AD?= =?UTF-8?q?=E8=AE=BE=E8=AE=A1=E5=99=A8=E5=86=8D=E7=99=BB=E9=99=86=EF=BC=8C?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E5=90=8D=E4=B8=8D=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 但是有个问题,之前的逻辑是记录用户名密码的,但是qq授权拿不到解密之前的用户名密码,不能做再登陆的操作,如果客户那时候修改密码,那实际上这边还是 可以登陆的,算是一个漏洞吧。 --- .../src/com/fr/design/mainframe/bbs/UserInfoPane.java | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/designer/src/com/fr/design/mainframe/bbs/UserInfoPane.java b/designer/src/com/fr/design/mainframe/bbs/UserInfoPane.java index b8a168baa..df18f1f88 100644 --- a/designer/src/com/fr/design/mainframe/bbs/UserInfoPane.java +++ b/designer/src/com/fr/design/mainframe/bbs/UserInfoPane.java @@ -77,12 +77,11 @@ public class UserInfoPane extends BasicPane{ @Override public void run() { String username = DesignerEnvManager.getEnvManager().getBBSName(); - String password = DesignerEnvManager.getEnvManager().getBBSPassword(); - String loginResult = LoginWebBridge.getHelper().login(username, password); - if (loginResult.equals(LOGININ)) { - markSignIn(username); - }else { + String inShowUsername = DesignerEnvManager.getEnvManager().getInShowBBsName(); + if (StringUtils.isEmpty(username) && StringUtils.isEmpty(inShowUsername)){ markUnSignIn(); + } else { + markSignIn(username); } } }); From a7ea035308f895222bf20a53fd70acee8b5e9d74 Mon Sep 17 00:00:00 2001 From: daniel Date: Mon, 10 Oct 2016 16:08:41 +0800 Subject: [PATCH 03/22] =?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 08cbf2d87..98fde3f75 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 e7b5b493c..daaac7e26 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 72cd74c53..93a553f9c 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 aeee4dfb4..bf85652fd 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 04/22] 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 daaac7e26..ef7fa3e1e 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 05/22] =?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 be9ff9f9a..bfc0c8b4e 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 000000000..48cd2d4f9 --- /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 98fde3f75..27adef643 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 From cf87ab28afbe87c923c7f67ac8bf7ab9a5460be3 Mon Sep 17 00:00:00 2001 From: PanLi320 <854954082@qq.com> Date: Mon, 10 Oct 2016 17:32:21 +0800 Subject: [PATCH 06/22] =?UTF-8?q?bugfix:=E6=B2=A1=E6=9C=89qq=E6=8E=88?= =?UTF-8?q?=E6=9D=83=E7=9A=84=E8=B4=A6=E5=8F=B7=E7=BB=91=E5=AE=9A=E5=9C=B0?= =?UTF-8?q?=E5=9D=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- designer_base/src/com/fr/design/extra/QQLoginWebBridge.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer_base/src/com/fr/design/extra/QQLoginWebBridge.java b/designer_base/src/com/fr/design/extra/QQLoginWebBridge.java index a2826cd0d..140c89748 100644 --- a/designer_base/src/com/fr/design/extra/QQLoginWebBridge.java +++ b/designer_base/src/com/fr/design/extra/QQLoginWebBridge.java @@ -117,7 +117,7 @@ public class QQLoginWebBridge { //账号没有QQ授权 closeQQWindow(); try { - Desktop.getDesktop().browse(new URI(SiteCenter.getInstance().acquireUrlByKind("bbs.default"))); + Desktop.getDesktop().browse(new URI(SiteCenter.getInstance().acquireUrlByKind("QQ_binding"))); }catch (Exception exp) { } } From d2e20d9f5c05f7a563da13063f702bc829c2ef7e Mon Sep 17 00:00:00 2001 From: kerry Date: Tue, 11 Oct 2016 10:50:04 +0800 Subject: [PATCH 07/22] =?UTF-8?q?REPORT-407=20=E8=8B=B1=E6=96=87=E8=AE=BE?= =?UTF-8?q?=E8=AE=A1=E5=99=A8=E5=B8=83=E5=B1=80=E4=B8=8D=E5=90=88=E7=90=86?= =?UTF-8?q?=EF=BC=8C=E6=96=87=E5=AD=97=E6=98=BE=E7=A4=BA=E4=B8=8D=E5=85=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/fr/design/mainframe/FormParaWidgetPane.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer_form/src/com/fr/design/mainframe/FormParaWidgetPane.java b/designer_form/src/com/fr/design/mainframe/FormParaWidgetPane.java index 78af66a84..8118d4da2 100644 --- a/designer_form/src/com/fr/design/mainframe/FormParaWidgetPane.java +++ b/designer_form/src/com/fr/design/mainframe/FormParaWidgetPane.java @@ -192,7 +192,7 @@ public class FormParaWidgetPane extends JPanel{ } labelPane.add(label,BorderLayout.CENTER); reportPane.add(labelPane,BorderLayout.SOUTH); - reportPane.setPreferredSize(new Dimension((int)jComponent.getPreferredSize().getWidth(),(int)reportPane.getPreferredSize().getHeight())); + reportPane.setPreferredSize(new Dimension((int)reportPane.getPreferredSize().getWidth(),(int)reportPane.getPreferredSize().getHeight())); return reportPane; } From 6fab8994629ac0b1491e7a034cc4018b26c2e0ee Mon Sep 17 00:00:00 2001 From: daniel Date: Tue, 11 Oct 2016 14:42:59 +0800 Subject: [PATCH 08/22] =?UTF-8?q?=E6=8D=A2=E4=B8=80=E4=B8=8B=E8=BE=93?= =?UTF-8?q?=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/actions/file/export/AbstractExportAction.java | 3 ++- .../src/com/fr/design/actions/file/export/PDFExportAction.java | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/designer/src/com/fr/design/actions/file/export/AbstractExportAction.java b/designer/src/com/fr/design/actions/file/export/AbstractExportAction.java index a4a55ac30..0c6f0c8ed 100644 --- a/designer/src/com/fr/design/actions/file/export/AbstractExportAction.java +++ b/designer/src/com/fr/design/actions/file/export/AbstractExportAction.java @@ -5,6 +5,7 @@ package com.fr.design.actions.file.export; import com.fr.base.FRContext; import com.fr.base.Parameter; +import com.fr.io.exporter.pdfstream.PDFStreamExporter; import com.fr.page.PageSetProvider; import com.fr.design.actions.JWorkBookAction; import com.fr.design.gui.iprogressbar.FRProgressBar; @@ -139,7 +140,7 @@ public abstract class AbstractExportAction extends JWorkBookAction { if (exporter instanceof AppExporter) { AppExporter appExporter = (AppExporter) exporter; if (exporter instanceof ExcelExporter || exporter instanceof CSVExporter - || exporter instanceof PDFExporter || exporter instanceof WordExporter) { + || exporter instanceof PDFExporter || exporter instanceof PDFStreamExporter || exporter instanceof WordExporter) { ReportHelper.clearFormulaResult(tpl);// 清空rpt中的公式计算结果 appExporter.export(fileOutputStream, tpl.execute(parameterMap, ActorFactory.getActor(ActorConstants.TYPE_PAGE) diff --git a/designer/src/com/fr/design/actions/file/export/PDFExportAction.java b/designer/src/com/fr/design/actions/file/export/PDFExportAction.java index 68fdd783f..64cf5dabf 100644 --- a/designer/src/com/fr/design/actions/file/export/PDFExportAction.java +++ b/designer/src/com/fr/design/actions/file/export/PDFExportAction.java @@ -10,6 +10,7 @@ import com.fr.file.filter.ChooseFileFilter; import com.fr.general.Inter; import com.fr.io.exporter.Exporter; import com.fr.io.exporter.PDFExporter; +import com.fr.io.exporter.pdfstream.PDFStreamExporter; /** * Export pdf @@ -28,7 +29,7 @@ public class PDFExportAction extends AbstractExportAction { @Override protected Exporter getExporter() { - return new PDFExporter(); + return new PDFStreamExporter(); } @Override From b793303df7778641b2cc95916efd15c5f3e9dc1c Mon Sep 17 00:00:00 2001 From: neil Date: Tue, 11 Oct 2016 17:17:56 +0800 Subject: [PATCH 09/22] =?UTF-8?q?REPORT-465=20=E6=97=A5=E6=9C=9F=E6=8E=A7?= =?UTF-8?q?=E4=BB=B6=E7=9A=84format=E5=92=8C=E5=8D=95=E5=85=83=E6=A0=BC?= =?UTF-8?q?=E6=A0=B7=E5=BC=8F=E7=9B=B8=E4=BA=92=E7=8B=AC=E7=AB=8B,=20?= =?UTF-8?q?=E4=B8=8D=E8=A6=81=E8=81=94=E5=8A=A8=E8=AE=BE=E7=BD=AE,=20?= =?UTF-8?q?=E9=80=A0=E6=88=90=E5=9B=B0=E6=89=B0.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/present/CellWriteAttrPane.java | 39 ++----------------- 1 file changed, 3 insertions(+), 36 deletions(-) diff --git a/designer/src/com/fr/design/present/CellWriteAttrPane.java b/designer/src/com/fr/design/present/CellWriteAttrPane.java index 5f4d6a8ea..4158dbd6c 100644 --- a/designer/src/com/fr/design/present/CellWriteAttrPane.java +++ b/designer/src/com/fr/design/present/CellWriteAttrPane.java @@ -1,15 +1,13 @@ package com.fr.design.present; import com.fr.base.FRContext; -import com.fr.base.Style; +import com.fr.design.dialog.BasicDialog; +import com.fr.design.dialog.BasicPane; +import com.fr.design.dialog.DialogActionAdapter; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.ElementCasePane; import com.fr.design.widget.WidgetPane; -import com.fr.design.dialog.BasicDialog; -import com.fr.design.dialog.BasicPane; -import com.fr.design.dialog.DialogActionAdapter; -import com.fr.form.ui.DateEditor; import com.fr.form.ui.NoneWidget; import com.fr.form.ui.Widget; import com.fr.general.FRLogger; @@ -22,8 +20,6 @@ import com.fr.report.cell.TemplateCellElement; import com.fr.report.elementcase.TemplateElementCase; import java.awt.*; -import java.text.Format; -import java.text.SimpleDateFormat; public class CellWriteAttrPane extends BasicPane { @@ -78,22 +74,6 @@ public class CellWriteAttrPane extends BasicPane { Widget cellWidget = cellElement.getWidget(); - if (cellWidget != null && cellWidget instanceof DateEditor) { - // p:日期的格式需要设置到单元格子里面. - DateEditor dateCellEditorDef = (DateEditor) cellWidget; - - // p:需要把下拉的编辑器,日期格式,都放到CellElement的Style里面 - // 这个地方很方便用户,是alex提出的. - // p:日期的格式需要设置到单元格子里面. - Style style = cellElement.getStyle(); - if (style != null) { - Format format = style.getFormat(); - if (format != null && format instanceof SimpleDateFormat) { - SimpleDateFormat simpleDateFormat = (SimpleDateFormat) format; - dateCellEditorDef.setFormatText(simpleDateFormat.toPattern()); - } - } - } // 这里进行克隆的原因是为了保留原始的Widget以便和新的Widget做比较来判断是否发生了改变 if (cellWidget != null) { try { @@ -111,19 +91,6 @@ public class CellWriteAttrPane extends BasicPane { } Widget cellWidget = this.cellEditorDefPane.update(); - // p:需要把下拉的编辑器,日期格式,都放到CellElement的Style里面 - if (cellWidget instanceof DateEditor) { - // p:日期的格式需要设置到单元格子里面. - DateEditor dateCellEditorDef = (DateEditor) cellWidget; - String formatText = dateCellEditorDef.getFormatText(); - if (formatText != null) { - Style style = cellElement.getStyle(); - if (style != null) { - cellElement.setStyle(style.deriveFormat(new SimpleDateFormat(formatText))); - } - } - } - // p:最后把这个cellEditorDef设置到CellGUIAttr. if (cellWidget instanceof NoneWidget) { cellElement.setWidget(null); From 57cf66276b3e69fbc6fe684ea065a60964f729b2 Mon Sep 17 00:00:00 2001 From: xiaoxia Date: Tue, 11 Oct 2016 20:44:15 +0800 Subject: [PATCH 10/22] =?UTF-8?q?=E7=BB=84=E4=BB=B6=E5=A4=8D=E7=94=A8?= =?UTF-8?q?=E8=AE=BE=E8=AE=A1=E5=99=A8=E9=83=A8=E5=88=86=EF=BC=8C=E5=87=A0?= =?UTF-8?q?=E4=B8=AA=E7=94=A8=E5=88=B0=E7=9A=84=E6=8E=A7=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/mainframe/ShareWidgetButton.java | 192 +++++++++++ .../fr/design/mainframe/ShareWidgetPane.java | 29 ++ .../mainframe/widget/UITreeComboBox.java | 312 ++++++++++++++++++ 3 files changed, 533 insertions(+) create mode 100644 designer_form/src/com/fr/design/mainframe/ShareWidgetButton.java create mode 100644 designer_form/src/com/fr/design/mainframe/ShareWidgetPane.java create mode 100644 designer_form/src/com/fr/design/mainframe/widget/UITreeComboBox.java diff --git a/designer_form/src/com/fr/design/mainframe/ShareWidgetButton.java b/designer_form/src/com/fr/design/mainframe/ShareWidgetButton.java new file mode 100644 index 000000000..3054bea32 --- /dev/null +++ b/designer_form/src/com/fr/design/mainframe/ShareWidgetButton.java @@ -0,0 +1,192 @@ +package com.fr.design.mainframe; + +import com.fr.base.BaseUtils; +import com.fr.design.designer.creator.XCreator; +import com.fr.design.designer.creator.XCreatorUtils; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.form.share.ShareLoader; +import com.fr.form.ui.ElCaseBindInfo; +import com.fr.form.ui.Widget; +import com.fr.general.ComparatorUtils; +import com.fr.stable.StringUtils; + +import javax.swing.*; +import java.awt.*; +import java.awt.datatransfer.DataFlavor; +import java.awt.datatransfer.Transferable; +import java.awt.datatransfer.UnsupportedFlavorException; +import java.awt.dnd.*; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; +import java.awt.event.MouseMotionListener; +import java.awt.image.BufferedImage; +import java.io.IOException; +import java.io.Serializable; + +/** + * Coder: zack + * Date: 2016/10/9 + * Time: 16:14 + */ +public class ShareWidgetButton extends JPanel implements MouseListener, MouseMotionListener, Serializable { + private ElCaseBindInfo bindInfo; + private MouseEvent lastPressEvent; + + public ShareWidgetButton(ElCaseBindInfo bindInfo) { + this.bindInfo = bindInfo; + initUI(); + this.setBorder(BorderFactory.createEmptyBorder(0,0,0,0)); + this.addMouseListener(this); + this.addMouseMotionListener(this); + new DragAndDropDragGestureListener(this, DnDConstants.ACTION_COPY_OR_MOVE); + } + + + private void initUI() { + this.setBackground(Color.WHITE); + this.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0)); + setPreferredSize(new Dimension(110, 70)); + setLayout(FRGUIPaneFactory.createBorderLayout()); + ImagePanel imagePanel = new ImagePanel((BufferedImage) bindInfo.getCover()); + + this.add(imagePanel, BorderLayout.NORTH); + JPanel panel = new JPanel(); + UILabel label = new UILabel(bindInfo.getName(), SwingConstants.HORIZONTAL); + panel.setBackground(new Color(184, 220, 242)); + panel.add(label); + this.add(panel, BorderLayout.SOUTH); + } + + private class ImagePanel extends JPanel { + + private BufferedImage image; + + public ImagePanel(BufferedImage image) { + this.image = image; + this.setPreferredSize(new Dimension(110, 50)); + } + + @Override + public void paintComponent(Graphics g) { + g.drawImage(image, 0, 0, 110, 70, null); + } + + } + + public ElCaseBindInfo getBindInfo() { + return bindInfo; + } + + public void setBindInfo(ElCaseBindInfo bindInfo) { + this.bindInfo = bindInfo; + } + + @Override + public void mouseClicked(MouseEvent e) { + + } + + @Override + public void mousePressed(MouseEvent e) { + lastPressEvent = e; + } + + @Override + public void mouseReleased(MouseEvent e) { + + } + + @Override + public void mouseEntered(MouseEvent e) { + + } + + @Override + public void mouseExited(MouseEvent e) { + + } + + @Override + public void mouseDragged(MouseEvent e) { + if (BaseUtils.isAuthorityEditing()) { + return; + } + if (lastPressEvent == null) { + return; + } + Object source = e.getSource(); + Widget creatorSource = null; + String shareId = StringUtils.EMPTY; + if (source instanceof ShareWidgetButton) { + ShareWidgetButton no = (ShareWidgetButton) e.getSource(); + if (no == null) { + return; + } + shareId = no.getBindInfo().getId(); + creatorSource = ShareLoader.getLoader().getElCaseEditorById(shareId); + } + if (creatorSource != null) { + XCreator xCreator = XCreatorUtils.createXCreator(creatorSource); + xCreator.setShareId(shareId); + WidgetToolBarPane.getTarget().startDraggingBean(xCreator); + lastPressEvent = null; + this.setBorder(null); + } + } + + @Override + public void mouseMoved(MouseEvent e) { + + } + + public class DragAndDropDragGestureListener extends DragSourceAdapter implements DragGestureListener { + private DragSource source; + + public DragAndDropDragGestureListener(ShareWidgetButton tt, int actions) { + source = new DragSource(); + source.createDefaultDragGestureRecognizer(tt, actions, this); + } + + public void dragGestureRecognized(DragGestureEvent dge) { + ShareWidgetButton shareWidgetButton = (ShareWidgetButton) dge.getComponent(); + if (shareWidgetButton != null) { + Widget widget = ShareLoader.getLoader().getElCaseEditorById(shareWidgetButton.getBindInfo().getId()); + DragAndDropTransferable dragAndDropTransferable = new DragAndDropTransferable(widget); + dge.startDrag(DragSource.DefaultCopyDrop, dragAndDropTransferable, this); + } + } + + @Override + public void dragEnter(DragSourceDragEvent dragSourceDragEvent) { + + } + } + + public class DragAndDropTransferable implements Transferable { + private Widget widget; + + public DragAndDropTransferable(Widget widget) { + this.widget = widget; + } + + DataFlavor[] flavors = {new DataFlavor(Widget.class, "Widget")}; + + public DataFlavor[] getTransferDataFlavors() { + return flavors; + } + + public boolean isDataFlavorSupported(DataFlavor flavor) { + for (DataFlavor df : flavors) { + if (ComparatorUtils.equals(df, flavor)) { + return true; + } + } + return false; + } + + public Object getTransferData(DataFlavor df) throws UnsupportedFlavorException, IOException { + return widget; + } + } +} diff --git a/designer_form/src/com/fr/design/mainframe/ShareWidgetPane.java b/designer_form/src/com/fr/design/mainframe/ShareWidgetPane.java new file mode 100644 index 000000000..7abfb6900 --- /dev/null +++ b/designer_form/src/com/fr/design/mainframe/ShareWidgetPane.java @@ -0,0 +1,29 @@ +package com.fr.design.mainframe; + + +import com.fr.form.ui.ElCaseBindInfo; + + +import javax.swing.*; +import java.awt.*; +import java.util.ArrayList; + + +/** + * Created by xiaxiang on 2016/10/10. + */ +public class ShareWidgetPane extends JPanel { + public ShareWidgetPane(ArrayList elCaseBindInfos) { + this.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));// 设置面板的边框 ,距离上、左、下、右 的距离 + int rowCount = (elCaseBindInfos.size() + 1)/2; + this.setLayout(new GridLayout(rowCount, 2, 10, 10)); + for (ElCaseBindInfo rbModuleInfo : elCaseBindInfos) { + ShareWidgetButton widgetButton = new ShareWidgetButton(rbModuleInfo); + this.add(widgetButton); + } + if (elCaseBindInfos.size() == 1) { + this.add(new JPanel()); + } + + } +} diff --git a/designer_form/src/com/fr/design/mainframe/widget/UITreeComboBox.java b/designer_form/src/com/fr/design/mainframe/widget/UITreeComboBox.java new file mode 100644 index 000000000..4d92ccc26 --- /dev/null +++ b/designer_form/src/com/fr/design/mainframe/widget/UITreeComboBox.java @@ -0,0 +1,312 @@ +package com.fr.design.mainframe.widget; + +/** + * Created by xiaxiang on 2016/9/30. + */ +import java.awt.*; +import java.awt.event.*; +import javax.swing.*; +import javax.swing.plaf.*; +import javax.swing.plaf.basic.*; +import javax.swing.plaf.metal.*; +import javax.swing.tree.*; + +import com.fr.design.designer.beans.*; +import com.fr.design.designer.beans.events.DesignerEditListener; +import com.fr.design.designer.beans.events.DesignerEvent; +import com.fr.design.designer.creator.XCreator; +import com.fr.design.mainframe.ComponentTree; +import com.sun.java.swing.plaf.motif.*; +import com.sun.java.swing.plaf.windows.*; + +/** + * 控件树下拉列表框 + */ +public class UITreeComboBox extends JComboBox{ + /** + * 显示用的树 + */ + private ComponentTree tree; + + public UITreeComboBox(ComponentTree componentTree){ + this.setTree(componentTree); + tree.getDesigner().addDesignerEditListener(new TreeComboBoxDesignerEditAdapter()); + for(int i=0; iTitle: UITreeComboBoxRenderer

+ *

Description: 树形结构而来的DefaultListCellRenderer

+ */ + class UITreeComboBoxRenderer extends DefaultListCellRenderer { + public Component getListCellRendererComponent(JList list, Object value, + int index, boolean isSelected, boolean cellHasFocus){ + if(value != null){ + TreePath path = (TreePath)value; + Object node = path.getLastPathComponent(); + value = node; + TreeCellRenderer r = tree.getCellRenderer(); + JLabel lb = (JLabel)r.getTreeCellRendererComponent( + tree, value, isSelected, false, false, index, + cellHasFocus); + return lb; + } + return super.getListCellRendererComponent(list, value, index, + isSelected, cellHasFocus); + } + } + + + public TreePath[] getSelectedTreePath() { + XCreator[] creators = tree.getDesigner().getSelectionModel().getSelection().getSelectedCreators(); + TreePath[] paths = new TreePath[creators.length]; + + for (int i = 0; i < paths.length; i++) { + paths[i] = tree.buildTreePath(creators[i]); + } + return paths; + } + + private class TreeComboBoxDesignerEditAdapter implements DesignerEditListener { + + @Override + public void fireCreatorModified(DesignerEvent evt) { + if (evt.getCreatorEventID() == DesignerEvent.CREATOR_SELECTED) { + TreePath[] paths = getSelectedTreePath(); + + if (paths.length == 1) { + tree.setAndScrollSelectionPath(paths[0]); + } else { + tree.setSelectionPaths(paths); + } + setSelectedItem(paths[0]); + MenuSelectionManager.defaultManager().clearSelectedPath(); + } else if(evt.getCreatorEventID() == DesignerEvent.CREATOR_PASTED) { + TreePath[] paths = getSelectedTreePath(); + if (paths.length == 1) { + tree.setAndScrollSelectionPath(paths[0]); + } else { + tree.setSelectionPaths(paths); + } + setSelectedItem(paths[0]); + MenuSelectionManager.defaultManager().clearSelectedPath(); + + } else { + return; + } + + } + + @Override + public boolean equals(Object o) { + return o.getClass() == this.getClass(); + } + } + + /** + * 测试 + */ +// public static void main(String args[]){ +// JFrame frame = new JFrame("UITreeComboBox"); +// final UITreeComboBox box = new UITreeComboBox(new ComponentTree(new FormDesigner())); +// box.setPreferredSize(new Dimension(300, 28)); +// frame.getContentPane().add(box); +// frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); +// frame.pack(); +// frame.setVisible(true); +// } +} + +/** + *

Title: UITreeComboBox

+ *

Description: TreePopup

+ */ +class TreePopup extends JPopupMenu implements ComboPopup{ + protected UITreeComboBox comboBox; + protected JScrollPane scrollPane; + + protected MouseMotionListener mouseMotionListener; + protected MouseListener mouseListener; + private MouseListener treeSelectListener = new MouseAdapter(){ + public void mouseClicked (MouseEvent e){ + if (e.isMetaDown()) { + popupMenu(e); + } else { + return; + } + } + }; + + public void popupMenu(MouseEvent e) { + TreePath path = comboBox.getTree().getSelectionPath(); + if (path == null) { + return; + } + Component component = (Component) path.getLastPathComponent(); + if (!(component instanceof XCreator)) { + return; + } + com.fr.design.designer.beans.ComponentAdapter adapter = AdapterBus.getComponentAdapter(comboBox.getTree().getDesigner(), (XCreator) component); + JPopupMenu menu = adapter.getContextPopupMenu(e); + menu.show(comboBox, e.getX(), e.getY()); + } + + public TreePopup(JComboBox comboBox){ + this.comboBox = (UITreeComboBox)comboBox; + setBorder(BorderFactory.createLineBorder(Color.black)); + setLayout(new BorderLayout()); + setLightWeightPopupEnabled(comboBox.isLightWeightPopupEnabled()); + JTree tree = this.comboBox.getTree(); + if(tree != null){ + scrollPane = new JScrollPane(tree); + scrollPane.setBorder(null); + add(scrollPane, BorderLayout.CENTER); + this.comboBox.addMouseListener(treeSelectListener); + } + } + + public void show(){ + updatePopup(); + show(comboBox, 0, comboBox.getHeight()); + comboBox.getTree().requestFocus(); + } + + public void hide(){ + setVisible(false); + comboBox.firePropertyChange("popupVisible", true, false); + } + + protected JList list = new JList(); + public JList getList(){ + return list; + } + + public MouseMotionListener getMouseMotionListener(){ + if(mouseMotionListener == null){ + mouseMotionListener = new MouseMotionAdapter(){}; + } + return mouseMotionListener; + } + + public KeyListener getKeyListener(){ + return null; + } + + public void uninstallingUI(){} + + /** + * Implementation of ComboPopup.getMouseListener(). + * + * @return a MouseListener or null + * @see ComboPopup#getMouseListener + */ + public MouseListener getMouseListener(){ + if(mouseListener == null){ + mouseListener = new InvocationMouseHandler(); + } + return mouseListener; + } + + protected void togglePopup(){ + if(isVisible()){ + hide(); + } else{ + show(); + } + } + protected void updatePopup(){ + setPreferredSize(new Dimension(comboBox.getSize().width, 200)); + Object selectedObj = comboBox.getSelectedItem(); + if(selectedObj != null){ + TreePath tp = (TreePath)selectedObj; + ((UITreeComboBox)comboBox).getTree().setSelectionPath(tp); + } + } + + protected class InvocationMouseHandler extends MouseAdapter{ + public void mousePressed(MouseEvent e){ + if(!SwingUtilities.isLeftMouseButton(e) || !comboBox.isEnabled()){ + return; + } + if(comboBox.isEditable()){ + Component comp = comboBox.getEditor().getEditorComponent(); + if((!(comp instanceof JComponent)) || + ((JComponent)comp).isRequestFocusEnabled()){ + comp.requestFocus(); + } + } else if(comboBox.isRequestFocusEnabled()){ + comboBox.requestFocus(); + } + togglePopup(); + } + } + + + +} From 5e0f82fee2d8d9ae985e2431a6b403bf650b5e91 Mon Sep 17 00:00:00 2001 From: sunmondong Date: Tue, 11 Oct 2016 22:30:43 +0800 Subject: [PATCH 11/22] =?UTF-8?q?=E6=9E=84=E5=BB=BA=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E9=87=8D=E5=91=BD=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle => build.dev.gradle | 2 +- build.gradle.bak | 86 ------------------- .../{build.gradle => build.dev.gradle} | 2 +- designer_base/build.gradle.bak | 70 --------------- .../{build.gradle => build.dev.gradle} | 2 +- designer_chart/build.gradle.bak | 66 -------------- .../{build.gradle => build.dev.gradle} | 2 +- designer_form/build.gradle.bak | 83 ------------------ 8 files changed, 4 insertions(+), 309 deletions(-) rename build.gradle => build.dev.gradle (97%) delete mode 100644 build.gradle.bak rename designer_base/{build.gradle => build.dev.gradle} (96%) delete mode 100644 designer_base/build.gradle.bak rename designer_chart/{build.gradle => build.dev.gradle} (96%) delete mode 100644 designer_chart/build.gradle.bak rename designer_form/{build.gradle => build.dev.gradle} (97%) delete mode 100644 designer_form/build.gradle.bak diff --git a/build.gradle b/build.dev.gradle similarity index 97% rename from build.gradle rename to build.dev.gradle index abc981595..507d77e9f 100644 --- a/build.gradle +++ b/build.dev.gradle @@ -5,7 +5,7 @@ tasks.withType(JavaCompile){ def basicDir="../../" def libDir="${basicDir}/finereport-lib-stable" //获取什么分支名 -FileTree files =fileTree(dir:"./",include:"build.gradle") +FileTree files =fileTree(dir:"./",include:"build.*.gradle") def buildDir=files[0].path.substring(0,files[0].path.lastIndexOf ("\\")) def branchName=buildDir.substring(buildDir.lastIndexOf ("\\")+1) diff --git a/build.gradle.bak b/build.gradle.bak deleted file mode 100644 index 67a8a0e70..000000000 --- a/build.gradle.bak +++ /dev/null @@ -1,86 +0,0 @@ -apply plugin: "java" -tasks.withType(JavaCompile){ - options.encoding = "UTF-8" -} -sourceCompatibility=1.7 -def basicDir="../../" -def libDir="${basicDir}/finereport-lib-stable" -//获取什么分支名 -FileTree files =fileTree(dir:"./",include:"build.gradle") -def buildDir=files[0].path.substring(0,files[0].path.lastIndexOf ("\\")) -def branchName=buildDir.substring(buildDir.lastIndexOf ("\\")+1) - -task appletJar<<{ - - ant{ - mkdir(dir:"${libDir}/tmp-${branchName}") - mkdir(dir:"build/classes/") - copy(todir:"build/classes/"){ - fileset(dir:"${basicDir}/finereport-core-stable/${branchName}/build/classes/main") - - fileset(dir:"${basicDir}/finereport-chart-stable/${branchName}/build/classes/main") - - fileset(dir:"${basicDir}/finereport-report-stable/${branchName}/build/classes/main") - - fileset(dir:"${basicDir}/finereport-platform-stable/${branchName}/build/classes/main") - - fileset(dir:"${basicDir}/finereport-performance-stable/${branchName}/build/classes/main") - - } - unjar(src:"${libDir}/3rd.jar",dest:"${libDir}/tmp-${branchName}") - unjar(src:"${libDir}/servlet-api.jar",dest:"${libDir}/tmp-${branchName}") - jar(jarfile:"build/libs/fr-applet-8.0.jar"){ - fileset(dir:"build/classes"){ - exclude(name:"*.*") - exclude(name:"bin/*.*") - exclude(name:"classes/**") - exclude(name:"com/fr/schedule/**") - exclude(name:"com/fr/cell/**") - exclude(name:"com/fr/dialog/**") - exclude(name:"com/fr/view/**") - exclude(name:"com/fr/web/**") - exclude(name:"com/fr/fs/**") - exclude(name:"com/fr/design/**") - exclude(name:"com/fr/start/**") - exclude(name:"com/fr/process/**") - } - fileset(dir:"${libDir}/tmp-${branchName}"){ - include(name:"javax/mail/**") - include(name:"javax/servlet/**") - include(name:"org/freehep/**") - include(name:"com/fr/third/JAI/**") - include(name:"com/fr/third/antlr/**") - include(name:"com/fr/third/javax/**") - include(name:"com/sun/xml/**") - include(name:"javax/xml/**") - - } - fileset(dir:"build/classes"){ - include(name:"com/fr/web/*.class") - include(name:"com/fr/web/attr/*.class") - } - } - delete(dir:"${libDir}/tmp-${branchName}") - def jdk6home= "D:/FineReport/develop/java/jdk1.6u35" - def keystore="frapplet.store" - def keycert="fr.cert" - def keypassword="123456" - def keyalias="fr" - - exec(executable:"${jdk6home}/bin/keytool"){ - arg(line:"-genkey -dname "CN=FineReport L=NanJing C=China" -keystore ${keystore} -alias ${keyalias} -validity 3650 -storepass ${keypassword}") - } - exec(executable:"${jdk6home}/bin/keytool"){ - arg(line:"-export -keystore ${keystore} -alias ${keyalias} -file ${keycert} -storepass ${keypassword}") - } - - exec(executable:"${jdk6home}/bin/jarsigner"){ - arg(line:"-keystore ${keystore} -storepass ${keypassword} 'build/libs/fr-applet-8.0.jar' ${keyalias}") - } - delete(file:"${keystore}") - delete(file:"${keycert}") - delete(dir:"build/classes") - - } - -} \ No newline at end of file diff --git a/designer_base/build.gradle b/designer_base/build.dev.gradle similarity index 96% rename from designer_base/build.gradle rename to designer_base/build.dev.gradle index f8cfe57ba..7b3bea2ba 100644 --- a/designer_base/build.gradle +++ b/designer_base/build.dev.gradle @@ -24,7 +24,7 @@ sourceSets{ } } //获取什么分支名 -FileTree files =fileTree(dir:'./',include:'build.gradle') +FileTree files =fileTree(dir:'./',include:'build.*.gradle') def buildDir=files[0].path.substring(0,files[0].path.lastIndexOf ('\\')) buildDir=buildDir.substring(0,buildDir.lastIndexOf ('\\')) def branchName=buildDir.substring(buildDir.lastIndexOf ('\\')+1) diff --git a/designer_base/build.gradle.bak b/designer_base/build.gradle.bak deleted file mode 100644 index e7c5a8e1f..000000000 --- a/designer_base/build.gradle.bak +++ /dev/null @@ -1,70 +0,0 @@ - -apply plugin: 'java' -tasks.withType(JavaCompile){ - options.encoding = 'UTF-8' -} -//指定构建的jdk版本 -sourceCompatibility=1.8 -//指定生成jar包版本 -version='8.0' -//生成jar包重命名 -jar{ - baseName='fr-designer-core' -} - - -def srcDir="." - -//指定源码路径 -sourceSets{ - main{ - java{ - srcDirs=["${srcDir}/src"] - } - } -} -//获取什么分支名 -FileTree files =fileTree(dir:'./',include:'build.gradle') -def buildDir=files[0].path.substring(0,files[0].path.lastIndexOf ('\\')) -buildDir=buildDir.substring(0,buildDir.lastIndexOf ('\\')) -def branchName=buildDir.substring(buildDir.lastIndexOf ('\\')+1) - -//声明外部依赖 -dependencies{ - -compile fileTree(dir:'../../../finereport-lib-stable',include:'**/*.jar') -compile fileTree(dir:'../../../',include:"finereport-*-stable/${branchName}/**/build/libs/*.jar") - - testCompile 'junit:junit:4.12' -} -//复制非.java文件到classes文件夹下参与打包 -task copyFile(type:Copy,dependsOn:compileJava){ - copy{ - from ("${srcDir}/src"){ - exclude '**/.setting/**','.classpath','.project','**/*.java','**/*.db','**/*.g','**/package.html' - } - into 'build/classes/main' - } - -} - - -//压缩项目中的js文件 -task compressJS{ - ant.taskdef(name:'yuicompress',classname:'com.yahoo.platform.yui.compressor.YUICompressTask'){ - classpath { - fileset(dir:'../../../finereport-lib4build-stable',includes:'**/*.jar') - } - } - ant.yuicompress(linebreak:"500",warn:"false", munge:"yes",preserveallsemicolons:"false",charset:"utf-8",encoding:"utf-8",outputfolder:'build/classes/main'){ - fileset (dir:"${srcDir}/src"){ - include (name:'**/*.js') - include (name:'**/*.css') - } - - } -} -jar.dependsOn compressJS - - - diff --git a/designer_chart/build.gradle b/designer_chart/build.dev.gradle similarity index 96% rename from designer_chart/build.gradle rename to designer_chart/build.dev.gradle index cc22b7b34..f980fa135 100644 --- a/designer_chart/build.gradle +++ b/designer_chart/build.dev.gradle @@ -23,7 +23,7 @@ sourceSets{ } } } -FileTree files =fileTree(dir:'./',include:'build.gradle') +FileTree files =fileTree(dir:'./',include:'build.*.gradle') def buildDir=files[0].path.substring(0,files[0].path.lastIndexOf ('\\')) buildDir=buildDir.substring(0,buildDir.lastIndexOf ('\\')) def branchName=buildDir.substring(buildDir.lastIndexOf ('\\')+1) diff --git a/designer_chart/build.gradle.bak b/designer_chart/build.gradle.bak deleted file mode 100644 index 92f055162..000000000 --- a/designer_chart/build.gradle.bak +++ /dev/null @@ -1,66 +0,0 @@ - -apply plugin: 'java' -tasks.withType(JavaCompile){ - options.encoding = 'UTF-8' -} -//指定构建的jdk版本 -sourceCompatibility=1.8 -//指定生成jar包的版本 -version='8.0' - -def srcDir="." - -//对生成的jar包进行重命名 - -jar{ - baseName='fr-designer-chart' -} - -sourceSets{ - main{ - java{ - srcDirs=["${srcDir}/src"] - } - } -} -FileTree files =fileTree(dir:'./',include:'build.gradle') -def buildDir=files[0].path.substring(0,files[0].path.lastIndexOf ('\\')) -buildDir=buildDir.substring(0,buildDir.lastIndexOf ('\\')) -def branchName=buildDir.substring(buildDir.lastIndexOf ('\\')+1) - -//指定外部依赖 -dependencies{ -compile fileTree(dir:'../../../finereport-lib-stable',include:'**/*.jar') -compile fileTree(dir:'../../../',include:"finereport-*-stable/${branchName}/**/build/libs/*.jar") - - testCompile 'junit:junit:4.12' -} -//将非.java 文件复制到classes文件夹下参与打包 -task copyFile(type:Copy,dependsOn:compileJava){ - copy{ - from ("${srcDir}/src"){ - exclude '**/.setting/**','.classpath','.project','**/*.java','**/*.db','**/*.g','**/package.html' - - } - into 'build/classes/main' - } - -} - -//压缩项目中的js文件 -task compressJS{ - ant.taskdef(name:'yuicompress',classname:'com.yahoo.platform.yui.compressor.YUICompressTask'){ - classpath { - fileset(dir:'../../../finereport-lib4build-stable',includes:'**/*.jar') - } - } - ant.yuicompress(linebreak:"500",warn:"false", munge:"yes",preserveallsemicolons:"false",charset:"utf-8",encoding:"utf-8",outputfolder:'build/classes/main'){ - fileset (dir:"${srcDir}/src"){ - include (name:'**/*.js') - include (name:'**/*.css') - } - - } -} -jar.dependsOn compressJS - diff --git a/designer_form/build.gradle b/designer_form/build.dev.gradle similarity index 97% rename from designer_form/build.gradle rename to designer_form/build.dev.gradle index b06cabd30..57ebd74c2 100644 --- a/designer_form/build.gradle +++ b/designer_form/build.dev.gradle @@ -26,7 +26,7 @@ sourceSets{ } //获取什么分支名 -FileTree files =fileTree(dir:'./',include:'build.gradle') +FileTree files =fileTree(dir:'./',include:'build.*.gradle') def buildDir=files[0].path.substring(0,files[0].path.lastIndexOf ('\\')) buildDir=buildDir.substring(0,buildDir.lastIndexOf ('\\')) def branchName=buildDir.substring(buildDir.lastIndexOf ('\\')+1) diff --git a/designer_form/build.gradle.bak b/designer_form/build.gradle.bak deleted file mode 100644 index 474d4aca9..000000000 --- a/designer_form/build.gradle.bak +++ /dev/null @@ -1,83 +0,0 @@ - -apply plugin: 'java' -tasks.withType(JavaCompile){ - options.encoding = 'UTF-8' -} -//指定构建的jdk版本 -sourceCompatibility=1.8 -//指定生成的jar包版本 -version='8.0' - -def srcDir="." - - -//指明生成jar包的名字 -jar{ - baseName='fr-designer-report' -} -//源码所在位置 -sourceSets{ - main{ - java{ - srcDirs=["${srcDir}/src", -"${srcDir}/../designer/src"] - } - } -} - -//获取什么分支名 -FileTree files =fileTree(dir:'./',include:'build.gradle') -def buildDir=files[0].path.substring(0,files[0].path.lastIndexOf ('\\')) -buildDir=buildDir.substring(0,buildDir.lastIndexOf ('\\')) -def branchName=buildDir.substring(buildDir.lastIndexOf ('\\')+1) -//声明外部依赖 -dependencies{ -compile fileTree(dir:"../../../finereport-lib-stable${branchName}",include:'**/*.jar') -compile fileTree(dir:'../../../',include:"finereport-*-stable/${branchName}/**/build/libs/*.jar") - - testCompile 'junit:junit:4.12' -} - -//指明无法编译文件所在路径 -def dataContent ={def dir -> - copySpec{ - from ("${dir}"){ - exclude '**/.setting/**','.classpath','.project','**/*.java','**/*.db','**/*.g','**/package.html' - } - } -} - -//将非.java文件复制到classes文件夹下 参与打包 -task copyFile(type:Copy,dependsOn:compileJava){ - copy{ - with dataContent.call("${srcDir}/src") - with dataContent.call("${srcDir}/../designer/src") - into ('build/classes/main') - } - -} - - -//压缩项目中的js文件 -task compressJS{ - ant.taskdef(name:'yuicompress',classname:'com.yahoo.platform.yui.compressor.YUICompressTask'){ - classpath { - - fileset(dir:'../../../finereport-lib4build-stable',includes:'**/*.jar') - } - } - ant.yuicompress(linebreak:"500",warn:"false", munge:"yes",preserveallsemicolons:"false", charset:"utf-8",encoding:"utf-8",outputfolder:'build/classes/main'){ - fileset (dir:"${srcDir}/src"){ - include (name:'**/*.js') - include (name:'**/*.css') - - } - fileset (dir:"${srcDir}/../designer/src"){ - include (name:'**/*.js') - include (name:'**/*.css') - } - - } -} -jar.dependsOn compressJS - From 2325ca73fd6a3a175d4ec0148ef944af38e4096b Mon Sep 17 00:00:00 2001 From: xiaoxia Date: Wed, 12 Oct 2016 00:17:50 +0800 Subject: [PATCH 12/22] rt --- .../src/com/fr/design/mainframe/ShareWidgetPane.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/designer_form/src/com/fr/design/mainframe/ShareWidgetPane.java b/designer_form/src/com/fr/design/mainframe/ShareWidgetPane.java index 7abfb6900..79f15b364 100644 --- a/designer_form/src/com/fr/design/mainframe/ShareWidgetPane.java +++ b/designer_form/src/com/fr/design/mainframe/ShareWidgetPane.java @@ -13,15 +13,15 @@ import java.util.ArrayList; * Created by xiaxiang on 2016/10/10. */ public class ShareWidgetPane extends JPanel { - public ShareWidgetPane(ArrayList elCaseBindInfos) { + public ShareWidgetPane(ArrayList elCaseBindInfoList) { this.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));// 设置面板的边框 ,距离上、左、下、右 的距离 - int rowCount = (elCaseBindInfos.size() + 1)/2; + int rowCount = (elCaseBindInfoList.size() + 1)/2; this.setLayout(new GridLayout(rowCount, 2, 10, 10)); - for (ElCaseBindInfo rbModuleInfo : elCaseBindInfos) { + for (ElCaseBindInfo rbModuleInfo : elCaseBindInfoList) { ShareWidgetButton widgetButton = new ShareWidgetButton(rbModuleInfo); this.add(widgetButton); } - if (elCaseBindInfos.size() == 1) { + if (elCaseBindInfoList.size() == 1) { this.add(new JPanel()); } From 760aff6304c5c5ccbcf44f0974eb2f45a9dd2ccd Mon Sep 17 00:00:00 2001 From: xiaoxia Date: Wed, 12 Oct 2016 02:02:18 +0800 Subject: [PATCH 13/22] rt --- .../com/fr/design/mainframe/widget/UITreeComboBox.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/designer_form/src/com/fr/design/mainframe/widget/UITreeComboBox.java b/designer_form/src/com/fr/design/mainframe/widget/UITreeComboBox.java index 4d92ccc26..dd2c8fa89 100644 --- a/designer_form/src/com/fr/design/mainframe/widget/UITreeComboBox.java +++ b/designer_form/src/com/fr/design/mainframe/widget/UITreeComboBox.java @@ -31,11 +31,11 @@ public class UITreeComboBox extends JComboBox{ public UITreeComboBox(ComponentTree componentTree){ this.setTree(componentTree); tree.getDesigner().addDesignerEditListener(new TreeComboBoxDesignerEditAdapter()); - for(int i=0; i Date: Wed, 12 Oct 2016 02:02:51 +0800 Subject: [PATCH 14/22] rt --- .../src/com/fr/design/mainframe/widget/UITreeComboBox.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/designer_form/src/com/fr/design/mainframe/widget/UITreeComboBox.java b/designer_form/src/com/fr/design/mainframe/widget/UITreeComboBox.java index dd2c8fa89..8bb921df4 100644 --- a/designer_form/src/com/fr/design/mainframe/widget/UITreeComboBox.java +++ b/designer_form/src/com/fr/design/mainframe/widget/UITreeComboBox.java @@ -31,10 +31,6 @@ public class UITreeComboBox extends JComboBox{ public UITreeComboBox(ComponentTree componentTree){ this.setTree(componentTree); tree.getDesigner().addDesignerEditListener(new TreeComboBoxDesignerEditAdapter()); -// for(int i=0; i Date: Wed, 12 Oct 2016 09:20:56 +0800 Subject: [PATCH 15/22] rt --- .../mainframe/widget/UITreeComboBox.java | 35 ++++++++----------- 1 file changed, 14 insertions(+), 21 deletions(-) diff --git a/designer_form/src/com/fr/design/mainframe/widget/UITreeComboBox.java b/designer_form/src/com/fr/design/mainframe/widget/UITreeComboBox.java index 8bb921df4..81afb7cc8 100644 --- a/designer_form/src/com/fr/design/mainframe/widget/UITreeComboBox.java +++ b/designer_form/src/com/fr/design/mainframe/widget/UITreeComboBox.java @@ -31,6 +31,10 @@ public class UITreeComboBox extends JComboBox{ public UITreeComboBox(ComponentTree componentTree){ this.setTree(componentTree); tree.getDesigner().addDesignerEditListener(new TreeComboBoxDesignerEditAdapter()); +// for(int i=0; i Date: Wed, 12 Oct 2016 09:31:06 +0800 Subject: [PATCH 16/22] rt --- .../fr/design/mainframe/widget/UITreeComboBox.java | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/designer_form/src/com/fr/design/mainframe/widget/UITreeComboBox.java b/designer_form/src/com/fr/design/mainframe/widget/UITreeComboBox.java index 81afb7cc8..7f55ddeaf 100644 --- a/designer_form/src/com/fr/design/mainframe/widget/UITreeComboBox.java +++ b/designer_form/src/com/fr/design/mainframe/widget/UITreeComboBox.java @@ -123,22 +123,12 @@ public class UITreeComboBox extends JComboBox{ } - public TreePath[] getSelectedTreePath() { - XCreator[] creators = tree.getDesigner().getSelectionModel().getSelection().getSelectedCreators(); - TreePath[] paths = new TreePath[creators.length]; - - for (int i = 0; i < paths.length; i++) { - paths[i] = tree.buildTreePath(creators[i]); - } - return paths; - } - private class TreeComboBoxDesignerEditAdapter implements DesignerEditListener { @Override public void fireCreatorModified(DesignerEvent evt) { if (evt.getCreatorEventID() == DesignerEvent.CREATOR_SELECTED || evt.getCreatorEventID() == DesignerEvent.CREATOR_PASTED) { - TreePath[] paths = getSelectedTreePath(); + TreePath[] paths = tree.getSelectedTreePath(); if (paths.length == 1) { tree.setAndScrollSelectionPath(paths[0]); From 0efb563d4ce847285c6c7fff0fa2fa897888f146 Mon Sep 17 00:00:00 2001 From: xiaoxia Date: Wed, 12 Oct 2016 09:31:48 +0800 Subject: [PATCH 17/22] =?UTF-8?q?componenttree=E5=90=8E=E9=9D=A2=E8=BF=98?= =?UTF-8?q?=E8=A6=81=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/mainframe/ComponentTree.java | 182 +++++++++--------- 1 file changed, 93 insertions(+), 89 deletions(-) diff --git a/designer_form/src/com/fr/design/mainframe/ComponentTree.java b/designer_form/src/com/fr/design/mainframe/ComponentTree.java index fb0586a69..0a268610e 100644 --- a/designer_form/src/com/fr/design/mainframe/ComponentTree.java +++ b/designer_form/src/com/fr/design/mainframe/ComponentTree.java @@ -40,7 +40,7 @@ public class ComponentTree extends JTree { TreePath[] paths = getSelectedTreePath(); addTreeSelectionListener(designer); setSelectionPaths(paths); - + designer.addDesignerEditListener(new TreeDesignerEditAdapter()); this.addMouseListener(new MouseAdapter() { @@ -68,15 +68,19 @@ public class ComponentTree extends JTree { setEditable(true); } + public FormDesigner getDesigner() { + return designer; + } + /** * 构造函数 - * + * * @param designer 设计界面组件 * @param model 构造JTree的model */ public ComponentTree(FormDesigner designer,ComponentTreeModel model) { - this(designer); - this.setModel(model); + this(designer); + this.setModel(model); } @@ -96,17 +100,17 @@ public class ComponentTree extends JTree { return super.isPathEditable(path); } - /** - * 将值转换为文本 - * @param value 值 - * @param selected 是否选中 - * @param expanded 扩展 - * @param leaf 是否叶子 - * @param row 行 - * @param hasFocus 是否焦点 - * - * @return 返回文本 - */ + /** + * 将值转换为文本 + * @param value 值 + * @param selected 是否选中 + * @param expanded 扩展 + * @param leaf 是否叶子 + * @param row 行 + * @param hasFocus 是否焦点 + * + * @return 返回文本 + */ @Override public String convertValueToText(Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) { if (value != null && value instanceof XCreator) { @@ -115,25 +119,25 @@ public class ComponentTree extends JTree { return super.convertValueToText(value, selected, expanded, leaf, row, hasFocus); } } - + public void setAndScrollSelectionPath(TreePath treepath) { - setSelectionPath(treepath); - scrollPathToVisible(treepath); + setSelectionPath(treepath); + scrollPathToVisible(treepath); + } + + private void popupMenu(MouseEvent e) { + TreePath path = this.getSelectionPath(); + if (path == null) { + return; + } + Component component = (Component) path.getLastPathComponent(); + if (!(component instanceof XCreator)) { + return; + } + ComponentAdapter adapter = AdapterBus.getComponentAdapter(designer, (XCreator) component); + JPopupMenu menu = adapter.getContextPopupMenu(e); + menu.show(this, e.getX(), e.getY()); } - - private void popupMenu(MouseEvent e) { - TreePath path = this.getSelectionPath(); - if (path == null) { - return; - } - Component component = (Component) path.getLastPathComponent(); - if (!(component instanceof XCreator)) { - return; - } - ComponentAdapter adapter = AdapterBus.getComponentAdapter(designer, (XCreator) component); - JPopupMenu menu = adapter.getContextPopupMenu(e); - menu.show(this, e.getX(), e.getY()); - } /** * 刷新 @@ -145,51 +149,51 @@ public class ComponentTree extends JTree { - - public TreePath[] getSelectedTreePath() { - XCreator[] creators = designer.getSelectionModel().getSelection().getSelectedCreators(); - TreePath[] paths = new TreePath[creators.length]; - - for (int i = 0; i < paths.length; i++) { - paths[i] = buildTreePath(creators[i]); - } - return paths; - } - - private class TreeDesignerEditAdapter implements DesignerEditListener { - - @Override - public void fireCreatorModified(DesignerEvent evt) { - if (evt.getCreatorEventID() == DesignerEvent.CREATOR_SELECTED) { - TreePath[] paths = getSelectedTreePath(); - - if (paths.length == 1) { - setAndScrollSelectionPath(paths[0]); - } else { - setSelectionPaths(paths); - } - } else if(evt.getCreatorEventID() == DesignerEvent.CREATOR_PASTED) { - ComponentTree.this.refreshUI(); - TreePath[] paths = getSelectedTreePath(); - - if (paths.length == 1) { - setAndScrollSelectionPath(paths[0]); - } else { - setSelectionPaths(paths); - } - ComponentTree.this.repaint(); - - } else { - ComponentTree.this.refreshUI(); - ComponentTree.this.repaint(); - } - } - - @Override - public boolean equals(Object o) { - return o.getClass() == this.getClass(); - } - } + + public TreePath[] getSelectedTreePath() { + XCreator[] creators = designer.getSelectionModel().getSelection().getSelectedCreators(); + TreePath[] paths = new TreePath[creators.length]; + + for (int i = 0; i < paths.length; i++) { + paths[i] = buildTreePath(creators[i]); + } + return paths; + } + + private class TreeDesignerEditAdapter implements DesignerEditListener { + + @Override + public void fireCreatorModified(DesignerEvent evt) { + if (evt.getCreatorEventID() == DesignerEvent.CREATOR_SELECTED) { + TreePath[] paths = getSelectedTreePath(); + + if (paths.length == 1) { + setAndScrollSelectionPath(paths[0]); + } else { + setSelectionPaths(paths); + } + } else if(evt.getCreatorEventID() == DesignerEvent.CREATOR_PASTED) { + ComponentTree.this.refreshUI(); + TreePath[] paths = getSelectedTreePath(); + + if (paths.length == 1) { + setAndScrollSelectionPath(paths[0]); + } else { + setSelectionPaths(paths); + } + ComponentTree.this.repaint(); + + } else { + ComponentTree.this.refreshUI(); + ComponentTree.this.repaint(); + } + } + + @Override + public boolean equals(Object o) { + return o.getClass() == this.getClass(); + } + } /** @@ -211,11 +215,11 @@ public class ComponentTree extends JTree { paths[i] = buildTreePath(searchList.get(i)); } if(paths.length > 0) { - setAndScrollSelectionPath(paths[0]); + setAndScrollSelectionPath(paths[0]); } else { - setSelectionPath(); + setSelectionPath(); } - return paths; + return paths; } @@ -248,7 +252,7 @@ public class ComponentTree extends JTree { * 触发 */ public void fireTreeChanged() { - designer.refreshDesignerUI(); + designer.refreshDesignerUI(); } /** @@ -267,14 +271,14 @@ public class ComponentTree extends JTree { ArrayList path = new ArrayList(); Component parent = comp; - while (parent != null) { - XCreator creator = (XCreator) parent; - path.add(0, parent); - if (creator != comp ) { - creator.notShowInComponentTree(path); - } - parent = parent.getParent(); - } + while (parent != null) { + XCreator creator = (XCreator) parent; + path.add(0, parent); + if (creator != comp ) { + creator.notShowInComponentTree(path); + } + parent = parent.getParent(); + } Object[] components = path.toArray(); return new TreePath(components); } From fc3b700db1da47f99e6178bf27a743cc1d95ad09 Mon Sep 17 00:00:00 2001 From: PanLi320 <854954082@qq.com> Date: Wed, 12 Oct 2016 10:25:02 +0800 Subject: [PATCH 18/22] =?UTF-8?q?bugfix:QQ=E6=8E=88=E6=9D=83=E6=9C=AA?= =?UTF-8?q?=E7=BB=91=E5=AE=9A=EF=BC=8C=E8=B6=85=E9=93=BE=E4=B8=A4=E6=AC=A1?= =?UTF-8?q?=EF=BC=8C=E5=90=8C=E6=AD=A5=E7=9A=84url=EF=BC=8C=E6=9A=82?= =?UTF-8?q?=E6=97=B6=E5=8E=BB=E6=8E=89=EF=BC=8C=E8=AE=BA=E5=9D=9B=E9=82=A3?= =?UTF-8?q?=E8=BE=B9=E8=BF=98=E8=A6=81=E5=81=9A=E6=94=AF=E6=8C=81=E5=A4=84?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/mainframe/bbs/UserInfoLabel.java | 5 +---- .../com/fr/design/extra/PluginWebBridge.java | 5 +---- .../com/fr/design/extra/QQLoginWebBridge.java | 19 ------------------- 3 files changed, 2 insertions(+), 27 deletions(-) diff --git a/designer/src/com/fr/design/mainframe/bbs/UserInfoLabel.java b/designer/src/com/fr/design/mainframe/bbs/UserInfoLabel.java index d0fe7dadb..460f758df 100644 --- a/designer/src/com/fr/design/mainframe/bbs/UserInfoLabel.java +++ b/designer/src/com/fr/design/mainframe/bbs/UserInfoLabel.java @@ -284,10 +284,7 @@ public class UserInfoLabel extends UILabel{ public void mousePressed(MouseEvent e) { if(StringUtils.isNotEmpty(userName)){ try { - String loginUrl = SiteCenter.getInstance().acquireUrlByKind("bbs.default") + - "&action=login&loginsubmit=yes&infloat=yes&lssubmit=yes&inajax=" + - "&username=" + DesignerEnvManager.getEnvManager().getBBSName() + - "&password=" + DesignerEnvManager.getEnvManager().getBBSPassword(); + String loginUrl = SiteCenter.getInstance().acquireUrlByKind("bbs.default"); Desktop.getDesktop().browse(new URI(loginUrl)); } catch (Exception exp) { FRContext.getLogger().info(exp.getMessage()); diff --git a/designer_base/src/com/fr/design/extra/PluginWebBridge.java b/designer_base/src/com/fr/design/extra/PluginWebBridge.java index b192873d8..12c3e85c4 100644 --- a/designer_base/src/com/fr/design/extra/PluginWebBridge.java +++ b/designer_base/src/com/fr/design/extra/PluginWebBridge.java @@ -379,10 +379,7 @@ public class PluginWebBridge { */ public void getPriviteMessage() { try { - String loginUrl = SiteCenter.getInstance().acquireUrlByKind("bbs.default") + - "&action=login&loginsubmit=yes&infloat=yes&lssubmit=yes&inajax=" + - "&username=" + DesignerEnvManager.getEnvManager().getBBSName() + - "&password=" + DesignerEnvManager.getEnvManager().getBBSPassword(); + String loginUrl = SiteCenter.getInstance().acquireUrlByKind("bbs.default"); Desktop.getDesktop().browse(new URI(loginUrl)); }catch (Exception exp) { FRContext.getLogger().info(exp.getMessage()); diff --git a/designer_base/src/com/fr/design/extra/QQLoginWebBridge.java b/designer_base/src/com/fr/design/extra/QQLoginWebBridge.java index 140c89748..d0bcc27e1 100644 --- a/designer_base/src/com/fr/design/extra/QQLoginWebBridge.java +++ b/designer_base/src/com/fr/design/extra/QQLoginWebBridge.java @@ -127,24 +127,5 @@ public class QQLoginWebBridge { if (url.indexOf("qqLogin.html") > 0) { return; } - if (Desktop.isDesktopSupported()) { - try { - //创建一个URI实例,注意不是URL - URI uri = URI.create(url); - //获取当前系统桌面扩展 - Desktop desktop = Desktop.getDesktop(); - //判断系统桌面是否支持要执行的功能 - if (desktop.isSupported(Desktop.Action.BROWSE)) { - //获取系统默认浏览器打开链接 - desktop.browse(uri); - } - } catch (NullPointerException e) { - //此为uri为空时抛出异常 - FRLogger.getLogger().error(e.getMessage()); - } catch (IOException e) { - //此为无法获取系统默认浏览器 - FRLogger.getLogger().error(e.getMessage()); - } - } } } From a996143c18697dc0981714ebc53309a5263a1430 Mon Sep 17 00:00:00 2001 From: zhouping Date: Wed, 12 Oct 2016 11:49:38 +0800 Subject: [PATCH 19/22] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=86=B2=E7=AA=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../layout/FRAbsoluteLayoutAdapter.java | 12 +- .../designer/creator/XWAbsoluteLayout.java | 19 ++ .../FRAbsoluteLayoutPropertiesGroupModel.java | 184 +++++++++++++++++- .../FRFitLayoutPropertiesGroupModel.java | 67 +++++-- .../properties/LayoutTypeRenderer.java | 14 ++ .../properties/LayoutTypeWrapper.java | 13 ++ .../items/FRFitConstraintsItems.java | 4 +- .../properties/items/FRLayoutTypeItems.java | 16 ++ .../designer/treeview/ComponentTreeModel.java | 27 ++- .../fr/design/gui/core/FormWidgetOption.java | 2 +- .../fr/design/mainframe/ComponentTree.java | 9 + .../design/mainframe/FormParaWidgetPane.java | 9 +- .../widget/editors/LayoutTypeEditor.java | 15 ++ 13 files changed, 360 insertions(+), 31 deletions(-) create mode 100644 designer_form/src/com/fr/design/designer/properties/LayoutTypeRenderer.java create mode 100644 designer_form/src/com/fr/design/designer/properties/LayoutTypeWrapper.java create mode 100644 designer_form/src/com/fr/design/designer/properties/items/FRLayoutTypeItems.java create mode 100644 designer_form/src/com/fr/design/mainframe/widget/editors/LayoutTypeEditor.java diff --git a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java index 3c0f1155c..8e0a725cd 100644 --- a/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java +++ b/designer_form/src/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java @@ -12,6 +12,7 @@ import com.fr.design.designer.properties.FRAbsoluteLayoutPropertiesGroupModel; import com.fr.form.ui.container.WAbsoluteLayout; import com.fr.design.utils.ComponentUtils; import com.fr.design.utils.gui.LayoutUtils; +import com.fr.form.ui.container.WBodyLayoutType; import com.fr.general.ComparatorUtils; import com.fr.general.FRLogger; @@ -330,6 +331,15 @@ public class FRAbsoluteLayoutAdapter extends FRBodyLayoutAdapter { @Override public GroupModel getLayoutProperties() { XWAbsoluteLayout xwAbsoluteLayout = (XWAbsoluteLayout) container; - return new FRAbsoluteLayoutPropertiesGroupModel(xwAbsoluteLayout); + if (xwAbsoluteLayout.toData().isAbsoluteLayoutAsBody()){ + //如果body是绝对布局,那么获取原来自适应body的属性--布局类型 + WBodyLayoutType layoutType = WBodyLayoutType.FIT; + if (container.getParent() != null) { + layoutType = ((XWFitLayout)container.getParent()).toData().getBodyLayoutType(); + } + return new FRAbsoluteLayoutPropertiesGroupModel(xwAbsoluteLayout, layoutType); + } else { + return new FRAbsoluteLayoutPropertiesGroupModel(xwAbsoluteLayout); + } } } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/creator/XWAbsoluteLayout.java b/designer_form/src/com/fr/design/designer/creator/XWAbsoluteLayout.java index a1fc32c40..9ac9addc7 100644 --- a/designer_form/src/com/fr/design/designer/creator/XWAbsoluteLayout.java +++ b/designer_form/src/com/fr/design/designer/creator/XWAbsoluteLayout.java @@ -75,9 +75,17 @@ public class XWAbsoluteLayout extends XLayoutContainer { xConnectorMap.put(connector, new XConnector(connector, this)); } + this.editable = widget.isAbsoluteLayoutAsBody(); + initPercent(); } + public XWAbsoluteLayout(WAbsoluteLayout widget, Dimension initSize, boolean isAbsoluteLayoutAsBody) { + this(widget, initSize); + widget.setAbsoluteLayoutAsBody(isAbsoluteLayoutAsBody); + this.editable = isAbsoluteLayoutAsBody; + } + /** * 初始化时默认的组件大小 * @@ -443,4 +451,15 @@ public class XWAbsoluteLayout extends XLayoutContainer { } } } + + /** + * 设置布局是否可编辑,不可则显示编辑蒙层 + * 假如是body的话,始终要能编辑,不会出现蒙层 + * + * @param isEditable 可否编辑 + */ + @Override + public void setEditable(boolean isEditable) { + super.setEditable(toData().isAbsoluteLayoutAsBody() || isEditable); + } } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/properties/FRAbsoluteLayoutPropertiesGroupModel.java b/designer_form/src/com/fr/design/designer/properties/FRAbsoluteLayoutPropertiesGroupModel.java index fc9c0985c..f8b695a33 100644 --- a/designer_form/src/com/fr/design/designer/properties/FRAbsoluteLayoutPropertiesGroupModel.java +++ b/designer_form/src/com/fr/design/designer/properties/FRAbsoluteLayoutPropertiesGroupModel.java @@ -2,27 +2,40 @@ package com.fr.design.designer.properties; import com.fr.design.beans.GroupModel; import com.fr.design.designer.creator.XWAbsoluteLayout; +import com.fr.design.designer.creator.XWFitLayout; +import com.fr.design.mainframe.FormDesigner; +import com.fr.design.mainframe.FormSelectionUtils; +import com.fr.design.mainframe.WidgetPropertyPane; import com.fr.design.mainframe.widget.editors.AbsoluteLayoutDirectionEditor; import com.fr.design.mainframe.widget.editors.IntegerPropertyEditor; +import com.fr.design.mainframe.widget.editors.LayoutTypeEditor; import com.fr.design.mainframe.widget.editors.PropertyCellEditor; +import com.fr.form.ui.Widget; import com.fr.form.ui.container.WAbsoluteLayout; +import com.fr.form.ui.container.WBodyLayoutType; import com.fr.general.Inter; import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.TableCellEditor; import javax.swing.table.TableCellRenderer; +import java.awt.*; +import java.util.Arrays; +import java.util.Comparator; /** * Created by zhouping on 2016/8/1. */ public class FRAbsoluteLayoutPropertiesGroupModel implements GroupModel { - private PropertyCellEditor editor; private DefaultTableCellRenderer renderer; private AbsoluteLayoutDirectionEditor stateEditor; private AbsoluteStateRenderer stateRenderer; private WAbsoluteLayout layout; private XWAbsoluteLayout xwAbsoluteLayout; + private LayoutTypeEditor layoutTypeEditor; + private LayoutTypeRenderer layoutTypeRenderer; + //默认body是0,自适应布局;1,绝对布局. + private WBodyLayoutType layoutType = WBodyLayoutType.FIT; public FRAbsoluteLayoutPropertiesGroupModel(XWAbsoluteLayout xwAbsoluteLayout){ this.xwAbsoluteLayout = xwAbsoluteLayout; @@ -33,31 +46,65 @@ public class FRAbsoluteLayoutPropertiesGroupModel implements GroupModel { stateRenderer = new AbsoluteStateRenderer(); } + public FRAbsoluteLayoutPropertiesGroupModel(XWAbsoluteLayout xwAbsoluteLayout, WBodyLayoutType layoutType){ + this(xwAbsoluteLayout); + this.layoutTypeEditor = new LayoutTypeEditor(); + this.layoutTypeRenderer = new LayoutTypeRenderer(); + this.layoutType = layoutType; + } + /** * 布局管理器自己的属性 */ @Override public String getGroupName() { - return Inter.getLocText("FR-Designer-Widget_Area_Scaling"); + return Inter.getLocText(layoutType == WBodyLayoutType.ABSOLUTE ? "FR-Designer_Attr_Layout" : "FR-Designer-Widget_Area_Scaling"); } @Override public int getRowCount() { - return 1; + return layoutType == WBodyLayoutType.ABSOLUTE ? 2 : 1; } @Override public TableCellRenderer getRenderer(int row) { - return stateRenderer; + if (layoutType == WBodyLayoutType.ABSOLUTE) { + return row == 0 ? layoutTypeRenderer : stateRenderer; + } + else { + return stateRenderer; + } } @Override public TableCellEditor getEditor(int row) { - return stateEditor; + if (layoutType == WBodyLayoutType.ABSOLUTE) { + return row == 0 ? layoutTypeEditor : stateEditor; + } + else{ + return stateEditor; + } } @Override public Object getValue(int row, int column) { + if (layoutType == WBodyLayoutType.ABSOLUTE){ + if (column == 0) { + switch (row) { + case 0: + return Inter.getLocText("FR-Designer_Attr_Layout_Type"); + default: + return Inter.getLocText("FR-Designer-Widget_Scaling_Mode"); + } + } else { + switch (row) { + case 0: + return layoutType.getTypeValue(); + default: + return layout.getCompState(); + } + } + } if (column == 0) { return Inter.getLocText("FR-Designer-Widget_Scaling_Mode"); } else { @@ -67,6 +114,42 @@ public class FRAbsoluteLayoutPropertiesGroupModel implements GroupModel { @Override public boolean setValue(Object value, int row, int column) { + if (layoutType == WBodyLayoutType.ABSOLUTE){ + int state = 0; + if(value instanceof Integer) { + state = (Integer)value; + } + if (column == 0 || state < 0) { + return false; + } else { + if (row == 0) { + if (state == WBodyLayoutType.FIT.getTypeValue()) { + XWFitLayout xfl = (XWFitLayout) xwAbsoluteLayout.getBackupParent(); + Component[] components = xwAbsoluteLayout.getComponents(); + + Arrays.sort(components, new ComparatorComponentLocation()); + + xfl.getLayoutAdapter().removeBean(xwAbsoluteLayout, xwAbsoluteLayout.getWidth(), xwAbsoluteLayout.getHeight()); + xfl.remove(xwAbsoluteLayout); + xfl.toData().setLayoutType(WBodyLayoutType.FIT); + + for (Component comp : components) { + xfl.add(comp); + } + moveComponents2FitLayout(xfl, components); + FormDesigner formDesigner = WidgetPropertyPane.getInstance().getEditingFormDesigner(); + formDesigner.getSelectionModel().setSelectedCreators( + FormSelectionUtils.rebuildSelection(xfl, new Widget[]{xfl.toData()})); + return true; + } + } + if (row == 1) { + layout.setCompState(state); + return true; + } + return false; + } + } int state = 0; if(value instanceof Integer) { state = (Integer)value; @@ -91,4 +174,95 @@ public class FRAbsoluteLayoutPropertiesGroupModel implements GroupModel { public boolean isEditable(int row) { return true; } + + //把绝对布局中的元素按规则移动到自适应布局中 + private void moveComponents2FitLayout(XWFitLayout xwFitLayout, Component[] components) { + int eachRowCount = 4; + if (components.length <= 1){ + return; + } + int layoutWidth = xwFitLayout.getWidth() - xwFitLayout.toData().getMargin().getLeft() - xwFitLayout.toData().getMargin().getRight(); + int layoutHeight = xwFitLayout.getHeight() - xwFitLayout.toData().getMargin().getTop() - xwFitLayout.toData().getMargin().getBottom(); + int leftMargin = xwFitLayout.toData().getMargin().getLeft(); + int topMargin = xwFitLayout.toData().getMargin().getTop(); + int row = (components.length / eachRowCount) + (components.length % eachRowCount == 0 ? 0 : 1); + //最后一行的列数不定 + int column = components.length % eachRowCount; + int componentWidth = layoutWidth / eachRowCount; + int componentHeight = layoutHeight / row; + for(int i = 0;i < row - 1;i++){ + for(int j = 0;j < eachRowCount;j++){ + components[eachRowCount * i + j].setBounds( + leftMargin + componentWidth * j, + topMargin + componentHeight * i, + j == eachRowCount - 1 ? layoutWidth - componentWidth * (eachRowCount-1) : componentWidth, + componentHeight + ); + } + } + //最后一行列数是特殊的,要单独处理 + int lastRowWidth = layoutWidth / column; + int lastRowHeight = layoutHeight - componentHeight * (row - 1); + for (int i = 0;i < column;i++) { + components[eachRowCount * (row - 1) + i].setBounds( + leftMargin + lastRowWidth * i, + topMargin + componentHeight * (row - 1), + i == column - 1 ? layoutWidth - lastRowWidth * (column-1) : lastRowWidth, + lastRowHeight + ); + } + xwFitLayout.updateBoundsWidget(); + } + + private class ComponentLocationInfo{ + private Component component; + private int horizontalNO; + private int verticalNO; + + public ComponentLocationInfo(Component component, int horizontalNO, int verticalNO){ + this.component = component; + this.horizontalNO = horizontalNO; + this.verticalNO = verticalNO; + } + + public int getHorizontalNO() { + return this.horizontalNO; + } + + public int getVerticalNO() { + return this.verticalNO; + } + + public void setHorizontalNO(int horizontalNO){ + this.horizontalNO = horizontalNO; + } + + public void setVerticalNO(int verticalNO){ + this.verticalNO = verticalNO; + } + } + + //以组件的位置来确定先后顺序,y小的在前,x小的在前 + private class ComparatorComponentLocation implements Comparator { + @Override + public int compare(Object o1, Object o2) { + if(((Component)o1).getY() < ((Component)o2).getY()){ + return -1; + } + else if (((Component)o1).getY() > ((Component)o2).getY()) { + return 1; + } + else { + if (((Component)o1).getX() < ((Component)o2).getX()){ + return -1; + } + else if (((Component)o1).getX() > ((Component)o2).getX()) { + return 1; + } + else{ + return 0; + } + } + } + } } diff --git a/designer_form/src/com/fr/design/designer/properties/FRFitLayoutPropertiesGroupModel.java b/designer_form/src/com/fr/design/designer/properties/FRFitLayoutPropertiesGroupModel.java index 8a2f50793..25680581c 100644 --- a/designer_form/src/com/fr/design/designer/properties/FRFitLayoutPropertiesGroupModel.java +++ b/designer_form/src/com/fr/design/designer/properties/FRFitLayoutPropertiesGroupModel.java @@ -4,16 +4,25 @@ package com.fr.design.designer.properties; import com.fr.design.beans.GroupModel; +import com.fr.design.designer.creator.XWAbsoluteLayout; import com.fr.design.designer.creator.XWFitLayout; +import com.fr.design.mainframe.FormDesigner; +import com.fr.design.mainframe.FormSelectionUtils; +import com.fr.design.mainframe.WidgetPropertyPane; import com.fr.design.mainframe.widget.editors.FitLayoutDirectionEditor; +import com.fr.design.mainframe.widget.editors.LayoutTypeEditor; import com.fr.design.mainframe.widget.editors.IntegerPropertyEditor; import com.fr.design.mainframe.widget.editors.PropertyCellEditor; +import com.fr.form.ui.Widget; +import com.fr.form.ui.container.WAbsoluteLayout; +import com.fr.form.ui.container.WBodyLayoutType; import com.fr.form.ui.container.WFitLayout; import com.fr.general.Inter; import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.TableCellEditor; import javax.swing.table.TableCellRenderer; +import java.awt.*; /** * 自适应布局自身的属性表 @@ -28,6 +37,8 @@ public class FRFitLayoutPropertiesGroupModel implements GroupModel { private DefaultTableCellRenderer renderer; private FitLayoutDirectionEditor stateEditor; private FitStateRenderer stateRenderer; + private LayoutTypeEditor layoutTypeEditor; + private LayoutTypeRenderer layoutTypeRenderer; private WFitLayout layout; private XWFitLayout xfl; @@ -38,6 +49,8 @@ public class FRFitLayoutPropertiesGroupModel implements GroupModel { editor = new PropertyCellEditor(new IntegerPropertyEditor()); stateEditor = new FitLayoutDirectionEditor(); stateRenderer = new FitStateRenderer(); + layoutTypeEditor = new LayoutTypeEditor(); + layoutTypeRenderer = new LayoutTypeRenderer(); } /** @@ -45,31 +58,35 @@ public class FRFitLayoutPropertiesGroupModel implements GroupModel { */ @Override public String getGroupName() { - return Inter.getLocText("FR-Designer-Layout_Adaptive_Layout"); + return Inter.getLocText("FR-Designer_Layout"); } @Override public int getRowCount() { - return 2; + return 3; } @Override public TableCellRenderer getRenderer(int row) { switch (row) { case 0: - return renderer; + return layoutTypeRenderer; + case 1: + return stateRenderer; default: - return stateRenderer; + return renderer; } } @Override public TableCellEditor getEditor(int row) { switch (row) { - case 0: - return editor; + case 0: + return layoutTypeEditor; + case 1: + return stateEditor; default: - return stateEditor; + return editor; } } @@ -78,16 +95,20 @@ public class FRFitLayoutPropertiesGroupModel implements GroupModel { if (column == 0) { switch (row) { case 0: - return Inter.getLocText("FR-Designer_Component_Interval"); + return Inter.getLocText("FR-Designer_Attr_Layout_Type"); + case 1: + return Inter.getLocText("FR-Designer_Component_Scale"); default: - return Inter.getLocText("FR-Designer_Component_Scale"); + return Inter.getLocText("FR-Designer_Component_Interval"); } } else { switch (row) { case 0: - return layout.getCompInterval(); + return layout.getBodyLayoutType().getTypeValue(); + case 1: + return layout.getCompState(); default: - return layout.getCompState(); + return layout.getCompInterval(); } } } @@ -101,13 +122,35 @@ public class FRFitLayoutPropertiesGroupModel implements GroupModel { if (column == 0 || state < 0) { return false; } else { - if (row ==0 && xfl.canAddInterval(state)) { + if (row == 2 && xfl.canAddInterval(state)) { // 设置完间隔后,要同步处理界面组件,容器刷新后显示出对应效果 setLayoutGap(state); return true; }else if (row == 1) { layout.setCompState(state); return true; + }else if (row == 0) { + layout.setLayoutType(WBodyLayoutType.parse(state)); + if (state == WBodyLayoutType.ABSOLUTE.getTypeValue()) { + WAbsoluteLayout wAbsoluteLayout = new WAbsoluteLayout("body"); + wAbsoluteLayout.setCompState(WAbsoluteLayout.STATE_FIXED); + Component[] components = xfl.getComponents(); + xfl.removeAll(); + XWAbsoluteLayout xwAbsoluteLayout = new XWAbsoluteLayout(wAbsoluteLayout, new Dimension(0,0), true); + xfl.getLayoutAdapter().addBean(xwAbsoluteLayout, 0, 0); + for (Component component : components) { + xwAbsoluteLayout.add(component); + } + FormDesigner formDesigner = WidgetPropertyPane.getInstance().getEditingFormDesigner(); + formDesigner.getSelectionModel().setSelectedCreators( + FormSelectionUtils.rebuildSelection(xfl, new Widget[]{wAbsoluteLayout})); + } + else { + FormDesigner formDesigner = WidgetPropertyPane.getInstance().getEditingFormDesigner(); + formDesigner.getSelectionModel().setSelectedCreators( + FormSelectionUtils.rebuildSelection(xfl, new Widget[]{xfl.toData()})); + } + return true; } return false; } diff --git a/designer_form/src/com/fr/design/designer/properties/LayoutTypeRenderer.java b/designer_form/src/com/fr/design/designer/properties/LayoutTypeRenderer.java new file mode 100644 index 000000000..033552028 --- /dev/null +++ b/designer_form/src/com/fr/design/designer/properties/LayoutTypeRenderer.java @@ -0,0 +1,14 @@ +package com.fr.design.designer.properties; + +import com.fr.design.mainframe.widget.renderer.EncoderCellRenderer; + +/** + * Created by zhouping on 2016/9/18. + */ +public class LayoutTypeRenderer extends EncoderCellRenderer { + + public LayoutTypeRenderer() { + super(new LayoutTypeWrapper()); + } + +} \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/properties/LayoutTypeWrapper.java b/designer_form/src/com/fr/design/designer/properties/LayoutTypeWrapper.java new file mode 100644 index 000000000..4630fe784 --- /dev/null +++ b/designer_form/src/com/fr/design/designer/properties/LayoutTypeWrapper.java @@ -0,0 +1,13 @@ +package com.fr.design.designer.properties; + +import com.fr.design.designer.properties.items.FRLayoutTypeItems; + +/** + * Created by zhouping on 2016/9/18. + */ +public class LayoutTypeWrapper extends ItemWrapper{ + + public LayoutTypeWrapper() { + super(new FRLayoutTypeItems()); + } +} \ No newline at end of file diff --git a/designer_form/src/com/fr/design/designer/properties/items/FRFitConstraintsItems.java b/designer_form/src/com/fr/design/designer/properties/items/FRFitConstraintsItems.java index 6ae6f22c8..92e63bf1a 100644 --- a/designer_form/src/com/fr/design/designer/properties/items/FRFitConstraintsItems.java +++ b/designer_form/src/com/fr/design/designer/properties/items/FRFitConstraintsItems.java @@ -13,8 +13,8 @@ import com.fr.general.Inter; public class FRFitConstraintsItems implements ItemProvider{ public static final Item[] ITEMS = new Item[] { - new Item(Inter.getLocText("Adaptive_Full_Area"), WFitLayout.STATE_FULL), - new Item(Inter.getLocText("Adaptive_Original_Scale"), WFitLayout.STATE_ORIGIN)}; + new Item(Inter.getLocText("FR-Designer_Attr_Bidirectional_Adaptive"), WFitLayout.STATE_FULL), + new Item(Inter.getLocText("FR_Designer_Attr_Horizontal_Adaptive"), WFitLayout.STATE_ORIGIN)}; public Item[] getItems() { return ITEMS; diff --git a/designer_form/src/com/fr/design/designer/properties/items/FRLayoutTypeItems.java b/designer_form/src/com/fr/design/designer/properties/items/FRLayoutTypeItems.java new file mode 100644 index 000000000..a19d97517 --- /dev/null +++ b/designer_form/src/com/fr/design/designer/properties/items/FRLayoutTypeItems.java @@ -0,0 +1,16 @@ +package com.fr.design.designer.properties.items; + +import com.fr.form.ui.container.WBodyLayoutType; + +/** + * Created by zhouping on 2016/9/18. + */ +public class FRLayoutTypeItems implements ItemProvider{ + public static final Item[] ITEMS = new Item[] { + new Item(WBodyLayoutType.FIT.description(), WBodyLayoutType.FIT.getTypeValue()), + new Item(WBodyLayoutType.ABSOLUTE.description(), WBodyLayoutType.ABSOLUTE.getTypeValue())}; + + public Item[] getItems() { + return ITEMS; + } +} diff --git a/designer_form/src/com/fr/design/designer/treeview/ComponentTreeModel.java b/designer_form/src/com/fr/design/designer/treeview/ComponentTreeModel.java index f189bcada..e94ea1ad0 100644 --- a/designer_form/src/com/fr/design/designer/treeview/ComponentTreeModel.java +++ b/designer_form/src/com/fr/design/designer/treeview/ComponentTreeModel.java @@ -10,11 +10,9 @@ import javax.swing.tree.TreeModel; import javax.swing.tree.TreePath; import com.fr.base.FRContext; +import com.fr.design.designer.creator.*; import com.fr.design.mainframe.FormDesigner; import com.fr.design.designer.beans.events.DesignerEvent; -import com.fr.design.designer.creator.XCreator; -import com.fr.design.designer.creator.XLayoutContainer; -import com.fr.design.designer.creator.XWidgetCreator; import com.fr.form.ui.Widget; public class ComponentTreeModel implements TreeModel { @@ -23,6 +21,8 @@ public class ComponentTreeModel implements TreeModel { private Component root; private FormDesigner designer; + private final int ABSOLUTE_AS_BODY_NOT_FOUND = -1; + public ComponentTreeModel(FormDesigner designer, Component root) { this.designer = designer; this.root = root; @@ -38,6 +38,11 @@ public class ComponentTreeModel implements TreeModel { if (parent != null && parent instanceof XLayoutContainer) { XLayoutContainer xlayout = (XLayoutContainer) parent; XCreator creator = xlayout.getXCreator(index); + //绝对布局作为body的时候不显示自适应布局父层 + int absoluteBodyIndex = getAbsoluteBodyIndex(creator); + if (absoluteBodyIndex > ABSOLUTE_AS_BODY_NOT_FOUND){ + return creator.getComponent(absoluteBodyIndex); + } return creator.getXCreator(); } return null; @@ -135,4 +140,20 @@ public class ComponentTreeModel implements TreeModel { FRContext.getLogger().error(e.getMessage(), e); } } + + private int getAbsoluteBodyIndex(XCreator xCreator){ + //绝对布局作为body,父层是自适应布局,找到绝对布局位于父层的index + int index = ABSOLUTE_AS_BODY_NOT_FOUND; + if (xCreator.acceptType(XWFitLayout.class)){ + XWFitLayout bodyFitLayout = (XWFitLayout)xCreator; + for (int i = 0;i < bodyFitLayout.getXCreatorCount();i++){ + //类型是绝对布局并且还是body + if (bodyFitLayout.getXCreator(i).acceptType(XWAbsoluteLayout.class) + && ((XWAbsoluteLayout)bodyFitLayout.getXCreator(i)).toData().isAbsoluteLayoutAsBody()){ + index = i; + } + } + } + return index; + } } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/gui/core/FormWidgetOption.java b/designer_form/src/com/fr/design/gui/core/FormWidgetOption.java index 214d2cd67..b3fa73a26 100644 --- a/designer_form/src/com/fr/design/gui/core/FormWidgetOption.java +++ b/designer_form/src/com/fr/design/gui/core/FormWidgetOption.java @@ -1 +1 @@ -package com.fr.design.gui.core; import javax.swing.Icon; import com.fr.base.BaseUtils; import com.fr.form.ui.ElementCaseEditor; import com.fr.form.ui.Widget; import com.fr.form.ui.container.WAbsoluteLayout; import com.fr.form.ui.container.WBorderLayout; import com.fr.form.ui.container.WCardLayout; import com.fr.form.ui.container.WFitLayout; import com.fr.form.ui.container.WHorizontalBoxLayout; import com.fr.form.ui.container.WParameterLayout; import com.fr.form.ui.container.WVerticalBoxLayout; import com.fr.general.Inter; /** * Author : Shockway * Date: 13-6-17 * Time: 上午10:40 */ public class FormWidgetOption extends WidgetOption { /** * 返回名字 * @return 名字 */ @Override public String optionName() { return null; } /** * 返回图标 * @return 图标 */ @Override public Icon optionIcon() { return null; } /** * 组件类 * @return 类 */ @Override public Class widgetClass() { return null; } /** * 返回组件 * @return 控件 */ @Override public Widget createWidget() { return null; } /* * 表单容器 */ public static WidgetOption[] getFormContainerInstance() { return new WidgetOption[] { ABSOLUTELAYOUTCONTAINER, BORDERLAYOUTCONTAINER, HORIZONTALBOXLAYOUTCONTAINER, VERTICALBOXLAYOUTCONTAINER, CARDLAYOUTCONTAINER, FITLAYOUTCONTAINER }; } /** * 表单工具栏上的布局 * @return 控件 */ public static WidgetOption[] getFormLayoutInstance() { return new WidgetOption[] {CARDLAYOUTCONTAINER, ABSOLUTELAYOUTCONTAINER}; } public static final WidgetOption ABSOLUTELAYOUTCONTAINER = WidgetOptionFactory.createByWidgetClass(Inter .getLocText("FR-Designer_AbsoluteLayout"), BaseUtils.readIcon("/com/fr/web/images/form/resources/layout_absolute_new.png"), WAbsoluteLayout.class); public static final WidgetOption BORDERLAYOUTCONTAINER = WidgetOptionFactory.createByWidgetClass(Inter .getLocText("FR-Designer_BorderLayout"), BaseUtils.readIcon("/com/fr/web/images/form/resources/layout_border.png"), WBorderLayout.class); public static final WidgetOption CARDLAYOUTCONTAINER = WidgetOptionFactory.createByWidgetClass(Inter .getLocText("FR-Designer_CardLayout"), BaseUtils.readIcon("/com/fr/web/images/form/resources/card_layout_16.png"), WCardLayout.class); public static final WidgetOption HORIZONTALBOXLAYOUTCONTAINER = WidgetOptionFactory.createByWidgetClass(Inter .getLocText("FR-Designer_Layout-HBox"), BaseUtils.readIcon("/com/fr/web/images/form/resources/boxlayout_h_16.png"), WHorizontalBoxLayout.class); public static final WidgetOption VERTICALBOXLAYOUTCONTAINER = WidgetOptionFactory.createByWidgetClass(Inter .getLocText("FR-Designer_VerticalBoxLayout"), BaseUtils.readIcon("/com/fr/web/images/form/resources/boxlayout_v_16.png"), WVerticalBoxLayout.class); public static final WidgetOption FITLAYOUTCONTAINER = WidgetOptionFactory.createByWidgetClass(Inter.getLocText("FR-Designer-Layout_Adaptive_Layout"), BaseUtils.readIcon("/com/fr/web/images/form/resources/boxlayout_v_16.png"), WFitLayout.class); public static final WidgetOption PARAMETERCONTAINER = WidgetOptionFactory.createByWidgetClass(Inter .getLocText("FR-Designer_Para-Body"), BaseUtils.readIcon("/com/fr/web/images/form/resources/layout_parameter.png"), WParameterLayout.class); public static final WidgetOption ELEMENTCASE = WidgetOptionFactory.createByWidgetClass(Inter .getLocText("FR-Designer_Form-Report"), BaseUtils.readIcon("/com/fr/web/images/form/resources/report_16.png"), ElementCaseEditor.class); } \ No newline at end of file +package com.fr.design.gui.core; import javax.swing.Icon; import com.fr.base.BaseUtils; import com.fr.form.ui.ElementCaseEditor; import com.fr.form.ui.Widget; import com.fr.form.ui.container.WAbsoluteLayout; import com.fr.form.ui.container.WBorderLayout; import com.fr.form.ui.container.WCardLayout; import com.fr.form.ui.container.WFitLayout; import com.fr.form.ui.container.WHorizontalBoxLayout; import com.fr.form.ui.container.WParameterLayout; import com.fr.form.ui.container.WVerticalBoxLayout; import com.fr.general.Inter; /** * Author : Shockway * Date: 13-6-17 * Time: 上午10:40 */ public class FormWidgetOption extends WidgetOption { /** * 返回名字 * @return 名字 */ @Override public String optionName() { return null; } /** * 返回图标 * @return 图标 */ @Override public Icon optionIcon() { return null; } /** * 组件类 * @return 类 */ @Override public Class widgetClass() { return null; } /** * 返回组件 * @return 控件 */ @Override public Widget createWidget() { return null; } /* * 表单容器 */ public static WidgetOption[] getFormContainerInstance() { return new WidgetOption[] { ABSOLUTELAYOUTCONTAINER, BORDERLAYOUTCONTAINER, HORIZONTALBOXLAYOUTCONTAINER, VERTICALBOXLAYOUTCONTAINER, CARDLAYOUTCONTAINER, FITLAYOUTCONTAINER }; } /** * 表单工具栏上的布局 * @return 控件 */ public static WidgetOption[] getFormLayoutInstance() { return new WidgetOption[] {CARDLAYOUTCONTAINER, ABSOLUTELAYOUTCONTAINER}; } public static final WidgetOption ABSOLUTELAYOUTCONTAINER = WidgetOptionFactory.createByWidgetClass(Inter .getLocText("FR-Designer_Layout_Block_Absolute"), BaseUtils.readIcon("/com/fr/web/images/form/resources/layout_absolute_new.png"), WAbsoluteLayout.class); public static final WidgetOption BORDERLAYOUTCONTAINER = WidgetOptionFactory.createByWidgetClass(Inter .getLocText("FR-Designer_BorderLayout"), BaseUtils.readIcon("/com/fr/web/images/form/resources/layout_border.png"), WBorderLayout.class); public static final WidgetOption CARDLAYOUTCONTAINER = WidgetOptionFactory.createByWidgetClass(Inter .getLocText("FR-Designer_Layout_Block_Tab"), BaseUtils.readIcon("/com/fr/web/images/form/resources/card_layout_16.png"), WCardLayout.class); public static final WidgetOption HORIZONTALBOXLAYOUTCONTAINER = WidgetOptionFactory.createByWidgetClass(Inter .getLocText("FR-Designer_Layout-HBox"), BaseUtils.readIcon("/com/fr/web/images/form/resources/boxlayout_h_16.png"), WHorizontalBoxLayout.class); public static final WidgetOption VERTICALBOXLAYOUTCONTAINER = WidgetOptionFactory.createByWidgetClass(Inter .getLocText("FR-Designer_VerticalBoxLayout"), BaseUtils.readIcon("/com/fr/web/images/form/resources/boxlayout_v_16.png"), WVerticalBoxLayout.class); public static final WidgetOption FITLAYOUTCONTAINER = WidgetOptionFactory.createByWidgetClass(Inter.getLocText("FR-Designer-Layout_Adaptive_Layout"), BaseUtils.readIcon("/com/fr/web/images/form/resources/boxlayout_v_16.png"), WFitLayout.class); public static final WidgetOption PARAMETERCONTAINER = WidgetOptionFactory.createByWidgetClass(Inter .getLocText("FR-Designer_Para-Body"), BaseUtils.readIcon("/com/fr/web/images/form/resources/layout_parameter.png"), WParameterLayout.class); public static final WidgetOption ELEMENTCASE = WidgetOptionFactory.createByWidgetClass(Inter .getLocText("FR-Designer_Form-Report"), BaseUtils.readIcon("/com/fr/web/images/form/resources/report_16.png"), ElementCaseEditor.class); } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/mainframe/ComponentTree.java b/designer_form/src/com/fr/design/mainframe/ComponentTree.java index 0a268610e..4cf0d2528 100644 --- a/designer_form/src/com/fr/design/mainframe/ComponentTree.java +++ b/designer_form/src/com/fr/design/mainframe/ComponentTree.java @@ -18,6 +18,8 @@ import com.fr.design.designer.beans.events.DesignerEditListener; import com.fr.design.designer.beans.events.DesignerEvent; import com.fr.design.designer.creator.XCreator; import com.fr.design.designer.creator.XLayoutContainer; +import com.fr.design.designer.creator.XWAbsoluteLayout; +import com.fr.design.designer.creator.XWFitLayout; import com.fr.design.designer.treeview.ComponentTreeCellRenderer; import com.fr.design.designer.treeview.ComponentTreeModel; import com.fr.stable.StringUtils; @@ -277,6 +279,13 @@ public class ComponentTree extends JTree { if (creator != comp ) { creator.notShowInComponentTree(path); } + //绝对布局作为body的时候不显示自适应布局父层 + if (((XCreator) parent).acceptType(XWAbsoluteLayout.class) + && ((XCreator)parent.getParent()).acceptType(XWFitLayout.class) + && ((XWAbsoluteLayout)parent).toData().isAbsoluteLayoutAsBody()){ + parent = parent.getParent().getParent(); + continue; + } parent = parent.getParent(); } Object[] components = path.toArray(); diff --git a/designer_form/src/com/fr/design/mainframe/FormParaWidgetPane.java b/designer_form/src/com/fr/design/mainframe/FormParaWidgetPane.java index 8118d4da2..cb111bb92 100644 --- a/designer_form/src/com/fr/design/mainframe/FormParaWidgetPane.java +++ b/designer_form/src/com/fr/design/mainframe/FormParaWidgetPane.java @@ -94,12 +94,6 @@ public class FormParaWidgetPane extends JPanel{ private void initFormParaComponent() { this.removeAll(); // 菜单中的布局先注释掉 - - JPanel reportPane = new JPanel(new FlowLayout()); - reportPane.add(new ToolBarButton(FormWidgetOption.ELEMENTCASE)); - add(createNormalCombinationPane(reportPane,Inter.getLocText("FR-Designer-Form-ToolBar_Report"))); - add(createJSeparator()); - JPanel paraPane = new JPanel(new FlowLayout()); ToolBarButton paraButton = new paraButton(FormWidgetOption.PARAMETERCONTAINER); paraPane.add(paraButton); @@ -111,7 +105,8 @@ public class FormParaWidgetPane extends JPanel{ for(WidgetOption option : loadLayoutOptions()){ layoutPane.add(new ToolBarButton(option)); } - add(createNormalCombinationPane(layoutPane,Inter.getLocText("FR-Designer_Layout"))); + layoutPane.add(new ToolBarButton(FormWidgetOption.ELEMENTCASE)); + add(createNormalCombinationPane(layoutPane,Inter.getLocText("FR-Designer_Layout_Block_Blank"))); jSeparatorLayout = createJSeparator(); add(jSeparatorLayout); diff --git a/designer_form/src/com/fr/design/mainframe/widget/editors/LayoutTypeEditor.java b/designer_form/src/com/fr/design/mainframe/widget/editors/LayoutTypeEditor.java new file mode 100644 index 000000000..05de57f52 --- /dev/null +++ b/designer_form/src/com/fr/design/mainframe/widget/editors/LayoutTypeEditor.java @@ -0,0 +1,15 @@ +package com.fr.design.mainframe.widget.editors; + +import com.fr.design.designer.properties.EnumerationEditor; +import com.fr.design.designer.properties.items.FRLayoutTypeItems; + +/** + * Created by zhouping on 2016/9/18. + */ +public class LayoutTypeEditor extends EnumerationEditor { + + public LayoutTypeEditor() { + super(new FRLayoutTypeItems()); + } + +} \ No newline at end of file From 74e8773a81c78181b50a6f9a0ede910c81a7347e Mon Sep 17 00:00:00 2001 From: zack Date: Thu, 13 Oct 2016 10:07:45 +0800 Subject: [PATCH 20/22] =?UTF-8?q?dev=E6=89=93=E5=8C=85=E5=A4=B1=E8=B4=A5?= =?UTF-8?q?=EF=BC=8C=E5=85=88=E6=8A=8Axcreator=E4=BC=A0=E4=B8=80=E4=B8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/designer/creator/XCreator.java | 133 +++++++++++------- 1 file changed, 85 insertions(+), 48 deletions(-) diff --git a/designer_form/src/com/fr/design/designer/creator/XCreator.java b/designer_form/src/com/fr/design/designer/creator/XCreator.java index ab08de3fe..552402398 100644 --- a/designer_form/src/com/fr/design/designer/creator/XCreator.java +++ b/designer_form/src/com/fr/design/designer/creator/XCreator.java @@ -15,6 +15,7 @@ import com.fr.design.utils.gui.LayoutUtils; import com.fr.form.ui.Widget; import com.fr.form.ui.container.WTitleLayout; import com.fr.stable.StableUtils; +import com.fr.stable.StringUtils; import javax.swing.*; import javax.swing.border.Border; @@ -27,7 +28,7 @@ import java.util.List; /** * @author richer * @since 6.5.3 com.fr.base.listener.OB的设计组件 - * + * */ public abstract class XCreator extends JPanel implements XComponent, XCreatorTools { @@ -44,6 +45,8 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo // XCreator加入到某些XLayoutContainer中时,能调整宽度或者高度 private int[] directions; private Rectangle backupBound; + private String shareId = StringUtils.EMPTY;//如果组件是共享的会有这个属性 + private boolean isHelpBtnOnFocus = false;//焦点是否在帮助按钮上 public XCreator(Widget ob, Dimension initSize) { this.data = ob; @@ -83,7 +86,7 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo setSize(this.backupSize); } } - + /** * 备份当前大小 */ @@ -113,76 +116,76 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo public XLayoutContainer getTopLayout(){ return null; } - + /** * 获取当前XCreator的一个封装父容器 - * + * * @param widgetName 当前组件名 - * + * * @return 封装的父容器 - * + * * * @date 2014-11-25-下午4:47:23 - * + * */ protected XLayoutContainer getCreatorWrapper(String widgetName){ return new XWTitleLayout(); } - + /** * 将当前对象添加到父容器中 - * + * * @param parentPanel 父容器组件 - * + * * * @date 2014-11-25-下午4:57:55 - * + * */ - protected void addToWrapper(XLayoutContainer parentPanel, int width, int minHeight){ + protected void addToWrapper(XLayoutContainer parentPanel, int width, int minHeight){ parentPanel.add(this, WTitleLayout.BODY); } - + /** * 设置父容器的名字 - * + * * @param parentPanel 当前父容器 * @param widgetName 当前控件名 - * + * * * @date 2014-11-27-上午9:47:00 - * + * */ protected void setWrapperName(XLayoutContainer parentPanel, String widgetName){ parentPanel.toData().setWidgetName(widgetName); } - + /** * 初始化当前组件的父容器 * 大体分为三种: Scale缩放型, Title标题型, Border自定义标题栏 - * + * * @param minHeight 最小高度 - * + * * @return 父容器 - * + * * * @date 2014-11-25-下午5:15:23 - * + * */ public XLayoutContainer initCreatorWrapper(int minHeight){ XLayoutContainer parentPanel; String widgetName = this.toData().getWidgetName(); parentPanel = this.getCreatorWrapper(widgetName); - + int width = this.getWidth(); int height = this.getHeight(); - + parentPanel.setLocation(this.getX(), this.getY()); parentPanel.setSize(width, height); setWrapperName(parentPanel, widgetName); this.setLocation(0, 0); this.addToWrapper(parentPanel, width, minHeight); LayoutUtils.layoutRootContainer(parentPanel); - + return parentPanel; } @@ -291,7 +294,7 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo public Dimension getMinimumSize() { return new Dimension(0, 0); } - + /** * 是否支持切换到报表界面编辑 * @return 是则返回true @@ -299,7 +302,7 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo public boolean isReport(){ return false; } - + /** * 该组件是否可以拖入参数面板 * @return 是则返回true @@ -359,7 +362,7 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo public void setBackupBound(Rectangle rec) { this.backupBound = rec; } - + /** * 控件树不显示此组件 * @param path 控件树list @@ -367,7 +370,7 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo public void notShowInComponentTree(ArrayList path) { return; } - + /** * 重置组件的名称 * @param name 名称 @@ -375,7 +378,7 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo public void resetCreatorName(String name) { toData().setWidgetName(name); } - + /** * 返回编辑的子组件,scale为其内部组件 * @return 组件 @@ -383,7 +386,7 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo public XCreator getEditingChildCreator() { return this; } - + /** * 返回对应属性表的组件,scale和title返回其子组件 * @return 组件 @@ -391,7 +394,7 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo public XCreator getPropertyDescriptorCreator() { return this; } - + /** * 更新子组件的Bound; 没有不处理 * @param minHeight 最小高度 @@ -399,7 +402,7 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo public void updateChildBound(int minHeight) { return; } - + /** * 是否作为控件树的叶子节点 * @return 是则返回true @@ -407,7 +410,7 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo public boolean isComponentTreeLeaf() { return true; } - + /** * 是否为sclae和title专属容器 * @return 是则返回true @@ -415,7 +418,7 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo public boolean isDedicateContainer() { return false; } - + /** * 是否接收这种类型 * @param acceptTypes 接收的类型 @@ -432,13 +435,13 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo /** * 是否组件要缩放(自适应里部分组件需要, 如数字、文本、下拉框、下拉复选框、密码、下拉树、下拉复选树、日期) - * + * * @return 是则返回true */ public boolean shouldScaleCreator() { return false; } - + /** * 是否支持标题样式 * @return 默认false @@ -446,10 +449,10 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo public boolean hasTitleStyle() { return false; } - + /** * 响应点击事件 - * + * * @param editingMouseListener 鼠标点击,位置处理器 * @param e 鼠标点击事件 */ @@ -468,10 +471,10 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo } } } - + /** * 删除相关组件 - * + * * @param creator 当前组件 * @param designer 表单设计器 * @@ -479,17 +482,17 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo public void deleteRelatedComponent(XCreator creator,FormDesigner designer){ return; } - + /** * 选择相关组件 - * + * * @param creator 当前组件 - * + * */ public void seleteRelatedComponent(XCreator creator){ return; } - + /** * 返回组件 * @return @@ -498,7 +501,7 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo public XCreator getXCreator(){ return this; } - + /** * 按百分比调整组件 * @param percent 百分比 @@ -507,7 +510,7 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo public void adjustCompSize(double percent){ return; } - + /** * 返回一些需要的子组件 * @return 返回一些需要的子组件 @@ -516,11 +519,11 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo public ArrayList getTargetChildrenList(){ return new ArrayList(); } - + public XLayoutContainer getOuterLayout(){ return this.getBackupParent(); } - + /** * 重新调整子组件宽度 * @param width 宽度 @@ -553,4 +556,38 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo public boolean supportRenameInWidgetTree() { return true; } + + /** + * 组件是否是共享组件 + * @return 是否是共享组件 + */ + public boolean isShared() { + return StringUtils.isNotEmpty(shareId); + } + + public void setShareId(String shareId) { + this.shareId = shareId; + } + + public String getShareId() { + return shareId; + } + + /** + * 焦点是否在帮助按钮上 + * @return 焦点是否在帮助按钮上 + */ + public boolean isHelpBtnOnFocus() { + return isHelpBtnOnFocus; + } + + public void setHelpBtnOnFocus(boolean helpBtnOnFocus) { + isHelpBtnOnFocus = helpBtnOnFocus; + } + + /** + * 设置共享帮助信息 + * @param msg 帮助信息 + */ + public void setSharedMsg(String msg){} } \ No newline at end of file From 07b771326aabd4be5332135501d3b8c1cc25051f Mon Sep 17 00:00:00 2001 From: kerry Date: Thu, 13 Oct 2016 10:54:10 +0800 Subject: [PATCH 21/22] =?UTF-8?q?REPORT-338=20=20=E6=97=A5=E6=96=87?= =?UTF-8?q?=E8=AE=BE=E8=AE=A1=E5=99=A8=EF=BC=8C=E8=B6=85=E9=93=BE=E6=8E=A5?= =?UTF-8?q?=E5=AF=B9=E8=AF=9D=E6=A1=86=E9=80=89=E9=A1=B9=E6=97=A0=E6=95=88?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hyperlink/AbstractHyperlinkPane.java | 2 +- .../hyperlink/HyperlinkTargetFrame.java | 44 +++++++++++++++++++ 2 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 designer_base/src/com/fr/design/hyperlink/HyperlinkTargetFrame.java diff --git a/designer_base/src/com/fr/design/hyperlink/AbstractHyperlinkPane.java b/designer_base/src/com/fr/design/hyperlink/AbstractHyperlinkPane.java index bc5447329..6a236a4e3 100644 --- a/designer_base/src/com/fr/design/hyperlink/AbstractHyperlinkPane.java +++ b/designer_base/src/com/fr/design/hyperlink/AbstractHyperlinkPane.java @@ -127,7 +127,7 @@ public abstract class AbstractHyperlinkPane extends BasicBe public void updateBean(T link) { updateSubHyperlinkBean(link); - link.setTargetFrame((String) targetFrameComboBox.getSelectedItem()); + link.setTargetFrame(HyperlinkTargetFrame.getName(targetFrameComboBox.getSelectedIndex())); link.setHeight(Utils.objectToNumber(heightTextFiled.getText(), false).intValue()); link.setWidth(Utils.objectToNumber(widthTextFiled.getText(), false).intValue()); } diff --git a/designer_base/src/com/fr/design/hyperlink/HyperlinkTargetFrame.java b/designer_base/src/com/fr/design/hyperlink/HyperlinkTargetFrame.java new file mode 100644 index 000000000..56d590f03 --- /dev/null +++ b/designer_base/src/com/fr/design/hyperlink/HyperlinkTargetFrame.java @@ -0,0 +1,44 @@ +package com.fr.design.hyperlink; + +/** + * Created by ibm on 2016/10/13. + */ +public enum HyperlinkTargetFrame { + BLANK_FRAME("_blank", 0), DIALOG_FRAME("_dialog", 1), SELF_FRAME("_self", 2); + + private String name; + private int index; + + + HyperlinkTargetFrame(String name, int index) { + this.name = name; + this.index = index; + } + + public static String getName(int index) { + for (HyperlinkTargetFrame hyperlinkTargetFrame : HyperlinkTargetFrame.values()) { + if (hyperlinkTargetFrame.getIndex() == index) { + return hyperlinkTargetFrame.name; + } + } + return null; + } + + public int getIndex() { + return index; + } + + public void setIndex(int index) { + this.index = index; + } + + public String getName() { + return name; + + } + + public void setName(String name) { + this.name = name; + } +} + From e79268436682c6c45114f27157d5b4940e498053 Mon Sep 17 00:00:00 2001 From: kerry Date: Thu, 13 Oct 2016 11:29:21 +0800 Subject: [PATCH 22/22] =?UTF-8?q?REPORT-338=20=E6=97=A5=E6=96=87=E8=AE=BE?= =?UTF-8?q?=E8=AE=A1=E5=99=A8=EF=BC=8C=E8=B6=85=E9=93=BE=E6=8E=A5=E5=AF=B9?= =?UTF-8?q?=E8=AF=9D=E6=A1=86=E9=80=89=E9=A1=B9=E6=97=A0=E6=95=88=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/hyperlink/AbstractHyperlinkPane.java | 2 +- .../fr/design/hyperlink/HyperlinkTargetFrame.java | 12 ++++++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/designer_base/src/com/fr/design/hyperlink/AbstractHyperlinkPane.java b/designer_base/src/com/fr/design/hyperlink/AbstractHyperlinkPane.java index 6a236a4e3..8a2773f58 100644 --- a/designer_base/src/com/fr/design/hyperlink/AbstractHyperlinkPane.java +++ b/designer_base/src/com/fr/design/hyperlink/AbstractHyperlinkPane.java @@ -127,7 +127,7 @@ public abstract class AbstractHyperlinkPane extends BasicBe public void updateBean(T link) { updateSubHyperlinkBean(link); - link.setTargetFrame(HyperlinkTargetFrame.getName(targetFrameComboBox.getSelectedIndex())); + link.setTargetFrame(HyperlinkTargetFrame.parse(targetFrameComboBox.getSelectedIndex()).getName()); link.setHeight(Utils.objectToNumber(heightTextFiled.getText(), false).intValue()); link.setWidth(Utils.objectToNumber(widthTextFiled.getText(), false).intValue()); } diff --git a/designer_base/src/com/fr/design/hyperlink/HyperlinkTargetFrame.java b/designer_base/src/com/fr/design/hyperlink/HyperlinkTargetFrame.java index 56d590f03..80e9f21a0 100644 --- a/designer_base/src/com/fr/design/hyperlink/HyperlinkTargetFrame.java +++ b/designer_base/src/com/fr/design/hyperlink/HyperlinkTargetFrame.java @@ -8,22 +8,26 @@ public enum HyperlinkTargetFrame { private String name; private int index; - + private static HyperlinkTargetFrame[] arrayOfValues; HyperlinkTargetFrame(String name, int index) { this.name = name; this.index = index; } - public static String getName(int index) { + public static HyperlinkTargetFrame parse(int index) { + if (arrayOfValues == null) { + arrayOfValues = HyperlinkTargetFrame.values(); + } for (HyperlinkTargetFrame hyperlinkTargetFrame : HyperlinkTargetFrame.values()) { if (hyperlinkTargetFrame.getIndex() == index) { - return hyperlinkTargetFrame.name; + return hyperlinkTargetFrame; } } - return null; + return BLANK_FRAME; } + public int getIndex() { return index; }