2016-12-12 2 views
0

Я использую sencha GXT в течение нескольких дней, и в настоящее время я пытаюсь получить Drag'n'drop между двумя деревьями, представляющими различные файловые системы, для работы. Это означает, что дублирующийся файл может быть скопирован на одну систему в нескольких разных папках, но поскольку этот файл имеет тот же ключ, треск прерывается.Изменить ключ, поскольку элемент добавлен в дерево GXT

То, что я пытался до сих пор, и результаты:

  • ПОПЫТКА: Есть ли вещи в TreeDropHandler/TreeMoveHandler
  • Результат: Оказывается, это когда виджет становится перемещен

  • Попытка: переопределить TreeDataStore и переопределить методы добавления

  • Результат: методы добавления даже не вызывают при перетаскивании в t он дерево - это, кажется, они там только вручную добавлять вещи в TreeStore

  • Попытка: Просто скопировать весь TreeStore и изменить его на работу, как я хочу

  • Результат: Дерево specfically ожидает класс TreeStore , а не то, что реализует некоторый абстрактный класс, к сожалению, так что я не могу сделать это

  • Попытка: Override методы вставки в TreeStore

  • Результат: Эти методы в частном подклассов внутри TreeStore, так что я не может напрямую обращаться к ним

  • Попытки: Making модифицированной версии класса TreeStore продлить оригинал и просто скрыть все

  • Результат: Компилятор подскажи мне нужно @Override линия всасывание переменного для решения с повторяющимися типами, и когда я его добавлю, он скажет мне, что нет ничего, что могло бы его переопределить (x 100)

Я немного застрял в том, что еще я могу попытаться сделать в этот момент. Если у кого-нибудь есть какие-либо советы или примеры, я был бы очень благодарен.

ответ

0

Я в конечном итоге взломал что-то, что работает (для моего конкретного случая использования) при перетаскивании вещей между двумя деревьями - конкретный экземпляр ключа не важен, мой просто сохраняет путь к самому элементу как часть ключа - основная часть была просто модификация appendModel для индивидуального добавления древовидных компонентов с помощью вставок вместо addSubTree, поэтому у меня был тип данных, на которые мне действительно разрешалось создавать экземпляры.

Если кто-то может найти лучший способ, я бы с удовольствием его увидел.

public class MyTreeDropTarget extends TreeDropTarget<FileSystemKey> { 
    public MyTreeDropTarget(Tree<FileSystemKey, ?> tree) { 
     super(tree); 
    } 

    private void InsertClone(FileSystemKey parent, 
      TreeStore.TreeNode<FileSystemKey> node, int index) { 
     FileSystemKey clone; 
     if (parent == null) { //root of the tree 
      clone = new FileSystemKey(node.getData()); 
      clone.SetKey("/", null, "/" + clone.key2); 
      getWidget().getStore().insert(index, clone); 
     } else { //a child element 
      clone = new FileSystemKey(node.getData()); 
      clone.SetKey(parent.key1 + parent.key2 + "/", null, parent.key1 
       + parent.key2); 
      getWidget().getStore().insert(parent, index, clone); 
     } 
     //if this node had children, 
     //we then insert the children as children of this node 
     if (node.getChildren().size() > 0) { 
      //TODO: rewrite to preserve order  
      appendModel(clone, node.getChildren(), 0); 
     } 
    } 

    @Override 
    protected void appendModel(FileSystemKey p, List<?> items, int index) { 
     if (items.size() == 0) 
      return; 
     if (items.get(0) instanceof TreeStore.TreeNode) { 
      // @SuppressWarnings("unchecked") 

      List<TreeStore.TreeNode<FileSystemKey>> nodes = (List<TreeStore.TreeNode<FileSystemKey>>) items; 

      // TODO: replace clone with gets 
      for (TreeStore.TreeNode<FileSystemKey> key : nodes) { 
       InsertClone(p, key, index); 
      } 
     } else {// no changes here - maybe change 
       // this if you have non-homogenous key types 
      @SuppressWarnings("unchecked") 
      List<FileSystemKey> models = (List<FileSystemKey>) items; 
      if (p == null) { 
       getWidget().getStore().insert(index, models); 
      } else { 
       getWidget().getStore().insert(p, index, models); 
      } 
     } 
    } 
} 
Смежные вопросы