00001
00002
00003
00004
00005
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;
00018 TGImageMap* fImageMap;
00019
00020 virtual void InitMap();
00021 virtual void InitRU();
00022 virtual void InitUS();
00023
00024 virtual void InitAU();
00025 virtual void InitFR();
00026 virtual void InitUK();
00027
00028 public:
00029
00030
00031
00032
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
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
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 }