#ifndef __ConfigWindow_h_ #define __ConfigWindow_h_ #include "../shared/CommandDispatcher.h" #include "../shared/DatabaseWithRetry.h" // This file is responsible for populating a "new" config window. // // The "old" config window started with one configuration. The server broke // this up into pieces. The client displayed the individual pieces as GUI // elements. The user could modify the individual settings one at a time. // // In the "old" setup, the user also had access to "recent settings" for his // windows and "samples". These came from a variety of sources and were // presented in various GUI elements. For example, the user would commonly // go to the menu to select a starting point (such as "start from scratch") // then go to the config window to modify that. This is all combined in one // window now. In some ways this is simpler because we can deliver all the // relevant info in one place. But it does bring up the issue of speed (which // was already under consideration) because a user can very quickly jump // between setups. // // To deal with speed we do two things. First, we present all the relevant // data in one message so that we don't have a series of requests going between // the client and the server. A user can very quickly browse through all of // the samples, with one message to and from the server. Second, we seperate // the data in a specific configuration from the list of all configuration // choices. Most of the choices don't change much. The client should be able // to build the window just once, creating controls for each choice. The // client can then fill in the controls as a seperate step. // When the user requests to populate a config window, call this function to // do all the work. void populateConfigWindow(ExternalRequest const &request, DatabaseWithRetry &database, bool allowNegativeListIds = false); #endif