00001
00002
00003
00004
00005
00006
00007
00008 #include "lftvideodialog.h"
00009
00010 #include <qframe.h>
00011 #include <qpushbutton.h>
00012 #include <qlcdnumber.h>
00013 #include <qslider.h>
00014 #include <qlabel.h>
00015 #include <qlineedit.h>
00016 #include <qradiobutton.h>
00017 #include <qbuttongroup.h>
00018 #include <qmessagebox.h>
00019 #include <math.h>
00020
00021 LFTVideoDialog::LFTVideoDialog( QWidget* parent,
00022 const char* name, bool modal, WFlags f )
00023 : LFTVideoDialogBase( parent, name, modal, f )
00024 {
00025 this->setProperty( "caption", tr( "v1.76 LFTVideo" ) );
00026
00027 KonfigDialog=new SitzungsKonfigurationDialog ( this, "KonfigDialog", TRUE,
00028 Qt::WStyle_Customize | Qt::WStyle_Title | Qt::WStyle_SysMenu);
00029
00030 QFont *dialog_font=new QFont ( KonfigDialog->font() );
00031 dialog_font->setFamily( "Arial" );
00032 dialog_font->setPointSize( 8 );
00033 KonfigDialog->setFont ( *dialog_font, TRUE) ;
00034 BtTherapeut_NLF->setText("nicht\nLös.Sprache (6)");
00035 BtTherapeut_NLF->setProperty( "accel", 268435510 );
00036 BtKlient_NLF->setText("nicht\nLös.Sprache (3)");
00037 BtKlient_NLF->setProperty( "accel", 268435507 );
00038
00039
00040 connect( (const QObject*) BtKonfiguration, SIGNAL(clicked() ),
00041 this, SLOT(openKonfigDialog() ) );
00042 connect( (const QObject*) BtRun, SIGNAL(toggled(bool) ),
00043 this, SLOT(RatingBeginnOderPause(bool) ) );
00044 connect ((const QObject*) BtGrpRating, SIGNAL(pressed(int)),
00045 this, SLOT(SpeichereRatingButton(int)) );
00046 connect ((const QObject*) BtSave, SIGNAL(pressed()),
00047 this, SLOT(RatingEnde()) );
00048 connect ((const QObject*) BtKorrigieren, SIGNAL(toggled(bool)),
00049 this, SLOT(KorrigierenSchalter(bool)) );
00050 connect ((const QObject*) PushButtonCountdown, SIGNAL(toggled(bool)),
00051 this, SLOT(CountdownStart(bool)) );
00052
00053 CountdownTimer=new QTimer();
00054 connect( CountdownTimer, SIGNAL(timeout()),
00055 this, SLOT(Countdown()) );
00056
00057
00058 zaehlwerk=new QTime();
00059 SekundenTimer=new QTimer();
00060 connect( SekundenTimer, SIGNAL(timeout()),
00061 this, SLOT(aktualisiereZeitanzeige()) );
00062 connect( SldSecs, SIGNAL(valueChanged(int)),
00063 this, SLOT(SliderCheckFaerbung()) );
00064 connect( SldMins, SIGNAL(valueChanged(int)),
00065 this, SLOT(SliderCheckFaerbung()) );
00066
00067
00068 initNullSetzungen();
00069
00070
00071
00072 };
00073
00074
00075 QString giveDateStamp (){
00076 QDate d=QDate::currentDate();
00077 QString ts="%1%2%3";
00078 ts=ts.arg(d.year())
00079 .arg(leadingZero(d.month()))
00080 .arg(leadingZero(d.day()));
00081 return ts;
00082 };
00083
00084 QString giveTimeStamp (){
00085 QTime t=QTime::currentTime();
00086 QString ts="%1%2%3";
00087 ts=ts.arg(leadingZero(t.hour()))
00088 .arg(leadingZero(t.minute()))
00089 .arg(leadingZero(t.second()));
00090 return ts;
00091 };
00092
00093 void LFTVideoDialog::initNullSetzungen(){
00094
00095 Verlauf=new RatingVerlauf();
00096 weitergefuehrteSession=false;
00097 PauseGedrueckt=false;
00098 TextLabelAnzahl->setText("0");
00099 TextLabelMittlereDauer->setText("00:00");
00100 letzterEinschaetzungsZeitpunkt=MinSec(0,0);
00101
00102 SldSecs->setValue(0);
00103 SldMins->setValue(0);
00104
00105 FrmRun->setEnabled(false);
00106 FrmCounter->setEnabled(false);
00107 KonfigDialog->buttonOk->setEnabled(false);
00108 KonfigDialog->LineEditKlient->setText("");
00109 }
00110
00111 void LFTVideoDialog::CountdownStart(bool start){
00112 if (start){
00113 CountdownTimer->stop();
00114 CountdownTimer->start(500);
00115 BtRun->setText("10");
00116 infoline1->setText("Wichtig ist eine SEHR genaue Synchronisierung "
00117 "mit dem Videocounter! Bitte im Zweifel mehrmals "
00118 "versuchen...");
00119 }
00120 }
00121
00122 void LFTVideoDialog::Countdown(){
00123 int i=BtRun->text().toInt();
00124 i--;
00125 if (i<0) {
00126 CountdownTimer->stop();
00127 BtRun->setText("&Run");
00128 infoline1->setText("");
00129 this->setEnabled(true);
00130 BtRun->toggle();
00131 PushButtonCountdown->toggle();
00132 }else{
00133 QString temp="%1";
00134 temp=temp.arg(i);
00135 BtRun->setText(temp);
00136 }
00137 }
00138
00139
00140 void LFTVideoDialog::SliderCheckFaerbung (){
00141 MinSec slider(SldMins->value(), SldSecs->value());
00142
00143 if ( ! (letzterEinschaetzungsZeitpunkt < slider)
00144 && ! (letzterEinschaetzungsZeitpunkt==MinSec(0,0)))
00145 {
00146 LCDSecs->setPalette( QPalette( QColor(255,70,70) ) );
00147 LCDMins->setPalette( QPalette( QColor(255,70,70) ) );
00148 infoline2->setText("dieser Zeit-Bereich wurde schon eingeschätzt!!!"
00149 " Bitte nicht nochmal einschätzen, das führt garantiert zu "
00150 "Chaos...");
00151 }else{
00152 if (LCDSecs->palette() == QPalette( QColor(255,70,70) ) ){
00153 LCDSecs->unsetPalette( );
00154 LCDMins->unsetPalette( );
00155 infoline2->setText("");
00156 }
00157 }
00158 }
00159
00160 void LFTVideoDialog::KorrigierenSchalter(bool toggled){
00161 if(toggled){
00162
00163 FrmKorrigieren->setPalette( QPalette( QColor(255,70,70) ) );
00164 infoline2->setPalette( QPalette( QColor(255,70,70) ) );
00165
00166 falscherButton=Verlauf->RatingAuslesen(Verlauf->BisherLetzterMoment())
00167 .Einschaetzung;
00168 if (falscherButton){
00169 BtGrpRating->find(falscherButton)->
00170 setPalette( QPalette( QColor(255,150,150) ) );
00171 infoline2->setText("Bitte nun die letzte Entscheidung korrigieren");
00172 } else infoline2->setText("nix zu korrigieren...");
00173 }else{
00174
00175 FrmKorrigieren->unsetPalette( );
00176 infoline2->unsetPalette( );
00177 if (falscherButton>0)
00178 BtGrpRating->find(falscherButton)->unsetPalette( );
00179 BtKorrigieren->setOn(false);
00180 infoline2->setText("");
00181 }
00182 }
00183
00184 void LFTVideoDialog::SpeichereRatingButton(int BtNumber){
00185 if (BtKorrigieren->isOn()){
00186
00187 MinSec letzterEintrag=Verlauf->BisherLetzterMoment();
00188 if (letzterEintrag==MinSec(0,0))
00189 infoline2->setText("Noch nix zu korrigieren.");
00190 else
00191 {
00192 Verlauf->RatingLoeschen (letzterEintrag);
00193 Verlauf->RatingAnhaengen(letzterEintrag,(RatingSkala)BtNumber);
00194 infoline2->setText("Die letzte Einschaetzung wurde korrigiert.");
00195 }
00196 KorrigierenSchalter(false);
00197
00198 }else
00199 {
00200 MinSec Zeitpunkt=MinSec(vergangeneMinuten(), vergangeneSekunden());
00201 Verlauf->RatingAnhaengen(Zeitpunkt, (RatingSkala) BtNumber);
00202
00203
00204
00205 int anz=TextLabelAnzahl->text().toInt() + 1 ;
00206 QString temp="%1";
00207 temp=temp.arg(anz);
00208 TextLabelAnzahl->setText(temp);
00209
00210 double dauer= Zeitpunkt.toSecs() / (double) anz;
00211 temp=MinSec(0, dauer).toQString();
00212 TextLabelMittlereDauer->setText(temp);
00213 }
00214 }
00215
00216 void LFTVideoDialog::RatingEnde(){
00217 MinSec Zeitpunkt=MinSec(vergangeneMinuten(), vergangeneSekunden());
00218
00219
00220
00221
00222 VerlaufSpeichern *Speicherer=new VerlaufSpeichern (this);
00223 Speicherer->setzePointerAufDaten(Verlauf);
00224 QString filenameVerlauf= Speicherer->gibFilename(
00225 KonfigDialog->LineEditKlient->text(),
00226 KonfigDialog->LineEditRater->text());
00227 bool erfolgreichVerlauf;
00228 erfolgreichVerlauf = Speicherer->
00229 speichereDaten(filenameVerlauf,"Rating Verlauf");
00230 delete Speicherer;
00231 qDebug("Speichern war erfolgreich: %d",erfolgreichVerlauf);
00232
00233
00234 InfoSpeichern *InfoSpeicherer=new InfoSpeichern (this);
00235 InfoSpeicherer->merkDirDaten(TextLabelAnzahl->text(),
00236 TextLabelMittlereDauer->text(),
00237 Verlauf->BisherLetzterMoment(),
00238 weitergefuehrteSession,
00239 PauseGedrueckt);
00240 QString filenameInfo= InfoSpeicherer->gibFilename(
00241 KonfigDialog->LineEditKlient->text(),
00242 KonfigDialog->LineEditRater->text());
00243 bool erfolgreichInfo;
00244 erfolgreichInfo = InfoSpeicherer->
00245 speichereDaten(filenameInfo,"Rating Verlauf");
00246 delete InfoSpeicherer;
00247 qDebug("InfoSpeichern war erfolgreich: %d",erfolgreichInfo);
00248
00249 if (erfolgreichVerlauf && erfolgreichInfo){
00250 infoline1->setText("Verlauf und Info gespeichert: "
00251 +filenameVerlauf+" und "+filenameInfo);
00252 infoline2->setText("Alle flüchtigen Daten gelöscht,\n"
00253 "Neubeginn möglich.");
00254 }else {
00255 infoline1->setText("Irgendwelche Speicherprobleme\n"
00256 "Am besten nochmal versuchen...");
00257 return;
00258 }
00259
00260
00261
00262
00263 Verlauf->Sinneinheiten.clear();
00264 delete Verlauf;
00265
00266
00267 initNullSetzungen();
00268
00269
00270
00271
00272 }
00273
00274
00275 double LFTVideoDialog::vergangeneZeitInSekunden(){
00276 double secs = StartLCDSekunden+StartLCDMinuten*60;
00277
00278 if (SekundenTimer->isActive())
00279 secs += ((double) zaehlwerk->elapsed()) / (double) 1000;
00280 return secs;
00281 }
00282
00283
00284 double LFTVideoDialog::vergangeneSekunden(){
00285 double secs=vergangeneZeitInSekunden();
00286 int nurSecs=((int) secs) % 60;
00287 return nurSecs + nachkomma(secs);
00288 }
00289
00290 int LFTVideoDialog::vergangeneMinuten(){
00291 int mins=vergangeneZeitInSekunden()/60;
00292 return mins;
00293 }
00294
00295 void LFTVideoDialog::aktualisiereZeitanzeige(){
00296 int secs=(int) vergangeneZeitInSekunden();
00297 SldSecs->setValue(secs%60);
00298 int mins=vergangeneMinuten();
00299 SldMins->setValue(mins);
00300 };
00301
00302
00303 void LFTVideoDialog::RatingBeginnOderPause(bool beginn){
00304
00305 if(beginn){
00306
00307
00308
00309
00310
00311
00312 infoline1->setText("Abschalten des Run-Buttons "
00313 "PAUSIERT das Zählwerk (nur benutzen wenn NICHT die "
00314 "Inter-Rater-Übereinstimmung gemessen werden muss!)");
00315 infoline2->setText("Das Zählwerk läuft. Am Ende jeder Sinneinheit "
00316 "eine der 7 Tasten drücken.");
00317
00318 StartLCDSekunden=LCDSecs->value();
00319 StartLCDMinuten=LCDMins->value();
00320 SldMins->setEnabled(false);
00321 SldSecs->setEnabled(false);
00322 if(MinSec(0,0) < Verlauf->BisherLetzterMoment() ){
00323 qDebug("pause gedrückt");
00324 PauseGedrueckt=true;
00325 }
00326 zaehlwerk->restart();
00327 SekundenTimer->stop();
00328 SekundenTimer->start(1000);
00329 } else
00330 {
00331 infoline1->setText("Zählwerk angehalten (PAUSE)");
00332 infoline2->setText("");
00333 SekundenTimer->stop();
00334 KorrigierenSchalter(false);
00335 letzterEinschaetzungsZeitpunkt=Verlauf->BisherLetzterMoment();
00336 SldMins->setEnabled(true);
00337 SldSecs->setEnabled(true);
00338 }
00339 }
00340
00341 void LFTVideoDialog::openKonfigDialog(){
00342
00343
00344
00345
00346 KonfigDialog->LineEditDatum->setText(QDate::currentDate().toString());
00347 KonfigDialog->LineEditUhrzeit->setText(QTime::currentTime().toString());
00348 KonfigDialog->show();
00349
00350
00351 if ( KonfigDialog->ja->isChecked()
00352 && KonfigDialog->TextLabelExistiert->text()=="schon")
00353 {
00354 VerlaufSpeichern *Speicherer=new VerlaufSpeichern (this);
00355 Speicherer->setzePointerAufDaten(Verlauf);
00356 QString filename= Speicherer->gibFilename(
00357 KonfigDialog->LineEditKlient->text(),
00358 KonfigDialog->LineEditRater->text());
00359 bool erfolgreich = Speicherer->leseDaten(filename,"Rating Verlauf");
00360 if (erfolgreich) {
00361 weitergefuehrteSession=true;
00362
00363 if (MinSec(0,0) < Verlauf->BisherLetzterMoment())
00364 PauseGedrueckt=true;
00365
00366
00367
00368 }
00369 delete Speicherer;
00370 QString infotext="Daten wurden";
00371 infotext+=(erfolgreich?" ":" NICHT ");
00372 infotext+="erfolgreich aus ";
00373 infotext+=filename;
00374 infotext+=" eingelesen";
00375 infoline1->setText(infotext);
00376
00377 letzterEinschaetzungsZeitpunkt=Verlauf->BisherLetzterMoment();
00378 SldMins->setValue(letzterEinschaetzungsZeitpunkt.mins());
00379 SldSecs->setValue(letzterEinschaetzungsZeitpunkt.secs());
00380
00381
00382 int anz=Verlauf->Sinneinheiten.size()-1 ;
00383 QString temp="%1";
00384 temp=temp.arg(anz);
00385 TextLabelAnzahl->setText(temp);
00386
00387 double dauer= letzterEinschaetzungsZeitpunkt.toSecs() / (double) anz;
00388 temp=MinSec(0, dauer).toQString();
00389 TextLabelMittlereDauer->setText(temp);
00390 }
00391
00392 if (KonfigDialog->buttonOk->isEnabled()){
00393 infoline1->setText("OK. Es kann losgehen...");
00394 FrmRun->setEnabled(true);
00395 FrmCounter->setEnabled(true);
00396 }else {
00397 infoline1->setText("Zuerst die Sitzung konfigurieren");
00398 FrmRun->setEnabled(false);
00399 FrmCounter->setEnabled(false);
00400 }
00401 };
00402
00403
00404 LFTVideoDialog::~LFTVideoDialog()
00405
00406
00407
00408 {
00409 int verloren=Verlauf->Sinneinheiten.size();
00410 MinSec arbeitszeit=Verlauf->BisherLetzterMoment();
00411
00412 if (verloren>1)
00413 {
00414 QString dasDatum="SIKO_"; dasDatum+=giveDateStamp();
00415 QString dieZeit=giveTimeStamp();
00416 QString filename1=(dasDatum + "_" + dieZeit +"_info.dat").lower();
00417 QString filename2=(dasDatum + "_" + dieZeit +"_verlauf.dat").lower();
00418
00419 QString temp="Vor dem Beenden dieses Programmes müssen die Daten IMMER "
00420 "manuell per 'Ende'-Taste abge-SPEICHER-t werden.\n\nFast wären "
00421 "die wertvollen %1 Sinneinheiten verloren gewesen, die in "
00422 "mühseliger %2 dauernden Arbeitszeit eingegeben wurden.\n"
00423 "Also: Bitte immer als letztes 'Ende' drücken, dann erst das "
00424 "Programm schliessen!\n\nIch werde nun versuchen, eine "
00425 "Sicherheitskopie der Daten abzuspeichern unter: \n%3\n%4\n\n"
00426 "Nach Kopieren und manuellem Umbenennen ins normale Schema "
00427 "können die Daten dann einfach\nmittels "
00428 "'angefangene Sitzung weiterführen' eingelesen und neu "
00429 "abgespeichert werden.\n\n"
00430 "Vielleicht nochmal Glück gehabt? Schaun wir mal, ob das "
00431 "Speichern nun klappt ...";
00432 temp=temp.arg(verloren)
00433 .arg(arbeitszeit.toQString())
00434 .arg(filename1).arg(filename2);
00435 QMessageBox::critical( this, "LFTVideo - so beenden ist VERBOTEN!",
00436 temp);
00437
00438 VerlaufSpeichern *Speicherer=new VerlaufSpeichern (this);
00439 Speicherer->setzePointerAufDaten(Verlauf);
00440 QString filenameVerlauf=Speicherer->gibFilename(dasDatum, dieZeit);
00441 bool erfolgreichVerlauf = Speicherer->
00442 speichereDaten(filenameVerlauf,"Rating Verlauf");
00443 delete Speicherer;
00444 qDebug("Verlauf Speichern war erfolgreich: %d",erfolgreichVerlauf);
00445
00446 InfoSpeichern *InfoSpeicherer=new InfoSpeichern (this);
00447 InfoSpeicherer->merkDirDaten(TextLabelAnzahl->text(),
00448 TextLabelMittlereDauer->text(),
00449 Verlauf->BisherLetzterMoment(),
00450 weitergefuehrteSession,
00451 PauseGedrueckt);
00452 QString filenameInfo= InfoSpeicherer->gibFilename(dasDatum, dieZeit);
00453 bool erfolgreichInfo;
00454 erfolgreichInfo = InfoSpeicherer->
00455 speichereDaten(filenameInfo,"Rating Verlauf");
00456 delete InfoSpeicherer;
00457 qDebug("InfoSpeichern war erfolgreich: %d",erfolgreichInfo);
00458 }
00459
00460
00461 Verlauf->Sinneinheiten.clear(); delete Verlauf;
00462 delete KonfigDialog, CountdownTimer, SekundenTimer;
00463
00464
00465 }