Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- private void fireHighlightDocumentChanged(final JTextField txt) {
- TreeCellRenderer renderer = ttActivity.getTreeCellRenderer();
- String search = txt.getText().trim();
- if (renderer instanceof JXTree.DelegatingRenderer) {
- renderer = ((JXTree.DelegatingRenderer)renderer).getDelegateRenderer();
- }
- if (renderer instanceof GanttActivityTreeCellRenderer) {
- GanttActivityTreeCellRenderer r = (GanttActivityTreeCellRenderer)renderer;
- r.setHighlightString(search);
- search = search.toLowerCase();
- if (Strings.isNullOrEmpty(search)) {
- ttActivity.expandAll();
- ttActivity.repaint();
- return; // -->
- }
- IterableIterator<Activity> it = model.activityPreorderIterator();
- ttActivity.collapseAll();
- Set<Activity> set = Sets.newHashSet();
- Activity first = null;
- while (it.hasNext()) {
- Activity a = it.next();
- if (a.getDescription().toLowerCase().contains(search)) {
- if (null == first) {
- first = a;
- }
- if (!model.isParent(a)) {
- a = model.getParent(a);
- } else if (model.getParent(a) != null) {
- a = model.getParent(a);
- }
- set.add(a);
- }
- }
- for (Activity a : set) {
- ttActivity.expandPath(ttActivity.getTreePath(a));
- }
- if (null != first) {
- ttActivity.scrollPathToVisible(ttActivity.getTreePath(first));
- }
- }
- }
- // ------------
- public class GanttActivityTreeCellRenderer extends DefaultTreeCellRenderer {
- private Pattern pattern = null;
- private String search = null;
- public GanttActivityTreeCellRenderer() {
- }
- public void setHighlightString(String search) {
- this.search = Strings.emptyToNull(search);
- this.pattern = Pattern.compile(String.format("(?i)(%s)", Pattern.quote(search)));
- }
- @Override
- public void updateUI() {
- setTextSelectionColor(null);
- setTextNonSelectionColor(null);
- setBackgroundSelectionColor(null);
- setBackgroundNonSelectionColor(null);
- super.updateUI();
- }
- @Override
- public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) {
- JLabel renderer = (JLabel) super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus);
- renderer.setOpaque(false);
- if (value instanceof Activity) {
- Activity a = (Activity) value;
- // Icons
- renderer.setIcon(NodeType.get(a).getIcon(expanded));
- if (null == a.getParentId() && null == a.getModel().getActivityWBS(a.getActivityId())) {
- renderer.setIcon(NodeType.ROOT.getIcon(expanded));
- }
- // Search Highlight
- if (!selected && !Strings.isNullOrEmpty(search)) {
- if (a.getDescription().toLowerCase().contains(search.toLowerCase())) {
- renderer.setOpaque(true);
- renderer.setText(text2htmlHighlithed(getText(), search));
- renderer.setForeground(getTextNonSelectionColor());
- }
- }
- String text = a.isFinished() ? String.format("<s>%s", getText()) : getText();
- boolean isLeaf = a.getModel().isLeaf(a);
- if (a.isMilestone()) {
- renderer.setText(String.format("<html><font color=#B20000>%s", text)); // red
- } else if ((a.isFinished() && !a.isOpened()) || (!isLeaf && a.isFinished())) {
- renderer.setText(String.format("<html><font color=#7F7F7F>%s", text)); // gray
- } else if (a.isOpened() && isLeaf) {
- renderer.setText(String.format("<html><font color=#006C00>%s", text)); // green
- }
- }
- return renderer;
- }
- private String text2htmlHighlithed(String text, String search) {
- String out = search;
- Matcher m = pattern.matcher(text);
- if (m.find()) {
- out = m.replaceAll("<font bgcolor=#FFFF00>$0<font>"); // replace with matched group, to preserve case of that match
- }
- return String.format("<html>%s", out);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement