彩票走势图

著名甘特图控件FlexGantt源码大放送——拖动多个时间表对象

原创|使用教程|编辑:龚雪|2014-04-02 09:48:42.000|阅读 1269 次

概述:FlexGantt甘特图控件实现拖动多个时间表对象的办法,及源码。

# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>

项目管理软件越来越强大,在甘特图设计中,同时展开多个跨行时间表对象也逐渐成常态化趋势。FlexGantt控件通过使用拦截命令实现此功能。

拦截器方法停止使用单一的常规命令,使用几个常规命令组合成复合命令取代它。 每个命令设置时间跨度为一个基于对象的时间表,实现拖动时间表对象。 前提是构造复合命令拦截器检索列表中的时间表对象,并且这个对象来至选择模型对象层。

源码如下:

setCommandInterceptor(DefaultChangeTimespanCommand.class, new ICommandInterceptor() {
   public boolean intercept(GanttChart gc, com.dlsc.flexgantt.command.ICommand cmd) {
      DefaultChangeTimelineObjectTimespanCommand command = 
        (DefaultChangeTimelineObjectTimespanCommand) cmd;
      TimelineObjectPath objectPath = new TimelineObjectPath(command.getNode().getPath(), 
                                                             command.getTimelineObject(), 
                                                             command.getLayer());
      LayerContainer lc = gc.getLayerContainer();
 
      /*
       * Just an example on how to look up the layer. This is application-specific.
       */
      Layer layer = MyModel.LAYER1;
 
      ITimelineObjectSelectionModel selectionModel = lc.getSelectionModel(planLayer);
      Iterator iter = selectionModel.getSelection();
      List list = new ArrayList();
      while (iter.hasNext()) {
         TimelineObjectPath path = iter.next();
         list.add(path);
      }
      if (list.size() > 1) {
         int result = JOptionPane.showConfirmDialog(gc, 
                                 "Move multiple?", 
                                 "Move",
                                 JOptionPane.YES_NO_CANCEL_OPTION);
         switch (result) {
            case JOptionPane.CANCEL_OPTION :
               return false;
            case JOptionPane.YES_OPTION :
               replanSelection(
                  list, 
                  objectPath, 
                  operationCommand.getOldTimeSpan(), 
                  operationCommand.getNewTimeSpan());
               return false;
            case JOptionPane.NO_OPTION :
               return true;
         }
      }
 
      return true;
   }
 
   private void replanSelection(List list, TimelineObjectPath originalPath, 
                                   ITimeSpan oldSpan, ITimeSpan newSpan) {
      AbstractCompoundCommand comp = new AbstractCompoundCommand("Multi Replan") {};
      long delta = oldSpan.getStartTime() - newSpan.getStartTime();
      for (TimelineObjectPath path : list) {
         ITimeSpan pathSpan = getModel().getTimeSpan(path.getTimelineObject());
         ITimeSpan span = new TimeSpan(pathSpan.getStartTime() - delta, 
                                       pathSpan.getEndTime() - delta);
         comp.addCommand(new DefaultChangeTimelineObjectTimespanCommand(
            (DefaultGanttChartNode) path.getNode(), 
            path.getLayer(), 
            (ITimelineObject) path.getTimelineObject(),
            (DefaultGanttChartModel) getModel(), 
            span, 
            DnDConstants.ACTION_MOVE));
      }
      getCommandStack().execute(comp, 
         new GanttChartProgressMonitor(myGanttChart));
   };
});

点击下载FlexGantt试用版


标签:甘特图甘特图开发

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn


为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP