// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.

// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.

// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 

// Copyright 2003 Liam Girdwood  

#ifndef _NOVA_APP_HH
#  define _NOVA_APP_HH

#include <libgnomeuimm/about.h>
#include <gtkmm/tooltips.h>
#include <gtkmm/menu.h>
#include <gtkmm/menubar.h>
#include <gtkmm/stock.h>
#include <gtkmm/toolbar.h>
#include <gtkmm/scrolledwindow.h>
#include <gtkmm/notebook.h>
#include <gtkmm/main.h>
#include <gconfmm/client.h>
#include <vector>
#include <string>
#include "nova_page.hh"
#include "virtual_sky.hh" 

/*! \namespace GUI
* \brief Nova Graphical User Interface
*
* All classes in this namespace are User Interface objects
*/
namespace GUI
{

/*! \class NovaApp
* \brief The Nova application
*
* This class is the main thread of the Nova Application.
*/
class NovaApp :  public Gtk::Window
{  
	public:
		NovaApp();
		virtual ~NovaApp();
		void get_pixmap_file (std::string file, std::string path);
	
	private:
	
		// contents
		Gtk::VBox m_app;
	
		// menubar
		Gtk::MenuBar m_menubar;
		
		// file menu
		Glib::RefPtr<Gtk::MenuItem> m_file_new_vsky;
		Glib::RefPtr<Gtk::MenuItem> m_file_new_obs;
		Glib::RefPtr<Gtk::MenuItem> m_file_new_tlist;
		Glib::RefPtr<Gtk::MenuItem> m_file_new_ephemeris;
		Glib::RefPtr<Gtk::MenuItem> m_file_save;
		Glib::RefPtr<Gtk::MenuItem> m_file_save_as;
		Glib::RefPtr<Gtk::MenuItem> m_file_import;
		Glib::RefPtr<Gtk::MenuItem> m_file_print;
		Glib::RefPtr<Gtk::MenuItem> m_file_close;
		
		// sky menu
		Glib::RefPtr<Gtk::MenuItem> m_sky_view_moon;
		Glib::RefPtr<Gtk::MenuItem> m_sky_view_mercury;
		Glib::RefPtr<Gtk::MenuItem> m_sky_view_venus;
		Glib::RefPtr<Gtk::MenuItem> m_sky_view_mars;
		Glib::RefPtr<Gtk::MenuItem> m_sky_view_jupiter;
		Glib::RefPtr<Gtk::MenuItem> m_sky_view_saturn;
		Glib::RefPtr<Gtk::MenuItem> m_sky_view_uranus;
		Glib::RefPtr<Gtk::MenuItem> m_sky_view_neptune;
		Glib::RefPtr<Gtk::MenuItem> m_sky_view_pluto;
		Glib::RefPtr<Gtk::MenuItem> m_sky_view_asteroids;
		Glib::RefPtr<Gtk::MenuItem> m_sky_view_comets;
		Glib::RefPtr<Gtk::MenuItem> m_sky_view_sun;
		Glib::RefPtr<Gtk::MenuItem> m_sky_view_galaxies;
		Glib::RefPtr<Gtk::MenuItem> m_sky_view_nebulae;
		Glib::RefPtr<Gtk::MenuItem> m_sky_view_other;
		Glib::RefPtr<Gtk::MenuItem> m_sky_view_star;
		Glib::RefPtr<Gtk::MenuItem> m_sky_settings_location;
		Glib::RefPtr<Gtk::MenuItem> m_sky_settings_markers;
		Glib::RefPtr<Gtk::MenuItem> m_sky_settings_near_sky;
		Glib::RefPtr<Gtk::MenuItem> m_sky_settings_deep_sky;
		Glib::RefPtr<Gtk::MenuItem> m_sky_view_ephemeris_manage;
		Glib::RefPtr<Gtk::MenuItem> m_sky_view_object;
		Glib::RefPtr<Gtk::MenuItem> m_sky_view_object_deep;
		Glib::RefPtr<Gtk::MenuItem> m_sky_view_object_near;
		Glib::RefPtr<Gtk::MenuItem> m_sky_view_object_coordinates;
		Glib::RefPtr<Gtk::MenuItem> m_sky_view_ephemeris;
		Glib::RefPtr<Gtk::MenuItem> m_sky_view_virtual_object;
		Glib::RefPtr<Gtk::MenuItem> m_sky_settings;
		Glib::RefPtr<Gtk::MenuItem> m_sky_view;
		Glib::RefPtr<Gtk::MenuItem> m_sky_view_settings;
		
