Re: [ROOT] button sensitivity

From: Valeriy Onuchin (Valeri.Onoutchine@cern.ch)
Date: Tue Oct 07 2003 - 16:37:50 MEST


  Hi Galina,
you can use check button http://root.cern.ch/root/html302/TGCheckButton.html
Does it mean that you want "check button behavior" for text button?

Regards. Valeriy

> Hello,
> 
> I'm using ROOT 3.02/07 under SuSE Linux 7.2 for an application (gui) 
> developing and I have a question concerning a button - it is not 
> sensitive enough - I mean when one wants to stop a process (that's the 
> aim of my button) he should see that the button really goes down (is 
> pressed). Otherwise, if you just click on it, without paying attention 
> does it sink, nothing happens - the process is still running. Does 
> anybody have any idea what is the reason for this and how it can be done?
> The attachment is the code I've written - ArchiveStatus.cpp and 
> ArchiveStatus.h - concern the class which is doing all the stuff about 
> the button and the small piece of code after is where I'm using 
> ArchiveStatus.*.
> 
> ArchiveStatus *as = new ArchiveStatus(gClient->GetRoot(), 230, 80);
> Bool_t not_stop = kTRUE;
> while (gtime <= end){
> if (as->fCancel->IsDown()){
> as->fStop = kTRUE;
> not_stop = kFALSE; 
> break;
> } 
> 
> Int_t skip = StepSize;
> Bool_t SetIsComplete = kTRUE;
> for (Int_t i=0; i < nr; i++) {
> TTFFloatData *d = FetchObj(list[i],i, gtime,skip, cntr, names, signs, 
> values);
> gtime, i, skip);
> if ( (d == NULL) || (d->EventTime() > end) || (d->bad()) ) {
> SetIsComplete = kFALSE;
> if (d != NULL) delete d;
> break;
> }
> else if (i == 0) ftime = d->EventTime();
> else if (ftime != d->EventTime()) {
> SetIsComplete = kFALSE;
> delete d;
> break;
> }
> *data[i] = *d;
> delete d;
> }
> 
> if (SetIsComplete) {
> all++;
> TTFFCp *FC = new TTFFCp[cntr];
> for (int j = 0; j < cntr; j++)
> {
> FC[j] = new TTFFetchCache();
> PosCacheCon[j] = 0; 
> } 
> Bool_t full_set = kTRUE;
> for (int j = 0; j < cntr; j++){
> TTFFloatData 
> *cfe=ConditionFileEvent(names[j],signs[j],values[j],j,gtime,skip, FC[j],
> p);
> 
> if ((cfe == NULL) || (cfe->bad()) || (cfe->EventTime() > end))
> {
> full_set = kFALSE;
> if (cfe != NULL) delete cfe;
> if (FC[j] != NULL) delete FC[j];
> break;
> }
> if (cfe->EventTime() != data[0]->EventTime())
> {
> full_set = kFALSE;
> delete cfe;
> if (FC[j] != NULL) delete FC[j];
> break;
> }
> delete cfe;
> cfe = NULL; 
> delete FC[j]; 
> 
> } 
> if (full_set){
> tree->Fill();
> ++counter;
> gtime = data[0]->EventTime();
> SetEventsNumber(counter);
> 
> if (not_stop) 
> as->RunFilter(TTFEventTime::Diff(gtime,begin)*100/iInterval);
> 
> } 
> delete[] FC;
> }
> 
> for (Int_t j=0; j < nr; j++) data[j]->Reset();
> if (skip == -1) {
> std::cerr << "Fatal error, aborting." << endl;
> break;
> }
> gtime += skip;
> gSystem->ProcessEvents();
> }
> 
> for (int i = 0; i < nr; i++) delete fCache[i];
> 
> if (not_stop) as->CloseWindow();
> file://============ArchiveStatus.h
> 
> #ifndef __ArchiveStatus_h__
> #define __ArchiveStatus_h__
> 
> 
> #include <TGFrame.h>
> #include <TGClient.h>
> #include <TGButton.h>
> #include <TGProgressBar.h>
> 
> #include "TTFConstant.h"
> 
> const char PROGRESS_TITLE[] = "Estimated time";
> 
> enum ProgressBarWidgets
> {
> BT_STOP
> };
> 
> class ArchiveStatus: public TGMainFrame{
> 
> private:
>                  TGHorizontalFrame *fHorFr;
>                  TGVerticalFrame *fVerFr;
>                  TGLayoutHints *fHint, *fHint1;
> 
>          public:
> 
>                  TGHProgressBar *fBar;
> TGTextButton *fCancel;
> Bool_t fStop;
> 
>                  ArchiveStatus(const TGWindow *p, UInt_t w, UInt_t h);
>                  ~ArchiveStatus();
> 
>                  void CloseWindow(void);
> void FrameClose(void);
> void RunFilter(Int_t increment);
> file://Bool_t ProcessMessage(Long_t msg, Long_t parm1, Long_t parm2);
>                  inline void ResetBar(void) {fBar->Reset();};
> 
>          ClassDef(ArchiveStatus,1)
> 
> };
> 
> #endif
> 
> 
> file://============ArchiveStatus.cpp
> 
> #include <stdlib.h>
> #include <iostream>
> #include "TTFTransBuffer.h"
> #include "ArchiveStatus.h"
> #include <TGFrame.h>
> 
> ClassImp(ArchiveStatus);
> 
> ArchiveStatus::ArchiveStatus(const TGWindow *p, UInt_t w, UInt_t h): 
> TGMainFrame(p, w, h)
> {
> 
> fStop = kFALSE;
> fHorFr = new TGHorizontalFrame(this, w, 40, kFixedWidth);
> fVerFr = new TGVerticalFrame(this, w, 70, kFixedWidth);
> 
> fBar = new TGHProgressBar (fVerFr, TGProgressBar::kStandard, 200);
> fBar->ShowPosition();
> fBar->SetBarColor("lightblue");
> 
> fCancel = new TGTextButton(fVerFr, "Stop filter", BT_STOP);
> fCancel->Connect("Clicked()", "ArchiveStatus", this, "FrameClose()");
> 
> fHint = new TGLayoutHints(kLHintsCenterX|kLHintsExpandX | 
> kLHintsCenterY,10,5,10,0);
> fHint1 = new TGLayoutHints(kLHintsCenterX|kLHintsExpandX | 
> kLHintsCenterY,60,60,15,0);
> fVerFr->Resize(230, 130);
> 
> fHorFr->AddFrame(fBar, fHint);
> fVerFr->AddFrame(fBar, fHint);
> fVerFr->AddFrame(fCancel, fHint1);
> AddFrame(fVerFr);
> 
> 
> MapSubwindows();
> Layout();
> SetWindowName(PROGRESS_TITLE);
> SetIconName("ArchiveStatus");
> MapWindow();
> 
> }
> 
> ArchiveStatus::~ArchiveStatus()
> {
>     delete fHint;
>     delete fBar;
>     delete fHorFr;
>   }
> 
> void ArchiveStatus::CloseWindow()
> {
>          SendCloseMessage();
> delete this;
> }
> 
> void ArchiveStatus::FrameClose(void)
> {
> cout << "Archive Filter aborted!" << endl;
> if (fStop) SendCloseMessage();
> }
> 
> void ArchiveStatus::RunFilter(Int_t increment)
> {
> fBar->SetPosition(increment);
> }
> 
> 



This archive was generated by hypermail 2b29 : Thu Jan 01 2004 - 17:50:16 MET