WorldMap.C

Go to the documentation of this file.
00001 //  This macro shows how to use a TGImageMap class.
00002 //
00003 // A TGImageMap provides the functionality like a clickable image in    
00004 // with sensitive regions (similar to MAP HTML tag).                 
00005 //Author: Valeriy Onuchin
00006 
00007 #include <TGPicture.h>
00008 #include <TGMenu.h>
00009 #include <TGImageMap.h>
00010 #include <TGMsgBox.h>
00011 #include <TGClient.h>
00012 
00013 ////////////////////////////////////////////////////////////////////////////////
00014 class WorldMap
00015 {
00016 protected:
00017    TGMainFrame*      fMain;      // main frame
00018    TGImageMap*       fImageMap;  // image map
00019 
00020    virtual void InitMap();
00021    virtual void InitRU();
00022    virtual void InitUS();
00023 //   virtual void InitCN();
00024    virtual void InitAU();
00025    virtual void InitFR();
00026    virtual void InitUK();
00027 
00028 public:
00029    // the name corresponds to TLD code 
00030    // (http://www.iana.org/cctld/cctld-whois.htm)
00031    // the value to "country phone code" 
00032    // (http://www.att.com/traveler/tools/codes.html)
00033    enum ECountryCode {
00034       kRU = 7, kUS = 1, kFR = 33, kDE = 49, kCH = 41, kCN = 86, kAU = 61,
00035       kUK = 44, kUA = 380, kBR = 55
00036     };
00037 
00038    WorldMap(const char *picName = "worldmap.jpg");
00039    virtual ~WorldMap() {}
00040 
00041    virtual void Show() { fMain->MapRaised(); }
00042    TGImageMap* GetImageMap() const { return fImageMap; }
00043    virtual TString GetTitle() const;
00044 
00045    // slots
00046    void PrintCode(Int_t code);
00047 };
00048 
00049 
00050 //__________________________________________________________________________
00051 WorldMap::WorldMap(const char* picName)
00052 {
00053    //
00054 
00055    fMain = new TGMainFrame(gClient->GetRoot(), 750, 420);
00056 
00057    fImageMap = new TGImageMap(fMain, picName);
00058    fMain->AddFrame(fImageMap);
00059    fMain->SetWindowName(GetTitle().Data());
00060    fMain->SetIconName("World Map");
00061 
00062    TGDimension size = fMain->GetDefaultSize();
00063    fMain->Resize(size);
00064    fMain->MapSubwindows();
00065    InitMap();
00066 
00067    fImageMap->Connect("RegionClicked(Int_t)", "WorldMap", this,
00068                       "PrintCode(Int_t)");
00069 }
00070 
00071 //__________________________________________________________________________
00072 TString WorldMap::GetTitle() const
00073 {
00074    // title
00075 
00076    return "Country Code (left button). City/Area Codes (right button)";
00077 }
00078 
00079 //__________________________________________________________________________
00080 void WorldMap::InitRU()
00081 {
00082    //
00083 
00084    int x[12] = { 403, 406, 427, 444, 438, 470, 508, 568, 599, 632, 645, 493 };
00085    int y[12] = { 68, 90, 120, 125, 109, 94, 109, 101, 122, 107, 74, 46 };
00086    TGRegion reg(12, x, y);
00087    fImageMap->AddRegion(reg, kRU);
00088    fImageMap->SetToolTipText(kRU, "Russia");
00089    TGPopupMenu* pm = fImageMap->CreatePopup(kRU);
00090    pm->AddLabel("City Codes");
00091    pm->AddSeparator();
00092    pm->AddEntry("Moscow = 095", 95);
00093    pm->AddEntry("Protvino = 0967", 967);
00094    pm->AddEntry("St.Petersburg = 812", 812);
00095 }
00096 
00097 //__________________________________________________________________________
00098 void WorldMap::InitUS()
00099 {
00100    //
00101 
00102    int x[5] = { 136, 122, 165, 194, 232 };
00103    int y[5] = { 110, 141, 158, 160, 118 };
00104    TGRegion reg(5, x, y);
00105    fImageMap->AddRegion(reg, kUS);
00106 
00107    int alaskaX[4] = { 86, 131, 154, 117 };
00108    int alaskaY[4] = { 90, 82, 64, 63 };
00109    TGRegion alaska(4, alaskaX, alaskaY);
00110    fImageMap->AddRegion(alaska, kUS);
00111    fImageMap->SetToolTipText(kUS, "USA");
00112 
00113    TGPopupMenu* pm = fImageMap->CreatePopup(kUS);
00114    pm->AddLabel("Area Codes");
00115    pm->AddSeparator();
00116    pm->AddEntry("Illinois = 217", 217);
00117    pm->AddEntry("New York = 212", 212);
00118 }
00119 
00120 //__________________________________________________________________________
00121 void WorldMap::InitFR()
00122 {
00123    //
00124 
00125    int x[5] = { 349, 353, 368, 368, 358 };
00126    int y[5] = { 112, 123, 119, 108, 107 };
00127    TGRegion reg(5, x, y);
00128    fImageMap->AddRegion(reg, kFR);
00129    fImageMap->SetToolTipText(kFR, "France");
00130 }
00131 
00132 //__________________________________________________________________________
00133 void WorldMap::InitUK()
00134 {
00135    //
00136 
00137    int x[4] = { 346, 348, 359, 352 };
00138    int y[4] = { 93, 104, 103, 87 };
00139    TGRegion reg(4, x, y);
00140    fImageMap->AddRegion(reg, kUK);
00141    fImageMap->SetToolTipText(kUK, "United Kingdom");
00142 }
00143 
00144 //__________________________________________________________________________
00145 void WorldMap::InitAU()
00146 {
00147    //
00148 
00149    int x[6] = { 582, 576, 634, 658, 641, 607 };
00150    int y[6] = { 271, 300, 310, 283, 251, 253 };
00151    TGRegion reg(6, x, y);
00152    fImageMap->AddRegion(reg, kAU);
00153    fImageMap->SetToolTipText(kAU, "Australia");
00154 }
00155 
00156 //__________________________________________________________________________
00157 void WorldMap::InitMap()
00158 {
00159    //
00160 
00161    InitRU();
00162    InitUS();
00163    InitFR();
00164    InitAU();
00165    InitUK();
00166    fImageMap->SetToolTipText(GetTitle().Data(), 300);
00167 }
00168 
00169 //__________________________________________________________________________
00170 void WorldMap::PrintCode(Int_t code)
00171 {
00172    //
00173 
00174    EMsgBoxIcon icontype = kMBIconAsterisk;
00175    Int_t buttons = 0;
00176    Int_t retval;
00177 
00178    TGMsgBox* box = new TGMsgBox(gClient->GetRoot(), fMain,
00179                               "Country Code", Form("Country Code=%d",code),
00180                               icontype, buttons, &retval);
00181 }
00182 
00183 void WorldMap()
00184 {
00185    WorldMap *map = new WorldMap;
00186    map->Show();
00187 }

Generated on Tue Jul 5 15:44:26 2011 for ROOT_528-00b_version by  doxygen 1.5.1