LocateCoords.cpp
// Copyright 2010 ESRI // // All rights reserved under the copyright laws of the United States // and applicable international laws, treaties, and conventions. // // You may freely redistribute and use this sample code, with or // without modification, provided you include the original copyright // notice and use restrictions. // // See the use restrictions. // #include "MapControlEvents.h" static void destroy_event(GtkWidget *widget, gpointer data); static gboolean delete_event(GtkWidget *widget, GdkEvent *event, gpointer data); void add_toolbar_items(IToolbarControl* pToolbar); #ifdef ESRI_UNIX void DsInitialize(); #endif GtkWidget *entryX, *entryY, *entryDMS, *entryUTM, *entryMGRS; IToolbarControlPtr ipToolbar; IMapControl3Ptr ipMap; ITOCControlPtr ipToc; MapControlEvents* mapEvents; IEventListenerHelperPtr ipMapControlEvent2Helper; int main(int argc, char **argv) { GtkWidget *window; GtkWidget *vbox, *hpane; GtkWidget *tlb, *toc, *map; GtkWidget *table, *label; HRESULT hr; gint w,h; // Initialize the Engine ::AoInitialize(NULL); #ifdef ESRI_UNIX DsInitialize(); #endif { IAoInitializePtr ipInit(CLSID_AoInitialize); esriLicenseStatus status; ipInit->Initialize(esriLicenseProductCodeEngine, &status); if (status != esriLicenseCheckedOut) { printf("Invalid Licensing.\n"); AoExit(0); } } gtk_init(&argc, &argv); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_default_size(GTK_WINDOW(window), 500, 600); tlb = gtk_axctl_new(AoPROGID_ToolbarControl); toc = gtk_axctl_new(AoPROGID_TOCControl); map = gtk_axctl_new(AoPROGID_MapControl); { hr = gtk_axctl_get_interface(tlb, (IUnknown **)&ipToolbar); hr = gtk_axctl_get_interface(toc, (IUnknown **)&ipToc); hr = gtk_axctl_get_interface(map, (IUnknown **)&ipMap); if (ipToolbar) ipToolbar->SetBuddyControl(ipMap); if (ipToc) ipToc->SetBuddyControl(ipMap); add_toolbar_items(ipToolbar); mapEvents = new MapControlEvents(); ipMapControlEvent2Helper.CreateInstance(CLSID_MapControlEvents2Listener); ipMapControlEvent2Helper->Startup(static_cast<IMapControlEvents2Helper*> (mapEvents)); ipMapControlEvent2Helper->AdviseEvents(ipMap, NULL); } gtk_widget_set_size_request(tlb, -1, 25); gtk_widget_set_size_request(toc, 100, -1); // create a horizontal pane with the map and toc on it hpane = gtk_hpaned_new(); gtk_paned_add1(GTK_PANED(hpane), toc); gtk_paned_add2(GTK_PANED(hpane), map); //add output controls to table table = gtk_table_new(4, 5, true); label = gtk_label_new("X"); gtk_table_attach(GTK_TABLE(table), label, 0, 1, 0, 1, GTK_EXPAND, GTK_EXPAND, 2, 2); entryX = gtk_entry_new(); gtk_table_attach(GTK_TABLE(table), entryX, 1, 4, 0, 1, GTK_EXPAND, GTK_EXPAND, 2, 2); label = gtk_label_new("Y"); gtk_table_attach(GTK_TABLE(table), label, 0, 1, 1, 2, GTK_EXPAND, GTK_EXPAND, 2, 2); entryY = gtk_entry_new(); gtk_table_attach(GTK_TABLE(table), entryY, 1, 4, 1, 2, GTK_EXPAND, GTK_EXPAND, 2, 2); label = gtk_label_new("DMS"); gtk_table_attach(GTK_TABLE(table), label, 0, 1, 2, 3, GTK_EXPAND, GTK_EXPAND, 2, 2); entryDMS = gtk_entry_new(); gtk_table_attach(GTK_TABLE(table), entryDMS, 1, 4, 2, 3, GTK_EXPAND, GTK_EXPAND, 2, 2); label = gtk_label_new("UTM"); gtk_table_attach(GTK_TABLE(table), label, 0, 1, 3, 4, GTK_EXPAND, GTK_EXPAND, 2, 2); entryUTM = gtk_entry_new(); gtk_table_attach(GTK_TABLE(table), entryUTM, 1, 4, 3, 4, GTK_EXPAND, GTK_EXPAND, 2, 2); label = gtk_label_new("MGRS"); gtk_table_attach(GTK_TABLE(table), label, 0, 1, 4, 5, GTK_EXPAND, GTK_EXPAND, 2, 2); entryMGRS = gtk_entry_new(); gtk_table_attach(GTK_TABLE(table), entryMGRS, 1, 4, 4, 5, GTK_EXPAND, GTK_EXPAND, 2, 2); gtk_widget_set_size_request(table, 400, -1); // create a vertical box for the tlb, map/toc pane and output table vbox = gtk_vbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox), tlb, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox), hpane, TRUE, TRUE, 0); gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, 0); gtk_container_add(GTK_CONTAINER(window), vbox); g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(delete_event), NULL); g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(destroy_event), NULL); gtk_widget_show_all(window); gtk_axctl_initialize_message_queue(); gtk_main(); // Uninitialize the engine { IAoInitializePtr ipInit(CLSID_AoInitialize); ipInit->Shutdown(); } ::AoUninitialize(); AoExit(0); return 0; } static void destroy_event(GtkWidget *widget, gpointer data) { gtk_main_quit(); } static gboolean delete_event(GtkWidget *widget, GdkEvent *event, gpointer data) { return FALSE; // must return false to trigger destroy event for window } void add_toolbar_items(IToolbarControl* pToolbar) { CComVariant varTool; long itemindex; if (!pToolbar) return; varTool = L"esriControlCommands.ControlsOpenDocCommand"; pToolbar->AddItem(varTool, 0, -1, VARIANT_FALSE, 0, esriCommandStyleIconOnly, &itemindex); varTool = L"esriControlCommands.ControlsMapZoomInTool"; pToolbar->AddItem(varTool, 0, -1, VARIANT_TRUE, 0, esriCommandStyleIconOnly, &itemindex); varTool = L"esriControlCommands.ControlsMapZoomOutTool"; pToolbar->AddItem(varTool, 0, -1, VARIANT_FALSE, 0, esriCommandStyleIconOnly, &itemindex); varTool = L"esriControlCommands.ControlsMapZoomInFixedCommand"; pToolbar->AddItem(varTool, 0, -1, VARIANT_FALSE, 0, esriCommandStyleIconOnly, &itemindex); varTool = L"esriControlCommands.ControlsMapZoomOutFixedCommand"; pToolbar->AddItem(varTool, 0, -1, VARIANT_FALSE, 0, esriCommandStyleIconOnly, &itemindex); varTool = L"esriControlCommands.ControlsMapPanTool"; pToolbar->AddItem(varTool, 0, -1, VARIANT_FALSE, 0, esriCommandStyleIconOnly, &itemindex); varTool = L"esriControlCommands.ControlsMapFullExtentCommand"; pToolbar->AddItem(varTool, 0, -1, VARIANT_FALSE, 0, esriCommandStyleIconOnly, &itemindex); varTool = L"esriControlCommands.ControlsMapZoomToLastExtentBackCommand"; pToolbar->AddItem(varTool, 0, -1, VARIANT_FALSE, 0, esriCommandStyleIconOnly, &itemindex); varTool = L"esriControlCommands.ControlsMapZoomToLastExtentForwardCommand"; pToolbar->AddItem(varTool, 0, -1, VARIANT_FALSE, 0, esriCommandStyleIconOnly, &itemindex); varTool = L"esriControlCommands.ControlsSelectFeaturesTool"; pToolbar->AddItem(varTool, 0, -1, VARIANT_FALSE, 0, esriCommandStyleIconOnly, &itemindex); varTool = L"esriControlCommands.ControlsSelectTool"; pToolbar->AddItem(varTool, 0, -1, VARIANT_FALSE, 0, esriCommandStyleIconOnly, &itemindex); }