// @(#)root/ged:$Id$
// Author: Ilka Antcheva   08/03/05

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


//////////////////////////////////////////////////////////////////////////
//                                                                      //
//  TFrameEditor                                                        //
//                                                                      //
//  Editor of frame objects.                                            //
//                                                                      //
//  Frame border can be set to sunken, raised or no border.             //
//  Border size can be set for sunken or rized frames (1-15 pixels).    //
//                                                                      //
//////////////////////////////////////////////////////////////////////////
//Begin_Html
/*
<img src="gif/TFrameEditor.gif">
*/
//End_Html

#include "TFrameEditor.h"
#include "TGedEditor.h"
#include "TGComboBox.h"
#include "TGButtonGroup.h"
#include "TGLabel.h"
#include "TFrame.h"
#include "TVirtualPad.h"

ClassImp(TFrameEditor)

enum EFrameWid {
   kFR_BSIZE,
   kFR_BMODE
};


//______________________________________________________________________________
TFrameEditor::TFrameEditor(const TGWindow *p, Int_t width,
                           Int_t height, UInt_t options, Pixel_t back)
   : TGedFrame(p, width, height, options | kVerticalFrame, back)
{
   // Constructor of TFrame editor GUI.

   TGCompositeFrame *f2 = new TGCompositeFrame(this, 80, 20, kHorizontalFrame);
   TGButtonGroup *bgr = new TGButtonGroup(f2,3,1,3,0, "Frame Border Mode");
   bgr->SetRadioButtonExclusive(kTRUE);
   fBmode = new TGRadioButton(bgr, " Sunken", 77);
   fBmode->SetToolTipText("Set a sunken border of the frame");
   fBmode0 = new TGRadioButton(bgr, " No border", 78);
   fBmode0->SetToolTipText("Set no border of the frame");
   fBmode1 = new TGRadioButton(bgr, " Raised", 79);
   fBmode1->SetToolTipText("Set a raised border of the frame");
   bgr->SetButton(79, kTRUE);
   fBmodelh = new TGLayoutHints(kLHintsLeft, 0,0,3,0);
   bgr->SetLayoutHints(fBmodelh, fBmode);
   bgr->Show();
   bgr->ChangeOptions(kFitWidth|kChildFrame|kVerticalFrame);
   f2->AddFrame(bgr, new TGLayoutHints(kLHintsCenterY | kLHintsLeft, 4, 1, 0, 0));
   AddFrame(f2, new TGLayoutHints(kLHintsTop, 1, 1, 0, 0));

   TGCompositeFrame *f3 = new TGCompositeFrame(this, 80, 20, kHorizontalFrame);
   TGLabel *fSizeLbl = new TGLabel(f3, "Size:");
   f3->AddFrame(fSizeLbl, new TGLayoutHints(kLHintsCenterY | kLHintsLeft, 6, 1, 0, 0));
   fBsize = new TGLineWidthComboBox(f3, kFR_BSIZE);
   fBsize->Resize(92, 20);
   f3->AddFrame(fBsize, new TGLayoutHints(kLHintsLeft, 13, 1, 0, 0));
   fBsize->Associate(this);
   AddFrame(f3, new TGLayoutHints(kLHintsTop, 1, 1, 0, 0));
}

//______________________________________________________________________________
TFrameEditor::~TFrameEditor()
{
   // Destructor of frame editor.

   // children of TGButonGroup are not deleted
   delete fBmode;
   delete fBmode0;
   delete fBmode1;
   delete fBmodelh;
}

//______________________________________________________________________________
void TFrameEditor::ConnectSignals2Slots()
{
   // Connect signals to slots.

   fBmode->Connect("Toggled(Bool_t)","TFrameEditor",this,"DoBorderMode()");
   fBmode0->Connect("Toggled(Bool_t)","TFrameEditor",this,"DoBorderMode()");
   fBmode1->Connect("Toggled(Bool_t)","TFrameEditor",this,"DoBorderMode()");
   fBsize->Connect("Selected(Int_t)", "TFrameEditor", this, "DoBorderSize(Int_t)");

   fInit = kFALSE;
}

//______________________________________________________________________________
void TFrameEditor::SetModel(TObject* obj)
{
   // Pick up the frame attributes.

   fFrame = (TFrame *)obj;

   Int_t par;

   par = fFrame->GetBorderMode();
   if (par == -1) fBmode->SetState(kButtonDown, kTRUE);
   else if (par == 1) fBmode1->SetState(kButtonDown, kTRUE);
   else fBmode0->SetState(kButtonDown, kTRUE);

   par = fFrame->GetBorderSize();
   if (par < 1) par = 1;
   if (par > 16) par = 16;
   fBsize->Select(par, kFALSE);

   if (fInit) ConnectSignals2Slots();
}

//______________________________________________________________________________
void TFrameEditor::DoBorderMode()
{
   // Slot connected to the border mode settings.

   Int_t mode = 0;
   if (fBmode->GetState() == kButtonDown) mode = -1;
   else if (fBmode0->GetState() == kButtonDown) mode = 0;
   else mode = 1;

   if (!mode) {
      fBsize->SetEnabled(kFALSE);
   } else {
      fBsize->SetEnabled(kTRUE);
   }
   fFrame->SetBorderMode(mode);
   Update();
   gPad->Modified();
   gPad->Update();
}

//______________________________________________________________________________
void TFrameEditor::DoBorderSize(Int_t size)
{
   // Slot connected to the border size settings.

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