Esempio n. 1
0
  /* (non-Javadoc)
   * @see org.eclipse.swt.events.MouseListener#mouseUp(org.eclipse.swt.events.MouseEvent)
   */
  public void mouseUp(MouseEvent e) {
    // 如果当前提示窗口处于显示状态,隐藏之
    main.getTipHelper().closeFriendTipShell();
    // 如果是右键,弹出菜单
    if ((e.stateMask & SWT.BUTTON3) != 0) {
      MenuHelper helper = main.getMenuHelper();
      QTree tree = (QTree) e.getSource();
      QItem item = tree.getItemUnderMouse();
      if (item == null || item.isMouseOnBlank()) {
        // item为null或者鼠标在item的空白区域,则显示组菜单
        Group g = main.getBlindHelper().getCurrentGroup();
        if (g == null) return;
        switch (g.groupType) {
          default:
            helper.setGroupMenuLocation(tree.toDisplay(e.x, e.y));
            helper.setGroupMenuData(g);
            helper.setGroupMenuVisible(true);
            break;
        }
        return;
      }

      // 判断model类型,显示不同菜单
      Model model = (Model) item.getData();
      switch (model.type) {
        case USER:
          User u = (User) model;
          if (u.group.isCluster()) {
            helper.setMemberMenuData(model);
            helper.setMemberMenuLocation(tree.toDisplay(e.x, e.y));
            helper.setMemberMenuVisible(true);
          } else {
            helper.setFriendMenuLocation(tree.toDisplay(e.x, e.y));
            helper.setFriendMenuData(model);
            helper.setFriendMenuVisible(true);
          }
          break;
        case CLUSTER:
          Cluster c = ModelRegistry.getCluster(((Cluster) model).clusterId);
          if (c == null) return;
          switch (c.clusterType) {
            case DIALOG_CONTAINER:
              helper.setDialogContainerMenuData(c);
              helper.setDialogContainerMenuLocation(tree.toDisplay(e.x, e.y));
              helper.setDialogContainerMenuVisible(true);
              break;
            default:
              helper.setClusterMenuLocation(tree.toDisplay(e.x, e.y));
              helper.setClusterMenuData(c);
              helper.setClusterMenuVisible(true);
              break;
          }
          break;
        case ORGANIZATION:
          helper.setOrganizationMenuData(model);
          helper.setOrganizationMenuLocation(tree.toDisplay(e.x, e.y));
          helper.setOrganizationMenuVisible(true);
          break;
        case GROUP:
          helper.setGroupMenuLocation(tree.toDisplay(e.x, e.y));
          helper.setGroupMenuData(model);
          helper.setGroupMenuVisible(true);
          break;
        case DUMMY:
          Dummy dummy = (Dummy) model;
          switch (dummy.dummyType) {
            case CLUSTER_ORGANIZATION:
              helper.setOrganizationContainerMenuData(model);
              helper.setOrganizationContainerMenuLocation(tree.toDisplay(e.x, e.y));
              helper.setOrganizationContainerMenuVisible(true);
              break;
            case SUBJECTS:
              helper.setSubjectMenuData(model);
              helper.setSubjectMenuLocation(tree.toDisplay(e.x, e.y));
              helper.setSubjectMenuVisible(true);
              break;
          }
        default:
          break;
      }
    }
  }