ROOT logo
#include "honlinemonclientmainwin.h"

#include "honlinemonclientmain.h"

ClassImp(HOnlineMonClientMainWin);

/* -------------------------------------------------------------------------- */
HOnlineMonClientMainWin::HOnlineMonClientMainWin() {
    width = 0;
    height = 0;
    clientMainWindow = 0;
    clientMain       = 0;
    // refresh rate
    gFrameRefreshRate = 0;
    numberEntryRefreshRate = 0;

    // auto save rate
    numberEntryAutoSaveRate = 0;

    // snapshot
    gFrameSnapshot = 0;
    buttonSnapshot = 0;

    // detectors
    gFrameDetectors = 0;

    SnapShotPath ="";

}
/* -------------------------------------------------------------------------- */
void HOnlineMonClientMainWin::CreateMainWin(HOnlineMonClientMain* clientmain) {

    /* MAIN WINDOW */
    clientMainWindow = new TGMainFrame(gClient->GetRoot());
    clientMain = clientmain;
    /* DETECTORS CHECKBUTTONS */
    gFrameDetectors = new TGGroupFrame(clientMainWindow, "detectors", kVerticalFrame);
    gFrameDetectors->SetLayoutManager(new TGVerticalLayout(gFrameDetectors));
    // for each detector one checkbox
    for (Int_t i=0;i<clientmain->listDetectors.LastIndex()+1;i++) {
	TString detname = clientmain->listDetectors.At(i)->GetName();
	TGCheckButton *checkbutton = new TGCheckButton(gFrameDetectors, detname);
	checkbutton->SetName(detname);
	checkbutton->Connect("Clicked()", "HOnlineMonClientMain", clientmain, ((TString) "HandleControlbuttonClick(=\"" + detname + "\")").Data());
	listControlbuttons.Add(checkbutton);

        if (listOpenDetectors.FindObject(detname.Data()) || listOpenDetectors.FindObject("all") ) checkbutton->SetOn(kTRUE);

	gFrameDetectors->AddFrame(checkbutton, new TGLayoutHints(kLHintsLeft,2,2,2,2));
    }

    // add GroupFrame to MainFrame
    clientMainWindow->AddFrame(gFrameDetectors, new TGLayoutHints(kLHintsCenterX, 5, 5, 3, 4));

    /* REFRESH RATE */
    gFrameRefreshRate = new TGGroupFrame(clientMainWindow, "refresh rate (s) | auto save (m)", kHorizontalFrame);
    gFrameRefreshRate->SetLayoutManager(new TGHorizontalLayout(gFrameRefreshRate));
    numberEntryRefreshRate = new TGNumberEntry(gFrameRefreshRate,clientmain->GetUpdateInterval(), 5, -1, TGNumberFormat::kNESInteger, TGNumberFormat::kNEAAnyNumber, TGNumberFormat::kNELLimitMin, 1);
    numberEntryRefreshRate->Connect("ValueSet(Long_t)", "HOnlineMonClientMain", clientmain, "HandleRefreshRateChange()");
    (numberEntryRefreshRate->GetNumberEntry())->Connect("ReturnPressed()", "HOnlineMonClientMain", clientmain, "HandleRefreshRateChange()");
    // add numberEntry to GroupFrame
    gFrameRefreshRate->AddFrame(numberEntryRefreshRate, new TGLayoutHints(kLHintsLeft, 5, 5, 3, 4));

    /* AUTOSAVE RATE */
    numberEntryAutoSaveRate = new TGNumberEntry(gFrameRefreshRate, -1, 5, -1, TGNumberFormat::kNESInteger, TGNumberFormat::kNEAAnyNumber, TGNumberFormat::kNELLimitMin, 1);
    numberEntryAutoSaveRate->SetLimits(TGNumberFormat::kNELLimitMinMax, -1,300);
    numberEntryAutoSaveRate->Connect("ValueSet(Long_t)", "HOnlineMonClientMain", clientmain, "HandleAutoSaveRateChange()");
    (numberEntryAutoSaveRate->GetNumberEntry())->Connect("ReturnPressed()", "HOnlineMonClientMain", clientmain, "HandleAutoSaveRateChange()");

    // add numberEntry to GroupFrame
    gFrameRefreshRate->AddFrame(numberEntryAutoSaveRate, new TGLayoutHints(kLHintsRight, 5, 5, 3, 4));
    numberEntryAutoSaveRate->GetNumberEntry()->SetIntNumber(GetAutoSaveRate());

    // add GroupFrame to MainFrame
    clientMainWindow->AddFrame(gFrameRefreshRate, new TGLayoutHints(kLHintsCenterX, 5, 5, 3, 4));

    /* SNAPSHOT */
    gFrameSnapshot = new TGGroupFrame(clientMainWindow, "actions", kHorizontalFrame);
    gFrameSnapshot->SetLayoutManager(new TGHorizontalLayout(gFrameSnapshot));


    // 'stop'-button
    TGTextButton* buttonStop = new TGTextButton(gFrameSnapshot, "STOP");
    buttonStop->SetToolTipText("Click here to stop the hadesonlineserver. \n"
			       "Only super user should stop the server since it \n"
			       "will affect all other monitoring clients! \n"
			       "USE With CARE!");
    buttonStop->Connect("Clicked()", "HOnlineMonClientMain", clientmain, "HandleSendStopServer()");
    gFrameSnapshot->AddFrame(buttonStop, new TGLayoutHints(kLHintsCenterX, 5, 5, 3, 4));

    // 'reset'-button
    TGTextButton* buttonReset = new TGTextButton(gFrameSnapshot, "RESET");
    buttonReset->SetToolTipText("Click here to reset hists on the hadesonlineserver. \n"
				"This will affect all other monitoring clients! \n"
				"USE With CARE!");
    buttonReset->Connect("Clicked()", "HOnlineMonClientMain", clientmain, "HandleSendResetHists()");
    gFrameSnapshot->AddFrame(buttonReset, new TGLayoutHints(kLHintsCenterX, 5, 5, 3, 4));

    // 'save'-button
    buttonSnapshot = new TGTextButton(gFrameSnapshot, "SAVE");
    buttonSnapshot->SetToolTipText("Click here to store all monitoring screens to a \n"
				   "pdf file in the snapshot dir. The file name is \n"
				   "composed filename_yyyy-m-dd_hh:minmin:ss.pdf \n"
				   "ONLY HISTOGRAMS OF OPEN MONITORS WILL BE SAVED!");
    buttonSnapshot->Connect("Clicked()", "HOnlineMonClientMain", clientmain, "HandleSnapshotSave()");
    // add button to GroupFrame
    gFrameSnapshot->AddFrame(buttonSnapshot, new TGLayoutHints(kLHintsCenterX, 5, 5, 3, 4));
    // add GroupFrame to MainFrame
    clientMainWindow->AddFrame(gFrameSnapshot, new TGLayoutHints(kLHintsCenterX, 5, 5, 3, 4));

    // current file name
    fTextFilename = new TGTextEntry(clientMainWindow );
    clientMainWindow->AddFrame(fTextFilename,new TGLayoutHints(kLHintsExpandX, 5, 5, 3, 5));

    // path for snapshot files
    fTextSnapshotPath = new TGTextEntry(clientMainWindow );
    clientMainWindow->AddFrame(fTextSnapshotPath,new TGLayoutHints(kLHintsExpandX, 5, 5, 3, 5));
    fTextSnapshotPath->SetText(GetSnapShotPath().Data());

    // speed of event server
    fTextSpeed = new TGTextEntry(clientMainWindow );
    clientMainWindow->AddFrame(fTextSpeed,new TGLayoutHints(kLHintsExpandX, 5, 5, 3, 5));

    // speed of event server
    fDataRate = new TGTextEntry(clientMainWindow );
    clientMainWindow->AddFrame(fDataRate,new TGLayoutHints(kLHintsExpandX, 5, 5, 3, 5));

    clientMainWindow->SetName(this->GetName());
    clientMainWindow->SetWindowName(this->GetTitle());
    clientMainWindow->MapSubwindows();
    clientMainWindow->MapWindow();
    clientMainWindow->Resize(this->GetWidth(), this->GetHeight());
    clientMainWindow->Connect("CloseWindow()", "HOnlineMonClientMain", clientmain, "HandleMainWindowClose()");
}
/* -------------------------------------------------------------------------- */
void HOnlineMonClientMainWin::DestroyMainWin(HOnlineMonClientMain* clientmain) {
}
/* -------------------------------------------------------------------------- */
HOnlineMonClientMainWin::~HOnlineMonClientMainWin() {

    // control button list
    // Remove all objects from the list AND delete all heap based objects.
    // the destructor of the elements is called
    // no need to delete the controlbuttons by hand
    listControlbuttons.Delete();

    // MainWindow
    clientMainWindow->Cleanup();
    delete clientMainWindow;
    clientMainWindow = 0;
    clientMain       = 0;

}
/* -------------------------------------------------------------------------- */
void HOnlineMonClientMainWin::SetWidth(Int_t width) {
    this->width = width;
}
/* -------------------------------------------------------------------------- */
Int_t HOnlineMonClientMainWin::GetWidth() {
    return this->width;
}
/* -------------------------------------------------------------------------- */
void HOnlineMonClientMainWin::SetHeight(Int_t height) {
    this->height = height;
}
/* -------------------------------------------------------------------------- */
Int_t HOnlineMonClientMainWin::GetHeight() {
    return this->height;
}
/* -------------------------------------------------------------------------- */
void HOnlineMonClientMainWin::SetSnapShotPath(TString path) {
    SnapShotPath = path;

}
/* -------------------------------------------------------------------------- */
void HOnlineMonClientMainWin::SetAutoSaveRate(Int_t rate) {
    autoSaveRate = rate;

}
/* -------------------------------------------------------------------------- */
 honlinemonclientmainwin.cc:1
 honlinemonclientmainwin.cc:2
 honlinemonclientmainwin.cc:3
 honlinemonclientmainwin.cc:4
 honlinemonclientmainwin.cc:5
 honlinemonclientmainwin.cc:6
 honlinemonclientmainwin.cc:7
 honlinemonclientmainwin.cc:8
 honlinemonclientmainwin.cc:9
 honlinemonclientmainwin.cc:10
 honlinemonclientmainwin.cc:11
 honlinemonclientmainwin.cc:12
 honlinemonclientmainwin.cc:13
 honlinemonclientmainwin.cc:14
 honlinemonclientmainwin.cc:15
 honlinemonclientmainwin.cc:16
 honlinemonclientmainwin.cc:17
 honlinemonclientmainwin.cc:18
 honlinemonclientmainwin.cc:19
 honlinemonclientmainwin.cc:20
 honlinemonclientmainwin.cc:21
 honlinemonclientmainwin.cc:22
 honlinemonclientmainwin.cc:23
 honlinemonclientmainwin.cc:24
 honlinemonclientmainwin.cc:25
 honlinemonclientmainwin.cc:26
 honlinemonclientmainwin.cc:27
 honlinemonclientmainwin.cc:28
 honlinemonclientmainwin.cc:29
 honlinemonclientmainwin.cc:30
 honlinemonclientmainwin.cc:31
 honlinemonclientmainwin.cc:32
 honlinemonclientmainwin.cc:33
 honlinemonclientmainwin.cc:34
 honlinemonclientmainwin.cc:35
 honlinemonclientmainwin.cc:36
 honlinemonclientmainwin.cc:37
 honlinemonclientmainwin.cc:38
 honlinemonclientmainwin.cc:39
 honlinemonclientmainwin.cc:40
 honlinemonclientmainwin.cc:41
 honlinemonclientmainwin.cc:42
 honlinemonclientmainwin.cc:43
 honlinemonclientmainwin.cc:44
 honlinemonclientmainwin.cc:45
 honlinemonclientmainwin.cc:46
 honlinemonclientmainwin.cc:47
 honlinemonclientmainwin.cc:48
 honlinemonclientmainwin.cc:49
 honlinemonclientmainwin.cc:50
 honlinemonclientmainwin.cc:51
 honlinemonclientmainwin.cc:52
 honlinemonclientmainwin.cc:53
 honlinemonclientmainwin.cc:54
 honlinemonclientmainwin.cc:55
 honlinemonclientmainwin.cc:56
 honlinemonclientmainwin.cc:57
 honlinemonclientmainwin.cc:58
 honlinemonclientmainwin.cc:59
 honlinemonclientmainwin.cc:60
 honlinemonclientmainwin.cc:61
 honlinemonclientmainwin.cc:62
 honlinemonclientmainwin.cc:63
 honlinemonclientmainwin.cc:64
 honlinemonclientmainwin.cc:65
 honlinemonclientmainwin.cc:66
 honlinemonclientmainwin.cc:67
 honlinemonclientmainwin.cc:68
 honlinemonclientmainwin.cc:69
 honlinemonclientmainwin.cc:70
 honlinemonclientmainwin.cc:71
 honlinemonclientmainwin.cc:72
 honlinemonclientmainwin.cc:73
 honlinemonclientmainwin.cc:74
 honlinemonclientmainwin.cc:75
 honlinemonclientmainwin.cc:76
 honlinemonclientmainwin.cc:77
 honlinemonclientmainwin.cc:78
 honlinemonclientmainwin.cc:79
 honlinemonclientmainwin.cc:80
 honlinemonclientmainwin.cc:81
 honlinemonclientmainwin.cc:82
 honlinemonclientmainwin.cc:83
 honlinemonclientmainwin.cc:84
 honlinemonclientmainwin.cc:85
 honlinemonclientmainwin.cc:86
 honlinemonclientmainwin.cc:87
 honlinemonclientmainwin.cc:88
 honlinemonclientmainwin.cc:89
 honlinemonclientmainwin.cc:90
 honlinemonclientmainwin.cc:91
 honlinemonclientmainwin.cc:92
 honlinemonclientmainwin.cc:93
 honlinemonclientmainwin.cc:94
 honlinemonclientmainwin.cc:95
 honlinemonclientmainwin.cc:96
 honlinemonclientmainwin.cc:97
 honlinemonclientmainwin.cc:98
 honlinemonclientmainwin.cc:99
 honlinemonclientmainwin.cc:100
 honlinemonclientmainwin.cc:101
 honlinemonclientmainwin.cc:102
 honlinemonclientmainwin.cc:103
 honlinemonclientmainwin.cc:104
 honlinemonclientmainwin.cc:105
 honlinemonclientmainwin.cc:106
 honlinemonclientmainwin.cc:107
 honlinemonclientmainwin.cc:108
 honlinemonclientmainwin.cc:109
 honlinemonclientmainwin.cc:110
 honlinemonclientmainwin.cc:111
 honlinemonclientmainwin.cc:112
 honlinemonclientmainwin.cc:113
 honlinemonclientmainwin.cc:114
 honlinemonclientmainwin.cc:115
 honlinemonclientmainwin.cc:116
 honlinemonclientmainwin.cc:117
 honlinemonclientmainwin.cc:118
 honlinemonclientmainwin.cc:119
 honlinemonclientmainwin.cc:120
 honlinemonclientmainwin.cc:121
 honlinemonclientmainwin.cc:122
 honlinemonclientmainwin.cc:123
 honlinemonclientmainwin.cc:124
 honlinemonclientmainwin.cc:125
 honlinemonclientmainwin.cc:126
 honlinemonclientmainwin.cc:127
 honlinemonclientmainwin.cc:128
 honlinemonclientmainwin.cc:129
 honlinemonclientmainwin.cc:130
 honlinemonclientmainwin.cc:131
 honlinemonclientmainwin.cc:132
 honlinemonclientmainwin.cc:133
 honlinemonclientmainwin.cc:134
 honlinemonclientmainwin.cc:135
 honlinemonclientmainwin.cc:136
 honlinemonclientmainwin.cc:137
 honlinemonclientmainwin.cc:138
 honlinemonclientmainwin.cc:139
 honlinemonclientmainwin.cc:140
 honlinemonclientmainwin.cc:141
 honlinemonclientmainwin.cc:142
 honlinemonclientmainwin.cc:143
 honlinemonclientmainwin.cc:144
 honlinemonclientmainwin.cc:145
 honlinemonclientmainwin.cc:146
 honlinemonclientmainwin.cc:147
 honlinemonclientmainwin.cc:148
 honlinemonclientmainwin.cc:149
 honlinemonclientmainwin.cc:150
 honlinemonclientmainwin.cc:151
 honlinemonclientmainwin.cc:152
 honlinemonclientmainwin.cc:153
 honlinemonclientmainwin.cc:154
 honlinemonclientmainwin.cc:155
 honlinemonclientmainwin.cc:156
 honlinemonclientmainwin.cc:157
 honlinemonclientmainwin.cc:158
 honlinemonclientmainwin.cc:159
 honlinemonclientmainwin.cc:160
 honlinemonclientmainwin.cc:161
 honlinemonclientmainwin.cc:162
 honlinemonclientmainwin.cc:163
 honlinemonclientmainwin.cc:164
 honlinemonclientmainwin.cc:165
 honlinemonclientmainwin.cc:166
 honlinemonclientmainwin.cc:167
 honlinemonclientmainwin.cc:168
 honlinemonclientmainwin.cc:169
 honlinemonclientmainwin.cc:170
 honlinemonclientmainwin.cc:171
 honlinemonclientmainwin.cc:172
 honlinemonclientmainwin.cc:173
 honlinemonclientmainwin.cc:174
 honlinemonclientmainwin.cc:175
 honlinemonclientmainwin.cc:176
 honlinemonclientmainwin.cc:177
 honlinemonclientmainwin.cc:178
 honlinemonclientmainwin.cc:179
 honlinemonclientmainwin.cc:180