Some ideas for a big refactoring of code. Input ========= handle MLT connection ((re-)move from renderer.cpp (hacks, special cases)) handle project document entry draw layer on clip instances in timeline (thumbnails) settings management (available through project tree items) proxy creation input method (register mimetype in file dialog, custom widget) effect support (a, v, av, special effects (freeze, speed)) support for multi-channel sound (5.1, ...) => modules for avformat, qimage/gtk_image(?), generators (slideshow, color, f0r) Timeline ========= provides basic operations (resize, move, add, remove) (GUI + XML + MLT) to be applied on any item => modules for input modes (drag & drop, 3/4-point editing, cut, resize by dragging end), spacer, ripple edit, push/pull edit, ...) Clip instances ------- connection to input module manage project document entry information about support for timeline operations owns an effect device per instance settings (functionality provided by input module) graphical timeline item (modules can register layers they want to draw (thumbnails, effect names, keyframes)) Clip groups ------ manage project document entry pass on operations to items Effect system ========= Keyframe manager ------ pipe information from/to timeline effect device, effect stack, effect parameter Effect parameter ------ custom widget function to handle keyframes -> connect to keyframe manager written in QScript/QML ? Effect device ------ manages list of effects attached to clip, track, timeline, group, the world passes info from/to timeline items and effect stack manage project document entry Project ========= read/write project settings management provide functionality to manage settings (remove hardcoded stuff (slideshow, proxy, ...)) Interface ========= provide functions to add menu items, global actions (for shortcut management) layout management styles management (see digikam) ...