Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members

menu-context.h File Reference

#include <gtk/gtk.h>
#include <celengine/body.h>
#include <celengine/selection.h>
#include <celestia/celestiacore.h>
#include "common.h"

Include dependency graph for menu-context.h:

This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

void initContext (AppData *a)
void menuContext (float, float, Selection sel)


Function Documentation

void initContext AppData a  ) 
 

Definition at line 44 of file menu-context.cpp.

References app.

Referenced by main().

00045 {
00046         app = a;
00047 }

void menuContext float  ,
float  ,
Selection  sel
 

Definition at line 52 of file menu-context.cpp.

References _AppData::agMain, app, AppendMenu(), Selection::body(), CreateAlternateSurfaceMenu(), CreatePlanetarySystemMenu(), Selection::deepsky(), Universe::find(), Body::getAlternateSurfaceNames(), Star::getCatalogNumber(), Universe::getDSOCatalog(), DSODatabase::getDSOName(), Body::getName(), SolarSystem::getPlanets(), Body::getSatellites(), Universe::getSolarSystemCatalog(), Universe::getStarCatalog(), StarDatabase::getStarName(), PlanetarySystem::getSystemSize(), Selection::getType(), Simulation::getUniverse(), Universe::isMarked(), menuMark(), menuUnMark(), ReplaceGreekLetterAbbr(), Simulation::setSelection(), _AppData::simulation, and Selection::star().

Referenced by main().

00053 {
00054         GtkWidget* popup = gtk_menu_new();
00055         string name;
00056 
00057         switch (sel.getType())
00058         {
00059                 case Selection::Type_Body:
00060                 {
00061                         name = sel.body()->getName();
00062                         AppendMenu(popup, NULL, name.c_str(), gtk_action_group_get_action(app->agMain, "CenterSelection"));
00063                         AppendMenu(popup, NULL, NULL, 0);
00064                         AppendMenu(popup, NULL, "_Goto", gtk_action_group_get_action(app->agMain, "GotoSelection"));
00065                         AppendMenu(popup, NULL, "_Follow", gtk_action_group_get_action(app->agMain, "FollowSelection"));
00066                         AppendMenu(popup, NULL, "S_ync Orbit", gtk_action_group_get_action(app->agMain, "SyncSelection"));
00067                         /* Add info eventually:
00068                          * AppendMenu(popup, NULL, "_Info", 0); */
00069 
00070                         const PlanetarySystem* satellites = sel.body()->getSatellites();
00071                         if (satellites != NULL && satellites->getSystemSize() != 0)
00072                         {
00073                                 GtkMenu* satMenu = CreatePlanetarySystemMenu(name, satellites);
00074                                 gtk_menu_item_set_submenu(AppendMenu(popup, NULL, "_Satellites", 0), GTK_WIDGET(satMenu));
00075                         }
00076 
00077                         vector<string>* altSurfaces = sel.body()->getAlternateSurfaceNames();
00078                         if (altSurfaces != NULL)
00079                         {
00080                                 if (altSurfaces->size() > 0)
00081                                 {
00082                                         GtkMenu* surfMenu = CreateAlternateSurfaceMenu(*altSurfaces);
00083                                         gtk_menu_item_set_submenu(AppendMenu(popup, NULL, "_Alternate Surfaces", 0), GTK_WIDGET(surfMenu));
00084                                         delete altSurfaces;
00085                                 }
00086                         }
00087                 }
00088                 break;
00089 
00090                 case Selection::Type_Star:
00091                 {
00092                         Simulation* sim = app->simulation;
00093                         name = ReplaceGreekLetterAbbr(sim->getUniverse()->getStarCatalog()->getStarName(*(sel.star())));
00094                         AppendMenu(popup, NULL, name.c_str(), gtk_action_group_get_action(app->agMain, "CenterSelection"));
00095                         AppendMenu(popup, NULL, NULL, 0);
00096                         AppendMenu(popup, NULL, "_Goto", gtk_action_group_get_action(app->agMain, "GotoSelection"));
00097                         /* Add info eventually:
00098                          * AppendMenu(popup, NULL, "_Info", 0); */
00099 
00100                         SolarSystemCatalog* solarSystemCatalog = sim->getUniverse()->getSolarSystemCatalog();
00101                         SolarSystemCatalog::iterator iter = solarSystemCatalog->find(sel.star()->getCatalogNumber());
00102                         if (iter != solarSystemCatalog->end())
00103                         {
00104                                 SolarSystem* solarSys = iter->second;
00105                                 GtkMenu* planetsMenu = CreatePlanetarySystemMenu(name, solarSys->getPlanets());
00106                                 if (name == "Sol")
00107                                         gtk_menu_item_set_submenu(AppendMenu(popup, NULL, "Orbiting Bodies", 0), GTK_WIDGET(planetsMenu));
00108                                 else
00109                                         gtk_menu_item_set_submenu(AppendMenu(popup, NULL, "Planets", 0), GTK_WIDGET(planetsMenu));
00110                         }
00111                 }
00112                 break;
00113 
00114                 case Selection::Type_DeepSky:
00115                 {
00116                         AppendMenu(popup, NULL, app->simulation->getUniverse()->getDSOCatalog()->getDSOName(sel.deepsky()).c_str(), gtk_action_group_get_action(app->agMain, "CenterSelection"));
00117                         AppendMenu(popup, NULL, NULL, 0);
00118                         AppendMenu(popup, NULL, "_Goto", gtk_action_group_get_action(app->agMain, "GotoSelection"));
00119                         AppendMenu(popup, NULL, "_Follow", gtk_action_group_get_action(app->agMain, "FollowSelection"));
00120                         /* Add info eventually:
00121                          * AppendMenu(popup, NULL, "_Info", 0); */
00122                 }
00123                 break;
00124 
00125                 case Selection::Type_Location:
00126                         break;
00127 
00128                 default:
00129                         break;
00130         }
00131 
00132         if (app->simulation->getUniverse()->isMarked(sel, 1))
00133                 AppendMenu(popup, menuUnMark, "_Unmark", 0);
00134         else
00135                 AppendMenu(popup, menuMark, "_Mark", 0);
00136 
00137         app->simulation->setSelection(sel);
00138 
00139         gtk_widget_show_all(popup);     
00140         gtk_menu_popup(GTK_MENU(popup), NULL, NULL, NULL, NULL, 0, gtk_get_current_event_time());
00141 }


Generated on Sat Jan 14 22:32:02 2006 for Celestia by  doxygen 1.4.1