Explaination of Panels, Modules, and Overlays
StreetDeck has a “windowing” concept similar to how windows itself works, however, instead of windows, gui elements are called panels. Every GUI element in the program is contained in a panel. Each button is a panel, a list is a panel, the module that the buttons, lists, or any other control panel for that manner are contained in is also a special type of base panel. There are, in fact, two special types of base panels that are ultimately what contain all other child panels currently visible on the screen. These two types are called modules and overlays.
A module can be thought of as a single screen within the program. i.e. the first screen that the user sees when starting streetdeck is the home module called “CStartModule”, the Music screen is “CMusicModule”, the search for music screen is “CMusicSearchModule”, etc. Only 1 module can ever be visible at once. You can actually see the names of the modules as streetdeck is running by running with the –info command line parameter. Modules can be shown within a StreetDeck script by calling the app.Exec command with the module name. i.e. (App.Exec "CStartModule") Modules are more or less only operational when they are visible. Most events that occur in a module, only occur while that module is visible i.e. the OnTimer event is only sent to the current module. Most of the visible items in the module are other child panels (i.e. buttons, lists, labels, etc), however, anything can be rendered to a module directly like text, a line, a texture, or a shape.
Overlays are similar to modules in that they contain other visible panels, however, any number of them can be visible at once and they do not change when the background module changes. Examples of overlays are the media tray overlay that shows the current album art and has buttons for play, stop, etc. or the Bluetooth control overlay that shows the status of the current phone call and is only visible when a phone call is in progress. Overlays are always drawn on top of whichever base module is currently visible and are shown or hidden based on the state of the system. Like the media tray overlay is only shown when a media item is playing. Certain modules will also hide most overlays depending on how much screen real estate is needed. i.e. the settings modules hide most overlays while the user is configuring options. Overlays are very much like global modules, however, they should never occupy the entire screen like modules, and are usually only partially visible or visible for only short periods of time while events are occuring. They recieve almost all of the same events, however, they recieve them regardless of thier visible state and regardless of which module is currently visible.
The skin and script editor will allow developers to create modules and overlays and add controls to them through the visual skin editor and add code behind the controls in the script editor. Each scripted module or overlay will have exactly 1 script behind it.
Explaination of Media Managers
In addition to Overlays and Modules, StreetDeck has one more base object called a media manager that manages a single type of media that can be played in StreetDeck. Media managers have methods like "Play", "Next", "Select Preset", "Load", "Unload", they generate events like "OnNewMedia" and "OnPlayingStatusChange". A media manager has no front end, it is completely back end, Overlays and modules can communicate with the media manager to show values, like the current play time, or play status and usually have an overlay associated with it that is shown/hidden when the media manager is loaded/unloaded, but generally do not render directly to the screen. Only one media manager can only be active at a time. Whenever a new media manager is loaded, the old one is unloaded first. Examples of media managers within streetdeck are the CAudioManager, CDVDManager, CVideoManager, CXMRadioManager, and CRadioManager. The core media managers are not exposed in the development enviornment directly, but you can add additional media managers to it for different types of media you want to play i.e. Sirius Radio, iPos, etc.