		// observatory menu
		Glib::RefPtr<Gtk::MenuItem> m_obs_goto_moon;
		Glib::RefPtr<Gtk::MenuItem> m_obs_goto_mercury;
		Glib::RefPtr<Gtk::MenuItem> m_obs_goto_venus;
		Glib::RefPtr<Gtk::MenuItem> m_obs_goto_mars;
		Glib::RefPtr<Gtk::MenuItem> m_obs_goto_jupiter;
		Glib::RefPtr<Gtk::MenuItem> m_obs_goto_saturn;
		Glib::RefPtr<Gtk::MenuItem> m_obs_goto_uranus;
		Glib::RefPtr<Gtk::MenuItem> m_obs_goto_neptune;
		Glib::RefPtr<Gtk::MenuItem> m_obs_goto_pluto;
		Glib::RefPtr<Gtk::MenuItem> m_obs_goto_asteroid;
		Glib::RefPtr<Gtk::MenuItem> m_obs_goto_comet;
		Glib::RefPtr<Gtk::MenuItem> m_obs_goto_galaxies;
		Glib::RefPtr<Gtk::MenuItem> m_obs_goto_nebulae;
		Glib::RefPtr<Gtk::MenuItem> m_obs_goto_other;
		Glib::RefPtr<Gtk::MenuItem> m_obs_goto_sun;
		Glib::RefPtr<Gtk::MenuItem> m_obs_goto_star;
		Glib::RefPtr<Gtk::MenuItem> m_obs_goto_near_sky;
		Glib::RefPtr<Gtk::MenuItem> m_obs_goto_deep_sky;
		Glib::RefPtr<Gtk::MenuItem> m_obs_goto_coords;
		Glib::RefPtr<Gtk::MenuItem> m_obs_goto_vsky_coords;
		Glib::RefPtr<Gtk::MenuItem> m_obs_connect;
		Glib::RefPtr<Gtk::MenuItem> m_obs_disconnect;
		Glib::RefPtr<Gtk::MenuItem> m_obs_goto;
		Glib::RefPtr<Gtk::MenuItem> m_obs_control;
		
		// target list menu
		Glib::RefPtr<Gtk::MenuItem> m_target_add;
		Glib::RefPtr<Gtk::MenuItem> m_target_delete;
		Glib::RefPtr<Gtk::MenuItem> m_target_properties;
		Glib::RefPtr<Gtk::MenuItem> m_target_up;
		Glib::RefPtr<Gtk::MenuItem> m_target_down;
		Glib::RefPtr<Gtk::MenuItem> m_target_order;
		Glib::RefPtr<Gtk::MenuItem> m_target_execute;
		Glib::RefPtr<Gtk::MenuItem> m_target_stop;
		
		// log menu
		Glib::RefPtr<Gtk::MenuItem> m_log_add_entry;
		Glib::RefPtr<Gtk::MenuItem> m_log_search_entries;
		Glib::RefPtr<Gtk::MenuItem> m_log_database_prefs;
		
		// toolbar
		Gtk::Toolbar m_toolbar;
		//Gtk::Toolbar_Helpers::ButtonElem* m_tb_proj;
		//Gtk::Toolbar_Helpers::ButtonElem* m_tb_zoom_in;
		//Gtk::Toolbar_Helpers::ButtonElem* m_tb_zoom_out;
		
		// about box
		Gnome::UI::About* m_about;
		
