Locate coordinates in a MapControl
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);
}