// @(#)root/guibuilder:$Name:  $:$Id: TGuiBldQuickHandler.cxx,v 1.6 2004/10/25 12:06:50 rdm Exp $
// Author: Valeriy Onuchin   12/09/04

/*************************************************************************
 * Copyright (C) 1995-2004, Rene Brun and Fons Rademakers.               *
 * All rights reserved.                                                  *
 *                                                                       *
 * For the licensing terms see $ROOTSYS/LICENSE.                         *
 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
 *************************************************************************/

//////////////////////////////////////////////////////////////////////////
//                                                                      //
// TGuiBldQuickHandler                                                  //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

#include "TGuiBldQuickHandler.h"
#include "TGTextEntry.h"
#include "TGButton.h"
#include "TGLabel.h"
#include "TROOT.h"
#include "TSystem.h"
#include "TApplication.h"
#include "TGMimeTypes.h"
#include "THashList.h"


ClassImp(TGuiBldQuickHandler)
ClassImp(TGuiBldTextDialog)


////////////////////////////////////////////////////////////////////////////////
//______________________________________________________________________________
TGuiBldTextDialog::TGuiBldTextDialog(const char *name, const char *setter, const char *getter) :
            TGTransientFrame(gClient->GetDefaultRoot(), gClient->GetRoot(), 1, 1)
{
   //

   fEditDisabled = kTRUE;

   SetCleanup(kDeepCleanup);

   TGWindow *win = fClient->GetWindowByName(name);

   if (!win) return;

   fSelected = win;
   TString cmd = "((";
   cmd += fSelected->ClassName();
   cmd += "*)";
   cmd += Form("%d)" , win);
   cmd += "->";
   cmd += getter;

   fSavedText = (const char*)gROOT->ProcessLineFast(cmd.Data());

   TString title = "Edit ";
   title += fSelected->ClassName();
   title += "::";
   title += fSelected->GetName();
   SetWindowName(title.Data());

   title = "Call ";
   title += fSelected->ClassName();
   title += "::";
   title += setter;

   TGLabel *label = new TGLabel(this, title.Data());
   AddFrame(label, new TGLayoutHints(kLHintsNormal, 5, 5, 5, 5));

   fEntry = new TGTextEntry(this);
   AddFrame(fEntry, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 5, 5, 5, 5));
   fEntry->SetText(fSavedText.Data());
   fEntry->Resize(300, fEntry->GetDefaultHeight());
   fEntry->SelectAll();

   TGHorizontalFrame *hf = new TGHorizontalFrame(this);
   AddFrame(hf, new TGLayoutHints(kLHintsRight | kLHintsBottom,5,5,5,5));

   fOK = new TGTextButton(hf, "OK");
   hf->AddFrame(fOK, new TGLayoutHints(kLHintsBottom | kLHintsExpandX, 2, 2));

   fCancel = new TGTextButton(hf, "    Cancel     ");
   hf->AddFrame(fCancel, new TGLayoutHints(kLHintsBottom | kLHintsExpandX, 2, 2));

   UInt_t w = fOK->GetDefaultWidth();
   w = TMath::Max(w, fCancel->GetDefaultWidth());
   hf->Resize(2 * (w + 10), hf->GetDefaultHeight());

   MapSubwindows();
   Resize();
   CenterOnParent();
   MapRaised();

   fEntry->Connect("TextChanged(char*)", fSelected->ClassName(), fSelected, setter);
   fCancel->Connect("Pressed()", "TGuiBldTextDialog", this, "DoCancel()");
   fOK->Connect("Pressed()", "TGuiBldTextDialog", this, "DoOK()");

   fClient->WaitForUnmap(this);
   DeleteWindow();
}

//______________________________________________________________________________
TGuiBldTextDialog::~TGuiBldTextDialog()
{
   //

}

//______________________________________________________________________________
void TGuiBldTextDialog::DoCancel()
{
   //

   fEntry->SetText(fSavedText.Data());
   UnmapWindow();
}

//______________________________________________________________________________
void TGuiBldTextDialog::DoOK()
{
   //

   UnmapWindow();
}

//______________________________________________________________________________
void TGuiBldTextDialog::CloseWindow()
{
   //

   UnmapWindow();
}



////////////////////////////////////////////////////////////////////////////////
//______________________________________________________________________________
 TGuiBldQuickHandler::TGuiBldQuickHandler() :  TObject()
{
   //

   fSelected = 0;
}

//______________________________________________________________________________
 TGuiBldQuickHandler::~TGuiBldQuickHandler()
{
   //

   fSelected = 0;
}

//______________________________________________________________________________
 Bool_t TGuiBldQuickHandler::HandleEvent(TGWindow *win)
{
   //

   if (!win) return kFALSE;

   fSelected = win;
   char action[512];
   Bool_t ret = kFALSE;

   if (gClient->GetMimeTypeList()->GetAction(fSelected->ClassName(), action)) {
      TString act = action;
      act.ReplaceAll("%s", fSelected->GetName());

      if (act[0] == '!') {
         act.Remove(0, 1);
         gSystem->Exec(act.Data());
      } else {
         gApplication->ProcessLine(act.Data());
      }
      ret = kTRUE;
   }
   return ret;
}


ROOT page - Class index - Class Hierarchy - Top of the page

This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.