forked from fanruan/design
paul
8 years ago
123 changed files with 5222 additions and 11539 deletions
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
@ -1,32 +1,29 @@
|
||||
package com.fr.design.mainframe.bbs; |
||||
package com.fr.design.extra; |
||||
|
||||
import com.fr.design.dialog.BasicPane; |
||||
import com.fr.design.dialog.UIDialog; |
||||
import com.fr.design.utils.gui.GUICoreUtils; |
||||
import com.fr.general.Inter; |
||||
import com.fr.general.SiteCenter; |
||||
import com.fr.general.http.HttpClient; |
||||
import com.fr.stable.StringUtils; |
||||
import com.fr.stable.StableUtils; |
||||
|
||||
import javax.swing.*; |
||||
import java.awt.*; |
||||
|
||||
/** |
||||
* Created by zhaohehe on 16/7/26. |
||||
* Created by vito on 2017/5/5. |
||||
*/ |
||||
public class LoginDialog extends UIDialog { |
||||
private static final Dimension DEFAULT_SHOP = new Dimension(401, 201); |
||||
|
||||
public LoginDialog(Frame frame, BasicPane pane) { |
||||
|
||||
public LoginDialog(Frame frame, Component pane) { |
||||
super(frame); |
||||
setUndecorated(true); |
||||
if (StableUtils.getMajorJavaVersion() == 8) { |
||||
setUndecorated(true); |
||||
} |
||||
JPanel panel = (JPanel) getContentPane(); |
||||
panel.setLayout(new BorderLayout()); |
||||
add(pane, BorderLayout.CENTER); |
||||
setSize(DEFAULT_SHOP); |
||||
GUICoreUtils.centerWindow(this); |
||||
setResizable(false); |
||||
setTitle(Inter.getLocText("FR-Designer-Plugin_Manager")); |
||||
} |
||||
|
||||
@Override |
@ -1,152 +0,0 @@
|
||||
package com.fr.design.extra; |
||||
|
||||
import com.fr.base.FRContext; |
||||
import com.fr.design.DesignerEnvManager; |
||||
import com.fr.design.RestartHelper; |
||||
import com.fr.design.dialog.BasicPane; |
||||
import com.fr.design.gui.frpane.UITabbedPane; |
||||
import com.fr.general.ComparatorUtils; |
||||
import com.fr.general.IOUtils; |
||||
import com.fr.general.Inter; |
||||
import com.fr.general.SiteCenter; |
||||
import com.fr.general.http.HttpClient; |
||||
import com.fr.plugin.PluginVerifyException; |
||||
import com.fr.stable.StableUtils; |
||||
|
||||
import javax.swing.*; |
||||
import java.awt.*; |
||||
import java.io.File; |
||||
import java.net.HttpURLConnection; |
||||
import java.net.URL; |
||||
import java.util.concurrent.ExecutionException; |
||||
|
||||
/** |
||||
* Created by zhaohehe on 16/7/27. |
||||
*/ |
||||
public class LoginPane extends BasicPane { |
||||
private static final String LATEST = "latest"; |
||||
|
||||
public LoginPane() { |
||||
setLayout(new BorderLayout()); |
||||
if (StableUtils.getMajorJavaVersion() == 8) { |
||||
String installHome; |
||||
if (StableUtils.isDebug()) { |
||||
URL url = ClassLoader.getSystemResource(""); |
||||
installHome = url.getPath(); |
||||
addPane(installHome); |
||||
} else { |
||||
installHome = StableUtils.getInstallHome(); |
||||
File file = new File(StableUtils.pathJoin(installHome, "scripts")); |
||||
if (!file.exists()) { |
||||
int rv = JOptionPane.showConfirmDialog( |
||||
this, |
||||
Inter.getLocText("FR-Designer-Plugin_Shop_Need_Install"), |
||||
Inter.getLocText("FR-Designer-Plugin_Warning"), |
||||
JOptionPane.OK_CANCEL_OPTION, |
||||
JOptionPane.INFORMATION_MESSAGE |
||||
); |
||||
if (rv == JOptionPane.OK_OPTION) { |
||||
downloadShopScripts(); |
||||
} |
||||
} else { |
||||
addPane(installHome); |
||||
updateShopScripts(); |
||||
} |
||||
} |
||||
} else { |
||||
initTraditionalStore(); |
||||
} |
||||
} |
||||
|
||||
private void addPane(String installHome) { |
||||
LoginWebPane webPane = new LoginWebPane(new File(installHome).getAbsolutePath(),LoginPane.this); |
||||
add(webPane, BorderLayout.CENTER); |
||||
} |
||||
|
||||
@Override |
||||
protected String title4PopupWindow() { |
||||
return Inter.getLocText("FR-Designer-Plugin_Manager"); |
||||
} |
||||
|
||||
private void downloadShopScripts() { |
||||
new SwingWorker<Boolean, Void>() { |
||||
@Override |
||||
protected Boolean doInBackground() throws Exception { |
||||
String id = "shop_scripts"; |
||||
String username = DesignerEnvManager.getEnvManager().getBBSName(); |
||||
String password = DesignerEnvManager.getEnvManager().getBBSPassword(); |
||||
try { |
||||
PluginHelper.downloadPluginFile(id, username, password, new Process<Double>() { |
||||
@Override |
||||
public void process(Double integer) { |
||||
} |
||||
}); |
||||
} catch (PluginVerifyException e) { |
||||
JOptionPane.showMessageDialog(LoginPane.this, e.getMessage(), Inter.getLocText("FR-Designer-Plugin_Warning"), JOptionPane.ERROR_MESSAGE); |
||||
return false; |
||||
} catch (Exception e) { |
||||
FRContext.getLogger().error(e.getMessage(), e); |
||||
return false; |
||||
} |
||||
return true; |
||||
} |
||||
|
||||
@Override |
||||
protected void done() { |
||||
try { |
||||
if (get()) { |
||||
IOUtils.unzip(new File(StableUtils.pathJoin(PluginHelper.DOWNLOAD_PATH, PluginHelper.TEMP_FILE)), StableUtils.getInstallHome()); |
||||
int rv = JOptionPane.showOptionDialog( |
||||
LoginPane.this, |
||||
Inter.getLocText("FR-Designer-Plugin_Shop_Installed"), |
||||
Inter.getLocText("FR-Designer-Plugin_Warning"), |
||||
JOptionPane.YES_NO_OPTION, |
||||
JOptionPane.INFORMATION_MESSAGE, |
||||
null, |
||||
new String[]{Inter.getLocText("FR-Designer-Basic_Restart_Designer"), Inter.getLocText("FR-Designer-Basic_Restart_Designer_Later")}, |
||||
null |
||||
); |
||||
if (rv == JOptionPane.OK_OPTION) { |
||||
RestartHelper.restart(); |
||||
} |
||||
} |
||||
} catch (InterruptedException | ExecutionException e) { |
||||
FRContext.getLogger().error(e.getMessage(), e); |
||||
} |
||||
} |
||||
}.execute(); |
||||
} |
||||
|
||||
private void updateShopScripts() { |
||||
new SwingWorker<Void, Void>() { |
||||
@Override |
||||
protected Void doInBackground() throws Exception { |
||||
HttpClient httpClient = new HttpClient(SiteCenter.getInstance().acquireUrlByKind("store.version") + "&version=" + PluginStoreConstants.VERSION); |
||||
if (httpClient.getResponseCode() == HttpURLConnection.HTTP_OK) { |
||||
if (!ComparatorUtils.equals(httpClient.getResponseText(), LATEST)) { |
||||
int rv = JOptionPane.showConfirmDialog( |
||||
LoginPane.this, |
||||
Inter.getLocText("FR-Designer-Plugin_Shop_Need_Update"), |
||||
Inter.getLocText("FR-Designer-Plugin_Warning"), |
||||
JOptionPane.OK_CANCEL_OPTION, |
||||
JOptionPane.INFORMATION_MESSAGE |
||||
); |
||||
if (rv == JOptionPane.OK_OPTION) { |
||||
downloadShopScripts(); |
||||
} |
||||
} |
||||
} |
||||
return null; |
||||
} |
||||
}.execute(); |
||||
} |
||||
|
||||
private void initTraditionalStore() { |
||||
UITabbedPane tabbedPane = new UITabbedPane(); |
||||
add(tabbedPane, BorderLayout.CENTER); |
||||
PluginInstalledPane installedPane = new PluginInstalledPane(); |
||||
tabbedPane.addTab(installedPane.tabTitle(), installedPane); |
||||
tabbedPane.addTab(Inter.getLocText("FR-Designer-Plugin_Update"), new PluginUpdatePane(tabbedPane)); |
||||
tabbedPane.addTab(Inter.getLocText("FR-Designer-Plugin_All_Plugins"), new PluginFromStorePane(tabbedPane)); |
||||
} |
||||
} |
@ -1,145 +0,0 @@
|
||||
package com.fr.design.extra; |
||||
|
||||
import com.fr.base.FRContext; |
||||
import com.fr.design.DesignerEnvManager; |
||||
import com.fr.design.RestartHelper; |
||||
import com.fr.design.dialog.BasicPane; |
||||
import com.fr.general.ComparatorUtils; |
||||
import com.fr.general.IOUtils; |
||||
import com.fr.general.Inter; |
||||
import com.fr.general.SiteCenter; |
||||
import com.fr.general.http.HttpClient; |
||||
import com.fr.plugin.PluginVerifyException; |
||||
import com.fr.stable.StableUtils; |
||||
|
||||
import javax.swing.*; |
||||
import java.awt.*; |
||||
import java.io.File; |
||||
import java.net.HttpURLConnection; |
||||
import java.net.URL; |
||||
import java.util.concurrent.ExecutionException; |
||||
|
||||
/** |
||||
* Created by zhaohehe on 16/7/28. |
||||
*/ |
||||
public class QQLoginPane extends BasicPane { |
||||
private static final String LATEST = "latest"; |
||||
|
||||
public QQLoginPane() { |
||||
setLayout(new BorderLayout()); |
||||
if (StableUtils.getMajorJavaVersion() == 8) { |
||||
String installHome; |
||||
if (StableUtils.isDebug()) { |
||||
URL url = ClassLoader.getSystemResource(""); |
||||
installHome = url.getPath(); |
||||
addPane(installHome); |
||||
} else { |
||||
installHome = StableUtils.getInstallHome(); |
||||
File file = new File(StableUtils.pathJoin(installHome, "scripts")); |
||||
if (!file.exists()) { |
||||
int rv = JOptionPane.showConfirmDialog( |
||||
this, |
||||
Inter.getLocText("FR-Designer-Plugin_Shop_Need_Install"), |
||||
Inter.getLocText("FR-Designer-Plugin_Warning"), |
||||
JOptionPane.OK_CANCEL_OPTION, |
||||
JOptionPane.INFORMATION_MESSAGE |
||||
); |
||||
if (rv == JOptionPane.OK_OPTION) { |
||||
downloadShopScripts(); |
||||
} |
||||
} else { |
||||
addPane(installHome); |
||||
updateShopScripts(); |
||||
} |
||||
} |
||||
} else { |
||||
} |
||||
} |
||||
|
||||
private void addPane(String installHome) { |
||||
QQLoginWebPane webPane = new QQLoginWebPane(new File(installHome).getAbsolutePath()); |
||||
add(webPane, BorderLayout.CENTER); |
||||
} |
||||
|
||||
|
||||
@Override |
||||
protected String title4PopupWindow() { |
||||
return Inter.getLocText("FR-Designer-Plugin_Manager"); |
||||
} |
||||
|
||||
|
||||
private void downloadShopScripts() { |
||||
new SwingWorker<Boolean, Void>() { |
||||
@Override |
||||
protected Boolean doInBackground() throws Exception { |
||||
String id = "shop_scripts"; |
||||
String username = DesignerEnvManager.getEnvManager().getBBSName(); |
||||
String password = DesignerEnvManager.getEnvManager().getBBSPassword(); |
||||
try { |
||||
PluginHelper.downloadPluginFile(id, username, password, new Process<Double>() { |
||||
@Override |
||||
public void process(Double integer) { |
||||
} |
||||
}); |
||||
} catch (PluginVerifyException e) { |
||||
JOptionPane.showMessageDialog(QQLoginPane.this, e.getMessage(), Inter.getLocText("FR-Designer-Plugin_Warning"), JOptionPane.ERROR_MESSAGE); |
||||
return false; |
||||
} catch (Exception e) { |
||||
FRContext.getLogger().error(e.getMessage(), e); |
||||
return false; |
||||
} |
||||
return true; |
||||
} |
||||
|
||||
@Override |
||||
protected void done() { |
||||
|
||||
try { |
||||
if (get()) { |
||||
IOUtils.unzip(new File(StableUtils.pathJoin(PluginHelper.DOWNLOAD_PATH, PluginHelper.TEMP_FILE)), StableUtils.getInstallHome()); |
||||
int rv = JOptionPane.showOptionDialog( |
||||
QQLoginPane.this, |
||||
Inter.getLocText("FR-Designer-Plugin_Shop_Installed"), |
||||
Inter.getLocText("FR-Designer-Plugin_Warning"), |
||||
JOptionPane.YES_NO_OPTION, |
||||
JOptionPane.INFORMATION_MESSAGE, |
||||
null, |
||||
new String[]{Inter.getLocText("FR-Designer-Basic_Restart_Designer"), Inter.getLocText("FR-Designer-Basic_Restart_Designer_Later")}, |
||||
null |
||||
); |
||||
if (rv == JOptionPane.OK_OPTION) { |
||||
RestartHelper.restart(); |
||||
} |
||||
} |
||||
} catch (InterruptedException | ExecutionException e) { |
||||
FRContext.getLogger().error(e.getMessage(), e); |
||||
} |
||||
|
||||
} |
||||
}.execute(); |
||||
} |
||||
|
||||
private void updateShopScripts() { |
||||
new SwingWorker<Void, Void>() { |
||||
@Override |
||||
protected Void doInBackground() throws Exception { |
||||
HttpClient httpClient = new HttpClient(SiteCenter.getInstance().acquireUrlByKind("store.version") + "&version=" + PluginStoreConstants.VERSION); |
||||
if (httpClient.getResponseCode() == HttpURLConnection.HTTP_OK) { |
||||
if (!ComparatorUtils.equals(httpClient.getResponseText(), LATEST)) { |
||||
int rv = JOptionPane.showConfirmDialog( |
||||
QQLoginPane.this, |
||||
Inter.getLocText("FR-Designer-Plugin_Shop_Need_Update"), |
||||
Inter.getLocText("FR-Designer-Plugin_Warning"), |
||||
JOptionPane.OK_CANCEL_OPTION, |
||||
JOptionPane.INFORMATION_MESSAGE |
||||
); |
||||
if (rv == JOptionPane.OK_OPTION) { |
||||
downloadShopScripts(); |
||||
} |
||||
} |
||||
} |
||||
return null; |
||||
} |
||||
}.execute(); |
||||
} |
||||
} |
@ -1,131 +0,0 @@
|
||||
package com.fr.design.extra; |
||||
|
||||
import com.fr.design.DesignerEnvManager; |
||||
import com.fr.design.dialog.UIDialog; |
||||
import com.fr.design.gui.ilable.UILabel; |
||||
import com.fr.general.FRLogger; |
||||
import com.fr.general.SiteCenter; |
||||
import javafx.scene.web.WebEngine; |
||||
import org.json.JSONObject; |
||||
import netscape.javascript.JSObject; |
||||
|
||||
import javax.swing.*; |
||||
import java.awt.*; |
||||
import java.io.IOException; |
||||
import java.net.URI; |
||||
|
||||
/** |
||||
* Created by lp on 2016/8/10. |
||||
*/ |
||||
public class QQLoginWebBridge { |
||||
|
||||
private static com.fr.design.extra.QQLoginWebBridge helper; |
||||
private WebEngine webEngine; |
||||
private static String LOGINSUCCESS = "ok"; |
||||
private static String LOGINFAILED = "failed"; |
||||
private UIDialog uiDialog; |
||||
private UILabel uiLabel; |
||||
private UILabel pluginuiLabel; |
||||
private UIDialog qqDialog; |
||||
private String username; |
||||
|
||||
|
||||
private QQLoginWebBridge() { |
||||
} |
||||
|
||||
public static com.fr.design.extra.QQLoginWebBridge getHelper() { |
||||
if (helper != null) { |
||||
return helper; |
||||
} |
||||
synchronized (com.fr.design.extra.QQLoginWebBridge.class) { |
||||
if (helper == null) { |
||||
helper = new com.fr.design.extra.QQLoginWebBridge(); |
||||
} |
||||
return helper; |
||||
} |
||||
} |
||||
|
||||
public void setEngine(WebEngine webEngine) { |
||||
this.webEngine = webEngine; |
||||
} |
||||
|
||||
public void setDialogHandle(UIDialog uiDialog) { |
||||
this.uiDialog = uiDialog; |
||||
} |
||||
|
||||
public void setQQDialogHandle(UIDialog uiDialog) { |
||||
this.qqDialog = uiDialog; |
||||
} |
||||
|
||||
public void setUILabel(UILabel uiLabel) { |
||||
this.uiLabel = uiLabel; |
||||
} |
||||
|
||||
public void setUILabelInPlugin(UILabel uiLabel) { |
||||
this.pluginuiLabel = uiLabel; |
||||
} |
||||
|
||||
public void setLoginlabel() { |
||||
username = DesignerEnvManager.getEnvManager().getBBSName(); |
||||
} |
||||
|
||||
private static JSObject window; |
||||
|
||||
public static com.fr.design.extra.QQLoginWebBridge getHelper(WebEngine webEngine) { |
||||
getHelper(); |
||||
helper.setEngine(webEngine); |
||||
return helper; |
||||
} |
||||
|
||||
/** |
||||
* 关闭QQ授权窗口 |
||||
*/ |
||||
public void closeQQWindow() { |
||||
if (qqDialog != null) { |
||||
qqDialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); |
||||
qqDialog.setVisible(false); |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* 关闭父窗口 |
||||
*/ |
||||
public void closeParentWindow() { |
||||
if (uiDialog != null) { |
||||
uiDialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); |
||||
uiDialog.setVisible(false); |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* 获取用户信息 |
||||
* @param userInfo |
||||
*/ |
||||
public void getLoginInfo(String userInfo) { |
||||
JSONObject jo = new JSONObject(userInfo); |
||||
String status = jo.get("status").toString(); |
||||
if (status.equals(LOGINSUCCESS)) { |
||||
String username = jo.get("username").toString(); |
||||
int uid = Integer.parseInt(jo.get("uid") == null ? "" : jo.get("uid").toString()); |
||||
closeQQWindow(); |
||||
closeParentWindow(); |
||||
pluginuiLabel.setText(username); |
||||
DesignerEnvManager.getEnvManager().setBBSName(username); |
||||
DesignerEnvManager.getEnvManager().setBbsUid(uid); |
||||
DesignerEnvManager.getEnvManager().setInShowBBsName(username); |
||||
}else if (status.equals(LOGINFAILED)){ |
||||
//账号没有QQ授权
|
||||
closeQQWindow(); |
||||
try { |
||||
Desktop.getDesktop().browse(new URI(SiteCenter.getInstance().acquireUrlByKind("QQ_binding"))); |
||||
}catch (Exception exp) { |
||||
} |
||||
} |
||||
} |
||||
|
||||
public void openUrlAtLocalWebBrowser(WebEngine eng, String url) { |
||||
if (url.indexOf("qqLogin.html") > 0) { |
||||
return; |
||||
} |
||||
} |
||||
} |
@ -1,36 +0,0 @@
|
||||
package com.fr.design.extra; |
||||
|
||||
import javafx.scene.web.WebEngine; |
||||
|
||||
/** |
||||
* Created by vito on 2016/9/28. |
||||
*/ |
||||
public class ReuseWebBridge { |
||||
public static ReuseWebBridge helper; |
||||
private WebEngine webEngine; |
||||
|
||||
public static ReuseWebBridge getHelper() { |
||||
if (helper != null) { |
||||
return helper; |
||||
} |
||||
synchronized (ReuseWebBridge.class) { |
||||
if (helper == null) { |
||||
helper = new ReuseWebBridge(); |
||||
} |
||||
return helper; |
||||
} |
||||
} |
||||
|
||||
public static ReuseWebBridge getHelper(WebEngine webEngine) { |
||||
getHelper(); |
||||
helper.setEngine(webEngine); |
||||
return helper; |
||||
} |
||||
|
||||
private ReuseWebBridge() { |
||||
} |
||||
|
||||
public void setEngine(WebEngine webEngine) { |
||||
this.webEngine = webEngine; |
||||
} |
||||
} |
@ -1,54 +0,0 @@
|
||||
package com.fr.design.extra; |
||||
|
||||
import javafx.application.Platform; |
||||
import javafx.embed.swing.JFXPanel; |
||||
import javafx.event.EventHandler; |
||||
import javafx.scene.Scene; |
||||
import javafx.scene.layout.BorderPane; |
||||
import javafx.scene.web.WebEngine; |
||||
import javafx.scene.web.WebEvent; |
||||
import javafx.scene.web.WebView; |
||||
import netscape.javascript.JSObject; |
||||
|
||||
import javax.swing.*; |
||||
|
||||
/** |
||||
* Created by vito on 2016/9/28. |
||||
*/ |
||||
public class ReuseWebPane extends JFXPanel { |
||||
private WebEngine webEngine; |
||||
|
||||
public ReuseWebPane(final String mainJs) { |
||||
Platform.setImplicitExit(false); |
||||
Platform.runLater(new Runnable() { |
||||
@Override |
||||
public void run() { |
||||
BorderPane root = new BorderPane(); |
||||
Scene scene = new Scene(root); |
||||
ReuseWebPane.this.setScene(scene); |
||||
WebView webView = new WebView(); |
||||
webEngine = webView.getEngine(); |
||||
webEngine.load("file:///" + mainJs); |
||||
webEngine.setOnAlert(new EventHandler<WebEvent<String>>() { |
||||
@Override |
||||
public void handle(WebEvent<String> event) { |
||||
showAlert(event.getData()); |
||||
} |
||||
}); |
||||
JSObject obj = (JSObject) webEngine.executeScript("window"); |
||||
obj.setMember("ReuseHelper", ReuseWebBridge.getHelper(webEngine)); |
||||
webView.setContextMenuEnabled(false);//屏蔽右键
|
||||
root.setCenter(webView); |
||||
} |
||||
}); |
||||
} |
||||
|
||||
private void showAlert(final String message) { |
||||
SwingUtilities.invokeLater(new Runnable() { |
||||
@Override |
||||
public void run() { |
||||
JOptionPane.showMessageDialog(ReuseWebPane.this, message); |
||||
} |
||||
}); |
||||
} |
||||
} |
File diff suppressed because it is too large
Load Diff
@ -1,311 +1,300 @@
|
||||
package com.fr.design.gui.ilist; |
||||
|
||||
import java.awt.BorderLayout; |
||||
import java.awt.Component; |
||||
import java.awt.event.ActionEvent; |
||||
import java.awt.event.ActionListener; |
||||
import java.awt.event.KeyAdapter; |
||||
import java.awt.event.KeyEvent; |
||||
import java.awt.event.MouseAdapter; |
||||
import java.awt.event.MouseEvent; |
||||
import com.fr.design.gui.icheckbox.UICheckBox; |
||||
import com.fr.stable.StringUtils; |
||||
|
||||
import javax.swing.*; |
||||
import javax.swing.border.Border; |
||||
import javax.swing.border.EmptyBorder; |
||||
import java.awt.*; |
||||
import java.awt.event.*; |
||||
import java.util.ArrayList; |
||||
import java.util.Arrays; |
||||
import java.util.EventListener; |
||||
import java.util.List; |
||||
|
||||
import javax.swing.JComponent; |
||||
import javax.swing.JList; |
||||
import javax.swing.ListCellRenderer; |
||||
import javax.swing.ListModel; |
||||
import javax.swing.ListSelectionModel; |
||||
import javax.swing.UIManager; |
||||
import javax.swing.border.Border; |
||||
import javax.swing.border.EmptyBorder; |
||||
|
||||
import com.fr.design.gui.icheckbox.UICheckBox; |
||||
import com.fr.stable.StringUtils; |
||||
|
||||
/** |
||||
* CheckBoxs + JList. |
||||
*/ |
||||
public class CheckBoxList extends JComponent { |
||||
/** |
||||
* 选择状态----全选和全不选 |
||||
* |
||||
* @editor zhou |
||||
* @since 2012-4-1下午2:39:10 |
||||
*/ |
||||
public static enum SelectedState { |
||||
ALL, NONE |
||||
} |
||||
|
||||
private boolean[] selects; |
||||
private JList jlist; |
||||
private UICheckBox chooseAll; |
||||
|
||||
public CheckBoxList(Object[] items) { |
||||
this(items, SelectedState.NONE, StringUtils.EMPTY); |
||||
} |
||||
|
||||
public CheckBoxList(Object[] items, String name) { |
||||
this(items, SelectedState.NONE, name); |
||||
} |
||||
|
||||
/** |
||||
* Class constructor. |
||||
* |
||||
* @param items |
||||
* Items with which to populate the list. |
||||
* @param default_state |
||||
* default state, true or false |
||||
*/ |
||||
public CheckBoxList(Object[] items, SelectedState state, String name) { |
||||
jlist = new BOXLIST(items); |
||||
jlist.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); |
||||
this.selects = new boolean[items.length]; |
||||
boolean default_state = (state == SelectedState.ALL); |
||||
Arrays.fill(this.selects, default_state); |
||||
|
||||
jlist.setCellRenderer(new CheckListCellRenderer()); |
||||
jlist.addMouseListener(new MouseAdapter() { |
||||
public void mousePressed(MouseEvent e) { |
||||
doCheck(); |
||||
} |
||||
|
||||
public void mouseReleased(MouseEvent e) { |
||||
doCheck(); |
||||
} |
||||
}); |
||||
jlist.addKeyListener(new KeyAdapter() { |
||||
|
||||
@Override |
||||
public void keyTyped(KeyEvent e) { |
||||
if (e.getKeyChar() == ' ') { |
||||
doCheck(); |
||||
} |
||||
} |
||||
|
||||
}); |
||||
this.setLayout(new BorderLayout()); |
||||
chooseAll = new UICheckBox(name, default_state); |
||||
chooseAll.addActionListener(new ActionListener() { |
||||
|
||||
@Override |
||||
public void actionPerformed(ActionEvent e) { |
||||
if (chooseAll.isSelected()) { |
||||
setSelected(true); |
||||
} else { |
||||
setSelected(false); |
||||
} |
||||
} |
||||
}); |
||||
this.add(chooseAll, BorderLayout.NORTH); |
||||
this.add(jlist, BorderLayout.CENTER); |
||||
} |
||||
|
||||
/* |
||||
* 用于CellRenderer显示value为text |
||||
*/ |
||||
protected String value2Text(Object value) { |
||||
return value != null ? value.toString() : StringUtils.EMPTY; |
||||
} |
||||
|
||||
public void setItems(Object[] os) { |
||||
if (os == null) { |
||||
this.setSelected(false); |
||||
} else { |
||||
for (int i = 0, len = os.length; i < len; i++) { |
||||
Object o = os[i]; |
||||
for (int j = 0, jen = jlist.getModel().getSize(); j < jen; j++) { |
||||
if (o.equals(jlist.getModel().getElementAt(j))) { |
||||
this.setSelected(j, true); |
||||
} |
||||
} |
||||
} |
||||
} |
||||
this.repaint(); |
||||
} |
||||
|
||||
/** |
||||
* Is selected |
||||
*/ |
||||
public boolean isSelected(int index) { |
||||
if (selects == null || index >= selects.length) { |
||||
return false; |
||||
} |
||||
|
||||
return selects[index]; |
||||
} |
||||
|
||||
public void setSelected(int index, boolean isSelected) { |
||||
if (selects == null || index >= selects.length) { |
||||
return; |
||||
} |
||||
|
||||
selects[index] = isSelected; |
||||
this.repaint(this.getBounds()); |
||||
|
||||
this.fireCheckBoxListSelectionChangeListener(); |
||||
} |
||||
|
||||
private void setSelected(boolean isSelected) { |
||||
if (selects == null) { |
||||
return; |
||||
} |
||||
for (int i = 0; i < selects.length; i++) { |
||||
selects[i] = isSelected; |
||||
} |
||||
this.repaint(this.getBounds()); |
||||
|
||||
this.fireCheckBoxListSelectionChangeListener(); |
||||
} |
||||
|
||||
/** |
||||
* Returns an array of the objects that have been selected. Overrides the |
||||
* JList method. |
||||
*/ |
||||
public Object[] getSelectedValues() { |
||||
return this.jlist.getSelectedValues(); |
||||
} |
||||
|
||||
private class BOXLIST extends JList { |
||||
public BOXLIST(Object[] items) { |
||||
super(items); |
||||
} |
||||
|
||||
@Override |
||||
protected void processMouseEvent(MouseEvent e) { |
||||
if (e.getX() < 20) { |
||||
if (e.isControlDown() || e.isAltDown() || e.isShiftDown() || e.isMetaDown()) { |
||||
int[] indices = getSelectedIndices(); |
||||
if (indices.length == 0) { |
||||
super.processMouseEvent(e); |
||||
} |
||||
} else { |
||||
super.processMouseEvent(e); |
||||
} |
||||
} else { |
||||
super.processMouseEvent(e); |
||||
} |
||||
int id = e.getID(); |
||||
switch (id) { |
||||
case MouseEvent.MOUSE_PRESSED: |
||||
break; |
||||
case MouseEvent.MOUSE_RELEASED: |
||||
break; |
||||
case MouseEvent.MOUSE_CLICKED: |
||||
doCheck(); |
||||
break; |
||||
case MouseEvent.MOUSE_EXITED: |
||||
break; |
||||
case MouseEvent.MOUSE_ENTERED: |
||||
break; |
||||
} |
||||
} |
||||
|
||||
@Override |
||||
protected void processMouseMotionEvent(MouseEvent e) { |
||||
if (e.getX() < 20) { |
||||
return; |
||||
} |
||||
|
||||
super.processMouseEvent(e); |
||||
} |
||||
|
||||
@Override |
||||
public Object[] getSelectedValues() { |
||||
List<Object> list = new ArrayList<Object>(selects.length); |
||||
for (int i = 0; i < selects.length; i++) { |
||||
if (selects[i]) { |
||||
list.add(this.getModel().getElementAt(i)); |
||||
} |
||||
} |
||||
|
||||
return list.toArray(); |
||||
} |
||||
|
||||
} |
||||
|
||||
private void doCheck() { |
||||
// p:这里必须改变所有选择checkbox.
|
||||
int index = jlist.getSelectedIndex(); |
||||
boolean sValue = !selects[index]; |
||||
|
||||
// p:开始设置所有选择的checkbox.
|
||||
int[] indices = jlist.getSelectedIndices(); |
||||
for (int i = 0; i < indices.length; i++) { |
||||
setSelected(indices[i], sValue); |
||||
} |
||||
for (boolean selected : selects) { |
||||
if (!selected) { |
||||
chooseAll.setSelected(false); |
||||
return; |
||||
} |
||||
} |
||||
chooseAll.setSelected(true); |
||||
repaint(); |
||||
} |
||||
|
||||
private static final Border noFocusBorder = new EmptyBorder(1, 1, 1, 1); |
||||
|
||||
private class CheckListCellRenderer extends UICheckBox implements ListCellRenderer { |
||||
|
||||
public CheckListCellRenderer() { |
||||
this.setOpaque(true); |
||||
this.setBorder(noFocusBorder); |
||||
} |
||||
|
||||
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { |
||||
this.setText(value2Text(value)); |
||||
this.setSelected(selects[index]); |
||||
this.setFont(list.getFont()); |
||||
|
||||
if (isSelected) { |
||||
this.setBackground(list.getSelectionBackground()); |
||||
this.setForeground(list.getSelectionForeground()); |
||||
} else { |
||||
this.setBackground(list.getBackground()); |
||||
this.setForeground(list.getForeground()); |
||||
} |
||||
|
||||
if (cellHasFocus) { |
||||
this.setBorder(UIManager.getBorder("List.focusCellHighlightBorder")); |
||||
} else { |
||||
this.setBorder(noFocusBorder); |
||||
} |
||||
|
||||
return this; |
||||
} |
||||
} |
||||
|
||||
public void addCheckBoxListSelectionChangeListener(CheckBoxListSelectionChangeListener l) { |
||||
this.listenerList.add(CheckBoxListSelectionChangeListener.class, l); |
||||
} |
||||
|
||||
public void removeCheckBoxListSelectionChangeListener(CheckBoxListSelectionChangeListener l) { |
||||
this.listenerList.remove(CheckBoxListSelectionChangeListener.class, l); |
||||
} |
||||
|
||||
public void fireCheckBoxListSelectionChangeListener() { |
||||
// Guaranteed to return a non-null array
|
||||
Object[] listeners = listenerList.getListenerList(); |
||||
|
||||
// Process the listeners last to first, notifying
|
||||
// those that are interested in this event
|
||||
for (int i = listeners.length - 2; i >= 0; i -= 2) { |
||||
if (listeners[i] == CheckBoxListSelectionChangeListener.class) { |
||||
((CheckBoxListSelectionChangeListener)listeners[i + 1]).selectionChanged(this); |
||||
} |
||||
} |
||||
|
||||
} |
||||
|
||||
public static interface CheckBoxListSelectionChangeListener extends EventListener { |
||||
public void selectionChanged(CheckBoxList target); |
||||
} |
||||
|
||||
public ListModel getModel() { |
||||
return jlist.getModel(); |
||||
} |
||||
private final static int X_COORDINATE = 20; |
||||
|
||||
/** |
||||
* 选择状态----全选和全不选 |
||||
* |
||||
* @editor zhou |
||||
* @since 2012-4-1下午2:39:10 |
||||
*/ |
||||
public static enum SelectedState { |
||||
ALL, NONE |
||||
} |
||||
|
||||
private boolean[] selects; |
||||
private JList jlist; |
||||
private UICheckBox chooseAll; |
||||
|
||||
public CheckBoxList(Object[] items) { |
||||
this(items, SelectedState.NONE, StringUtils.EMPTY); |
||||
} |
||||
|
||||
public CheckBoxList(Object[] items, String name) { |
||||
this(items, SelectedState.NONE, name); |
||||
} |
||||
|
||||
/** |
||||
* Class constructor. |
||||
* |
||||
* @param items Items with which to populate the list. |
||||
* @param state default state, true or false |
||||
*/ |
||||
public CheckBoxList(Object[] items, SelectedState state, String name) { |
||||
jlist = new BOXLIST(items); |
||||
jlist.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); |
||||
this.selects = new boolean[items.length]; |
||||
boolean default_state = (state == SelectedState.ALL); |
||||
Arrays.fill(this.selects, default_state); |
||||
|
||||
jlist.setCellRenderer(new CheckListCellRenderer()); |
||||
jlist.addMouseListener(new MouseAdapter() { |
||||
public void mousePressed(MouseEvent e) { |
||||
doCheck(); |
||||
} |
||||
|
||||
public void mouseReleased(MouseEvent e) { |
||||
doCheck(); |
||||
} |
||||
}); |
||||
jlist.addKeyListener(new KeyAdapter() { |
||||
|
||||
@Override |
||||
public void keyTyped(KeyEvent e) { |
||||
if (e.getKeyChar() == ' ') { |
||||
doCheck(); |
||||
} |
||||
} |
||||
|
||||
}); |
||||
this.setLayout(new BorderLayout()); |
||||
chooseAll = new UICheckBox(name, default_state); |
||||
chooseAll.addActionListener(new ActionListener() { |
||||
|
||||
@Override |
||||
public void actionPerformed(ActionEvent e) { |
||||
if (chooseAll.isSelected()) { |
||||
setSelected(true); |
||||
} else { |
||||
setSelected(false); |
||||
} |
||||
} |
||||
}); |
||||
this.add(chooseAll, BorderLayout.NORTH); |
||||
this.add(jlist, BorderLayout.CENTER); |
||||
} |
||||
|
||||
/* |
||||
* 用于CellRenderer显示value为text |
||||
*/ |
||||
protected String value2Text(Object value) { |
||||
return value != null ? value.toString() : StringUtils.EMPTY; |
||||
} |
||||
|
||||
public void setItems(Object[] os) { |
||||
if (os == null) { |
||||
this.setSelected(false); |
||||
} else { |
||||
for (int i = 0, len = os.length; i < len; i++) { |
||||
Object o = os[i]; |
||||
for (int j = 0, jen = jlist.getModel().getSize(); j < jen; j++) { |
||||
if (o.equals(jlist.getModel().getElementAt(j))) { |
||||
this.setSelected(j, true); |
||||
} |
||||
} |
||||
} |
||||
} |
||||
this.repaint(); |
||||
} |
||||
|
||||
/** |
||||
* Is selected |
||||
*/ |
||||
public boolean isSelected(int index) { |
||||
if (selects == null || index >= selects.length) { |
||||
return false; |
||||
} |
||||
|
||||
return selects[index]; |
||||
} |
||||
|
||||
public void setSelected(int index, boolean isSelected) { |
||||
if (selects == null || index >= selects.length) { |
||||
return; |
||||
} |
||||
|
||||
selects[index] = isSelected; |
||||
this.repaint(this.getBounds()); |
||||
|
||||
this.fireCheckBoxListSelectionChangeListener(); |
||||
} |
||||
|
||||
private void setSelected(boolean isSelected) { |
||||
if (selects == null) { |
||||
return; |
||||
} |
||||
for (int i = 0; i < selects.length; i++) { |
||||
selects[i] = isSelected; |
||||
} |
||||
this.repaint(this.getBounds()); |
||||
|
||||
this.fireCheckBoxListSelectionChangeListener(); |
||||
} |
||||
|
||||
/** |
||||
* Returns an array of the objects that have been selected. Overrides the |
||||
* JList method. |
||||
*/ |
||||
public Object[] getSelectedValues() { |
||||
return this.jlist.getSelectedValues(); |
||||
} |
||||
|
||||
private class BOXLIST extends JList { |
||||
public BOXLIST(Object[] items) { |
||||
super(items); |
||||
} |
||||
|
||||
@Override |
||||
protected void processMouseEvent(MouseEvent e) { |
||||
if (e.getX() < X_COORDINATE) { |
||||
boolean anyMaskDown = e.isControlDown() || e.isAltDown() || e.isShiftDown() || e.isMetaDown(); |
||||
if (anyMaskDown) { |
||||
int[] indices = getSelectedIndices(); |
||||
if (indices.length == 0) { |
||||
super.processMouseEvent(e); |
||||
} |
||||
} else { |
||||
super.processMouseEvent(e); |
||||
} |
||||
} else { |
||||
super.processMouseEvent(e); |
||||
} |
||||
int id = e.getID(); |
||||
switch (id) { |
||||
case MouseEvent.MOUSE_PRESSED: |
||||
break; |
||||
case MouseEvent.MOUSE_RELEASED: |
||||
break; |
||||
case MouseEvent.MOUSE_CLICKED: |
||||
doCheck(); |
||||
break; |
||||
case MouseEvent.MOUSE_EXITED: |
||||
break; |
||||
case MouseEvent.MOUSE_ENTERED: |
||||
break; |
||||
} |
||||
} |
||||
|
||||
@Override |
||||
protected void processMouseMotionEvent(MouseEvent e) { |
||||
if (e.getX() < X_COORDINATE) { |
||||
return; |
||||
} |
||||
|
||||
super.processMouseEvent(e); |
||||
} |
||||
|
||||
@Override |
||||
public Object[] getSelectedValues() { |
||||
List<Object> list = new ArrayList<Object>(selects.length); |
||||
for (int i = 0; i < selects.length; i++) { |
||||
if (selects[i]) { |
||||
list.add(this.getModel().getElementAt(i)); |
||||
} |
||||
} |
||||
|
||||
return list.toArray(); |
||||
} |
||||
|
||||
} |
||||
|
||||
private void doCheck() { |
||||
// p:这里必须改变所有选择checkbox.
|
||||
int index = jlist.getSelectedIndex(); |
||||
boolean sValue = !selects[index]; |
||||
|
||||
// p:开始设置所有选择的checkbox.
|
||||
int[] indices = jlist.getSelectedIndices(); |
||||
for (int i = 0; i < indices.length; i++) { |
||||
setSelected(indices[i], sValue); |
||||
} |
||||
for (boolean selected : selects) { |
||||
if (!selected) { |
||||
chooseAll.setSelected(false); |
||||
return; |
||||
} |
||||
} |
||||
chooseAll.setSelected(true); |
||||
repaint(); |
||||
} |
||||
|
||||
private static final Border NO_FOCUS_BORDER = new EmptyBorder(1, 1, 1, 1); |
||||
|
||||
private class CheckListCellRenderer extends UICheckBox implements ListCellRenderer { |
||||
|
||||
public CheckListCellRenderer() { |
||||
this.setOpaque(true); |
||||
this.setBorder(NO_FOCUS_BORDER); |
||||
} |
||||
|
||||
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { |
||||
this.setText(value2Text(value)); |
||||
this.setSelected(selects[index]); |
||||
this.setFont(list.getFont()); |
||||
|
||||
if (isSelected) { |
||||
this.setBackground(list.getSelectionBackground()); |
||||
this.setForeground(list.getSelectionForeground()); |
||||
} else { |
||||
this.setBackground(list.getBackground()); |
||||
this.setForeground(list.getForeground()); |
||||
} |
||||
|
||||
if (cellHasFocus) { |
||||
this.setBorder(UIManager.getBorder("List.focusCellHighlightBorder")); |
||||
} else { |
||||
this.setBorder(NO_FOCUS_BORDER); |
||||
} |
||||
|
||||
return this; |
||||
} |
||||
} |
||||
|
||||
public void addCheckBoxListSelectionChangeListener(CheckBoxListSelectionChangeListener l) { |
||||
this.listenerList.add(CheckBoxListSelectionChangeListener.class, l); |
||||
} |
||||
|
||||
public void removeCheckBoxListSelectionChangeListener(CheckBoxListSelectionChangeListener l) { |
||||
this.listenerList.remove(CheckBoxListSelectionChangeListener.class, l); |
||||
} |
||||
|
||||
public void fireCheckBoxListSelectionChangeListener() { |
||||
// Guaranteed to return a non-null array
|
||||
Object[] listeners = listenerList.getListenerList(); |
||||
|
||||
// Process the listeners last to first, notifying
|
||||
// those that are interested in this event
|
||||
for (int i = listeners.length - 2; i >= 0; i -= 2) { |
||||
if (listeners[i] == CheckBoxListSelectionChangeListener.class) { |
||||
((CheckBoxListSelectionChangeListener) listeners[i + 1]).selectionChanged(this); |
||||
} |
||||
} |
||||
|
||||
} |
||||
|
||||
public static interface CheckBoxListSelectionChangeListener extends EventListener { |
||||
public void selectionChanged(CheckBoxList target); |
||||
} |
||||
|
||||
public ListModel getModel() { |
||||
return jlist.getModel(); |
||||
} |
||||
|
||||
} |
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
@ -1,188 +0,0 @@
|
||||
package com.fr.design; |
||||
|
||||
import com.fr.base.FRContext; |
||||
import com.fr.base.Utils; |
||||
import com.fr.general.ComparatorUtils; |
||||
import com.fr.general.DateUtils; |
||||
import com.fr.general.IOUtils; |
||||
import com.fr.stable.ProductConstants; |
||||
import com.fr.stable.StableUtils; |
||||
import com.fr.stable.StringUtils; |
||||
import com.fr.stable.project.ProjectConstants; |
||||
import com.fr.stable.xml.*; |
||||
|
||||
import java.io.*; |
||||
import java.util.Date; |
||||
|
||||
/** |
||||
* Created by IntelliJ IDEA. |
||||
* Author : daisy |
||||
* Version: 7.1.1 |
||||
*/ |
||||
public class ChartEnvManager implements XMLReadable, XMLWriter { |
||||
public static final String ACTIVE_KEY = "RXWY-A25421-K58F47757-7373"; |
||||
private static final int ONE_MONTH_SECOND = 30*24*60*60;//30天,以秒为单位
|
||||
private static final int MS =1000; |
||||
|
||||
boolean isPushUpdateAuto = true; //是否自动推送更新
|
||||
|
||||
private String activationKey = null; |
||||
|
||||
private static ChartEnvManager chartEnvManager; |
||||
|
||||
private Date lastCheckDate; |
||||
|
||||
private long checkTimeSpan =ONE_MONTH_SECOND; |
||||
|
||||
/** |
||||
* DesignerEnvManager. |
||||
*/ |
||||
public static ChartEnvManager getEnvManager() { |
||||
if(chartEnvManager == null){ |
||||
chartEnvManager = new ChartEnvManager(); |
||||
try { |
||||
XMLTools.readFileXML(chartEnvManager, chartEnvManager.getDesignerEnvFile()); |
||||
}catch (Exception exp){ |
||||
FRContext.getLogger().error(exp.getMessage(), exp); |
||||
} |
||||
} |
||||
return chartEnvManager; |
||||
} |
||||
|
||||
private static File envFile = new File(ProductConstants.getEnvHome() + File.separator + ProductConstants.APP_NAME + "ChartEnv.xml"); |
||||
|
||||
private File getEnvFile() { |
||||
return envFile; |
||||
} |
||||
|
||||
|
||||
private File getDesignerEnvFile() { |
||||
File envFile = getEnvFile(); |
||||
if (!envFile.exists()) { |
||||
createEnvFile(envFile); |
||||
} |
||||
|
||||
return envFile; |
||||
} |
||||
|
||||
|
||||
private void createEnvFile(File envFile) { |
||||
try { |
||||
FileWriter fileWriter = new FileWriter(envFile); |
||||
StringReader stringReader = new StringReader("<?xml version=\"1.0\" encoding=\"UTF-8\" ?><Env></Env>"); |
||||
Utils.copyCharTo(stringReader, fileWriter); |
||||
stringReader.close(); |
||||
fileWriter.close(); |
||||
} catch (IOException e) { |
||||
FRContext.getLogger().error(e.getMessage(), e); |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* 返回激活码 |
||||
*/ |
||||
public String getActivationKey() { |
||||
return activationKey; |
||||
} |
||||
|
||||
/** |
||||
* 设置激活码 |
||||
*/ |
||||
public void setActivationKey(String activationKey) { |
||||
this.activationKey = activationKey; |
||||
} |
||||
|
||||
public void setPushUpdateAuto(boolean isPushUpdateAuto){ |
||||
this.isPushUpdateAuto = isPushUpdateAuto; |
||||
if(!this.isPushUpdateAuto){ |
||||
lastCheckDate = new Date(); |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* 是否设置了自动推送图表设计器在线更行 |
||||
* @return 是则返回true |
||||
*/ |
||||
public boolean isPushUpdateAuto(){ |
||||
return isPushUpdateAuto; |
||||
} |
||||
|
||||
/** |
||||
*在设置不自动推送在线更新的情况下,每30天自动检测一次 |
||||
* @return 是否需要检测 |
||||
*/ |
||||
public boolean isOverOneMonth(){ |
||||
return !isPushUpdateAuto && ((new Date().getTime()-lastCheckDate.getTime())/MS>=checkTimeSpan); |
||||
} |
||||
|
||||
/*** |
||||
* 重新设置最新检查的日期 |
||||
*/ |
||||
public void resetCheckDate(){ |
||||
this.lastCheckDate = new Date(); |
||||
} |
||||
|
||||
@Override |
||||
public void readXML(XMLableReader reader) { |
||||
if (reader.isChildNode()) { |
||||
String name = reader.getTagName(); |
||||
if(ComparatorUtils.equals(name,"ChartAttributes")){ |
||||
activationKey = reader.getAttrAsString("activationKey",null); |
||||
isPushUpdateAuto = reader.getAttrAsBoolean("isPushUpdateAuto",true); |
||||
checkTimeSpan = reader.getAttrAsLong("checkTimeSpan",ONE_MONTH_SECOND); |
||||
String date = reader.getAttrAsString("lastCheckDate", null); |
||||
if(!StringUtils.isEmpty(date)){ |
||||
lastCheckDate = DateUtils.string2Date(date,true); |
||||
} else { |
||||
lastCheckDate = new Date(); |
||||
} |
||||
} |
||||
} |
||||
|
||||
} |
||||
|
||||
@Override |
||||
public void writeXML(XMLPrintWriter writer) { |
||||
writer.startTAG("ChartDesigner"); |
||||
writer.startTAG("ChartAttributes").attr("activationKey",activationKey) |
||||
.attr("isPushUpdateAuto",isPushUpdateAuto) |
||||
.attr("checkTimeSpan",checkTimeSpan) |
||||
.attr("lastCheckDate", DateUtils.getDate2LStr(lastCheckDate)) |
||||
.end(); |
||||
writer.end(); |
||||
} |
||||
|
||||
/** |
||||
* 保存设计器的配置文件, 该文件不在env的resource目录下 |
||||
* 而是在Consts.getEnvHome() + File.separator + Consts.APP_NAME |
||||
* |
||||
* |
||||
* @date 2014-9-29-上午11:04:23 |
||||
*/ |
||||
public void saveXMLFile() { |
||||
File xmlFile = this.getDesignerEnvFile(); |
||||
if (xmlFile == null) { |
||||
return; |
||||
} |
||||
if (!xmlFile.getParentFile().exists()) {//建立目录.
|
||||
StableUtils.mkdirs(xmlFile.getParentFile()); |
||||
} |
||||
|
||||
String tempName = xmlFile.getName() + ProjectConstants.TEMP_SUFFIX; |
||||
File tempFile = new File(xmlFile.getParentFile(), tempName); |
||||
|
||||
writeTempFile(tempFile); |
||||
IOUtils.renameTo(tempFile, xmlFile); |
||||
} |
||||
|
||||
private void writeTempFile(File tempFile){ |
||||
try{ |
||||
OutputStream fout = new FileOutputStream(tempFile); |
||||
XMLTools.writeOutputStreamXML(this, fout); |
||||
fout.flush(); |
||||
fout.close(); |
||||
}catch (Exception e) { |
||||
FRContext.getLogger().error(e.getMessage()); |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,103 @@
|
||||
package com.fr.design.chart.fun.impl; |
||||
|
||||
import com.fr.chart.chartattr.Plot; |
||||
import com.fr.design.beans.BasicBeanPane; |
||||
import com.fr.design.chart.fun.IndependentChartUIProvider; |
||||
import com.fr.design.condition.ConditionAttributesPane; |
||||
import com.fr.design.gui.frpane.AttributeChangeListener; |
||||
import com.fr.design.mainframe.chart.AbstractChartAttrPane; |
||||
import com.fr.design.mainframe.chart.ChartEditPane; |
||||
import com.fr.design.mainframe.chart.ChartsEditPane; |
||||
import com.fr.design.mainframe.chart.gui.ChartDataPane; |
||||
import com.fr.design.mainframe.chart.gui.ChartStylePane; |
||||
import com.fr.design.mainframe.chart.gui.data.report.AbstractReportDataContentPane; |
||||
import com.fr.design.mainframe.chart.gui.data.report.CategoryPlotReportDataContentPane; |
||||
import com.fr.design.mainframe.chart.gui.data.table.AbstractTableDataContentPane; |
||||
import com.fr.design.mainframe.chart.gui.data.table.CategoryPlotTableDataContentPane; |
||||
import com.fr.design.mainframe.chart.gui.type.AbstractChartTypePane; |
||||
import com.fr.design.mainframe.chart.gui.type.PiePlotPane; |
||||
import com.fr.general.ComparatorUtils; |
||||
import com.fr.stable.fun.impl.AbstractProvider; |
||||
import com.fr.stable.fun.mark.API; |
||||
|
||||
/** |
||||
* Created by mengao on 2017/4/24. |
||||
* 用户使用第三方图表需要继承的面板抽象类 |
||||
*/ |
||||
|
||||
@API(level = IndependentChartUIProvider.CURRENT_API_LEVEL) |
||||
public abstract class AbstractIndependentChartsUI extends AbstractProvider implements IndependentChartUIProvider { |
||||
|
||||
public String mark4Provider() { |
||||
return getClass().getName(); |
||||
} |
||||
|
||||
|
||||
@Override |
||||
public AbstractChartTypePane getPlotTypePane() { |
||||
return new PiePlotPane(); |
||||
} |
||||
|
||||
@Override |
||||
public ChartDataPane getChartDataPane(AttributeChangeListener listener) { |
||||
return new ChartDataPane(listener); |
||||
} |
||||
|
||||
@Override |
||||
public AbstractTableDataContentPane getTableDataSourcePane(Plot plot, ChartDataPane parent) { |
||||
return new CategoryPlotTableDataContentPane(parent); |
||||
} |
||||
|
||||
@Override |
||||
public AbstractReportDataContentPane getReportDataSourcePane(Plot plot, ChartDataPane parent) { |
||||
return new CategoryPlotReportDataContentPane(parent); |
||||
} |
||||
|
||||
public BasicBeanPane<Plot> getPlotSeriesPane(ChartStylePane parent, Plot plot){ |
||||
return null; |
||||
} |
||||
|
||||
public BasicBeanPane<Plot> getPlotSeriesPane(){ |
||||
return null; |
||||
} |
||||
|
||||
public boolean equals(Object obj) { |
||||
return obj != null && ComparatorUtils.equals(obj.getClass(), this.getClass()); |
||||
} |
||||
|
||||
public ConditionAttributesPane getPlotConditionPane(Plot plot){ |
||||
return null; |
||||
} |
||||
|
||||
@Override |
||||
public AbstractChartAttrPane[] getAttrPaneArray(AttributeChangeListener listener){ |
||||
return new AbstractChartAttrPane[]{}; |
||||
} |
||||
|
||||
@Override |
||||
public boolean isUseDefaultPane(){ |
||||
return false; |
||||
} |
||||
|
||||
|
||||
@Override |
||||
public String getIconPath() { |
||||
return "com/fr/design/images/form/toolbar/ChartF-Column.png"; |
||||
} |
||||
|
||||
@Override |
||||
|
||||
/** |
||||
* plot面板的标题 |
||||
* 插件兼容 |
||||
*/ |
||||
public String getPlotTypeTitle4PopupWindow(){ |
||||
return getPlotTypePane().title4PopupWindow(); |
||||
} |
||||
|
||||
@Override |
||||
public ChartEditPane getChartEditPane(String plotID) { |
||||
return new ChartsEditPane(); |
||||
} |
||||
|
||||
} |
@ -1,69 +0,0 @@
|
||||
package com.fr.design.chart.report; |
||||
|
||||
import com.fr.base.TableData; |
||||
import com.fr.base.chart.chartdata.TopDefinitionProvider; |
||||
import com.fr.chart.chartattr.Chart; |
||||
import com.fr.chart.chartattr.ChartCollection; |
||||
import com.fr.chart.chartdata.*; |
||||
import com.fr.design.gui.frpane.AttributeChangeListener; |
||||
import com.fr.design.mainframe.AbstractChartDataPane4Chart; |
||||
import com.fr.design.mainframe.chart.gui.ChartDataPane; |
||||
|
||||
import javax.swing.*; |
||||
|
||||
/** |
||||
* Created by IntelliJ IDEA. |
||||
* Author : daisy |
||||
* Version: 7.1.1 |
||||
*/ |
||||
public class GisMapDataPane4Chart extends AbstractChartDataPane4Chart { |
||||
|
||||
private GisMapTableDataContentPane4Chart tablePane = new GisMapTableDataContentPane4Chart(); |
||||
|
||||
public GisMapDataPane4Chart(AttributeChangeListener listener, ChartDataPane parent) { |
||||
super(listener, parent); |
||||
} |
||||
|
||||
protected JPanel getDataContentPane() { |
||||
return tablePane; |
||||
} |
||||
|
||||
@Override |
||||
public void populate(ChartCollection collection) { |
||||
tablePane = new GisMapTableDataContentPane4Chart(); |
||||
if (collection != null && collection.getSelectedChart() != null) { |
||||
Chart chart = collection.getSelectedChart(); |
||||
TopDefinitionProvider definition = chart.getFilterDefinition(); |
||||
if (definition instanceof TableDataDefinition) { |
||||
TableData tableData = ((TableDataDefinition) definition).getTableData(); |
||||
if (tableData != null) { |
||||
populateChoosePane(tableData); |
||||
fireTableDataChange(); |
||||
} |
||||
} |
||||
if (definition instanceof GisMapTableDefinition) { |
||||
tablePane.populateBean((GisMapTableDefinition) definition); |
||||
} |
||||
} |
||||
this.remove(leftContentPane); |
||||
this.initContentPane(); |
||||
this.validate(); |
||||
dataSource.addItemListener(dsListener); |
||||
initAllListeners(); |
||||
initSelfListener(tablePane); |
||||
this.addAttributeChangeListener(attributeChangeListener); |
||||
} |
||||
|
||||
@Override |
||||
public void update(ChartCollection collection) { |
||||
collection.getSelectedChart().setFilterDefinition(tablePane.updateBean()); |
||||
} |
||||
|
||||
|
||||
/** |
||||
* 数据集数据改变 |
||||
*/ |
||||
public void fireTableDataChange() { |
||||
tablePane.fireTableDataChange(choosePane.getTableDataWrapper()); |
||||
} |
||||
} |
@ -1,341 +0,0 @@
|
||||
package com.fr.design.chart.report; |
||||
|
||||
import com.fr.base.Utils; |
||||
import com.fr.chart.base.ChartConstants; |
||||
import com.fr.chart.chartdata.GisMapTableDefinition; |
||||
import com.fr.chart.chartdata.SeriesDefinition; |
||||
import com.fr.design.beans.FurtherBasicBeanPane; |
||||
import com.fr.design.constants.LayoutConstants; |
||||
import com.fr.design.data.tabledata.wrapper.TableDataWrapper; |
||||
import com.fr.design.event.UIObserver; |
||||
import com.fr.design.event.UIObserverListener; |
||||
import com.fr.design.gui.frpane.UICorrelationPane; |
||||
import com.fr.design.gui.ibutton.UIButtonGroup; |
||||
import com.fr.design.gui.icombobox.UIComboBox; |
||||
import com.fr.design.gui.ilable.UILabel; |
||||
import com.fr.design.gui.itable.UITableEditor; |
||||
import com.fr.design.gui.itextfield.UITextField; |
||||
import com.fr.design.layout.TableLayout; |
||||
import com.fr.design.layout.TableLayoutHelper; |
||||
import com.fr.general.Inter; |
||||
import com.fr.stable.ArrayUtils; |
||||
import com.fr.stable.StringUtils; |
||||
|
||||
import javax.swing.*; |
||||
import javax.swing.event.ChangeEvent; |
||||
import javax.swing.event.ChangeListener; |
||||
import java.awt.*; |
||||
import java.awt.event.FocusAdapter; |
||||
import java.awt.event.FocusEvent; |
||||
import java.awt.event.ItemEvent; |
||||
import java.awt.event.ItemListener; |
||||
import java.util.*; |
||||
|
||||
/** |
||||
* Created by IntelliJ IDEA. |
||||
* Author : daisy |
||||
* Version: 7.1.1 |
||||
*/ |
||||
public class GisMapTableDataContentPane4Chart extends FurtherBasicBeanPane<GisMapTableDefinition> implements UIObserver { |
||||
|
||||
private ArrayList<ChangeListener> changeListeners = new ArrayList<ChangeListener>(); |
||||
private String[] initNames = {""}; |
||||
|
||||
private UIButtonGroup<String> addressType; |
||||
private UIButtonGroup<String> lnglatOrder; |
||||
private UIComboBox addressBox; |
||||
private UIComboBox addressNameBox; |
||||
private UICorrelationPane titleValuePane; |
||||
private JPanel orderPane; |
||||
private TableDataWrapper tableDataWrapper; |
||||
|
||||
public GisMapTableDataContentPane4Chart() { |
||||
this.setLayout(new BorderLayout()); |
||||
|
||||
addressType = new UIButtonGroup<String>(new String[]{Inter.getLocText("Chart-Gis_Address"), Inter.getLocText("Chart-Gis_LatLng")}); |
||||
lnglatOrder = new UIButtonGroup<String>(new String[]{Inter.getLocText("Chart-Lng_First"), Inter.getLocText("Chart-Lat_First")}); |
||||
addressBox = new UIComboBox(); |
||||
addressNameBox = new UIComboBox(); |
||||
double p = TableLayout.PREFERRED; |
||||
double f = TableLayout.FILL; |
||||
double[] columnSize = new double[]{p, f}; |
||||
double[] rowSize = new double[]{p, p, p}; |
||||
orderPane = new JPanel(new BorderLayout(LayoutConstants.VGAP_MEDIUM, 0)) { |
||||
@Override |
||||
public Dimension getPreferredSize() { |
||||
if (this.isVisible()) { |
||||
return super.getPreferredSize(); |
||||
} else { |
||||
return new Dimension(0, 0); |
||||
} |
||||
} |
||||
}; |
||||
orderPane.add(new UILabel(Inter.getLocText("Chart-LatLng_Order")), BorderLayout.WEST); |
||||
orderPane.add(lnglatOrder, BorderLayout.CENTER); |
||||
orderPane.setVisible(false); |
||||
lnglatOrder.setSelectedIndex(0); |
||||
addressType.setSelectedIndex(0); |
||||
|
||||
addressNameBox.removeAllItems(); |
||||
addressNameBox.addItem(Inter.getLocText("Chart-Use_None")); |
||||
|
||||
Component[][] components = new Component[][]{ |
||||
new Component[]{addressType, addressBox}, |
||||
new Component[]{orderPane, null}, |
||||
new Component[]{new UILabel(Inter.getLocText("Chart-Address_Name") + ":", SwingConstants.RIGHT), addressNameBox}, |
||||
}; |
||||
JPanel centerPane = TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize); |
||||
|
||||
JPanel pane = new JPanel(); |
||||
this.add(pane, BorderLayout.CENTER); |
||||
pane.setLayout(new BorderLayout()); |
||||
|
||||
pane.add(centerPane, BorderLayout.NORTH); |
||||
|
||||
String[] titles = {Inter.getLocText("Chart-Area_Title"), Inter.getLocText("Chart-Area_Value")}; |
||||
titleValuePane = new UICorrelationPane(titles) { |
||||
public UITableEditor createUITableEditor() { |
||||
return new InnerTableEditor(); |
||||
} |
||||
}; |
||||
|
||||
pane.add(titleValuePane, BorderLayout.CENTER); |
||||
} |
||||
|
||||
private void refresh2ComboBox() {// 刷新地址 地址名 名称列表
|
||||
TableDataWrapper tableDataWrappe =tableDataWrapper; |
||||
if (tableDataWrappe == null) { |
||||
return; |
||||
} |
||||
java.util.List<String> columnNameList = tableDataWrappe.calculateColumnNameList(); |
||||
initNames = columnNameList.toArray(new String[columnNameList.size()]); |
||||
|
||||
addressBox.removeAllItems(); |
||||
addressNameBox.removeAllItems(); |
||||
addressNameBox.addItem(Inter.getLocText("Chart-Use_None")); |
||||
|
||||
for (int i = 0, size = initNames.length; i < size; i++) { |
||||
addressBox.addItem(initNames[i]); |
||||
addressNameBox.addItem(initNames[i]); |
||||
} |
||||
if(initNames.length > 0){ |
||||
addressBox.setSelectedIndex(0); |
||||
} |
||||
addressNameBox.setSelectedIndex(0); |
||||
stopEditing(); |
||||
} |
||||
|
||||
/** |
||||
* 界面接入 |
||||
* |
||||
* @param ob 对象 |
||||
* @return true表示接受 |
||||
*/ |
||||
public boolean accept(Object ob) { |
||||
return false; |
||||
} |
||||
|
||||
/** |
||||
* 界面重置 |
||||
*/ |
||||
public void reset() { |
||||
|
||||
} |
||||
|
||||
/** |
||||
* 界面弹出标题 |
||||
* |
||||
* @return 标题 |
||||
*/ |
||||
public String title4PopupWindow() { |
||||
return Inter.getLocText("Chart-DS_TableData"); |
||||
} |
||||
|
||||
private void stopEditing() { |
||||
} |
||||
|
||||
@Override |
||||
public void populateBean(GisMapTableDefinition ob) { |
||||
stopEditing(); |
||||
if (ob instanceof GisMapTableDefinition) { |
||||
GisMapTableDefinition mapDefinition = (GisMapTableDefinition) ob; |
||||
if (ob.isAddress()) { |
||||
addressType.setSelectedIndex(0); |
||||
orderPane.setVisible(false); |
||||
} else { |
||||
addressType.setSelectedIndex(1); |
||||
orderPane.setVisible(true); |
||||
} |
||||
|
||||
if (ob.isLngFirst()) { |
||||
lnglatOrder.setSelectedIndex(0); |
||||
} else { |
||||
lnglatOrder.setSelectedIndex(1); |
||||
} |
||||
|
||||
addressBox.setSelectedItem(mapDefinition.getAddress()); |
||||
|
||||
if (StringUtils.isEmpty(mapDefinition.getAddressName())) { |
||||
addressNameBox.setSelectedItem(Inter.getLocText("Chart-Use_None")); |
||||
} else { |
||||
addressNameBox.setSelectedItem(mapDefinition.getAddressName()); |
||||
} |
||||
|
||||
java.util.List paneList = new ArrayList(); |
||||
int titleValueSize = mapDefinition.getTittleValueSize(); |
||||
for (int i = 0; i < titleValueSize; i++) { |
||||
SeriesDefinition definition = mapDefinition.getTittleValueWithIndex(i); |
||||
if (definition != null && definition.getSeriesName() != null && definition.getValue() != null) { |
||||
paneList.add(new Object[]{definition.getSeriesName(), definition.getValue()}); |
||||
} |
||||
} |
||||
|
||||
if (!paneList.isEmpty()) { |
||||
titleValuePane.populateBean(paneList); |
||||
} |
||||
} |
||||
} |
||||
|
||||
@Override |
||||
public GisMapTableDefinition updateBean() {// 从一行内容中update
|
||||
stopEditing(); |
||||
|
||||
GisMapTableDefinition definition = new GisMapTableDefinition(); |
||||
|
||||
TableDataWrapper tableDataWrappe = tableDataWrapper; |
||||
if (tableDataWrappe == null || addressBox.getSelectedItem() == null) { |
||||
return null; |
||||
} |
||||
|
||||
definition.setTableData(tableDataWrapper.getTableData()); |
||||
definition.setAddress(Utils.objectToString(addressBox.getSelectedItem())); |
||||
|
||||
if (this.addressType.getSelectedIndex() == 0) { |
||||
definition.setAddressType(true); |
||||
lnglatOrder.setVisible(false); |
||||
} else { |
||||
definition.setAddressType(false); |
||||
lnglatOrder.setVisible(true); |
||||
} |
||||
|
||||
if (this.lnglatOrder.getSelectedIndex() == 0) { |
||||
definition.setLnglatOrder(true); |
||||
} else { |
||||
definition.setLnglatOrder(false); |
||||
} |
||||
|
||||
if (addressNameBox.getSelectedItem() != null) { |
||||
String adName = Utils.objectToString(addressNameBox.getSelectedItem()); |
||||
if (ArrayUtils.contains(ChartConstants.getNoneKeys(), adName)) { |
||||
definition.setAddressName(StringUtils.EMPTY); |
||||
} else { |
||||
definition.setAddressName(adName); |
||||
} |
||||
} |
||||
|
||||
java.util.List paneList = titleValuePane.updateBean(); |
||||
for (int i = 0, size = paneList.size(); i < size; i++) { |
||||
Object[] values = (Object[]) paneList.get(i); |
||||
if (values.length == 2) { |
||||
SeriesDefinition seriesDefinition = new SeriesDefinition(); |
||||
seriesDefinition.setSeriesName(values[0]); |
||||
seriesDefinition.setValue(values[1]); |
||||
definition.addTittleValue(seriesDefinition); |
||||
} |
||||
} |
||||
|
||||
return definition; |
||||
} |
||||
|
||||
/** |
||||
* 给组件登记一个观察者监听事件 |
||||
* |
||||
* @param listener 观察者监听事件 |
||||
*/ |
||||
public void registerChangeListener(final UIObserverListener listener) { |
||||
changeListeners.add(new ChangeListener() { |
||||
public void stateChanged(ChangeEvent e) { |
||||
listener.doChange(); |
||||
} |
||||
}); |
||||
} |
||||
|
||||
/** |
||||
* 组件是否需要响应添加的观察者事件 |
||||
* |
||||
* @return 如果需要响应观察者事件则返回true,否则返回false |
||||
*/ |
||||
public boolean shouldResponseChangeListener() { |
||||
return true; |
||||
} |
||||
|
||||
private class InnerTableEditor extends UITableEditor { |
||||
private JComponent editorComponent; |
||||
|
||||
/** |
||||
* 返回当前编辑器的值 |
||||
*/ |
||||
public Object getCellEditorValue() { |
||||
if (editorComponent instanceof UITextField) { |
||||
UITextField textField = (UITextField) editorComponent; |
||||
return textField.getText(); |
||||
} else if (editorComponent instanceof UIComboBox) { |
||||
UIComboBox boxPane = (UIComboBox) editorComponent; |
||||
return boxPane.getSelectedItem(); |
||||
} |
||||
return super.getCellEditorValue(); |
||||
} |
||||
|
||||
/** |
||||
* 返回当前编辑器.. |
||||
*/ |
||||
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { |
||||
if (column == table.getModel().getColumnCount()) { |
||||
return null; |
||||
} |
||||
if (column == 0) { |
||||
UITextField text = new UITextField(); |
||||
if (value != null) { |
||||
text.setText(Utils.objectToString(value)); |
||||
} |
||||
|
||||
text.addFocusListener(new FocusAdapter() { |
||||
public void focusLost(FocusEvent e) { |
||||
titleValuePane.stopCellEditing(); |
||||
titleValuePane.fireTargetChanged(); |
||||
} |
||||
}); |
||||
|
||||
this.editorComponent = text; |
||||
} else { |
||||
UIComboBox box = new UIComboBox(initNames); |
||||
box.addItemListener(new ItemListener() { |
||||
@Override |
||||
public void itemStateChanged(ItemEvent e) { |
||||
titleValuePane.fireTargetChanged(); |
||||
titleValuePane.stopCellEditing(); |
||||
} |
||||
}); |
||||
|
||||
if (value != null && StringUtils.isNotEmpty(value.toString())) { |
||||
box.setSelectedItem(value); |
||||
} else { |
||||
box.setSelectedItem(value); |
||||
} |
||||
|
||||
this.editorComponent = box; |
||||
} |
||||
return this.editorComponent; |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* 出发数据集改变 |
||||
* @param wrapper 数据集 |
||||
*/ |
||||
public void fireTableDataChange(TableDataWrapper wrapper){ |
||||
this.tableDataWrapper = wrapper; |
||||
refresh2ComboBox(); |
||||
} |
||||
|
||||
} |
@ -1,68 +0,0 @@
|
||||
package com.fr.design.chart.report; |
||||
|
||||
import com.fr.base.chart.chartdata.TopDefinitionProvider; |
||||
import com.fr.chart.chartdata.MapMoreLayerTableDefinition; |
||||
import com.fr.design.beans.FurtherBasicBeanPane; |
||||
import com.fr.design.data.tabledata.wrapper.TableDataWrapper; |
||||
import com.fr.design.gui.frpane.UIComboBoxPane; |
||||
import com.fr.general.Inter; |
||||
|
||||
import java.awt.*; |
||||
import java.util.*; |
||||
import java.util.List; |
||||
|
||||
/** |
||||
* Created by IntelliJ IDEA. |
||||
* Author : daisy |
||||
* Version: 7.1.1 |
||||
*/ |
||||
public class MapCubeDataPane4Chart extends UIComboBoxPane<TopDefinitionProvider> { |
||||
private MapTableCubeDataPane4Chart tablePane; |
||||
|
||||
protected void initLayout() { |
||||
this.setLayout(new BorderLayout(0, 0)); |
||||
this.add(cardPane, BorderLayout.CENTER); |
||||
} |
||||
|
||||
@Override |
||||
protected List<FurtherBasicBeanPane<? extends TopDefinitionProvider>> initPaneList() { |
||||
List list = new ArrayList(); |
||||
|
||||
list.add(tablePane = new MapTableCubeDataPane4Chart()); |
||||
|
||||
return list; |
||||
} |
||||
|
||||
@Override |
||||
protected String title4PopupWindow() { |
||||
return Inter.getLocText("FR-Chart-Map_LayerData"); |
||||
} |
||||
|
||||
/** |
||||
* 对数据集或者单元格数据加载界面 |
||||
*/ |
||||
public void populateBean(TopDefinitionProvider definition) { |
||||
if(definition instanceof MapMoreLayerTableDefinition) { |
||||
MapMoreLayerTableDefinition tableDefinition = (MapMoreLayerTableDefinition)definition; |
||||
this.setSelectedIndex(0); |
||||
tablePane.populateBean(tableDefinition); |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* 根据界面 下载保存数据 |
||||
*/ |
||||
public TopDefinitionProvider update() { |
||||
return tablePane.updateBean(); |
||||
} |
||||
|
||||
/** |
||||
* 出发数据集改变 |
||||
* @param tableDataWrapper 数据集 |
||||
*/ |
||||
public void fireTableDataChanged(TableDataWrapper tableDataWrapper) { |
||||
tablePane.setTableDataWrapper(tableDataWrapper); |
||||
tablePane.refreshAreaNameBox(); |
||||
} |
||||
|
||||
} |
@ -1,133 +0,0 @@
|
||||
package com.fr.design.chart.report; |
||||
|
||||
import com.fr.base.TableData; |
||||
import com.fr.base.chart.chartdata.TopDefinitionProvider; |
||||
import com.fr.chart.chartattr.Chart; |
||||
import com.fr.chart.chartattr.ChartCollection; |
||||
import com.fr.chart.chartdata.*; |
||||
import com.fr.design.beans.FurtherBasicBeanPane; |
||||
import com.fr.design.gui.frpane.AttributeChangeListener; |
||||
import com.fr.design.gui.frpane.UIComboBoxPane; |
||||
import com.fr.design.gui.ilable.BoldFontTextLabel; |
||||
import com.fr.design.mainframe.AbstractChartDataPane4Chart; |
||||
import com.fr.design.mainframe.chart.gui.ChartDataPane; |
||||
import com.fr.general.Inter; |
||||
|
||||
import javax.swing.*; |
||||
import java.awt.*; |
||||
import java.awt.event.ItemEvent; |
||||
import java.awt.event.ItemListener; |
||||
import java.util.*; |
||||
|
||||
/** |
||||
* Created by IntelliJ IDEA. |
||||
* Author : daisy |
||||
* Version: 7.1.1 |
||||
* Date: 14/12/3 |
||||
* Time: 下午6:49 |
||||
*/ |
||||
public class MapDataPane4Chart extends AbstractChartDataPane4Chart { |
||||
private UIComboBoxPane dataContentPane; |
||||
private MapMoreCubeLayerPane4Chart morePane = new MapMoreCubeLayerPane4Chart(); |
||||
private MapSinglePane4Chart singlePane = new MapSinglePane4Chart(); |
||||
private ChartCollection currentCollection; |
||||
private ItemListener itemListener = new ItemListener() { |
||||
@Override |
||||
public void itemStateChanged(ItemEvent e) { |
||||
fireTableDataChange(); |
||||
} |
||||
}; |
||||
|
||||
public MapDataPane4Chart(AttributeChangeListener listener, ChartDataPane parent) { |
||||
super(listener, parent); |
||||
dataContentPane = new UIComboBoxPane<Chart>() { |
||||
protected void initLayout() { |
||||
this.setLayout(new BorderLayout(0, 6)); |
||||
JPanel northPane = new JPanel(new FlowLayout(FlowLayout.LEFT)); |
||||
northPane.add(new BoldFontTextLabel(Inter.getLocText("FR-Chart-Map_ShowWay") + ":")); |
||||
northPane.add(jcb); |
||||
this.add(northPane, BorderLayout.NORTH); |
||||
this.add(cardPane, BorderLayout.CENTER); |
||||
} |
||||
protected java.util.List<FurtherBasicBeanPane<? extends Chart>> initPaneList() { |
||||
java.util.List list = new ArrayList(); |
||||
list.add(singlePane); |
||||
list.add(morePane); |
||||
return list; |
||||
} |
||||
|
||||
protected void comboBoxItemStateChanged() { |
||||
if(currentCollection == null){ |
||||
return; |
||||
} |
||||
fireTableDataChange(); |
||||
morePane.init4PopuMapTree(currentCollection); |
||||
} |
||||
|
||||
|
||||
protected String title4PopupWindow() { |
||||
return Inter.getLocText(new String[]{"Chart-Map", "Data"}); |
||||
} |
||||
}; |
||||
} |
||||
|
||||
|
||||
protected JPanel getDataContentPane(){ |
||||
return dataContentPane; |
||||
} |
||||
|
||||
@Override |
||||
public void populate(ChartCollection collection) { |
||||
currentCollection = collection; |
||||
morePane.init4PopuMapTree(collection); |
||||
if (collection != null && collection.getSelectedChart() != null) { |
||||
Chart chart = collection.getSelectedChart(); |
||||
TopDefinitionProvider definition = chart.getFilterDefinition(); |
||||
if (definition instanceof TableDataDefinition) { |
||||
TableData tableData = ((TableDataDefinition) definition).getTableData(); |
||||
if(tableData != null){ |
||||
populateChoosePane(tableData); |
||||
fireTableDataChange(); |
||||
} |
||||
} |
||||
if(definition instanceof MapSingleLayerTableDefinition) { |
||||
singlePane.populateBean(definition); |
||||
} else if(definition instanceof MapMoreLayerTableDefinition) { |
||||
morePane.populateBean(collection); |
||||
} |
||||
} |
||||
this.remove(leftContentPane); |
||||
this.initContentPane(); |
||||
this.validate(); |
||||
dataSource.addItemListener(dsListener); |
||||
initAllListeners(); |
||||
initSelfListener(dataContentPane); |
||||
this.addAttributeChangeListener(attributeChangeListener); |
||||
} |
||||
|
||||
@Override |
||||
public void update(ChartCollection collection) { |
||||
if(dataContentPane.getSelectedIndex() == 0) { |
||||
collection.getSelectedChart().setFilterDefinition(singlePane.updateBean()); |
||||
} else { |
||||
morePane.updateBean(collection); |
||||
} |
||||
currentCollection = collection; |
||||
} |
||||
|
||||
/** |
||||
* 数据集数据改变 |
||||
*/ |
||||
public void fireTableDataChange() { |
||||
if (dataContentPane == null) { |
||||
return; |
||||
} |
||||
if(dataContentPane.getSelectedIndex() == 0) { |
||||
singlePane.fireTableDataChanged(choosePane.getTableDataWrapper()); |
||||
} else { |
||||
morePane.fireTableDataChanged(choosePane.getTableDataWrapper()); |
||||
} |
||||
|
||||
} |
||||
|
||||
} |
@ -1,113 +0,0 @@
|
||||
package com.fr.design.chart.report; |
||||
|
||||
import com.fr.chart.chartattr.Chart; |
||||
import com.fr.chart.chartattr.ChartCollection; |
||||
import com.fr.chart.chartattr.MapPlot; |
||||
import com.fr.design.data.tabledata.wrapper.TableDataWrapper; |
||||
import com.fr.design.dialog.BasicPane; |
||||
import com.fr.design.dialog.MultiTabPane; |
||||
import com.fr.general.Inter; |
||||
|
||||
import java.util.ArrayList; |
||||
import java.util.List; |
||||
|
||||
/** |
||||
* Created by IntelliJ IDEA. |
||||
* Author : daisy |
||||
* Version: 7.1.1 |
||||
*/ |
||||
public class MapMoreCubeLayerPane4Chart extends MultiTabPane<ChartCollection> { |
||||
private static final long serialVersionUID = -174286187746442527L; |
||||
|
||||
private MapCubeLayerPane layerPane; |
||||
private MapCubeDataPane4Chart dataPane; |
||||
|
||||
@Override |
||||
protected List<BasicPane> initPaneList() { |
||||
List<BasicPane> paneList = new ArrayList<BasicPane>(); |
||||
|
||||
paneList.add(layerPane = new MapCubeLayerPane()); |
||||
paneList.add(dataPane = new MapCubeDataPane4Chart()); |
||||
|
||||
return paneList; |
||||
} |
||||
|
||||
public ChartCollection updateBean() { |
||||
return null;// do nothing
|
||||
} |
||||
|
||||
public void populateBean(ChartCollection collection) { |
||||
Chart selectChart = collection.getSelectedChart(); |
||||
if(selectChart != null && selectChart.getPlot() instanceof MapPlot) { |
||||
MapPlot map = (MapPlot)selectChart.getPlot(); |
||||
layerPane.populateBean(map.getMapName()); |
||||
} |
||||
|
||||
// 确认层级关系
|
||||
dataPane.populateBean(collection.getSelectedChart().getFilterDefinition()); |
||||
} |
||||
|
||||
public void updateBean(ChartCollection collection) { |
||||
|
||||
collection.getSelectedChart().setFilterDefinition(dataPane.update()); |
||||
|
||||
Chart selectChart = collection.getSelectedChart(); |
||||
if(selectChart != null && selectChart.getPlot() instanceof MapPlot) { |
||||
MapPlot map = (MapPlot)selectChart.getPlot(); |
||||
layerPane.updateBean(map.getMapName());// 确定更新地图名称所对应的层级关系
|
||||
} |
||||
} |
||||
|
||||
/** |
||||
* 刷新层级树 和 数据中populate 数据的层数 |
||||
* @param collection 图表收集器. |
||||
*/ |
||||
public void init4PopuMapTree(ChartCollection collection) { |
||||
Chart selectChart = collection.getSelectedChart(); |
||||
if(selectChart != null && selectChart.getPlot() instanceof MapPlot) { |
||||
MapPlot map = (MapPlot)selectChart.getPlot(); |
||||
if(layerPane != null) { |
||||
layerPane.initRootTree(map.getMapName()); |
||||
} |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* 判断是否合格 |
||||
* @param ob 参数判断 |
||||
* @return 默认合格. |
||||
*/ |
||||
public boolean accept(Object ob) { |
||||
return true; |
||||
} |
||||
|
||||
/** |
||||
* 界面标题 |
||||
* @return 返回标题 |
||||
*/ |
||||
public String title4PopupWindow() { |
||||
return Inter.getLocText("FR-Chart-Map_Multilayer"); |
||||
} |
||||
|
||||
/** |
||||
* 重置 |
||||
*/ |
||||
public void reset() { |
||||
|
||||
} |
||||
|
||||
/** |
||||
* 设置是否支持单元格数据. |
||||
*/ |
||||
public void setSurpportCellData(boolean surpportCellData) { |
||||
dataPane.justSupportOneSelect(surpportCellData); |
||||
} |
||||
|
||||
/** |
||||
* 出发数据集改变 |
||||
* @param tableDataWrapper 数据集 |
||||
*/ |
||||
public void fireTableDataChanged(TableDataWrapper tableDataWrapper) { |
||||
dataPane.fireTableDataChanged(tableDataWrapper); |
||||
} |
||||
} |
@ -1,79 +0,0 @@
|
||||
package com.fr.design.chart.report; |
||||
|
||||
import com.fr.base.chart.chartdata.TopDefinitionProvider; |
||||
import com.fr.chart.chartdata.MapSingleLayerTableDefinition; |
||||
import com.fr.chart.chartdata.TopDefinition; |
||||
import com.fr.design.beans.FurtherBasicBeanPane; |
||||
import com.fr.design.data.tabledata.wrapper.TableDataWrapper; |
||||
import com.fr.general.Inter; |
||||
|
||||
import java.awt.*; |
||||
|
||||
/** |
||||
* Created by IntelliJ IDEA. |
||||
* Author : daisy |
||||
* Version: 7.1.1 |
||||
*/ |
||||
public class MapSinglePane4Chart extends FurtherBasicBeanPane<TopDefinitionProvider> { |
||||
|
||||
private MapTableDataSinglePane4Chart tableSinglePane; |
||||
|
||||
public MapSinglePane4Chart() { |
||||
initCom(); |
||||
} |
||||
|
||||
private void initCom() { |
||||
this.setLayout(new BorderLayout()); |
||||
|
||||
this.add(tableSinglePane = new MapTableDataSinglePane4Chart(), BorderLayout.CENTER); |
||||
} |
||||
|
||||
/** |
||||
* 判断准许的情况 |
||||
* @param ob 数据集 |
||||
* @return 是不是顶层数据 |
||||
*/ |
||||
public boolean accept(Object ob) { |
||||
return ob instanceof TopDefinition; |
||||
} |
||||
|
||||
/** |
||||
* 重置 |
||||
*/ |
||||
public void reset() { |
||||
|
||||
} |
||||
|
||||
/** |
||||
*界面标题 |
||||
* @return 界面标题 |
||||
*/ |
||||
public String title4PopupWindow() { |
||||
return Inter.getLocText(new String[]{"SingleLayer", "Chart-Map"}); |
||||
} |
||||
|
||||
/** |
||||
* 加载单层地图时的 数据来源界面 |
||||
*/ |
||||
public void populateBean(TopDefinitionProvider ob) { |
||||
if(ob instanceof MapSingleLayerTableDefinition) { |
||||
tableSinglePane.populateBean((MapSingleLayerTableDefinition)ob); |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* 保存下载 单层数据界面 |
||||
*/ |
||||
public TopDefinitionProvider updateBean() { |
||||
return tableSinglePane.updateBean(); |
||||
} |
||||
|
||||
/** |
||||
* 出发数据集改变 |
||||
* @param tableDataWrapper 数据集 |
||||
*/ |
||||
public void fireTableDataChanged(TableDataWrapper tableDataWrapper) { |
||||
tableSinglePane.setTableDataWrapper(tableDataWrapper); |
||||
tableSinglePane.refreshAreaNameBox(); |
||||
} |
||||
} |
@ -1,93 +0,0 @@
|
||||
package com.fr.design.chart.report; |
||||
|
||||
import com.fr.chart.chartdata.MapMoreLayerTableDefinition; |
||||
import com.fr.chart.chartdata.MapSingleLayerTableDefinition; |
||||
import com.fr.design.beans.FurtherBasicBeanPane; |
||||
import com.fr.design.data.tabledata.wrapper.TableDataWrapper; |
||||
import com.fr.general.Inter; |
||||
|
||||
import java.awt.*; |
||||
|
||||
/** |
||||
* Created by IntelliJ IDEA. |
||||
* Author : daisy |
||||
* Version: 7.1.1 |
||||
*/ |
||||
public class MapTableCubeDataPane4Chart extends FurtherBasicBeanPane<MapMoreLayerTableDefinition> { |
||||
|
||||
private MapMoreTableIndexPane tablePane; |
||||
private TableDataWrapper tableDataWrapper; |
||||
|
||||
public MapTableCubeDataPane4Chart() { |
||||
this.setLayout(new BorderLayout()); |
||||
tablePane = new MapMoreTableIndexPane(); |
||||
this.add(tablePane, BorderLayout.CENTER); |
||||
} |
||||
|
||||
/** |
||||
* 刷新区域名称列表 |
||||
*/ |
||||
public void refreshAreaNameBox() { |
||||
TableDataWrapper tableDataWrappe = tableDataWrapper; |
||||
if (tableDataWrappe == null) { |
||||
return; |
||||
} |
||||
|
||||
java.util.List<String> columnNameList = tableDataWrappe.calculateColumnNameList(); |
||||
tablePane.initAreaComBox(columnNameList.toArray(new String[columnNameList.size()])); |
||||
} |
||||
|
||||
public void setTableDataWrapper(TableDataWrapper wrapper){ |
||||
this.tableDataWrapper = wrapper; |
||||
} |
||||
|
||||
/** |
||||
* 界面接入 |
||||
* @param ob 界面 |
||||
* @return 返回接入. |
||||
*/ |
||||
public boolean accept(Object ob) { |
||||
return true; |
||||
} |
||||
|
||||
/** |
||||
* 重置 |
||||
*/ |
||||
public void reset() { |
||||
} |
||||
|
||||
/** |
||||
* 界面弹出标题 |
||||
* @return 返回标题. |
||||
*/ |
||||
public String title4PopupWindow() { |
||||
return Inter.getLocText("FR-Chart-Table_Data"); |
||||
} |
||||
|
||||
@Override |
||||
public void populateBean(MapMoreLayerTableDefinition tableDefinition) { |
||||
|
||||
if (tableDefinition != null) { |
||||
MapSingleLayerTableDefinition[] values = tableDefinition.getNameValues(); |
||||
if(values != null && values.length > 0) { |
||||
tablePane.populateBean(values[0]); |
||||
} |
||||
} |
||||
} |
||||
|
||||
@Override |
||||
public MapMoreLayerTableDefinition updateBean() { |
||||
MapMoreLayerTableDefinition tableDefinition = new MapMoreLayerTableDefinition(); |
||||
|
||||
TableDataWrapper tableDataWrappe =tableDataWrapper; |
||||
if (tableDataWrappe != null) { |
||||
tableDefinition.setTableData(tableDataWrappe.getTableData()); |
||||
|
||||
tableDefinition.clearNameValues(); |
||||
tableDefinition.addNameValue(tablePane.updateBean()); |
||||
} |
||||
|
||||
return tableDefinition; |
||||
} |
||||
|
||||
} |
@ -1,268 +0,0 @@
|
||||
package com.fr.design.chart.report; |
||||
|
||||
import com.fr.base.Utils; |
||||
import com.fr.chart.chartdata.MapSingleLayerTableDefinition; |
||||
import com.fr.chart.chartdata.SeriesDefinition; |
||||
import com.fr.design.beans.FurtherBasicBeanPane; |
||||
import com.fr.design.data.tabledata.wrapper.TableDataWrapper; |
||||
import com.fr.design.event.UIObserver; |
||||
import com.fr.design.event.UIObserverListener; |
||||
import com.fr.design.gui.frpane.UICorrelationPane; |
||||
import com.fr.design.gui.icombobox.UIComboBox; |
||||
import com.fr.design.gui.ilable.BoldFontTextLabel; |
||||
import com.fr.design.gui.ilable.UILabel; |
||||
import com.fr.design.gui.itable.UITableEditor; |
||||
import com.fr.design.gui.itextfield.UITextField; |
||||
import com.fr.design.layout.TableLayout; |
||||
import com.fr.design.layout.TableLayoutHelper; |
||||
import com.fr.general.Inter; |
||||
import com.fr.stable.StringUtils; |
||||
|
||||
import javax.swing.*; |
||||
import javax.swing.event.ChangeEvent; |
||||
import javax.swing.event.ChangeListener; |
||||
import java.awt.*; |
||||
import java.awt.event.ItemEvent; |
||||
import java.awt.event.ItemListener; |
||||
import java.util.*; |
||||
|
||||
/** |
||||
* Created by IntelliJ IDEA. |
||||
* Author : daisy |
||||
* Version: 7.1.1 |
||||
*/ |
||||
public class MapTableDataSinglePane4Chart extends FurtherBasicBeanPane<MapSingleLayerTableDefinition> implements UIObserver { |
||||
|
||||
private static final int LABEL_WIDTH_GAP = 5; |
||||
private static final int COM_HEIGHT = 20; |
||||
private ArrayList<ChangeListener> changeListeners = new ArrayList<ChangeListener>(); |
||||
private String[] initNames = {""}; |
||||
|
||||
private UIComboBox areaNameBox; |
||||
private UICorrelationPane titleValuePane; |
||||
private TableDataWrapper tableDataWrapper; |
||||
|
||||
public MapTableDataSinglePane4Chart() { |
||||
this.setLayout(new BorderLayout()); |
||||
JPanel pane = new JPanel(); |
||||
this.add(pane, BorderLayout.CENTER); |
||||
pane.setLayout(new BorderLayout()); |
||||
|
||||
pane.add(getAreaNamePane(), BorderLayout.NORTH); |
||||
|
||||
String[] titles = {Inter.getLocText("FR-Chart-Area_Title"), Inter.getLocText("FR-Chart-Area_Value")}; |
||||
titleValuePane = new UICorrelationPane(titles){ |
||||
public UITableEditor createUITableEditor() { |
||||
return new InnerTableEditor(); |
||||
} |
||||
}; |
||||
|
||||
pane.add(titleValuePane, BorderLayout.CENTER); |
||||
} |
||||
|
||||
|
||||
private JPanel getAreaNamePane(){ |
||||
final UILabel label = new BoldFontTextLabel(Inter.getLocText("FR-Chart-Map_ShowWay") + ":"); |
||||
UILabel nameLabel = new UILabel(Inter.getLocText("FR-Chart-Area_Name") + ":", SwingConstants.RIGHT){ |
||||
public Dimension getPreferredSize() { |
||||
return new Dimension(label.getPreferredSize().width+LABEL_WIDTH_GAP,COM_HEIGHT); |
||||
} |
||||
}; |
||||
areaNameBox = new UIComboBox(); |
||||
areaNameBox.setPreferredSize(new Dimension(80, 20)); |
||||
double p =TableLayout.PREFERRED; |
||||
double f = TableLayout.FILL; |
||||
double[] columnSize = {p, f}; |
||||
double[] rowSize = {p}; |
||||
Component[][] components = new Component[][]{ |
||||
new Component[]{nameLabel, areaNameBox}, |
||||
}; |
||||
return TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize); |
||||
} |
||||
/** |
||||
*刷新区域名称列表 |
||||
*/ |
||||
public void refreshAreaNameBox() {// 刷新区域名称列表
|
||||
TableDataWrapper tableDataWrappe = tableDataWrapper; |
||||
if (tableDataWrappe == null) { |
||||
return; |
||||
} |
||||
java.util.List<String> columnNameList = tableDataWrappe.calculateColumnNameList(); |
||||
initNames = columnNameList.toArray(new String[columnNameList.size()]); |
||||
|
||||
Object oldSelected = areaNameBox.getSelectedItem(); |
||||
areaNameBox.removeAllItems(); |
||||
for(int i = 0, size = initNames.length; i < size; i++) { |
||||
areaNameBox.addItem(initNames[i]); |
||||
} |
||||
areaNameBox.getModel().setSelectedItem(oldSelected); |
||||
stopEditing(); |
||||
} |
||||
|
||||
|
||||
/** |
||||
* 是否接受数据集 |
||||
* @param ob 具体变量 |
||||
* @return 不是 |
||||
*/ |
||||
public boolean accept(Object ob) { |
||||
return false; |
||||
} |
||||
|
||||
/** |
||||
* 界面重置 |
||||
*/ |
||||
public void reset() { |
||||
|
||||
} |
||||
|
||||
/** |
||||
* 界面弹出标题 |
||||
* @return 标题 |
||||
*/ |
||||
public String title4PopupWindow() { |
||||
return Inter.getLocText("FR-Chart-Table_Data"); |
||||
} |
||||
|
||||
private void stopEditing() { |
||||
} |
||||
|
||||
@Override |
||||
public void populateBean(MapSingleLayerTableDefinition ob) { |
||||
stopEditing(); |
||||
if (ob instanceof MapSingleLayerTableDefinition) { |
||||
MapSingleLayerTableDefinition mapDefinition = (MapSingleLayerTableDefinition) ob; |
||||
|
||||
// fromTableData.populateBean(((NameTableData) mapDefinition.getTableData()));
|
||||
areaNameBox.setSelectedItem(mapDefinition.getAreaName()); |
||||
|
||||
java.util.List paneList = new ArrayList(); |
||||
int titleValueSize = mapDefinition.getTitleValueSize(); |
||||
for(int i = 0; i < titleValueSize; i++) { |
||||
SeriesDefinition definition = mapDefinition.getTitleValueWithIndex(i); |
||||
if(definition != null && definition.getSeriesName() != null && definition.getValue() != null) { |
||||
paneList.add(new Object[]{definition.getSeriesName(), definition.getValue()}); |
||||
} |
||||
} |
||||
|
||||
if(!paneList.isEmpty()) { |
||||
titleValuePane.populateBean(paneList); |
||||
} |
||||
} |
||||
} |
||||
|
||||
@Override |
||||
public MapSingleLayerTableDefinition updateBean() {// 从一行内容中update
|
||||
stopEditing(); |
||||
|
||||
MapSingleLayerTableDefinition definition = new MapSingleLayerTableDefinition(); |
||||
|
||||
TableDataWrapper tableDataWrappe = tableDataWrapper; |
||||
// = fromTableData.getTableDataWrapper();
|
||||
if (tableDataWrappe == null || areaNameBox.getSelectedItem() == null) { |
||||
return null; |
||||
} |
||||
|
||||
definition.setTableData(tableDataWrapper.getTableData()); |
||||
definition.setAreaName(Utils.objectToString(areaNameBox.getSelectedItem())); |
||||
|
||||
java.util.List paneList = titleValuePane.updateBean(); |
||||
for(int i = 0, size = paneList.size(); i < size; i++) { |
||||
Object[] values = (Object[])paneList.get(i); |
||||
if(values.length == 2) { |
||||
SeriesDefinition seriesDefinition = new SeriesDefinition(); |
||||
seriesDefinition.setSeriesName(values[0]); |
||||
seriesDefinition.setValue(values[1]); |
||||
definition.addTitleValue(seriesDefinition); |
||||
} |
||||
} |
||||
|
||||
return definition; |
||||
} |
||||
|
||||
/** |
||||
* 给组件登记一个观察者监听事件 |
||||
* |
||||
* @param listener 观察者监听事件 |
||||
*/ |
||||
public void registerChangeListener(final UIObserverListener listener) { |
||||
changeListeners.add(new ChangeListener() { |
||||
public void stateChanged(ChangeEvent e) { |
||||
listener.doChange(); |
||||
} |
||||
}); |
||||
} |
||||
|
||||
/** |
||||
* 组件是否需要响应添加的观察者事件 |
||||
* |
||||
* @return 如果需要响应观察者事件则返回true,否则返回false |
||||
*/ |
||||
public boolean shouldResponseChangeListener() { |
||||
return true; |
||||
} |
||||
|
||||
private class InnerTableEditor extends UITableEditor { |
||||
private JComponent editorComponent; |
||||
|
||||
/** |
||||
* 返回当前编辑器的值 |
||||
*/ |
||||
public Object getCellEditorValue() { |
||||
if(editorComponent instanceof UITextField) { |
||||
UITextField textField = (UITextField)editorComponent; |
||||
return textField.getText(); |
||||
} else if(editorComponent instanceof UIComboBox) { |
||||
UIComboBox boxPane = (UIComboBox)editorComponent; |
||||
return boxPane.getSelectedItem(); |
||||
} |
||||
return super.getCellEditorValue(); |
||||
} |
||||
|
||||
/** |
||||
* 返回当前编辑器.. |
||||
*/ |
||||
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { |
||||
if (column == table.getModel().getColumnCount()) { |
||||
return null; |
||||
} |
||||
if(column == 0 ) { |
||||
UITextField text = new UITextField(); |
||||
if(value != null) { |
||||
text.setText(Utils.objectToString(value)); |
||||
} |
||||
|
||||
text.registerChangeListener(new UIObserverListener() { |
||||
@Override |
||||
public void doChange() { |
||||
titleValuePane.fireTargetChanged(); |
||||
} |
||||
}); |
||||
|
||||
this.editorComponent = text; |
||||
} else { |
||||
UIComboBox box = new UIComboBox(initNames); |
||||
box.addItemListener(new ItemListener() { |
||||
@Override |
||||
public void itemStateChanged(ItemEvent e) { |
||||
titleValuePane.fireTargetChanged(); |
||||
titleValuePane.stopCellEditing(); |
||||
} |
||||
}); |
||||
|
||||
if (value != null && StringUtils.isNotEmpty(value.toString())) { |
||||
box.setSelectedItem(value); |
||||
} else { |
||||
box.setSelectedItem(value); |
||||
} |
||||
|
||||
this.editorComponent = box; |
||||
} |
||||
return this.editorComponent; |
||||
} |
||||
} |
||||
|
||||
public void setTableDataWrapper(TableDataWrapper wrapper){ |
||||
this.tableDataWrapper = wrapper; |
||||
} |
||||
} |
@ -1,244 +0,0 @@
|
||||
package com.fr.design.mainframe; |
||||
|
||||
import com.fr.base.TableData; |
||||
import com.fr.chart.chartattr.ChartCollection; |
||||
import com.fr.chart.chartdata.JSONTableData; |
||||
import com.fr.data.impl.EmbeddedTableData; |
||||
import com.fr.data.impl.ExcelTableData; |
||||
import com.fr.design.event.UIObserver; |
||||
import com.fr.design.event.UIObserverListener; |
||||
import com.fr.design.gui.frpane.AttributeChangeListener; |
||||
import com.fr.design.gui.ibutton.UIButton; |
||||
import com.fr.design.gui.icombobox.UIComboBox; |
||||
import com.fr.design.gui.ilable.UILabel; |
||||
import com.fr.design.layout.TableLayout; |
||||
import com.fr.design.layout.TableLayoutHelper; |
||||
import com.fr.design.mainframe.chart.gui.ChartDataPane; |
||||
import com.fr.design.mainframe.chart.gui.data.*; |
||||
import com.fr.general.Inter; |
||||
|
||||
import javax.swing.*; |
||||
import java.awt.*; |
||||
import java.awt.event.ItemEvent; |
||||
import java.awt.event.ItemListener; |
||||
|
||||
/** |
||||
* Created by IntelliJ IDEA. |
||||
* Author : daisy |
||||
* Version: 7.1.1 |
||||
* Date: 14/12/3 |
||||
* Time: 下午6:53 |
||||
*/ |
||||
public class AbstractChartDataPane4Chart extends DataContentsPane implements UIObserver { |
||||
|
||||
private static final int DATA_SOURCE_GAP = 18; |
||||
private static final int WIDTH = 262; |
||||
|
||||
protected ChartDataPane parentPane; |
||||
protected ChartDesignDataLoadPane choosePane; |
||||
protected JComponent choose = new UILabel(); |
||||
|
||||
protected UIObserverListener observerListener; |
||||
|
||||
protected UIComboBox dataSource = new UIComboBox( |
||||
new String[]{"JSON" + Inter.getLocText("Chart-DS_TableData"), Inter.getLocText("Chart-Use_Local") + "EXCEL", Inter.getLocText("Chart-DS_Embedded_TableData")}); |
||||
|
||||
protected ItemListener dsListener = new ItemListener() { |
||||
@Override |
||||
public void itemStateChanged(ItemEvent e) { |
||||
int index = dataSource.getSelectedIndex(); |
||||
if (index == 0) { |
||||
initJSON(); |
||||
} else if (index == 1) { |
||||
initExcel(); |
||||
} else { |
||||
initEmbbed(); |
||||
} |
||||
remove(leftContentPane); |
||||
clearTableDataSetting(); |
||||
initContentPane(); |
||||
AbstractChartDataPane4Chart.this.validate(); |
||||
} |
||||
}; |
||||
|
||||
protected AttributeChangeListener attributeChangeListener; |
||||
|
||||
public AbstractChartDataPane4Chart(final AttributeChangeListener listener, ChartDataPane parent) { |
||||
this.parentPane = parent; |
||||
this.attributeChangeListener = listener; |
||||
initJSON(); |
||||
initAll(); |
||||
} |
||||
|
||||
protected void populateChoosePane(TableData tableData) { |
||||
dataSource.removeItemListener(dsListener); |
||||
if (tableData instanceof JSONTableData) { |
||||
initJSON(); |
||||
dataSource.setSelectedIndex(0); |
||||
} else if (tableData instanceof ExcelTableData) { |
||||
initExcel(); |
||||
dataSource.setSelectedIndex(1); |
||||
} else if (tableData instanceof EmbeddedTableData) { |
||||
initEmbbed(); |
||||
dataSource.setSelectedIndex(2); |
||||
} |
||||
choosePane.populateChartTableData(tableData); |
||||
dataSource.addItemListener(dsListener); |
||||
} |
||||
|
||||
|
||||
protected void initJSON() { |
||||
choosePane = new JSONDataPane(this); |
||||
UILabel url = new UILabel("URL:"); |
||||
url.setHorizontalAlignment(SwingConstants.RIGHT); |
||||
choose = url; |
||||
} |
||||
|
||||
protected void initExcel() { |
||||
choose = new UIButton(Inter.getLocText("Chart-Select_Path")); |
||||
choosePane = new ExcelDataPane(this, choose); |
||||
} |
||||
|
||||
protected void initEmbbed() { |
||||
choosePane = new EmbbeddDataPane(this); |
||||
choose = null; |
||||
} |
||||
|
||||
@Override |
||||
public void setSupportCellData(boolean supportCellData) { |
||||
|
||||
} |
||||
|
||||
@Override |
||||
protected JPanel createContentPane() { |
||||
double p = TableLayout.PREFERRED; |
||||
double[] columnSize = {WIDTH}; |
||||
double[] rowSize = {p, p}; |
||||
Component[][] components = new Component[][]{ |
||||
new Component[]{new UILabel(Inter.getLocText("Chart-Data_Import"))}, |
||||
new Component[]{createDataImportPane()} |
||||
}; |
||||
|
||||
return TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize); |
||||
} |
||||
|
||||
private JPanel createDataImportPane() { |
||||
double p = TableLayout.PREFERRED; |
||||
double f = TableLayout.FILL; |
||||
double[] columnSize = {f}; |
||||
double[] rowSize = {p, p, p}; |
||||
Component[][] components = new Component[][]{ |
||||
new Component[]{createDataSourcePane()}, |
||||
new Component[]{new JSeparator()}, |
||||
new Component[]{createDataSetPane()} |
||||
}; |
||||
|
||||
return TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize); |
||||
} |
||||
|
||||
|
||||
/** |
||||
* 数据配置面板 |
||||
* |
||||
* @return |
||||
*/ |
||||
protected JPanel createDataSetPane() { |
||||
double p = TableLayout.PREFERRED; |
||||
double f = TableLayout.FILL; |
||||
double[] columnSize = {f}; |
||||
double[] rowSize = {p, p}; |
||||
Component[][] components = new Component[][]{ |
||||
new Component[]{new UILabel(Inter.getLocText("Chart-Data_Configuration"))}, |
||||
new Component[]{getDataContentPane()} |
||||
}; |
||||
|
||||
return TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize); |
||||
} |
||||
|
||||
protected JPanel getDataContentPane() { |
||||
return new JPanel(); |
||||
} |
||||
|
||||
|
||||
private JPanel createDataSourcePane() { |
||||
double p = TableLayout.PREFERRED; |
||||
double f = TableLayout.FILL; |
||||
double[] columnSize = {DATA_SOURCE_GAP, f}; |
||||
double[] rowSize = {p,}; |
||||
Component[][] components = new Component[][]{ |
||||
new Component[]{null, createChooseBoxPane()}, |
||||
}; |
||||
return TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize); |
||||
} |
||||
|
||||
private JPanel createChooseBoxPane() { |
||||
UILabel dataSourceLabel = new UILabel(Inter.getLocText("Chart-Data_Resource") + ":"); |
||||
dataSourceLabel.setHorizontalAlignment(SwingConstants.RIGHT); |
||||
double p = TableLayout.PREFERRED; |
||||
double f = TableLayout.FILL; |
||||
double[] columnSize = {p, f}; |
||||
double[] rowSize = {p, p}; |
||||
Component[][] components = new Component[][]{ |
||||
new Component[]{dataSourceLabel, dataSource}, |
||||
new Component[]{choose, choosePane} |
||||
}; |
||||
return TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize); |
||||
} |
||||
|
||||
|
||||
/** |
||||
* 注册观察者监听事件 |
||||
* |
||||
* @param listener 观察者监听事件 |
||||
*/ |
||||
public void registerChangeListener(UIObserverListener listener) { |
||||
this.observerListener = listener; |
||||
} |
||||
|
||||
/** |
||||
* 使用应该响应listener |
||||
* |
||||
* @return 应该响应 |
||||
*/ |
||||
public boolean shouldResponseChangeListener() { |
||||
return true; |
||||
} |
||||
|
||||
|
||||
protected void initSelfListener(Container parentComponent) { |
||||
for (int i = 0; i < parentComponent.getComponentCount(); i++) { |
||||
Component tmpComp = parentComponent.getComponent(i); |
||||
if (tmpComp instanceof Container) { |
||||
initListener((Container) tmpComp); |
||||
} |
||||
if (tmpComp instanceof UIObserver) { |
||||
((UIObserver) tmpComp).registerChangeListener(observerListener); |
||||
} |
||||
} |
||||
} |
||||
|
||||
|
||||
@Override |
||||
public void populate(ChartCollection collection) { |
||||
|
||||
} |
||||
|
||||
@Override |
||||
public void update(ChartCollection collection) { |
||||
|
||||
} |
||||
|
||||
/** |
||||
* 清空数据集的设置 |
||||
*/ |
||||
public void clearTableDataSetting() { |
||||
|
||||
} |
||||
|
||||
/** |
||||
* 数据集数据改变 |
||||
*/ |
||||
public void fireTableDataChange() { |
||||
|
||||
} |
||||
} |
@ -1,111 +0,0 @@
|
||||
package com.fr.design.mainframe; |
||||
|
||||
import com.fr.chart.base.ChartConstants; |
||||
import com.fr.chart.base.MapSvgXMLHelper; |
||||
import com.fr.chart.chartattr.*; |
||||
import com.fr.design.gui.icombobox.UIComboBox; |
||||
import com.fr.design.mainframe.chart.ChartDesignEditPane; |
||||
import com.fr.general.ComparatorUtils; |
||||
import com.fr.stable.Constants; |
||||
|
||||
import javax.swing.*; |
||||
import javax.swing.border.EmptyBorder; |
||||
import java.awt.*; |
||||
import java.awt.event.ItemEvent; |
||||
import java.awt.event.ItemListener; |
||||
|
||||
/** |
||||
* Created by IntelliJ IDEA. |
||||
* Author : daisy |
||||
* Version: 7.1.1 |
||||
* Date: 14/12/1 |
||||
* Time: 下午3:15 |
||||
*/ |
||||
public abstract class AbstractMapPlotPane4ToolBar extends JPanel{ |
||||
|
||||
|
||||
protected static final int COM_HEIGHT = 22; |
||||
protected static final int COM_GAP = 14; |
||||
protected static final int COMBOX_WIDTH = 230; |
||||
|
||||
protected ChartDesigner chartDesigner; |
||||
protected UIComboBox mapTypeComboBox; |
||||
|
||||
protected ItemListener mapTypeListener = new ItemListener() { |
||||
@Override |
||||
public void itemStateChanged(ItemEvent e) { |
||||
calculateDetailMaps(mapTypeComboBox.getSelectedIndex()); |
||||
} |
||||
}; |
||||
|
||||
|
||||
public AbstractMapPlotPane4ToolBar(ChartDesigner designer){ |
||||
this.chartDesigner = designer; |
||||
this.setLayout(new FlowLayout(FlowLayout.LEFT, COM_GAP, 0)); |
||||
this.setBorder(new EmptyBorder(2, 0, 2, 0)); |
||||
mapTypeComboBox = new UIComboBox(getMapTypes()) { |
||||
public Dimension getPreferredSize() { |
||||
return new Dimension(COMBOX_WIDTH, COM_HEIGHT); |
||||
} |
||||
}; |
||||
mapTypeComboBox.addItemListener(mapTypeListener); |
||||
this.add(mapTypeComboBox); |
||||
} |
||||
|
||||
|
||||
protected abstract void calculateDetailMaps(int mapType); |
||||
|
||||
/** |
||||
* 更新地图面板 |
||||
* @param mapType 地图名字 |
||||
*/ |
||||
public void populateMapPane(String mapType){ |
||||
mapTypeComboBox.removeItemListener(mapTypeListener); |
||||
for (String type : getMapTypes()) { |
||||
java.util.List list = MapSvgXMLHelper.getInstance().getNamesListWithCateName(type); |
||||
for (Object name : list) { |
||||
if(ComparatorUtils.equals(name,mapType)){ |
||||
mapTypeComboBox.setSelectedItem(type); |
||||
break; |
||||
} |
||||
} |
||||
} |
||||
mapTypeComboBox.addItemListener(mapTypeListener); |
||||
} |
||||
|
||||
public abstract String[] getMapTypes(); |
||||
|
||||
/** |
||||
* 切换图表类型 |
||||
*/ |
||||
public void fireChange(){ |
||||
ChartCollection chartCollection = (ChartCollection)chartDesigner.getTarget().getChartCollection(); |
||||
Chart chart =chartCollection.getSelectedChart(); |
||||
if(chart.getPlot().getPlotStyle() != ChartConstants.STYLE_NONE){ |
||||
resetChart(chart); |
||||
} |
||||
chart.switchPlot(getSelectedClonedPlot()); |
||||
|
||||
if(chart.getPlot().getPlotStyle() != ChartConstants.STYLE_NONE){ |
||||
resetChart(chart); |
||||
} |
||||
chartDesigner.fireTargetModified(); |
||||
ChartDesignEditPane.getInstance().populateSelectedTabPane(); |
||||
} |
||||
|
||||
protected void resetChart(Chart chart){ |
||||
chart.setTitle(new Title(chart.getTitle().getTextObject())); |
||||
chart.setBorderStyle(Constants.LINE_NONE); |
||||
chart.setBorderColor(new Color(150, 150, 150)); |
||||
chart.setBackground(null); |
||||
} |
||||
|
||||
protected abstract Plot getSelectedClonedPlot(); |
||||
|
||||
/** |
||||
* 触发更新 |
||||
*/ |
||||
public void fireTargetModified() { |
||||
chartDesigner.fireTargetModified(); |
||||
} |
||||
} |
@ -1,521 +0,0 @@
|
||||
/* |
||||
* Copyright (c) 2001-2014,FineReport Inc, All Rights Reserved. |
||||
*/ |
||||
|
||||
package com.fr.design.mainframe; |
||||
|
||||
import com.fr.design.gui.ilable.UILabel; |
||||
import com.fr.design.gui.itextfield.UINumberField; |
||||
import com.fr.design.layout.TableLayout; |
||||
import com.fr.design.layout.TableLayoutHelper; |
||||
import com.fr.design.scrollruler.*; |
||||
import com.fr.general.FRScreen; |
||||
import com.fr.general.Inter; |
||||
|
||||
import javax.swing.*; |
||||
import javax.swing.border.LineBorder; |
||||
import java.awt.*; |
||||
import java.awt.event.*; |
||||
|
||||
/** |
||||
* Created by IntelliJ IDEA. |
||||
* Author : daisy |
||||
* Version: 6.5.6 |
||||
* Date: 14-10-13 |
||||
* Time: 下午5:08 |
||||
*/ |
||||
public class ChartArea extends JComponent implements ScrollRulerComponent { |
||||
|
||||
private static final int TOPGAP = 8; |
||||
private static final int MIN_WIDTH = 36; |
||||
private static final int MIN_HEIGHT = 21; |
||||
private static final double SLIDER_FLOAT = 120.0; |
||||
private static final double SLIDER_MIN = 60.0; |
||||
private static final double DEFAULT_SLIDER = 100.0; |
||||
private static final int ROTATIONS = 50; |
||||
private int designerwidth = 810; |
||||
private int designerheight = 500; |
||||
private int customWidth = 810; |
||||
private int customHeight = 500; |
||||
private ChartDesigner designer; |
||||
private int horizontalValue = 0; |
||||
private int verticalValue = 0; |
||||
private int verticalMax = 0; |
||||
private int horicalMax = 0; |
||||
private FormScrollBar verScrollBar; |
||||
private FormScrollBar horScrollBar; |
||||
//显示和设置图表界面大小的控件
|
||||
private UINumberField widthPane; |
||||
private UINumberField heightPane; |
||||
private boolean isValid = true; |
||||
private double START_VALUE = DEFAULT_SLIDER; |
||||
|
||||
public ChartArea(ChartDesigner designer) { |
||||
this(designer, true); |
||||
} |
||||
|
||||
public ChartArea(ChartDesigner designer, boolean useScrollBar) { |
||||
this.designer = designer; |
||||
this.designer.setParent(this); |
||||
this.customWidth = designer.getTarget().getWidth(); |
||||
this.customHeight = designer.getTarget().getHeight(); |
||||
this.designerwidth = this.customWidth; |
||||
this.designerheight = this.customHeight; |
||||
isValid = useScrollBar; |
||||
verScrollBar = new FormScrollBar(Adjustable.VERTICAL, this); |
||||
horScrollBar = new FormScrollBar(Adjustable.HORIZONTAL, this); |
||||
if (useScrollBar) { |
||||
this.setLayout(new FormRulerLayout()); |
||||
designer.setBorder(new LineBorder(new Color(198, 198, 198))); |
||||
this.add(FormRulerLayout.CENTER, designer); |
||||
addFormSize(); |
||||
this.add(FormRulerLayout.VERTICAL, verScrollBar); |
||||
this.add(FormRulerLayout.HIRIZONTAL, horScrollBar); |
||||
enableEvents(AWTEvent.MOUSE_WHEEL_EVENT_MASK); |
||||
} else { |
||||
// 报表参数界面只要标尺和中心pane
|
||||
this.setLayout(new RulerLayout()); |
||||
this.add(RulerLayout.CENTER, designer); |
||||
addFormRuler(); |
||||
} |
||||
this.setFocusTraversalKeysEnabled(false); |
||||
} |
||||
|
||||
/** |
||||
* 增加表单的页面大小控制界面,包括手动修改和滑块拖动 |
||||
*/ |
||||
private void addFormSize() { |
||||
double f = TableLayout.FILL; |
||||
double p = TableLayout.PREFERRED; |
||||
double[] rowSize = {f}; |
||||
double[] columnSize = {p, f, p, p, p, p, p,f,p}; |
||||
UILabel tipsPane = new UILabel("chart"); |
||||
tipsPane.setPreferredSize(new Dimension(200, 0)); |
||||
widthPane = new UINumberField(); |
||||
widthPane.setPreferredSize(new Dimension(60, 0)); |
||||
heightPane = new UINumberField(); |
||||
heightPane.setPreferredSize(new Dimension(60, 0)); |
||||
JPanel panel = new JPanel(){ |
||||
public Dimension getPreferredSize(){ |
||||
return new Dimension(200,0); |
||||
} |
||||
}; |
||||
JPanel resizePane = TableLayoutHelper.createCommonTableLayoutPane(new JComponent[][]{ |
||||
{tipsPane, new UILabel(), widthPane, new UILabel(Inter.getLocText("Indent-Pixel")), new UILabel("x"), |
||||
heightPane, new UILabel(Inter.getLocText("Indent-Pixel")),new UILabel(),panel}}, |
||||
rowSize, columnSize, 8 |
||||
); |
||||
this.add(FormRulerLayout.BOTTOM, resizePane); |
||||
setWidgetsConfig(); |
||||
// 先初始话滑块及对应事件,然后获取分辨率调整容器的显示大小
|
||||
initCalculateSize(); |
||||
} |
||||
|
||||
private void setWidgetsConfig() { |
||||
widthPane.setHorizontalAlignment(widthPane.CENTER); |
||||
heightPane.setHorizontalAlignment(heightPane.CENTER); |
||||
widthPane.setMaxDecimalLength(0); |
||||
heightPane.setMaxDecimalLength(0); |
||||
//控件初始值就是根节点组件初始的宽和高
|
||||
widthPane.setValue(designerwidth); |
||||
heightPane.setValue(designerheight); |
||||
addWidthPaneListener(); |
||||
addHeightPaneListener(); |
||||
} |
||||
|
||||
private void initCalculateSize() { |
||||
Toolkit toolkit = Toolkit.getDefaultToolkit(); |
||||
Dimension scrnsize = toolkit.getScreenSize(); |
||||
double value = FRScreen.getByDimension(scrnsize).getValue(); |
||||
if (value != DEFAULT_SLIDER) { |
||||
reCalculateRoot(value, true); |
||||
} |
||||
} |
||||
|
||||
//设置宽度的控件及响应事件
|
||||
private void addWidthPaneListener() { |
||||
widthPane.addActionListener( |
||||
new ActionListener() { |
||||
public void actionPerformed(ActionEvent evt) { |
||||
reCalculateWidth((int) ((UINumberField) evt.getSource()).getValue()); |
||||
} |
||||
} |
||||
); |
||||
widthPane.addFocusListener( |
||||
new FocusAdapter() { |
||||
public void focusLost(FocusEvent e) { |
||||
// 失去焦点时,可以认为输入结束
|
||||
reCalculateWidth((int) ((UINumberField) e.getSource()).getValue()); |
||||
} |
||||
} |
||||
); |
||||
} |
||||
|
||||
private void addHeightPaneListener() { |
||||
heightPane.addActionListener( |
||||
new ActionListener() { |
||||
public void actionPerformed(ActionEvent evt) { |
||||
reCalculateHeight((int) ((UINumberField) evt.getSource()).getValue()); |
||||
} |
||||
} |
||||
); |
||||
heightPane.addFocusListener( |
||||
new FocusAdapter() { |
||||
public void focusLost(FocusEvent e) { |
||||
// 失去焦点时,可以认为输入结束
|
||||
reCalculateHeight((int) ((UINumberField) e.getSource()).getValue()); |
||||
} |
||||
} |
||||
); |
||||
} |
||||
|
||||
private void reCalculateWidth(int width) { |
||||
int dW = width - designerwidth; |
||||
if (dW == 0) { |
||||
return; |
||||
} |
||||
// 图表设计器先设大小为实际的高和当前的宽,然后按此调整内部的组件
|
||||
designer.setSize(width, designerheight); |
||||
designerwidth = width; |
||||
customWidth = width; |
||||
designer.getTarget().setWidth(width); |
||||
ChartArea.this.validate(); |
||||
designer.fireTargetModified(); |
||||
} |
||||
|
||||
private void reCalculateHeight(int height) { |
||||
int dW = height - designerwidth; |
||||
if (dW == 0) { |
||||
return; |
||||
} |
||||
// 图表设计器先设大小为实际的高和当前的宽,然后按此调整内部的组件
|
||||
designer.setSize(designerwidth, height); |
||||
designerheight = height; |
||||
customHeight = height; |
||||
this.designer.getTarget().setHeight(height); |
||||
ChartArea.this.validate(); |
||||
designer.fireTargetModified(); |
||||
} |
||||
|
||||
/** |
||||
* 按照界面大小的百分比值调整root大小 |
||||
* |
||||
* @param needCalculateParaHeight 是否需要调整参数界面高度 |
||||
* @param value |
||||
*/ |
||||
private void reCalculateRoot(double value, boolean needCalculateParaHeight) { |
||||
if (value == START_VALUE) { |
||||
return; |
||||
} |
||||
double percent = (value - START_VALUE) / START_VALUE; |
||||
Dimension d = new Dimension(designerwidth, designerheight); |
||||
// 调整自适应布局大小后,同步调整参数界面和border大小,此时刷新下formArea
|
||||
ChartArea.this.validate(); |
||||
START_VALUE = value; |
||||
} |
||||
|
||||
/** |
||||
* 增加刻度条 |
||||
*/ |
||||
public void addFormRuler() { |
||||
BaseRuler vRuler = new VerticalRuler(this); |
||||
BaseRuler hRuler = new HorizontalRuler(this); |
||||
this.add(RulerLayout.VRULER, vRuler); |
||||
this.add(RulerLayout.HRULER, hRuler); |
||||
} |
||||
|
||||
/** |
||||
* 鼠标滚轮事件 |
||||
* 由于表单设计界面要求: 容器大小大于界面时,滚动条才可以拖动,所以不支持滚动无限往下滚 |
||||
*/ |
||||
@Override |
||||
protected void processMouseWheelEvent(java.awt.event.MouseWheelEvent evt) { |
||||
int id = evt.getID(); |
||||
switch (id) { |
||||
case MouseEvent.MOUSE_WHEEL: { |
||||
int rotations = evt.getWheelRotation(); |
||||
int value = this.verScrollBar.getValue() + rotations * ROTATIONS; |
||||
value = Math.min(value, verticalMax); |
||||
value = Math.max(0, value); |
||||
doLayout(); //加dolayout是因为每次滚动都要重置 Max的大小
|
||||
this.verScrollBar.setValue(value); |
||||
break; |
||||
} |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* 容器布局 |
||||
*/ |
||||
public void doLayout() { |
||||
layout(); |
||||
if (isValid) { |
||||
setScrollBarProperties(customWidth - designer.getWidth(), horScrollBar); |
||||
//计算滚动条值的时候应该算上参数面板的高度
|
||||
setScrollBarProperties(customHeight - designer.getHeight(), verScrollBar); |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* 设置滚动条的属性 |
||||
*/ |
||||
private void setScrollBarProperties(int value, FormScrollBar bar) { |
||||
if (value <= 0) { |
||||
// 界面有滚动条时,手动缩小容器宽度到界面内,重置滚动条值和max
|
||||
setScrollBarMax(0, bar); |
||||
bar.setMaximum(0); |
||||
bar.setValue(0); |
||||
bar.setEnabled(false); |
||||
} else { |
||||
//参数面板拖拽过程中value一直为当前value
|
||||
int oldValue = verticalValue; |
||||
setScrollBarMax(value, bar); |
||||
bar.setEnabled(true); |
||||
bar.setMaximum(value); |
||||
bar.setValue(value); |
||||
bar.setValue(oldValue); |
||||
} |
||||
} |
||||
|
||||
private boolean isScrollNotVisible(FormScrollBar bar) { |
||||
if (bar.getOrientation() == Adjustable.VERTICAL) { |
||||
return verticalMax == 0; |
||||
} else { |
||||
return horicalMax == 0; |
||||
} |
||||
} |
||||
|
||||
private void setScrollBarMax(int max, FormScrollBar bar) { |
||||
if (bar.getOrientation() == Adjustable.VERTICAL) { |
||||
verticalMax = max; |
||||
} else { |
||||
horicalMax = max; |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* 返回designer的最小高度 |
||||
* |
||||
* @return int |
||||
*/ |
||||
public int getMinHeight() { |
||||
return MIN_HEIGHT; |
||||
} |
||||
|
||||
/** |
||||
* 返回designer的最小宽度 |
||||
* |
||||
* @return int |
||||
*/ |
||||
public int getMinWidth() { |
||||
return MIN_WIDTH; |
||||
} |
||||
|
||||
/** |
||||
* getRulerLengthUnit |
||||
* |
||||
* @return short |
||||
*/ |
||||
public short getRulerLengthUnit() { |
||||
return -1; |
||||
} |
||||
|
||||
/** |
||||
* 返回水平滚动条的value |
||||
* |
||||
* @return int |
||||
*/ |
||||
public int getHorizontalValue() { |
||||
return horizontalValue; |
||||
} |
||||
|
||||
/** |
||||
* 设置水平滚动条的value |
||||
* |
||||
* @param newValue |
||||
*/ |
||||
public void setHorizontalValue(int newValue) { |
||||
this.horizontalValue = newValue; |
||||
} |
||||
|
||||
/** |
||||
* 返回竖直滚动条的value |
||||
* |
||||
* @return |
||||
*/ |
||||
public int getVerticalValue() { |
||||
return verticalValue; |
||||
} |
||||
|
||||
/** |
||||
* 竖直滚动条赋值 |
||||
* |
||||
* @param newValue |
||||
*/ |
||||
public void setVerticalValue(int newValue) { |
||||
this.verticalValue = newValue; |
||||
} |
||||
|
||||
/** |
||||
* 返回当前designer的高度 |
||||
* |
||||
* @return height |
||||
*/ |
||||
public int getDesignerHeight() { |
||||
return designer.getHeight(); |
||||
} |
||||
|
||||
/** |
||||
* 返回当前designer的宽度 |
||||
* |
||||
* @return |
||||
*/ |
||||
public int getDesignerWidth() { |
||||
return designer.getWidth(); |
||||
} |
||||
|
||||
/** |
||||
* 返回宽度控件的value |
||||
* |
||||
* @return 宽度 |
||||
*/ |
||||
public double getWidthPaneValue() { |
||||
return widthPane.getValue(); |
||||
} |
||||
|
||||
/** |
||||
* 设置宽度值 |
||||
* |
||||
* @param value 值 |
||||
*/ |
||||
public void setWidthPaneValue(int value) { |
||||
widthPane.setValue(value); |
||||
} |
||||
|
||||
/** |
||||
* 设置高度值 |
||||
* |
||||
* @param value 值 |
||||
*/ |
||||
public void setHeightPaneValue(int value) { |
||||
heightPane.setValue(value); |
||||
} |
||||
|
||||
/** |
||||
* 返回高度控件的value |
||||
* |
||||
* @return 高度 |
||||
*/ |
||||
public double getHeightPaneValue() { |
||||
return heightPane.getValue(); |
||||
} |
||||
|
||||
/** |
||||
* 返回界面区域大小 |
||||
* |
||||
* @return Dimension |
||||
*/ |
||||
public Dimension getAreaSize() { |
||||
return new Dimension(horScrollBar.getMaximum(), verScrollBar.getMaximum()); |
||||
} |
||||
|
||||
/** |
||||
* setAreaSize |
||||
* |
||||
* @param totalSize |
||||
* @param horizontalValue |
||||
* @param verticalValue |
||||
*/ |
||||
public void setAreaSize(Dimension totalSize, int horizontalValue, int verticalValue, double width, double height, double slide) { |
||||
horScrollBar.setMaximum((int) totalSize.getWidth()); |
||||
verScrollBar.setMaximum((int) totalSize.getHeight()); |
||||
horScrollBar.setValue(horizontalValue); |
||||
verScrollBar.setValue(verticalValue); |
||||
// 撤销会refresh底层容器,需要按照之前的宽高和百分比重置下容器size
|
||||
if (width != widthPane.getValue()) { |
||||
widthPane.setValue(width); |
||||
reCalculateWidth((int) width); |
||||
} |
||||
if (height != heightPane.getValue()) { |
||||
heightPane.setValue(height); |
||||
reCalculateHeight((int) height); |
||||
} |
||||
// undo时会重新refreshRoot,需要再次按照百分比调整下
|
||||
START_VALUE = DEFAULT_SLIDER; |
||||
reCalculateRoot(slide, true); |
||||
} |
||||
|
||||
public int getCustomWidth(){ |
||||
return this.customWidth; |
||||
} |
||||
|
||||
public int getCustomHeight(){ |
||||
return this.customHeight; |
||||
} |
||||
|
||||
/** |
||||
* 计算滚动条的值和max |
||||
* |
||||
* @param oldmax 之前最大值 |
||||
* @param max 当前最大值 |
||||
* @param newValue 当前value |
||||
* @param oldValue 之前value |
||||
* @param visi designer的大小 |
||||
* @param orientation 滚动条方向 |
||||
* @return 计算后的值和max |
||||
*/ |
||||
@Override |
||||
public Point calculateScroll(int oldmax, int max, int newValue, int oldValue, int visi, int orientation) { |
||||
int scrollMax = orientation == 1 ? verticalMax : horicalMax; |
||||
//防止滚动条到达低端还可以继续点击移动(滚动条最大范围不变时,newValue要在范围之内)
|
||||
if (oldmax == scrollMax + visi && newValue > scrollMax) { |
||||
return new Point(oldValue, oldmax); |
||||
} |
||||
return new Point(newValue, max); |
||||
} |
||||
|
||||
private class FormRulerLayout extends RulerLayout { |
||||
public FormRulerLayout() { |
||||
super(); |
||||
} |
||||
|
||||
/** |
||||
* 表单用的layout,当前不需要标尺 |
||||
*/ |
||||
public void layoutContainer(Container target) { |
||||
synchronized (target.getTreeLock()) { |
||||
Insets insets = target.getInsets(); |
||||
int top = insets.top; |
||||
int left = insets.left; |
||||
int bottom = target.getHeight() - insets.bottom; |
||||
int right = target.getWidth() - insets.right; |
||||
Dimension resize = resizePane.getPreferredSize(); |
||||
Dimension hbarPreferredSize = null; |
||||
Dimension vbarPreferredSize = null; |
||||
|
||||
resizePane.setBounds(left, bottom - resize.height, right, resize.height); |
||||
if (horScrollBar != null) { |
||||
hbarPreferredSize = horScrollBar.getPreferredSize(); |
||||
vbarPreferredSize = verScrollBar.getPreferredSize(); |
||||
horScrollBar.setBounds(left, bottom - hbarPreferredSize.height - resize.height, right - BARSIZE, hbarPreferredSize.height); |
||||
verScrollBar.setBounds(right - vbarPreferredSize.width, top, vbarPreferredSize.width, bottom - BARSIZE - resize.height); |
||||
} |
||||
ChartDesigner dg = ((ChartDesigner) designer); |
||||
Rectangle rec = new Rectangle(left + (right - designerwidth) / 2, TOPGAP, right, bottom); |
||||
//是否为图表
|
||||
if (isValid) { |
||||
int maxHeight = bottom - hbarPreferredSize.height - resize.height - TOPGAP * 2; |
||||
int maxWidth = right - vbarPreferredSize.width; |
||||
designerwidth = designerwidth> maxWidth ? maxWidth : designerwidth; |
||||
designerheight = designerheight > maxHeight ? maxHeight : designerheight; |
||||
int designerLeft = left + (verScrollBar.getX() - designerwidth) / 2; |
||||
rec = new Rectangle(designerLeft, TOPGAP, designerwidth, designerheight); |
||||
} |
||||
// designer是整个表单设计界面中的面板部分,目前只放自适应布局和参数界面。
|
||||
designer.setBounds(rec); |
||||
} |
||||
} |
||||
|
||||
} |
||||
|
||||
} |
@ -1,230 +0,0 @@
|
||||
/* |
||||
* Copyright (c) 2001-2014,FineReport Inc, All Rights Reserved. |
||||
*/ |
||||
|
||||
package com.fr.design.mainframe; |
||||
import com.fr.form.ui.ChartBook; |
||||
import com.fr.design.designer.TargetComponent; |
||||
import com.fr.design.mainframe.toolbar.ToolBarMenuDockPlus; |
||||
import com.fr.design.menu.MenuDef; |
||||
import com.fr.design.menu.ShortCut; |
||||
import com.fr.design.menu.ToolBarDef; |
||||
|
||||
import javax.swing.*; |
||||
import javax.swing.event.ChangeListener; |
||||
import java.awt.*; |
||||
import java.awt.event.MouseEvent; |
||||
import java.awt.event.MouseListener; |
||||
import java.awt.event.MouseMotionAdapter; |
||||
import java.util.ArrayList; |
||||
|
||||
/** |
||||
* Created by IntelliJ IDEA. |
||||
* Author : daisy |
||||
* Version: 6.5.6 |
||||
* Date: 14-10-13 |
||||
* Time: 下午4:30 |
||||
*/ |
||||
public class ChartDesigner extends TargetComponent<ChartBook> implements MouseListener{ |
||||
|
||||
private ChartArea chartArea;//上层区域
|
||||
private boolean hasCalGap = false; |
||||
private ArrayList<ChangeListener> changeListeners = new ArrayList<ChangeListener>(); |
||||
public ChartDesigner(ChartBook chartBook) { |
||||
super(chartBook); |
||||
this.addMouseListener(this); |
||||
updateUI();// 初始化界面设计工具的UI实例
|
||||
} |
||||
|
||||
/** |
||||
* 设置上层区域 |
||||
* @param chartArea 图表区域 |
||||
*/ |
||||
public void setParent(ChartArea chartArea) { |
||||
this.chartArea = chartArea; |
||||
} |
||||
|
||||
/** |
||||
* 复制 |
||||
*/ |
||||
public void copy() { |
||||
|
||||
} |
||||
|
||||
/** |
||||
* 黏贴 |
||||
* @return 成功返回true |
||||
*/ |
||||
public boolean paste() { |
||||
return false; |
||||
} |
||||
|
||||
/** |
||||
* 剪切 |
||||
* @return 成功返回TRUE |
||||
*/ |
||||
public boolean cut() { |
||||
return false; |
||||
} |
||||
|
||||
/** |
||||
* 停止编辑 |
||||
*/ |
||||
public void stopEditing() { |
||||
|
||||
} |
||||
|
||||
/** |
||||
* 权限编辑面板 |
||||
* @return 面板 |
||||
*/ |
||||
public AuthorityEditPane createAuthorityEditPane() { |
||||
return null; |
||||
} |
||||
|
||||
/** |
||||
* 工具条 |
||||
* @return 工具条 |
||||
*/ |
||||
public ToolBarMenuDockPlus getToolBarMenuDockPlus() { |
||||
return null; |
||||
} |
||||
|
||||
/** |
||||
* 菜单状态 |
||||
* @return 状态 |
||||
*/ |
||||
public int getMenuState() { |
||||
return 0; |
||||
} |
||||
|
||||
/** |
||||
* 东上面板 |
||||
* @return 面板 |
||||
*/ |
||||
public JPanel getEastUpPane() { |
||||
return null; |
||||
} |
||||
|
||||
/** |
||||
* 东下面板 |
||||
* @return 面板 |
||||
*/ |
||||
public JPanel getEastDownPane() { |
||||
return null; |
||||
} |
||||
|
||||
/** |
||||
* 取消格式 |
||||
*/ |
||||
public void cancelFormat() { |
||||
|
||||
} |
||||
|
||||
/** |
||||
* 图表设计器得工具条项 |
||||
* @return 图表设计器得工具条项 |
||||
*/ |
||||
public ToolBarDef[] toolbars4Target() { |
||||
return new ToolBarDef[0]; |
||||
} |
||||
|
||||
/** |
||||
* 菜单 |
||||
* @return 菜单 |
||||
*/ |
||||
public MenuDef[] menus4Target() { |
||||
return new MenuDef[0]; |
||||
} |
||||
|
||||
/** |
||||
* 菜单项 |
||||
* @return 菜单项 |
||||
*/ |
||||
public ShortCut[] shortcut4TemplateMenu() { |
||||
return new ShortCut[0]; |
||||
} |
||||
|
||||
/** |
||||
* 权限编辑得菜单项 |
||||
* @return 菜单项 |
||||
*/ |
||||
public ShortCut[] shortCuts4Authority() { |
||||
return new ShortCut[0]; |
||||
} |
||||
|
||||
/** |
||||
* 表单得工具条按钮 |
||||
* @return 表单得工具条按钮 |
||||
*/ |
||||
public JComponent[] toolBarButton4Form() { |
||||
return new JComponent[0]; |
||||
} |
||||
|
||||
|
||||
/** |
||||
* 返回表单区域 |
||||
* @return 表单区域 |
||||
*/ |
||||
public ChartArea getArea() { |
||||
return chartArea; |
||||
} |
||||
|
||||
|
||||
/** |
||||
* 鼠标点击 |
||||
* @param e 事件 |
||||
*/ |
||||
public void mouseClicked(MouseEvent e) { |
||||
} |
||||
|
||||
/** |
||||
* 鼠标按下 |
||||
* @param e 事件 |
||||
*/ |
||||
public void mousePressed(MouseEvent e) { |
||||
|
||||
} |
||||
|
||||
/** |
||||
* 鼠标释放 |
||||
* @param e 事件 |
||||
*/ |
||||
public void mouseReleased(MouseEvent e) { |
||||
|
||||
} |
||||
|
||||
/** |
||||
* 鼠标进入 |
||||
* @param e 事件 |
||||
*/ |
||||
public void mouseEntered(MouseEvent e) { |
||||
|
||||
} |
||||
|
||||
/** |
||||
* 鼠标退出 |
||||
* @param e 事件 |
||||
*/ |
||||
public void mouseExited(MouseEvent e) { |
||||
|
||||
} |
||||
|
||||
|
||||
private void registerChangeListener(ChangeListener changeListener){ |
||||
if(changeListener == null){ |
||||
return; |
||||
} |
||||
this.changeListeners.add(changeListener); |
||||
} |
||||
|
||||
|
||||
public void populate(){ |
||||
} |
||||
|
||||
/** |
||||
* 清除工具栏上面全局风格按钮的选中 |
||||
*/ |
||||
public void clearToolBarStyleChoose(){ |
||||
} |
||||
} |
@ -1,211 +0,0 @@
|
||||
/* |
||||
* Copyright (c) 2001-2014,FineReport Inc, All Rights Reserved. |
||||
*/ |
||||
|
||||
package com.fr.design.mainframe; |
||||
|
||||
import com.fr.base.BaseUtils; |
||||
import com.fr.base.ScreenResolution; |
||||
import com.fr.base.chart.BaseChartGlyph; |
||||
import com.fr.chart.chartattr.*; |
||||
import com.fr.chart.charttypes.ColumnIndependentChart; |
||||
import com.fr.design.gui.ilable.UILabel; |
||||
import com.fr.design.mainframe.chart.ChartDesignEditPane; |
||||
import com.fr.general.FRLogger; |
||||
|
||||
import javax.swing.*; |
||||
import javax.swing.plaf.ComponentUI; |
||||
import java.awt.*; |
||||
import java.awt.event.MouseEvent; |
||||
|
||||
/** |
||||
* Created by IntelliJ IDEA. |
||||
* Author : daisy |
||||
* Version: 6.5.6 |
||||
* Date: 14-10-13 |
||||
* Time: 下午4:55 |
||||
*/ |
||||
public class ChartDesignerUI extends ComponentUI { |
||||
private static final Icon ADD = BaseUtils.readIcon("/com/fr/design/images/add.png"); |
||||
private static final Icon DEL = BaseUtils.readIcon("/com/fr/design/images/del.png"); |
||||
private static final int ICON_SIZE = 22; |
||||
private static final int H_GAP = 2; |
||||
private static final int V_GAP = 6; |
||||
private Rectangle[] iconLocations; |
||||
private Rectangle add; |
||||
private Rectangle del; |
||||
private UILabel tooltipLabel; |
||||
private int overIndex = -1;//鼠标悬浮上去的图表的INDEX
|
||||
|
||||
// 图表当前的设计器
|
||||
private ChartDesigner designer; |
||||
|
||||
public ChartDesignerUI() { |
||||
|
||||
|
||||
} |
||||
|
||||
/** |
||||
* 加载界面 |
||||
* |
||||
* @param c 组件 |
||||
*/ |
||||
public void installUI(JComponent c) { |
||||
designer = (ChartDesigner) c; |
||||
} |
||||
|
||||
/** |
||||
* 渲染当前的设计界面以及设计辅助状态 |
||||
* |
||||
* @param g 画图类 |
||||
* @param c 组件 |
||||
*/ |
||||
@Override |
||||
public void paint(Graphics g, JComponent c) { |
||||
ChartCollection chartCollection = (ChartCollection) designer.getTarget().getChartCollection(); |
||||
Chart editingChart = chartCollection.getSelectedChart(); |
||||
BaseChartGlyph chartGlyph = null; |
||||
if (editingChart != null && editingChart.getPlot() != null) { |
||||
chartGlyph = editingChart.createGlyph(editingChart.defaultChartData()); |
||||
} |
||||
int parentWidth = designer.getSize().width; |
||||
int parentHeight = designer.getSize().height; |
||||
int chartWidth = designer.getArea().getCustomWidth(); |
||||
int chartHeight = designer.getArea().getCustomHeight(); |
||||
Graphics clipg; |
||||
clipg = g.create(-designer.getArea().getHorizontalValue(), -designer.getArea().getVerticalValue(), parentWidth + designer.getArea().getHorizontalValue(), parentHeight + designer.getArea().getVerticalValue()); |
||||
clipg = clipg.create(1, 1, designer.getArea().getCustomWidth(), designer.getArea().getCustomHeight()); |
||||
g.setColor(Color.white); |
||||
g.fillRect(0, 0, chartWidth, chartHeight); |
||||
chartGlyph.setUseChangeChart(true); |
||||
Image chartImage = chartGlyph.toImage(chartWidth, chartHeight, ScreenResolution.getScreenResolution()); |
||||
clipg.drawImage(chartImage, 0, 0, chartWidth, chartHeight, null); |
||||
paintChange(clipg, c); |
||||
} |
||||
|
||||
|
||||
//绘制切换的东西
|
||||
private void paintChange(Graphics g, JComponent c) { |
||||
int chartWidth = designer.getArea().getCustomWidth(); |
||||
ChartCollection collection = (ChartCollection) designer.getTarget().getChartCollection(); |
||||
int chartCount = collection.getChartCount(); |
||||
iconLocations = new Rectangle[chartCount]; |
||||
int startX = chartWidth - V_GAP - ICON_SIZE; |
||||
if (chartCount == 1) { |
||||
//只有一个时,只绘制新增按钮,不绘制删除按钮
|
||||
ADD.paintIcon(c, g, startX, H_GAP); |
||||
add = new Rectangle(startX, H_GAP, ICON_SIZE, ICON_SIZE); |
||||
del = null; |
||||
} else { |
||||
DEL.paintIcon(c, g, startX, H_GAP); |
||||
del = new Rectangle(startX, H_GAP, ICON_SIZE, ICON_SIZE); |
||||
startX -= (V_GAP + ICON_SIZE); |
||||
ADD.paintIcon(c, g, startX, H_GAP); |
||||
add = new Rectangle(startX, H_GAP, ICON_SIZE, ICON_SIZE); |
||||
} |
||||
|
||||
for (int i = chartCount - 1; i >= 0; i--) { |
||||
Plot plot = collection.getChart(i).getPlot(); |
||||
if (plot == null) { |
||||
continue; |
||||
} |
||||
if (collection.getSelectedIndex() == i) { |
||||
Icon ploticon = BaseUtils.readIcon(plot.getPlotSmallIconPath() + "_normal.png"); |
||||
if (ploticon != null) { |
||||
startX -= (V_GAP + ICON_SIZE); |
||||
ploticon.paintIcon(c, g, startX, H_GAP); |
||||
} |
||||
|
||||
}else if(overIndex == i){ |
||||
Icon ploticon = BaseUtils.readIcon(plot.getPlotSmallIconPath() + "_over.png"); |
||||
if (ploticon != null) { |
||||
startX -= (V_GAP + ICON_SIZE); |
||||
ploticon.paintIcon(c, g, startX, H_GAP); |
||||
} |
||||
} else { |
||||
Icon ploticon = BaseUtils.readIcon(plot.getPlotSmallIconPath() + "_gray.png"); |
||||
if (ploticon != null) { |
||||
startX -= (V_GAP + ICON_SIZE); |
||||
ploticon.paintIcon(c, g, startX, H_GAP); |
||||
} |
||||
} |
||||
|
||||
iconLocations[i] = new Rectangle(startX, H_GAP, ICON_SIZE, ICON_SIZE); |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* 鼠标点击 |
||||
* |
||||
* @param e 事件 |
||||
*/ |
||||
public void mouseClicked(MouseEvent e) { |
||||
Point clikPoint = new Point(e.getPoint().x + designer.getArea().getHorizontalValue(), e.getPoint().y + designer.getArea().getVerticalValue()); |
||||
ChartCollection collection = (ChartCollection) designer.getTarget().getChartCollection(); |
||||
for (int i = 0; i < iconLocations.length; i++) { |
||||
if (iconLocations[i].contains(clikPoint)) { |
||||
if (i == collection.getSelectedIndex()) { |
||||
return; |
||||
} |
||||
collection.setSelectedIndex(i); |
||||
designer.repaint(); |
||||
ChartDesignEditPane.getInstance().populateSelectedTabPane(); |
||||
return; |
||||
} |
||||
} |
||||
|
||||
if (add.contains(clikPoint)) { |
||||
Chart[] barChart = ColumnIndependentChart.columnChartTypes; |
||||
try { |
||||
Chart newChart = (Chart) barChart[0].clone(); |
||||
int select = collection.getSelectedIndex(); |
||||
collection.addNamedChartAtIndex(newChart.getTitle().getTextObject().toString(), newChart,select+1); |
||||
collection.setSelectedIndex(select+1); |
||||
ChartDesignEditPane.getInstance().populateSelectedTabPane(); |
||||
} catch (CloneNotSupportedException e1) { |
||||
FRLogger.getLogger().error("Error in Clone"); |
||||
} |
||||
designer.fireTargetModified(); |
||||
ChartDesignEditPane.getInstance().populateSelectedTabPane(); |
||||
return; |
||||
} |
||||
|
||||
if (del != null && del.contains(clikPoint)) { |
||||
int selectedIndex = collection.getSelectedIndex(); |
||||
collection.removeNameObject(selectedIndex); |
||||
if (selectedIndex > 0) { |
||||
collection.setSelectedIndex(selectedIndex - 1); |
||||
} else { |
||||
collection.setSelectedIndex(0); |
||||
} |
||||
designer.fireTargetModified(); |
||||
ChartDesignEditPane.getInstance().populateSelectedTabPane(); |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* 鼠标悬浮上时的数据点提示 |
||||
* |
||||
* @param e 事件 |
||||
*/ |
||||
public void mouseMoved(MouseEvent e) { |
||||
Point clikPoint = new Point(e.getPoint().x + designer.getArea().getHorizontalValue(), e.getPoint().y + designer.getArea().getVerticalValue()); |
||||
if (clikPoint.getY() < H_GAP || clikPoint.getY() > H_GAP + ICON_SIZE) { |
||||
ToolTip4Chart.getInstance().hideToolTip(); |
||||
overIndex = -1; |
||||
return; |
||||
} |
||||
ChartCollection collection = (ChartCollection) designer.getTarget().getChartCollection(); |
||||
for (int i = 0; i < iconLocations.length; i++) { |
||||
if (iconLocations[i].contains(clikPoint)) { |
||||
overIndex = i; |
||||
String chartName = collection.getChartName(i); |
||||
ToolTip4Chart.getInstance().showToolTip(chartName,e.getXOnScreen(),e.getYOnScreen()); |
||||
return; |
||||
} |
||||
} |
||||
ToolTip4Chart.getInstance().hideToolTip(); |
||||
overIndex = -1; |
||||
} |
||||
|
||||
} |
@ -1,558 +0,0 @@
|
||||
/* |
||||
* Copyright (c) 2001-2014,FineReport Inc, All Rights Reserved. |
||||
*/ |
||||
|
||||
package com.fr.design.mainframe; |
||||
|
||||
import com.fr.base.ChartPreStyleManagerProvider; |
||||
import com.fr.base.ChartPreStyleServerManager; |
||||
import com.fr.base.background.ColorBackground; |
||||
import com.fr.chart.base.*; |
||||
import com.fr.chart.chartattr.*; |
||||
import com.fr.chart.chartglyph.ConditionAttr; |
||||
import com.fr.design.gui.ibutton.UIButton; |
||||
import com.fr.design.gui.icombobox.UIComboBox; |
||||
import com.fr.design.mainframe.chart.ChartDesignEditPane; |
||||
import com.fr.design.mainframe.chart.ChartEditPane; |
||||
import com.fr.design.mainframe.chart.gui.type.ColumnPlotPane4ToolBar; |
||||
import com.fr.design.mainframe.chart.gui.type.PlotPane4ToolBar; |
||||
import com.fr.general.FRFont; |
||||
import com.fr.general.Inter; |
||||
import com.fr.stable.Constants; |
||||
|
||||
import javax.swing.*; |
||||
import javax.swing.border.EmptyBorder; |
||||
import java.awt.*; |
||||
import java.awt.event.ItemEvent; |
||||
import java.awt.event.ItemListener; |
||||
import java.awt.event.MouseAdapter; |
||||
import java.awt.event.MouseEvent; |
||||
|
||||
/** |
||||
* Created by IntelliJ IDEA. |
||||
* Author : daisy |
||||
* Version: 6.5.6 |
||||
* Date: 14-10-13 |
||||
* Time: 下午8:32 |
||||
*/ |
||||
public class ChartToolBarPane extends JPanel { |
||||
public static final int TOTAL_HEIGHT = 42; |
||||
private static final int COM_HEIGHT = 22; |
||||
private static final int GAP = 7; |
||||
private static final int COM_GAP = 14; |
||||
private static final int COMBOX_WIDTH = 230; |
||||
|
||||
private static final String[] CHOOSEITEM = new String[]{ |
||||
Inter.getLocText("FR-Chart-Type_Column"), |
||||
Inter.getLocText("FR-Chart-Type_Line"), |
||||
Inter.getLocText("FR-Chart-Type_Bar"), |
||||
Inter.getLocText("FR-Chart-Type_Pie"), |
||||
Inter.getLocText("FR-Chart-Type_Area"), |
||||
Inter.getLocText("FR-Chart-Type_XYScatter"), |
||||
Inter.getLocText("FR-Chart-Chart_BubbleChart"), |
||||
Inter.getLocText("FR-Chart-Type_Radar"), |
||||
Inter.getLocText("FR-Chart-Type_Stock"), |
||||
Inter.getLocText("FR-Chart-Type_Meter"), |
||||
Inter.getLocText("FR-Chart-Type_Range"), |
||||
Inter.getLocText("FR-Chart-Type_Comb"), |
||||
Inter.getLocText("FR-Chart-Type_Gantt"), |
||||
Inter.getLocText("FR-Chart-Type_Donut"), |
||||
Inter.getLocText("FR-Chart-Map_Map"), |
||||
"gis"+Inter.getLocText("FR-Chart-Map_Map") |
||||
}; |
||||
|
||||
private UIComboBox chooseComboBox = new UIComboBox(CHOOSEITEM) { |
||||
public Dimension getPreferredSize() { |
||||
return new Dimension(COMBOX_WIDTH, COM_HEIGHT); |
||||
} |
||||
}; |
||||
|
||||
private JPanel stylePane; |
||||
private JPanel plotTypeComboBoxPane; |
||||
private UIButton topDownShade = new UIButton(Inter.getLocText("FR-Chart-Style_TopDownShade")); |
||||
private UIButton transparent = new UIButton(Inter.getLocText("FR-Chart-Style_Transparent")); |
||||
private UIButton plane3D = new UIButton(Inter.getLocText("FR-Chart-Style_Plane3D")); |
||||
private UIButton gradient = new UIButton(Inter.getLocText("FR-Chart-Style_GradientHighlight")); |
||||
private ItemListener itemListener = new ItemListener() { |
||||
|
||||
@Override |
||||
public void itemStateChanged(ItemEvent e) { |
||||
if (e.getStateChange() == ItemEvent.DESELECTED) { |
||||
ChartToolBarPane.this.remove(centerPane); |
||||
ChartToolBarPane.this.remove(stylePane); |
||||
if(chooseComboBox.getSelectedIndex() < ChartTypeValueCollection.MAP.toInt()){ |
||||
calSubChartTypesPane(chooseComboBox.getSelectedIndex()); |
||||
ChartToolBarPane.this.add(subChartTypesPane,BorderLayout.CENTER); |
||||
centerPane = subChartTypesPane; |
||||
ChartToolBarPane.this.add(stylePane, BorderLayout.EAST); |
||||
} else{ |
||||
calMapSubChartTypesPane(chooseComboBox.getSelectedIndex()); |
||||
ChartToolBarPane.this.add(mapTypePane, BorderLayout.CENTER); |
||||
centerPane = mapTypePane; |
||||
} |
||||
ChartCollection chartCollection = (ChartCollection) chartDesigner.getTarget().getChartCollection(); |
||||
Chart chart = chartCollection.getSelectedChart(); |
||||
ChartToolBarPane.this.validate(); |
||||
fireTypeChange(); |
||||
|
||||
if(chooseComboBox.getSelectedIndex() == ChartTypeValueCollection.MAP.toInt()){ |
||||
mapTypePane.populateMapPane(((MapPlot) chart.getPlot()).getMapName()); |
||||
}else if(chooseComboBox.getSelectedIndex() == ChartTypeValueCollection.GIS.toInt()){ |
||||
mapTypePane.populateMapPane(chart.getChartName()); |
||||
} |
||||
} |
||||
} |
||||
}; |
||||
private PlotPane4ToolBar subChartTypesPane;//默认柱形图
|
||||
|
||||
private AbstractMapPlotPane4ToolBar mapTypePane;//地图类型选择的面板
|
||||
private JPanel centerPane; |
||||
|
||||
private ChartDesigner chartDesigner; |
||||
private int lastStyleIndex = -1; |
||||
private MouseAdapter styleListener = new MouseAdapter() { |
||||
@Override |
||||
public void mousePressed(MouseEvent e) { |
||||
ChartCollection chartCollection = (ChartCollection) chartDesigner.getTarget().getChartCollection(); |
||||
Chart chart = chartCollection.getSelectedChart(); |
||||
Plot newPlot; |
||||
int chartType =chart.getPlot().getPlotType().toInt(); |
||||
if(chartType >= ChartTypeValueCollection.MAP.toInt()){ |
||||
return; |
||||
} |
||||
newPlot = subChartTypesPane.setSelectedClonedPlotWithCondition(chart.getPlot()); |
||||
chartDesigner.fireTargetModified(); |
||||
UIButton button = (UIButton)e.getSource(); |
||||
//如果是第二次选中,就是消除
|
||||
if(button.isSelected()){ |
||||
button.setSelected(false); |
||||
chart.setPlot(newPlot); |
||||
resetChart(chart); |
||||
lastStyleIndex = -1; |
||||
ChartDesignEditPane.getInstance().populateSelectedTabPane(); |
||||
return; |
||||
} |
||||
clearStyleChoose(); |
||||
setStyle(chart,e,newPlot); |
||||
lastStyleIndex = chart.getPlot().getPlotStyle(); |
||||
} |
||||
}; |
||||
|
||||
private void setStyle( Chart chart,MouseEvent e,Plot newPlot){ |
||||
if (e.getSource() == topDownShade) { |
||||
topDownShade.setSelected(true); |
||||
chart.setPlot(newPlot); |
||||
chart.getPlot().setPlotStyle(ChartConstants.STYLE_SHADE); |
||||
resetChart(chart); |
||||
createCondition4Shade(chart); |
||||
setPlotFillStyle(chart); |
||||
} else if (e.getSource() == transparent) { |
||||
transparent.setSelected(true); |
||||
chart.setPlot(newPlot); |
||||
chart.getPlot().setPlotStyle(ChartConstants.STYLE_TRANSPARENT); |
||||
resetChart(chart); |
||||
createCondition4Transparent(chart); |
||||
setPlotFillStyle(chart); |
||||
} else if (e.getSource() == plane3D) { |
||||
plane3D.setSelected(true); |
||||
chart.setPlot(newPlot); |
||||
chart.getPlot().setPlotStyle(ChartConstants.STYLE_3D); |
||||
resetChart(chart); |
||||
createCondition4Plane3D(chart); |
||||
setPlotFillStyle(chart); |
||||
} else if (e.getSource() == gradient) { |
||||
gradient.setSelected(true); |
||||
chart.setPlot(newPlot); |
||||
chart.getPlot().setPlotStyle(ChartConstants.STYLE_OUTER); |
||||
resetChart(chart); |
||||
createCondition4HighLight(chart); |
||||
setPlotFillStyle(chart); |
||||
} |
||||
chart.setStyleGlobal(true); |
||||
ChartEditPane pane = ChartDesignEditPane.getInstance(); |
||||
pane.styleChange(true); |
||||
ChartDesignEditPane.getInstance().populate((ChartCollection)chartDesigner.getTarget().getChartCollection()); |
||||
pane.styleChange(false); |
||||
} |
||||
|
||||
public ChartToolBarPane(ChartDesigner designer) { |
||||
chartDesigner = designer; |
||||
subChartTypesPane = new ColumnPlotPane4ToolBar(designer);//默认柱形图
|
||||
this.setLayout(new BorderLayout()); |
||||
this.setBorder(new EmptyBorder(GAP, COM_GAP, GAP, 0)); |
||||
plotTypeComboBoxPane = new JPanel(); |
||||
plotTypeComboBoxPane.setBorder(new EmptyBorder(2, 0, 2, 0)); |
||||
plotTypeComboBoxPane.setLayout(new BorderLayout()); |
||||
plotTypeComboBoxPane.add(chooseComboBox, BorderLayout.CENTER); |
||||
chooseComboBox.addItemListener(itemListener); |
||||
//默认选择第一个
|
||||
chooseComboBox.setSelectedIndex(0); |
||||
this.add(plotTypeComboBoxPane, BorderLayout.WEST); |
||||
initStylePane(); |
||||
this.add(stylePane, BorderLayout.EAST); |
||||
this.add(subChartTypesPane, BorderLayout.CENTER); |
||||
this.centerPane = subChartTypesPane; |
||||
topDownShade.addMouseListener(styleListener); |
||||
transparent.addMouseListener(styleListener); |
||||
plane3D.addMouseListener(styleListener); |
||||
gradient.addMouseListener(styleListener); |
||||
} |
||||
|
||||
private void initStylePane(){ |
||||
stylePane = new JPanel() { |
||||
public Dimension getPreferredSize() { |
||||
Dimension size = super.getPreferredSize(); |
||||
return new Dimension(size.width, COM_HEIGHT); |
||||
} |
||||
}; |
||||
stylePane.setLayout(new FlowLayout(FlowLayout.LEFT, COM_GAP, 0)); |
||||
stylePane.setBorder(new EmptyBorder(3, 0, 3, 0)); |
||||
stylePane.add(topDownShade); |
||||
stylePane.add(transparent); |
||||
stylePane.add(plane3D); |
||||
stylePane.add(gradient); |
||||
} |
||||
|
||||
/** |
||||
* 清除工具栏上面全局风格按钮的选中 |
||||
*/ |
||||
public void clearStyleChoose() { |
||||
topDownShade.setSelected(false); |
||||
transparent.setSelected(false); |
||||
plane3D.setSelected(false); |
||||
gradient.setSelected(false); |
||||
} |
||||
|
||||
|
||||
private void calMapSubChartTypesPane(int index){ |
||||
ChartTypeValueCollection type = ChartTypeValueCollection.parse(index); |
||||
mapTypePane = PlotToolBarFactory.createToolBar4MapPlot(type,chartDesigner); |
||||
} |
||||
|
||||
private void calSubChartTypesPane(int index) { |
||||
ChartTypeValueCollection type = ChartTypeValueCollection.parse(index); |
||||
subChartTypesPane = PlotToolBarFactory.createToolBar4NormalPlot(type,chartDesigner); |
||||
} |
||||
|
||||
|
||||
private void fireTypeChange() { |
||||
if(chooseComboBox.getSelectedIndex() < ChartTypeValueCollection.MAP.toInt()){ |
||||
subChartTypesPane.fireChange(); |
||||
}else{ |
||||
mapTypePane.fireChange(); |
||||
} |
||||
} |
||||
|
||||
//图表区属性清空
|
||||
private void resetChart(Chart chart) { |
||||
chart.setTitle(new Title(chart.getTitle().getTextObject())); |
||||
chart.setBorderStyle(Constants.LINE_NONE); |
||||
chart.setBorderColor(new Color(150, 150, 150)); |
||||
chart.setBackground(null); |
||||
setPlotFillStyle(chart); |
||||
} |
||||
|
||||
//高光渐变的默认属性设置
|
||||
private void createCondition4HighLight(Chart chart) { |
||||
if (chart != null) { |
||||
//标题
|
||||
Title title = new Title(chart.getTitle().getTextObject()); |
||||
chart.setTitle(title); |
||||
title.setTitleVisible(true); |
||||
TextAttr textAttr = title.getTextAttr(); |
||||
if (textAttr == null) { |
||||
textAttr = new TextAttr(); |
||||
title.setTextAttr(textAttr); |
||||
} |
||||
title.setPosition(Constants.LEFT); |
||||
textAttr.setFRFont(FRFont.getInstance("Microsoft YaHei", Font.BOLD, 16f, new Color(51, 51, 51))); |
||||
|
||||
//图例
|
||||
Legend legend = new Legend(); |
||||
legend.setFRFont(FRFont.getInstance("SimSun", Font.PLAIN, 9f, new Color(138, 140, 139))); |
||||
legend.setPosition(Constants.RIGHT_TOP); |
||||
chart.getPlot().setLegend(legend); |
||||
|
||||
//分类轴,现在只有柱形图,条形图,面积图
|
||||
if (chart.getPlot() instanceof CategoryPlot) { |
||||
CategoryPlot plot = (CategoryPlot) chart.getPlot(); |
||||
|
||||
//分类轴设置
|
||||
Axis cateAxis = plot.getxAxis(); |
||||
cateAxis.setAxisStyle(Constants.LINE_THICK); |
||||
cateAxis.setAxisColor(new Color(204, 220, 228)); |
||||
cateAxis.setTickMarkType(Constants.TICK_MARK_INSIDE); |
||||
cateAxis.setSecTickMarkType(Constants.TICK_MARK_NONE); |
||||
cateAxis.setShowAxisLabel(true); |
||||
cateAxis.getTextAttr().setFRFont(FRFont.getInstance("Microsoft YaHei", Font.PLAIN, 10f, new Color(138, 140, 139))); |
||||
|
||||
//值轴
|
||||
Axis valueAxis = plot.getyAxis(); |
||||
valueAxis.setAxisStyle(Constants.NONE); |
||||
valueAxis.setAxisColor(null); |
||||
valueAxis.setTickMarkType(Constants.TICK_MARK_INSIDE); |
||||
valueAxis.setSecTickMarkType(Constants.TICK_MARK_NONE); |
||||
valueAxis.setShowAxisLabel(true); |
||||
valueAxis.getTextAttr().setFRFont(FRFont.getInstance("SimSun", Font.PLAIN, 10f, new Color(138, 140, 139))); |
||||
|
||||
//绘图区
|
||||
plot.setBorderStyle(Constants.LINE_THIN); |
||||
plot.setBorderColor(new Color(204, 220, 228)); |
||||
plot.setBackground(ColorBackground.getInstance(new Color(248, 247, 245))); |
||||
plot.getyAxis().setMainGridStyle(Constants.LINE_THIN); |
||||
plot.getyAxis().setMainGridColor(new Color(192, 192, 192)); |
||||
} |
||||
|
||||
} |
||||
} |
||||
|
||||
//平面3D的默认属性设置
|
||||
private void createCondition4Plane3D(Chart chart) { |
||||
if (chart != null) { |
||||
//标题
|
||||
Title title = new Title(chart.getTitle().getTextObject()); |
||||
chart.setTitle(title); |
||||
title.setTitleVisible(true); |
||||
TextAttr textAttr = title.getTextAttr(); |
||||
if (textAttr == null) { |
||||
textAttr = new TextAttr(); |
||||
title.setTextAttr(textAttr); |
||||
} |
||||
title.setPosition(Constants.CENTER); |
||||
textAttr.setFRFont(FRFont.getInstance("Microsoft YaHei", Font.PLAIN, 16f, new Color(51, 51, 51))); |
||||
|
||||
//图例
|
||||
Legend legend = new Legend(); |
||||
legend.setFRFont(FRFont.getInstance("SimSun", Font.PLAIN, 9f, new Color(128, 128, 128))); |
||||
legend.setPosition(Constants.TOP); |
||||
chart.getPlot().setLegend(legend); |
||||
|
||||
//分类轴,现在只有柱形图,条形图,面积图
|
||||
if (chart.getPlot() instanceof CategoryPlot) { |
||||
CategoryPlot plot = (CategoryPlot) chart.getPlot(); |
||||
//分类轴设置
|
||||
Axis cateAxis = plot.getxAxis(); |
||||
cateAxis.setAxisStyle(Constants.LINE_THICK); |
||||
cateAxis.setAxisColor(new Color(57, 57, 57)); |
||||
cateAxis.setTickMarkType(Constants.TICK_MARK_NONE); |
||||
cateAxis.setSecTickMarkType(Constants.TICK_MARK_NONE); |
||||
cateAxis.setShowAxisLabel(true); |
||||
cateAxis.getTextAttr().setFRFont(FRFont.getInstance("Microsoft YaHei", Font.PLAIN, 10f, new Color(57, 57, 57))); |
||||
|
||||
//值轴设置
|
||||
Axis valueAxis = plot.getyAxis(); |
||||
valueAxis.setAxisStyle(Constants.LINE_NONE); |
||||
valueAxis.setTickMarkType(Constants.TICK_MARK_NONE); |
||||
valueAxis.setSecTickMarkType(Constants.TICK_MARK_NONE); |
||||
valueAxis.setShowAxisLabel(false); |
||||
|
||||
//绘图区
|
||||
plot.getyAxis().setMainGridStyle(Constants.LINE_THIN); |
||||
plot.getyAxis().setMainGridColor(new Color(192, 192, 192)); |
||||
chart.setBorderStyle(Constants.LINE_NONE); |
||||
|
||||
//数据标签
|
||||
ConditionAttr attrList = plot.getConditionCollection().getDefaultAttr(); |
||||
DataSeriesCondition attr = attrList.getExisted(AttrContents.class); |
||||
if (attr != null) { |
||||
attrList.remove(attr); |
||||
} |
||||
AttrContents attrContents = new AttrContents(); |
||||
attrContents.setPosition(Constants.OUTSIDE); |
||||
attrContents.setSeriesLabel(ChartConstants.VALUE_PARA); |
||||
attrContents.setTextAttr(new TextAttr(FRFont.getInstance("SimSun", Font.PLAIN, 9f, new Color(51, 51, 51)))); |
||||
attrList.addDataSeriesCondition(attrContents); |
||||
} |
||||
} |
||||
} |
||||
|
||||
//透明风格的默认属性设置
|
||||
private void createCondition4Transparent(Chart chart) { |
||||
if (chart != null) { |
||||
//标题
|
||||
Title title = new Title(chart.getTitle().getTextObject()); |
||||
chart.setTitle(title); |
||||
title.setTitleVisible(true); |
||||
TextAttr textAttr = title.getTextAttr(); |
||||
if (textAttr == null) { |
||||
textAttr = new TextAttr(); |
||||
title.setTextAttr(textAttr); |
||||
} |
||||
title.setPosition(Constants.LEFT); |
||||
textAttr.setFRFont(FRFont.getInstance("Microsoft YaHei", Font.BOLD, 16f, new Color(192, 192, 192))); |
||||
|
||||
//图例
|
||||
Legend legend = new Legend(); |
||||
legend.setFRFont(FRFont.getInstance("SimSun", Font.PLAIN, 9f, new Color(138, 140, 139))); |
||||
legend.setPosition(Constants.RIGHT_TOP); |
||||
chart.getPlot().setLegend(legend); |
||||
|
||||
Plot plot = chart.getPlot(); |
||||
//绘图区
|
||||
chart.setBackground(ColorBackground.getInstance(new Color(51, 51, 51))); |
||||
|
||||
//分类轴,现在只有柱形图,条形图,面积图
|
||||
if (plot instanceof CategoryPlot) { |
||||
//边框
|
||||
plot.setBorderStyle(Constants.LINE_THIN); |
||||
plot.setBorderColor(new Color(65, 65, 65)); |
||||
|
||||
//分类轴设置
|
||||
Axis cateAxis = plot.getxAxis(); |
||||
cateAxis.setAxisStyle(Constants.LINE_THICK); |
||||
cateAxis.setAxisColor(new Color(192, 192, 192)); |
||||
cateAxis.setTickMarkType(Constants.TICK_MARK_NONE); |
||||
cateAxis.setSecTickMarkType(Constants.TICK_MARK_NONE); |
||||
cateAxis.setShowAxisLabel(true); |
||||
cateAxis.getTextAttr().setFRFont(FRFont.getInstance("Microsoft YaHei", Font.PLAIN, 10f, new Color(150, 150, 150))); |
||||
|
||||
//值轴
|
||||
Axis valueAxis = plot.getyAxis(); |
||||
valueAxis.setShowAxisLabel(true); |
||||
valueAxis.setAxisStyle(Constants.LINE_NONE); |
||||
valueAxis.getTextAttr().setFRFont(FRFont.getInstance("SimSun", Font.PLAIN, 10f, new Color(150, 150, 150))); |
||||
valueAxis.setMainGridStyle(Constants.LINE_THIN); |
||||
valueAxis.setMainGridColor(new Color(63, 62, 62)); |
||||
} |
||||
} |
||||
} |
||||
|
||||
//渐变的默认属性设置
|
||||
private void createCondition4Shade(Chart chart) { |
||||
if (chart != null) { |
||||
//标题
|
||||
Title title = new Title(chart.getTitle().getTextObject()); |
||||
chart.setTitle(title); |
||||
title.setTitleVisible(true); |
||||
TextAttr textAttr = title.getTextAttr(); |
||||
if (textAttr == null) { |
||||
textAttr = new TextAttr(); |
||||
title.setTextAttr(textAttr); |
||||
} |
||||
title.setPosition(Constants.CENTER); |
||||
textAttr.setFRFont(FRFont.getInstance("Microsoft YaHei", Font.BOLD, 16f, new Color(0, 51, 102))); |
||||
|
||||
//图例
|
||||
Legend legend = new Legend(); |
||||
legend.setFRFont(FRFont.getInstance("SimSun", Font.PLAIN, 9f, new Color(128, 128, 128))); |
||||
legend.setPosition(Constants.BOTTOM); |
||||
chart.getPlot().setLegend(legend); |
||||
|
||||
//分类轴,现在只有柱形图,条形图,面积图
|
||||
if (chart.getPlot() instanceof CategoryPlot) { |
||||
CategoryPlot plot = (CategoryPlot) chart.getPlot(); |
||||
|
||||
//分类轴设置
|
||||
Axis cateAxis = plot.getxAxis(); |
||||
cateAxis.setAxisStyle(Constants.LINE_THICK); |
||||
cateAxis.setAxisColor(new Color(73, 100, 117)); |
||||
cateAxis.setTickMarkType(Constants.TICK_MARK_NONE); |
||||
cateAxis.setSecTickMarkType(Constants.TICK_MARK_NONE); |
||||
cateAxis.setShowAxisLabel(true); |
||||
cateAxis.getTextAttr().setFRFont(FRFont.getInstance("Microsoft YaHei", Font.PLAIN, 10f, new Color(128, 128, 128))); |
||||
|
||||
//值轴
|
||||
Axis valueAxis = plot.getyAxis(); |
||||
valueAxis.setShowAxisLabel(true); |
||||
valueAxis.getTextAttr().setFRFont(FRFont.getInstance("SimSun", Font.PLAIN, 10f, new Color(128, 128, 128))); |
||||
valueAxis.setAxisStyle(Constants.LINE_NONE); |
||||
|
||||
//绘图区
|
||||
plot.getyAxis().setMainGridStyle(Constants.LINE_THIN); |
||||
plot.getyAxis().setMainGridColor(new Color(192, 192, 192)); |
||||
plot.setHorizontalIntervalBackgroundColor(new Color(243, 243, 243)); |
||||
} |
||||
} |
||||
} |
||||
|
||||
private void setPlotFillStyle(Chart chart) { |
||||
ChartPreStyleManagerProvider manager = ChartPreStyleServerManager.getProviderInstance(); |
||||
Plot plot = chart.getPlot(); |
||||
Object preStyle = null; |
||||
String name = ""; |
||||
if (topDownShade.isSelected()) { |
||||
name = Inter.getLocText("FR-Chart-Style_Retro"); |
||||
preStyle = manager.getPreStyle(name); |
||||
} else if (transparent.isSelected()) { |
||||
name = Inter.getLocText("FR-Chart-Style_Fresh"); |
||||
preStyle = manager.getPreStyle(name); |
||||
} else if (plane3D.isSelected()) { |
||||
name = Inter.getLocText("FR-Chart-Style_Bright"); |
||||
preStyle = manager.getPreStyle(name); |
||||
} else if (gradient.isSelected()) { |
||||
name = Inter.getLocText("FR-Chart-Style_Bright"); |
||||
preStyle = manager.getPreStyle(name); |
||||
}else{ |
||||
preStyle = null; |
||||
} |
||||
if (preStyle == null) { |
||||
plot.getPlotFillStyle().setColorStyle(ChartConstants.COLOR_DEFAULT); |
||||
} else { |
||||
AttrFillStyle fillStyle = ((ChartPreStyle) preStyle).getAttrFillStyle(); |
||||
fillStyle.setFillStyleName(name); |
||||
plot.setPlotFillStyle(fillStyle); |
||||
} |
||||
|
||||
} |
||||
|
||||
public void populate(){ |
||||
ChartCollection chartCollection = (ChartCollection) chartDesigner.getTarget().getChartCollection(); |
||||
Chart chart = chartCollection.getSelectedChart(); |
||||
chooseComboBox.removeItemListener(itemListener); |
||||
chooseComboBox.setSelectedIndex(chart.getPlot().getPlotType().toInt()); |
||||
int chartType =chart.getPlot().getPlotType().toInt(); |
||||
this.removeAll(); |
||||
populateStyle(); |
||||
this.add(plotTypeComboBoxPane, BorderLayout.WEST); |
||||
initStylePane(); |
||||
if(chartType < ChartTypeValueCollection.MAP.toInt()){ |
||||
calSubChartTypesPane(chartType); |
||||
subChartTypesPane.setSelectedIndex(chart.getPlot().getDetailType()); |
||||
ChartToolBarPane.this.add(subChartTypesPane, BorderLayout.CENTER); |
||||
this.add(subChartTypesPane, BorderLayout.CENTER); |
||||
centerPane = subChartTypesPane; |
||||
this.add(stylePane, BorderLayout.EAST); |
||||
}else if(chartType == ChartTypeValueCollection.MAP.toInt()){ |
||||
calMapSubChartTypesPane(chartType); |
||||
mapTypePane.populateMapPane(((MapPlot) chart.getPlot()).getMapName()); |
||||
ChartToolBarPane.this.add(mapTypePane, BorderLayout.CENTER); |
||||
centerPane = mapTypePane; |
||||
}else{ |
||||
calMapSubChartTypesPane(chartType); |
||||
mapTypePane.populateMapPane((chart.getPlot()).getPlotName()); |
||||
ChartToolBarPane.this.add(mapTypePane, BorderLayout.CENTER); |
||||
centerPane = mapTypePane; |
||||
} |
||||
ChartToolBarPane.this.validate(); |
||||
chooseComboBox.addItemListener(itemListener); |
||||
} |
||||
|
||||
|
||||
|
||||
private void populateStyle() { |
||||
clearStyleChoose(); |
||||
ChartCollection chartCollection = (ChartCollection) chartDesigner.getTarget().getChartCollection(); |
||||
Chart chart = chartCollection.getSelectedChart(); |
||||
int plotStyle = chart.getPlot().getPlotStyle(); |
||||
switch (plotStyle) { |
||||
case ChartConstants.STYLE_SHADE: |
||||
topDownShade.setSelected(chart.isStyleGlobal() && true); |
||||
break; |
||||
case ChartConstants.STYLE_TRANSPARENT: |
||||
transparent.setSelected(chart.isStyleGlobal() && true); |
||||
break; |
||||
case ChartConstants.STYLE_3D: |
||||
plane3D.setSelected(chart.isStyleGlobal() && true); |
||||
break; |
||||
case ChartConstants.STYLE_OUTER: |
||||
gradient.setSelected(chart.isStyleGlobal() && true); |
||||
break; |
||||
default: |
||||
clearStyleChoose(); |
||||
break; |
||||
} |
||||
lastStyleIndex = plotStyle; |
||||
} |
||||
|
||||
|
||||
} |
@ -1,98 +0,0 @@
|
||||
package com.fr.design.mainframe; |
||||
|
||||
import com.fr.design.ChartEnvManager; |
||||
import com.fr.design.dialog.BasicDialog; |
||||
import com.fr.design.mainframe.actions.UpdateVersion; |
||||
import com.fr.design.mainframe.chart.UpdateOnLinePane; |
||||
import com.fr.design.mainframe.toolbar.ToolBarMenuDock; |
||||
import com.fr.general.ComparatorUtils; |
||||
import com.fr.general.FRLogger; |
||||
import com.fr.json.JSONObject; |
||||
import com.fr.stable.ProductConstants; |
||||
import com.fr.stable.StableUtils; |
||||
|
||||
import java.awt.event.WindowAdapter; |
||||
import java.awt.event.WindowEvent; |
||||
import java.awt.event.WindowListener; |
||||
import java.util.ArrayList; |
||||
|
||||
/** |
||||
* Created by IntelliJ IDEA. |
||||
* Author : daisy |
||||
* Version: 7.1.1 |
||||
*/ |
||||
public class DesignerFrame4Chart extends DesignerFrame { |
||||
|
||||
/** |
||||
* Constructor. |
||||
* |
||||
* @param ad |
||||
*/ |
||||
public DesignerFrame4Chart(ToolBarMenuDock ad) { |
||||
super(ad); |
||||
} |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
protected ArrayList<WindowListener> getFrameListeners(){ |
||||
ArrayList<WindowListener> listeners = super.getFrameListeners(); |
||||
listeners.add(0, new WindowAdapter() { |
||||
@Override |
||||
public void windowOpened(WindowEvent e) { |
||||
super.windowOpened(e); |
||||
judgeFirstUseWhenStart(); |
||||
} |
||||
}); |
||||
return listeners; |
||||
} |
||||
|
||||
/** |
||||
* 退出 |
||||
*/ |
||||
public void exit() { |
||||
ChartEnvManager.getEnvManager().saveXMLFile(); |
||||
super.exit(); |
||||
} |
||||
|
||||
//不需要西侧的文件树面板
|
||||
protected void laoyoutWestPane(){ |
||||
|
||||
} |
||||
|
||||
protected void judgeFirstUseWhenStart(){ |
||||
boolean isNeed2Check =ChartEnvManager.getEnvManager().isPushUpdateAuto() || ChartEnvManager.getEnvManager().isOverOneMonth(); |
||||
if(!StableUtils.checkDesignerActive(ChartEnvManager.getEnvManager().getActivationKey()) |
||||
|| isNeed2Check){ |
||||
ChartEnvManager.getEnvManager().setActivationKey(ChartEnvManager.ACTIVE_KEY); |
||||
checkVersion(); |
||||
if(ChartEnvManager.getEnvManager().isOverOneMonth()){ |
||||
ChartEnvManager.getEnvManager().resetCheckDate(); |
||||
} |
||||
} |
||||
} |
||||
|
||||
private void checkVersion(){ |
||||
|
||||
new UpdateVersion(){ |
||||
protected void done() { |
||||
try { |
||||
JSONObject serverVersion = get(); |
||||
String version = serverVersion.getString(UpdateVersion.VERSION); |
||||
if(!ComparatorUtils.equals(ProductConstants.RELEASE_VERSION, version)){ |
||||
UpdateOnLinePane updateOnLinePane = new UpdateOnLinePane(version); |
||||
BasicDialog dg = updateOnLinePane.showWindow4UpdateOnline(DesignerContext.getDesignerFrame()); |
||||
updateOnLinePane.setParentDialog(dg); |
||||
dg.setVisible(true); |
||||
} |
||||
}catch (Exception e){ |
||||
FRLogger.getLogger().error(e.getMessage()); |
||||
} |
||||
} |
||||
}.execute(); |
||||
} |
||||
|
||||
|
||||
|
||||
} |
@ -1,203 +0,0 @@
|
||||
package com.fr.design.mainframe; |
||||
import com.fr.chart.base.ChartConstants; |
||||
import com.fr.chart.chartattr.*; |
||||
import com.fr.chart.charttypes.GisMapIndependentChart; |
||||
import com.fr.design.gui.ilable.UILabel; |
||||
import com.fr.design.gui.itextfield.UITextField; |
||||
import com.fr.design.layout.TableLayout; |
||||
import com.fr.design.layout.TableLayoutHelper; |
||||
import com.fr.general.FRLogger; |
||||
import com.fr.general.Inter; |
||||
|
||||
import javax.swing.*; |
||||
import javax.swing.event.DocumentEvent; |
||||
import javax.swing.event.DocumentListener; |
||||
import java.awt.*; |
||||
|
||||
/** |
||||
* Created by IntelliJ IDEA. |
||||
* Author : daisy |
||||
* Version: 7.1.1 |
||||
* Date: 14/12/1 |
||||
* Time: 下午3:11 |
||||
*/ |
||||
public class GisMapPlotPane4ToolBar extends AbstractMapPlotPane4ToolBar { |
||||
private static final int BAIDU = 0; |
||||
private static final int GOOGLE= 1; |
||||
|
||||
|
||||
private static final String[] TYPE_NAMES = new String[]{ |
||||
Inter.getLocText("FR-Chart-Map_Baidu"), |
||||
Inter.getLocText("FR-Chart-Map_Google")}; |
||||
|
||||
|
||||
private UITextField keyField = new UITextField(){ |
||||
public Dimension getPreferredSize() { |
||||
return new Dimension(COMBOX_WIDTH, COM_HEIGHT); |
||||
} |
||||
}; |
||||
|
||||
private DocumentListener keyListener = new DocumentListener() { |
||||
@Override |
||||
public void insertUpdate(DocumentEvent e) { |
||||
fireKeyChange(); |
||||
} |
||||
|
||||
@Override |
||||
public void removeUpdate(DocumentEvent e) { |
||||
fireKeyChange(); |
||||
} |
||||
|
||||
@Override |
||||
public void changedUpdate(DocumentEvent e) { |
||||
fireKeyChange(); |
||||
} |
||||
} ; |
||||
|
||||
private void fireKeyChange(){ |
||||
ChartCollection chartCollection = (ChartCollection)chartDesigner.getTarget().getChartCollection(); |
||||
Chart chart =chartCollection.getSelectedChart(); |
||||
GisMapPlot plot =(GisMapPlot) chart.getPlot(); |
||||
String key = this.keyField.getText().trim(); |
||||
if(plot.isGisType() && key != plot.getBaiduKey()){ |
||||
plot.setBaiduKey(key); |
||||
}else if(!plot.isGisType() && key != plot.getGoogleKey()){ |
||||
plot.setGoogleKey(key); |
||||
} |
||||
chartDesigner.fireTargetModified(); |
||||
} |
||||
|
||||
public GisMapPlotPane4ToolBar(final ChartDesigner chartDesigner){ |
||||
super(chartDesigner); |
||||
this.add(getKeyPane()); |
||||
keyField.getDocument().addDocumentListener(keyListener); |
||||
} |
||||
|
||||
private JPanel getKeyPane(){ |
||||
double p = TableLayout.PREFERRED; |
||||
double f = TableLayout.FILL; |
||||
double[] columnSize = {p,f}; |
||||
double[] rowSize = {p}; |
||||
Component[][] components = new Component[][]{ |
||||
new Component[]{new UILabel("key"),keyField}, |
||||
}; |
||||
return TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize); |
||||
} |
||||
|
||||
|
||||
protected void calculateDetailMaps(int mapType){ |
||||
switch (mapType) { |
||||
case BAIDU: |
||||
populateDetilMaps(Inter.getLocText("FR-Chart-Map_Baidu")); |
||||
break; |
||||
case GOOGLE: |
||||
populateDetilMaps(Inter.getLocText("FR-Chart-Map_Google")); |
||||
break; |
||||
default: |
||||
populateDetilMaps(Inter.getLocText("FR-Chart-Map_Baidu")); |
||||
} |
||||
fireMapChange(); |
||||
|
||||
} |
||||
|
||||
/** |
||||
* 更新地图面板 |
||||
* @param mapType 地图名字 |
||||
*/ |
||||
public void populateMapPane(String mapType){ |
||||
super.populateMapPane(mapType); |
||||
populateDetilMaps(mapTypeComboBox.getSelectedItem().toString()); |
||||
} |
||||
|
||||
protected void populateDetilMaps(String mapType){ |
||||
mapTypeComboBox.removeItemListener(mapTypeListener); |
||||
ChartCollection chartCollection = (ChartCollection)chartDesigner.getTarget().getChartCollection(); |
||||
Chart chart =chartCollection.getSelectedChart(); |
||||
GisMapPlot plot = (GisMapPlot) chart.getPlot(); |
||||
keyField.getDocument().removeDocumentListener(keyListener); |
||||
if(plot.isGisType()){ |
||||
keyField.setText(plot.getBaiduKey()); |
||||
mapTypeComboBox.setSelectedIndex(0); |
||||
}else{ |
||||
keyField.setText(plot.getGoogleKey()); |
||||
mapTypeComboBox.setSelectedIndex(1); |
||||
} |
||||
keyField.getDocument().addDocumentListener(keyListener); |
||||
mapTypeComboBox.addItemListener(mapTypeListener); |
||||
} |
||||
|
||||
private void fireMapChange(){ |
||||
ChartCollection chartCollection = (ChartCollection)chartDesigner.getTarget().getChartCollection(); |
||||
Chart chart =chartCollection.getSelectedChart(); |
||||
if(chart.getPlot().getPlotStyle() != ChartConstants.STYLE_NONE){ |
||||
resetChart(chart); |
||||
} |
||||
|
||||
Chart[] cs = GisMapIndependentChart.gisChartTypes; |
||||
GisMapPlot plot; |
||||
if (cs.length > 0) { |
||||
try { |
||||
plot = (GisMapPlot)cs[0].getPlot().clone(); |
||||
} catch (Exception e) { |
||||
plot = new GisMapPlot(); |
||||
} |
||||
} else { |
||||
plot = new GisMapPlot(); |
||||
} |
||||
|
||||
try { |
||||
chart.switchPlot((Plot)plot.clone()); |
||||
} catch (CloneNotSupportedException e) { |
||||
FRLogger.getLogger().error("Error In GisChart"); |
||||
chart.switchPlot(new GisMapPlot()); |
||||
} |
||||
|
||||
plot = (GisMapPlot) chart.getPlot(); |
||||
boolean index = plot.isGisType(); |
||||
plot.setGisType(mapTypeComboBox.getSelectedIndex() == 1); |
||||
|
||||
if(index != plot.isGisType()){ |
||||
if(plot.isGisType()){ |
||||
this.keyField.setText(plot.getBaiduKey()); |
||||
}else{ |
||||
this.keyField.setText(plot.getGoogleKey()); |
||||
} |
||||
}else{ |
||||
String key = this.keyField.getText().trim(); |
||||
if(plot.isGisType() && key != plot.getBaiduKey()){ |
||||
plot.setBaiduKey(key); |
||||
}else if(!plot.isGisType() && key != plot.getGoogleKey()){ |
||||
plot.setGoogleKey(key); |
||||
} |
||||
} |
||||
chartDesigner.fireTargetModified(); |
||||
} |
||||
|
||||
protected Plot getSelectedClonedPlot() { |
||||
Chart[] mapChart = GisMapIndependentChart.gisChartTypes; |
||||
GisMapPlot newPlot; |
||||
if (mapChart.length > 0) { |
||||
try { |
||||
newPlot = (GisMapPlot)mapChart[0].getPlot().clone(); |
||||
} catch (Exception e) { |
||||
newPlot = new GisMapPlot(); |
||||
} |
||||
} else { |
||||
newPlot = new GisMapPlot(); |
||||
} |
||||
|
||||
Plot cloned = null; |
||||
try { |
||||
cloned = (Plot) newPlot.clone(); |
||||
} catch (CloneNotSupportedException e) { |
||||
FRLogger.getLogger().error("Error In GisMapChart"); |
||||
} |
||||
return cloned; |
||||
} |
||||
|
||||
public String[] getMapTypes(){ |
||||
return TYPE_NAMES; |
||||
} |
||||
|
||||
|
||||
} |
@ -1,339 +0,0 @@
|
||||
package com.fr.design.mainframe; |
||||
|
||||
import com.fr.chart.base.MapSvgAttr; |
||||
import com.fr.chart.base.MapSvgXMLHelper; |
||||
import com.fr.design.DesignerEnvManager; |
||||
import com.fr.design.beans.BasicBeanPane; |
||||
import com.fr.design.gui.controlpane.*; |
||||
import com.fr.design.gui.icombobox.UIComboBox; |
||||
import com.fr.design.gui.ilist.JNameEdList; |
||||
import com.fr.design.gui.ilist.ListModelElement; |
||||
import com.fr.general.ComparatorUtils; |
||||
import com.fr.general.FRLogger; |
||||
import com.fr.general.Inter; |
||||
import com.fr.stable.CoreConstants; |
||||
import com.fr.stable.Nameable; |
||||
import com.fr.stable.StringUtils; |
||||
import com.fr.stable.core.PropertyChangeAdapter; |
||||
|
||||
import javax.swing.*; |
||||
import javax.swing.border.EmptyBorder; |
||||
import java.awt.*; |
||||
import java.awt.event.ItemEvent; |
||||
import java.awt.event.ItemListener; |
||||
import java.util.ArrayList; |
||||
import java.util.Arrays; |
||||
import java.util.List; |
||||
|
||||
/** |
||||
* Created by IntelliJ IDEA. |
||||
* Author : daisy |
||||
* Version: 7.1.1 |
||||
* Date: 14/12/3 |
||||
* Time: 上午10:00 |
||||
*/ |
||||
public class MapArrayPane extends JListControlPane { |
||||
private static final int LEFT_WIDTH = 180; |
||||
private static final Color LINE_COLOR = new Color(176, 176, 176); |
||||
private static final int TOP_GAP = 5; |
||||
|
||||
private static final String[] TYPE_NAMES = new String[]{ |
||||
Inter.getLocText("FR-Chart-World_Map"), |
||||
Inter.getLocText("FR-Chart-State_Map"), |
||||
Inter.getLocText("FR-Chart-Province_Map"), |
||||
Inter.getLocText("FR-Chart-Custom_Map")}; |
||||
|
||||
private String mapType; |
||||
private String mapDetailName; |
||||
|
||||
MapPlotPane4ToolBar toolBar; |
||||
UIComboBox mapTypeBox; |
||||
private ArrayList<String> editedNames = new ArrayList<String>(); |
||||
|
||||
private ItemListener typeListener = new ItemListener() { |
||||
@Override |
||||
public void itemStateChanged(ItemEvent e) { |
||||
MapArrayPane.this.updateBeans(); |
||||
mapType = mapTypeBox.getSelectedItem().toString(); |
||||
MapArrayPane.this.populate(MapSvgXMLHelper.getInstance().getAllMapObjects4Cate(mapType)); |
||||
} |
||||
}; |
||||
|
||||
|
||||
private ArrayList<String> removeNames = new ArrayList<String>(); |
||||
private MapEditPane mapEditPane; |
||||
private ChartDesigner chartDesigner; |
||||
|
||||
public MapArrayPane(String mapType, String mapDetailName,ChartDesigner chartDesigner) { |
||||
this.mapDetailName = mapDetailName; |
||||
this.mapType = mapType; |
||||
if (mapTypeBox != null) { |
||||
mapTypeBox.setSelectedItem(mapType); |
||||
} |
||||
this.chartDesigner = chartDesigner; |
||||
mapTypeBox.addItemListener(typeListener); |
||||
this.setBorder(new EmptyBorder(TOP_GAP, 0, 0, 0)); |
||||
this.addEditingListner(new PropertyChangeAdapter() { |
||||
public void propertyChange() { |
||||
dealPropertyChange(); |
||||
} |
||||
}); |
||||
} |
||||
|
||||
public void setToolBarPane(MapPlotPane4ToolBar pane) { |
||||
this.toolBar = pane; |
||||
} |
||||
|
||||
protected void doWhenPopulate(BasicBeanPane beanPane) { |
||||
mapEditPane = (MapEditPane)beanPane; |
||||
mapEditPane.dealWidthMap(mapType); |
||||
String editingName = ((MapEditPane)beanPane).getCurrentMapName(); |
||||
if(!editedNames.contains(editingName)){ |
||||
editedNames.add(editingName); |
||||
} |
||||
} |
||||
|
||||
protected JPanel getLeftPane() { |
||||
JPanel centerPane = super.getLeftPane(); |
||||
mapTypeBox = new UIComboBox(TYPE_NAMES); |
||||
JPanel leftPane = new JPanel(); |
||||
leftPane.setLayout(new BorderLayout()); |
||||
leftPane.setBorder(new EmptyBorder(3, 0, 0, 0)); |
||||
leftPane.add(mapTypeBox, BorderLayout.NORTH); |
||||
leftPane.add(centerPane, BorderLayout.CENTER); |
||||
return leftPane; |
||||
} |
||||
|
||||
|
||||
private void dealPropertyChange() { |
||||
MapSvgXMLHelper helper = MapSvgXMLHelper.getInstance(); |
||||
java.util.List nameList =helper.getNamesListWithCateName(mapType); |
||||
String[] allListNames = nameableList.getAllNames(); |
||||
allListNames[nameableList.getSelectedIndex()] = StringUtils.EMPTY; |
||||
String tempName = getEditingName(); |
||||
if (StringUtils.isEmpty(tempName)) { |
||||
String[] warning = new String[]{"NOT_NULL_Des", "Please_Rename"}; |
||||
String[] sign = new String[]{",", "!"}; |
||||
nameableList.stopEditing(); |
||||
JOptionPane.showMessageDialog(SwingUtilities.getWindowAncestor(MapArrayPane.this), Inter.getLocText(warning, sign)); |
||||
setWarnigText(editingIndex); |
||||
return; |
||||
} |
||||
if (!ComparatorUtils.equals(tempName, selectedName) |
||||
&& isNameRepeted(new List[]{nameList, Arrays.asList(allListNames)}, tempName)) { |
||||
nameableList.stopEditing(); |
||||
JOptionPane.showMessageDialog(SwingUtilities.getWindowAncestor(MapArrayPane.this), |
||||
Inter.getLocText(new String[]{"FR-Chart-Map_NameAlreadyExist", "Please_Rename"}, new String[]{",", "!"})); |
||||
setWarnigText(editingIndex); |
||||
return; |
||||
} |
||||
String oldname = mapEditPane.getCurrentMapName(); |
||||
mapEditPane.setCurrentMapName(tempName); |
||||
mapEditPane.dealWidthMap(mapType); |
||||
if(editedNames.contains(oldname)){ |
||||
editedNames.remove(oldname); |
||||
editedNames.add(tempName); |
||||
} |
||||
if(helper.getNewMapAttr(oldname) != null){ |
||||
MapSvgAttr attr = helper.getNewMapAttr(oldname); |
||||
attr.renameMap(tempName); |
||||
helper.removeNewMapAttr(oldname); |
||||
helper.addNewSvgMaps(tempName,attr); |
||||
} |
||||
this.toolBar.fireTargetModified(); |
||||
this.saveMapInfo(tempName); |
||||
} |
||||
|
||||
protected void doAfterRemove(){ |
||||
for(String map2Remove : removeNames){ |
||||
MapSvgXMLHelper.getInstance().removeMapAttr(map2Remove); |
||||
MapSvgXMLHelper.getInstance().removeNewMapAttr(map2Remove); |
||||
} |
||||
update4AllType(); |
||||
} |
||||
|
||||
protected void doBeforeRemove(){ |
||||
removeNames.clear(); |
||||
for(int index : nameableList.getSelectedIndices()){ |
||||
removeNames.add(nameableList.getNameAt(index)); |
||||
} |
||||
} |
||||
|
||||
//保存修改过的地图信息
|
||||
private void saveMapInfo(final String mapName) { |
||||
SwingWorker worker = new SwingWorker<Integer, Void>() { |
||||
@Override |
||||
protected Integer doInBackground() throws Exception { |
||||
MapSvgAttr attr = MapSvgXMLHelper.getInstance().getMapAttr(mapName);// 只有在编辑地图时才需要储存相关数据 @kuns
|
||||
if (attr != null) { |
||||
attr.writeBack(mapName); |
||||
} |
||||
return 0; |
||||
} |
||||
|
||||
@Override |
||||
protected void done() { |
||||
FRLogger.getLogger().info(Inter.getLocText("FR-Chart-Map_Saved")); // 地图已经保存.
|
||||
} |
||||
|
||||
}; |
||||
worker.execute(); |
||||
DesignerEnvManager.addWorkers(worker); |
||||
} |
||||
|
||||
private void update4AllType() { |
||||
MapSvgXMLHelper helper = MapSvgXMLHelper.getInstance(); |
||||
helper.clearNames4Cate(mapType); |
||||
for(String name : nameableList.getAllNames()){ |
||||
MapSvgAttr attr = helper.getMapAttr(name); |
||||
if(attr == null){ |
||||
continue; |
||||
} |
||||
helper.addCateNames(attr.getMapType(),attr.getName()); |
||||
} |
||||
} |
||||
|
||||
|
||||
/** |
||||
* 创建菜单 |
||||
* |
||||
* @return 菜单 |
||||
*/ |
||||
public NameableCreator[] createNameableCreators() { |
||||
return new NameableCreator[]{ |
||||
new NameableSelfCreator(Inter.getLocText("FR-Chart-Custom_Map"), MapSvgAttr.class, MapEditPane.class) { |
||||
public MapSvgAttr createNameable(UnrepeatedNameHelper helper) { |
||||
MapSvgAttr attr = new MapSvgAttr(); |
||||
attr.setFilePath(MapSvgXMLHelper.customMapPath() + CoreConstants.SEPARATOR + helper.createUnrepeatedName(Inter.getLocText("FR-Chart-Custom_Map")) + ".svg"); |
||||
MapSvgXMLHelper.getInstance().addNewSvgMaps(attr.getName(), attr); |
||||
update4Edited(attr.getName()); |
||||
// 返回参数设置面板.
|
||||
return attr; |
||||
} |
||||
|
||||
@Override |
||||
public String createTooltip() { |
||||
return null; |
||||
} |
||||
|
||||
public void saveUpdatedBean(ListModelElement wrapper, Object bean) { |
||||
wrapper.wrapper = (Nameable)bean; |
||||
} |
||||
} |
||||
}; |
||||
} |
||||
|
||||
protected boolean isCreatorNeedIocn() { |
||||
return false; |
||||
} |
||||
|
||||
protected ShortCut4JControlPane[] createShortcuts() { |
||||
return new ShortCut4JControlPane[]{ |
||||
addItemShortCut(), |
||||
removeItemShortCut(), |
||||
}; |
||||
} |
||||
|
||||
protected int getLeftPreferredSize() { |
||||
return LEFT_WIDTH; |
||||
} |
||||
|
||||
|
||||
@Override |
||||
protected String title4PopupWindow() { |
||||
return Inter.getLocText(new String[]{"FR-Chart-Map_Map", "FR-Chart-Data_Edit"}); |
||||
} |
||||
|
||||
/** |
||||
* 更新 |
||||
*/ |
||||
public void updateBeans() { |
||||
super.update(); |
||||
this.update4AllType(); |
||||
this.updateAllEditedAttrMaps(); |
||||
MapSvgXMLHelper.getInstance().clearTempAttrMaps(); |
||||
//versionID递增
|
||||
this.toolBar.fireTargetModified(); |
||||
this.saveMapInfo(selectedName); |
||||
} |
||||
|
||||
/** |
||||
* 创建list |
||||
* @return 返回list |
||||
*/ |
||||
public JNameEdList createJNameList() { |
||||
JNameEdList nameEdList = new JNameEdList(new DefaultListModel()) { |
||||
|
||||
public Rectangle createRect(Rectangle rect, int iconWidth) { |
||||
return rect; |
||||
} |
||||
|
||||
protected void doAfterLostFocus() { |
||||
MapArrayPane.this.updateControlUpdatePane(); |
||||
} |
||||
|
||||
public void setNameAt(String name, int index) { |
||||
super.setNameAt(name,index); |
||||
update4Edited(name); |
||||
} |
||||
|
||||
}; |
||||
nameEdList.setCellRenderer(new NameableListCellRenderer()); |
||||
return nameEdList; |
||||
} |
||||
|
||||
|
||||
protected void update4Edited(String editingName){ |
||||
|
||||
} |
||||
|
||||
private void updateAllEditedAttrMaps(){ |
||||
MapSvgXMLHelper helper = MapSvgXMLHelper.getInstance(); |
||||
for(String editedName : editedNames){ |
||||
if(helper.getMapAttr(editedName)!=null){ |
||||
helper.getMapAttr(editedName).writeBack(editedName); |
||||
}else if(helper.getNewMapAttr(editedName)!=null){ |
||||
helper.getNewMapAttr(editedName).writeBack(editedName); |
||||
} |
||||
} |
||||
} |
||||
|
||||
//根据地图的名字返回地图的图片
|
||||
private Image getMapImage(String mapName) { |
||||
if (MapSvgXMLHelper.getInstance().containsMapName(mapName)) { |
||||
MapSvgAttr mapAttr = MapSvgXMLHelper.getInstance().getMapAttr(mapName); |
||||
if (mapAttr == null) { |
||||
return null; |
||||
} |
||||
return mapAttr.getMapImage(); |
||||
} |
||||
|
||||
return null; |
||||
} |
||||
|
||||
/* |
||||
* Nameable的ListCellRenerer |
||||
*/ |
||||
private class NameableListCellRenderer extends |
||||
DefaultListCellRenderer { |
||||
public Component getListCellRendererComponent(JList list, Object value, |
||||
int index, boolean isSelected, boolean cellHasFocus) { |
||||
super.getListCellRendererComponent(list, value, index, isSelected, |
||||
cellHasFocus); |
||||
|
||||
if (value instanceof ListModelElement) { |
||||
Nameable wrappee = ((ListModelElement) value).wrapper; |
||||
this.setText(((ListModelElement) value).wrapper.getName()); |
||||
|
||||
for (NameableCreator creator : MapArrayPane.this.creators()) { |
||||
if (creator.menuIcon() != null && creator.acceptObject2Populate(wrappee) != null) { |
||||
this.setIcon(creator.menuIcon()); |
||||
this.setToolTipText(creator.createTooltip()); |
||||
break; |
||||
} |
||||
} |
||||
} |
||||
return this; |
||||
} |
||||
} |
||||
} |
@ -1,210 +0,0 @@
|
||||
package com.fr.design.mainframe; |
||||
|
||||
import com.fr.chart.base.MapSvgXMLHelper; |
||||
import com.fr.chart.chartattr.*; |
||||
import com.fr.design.dialog.BasicDialog; |
||||
import com.fr.design.dialog.DialogActionAdapter; |
||||
import com.fr.design.gui.ibutton.UIButton; |
||||
import com.fr.design.gui.icombobox.UIComboBox; |
||||
import com.fr.design.mainframe.chart.ChartDesignEditPane; |
||||
import com.fr.general.ComparatorUtils; |
||||
import com.fr.general.Inter; |
||||
import com.fr.stable.StringUtils; |
||||
|
||||
import java.awt.*; |
||||
import java.awt.event.ActionEvent; |
||||
import java.awt.event.ActionListener; |
||||
import java.awt.event.ItemEvent; |
||||
import java.awt.event.ItemListener; |
||||
|
||||
/** |
||||
* Created by IntelliJ IDEA. |
||||
* Author : daisy |
||||
* Version: 7.1.1 |
||||
* Date: 14/12/1 |
||||
* Time: 上午11:57 |
||||
*/ |
||||
public class MapPlotPane4ToolBar extends AbstractMapPlotPane4ToolBar{ |
||||
|
||||
private static final int WORLD_MAP = 0; |
||||
private static final int STATE_MAP = 1; |
||||
private static final int PROVINCE_MAP = 2; |
||||
private static final int CUSTOM_MAP = 3; |
||||
private static final int BUTTON_WIDTH = 44; |
||||
|
||||
|
||||
private static final String[] TYPE_NAMES = new String[]{ |
||||
Inter.getLocText("FR-Chart-World_Map"), |
||||
Inter.getLocText("FR-Chart-State_Map"), |
||||
Inter.getLocText("FR-Chart-Province_Map"), |
||||
Inter.getLocText("FR-Chart-Custom_Map")}; |
||||
|
||||
private String lastEditingName =StringUtils.EMPTY; |
||||
|
||||
private UIButton mapEditButton = new UIButton(Inter.getLocText("FR-Chart-Data_Edit")){ |
||||
public Dimension getPreferredSize() { |
||||
return new Dimension(BUTTON_WIDTH, COM_HEIGHT); |
||||
} |
||||
}; |
||||
|
||||
protected UIComboBox detailMaps = new UIComboBox(){ |
||||
public Dimension getPreferredSize() { |
||||
return new Dimension(COMBOX_WIDTH, COM_HEIGHT); |
||||
} |
||||
}; |
||||
|
||||
private ItemListener detailListener = new ItemListener() { |
||||
@Override |
||||
public void itemStateChanged(ItemEvent e) { |
||||
fireMapChange(); |
||||
} |
||||
}; |
||||
|
||||
private ActionListener mapEditListener = new ActionListener() { |
||||
@Override |
||||
public void actionPerformed(ActionEvent e) { |
||||
String selectedName =StringUtils.EMPTY; |
||||
if(detailMaps.getSelectedItem() != null){ |
||||
selectedName = detailMaps.getSelectedItem().toString(); |
||||
} |
||||
final MapArrayPane mapArrayPane = new MapArrayPane(mapTypeComboBox.getSelectedItem().toString(),selectedName,chartDesigner){ |
||||
public void updateBeans() { |
||||
super.updateBeans(); |
||||
if(reCalculateDetailsMaps(mapTypeComboBox.getSelectedItem().toString(),lastEditingName) || |
||||
ComparatorUtils.equals(StringUtils.EMPTY,lastEditingName)){ |
||||
detailMaps.setSelectedItem(lastEditingName); |
||||
ChartCollection chartCollection = (ChartCollection)chartDesigner.getTarget().getChartCollection(); |
||||
com.fr.chart.chartattr.Chart chart =chartCollection.getSelectedChart(); |
||||
if(chart.getPlot().isMapPlot()){ |
||||
MapPlot mapPlot = (MapPlot) chart.getPlot(); |
||||
mapPlot.setMapName(lastEditingName); |
||||
} |
||||
} |
||||
} |
||||
|
||||
protected void update4Edited(String editingName){ |
||||
lastEditingName = editingName; |
||||
} |
||||
}; |
||||
|
||||
BasicDialog mapArrayDialog = mapArrayPane.showWindow4ChartMapArray(DesignerContext.getDesignerFrame(), |
||||
new DialogActionAdapter() { |
||||
|
||||
@Override |
||||
public void doOk() { |
||||
mapArrayPane.updateBeans(); |
||||
} |
||||
}); |
||||
mapArrayDialog.setModal(true); |
||||
mapArrayPane.setToolBarPane(MapPlotPane4ToolBar.this); |
||||
mapArrayPane.populate(MapSvgXMLHelper.getInstance().getAllMapObjects4Cate(mapTypeComboBox.getSelectedItem().toString())); |
||||
if(detailMaps.getSelectedItem() != null){ |
||||
mapArrayPane.setSelectedName(detailMaps.getSelectedItem().toString()); |
||||
} |
||||
mapArrayDialog.setVisible(true); |
||||
} |
||||
}; |
||||
|
||||
public MapPlotPane4ToolBar(ChartDesigner chartDesigner){ |
||||
super(chartDesigner); |
||||
this.add(detailMaps); |
||||
detailMaps.addItemListener(detailListener); |
||||
mapEditButton.addActionListener(mapEditListener); |
||||
this.add(mapEditButton); |
||||
} |
||||
|
||||
/** |
||||
* 更新地图面板 |
||||
* @param mapType 地图名字 |
||||
*/ |
||||
public void populateMapPane(String mapType){ |
||||
super.populateMapPane(mapType); |
||||
populateDetilMaps(mapTypeComboBox.getSelectedItem().toString()); |
||||
detailMaps.removeItemListener(detailListener); |
||||
detailMaps.setSelectedItem(mapType); |
||||
detailMaps.addItemListener(detailListener); |
||||
} |
||||
|
||||
/** |
||||
* 触发地图改变 |
||||
*/ |
||||
public void fireMapChange(){ |
||||
MapPlot plot = new MapPlot(); |
||||
String selectedName = StringUtils.EMPTY; |
||||
if(detailMaps.getSelectedItem() !=null ){ |
||||
selectedName = detailMaps.getSelectedItem().toString(); |
||||
} |
||||
plot.setMapName(selectedName);// 名字问题
|
||||
ChartCollection chartCollection = (ChartCollection)chartDesigner.getTarget().getChartCollection(); |
||||
Chart chart =chartCollection.getSelectedChart(); |
||||
chart.setPlot(plot); |
||||
ChartDesignEditPane.getInstance().populate(chartCollection); |
||||
chartDesigner.fireTargetModified(); |
||||
} |
||||
|
||||
|
||||
|
||||
//默认选中国家地图
|
||||
protected void calculateDetailMaps(int mapType){ |
||||
switch (mapType) { |
||||
case WORLD_MAP: |
||||
populateDetilMaps(Inter.getLocText("FR-Chart-World_Map")); |
||||
break; |
||||
case STATE_MAP: |
||||
populateDetilMaps(Inter.getLocText("FR-Chart-State_Map")); |
||||
break; |
||||
case PROVINCE_MAP: |
||||
populateDetilMaps(Inter.getLocText("FR-Chart-Province_Map")); |
||||
break; |
||||
case CUSTOM_MAP: |
||||
populateDetilMaps(Inter.getLocText("FR-Chart-Custom_Map")); |
||||
break; |
||||
default: |
||||
populateDetilMaps(Inter.getLocText("FR-Chart-State_Map")); |
||||
} |
||||
fireMapChange(); |
||||
} |
||||
|
||||
private boolean reCalculateDetailsMaps(String mapType ,String detailMap){ |
||||
detailMaps.removeItemListener(detailListener); |
||||
detailMaps.removeAllItems(); |
||||
java.util.List list = MapSvgXMLHelper.getInstance().getNamesListWithCateName(mapType); |
||||
boolean isContains = false; |
||||
for (Object name : list) { |
||||
detailMaps.addItem(name); |
||||
if(ComparatorUtils.equals(detailMap,name)){ |
||||
isContains = true; |
||||
} |
||||
} |
||||
detailMaps.addItemListener(detailListener); |
||||
return isContains; |
||||
} |
||||
|
||||
|
||||
protected void populateDetilMaps(String mapType){ |
||||
detailMaps.removeItemListener(detailListener); |
||||
detailMaps.removeAllItems(); |
||||
java.util.List list = MapSvgXMLHelper.getInstance().getNamesListWithCateName(mapType); |
||||
for (Object name : list) { |
||||
detailMaps.addItem(name); |
||||
} |
||||
detailMaps.addItemListener(detailListener); |
||||
if(detailMaps.getSelectedItem() != null){ |
||||
lastEditingName = detailMaps.getSelectedItem().toString(); |
||||
} |
||||
} |
||||
|
||||
protected Plot getSelectedClonedPlot() { |
||||
MapPlot mapPlot = new MapPlot(); |
||||
populateDetilMaps(Inter.getLocText("FR-Chart-State_Map")); |
||||
if(detailMaps.getSelectedItem()!= null && !StringUtils.isEmpty(detailMaps.getSelectedItem().toString())){ |
||||
mapPlot.setMapName(detailMaps.getSelectedItem().toString()); |
||||
} |
||||
return mapPlot; |
||||
} |
||||
|
||||
public String[] getMapTypes(){ |
||||
return TYPE_NAMES; |
||||
} |
||||
|
||||
} |
@ -1,90 +0,0 @@
|
||||
package com.fr.design.mainframe; |
||||
|
||||
import com.fr.chart.base.ChartTypeValueCollection; |
||||
import com.fr.design.mainframe.chart.gui.type.*; |
||||
import com.fr.general.FRLogger; |
||||
|
||||
import java.lang.reflect.Constructor; |
||||
import java.util.HashMap; |
||||
|
||||
/** |
||||
* Created by IntelliJ IDEA. |
||||
* Author : daisy |
||||
* Version: 7.1.1 |
||||
* 图表设计器工具栏面板的工厂类 |
||||
*/ |
||||
public class PlotToolBarFactory { |
||||
private static HashMap<ChartTypeValueCollection,Class<? extends PlotPane4ToolBar>> panes4NormalPlot = |
||||
new HashMap<ChartTypeValueCollection, Class<? extends PlotPane4ToolBar>>(); |
||||
|
||||
private static HashMap<ChartTypeValueCollection,Class<? extends AbstractMapPlotPane4ToolBar>> panes4MapPlot = |
||||
new HashMap<ChartTypeValueCollection, Class<? extends AbstractMapPlotPane4ToolBar>>(); |
||||
|
||||
static { |
||||
panes4NormalPlot.put(ChartTypeValueCollection.COLUMN, ColumnPlotPane4ToolBar.class); |
||||
panes4NormalPlot.put(ChartTypeValueCollection.LINE, LinePlotPane4ToolBar.class); |
||||
panes4NormalPlot.put(ChartTypeValueCollection.BAR, BarPlotPane4ToolBar.class); |
||||
panes4NormalPlot.put(ChartTypeValueCollection.PIE, PiePlotPane4ToolBar.class); |
||||
panes4NormalPlot.put(ChartTypeValueCollection.AREA,AreaPlotPane4ToolBar.class); |
||||
panes4NormalPlot.put(ChartTypeValueCollection.XYSCATTER,XYSCatterPlotPane4ToolBar.class); |
||||
panes4NormalPlot.put(ChartTypeValueCollection.BUBBLE,BubblePlotPane4ToolBar.class); |
||||
panes4NormalPlot.put(ChartTypeValueCollection.RADAR,RadarPlotPane4ToolBar.class); |
||||
panes4NormalPlot.put(ChartTypeValueCollection.STOCK,StockPlotPane4ToolBar.class); |
||||
panes4NormalPlot.put(ChartTypeValueCollection.METER,MeterPlotPane4ToolBar.class); |
||||
panes4NormalPlot.put(ChartTypeValueCollection.RANGE,RangePlotPane4ToolBar.class); |
||||
panes4NormalPlot.put(ChartTypeValueCollection.COMB,CustomPlotPane4ToolBar.class); |
||||
panes4NormalPlot.put(ChartTypeValueCollection.GANTT,GanttPlotPane4ToolBar.class); |
||||
panes4NormalPlot.put(ChartTypeValueCollection.DONUT,DonutPlotPane4ToolBar.class); |
||||
|
||||
panes4MapPlot.put(ChartTypeValueCollection.MAP,MapPlotPane4ToolBar.class); |
||||
panes4MapPlot.put(ChartTypeValueCollection.GIS,GisMapPlotPane4ToolBar.class); |
||||
} |
||||
|
||||
private PlotToolBarFactory(){ |
||||
|
||||
} |
||||
|
||||
/** |
||||
* 为了地图和gis以外的图表类型创建工具栏 |
||||
* @param type 图表类型 |
||||
* @param chartDesigner 图表设计器 |
||||
* @return 工具栏 |
||||
*/ |
||||
public static PlotPane4ToolBar createToolBar4NormalPlot(ChartTypeValueCollection type,ChartDesigner chartDesigner){ |
||||
if(!panes4NormalPlot.containsKey(type)){ |
||||
return new ColumnPlotPane4ToolBar(chartDesigner); |
||||
} |
||||
try { |
||||
Class<? extends PlotPane4ToolBar> cls = panes4NormalPlot.get(type); |
||||
Constructor<? extends PlotPane4ToolBar > constructor = cls.getConstructor(ChartDesigner.class); |
||||
return constructor.newInstance(chartDesigner); |
||||
}catch (Exception e){ |
||||
FRLogger.getLogger().error(e.getMessage()); |
||||
return new ColumnPlotPane4ToolBar(chartDesigner); |
||||
} |
||||
} |
||||
|
||||
/** |
||||
*为地图和gis创建工具栏 |
||||
* @param type 类型 |
||||
* @param chartDesigner 图表设计器 |
||||
* @return 工具栏 |
||||
*/ |
||||
public static AbstractMapPlotPane4ToolBar createToolBar4MapPlot(ChartTypeValueCollection type,ChartDesigner chartDesigner){ |
||||
if(!panes4MapPlot.containsKey(type)){ |
||||
return new MapPlotPane4ToolBar(chartDesigner); |
||||
} |
||||
try { |
||||
Class<? extends AbstractMapPlotPane4ToolBar> cls = panes4MapPlot.get(type); |
||||
Constructor<? extends AbstractMapPlotPane4ToolBar > constructor = cls.getConstructor(ChartDesigner.class); |
||||
return constructor.newInstance(chartDesigner); |
||||
}catch (Exception e){ |
||||
FRLogger.getLogger().error(e.getMessage()); |
||||
return new MapPlotPane4ToolBar(chartDesigner); |
||||
} |
||||
} |
||||
|
||||
|
||||
|
||||
|
||||
} |
@ -1,91 +0,0 @@
|
||||
package com.fr.design.mainframe; |
||||
|
||||
import com.fr.base.GraphHelper; |
||||
import com.fr.base.background.ColorBackground; |
||||
import com.fr.stable.CoreConstants; |
||||
|
||||
import javax.swing.*; |
||||
import java.awt.*; |
||||
import java.awt.geom.Dimension2D; |
||||
import java.awt.geom.RoundRectangle2D; |
||||
|
||||
/** |
||||
* Created by IntelliJ IDEA. |
||||
* Author : daisy |
||||
* Version: 6.5.6 |
||||
* Date: 14-10-25 |
||||
* Time: 下午4:11 |
||||
*/ |
||||
public class ToolTip4Chart extends JWindow { |
||||
private static ToolTip4Chart instance = new ToolTip4Chart(); |
||||
private static final int HGAP = 5; |
||||
private static final int VGAP = 3; |
||||
private static final int FONT_SIZE = 12; |
||||
private ToolTipStringPane stringPane; |
||||
private Font font = new Font("Dialog", Font.PLAIN, FONT_SIZE); |
||||
|
||||
public ToolTip4Chart() { |
||||
stringPane = new ToolTipStringPane(); |
||||
this.getContentPane().add(stringPane); |
||||
} |
||||
|
||||
public static ToolTip4Chart getInstance() { |
||||
if (instance == null) { |
||||
instance = new ToolTip4Chart(); |
||||
} |
||||
return instance; |
||||
} |
||||
|
||||
/** |
||||
* 现实提示信息 |
||||
* |
||||
* @param toolTip 提示信息 |
||||
* @param xAbs 绝对位置x |
||||
* @param yAbs 绝对位置Y |
||||
*/ |
||||
public void showToolTip(String toolTip, int xAbs, int yAbs) { |
||||
stringPane.text = toolTip.trim(); |
||||
Dimension2D dim = GraphHelper.stringDimensionWithRotation(toolTip, font, 0, CoreConstants.DEFAULT_FRC); |
||||
this.setSize(new Dimension((int) dim.getWidth() + HGAP * 2, (int) dim.getHeight() + VGAP * 2)); |
||||
stringPane.setPreferredSize(new Dimension((int) dim.getWidth(), (int) dim.getHeight())); |
||||
if (!this.isVisible()) { |
||||
this.setVisible(true); |
||||
if (xAbs + this.getWidth() > Toolkit.getDefaultToolkit().getScreenSize().width) { |
||||
xAbs -= this.getWidth(); |
||||
} |
||||
this.setLocation(xAbs, yAbs+HGAP*2); |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* 隐藏弹出框 |
||||
*/ |
||||
public void hideToolTip() { |
||||
this.setVisible(false); |
||||
} |
||||
|
||||
|
||||
private class ToolTipStringPane extends JPanel { |
||||
String text; |
||||
|
||||
public ToolTipStringPane() { |
||||
|
||||
} |
||||
|
||||
@Override |
||||
public void paintComponent(Graphics g) { |
||||
super.paintComponent(g); |
||||
if (!isOpaque()) { |
||||
return; |
||||
} |
||||
g.setFont(font); |
||||
Rectangle r = new Rectangle(0, 0, this.getWidth(), this.getHeight()); |
||||
ColorBackground background = ColorBackground.getInstance(Color.white); |
||||
background.paint(g, new RoundRectangle2D.Double(r.getX(), r.getY(), r.getWidth(), r.getHeight(), HGAP, HGAP)); |
||||
Graphics2D g2d = (Graphics2D) g; |
||||
g2d.drawString(text, HGAP, this.getHeight() - HGAP); |
||||
} |
||||
|
||||
} |
||||
|
||||
} |
@ -1,170 +0,0 @@
|
||||
package com.fr.design.mainframe.actions; |
||||
|
||||
import com.fr.design.file.HistoryTemplateListPane; |
||||
import com.fr.design.file.SaveSomeTemplatePane; |
||||
import com.fr.design.mainframe.DesignerContext; |
||||
import com.fr.general.ComparatorUtils; |
||||
import com.fr.general.FRLogger; |
||||
import com.fr.json.JSONObject; |
||||
import com.fr.stable.StableUtils; |
||||
import com.fr.stable.StringUtils; |
||||
|
||||
import javax.swing.*; |
||||
import java.io.File; |
||||
import java.io.FileInputStream; |
||||
import java.io.FileOutputStream; |
||||
import java.io.InputStream; |
||||
import java.net.URL; |
||||
import java.net.URLConnection; |
||||
import java.util.HashMap; |
||||
import java.util.Iterator; |
||||
import java.util.Set; |
||||
/** |
||||
* Created by IntelliJ IDEA. |
||||
* Author : daisy |
||||
* Version: 7.1.1 |
||||
*/ |
||||
public class ChartDownLoadWorker extends SwingWorker<Void, Double>{ |
||||
private static final String FILE_PATH = "http://chart.finedevelop.com/update/"; |
||||
private static final String VERSION = "version"; |
||||
private static final String TEMP = "_temp"; |
||||
private static final int BYTE = 153600; |
||||
private static final int FILE_BYTE = 1024; |
||||
private HashMap<String,String> files = new HashMap<String, String>(); |
||||
|
||||
public ChartDownLoadWorker() { |
||||
} |
||||
|
||||
private void loadFilesPaths() throws Exception { |
||||
files.clear(); |
||||
final String installHome = StableUtils.getInstallHome(); |
||||
|
||||
JSONObject serverVersion = UpdateVersion.getJsonContent(); |
||||
if(serverVersion == null){ |
||||
return; |
||||
} |
||||
Iterator<String> keys = serverVersion.keys(); |
||||
while (keys.hasNext()){ |
||||
String jarName = keys.next(); |
||||
if(!ComparatorUtils.equals(jarName, VERSION)){ |
||||
String filePath = (String) serverVersion.get(jarName); |
||||
String path =installHome + filePath.substring(2); |
||||
files.put(jarName,path); |
||||
} |
||||
} |
||||
files.isEmpty(); |
||||
} |
||||
|
||||
@Override |
||||
protected Void doInBackground() throws Exception { |
||||
try { |
||||
loadFilesPaths(); |
||||
Set key = files.keySet(); |
||||
Iterator iterator = key.iterator(); |
||||
int totalSize = 0; |
||||
//先得到所有的长度,方便计算百分比
|
||||
while (iterator.hasNext()) { |
||||
String jarName = (String) iterator.next(); |
||||
String jarUrl = FILE_PATH + jarName; |
||||
URL url = new URL(jarUrl); |
||||
URLConnection connection = url.openConnection(); |
||||
totalSize += connection.getContentLength(); |
||||
} |
||||
|
||||
int totalBytesRead = 0; |
||||
iterator = key.iterator(); |
||||
while (iterator.hasNext()) { |
||||
String jarName = (String) iterator.next(); |
||||
String jarUrl = FILE_PATH + jarName; |
||||
URL url = new URL(jarUrl); |
||||
InputStream reader = url.openStream(); |
||||
String filePath = files.get(jarName); |
||||
int point = filePath.lastIndexOf("."); |
||||
//先写临时文件,防止更新一半意外中止
|
||||
String tmpFilePath = filePath.substring(0,point)+TEMP+filePath.substring(point); |
||||
FileOutputStream writer = new FileOutputStream(tmpFilePath); |
||||
byte[] buffer = new byte[BYTE]; |
||||
int bytesRead = 0; |
||||
while ((bytesRead = reader.read(buffer)) > 0) { |
||||
writer.write(buffer, 0, bytesRead); |
||||
buffer = new byte[BYTE]; |
||||
totalBytesRead += bytesRead; |
||||
publish(totalBytesRead/(double)totalSize); |
||||
} |
||||
} |
||||
|
||||
|
||||
} catch (Exception e) { |
||||
throw new Exception("Update Failed !" + e.getMessage()); |
||||
} |
||||
|
||||
return null; |
||||
} |
||||
|
||||
//替换更新下来的临时文件
|
||||
protected void replaceFiles(){ |
||||
try { |
||||
Set key = files.keySet(); |
||||
Iterator iterator = key.iterator(); |
||||
while (iterator.hasNext()) { |
||||
String jarName = (String) iterator.next(); |
||||
String filePath = files.get(jarName); |
||||
int point = filePath.lastIndexOf("."); |
||||
//先写临时文件,防止更新一半意外中止
|
||||
String tmpFilePath = filePath.substring(0,point)+TEMP+filePath.substring(point); |
||||
FileInputStream inputStream = new FileInputStream(tmpFilePath); |
||||
FileOutputStream writer = new FileOutputStream(filePath); |
||||
byte[] buffer = new byte[FILE_BYTE]; |
||||
int bytesRead = 0; |
||||
while ((bytesRead = inputStream.read(buffer))>0){ |
||||
writer.write(buffer,0,bytesRead); |
||||
buffer = new byte[FILE_BYTE]; |
||||
} |
||||
writer.flush(); |
||||
writer.close(); |
||||
inputStream.close(); |
||||
} |
||||
} catch (Exception e) { |
||||
FRLogger.getLogger().error(e.getMessage()); |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* 完成时的动作 |
||||
*/ |
||||
public void done() { |
||||
//检测是否没有保存的模版
|
||||
SaveSomeTemplatePane saveSomeTempaltePane = new SaveSomeTemplatePane(true); |
||||
// 只有一个文件未保存时
|
||||
if (HistoryTemplateListPane.getInstance().getHistoryCount() == 1) { |
||||
int choose = saveSomeTempaltePane.saveLastOneTemplate(); |
||||
if (choose != JOptionPane.CANCEL_OPTION) { |
||||
restartChartDesigner(); |
||||
} |
||||
} else { |
||||
if (saveSomeTempaltePane.showSavePane()) { |
||||
restartChartDesigner(); |
||||
} |
||||
} |
||||
} |
||||
|
||||
private void restartChartDesigner(){ |
||||
String installHome = StableUtils.getInstallHome(); |
||||
if(StringUtils.isEmpty(installHome) || ComparatorUtils.equals(".",installHome)){ |
||||
DesignerContext.getDesignerFrame().exit(); |
||||
return; |
||||
} |
||||
|
||||
try { |
||||
String path = installHome + File.separator + "bin" + File.separator + "restart.bat"; |
||||
ProcessBuilder builder = new ProcessBuilder(path,installHome); |
||||
builder.start(); |
||||
DesignerContext.getDesignerFrame().exit(); |
||||
}catch (Exception e){ |
||||
FRLogger.getLogger().error(e.getMessage()); |
||||
} |
||||
} |
||||
|
||||
|
||||
|
||||
} |
@ -1,51 +0,0 @@
|
||||
package com.fr.design.mainframe.actions; |
||||
|
||||
import com.fr.design.actions.help.FeedBackAction; |
||||
import com.fr.design.actions.help.FeedBackPane; |
||||
import com.fr.design.constants.LayoutConstants; |
||||
import com.fr.design.dialog.BasicDialog; |
||||
import com.fr.design.gui.ilable.UILabel; |
||||
import com.fr.design.layout.TableLayout; |
||||
import com.fr.design.layout.TableLayoutHelper; |
||||
import com.fr.design.mainframe.DesignerContext; |
||||
import com.fr.design.mainframe.DesignerFrame; |
||||
import com.fr.general.Inter; |
||||
|
||||
import javax.swing.*; |
||||
import java.awt.*; |
||||
import java.awt.event.ActionEvent; |
||||
|
||||
/** |
||||
* Created by IntelliJ IDEA. |
||||
* Author : daisy |
||||
* Version: 7.1.1 |
||||
*/ |
||||
public class ChartFeedBackAciton extends FeedBackAction{ |
||||
|
||||
/** |
||||
* 动作 |
||||
* @param e 事件 |
||||
*/ |
||||
public void actionPerformed(ActionEvent e) { |
||||
final DesignerFrame designerFrame = DesignerContext.getDesignerFrame(); |
||||
ChartFeedBackPane feedBackPane = new ChartFeedBackPane(); |
||||
BasicDialog basicDialog =feedBackPane.showWindow(designerFrame,false); |
||||
feedBackPane.setFeedbackDialog(basicDialog); |
||||
basicDialog.setVisible(true); |
||||
} |
||||
|
||||
private class ChartFeedBackPane extends FeedBackPane{ |
||||
protected JPanel getContactPane() { |
||||
double f = TableLayout.FILL; |
||||
double p = TableLayout.PREFERRED; |
||||
Component[][] components = new Component[][]{ |
||||
new Component[]{new UILabel(Inter.getLocText("email") + ":", SwingConstants.RIGHT), email}, |
||||
new Component[]{new UILabel(Inter.getLocText("mobile_number") + ":", SwingConstants.RIGHT), phone} |
||||
}; |
||||
double[] rowSize = {p, p, p}; |
||||
double[] columnSize = {p, p}; |
||||
int[][] rowCount = {{1, 1}, {1, 1}, {1, 1}}; |
||||
return TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, LayoutConstants.VGAP_MEDIUM, LayoutConstants.VGAP_MEDIUM); |
||||
} |
||||
} |
||||
} |
@ -1,25 +0,0 @@
|
||||
package com.fr.design.mainframe.actions; |
||||
|
||||
import com.fr.design.actions.UpdateAction; |
||||
|
||||
import java.awt.event.ActionEvent; |
||||
|
||||
/** |
||||
* @author : richie |
||||
* @since : 8.0 |
||||
*/ |
||||
public class ChartUpdateAction extends UpdateAction { |
||||
|
||||
private static final String DOWNLOAD_DESIGNER=""; |
||||
private static final String DOWNLOAD_CHART=""; |
||||
private static final String DOWNLOAD_THIRD=""; |
||||
|
||||
public ChartUpdateAction() { |
||||
|
||||
} |
||||
|
||||
@Override |
||||
public void actionPerformed(ActionEvent e) { |
||||
|
||||
} |
||||
} |
@ -1,56 +0,0 @@
|
||||
package com.fr.design.mainframe.actions; |
||||
|
||||
import com.fr.base.BaseUtils; |
||||
import com.fr.design.actions.UpdateAction; |
||||
import com.fr.design.menu.MenuKeySet; |
||||
import com.fr.general.Inter; |
||||
import com.fr.start.StartServer; |
||||
|
||||
import javax.swing.*; |
||||
import java.awt.event.ActionEvent; |
||||
|
||||
/** |
||||
* 图表设计器得产品演示 |
||||
* Created by IntelliJ IDEA. |
||||
* Author : daisy |
||||
* Version: 6.5.6 |
||||
* Date: 14-10-27 |
||||
* Time: 下午9:01 |
||||
*/ |
||||
public class ChartWebAction extends UpdateAction { |
||||
public ChartWebAction() { |
||||
this.setMenuKeySet(getSelfMenuKeySet()); |
||||
this.setName(getMenuKeySet().getMenuName()); |
||||
this.setMnemonic(getMenuKeySet().getMnemonic()); |
||||
this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/m_help/demo.png")); |
||||
} |
||||
|
||||
private MenuKeySet getSelfMenuKeySet(){ |
||||
return new MenuKeySet() { |
||||
@Override |
||||
public char getMnemonic() { |
||||
return 'D'; |
||||
} |
||||
|
||||
@Override |
||||
public String getMenuName() { |
||||
return Inter.getLocText("FR-Chart-Product_Demo"); |
||||
} |
||||
|
||||
@Override |
||||
public KeyStroke getKeyStroke() { |
||||
return null; |
||||
} |
||||
}; |
||||
} |
||||
|
||||
|
||||
/** |
||||
* 动作 |
||||
* @param e 事件 |
||||
*/ |
||||
public void actionPerformed(ActionEvent e) { |
||||
StartServer.browerURLWithLocalEnv("http://www.vancharts.com/demo.html"); |
||||
return; |
||||
} |
||||
} |
@ -1,35 +0,0 @@
|
||||
package com.fr.design.mainframe.actions; |
||||
|
||||
import com.fr.design.actions.file.OpenTemplateAction; |
||||
import com.fr.design.mainframe.DesignerContext; |
||||
import com.fr.file.FILE; |
||||
import com.fr.file.FILEChooserPane; |
||||
import com.fr.file.FILEChooserPane4Chart; |
||||
|
||||
import java.awt.event.ActionEvent; |
||||
|
||||
/** |
||||
* Created by IntelliJ IDEA. |
||||
* Author : daisy |
||||
* Version: 6.5.6 |
||||
* Date: 14-10-20 |
||||
* Time: 下午7:35 |
||||
*/ |
||||
public class OpenChartAction extends OpenTemplateAction { |
||||
/** |
||||
* 动作 |
||||
* @param evt 事件 |
||||
*/ |
||||
public void actionPerformed(ActionEvent evt) { |
||||
FILEChooserPane fileChooser = FILEChooserPane4Chart.getInstance(true, true); |
||||
|
||||
if (fileChooser.showOpenDialog(DesignerContext.getDesignerFrame(),".crt") |
||||
== FILEChooserPane.OK_OPTION) { |
||||
final FILE file = fileChooser.getSelectedFILE(); |
||||
if (file == null) {//选择的文件不能是 null
|
||||
return; |
||||
} |
||||
DesignerContext.getDesignerFrame().openTemplate(file); |
||||
} |
||||
} |
||||
} |
@ -1,74 +0,0 @@
|
||||
package com.fr.design.mainframe.actions; |
||||
|
||||
import com.fr.design.ChartEnvManager; |
||||
import com.fr.design.actions.UpdateAction; |
||||
import com.fr.design.dialog.BasicDialog; |
||||
import com.fr.design.mainframe.DesignerContext; |
||||
import com.fr.design.mainframe.chart.UpdateOnLinePane; |
||||
import com.fr.design.menu.MenuKeySet; |
||||
import com.fr.general.FRLogger; |
||||
import com.fr.general.Inter; |
||||
import com.fr.json.JSONObject; |
||||
import com.fr.stable.ProductConstants; |
||||
import com.fr.stable.StringUtils; |
||||
|
||||
import javax.swing.*; |
||||
import java.awt.event.ActionEvent; |
||||
|
||||
/** |
||||
* Created by IntelliJ IDEA. |
||||
* Author : daisy |
||||
* Version: 7.1.1 |
||||
* 图表设计器在线更新 |
||||
*/ |
||||
public class UpdateOnlineAction extends UpdateAction { |
||||
|
||||
public UpdateOnlineAction() { |
||||
this.setMenuKeySet(getKeySet()); |
||||
this.setName(getMenuKeySet().getMenuKeySetName() + "..."); |
||||
this.setMnemonic(getMenuKeySet().getMnemonic()); |
||||
} |
||||
|
||||
private MenuKeySet getKeySet() { |
||||
return new MenuKeySet() { |
||||
@Override |
||||
public char getMnemonic() { |
||||
return 'U'; |
||||
} |
||||
|
||||
@Override |
||||
public String getMenuName() { |
||||
return Inter.getLocText("FR-Chart-Help_UpdateOnline"); |
||||
} |
||||
|
||||
@Override |
||||
public KeyStroke getKeyStroke() { |
||||
return null; |
||||
} |
||||
}; |
||||
} |
||||
|
||||
|
||||
/** |
||||
*动作 |
||||
* @param e 事件 |
||||
*/ |
||||
public void actionPerformed(ActionEvent e) { |
||||
new UpdateVersion(){ |
||||
protected void done() { |
||||
try { |
||||
ChartEnvManager.getEnvManager().resetCheckDate(); |
||||
JSONObject serverVersion = get(); |
||||
String version = serverVersion.getString(UpdateVersion.VERSION); |
||||
UpdateOnLinePane updateOnLinePane = new UpdateOnLinePane(StringUtils.isEmpty(version)? ProductConstants.RELEASE_VERSION:version); |
||||
BasicDialog dg = updateOnLinePane.showWindow4UpdateOnline(DesignerContext.getDesignerFrame()); |
||||
updateOnLinePane.setParentDialog(dg); |
||||
dg.setVisible(true); |
||||
}catch (Exception e){ |
||||
FRLogger.getLogger().error(e.getMessage()); |
||||
} |
||||
} |
||||
}.execute(); |
||||
} |
||||
|
||||
} |
@ -1,69 +0,0 @@
|
||||
package com.fr.design.mainframe.actions; |
||||
|
||||
import com.fr.general.FRLogger; |
||||
import com.fr.json.JSONObject; |
||||
|
||||
import javax.swing.*; |
||||
import java.io.BufferedReader; |
||||
import java.io.IOException; |
||||
import java.io.InputStreamReader; |
||||
import java.net.HttpURLConnection; |
||||
import java.net.URL; |
||||
|
||||
/** |
||||
* Created by IntelliJ IDEA. |
||||
* Author : daisy |
||||
* Version: 7.1.1 |
||||
*/ |
||||
public class UpdateVersion extends SwingWorker<JSONObject,Void> { |
||||
|
||||
private static final String VERSION_URL ="http://chart.finedevelop.com/update/update.json"; |
||||
private static final int TIME_OUT = 300;//5s
|
||||
public static final String VERSION = "version"; |
||||
|
||||
public UpdateVersion(){ |
||||
|
||||
} |
||||
|
||||
|
||||
@Override |
||||
protected JSONObject doInBackground() throws Exception { |
||||
return getJsonContent(); |
||||
} |
||||
|
||||
public static JSONObject getJsonContent() throws Exception{ |
||||
String res = null; |
||||
try { |
||||
res = readVersionFromServer(TIME_OUT); |
||||
} catch (IOException e) { |
||||
FRLogger.getLogger().error(e.getMessage()); |
||||
} |
||||
return new JSONObject(res); |
||||
} |
||||
|
||||
/** |
||||
* 从服务器读取版本 |
||||
*/ |
||||
private static String readVersionFromServer(int timeOut) throws IOException { |
||||
URL getUrl = new URL(VERSION_URL); |
||||
// 根据拼凑的URL,打开连接,URL.openConnection函数会根据URL的类型,
|
||||
// 返回不同的URLConnection子类的对象,这里URL是一个http,因此实际返回的是HttpURLConnection
|
||||
HttpURLConnection connection = (HttpURLConnection) getUrl |
||||
.openConnection(); |
||||
connection.setReadTimeout(timeOut); |
||||
// 进行连接,但是实际上get request要在下一句的connection.getInputStream()函数中才会真正发到
|
||||
// 服务器
|
||||
connection.connect(); |
||||
// 取得输入流,并使用Reader读取
|
||||
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "utf8"));//设置编码,否则中文乱码
|
||||
String lines; |
||||
StringBuffer sb = new StringBuffer(); |
||||
while ((lines = reader.readLine()) != null) { |
||||
sb.append(lines); |
||||
} |
||||
reader.close(); |
||||
// 断开连接
|
||||
connection.disconnect(); |
||||
return sb.toString(); |
||||
} |
||||
} |
@ -1,55 +0,0 @@
|
||||
/* |
||||
* Copyright (c) 2001-2014,FineReport Inc, All Rights Reserved. |
||||
*/ |
||||
|
||||
package com.fr.design.mainframe.chart; |
||||
|
||||
import com.fr.design.file.HistoryTemplateListPane; |
||||
import com.fr.design.mainframe.chart.gui.*; |
||||
|
||||
import java.util.ArrayList; |
||||
|
||||
/** |
||||
* Created by IntelliJ IDEA. |
||||
* Author : daisy |
||||
* Version: 6.5.6 |
||||
* Date: 14-10-15 |
||||
* Time: 下午5:47 |
||||
*/ |
||||
public class ChartDesignEditPane extends ChartEditPane { |
||||
|
||||
private static ChartDesignEditPane instance; |
||||
|
||||
private boolean isFromToolBar = false; |
||||
|
||||
public synchronized static ChartEditPane getInstance() { |
||||
if (instance == null) { |
||||
instance = new ChartDesignEditPane(); |
||||
} |
||||
return instance; |
||||
} |
||||
|
||||
public ChartDesignEditPane() { |
||||
paneList = new ArrayList<AbstractChartAttrPane>(); |
||||
dataPane4SupportCell = new ChartDesignerDataPane(listener); |
||||
paneList.add(dataPane4SupportCell); |
||||
paneList.add(new StylePane4Chart(listener, false)); |
||||
paneList.add(new ChartDesignerOtherPane()); |
||||
createTabsPane(); |
||||
} |
||||
|
||||
protected void dealWithStyleChange(){ |
||||
if(!isFromToolBar){ |
||||
HistoryTemplateListPane.getInstance().getCurrentEditingTemplate().styleChange(); |
||||
} |
||||
} |
||||
|
||||
/** |
||||
*主要用于图表设计器,判断样式改变是否来自工具栏的全局样式按钮 |
||||
* @param isFromToolBar 是否来自工具栏 |
||||
*/ |
||||
public void styleChange(boolean isFromToolBar){ |
||||
this.isFromToolBar = isFromToolBar; |
||||
} |
||||
|
||||
} |
@ -0,0 +1,39 @@
|
||||
package com.fr.design.mainframe.chart; |
||||
|
||||
import com.fr.chart.chartattr.ChartCollection; |
||||
import com.fr.general.Inter; |
||||
|
||||
import javax.swing.*; |
||||
|
||||
/** |
||||
* Created by mengao on 2017/5/16. |
||||
*/ |
||||
public class ChartsConfigPane extends AbstractChartAttrPane { |
||||
|
||||
public final static String CHART_STYLE_TITLE = Inter.getLocText("Chart-Style_Name"); |
||||
|
||||
@Override |
||||
public void populate(ChartCollection collection) { |
||||
|
||||
} |
||||
|
||||
@Override |
||||
public void update(ChartCollection collection) { |
||||
|
||||
} |
||||
|
||||
@Override |
||||
protected JPanel createContentPane() { |
||||
return new JPanel(); |
||||
} |
||||
|
||||
@Override |
||||
public String getIconPath() { |
||||
return "com/fr/design/images/chart/ChartStyle.png"; |
||||
} |
||||
|
||||
@Override |
||||
public String title4PopupWindow() { |
||||
return CHART_STYLE_TITLE; |
||||
} |
||||
} |
@ -0,0 +1,56 @@
|
||||
package com.fr.design.mainframe.chart; |
||||
|
||||
import com.fr.chart.chartattr.Chart; |
||||
import com.fr.design.ChartTypeInterfaceManager; |
||||
import com.fr.design.mainframe.chart.gui.ChartDataPane; |
||||
|
||||
import java.awt.*; |
||||
import java.util.ArrayList; |
||||
|
||||
/** |
||||
* Created by mengao on 2017/5/3. |
||||
*/ |
||||
public class ChartsEditPane extends ChartEditPane { |
||||
|
||||
protected ChartsConfigPane chartsConfigPane; |
||||
|
||||
public ChartsEditPane() { |
||||
this.setLayout(new BorderLayout()); |
||||
paneList = new ArrayList<AbstractChartAttrPane>(); |
||||
|
||||
dataPane4SupportCell = new ChartDataPane(listener); |
||||
dataPane4SupportCell.setSupportCellData(true); |
||||
chartsConfigPane = new ChartsConfigPane(); |
||||
|
||||
paneList.add(dataPane4SupportCell); |
||||
paneList.add(chartsConfigPane); |
||||
|
||||
createTabsPane(); |
||||
} |
||||
|
||||
/** |
||||
* 重新构造面板 |
||||
* @param currentChart 图表 |
||||
*/ |
||||
public void reLayout(Chart currentChart) { |
||||
if (currentChart != null) { |
||||
this.removeAll(); |
||||
this.setLayout(new BorderLayout()); |
||||
paneList = new ArrayList<AbstractChartAttrPane>(); |
||||
|
||||
String plotID = ""; |
||||
if (currentChart.getPlot() != null) { |
||||
plotID = currentChart.getPlot().getPlotID(); |
||||
} |
||||
|
||||
dataPane4SupportCell = createChartDataPane(plotID); |
||||
chartsConfigPane = ChartTypeInterfaceManager.getInstance().getChartConfigPane(plotID); |
||||
paneList.add(dataPane4SupportCell); |
||||
paneList.add(chartsConfigPane); |
||||
|
||||
createTabsPane(); |
||||
} |
||||
|
||||
} |
||||
|
||||
} |
@ -1,238 +0,0 @@
|
||||
package com.fr.design.mainframe.chart; |
||||
|
||||
import com.fr.design.ChartEnvManager; |
||||
import com.fr.design.dialog.BasicDialog; |
||||
import com.fr.design.dialog.BasicPane; |
||||
import com.fr.design.gui.ibutton.UIButton; |
||||
import com.fr.design.gui.icheckbox.UICheckBox; |
||||
import com.fr.design.gui.ilable.UILabel; |
||||
import com.fr.design.layout.FRGUIPaneFactory; |
||||
import com.fr.design.mainframe.actions.ChartDownLoadWorker; |
||||
import com.fr.general.ComparatorUtils; |
||||
import com.fr.general.Inter; |
||||
import com.fr.stable.ProductConstants; |
||||
|
||||
import javax.swing.*; |
||||
import javax.swing.border.EmptyBorder; |
||||
import java.awt.*; |
||||
import java.awt.event.ActionEvent; |
||||
import java.awt.event.ActionListener; |
||||
import java.awt.event.ItemEvent; |
||||
import java.awt.event.ItemListener; |
||||
import java.text.DecimalFormat; |
||||
import java.text.NumberFormat; |
||||
|
||||
/** |
||||
* Created by IntelliJ IDEA. |
||||
* Author : daisy |
||||
* Version: 7.1.1 |
||||
* 在线更新面板 |
||||
*/ |
||||
public class UpdateOnLinePane extends BasicPane{ |
||||
private static final int GAP = 40; |
||||
private static final int H_GAP = 16; |
||||
private static final int SIDE_GAP =30; |
||||
private static final int RIGHT_BORDER_GAP = 34; |
||||
private static final Color LABEL_COLOR = new Color(114,114,114); |
||||
private static final int MESSAGE_FONT_SIZE = 20; |
||||
private static final int PUSH_FONT_SIZE = 12; |
||||
private static final int PROGRESS_WIDTH = 500; |
||||
private static final int PROGRESS_HEIGHT = 14; |
||||
private static final NumberFormat NUMBER_FORMAT = new DecimalFormat("##.##"); |
||||
private static final int PRECENT =100; |
||||
private static final Color FOREGROUNG = new Color(23,190,86); |
||||
private static final Color BACKGROUND = new Color(210,210,210); |
||||
|
||||
String serverVersion = ProductConstants.RELEASE_VERSION; |
||||
UIButton okButton = new UIButton(Inter.getLocText("FR-Chart-Dialog_OK")); |
||||
UIButton updateButton = new UIButton(Inter.getLocText("FR-Chart-App_Update")); |
||||
UIButton cancleButton = new UIButton(Inter.getLocText("FR-Chart-Dialog_Cancle")); |
||||
UICheckBox pushAuto = new UICheckBox(Inter.getLocText("FR-Chart-UpdateMessage_PushAuto")); |
||||
private JPanel messagePane; |
||||
private JPanel optionsPane; |
||||
private BasicDialog parentDialog; |
||||
private ChartDownLoadWorker downLoadWorker = null; |
||||
private boolean isUpdateCancle = false; |
||||
|
||||
private ActionListener updateListener = new ActionListener() { |
||||
@Override |
||||
public void actionPerformed(ActionEvent e) { |
||||
final JProgressBar progressBar = init4UpdatingPane(); |
||||
downLoadWorker = new ChartDownLoadWorker(){ |
||||
protected void process(java.util.List<Double> v) { |
||||
progressBar.setValue((int)(v.get(v.size() - 1) * PRECENT)); |
||||
} |
||||
|
||||
public void done() { |
||||
try { |
||||
get(); |
||||
} catch (Exception e1) { |
||||
init4UpdateFaild(); |
||||
return; |
||||
} |
||||
if(!isUpdateCancle){ |
||||
replaceFiles(); |
||||
dialogExit(); |
||||
super.done(); |
||||
} |
||||
} |
||||
}; |
||||
downLoadWorker.execute(); |
||||
} |
||||
}; |
||||
|
||||
private ActionListener okListener = new ActionListener() { |
||||
@Override |
||||
public void actionPerformed(ActionEvent e) { |
||||
dialogExit(); |
||||
} |
||||
}; |
||||
|
||||
private ActionListener cancleListener = new ActionListener() { |
||||
@Override |
||||
public void actionPerformed(ActionEvent e) { |
||||
if(downLoadWorker !=null){ |
||||
isUpdateCancle = true; |
||||
downLoadWorker.cancel(true); |
||||
} |
||||
dialogExit(); |
||||
} |
||||
}; |
||||
|
||||
public void setParentDialog(BasicDialog dialog){ |
||||
this.parentDialog = dialog; |
||||
} |
||||
|
||||
public UpdateOnLinePane(String serverVersion){ |
||||
this.serverVersion = serverVersion; |
||||
this.isUpdateCancle = false; |
||||
pushAuto.setSelected(ChartEnvManager.getEnvManager().isPushUpdateAuto()); |
||||
pushAuto.addItemListener(new ItemListener() { |
||||
@Override |
||||
public void itemStateChanged(ItemEvent e) { |
||||
ChartEnvManager.getEnvManager().setPushUpdateAuto(pushAuto.isSelected()); |
||||
} |
||||
}); |
||||
init4PanesLayout(); |
||||
initListeners(); |
||||
judge(); |
||||
} |
||||
|
||||
private void initListeners(){ |
||||
updateButton.addActionListener(updateListener); |
||||
okButton.addActionListener(okListener); |
||||
cancleButton.addActionListener(cancleListener); |
||||
} |
||||
|
||||
private void init4PanesLayout(){ |
||||
this.setLayout(new BorderLayout()); |
||||
this.messagePane = FRGUIPaneFactory.createBorderLayout_L_Pane(); |
||||
this.optionsPane = new JPanel(new FlowLayout(FlowLayout.RIGHT,H_GAP ,0)) ; |
||||
this.optionsPane.setBorder(new EmptyBorder(0, 0, GAP, RIGHT_BORDER_GAP)); |
||||
this.add(this.messagePane, BorderLayout.CENTER); |
||||
this.add(this.optionsPane, BorderLayout.SOUTH); |
||||
pushAuto.setFont(new Font(Inter.getLocText("FR-Designer-All_MSBold"), 0, PUSH_FONT_SIZE)); |
||||
pushAuto.setForeground(LABEL_COLOR); |
||||
this.revalidate(); |
||||
} |
||||
|
||||
//更新失败的提示
|
||||
private void init4UpdateFaild(){ |
||||
this.messagePane.removeAll(); |
||||
UILabel label = new UILabel(Inter.getLocText("FR-Chart-Version_UpdateFail")+"!"); |
||||
label.setHorizontalAlignment(SwingConstants.CENTER); |
||||
label.setFont(new Font(Inter.getLocText("FR-Designer-All_MSBold"), 0, MESSAGE_FONT_SIZE)); |
||||
label.setForeground(LABEL_COLOR); |
||||
this.messagePane.add(label,BorderLayout.CENTER); |
||||
optionsPane.removeAll(); |
||||
optionsPane.add(okButton); |
||||
this.revalidate(); |
||||
} |
||||
|
||||
private JProgressBar init4UpdatingPane(){ |
||||
this.messagePane.removeAll(); |
||||
JPanel centerPane = new JPanel(new GridLayout(2,1)); |
||||
UILabel label = new UILabel(Inter.getLocText("FR-Chart-App_UpdateProgress")); |
||||
label.setHorizontalAlignment(SwingConstants.CENTER); |
||||
label.setFont(new Font(Inter.getLocText("FR-Designer-All_MSBold"), 0, MESSAGE_FONT_SIZE)); |
||||
label.setForeground(LABEL_COLOR); |
||||
label.setBorder(new EmptyBorder(PUSH_FONT_SIZE,0,0,0)); |
||||
centerPane.add(label); |
||||
JProgressBar progressBar = new JProgressBar(); |
||||
progressBar.setMaximum(PRECENT); |
||||
progressBar.setMinimum(0); |
||||
progressBar.setValue(0); |
||||
progressBar.setBorder(new EmptyBorder(MESSAGE_FONT_SIZE,SIDE_GAP,SIDE_GAP*2,SIDE_GAP)); |
||||
centerPane.add(progressBar); |
||||
messagePane.add(centerPane,BorderLayout.CENTER); |
||||
optionsPane.removeAll(); |
||||
optionsPane.add(cancleButton); |
||||
this.revalidate(); |
||||
return progressBar; |
||||
} |
||||
|
||||
private void init4VersionSamePane(){ |
||||
this.messagePane.removeAll(); |
||||
UILabel label = new UILabel(Inter.getLocText("FR-Chart-Versions_Lasted")); |
||||
label.setHorizontalAlignment(SwingConstants.CENTER); |
||||
label.setFont(new Font(Inter.getLocText("FR-Designer-All_MSBold"), 0, MESSAGE_FONT_SIZE)); |
||||
label.setForeground(LABEL_COLOR); |
||||
this.messagePane.add(label,BorderLayout.CENTER); |
||||
optionsPane.removeAll(); |
||||
optionsPane.add(pushAuto); |
||||
optionsPane.add(okButton); |
||||
this.revalidate(); |
||||
} |
||||
|
||||
private void init4VersionDifferentPane(){ |
||||
this.messagePane.removeAll(); |
||||
createPaneShowVersions(); |
||||
optionsPane.removeAll(); |
||||
optionsPane.add(pushAuto); |
||||
optionsPane.add(updateButton); |
||||
optionsPane.add(cancleButton); |
||||
this.revalidate(); |
||||
} |
||||
|
||||
private void createPaneShowVersions(){ |
||||
JPanel centerPane = new JPanel(new GridLayout(2,1)); |
||||
UILabel localLabel = new UILabel(Inter.getLocText("FR-Chart-Version_Local")+":"+ ProductConstants.RELEASE_VERSION); |
||||
localLabel.setFont(new Font(Inter.getLocText("FR-Designer-All_MSBold"), 0, MESSAGE_FONT_SIZE)); |
||||
localLabel.setForeground(LABEL_COLOR); |
||||
localLabel.setBorder(new EmptyBorder(PUSH_FONT_SIZE,0,0,0)); |
||||
UILabel serverLabel = new UILabel(Inter.getLocText("FR-Chart-Version_Lasted")+":"+serverVersion); |
||||
serverLabel.setFont(new Font(Inter.getLocText("FR-Designer-All_MSBold"), 0, MESSAGE_FONT_SIZE)); |
||||
serverLabel.setForeground(LABEL_COLOR); |
||||
serverLabel.setBorder(new EmptyBorder(-MESSAGE_FONT_SIZE - PUSH_FONT_SIZE, 0, 0,0)); |
||||
localLabel.setHorizontalAlignment(SwingConstants.CENTER); |
||||
serverLabel.setHorizontalAlignment(SwingConstants.CENTER); |
||||
centerPane.add(localLabel); |
||||
centerPane.add(serverLabel); |
||||
messagePane.add(centerPane,BorderLayout.CENTER); |
||||
} |
||||
|
||||
private void judge(){ |
||||
if(ComparatorUtils.equals(ProductConstants.RELEASE_VERSION,serverVersion)){ |
||||
//版本一致,提示已经是最新版本
|
||||
init4VersionSamePane(); |
||||
}else{ |
||||
init4VersionDifferentPane(); |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* Dialog exit. |
||||
*/ |
||||
private void dialogExit() { |
||||
parentDialog.setVisible(false); |
||||
parentDialog.dispose(); |
||||
} |
||||
|
||||
|
||||
|
||||
|
||||
protected String title4PopupWindow() { |
||||
return Inter.getLocText("FR-Chart-Help_UpdateOnline"); |
||||
} |
||||
|
||||
} |
@ -1,71 +0,0 @@
|
||||
/* |
||||
* Copyright (c) 2001-2014,FineReport Inc, All Rights Reserved. |
||||
*/ |
||||
|
||||
package com.fr.design.mainframe.chart.gui; |
||||
|
||||
import com.fr.chart.chartattr.ChartCollection; |
||||
import com.fr.chart.chartattr.GisMapPlot; |
||||
import com.fr.chart.chartattr.MapPlot; |
||||
import com.fr.design.chart.report.GisMapDataPane4Chart; |
||||
import com.fr.design.chart.report.MapDataPane4Chart; |
||||
import com.fr.design.gui.frpane.AttributeChangeListener; |
||||
import com.fr.design.mainframe.chart.gui.data.ImportSetChartDataPane; |
||||
import com.fr.general.FRLogger; |
||||
|
||||
import javax.swing.*; |
||||
import java.awt.*; |
||||
import java.awt.event.MouseAdapter; |
||||
import java.awt.event.MouseEvent; |
||||
|
||||
/** |
||||
* Created by IntelliJ IDEA. |
||||
* Author : daisy |
||||
* Version: 6.5.6 |
||||
* Date: 14-10-15 |
||||
* Time: 下午1:57 |
||||
*/ |
||||
public class ChartDesignerDataPane extends ChartDataPane { |
||||
private AttributeChangeListener listener; |
||||
|
||||
public ChartDesignerDataPane(AttributeChangeListener listener) { |
||||
super(listener); |
||||
this.addMouseListener(new MouseAdapter() { |
||||
@Override |
||||
public void mouseClicked(MouseEvent e) { |
||||
FRLogger.getLogger().info("SD"); |
||||
} |
||||
}); |
||||
this.listener = listener; |
||||
} |
||||
|
||||
@Override |
||||
protected JPanel createContentPane() { |
||||
contentsPane = new ImportSetChartDataPane(listener,ChartDesignerDataPane.this); |
||||
return contentsPane; |
||||
} |
||||
|
||||
|
||||
protected void repeatLayout(ChartCollection collection) { |
||||
if(contentsPane != null) { |
||||
this.remove(contentsPane); |
||||
} |
||||
|
||||
this.setLayout(new BorderLayout(0, 0)); |
||||
if (collection.getSelectedChart().getPlot() instanceof MapPlot) { |
||||
contentsPane = new MapDataPane4Chart(listener,this); |
||||
}else if(collection.getSelectedChart().getPlot() instanceof GisMapPlot){ |
||||
contentsPane = new GisMapDataPane4Chart(listener,this); |
||||
} else{ |
||||
contentsPane = new ImportSetChartDataPane(listener,ChartDesignerDataPane.this); |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* 主要用于图表设计器 |
||||
* @return 是 |
||||
*/ |
||||
public boolean isNeedPresentPaneWhenFilterData(){ |
||||
return true; |
||||
} |
||||
} |
@ -1,48 +0,0 @@
|
||||
package com.fr.design.mainframe.chart.gui.data; |
||||
|
||||
import com.fr.base.TableData; |
||||
import com.fr.design.data.tabledata.wrapper.TableDataWrapper; |
||||
import com.fr.design.data.tabledata.wrapper.TemplateTableDataWrapper; |
||||
import com.fr.design.dialog.BasicPane; |
||||
import com.fr.design.mainframe.AbstractChartDataPane4Chart; |
||||
|
||||
/** |
||||
* 图表设计器导入 界面 |
||||
* Created by kunsnat on 14-10-21. |
||||
* kunsnat@gmail.com |
||||
*/ |
||||
public abstract class ChartDesignDataLoadPane extends BasicPane { |
||||
|
||||
private AbstractChartDataPane4Chart parentPane; |
||||
|
||||
public ChartDesignDataLoadPane(AbstractChartDataPane4Chart parentPane){ |
||||
this.parentPane = parentPane; |
||||
} |
||||
|
||||
/** |
||||
* 加载数据集 |
||||
* |
||||
* @param tableData 数据集 |
||||
*/ |
||||
public abstract void populateChartTableData(TableData tableData); |
||||
|
||||
/** |
||||
* 根据界面 获取数据集相关. |
||||
* |
||||
* @return 返回数据集 |
||||
*/ |
||||
public abstract TableData getTableData(); |
||||
|
||||
|
||||
protected abstract String getNamePrefix(); |
||||
|
||||
//响应属性事件
|
||||
protected void fireChange() { |
||||
parentPane.fireTableDataChange(); |
||||
} |
||||
|
||||
|
||||
public TableDataWrapper getTableDataWrapper(){ |
||||
return new TemplateTableDataWrapper(getTableData()); |
||||
} |
||||
} |
@ -1,124 +0,0 @@
|
||||
/* |
||||
* Copyright (c) 2001-2014,FineReport Inc, All Rights Reserved. |
||||
*/ |
||||
|
||||
package com.fr.design.mainframe.chart.gui.data; |
||||
|
||||
import com.fr.base.BaseUtils; |
||||
import com.fr.base.FRContext; |
||||
import com.fr.base.TableData; |
||||
import com.fr.design.constants.UIConstants; |
||||
import com.fr.data.impl.EmbeddedTableData; |
||||
import com.fr.design.data.tabledata.tabledatapane.EmbeddedTableDataPane; |
||||
import com.fr.design.data.tabledata.wrapper.TableDataWrapper; |
||||
import com.fr.design.gui.ibutton.UIButton; |
||||
import com.fr.design.dialog.BasicDialog; |
||||
import com.fr.design.dialog.BasicPane; |
||||
import com.fr.design.dialog.DialogActionAdapter; |
||||
import com.fr.design.mainframe.AbstractChartDataPane4Chart; |
||||
|
||||
import javax.swing.*; |
||||
import javax.swing.border.LineBorder; |
||||
import java.awt.*; |
||||
import java.awt.event.MouseAdapter; |
||||
import java.awt.event.MouseEvent; |
||||
|
||||
/** |
||||
* 图表设计器内置数据集面板 |
||||
* Created by IntelliJ IDEA. |
||||
* Author : daisy |
||||
* Version: 6.5.6 |
||||
* Date: 14-10-16 |
||||
* Time: 上午12:09 |
||||
*/ |
||||
public class EmbbeddDataPane extends ChartDesignDataLoadPane { |
||||
private UIButton edit; |
||||
private UIButton reviewButton; |
||||
private EmbeddedTableData tableData; |
||||
|
||||
public EmbbeddDataPane(AbstractChartDataPane4Chart parentPane) { |
||||
super(parentPane); |
||||
tableData = new EmbeddedTableData(); |
||||
initEditButton(); |
||||
initReviewButton(); |
||||
this.setLayout(new FlowLayout(FlowLayout.LEFT, 0, 3)); |
||||
this.add(edit); |
||||
this.add(reviewButton); |
||||
} |
||||
|
||||
private void initEditButton() { |
||||
edit = new UIButton(BaseUtils.readIcon("com/fr/design/images/control/edit.png")); |
||||
edit.setBorder(new LineBorder(UIConstants.LINE_COLOR)); |
||||
edit.addMouseListener(new MouseAdapter() { |
||||
@Override |
||||
public void mouseClicked(MouseEvent e) { |
||||
EmbeddedTableDataPane tableDataPane = new EmbeddedTableDataPane(); |
||||
tableDataPane.populateBean(tableData); |
||||
dgEdit(tableDataPane, getNamePrefix()); |
||||
} |
||||
}); |
||||
} |
||||
|
||||
private void initReviewButton() { |
||||
reviewButton = new UIButton(BaseUtils.readIcon("com/fr/design/images/data/search.png")); |
||||
reviewButton.setBorder(new LineBorder(UIConstants.LINE_COLOR)); |
||||
reviewButton.addMouseListener(new MouseAdapter() { |
||||
@Override |
||||
public void mouseReleased(MouseEvent e) { |
||||
//预览图表设计器内置数据集
|
||||
TableDataWrapper tableDataWrappe = getTableDataWrapper(); |
||||
if (tableDataWrappe != null) { |
||||
try { |
||||
tableDataWrappe.previewData(); |
||||
} catch (Exception e1) { |
||||
FRContext.getLogger().error(e1.getMessage(), e1); |
||||
} |
||||
} |
||||
} |
||||
}); |
||||
} |
||||
|
||||
@Override |
||||
protected String title4PopupWindow() { |
||||
return null; |
||||
} |
||||
|
||||
@Override |
||||
public TableData getTableData() { |
||||
return tableData; |
||||
} |
||||
|
||||
/** |
||||
* 加载数据集 |
||||
* |
||||
* @param tableData 数据集 |
||||
*/ |
||||
public void populateChartTableData(TableData tableData) { |
||||
if (tableData instanceof EmbeddedTableData) { |
||||
this.tableData =(EmbeddedTableData) tableData; |
||||
} |
||||
} |
||||
|
||||
protected String getNamePrefix() { |
||||
return "Embedded"; |
||||
} |
||||
|
||||
/** |
||||
* 编辑面板 |
||||
* |
||||
* @param uPanel 面板 |
||||
* @param originalName 原始名字 |
||||
*/ |
||||
private void dgEdit(final EmbeddedTableDataPane uPanel, String originalName) { |
||||
final BasicPane.NamePane nPanel = uPanel.asNamePane(); |
||||
nPanel.setObjectName(originalName); |
||||
final BasicDialog dg; |
||||
dg = nPanel.showLargeWindow(SwingUtilities.getWindowAncestor(EmbbeddDataPane.this), new DialogActionAdapter() { |
||||
public void doOk() { |
||||
tableData = uPanel.updateBean(); |
||||
fireChange(); |
||||
} |
||||
}); |
||||
dg.setVisible(true); |
||||
} |
||||
} |
@ -1,123 +0,0 @@
|
||||
/* |
||||
* Copyright (c) 2001-2014,FineReport Inc, All Rights Reserved. |
||||
*/ |
||||
|
||||
package com.fr.design.mainframe.chart.gui.data; |
||||
|
||||
import com.fr.base.BaseUtils; |
||||
import com.fr.base.FRContext; |
||||
import com.fr.base.TableData; |
||||
import com.fr.design.constants.LayoutConstants; |
||||
import com.fr.design.constants.UIConstants; |
||||
import com.fr.design.data.datapane.preview.PreviewTablePane; |
||||
import com.fr.data.impl.ExcelTableData; |
||||
import com.fr.design.gui.ibutton.UIButton; |
||||
import com.fr.design.gui.itextfield.UITextField; |
||||
import com.fr.design.mainframe.AbstractChartDataPane4Chart; |
||||
import com.fr.design.mainframe.DesignerContext; |
||||
import com.fr.file.FILE; |
||||
import com.fr.file.FILEChooserPane; |
||||
import com.fr.general.Inter; |
||||
|
||||
import javax.swing.*; |
||||
import javax.swing.border.LineBorder; |
||||
import java.awt.*; |
||||
import java.awt.event.MouseAdapter; |
||||
import java.awt.event.MouseEvent; |
||||
import java.awt.event.MouseListener; |
||||
|
||||
/** |
||||
* Created by IntelliJ IDEA. |
||||
* Author : daisy |
||||
* Version: 6.5.6 |
||||
* Date: 14-10-15 |
||||
* Time: 下午11:58 |
||||
*/ |
||||
public class ExcelDataPane extends ChartDesignDataLoadPane { |
||||
|
||||
private UITextField path = new UITextField(); |
||||
private UIButton reviewButton; |
||||
private ExcelTableData tableData; |
||||
private MouseListener listener = new MouseAdapter() { |
||||
@Override |
||||
public void mouseClicked(MouseEvent e) { |
||||
FILEChooserPane fileChooserPane = new FILEChooserPane(true, true); |
||||
if (fileChooserPane.showOpenDialog(DesignerContext.getDesignerFrame(), ".xlsx") |
||||
== FILEChooserPane.OK_OPTION) { |
||||
FILE chooseFILE = fileChooserPane.getSelectedFILE(); |
||||
if (chooseFILE != null && chooseFILE.exists()) { |
||||
path.setText(chooseFILE.getPath()); |
||||
} else { |
||||
JOptionPane.showConfirmDialog(ExcelDataPane.this, Inter.getLocText("FR-Template-Path_chooseRightPath"), |
||||
Inter.getLocText("FR-App-All_Warning"), JOptionPane.OK_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE); |
||||
path.setText(""); |
||||
} |
||||
tableData.setFilePath(path.getText().toString()); |
||||
tableData.setFromEnv(chooseFILE.isEnvFile()); |
||||
tableData.setNeedColumnName(true); |
||||
fireChange(); |
||||
} |
||||
} |
||||
}; |
||||
|
||||
public ExcelDataPane(AbstractChartDataPane4Chart parentPane, JComponent pathChooseButton) { |
||||
super(parentPane); |
||||
initReviewButton(); |
||||
tableData = new ExcelTableData(); |
||||
tableData.setFilePath(path.getText().toString()); |
||||
tableData.setNeedColumnName(true); |
||||
path.setEditable(false); |
||||
pathChooseButton.addMouseListener(listener); |
||||
this.setLayout(new BorderLayout(0, 0)); |
||||
JPanel pane = new JPanel(new BorderLayout(LayoutConstants.HGAP_LARGE, 0)); |
||||
pane.add(path, BorderLayout.CENTER); |
||||
|
||||
pane.add(reviewButton, BorderLayout.EAST); |
||||
this.add(pane, BorderLayout.CENTER); |
||||
} |
||||
|
||||
@Override |
||||
protected String title4PopupWindow() { |
||||
return null; |
||||
} |
||||
|
||||
private void initReviewButton() { |
||||
reviewButton = new UIButton(BaseUtils.readIcon("com/fr/design/images/data/search.png")); |
||||
reviewButton.setBorder(new LineBorder(UIConstants.LINE_COLOR)); |
||||
reviewButton.addMouseListener(new MouseAdapter() { |
||||
@Override |
||||
public void mouseClicked(MouseEvent e) { |
||||
//预览本地excel
|
||||
try { |
||||
PreviewTablePane.previewTableData(getTableData()); |
||||
} catch (Exception e1) { |
||||
FRContext.getLogger().error(e1.getMessage(), e1); |
||||
} |
||||
} |
||||
}); |
||||
} |
||||
|
||||
@Override |
||||
public TableData getTableData() { |
||||
return tableData; |
||||
} |
||||
|
||||
@Override |
||||
protected String getNamePrefix() { |
||||
return null; |
||||
} |
||||
|
||||
/** |
||||
* 加载数据集 |
||||
* |
||||
* @param tableData 数据集 |
||||
*/ |
||||
public void populateChartTableData(TableData tableData) { |
||||
if (tableData instanceof ExcelTableData) { |
||||
path.setText(((ExcelTableData) tableData).getFilePath()); |
||||
this.tableData = (ExcelTableData)tableData; |
||||
this.tableData.setNeedColumnName(true); |
||||
} |
||||
fireChange(); |
||||
} |
||||
} |
@ -1,117 +0,0 @@
|
||||
/* |
||||
* Copyright (c) 2001-2014,FineReport Inc, All Rights Reserved. |
||||
*/ |
||||
|
||||
package com.fr.design.mainframe.chart.gui.data; |
||||
|
||||
import com.fr.base.TableData; |
||||
import com.fr.base.chart.chartdata.TopDefinitionProvider; |
||||
import com.fr.chart.chartattr.Chart; |
||||
import com.fr.chart.chartattr.ChartCollection; |
||||
import com.fr.chart.chartattr.Plot; |
||||
import com.fr.chart.chartdata.TableDataDefinition; |
||||
import com.fr.design.gui.frpane.AttributeChangeListener; |
||||
import com.fr.design.mainframe.AbstractChartDataPane4Chart; |
||||
import com.fr.design.mainframe.chart.gui.ChartDataPane; |
||||
import com.fr.design.mainframe.chart.gui.data.table.AbstractTableDataContentPane; |
||||
import com.fr.design.mainframe.chart.gui.data.table.CategoryPlotMoreCateTableDataContentPane; |
||||
import com.fr.design.mainframe.chart.gui.data.table.Factory4TableDataContentPane; |
||||
|
||||
import javax.swing.*; |
||||
|
||||
/** |
||||
* 数据导入数据设置面板 |
||||
* Created by IntelliJ IDEA. |
||||
* Author : daisy |
||||
* Version: 6.5.6 |
||||
* Date: 14-10-15 |
||||
* Time: 下午2:35 |
||||
*/ |
||||
public class ImportSetChartDataPane extends AbstractChartDataPane4Chart { |
||||
|
||||
private AbstractTableDataContentPane dataContentPane; |
||||
|
||||
public ImportSetChartDataPane(final AttributeChangeListener listener, ChartDataPane parent) { |
||||
super(listener,parent); |
||||
} |
||||
|
||||
|
||||
/** |
||||
* 更新界面 数据内容 |
||||
*/ |
||||
public void populate(ChartCollection collection) { |
||||
dataContentPane = getContentPane(collection.getSelectedChart().getPlot()); |
||||
dataContentPane.setNeedSummaryCaculateMethod(false); |
||||
dataContentPane.redoLayoutPane(); |
||||
if (collection != null && collection.getSelectedChart() != null) { |
||||
Chart chart = collection.getSelectedChart(); |
||||
TopDefinitionProvider definition = chart.getFilterDefinition(); |
||||
if (definition instanceof TableDataDefinition) { |
||||
TableData tableData = ((TableDataDefinition) definition).getTableData(); |
||||
if(tableData != null){ |
||||
populateChoosePane(tableData); |
||||
fireTableDataChange(); |
||||
} |
||||
if (dataContentPane != null) { |
||||
dataContentPane.populateBean(collection); |
||||
} |
||||
} |
||||
} |
||||
this.remove(leftContentPane); |
||||
this.initContentPane(); |
||||
this.validate(); |
||||
dataSource.addItemListener(dsListener); |
||||
initAllListeners(); |
||||
initSelfListener(dataContentPane); |
||||
this.addAttributeChangeListener(attributeChangeListener); |
||||
} |
||||
|
||||
protected JPanel getDataContentPane(){ |
||||
return dataContentPane; |
||||
} |
||||
|
||||
|
||||
@Override |
||||
public void update(ChartCollection collection) { |
||||
if (collection != null && collection.getSelectedChart() != null) { |
||||
if (dataContentPane != null) { |
||||
dataContentPane.updateBean(collection); |
||||
} |
||||
TableDataDefinition topDefinition =(TableDataDefinition)collection.getSelectedChart().getFilterDefinition(); |
||||
if(topDefinition !=null){ |
||||
topDefinition.setTableData(choosePane.getTableData()); |
||||
} |
||||
} |
||||
} |
||||
|
||||
private AbstractTableDataContentPane getContentPane(Plot plot) { |
||||
if (plot == null || plot.isSupportMoreCate()) { |
||||
return new CategoryPlotMoreCateTableDataContentPane(parentPane){ |
||||
public boolean isNeedSummaryCaculateMethod(){ |
||||
return false; |
||||
} |
||||
}; |
||||
} else{ |
||||
return Factory4TableDataContentPane.createTableDataContenetPaneWithPlotType(plot, parentPane); |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* 数据集数据改变 |
||||
*/ |
||||
public void fireTableDataChange() { |
||||
if (dataContentPane != null) { |
||||
dataContentPane.onSelectTableData(choosePane.getTableDataWrapper()); |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* 清空数据集的设置 |
||||
*/ |
||||
public void clearTableDataSetting(){ |
||||
if(dataContentPane != null){ |
||||
dataContentPane.clearAllBoxList(); |
||||
} |
||||
} |
||||
|
||||
} |
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue