Browse Source

alphafine 广告弹窗

master
XiaXiang 7 years ago
parent
commit
b1187cbd05
  1. BIN
      designer/src/com/fr/design/mainframe/alphafine/images/check.png
  2. BIN
      designer/src/com/fr/design/mainframe/alphafine/images/open.png
  3. BIN
      designer/src/com/fr/design/mainframe/alphafine/images/remind.png
  4. BIN
      designer/src/com/fr/design/mainframe/alphafine/images/remind_close.png
  5. BIN
      designer/src/com/fr/design/mainframe/alphafine/images/uncheck.png
  6. 4
      designer/src/com/fr/design/mainframe/alphafine/search/manager/AlphaSearchManager.java
  7. 32
      designer_base/src/com/fr/aspectj/designerbase/AlphaFineReminder.aj
  8. 24
      designer_base/src/com/fr/aspectj/designerbase/TemplateProcessTracker.aj
  9. 33
      designer_base/src/com/fr/design/actions/help/AlphaFine/AlphafineConfigManager.java
  10. 52
      designer_base/src/com/fr/design/actions/help/AlphaFine/RemindDialog.java
  11. 129
      designer_base/src/com/fr/design/actions/help/AlphaFine/RemindPane.java
  12. 118
      designer_form/src/com/fr/aspectj/designerform/TemplateProcessTracker.aj

BIN
designer/src/com/fr/design/mainframe/alphafine/images/check.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

BIN
designer/src/com/fr/design/mainframe/alphafine/images/open.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

BIN
designer/src/com/fr/design/mainframe/alphafine/images/remind.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 185 KiB

BIN
designer/src/com/fr/design/mainframe/alphafine/images/remind_close.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

BIN
designer/src/com/fr/design/mainframe/alphafine/images/uncheck.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

4
designer/src/com/fr/design/mainframe/alphafine/search/manager/AlphaSearchManager.java

