Search code examples
gwtgxt

Change the style of nodes


In my project I using gwt 2.5.1 and gxt 3.0.1. I create Tree.

    protected void createTree(TreeStore<ProjectExtended> treeStore) {

    ValueProvider<ProjectExtended, SafeHtml> provider = new ValueProvider<ProjectExtended, SafeHtml>() {

        @Override
        public void setValue(ProjectExtended object, SafeHtml value) {

        }

        @Override
        public SafeHtml getValue(ProjectExtended object) {

            if(object == null) return SafeHtmlUtils.EMPTY_SAFE_HTML;

            if (!object.getActive()) {
                return SafeHtmlUtils.fromTrustedString(
                        "<span class=\"projectNotActive\">" + object.getName() + 
                        "</span> " + "<span class=\"dictIdText\"> ( " + 
                        object.getId() + " / " + object.getParentId() + " ) </span>");
            } else {
                return SafeHtmlUtils.fromTrustedString(
                        object.getName() + "<span class=\"dictIdText\"> ( " +
                        object.getId() + " / " + object.getParentId() + " ) </span>");
            }
        }

        @Override
        public String getPath() {
            return "name";
        }
    };

    Tree<ProjectExtended, SafeHtml> tree = new Tree<ProjectExtended, SafeHtml>(treeStore, provider);
    tree.getSelectionModel().setSelectionMode(SelectionMode.SINGLE);

    add(tree);
}

I try to change the style of nodes which aren't active. But I can't solve this problem, because browser displayes them wrong!

https://i.sstatic.net/0Jmdq.png

is there a way to solve this?


Solution

  • I solved the problem. The article which helped is here.

    There’s a simple example of code.

    1. You should create an inherited class AbstractCell and override the render method:

      public class SimpleAbstractCell extends AbstractCell<String> {
      
          @Override
          public void render(Context context, String value, SafeHtmlBuilder sb) {
              /*
              * Always do a null check on the value. Cell widgets can pass null to
              * cells if the underlying data contains a null, or if the data arrives
              * out of order.
              */
              if (value == null) {
                  return;
              }
      
              SafeHtml safeValue = SafeHtmlUtils.fromTrustedString(value);
              sb.append(safeValue);
          }
      }
      
    2. During creation a tree you should declare contentCell:

      protected void createTree(TreeStore<ProjectExtended> treeStore) {
      
          ValueProvider<ProjectExtended, String> provider = new ValueProvider<ProjectExtended, String>() {
      
              @Override
              public void setValue(ProjectExtended object, String value) {
      
              }
      
              @Override
              public String getValue(ProjectExtended object) {
      
                  if(object == null) return "";
      
                  if (!object.getActive()) {
                      return 
                          "<span class=\"projectNotActive\">" + object.getName() + 
                          "</span> " + "<span class=\"dictIdText\"> ( " + 
                          object.getId() + " / " + object.getParentId() + " ) </span>";
                  } else {
                      return 
                          object.getName() + "<span class=\"dictIdText\"> ( " +
                          object.getId() + " / " + object.getParentId() + " ) </span>";
                  }
              }
      
              @Override
              public String getPath() {
                  return "name";
              }
          };
      
          Tree<ProjectExtended, String> tree = new Tree<ProjectExtended, String>(treeStore, provider);
          tree.setCell(new SimpleAbstractCell());
          tree.getSelectionModel().setSelectionMode(SelectionMode.SINGLE);
      
          add(tree);
      }
      

    That’s all. I hope it’ll be useful for smb.