Joe Van Dyk wrote: >If you remember my previous post titled "automatically call function on >attribute set", you'll remember that I have an airplane class and a >airplane_drawing class, which represents the airplane when drawn on the >screen. > >I'm using GTK for this, by the way. > >Say the user right clicks on the airplane_drawing object. I want a menu to >popup on the screen with options that when selected will call methods on the >airplane object. > >Information on the airplanes is also listed in table form, which reports >each airplane's position, velocity, etc. When I right click on the row that >represents the airplane, I'd like the same popup menu (for now, perhaps it >will be different in the future) to pop up with options that when selected >will call a method on the airplane object. > >Question: Since the popup menu has pretty common functionality between the >graphical airplane display and the table airplane display, what would be a >good way to generalize this? Any patterns that would be useful here? > > > For now you say you want the same pop-up menu (meaning same functionality?). If this is the case, make a Singleton class that represents your popup window and it's functionality. If your airplane_drawing and your table will utilize *most* of the same functionality then still use a Singleton, and allow it to be passed parameters which act as switches. These switches could depict what functionality shows up. Conceptually speaking maybe something like: #singleton class AirplanePopupMenu @instance #constants AP_VELOCITY = 1 AP_LOCATION = 2 AP_SIZE = 3 AP_FUEL = 4 AP_WEIGHT = 5 #etc... def get_instance @instance end def show_menu( *args ) #Loop through arrat args which should correspond to the AP_xxx constants we specified # above. Depending on the switch then build the rest of your popup menu before displaying it # This way users of the AirpanPopupMenu could only utilize the functionality they want end end Hope I didn't muddy the waters... Zach