FlexGantt
FlexGantt 采取了和Swing所采用的MVC途径相同的途径。 为了多种用途,采用了几种不同的模型。 日历模型可对假日和周末进行跟踪。 分页模型支持用户载入不同的规划水平,书签模型可保存应用程序和用户定义的书签。 主要的模型,即为甘特图构件输入数据的模型是甘特图模型。 这是树形表模型的扩展,可以将甘特图的左侧进行数据汇总(左侧是一个树形表)。 FlexGantt 还能返回所谓的timeline项目,这些项目显示在timeline下方的右侧。 Timeline 对象代表行为、任务、事件、里程表,基本上任何可放置在timeline上的内容,因为可以与一个时间点或时间跨度相关联。
FlexGantt的主要功能:
分离屏/双甘特图: 几乎任何规划和日程应用程序都需要的功能是使两个不同的模型或同一个模型的两个不同部分在保持同步的同时,进行水平滚动。 FlexGantt框架包含一个双甘特图,可实现上述功能。 用户可在任何时候对甘特图进行分隔/消除分隔。 可用一个水平分隔符来对上、下部分进行缩放。 Timeline对象可以从一个拖动到另一个。
书签: 用户将越来越适应书签的概念。 FlexGantt 支持书签,而用户可通过书签来对timeline的设置进行快速调整,以便在甘特图中显示特定的时间点、粒度和水平线。 定义的书签可在导航控件的功能选单中列出。 如果在用户点击功能选单按钮时,如果控件的按钮按下,则时间跨度书签的预览图会显示。
层: FlexGantt 采用了一个与图形和映射应用程序相比非常独特的分层途径。 每个甘特图都包含一套系统层,这些层可提供核心的功能(例如,绘制垂直网格线)和一套专对timeline对象(行为、时间、里程碑。。。)进行绘制的层。 下图是对层叠的描述。 应用程序可以加入尽可能多的timeline对象层,允许它们对对象进行轻松分组,并一次显示或隐藏。 层还支持透明度,从而可以轻松的识别重叠的timeline对象。
拖 & 放网格 : Timeline 对象可以进行水平拖动和缩放,也可以垂直拖动。 在这些拖& 放操作过程中支持不可见的网格,以便在特定的时间对timeline对象的放置进行简化。 网格受策略的控制,这就意味着任何种类的网格都可以运行。 默认的网格策略可在经过配置后,使timeline对象与任何单位联系起来,从千年、世纪、十年、年、月、周、日直到毫秒。
受策略控制的行为: 日程应用程序在很大程度上取决于信息的可视化、数据的编辑以及对用户交互行为的响应方式。 FlexGantt的策略框架可用于根据这些变量对甘特图进行定制。 策略是小型的决策工具,通常不含大量的代码。 它们同时是无状态的。 在许多情况下,它们只返回flag (布尔值)和命令。 flag可用于控制程序流,而命令用于进行数据的实际修改(通过一个具有撤销和重复功能的命令堆栈)。
可插的渲染程序& 编辑器: Swing 可定义多个渲染程序和编辑器类,可用于其用户界面构件,如树、表或列表。 FlexGantt的功能与此相同,并可为树形表单元格、列表头、弹出功能选单、日期线模型、timeline对象、eventline对象定义渲染程序。 树形表单元格和timeline对象具有编辑器。 timeline 对象编辑器可在甘特图的右手测一个透明窗口中显示(在位编辑,见下图)
弹出功能选单/注释: 位于timeline下的条可以很好的表示一个新岗位,但由于空间的局限,只能承载有限的信息。 弹出功能选单/注释可在鼠标在这样条上移动时出现,这是一个很好的功能,可显示丰富的附加信息,可供决策人在对日程作出决策之前进行参考。 FlexGanttd的弹出功能选单可以和Swing的构件相同的方式进行定制化。 不同的渲染程序可以封装到不同类型的弹出对象中。 弹出对象受专门的弹出策略的影响。 下图显示的是默认的弹出渲染程序,可以系列化的形式显示弹出对象。
打印: 甘特图中显示的计划是一个文档,而每个文档都必须是可打印的。 内建的对FlexGantt的打印支持可让用户指定打印的时间跨度和粒度 (见下图)。 结果图标可以以几种不同的页宽和页高打印。
关系: Timeline对象通常彼此之间具有某种关系。 项目规划软件通常规定它们之间的限制。 这些限制的例子有: '之后开始', '之前结束', '同时开始', '同时结束'。 FlexGantt可通过在这些对象之间划线来进行可视化。 每个应用程序都有自己的可视化方式(为不同的限制关系提供不同的颜色和/或线型)。 通过插入定制的关系生成器,可进行任何种类的关系生成。
延迟加载(Lazy loading): 需要可视化的数据的两可能会很大,这取决于应用程序的类型。 在这些情况下,只有在采用“延迟加载”的方法时,用户界面才可能快速响应,这就是说,数据只有在用户实际发出请求的情况下才会从服务器(或数据库)中传输。 FlexGantt是从 底层开始设计的,支持延迟加载。 例如: 可实现树形表展开监听器界面的对象会在树甚至还未展开之前就收到一个事件,以便将展开中的父节点的子节点载入。 分页模型是另一个支持延迟加载的基础结构的例子。
命令框架: FlexGantt 提供了一个虽小但强大的命令框架。 该框架可用于对可以撤销和重复的编辑功能提供支持。 该框架包括命令、一个命令堆栈、一个命令堆栈监听器和一个进度监控。 命令可通过甘特图运行、撤销和重复,而甘特图在内部采用了一个可更换的命令堆栈。 命令可在自己的线程内运行,以便保持用户界面的响应性。 命令堆栈事件是在命令的执行过程中发出的。 进度监控程序可用于显示命令的进度。 子进度监控程序用于由其他命令组成的组合命令。 一旦一个命令执行完毕,将会加入命令堆栈的不可执行命令列表。 当一个不可撤消的命令运行时,列表会清空。 命令框架是高度抽象化的,因而可对现有的基础结构(遗留代码)进行复用。
分页: 如果一个日程应用程序需要处理大量的timeline对象,通常将timeline的水平线分成几页/几个时间跨度通常是有意义的。 这样可将数据分成几个较小的片段,便于甘特图的处理。 分页模块可对各页进行管理。 可查询当前页、前页、下一页、首页和 后一页。 用户界面提供了一个控件,可用于选择单独的页。
可变行高: FlexGantt图的每一行都可以有自己的高度。 在树形表的节点代表不同类型的对象或如果每个节点都与某个数量相关时,此功能非常有用。 在此情况下,行高可反映出数量的大小(例如某种资源的容量)。
多列排序: 为与甘特图的左手测的树形表支持多列排序,即用户可同时选择几个树形表的列,而表中的数据会根据选择的情况进行排序。 FlexGantt 采用了一种快速排序算法,支持升序和降序排序。
可定制的Timeline: 每个应用程序都有各自关于timeline的要求。 有些要求在日期的旁边显示是当年的第几周,其他的可能要求显示是当年的第几天(例如'第241天')。 timeline的设计宗旨考虑了灵活性。 其模型可以更换、其生成器可以被更换,甚至整个timeline都可以被定制的子类替换。
日历模型 : 日历模型可为甘特图提供与周末、假日或任何特殊的时间跨度相关的数据。 日历模型的条目在整个层容器的高度内进行渲染(右手测)。 关于日历模型的 明显的例子是对视为周末的星期进行定义。 周末日的背景呈灰色。
自滚动: 如果FlexGantt图频繁对其“当前时间/系统时间”进行更新,有时 好让应用程序关注这一时间。 当允许自滚动时,当前时间光标(垂直的虚线)会保持在层容器的中心,即便在时间前进时也是如此。 在应用程序更多地强调监控功能,而不是交互进度功能时,这是一种非常有用的功能。
Multiline: multiline功能允许甘特图在同一行中,以上下叠放的凡是显示timeline对象。 这样,可能发生重叠的timeline对象就可以正常显示了。