ROOT logo
/**************************************************************************
* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
*                                                                        *
* Author: The ALICE Off-line Project.                                    *
* Contributors are mentioned in the code where appropriate.              *
*                                                                        *
* Permission to use, copy, modify and distribute this software and its   *
* documentation strictly for non-commercial purposes is hereby granted   *
* without fee, provided that the above copyright notice appears in all   *
* copies and that both the copyright notice and this permission notice   *
* appear in the supporting documentation. The authors make no claims     *
* about the suitability of this software for any purpose. It is          *
* provided "as is" without express or implied warranty.                  *
**************************************************************************/

// $Id$

#include "AliMUONPainterColorSlider.h"
#include "AliMUONPainterHelper.h"
#include "AliLog.h"
#include <TGNumberEntry.h>
#include <TGButton.h>
#include <TMath.h>

///\class AliMUONPainterColorSlider
///
/// A painter color palette
///
///\author Laurent Aphecetche, Subatech

///\cond CLASSIMP
ClassImp(AliMUONPainterColorSlider)
///\endcond

//_____________________________________________________________________________
AliMUONPainterColorSlider::AliMUONPainterColorSlider(const TGWindow* p, 
                                                     UInt_t w, UInt_t h)
: TGCompositeFrame(p,w,h,kVerticalFrame),
  fEntryMin(0x0),
  fEntryMax(0x0),
  fMin(FLT_MAX),
  fMax(-FLT_MAX),
  fAutoButton(new TGTextButton(this,"Auto")),
  fLockButton(new TGTextButton(this,"Lock"))
{
    /// ctor
    Int_t ndivisions(20);
  
    Int_t hsize = (h-100)/(ndivisions+2);
  Int_t topBorder(5);
  
  Double_t min(0.0);
  Double_t max(1.0);
  
  Double_t step = (max-min)/ndivisions;
  
  for ( Int_t i = -1; i < ndivisions+1; ++i ) 
  {
    Double_t value = max - (min + step*i);
    
    Int_t color = AliMUONPainterHelper::Instance()->ColorFromValue(value,
                                                                   min,max);
    Pixel_t pixel = gVirtualX->GetPixel(color);
    TGVerticalFrame* frame = new TGVerticalFrame(this,w,hsize,kFixedSize,pixel);
    
    AddFrame(frame,new TGLayoutHints(kLHintsExpandX,0,0,topBorder,0));
    
    topBorder = 0;
  }
  
  fEntryMax = new TGNumberEntry(this);
  
  AddFrame(fEntryMax,new TGLayoutHints(kLHintsExpandX,0,0,topBorder,0));
    
  fEntryMin = new TGNumberEntry(this);
  
  AddFrame(fEntryMin,new TGLayoutHints(kLHintsExpandX,0,0,topBorder,0));
  
  AddFrame(fAutoButton,new TGLayoutHints(kLHintsExpandX,0,0,topBorder,0));
  
  fAutoButton->Connect("Clicked()","AliMUONPainterColorSlider",this,"DataRangeAutoRequested()");
  
  AddFrame(fLockButton,new TGLayoutHints(kLHintsExpandX,0,0,topBorder,0));
  
  fLockButton->Connect("Clicked()","AliMUONPainterColorSlider",this,"LockButtonWasClicked()");
  
  fEntryMax->Connect("ValueSet(Long_t)","AliMUONPainterColorSlider",this,"DataRangeWasChanged(Double_t*)");
  fEntryMin->Connect("ValueSet(Long_t)","AliMUONPainterColorSlider",this,"DataRangeWasChanged(Double_t*)");
}

//_____________________________________________________________________________
AliMUONPainterColorSlider::~AliMUONPainterColorSlider()
{
  /// dtor
}

//_____________________________________________________________________________
void 
AliMUONPainterColorSlider::DataRangeAutoRequested()
{
  /// Signal that the "Auto" button was clicked
  AliDebug(1,"");
  Emit("DataRangeAutoRequested()");
}

//_____________________________________________________________________________
void 
AliMUONPainterColorSlider::DataRangeWasChanged(Double_t*)
{
  /// Data range was changed
  
  Double_t values[] = { fEntryMin->GetNumber(), fEntryMax->GetNumber() };
  
  Long_t param[] = { (Long_t)values };
  
  AliDebug(1,Form("double min %e max %e",values[0],values[1]));
  
  Emit("DataRangeWasChanged(Double_t*)",param);
}

//_____________________________________________________________________________
Bool_t 
AliMUONPainterColorSlider::IsLocked() const
{
  /// Whether our range is locked or not

  return (fLockButton->GetString() == "Unlock"); // if we can unlock it means we are locked...
}

//_____________________________________________________________________________
void 
AliMUONPainterColorSlider::LockButtonWasClicked()
{
  /// Lock (toggle button) was clicked
  
  if ( IsLocked() )
  {
    // unlock it
    fLockButton->SetText("Lock");
    fEntryMin->SetState(kTRUE);
    fEntryMax->SetState(kTRUE);
    fAutoButton->SetEnabled(kTRUE);
  }
  else
  {
    // lock it
    fLockButton->SetText("Unlock");
    fEntryMin->SetState(kFALSE);
    fEntryMax->SetState(kFALSE);
    fAutoButton->SetEnabled(kFALSE);
  }
}

//_____________________________________________________________________________
void 
AliMUONPainterColorSlider::SetRange(Double_t min, Double_t max, Bool_t emit)
{
  /// Set the data range
  
  AliDebug(1,Form("min %e max %e emit %d",min,max,emit));
  
  if ( !IsLocked() ) 
  {
    fMin = min;
    fMax = max;
  
    fEntryMin->SetNumber(fMin);
    fEntryMax->SetNumber(fMax);
  }
  
  if ( emit ) 
  {
    DataRangeWasChanged(0x0);
  }
}

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