		// mdi
		Gtk::Notebook m_nova_book;
		std::vector<Polaris::NovaPage*> m_pages;
	
		// GConf
		Glib::RefPtr<Gnome::Conf::Client> m_ref_client;
		Glib::ustring m_str_main_dir;
		Glib::ustring m_str_size_dir;
		Glib::ustring m_str_vsky_dir;

		// App size
		int m_width;
		int m_height;
		int m_page_height;
		
		// app construction
		void install_menus (void);
		void install_toolbar (void);
		void install_appbar (void);
		void install_logo (void);
		void install_about (void);
		void install_contents (void); 
		void create_menu_help (void);
		void create_menu_log (void);
		void create_menu_target (void);
		void create_menu_observatory (void);
		void create_menu_sky (void);
		void create_menu_file (void);
		bool import_default (void);
	
		// signal handlers
        void on_new_virtual_sky_activate();
        void on_new_target_list_activate();
        void on_new_ephemeris_activate();
        void on_new_observatory_activate();
        void on_new_activate();
        void on_open_activate();
        void on_save_activate();
        void on_save_as_activate();
        void on_import_activate();
        void on_print_activate();
        void on_close_activate();
        void on_quit_activate();
		
        void on_sky_local_activate();
        void on_sky_vsky_activate();
        void on_sky_near_sky_activate();
        void on_sky_deep_sky_activate();
        void on_eph1_activate();
		void on_sky_ephemeris_manage_activate ();
        void on_sky_view_sun_activate();
        void on_sky_view_mercury_activate();
        void on_sky_view_venus_activate();
        void on_sky_view_mars_activate();
        void on_sky_view_jupiter_activate();
        void on_sky_view_saturn_activate();
        void on_sky_view_uranus_activate();
        void on_sky_view_neptune_activate();
        void on_sky_view_pluto_activate();
        void on_sky_view_asteroids_activate();
        void on_sky_view_comets_activate();
        void on_sky_view_moon_activate();
        void on_sky_view_star_activate();
        void on_sky_view_galaxy_activate();
        void on_sky_view_nebula_activate();
        void on_sky_view_other_activate();
        void on_sky_view_deep_sky_activate();
        void on_sky_view_coordinates_activate();
		void on_sky_view_fainter_activate();
		void on_sky_view_brighter_activate();
		
        void on_obs_connect_activate();
        void on_obs_disconnect_activate();
        void on_goto_ephemeris_activate();
        void on_goto_sun_activate();
        void on_goto_mercury_activate();
        void on_goto_venus_activate();
        void on_goto_mars_activate();
        void on_goto_jupiter_activate();
        void on_goto_saturn_activate();
        void on_goto_uranus_activate();
        void on_goto_neptune_activate();
        void on_goto_pluto_activate();
        void on_goto_asteroids_activate();
        void on_goto_comets_activate();
        void on_goto_moon_activate();
        void on_goto_solar_system_activate();
        void on_goto_star_activate();
        void on_goto_galaxy_activate();
        void on_goto_nebula_activate();
        void on_goto_other_activate();
        void on_goto_coords_activate();
		void on_goto_vsky_coords_activate();
		void on_obs_control_activate();
		
        void on_target_add_activate();
        void on_target_delete_activate();
        void on_target_up_activate();
        void on_target_down_activate();
        void on_target_order_activate();
        void on_target_execute_activate();
        void on_target_stop_activate();
        void on_target_properties_activate();
		
        void on_log_add_activate();
        void on_log_search_activate();
        void on_log_properties_activate();
     
        void on_contents_activate();
        void on_about_activate();
		
		// virtual sky signals
        void on_zoom_in_button_clicked();
        void on_zoom_out_button_clicked();
        void on_goto_button_clicked();
		void on_change_proj();
		
		//session management
		bool load_session();
		bool save_session();
		void get_app_settings();
		
		// page creation
		void create_vsky(Vega::VirtualSky* page);
};

};

#endif


syntax highlighted by Code2HTML, v. 0.9.1