next up previous contents
Next: Suggestions for future changes/additions Up: Method of use Previous: Using a Command object:

Developing a new class derived from Command:

The following `checklist' should be followed when creating a new type of command:
  1. Identify the `type' of command ... to affect the display, the molecules, the on-screen forms, or whatever. There are several Cmd* files, find one where it belongs, or create a new one of the form CmdXXXX.h and .C
  2. Create a text equivalent of the commands. Text commands in VMD\ consist of one or more words separated by whitespace, and terminated by a newline. The first word of the command should be an `identifying' word to indicate the general type of action to be performed, and the other words should be arguments to describe exactly what action to do in the general category.
  3. Put a new code in the Cmdtype enumeration in Command.h
  4. Create the class definition in CmdXXXX.h. The only functions that are needed are the constructor/destructor, and the virtual functions do_execute and create_text. If the command does not have a text equivalent, you do not need to provide a version of the latter.
  5. Put the member functions in the file CmdXXXX.C. The easiest thing to do is to follow the patters in the Cmd*.C files.
  6. All commands must be understood by the text parser (UIText). The parser reads in new commands, looks at the first word, and calls a text callback function to process that command. If the new command is just a variant of another existing command (i.e. the first word of this new command is the same as some existing command), then it should be put in an existing Cmd* file, and the function 'text_cmd_WWWW' at the top of the respective .C file (where WWWW is the first word of the command) should be updated to understand the new command. Add code to look for the proper strings, to create a new instance of the new command, and to add it to the given CommandQueue. If this command contains instead a new word for the VMD vocabulary, go on the next step, otherwise the next step can be skipped.
  7. For commands which contain a new starting word, so that they are placed in new files CmdXXXX.h and .C, two things must be done to allow VMD to be aware of the text versions of these commands and to be able to execute them:
    1. At the beginning of CmdXXX.h and .C, a new function `text_cmd_WWWW(int argc, char **argv, CommandQueue *cq, int id)' must be defined and written. This routine must know how to examine the text command (as provided in token form in argc and argv) and create instances of the proper Command object to be added to the command queue. Other Cmd* files contain examples.
    2. In the file UIText.C, there is a section where all the words that are at the beginning of VMD commands are `registered', with the callback function to call when that word is seen. Add a line similar to the others in this section, to register the new word and to specify the new function `text_cmd_WWWW'.
  8. If other user interfaces (other than the text interface) are to have the ability to execute this same command, add this ability to them as well.
  9. Finally, update the on-line help file vmd_help.html, and the User's Guide.


next up previous contents
Next: Suggestions for future changes/additions Up: Method of use Previous: Using a Command object:

Justin Gullingsrud
Tue Apr 6 09:26:48 CDT 1999