@ -0,0 +1,59 @@ |
|||||||
|
package com.fr.design.mainframe.alphafine; |
||||||
|
|
||||||
|
import com.fr.general.SiteCenter; |
||||||
|
|
||||||
|
import java.awt.*; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by XiaXiang on 2017/5/10. |
||||||
|
*/ |
||||||
|
public class AlphaFineConstants { |
||||||
|
public static final String SAVE_FILE_NAME = "alpha.coco"; |
||||||
|
|
||||||
|
public static final int SHOW_SIZE = 5; |
||||||
|
|
||||||
|
public static final int LATEST_SHOW_SIZE = 3; |
||||||
|
|
||||||
|
public static final int HEIGHT = 680; |
||||||
|
|
||||||
|
public static final int WIDTH = 460; |
||||||
|
|
||||||
|
public static final int LEFT_WIDTH = 300; |
||||||
|
|
||||||
|
public static final int RIGHT_WIDTH = 380; |
||||||
|
|
||||||
|
public static final int FIELD_HEIGHT = 55; |
||||||
|
|
||||||
|
public static final int CONTENT_HEIGHT = 405; |
||||||
|
|
||||||
|
public static final int CELL_HEIGHT = 32; |
||||||
|
|
||||||
|
|
||||||
|
public static final Dimension FULL_SIZE = new Dimension(680, 460); |
||||||
|
|
||||||
|
public static final Dimension CONTENT_SIZE = new Dimension(680, 405); |
||||||
|
|
||||||
|
public static final Dimension FIELD_SIZE = new Dimension(680, 55); |
||||||
|
|
||||||
|
public static final Dimension ICON_LABEL_SIZE = new Dimension(64, 64); |
||||||
|
|
||||||
|
public static final Dimension CLOSE_BUTTON_SIZE = new Dimension(40, 40); |
||||||
|
|
||||||
|
public static final Color GRAY = new Color(0xd2d2d2); |
||||||
|
|
||||||
|
public static final Color BLUE = new Color(0x3394f0); |
||||||
|
|
||||||
|
public static final Color BLACK = new Color(0x222222); |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public static final String PLUGIN_SEARCH_URL = SiteCenter.getInstance().acquireUrlByKind("plugin.searchAPI"); |
||||||
|
|
||||||
|
public static final String PLUGIN_IMAGE_URL = "http://shop.finereport.com/plugin/"; |
||||||
|
|
||||||
|
public static final String REUSE_IMAGE_URL = "http://shop.finereport.com/reuse/"; |
||||||
|
|
||||||
|
public static final String DOCUMENT_SEARCH_URL = "http://help.finereport.com/doc-view-"; |
||||||
|
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,34 @@ |
|||||||
|
package com.fr.design.mainframe.alphafine; |
||||||
|
|
||||||
|
import com.fr.base.FRContext; |
||||||
|
import com.fr.design.mainframe.DesignerContext; |
||||||
|
import com.fr.design.mainframe.alphafine.component.AlphaFineDialog; |
||||||
|
import com.fr.stable.StableUtils; |
||||||
|
|
||||||
|
import java.io.File; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by XiaXiang on 2017/5/8. |
||||||
|
*/ |
||||||
|
public class AlphaFineHelper { |
||||||
|
|
||||||
|
public static void showAlphaFineDialog() { |
||||||
|
AlphaFineDialog dialog = new AlphaFineDialog(DesignerContext.getDesignerFrame()); |
||||||
|
dialog.setVisible(true); |
||||||
|
} |
||||||
|
|
||||||
|
public static File getInfoFile() { |
||||||
|
return new File(StableUtils.pathJoin(FRContext.getCurrentEnv().getPath(), AlphaFineConstants.SAVE_FILE_NAME)); |
||||||
|
} |
||||||
|
|
||||||
|
public static String findFolderName (String text) { |
||||||
|
String[] textArray = text.split("/"); |
||||||
|
if (textArray != null && textArray.length > 1) { |
||||||
|
return textArray[textArray.length - 2]; |
||||||
|
|
||||||
|
} |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,24 @@ |
|||||||
|
package com.fr.design.mainframe.alphafine; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by XiaXiang on 2017/4/27. |
||||||
|
*/ |
||||||
|
public enum CellType { |
||||||
|
PLUGIN(0), DOCUMENT(1), FILE(2), ACTION(3), REUSE(4); |
||||||
|
|
||||||
|
|
||||||
|
private int cellType; |
||||||
|
CellType(int type) { |
||||||
|
this.cellType = type; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public int getCellType() { |
||||||
|
return cellType; |
||||||
|
} |
||||||
|
|
||||||
|
public void setCellType(int cellType) { |
||||||
|
this.cellType = cellType; |
||||||
|
} |
||||||
|
} |
||||||
|
|
@ -0,0 +1,56 @@ |
|||||||
|
package com.fr.design.mainframe.alphafine;//package com.fr.design.mainframe.alphafine;
|
||||||
|
//
|
||||||
|
//import javax.swing.*;
|
||||||
|
//import java.awt.*;
|
||||||
|
//import java.awt.image.ImageObserver;
|
||||||
|
//import java.util.Vector;
|
||||||
|
//
|
||||||
|
///**
|
||||||
|
// * Created by XiaXiang on 2017/5/10.
|
||||||
|
// */
|
||||||
|
//public class Main {
|
||||||
|
// public static void main(String args[]) {
|
||||||
|
// JFrame frame = new JFrame("JList Background Demonstration");
|
||||||
|
//
|
||||||
|
// JList list = new JList();
|
||||||
|
//
|
||||||
|
// String [] imageIcon = new String[] {
|
||||||
|
// "female.gif", "male.gif"
|
||||||
|
// };
|
||||||
|
//
|
||||||
|
// // create model
|
||||||
|
// Vector v = new Vector();
|
||||||
|
// for (int i=0; i<10; i++) {
|
||||||
|
// ImageIcon ii = new ImageIcon(getClass().getResource("/com/fr/design/mainframe/alphafine/images/loading.gif"));
|
||||||
|
// ii.setImageObserver(new AnimatedObserver(list, i));
|
||||||
|
// v.addElement(ii);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// list.setListData(v);
|
||||||
|
//
|
||||||
|
// frame.getContentPane().add(BorderLayout.CENTER, list); //new JScrollPane(list));
|
||||||
|
// frame.setDefaultCloseOperation(3);
|
||||||
|
// frame.pack();
|
||||||
|
// frame.setVisible(true);
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//class AnimatedObserver implements ImageObserver
|
||||||
|
//{
|
||||||
|
// JList list;
|
||||||
|
// int index;
|
||||||
|
//
|
||||||
|
// public AnimatedObserver(JList list, int index) {
|
||||||
|
// this.list = list;
|
||||||
|
// this.index = index;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// public boolean imageUpdate (Image img, int infoflags, int x, int y, int width, int height) {
|
||||||
|
// if ((infoflags & (FRAMEBITS|ALLBITS)) != 0) {
|
||||||
|
// Rectangle rect = list.getCellBounds(index, index);
|
||||||
|
// list.repaint(rect);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// return (infoflags & (ALLBITS|ABORT)) == 0;
|
||||||
|
// }
|
||||||
|
//}
|
@ -0,0 +1,30 @@ |
|||||||
|
package com.fr.design.mainframe.alphafine.cell.cellModel; |
||||||
|
|
||||||
|
import com.fr.design.mainframe.alphafine.CellType; |
||||||
|
|
||||||
|
import javax.swing.*; |
||||||
|
import java.io.Serializable; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by XiaXiang on 2017/4/20. |
||||||
|
*/ |
||||||
|
public class ActionModel extends AlphaCellModel implements Serializable { |
||||||
|
private Action action; |
||||||
|
|
||||||
|
public ActionModel(String name, String content, CellType type) { |
||||||
|
super(name, content, type); |
||||||
|
} |
||||||
|
|
||||||
|
public ActionModel(String name, Action action) { |
||||||
|
super(name, null, CellType.ACTION); |
||||||
|
this.action = action; |
||||||
|
} |
||||||
|
|
||||||
|
public Action getAction() { |
||||||
|
return action; |
||||||
|
} |
||||||
|
|
||||||
|
public void setAction(Action action) { |
||||||
|
this.action = action; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,61 @@ |
|||||||
|
package com.fr.design.mainframe.alphafine.cell.cellModel; |
||||||
|
|
||||||
|
import com.fr.design.mainframe.alphafine.CellType; |
||||||
|
|
||||||
|
import java.io.Serializable; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by XiaXiang on 2017/3/23. |
||||||
|
*/ |
||||||
|
public class AlphaCellModel implements Serializable{ |
||||||
|
private String name; |
||||||
|
private String content; |
||||||
|
private String description; |
||||||
|
private CellType type; |
||||||
|
|
||||||
|
public AlphaCellModel(String name, String content, CellType type) { |
||||||
|
this.name = name; |
||||||
|
this.content = content; |
||||||
|
this.type = type; |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
public AlphaCellModel(String name, String content) { |
||||||
|
this.name = name; |
||||||
|
this.content = content; |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
public CellType getType() { |
||||||
|
return type; |
||||||
|
} |
||||||
|
|
||||||
|
public void setType(CellType type) { |
||||||
|
this.type = type; |
||||||
|
} |
||||||
|
|
||||||
|
public String getName() { |
||||||
|
return name; |
||||||
|
} |
||||||
|
|
||||||
|
public void setName(String name) { |
||||||
|
this.name = name; |
||||||
|
} |
||||||
|
|
||||||
|
public String getContent() { |
||||||
|
return content; |
||||||
|
} |
||||||
|
|
||||||
|
public void setContent(String content) { |
||||||
|
this.content = content; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public String getDescription() { |
||||||
|
return description; |
||||||
|
} |
||||||
|
|
||||||
|
public void setDescription(String description) { |
||||||
|
this.description = description; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,27 @@ |
|||||||
|
package com.fr.design.mainframe.alphafine.cell.cellModel; |
||||||
|
|
||||||
|
import com.fr.design.mainframe.alphafine.CellType; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by XiaXiang on 2017/4/20. |
||||||
|
*/ |
||||||
|
public class DocumentModel extends AlphaCellModel { |
||||||
|
private String documentUrl; |
||||||
|
|
||||||
|
public DocumentModel(String name, String content, CellType type) { |
||||||
|
super(name, content, type); |
||||||
|
} |
||||||
|
|
||||||
|
public DocumentModel(String name, String content, String documentUrl) { |
||||||
|
super(name, content, CellType.DOCUMENT); |
||||||
|
this.documentUrl = documentUrl; |
||||||
|
} |
||||||
|
|
||||||
|
public String getDocumentUrl() { |
||||||
|
return documentUrl; |
||||||
|
} |
||||||
|
|
||||||
|
public void setDocumentUrl(String documentUrl) { |
||||||
|
this.documentUrl = documentUrl; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,29 @@ |
|||||||
|
package com.fr.design.mainframe.alphafine.cell.cellModel; |
||||||
|
|
||||||
|
import com.fr.design.mainframe.alphafine.AlphaFineHelper; |
||||||
|
import com.fr.design.mainframe.alphafine.CellType; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by XiaXiang on 2017/4/20. |
||||||
|
*/ |
||||||
|
public class FileModel extends AlphaCellModel{ |
||||||
|
private String filePath; |
||||||
|
|
||||||
|
public FileModel(String name, String content, CellType type) { |
||||||
|
super(name, content, type); |
||||||
|
} |
||||||
|
|
||||||
|
public FileModel(String name, String content, String filePath) { |
||||||
|
super(name, content, CellType.FILE); |
||||||
|
this.filePath = filePath; |
||||||
|
setDescription(AlphaFineHelper.findFolderName(content)); |
||||||
|
} |
||||||
|
|
||||||
|
public String getFilePath() { |
||||||
|
return filePath; |
||||||
|
} |
||||||
|
|
||||||
|
public void setFilePath(String filePath) { |
||||||
|
this.filePath = filePath; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,12 @@ |
|||||||
|
package com.fr.design.mainframe.alphafine.cell.cellModel; |
||||||
|
|
||||||
|
import com.fr.design.mainframe.alphafine.CellType; |
||||||
|
|
||||||
|
import java.io.Serializable; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by XiaXiang on 2017/4/27. |
||||||
|
*/ |
||||||
|
public interface ModelHandle extends Serializable { |
||||||
|
CellType getType(); |
||||||
|
} |
@ -0,0 +1,76 @@ |
|||||||
|
package com.fr.design.mainframe.alphafine.cell.cellModel; |
||||||
|
|
||||||
|
import com.fr.design.mainframe.alphafine.CellType; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by XiaXiang on 2017/4/20. |
||||||
|
*/ |
||||||
|
public class MoreModel { |
||||||
|
private String name; |
||||||
|
private boolean needMore; |
||||||
|
private String content; |
||||||
|
private CellType type; |
||||||
|
private boolean isLoading; |
||||||
|
|
||||||
|
public MoreModel(String name, String content, boolean needMore, CellType type) { |
||||||
|
this.name = name; |
||||||
|
this.needMore = needMore; |
||||||
|
this.content = content; |
||||||
|
this.type = type; |
||||||
|
} |
||||||
|
|
||||||
|
public MoreModel(String name, CellType type) { |
||||||
|
this.name = name; |
||||||
|
this.needMore = false; |
||||||
|
this.type = type; |
||||||
|
} |
||||||
|
|
||||||
|
public MoreModel(String name) { |
||||||
|
this.name = name; |
||||||
|
this.isLoading = true; |
||||||
|
} |
||||||
|
public MoreModel(String name, boolean isLoading) { |
||||||
|
this.name = name; |
||||||
|
this.isLoading = isLoading; |
||||||
|
} |
||||||
|
|
||||||
|
public String getName() { |
||||||
|
return name; |
||||||
|
} |
||||||
|
|
||||||
|
public void setName(String name) { |
||||||
|
this.name = name; |
||||||
|
} |
||||||
|
|
||||||
|
public boolean isNeedMore() { |
||||||
|
return needMore; |
||||||
|
} |
||||||
|
|
||||||
|
public void setNeedMore(boolean needMore) { |
||||||
|
this.needMore = needMore; |
||||||
|
} |
||||||
|
|
||||||
|
public String getContent() { |
||||||
|
return content; |
||||||
|
} |
||||||
|
|
||||||
|
public void setContent(String content) { |
||||||
|
this.content = content; |
||||||
|
} |
||||||
|
|
||||||
|
public CellType getType() { |
||||||
|
return type; |
||||||
|
} |
||||||
|
|
||||||
|
public void setType(CellType type) { |
||||||
|
this.type = type; |
||||||
|
} |
||||||
|
|
||||||
|
public boolean isLoading() { |
||||||
|
return isLoading; |
||||||
|
} |
||||||
|
|
||||||
|
public void setLoading(boolean loading) { |
||||||
|
isLoading = loading; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,77 @@ |
|||||||
|
package com.fr.design.mainframe.alphafine.cell.cellModel; |
||||||
|
|
||||||
|
import com.fr.design.mainframe.alphafine.CellType; |
||||||
|
import com.fr.general.ComparatorUtils; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by XiaXiang on 2017/4/20. |
||||||
|
*/ |
||||||
|
public class PluginModel extends AlphaCellModel { |
||||||
|
private String pluginUrl; |
||||||
|
private String imageUrl; |
||||||
|
private String version; |
||||||
|
private String jartime; |
||||||
|
private String link; |
||||||
|
private int price; |
||||||
|
|
||||||
|
public PluginModel(String name, String content, CellType type) { |
||||||
|
super(name, content, type); |
||||||
|
} |
||||||
|
public PluginModel(String name, String content, String pluginUrl, String imageUrl, String version, String jartime, CellType type, int price) { |
||||||
|
super(name, content); |
||||||
|
setType(type); |
||||||
|
this.pluginUrl = pluginUrl; |
||||||
|
this.imageUrl = imageUrl; |
||||||
|
this.jartime = jartime; |
||||||
|
this.version = version; |
||||||
|
this.price = price; |
||||||
|
} |
||||||
|
|
||||||
|
public String getImageUrl() { |
||||||
|
return imageUrl; |
||||||
|
} |
||||||
|
|
||||||
|
public void setImageUrl(String imageUrl) { |
||||||
|
this.imageUrl = imageUrl; |
||||||
|
} |
||||||
|
|
||||||
|
public String getPluginUrl() { |
||||||
|
return pluginUrl; |
||||||
|
} |
||||||
|
|
||||||
|
public void setPluginUrl(String pluginUrl) { |
||||||
|
this.pluginUrl = pluginUrl; |
||||||
|
} |
||||||
|
|
||||||
|
public String getVersion() { |
||||||
|
return version; |
||||||
|
} |
||||||
|
|
||||||
|
public void setVersion(String verSion) { |
||||||
|
this.version = verSion; |
||||||
|
} |
||||||
|
|
||||||
|
public String getJartime() { |
||||||
|
return jartime; |
||||||
|
} |
||||||
|
|
||||||
|
public void setJarTime(String jarTime) { |
||||||
|
this.jartime = jarTime; |
||||||
|
} |
||||||
|
|
||||||
|
public String getLink() { |
||||||
|
return link; |
||||||
|
} |
||||||
|
|
||||||
|
public void setLink(String link) { |
||||||
|
this.link = link; |
||||||
|
} |
||||||
|
|
||||||
|
public int getPrice() { |
||||||
|
return price; |
||||||
|
} |
||||||
|
|
||||||
|
public void setPrice(int price) { |
||||||
|
this.price = price; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,48 @@ |
|||||||
|
package com.fr.design.mainframe.alphafine.cell.cellRender; |
||||||
|
|
||||||
|
import com.fr.design.gui.ilable.UILabel; |
||||||
|
import com.fr.design.mainframe.alphafine.cell.cellModel.AlphaCellModel; |
||||||
|
import com.fr.design.mainframe.alphafine.cell.cellModel.MoreModel; |
||||||
|
|
||||||
|
import javax.swing.*; |
||||||
|
import java.awt.*; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by XiaXiang on 2017/4/20. |
||||||
|
*/ |
||||||
|
public class CommonCellRender implements ListCellRenderer<Object> { |
||||||
|
private UILabel name; |
||||||
|
private UILabel content; |
||||||
|
public CommonCellRender() { |
||||||
|
this.name = new UILabel(); |
||||||
|
this.content = new UILabel(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected, boolean cellHasFocus) { |
||||||
|
if (value instanceof MoreModel) { |
||||||
|
return new TitleCellRender().getListCellRendererComponent(list, value,index,isSelected,cellHasFocus); |
||||||
|
} |
||||||
|
JPanel panel = new JPanel(new BorderLayout()); |
||||||
|
panel.setBackground(Color.white); |
||||||
|
if (isSelected) { |
||||||
|
panel.setBackground(new Color(0x3394f0)); |
||||||
|
} |
||||||
|
panel.setBorder(BorderFactory.createEmptyBorder(0,15,0,0)); |
||||||
|
AlphaCellModel model = (AlphaCellModel) value; |
||||||
|
name.setText(model.getName()); |
||||||
|
String iconUrl = "/com/fr/design/mainframe/alphafine/images/alphafine" + model.getType().getCellType() + ".png"; |
||||||
|
name.setIcon(new ImageIcon(getClass().getResource(iconUrl))); |
||||||
|
name.setFont(new Font("Song_TypeFace",0,12)); |
||||||
|
name.setForeground(new Color(0x222222)); |
||||||
|
name.setVerticalTextPosition(SwingConstants.CENTER); |
||||||
|
name.setHorizontalTextPosition(SwingConstants.RIGHT); |
||||||
|
if (model.getDescription() != null) { |
||||||
|
content.setText("-" + model.getDescription()); |
||||||
|
content.setForeground(new Color(0xcccccc)); |
||||||
|
panel.add(content, BorderLayout.CENTER); |
||||||
|
} |
||||||
|
panel.add(name, BorderLayout.WEST); |
||||||
|
return panel; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,42 @@ |
|||||||
|
package com.fr.design.mainframe.alphafine.cell.cellRender; |
||||||
|
|
||||||
|
import com.fr.design.gui.ilable.UILabel; |
||||||
|
import com.fr.design.mainframe.alphafine.cell.cellModel.MoreModel; |
||||||
|
import javax.swing.*; |
||||||
|
import java.awt.*; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by XiaXiang on 2017/4/20. |
||||||
|
*/ |
||||||
|
public class TitleCellRender implements ListCellRenderer<Object> { |
||||||
|
private UILabel name; |
||||||
|
private UILabel more; |
||||||
|
|
||||||
|
public TitleCellRender() { |
||||||
|
this.name = new UILabel(); |
||||||
|
this.more = new UILabel(); |
||||||
|
} |
||||||
|
@Override |
||||||
|
public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected, boolean cellHasFocus) { |
||||||
|
MoreModel moreModel = (MoreModel)value; |
||||||
|
JPanel panel = new JPanel(new BorderLayout()); |
||||||
|
panel.setBackground(new Color(0xf9f9f9)); |
||||||
|
panel.setBorder(BorderFactory.createEmptyBorder(0,15,0,0)); |
||||||
|
name.setText(moreModel.getName()); |
||||||
|
name.setFont(new Font("Song_TypeFace",0,10)); |
||||||
|
more.setFont(new Font("Song_TypeFace",0,10)); |
||||||
|
more.setText(moreModel.getContent()); |
||||||
|
name.setForeground(new Color(0x666666)); |
||||||
|
more.setForeground(new Color(0x666666)); |
||||||
|
panel.add(name, BorderLayout.WEST); |
||||||
|
if (moreModel.isNeedMore()) { |
||||||
|
this.more.setBorder(BorderFactory.createEmptyBorder(0,0,0,10)); |
||||||
|
panel.add(this.more, BorderLayout.EAST); |
||||||
|
} |
||||||
|
if (moreModel.isLoading()) { |
||||||
|
UILabel loadingLabel = new UILabel(new ImageIcon(getClass().getResource("/com/fr/design/mainframe/alphafine/images/loading.gif"))); |
||||||
|
panel.add(loadingLabel, BorderLayout.SOUTH); |
||||||
|
} |
||||||
|
return panel; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,607 @@ |
|||||||
|
package com.fr.design.mainframe.alphafine.component; |
||||||
|
|
||||||
|
import com.fr.base.FRContext; |
||||||
|
import com.fr.design.DesignerEnvManager; |
||||||
|
import com.fr.design.dialog.UIDialog; |
||||||
|
import com.fr.design.gui.ibutton.UIButton; |
||||||
|
import com.fr.design.gui.icontainer.UIScrollPane; |
||||||
|
import com.fr.design.gui.ilable.UILabel; |
||||||
|
import com.fr.design.mainframe.DesignerContext; |
||||||
|
import com.fr.design.mainframe.alphafine.AlphaFineConstants; |
||||||
|
import com.fr.design.mainframe.alphafine.AlphaFineHelper; |
||||||
|
import com.fr.design.mainframe.alphafine.cell.cellRender.CommonCellRender; |
||||||
|
import com.fr.design.mainframe.alphafine.cell.cellModel.*; |
||||||
|
import com.fr.design.mainframe.alphafine.listener.ComponentHandler; |
||||||
|
import com.fr.design.mainframe.alphafine.listener.DocumentAdapter; |
||||||
|
import com.fr.design.mainframe.alphafine.model.SearchListModel; |
||||||
|
import com.fr.design.mainframe.alphafine.model.SearchResult; |
||||||
|
import com.fr.design.mainframe.alphafine.previewPane.DocumentPreviewPane; |
||||||
|
import com.fr.design.mainframe.alphafine.previewPane.FilePreviewPane; |
||||||
|
import com.fr.design.mainframe.alphafine.previewPane.PluginPreviewPane; |
||||||
|
import com.fr.design.mainframe.alphafine.searchManager.*; |
||||||
|
import com.fr.file.FileNodeFILE; |
||||||
|
import com.fr.file.filetree.FileNode; |
||||||
|
import com.fr.form.main.Form; |
||||||
|
import com.fr.form.main.FormIO; |
||||||
|
import com.fr.general.ComparatorUtils; |
||||||
|
import com.fr.general.FRLogger; |
||||||
|
import com.fr.io.TemplateWorkBookIO; |
||||||
|
import com.fr.io.exporter.ImageExporter; |
||||||
|
import com.fr.main.impl.WorkBook; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
import com.fr.stable.project.ProjectConstants; |
||||||
|
|
||||||
|
import javax.imageio.ImageIO; |
||||||
|
import javax.swing.*; |
||||||
|
import javax.swing.event.DocumentEvent; |
||||||
|
import javax.swing.event.ListSelectionEvent; |
||||||
|
import javax.swing.event.ListSelectionListener; |
||||||
|
import java.awt.*; |
||||||
|
import java.awt.event.*; |
||||||
|
import java.awt.image.BufferedImage; |
||||||
|
import java.io.*; |
||||||
|
import java.net.URI; |
||||||
|
import java.net.URISyntaxException; |
||||||
|
import java.net.URL; |
||||||
|
import java.util.concurrent.ExecutionException; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by XiaXiang on 2017/3/21. |
||||||
|
*/ |
||||||
|
public class AlphaFineDialog extends UIDialog { |
||||||
|
private AlphaTextField searchTextField; |
||||||
|
private UIButton closeButton; |
||||||
|
private JPanel searchResultPane; |
||||||
|
private Point pressedPoint; |
||||||
|
private UIScrollPane leftSearchResultPane; |
||||||
|
private JPanel rightSearchResultPane; |
||||||
|
private JList searchResultList; |
||||||
|
private SearchListModel searchListModel; |
||||||
|
private SwingWorker searchWorker; |
||||||
|
|
||||||
|
public AlphaFineDialog(Frame parent) { |
||||||
|
super(parent); |
||||||
|
initProperties(); |
||||||
|
initListener(); |
||||||
|
initComponents(); |
||||||
|
} |
||||||
|
|
||||||
|
private void initComponents() { |
||||||
|
searchTextField = new AlphaTextField("AlphaFine"); |
||||||
|
searchTextField.setFont(new Font("Song_TypeFace",0,20)); |
||||||
|
searchTextField.setBackground(Color.white); |
||||||
|
searchTextField.setBorderPainted(false); |
||||||
|
JPanel topPane = new JPanel(new BorderLayout()); |
||||||
|
UILabel iconLabel = new UILabel(new ImageIcon(getClass().getResource("/com/fr/design/mainframe/alphafine/images/bigsearch.png"))); |
||||||
|
iconLabel.setPreferredSize(AlphaFineConstants.ICON_LABEL_SIZE); |
||||||
|
iconLabel.setOpaque(true); |
||||||
|
iconLabel.setBackground(Color.white); |
||||||
|
topPane.add(iconLabel, BorderLayout.WEST); |
||||||
|
topPane.add(searchTextField, BorderLayout.CENTER); |
||||||
|
closeButton = new UIButton() { |
||||||
|
@Override |
||||||
|
public void paintComponent(Graphics g) { |
||||||
|
g.setColor( Color.white ); |
||||||
|
g.fillRect(0, 0, getSize().width, getSize().height); |
||||||
|
super.paintComponent(g); |
||||||
|
} |
||||||
|
}; |
||||||
|
closeButton.setContentAreaFilled(false); |
||||||
|
closeButton.setPreferredSize(AlphaFineConstants.CLOSE_BUTTON_SIZE); |
||||||
|
closeButton.setIcon(new ImageIcon(getClass().getResource("/com/fr/design/mainframe/alphafine/images/alphafine_close.png"))); |
||||||
|
closeButton.set4ToolbarButton(); |
||||||
|
closeButton.addActionListener(new ActionListener() { |
||||||
|
@Override |
||||||
|
public void actionPerformed(ActionEvent e) { |
||||||
|
dispose(); |
||||||
|
} |
||||||
|
}); |
||||||
|
UILabel borderLabel = new UILabel(); |
||||||
|
borderLabel.setBackground(AlphaFineConstants.GRAY); |
||||||
|
borderLabel.setPreferredSize(new Dimension(AlphaFineConstants.HEIGHT, 1)); |
||||||
|
topPane.add(closeButton, BorderLayout.EAST); |
||||||
|
topPane.add(borderLabel, BorderLayout.SOUTH); |
||||||
|
add(topPane, BorderLayout.CENTER); |
||||||
|
searchTextField.getDocument().addDocumentListener(new DocumentAdapter() { |
||||||
|
@Override |
||||||
|
protected void textChanged(DocumentEvent e) { |
||||||
|
doSearch(searchTextField.getText()); |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
private void initProperties() { |
||||||
|
setUndecorated(true); |
||||||
|
addComponentListener(new ComponentHandler()); |
||||||
|
setSize(AlphaFineConstants.FIELD_SIZE); |
||||||
|
centerWindow(this); |
||||||
|
} |
||||||
|
|
||||||
|
private void centerWindow(Window win) { |
||||||
|
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); |
||||||
|
|
||||||
|
Dimension winSize = win.getSize(); |
||||||
|
|
||||||
|
if (winSize.height > screenSize.height) { |
||||||
|
winSize.height = screenSize.height; |
||||||
|
} |
||||||
|
if (winSize.width > screenSize.width) { |
||||||
|
winSize.width = screenSize.width; |
||||||
|
} |
||||||
|
//这里设置位置:水平居中,竖直偏上
|
||||||
|
win.setLocation((screenSize.width - winSize.width ) / 2, (screenSize.height - winSize.height) / AlphaFineConstants.SHOW_SIZE); |
||||||
|
} |
||||||
|
|
||||||
|
private void doSearch(String text) { |
||||||
|
if (text.length() < 2 || text.contains("'")) { |
||||||
|
return; |
||||||
|
} |
||||||
|
if (StringUtils.isBlank(text) || text.equals("AlphaFine")) { |
||||||
|
removeSearchResult(); |
||||||
|
} else { |
||||||
|
showSearchResult(text); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
private void removeSearchResult() { |
||||||
|
if (searchResultPane != null) { |
||||||
|
remove(searchResultPane); |
||||||
|
searchResultPane = null; |
||||||
|
} |
||||||
|
setSize(AlphaFineConstants.FIELD_SIZE); |
||||||
|
repaint(); |
||||||
|
} |
||||||
|
|
||||||
|
// TODO: 2017/5/8 xiaxiang: 窗体圆角setShape()有毛边,重写paint方法可以解决毛边问题,但带来了别的问题,处理比较麻烦,暂用setShape();
|
||||||
|
// public void paint(Graphics g){
|
||||||
|
//
|
||||||
|
// Graphics2D g2 = (Graphics2D) g.create();
|
||||||
|
// RenderingHints qualityHints = new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
|
||||||
|
// qualityHints.put(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
|
||||||
|
// g2.setRenderingHints(qualityHints);
|
||||||
|
// g2.setPaint(Color.WHITE);
|
||||||
|
// g2.fillRoundRect(0, 0, getWidth(), getHeight(), 25, 25);
|
||||||
|
// g2.dispose();
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
private void showSearchResult(String searchText) { |
||||||
|
if (searchResultPane == null) { |
||||||
|
searchResultList = new JList(); |
||||||
|
searchResultPane = new JPanel(); |
||||||
|
searchResultPane.setPreferredSize(AlphaFineConstants.CONTENT_SIZE); |
||||||
|
searchResultPane.setLayout(new BorderLayout()); |
||||||
|
searchResultList.setCellRenderer(new CommonCellRender()); |
||||||
|
searchResultList.setFixedCellHeight(AlphaFineConstants.CELL_HEIGHT); |
||||||
|
searchResultList.addMouseListener(new MouseAdapter() { |
||||||
|
@Override |
||||||
|
public void mouseClicked(MouseEvent e) { |
||||||
|
int selectedIndex = searchResultList.getSelectedIndex(); |
||||||
|
Object selectedValue = searchResultList.getSelectedValue(); |
||||||
|
if (e.getClickCount() == 2) { |
||||||
|
final int i = searchResultList.locationToIndex(e.getPoint()); |
||||||
|
searchResultList.setSelectedIndex(i); |
||||||
|
doNavigate(selectedIndex); |
||||||
|
if (selectedValue instanceof AlphaCellModel) { |
||||||
|
SearchResult originalResultList = LatestSearchManager.getLatestSearchManager().getLatestModelList(); |
||||||
|
originalResultList.add(searchResultList.getSelectedValue()); |
||||||
|
LatestSearchManager.getLatestSearchManager().setLatestModelList(originalResultList); |
||||||
|
//保存最近搜索
|
||||||
|
saveHistory(originalResultList); |
||||||
|
} |
||||||
|
} else if (e.getClickCount() == 1) { |
||||||
|
if (selectedValue instanceof MoreModel && ((MoreModel) selectedValue).isNeedMore()) { |
||||||
|
HandleMoreOrLessResult(selectedIndex, (MoreModel) selectedValue); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
}); |
||||||
|
|
||||||
|
// TODO: 2017/5/8 xiaxiang: e.getClickCount() == 1 时,偶发性的不能触发,所以先放到valueChanged
|
||||||
|
searchResultList.addListSelectionListener(new ListSelectionListener() { |
||||||
|
@Override |
||||||
|
public void valueChanged(ListSelectionEvent e) { |
||||||
|
if (!e.getValueIsAdjusting()) { |
||||||
|
showResult(searchResultList.getSelectedIndex(), searchResultList.getSelectedValue()); |
||||||
|
|
||||||
|
} |
||||||
|
} |
||||||
|
}); |
||||||
|
leftSearchResultPane = new UIScrollPane(searchResultList); |
||||||
|
leftSearchResultPane.setBackground(Color.white); |
||||||
|
leftSearchResultPane.setBorder(BorderFactory.createEmptyBorder(10,10,10,10)); |
||||||
|
leftSearchResultPane.setPreferredSize(new Dimension(AlphaFineConstants.LEFT_WIDTH, AlphaFineConstants.CONTENT_HEIGHT)); |
||||||
|
rightSearchResultPane = new JPanel(); |
||||||
|
rightSearchResultPane.setBackground(Color.white); |
||||||
|
searchResultPane.add(leftSearchResultPane, BorderLayout.WEST); |
||||||
|
rightSearchResultPane.setPreferredSize(new Dimension(AlphaFineConstants.RIGHT_WIDTH, AlphaFineConstants.CONTENT_HEIGHT)); |
||||||
|
searchResultPane.add(rightSearchResultPane, BorderLayout.EAST); |
||||||
|
add(searchResultPane, BorderLayout.SOUTH); |
||||||
|
setSize(AlphaFineConstants.FULL_SIZE); |
||||||
|
} |
||||||
|
searchResultList.setModel(new SearchListModel(AlphaSearchManager.getSearchManager().showDefaultSearchResult())); |
||||||
|
if (this.searchWorker != null && !this.searchWorker.isDone()) { |
||||||
|
this.searchWorker.cancel(true); |
||||||
|
this.searchWorker = null; |
||||||
|
} |
||||||
|
this.searchWorker = new SwingWorker<SearchListModel, String>() { |
||||||
|
|
||||||
|
@Override |
||||||
|
protected SearchListModel doInBackground() throws Exception { |
||||||
|
return setjListModel(new SearchListModel(AlphaSearchManager.getSearchManager().showLessSearchResult(searchText))); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected void done() { |
||||||
|
try { |
||||||
|
if (!isCancelled()) { |
||||||
|
searchResultList.setModel(get()); |
||||||
|
searchResultList.validate(); |
||||||
|
searchResultList.repaint(); |
||||||
|
validate(); |
||||||
|
repaint(); |
||||||
|
} |
||||||
|
} catch (InterruptedException e) { |
||||||
|
FRLogger.getLogger().error(e.getMessage()); |
||||||
|
} catch (ExecutionException e) { |
||||||
|
searchResultList.setModel(null); |
||||||
|
FRLogger.getLogger().error(e.getMessage()); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
}; |
||||||
|
this.searchWorker.execute(); |
||||||
|
} |
||||||
|
|
||||||
|
private void showResult(int index, Object selectedValue) { |
||||||
|
if (selectedValue instanceof FileModel) { |
||||||
|
String fileName = ((FileModel) selectedValue).getFilePath().substring(ProjectConstants.REPORTLETS_NAME.length() + 1); |
||||||
|
showDefaultPreviewPane(); |
||||||
|
if (fileName.endsWith("frm")) { |
||||||
|
if (this.searchWorker != null && !this.searchWorker.isDone()) { |
||||||
|
this.searchWorker.cancel(true); |
||||||
|
this.searchWorker = null; |
||||||
|
} |
||||||
|
this.searchWorker = new SwingWorker<BufferedImage, Void>() { |
||||||
|
@Override |
||||||
|
protected BufferedImage doInBackground() throws Exception { |
||||||
|
Form form = FormIO.readForm(FRContext.getCurrentEnv(), fileName); |
||||||
|
return FormIO.exportFormAsImage(form); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected void done() { |
||||||
|
if (!isCancelled()) { |
||||||
|
rightSearchResultPane.removeAll(); |
||||||
|
try { |
||||||
|
rightSearchResultPane.add(new FilePreviewPane(get())); |
||||||
|
} catch (InterruptedException e) { |
||||||
|
FRLogger.getLogger().error(e.getMessage()); |
||||||
|
} catch (ExecutionException e) { |
||||||
|
FRLogger.getLogger().error(e.getMessage()); |
||||||
|
} |
||||||
|
validate(); |
||||||
|
repaint(); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
}; |
||||||
|
this.searchWorker.execute(); |
||||||
|
} else if (fileName.endsWith("cpt")) { |
||||||
|
if (this.searchWorker != null && !this.searchWorker.isDone()) { |
||||||
|
this.searchWorker.cancel(true); |
||||||
|
this.searchWorker = null; |
||||||
|
} |
||||||
|
this.searchWorker = new SwingWorker<BufferedImage, Void>() { |
||||||
|
@Override |
||||||
|
protected BufferedImage doInBackground() throws Exception { |
||||||
|
WorkBook workBook = (WorkBook) TemplateWorkBookIO.readTemplateWorkBook(FRContext.getCurrentEnv(), fileName); |
||||||
|
BufferedImage bufferedImage = new ImageExporter().export(workBook); |
||||||
|
return bufferedImage; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected void done() { |
||||||
|
if (!isCancelled()) { |
||||||
|
rightSearchResultPane.removeAll(); |
||||||
|
try { |
||||||
|
rightSearchResultPane.add(new FilePreviewPane(get())); |
||||||
|
validate(); |
||||||
|
repaint(); |
||||||
|
} catch (InterruptedException e) { |
||||||
|
FRLogger.getLogger().error(e.getMessage()); |
||||||
|
} catch (ExecutionException e) { |
||||||
|
FRLogger.getLogger().error(e.getMessage()); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
}; |
||||||
|
this.searchWorker.execute(); |
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
} else if (selectedValue instanceof DocumentModel) { |
||||||
|
rightSearchResultPane.removeAll(); |
||||||
|
rightSearchResultPane.add(new DocumentPreviewPane(((DocumentModel) selectedValue).getName(), ((DocumentModel) selectedValue).getContent())); |
||||||
|
validate(); |
||||||
|
repaint(); |
||||||
|
} else if (selectedValue instanceof PluginModel) { |
||||||
|
showDefaultPreviewPane(); |
||||||
|
if (this.searchWorker != null && !this.searchWorker.isDone()) { |
||||||
|
this.searchWorker.cancel(true); |
||||||
|
this.searchWorker = null; |
||||||
|
} |
||||||
|
this.searchWorker = new SwingWorker<Image, Void>() { |
||||||
|
@Override |
||||||
|
protected Image doInBackground() throws Exception { |
||||||
|
BufferedImage bufferedImage = ImageIO.read(new URL(((PluginModel) selectedValue).getImageUrl())); |
||||||
|
return bufferedImage; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected void done() { |
||||||
|
try { |
||||||
|
rightSearchResultPane.removeAll(); |
||||||
|
rightSearchResultPane.add(new PluginPreviewPane(((PluginModel) selectedValue).getName(), get(), ((PluginModel) selectedValue).getVersion(), ((PluginModel) selectedValue).getJartime(), ((PluginModel) selectedValue).getType(), ((PluginModel) selectedValue).getPrice())); |
||||||
|
validate(); |
||||||
|
repaint(); |
||||||
|
} catch (InterruptedException e) { |
||||||
|
FRLogger.getLogger().error(e.getMessage()); |
||||||
|
} catch (ExecutionException e) { |
||||||
|
FRLogger.getLogger().error(e.getMessage()); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
}; |
||||||
|
this.searchWorker.execute(); |
||||||
|
|
||||||
|
} else if (selectedValue instanceof ActionModel) { |
||||||
|
showDefaultPreviewPane(); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
private void HandleMoreOrLessResult(int index, MoreModel selectedValue) { |
||||||
|
if (selectedValue.getContent().equals("显示全部")) { |
||||||
|
selectedValue.setContent("收起"); |
||||||
|
rebuildList(index, selectedValue); |
||||||
|
|
||||||
|
} else { |
||||||
|
selectedValue.setContent("显示全部"); |
||||||
|
rebuildList(index, selectedValue); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private void showDefaultPreviewPane() { |
||||||
|
rightSearchResultPane.removeAll(); |
||||||
|
UILabel label = new UILabel(new ImageIcon(getClass().getResource("/com/fr/design/mainframe/alphafine/images/opening.gif"))); |
||||||
|
label.setBorder(BorderFactory.createEmptyBorder(120,0,0,0)); |
||||||
|
rightSearchResultPane.add(label, BorderLayout.CENTER); |
||||||
|
validate(); |
||||||
|
repaint(); |
||||||
|
} |
||||||
|
|
||||||
|
private void initListener() { |
||||||
|
initAWTEventListener(); |
||||||
|
|
||||||
|
initMouseListener(); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
private void initMouseListener() { |
||||||
|
addMouseMotionListener(new MouseMotionAdapter() { |
||||||
|
@Override |
||||||
|
public void mouseDragged(MouseEvent e) { |
||||||
|
doMouseDragged(e); |
||||||
|
} |
||||||
|
}); |
||||||
|
|
||||||
|
addMouseListener(new MouseAdapter() { |
||||||
|
public void mousePressed(MouseEvent e) { |
||||||
|
doMousePressed(e); |
||||||
|
} |
||||||
|
|
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
private void doMousePressed(MouseEvent e) { |
||||||
|
|
||||||
|
pressedPoint = e.getPoint(); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
private void doMouseDragged(MouseEvent e) { |
||||||
|
|
||||||
|
Point point = e.getPoint();// 获取当前坐标
|
||||||
|
|
||||||
|
Point locationPoint = getLocation();// 获取窗体坐标
|
||||||
|
|
||||||
|
int x = locationPoint.x + point.x - pressedPoint.x;// 计算移动后的新坐标
|
||||||
|
|
||||||
|
int y = locationPoint.y + point.y - pressedPoint.y; |
||||||
|
|
||||||
|
setLocation(x, y);// 改变窗体位置
|
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 当鼠标在搜索界面边界外点击时触发 |
||||||
|
*/ |
||||||
|
private void initAWTEventListener() { |
||||||
|
Toolkit.getDefaultToolkit().addAWTEventListener(new AWTEventListener() { |
||||||
|
@Override |
||||||
|
public void eventDispatched(AWTEvent event) { |
||||||
|
if (!AlphaFineDialog.this.isVisible()) { |
||||||
|
return; |
||||||
|
} |
||||||
|
if (event instanceof MouseEvent) { |
||||||
|
MouseEvent k = (MouseEvent) event; |
||||||
|
if (SwingUtilities.isLeftMouseButton(k)) { |
||||||
|
Point p = k.getLocationOnScreen(); |
||||||
|
Rectangle dialogRectangle = AlphaFineDialog.this.getBounds(); |
||||||
|
Rectangle paneRectangle = new Rectangle(AlphaFinePane.createAlphaFinePane().getLocationOnScreen(), AlphaFinePane.createAlphaFinePane().getSize()); |
||||||
|
if (!dialogRectangle.contains(p) && !paneRectangle.contains(p)) { |
||||||
|
AlphaFineDialog.this.dispose(); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
}, AWTEvent.MOUSE_EVENT_MASK|AWTEvent.KEY_EVENT_MASK); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 全局快捷键 |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public static AWTEventListener listener() { |
||||||
|
return new AWTEventListener() { |
||||||
|
|
||||||
|
@Override |
||||||
|
public void eventDispatched(AWTEvent event) { |
||||||
|
if (event instanceof KeyEvent) { |
||||||
|
KeyEvent e = (KeyEvent) event; |
||||||
|
KeyStroke keyStroke = (KeyStroke) KeyStroke.getAWTKeyStrokeForEvent(e); |
||||||
|
KeyStroke storeKeyStroke = DesignerEnvManager.getEnvManager().getAlphafineConfigManager().getShortCutKeyStore(); |
||||||
|
if (ComparatorUtils.equals(keyStroke.toString(), storeKeyStroke.toString())) { |
||||||
|
doClickAction(); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
} |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
private static void doClickAction() { |
||||||
|
AlphaFineHelper.showAlphaFineDialog(); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
@Override |
||||||
|
public void checkValid() throws Exception { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
private void doNavigate(int index) { |
||||||
|
AlphaFineDialog.this.dispose(); |
||||||
|
final Object value = searchResultList.getSelectedValue(); |
||||||
|
if (value instanceof ActionModel) { |
||||||
|
((ActionModel) value).getAction().actionPerformed(null); |
||||||
|
} else if (value instanceof FileModel) { |
||||||
|
DesignerContext.getDesignerFrame().openTemplate(new FileNodeFILE(new FileNode(((FileModel)value).getFilePath(), false))); |
||||||
|
} else if (value instanceof PluginModel) { |
||||||
|
String url = ((PluginModel) value).getPluginUrl(); |
||||||
|
try { |
||||||
|
Desktop.getDesktop().browse(new URI(url)); |
||||||
|
} catch (IOException e) { |
||||||
|
FRLogger.getLogger().error(e.getMessage()); |
||||||
|
} catch (URISyntaxException e) { |
||||||
|
FRLogger.getLogger().error(e.getMessage()); |
||||||
|
} |
||||||
|
} else if (value instanceof DocumentModel) { |
||||||
|
String url = ((DocumentModel) value).getDocumentUrl(); |
||||||
|
try { |
||||||
|
Desktop.getDesktop().browse(new URI(url)); |
||||||
|
} catch (IOException e) { |
||||||
|
FRLogger.getLogger().error(e.getMessage()); |
||||||
|
|
||||||
|
} catch (URISyntaxException e) { |
||||||
|
FRLogger.getLogger().error(e.getMessage()); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* todo:保存到本地的逻辑待修改 |
||||||
|
* @param searchResult |
||||||
|
*/ |
||||||
|
private void saveHistory(SearchResult searchResult) { |
||||||
|
try { |
||||||
|
ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream(AlphaFineHelper.getInfoFile())); |
||||||
|
os.writeObject(searchResult); |
||||||
|
os.close(); |
||||||
|
} catch (IOException e) { |
||||||
|
FRLogger.getLogger().error(e.getMessage()); |
||||||
|
} |
||||||
|
|
||||||
|
sendToServer(); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
*todo:还没做上传服务器 |
||||||
|
*/ |
||||||
|
private void sendToServer() { |
||||||
|
} |
||||||
|
|
||||||
|
private void rebuildList(int index, MoreModel selectedValue) { |
||||||
|
SearchResult moreResult = getMoreResult(selectedValue); |
||||||
|
if((selectedValue).getContent().equals("收起")) { |
||||||
|
for (int i = 0; i < moreResult.size(); i++) { |
||||||
|
this.searchListModel.insertElementAt(moreResult.get(i), index + 4 + i); |
||||||
|
} |
||||||
|
} else { |
||||||
|
for (int i = 0; i < moreResult.size(); i++) { |
||||||
|
this.searchListModel.removeElementAt(index + 4); |
||||||
|
|
||||||
|
} |
||||||
|
} |
||||||
|
this.searchResultList.validate(); |
||||||
|
this.searchResultList.repaint(); |
||||||
|
validate(); |
||||||
|
repaint(); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
private SearchResult getMoreResult(MoreModel selectedValue) { |
||||||
|
SearchResult moreResult; |
||||||
|
switch (selectedValue.getType()) { |
||||||
|
case PLUGIN: |
||||||
|
moreResult = PluginSearchManager.getPluginSearchManager().showMoreSearchResult(); |
||||||
|
break; |
||||||
|
case DOCUMENT: |
||||||
|
moreResult = DocumentSearchManager.getDocumentSearchManager().showMoreSearchResult(); |
||||||
|
break; |
||||||
|
case FILE: |
||||||
|
moreResult = FileSearchManager.getFileSearchManager().showMoreSearchResult(); |
||||||
|
break; |
||||||
|
case ACTION: |
||||||
|
moreResult = ActionSearchManager.getActionSearchManager().showMoreSearchResult(); |
||||||
|
break; |
||||||
|
default: |
||||||
|
moreResult = AlphaSearchManager.getSearchManager().showMoreSearchResult(); |
||||||
|
} |
||||||
|
return moreResult; |
||||||
|
} |
||||||
|
|
||||||
|
private SearchListModel getModel() { |
||||||
|
return (SearchListModel) searchResultList.getModel(); |
||||||
|
} |
||||||
|
|
||||||
|
//测试
|
||||||
|
public static void main(String[] args) { |
||||||
|
AlphaFineDialog alphaFineDialog = new AlphaFineDialog(DesignerContext.getDesignerFrame()); |
||||||
|
alphaFineDialog.setSize(new Dimension(680,55)); |
||||||
|
alphaFineDialog.setVisible(true); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public SearchListModel setjListModel(SearchListModel jListModel) { |
||||||
|
this.searchListModel = jListModel; |
||||||
|
return this.searchListModel; |
||||||
|
} |
||||||
|
|
||||||
|
public SwingWorker getSearchWorker() { |
||||||
|
return searchWorker; |
||||||
|
} |
||||||
|
|
||||||
|
public void setSearchWorker(SwingWorker searchWorker) { |
||||||
|
this.searchWorker = searchWorker; |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,48 @@ |
|||||||
|
package com.fr.design.mainframe.alphafine.component; |
||||||
|
|
||||||
|
import com.fr.base.BaseUtils; |
||||||
|
import com.fr.design.DesignerEnvManager; |
||||||
|
import com.fr.design.dialog.BasicPane; |
||||||
|
import com.fr.design.gui.ibutton.UIButton; |
||||||
|
import com.fr.design.mainframe.alphafine.AlphaFineHelper; |
||||||
|
|
||||||
|
import javax.swing.*; |
||||||
|
import java.awt.*; |
||||||
|
import java.awt.event.ActionEvent; |
||||||
|
import java.awt.event.ActionListener; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by XiaXiang on 2017/3/21. |
||||||
|
*/ |
||||||
|
public class AlphaFinePane extends BasicPane { |
||||||
|
private static AlphaFinePane alphaFinePane; |
||||||
|
|
||||||
|
public static AlphaFinePane createAlphaFinePane() { |
||||||
|
if (alphaFinePane == null) { |
||||||
|
alphaFinePane = new AlphaFinePane(); |
||||||
|
} |
||||||
|
return alphaFinePane; |
||||||
|
} |
||||||
|
public AlphaFinePane() { |
||||||
|
setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 14)); |
||||||
|
if (DesignerEnvManager.getEnvManager().getAlphafineConfigManager().isEnabled()) { |
||||||
|
Toolkit.getDefaultToolkit().addAWTEventListener(AlphaFineDialog.listener(), AWTEvent.KEY_EVENT_MASK); |
||||||
|
} |
||||||
|
UIButton refreshButton = new UIButton(); |
||||||
|
refreshButton.setIcon(BaseUtils.readIcon("/com/fr/design/mainframe/alphafine/images/smallsearch.png")); |
||||||
|
refreshButton.setToolTipText("AlphaFine智能搜索"); |
||||||
|
refreshButton.set4ToolbarButton(); |
||||||
|
this.add(refreshButton); |
||||||
|
refreshButton.addActionListener(new ActionListener() { |
||||||
|
@Override |
||||||
|
public void actionPerformed(ActionEvent e) { |
||||||
|
AlphaFineHelper.showAlphaFineDialog(); |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected String title4PopupWindow() { |
||||||
|
return "AlphaFine"; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,62 @@ |
|||||||
|
package com.fr.design.mainframe.alphafine.component; |
||||||
|
|
||||||
|
import com.fr.design.gui.itextfield.UITextField; |
||||||
|
import com.fr.report.web.button.Image; |
||||||
|
|
||||||
|
import java.awt.*; |
||||||
|
import java.awt.event.MouseAdapter; |
||||||
|
import java.awt.event.MouseEvent; |
||||||
|
import java.awt.event.MouseMotionAdapter; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by XiaXiang on 2017/3/21. |
||||||
|
*/ |
||||||
|
public class AlphaTextField extends UITextField { |
||||||
|
|
||||||
|
private String placeHolder; |
||||||
|
|
||||||
|
private Image image; |
||||||
|
|
||||||
|
public AlphaTextField(String placeHolder) { |
||||||
|
this.placeHolder = placeHolder; |
||||||
|
} |
||||||
|
|
||||||
|
public AlphaTextField() { |
||||||
|
this.placeHolder = null; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
@Override |
||||||
|
public String getText() { |
||||||
|
String text = super.getText(); |
||||||
|
|
||||||
|
if (text.trim().length() == 0 && placeHolder != null) { |
||||||
|
text = placeHolder; |
||||||
|
} |
||||||
|
|
||||||
|
return text; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void paintComponent(Graphics g) { |
||||||
|
super.paintComponent(g); |
||||||
|
|
||||||
|
if (super.getText().length() > 0 || placeHolder == null) { |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
Graphics2D g2 = (Graphics2D) g; |
||||||
|
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); |
||||||
|
g2.setColor(super.getDisabledTextColor()); |
||||||
|
g2.drawString(placeHolder, getInsets().left, g.getFontMetrics().getMaxAscent() + getInsets().top + 15); |
||||||
|
} |
||||||
|
|
||||||
|
public Image getImage() { |
||||||
|
return image; |
||||||
|
} |
||||||
|
|
||||||
|
public void setImage(Image image) { |
||||||
|
this.image = image; |
||||||
|
} |
||||||
|
|
||||||
|
} |
After Width: | Height: | Size: 369 B |
After Width: | Height: | Size: 372 B |
After Width: | Height: | Size: 248 B |
After Width: | Height: | Size: 418 B |
After Width: | Height: | Size: 237 B |
After Width: | Height: | Size: 258 B |
After Width: | Height: | Size: 503 B |
After Width: | Height: | Size: 8.6 KiB |
After Width: | Height: | Size: 169 KiB |
After Width: | Height: | Size: 15 KiB |
@ -0,0 +1,28 @@ |
|||||||
|
package com.fr.design.mainframe.alphafine.listener; |
||||||
|
|
||||||
|
import com.sun.awt.AWTUtilities; |
||||||
|
|
||||||
|
import java.awt.*; |
||||||
|
import java.awt.event.ComponentAdapter; |
||||||
|
import java.awt.event.ComponentEvent; |
||||||
|
import java.awt.geom.RoundRectangle2D; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by XiaXiang on 2017/5/4. |
||||||
|
*/ |
||||||
|
public class ComponentHandler extends ComponentAdapter { |
||||||
|
public void componentResized(ComponentEvent e) { |
||||||
|
Window win = (Window) e.getSource(); |
||||||
|
Frame frame = (win instanceof Frame) ? (Frame) win : null; |
||||||
|
if ((frame != null) |
||||||
|
&& ((frame.getExtendedState() & Frame.MAXIMIZED_BOTH) != 0)) { |
||||||
|
AWTUtilities.setWindowShape(win, null); |
||||||
|
} else { |
||||||
|
/** 设置圆角 */ |
||||||
|
AWTUtilities.setWindowShape(win, |
||||||
|
new RoundRectangle2D.Double(0.0D, 0.0D, win.getWidth(), |
||||||
|
win.getHeight(), 16.0D, 16.0D)); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
@ -0,0 +1,42 @@ |
|||||||
|
/* |
||||||
|
* Copyright 2000-2009 JetBrains s.r.o. |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
|
package com.fr.design.mainframe.alphafine.listener; |
||||||
|
|
||||||
|
import javax.swing.event.DocumentEvent; |
||||||
|
import javax.swing.event.DocumentListener; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by XiaXiang on 2017/3/21. |
||||||
|
*/ |
||||||
|
public abstract class DocumentAdapter implements DocumentListener { |
||||||
|
|
||||||
|
@Override |
||||||
|
public void insertUpdate(DocumentEvent e) { |
||||||
|
textChanged(e); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void removeUpdate(DocumentEvent e) { |
||||||
|
textChanged(e); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void changedUpdate(DocumentEvent e) { |
||||||
|
textChanged(e); |
||||||
|
} |
||||||
|
|
||||||
|
protected abstract void textChanged(DocumentEvent e); |
||||||
|
} |
@ -0,0 +1,39 @@ |
|||||||
|
package com.fr.design.mainframe.alphafine.model; |
||||||
|
|
||||||
|
import javax.swing.*; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by XiaXiang on 2017/4/20. |
||||||
|
*/ |
||||||
|
public class SearchListModel extends DefaultListModel { |
||||||
|
SearchResult myDelegate; |
||||||
|
|
||||||
|
public SearchListModel( SearchResult searchResult) { |
||||||
|
this.myDelegate = searchResult; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void addElement(Object element) { |
||||||
|
myDelegate.add(element); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public Object getElementAt(int index) { |
||||||
|
return myDelegate.get(index); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void insertElementAt(Object element, int index) { |
||||||
|
this.myDelegate.add(index, element); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void removeElementAt(int index) { |
||||||
|
this.myDelegate.remove(index); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public int getSize() { |
||||||
|
return this.myDelegate.size(); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,20 @@ |
|||||||
|
package com.fr.design.mainframe.alphafine.model; |
||||||
|
|
||||||
|
import java.util.ArrayList; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by XiaXiang on 2017/4/20. |
||||||
|
*/ |
||||||
|
public class SearchResult extends ArrayList<Object> { |
||||||
|
private boolean needMore; |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public boolean isNeedMore() { |
||||||
|
return needMore; |
||||||
|
} |
||||||
|
|
||||||
|
public void setNeedMore(boolean needMore) { |
||||||
|
this.needMore = needMore; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,7 @@ |
|||||||
|
package com.fr.design.mainframe.alphafine.previewPane; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by XiaXiang on 2017/5/5. |
||||||
|
*/ |
||||||
|
public class ActionPreviewPane { |
||||||
|
} |
@ -0,0 +1,45 @@ |
|||||||
|
package com.fr.design.mainframe.alphafine.previewPane; |
||||||
|
|
||||||
|
|
||||||
|
import com.fr.design.gui.itextarea.UITextArea; |
||||||
|
import com.fr.design.mainframe.alphafine.AlphaFineConstants; |
||||||
|
import com.fr.design.utils.gui.GUICoreUtils; |
||||||
|
|
||||||
|
import javax.swing.*; |
||||||
|
import java.awt.*; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by XiaXiang on 2017/5/2. |
||||||
|
*/ |
||||||
|
public class DocumentPreviewPane extends JPanel { |
||||||
|
|
||||||
|
public DocumentPreviewPane(String title, String summary) { |
||||||
|
this.setLayout(new BorderLayout()); |
||||||
|
this.setBackground(Color.white); |
||||||
|
UITextArea titleArea = new UITextArea(title); |
||||||
|
UITextArea contentArea = new UITextArea(summary); |
||||||
|
titleArea.setOpaque(false); |
||||||
|
contentArea.setOpaque(false); |
||||||
|
titleArea.setBorder(BorderFactory.createEmptyBorder(0,0,0,0)); |
||||||
|
titleArea.setForeground(AlphaFineConstants.BLUE); |
||||||
|
contentArea.setForeground(AlphaFineConstants.BLACK); |
||||||
|
titleArea.setPreferredSize(new Dimension(360, 30)); |
||||||
|
titleArea.setFont(new Font("Song_TypeFace",0,18)); |
||||||
|
contentArea.setFont(new Font("Song_TypeFace",0,12)); |
||||||
|
add(titleArea, BorderLayout.NORTH); |
||||||
|
add(contentArea, BorderLayout.CENTER); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public static void main(String[] args) { |
||||||
|
JFrame jf = new JFrame("test"); |
||||||
|
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); |
||||||
|
JPanel content = (JPanel) jf.getContentPane(); |
||||||
|
content.setLayout(null); |
||||||
|
|
||||||
|
content.add(new DocumentPreviewPane("test", "ababababaabbababab")); |
||||||
|
GUICoreUtils.centerWindow(jf); |
||||||
|
jf.setSize(400, 400); |
||||||
|
jf.setVisible(true); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,23 @@ |
|||||||
|
package com.fr.design.mainframe.alphafine.previewPane; |
||||||
|
|
||||||
|
import com.fr.design.gui.ilable.UILabel; |
||||||
|
|
||||||
|
import javax.swing.*; |
||||||
|
import java.awt.*; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by XiaXiang on 2017/5/2. |
||||||
|
*/ |
||||||
|
public class FilePreviewPane extends JPanel { |
||||||
|
|
||||||
|
public FilePreviewPane(Image image) { |
||||||
|
UILabel label = new UILabel(); |
||||||
|
label.setOpaque(true); |
||||||
|
label.setBackground(Color.white); |
||||||
|
float scale = image.getWidth(null) / 380; |
||||||
|
image = image.getScaledInstance(380, (int) (image.getHeight(null) / scale), Image.SCALE_SMOOTH); |
||||||
|
label.setIcon(new ImageIcon(image)); |
||||||
|
add(label); |
||||||
|
} |
||||||
|
} |
||||||
|
|
@ -0,0 +1,58 @@ |
|||||||
|
package com.fr.design.mainframe.alphafine.previewPane; |
||||||
|
|
||||||
|
import com.fr.design.gui.ilable.UILabel; |
||||||
|
import com.fr.design.mainframe.alphafine.CellType; |
||||||
|
|
||||||
|
import javax.swing.*; |
||||||
|
import java.awt.*; |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* Created by XiaXiang on 2017/5/2. |
||||||
|
*/ |
||||||
|
public class PluginPreviewPane extends JPanel { |
||||||
|
public PluginPreviewPane(String title, Image image, String version, String jartime, CellType type, int price) { |
||||||
|
this.setLayout(new BorderLayout()); |
||||||
|
this.setBorder(BorderFactory.createEmptyBorder(50,0,0,0)); |
||||||
|
this.setBackground(Color.white); |
||||||
|
UILabel imageLabel = new UILabel(); |
||||||
|
image = image.getScaledInstance(200, 200, Image.SCALE_SMOOTH); |
||||||
|
imageLabel.setIcon(new ImageIcon(image)); |
||||||
|
UILabel nameLabel = new UILabel(title); |
||||||
|
nameLabel.setVerticalAlignment(SwingConstants.CENTER); |
||||||
|
JPanel line = new JPanel(); |
||||||
|
line.setPreferredSize(new Dimension(200,1)); |
||||||
|
line.setBackground(new Color(0xd2d2d2)); |
||||||
|
JPanel panel = new JPanel(new BorderLayout()); |
||||||
|
panel.setBackground(Color.white); |
||||||
|
JPanel bottomPane = new JPanel(new BorderLayout()); |
||||||
|
bottomPane.setBackground(Color.white); |
||||||
|
bottomPane.setBorder(BorderFactory.createEmptyBorder(10,0,0,0)); |
||||||
|
if (type == CellType.PLUGIN) { |
||||||
|
UILabel versionLabel = new UILabel("V" + version); |
||||||
|
versionLabel.setBorder(BorderFactory.createEmptyBorder(0,20,10,20)); |
||||||
|
versionLabel.setForeground(new Color(0x666666)); |
||||||
|
versionLabel.setFont(new Font("Song_TypeFace",0,12)); |
||||||
|
panel.add(versionLabel, BorderLayout.CENTER); |
||||||
|
UILabel jartimeLabel = new UILabel(jartime.substring(0, 10)); |
||||||
|
jartimeLabel.setForeground(new Color(0x222222)); |
||||||
|
jartimeLabel.setFont(new Font("Song_TypeFace",0,12)); |
||||||
|
bottomPane.add(jartimeLabel, BorderLayout.EAST); |
||||||
|
} |
||||||
|
nameLabel.setFont(new Font("Song_TypeFace",0,18)); |
||||||
|
nameLabel.setBackground(new Color(0x3394f0)); |
||||||
|
nameLabel.setBorder(BorderFactory.createEmptyBorder(20,20,10,20)); |
||||||
|
line.setBorder(BorderFactory.createEmptyBorder(20, 0, 10, 0)); |
||||||
|
String price0 = price == 0 ? "免费" : String.valueOf(price); |
||||||
|
UILabel priceLabel = new UILabel(price0); |
||||||
|
priceLabel.setForeground(new Color(0xf46c4c)); |
||||||
|
priceLabel.setFont(new Font("Song_TypeFace",0,10)); |
||||||
|
bottomPane.add(priceLabel, BorderLayout.WEST); |
||||||
|
panel.add(nameLabel, BorderLayout.NORTH); |
||||||
|
panel.add(line, BorderLayout.SOUTH); |
||||||
|
nameLabel.setForeground(new Color(0x3394f0)); |
||||||
|
add(imageLabel, BorderLayout.NORTH); |
||||||
|
add(panel, BorderLayout.CENTER); |
||||||
|
add(bottomPane, BorderLayout.SOUTH); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,63 @@ |
|||||||
|
package com.fr.design.mainframe.alphafine.searchManager; |
||||||
|
|
||||||
|
import com.fr.design.DesignerEnvManager; |
||||||
|
import com.fr.design.actions.UpdateAction; |
||||||
|
import com.fr.design.mainframe.alphafine.CellType; |
||||||
|
import com.fr.design.mainframe.alphafine.cell.cellModel.MoreModel; |
||||||
|
import com.fr.design.mainframe.alphafine.cell.cellModel.ActionModel; |
||||||
|
import com.fr.design.mainframe.alphafine.model.SearchResult; |
||||||
|
import com.fr.design.mainframe.toolbar.UpdateActionManager; |
||||||
|
|
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by XiaXiang on 2017/3/27. |
||||||
|
*/ |
||||||
|
public class ActionSearchManager implements AlphaFineSearchProcessor { |
||||||
|
private static ActionSearchManager actionSearchManager = null; |
||||||
|
private SearchResult filterModelList; |
||||||
|
private SearchResult lessModelList; |
||||||
|
private SearchResult moreModelList; |
||||||
|
|
||||||
|
public synchronized static ActionSearchManager getActionSearchManager() { |
||||||
|
if (actionSearchManager == null) { |
||||||
|
actionSearchManager = new ActionSearchManager(); |
||||||
|
} |
||||||
|
return actionSearchManager; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public synchronized SearchResult showLessSearchResult(String searchText) { |
||||||
|
this.filterModelList = new SearchResult(); |
||||||
|
this.lessModelList = new SearchResult(); |
||||||
|
this.moreModelList = new SearchResult(); |
||||||
|
if (DesignerEnvManager.getEnvManager().getAlphafineConfigManager().isContainAction()) { |
||||||
|
List<UpdateAction> updateActions = UpdateActionManager.getUpdateActionManager().getUpdateActions(); |
||||||
|
for (UpdateAction updateAction : updateActions) { |
||||||
|
if (updateAction.getName() != null && updateAction.getName().toLowerCase().contains(searchText.toLowerCase())) { |
||||||
|
filterModelList.add(new ActionModel(updateAction.getName() ,updateAction)); |
||||||
|
} |
||||||
|
} |
||||||
|
final int length = Math.min(5, filterModelList.size()); |
||||||
|
for (int i = 0; i < length; i++) { |
||||||
|
lessModelList.add(filterModelList.get(i)); |
||||||
|
} |
||||||
|
for (int i = length; i < filterModelList.size(); i++) { |
||||||
|
moreModelList.add(filterModelList.get(i)); |
||||||
|
} |
||||||
|
if (filterModelList.size() > 0) { |
||||||
|
if (filterModelList.size() > 5) { |
||||||
|
lessModelList.add(0, new MoreModel("设置", "显示全部",true, CellType.ACTION)); |
||||||
|
} else { |
||||||
|
lessModelList.add(0, new MoreModel("设置", CellType.ACTION)); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
return lessModelList; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public SearchResult showMoreSearchResult() { |
||||||
|
return moreModelList; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,12 @@ |
|||||||
|
package com.fr.design.mainframe.alphafine.searchManager; |
||||||
|
|
||||||
|
import com.fr.design.mainframe.alphafine.model.SearchResult; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by XiaXiang on 2017/3/27. |
||||||
|
*/ |
||||||
|
public interface AlphaFineSearchProcessor { |
||||||
|
SearchResult showLessSearchResult(String searchText); |
||||||
|
|
||||||
|
SearchResult showMoreSearchResult(); |
||||||
|
} |
@ -0,0 +1,88 @@ |
|||||||
|
package com.fr.design.mainframe.alphafine.searchManager; |
||||||
|
|
||||||
|
import com.fr.design.mainframe.alphafine.AlphaFineHelper; |
||||||
|
import com.fr.design.mainframe.alphafine.cell.cellModel.MoreModel; |
||||||
|
import com.fr.design.mainframe.alphafine.model.SearchResult; |
||||||
|
|
||||||
|
import java.io.*; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by XiaXiang on 2017/3/28. |
||||||
|
*/ |
||||||
|
public class AlphaSearchManager implements AlphaFineSearchProcessor { |
||||||
|
private static AlphaSearchManager searchManager; |
||||||
|
private static PluginSearchManager pluginSearchManager; |
||||||
|
private static DocumentSearchManager documentSearchManager; |
||||||
|
private static FileSearchManager fileSearchManager; |
||||||
|
private static ActionSearchManager actionSearchManager; |
||||||
|
private static ConcludeSearchManager concludeSearchManager; |
||||||
|
private static LatestSearchManager latestSearchManager; |
||||||
|
|
||||||
|
public synchronized static AlphaSearchManager getSearchManager() { |
||||||
|
init(); |
||||||
|
return searchManager; |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
private synchronized static void init() { |
||||||
|
if (searchManager == null) { |
||||||
|
searchManager = new AlphaSearchManager(); |
||||||
|
pluginSearchManager = PluginSearchManager.getPluginSearchManager(); |
||||||
|
documentSearchManager = DocumentSearchManager.getDocumentSearchManager(); |
||||||
|
fileSearchManager = FileSearchManager.getFileSearchManager(); |
||||||
|
actionSearchManager = ActionSearchManager.getActionSearchManager(); |
||||||
|
concludeSearchManager = ConcludeSearchManager.getConcludeSearchManager(); |
||||||
|
latestSearchManager = LatestSearchManager.getLatestSearchManager(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public synchronized SearchResult showLessSearchResult(String searchText) { |
||||||
|
SearchResult latestModelList = latestSearchManager.showLessSearchResult(searchText); |
||||||
|
SearchResult concludeModelList = concludeSearchManager.showLessSearchResult(searchText); |
||||||
|
SearchResult actionModelList = actionSearchManager.showLessSearchResult(searchText); |
||||||
|
SearchResult fileModelList = fileSearchManager.showLessSearchResult(searchText); |
||||||
|
SearchResult documentModelList = documentSearchManager.showLessSearchResult(searchText); |
||||||
|
SearchResult pluginModelList = pluginSearchManager.showLessSearchResult(searchText); |
||||||
|
latestModelList.addAll(concludeModelList); |
||||||
|
latestModelList.addAll(actionModelList); |
||||||
|
latestModelList.addAll(fileModelList); |
||||||
|
latestModelList.addAll(documentModelList); |
||||||
|
latestModelList.addAll(pluginModelList); |
||||||
|
return latestModelList; |
||||||
|
} |
||||||
|
|
||||||
|
public SearchResult showDefaultSearchResult() { |
||||||
|
SearchResult searchResult = new SearchResult(); |
||||||
|
searchResult.add(new MoreModel("本地常用")); |
||||||
|
searchResult.add(new MoreModel("猜您喜欢")); |
||||||
|
searchResult.add(new MoreModel("设置")); |
||||||
|
searchResult.add(new MoreModel("模板")); |
||||||
|
searchResult.add(new MoreModel("帮助文档")); |
||||||
|
searchResult.add(new MoreModel("应用中心")); |
||||||
|
return searchResult; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public SearchResult showMoreSearchResult() { |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
public SearchResult getLatestSearchResult() { |
||||||
|
ObjectInputStream is; |
||||||
|
SearchResult searchResult; |
||||||
|
try { |
||||||
|
is = new ObjectInputStream(new FileInputStream(AlphaFineHelper.getInfoFile())); |
||||||
|
searchResult = (SearchResult) is.readObject(); |
||||||
|
|
||||||
|
} catch (IOException e) { |
||||||
|
searchResult = new SearchResult(); |
||||||
|
} catch (ClassNotFoundException e) { |
||||||
|
searchResult = new SearchResult(); |
||||||
|
|
||||||
|
} |
||||||
|
return searchResult; |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,31 @@ |
|||||||
|
package com.fr.design.mainframe.alphafine.searchManager; |
||||||
|
|
||||||
|
import com.fr.design.mainframe.alphafine.cell.cellModel.MoreModel; |
||||||
|
import com.fr.design.mainframe.alphafine.model.SearchResult; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by XiaXiang on 2017/3/31. |
||||||
|
*/ |
||||||
|
public class ConcludeSearchManager implements AlphaFineSearchProcessor { |
||||||
|
private static ConcludeSearchManager concludeSearchManager = null; |
||||||
|
private SearchResult modelList; |
||||||
|
|
||||||
|
public synchronized static ConcludeSearchManager getConcludeSearchManager() { |
||||||
|
if (concludeSearchManager == null) { |
||||||
|
concludeSearchManager = new ConcludeSearchManager(); |
||||||
|
} |
||||||
|
return concludeSearchManager; |
||||||
|
} |
||||||
|
@Override |
||||||
|
public synchronized SearchResult showLessSearchResult(String searchText) { |
||||||
|
this.modelList = new SearchResult(); |
||||||
|
modelList.add(new MoreModel("猜您需要", false)); |
||||||
|
return modelList; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public SearchResult showMoreSearchResult() { |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,90 @@ |
|||||||
|
package com.fr.design.mainframe.alphafine.searchManager; |
||||||
|
|
||||||
|
import com.fr.design.DesignerEnvManager; |
||||||
|
import com.fr.design.mainframe.alphafine.AlphaFineConstants; |
||||||
|
import com.fr.design.mainframe.alphafine.CellType; |
||||||
|
import com.fr.design.mainframe.alphafine.cell.cellModel.DocumentModel; |
||||||
|
import com.fr.design.mainframe.alphafine.cell.cellModel.MoreModel; |
||||||
|
import com.fr.design.mainframe.alphafine.model.SearchResult; |
||||||
|
import com.fr.general.FRLogger; |
||||||
|
import com.fr.general.http.HttpClient; |
||||||
|
import com.fr.json.JSONArray; |
||||||
|
import com.fr.json.JSONException; |
||||||
|
import com.fr.json.JSONObject; |
||||||
|
|
||||||
|
import java.security.AlgorithmConstraints; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by XiaXiang on 2017/3/27. |
||||||
|
*/ |
||||||
|
public class DocumentSearchManager implements AlphaFineSearchProcessor { |
||||||
|
private static DocumentSearchManager documentSearchManager = null; |
||||||
|
private SearchResult lessModelList; |
||||||
|
private SearchResult moreModelList; |
||||||
|
|
||||||
|
public synchronized static DocumentSearchManager getDocumentSearchManager() { |
||||||
|
if (documentSearchManager == null) { |
||||||
|
documentSearchManager = new DocumentSearchManager(); |
||||||
|
|
||||||
|
} |
||||||
|
return documentSearchManager; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public synchronized SearchResult showLessSearchResult(String searchText) { |
||||||
|
this.lessModelList = new SearchResult(); |
||||||
|
this.moreModelList = new SearchResult(); |
||||||
|
if (DesignerEnvManager.getEnvManager().getAlphafineConfigManager().isContainDocument()) { |
||||||
|
String result; |
||||||
|
String url = "http://help.finereport.com/?api-search-title-" + searchText + "-1"; |
||||||
|
HttpClient httpClient = new HttpClient(url); |
||||||
|
httpClient.setTimeout(5000); |
||||||
|
httpClient.asGet(); |
||||||
|
result = httpClient.getResponseText(); |
||||||
|
try { |
||||||
|
JSONObject jsonObject = new JSONObject(result); |
||||||
|
JSONArray jsonArray = null; |
||||||
|
if (jsonObject.get("docdata") != null) { |
||||||
|
jsonArray = (JSONArray) jsonObject.get("docdata"); |
||||||
|
} |
||||||
|
if (jsonArray.length() > 0) { |
||||||
|
if (jsonArray.length() > 5) { |
||||||
|
lessModelList.add(new MoreModel("帮助文档", "显示全部",true, CellType.DOCUMENT)); |
||||||
|
} else { |
||||||
|
lessModelList.add(new MoreModel("帮助文档", CellType.DOCUMENT)); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
final int length = Math.min(AlphaFineConstants.SHOW_SIZE, jsonArray.length()); |
||||||
|
for (int i = 0; i < length; i++) { |
||||||
|
DocumentModel cellModel = getDocumentModel(jsonArray, i); |
||||||
|
this.lessModelList.add(cellModel); |
||||||
|
} |
||||||
|
for (int i = length; i < jsonArray.length(); i++) { |
||||||
|
DocumentModel cellModel = getDocumentModel(jsonArray, i); |
||||||
|
this.moreModelList.add(cellModel); |
||||||
|
} |
||||||
|
|
||||||
|
} catch (JSONException e) { |
||||||
|
FRLogger.getLogger().error(e.getMessage()); |
||||||
|
return lessModelList; |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
return lessModelList; |
||||||
|
} |
||||||
|
|
||||||
|
private DocumentModel getDocumentModel(JSONArray jsonArray, int i) throws JSONException { |
||||||
|
JSONObject object = jsonArray.getJSONObject(i); |
||||||
|
String name = (String) object.get("title"); |
||||||
|
String content = ((String) object.get("summary")); |
||||||
|
String documentUrl = AlphaFineConstants.DOCUMENT_SEARCH_URL + object.get("did") + ".html"; |
||||||
|
return new DocumentModel(name, content, documentUrl); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public SearchResult showMoreSearchResult() { |
||||||
|
return moreModelList; |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,137 @@ |
|||||||
|
package com.fr.design.mainframe.alphafine.searchManager; |
||||||
|
|
||||||
|
import com.fr.base.Env; |
||||||
|
import com.fr.base.FRContext; |
||||||
|
import com.fr.design.DesignerEnvManager; |
||||||
|
import com.fr.design.mainframe.alphafine.AlphaFineConstants; |
||||||
|
import com.fr.design.mainframe.alphafine.CellType; |
||||||
|
import com.fr.design.mainframe.alphafine.cell.cellModel.FileModel; |
||||||
|
import com.fr.design.mainframe.alphafine.cell.cellModel.MoreModel; |
||||||
|
import com.fr.design.mainframe.alphafine.model.SearchResult; |
||||||
|
import com.fr.file.filetree.FileNode; |
||||||
|
import com.fr.general.FRLogger; |
||||||
|
import com.fr.stable.StableUtils; |
||||||
|
import com.fr.stable.project.ProjectConstants; |
||||||
|
|
||||||
|
import java.io.*; |
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by XiaXiang on 2017/3/27. |
||||||
|
*/ |
||||||
|
public class FileSearchManager implements AlphaFineSearchProcessor { |
||||||
|
private SearchResult filterModelList; |
||||||
|
private SearchResult lessModelList; |
||||||
|
private SearchResult moreModelList; |
||||||
|
private List<FileNode> fileNodes = null; |
||||||
|
private static FileSearchManager fileSearchManager = null; |
||||||
|
|
||||||
|
public synchronized static FileSearchManager getFileSearchManager() { |
||||||
|
init(); |
||||||
|
return fileSearchManager; |
||||||
|
} |
||||||
|
|
||||||
|
public synchronized static void init() { |
||||||
|
if (fileSearchManager == null) { |
||||||
|
fileSearchManager = new FileSearchManager(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public synchronized SearchResult showLessSearchResult(String searchText) { |
||||||
|
this.filterModelList = new SearchResult(); |
||||||
|
this.lessModelList = new SearchResult(); |
||||||
|
this.moreModelList = new SearchResult(); |
||||||
|
Env env = FRContext.getCurrentEnv(); |
||||||
|
fileNodes = new ArrayList<>(); |
||||||
|
fileNodes = listTpl(env, ProjectConstants.REPORTLETS_NAME, true); |
||||||
|
for (FileNode node : fileNodes) { |
||||||
|
boolean hasName = false; |
||||||
|
String fileEnvPath = node.getEnvPath(); |
||||||
|
String filePath = StableUtils.pathJoin(env.getPath(), fileEnvPath); |
||||||
|
if (DesignerEnvManager.getEnvManager().getAlphafineConfigManager().isContainTemplate()) { |
||||||
|
if (node.getName().toLowerCase().contains(searchText.toLowerCase())) { |
||||||
|
FileModel model = new FileModel(node.getName(), node.getEnvPath().substring(node.getName().length(), node.getEnvPath().length()),node.getEnvPath()); |
||||||
|
this.filterModelList.add(model); |
||||||
|
hasName = true; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
if (DesignerEnvManager.getEnvManager().getAlphafineConfigManager().isContainFileContent()) { |
||||||
|
//文件的内容搜索
|
||||||
|
try { |
||||||
|
BufferedReader reader = new BufferedReader(new FileReader(filePath)); |
||||||
|
String line; |
||||||
|
int columnNumber; |
||||||
|
boolean test = false; |
||||||
|
while ((line = reader.readLine()) != null) { |
||||||
|
columnNumber = line.toLowerCase().indexOf(searchText); |
||||||
|
if (columnNumber != -1) { |
||||||
|
test = true; |
||||||
|
} |
||||||
|
} |
||||||
|
if (test && !hasName) { |
||||||
|
FileModel model = new FileModel(node.getName(), node.getEnvPath().substring(node.getName().length(), node.getEnvPath().length()),node.getEnvPath()); |
||||||
|
this.filterModelList.add(model); |
||||||
|
} |
||||||
|
reader.close(); |
||||||
|
} catch (FileNotFoundException e) { |
||||||
|
FRLogger.getLogger().error(e.getMessage()); |
||||||
|
} catch (IOException e) { |
||||||
|
FRLogger.getLogger().error(e.getMessage()); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
final int length = Math.min(AlphaFineConstants.SHOW_SIZE, filterModelList.size()); |
||||||
|
for (int i = 0; i < length; i++) { |
||||||
|
lessModelList.add(filterModelList.get(i)); |
||||||
|
} |
||||||
|
for (int i = length; i< filterModelList.size(); i++) { |
||||||
|
moreModelList.add(filterModelList.get(i)); |
||||||
|
} |
||||||
|
if (filterModelList.size() > 0) { |
||||||
|
if (filterModelList.size() > AlphaFineConstants.SHOW_SIZE) { |
||||||
|
lessModelList.add(0,new MoreModel("模板", "显示全部",true, CellType.FILE)); |
||||||
|
} else { |
||||||
|
lessModelList.add(0,new MoreModel("模板", CellType.FILE)); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
return this.lessModelList; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public SearchResult showMoreSearchResult() { |
||||||
|
return moreModelList; |
||||||
|
} |
||||||
|
|
||||||
|
private List<FileNode> listTpl(Env env, String rootFilePath, boolean recurse) { |
||||||
|
List<FileNode> fileNodeList = new ArrayList<FileNode>(); |
||||||
|
try { |
||||||
|
listAll(env, rootFilePath, fileNodeList, recurse); |
||||||
|
} catch (Exception e) { |
||||||
|
FRContext.getLogger().error(e.getMessage(), e); |
||||||
|
} |
||||||
|
return fileNodeList; |
||||||
|
} |
||||||
|
|
||||||
|
private void listAll(Env env, String rootFilePath, List<FileNode> nodeList, boolean recurse) throws Exception { |
||||||
|
FileNode[] fns = env.listFile(rootFilePath); |
||||||
|
for (int i = 0; i < fns.length; i++) { |
||||||
|
FileNode fileNode = fns[i]; |
||||||
|
if (fileNode.isDirectory()) { |
||||||
|
if (recurse) { |
||||||
|
listAll(env, rootFilePath + File.separator + fns[i].getName(), nodeList, true); |
||||||
|
} else { |
||||||
|
nodeList.add(fns[i]); |
||||||
|
} |
||||||
|
} else { |
||||||
|
nodeList.add(fileNode); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,53 @@ |
|||||||
|
package com.fr.design.mainframe.alphafine.searchManager; |
||||||
|
|
||||||
|
import com.fr.design.mainframe.alphafine.cell.cellModel.MoreModel; |
||||||
|
import com.fr.design.mainframe.alphafine.model.SearchResult; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by XiaXiang on 2017/3/31. |
||||||
|
*/ |
||||||
|
public class LatestSearchManager implements AlphaFineSearchProcessor { |
||||||
|
private static LatestSearchManager latestSearchManager = null; |
||||||
|
private SearchResult modelList; |
||||||
|
private SearchResult latestModelList; |
||||||
|
|
||||||
|
public synchronized static LatestSearchManager getLatestSearchManager() { |
||||||
|
if (latestSearchManager == null) { |
||||||
|
latestSearchManager = new LatestSearchManager(); |
||||||
|
} |
||||||
|
return latestSearchManager; |
||||||
|
} |
||||||
|
@Override |
||||||
|
public synchronized SearchResult showLessSearchResult(String searchText) { |
||||||
|
this.modelList = new SearchResult(); |
||||||
|
modelList.add(new MoreModel("本地常用", false)); |
||||||
|
if (getLatestModelList() != null && getLatestModelList().size() > 0) { |
||||||
|
modelList.addAll(getLatestModelList()); |
||||||
|
} |
||||||
|
return modelList; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public SearchResult showMoreSearchResult() { |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
public SearchResult getModelList() { |
||||||
|
return modelList; |
||||||
|
} |
||||||
|
|
||||||
|
public void setModelList(SearchResult modelList) { |
||||||
|
this.modelList = modelList; |
||||||
|
} |
||||||
|
|
||||||
|
public SearchResult getLatestModelList() { |
||||||
|
if(this.latestModelList != null && this.latestModelList.size() > 0) { |
||||||
|
return this.latestModelList; |
||||||
|
} |
||||||
|
return AlphaSearchManager.getSearchManager().getLatestSearchResult(); |
||||||
|
} |
||||||
|
|
||||||
|
public void setLatestModelList(SearchResult latestModelList) { |
||||||
|
this.latestModelList = latestModelList; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,104 @@ |
|||||||
|
package com.fr.design.mainframe.alphafine.searchManager; |
||||||
|
|
||||||
|
import com.fr.design.DesignerEnvManager; |
||||||
|
import com.fr.design.mainframe.alphafine.AlphaFineConstants; |
||||||
|
import com.fr.design.mainframe.alphafine.CellType; |
||||||
|
import com.fr.design.mainframe.alphafine.cell.cellModel.PluginModel; |
||||||
|
import com.fr.design.mainframe.alphafine.cell.cellModel.MoreModel; |
||||||
|
import com.fr.design.mainframe.alphafine.model.SearchResult; |
||||||
|
import com.fr.general.ComparatorUtils; |
||||||
|
import com.fr.general.FRLogger; |
||||||
|
import com.fr.general.http.HttpClient; |
||||||
|
import com.fr.json.JSONArray; |
||||||
|
import com.fr.json.JSONException; |
||||||
|
import com.fr.json.JSONObject; |
||||||
|
|
||||||
|
import java.net.URLEncoder; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by XiaXiang on 2017/3/27. |
||||||
|
*/ |
||||||
|
public class PluginSearchManager implements AlphaFineSearchProcessor { |
||||||
|
private static PluginSearchManager pluginSearchManager = null; |
||||||
|
private SearchResult lessModelList; |
||||||
|
private SearchResult moreModelList; |
||||||
|
|
||||||
|
public synchronized static PluginSearchManager getPluginSearchManager() { |
||||||
|
if (pluginSearchManager == null) { |
||||||
|
pluginSearchManager = new PluginSearchManager(); |
||||||
|
} |
||||||
|
return pluginSearchManager; |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public synchronized SearchResult showLessSearchResult(String searchText) { |
||||||
|
|
||||||
|
this.lessModelList = new SearchResult(); |
||||||
|
this.moreModelList = new SearchResult(); |
||||||
|
if (DesignerEnvManager.getEnvManager().getAlphafineConfigManager().isContainPlugin()) { |
||||||
|
String result; |
||||||
|
try { |
||||||
|
String encodedKey = URLEncoder.encode(searchText, "UTF-8"); |
||||||
|
String url = AlphaFineConstants.PLUGIN_SEARCH_URL + "?keyword=" + encodedKey; |
||||||
|
HttpClient httpClient = new HttpClient(url); |
||||||
|
httpClient.setTimeout(5000); |
||||||
|
httpClient.asGet(); |
||||||
|
result = httpClient.getResponseText(); |
||||||
|
JSONObject jsonObject = new JSONObject(result); |
||||||
|
JSONArray jsonArray = null; |
||||||
|
if (jsonObject.get("result") != null) { |
||||||
|
jsonArray = (JSONArray) jsonObject.get("result"); |
||||||
|
} |
||||||
|
if (jsonArray.length() > 0) { |
||||||
|
if (jsonArray.length() > AlphaFineConstants.SHOW_SIZE) { |
||||||
|
lessModelList.add(new MoreModel("应用中心", "显示全部",true, CellType.PLUGIN)); |
||||||
|
} else { |
||||||
|
lessModelList.add(new MoreModel("应用中心", CellType.PLUGIN)); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
int length = Math.min(5, jsonArray.length()); |
||||||
|
for (int i = 0; i < length; i++) { |
||||||
|
PluginModel cellModel = getPluginModel(jsonArray, i); |
||||||
|
this.lessModelList.add(cellModel); |
||||||
|
} |
||||||
|
for (int i = length; i < jsonArray.length(); i++) { |
||||||
|
PluginModel cellModel = getPluginModel(jsonArray, i); |
||||||
|
this.moreModelList.add(cellModel); |
||||||
|
} |
||||||
|
} catch (Exception e) { |
||||||
|
FRLogger.getLogger().error(e.getMessage()); |
||||||
|
return lessModelList; |
||||||
|
} |
||||||
|
} |
||||||
|
return this.lessModelList; |
||||||
|
} |
||||||
|
|
||||||
|
private PluginModel getPluginModel(JSONArray jsonArray, int i) throws JSONException { |
||||||
|
JSONObject object = jsonArray.getJSONObject(i); |
||||||
|
String name = (String) object.get("name"); |
||||||
|
String content = ((String) object.get("description")); |
||||||
|
String pluginUrl = AlphaFineConstants.REUSE_IMAGE_URL + object.get("id"); |
||||||
|
String imageUrl = ((String) object.get("pic")); |
||||||
|
String version = null; |
||||||
|
String jartime = null; |
||||||
|
CellType type = CellType.REUSE; |
||||||
|
String link = (String) object.get("link"); |
||||||
|
if (ComparatorUtils.equals(link, "plugin")) { |
||||||
|
version = (String) object.get("version"); |
||||||
|
jartime = (String) object.get("jartime"); |
||||||
|
type = CellType.PLUGIN; |
||||||
|
pluginUrl = AlphaFineConstants.PLUGIN_IMAGE_URL + object.get("id"); |
||||||
|
} |
||||||
|
int price = (int) object.get("price"); |
||||||
|
return new PluginModel(name, content, pluginUrl, imageUrl, version, jartime, type, price); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public SearchResult showMoreSearchResult() { |
||||||
|
return this.moreModelList; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,62 @@ |
|||||||
|
package com.fr.design.actions.help.AlphaFine; |
||||||
|
|
||||||
|
import com.fr.base.BaseUtils; |
||||||
|
import com.fr.design.DesignerEnvManager; |
||||||
|
import com.fr.design.actions.UpdateAction; |
||||||
|
import com.fr.design.dialog.BasicDialog; |
||||||
|
import com.fr.design.dialog.DialogActionAdapter; |
||||||
|
import com.fr.design.dialog.DialogActionListener; |
||||||
|
import com.fr.design.mainframe.DesignerContext; |
||||||
|
import com.fr.design.mainframe.DesignerFrame; |
||||||
|
import com.fr.design.menu.MenuKeySet; |
||||||
|
import com.fr.general.Inter; |
||||||
|
|
||||||
|
import javax.swing.*; |
||||||
|
import java.awt.event.ActionEvent; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by XiaXiang on 2017/4/1. |
||||||
|
*/ |
||||||
|
public class AlphafineAction extends UpdateAction { |
||||||
|
public AlphafineAction() { |
||||||
|
this.setMenuKeySet(ALPHAFINE); |
||||||
|
this.setName(getMenuKeySet().getMenuName()); |
||||||
|
this.setMnemonic(getMenuKeySet().getMnemonic()); |
||||||
|
this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/mainframe/alphafine/images/smallsearch.png")); |
||||||
|
} |
||||||
|
|
||||||
|
public static final MenuKeySet ALPHAFINE = new MenuKeySet() { |
||||||
|
@Override |
||||||
|
public char getMnemonic() { |
||||||
|
return 'D'; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@Override |
||||||
|
public String getMenuName() { |
||||||
|
return Inter.getLocText("AlphaFine"); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public KeyStroke getKeyStroke() { |
||||||
|
return null; |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
@Override |
||||||
|
public void actionPerformed(ActionEvent e) { |
||||||
|
final DesignerFrame designerFrame = DesignerContext.getDesignerFrame(); |
||||||
|
|
||||||
|
final AlphafineConfigPane alphafineConfigPane = new AlphafineConfigPane(); |
||||||
|
alphafineConfigPane.populate(DesignerEnvManager.getEnvManager().getAlphafineConfigManager()); |
||||||
|
DialogActionListener dialogActionListener = new DialogActionAdapter() { |
||||||
|
public void doOk() { |
||||||
|
alphafineConfigPane.update(); |
||||||
|
designerFrame.refreshToolbar(); |
||||||
|
} |
||||||
|
}; |
||||||
|
BasicDialog basicDialog = alphafineConfigPane.showMediumWindow(designerFrame, dialogActionListener); |
||||||
|
basicDialog.setVisible(true); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,204 @@ |
|||||||
|
package com.fr.design.actions.help.AlphaFine; |
||||||
|
|
||||||
|
import com.fr.stable.OperatingSystem; |
||||||
|
import com.fr.stable.xml.XMLPrintWriter; |
||||||
|
import com.fr.stable.xml.XMLable; |
||||||
|
import com.fr.stable.xml.XMLableReader; |
||||||
|
|
||||||
|
import javax.swing.*; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by XiaXiang on 2017/4/5. |
||||||
|
*/ |
||||||
|
public class AlphafineConfigManager implements XMLable { |
||||||
|
/** |
||||||
|
* 是否开启alphafine |
||||||
|
*/ |
||||||
|
private boolean isEnabled; |
||||||
|
|
||||||
|
/** |
||||||
|
* 是否联网搜索 |
||||||
|
*/ |
||||||
|
private boolean isSearchOnLine; |
||||||
|
|
||||||
|
/** |
||||||
|
* 快捷键设置 |
||||||
|
*/ |
||||||
|
private String shortcuts = "meta + F"; |
||||||
|
|
||||||
|
/** |
||||||
|
* 搜索范围 |
||||||
|
*/ |
||||||
|
|
||||||
|
/** |
||||||
|
* 猜您需要 |
||||||
|
*/ |
||||||
|
private boolean isContainConclude; |
||||||
|
|
||||||
|
/** |
||||||
|
* 设置 |
||||||
|
*/ |
||||||
|
private boolean isContainAction; |
||||||
|
|
||||||
|
/** |
||||||
|
* 帮助文档 |
||||||
|
*/ |
||||||
|
private boolean isContainDocument; |
||||||
|
|
||||||
|
/** |
||||||
|
* 模板 |
||||||
|
*/ |
||||||
|
private boolean isContainTemplate; |
||||||
|
|
||||||
|
/** |
||||||
|
* 模板内容 |
||||||
|
*/ |
||||||
|
private boolean isContainFileContent; |
||||||
|
|
||||||
|
/** |
||||||
|
* 应用中心 |
||||||
|
*/ |
||||||
|
private boolean isContainPlugin; |
||||||
|
|
||||||
|
/** |
||||||
|
* 快捷键 |
||||||
|
*/ |
||||||
|
private KeyStroke shortCutKeyStore; |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
private static AlphafineConfigManager alphafineConfigManager = new AlphafineConfigManager(); |
||||||
|
|
||||||
|
public static AlphafineConfigManager getInstance() { |
||||||
|
return alphafineConfigManager; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public Object clone() throws CloneNotSupportedException { |
||||||
|
return super.clone(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void readXML(XMLableReader reader) { |
||||||
|
if (reader.isAttr()) { |
||||||
|
this.setEnabled(reader.getAttrAsBoolean("isEnabled", true)); |
||||||
|
this.setContainPlugin(reader.getAttrAsBoolean("isContainDocument", true)); |
||||||
|
this.setContainDocument(reader.getAttrAsBoolean("isContainDocument", true)); |
||||||
|
this.setContainConclude(reader.getAttrAsBoolean("isContainConclude", true)); |
||||||
|
this.setContainAction(reader.getAttrAsBoolean("isContainAction", true)); |
||||||
|
this.setContainTemplate(reader.getAttrAsBoolean("isContainTemplate", true)); |
||||||
|
this.setContainFileContent(reader.getAttrAsBoolean("isContainFileContent", false)); |
||||||
|
this.setShortcuts(reader.getAttrAsString("shortcuts", "meta + f")); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void writeXML(XMLPrintWriter writer) { |
||||||
|
writer.startTAG("AlphaFineConfigManager"); |
||||||
|
writer.attr("isEnabled", this.isEnabled()) |
||||||
|
.attr("isSearchOnline", this.isSearchOnLine()) |
||||||
|
.attr("shortcuts", this.getShortcuts()) |
||||||
|
.attr("isContainConclude", this.isContainConclude()) |
||||||
|
.attr("isContainAction", this.isContainAction()) |
||||||
|
.attr("isContainDocument", this.isContainDocument()) |
||||||
|
.attr("isContainTemplate", this.isContainTemplate()) |
||||||
|
.attr("isContainPlugin", this.isContainPlugin()) |
||||||
|
.attr("isContainFileContent", this.isContainFileContent()); |
||||||
|
writer.end(); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public boolean isSearchOnLine() { |
||||||
|
return isSearchOnLine; |
||||||
|
} |
||||||
|
|
||||||
|
public void setSearchOnLine(boolean searchOnLine) { |
||||||
|
isSearchOnLine = searchOnLine; |
||||||
|
} |
||||||
|
|
||||||
|
public String getShortcuts() { |
||||||
|
return shortcuts; |
||||||
|
} |
||||||
|
|
||||||
|
public void setShortcuts(String shortcuts) { |
||||||
|
this.shortcuts = shortcuts; |
||||||
|
this.shortCutKeyStore = convert2KeyStroke(this.shortcuts); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public boolean isContainAction() { |
||||||
|
return isContainAction; |
||||||
|
} |
||||||
|
|
||||||
|
public void setContainAction(boolean containAction) { |
||||||
|
this.isContainAction = containAction; |
||||||
|
} |
||||||
|
|
||||||
|
public boolean isContainDocument() { |
||||||
|
return isContainDocument; |
||||||
|
} |
||||||
|
|
||||||
|
public void setContainDocument(boolean containDocument) { |
||||||
|
this.isContainDocument = containDocument; |
||||||
|
} |
||||||
|
|
||||||
|
public boolean isContainTemplate() { |
||||||
|
return isContainTemplate; |
||||||
|
} |
||||||
|
|
||||||
|
public void setContainTemplate(boolean containTemplate) { |
||||||
|
this.isContainTemplate = containTemplate; |
||||||
|
} |
||||||
|
|
||||||
|
public boolean isContainPlugin() { |
||||||
|
return isContainPlugin; |
||||||
|
} |
||||||
|
|
||||||
|
public void setContainPlugin(boolean containPlugin) { |
||||||
|
this.isContainPlugin = containPlugin; |
||||||
|
} |
||||||
|
|
||||||
|
public boolean isContainConclude() { |
||||||
|
return isContainConclude; |
||||||
|
} |
||||||
|
|
||||||
|
public void setContainConclude(boolean containConclude) { |
||||||
|
isContainConclude = containConclude; |
||||||
|
} |
||||||
|
|
||||||
|
public boolean isEnabled() { |
||||||
|
return isEnabled; |
||||||
|
} |
||||||
|
|
||||||
|
public void setEnabled(boolean isEnabled) { |
||||||
|
this.isEnabled = isEnabled; |
||||||
|
} |
||||||
|
|
||||||
|
public KeyStroke getShortCutKeyStore() { |
||||||
|
if (shortCutKeyStore == null) { |
||||||
|
shortCutKeyStore = convert2KeyStroke(this.getShortcuts()); |
||||||
|
} |
||||||
|
return shortCutKeyStore; |
||||||
|
} |
||||||
|
|
||||||
|
public void setShortCutKeyStore(KeyStroke shortCutKeyStore) { |
||||||
|
this.shortCutKeyStore = shortCutKeyStore; |
||||||
|
} |
||||||
|
|
||||||
|
private KeyStroke convert2KeyStroke(String ks) { |
||||||
|
return KeyStroke.getKeyStroke(ks.replace("+", "pressed")); |
||||||
|
} |
||||||
|
|
||||||
|
public boolean isContainFileContent() { |
||||||
|
return isContainFileContent; |
||||||
|
} |
||||||
|
|
||||||
|
public void setContainFileContent(boolean containFileContent) { |
||||||
|
isContainFileContent = containFileContent; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,216 @@ |
|||||||
|
package com.fr.design.actions.help.AlphaFine; |
||||||
|
|
||||||
|
import com.fr.design.DesignerEnvManager; |
||||||
|
import com.fr.design.dialog.BasicPane; |
||||||
|
import com.fr.design.gui.icheckbox.UICheckBox; |
||||||
|
import com.fr.design.gui.ilable.UILabel; |
||||||
|
import com.fr.design.gui.itextfield.UITextField; |
||||||
|
import com.fr.design.layout.FRGUIPaneFactory; |
||||||
|
import com.fr.design.layout.TableLayoutHelper; |
||||||
|
import com.fr.general.FRLogger; |
||||||
|
import com.fr.general.Inter; |
||||||
|
|
||||||
|
import javax.swing.*; |
||||||
|
import java.awt.*; |
||||||
|
import java.awt.event.ActionEvent; |
||||||
|
import java.awt.event.ActionListener; |
||||||
|
import java.awt.event.KeyAdapter; |
||||||
|
import java.awt.event.KeyEvent; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by XiaXiang on 2017/4/6. |
||||||
|
*/ |
||||||
|
public class AlphafineConfigPane extends BasicPane { |
||||||
|
private static final String TYPE = "pressed"; |
||||||
|
private static final String DISPLAY_TYPE = "+"; |
||||||
|
private static final String BACK_SLASH = "BACK_SLASH"; |
||||||
|
private static final String DISPLAY_BACK_SLASH = "\\"; |
||||||
|
private static final String SLASH = "SLASH"; |
||||||
|
private static final String DISPLAY_SLASH = "/"; |
||||||
|
private static final String CONTROL = "CONTROL"; |
||||||
|
private static final String DISPLAY_CONTROL = "ctrl"; |
||||||
|
private static final String OPEN_BRACKET = "OPEN_BRACKET"; |
||||||
|
private static final String DISPLAY_OPEN_BRACKET = "{"; |
||||||
|
private static final String CLOSE_BRACKET = "CLOSE_BRACKET"; |
||||||
|
private static final String DISPLAY_CLOSE_BRACKET = "}"; |
||||||
|
private static final String COMMA = "COMMA"; |
||||||
|
private static final String DISPLAY_COMMA = ","; |
||||||
|
private static final String PERIOD = "PERIOD"; |
||||||
|
private static final String DISPLAY_PERIOD = "."; |
||||||
|
private static final String SEMICOLON = "SEMICOLON"; |
||||||
|
private static final String DISPLAY_SEMICOLON = ";"; |
||||||
|
private static final String QUOTE = "QUOTE"; |
||||||
|
private static final String DISPLAY_QUOTE = "'"; |
||||||
|
private static final String EQUALS = "EQUALS"; |
||||||
|
private static final String DISPLAY_EQUALS = "+"; |
||||||
|
private static final String MINUS = "MINUS"; |
||||||
|
private static final String DISPLAY_MINUS = "-"; |
||||||
|
private KeyStroke shortCutKeyStore = null; |
||||||
|
private UICheckBox isEnabledCheckbox, isSearchOnlineCheckbox, isContainConcludeCheckbox, isContainActionCheckbox, isContainDocumentCheckbox, isContainTemplateCheckbox, isContainPluginCheckbox, isContainFileContentCheckbox; |
||||||
|
private UITextField shortcutsField; |
||||||
|
|
||||||
|
public AlphafineConfigPane() { |
||||||
|
this.initComponents(); |
||||||
|
} |
||||||
|
|
||||||
|
private void initComponents() { |
||||||
|
JPanel contentPane = FRGUIPaneFactory.createY_AXISBoxInnerContainer_L_Pane(); |
||||||
|
createOpenPane(contentPane); |
||||||
|
createOnlinePane(contentPane); |
||||||
|
createShortcutsPane(contentPane); |
||||||
|
createSearchConfigPane(contentPane); |
||||||
|
this.setLayout(FRGUIPaneFactory.createBorderLayout()); |
||||||
|
this.add(contentPane, BorderLayout.NORTH); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
private Component[][] initsearchRangeComponents() { |
||||||
|
Component[][] components = new Component[][]{ |
||||||
|
new Component[]{isContainConcludeCheckbox, isContainActionCheckbox, isContainDocumentCheckbox}, |
||||||
|
new Component[]{isContainTemplateCheckbox, isContainPluginCheckbox, isContainFileContentCheckbox} |
||||||
|
}; |
||||||
|
return components; |
||||||
|
} |
||||||
|
|
||||||
|
private void createSearchConfigPane(JPanel contentPane) { |
||||||
|
double p = 25; |
||||||
|
double d = 180; |
||||||
|
double[] rowSize = {p, p}; |
||||||
|
double[] columnSize = {d, d, d}; |
||||||
|
|
||||||
|
JPanel northPane = FRGUIPaneFactory.createTitledBorderPane("搜索范围"); |
||||||
|
isContainConcludeCheckbox = new UICheckBox("猜您需要"); |
||||||
|
isContainActionCheckbox = new UICheckBox("设置"); |
||||||
|
isContainPluginCheckbox = new UICheckBox("应用中心"); |
||||||
|
isContainDocumentCheckbox = new UICheckBox("帮助文档"); |
||||||
|
isContainTemplateCheckbox = new UICheckBox("模板"); |
||||||
|
isContainFileContentCheckbox = new UICheckBox("模板内容"); |
||||||
|
JPanel searchConfigPane = TableLayoutHelper.createTableLayoutPane(initsearchRangeComponents(), rowSize, columnSize); |
||||||
|
northPane.add(searchConfigPane); |
||||||
|
contentPane.add(northPane); |
||||||
|
} |
||||||
|
|
||||||
|
private void createShortcutsPane(JPanel contentPane) { |
||||||
|
JPanel northPane = FRGUIPaneFactory.createTitledBorderPane("快捷键配置"); |
||||||
|
shortcutsField = new UITextField(); |
||||||
|
shortcutsField.setPreferredSize(new Dimension(100, 20)); |
||||||
|
shortcutsField.addKeyListener(new KeyAdapter() { |
||||||
|
@Override |
||||||
|
public void keyReleased(KeyEvent e) { |
||||||
|
int modifier = e.getModifiers(); |
||||||
|
if (modifier == 0) { |
||||||
|
return; |
||||||
|
} |
||||||
|
int keyCode = e.getKeyCode(); |
||||||
|
shortCutKeyStore = KeyStroke.getKeyStroke(keyCode, modifier); |
||||||
|
String str = shortCutKeyStore.toString(); |
||||||
|
shortcutsField.setText(getDisplayShortCut(str)); |
||||||
|
} |
||||||
|
}); |
||||||
|
northPane.add(new UILabel(Inter.getLocText("Open") + ":")); |
||||||
|
northPane.add(shortcutsField); |
||||||
|
contentPane.add(northPane); |
||||||
|
} |
||||||
|
|
||||||
|
private void createOnlinePane(JPanel contentPane) { |
||||||
|
JPanel northPane = FRGUIPaneFactory.createTitledBorderPane("联网"); |
||||||
|
isSearchOnlineCheckbox = new UICheckBox("联网搜索"); |
||||||
|
isSearchOnlineCheckbox.addActionListener(new ActionListener() { |
||||||
|
@Override |
||||||
|
public void actionPerformed(ActionEvent e) { |
||||||
|
if (!isSearchOnlineCheckbox.isSelected()) { |
||||||
|
isContainConcludeCheckbox.setEnabled(false); |
||||||
|
isContainPluginCheckbox.setEnabled(false); |
||||||
|
isContainDocumentCheckbox.setEnabled(false); |
||||||
|
isContainConcludeCheckbox.setSelected(false); |
||||||
|
isContainPluginCheckbox.setSelected(false); |
||||||
|
isContainDocumentCheckbox.setSelected(false); |
||||||
|
} else { |
||||||
|
isContainConcludeCheckbox.setEnabled(true); |
||||||
|
isContainPluginCheckbox.setEnabled(true); |
||||||
|
isContainDocumentCheckbox.setEnabled(true); |
||||||
|
} |
||||||
|
} |
||||||
|
}); |
||||||
|
northPane.add(isSearchOnlineCheckbox); |
||||||
|
contentPane.add(northPane); |
||||||
|
} |
||||||
|
|
||||||
|
private void createOpenPane(JPanel contentPane) { |
||||||
|
JPanel northPane = FRGUIPaneFactory.createTitledBorderPane("开启"); |
||||||
|
isEnabledCheckbox = new UICheckBox("开启AlphaFine功能"); |
||||||
|
northPane.add(isEnabledCheckbox); |
||||||
|
contentPane.add(northPane); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected String title4PopupWindow() { |
||||||
|
return "AlphaFine"; |
||||||
|
} |
||||||
|
|
||||||
|
public void populate(AlphafineConfigManager alphafineConfigManager) { |
||||||
|
this.isEnabledCheckbox.setSelected(alphafineConfigManager.isEnabled()); |
||||||
|
this.isSearchOnlineCheckbox.setSelected(alphafineConfigManager.isSearchOnLine()); |
||||||
|
this.isContainActionCheckbox.setSelected(alphafineConfigManager.isContainAction()); |
||||||
|
this.isContainTemplateCheckbox.setSelected(alphafineConfigManager.isContainTemplate()); |
||||||
|
this.isContainDocumentCheckbox.setSelected(alphafineConfigManager.isContainDocument() && alphafineConfigManager.isSearchOnLine()); |
||||||
|
this.isContainDocumentCheckbox.setEnabled(alphafineConfigManager.isSearchOnLine()); |
||||||
|
this.isContainPluginCheckbox.setSelected(alphafineConfigManager.isContainPlugin() && alphafineConfigManager.isSearchOnLine()); |
||||||
|
this.isContainPluginCheckbox.setEnabled(alphafineConfigManager.isSearchOnLine()); |
||||||
|
this.isContainConcludeCheckbox.setSelected(alphafineConfigManager.isContainConclude() && alphafineConfigManager.isSearchOnLine()); |
||||||
|
this.isContainConcludeCheckbox.setEnabled(alphafineConfigManager.isSearchOnLine()); |
||||||
|
this.shortcutsField.setText(alphafineConfigManager.getShortcuts()); |
||||||
|
shortCutKeyStore = convert2KeyStroke(alphafineConfigManager.getShortcuts()); |
||||||
|
} |
||||||
|
|
||||||
|
public void update() { |
||||||
|
DesignerEnvManager designerEnvManager = DesignerEnvManager.getEnvManager(); |
||||||
|
AlphafineConfigManager alphafineConfigManager = designerEnvManager.getAlphafineConfigManager(); |
||||||
|
alphafineConfigManager.setContainPlugin(this.isContainPluginCheckbox.isSelected()); |
||||||
|
alphafineConfigManager.setContainAction(this.isContainActionCheckbox.isSelected()); |
||||||
|
alphafineConfigManager.setContainDocument(this.isContainActionCheckbox.isSelected()); |
||||||
|
alphafineConfigManager.setContainConclude(this.isContainConcludeCheckbox.isSelected()); |
||||||
|
alphafineConfigManager.setEnabled(this.isEnabledCheckbox.isSelected()); |
||||||
|
alphafineConfigManager.setSearchOnLine(this.isSearchOnlineCheckbox.isSelected()); |
||||||
|
alphafineConfigManager.setContainTemplate(this.isContainTemplateCheckbox.isSelected()); |
||||||
|
alphafineConfigManager.setContainFileContent(this.isContainFileContentCheckbox.isSelected()); |
||||||
|
alphafineConfigManager.setShortcuts(shortCutKeyStore != null? shortCutKeyStore.toString().replace(TYPE, DISPLAY_TYPE) : this.shortcutsField.getText()); |
||||||
|
designerEnvManager.setAlphafineConfigManager(alphafineConfigManager); |
||||||
|
try { |
||||||
|
DesignerEnvManager.loadLogSetting(); |
||||||
|
DesignerEnvManager.getEnvManager().saveXMLFile(); |
||||||
|
} catch (Exception e) { |
||||||
|
FRLogger.getLogger().error(e.getMessage()); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
private String getDisplayShortCut(String shotrCut) { |
||||||
|
return shotrCut.replace(TYPE, DISPLAY_TYPE).replace(BACK_SLASH, DISPLAY_BACK_SLASH).replace(SLASH, DISPLAY_SLASH) |
||||||
|
.replace(CONTROL, DISPLAY_CONTROL).replace(OPEN_BRACKET, DISPLAY_OPEN_BRACKET).replace(CLOSE_BRACKET, DISPLAY_CLOSE_BRACKET) |
||||||
|
.replace(COMMA, DISPLAY_COMMA).replace(PERIOD, DISPLAY_PERIOD).replace(SEMICOLON, DISPLAY_SEMICOLON).replace(QUOTE, DISPLAY_QUOTE) |
||||||
|
.replace(EQUALS, DISPLAY_EQUALS).replace(MINUS, DISPLAY_MINUS); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
private KeyStroke convert2KeyStroke(String ks) { |
||||||
|
return KeyStroke.getKeyStroke(ks.replace(DISPLAY_TYPE, TYPE)); |
||||||
|
} |
||||||
|
|
||||||
|
public KeyStroke getShortCutKeyStore() { |
||||||
|
return shortCutKeyStore; |
||||||
|
} |
||||||
|
|
||||||
|
public void setShortCutKeyStore(KeyStroke shortCutKeyStore) { |
||||||
|
this.shortCutKeyStore = shortCutKeyStore; |
||||||
|
} |
||||||
|
|
||||||
|
public UICheckBox getIsContainFileContentCheckbox() { |
||||||
|
return isContainFileContentCheckbox; |
||||||
|
} |
||||||
|
|
||||||
|
public void setIsContainFileContentCheckbox(UICheckBox isContainFileContentCheckbox) { |
||||||
|
this.isContainFileContentCheckbox = isContainFileContentCheckbox; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,28 @@ |
|||||||
|
package com.fr.design.mainframe.toolbar; |
||||||
|
|
||||||
|
import com.fr.design.actions.UpdateAction; |
||||||
|
|
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by XiaXiang on 2017/4/13. |
||||||
|
*/ |
||||||
|
public class UpdateActionManager { |
||||||
|
private static UpdateActionManager updateActionManager = null; |
||||||
|
private List<UpdateAction> updateActions; |
||||||
|
|
||||||
|
public synchronized static UpdateActionManager getUpdateActionManager() { |
||||||
|
if (updateActionManager == null) { |
||||||
|
updateActionManager = new UpdateActionManager(); |
||||||
|
} |
||||||
|
return updateActionManager; |
||||||
|
} |
||||||
|
|
||||||
|
public List<UpdateAction> getUpdateActions() { |
||||||
|
return updateActions; |
||||||
|
} |
||||||
|
|
||||||
|
public void setUpdateActions(List<UpdateAction> updateActions) { |
||||||
|
this.updateActions = updateActions; |
||||||
|
} |
||||||
|
} |