// @(#)root/gui:$Id$
// Author: Fons Rademakers   14/01/98

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

    This source is based on Xclass95, a Win95-looking GUI toolkit.
    Copyright (C) 1996, 1997 David Barth, Ricky Ralston, Hector Peraza.

    Xclass95 is free software; you can redistribute it and/or
    modify it under the terms of the GNU Library General Public
    License as published by the Free Software Foundation; either
    version 2 of the License, or (at your option) any later version.

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

//////////////////////////////////////////////////////////////////////////
//                                                                      //
// TGSlider, TGVSlider and TGHSlider                                    //
//                                                                      //
// Slider widgets allow easy selection of a range.                      //
// Sliders can be either horizontal or vertical oriented and there is   //
// a choice of two different slider types and three different types     //
// of tick marks.                                                       //
//                                                                      //
// TGSlider is an abstract base class. Use the concrete TGVSlider and   //
// TGHSlider.                                                           //
//                                                                      //
// Dragging the slider will generate the event:                         //
// kC_VSLIDER, kSL_POS, slider id, position  (for vertical slider)      //
// kC_HSLIDER, kSL_POS, slider id, position  (for horizontal slider)    //
//                                                                      //
// Pressing the mouse will generate the event:                          //
// kC_VSLIDER, kSL_PRESS, slider id, 0  (for vertical slider)           //
// kC_HSLIDER, kSL_PRESS, slider id, 0  (for horizontal slider)         //
//                                                                      //
// Releasing the mouse will generate the event:                         //
// kC_VSLIDER, kSL_RELEASE, slider id, 0  (for vertical slider)         //
// kC_HSLIDER, kSL_RELEASE, slider id, 0  (for horizontal slider)       //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

#include "TGSlider.h"
#include "TGPicture.h"
#include "TImage.h"
#include "TEnv.h"
#include "Riostream.h"

ClassImp(TGSlider)
ClassImp(TGVSlider)
ClassImp(TGHSlider)


//______________________________________________________________________________
TGSlider::TGSlider(const TGWindow *p, UInt_t w, UInt_t h, UInt_t type, Int_t id,
                   UInt_t options, ULong_t back)
   : TGFrame(p, w, h, options, back)
{
   // Slider constructor.

   fDisabledPic = 0;
   fWidgetId    = id;
   fWidgetFlags = kWidgetWantFocus | kWidgetIsEnabled;
   fMsgWindow   = p;

   fType     = type;
   fScale    = 10;
   fDragging = kFALSE;
   fPos = fRelPos = 0;
   fVmax = fVmin = 0;
   fSliderPic = 0;
}

//______________________________________________________________________________
void TGSlider::CreateDisabledPicture()
{
   // Creates disabled picture.

   if (!fSliderPic) return;

   TImage *img = TImage::Create();
   if (!img) return;
   TImage *img2 = TImage::Create();
   if (!img2) {
      if (img) delete img;
      return;
   }
   TString back = gEnv->GetValue("Gui.BackgroundColor", "#c0c0c0");
   img2->FillRectangle(back.Data(), 0, 0, fSliderPic->GetWidth(),
                       fSliderPic->GetHeight());
   img->SetImage(fSliderPic->GetPicture(), fSliderPic->GetMask());
   Pixmap_t mask = img->GetMask();
   img2->Merge(img, "overlay");

   TString name = "disbl_";
   name += fSliderPic->GetName();
   fDisabledPic = fClient->GetPicturePool()->GetPicture(name.Data(),
                                             img2->GetPixmap(), mask);
   delete img;
   delete img2;
}

//______________________________________________________________________________
void TGSlider::SetState(Bool_t state)
{
   // Set state of widget. If kTRUE=enabled, kFALSE=disabled.

   if (state) {
      SetFlags(kWidgetIsEnabled);
   } else {
      ClearFlags(kWidgetIsEnabled);
   }
   fClient->NeedRedraw(this);
}

//______________________________________________________________________________
TGVSlider::TGVSlider(const TGWindow *p, UInt_t h, UInt_t type, Int_t id,
                     UInt_t options, ULong_t back) :
   TGSlider(p, kSliderWidth, h, type, id, options, back)
{
   // Create a vertical slider widget.

   if ((fType & kSlider1))
      fSliderPic = fClient->GetPicture("slider1h.xpm");
   else
      fSliderPic = fClient->GetPicture("slider2h.xpm");

   if (!fSliderPic)
      Error("TGVSlider", "slider?h.xpm not found");

   CreateDisabledPicture();

   gVirtualX->GrabButton(fId, kAnyButton, kAnyModifier,
                         kButtonPressMask | kButtonReleaseMask |
                         kPointerMotionMask, kNone, kNone);

   AddInput(kStructureNotifyMask);
   // set initial values
   fPos = h/2; fVmin = 0; fVmax = h; fYp = 0;
   fEditDisabled = kEditDisableWidth;

   if (!p && fClient->IsEditable()) {
      Resize(GetDefaultWidth(), 100);
   }
}

//______________________________________________________________________________
TGVSlider::~TGVSlider()
{
   // Delete vertical slider widget.

   if (fSliderPic) fClient->FreePicture(fSliderPic);
   if (fDisabledPic) fClient->FreePicture(fDisabledPic);
}