@ -37,12 +37,12 @@ public class AlphaSearchManager implements AlphaFineSearchProcessor {
@Override @Override
public synchronized SearchResult getLessSearchResult(String searchText) { public synchronized SearchResult getLessSearchResult(String searchText) {
SearchResult recentModelList = recentSearchManager.getLessSearchResult(searchText); SearchResult recentModelList = recentSearchManager.getLessSearchResult(searchText);
SearchResult concludeModelList = recommendSearchManager.getLessSearchResult(searchText); SearchResult recommendModelList = recommendSearchManager.getLessSearchResult(searchText);
SearchResult actionModelList = actionSearchManager.getLessSearchResult(searchText); SearchResult actionModelList = actionSearchManager.getLessSearchResult(searchText);
SearchResult fileModelList = fileSearchManager.getLessSearchResult(searchText); SearchResult fileModelList = fileSearchManager.getLessSearchResult(searchText);
SearchResult documentModelList = documentSearchManager.getLessSearchResult(searchText); SearchResult documentModelList = documentSearchManager.getLessSearchResult(searchText);
SearchResult pluginModelList = pluginSearchManager.getLessSearchResult(searchText); SearchResult pluginModelList = pluginSearchManager.getLessSearchResult(searchText);
recentModelList.addAll(concludeModelList); recentModelList.addAll(recommendModelList);
recentModelList.addAll(actionModelList); recentModelList.addAll(actionModelList);
recentModelList.addAll(fileModelList); recentModelList.addAll(fileModelList);
recentModelList.addAll(documentModelList); recentModelList.addAll(documentModelList);

32
designer_base/src/com/fr/aspectj/designerbase/AlphaFineReminder.aj

@ -1,5 +1,10 @@
package com.fr.aspectj.designerbase; package com.fr.aspectj.designerbase;
import com.fr.design.DesignerEnvManager;
import com.fr.design.actions.help.AlphaFine.AlphafineConfigManager;
import com.fr.design.actions.help.AlphaFine.RemindDialog;
import com.fr.design.mainframe.DesignerContext;
import java.awt.event.ActionEvent; import java.awt.event.ActionEvent;
/** /**
@ -15,9 +20,34 @@ public aspect AlphaFineReminder {
return; return;
} }
if (e != null && e.getSource().getClass().getName().equals("com.fr.design.gui.imenu.UIMenuItem") && point.contains("com.fr.design.actions")) { if (e != null && e.getSource().getClass().getName().equals("com.fr.design.gui.imenu.UIMenuItem") && point.contains("com.fr.design.actions")) {
//System.out.print(thisJoinPoint + "\n"); remind();
} }
} }
/**
* 判断是否弹出广告框
*/
private static void remind() {
AlphafineConfigManager manager = DesignerEnvManager.getEnvManager().getAlphafineConfigManager();
if (manager.isNeedRemind()) {
if (manager.getOperateCount() > 4) {
showReminderDialog();
} else {
manager.setOperateCount(manager.getOperateCount() + 1);
}
}
}
/**
* 弹框提醒使用AlphaFine
*/
private static void showReminderDialog() {
RemindDialog remindDialog = new RemindDialog(DesignerContext.getDesignerFrame());
remindDialog.setVisible(true);
}
} }

24
designer_base/src/com/fr/aspectj/designerbase/TemplateProcessTracker.aj

@ -5,29 +5,27 @@ package com.fr.aspectj.designerbase;
* Created by plough on 2017/3/3. * Created by plough on 2017/3/3.
*/ */
import com.fr.design.mainframe.templateinfo.TemplateInfoCollector;
import org.aspectj.lang.reflect.SourceLocation; import org.aspectj.lang.reflect.SourceLocation;
import java.awt.event.ActionEvent; import java.awt.event.ActionEvent;
import java.awt.event.MouseEvent; import java.awt.event.MouseEvent;
import java.util.Date;
public aspect TemplateProcessTracker { public aspect TemplateProcessTracker {
//声明一个pointcut,匹配你需要的方法 //声明一个pointcut,匹配你需要的方法
pointcut onMouseClicked(MouseEvent e) : pointcut onMouseClicked(MouseEvent e):
execution(* mouseClicked(MouseEvent)) && args(e); execution(* mouseClicked(MouseEvent)) && args(e);
pointcut onMousePressed(MouseEvent e) : pointcut onMousePressed(MouseEvent e):
execution(* mousePressed(MouseEvent)) && args(e); execution(* mousePressed(MouseEvent)) && args(e);
pointcut onMouseReleased(MouseEvent e) : pointcut onMouseReleased(MouseEvent e):
execution(* mouseReleased(MouseEvent)) && args(e); execution(* mouseReleased(MouseEvent)) && args(e);
pointcut onActionPerformed(ActionEvent e) : pointcut onActionPerformed(ActionEvent e):
execution(* actionPerformed(ActionEvent)) && args(e); execution(* actionPerformed(ActionEvent)) && args(e);
pointcut onSetValueAt(Object v, int r, int c) : pointcut onSetValueAt(Object v, int r, int c):
execution(* setValueAt(java.lang.Object, int, int)) && args(v, r, c); execution(* setValueAt(java.lang.Object, int, int)) && args(v, r, c);
//before表示之前的意思 //before表示之前的意思
//这整个表示在MouseAdapter的public void mouseXXX(MouseEvent)方法调用之前,你想要执行的代码 //这整个表示在MouseAdapter的public void mouseXXX(MouseEvent)方法调用之前,你想要执行的代码
before(MouseEvent e) : onMouseClicked(e) || onMousePressed(e) || onMouseReleased(e) { before(MouseEvent e): onMouseClicked(e) || onMousePressed(e) || onMouseReleased(e) {
SourceLocation sl = thisJoinPoint.getSourceLocation();//切面对应的代码位置 SourceLocation sl = thisJoinPoint.getSourceLocation();//切面对应的代码位置
//String log = String.format("%s:\n%s\n%s\n%s\n\n", new Date(), sl, e, e.getSource()); //String log = String.format("%s:\n%s\n%s\n%s\n\n", new Date(), sl, e, e.getSource());
@ -35,10 +33,10 @@ public aspect TemplateProcessTracker {
//TemplateInfoCollector.appendProcess(log); //TemplateInfoCollector.appendProcess(log);
} }
//同上 //同上
before(ActionEvent e) : onActionPerformed(e) { before(ActionEvent e): onActionPerformed(e) {
SourceLocation sl = thisJoinPoint.getSourceLocation(); SourceLocation sl = thisJoinPoint.getSourceLocation();
// !within(LogHandlerBar) 没用, 手动过滤 // !within(LogHandlerBar) 没用, 手动过滤
if (e.getSource().toString().contains("javax.swing.Timer")) { if (e != null && e.getSource().toString().contains("javax.swing.Timer")) {
return; return;
} }
@ -48,12 +46,12 @@ public aspect TemplateProcessTracker {
} }
//同上 //同上
before(Object v, int r, int c) : onSetValueAt(v, r, c) { before(Object v, int r, int c): onSetValueAt(v, r, c) {
SourceLocation sl = thisJoinPoint.getSourceLocation(); SourceLocation sl = thisJoinPoint.getSourceLocation();
//String log = String.format("%s:\n%s\nset value: %s at (%d, %d)\n\n", new Date(), sl, v, r, c); //String log getSourceLocation= String.format("%s:\n%s\nset value: %s at (%d, %d)\n\n", new Date(), sl, v, r, c);
String log = ""; String log = "";
// TemplateInfoCollector.appendProcess(log); // TemplateInfoCollector.appendProcess(log);
} }

33
designer_base/src/com/fr/design/actions/help/AlphaFine/AlphafineConfigManager.java

@ -67,6 +67,15 @@ public class AlphafineConfigManager implements XMLable {
*/ */
private KeyStroke shortCutKeyStore; private KeyStroke shortCutKeyStore;
/**
* 是否提醒
*/
private boolean isNeedRemind = true;
/**
* 直接操作菜单次数
*/
private int operateCount;
@ -92,7 +101,9 @@ public class AlphafineConfigManager implements XMLable {
this.setContainAction(reader.getAttrAsBoolean("isContainAction", true)); this.setContainAction(reader.getAttrAsBoolean("isContainAction", true));
this.setContainTemplate(reader.getAttrAsBoolean("isContainTemplate", true)); this.setContainTemplate(reader.getAttrAsBoolean("isContainTemplate", true));
this.setContainFileContent(reader.getAttrAsBoolean("isContainFileContent", false)); this.setContainFileContent(reader.getAttrAsBoolean("isContainFileContent", false));
this.setShortcuts(reader.getAttrAsString("shortcuts", "meta + f")); this.setShortcuts(reader.getAttrAsString("shortcuts", getDefaultShortCuts()));
this.setNeedRemind(reader.getAttrAsBoolean("isNeedRemind", true));
this.setOperateCount(reader.getAttrAsInt("operateCount", 0));
} }
@ -109,7 +120,9 @@ public class AlphafineConfigManager implements XMLable {
.attr("isContainDocument", this.isContainDocument()) .attr("isContainDocument", this.isContainDocument())
.attr("isContainTemplate", this.isContainTemplate()) .attr("isContainTemplate", this.isContainTemplate())
.attr("isContainPlugin", this.isContainPlugin()) .attr("isContainPlugin", this.isContainPlugin())
.attr("isContainFileContent", this.isContainFileContent()); .attr("isContainFileContent", this.isContainFileContent())
.attr("isNeedRemind", this.isNeedRemind())
.attr("operateCount", this.getOperateCount());
writer.end(); writer.end();
} }
@ -214,4 +227,20 @@ public class AlphafineConfigManager implements XMLable {
public void setContainFileContent(boolean containFileContent) { public void setContainFileContent(boolean containFileContent) {
isContainFileContent = containFileContent; isContainFileContent = containFileContent;
} }
public boolean isNeedRemind() {
return isNeedRemind;
}
public void setNeedRemind(boolean needRemind) {
isNeedRemind = needRemind;
}
public int getOperateCount() {
return operateCount;
}
public void setOperateCount(int operateCount) {
this.operateCount = operateCount;
}
} }

52
designer_base/src/com/fr/design/actions/help/AlphaFine/RemindDialog.java

@ -0,0 +1,52 @@
package com.fr.design.actions.help.AlphaFine;
import com.fr.design.DesignerEnvManager;
import com.fr.design.dialog.BasicDialog;
import com.fr.design.dialog.UIDialog;
import com.fr.design.utils.gui.GUICoreUtils;
import java.awt.*;
import java.awt.event.*;
/**
* Created by XiaXiang on 2017/5/26.
*/
public class RemindDialog extends UIDialog {
private RemindPane remindPane;
private static final int WIDTH = 600;
private static final int HEIGHT = 400;
public RemindDialog(Frame parent) {
super(parent);
setUndecorated(true);
setSize(WIDTH, HEIGHT);
initComponent();
GUICoreUtils.centerWindow(this);
}
private void initComponent() {
final AlphafineConfigManager manager = DesignerEnvManager.getEnvManager().getAlphafineConfigManager();
remindPane = new RemindPane(manager);
remindPane.navigateButton.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
dispose();
manager.setOperateCount(0);
}
});
this.add(remindPane);
}
@Override
public void checkValid() throws Exception {
}
public RemindPane getRemindPane() {
return remindPane;
}
public void setRemindPane(RemindPane remindPane) {
this.remindPane = remindPane;
}
}

129
designer_base/src/com/fr/design/actions/help/AlphaFine/RemindPane.java

@ -0,0 +1,129 @@
package com.fr.design.actions.help.AlphaFine;
import com.fr.design.gui.ibutton.UIButton;
import com.fr.design.gui.ilable.UILabel;
import com.fr.general.IOUtils;
import com.fr.general.Inter;
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
/**
* Created by XiaXiang on 2017/5/26.
*/
public class RemindPane extends JPanel {
public static final Font MEDIUM_FONT = new Font("Song_TypeFace", 0, 12);
public static final Font LARGE_FONT = new Font("Song_TypeFace", 0, 18);
private UIButton openButton;
private JPanel backgroundPane;
private UILabel backgroundLabel;
private UILabel checkLabel;
private Icon checkIcon = IOUtils.readIcon("/com/fr/design/mainframe/alphafine/images/check.png");
private Icon unCheckIcon = IOUtils.readIcon("/com/fr/design/mainframe/alphafine/images/uncheck.png");
private Icon closeIcon = IOUtils.readIcon("/com/fr/design/mainframe/alphafine/images/remind_close.png");
private Icon labelIcon = IOUtils.readIcon("/com/fr/design/mainframe/alphafine/images/remind.png");
private Icon openIcon = IOUtils.readIcon("com/fr/design/mainframe/alphafine/images/open.png");
public JComponent navigateButton = new JComponent() {
protected void paintComponent(Graphics g) {
closeIcon.paintIcon(this, g, 0, 0);
}
};
public RemindPane(AlphafineConfigManager manager) {
this.setPreferredSize(new Dimension(600, 400));
initUI(manager);
this.setLayout(getAbsoluteLayout());
}
private void initUI(final AlphafineConfigManager manager) {
openButton = new UIButton() {
@Override
public void paintComponent(Graphics g) {
g.setColor( Color.white );
g.fillRect(0, 0, getSize().width, getSize().height);
super.paintComponent(g);
}
};
openButton.setContentAreaFilled(false);
openButton.setForeground(new Color(0x3394F0));
openButton.setIcon(openIcon);
openButton.setFont(LARGE_FONT);
openButton.set4ToolbarButton();
openButton.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
}
});
backgroundLabel = new UILabel(Inter.getLocText("FR-Designer-Alphafine_No_Remind"));
backgroundLabel.setFont(MEDIUM_FONT);
backgroundLabel.setForeground(Color.white);
checkLabel = new UILabel();
checkLabel.setIcon(unCheckIcon);
checkLabel.addMouseListener(new MouseAdapter() {
private boolean isCheck = false;
@Override
public void mouseClicked(MouseEvent e) {
if (isCheck) {
checkLabel.setIcon(unCheckIcon);
manager.setNeedRemind(true);
isCheck = false;
} else {
checkLabel.setIcon(checkIcon);
manager.setNeedRemind(false);
isCheck = true;
}
}
});
backgroundPane = new JPanel(new BorderLayout());
backgroundPane.add(new UILabel(labelIcon), BorderLayout.CENTER);
add(navigateButton, 0);
add(checkLabel, 1);
add(openButton, 2);
add(backgroundLabel, 3);
add(backgroundPane, 4);
}
/**
* 控件排列用绝对布局
* @return
*/
protected LayoutManager getAbsoluteLayout() {
return new LayoutManager() {
@Override
public void removeLayoutComponent(Component comp) {
}
@Override
public Dimension preferredLayoutSize(Container parent) {
return parent.getPreferredSize();
}
@Override
public Dimension minimumLayoutSize(Container parent) {
return null;
}
@Override
public void layoutContainer(Container parent) {
int width = parent.getWidth();
int height = parent.getHeight();
navigateButton.setBounds((width - 30), 0, 30, 30);
openButton.setBounds(30, 300, 150, 40);
backgroundLabel.setBounds(95, 350, 100, 20);
checkLabel.setBounds(70, 350, 20, 20);
backgroundPane.setBounds(0, 0, width, height);
}
@Override
public void addLayoutComponent(String name, Component comp) {
}
};
}
}

