| 0,0 → 1,809 |
| #include "../include/root_app.h" |
| #include "../include/workstation.h" |
| |
| #include <stdio.h> |
| #include <stdlib.h> |
| #include <unistd.h> |
| |
| // Main window constructor (+layout) --------------------------------- |
| |
| TGAppMainFrame::TGAppMainFrame(const TGWindow *p, int w, int h) |
| { |
| // Define main window and menubar |
| fMain = new TGMainFrame(p, w, h, kVerticalFrame); |
| |
| AppLayout(); |
| fMain->SetWindowName(WINDOW_NAME); |
| fMain->MapSubwindows(); |
| fMain->MapWindow(); |
| fMain->Layout(); |
| } |
| |
| TGAppMainFrame::~TGAppMainFrame() |
| { |
| fMain->Cleanup(); |
| delete fMain; |
| } |
| |
| // Closing main window and checking about information ---------------- |
| |
| void TGAppMainFrame::CloseWindow() |
| { |
| fMain->Cleanup(); |
| delete fMain; |
| gApplication->Terminate(0); |
| } |
| |
| // ------------------------------------------------------------------- |
| |
| // ------------------------------------------------------------------- |
| |
| // Separate functions ----------------------------------------- |
| void GetTime(int intime, char *outtime) |
| { |
| time_t rawtime; |
| struct tm * timeinfo; |
| if(intime < 0) |
| time(&rawtime); |
| else |
| rawtime = (time_t)intime; |
| timeinfo = localtime(&rawtime); |
| sprintf(outtime, "%s", asctime(timeinfo)); |
| int len = strlen(outtime); |
| if(len) outtime[len-1] = 0; |
| } |
| |
| // ---------------------------------------------------------- |
| |
| // Temperature sensor functions ----------------------------- |
| const char* dbname = "mysql://f9lab08.ijs.si/f9phdet"; |
| const char* tblname = "fprtd122"; |
| const char* username = "f9daq"; |
| const char* userpass = "f9lab"; |
| |
| // Get the temperature from MYSQL database |
| double GetTemperature(int ch, const char *s) |
| { |
| int bin=5+7*4-ch*4; |
| char hex[16]; |
| strncpy(hex, (const char *) &s[bin], 4); |
| hex[4]=0; |
| int ix; |
| sscanf (hex,"%x",&ix); |
| //printf("0x%s\t",hex); |
| return (ix/65535.)*1050.-200.; |
| } |
| |
| // Transform local time to timestamp |
| int GetTimeStamp(int *intime) |
| { |
| time_t rawtime; |
| struct tm * timeinfo; |
| time(&rawtime); |
| timeinfo = localtime(&rawtime); |
| |
| if(DBGSIG) |
| printf("%d.%d.%d, %d:%d:%d\n", intime[0], intime[1], intime[2], intime[3], intime[4], intime[5]); |
| |
| timeinfo->tm_mday = intime[0]; |
| timeinfo->tm_mon = intime[1] - 1; |
| timeinfo->tm_year = intime[2] - 1900; |
| timeinfo->tm_hour = intime[3]; |
| timeinfo->tm_min = intime[4]; |
| timeinfo->tm_sec = intime[5]; |
| |
| return (int)mktime(timeinfo); |
| } |
| |
| // Get data from MYSQL database |
| void TGAppMainFrame::fieldpoint(int *timerange, int selch) |
| { |
| char humantime[256]; |
| |
| // Display selected timestamps |
| GetTime(timerange[0], humantime); |
| printf("Minimum time set to: %s (%d)\n", humantime, timerange[0]); |
| if(timerange[1] != -1) |
| { |
| GetTime(timerange[1], humantime); |
| printf("Maximum time set to: %s (%d)\n", humantime, timerange[1]); |
| } |
| printf("Selected fieldpoint channel: %d\n", selch); |
| printf("\n"); |
| |
| // Database settings |
| TSQLServer *db = TSQLServer::Connect(dbname, username, userpass); |
| printf("Server info: %s\n", db->ServerInfo()); |
| TSQLRow *row; |
| TSQLResult *res; |
| |
| if(DBGSIG) |
| { |
| // list databases available on server |
| printf("\nList all databases on server %s\n", db->GetHost()); |
| res = db->GetDataBases(); |
| while ((row = res->Next())) { |
| printf("%s\n", row->GetField(0)); |
| delete row; |
| } |
| delete res; |
| |
| // list tables in database "test" (the permission tables) |
| printf("\nList all tables in database \"f9phdet\" on server %s\n", db->GetHost()); |
| res = db->GetTables("f9phdet"); |
| while ((row = res->Next())) { |
| printf("%s\n", row->GetField(0)); |
| delete row; |
| } |
| delete res; |
| |
| // list columns in table "runcatalog" in database "mysql" |
| printf("\nList all columns in table \"f9phdet\" in database \"f9rtd122\" on server %s\n", db->GetHost()); |
| res = db->GetColumns("f9phdet", "fprtd122"); |
| while ((row = res->Next())) { |
| printf("%s\n", row->GetField(0)); |
| delete row; |
| } |
| delete res; |
| } |
| |
| // query database and print results |
| char sql[1000] = "SELECT status,data,timestamp FROM fprtd122 WHERE status='A272727272727272748' AND substring(data,1,4)='A00C' "; |
| if(timerange[1] == -1) |
| sprintf(sql,"%s AND timestamp>='%d'", sql, timerange[0]); |
| else |
| sprintf(sql,"%s AND timestamp>='%d' AND timestamp<='%d'", sql, timerange[0], timerange[1]); |
| if(DBGSIG) |
| printf("%s\n",sql); |
| |
| res = db->Query(sql); |
| |
| int nrows = res->GetRowCount(); |
| printf("\nGot %d rows in result\n", nrows); |
| |
| // Printing and plotting |
| char timeval[256]; |
| TGraph *gr; |
| double *x, *y; |
| double firsttime, lasttime; |
| |
| gr = new TGraph(nrows); |
| gr->SetLineColor(kRed); |
| gr->SetLineWidth(1); |
| gr->SetMarkerColor(kBlack); |
| gr->SetMarkerSize(0.8); |
| gr->SetMarkerStyle(20); |
| gr->SetTitle("Temperature sensor;Time;Temperature (deg.)"); |
| |
| FILE *fp; |
| fp = fopen("./fieldpoint/dataout_fieldpoint.txt", "w"); |
| |
| if(DBGSIG) |
| printf("Time\tTemperature\n"); |
| for (int i = 0; i < nrows; i++) { |
| row = res->Next(); |
| |
| GetTime((int)atof(row->GetField(2))-TIMEOFF, timeval); |
| x = new double; |
| y = new double; |
| |
| *x = atof(row->GetField(2))-TIMEOFF; |
| *y = GetTemperature(selch,row->GetField(1)); |
| gr->SetPoint(i,*x,*y); |
| |
| if(i == 0) firsttime = *x; |
| else if(i == nrows-1) lasttime = *x; |
| |
| if(datSettings->GetSelected() == 0) |
| { |
| fprintf(fp, "%s\t%d\t%f\n",timeval,(int)*x,*y); |
| if(DBGSIG) |
| printf("%s\t%d\t%f\n",timeval,(int)*x,*y); |
| } |
| else if(datSettings->GetSelected() == 1) |
| { |
| fprintf(fp, "%s\t%f\n",timeval,*y); |
| if(DBGSIG) |
| printf("%s\t%f\n",timeval,*y); |
| } |
| else if(datSettings->GetSelected() == 2) |
| { |
| fprintf(fp, "%d\t%f\n",(int)*x,*y); |
| if(DBGSIG) |
| printf("%d\t%f\n",(int)*x,*y); |
| } |
| |
| delete x; |
| delete y; |
| |
| delete row; |
| } |
| |
| fclose(fp); |
| |
| delete res; |
| delete db; |
| |
| TCanvas *gCanvas = displayCanvas->GetCanvas(); |
| gCanvas->SetGrid(); |
| gr->GetXaxis()->SetTimeDisplay(1); |
| gr->GetXaxis()->SetTimeFormat("%H:%M, %d.%m."); |
| gr->GetXaxis()->SetTimeOffset(0); |
| gr->GetXaxis()->SetLabelSize(0.027); |
| gr->GetXaxis()->SetLabelOffset(0.015); |
| gr->GetXaxis()->SetTitleSize(0.038); |
| gr->GetXaxis()->SetTitleOffset(1.2); |
| gr->GetYaxis()->SetLabelSize(0.027); |
| gr->GetYaxis()->SetTitleSize(0.038); |
| gr->GetXaxis()->SetNdivisions(-507); |
| gr->GetXaxis()->SetRange(firsttime,lasttime); |
| gr->GetXaxis()->SetRangeUser(firsttime,lasttime); |
| gr->Draw("APL"); |
| |
| gCanvas->Modified(); |
| gCanvas->Update(); |
| } |
| |
| // Update the temperature plot |
| void TGAppMainFrame::UpdateTempPlot() |
| { |
| int stime[6]; |
| int etime[6]; |
| |
| int timestamp[2]; |
| |
| time_t rtime; |
| int curyear; |
| time(&rtime); |
| curyear = (int)(localtime(&rtime))->tm_year+1900; |
| |
| int leapy = 0; |
| |
| // Getting the start time |
| stime[0] = (int)(tempDay[0]->GetSelected())+1; |
| stime[2] = curyear - (int)(tempYear[0]->GetSelected()); |
| if(DBGSIG) |
| printf("%d, %d, %d\n", stime[2], curyear, (int)(tempYear[0]->GetSelected())); |
| stime[3] = (int)(tempHour[0]->GetSelected()); |
| stime[4] = (int)(tempMinute[0]->GetSelected()); |
| stime[5] = (int)(tempSecond[0]->GetSelected()); |
| |
| switch( tempMonth[0]->GetSelected() ) |
| { |
| case 0: |
| stime[1] = (int)(tempMonth[0]->GetSelected())+1; |
| break; |
| case 1: |
| if( stime[2]%4 == 0) |
| leapy = 1; |
| |
| if( (leapy == 1) && (stime[0] > 29) ) |
| { |
| stime[0] = 29; |
| tempDay[0]->Select(28); |
| } |
| else if( (leapy == 0) && (stime[0] > 28) ) |
| { |
| stime[0] = 28; |
| tempDay[0]->Select(27); |
| } |
| stime[1] = (int)(tempMonth[0]->GetSelected())+1; |
| break; |
| case 2: |
| stime[1] = (int)(tempMonth[0]->GetSelected())+1; |
| break; |
| case 3: |
| if(stime[0] > 30) |
| { |
| stime[0] = 30; |
| tempDay[0]->Select(29); |
| } |
| stime[1] = (int)(tempMonth[0]->GetSelected())+1; |
| break; |
| case 4: |
| stime[1] = (int)(tempMonth[0]->GetSelected())+1; |
| break; |
| case 5: |
| if(stime[0] > 30) |
| { |
| stime[0] = 30; |
| tempDay[0]->Select(29); |
| } |
| stime[1] = (int)(tempMonth[0]->GetSelected())+1; |
| break; |
| case 6: |
| stime[1] = (int)(tempMonth[0]->GetSelected())+1; |
| break; |
| case 7: |
| stime[1] = (int)(tempMonth[0]->GetSelected())+1; |
| break; |
| case 8: |
| if(stime[0] > 30) |
| { |
| stime[0] = 30; |
| tempDay[0]->Select(29); |
| } |
| stime[1] = (int)(tempMonth[0]->GetSelected())+1; |
| break; |
| case 9: |
| stime[1] = (int)(tempMonth[0]->GetSelected())+1; |
| break; |
| case 10: |
| if(stime[0] > 30) |
| { |
| stime[0] = 30; |
| tempDay[0]->Select(29); |
| } |
| stime[1] = (int)(tempMonth[0]->GetSelected())+1; |
| break; |
| case 11: |
| stime[1] = (int)(tempMonth[0]->GetSelected())+1; |
| break; |
| default: |
| break; |
| } |
| |
| timestamp[0] = GetTimeStamp(stime); |
| if(DBGSIG) |
| printf("Start time: %d\n", timestamp[0]); |
| |
| // Getting the end time |
| etime[0] = (int)(tempDay[1]->GetSelected())+1; |
| etime[2] = curyear - (int)(tempYear[1]->GetSelected()); |
| etime[3] = (int)(tempHour[1]->GetSelected()); |
| etime[4] = (int)(tempMinute[1]->GetSelected()); |
| etime[5] = (int)(tempSecond[1]->GetSelected()); |
| |
| switch( tempMonth[1]->GetSelected() ) |
| { |
| case 0: |
| etime[1] = (int)(tempMonth[1]->GetSelected())+1; |
| break; |
| case 1: |
| if( etime[2]%4 == 0) |
| leapy = 1; |
| |
| if( (leapy == 1) && (etime[0] > 29) ) |
| { |
| etime[0] = 29; |
| tempDay[1]->Select(28); |
| } |
| else if( (leapy == 0) && (etime[0] > 28) ) |
| { |
| etime[0] = 28; |
| tempDay[1]->Select(27); |
| } |
| etime[1] = (int)(tempMonth[1]->GetSelected())+1; |
| break; |
| case 2: |
| etime[1] = (int)(tempMonth[1]->GetSelected())+1; |
| break; |
| case 3: |
| if(etime[0] > 30) |
| { |
| etime[0] = 30; |
| tempDay[1]->Select(29); |
| } |
| etime[1] = (int)(tempMonth[1]->GetSelected())+1; |
| break; |
| case 4: |
| etime[1] = (int)(tempMonth[1]->GetSelected())+1; |
| break; |
| case 5: |
| if(etime[0] > 30) |
| { |
| etime[0] = 30; |
| tempDay[1]->Select(29); |
| } |
| etime[1] = (int)(tempMonth[1]->GetSelected())+1; |
| break; |
| case 6: |
| etime[1] = (int)(tempMonth[1]->GetSelected())+1; |
| break; |
| case 7: |
| etime[1] = (int)(tempMonth[1]->GetSelected())+1; |
| break; |
| case 8: |
| if(etime[0] > 30) |
| { |
| etime[0] = 30; |
| tempDay[1]->Select(29); |
| } |
| etime[1] = (int)(tempMonth[1]->GetSelected())+1; |
| break; |
| case 9: |
| etime[1] = (int)(tempMonth[1]->GetSelected())+1; |
| break; |
| case 10: |
| if(etime[0] > 30) |
| { |
| etime[0] = 30; |
| tempDay[1]->Select(29); |
| } |
| etime[1] = (int)(tempMonth[1]->GetSelected())+1; |
| break; |
| case 11: |
| etime[1] = (int)(tempMonth[1]->GetSelected())+1; |
| break; |
| default: |
| break; |
| } |
| |
| if( tempEndOn->IsDown() ) |
| timestamp[1] = -1; |
| else |
| timestamp[1] = GetTimeStamp(etime); |
| if(DBGSIG) |
| printf("End time: %d\n", timestamp[1]); |
| |
| fieldpoint(timestamp, tempCh->GetSelected()); |
| } |
| |
| // Export the temperature plot to pdf |
| void TGAppMainFrame::ExportTempPlot() |
| { |
| TCanvas *gCanvas = displayCanvas->GetCanvas(); |
| gCanvas->Modified(); |
| gCanvas->Update(); |
| gCanvas->SaveAs("./fieldpoint/plotout_fieldpoint.pdf"); |
| } |
| |
| // Toggle the endtime settings for temperature sensor |
| void TGAppMainFrame::TempEndToggle() |
| { |
| if( tempEndOn->IsDown() ) |
| { |
| tempDay[1]->SetEnabled(kFALSE); |
| tempMonth[1]->SetEnabled(kFALSE); |
| tempYear[1]->SetEnabled(kFALSE); |
| tempHour[1]->SetEnabled(kFALSE); |
| tempMinute[1]->SetEnabled(kFALSE); |
| tempSecond[1]->SetEnabled(kFALSE); |
| } |
| else |
| { |
| tempDay[1]->SetEnabled(kTRUE); |
| tempMonth[1]->SetEnabled(kTRUE); |
| tempYear[1]->SetEnabled(kTRUE); |
| tempHour[1]->SetEnabled(kTRUE); |
| tempMinute[1]->SetEnabled(kTRUE); |
| tempSecond[1]->SetEnabled(kTRUE); |
| } |
| } |
| |
| // -------------------------------------------------------------- |
| |
| // Setting the application layout ------------------------------------ |
| |
| void TGAppMainFrame::AppLayout() |
| { |
| // Fieldpoint window ------------------------ |
| |
| TGLayoutHints *f0 = new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2); |
| TGLayoutHints *f0centerx = new TGLayoutHints(kLHintsCenterX,2,2,2,2); |
| TGLayoutHints *f0centery = new TGLayoutHints(kLHintsLeft | kLHintsCenterY,2,2,2,2); |
| TGLayoutHints *f1 = new TGLayoutHints(kLHintsExpandX | kLHintsExpandY,2,2,2,2); |
| TGLayoutHints *f2 = new TGLayoutHints(kLHintsExpandX,2,2,2,2); |
| |
| TGHorizontalFrame *fH1, *fH2; |
| TGGroupFrame *fG1; |
| TGLabel *lab; |
| |
| time_t rtime; |
| int yearrange[2]; |
| int subwin[2]; |
| char ctemp[256]; |
| |
| subwin[0] = winWidth-10; |
| subwin[1] = 6.6*winHeight/12; |
| |
| // Display canvas for temperature sensor |
| displayCanvas = new TRootEmbeddedCanvas("displayCanvas",fMain,subwin[0],subwin[1]); |
| fMain->AddFrame(displayCanvas, f0centerx); |
| TCanvas *gCanvas = displayCanvas->GetCanvas(); |
| gCanvas->SetGridx(); |
| gCanvas->SetGridy(); |
| |
| fG1 = new TGGroupFrame(fMain, "Temperature sensor settings"); |
| // Channel selector |
| fH1 = new TGHorizontalFrame(fG1, subwin[0], 30); |
| lab = new TGLabel(fH1, "Fieldpoint channel:"); |
| fH1->AddFrame(lab, f0centery); |
| tempCh = new TGComboBox(fH1, 200); |
| tempCh->AddEntry("0", 0); |
| tempCh->AddEntry("1", 1); |
| tempCh->AddEntry("2", 2); |
| tempCh->AddEntry("3", 3); |
| tempCh->AddEntry("4", 4); |
| tempCh->AddEntry("5", 5); |
| tempCh->AddEntry("6", 6); |
| tempCh->AddEntry("7", 7); |
| tempCh->Resize(50,22); |
| tempCh->Select(1); |
| fH1->AddFrame(tempCh, f0centery); |
| fG1->AddFrame(fH1, f2); |
| |
| // Start and stop time ------------------------ |
| time(&rtime); |
| |
| lab = new TGLabel(fG1, "Start time:"); |
| fG1->AddFrame(lab, f0); |
| fH1 = new TGHorizontalFrame(fG1, subwin[0], 30); |
| // Start day |
| lab = new TGLabel(fH1, "\tDay: "); |
| fH1->AddFrame(lab, f0centery); |
| tempDay[0] = new TGComboBox(fH1, 200); |
| for(int i = 0; i < 31; i++) |
| { |
| sprintf(ctemp, "%d", i+1); |
| tempDay[0]->AddEntry(ctemp, i); |
| } |
| tempDay[0]->Resize(50,22); |
| tempDay[0]->Select((int)(localtime(&rtime))->tm_mday-1); |
| fH1->AddFrame(tempDay[0], f0centery); |
| |
| // Start month |
| lab = new TGLabel(fH1, " Month: "); |
| fH1->AddFrame(lab, f0centery); |
| tempMonth[0] = new TGComboBox(fH1, 200); |
| tempMonth[0]->AddEntry("January", 0); |
| tempMonth[0]->AddEntry("February", 1); |
| tempMonth[0]->AddEntry("March", 2); |
| tempMonth[0]->AddEntry("April", 3); |
| tempMonth[0]->AddEntry("May", 4); |
| tempMonth[0]->AddEntry("June", 5); |
| tempMonth[0]->AddEntry("July", 6); |
| tempMonth[0]->AddEntry("August", 7); |
| tempMonth[0]->AddEntry("September", 8); |
| tempMonth[0]->AddEntry("October", 9); |
| tempMonth[0]->AddEntry("November", 10); |
| tempMonth[0]->AddEntry("December", 11); |
| tempMonth[0]->Resize(80,22); |
| tempMonth[0]->Select((int)(localtime(&rtime))->tm_mon); |
| fH1->AddFrame(tempMonth[0], f0centery); |
| |
| // Start year |
| yearrange[0] = 2010; |
| yearrange[1] = (int)(localtime(&rtime))->tm_year+1900; |
| |
| lab = new TGLabel(fH1, " Year: "); |
| fH1->AddFrame(lab, f0centery); |
| tempYear[0] = new TGComboBox(fH1, 200); |
| for(int i = 0; i < (yearrange[1]-yearrange[0])+1; i++) |
| { |
| sprintf(ctemp, "%d", yearrange[1]-i); |
| tempYear[0]->AddEntry(ctemp, i); |
| } |
| tempYear[0]->Resize(60,22); |
| tempYear[0]->Select(0); |
| fH1->AddFrame(tempYear[0], f0centery); |
| |
| // Start hour |
| lab = new TGLabel(fH1, " Hour: "); |
| fH1->AddFrame(lab, f0centery); |
| tempHour[0] = new TGComboBox(fH1, 200); |
| for(int i = 0; i < 24; i++) |
| { |
| if(i < 10) |
| sprintf(ctemp, "0%d", i); |
| else |
| sprintf(ctemp, "%d", i); |
| tempHour[0]->AddEntry(ctemp, i); |
| } |
| tempHour[0]->Resize(50,22); |
| tempHour[0]->Select(7); |
| fH1->AddFrame(tempHour[0], f0centery); |
| |
| // Start minute |
| lab = new TGLabel(fH1, " Minute: "); |
| fH1->AddFrame(lab, f0centery); |
| tempMinute[0] = new TGComboBox(fH1, 200); |
| for(int i = 0; i < 60; i++) |
| { |
| if(i < 10) |
| sprintf(ctemp, "0%d", i); |
| else |
| sprintf(ctemp, "%d", i); |
| tempMinute[0]->AddEntry(ctemp, i); |
| } |
| tempMinute[0]->Resize(50,22); |
| tempMinute[0]->Select(0); |
| fH1->AddFrame(tempMinute[0], f0centery); |
| |
| // Start second |
| lab = new TGLabel(fH1, " Second: "); |
| fH1->AddFrame(lab, f0centery); |
| tempSecond[0] = new TGComboBox(fH1, 200); |
| for(int i = 0; i < 60; i++) |
| { |
| if(i < 10) |
| sprintf(ctemp, "0%d", i); |
| else |
| sprintf(ctemp, "%d", i); |
| tempSecond[0]->AddEntry(ctemp, i); |
| } |
| tempSecond[0]->Resize(50,22); |
| tempSecond[0]->Select(0); |
| fH1->AddFrame(tempSecond[0], f0centery); |
| |
| fG1->AddFrame(fH1, f2); |
| |
| // Use the end time or not |
| tempEndOn = new TGCheckButton(fG1, "Draw to last time point (ON/OFF)"); |
| tempEndOn->Resize(100,22); |
| tempEndOn->SetState(kButtonUp); |
| fG1->AddFrame(tempEndOn, f0); |
| |
| lab = new TGLabel(fG1, "End time:"); |
| fG1->AddFrame(lab, f0); |
| fH1 = new TGHorizontalFrame(fG1, subwin[0], 30); |
| // End day |
| lab = new TGLabel(fH1, "\tDay: "); |
| fH1->AddFrame(lab, f0centery); |
| tempDay[1] = new TGComboBox(fH1, 200); |
| for(int i = 0; i < 31; i++) |
| { |
| sprintf(ctemp, "%d", i+1); |
| tempDay[1]->AddEntry(ctemp, i); |
| } |
| tempDay[1]->Resize(50,22); |
| tempDay[1]->Select((int)(localtime(&rtime))->tm_mday-1); |
| fH1->AddFrame(tempDay[1], f0centery); |
| |
| // End month |
| lab = new TGLabel(fH1, " Month: "); |
| fH1->AddFrame(lab, f0centery); |
| tempMonth[1] = new TGComboBox(fH1, 200); |
| tempMonth[1]->AddEntry("January", 0); |
| tempMonth[1]->AddEntry("February", 1); |
| tempMonth[1]->AddEntry("March", 2); |
| tempMonth[1]->AddEntry("April", 3); |
| tempMonth[1]->AddEntry("May", 4); |
| tempMonth[1]->AddEntry("June", 5); |
| tempMonth[1]->AddEntry("July", 6); |
| tempMonth[1]->AddEntry("August", 7); |
| tempMonth[1]->AddEntry("September", 8); |
| tempMonth[1]->AddEntry("October", 9); |
| tempMonth[1]->AddEntry("November", 10); |
| tempMonth[1]->AddEntry("December", 11); |
| tempMonth[1]->Resize(80,22); |
| tempMonth[1]->Select((int)(localtime(&rtime))->tm_mon); |
| fH1->AddFrame(tempMonth[1], f0centery); |
| |
| // End year |
| time(&rtime); |
| yearrange[0] = 2010; |
| yearrange[1] = (int)(localtime(&rtime))->tm_year+1900; |
| |
| lab = new TGLabel(fH1, " Year: "); |
| fH1->AddFrame(lab, f0centery); |
| tempYear[1] = new TGComboBox(fH1, 200); |
| for(int i = 0; i < (yearrange[1]-yearrange[0])+1; i++) |
| { |
| sprintf(ctemp, "%d", yearrange[1]-i); |
| tempYear[1]->AddEntry(ctemp, i); |
| } |
| tempYear[1]->Resize(60,22); |
| tempYear[1]->Select(0); |
| fH1->AddFrame(tempYear[1], f0centery); |
| |
| // End hour |
| lab = new TGLabel(fH1, " Hour: "); |
| fH1->AddFrame(lab, f0centery); |
| tempHour[1] = new TGComboBox(fH1, 200); |
| for(int i = 0; i < 24; i++) |
| { |
| if(i < 10) |
| sprintf(ctemp, "0%d", i); |
| else |
| sprintf(ctemp, "%d", i); |
| tempHour[1]->AddEntry(ctemp, i); |
| } |
| tempHour[1]->Resize(50,22); |
| tempHour[1]->Select(18); |
| fH1->AddFrame(tempHour[1], f0centery); |
| |
| // End minute |
| lab = new TGLabel(fH1, " Minute: "); |
| fH1->AddFrame(lab, f0centery); |
| tempMinute[1] = new TGComboBox(fH1, 200); |
| for(int i = 0; i < 60; i++) |
| { |
| if(i < 10) |
| sprintf(ctemp, "0%d", i); |
| else |
| sprintf(ctemp, "%d", i); |
| tempMinute[1]->AddEntry(ctemp, i); |
| } |
| tempMinute[1]->Resize(50,22); |
| tempMinute[1]->Select(0); |
| fH1->AddFrame(tempMinute[1], f0centery); |
| |
| // End second |
| lab = new TGLabel(fH1, " Second: "); |
| fH1->AddFrame(lab, f0centery); |
| tempSecond[1] = new TGComboBox(fH1, 200); |
| for(int i = 0; i < 60; i++) |
| { |
| if(i < 10) |
| sprintf(ctemp, "0%d", i); |
| else |
| sprintf(ctemp, "%d", i); |
| tempSecond[1]->AddEntry(ctemp, i); |
| } |
| tempSecond[1]->Resize(50,22); |
| tempSecond[1]->Select(0); |
| fH1->AddFrame(tempSecond[1], f0centery); |
| |
| fG1->AddFrame(fH1, f2); |
| // Start and stop time ------------------------ |
| |
| // Dataout settings |
| fH1 = new TGHorizontalFrame(fG1, subwin[0], 30); |
| lab = new TGLabel(fH1, "Output data settings: "); |
| fH1->AddFrame(lab, f0centery); |
| datSettings = new TGComboBox(fH1, 200); |
| datSettings->AddEntry("Export local time and UNIX timestamp", 0); |
| datSettings->AddEntry("Export only local time", 1); |
| datSettings->AddEntry("Export only UNIX timestamp", 2); |
| datSettings->Resize(300,22); |
| datSettings->Select(0); |
| fH1->AddFrame(datSettings, f0centery); |
| |
| fG1->AddFrame(fH1, f2); |
| |
| // Control buttons |
| fH2 = new TGHorizontalFrame(fG1, subwin[0], 30); |
| fH1 = new TGHorizontalFrame(fH2, subwin[0], 30); |
| updateTemp = new TGTextButton(fH1, "Update"); |
| updateTemp->SetTextJustify(36); |
| updateTemp->SetWrapLength(-1); |
| updateTemp->Resize(80,22); |
| fH1->AddFrame(updateTemp, f0); |
| |
| exportTemp = new TGTextButton(fH1, "Export"); |
| exportTemp->SetTextJustify(36); |
| exportTemp->SetWrapLength(-1); |
| exportTemp->Resize(80,22); |
| fH1->AddFrame(exportTemp, f0); |
| |
| closeTemp = new TGTextButton(fH1, "Close"); |
| closeTemp->SetTextJustify(36); |
| closeTemp->SetWrapLength(-1); |
| closeTemp->Resize(80,22); |
| fH1->AddFrame(closeTemp, f0); |
| fH2->AddFrame(fH1, f0centerx); |
| |
| fG1->AddFrame(fH2, f2); |
| |
| fMain->AddFrame(fG1, f1); |
| |
| // Action connections |
| updateTemp->Connect("Clicked()", "TGAppMainFrame", this, "UpdateTempPlot()"); |
| tempEndOn->Connect("Clicked()", "TGAppMainFrame", this, "TempEndToggle()"); |
| exportTemp->Connect("Clicked()", "TGAppMainFrame", this, "ExportTempPlot()"); |
| closeTemp->Connect("Clicked()", "TGAppMainFrame", this, "CloseWindow()"); |
| |
| // Fieldpoint window ------------------------ |
| |
| } |
| |
| // ------------------------------------------------------------------- |
| |
| // Main function ----------------------------------------------------- |
| |
| void root_app() |
| { |
| new TGAppMainFrame(gClient->GetRoot(), winWidth, winHeight); |
| } |
| |
| int main(int argc, char **argv) |
| { |
| TApplication theApp("TGAppMainFrame", &argc, argv); |
| root_app(); |
| theApp.Run(); |
| |
| return 0; |
| } |
| |
| // ------------------------------------------------------------------- |