//______________________________________________________________________________
void TGVSlider::DoRedraw()
{
   // Redraw vertical slider widget.

   // cleanup the drawable
   gVirtualX->ClearWindow(fId);

   GContext_t drawGC = IsEnabled() ? GetBlackGC()() : GetShadowGC()();

   gVirtualX->DrawLine(fId, GetShadowGC()(), fWidth/2, 8, fWidth/2-1, 8);
   gVirtualX->DrawLine(fId, GetShadowGC()(), fWidth/2-1, 8, fWidth/2-1, fHeight-9);
   gVirtualX->DrawLine(fId, GetHilightGC()(), fWidth/2+1, 8, fWidth/2+1, fHeight-8);
   gVirtualX->DrawLine(fId, GetHilightGC()(), fWidth/2+1, fHeight-8, fWidth/2, fHeight-8);
   gVirtualX->DrawLine(fId, drawGC, fWidth/2, 9, fWidth/2, fHeight-9);

   // check scale
   if (fScale == 1) fScale++;
   if (fScale * 2 > (int)fHeight) fScale = 0;
   if (fScale > 0 && !(fType & kScaleNo)) {
      int lines = ((int)fHeight-16) / fScale;
      int remain = ((int)fHeight-16) % fScale;
      if (lines < 1) lines = 1;
      for (int i = 0; i <= lines; i++) {
         int y = i * fScale + (i * remain) / lines;
         gVirtualX->DrawLine(fId, drawGC, fWidth/2+8, y+7, fWidth/2+10, y+7);
         if ((fType & kSlider2) && (fType & kScaleBoth))
            gVirtualX->DrawLine(fId, drawGC, fWidth/2-9, y+7, fWidth/2-11, y+7);
      }
   }
   if (fPos < fVmin) fPos = fVmin;
   if (fPos > fVmax) fPos = fVmax;

   // calc slider-picture position
   fRelPos = (((int)fHeight-16) * (fPos - fVmin)) / (fVmax - fVmin) + 8;
   const TGPicture *pic = fSliderPic;
   if (!IsEnabled()) {
      if (!fDisabledPic) CreateDisabledPicture();
      pic = fDisabledPic ? fDisabledPic : fSliderPic;
   }
   if (pic) pic->Draw(fId, GetBckgndGC()(), fWidth/2-7, fRelPos-6);
}

//______________________________________________________________________________
Bool_t TGVSlider::HandleButton(Event_t *event)
{
   // Handle mouse button event in vertical slider.

   if (!IsEnabled()) return kTRUE;
   if (event->fCode == kButton4 || event->fCode == kButton5) {
      Int_t oldPos = fPos;
      int m = (fVmax - fVmin) / (fWidth-16);
      if (event->fCode == kButton4)
         fPos -= ((m) ? m : 1);
      else if (event->fCode == kButton5)
         fPos += ((m) ? m : 1);
      if (fPos > fVmax) fPos = fVmax;
      if (fPos < fVmin) fPos = fVmin;
      SendMessage(fMsgWindow, MK_MSG(kC_HSLIDER, kSL_POS),
                  fWidgetId, fPos);
      fClient->ProcessLine(fCommand, MK_MSG(kC_HSLIDER, kSL_POS),
                           fWidgetId, fPos);
      if (fPos != oldPos) {
         PositionChanged(fPos);
         fClient->NeedRedraw(this);
      }
      return kTRUE;
   }
   if (event->fType == kButtonPress) {
      // constrain to the slider width
      if (event->fX < (Int_t)fWidth/2-7 || event->fX > (Int_t)fWidth/2+7) {
         return kTRUE;
      }
      // last argument kFALSE forces all specified events to this window
      gVirtualX->GrabPointer(fId, kButtonPressMask | kButtonReleaseMask |
                             kPointerMotionMask, kNone, kNone,
                             kTRUE, kFALSE);

      if (event->fY >= fRelPos - 7 && event->fY <= fRelPos + 7) {
         // slider selected
         fDragging = kTRUE;
         fYp = event->fY - (fRelPos-7);
         SendMessage(fMsgWindow, MK_MSG(kC_VSLIDER, kSL_PRESS), fWidgetId, 0);
         fClient->ProcessLine(fCommand, MK_MSG(kC_VSLIDER, kSL_PRESS), fWidgetId, 0);
         Pressed();
      } else {
         if (event->fCode == kButton1) {
            // scroll up or down
            int m = (fVmax - fVmin) / (fHeight-16);
            if (event->fY < fRelPos) {
               fPos -= ((m) ? m : 1);
            }
            if (event->fY > fRelPos) {
               fPos += ((m) ? m : 1);
            }
         } else if (event->fCode == kButton2) {
            // set absolute position
            fPos = ((fVmax - fVmin) * event->fY) / (fHeight-16) + fVmin;
         }
         if (fPos > fVmax) fPos = fVmax;
         if (fPos < fVmin) fPos = fVmin;
         SendMessage(fMsgWindow, MK_MSG(kC_VSLIDER, kSL_POS),
                     fWidgetId, fPos);
         fClient->ProcessLine(fCommand, MK_MSG(kC_VSLIDER, kSL_POS),
                              fWidgetId, fPos);
         PositionChanged(fPos);
      }
      fClient->NeedRedraw(this);

   } else {
      // ButtonRelease
      fDragging = kFALSE;
      gVirtualX->GrabPointer(0, 0, 0, 0, kFALSE);  // ungrab pointer

      SendMessage(fMsgWindow, MK_MSG(kC_VSLIDER, kSL_RELEASE), fWidgetId, 0);
      fClient->ProcessLine(fCommand, MK_MSG(kC_VSLIDER, kSL_RELEASE), fWidgetId, 0);
      Released();
   }
   return kTRUE;
}

//______________________________________________________________________________
Bool_t TGVSlider::HandleMotion(Event_t *event)
{
   // Handle mouse motion event in vertical slider.

   if (fDragging) {
      int old = fPos;
      fPos = ((fVmax - fVmin) * (event->fY - fYp)) / ((int)fHeight-16) + fVmin;
      if (fPos > fVmax) fPos = fVmax;
      if (fPos < fVmin) fPos = fVmin;

      // check if position changed
      if (old != fPos) {
         fClient->NeedRedraw(this);
         SendMessage(fMsgWindow, MK_MSG(kC_VSLIDER, kSL_POS),
                     fWidgetId, fPos);
         fClient->ProcessLine(fCommand, MK_MSG(kC_VSLIDER, kSL_POS),
                              fWidgetId, fPos);
         PositionChanged(fPos);
      }
   }
   return kTRUE;
}

//______________________________________________________________________________
Bool_t TGVSlider::HandleConfigureNotify(Event_t* event)
{
   // Handles resize events for this widget.

   TGFrame::HandleConfigureNotify(event);
   fClient->NeedRedraw(this);
   return kTRUE;
}

//______________________________________________________________________________
TGHSlider::TGHSlider(const TGWindow *p, UInt_t w, UInt_t type, Int_t id,
                     UInt_t options, ULong_t back) :
   TGSlider(p, w, kSliderHeight, type, id, options, back)
{
   // Create horizontal slider widget.

   if ((fType & kSlider1))
      fSliderPic = fClient->GetPicture("slider1v.xpm");
   else
      fSliderPic = fClient->GetPicture("slider2v.xpm");

   if (!fSliderPic)
      Error("TGHSlider", "slider?v.xpm not found");

   CreateDisabledPicture();

   gVirtualX->GrabButton(fId, kAnyButton, kAnyModifier,
                         kButtonPressMask | kButtonReleaseMask |
                         kPointerMotionMask, kNone, kNone);

   AddInput(kStructureNotifyMask);
   // set initial values
   fPos = w/2; fVmin = 0; fVmax = w; fXp = 0;
   fEditDisabled = kEditDisableHeight;

   if (!p && fClient->IsEditable()) {
      Resize(100, GetDefaultHeight());
   }
}

//______________________________________________________________________________
TGHSlider::~TGHSlider()
{
   // Delete a horizontal slider widget.

   if (fSliderPic) fClient->FreePicture(fSliderPic);
   if (fDisabledPic) fClient->FreePicture(fDisabledPic);
}

//______________________________________________________________________________
void TGHSlider::DoRedraw()
{
   // Redraw horizontal slider widget.

   // cleanup drawable
   gVirtualX->ClearWindow(fId);

   GContext_t drawGC = IsEnabled() ? GetBlackGC()() : GetShadowGC()();

   gVirtualX->DrawLine(fId, GetShadowGC()(), 8, fHeight/2, 8, fHeight/2-1);
   gVirtualX->DrawLine(fId, GetShadowGC()(), 8, fHeight/2-1, fWidth-9, fHeight/2-1);
   gVirtualX->DrawLine(fId, GetHilightGC()(), 8, fHeight/2+1, fWidth-8, fHeight/2+1);
   gVirtualX->DrawLine(fId, GetHilightGC()(), fWidth-8, fHeight/2+1, fWidth-8, fHeight/2);
   gVirtualX->DrawLine(fId, drawGC, 9, fHeight/2, fWidth-9, fHeight/2);

   if (fScale == 1) fScale++;
   if (fScale * 2 > (int)fWidth) fScale = 0;
   if (fScale > 0 && !(fType & kScaleNo)) {
      int lines = ((int)fWidth-16) / fScale;
      int remain = ((int)fWidth-16) % fScale;
      if (lines < 1) lines = 1;
      for (int i = 0; i <= lines; i++) {
         int x = i * fScale + (i * remain) / lines;
         gVirtualX->DrawLine(fId, drawGC, x+7, fHeight/2+8, x+7, fHeight/2+10);
         if ((fType & kSlider2) && (fType & kScaleBoth))
            gVirtualX->DrawLine(fId, drawGC, x+7, fHeight/2-9, x+7, fHeight/2-11);
      }
   }
   if (fPos < fVmin) fPos = fVmin;
   if (fPos > fVmax) fPos = fVmax;

   // calc slider-picture position
   fRelPos = (((int)fWidth-16) * (fPos - fVmin)) / (fVmax - fVmin) + 8;
   const TGPicture *pic = fSliderPic;
   if (!IsEnabled()) {
      if (!fDisabledPic) CreateDisabledPicture();
      pic = fDisabledPic ? fDisabledPic : fSliderPic;
   }
   if (pic) pic->Draw(fId, GetBckgndGC()(), fRelPos-6, fHeight/2-7);
}

