buttonsLayout.C: This macro gives an example of different buttons' layout. | Graphics User Interface | customContextMenu.C: How to add a function to the class context menu |
// Author: Valeriy Onuchin 24/08/2007 // // This macro gives an example of how to use html widget // to display tabular data. // // To run it do either: // .x calendar.C // .x calendar.C++ #include "TDatime.h" #include "TTimeStamp.h" #include "TGComboBox.h" #include "TGNumberEntry.h" #include "TGLabel.h" #include "TGColorSelect.h" #include "TGHtml.h" #include "TApplication.h" #include "TROOT.h" #include "TColor.h" /////////////////////////// HTML calendar ////////////////////////////////////// TString monthNames[12] = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"}; //////////////////////////////////////////////////////////////////////////////// class HtmlDayName { public: // make them public for shorter code TString fDay; // day name, e.g. "Sunday" TString fAlign; // name align inside table cell TString fBgColor; // cell background color TString fFontSize; // text font size TString fFontColor; // text color TString fHtml; // HTML output code public: HtmlDayName(const char *day); virtual ~HtmlDayName() {} TString Html() const { return fHtml; } ClassDef(HtmlDayName, 0); }; //______________________________________________________________________________ HtmlDayName::HtmlDayName(const char *day) : fDay(day), fAlign("middle"), fBgColor("#000000"), fFontSize("4"), fFontColor("#FFFFFF") { // ctor. fHtml += "<TH width=14%"; fHtml += " align=" + fAlign; fHtml += " bgcolor=" + fBgColor + ">"; fHtml += "<font size=" + fFontSize; fHtml += " color=" + fFontColor + ">"; fHtml += fDay; fHtml += "</font></TH>\n"; } //////////////////////////////////////////////////////////////////////////////// class HtmlMonthTable { public: // make them public for shorter code Int_t fYear; // year Int_t fMonth; // month TString fBorder; // border width TString fBgColor; // background color TString fCellpadding; // cell padding TString fCellFontSize; // cell font size TString fCellBgcolor; // cell background color TString fTodayColor; // background color of cell correspondent today date TDatime fToday; // today's date TString fHtml; // HTML output code void Build(); void BuildDayNames(); void BuildDays(); public: HtmlMonthTable(Int_t year, Int_t month); virtual ~HtmlMonthTable() {} void SetDate(Int_t year, Int_t month); TString Html() const { return fHtml; } ClassDef(HtmlMonthTable, 0); }; //______________________________________________________________________________ HtmlMonthTable::HtmlMonthTable(Int_t year, Int_t month) : fYear(year), fMonth(month), fBorder("2"), fBgColor("#aaaaaa"), fCellpadding("5"), fCellFontSize("3"), fCellBgcolor("#eeeeee"), fTodayColor("#ffff00") { // Constructor. Build(); } //______________________________________________________________________________ void HtmlMonthTable::SetDate(Int_t year, Int_t month) { // Set date. fYear = year; fMonth = month; Build(); } //______________________________________________________________________________ void HtmlMonthTable::Build() { // Build HTML code. fHtml = "<TABLE width=100%"; fHtml += " border=" + fBorder; fHtml += " bgcolor=" + fBgColor; fHtml += " cellpadding=" + fCellpadding; fHtml += "><TBODY>"; BuildDayNames(); BuildDays(); fHtml += "</TBODY></TABLE>\n"; } //______________________________________________________________________________ void HtmlMonthTable::BuildDayNames() { // Build table header with day names. fHtml += "<TR>"; fHtml += HtmlDayName("Sunday").Html(); fHtml += HtmlDayName("Monday").Html(); fHtml += HtmlDayName("Tuesday").Html(); fHtml += HtmlDayName("Wednesday").Html(); fHtml += HtmlDayName("Thursday").Html(); fHtml += HtmlDayName("Friday").Html(); fHtml += HtmlDayName("Saturday").Html(); fHtml += "</TR>\n"; } //______________________________________________________________________________ void HtmlMonthTable::BuildDays() { // Build part of table with day numbers. static Int_t maxdays[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; Int_t maxday = maxdays[fMonth-1]; if ((fMonth == 2) && TTimeStamp::IsLeapYear(fYear)) maxday = 29; Int_t first = TTimeStamp::GetDayOfWeek(1, fMonth, fYear); // fill html table for (int week = 0; week < 6; week++) { fHtml += "<TR>"; for (int weekday = 0; weekday < 7; weekday++) {// Int_t day = week*7 + weekday - first + 1; if ((day > maxday) && !weekday) break; // fHtml += "<TD align=left width=14% "; // hightlight today's cell if ((fToday.GetYear() == fYear) && (fToday.GetMonth() == fMonth) && (fToday.GetDay() == day)) { fHtml += " bgcolor=" + fTodayColor; } else { fHtml += " bgcolor=" + fCellBgcolor; } fHtml += ">"; //skip week days which are not of this month if ((day <= 0) || (day > maxday)) { fHtml += " </TD>"; continue; } fHtml += "<font size=" + fCellFontSize + ">"; fHtml += Form("%d", day); fHtml += "</font></TD>\n"; } fHtml += "</TR>\n"; } } //////////////////////////////////////////////////////////////////////////////// class HtmlCalendar { public: // make them public for shorter code Int_t fYear; // year Int_t fMonth; // month HtmlMonthTable fMonthTable; // HTML table presenting month days TString fHeader; // HTML header TString fFooter; // HTML footer TString fHtml; // output HTML string TString fTitle; // page title void MakeHeader(); void MakeFooter(); public: HtmlCalendar(Int_t year, Int_t month); virtual ~HtmlCalendar() {} void SetDate(Int_t year, Int_t month); TString Html() const { return fHtml; } ClassDef(HtmlCalendar, 0); }; //______________________________________________________________________________ HtmlCalendar::HtmlCalendar(Int_t year, Int_t month) : fMonthTable(year, month) { // Constructor. fYear = year; fMonth = month; MakeHeader(); MakeFooter(); fHtml = fHeader; fHtml += fMonthTable.Html(); fHtml += fFooter; } //______________________________________________________________________________ void HtmlCalendar::SetDate(Int_t year, Int_t month) { // Create calendar for month/year. fYear = year; fMonth = month; fMonthTable.SetDate(year, month); MakeHeader(); MakeFooter(); fHtml = fHeader; fHtml += fMonthTable.Html(); fHtml += fFooter; } //______________________________________________________________________________ void HtmlCalendar::MakeHeader() { // Make HTML header. fTitle = monthNames[fMonth-1] + Form(" %d", fYear); fHeader = "<html><head><title>"; fHeader += fTitle; fHeader += "</title></head><body>\n"; fHeader += "<center><H2>" + fTitle + "</H2></center>"; } //______________________________________________________________________________ void HtmlCalendar::MakeFooter() { // Make HTML footer. fFooter = "<br><p><br><center><strong><font size=2 color=#2222ee>Example of using "; fFooter += "Html widget to display tabular data.</font></strong></center></body></html>"; } //////////////////////// end of HTML calendar ////////////////////////////////// class CalendarWindow { private: TGMainFrame *fMain; // main frame HtmlCalendar *fHtmlText; // calendar HTML table TGHtml *fHtml; // html widget to display HTML calendar TGComboBox *fMonthBox; // month selector TGNumberEntry *fYearEntry; // year selector TGNumberEntry *fFontEntry; // font size selector TGColorSelect *fTableColor; // selector of background color of table TGColorSelect *fCellColor; // selector of background color of table's cells public: CalendarWindow(); virtual ~CalendarWindow(); void UpdateHTML(); ClassDef(CalendarWindow, 0); }; //______________________________________________________________________________ CalendarWindow::~CalendarWindow() { // Destructor. delete fHtmlText; delete fMain; } //______________________________________________________________________________ CalendarWindow::CalendarWindow() { // Main window. fMain = new TGMainFrame(gClient->GetRoot(), 10, 10, kVerticalFrame); fMain->SetCleanup(kDeepCleanup); // delete all subframes on exit // Controls TGHorizontalFrame *controls = new TGHorizontalFrame(fMain); fMain->AddFrame(controls, new TGLayoutHints(kLHintsCenterX, 1, 1, 1, 1)); // generate HTML calendar table TDatime today; fHtmlText = new HtmlCalendar(today.GetYear(), today.GetMonth()); // create HTML widget fHtml = new TGHtml(fMain, 1, 1); fMain->AddFrame(fHtml, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 5, 5, 2, 2)); // parse HTML context of HTML calendar table fHtml->ParseText((char*)fHtmlText->Html().Data()); TGLabel *dateLabel = new TGLabel(controls, "Date:"); controls->AddFrame(dateLabel, new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 5, 2, 2, 2)); // fMonthBox = new TGComboBox(controls); for (int i = 0; i < 12; i++) { fMonthBox->AddEntry(monthNames[i].Data(), i+1); } fMonthBox->Select(today.GetMonth()); controls->AddFrame(fMonthBox, new TGLayoutHints(kLHintsLeft, 5, 5, 2, 2)); fYearEntry = new TGNumberEntry(controls, today.GetYear(), 5, -1, TGNumberFormat::kNESInteger, TGNumberFormat::kNEAPositive, TGNumberFormat::kNELLimitMin, 1995); controls->AddFrame(fYearEntry, new TGLayoutHints(kLHintsLeft, 5, 5, 2, 2)); fMonthBox->Resize(100, fYearEntry->GetHeight()); TGLabel *fontLabel = new TGLabel(controls, "Font Size:"); controls->AddFrame(fontLabel, new TGLayoutHints(kLHintsLeft| kLHintsCenterY, 30, 2, 2, 2)); Int_t fontsize = atoi(fHtmlText->fMonthTable.fCellFontSize.Data()); fFontEntry = new TGNumberEntry(controls, fontsize, 2, -1, TGNumberFormat::kNESInteger, TGNumberFormat::kNEAPositive, TGNumberFormat::kNELLimitMax, 0, 7); controls->AddFrame(fFontEntry, new TGLayoutHints(kLHintsLeft, 5, 5, 2, 2)); TGLabel *tableLabel = new TGLabel(controls, "Table:"); controls->AddFrame(tableLabel, new TGLayoutHints(kLHintsLeft| kLHintsCenterY, 5, 2, 2, 2)); Pixel_t color; gClient->GetColorByName(fHtmlText->fMonthTable.fBgColor.Data(), color); fTableColor = new TGColorSelect(controls, color); controls->AddFrame(fTableColor, new TGLayoutHints(kLHintsLeft| kLHintsCenterY, 5, 2, 2, 2)); TGLabel *cellLabel = new TGLabel(controls, "Cell:"); controls->AddFrame(cellLabel, new TGLayoutHints(kLHintsLeft| kLHintsCenterY, 5, 2, 2, 2)); gClient->GetColorByName(fHtmlText->fMonthTable.fCellBgcolor.Data(), color); fCellColor = new TGColorSelect(controls, color); controls->AddFrame(fCellColor, new TGLayoutHints(kLHintsLeft| kLHintsCenterY, 5, 2, 2, 2)); // connect signals fMonthBox->Connect("Selected(Int_t)", "CalendarWindow", this, "UpdateHTML()"); fYearEntry->GetNumberEntry()->Connect("TextChanged(char*)", "CalendarWindow", this, "UpdateHTML()"); fFontEntry->GetNumberEntry()->Connect("TextChanged(char*)", "CalendarWindow", this, "UpdateHTML()"); fTableColor->Connect("ColorSelected(Pixel_t)", "CalendarWindow", this, "UpdateHTML()"); fCellColor->Connect("ColorSelected(Pixel_t)", "CalendarWindow", this, "UpdateHTML()"); // terminate ROOT session when window is closed fMain->Connect("CloseWindow()", "TApplication", gApplication, "Terminate()"); fMain->DontCallClose(); fMain->MapSubwindows(); fMain->Resize(600, 333); // set minimum size of main window fMain->SetWMSizeHints(controls->GetDefaultWidth(), fMain->GetDefaultHeight(), 1000, 1000, 0 ,0); TString title = "Calendar for "; title += fHtmlText->fTitle; fMain->SetWindowName(title.Data()); fMain->MapRaised(); } //______________________________________________________________________________ void CalendarWindow::UpdateHTML() { // Update HTML table on user's input. Int_t month = fMonthBox->GetSelected(); Int_t year = atoi(fYearEntry->GetNumberEntry()->GetText()); fHtmlText->fMonthTable.fCellFontSize = fFontEntry->GetNumberEntry()->GetText(); Pixel_t pixel = 0; TColor *color = 0; // table background pixel = fTableColor->GetColor(); color = gROOT->GetColor(TColor::GetColor(pixel)); if (color) { fHtmlText->fMonthTable.fBgColor = color->AsHexString(); } // cell background pixel = fCellColor->GetColor(); color = gROOT->GetColor(TColor::GetColor(pixel)); if (color) { fHtmlText->fMonthTable.fCellBgcolor = color->AsHexString(); } // update HTML context fHtmlText->SetDate(year, month); // parse new HTML context of HTML calendar table fHtml->Clear(); fHtml->ParseText((char*)fHtmlText->Html().Data()); fHtml->Layout(); // update window title TString title = "Calendar for "; title += fHtmlText->fTitle; fMain->SetWindowName(title.Data()); } //////////////////////////////////////////////////////////////////////////////// void calendar() { // Main program. new CalendarWindow(); } calendar.C:1 calendar.C:2 calendar.C:3 calendar.C:4 calendar.C:5 calendar.C:6 calendar.C:7 calendar.C:8 calendar.C:9 calendar.C:10 calendar.C:11 calendar.C:12 calendar.C:13 calendar.C:14 calendar.C:15 calendar.C:16 calendar.C:17 calendar.C:18 calendar.C:19 calendar.C:20 calendar.C:21 calendar.C:22 calendar.C:23 calendar.C:24 calendar.C:25 calendar.C:26 calendar.C:27 calendar.C:28 calendar.C:29 calendar.C:30 calendar.C:31 calendar.C:32 calendar.C:33 calendar.C:34 calendar.C:35 calendar.C:36 calendar.C:37 calendar.C:38 calendar.C:39 calendar.C:40 calendar.C:41 calendar.C:42 calendar.C:43 calendar.C:44 calendar.C:45 calendar.C:46 calendar.C:47 calendar.C:48 calendar.C:49 calendar.C:50 calendar.C:51 calendar.C:52 calendar.C:53 calendar.C:54 calendar.C:55 calendar.C:56 calendar.C:57 calendar.C:58 calendar.C:59 calendar.C:60 calendar.C:61 calendar.C:62 calendar.C:63 calendar.C:64 calendar.C:65 calendar.C:66 calendar.C:67 calendar.C:68 calendar.C:69 calendar.C:70 calendar.C:71 calendar.C:72 calendar.C:73 calendar.C:74 calendar.C:75 calendar.C:76 calendar.C:77 calendar.C:78 calendar.C:79 calendar.C:80 calendar.C:81 calendar.C:82 calendar.C:83 calendar.C:84 calendar.C:85 calendar.C:86 calendar.C:87 calendar.C:88 calendar.C:89 calendar.C:90 calendar.C:91 calendar.C:92 calendar.C:93 calendar.C:94 calendar.C:95 calendar.C:96 calendar.C:97 calendar.C:98 calendar.C:99 calendar.C:100 calendar.C:101 calendar.C:102 calendar.C:103 calendar.C:104 calendar.C:105 calendar.C:106 calendar.C:107 calendar.C:108 calendar.C:109 calendar.C:110 calendar.C:111 calendar.C:112 calendar.C:113 calendar.C:114 calendar.C:115 calendar.C:116 calendar.C:117 calendar.C:118 calendar.C:119 calendar.C:120 calendar.C:121 calendar.C:122 calendar.C:123 calendar.C:124 calendar.C:125 calendar.C:126 calendar.C:127 calendar.C:128 calendar.C:129 calendar.C:130 calendar.C:131 calendar.C:132 calendar.C:133 calendar.C:134 calendar.C:135 calendar.C:136 calendar.C:137 calendar.C:138 calendar.C:139 calendar.C:140 calendar.C:141 calendar.C:142 calendar.C:143 calendar.C:144 calendar.C:145 calendar.C:146 calendar.C:147 calendar.C:148 calendar.C:149 calendar.C:150 calendar.C:151 calendar.C:152 calendar.C:153 calendar.C:154 calendar.C:155 calendar.C:156 calendar.C:157 calendar.C:158 calendar.C:159 calendar.C:160 calendar.C:161 calendar.C:162 calendar.C:163 calendar.C:164 calendar.C:165 calendar.C:166 calendar.C:167 calendar.C:168 calendar.C:169 calendar.C:170 calendar.C:171 calendar.C:172 calendar.C:173 calendar.C:174 calendar.C:175 calendar.C:176 calendar.C:177 calendar.C:178 calendar.C:179 calendar.C:180 calendar.C:181 calendar.C:182 calendar.C:183 calendar.C:184 calendar.C:185 calendar.C:186 calendar.C:187 calendar.C:188 calendar.C:189 calendar.C:190 calendar.C:191 calendar.C:192 calendar.C:193 calendar.C:194 calendar.C:195 calendar.C:196 calendar.C:197 calendar.C:198 calendar.C:199 calendar.C:200 calendar.C:201 calendar.C:202 calendar.C:203 calendar.C:204 calendar.C:205 calendar.C:206 calendar.C:207 calendar.C:208 calendar.C:209 calendar.C:210 calendar.C:211 calendar.C:212 calendar.C:213 calendar.C:214 calendar.C:215 calendar.C:216 calendar.C:217 calendar.C:218 calendar.C:219 calendar.C:220 calendar.C:221 calendar.C:222 calendar.C:223 calendar.C:224 calendar.C:225 calendar.C:226 calendar.C:227 calendar.C:228 calendar.C:229 calendar.C:230 calendar.C:231 calendar.C:232 calendar.C:233 calendar.C:234 calendar.C:235 calendar.C:236 calendar.C:237 calendar.C:238 calendar.C:239 calendar.C:240 calendar.C:241 calendar.C:242 calendar.C:243 calendar.C:244 calendar.C:245 calendar.C:246 calendar.C:247 calendar.C:248 calendar.C:249 calendar.C:250 calendar.C:251 calendar.C:252 calendar.C:253 calendar.C:254 calendar.C:255 calendar.C:256 calendar.C:257 calendar.C:258 calendar.C:259 calendar.C:260 calendar.C:261 calendar.C:262 calendar.C:263 calendar.C:264 calendar.C:265 calendar.C:266 calendar.C:267 calendar.C:268 calendar.C:269 calendar.C:270 calendar.C:271 calendar.C:272 calendar.C:273 calendar.C:274 calendar.C:275 calendar.C:276 calendar.C:277 calendar.C:278 calendar.C:279 calendar.C:280 calendar.C:281 calendar.C:282 calendar.C:283 calendar.C:284 calendar.C:285 calendar.C:286 calendar.C:287 calendar.C:288 calendar.C:289 calendar.C:290 calendar.C:291 calendar.C:292 calendar.C:293 calendar.C:294 calendar.C:295 calendar.C:296 calendar.C:297 calendar.C:298 calendar.C:299 calendar.C:300 calendar.C:301 calendar.C:302 calendar.C:303 calendar.C:304 calendar.C:305 calendar.C:306 calendar.C:307 calendar.C:308 calendar.C:309 calendar.C:310 calendar.C:311 calendar.C:312 calendar.C:313 calendar.C:314 calendar.C:315 calendar.C:316 calendar.C:317 calendar.C:318 calendar.C:319 calendar.C:320 calendar.C:321 calendar.C:322 calendar.C:323 calendar.C:324 calendar.C:325 calendar.C:326 calendar.C:327 calendar.C:328 calendar.C:329 calendar.C:330 calendar.C:331 calendar.C:332 calendar.C:333 calendar.C:334 calendar.C:335 calendar.C:336 calendar.C:337 calendar.C:338 calendar.C:339 calendar.C:340 calendar.C:341 calendar.C:342 calendar.C:343 calendar.C:344 calendar.C:345 calendar.C:346 calendar.C:347 calendar.C:348 calendar.C:349 calendar.C:350 calendar.C:351 calendar.C:352 calendar.C:353 calendar.C:354 calendar.C:355 calendar.C:356 calendar.C:357 calendar.C:358 calendar.C:359 calendar.C:360 calendar.C:361 calendar.C:362 calendar.C:363 calendar.C:364 calendar.C:365 calendar.C:366 calendar.C:367 calendar.C:368 calendar.C:369 calendar.C:370 calendar.C:371 calendar.C:372 calendar.C:373 calendar.C:374 calendar.C:375 calendar.C:376 calendar.C:377 calendar.C:378 calendar.C:379 calendar.C:380 calendar.C:381 calendar.C:382 calendar.C:383 calendar.C:384 calendar.C:385 calendar.C:386 calendar.C:387 calendar.C:388 calendar.C:389 calendar.C:390 calendar.C:391 calendar.C:392 calendar.C:393 calendar.C:394 calendar.C:395 calendar.C:396 calendar.C:397 calendar.C:398 calendar.C:399 calendar.C:400 calendar.C:401 calendar.C:402 calendar.C:403 calendar.C:404 calendar.C:405 calendar.C:406 calendar.C:407 calendar.C:408 calendar.C:409 calendar.C:410 calendar.C:411 calendar.C:412 calendar.C:413 calendar.C:414 calendar.C:415 calendar.C:416 calendar.C:417 calendar.C:418 calendar.C:419 calendar.C:420 calendar.C:421 calendar.C:422 calendar.C:423 calendar.C:424 calendar.C:425 calendar.C:426 calendar.C:427 calendar.C:428 calendar.C:429 calendar.C:430 calendar.C:431 calendar.C:432 calendar.C:433 calendar.C:434 calendar.C:435 calendar.C:436 calendar.C:437 calendar.C:438 calendar.C:439 calendar.C:440 calendar.C:441 calendar.C:442 calendar.C:443 calendar.C:444 calendar.C:445 calendar.C:446 calendar.C:447 calendar.C:448 calendar.C:449 calendar.C:450 |
|