// @(#)root/eve:$Id$
// Authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007

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

#include "TEveDigitSetEditor.h"
#include "TEveDigitSet.h"

#include "TEveGValuators.h"
//#include "TEveTransEditor.h"
#include "TEveRGBAPaletteEditor.h"
#include "TEveGedEditor.h"

#include "TVirtualPad.h"
#include "TColor.h"
#include "TH1F.h"
#include "TStyle.h"

#include "TGLabel.h"
#include "TG3DLine.h"
#include "TGButton.h"
#include "TGNumberEntry.h"
#include "TGColorSelect.h"
#include "TGDoubleSlider.h"

//______________________________________________________________________________
// TEveDigitSetEditor
//
// Editor for TEveDigitSet class.

ClassImp(TEveDigitSetEditor)

//______________________________________________________________________________
TEveDigitSetEditor::TEveDigitSetEditor(const TGWindow *p, Int_t width, Int_t height,
                                       UInt_t options, Pixel_t back) :
   TGedFrame(p, width, height, options | kVerticalFrame, back),
   fM       (0),
   fPalette (0),

   fHistoButtFrame(0),
   fInfoFrame(0)
{
   // Constructor.

   MakeTitle("Palette controls");

   fPalette = new TEveRGBAPaletteSubEditor(this);
   AddFrame(fPalette, new TGLayoutHints(kLHintsTop | kLHintsExpandX, 2, 0, 0, 0));
   fPalette->Connect("Changed()", "TEveDigitSetEditor", this, "Update()");

   CreateInfoTab();
}

/******************************************************************************/

//______________________________________________________________________________
void TEveDigitSetEditor::CreateInfoTab()
{
   // Create information tab.

   fInfoFrame = CreateEditorTabSubFrame("Info");

   TGCompositeFrame *title1 = new TGCompositeFrame(fInfoFrame, 180, 10,
                                                   kHorizontalFrame |
                                                   kLHintsExpandX   |
                                                   kFixedWidth      |
                                                   kOwnBackground);

   title1->AddFrame(new TGLabel(title1, "TEveDigitSet Info"),
                    new TGLayoutHints(kLHintsLeft, 1, 1, 0, 0));
   title1->AddFrame(new TGHorizontal3DLine(title1),
                    new TGLayoutHints(kLHintsExpandX, 5, 5, 7, 7));
   fInfoFrame->AddFrame(title1, new TGLayoutHints(kLHintsTop, 0, 0, 2, 0));


   fHistoButtFrame = new TGHorizontalFrame(fInfoFrame);
   TGTextButton* b = 0;
   b = new TGTextButton(fHistoButtFrame, "Histo");
   b->SetToolTipText("Show histogram over full range.");
   fHistoButtFrame->AddFrame(b, new TGLayoutHints(kLHintsLeft|kLHintsExpandX, 1, 1, 0, 0));
   b->Connect("Clicked()", "TEveDigitSetEditor", this, "DoHisto()");

   b = new TGTextButton(fHistoButtFrame, "Range Histo");
   b->SetToolTipText("Show histogram over selected range.");
   fHistoButtFrame->AddFrame(b, new TGLayoutHints(kLHintsLeft|kLHintsExpandX, 1, 1, 0, 0));
   b->Connect("Clicked()", "TEveDigitSetEditor", this, "DoRangeHisto()");
   fInfoFrame->AddFrame(fHistoButtFrame, new TGLayoutHints(kLHintsExpandX, 2, 0, 0, 0));
}

/******************************************************************************/

//______________________________________________________________________________
void TEveDigitSetEditor::SetModel(TObject* obj)
{
   // Set model object.

   fM = dynamic_cast<TEveDigitSet*>(obj);

   if (fM->fValueIsColor || fM->fPalette == 0) {
      fPalette->UnmapWindow();
   } else {
      fPalette->SetModel(fM->fPalette);
      fPalette->MapWindow();
   }

   if (fM->fHistoButtons)
      fHistoButtFrame->MapWindow();
   else
      fHistoButtFrame->UnmapWindow();
}

/******************************************************************************/

//______________________________________________________________________________
void TEveDigitSetEditor::DoHisto()
{
   // Show histogram slot.

   Int_t min, max;
   if (fM->fPalette) {
      min = fM->fPalette->GetLowLimit();
      max = fM->fPalette->GetHighLimit();
   } else {
      fM->ScanMinMaxValues(min, max);
   }
   PlotHisto(min, max);
}

//______________________________________________________________________________
void TEveDigitSetEditor::DoRangeHisto()
{
   // Show ranged histogram slot.

   Int_t min, max;
   if (fM->fPalette) {
      min = fM->fPalette->GetMinVal();
      max = fM->fPalette->GetMaxVal();
   } else {
      fM->ScanMinMaxValues(min, max);
   }
   PlotHisto(min, max);
}

//______________________________________________________________________________
void TEveDigitSetEditor::PlotHisto(Int_t min, Int_t max)
{
   // Plots a histogram from digit vales with given range.

   Int_t nbins = max-min+1;
   while (nbins > 200)
      nbins /= 2;

   TH1F* h = new TH1F(fM->GetName(), fM->GetTitle(), nbins, min-0.5, max+0.5);
   h->SetDirectory(0);
   h->SetBit(kCanDelete);
   TEveChunkManager::iterator qi(fM->fPlex);
   while (qi.next())
      h->Fill(((TEveDigitSet::DigitBase_t*)qi())->fValue);

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