From b026e326c652be35e145ffa44af30d3e13f505f4 Mon Sep 17 00:00:00 2001 From: Fons Rademakers <Fons.Rademakers@cern.ch> Date: Thu, 1 Feb 2007 16:55:52 +0000 Subject: [PATCH] From Bertrand: - Implement this feature request: https://savannah.cern.ch/bugs/?16887 - Fix the bug reported at: https://savannah.cern.ch/bugs/?20644 git-svn-id: http://root.cern.ch/svn/root/trunk@17624 27541ba8-7e3a-0410-8455-c3a389f83636 --- proof/inc/TSessionDialogs.h | 6 +- proof/inc/TSessionViewer.h | 5 +- proof/src/TSessionDialogs.cxx | 79 ++++++++++++++++++++++++-- proof/src/TSessionViewer.cxx | 81 ++++++++++++++++++++++++--- sessionviewer/inc/TSessionDialogs.h | 6 +- sessionviewer/inc/TSessionViewer.h | 5 +- sessionviewer/src/TSessionDialogs.cxx | 79 ++++++++++++++++++++++++-- sessionviewer/src/TSessionViewer.cxx | 81 ++++++++++++++++++++++++--- 8 files changed, 310 insertions(+), 32 deletions(-) diff --git a/proof/inc/TSessionDialogs.h b/proof/inc/TSessionDialogs.h index d72d996735f..9e9af1dc996 100644 --- a/proof/inc/TSessionDialogs.h +++ b/proof/inc/TSessionDialogs.h @@ -1,4 +1,4 @@ -// @(#)root/proof:$Name: $:$Id: TSessionDialogs.h,v 1.1 2006/11/17 15:50:17 rdm Exp $ +// @(#)root/proof:$Name: $:$Id: TSessionDialogs.h,v 1.2 2007/02/01 14:21:28 brun Exp $ // Author: Marek Biskup, Jakub Madejczyk, Bertrand Bellenot 10/08/2005 /************************************************************************* @@ -79,7 +79,8 @@ public: class TNewQueryDlg : public TGTransientFrame { private: - Bool_t fEditMode; // kTRUE if used to edit existing query + Bool_t fEditMode; // kTRUE if used to edit existing query + Bool_t fModified; // kTRUE if settings have changed TGCompositeFrame *fFrmNewQuery; // top (main) frame TGCompositeFrame *fFrmMore; // options frame TGTextButton *fBtnMore; // "more >>" / "less <<" button @@ -113,6 +114,7 @@ public: void OnElementSelected(TObject *obj); void CloseWindow(); void Popup(); + void SettingsChanged(); void UpdateFields(TQueryDescription *desc); virtual Bool_t ProcessMessage(Long_t msg, Long_t parm1, Long_t parm2); diff --git a/proof/inc/TSessionViewer.h b/proof/inc/TSessionViewer.h index de625c8ad85..84d6dea4549 100644 --- a/proof/inc/TSessionViewer.h +++ b/proof/inc/TSessionViewer.h @@ -1,4 +1,4 @@ -// @(#)root/proof:$Name: $:$Id: TSessionViewer.h,v 1.2 2006/11/22 14:16:54 rdm Exp $ +// @(#)root/proof:$Name: $:$Id: TSessionViewer.h,v 1.3 2006/11/28 12:10:52 rdm Exp $ // Author: Marek Biskup, Jakub Madejczyk, Bertrand Bellenot 10/08/2005 /************************************************************************* @@ -382,6 +382,7 @@ public: void OnBrowseEventList(); void OnBtnSave(); void OnElementSelected(TObject *obj); + void SettingsChanged(); void UpdateFields(TQueryDescription *desc); ClassDef(TEditQueryFrame, 0) // Edit query frame @@ -410,6 +411,7 @@ private: TGTextButton *fBtnSave; // save query button TGTextView *fInfoTextView; // summary on current query + Bool_t fModified; // kTRUE if settings have changed Int_t fFiles; // number of files processed Long64_t fFirst; // first event/entry to process Long64_t fEntries; // number of events/entries to process @@ -440,6 +442,7 @@ public: TGTab *GetTab() const { return fTab; } void Feedback(TList *objs); + void Modified(Bool_t mod = kTRUE); void Progress(Long64_t total, Long64_t processed); void Progress(Long64_t total, Long64_t processed, Long64_t bytesread, Float_t initTime, diff --git a/proof/src/TSessionDialogs.cxx b/proof/src/TSessionDialogs.cxx index 1f70cde8a73..fede777cf7a 100644 --- a/proof/src/TSessionDialogs.cxx +++ b/proof/src/TSessionDialogs.cxx @@ -1,4 +1,4 @@ -// @(#)root/proof:$Name: $:$Id: TSessionDialogs.cxx,v 1.4 2007/01/30 11:24:32 brun Exp $ +// @(#)root/proof:$Name: $:$Id: TSessionDialogs.cxx,v 1.5 2007/01/31 16:46:10 rdm Exp $ // Author: Marek Biskup, Jakub Madejczyk, Bertrand Bellenot 10/08/2005 /************************************************************************* @@ -216,6 +216,7 @@ void TNewChainDlg::UpdateList() // loop on the list of chains/datasets in memory, // and fill the associated listview while ((obj = (TObject *)next())) { + item = 0; if (obj->IsA() == TChain::Class()) { const char *title = ((TChain *)obj)->GetTitle(); if (strlen(title) == 0) @@ -227,8 +228,10 @@ void TNewChainDlg::UpdateList() item = new TGLVEntry(fLVContainer, ((TDSet *)obj)->GetObjName(), ((TDSet *)obj)->GetName()); } - item->SetUserData(obj); - fLVContainer->AddItem(item); + if (item) { + item->SetUserData(obj); + fLVContainer->AddItem(item); + } } fClient->NeedRedraw(fLVContainer); Resize(); @@ -341,6 +344,7 @@ TNewQueryDlg::TNewQueryDlg(TSessionViewer *gui, Int_t Width, Int_t Height, Window_t wdummy; Int_t ax, ay; fEditMode = editmode; + fModified = kFALSE; fChain = 0; fQuery = query; if (fQuery && fQuery->fChain) { @@ -487,6 +491,21 @@ void TNewQueryDlg::Build(TSessionViewer *gui) fNumFirstEntry->Associate(this); fTxtEventList->Associate(this); + fTxtQueryName->Connect("TextChanged(char*)", "TNewQueryDlg", this, + "SettingsChanged()"); + fTxtChain->Connect("TextChanged(char*)", "TNewQueryDlg", this, + "SettingsChanged()"); + fTxtSelector->Connect("TextChanged(char*)", "TNewQueryDlg", this, + "SettingsChanged()"); + fTxtOptions->Connect("TextChanged(char*)", "TNewQueryDlg", this, + "SettingsChanged()"); + fNumEntries->Connect("ValueChanged(Long_t)", "TNewQueryDlg", this, + "SettingsChanged()"); + fNumFirstEntry->Connect("ValueChanged(Long_t)", "TNewQueryDlg", this, + "SettingsChanged()"); + fTxtEventList->Connect("TextChanged(char*)", "TNewQueryDlg", this, + "SettingsChanged()"); + TGCompositeFrame *tmp; AddFrame(tmp = new TGCompositeFrame(this, 140, 20, kHorizontalFrame), new TGLayoutHints(kLHintsLeft | kLHintsExpandX)); @@ -510,6 +529,8 @@ void TNewQueryDlg::Build(TSessionViewer *gui) tmp->AddFrame(fBtnClose = new TGTextButton(tmp, "Close"), new TGLayoutHints(kLHintsLeft | kLHintsExpandX, 3, 3, 3, 3)); fBtnClose->Connect("Clicked()", "TNewQueryDlg", this, "OnBtnCloseClicked()"); + fBtnSave->SetState(kButtonDisabled); + fBtnSubmit->SetState(kButtonDisabled); } //______________________________________________________________________________ @@ -568,7 +589,7 @@ void TNewQueryDlg::OnBrowseSelector() fi.fFileTypes = filetypes; new TGFileDialog(fClient->GetRoot(), this, kFDOpen, &fi); if (!fi.fFilename) return; - fTxtSelector->SetText(gSystem->BaseName(fi.fFilename)); + fTxtSelector->SetText(gSystem->UnixPathName(fi.fFilename)); } //______________________________________________________________________________ @@ -668,6 +689,7 @@ void TNewQueryDlg::OnBtnSaveClicked() fTxtQueryName->SelectAll(); fTxtQueryName->SetFocus(); fViewer->WriteConfiguration(); + fModified = kFALSE; } //______________________________________________________________________________ @@ -684,7 +706,18 @@ void TNewQueryDlg::OnBtnCloseClicked() { // Close dialog. - DeleteWindow(); + Int_t result = kMBNo; + if (fModified) { + new TGMsgBox(fClient->GetRoot(), this, "Modified Settings", + "Do you wish to SAVE changes ?", 0, + kMBYes | kMBNo | kMBCancel, &result); + if (result == kMBYes) { + OnBtnSaveClicked(); + } + } + if (result == kMBNo) { + DeleteWindow(); + } } //______________________________________________________________________________ @@ -696,6 +729,42 @@ void TNewQueryDlg::Popup() fTxtQueryName->SetFocus(); } +//______________________________________________________________________________ +void TNewQueryDlg::SettingsChanged() +{ + // Settings have changed, update GUI accordingly. + + if (fEditMode && fQuery) { + if ((strcmp(fQuery->fSelectorString.Data(), fTxtSelector->GetText())) || + (strcmp(fQuery->fQueryName.Data(), fTxtQueryName->GetText())) || + (strcmp(fQuery->fOptions.Data(), fTxtOptions->GetText())) || + (fQuery->fNoEntries != fNumEntries->GetIntNumber()) || + (fQuery->fFirstEntry != fNumFirstEntry->GetIntNumber()) || + (fQuery->fChain != fChain)) { + fModified = kTRUE; + } + else { + fModified = kFALSE; + } + } + else { + if ((fTxtQueryName->GetText()) && + ((fTxtQueryName->GetText()) || + (fTxtChain->GetText()))) + fModified = kTRUE; + else + fModified = kFALSE; + } + if (fModified) { + fBtnSave->SetState(kButtonUp); + fBtnSubmit->SetState(kButtonUp); + } + else { + fBtnSave->SetState(kButtonDisabled); + fBtnSubmit->SetState(kButtonDisabled); + } +} + //______________________________________________________________________________ void TNewQueryDlg::UpdateFields(TQueryDescription *desc) { diff --git a/proof/src/TSessionViewer.cxx b/proof/src/TSessionViewer.cxx index 9140cfe724c..296936c8d92 100644 --- a/proof/src/TSessionViewer.cxx +++ b/proof/src/TSessionViewer.cxx @@ -1,4 +1,4 @@ -// @(#)root/proof:$Name: $:$Id: TSessionViewer.cxx,v 1.7 2007/01/31 16:46:10 rdm Exp $ +// @(#)root/proof:$Name: $:$Id: TSessionViewer.cxx,v 1.8 2007/02/01 14:58:44 brun Exp $ // Author: Marek Biskup, Jakub Madejczyk, Bertrand Bellenot 10/08/2005 /************************************************************************* @@ -2130,6 +2130,20 @@ void TEditQueryFrame::Build(TSessionViewer *gui) fNumFirstEntry->Associate(this); fTxtEventList->Associate(this); + fTxtQueryName->Connect("TextChanged(char*)", "TEditQueryFrame", this, + "SettingsChanged()"); + fTxtChain->Connect("TextChanged(char*)", "TEditQueryFrame", this, + "SettingsChanged()"); + fTxtSelector->Connect("TextChanged(char*)", "TEditQueryFrame", this, + "SettingsChanged()"); + fTxtOptions->Connect("TextChanged(char*)", "TEditQueryFrame", this, + "SettingsChanged()"); + fNumEntries->Connect("ValueChanged(Long_t)", "TEditQueryFrame", this, + "SettingsChanged()"); + fNumFirstEntry->Connect("ValueChanged(Long_t)", "TEditQueryFrame", this, + "SettingsChanged()"); + fTxtEventList->Connect("TextChanged(char*)", "TEditQueryFrame", this, + "SettingsChanged()"); } //______________________________________________________________________________ @@ -2180,7 +2194,7 @@ void TEditQueryFrame::OnBrowseSelector() fi.fFileTypes = macrotypes; new TGFileDialog(fClient->GetRoot(), this, kFDOpen, &fi); if (!fi.fFilename) return; - fTxtSelector->SetText(gSystem->BaseName(fi.fFilename)); + fTxtSelector->SetText(gSystem->UnixPathName(fi.fFilename)); } //______________________________________________________________________________ @@ -2235,15 +2249,44 @@ void TEditQueryFrame::OnBtnSave() fTxtQueryName->SelectAll(); fTxtQueryName->SetFocus(); fViewer->WriteConfiguration(); - if (fViewer->GetActDesc()->fConnected && + if (fViewer->GetActDesc()->fLocal || + (fViewer->GetActDesc()->fConnected && fViewer->GetActDesc()->fAttached && fViewer->GetActDesc()->fProof && - fViewer->GetActDesc()->fProof->IsValid()) { + fViewer->GetActDesc()->fProof->IsValid())) { fViewer->GetQueryFrame()->GetTab()->SetTab("Status"); fViewer->GetQueryFrame()->OnBtnSubmit(); } } +//______________________________________________________________________________ +void TEditQueryFrame::SettingsChanged() +{ + // Settings have changed, update GUI accordingly. + + if (fQuery) { + if ((strcmp(fQuery->fSelectorString.Data(), fTxtSelector->GetText())) || + (strcmp(fQuery->fQueryName.Data(), fTxtQueryName->GetText())) || + (strcmp(fQuery->fOptions.Data(), fTxtOptions->GetText())) || + (fQuery->fNoEntries != fNumEntries->GetIntNumber()) || + (fQuery->fFirstEntry != fNumFirstEntry->GetIntNumber()) || + (fQuery->fChain != fChain)) { + fViewer->GetQueryFrame()->Modified(kTRUE); + } + else { + fViewer->GetQueryFrame()->Modified(kFALSE); + } + } + else { + if ((fTxtQueryName->GetText()) && + ((fTxtQueryName->GetText()) || + (fTxtChain->GetText()))) + fViewer->GetQueryFrame()->Modified(kTRUE); + else + fViewer->GetQueryFrame()->Modified(kFALSE); + } +} + //______________________________________________________________________________ void TEditQueryFrame::UpdateFields(TQueryDescription *desc) { @@ -2292,6 +2335,7 @@ void TSessionQueryFrame::Build(TSessionViewer *gui) fFirst = fEntries = fPrevTotal = 0; fPrevProcessed = 0; fViewer = gui; + fModified = kFALSE; // main query tab fTab = new TGTab(this, 200, 200); @@ -2386,8 +2430,9 @@ void TSessionQueryFrame::Build(TSessionViewer *gui) fFD->Build(fViewer); tf->AddFrame(fFD, new TGLayoutHints(kLHintsTop | kLHintsLeft, 5, 5, 10, 0)); TString btntxt; - if (fViewer->GetActDesc()->fProof && - fViewer->GetActDesc()->fProof->IsValid()) { + if (fViewer->GetActDesc()->fLocal || + (fViewer->GetActDesc()->fProof && + fViewer->GetActDesc()->fProof->IsValid())) { btntxt = " Submit "; } else { @@ -2411,9 +2456,28 @@ void TSessionQueryFrame::Build(TSessionViewer *gui) "OnBtnShowLog()"); fBtnRetrieve->Connect("Clicked()", "TSessionQueryFrame", this, "OnBtnRetrieve()"); +// fBtnSave->SetState(kButtonDisabled); Resize(350, 310); } +//______________________________________________________________________________ +void TSessionQueryFrame::Modified(Bool_t mod) +{ + // Notify changes in query editor settings. + + fModified = mod; + if (fModified) { + fBtnSave->SetState(kButtonUp); + } + else { + fBtnSave->SetState(kButtonDisabled); + } + if (fViewer->GetActDesc()->fLocal || + (fViewer->GetActDesc()->fProof && + fViewer->GetActDesc()->fProof->IsValid())) + fBtnSave->SetState(kButtonUp); +} + //______________________________________________________________________________ void TSessionQueryFrame::Feedback(TList *objs) { @@ -3148,10 +3212,11 @@ void TSessionQueryFrame::UpdateInfos() if (fViewer->GetActDesc()->fActQuery) fFD->UpdateFields(fViewer->GetActDesc()->fActQuery); - if (fViewer->GetActDesc()->fConnected && + if (fViewer->GetActDesc()->fLocal || + (fViewer->GetActDesc()->fConnected && fViewer->GetActDesc()->fAttached && fViewer->GetActDesc()->fProof && - fViewer->GetActDesc()->fProof->IsValid()) { + fViewer->GetActDesc()->fProof->IsValid())) { fBtnSave->SetText(" Submit "); } else { diff --git a/sessionviewer/inc/TSessionDialogs.h b/sessionviewer/inc/TSessionDialogs.h index d72d996735f..9e9af1dc996 100644 --- a/sessionviewer/inc/TSessionDialogs.h +++ b/sessionviewer/inc/TSessionDialogs.h @@ -1,4 +1,4 @@ -// @(#)root/proof:$Name: $:$Id: TSessionDialogs.h,v 1.1 2006/11/17 15:50:17 rdm Exp $ +// @(#)root/proof:$Name: $:$Id: TSessionDialogs.h,v 1.2 2007/02/01 14:21:28 brun Exp $ // Author: Marek Biskup, Jakub Madejczyk, Bertrand Bellenot 10/08/2005 /************************************************************************* @@ -79,7 +79,8 @@ public: class TNewQueryDlg : public TGTransientFrame { private: - Bool_t fEditMode; // kTRUE if used to edit existing query + Bool_t fEditMode; // kTRUE if used to edit existing query + Bool_t fModified; // kTRUE if settings have changed TGCompositeFrame *fFrmNewQuery; // top (main) frame TGCompositeFrame *fFrmMore; // options frame TGTextButton *fBtnMore; // "more >>" / "less <<" button @@ -113,6 +114,7 @@ public: void OnElementSelected(TObject *obj); void CloseWindow(); void Popup(); + void SettingsChanged(); void UpdateFields(TQueryDescription *desc); virtual Bool_t ProcessMessage(Long_t msg, Long_t parm1, Long_t parm2); diff --git a/sessionviewer/inc/TSessionViewer.h b/sessionviewer/inc/TSessionViewer.h index de625c8ad85..84d6dea4549 100644 --- a/sessionviewer/inc/TSessionViewer.h +++ b/sessionviewer/inc/TSessionViewer.h @@ -1,4 +1,4 @@ -// @(#)root/proof:$Name: $:$Id: TSessionViewer.h,v 1.2 2006/11/22 14:16:54 rdm Exp $ +// @(#)root/proof:$Name: $:$Id: TSessionViewer.h,v 1.3 2006/11/28 12:10:52 rdm Exp $ // Author: Marek Biskup, Jakub Madejczyk, Bertrand Bellenot 10/08/2005 /************************************************************************* @@ -382,6 +382,7 @@ public: void OnBrowseEventList(); void OnBtnSave(); void OnElementSelected(TObject *obj); + void SettingsChanged(); void UpdateFields(TQueryDescription *desc); ClassDef(TEditQueryFrame, 0) // Edit query frame @@ -410,6 +411,7 @@ private: TGTextButton *fBtnSave; // save query button TGTextView *fInfoTextView; // summary on current query + Bool_t fModified; // kTRUE if settings have changed Int_t fFiles; // number of files processed Long64_t fFirst; // first event/entry to process Long64_t fEntries; // number of events/entries to process @@ -440,6 +442,7 @@ public: TGTab *GetTab() const { return fTab; } void Feedback(TList *objs); + void Modified(Bool_t mod = kTRUE); void Progress(Long64_t total, Long64_t processed); void Progress(Long64_t total, Long64_t processed, Long64_t bytesread, Float_t initTime, diff --git a/sessionviewer/src/TSessionDialogs.cxx b/sessionviewer/src/TSessionDialogs.cxx index 1f70cde8a73..fede777cf7a 100644 --- a/sessionviewer/src/TSessionDialogs.cxx +++ b/sessionviewer/src/TSessionDialogs.cxx @@ -1,4 +1,4 @@ -// @(#)root/proof:$Name: $:$Id: TSessionDialogs.cxx,v 1.4 2007/01/30 11:24:32 brun Exp $ +// @(#)root/proof:$Name: $:$Id: TSessionDialogs.cxx,v 1.5 2007/01/31 16:46:10 rdm Exp $ // Author: Marek Biskup, Jakub Madejczyk, Bertrand Bellenot 10/08/2005 /************************************************************************* @@ -216,6 +216,7 @@ void TNewChainDlg::UpdateList() // loop on the list of chains/datasets in memory, // and fill the associated listview while ((obj = (TObject *)next())) { + item = 0; if (obj->IsA() == TChain::Class()) { const char *title = ((TChain *)obj)->GetTitle(); if (strlen(title) == 0) @@ -227,8 +228,10 @@ void TNewChainDlg::UpdateList() item = new TGLVEntry(fLVContainer, ((TDSet *)obj)->GetObjName(), ((TDSet *)obj)->GetName()); } - item->SetUserData(obj); - fLVContainer->AddItem(item); + if (item) { + item->SetUserData(obj); + fLVContainer->AddItem(item); + } } fClient->NeedRedraw(fLVContainer); Resize(); @@ -341,6 +344,7 @@ TNewQueryDlg::TNewQueryDlg(TSessionViewer *gui, Int_t Width, Int_t Height, Window_t wdummy; Int_t ax, ay; fEditMode = editmode; + fModified = kFALSE; fChain = 0; fQuery = query; if (fQuery && fQuery->fChain) { @@ -487,6 +491,21 @@ void TNewQueryDlg::Build(TSessionViewer *gui) fNumFirstEntry->Associate(this); fTxtEventList->Associate(this); + fTxtQueryName->Connect("TextChanged(char*)", "TNewQueryDlg", this, + "SettingsChanged()"); + fTxtChain->Connect("TextChanged(char*)", "TNewQueryDlg", this, + "SettingsChanged()"); + fTxtSelector->Connect("TextChanged(char*)", "TNewQueryDlg", this, + "SettingsChanged()"); + fTxtOptions->Connect("TextChanged(char*)", "TNewQueryDlg", this, + "SettingsChanged()"); + fNumEntries->Connect("ValueChanged(Long_t)", "TNewQueryDlg", this, + "SettingsChanged()"); + fNumFirstEntry->Connect("ValueChanged(Long_t)", "TNewQueryDlg", this, + "SettingsChanged()"); + fTxtEventList->Connect("TextChanged(char*)", "TNewQueryDlg", this, + "SettingsChanged()"); + TGCompositeFrame *tmp; AddFrame(tmp = new TGCompositeFrame(this, 140, 20, kHorizontalFrame), new TGLayoutHints(kLHintsLeft | kLHintsExpandX)); @@ -510,6 +529,8 @@ void TNewQueryDlg::Build(TSessionViewer *gui) tmp->AddFrame(fBtnClose = new TGTextButton(tmp, "Close"), new TGLayoutHints(kLHintsLeft | kLHintsExpandX, 3, 3, 3, 3)); fBtnClose->Connect("Clicked()", "TNewQueryDlg", this, "OnBtnCloseClicked()"); + fBtnSave->SetState(kButtonDisabled); + fBtnSubmit->SetState(kButtonDisabled); } //______________________________________________________________________________ @@ -568,7 +589,7 @@ void TNewQueryDlg::OnBrowseSelector() fi.fFileTypes = filetypes; new TGFileDialog(fClient->GetRoot(), this, kFDOpen, &fi); if (!fi.fFilename) return; - fTxtSelector->SetText(gSystem->BaseName(fi.fFilename)); + fTxtSelector->SetText(gSystem->UnixPathName(fi.fFilename)); } //______________________________________________________________________________ @@ -668,6 +689,7 @@ void TNewQueryDlg::OnBtnSaveClicked() fTxtQueryName->SelectAll(); fTxtQueryName->SetFocus(); fViewer->WriteConfiguration(); + fModified = kFALSE; } //______________________________________________________________________________ @@ -684,7 +706,18 @@ void TNewQueryDlg::OnBtnCloseClicked() { // Close dialog. - DeleteWindow(); + Int_t result = kMBNo; + if (fModified) { + new TGMsgBox(fClient->GetRoot(), this, "Modified Settings", + "Do you wish to SAVE changes ?", 0, + kMBYes | kMBNo | kMBCancel, &result); + if (result == kMBYes) { + OnBtnSaveClicked(); + } + } + if (result == kMBNo) { + DeleteWindow(); + } } //______________________________________________________________________________ @@ -696,6 +729,42 @@ void TNewQueryDlg::Popup() fTxtQueryName->SetFocus(); } +//______________________________________________________________________________ +void TNewQueryDlg::SettingsChanged() +{ + // Settings have changed, update GUI accordingly. + + if (fEditMode && fQuery) { + if ((strcmp(fQuery->fSelectorString.Data(), fTxtSelector->GetText())) || + (strcmp(fQuery->fQueryName.Data(), fTxtQueryName->GetText())) || + (strcmp(fQuery->fOptions.Data(), fTxtOptions->GetText())) || + (fQuery->fNoEntries != fNumEntries->GetIntNumber()) || + (fQuery->fFirstEntry != fNumFirstEntry->GetIntNumber()) || + (fQuery->fChain != fChain)) { + fModified = kTRUE; + } + else { + fModified = kFALSE; + } + } + else { + if ((fTxtQueryName->GetText()) && + ((fTxtQueryName->GetText()) || + (fTxtChain->GetText()))) + fModified = kTRUE; + else + fModified = kFALSE; + } + if (fModified) { + fBtnSave->SetState(kButtonUp); + fBtnSubmit->SetState(kButtonUp); + } + else { + fBtnSave->SetState(kButtonDisabled); + fBtnSubmit->SetState(kButtonDisabled); + } +} + //______________________________________________________________________________ void TNewQueryDlg::UpdateFields(TQueryDescription *desc) { diff --git a/sessionviewer/src/TSessionViewer.cxx b/sessionviewer/src/TSessionViewer.cxx index 9140cfe724c..296936c8d92 100644 --- a/sessionviewer/src/TSessionViewer.cxx +++ b/sessionviewer/src/TSessionViewer.cxx @@ -1,4 +1,4 @@ -// @(#)root/proof:$Name: $:$Id: TSessionViewer.cxx,v 1.7 2007/01/31 16:46:10 rdm Exp $ +// @(#)root/proof:$Name: $:$Id: TSessionViewer.cxx,v 1.8 2007/02/01 14:58:44 brun Exp $ // Author: Marek Biskup, Jakub Madejczyk, Bertrand Bellenot 10/08/2005 /************************************************************************* @@ -2130,6 +2130,20 @@ void TEditQueryFrame::Build(TSessionViewer *gui) fNumFirstEntry->Associate(this); fTxtEventList->Associate(this); + fTxtQueryName->Connect("TextChanged(char*)", "TEditQueryFrame", this, + "SettingsChanged()"); + fTxtChain->Connect("TextChanged(char*)", "TEditQueryFrame", this, + "SettingsChanged()"); + fTxtSelector->Connect("TextChanged(char*)", "TEditQueryFrame", this, + "SettingsChanged()"); + fTxtOptions->Connect("TextChanged(char*)", "TEditQueryFrame", this, + "SettingsChanged()"); + fNumEntries->Connect("ValueChanged(Long_t)", "TEditQueryFrame", this, + "SettingsChanged()"); + fNumFirstEntry->Connect("ValueChanged(Long_t)", "TEditQueryFrame", this, + "SettingsChanged()"); + fTxtEventList->Connect("TextChanged(char*)", "TEditQueryFrame", this, + "SettingsChanged()"); } //______________________________________________________________________________ @@ -2180,7 +2194,7 @@ void TEditQueryFrame::OnBrowseSelector() fi.fFileTypes = macrotypes; new TGFileDialog(fClient->GetRoot(), this, kFDOpen, &fi); if (!fi.fFilename) return; - fTxtSelector->SetText(gSystem->BaseName(fi.fFilename)); + fTxtSelector->SetText(gSystem->UnixPathName(fi.fFilename)); } //______________________________________________________________________________ @@ -2235,15 +2249,44 @@ void TEditQueryFrame::OnBtnSave() fTxtQueryName->SelectAll(); fTxtQueryName->SetFocus(); fViewer->WriteConfiguration(); - if (fViewer->GetActDesc()->fConnected && + if (fViewer->GetActDesc()->fLocal || + (fViewer->GetActDesc()->fConnected && fViewer->GetActDesc()->fAttached && fViewer->GetActDesc()->fProof && - fViewer->GetActDesc()->fProof->IsValid()) { + fViewer->GetActDesc()->fProof->IsValid())) { fViewer->GetQueryFrame()->GetTab()->SetTab("Status"); fViewer->GetQueryFrame()->OnBtnSubmit(); } } +//______________________________________________________________________________ +void TEditQueryFrame::SettingsChanged() +{ + // Settings have changed, update GUI accordingly. + + if (fQuery) { + if ((strcmp(fQuery->fSelectorString.Data(), fTxtSelector->GetText())) || + (strcmp(fQuery->fQueryName.Data(), fTxtQueryName->GetText())) || + (strcmp(fQuery->fOptions.Data(), fTxtOptions->GetText())) || + (fQuery->fNoEntries != fNumEntries->GetIntNumber()) || + (fQuery->fFirstEntry != fNumFirstEntry->GetIntNumber()) || + (fQuery->fChain != fChain)) { + fViewer->GetQueryFrame()->Modified(kTRUE); + } + else { + fViewer->GetQueryFrame()->Modified(kFALSE); + } + } + else { + if ((fTxtQueryName->GetText()) && + ((fTxtQueryName->GetText()) || + (fTxtChain->GetText()))) + fViewer->GetQueryFrame()->Modified(kTRUE); + else + fViewer->GetQueryFrame()->Modified(kFALSE); + } +} + //______________________________________________________________________________ void TEditQueryFrame::UpdateFields(TQueryDescription *desc) { @@ -2292,6 +2335,7 @@ void TSessionQueryFrame::Build(TSessionViewer *gui) fFirst = fEntries = fPrevTotal = 0; fPrevProcessed = 0; fViewer = gui; + fModified = kFALSE; // main query tab fTab = new TGTab(this, 200, 200); @@ -2386,8 +2430,9 @@ void TSessionQueryFrame::Build(TSessionViewer *gui) fFD->Build(fViewer); tf->AddFrame(fFD, new TGLayoutHints(kLHintsTop | kLHintsLeft, 5, 5, 10, 0)); TString btntxt; - if (fViewer->GetActDesc()->fProof && - fViewer->GetActDesc()->fProof->IsValid()) { + if (fViewer->GetActDesc()->fLocal || + (fViewer->GetActDesc()->fProof && + fViewer->GetActDesc()->fProof->IsValid())) { btntxt = " Submit "; } else { @@ -2411,9 +2456,28 @@ void TSessionQueryFrame::Build(TSessionViewer *gui) "OnBtnShowLog()"); fBtnRetrieve->Connect("Clicked()", "TSessionQueryFrame", this, "OnBtnRetrieve()"); +// fBtnSave->SetState(kButtonDisabled); Resize(350, 310); } +//______________________________________________________________________________ +void TSessionQueryFrame::Modified(Bool_t mod) +{ + // Notify changes in query editor settings. + + fModified = mod; + if (fModified) { + fBtnSave->SetState(kButtonUp); + } + else { + fBtnSave->SetState(kButtonDisabled); + } + if (fViewer->GetActDesc()->fLocal || + (fViewer->GetActDesc()->fProof && + fViewer->GetActDesc()->fProof->IsValid())) + fBtnSave->SetState(kButtonUp); +} + //______________________________________________________________________________ void TSessionQueryFrame::Feedback(TList *objs) { @@ -3148,10 +3212,11 @@ void TSessionQueryFrame::UpdateInfos() if (fViewer->GetActDesc()->fActQuery) fFD->UpdateFields(fViewer->GetActDesc()->fActQuery); - if (fViewer->GetActDesc()->fConnected && + if (fViewer->GetActDesc()->fLocal || + (fViewer->GetActDesc()->fConnected && fViewer->GetActDesc()->fAttached && fViewer->GetActDesc()->fProof && - fViewer->GetActDesc()->fProof->IsValid()) { + fViewer->GetActDesc()->fProof->IsValid())) { fBtnSave->SetText(" Submit "); } else { -- GitLab