//______________________________________________________________________________
Bool_t TGHSlider::HandleButton(Event_t *event)
{
   // Handle mouse button event in horizontal slider widget.

   if (!IsEnabled()) return kTRUE;
   if (event->fCode == kButton4 || event->fCode == kButton5) {
      Int_t oldPos = fPos;
      int m = (fVmax - fVmin) / (fWidth-16);
      if (event->fCode == kButton4)
         fPos += ((m) ? m : 1);
      else if (event->fCode == kButton5)
         fPos -= ((m) ? m : 1);
      if (fPos > fVmax) fPos = fVmax;
      if (fPos < fVmin) fPos = fVmin;
      SendMessage(fMsgWindow, MK_MSG(kC_HSLIDER, kSL_POS),
                  fWidgetId, fPos);
      fClient->ProcessLine(fCommand, MK_MSG(kC_HSLIDER, kSL_POS),
                           fWidgetId, fPos);
      if (fPos != oldPos) {
         PositionChanged(fPos);
         fClient->NeedRedraw(this);
      }
      return kTRUE;
   }
   if (event->fType == kButtonPress) {
      // constrain to the slider height
      if (event->fY < (Int_t)fHeight/2-7 || event->fY > (Int_t)fHeight/2+7) {
         return kTRUE;
      }
      if (event->fX >= fRelPos - 7 && event->fX <= fRelPos + 7) {
         // slider selected
         fDragging = kTRUE;
         fXp = event->fX - (fRelPos-7);
         SendMessage(fMsgWindow, MK_MSG(kC_HSLIDER, kSL_PRESS), fWidgetId, 0);
         fClient->ProcessLine(fCommand, MK_MSG(kC_HSLIDER, kSL_PRESS), fWidgetId, 0);
         Pressed();
      } else {
         if (event->fCode == kButton1) {
            int m = (fVmax - fVmin) / (fWidth-16);
            if (event->fX < fRelPos) {
               fPos -= ((m) ? m : 1);
            }
            if (event->fX > fRelPos) {
               fPos += ((m) ? m : 1);
            }
         } else if (event->fCode == kButton2) {
            fPos = ((fVmax - fVmin) * event->fX) / (fWidth-16) + fVmin;
         }
         if (fPos > fVmax) fPos = fVmax;
         if (fPos < fVmin) fPos = fVmin;
         SendMessage(fMsgWindow, MK_MSG(kC_HSLIDER, kSL_POS),
                     fWidgetId, fPos);
         fClient->ProcessLine(fCommand, MK_MSG(kC_HSLIDER, kSL_POS),
                              fWidgetId, fPos);
         PositionChanged(fPos);
      }
      fClient->NeedRedraw(this);

      // last argument kFALSE forces all specified events to this window
      gVirtualX->GrabPointer(fId, kButtonPressMask | kButtonReleaseMask | kPointerMotionMask,
                             kNone, kNone, kTRUE, kFALSE);
   } else {
      // ButtonRelease
      fDragging = kFALSE;
      gVirtualX->GrabPointer(0, 0, 0, 0, kFALSE);  // ungrab pointer

      SendMessage(fMsgWindow, MK_MSG(kC_HSLIDER, kSL_RELEASE), fWidgetId, 0);
      fClient->ProcessLine(fCommand, MK_MSG(kC_HSLIDER, kSL_RELEASE), fWidgetId, 0);
      Released();
   }
   return kTRUE;
}

//______________________________________________________________________________
Bool_t TGHSlider::HandleMotion(Event_t *event)
{
   // Handle mouse motion event in horizontal slide widget.

   if (fDragging) {
      int old = fPos;
      fPos = ((fVmax - fVmin) * (event->fX - fXp)) / ((int)fWidth-16) + fVmin;
      if (fPos > fVmax) fPos = fVmax;
      if (fPos < fVmin) fPos = fVmin;

      // check if position changed
      if (old != fPos) {
         fClient->NeedRedraw(this);
         SendMessage(fMsgWindow, MK_MSG(kC_HSLIDER, kSL_POS),
                     fWidgetId, fPos);
         fClient->ProcessLine(fCommand, MK_MSG(kC_HSLIDER, kSL_POS),
                              fWidgetId, fPos);
         PositionChanged(fPos);
      }
   }
   return kTRUE;
}

//______________________________________________________________________________
Bool_t TGHSlider::HandleConfigureNotify(Event_t* event)
{
   // Handles resize events for this widget.

   TGFrame::HandleConfigureNotify(event);
   fClient->NeedRedraw(this);
   return kTRUE;
}

//______________________________________________________________________________
TString TGSlider::GetTypeString() const
{
   // Returns the slider type as a string - used in SavePrimitive().

   TString stype;

   if (fType) {
      if (fType & kSlider1)  {
         if (stype.Length() == 0) stype  = "kSlider1";
         else                     stype += " | kSlider1";
      }
      if (fType & kSlider2)  {
         if (stype.Length() == 0) stype  = "kSlider2";
         else                     stype += " | kSlider2";
      }
      if (fType & kScaleNo)  {
         if (stype.Length() == 0) stype  = "kScaleNo";
         else                     stype += " | kScaleNo";
      }
      if (fType & kScaleDownRight) {
         if (stype.Length() == 0) stype  = "kScaleDownRight";
         else                     stype += " | kScaleDownRight";
      }
      if (fType & kScaleBoth) {
         if (stype.Length() == 0) stype  = "kScaleBoth";
         else                     stype += " | kScaleBoth";
      }
   }
   return stype;
}

//______________________________________________________________________________
void TGHSlider::SavePrimitive(std::ostream &out, Option_t *option /*= ""*/)
{
    // Save an horizontal slider as a C++ statement(s) on output stream out.

   if (fBackground != GetDefaultFrameBackground()) SaveUserColor(out, option);

   out <<"   TGHSlider *";
   out << GetName() << " = new TGHSlider(" << fParent->GetName()
       << "," << GetWidth() << ",";
   out << GetTypeString() << "," << WidgetId();

   if (fBackground == GetDefaultFrameBackground()) {
      if (!GetOptions()) {
         out <<");" << std::endl;
      } else {
         out << "," << GetOptionString() <<");" << std::endl;
      }
   } else {
      out << "," << GetOptionString() << ",ucolor);" << std::endl;
   }
   if (option && strstr(option, "keep_names"))
      out << "   " << GetName() << "->SetName(\"" << GetName() << "\");" << std::endl;

   if (fVmin != 0 || fVmax != (Int_t)fWidth)
      out << "   " << GetName() <<"->SetRange(" << fVmin << "," << fVmax << ");" << std::endl;

   if (fPos != (Int_t)fWidth/2)
      out << "   " << GetName() <<"->SetPosition(" << GetPosition() << ");" << std::endl;

   if (fScale != 10)
      out << "   " << GetName() <<"->SetScale(" << fScale << ");" << std::endl;

   if (!IsEnabled())
      out << "   " << GetName() <<"->SetState(kFALSE);" << std::endl;
}

