The editor is a content view inside a scrollview which manages a set of
timebased blocks, TimeBlocks.
The editor has a resizable grid of columns to present a time segment, eg a day, week, month.
At the top of the editor we have 2 ruler rows to display the value of the month and day.
We have 3 types of TimeBlocks:
1. TimeGroupView (a work package, a container for points and spans)
2. TimeSpanView (a block with timespan length, eg a task)
3. TimePointView ( a shape presenting a point in time, eg a milestone)
Each view is a NSView based class, all drawing subelements are done by its root layer and sublayers. The view has an alpha transparency and shadow as can be seen in the example image.
Sub elements of the TimeGroupView are of type CALayer:
- an icon to fold/unfold the timespan package
- a caption text right to the fold icon.
- a start and end label which is visible when the block is moved.
Sub elements of the TimeSpanView are of type CALayer:
- a task block (rounded rectangle)
Sub elements of the TimePointView are of type CALayer:
- a milestone shape ( rounded rhombus)
All TimeBlocks can be dragged inside the TimeEditor. The position is constrained
to the vertical grid.
While dragging, the start and endtime labels are visible, they
dissapear when mouse is released.
A new view gets created by dragging it from the toolbar to its position
in the TimeEditor.
The vertical order of subviews in a group can be changed by dragging.
The TimeGroupView and TimeSpanView has dynamic size and can be resized horizontally by dragging above the left and right outline.
The TimeGroupView can be folded/unfolded by clicking the header icon. In collapsed state only the header will be visible.
The TimeEditor shows a grid, TimeBlocks position and size are aligned to the grid.
Each TimeGroupView has a header and can contain 0..N subviews.
Inserting a subview will resize the group to fit.
The vertical order of subviews can be changed by dragging.
A TimeGroupView can contain other groups. Collapsing a subgroup will resize
the parentview and realign all blocks to fill the freed space (the rows).
The caption of a new package will get an automatic title saying "Package001"
where 001 is an enumeration from the current package count.
A test app with just the TimeEditor in a scrollview for OSX (prefered) or IOS.
Source uploaded to a private github repository.
Platform and language
The code must be written in native Objective-C.
The views can be written as flipped NSView for OSX (prefered) or as UIView
for IOS. In any case the code should be smoothly portable to the other platform.
This is a rough overview, precise requirements will be given later.
A Flash example application will be given as reference to the worker we hire.