This week corresponds to Week 3 in the planned timeline.
I created the MVC classes, namely, StoryboardModel, StoryboardDelegate and StoryboardView and implemented a bare bone GUI without much interactivity.
The StoryboardModel provides an interface to the delegate and view classes to handle the underlying data. The model consists of a list of StoryboardItem objects that correspond to individual storyboard items. Each StoryboardItem object consists of multiple StoryboardChild objects, which store data such as frame number, item name, duration and comment fields. This was set up in this way so as to get a tree based model where the index to a storyboard item is different from the individual data index. Now we can have an index for the storyboard item and also have an index for individual field in it, such as duration or comment field.
The StoryboardDelegate class paints items and handles edit events.
For the StoryboardView class I decided to use a QListView in the beginning, but due to it only handling the parent nodes of the model, I decided to subclass the QListView class. QListView is best suited for this purpose because it has certain functions, such as setFlow(…) and setWrap(…) that can make it very easy to get the results that we are aiming for. setFlow(…) can change the flow of the items from horizontal to vertical and vice-versa. So switching from Column mode to Row mode would be a one-liner. Also we can use setWrap(…) to switch to Grid mode.
This was deceptively time-taking and therefore I couldn’t work too much on making the UI interactive. This week I would get the CommentModel and StoryboardModel to interact so that comments added adds a comment field in each of StoryboardModel’s parent indices. I would implement the view and mode switching, which I think would be easy. Also I would work on making the UI interactive and getting it ready for some basic user testing.