#include "acquire.h"
#include "datasources.h"
-#define VIKING_TITLE " - Viking " VIKING_VERSION " " VIKING_VERSION_NAME " " VIKING_URL
+#define VIKING_TITLE " - Viking"
#include <glib/gprintf.h>
#include <stdlib.h>
#define make_dir(dir) mkdir(dir,0777)
#endif
+#define VIKING_WINDOW_WIDTH 1000
+#define VIKING_WINDOW_HEIGHT 800
#define DRAW_IMAGE_DEFAULT_WIDTH 1280
#define DRAW_IMAGE_DEFAULT_HEIGHT 1024
#define DRAW_IMAGE_DEFAULT_SAVE_AS_PNG TRUE
static void load_file ( GtkAction *a, VikWindow *vw );
static gboolean save_file_as ( GtkAction *a, VikWindow *vw );
static gboolean save_file ( GtkAction *a, VikWindow *vw );
+static gboolean save_file_and_exit ( GtkAction *a, VikWindow *vw );
static gboolean window_save ( VikWindow *vw );
struct _VikWindow {
guint16 tool_layer_id;
guint16 tool_tool_id;
+ GtkActionGroup *action_group;
+
gint pan_x, pan_y;
guint draw_image_width, draw_image_height;
return vw_type;
}
+void vik_window_selected_layer(VikWindow *vw, VikLayer *vl)
+{
+ int i, j, tool_count;
+ VikLayerInterface *layer_interface;
+
+ if (!vw->action_group) return;
+
+ for (i=0; i<VIK_LAYER_NUM_TYPES; i++) {
+ GtkAction *action;
+ layer_interface = vik_layer_get_interface(i);
+ tool_count = layer_interface->tools_count;
+
+ for (j = 0; j < tool_count; j++) {
+ action = gtk_action_group_get_action(vw->action_group,
+ layer_interface->tools[j].name);
+ g_object_set(action, "sensitive", i == vl->type, NULL);
+ }
+ }
+}
+
static void window_finalize ( GObject *gob )
{
VikWindow *vw = VIK_WINDOW(gob);
GtkWidget *main_vbox;
GtkWidget *hpaned;
+ vw->action_group = NULL;
vw->viking_vvp = vik_viewport_new();
vw->viking_vlp = vik_layers_panel_new();
g_signal_connect_swapped (G_OBJECT(vw->viking_vvp), "motion_notify_event", G_CALLBACK(draw_mouse_motion), vw);
g_signal_connect_swapped (G_OBJECT(vw->viking_vlp), "update", G_CALLBACK(draw_update), vw);
- gtk_window_set_default_size ( GTK_WINDOW(vw), 1000, 800);
+ gtk_window_set_default_size ( GTK_WINDOW(vw), VIKING_WINDOW_WIDTH, VIKING_WINDOW_HEIGHT);
hpaned = gtk_hpaned_new ();
gtk_paned_add1 ( GTK_PANED(hpaned), GTK_WIDGET (vw->viking_vlp) );
static gboolean delete_event( VikWindow *vw )
{
+#ifdef VIKING_PROMPT_IF_MODIFIED
if ( vw->modified )
+#else
+ if (0)
+#endif
{
GtkDialog *dia;
dia = GTK_DIALOG ( gtk_message_dialog_new ( GTK_WINDOW(vw), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_QUESTION, GTK_BUTTONS_NONE,
static void menu_copy_layer_cb ( GtkAction *a, VikWindow *vw )
{
- a_clipboard_copy ( vw->viking_vlp );
+ a_clipboard_copy_selected ( vw->viking_vlp );
}
static void menu_cut_layer_cb ( GtkAction *a, VikWindow *vw )
{
- a_clipboard_copy ( vw->viking_vlp );
+ a_clipboard_copy_selected ( vw->viking_vlp );
menu_delete_layer_cb ( a, vw );
}
a_dialog_info_msg ( GTK_WINDOW(vw), "You must select a layer to show its properties." );
}
+static void help_about_cb ( GtkAction *a, VikWindow *vw )
+{
+ a_dialog_about(GTK_WINDOW(vw));
+}
+
static void menu_delete_layer_cb ( GtkAction *a, VikWindow *vw )
{
if ( vik_layers_panel_get_selected ( vw->viking_vlp ) )
vw->current_tool = TOOL_RULER;
}
else {
+ /* TODO: only enable tools from active layer */
for (i=0; i<VIK_LAYER_NUM_TYPES; i++) {
for ( j = 0; j < vik_layer_get_interface(i)->tools_count; j++ ) {
if (!strcmp(vik_layer_get_interface(i)->tools[j].name, gtk_action_get_name(a))) {
if ( gtk_dialog_run ( GTK_DIALOG(vw->open_dia) ) == GTK_RESPONSE_OK )
{
gtk_widget_hide ( vw->open_dia );
+#ifdef VIKING_PROMPT_IF_MODIFIED
if ( (vw->modified || vw->filename) && newwindow )
+#else
+ if ( vw->filename && newwindow )
+#endif
g_signal_emit ( G_OBJECT(vw), window_signals[VW_OPENWINDOW_SIGNAL], 0, gtk_file_selection_get_selections (GTK_FILE_SELECTION(vw->open_dia) ) );
else {
gchar **files = gtk_file_selection_get_selections (GTK_FILE_SELECTION(vw->open_dia) );
gtk_widget_destroy ( GTK_WIDGET(vw) );
}
+static gboolean save_file_and_exit ( GtkAction *a, VikWindow *vw )
+{
+ if (save_file( NULL, vw))
+ window_close( NULL, vw);
+ else
+ return(FALSE);
+}
+
static void zoom_to_cb ( GtkAction *a, VikWindow *vw )
{
gdouble xmpp = vik_viewport_get_xmpp ( vw->viking_vvp ), ympp = vik_viewport_get_ympp ( vw->viking_vvp );
{ "SetZoom", NULL, "_Zoom", 0, 0, 0 },
{ "Layers", NULL, "_Layers", 0, 0, 0 },
{ "Tools", NULL, "_Tools", 0, 0, 0 },
+ { "Help", NULL, "_Help", 0, 0, 0 },
{ "New", GTK_STOCK_NEW, "_New", "<control>N", "New file", (GCallback)newwindow_cb },
{ "Open", GTK_STOCK_OPEN, "_Open", "<control>O", "Open a file", (GCallback)load_file },
{ "GenImg", GTK_STOCK_CLEAR, "_Generate Image File", NULL, "Save a snapshot of the workspace into a file", (GCallback)draw_to_image_file_cb },
{ "GenImgDir", GTK_STOCK_DND_MULTIPLE, "Generate _Directory of Images", NULL, "FIXME:IMGDIR", (GCallback)draw_to_image_dir_cb },
{ "Exit", GTK_STOCK_QUIT, "E_xit", "<control>W", "Exit the program", (GCallback)window_close },
+ { "SaveExit", GTK_STOCK_QUIT, "Save and Exit", NULL, "Save and Exit the program", (GCallback)save_file_and_exit },
{ "GotoLL", GTK_STOCK_QUIT, "_Go to Lat\\/Lon...", NULL, "Go to arbitrary lat\\/lon coordinate", (GCallback)draw_goto_cb },
{ "GotoUTM", GTK_STOCK_QUIT, "Go to UTM...", NULL, "Go to arbitrary UTM coordinate", (GCallback)draw_goto_cb },
{ "Delete", GTK_STOCK_DELETE, "_Delete", NULL, NULL, (GCallback)menu_delete_layer_cb },
{ "DeleteAll", NULL, "Delete All", NULL, NULL, (GCallback)clear_cb },
{ "Properties",GTK_STOCK_PROPERTIES, "_Properties", NULL, NULL, (GCallback)menu_properties_cb },
+
+ { "About", GTK_STOCK_ABOUT, "_About", NULL, NULL, (GCallback)help_about_cb },
};
/* Radio items */
gtk_ui_manager_insert_action_group (uim, action_group, 0);
+ for (i=0; i<VIK_LAYER_NUM_TYPES; i++) {
+ for ( j = 0; j < vik_layer_get_interface(i)->tools_count; j++ ) {
+ GtkAction *action = gtk_action_group_get_action(action_group,
+ vik_layer_get_interface(i)->tools[j].name);
+ g_object_set(action, "sensitive", FALSE, NULL);
+ }
+ }
+ window->action_group = action_group;
+
accel_group = gtk_ui_manager_get_accel_group (uim);
gtk_window_add_accel_group (GTK_WINDOW (window), accel_group);
gtk_ui_manager_ensure_update (uim);