118
designer_form/src/com/fr/aspectj/designerform/TemplateProcessTracker.aj

@ -1,59 +1,59 @@
package com.fr.aspectj.designerform; //package com.fr.aspectj.designerform;
//
/** ///**
* Created by plough on 2017/3/3. // * Created by plough on 2017/3/3.
*/ // */
import com.fr.design.mainframe.templateinfo.TemplateInfoCollector; //import com.fr.design.mainframe.templateinfo.TemplateInfoCollector;
import org.aspectj.lang.reflect.SourceLocation; //import org.aspectj.lang.reflect.SourceLocation;
//
import java.awt.event.ActionEvent; //import java.awt.event.ActionEvent;
import java.awt.event.MouseEvent; //import java.awt.event.MouseEvent;
import java.util.Date; //import java.util.Date;
//
public aspect TemplateProcessTracker { //public aspect TemplateProcessTracker {
//声明一个pointcut,匹配你需要的方法 // //声明一个pointcut,匹配你需要的方法
pointcut onMouseClicked(MouseEvent e) : // pointcut onMouseClicked(MouseEvent e) :
execution(* mouseClicked(MouseEvent)) && args(e); // execution(* mouseClicked(MouseEvent)) && args(e);
pointcut onMousePressed(MouseEvent e) : // pointcut onMousePressed(MouseEvent e) :
execution(* mousePressed(MouseEvent)) && args(e); // execution(* mousePressed(MouseEvent)) && args(e);
pointcut onMouseReleased(MouseEvent e) : // pointcut onMouseReleased(MouseEvent e) :
execution(* mouseReleased(MouseEvent)) && args(e); // execution(* mouseReleased(MouseEvent)) && args(e);
pointcut onActionPerformed(ActionEvent e) : // pointcut onActionPerformed(ActionEvent e) :
execution(* actionPerformed(ActionEvent)) && args(e); // execution(* actionPerformed(ActionEvent)) && args(e);
pointcut onSetValueAt(Object v, int r, int c) : // pointcut onSetValueAt(Object v, int r, int c) :
execution(* setValueAt(java.lang.Object, int, int)) && args(v, r, c); // execution(* setValueAt(java.lang.Object, int, int)) && args(v, r, c);
//
//before表示之前的意思 // //before表示之前的意思
//这整个表示在MouseAdapter的public void mouseXXX(MouseEvent)方法调用之前,你想要执行的代码 // //这整个表示在MouseAdapter的public void mouseXXX(MouseEvent)方法调用之前,你想要执行的代码
before(MouseEvent e) : onMouseClicked(e) || onMousePressed(e) || onMouseReleased(e) { // before(MouseEvent e) : onMouseClicked(e) || onMousePressed(e) || onMouseReleased(e) {
SourceLocation sl = thisJoinPoint.getSourceLocation();//切面对应的代码位置 // SourceLocation sl = thisJoinPoint.getSourceLocation();//切面对应的代码位置
//
//String log = String.format("%s:\n%s\n%s\n%s\n\n", new Date(), sl, e, e.getSource()); // //String log = String.format("%s:\n%s\n%s\n%s\n\n", new Date(), sl, e, e.getSource());
String log = ""; // String log = "";
//TemplateInfoCollector.appendProcess(log); // //TemplateInfoCollector.appendProcess(log);
} // }
//同上 // //同上
before(ActionEvent e) : onActionPerformed(e) { // before(ActionEvent e) : onActionPerformed(e) {
SourceLocation sl = thisJoinPoint.getSourceLocation(); // SourceLocation sl = thisJoinPoint.getSourceLocation();
// !within(LogHandlerBar) 没用, 手动过滤 // // !within(LogHandlerBar) 没用, 手动过滤
if (e.getSource().toString().contains("javax.swing.Timer")) { // if (e.getSource().toString().contains("javax.swing.Timer")) {
return; // return;
} // }
//
//String log = String.format("%s:\n%s\n%s\n%s\n\n", new Date(), sl, e, e.getSource()); // //String log = String.format("%s:\n%s\n%s\n%s\n\n", new Date(), sl, e, e.getSource());
String log = ""; // String log = "";
//TemplateInfoCollector.appendProcess(log); // //TemplateInfoCollector.appendProcess(log);
//
} // }
//同上 // //同上
before(Object v, int r, int c) : onSetValueAt(v, r, c) { // before(Object v, int r, int c) : onSetValueAt(v, r, c) {
SourceLocation sl = thisJoinPoint.getSourceLocation(); // SourceLocation sl = thisJoinPoint.getSourceLocation();
//
//String log = String.format("%s:\n%s\nset value: %s at (%d, %d)\n\n", new Date(), sl, v, r, c); // //String log = String.format("%s:\n%s\nset value: %s at (%d, %d)\n\n", new Date(), sl, v, r, c);
String log = ""; // String log = "";
//TemplateInfoCollector.appendProcess(log); // //TemplateInfoCollector.appendProcess(log);
//
} // }
//
//
} //}

Loading…
Cancel
Save