//______________________________________________________________________________
void TGVSlider::SavePrimitive(std::ostream &out, Option_t *option /*= ""*/)
{
    // Save an horizontal slider as a C++ statement(s) on output stream out.

   if (fBackground != GetDefaultFrameBackground()) SaveUserColor(out, option);

   out<<"   TGVSlider *";
   out << GetName() <<" = new TGVSlider("<< fParent->GetName()
       << "," << GetHeight() << ",";
   out << GetTypeString() << "," << WidgetId();

   if (fBackground == GetDefaultFrameBackground()) {

      if (!GetOptions()) {
         out <<");" << std::endl;
      } else {
         out << "," << GetOptionString() <<");" << std::endl;
      }
   } else {
      out << "," << GetOptionString() << ",ucolor);" << std::endl;
   }
   if (option && strstr(option, "keep_names"))
      out << "   " << GetName() << "->SetName(\"" << GetName() << "\");" << std::endl;

   if (fVmin != 0 || fVmax != (Int_t)fHeight)
      out << "   " << GetName() <<"->SetRange(" << fVmin << "," << fVmax << ");" << std::endl;

   if (fPos != (Int_t)fHeight/2)
      out << "   " << GetName() <<"->SetPosition(" << GetPosition() << ");" << std::endl;

   if (fScale != 10)
      out << "   " << GetName() <<"->SetScale(" << fScale << ");" << std::endl;

   if (!IsEnabled())
      out << "   " << GetName() <<"->SetState(kFALSE);" << std::endl;
}
 TGSlider.cxx:1
 TGSlider.cxx:2
 TGSlider.cxx:3
 TGSlider.cxx:4
 TGSlider.cxx:5
 TGSlider.cxx:6
 TGSlider.cxx:7
 TGSlider.cxx:8
 TGSlider.cxx:9
 TGSlider.cxx:10
 TGSlider.cxx:11
 TGSlider.cxx:12
 TGSlider.cxx:13
 TGSlider.cxx:14
 TGSlider.cxx:15
 TGSlider.cxx:16
 TGSlider.cxx:17
 TGSlider.cxx:18
 TGSlider.cxx:19
 TGSlider.cxx:20
 TGSlider.cxx:21
 TGSlider.cxx:22
 TGSlider.cxx:23
 TGSlider.cxx:24
 TGSlider.cxx:25
 TGSlider.cxx:26
 TGSlider.cxx:27
 TGSlider.cxx:28
 TGSlider.cxx:29
 TGSlider.cxx:30
 TGSlider.cxx:31
 TGSlider.cxx:32
 TGSlider.cxx:33
 TGSlider.cxx:34
 TGSlider.cxx:35
 TGSlider.cxx:36
 TGSlider.cxx:37
 TGSlider.cxx:38
 TGSlider.cxx:39
 TGSlider.cxx:40
 TGSlider.cxx:41
 TGSlider.cxx:42
 TGSlider.cxx:43
 TGSlider.cxx:44
 TGSlider.cxx:45
 TGSlider.cxx:46
 TGSlider.cxx:47
 TGSlider.cxx:48
 TGSlider.cxx:49
 TGSlider.cxx:50
 TGSlider.cxx:51
 TGSlider.cxx:52
 TGSlider.cxx:53
 TGSlider.cxx:54
 TGSlider.cxx:55
 TGSlider.cxx:56
 TGSlider.cxx:57
 TGSlider.cxx:58
 TGSlider.cxx:59
 TGSlider.cxx:60
 TGSlider.cxx:61
 TGSlider.cxx:62
 TGSlider.cxx:63
 TGSlider.cxx:64
 TGSlider.cxx:65
 TGSlider.cxx:66
 TGSlider.cxx:67
 TGSlider.cxx:68
 TGSlider.cxx:69
 TGSlider.cxx:70
 TGSlider.cxx:71
 TGSlider.cxx:72
 TGSlider.cxx:73
 TGSlider.cxx:74
 TGSlider.cxx:75
 TGSlider.cxx:76
 TGSlider.cxx:77
 TGSlider.cxx:78
 TGSlider.cxx:79
 TGSlider.cxx:80
 TGSlider.cxx:81
 TGSlider.cxx:82
 TGSlider.cxx:83
 TGSlider.cxx:84
 TGSlider.cxx:85
 TGSlider.cxx:86
 TGSlider.cxx:87
 TGSlider.cxx:88
 TGSlider.cxx:89
 TGSlider.cxx:90
 TGSlider.cxx:91
 TGSlider.cxx:92
 TGSlider.cxx:93
 TGSlider.cxx:94
 TGSlider.cxx:95
 TGSlider.cxx:96
 TGSlider.cxx:97
 TGSlider.cxx:98
 TGSlider.cxx:99
 TGSlider.cxx:100
 TGSlider.cxx:101
 TGSlider.cxx:102
 TGSlider.cxx:103
 TGSlider.cxx:104
 TGSlider.cxx:105
 TGSlider.cxx:106
 TGSlider.cxx:107
 TGSlider.cxx:108
 TGSlider.cxx:109
 TGSlider.cxx:110
 TGSlider.cxx:111
 TGSlider.cxx:112
 TGSlider.cxx:113
 TGSlider.cxx:114
 TGSlider.cxx:115
 TGSlider.cxx:116
 TGSlider.cxx:117
 TGSlider.cxx:118
 TGSlider.cxx:119
 TGSlider.cxx:120
 TGSlider.cxx:121
 TGSlider.cxx:122
 TGSlider.cxx:123
 TGSlider.cxx:124
 TGSlider.cxx:125
 TGSlider.cxx:126
 TGSlider.cxx:127
 TGSlider.cxx:128
 TGSlider.cxx:129
 TGSlider.cxx:130
 TGSlider.cxx:131
 TGSlider.cxx:132
 TGSlider.cxx:133
 TGSlider.cxx:134
 TGSlider.cxx:135
 TGSlider.cxx:136
 TGSlider.cxx:137
 TGSlider.cxx:138
 TGSlider.cxx:139
 TGSlider.cxx:140
 TGSlider.cxx:141
 TGSlider.cxx:142
 TGSlider.cxx:143
 TGSlider.cxx:144
 TGSlider.cxx:145
 TGSlider.cxx:146
 TGSlider.cxx:147
 TGSlider.cxx:148
 TGSlider.cxx:149
 TGSlider.cxx:150
 TGSlider.cxx:151
 TGSlider.cxx:152
 TGSlider.cxx:153
 TGSlider.cxx:154
 TGSlider.cxx:155
 TGSlider.cxx:156
 TGSlider.cxx:157
 TGSlider.cxx:158
 TGSlider.cxx:159
 TGSlider.cxx:160
 TGSlider.cxx:161
 TGSlider.cxx:162
 TGSlider.cxx:163
 TGSlider.cxx:164
 TGSlider.cxx:165
 TGSlider.cxx:166
 TGSlider.cxx:167
 TGSlider.cxx:168
 TGSlider.cxx:169
 TGSlider.cxx:170
 TGSlider.cxx:171
 TGSlider.cxx:172
 TGSlider.cxx:173
 TGSlider.cxx:174
 TGSlider.cxx:175
 TGSlider.cxx:176
 TGSlider.cxx:177
 TGSlider.cxx:178
 TGSlider.cxx:179
 TGSlider.cxx:180
 TGSlider.cxx:181
 TGSlider.cxx:182
 TGSlider.cxx:183
 TGSlider.cxx:184
 TGSlider.cxx:185
 TGSlider.cxx:186
 TGSlider.cxx:187
 TGSlider.cxx:188
 TGSlider.cxx:189
 TGSlider.cxx:190
 TGSlider.cxx:191
 TGSlider.cxx:192
 TGSlider.cxx:193
 TGSlider.cxx:194
 TGSlider.cxx:195
 TGSlider.cxx:196
 TGSlider.cxx:197
 TGSlider.cxx:198
 TGSlider.cxx:199
 TGSlider.cxx:200
 TGSlider.cxx:201
 TGSlider.cxx:202
 TGSlider.cxx:203
 TGSlider.cxx:204
 TGSlider.cxx:205
 TGSlider.cxx:206
 TGSlider.cxx:207
 TGSlider.cxx:208
 TGSlider.cxx:209
 TGSlider.cxx:210
 TGSlider.cxx:211
 TGSlider.cxx:212
 TGSlider.cxx:213
 TGSlider.cxx:214
 TGSlider.cxx:215
 TGSlider.cxx:216
 TGSlider.cxx:217
 TGSlider.cxx:218
 TGSlider.cxx:219
 TGSlider.cxx:220
 TGSlider.cxx:221
 TGSlider.cxx:222
 TGSlider.cxx:223
 TGSlider.cxx:224
 TGSlider.cxx:225
 TGSlider.cxx:226
 TGSlider.cxx:227
 TGSlider.cxx:228
 TGSlider.cxx:229
 TGSlider.cxx:230
 TGSlider.cxx:231
 TGSlider.cxx:232
 TGSlider.cxx:233
 TGSlider.cxx:234
 TGSlider.cxx:235
 TGSlider.cxx:236
 TGSlider.cxx:237
 TGSlider.cxx:238
 TGSlider.cxx:239
 TGSlider.cxx:240
 TGSlider.cxx:241
 TGSlider.cxx:242
 TGSlider.cxx:243
 TGSlider.cxx:244
 TGSlider.cxx:245
 TGSlider.cxx:246
 TGSlider.cxx:247
 TGSlider.cxx:248
 TGSlider.cxx:249
 TGSlider.cxx:250
 TGSlider.cxx:251
 TGSlider.cxx:252
 TGSlider.cxx:253
 TGSlider.cxx:254
 TGSlider.cxx:255
 TGSlider.cxx:256
 TGSlider.cxx:257
 TGSlider.cxx:258
 TGSlider.cxx:259
 TGSlider.cxx:260
 TGSlider.cxx:261
 TGSlider.cxx:262
 TGSlider.cxx:263
 TGSlider.cxx:264
 TGSlider.cxx:265
 TGSlider.cxx:266
 TGSlider.cxx:267
 TGSlider.cxx:268
 TGSlider.cxx:269
 TGSlider.cxx:270
 TGSlider.cxx:271
 TGSlider.cxx:272
 TGSlider.cxx:273
 TGSlider.cxx:274
 TGSlider.cxx:275
 TGSlider.cxx:276
 TGSlider.cxx:277
 TGSlider.cxx:278
 TGSlider.cxx:279
 TGSlider.cxx:280
 TGSlider.cxx:281
 TGSlider.cxx:282
 TGSlider.cxx:283
 TGSlider.cxx:284
 TGSlider.cxx:285
 TGSlider.cxx:286
 TGSlider.cxx:287
 TGSlider.cxx:288
 TGSlider.cxx:289
 TGSlider.cxx:290
 TGSlider.cxx:291
 TGSlider.cxx:292
 TGSlider.cxx:293
 TGSlider.cxx:294
 TGSlider.cxx:295
 TGSlider.cxx:296
 TGSlider.cxx:297
 TGSlider.cxx:298
 TGSlider.cxx:299
 TGSlider.cxx:300
 TGSlider.cxx:301
 TGSlider.cxx:302
 TGSlider.cxx:303
 TGSlider.cxx:304
 TGSlider.cxx:305
 TGSlider.cxx:306
 TGSlider.cxx:307
 TGSlider.cxx:308
 TGSlider.cxx:309
 TGSlider.cxx:310
 TGSlider.cxx:311
 TGSlider.cxx:312
 TGSlider.cxx:313
 TGSlider.cxx:314
 TGSlider.cxx:315
 TGSlider.cxx:316
 TGSlider.cxx:317
 TGSlider.cxx:318
 TGSlider.cxx:319
 TGSlider.cxx:320
 TGSlider.cxx:321
 TGSlider.cxx:322
 TGSlider.cxx:323
 TGSlider.cxx:324
 TGSlider.cxx:325
 TGSlider.cxx:326
 TGSlider.cxx:327
 TGSlider.cxx:328
 TGSlider.cxx:329
 TGSlider.cxx:330
 TGSlider.cxx:331
 TGSlider.cxx:332
 TGSlider.cxx:333
 TGSlider.cxx:334
 TGSlider.cxx:335
 TGSlider.cxx:336
 TGSlider.cxx:337
 TGSlider.cxx:338
 TGSlider.cxx:339
 TGSlider.cxx:340
 TGSlider.cxx:341
 TGSlider.cxx:342
 TGSlider.cxx:343
 TGSlider.cxx:344
 TGSlider.cxx:345
 TGSlider.cxx:346
 TGSlider.cxx:347
 TGSlider.cxx:348
 TGSlider.cxx:349
 TGSlider.cxx:350
 TGSlider.cxx:351
 TGSlider.cxx:352
 TGSlider.cxx:353
 TGSlider.cxx:354
 TGSlider.cxx:355
 TGSlider.cxx:356
 TGSlider.cxx:357
 TGSlider.cxx:358
 TGSlider.cxx:359
 TGSlider.cxx:360
 TGSlider.cxx:361
 TGSlider.cxx:362
 TGSlider.cxx:363
 TGSlider.cxx:364
 TGSlider.cxx:365
 TGSlider.cxx:366
 TGSlider.cxx:367
 TGSlider.cxx:368
 TGSlider.cxx:369
 TGSlider.cxx:370
 TGSlider.cxx:371
 TGSlider.cxx:372
 TGSlider.cxx:373
 TGSlider.cxx:374
 TGSlider.cxx:375
 TGSlider.cxx:376
 TGSlider.cxx:377
 TGSlider.cxx:378
 TGSlider.cxx:379
 TGSlider.cxx:380
 TGSlider.cxx:381
 TGSlider.cxx:382
 TGSlider.cxx:383
 TGSlider.cxx:384
 TGSlider.cxx:385
 TGSlider.cxx:386
 TGSlider.cxx:387
 TGSlider.cxx:388
 TGSlider.cxx:389
 TGSlider.cxx:390
 TGSlider.cxx:391
 TGSlider.cxx:392
 TGSlider.cxx:393
 TGSlider.cxx:394
 TGSlider.cxx:395
 TGSlider.cxx:396
 TGSlider.cxx:397
 TGSlider.cxx:398
 TGSlider.cxx:399
 TGSlider.cxx:400
 TGSlider.cxx:401
 TGSlider.cxx:402
 TGSlider.cxx:403
 TGSlider.cxx:404
 TGSlider.cxx:405
 TGSlider.cxx:406
 TGSlider.cxx:407
 TGSlider.cxx:408
 TGSlider.cxx:409
 TGSlider.cxx:410
 TGSlider.cxx:411
 TGSlider.cxx:412
 TGSlider.cxx:413
 TGSlider.cxx:414
 TGSlider.cxx:415
 TGSlider.cxx:416
 TGSlider.cxx:417
 TGSlider.cxx:418
 TGSlider.cxx:419
 TGSlider.cxx:420
 TGSlider.cxx:421
 TGSlider.cxx:422
 TGSlider.cxx:423
 TGSlider.cxx:424
 TGSlider.cxx:425
 TGSlider.cxx:426
 TGSlider.cxx:427
 TGSlider.cxx:428
 TGSlider.cxx:429
 TGSlider.cxx:430
 TGSlider.cxx:431
 TGSlider.cxx:432
 TGSlider.cxx:433
 TGSlider.cxx:434
 TGSlider.cxx:435
 TGSlider.cxx:436
 TGSlider.cxx:437
 TGSlider.cxx:438
 TGSlider.cxx:439
 TGSlider.cxx:440
 TGSlider.cxx:441
 TGSlider.cxx:442
 TGSlider.cxx:443
 TGSlider.cxx:444
 TGSlider.cxx:445
 TGSlider.cxx:446
 TGSlider.cxx:447
 TGSlider.cxx:448
 TGSlider.cxx:449
 TGSlider.cxx:450
 TGSlider.cxx:451
 TGSlider.cxx:452
 TGSlider.cxx:453
 TGSlider.cxx:454
 TGSlider.cxx:455
 TGSlider.cxx:456
 TGSlider.cxx:457
 TGSlider.cxx:458
 TGSlider.cxx:459
 TGSlider.cxx:460
 TGSlider.cxx:461
 TGSlider.cxx:462
 TGSlider.cxx:463
 TGSlider.cxx:464
 TGSlider.cxx:465
 TGSlider.cxx:466
 TGSlider.cxx:467
 TGSlider.cxx:468
 TGSlider.cxx:469
 TGSlider.cxx:470
 TGSlider.cxx:471
 TGSlider.cxx:472
 TGSlider.cxx:473
 TGSlider.cxx:474
 TGSlider.cxx:475
 TGSlider.cxx:476
 TGSlider.cxx:477
 TGSlider.cxx:478
 TGSlider.cxx:479
 TGSlider.cxx:480
 TGSlider.cxx:481
 TGSlider.cxx:482
 TGSlider.cxx:483
 TGSlider.cxx:484
 TGSlider.cxx:485
 TGSlider.cxx:486
 TGSlider.cxx:487
 TGSlider.cxx:488
 TGSlider.cxx:489
 TGSlider.cxx:490
 TGSlider.cxx:491
 TGSlider.cxx:492
 TGSlider.cxx:493
 TGSlider.cxx:494
 TGSlider.cxx:495
 TGSlider.cxx:496
 TGSlider.cxx:497
 TGSlider.cxx:498
 TGSlider.cxx:499
 TGSlider.cxx:500
 TGSlider.cxx:501
 TGSlider.cxx:502
 TGSlider.cxx:503
 TGSlider.cxx:504
 TGSlider.cxx:505
 TGSlider.cxx:506
 TGSlider.cxx:507
 TGSlider.cxx:508
 TGSlider.cxx:509
 TGSlider.cxx:510
 TGSlider.cxx:511
 TGSlider.cxx:512
 TGSlider.cxx:513
 TGSlider.cxx:514
 TGSlider.cxx:515
 TGSlider.cxx:516
 TGSlider.cxx:517
 TGSlider.cxx:518
 TGSlider.cxx:519
 TGSlider.cxx:520
 TGSlider.cxx:521
 TGSlider.cxx:522
 TGSlider.cxx:523
 TGSlider.cxx:524
 TGSlider.cxx:525
 TGSlider.cxx:526
 TGSlider.cxx:527
 TGSlider.cxx:528
 TGSlider.cxx:529
 TGSlider.cxx:530
 TGSlider.cxx:531
 TGSlider.cxx:532
 TGSlider.cxx:533
 TGSlider.cxx:534
 TGSlider.cxx:535
 TGSlider.cxx:536
 TGSlider.cxx:537
 TGSlider.cxx:538
 TGSlider.cxx:539
 TGSlider.cxx:540
 TGSlider.cxx:541
 TGSlider.cxx:542
 TGSlider.cxx:543
 TGSlider.cxx:544
 TGSlider.cxx:545
 TGSlider.cxx:546
 TGSlider.cxx:547
 TGSlider.cxx:548
 TGSlider.cxx:549
 TGSlider.cxx:550
 TGSlider.cxx:551
 TGSlider.cxx:552
 TGSlider.cxx:553
 TGSlider.cxx:554
 TGSlider.cxx:555
 TGSlider.cxx:556
 TGSlider.cxx:557
 TGSlider.cxx:558
 TGSlider.cxx:559
 TGSlider.cxx:560
 TGSlider.cxx:561
 TGSlider.cxx:562
 TGSlider.cxx:563
 TGSlider.cxx:564
 TGSlider.cxx:565
 TGSlider.cxx:566
 TGSlider.cxx:567
 TGSlider.cxx:568
 TGSlider.cxx:569
 TGSlider.cxx:570
 TGSlider.cxx:571
 TGSlider.cxx:572
 TGSlider.cxx:573
 TGSlider.cxx:574
 TGSlider.cxx:575
 TGSlider.cxx:576
 TGSlider.cxx:577
 TGSlider.cxx:578
 TGSlider.cxx:579
 TGSlider.cxx:580
 TGSlider.cxx:581
 TGSlider.cxx:582
 TGSlider.cxx:583
 TGSlider.cxx:584
 TGSlider.cxx:585
 TGSlider.cxx:586
 TGSlider.cxx:587
 TGSlider.cxx:588
 TGSlider.cxx:589
 TGSlider.cxx:590
 TGSlider.cxx:591
 TGSlider.cxx:592
 TGSlider.cxx:593
 TGSlider.cxx:594
 TGSlider.cxx:595
 TGSlider.cxx:596
 TGSlider.cxx:597
 TGSlider.cxx:598
 TGSlider.cxx:599
 TGSlider.cxx:600
 TGSlider.cxx:601
 TGSlider.cxx:602
 TGSlider.cxx:603
 TGSlider.cxx:604
 TGSlider.cxx:605
 TGSlider.cxx:606
 TGSlider.cxx:607
 TGSlider.cxx:608
 TGSlider.cxx:609
 TGSlider.cxx:610
 TGSlider.cxx:611
 TGSlider.cxx:612