// @(#)root/ged:$Id$
// Author: Guido Volpi 12/10/2007

/*************************************************************************
 * 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.             *
 *************************************************************************/


//////////////////////////////////////////////////////////////////////////
//                                                                      //
//  TPieEditor                                                          //
//                                                                      //
//  Implements GUI for pie-chart attributes.                            //
//                                                                      //
//  Title': set the title of the graph                                  //
//                                                                      //
//////////////////////////////////////////////////////////////////////////
//Begin_Html
/*
<img src="gif/TPieEditor.gif">
*/
//End_Html

#include "TGedEditor.h"
#include "TGComboBox.h"
#include "TGButtonGroup.h"
#include "TPieEditor.h"
#include "TGTextEntry.h"
#include "TGNumberEntry.h"
#include "TGToolTip.h"
#include "TGLabel.h"
#include "TPie.h"
#include "TVirtualPad.h"
#include "TGColorSelect.h"
#include "TGComboBox.h"
#include "TColor.h"
#include "TBox.h"
#include "TPaveLabel.h"

ClassImp(TPieEditor)

enum EPieWid {
   kPie = 0,
   kPIE_HOR,
   kPIE_RAD,
   kPIE_TAN,
   kPIE_FILL,
   kPIE_OUTLINE,
   kPIE_TITLE,
   kPIE_3D,
   kPIE_3DANGLE,
   kPIE_3DTHICKNESS,
   kFONT_COLOR,
   kFONT_SIZE,
   kFONT_STYLE
};

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

   fPie = 0;
   // TextEntry to change the title
   MakeTitle("Pie Chart");

   fTitle = new TGTextEntry(this, new TGTextBuffer(50), kPIE_TITLE);
   fTitle->Resize(135, fTitle->GetDefaultHeight());
   fTitle->SetToolTipText("Enter the pie title string");
   // better take kLHintsLeft and Right - Right is not working at the moment
   AddFrame(fTitle, new TGLayoutHints(kLHintsLeft, 3, 1, 2, 5));

   // Radio Buttons to change the draw options of the graph
   TGCompositeFrame *f2 = new TGCompositeFrame(this, 80, 20, kVerticalFrame);
   fgr = new TGButtonGroup(f2,3,1,3,5,"Label direction");
   fgr->SetRadioButtonExclusive(kTRUE);
   fLblDirH = new TGRadioButton(fgr,"Horizontal",kPIE_HOR);   // no draw option
   fLblDirH->SetToolTipText("Draw horizontal labels");
   fLblDirR = new TGRadioButton(fgr,"Radial",kPIE_RAD);  // option C
   fLblDirR->SetToolTipText("Draw labels radially");
   fLblDirT = new TGRadioButton(fgr,"Tangential",kPIE_TAN); // option L
   fLblDirT->SetToolTipText("Draw labels tangential to the piechart");

   fgr->SetLayoutHints(fShape1lh=new TGLayoutHints(kLHintsLeft, 0,3,0,0), fLblDirH);
   fgr->Show();
   fgr->ChangeOptions(kFitWidth|kChildFrame|kVerticalFrame);
   f2->AddFrame(fgr, new TGLayoutHints(kLHintsLeft, 4, 0, 0, 0));

   // CheckBox to activate/deactivate the drawing of the Marker
   fOutlineOnOff = new TGCheckButton(f2,"Outline",kPIE_OUTLINE);
   fOutlineOnOff->SetToolTipText("Draw a line to mark the pie");
   f2->AddFrame(fOutlineOnOff, new TGLayoutHints(kLHintsTop, 5, 1, 0, 3));
   AddFrame(f2, new TGLayoutHints(kLHintsTop, 1, 1, 0, 0));

   // Exclusion zone parameters
   MakeTitle("3D options");
   TGCompositeFrame *f3 = new TGCompositeFrame(this, 80, 20, kHorizontalFrame);
   AddFrame(f3, new TGLayoutHints(kLHintsTop, 1, 1, 5, 0));

   fIs3D = new TGCheckButton(f3,"3D",kPIE_3D);
   fIs3D->SetToolTipText("Draw a 3D charts");
   f3->AddFrame(fIs3D, new TGLayoutHints(kLHintsTop, 5, 1, 0, 0));

   f3DAngle = new TGNumberEntry(f3, 0, 2, kPIE_3DANGLE,  TGNumberEntry::kNESInteger, TGNumberEntry::kNEANonNegative,TGNumberFormat::kNELLimitMinMax, 0, 90);
   //f3DAngle->SetToolTipText("3D angle: 0-90")
   f3DAngle->Resize(50, 20);
   f3->AddFrame(f3DAngle, new TGLayoutHints(kLHintsLeft, 7, 1, 1, 1));
   f3DAngle->Associate(f3);

   f3DHeight = new TGNumberEntry(f3, 0, 3, kPIE_3DTHICKNESS,  TGNumberEntry::kNESReal, TGNumberEntry::kNEANonNegative);
   //f3DHeight->SetToolTipText("3D thick")
   f3DHeight->Resize(50, 20);
   f3->AddFrame(f3DHeight, new TGLayoutHints(kLHintsLeft, 7, 1, 1, 1));
   f3DHeight->Associate(f3);

   MakeTitle("Text");
   TGCompositeFrame *f4 = new TGCompositeFrame(this, 80, 20, kHorizontalFrame);
   fColorSelect = new TGColorSelect(f4, 0, kFONT_COLOR);
   f4->AddFrame(fColorSelect, new TGLayoutHints(kLHintsLeft, 1, 1, 1, 1));
   fColorSelect->Associate(this);
   fSizeCombo = BuildFontSizeComboBox(f4, kFONT_SIZE);
   f4->AddFrame(fSizeCombo, new TGLayoutHints(kLHintsLeft, 3, 1, 1, 1));
   fSizeCombo->Resize(91, 20);
   fSizeCombo->Associate(this);
   AddFrame(f4, new TGLayoutHints(kLHintsTop, 1, 1, 0, 0));
   fTypeCombo = new TGFontTypeComboBox(this, kFONT_STYLE);
   fTypeCombo->Resize(137, 20);
   AddFrame(fTypeCombo, new TGLayoutHints(kLHintsLeft, 3, 1, 1, 1));
}


//______________________________________________________________________________
TPieEditor::~TPieEditor()
{
   // Destructor of pie editor.
}


//_____________________________________________________________________________
void TPieEditor::ConnectSignals2Slots()
{
   // Connect signals to slots.

   fTitle->Connect("TextChanged(const char *)","TPieEditor",this,"DoTitle(const char *)");
   fgr->Connect("Clicked(Int_t)","TPieEditor",this,"DoShape()");
   fOutlineOnOff->Connect("Toggled(Bool_t)","TPieEditor",this,"DoMarkerOnOff(Bool_t)");
   f3DAngle->Connect("ValueSet(Long_t)", "TPieEditor", this, "DoChange3DAngle()");
   f3DHeight->Connect("ValueSet(Long_t)", "TPieEditor", this, "DoChange3DAngle()");
   fIs3D->Connect("Clicked()","TPieEditor",this,"DoGraphLineWidth()");

   // text attributes connection
   fTypeCombo->Connect("Selected(Int_t)","TPieEditor",this,"DoTextChange()");
   fSizeCombo->Connect("Selected(Int_t)","TPieEditor",this,"DoTextChange()");
   fColorSelect->Connect("ColorSelected(Pixel_t)","TPieEditor",this,"DoTextChange()");

   fInit = kFALSE;  // connect the slots to the signals only once
}


//______________________________________________________________________________
void TPieEditor::ActivateBaseClassEditors(TClass* cl)
{
   // Exclude TAttTextEditor from this interface.

   TGedEditor *gedEditor = GetGedEditor();
   gedEditor->ExcludeClassEditor(TAttText::Class());
   TGedFrame::ActivateBaseClassEditors(cl);
}


//______________________________________________________________________________
void TPieEditor::SetModel(TObject* obj)
{
   // Pick up the used values of graph attributes.

   fPie = (TPie *)obj;
   fAvoidSignal = kTRUE;

   // set the Title TextEntry
   const char *text = fPie->GetTitle();
   fTitle->SetText(text);

   TString soption = GetDrawOption();

   // For the label orientation there are 3 possibilities:
   //   0: horizontal
   //   1: radial
   //   2: tangent
   Int_t lblor(0);

   // Parse the options
   Int_t idx;
   // Paint the TPie in an existing canvas
   if ( (idx=soption.Index("same"))>=0 ) {
      // optionSame = kTRUE;
      soption.Remove(idx,4);
   }

   if ( (idx=soption.Index("nol"))>=0 ) {
      fOutlineOnOff->SetState(kButtonUp,kFALSE);
      soption.Remove(idx,3);
   }
   else {
      fOutlineOnOff->SetState(kButtonDown,kFALSE);
   }

   // check if is active the pseudo-3d
   if ( (idx=soption.Index("3d"))>=0 ) {
      fIs3D->SetState(kButtonDown, kFALSE);
      f3DAngle->SetNumber(fPie->GetAngle3D());
      f3DHeight->SetNumber(fPie->GetHeight());
      soption.Remove(idx,2);
   } else {
      fIs3D->SetState(kButtonUp, kFALSE);
   }

   // seek if have to draw the labels around the pie chart
   if ( (idx=soption.Index("t"))>=0 ) {
      lblor = 2;
      soption.Remove(idx,1);
   }

   // Seek if have to paint the labels along the radii
   if ( (idx=soption.Index("r"))>=0 ) {
      lblor = 1;
      soption.Remove(idx,1);
   }

   switch(lblor) {
   case 0:
      fLblDirH->SetState(kButtonDown,kTRUE);
      break;
   case 1:
      fLblDirR->SetState(kButtonDown,kTRUE);
      break;
   case 2:
      fLblDirT->SetState(kButtonDown,kTRUE);
      break;
   }

   // set text attributes
   fTypeCombo->Select(fPie->GetTextFont() / 10);

   Color_t c = fPie->GetTextColor();
   Pixel_t p = TColor::Number2Pixel(c);
   fColorSelect->SetColor(p, kFALSE);

   Float_t s = fPie->GetTextSize();
   Float_t dy;

   if (obj->InheritsFrom(TPaveLabel::Class())) {
      TBox *pl = (TBox*)obj;
      dy = s * (pl->GetY2() - pl->GetY1());
   }
   else
      dy = s * (fGedEditor->GetPad()->GetY2() - fGedEditor->GetPad()->GetY1());

   Int_t size = fGedEditor->GetPad()->YtoPixel(0.0) - fGedEditor->GetPad()->YtoPixel(dy);
   if (size > 50) size = 50;
   if (size < 0)  size = 0;
   fSizeCombo->Select(size, kFALSE);

   if (fInit) ConnectSignals2Slots();
   fAvoidSignal = kFALSE;
}


//______________________________________________________________________________
void TPieEditor::DoTitle(const char *text)
{
   // Slot for setting the graph title.

   if (fAvoidSignal) return;
   fPie->SetTitle(text);
   Update();
}


//______________________________________________________________________________
void TPieEditor::DoShape()
{
   // Slot connected to the draw options.

   if (fAvoidSignal) return;

   TString opt = GetDrawOption();

   if (fLblDirH->GetState()==kButtonDown) {
      if (opt.Contains("t")) opt.Remove(opt.First("t"),1);
      if (opt.Contains("r")) opt.Remove(opt.First("r"),1);
   }
   else if (fLblDirR->GetState()==kButtonDown) {
      if (opt.Contains("t")) opt.Remove(opt.First("t"),1);
      if (!opt.Contains("r")) opt += "r";
   }
   else if (fLblDirT->GetState()==kButtonDown) {
      if (!opt.Contains("t")) opt += "t";
      if (opt.Contains("r")) opt.Remove(opt.First("r"),1);
   }

   SetDrawOption(opt);
   if (gPad && gPad->GetVirtCanvas()) gPad->GetVirtCanvas()->SetCursor(kPointer);
   gVirtualX->SetCursor(GetId(), gVirtualX->CreateCursor(kPointer));
}


//______________________________________________________________________________
void TPieEditor::DoMarkerOnOff(Bool_t)
{
   // Slot for setting markers as visible/invisible.

   if (fAvoidSignal) return;
   TString t = GetDrawOption();

   if (t.Contains("nol") && fOutlineOnOff->GetState() == kButtonDown) {
      t.Remove(t.First("nol"),3);
   }
   else if (!t.Contains("nol") && fOutlineOnOff->GetState() == kButtonUp) {
      t += "nol";
   }

   SetDrawOption(t);
}


//______________________________________________________________________________
void TPieEditor::DoChange3DAngle()
{
   // Slot for setting the 3D angle
   if (fAvoidSignal) return;

   fPie->SetAngle3D(static_cast<Int_t>(f3DAngle->GetNumber()));
   fPie->SetHeight(f3DHeight->GetNumber());

   Update();

}


//______________________________________________________________________________
void TPieEditor::DoGraphLineWidth()
{
   // Slot connected to the graph line width.

   if (fAvoidSignal) return;

   TString opt = GetDrawOption();
   if (!opt.Contains("3d") && fIs3D->IsDown())
      opt += "3d";
   else if (opt.Contains("3d") && !fIs3D->IsDown())
      opt.Remove(opt.First("3d"),2);

   SetDrawOption(opt);

   Update();
}



//______________________________________________________________________________
void TPieEditor::DoTextChange()
{
   // Change text.

   if (fAvoidSignal) return;

   // font color
   fPie->SetTextColor(TColor::GetColor(fColorSelect->GetColor()));

   // font type
   Int_t fontPrec = fPie->GetTextFont()%10;
   Int_t fontType = fTypeCombo->GetSelected();
   fPie->SetTextFont(fontType*10+fontPrec);

   // font size
   TVirtualPad* pad = fGedEditor->GetPad();

   Float_t val = TString(fSizeCombo->GetSelectedEntry()->GetTitle()).Atoi();

   Float_t dy = pad->AbsPixeltoY(0) - pad->AbsPixeltoY((Int_t)val);
   Float_t textSize;

   if (fGedEditor->GetModel()->InheritsFrom(TPaveLabel::Class())) {
      TBox *pl = (TBox*)fGedEditor->GetModel();
      textSize = dy/(pl->GetY2() - pl->GetY1());
   }
   else
      textSize = dy/(pad->GetY2() - pad->GetY1());

   fPie->SetTextSize(textSize);

   Update();

}


//______________________________________________________________________________
TGComboBox* TPieEditor::BuildFontSizeComboBox(TGFrame* parent, Int_t id)
{
   // Create text size combo box.

   char a[100];
   TGComboBox *c = new TGComboBox(parent, id);

   c->AddEntry("Default", 0);
   for (int i = 1; i <= 50; i++) {
      snprintf(a, 99, "%d", i);
      c->AddEntry(a, i);
   }

   return c;
}
 TPieEditor.cxx:1
 TPieEditor.cxx:2
 TPieEditor.cxx:3
 TPieEditor.cxx:4
 TPieEditor.cxx:5
 TPieEditor.cxx:6
 TPieEditor.cxx:7
 TPieEditor.cxx:8
 TPieEditor.cxx:9
 TPieEditor.cxx:10
 TPieEditor.cxx:11
 TPieEditor.cxx:12
 TPieEditor.cxx:13
 TPieEditor.cxx:14
 TPieEditor.cxx:15
 TPieEditor.cxx:16
 TPieEditor.cxx:17
 TPieEditor.cxx:18
 TPieEditor.cxx:19
 TPieEditor.cxx:20
 TPieEditor.cxx:21
 TPieEditor.cxx:22
 TPieEditor.cxx:23
 TPieEditor.cxx:24
 TPieEditor.cxx:25
 TPieEditor.cxx:26
 TPieEditor.cxx:27
 TPieEditor.cxx:28
 TPieEditor.cxx:29
 TPieEditor.cxx:30
 TPieEditor.cxx:31
 TPieEditor.cxx:32
 TPieEditor.cxx:33
 TPieEditor.cxx:34
 TPieEditor.cxx:35
 TPieEditor.cxx:36
 TPieEditor.cxx:37
 TPieEditor.cxx:38
 TPieEditor.cxx:39
 TPieEditor.cxx:40
 TPieEditor.cxx:41
 TPieEditor.cxx:42
 TPieEditor.cxx:43
 TPieEditor.cxx:44
 TPieEditor.cxx:45
 TPieEditor.cxx:46
 TPieEditor.cxx:47
 TPieEditor.cxx:48
 TPieEditor.cxx:49
 TPieEditor.cxx:50
 TPieEditor.cxx:51
 TPieEditor.cxx:52
 TPieEditor.cxx:53
 TPieEditor.cxx:54
 TPieEditor.cxx:55
 TPieEditor.cxx:56
 TPieEditor.cxx:57
 TPieEditor.cxx:58
 TPieEditor.cxx:59
 TPieEditor.cxx:60
 TPieEditor.cxx:61
 TPieEditor.cxx:62
 TPieEditor.cxx:63
 TPieEditor.cxx:64
 TPieEditor.cxx:65
 TPieEditor.cxx:66
 TPieEditor.cxx:67
 TPieEditor.cxx:68
 TPieEditor.cxx:69
 TPieEditor.cxx:70
 TPieEditor.cxx:71
 TPieEditor.cxx:72
 TPieEditor.cxx:73
 TPieEditor.cxx:74
 TPieEditor.cxx:75
 TPieEditor.cxx:76
 TPieEditor.cxx:77
 TPieEditor.cxx:78
 TPieEditor.cxx:79
 TPieEditor.cxx:80
 TPieEditor.cxx:81
 TPieEditor.cxx:82
 TPieEditor.cxx:83
 TPieEditor.cxx:84
 TPieEditor.cxx:85
 TPieEditor.cxx:86
 TPieEditor.cxx:87
 TPieEditor.cxx:88
 TPieEditor.cxx:89
 TPieEditor.cxx:90
 TPieEditor.cxx:91
 TPieEditor.cxx:92
 TPieEditor.cxx:93
 TPieEditor.cxx:94
 TPieEditor.cxx:95
 TPieEditor.cxx:96
 TPieEditor.cxx:97
 TPieEditor.cxx:98
 TPieEditor.cxx:99
 TPieEditor.cxx:100
 TPieEditor.cxx:101
 TPieEditor.cxx:102
 TPieEditor.cxx:103
 TPieEditor.cxx:104
 TPieEditor.cxx:105
 TPieEditor.cxx:106
 TPieEditor.cxx:107
 TPieEditor.cxx:108
 TPieEditor.cxx:109
 TPieEditor.cxx:110
 TPieEditor.cxx:111
 TPieEditor.cxx:112
 TPieEditor.cxx:113
 TPieEditor.cxx:114
 TPieEditor.cxx:115
 TPieEditor.cxx:116
 TPieEditor.cxx:117
 TPieEditor.cxx:118
 TPieEditor.cxx:119
 TPieEditor.cxx:120
 TPieEditor.cxx:121
 TPieEditor.cxx:122
 TPieEditor.cxx:123
 TPieEditor.cxx:124
 TPieEditor.cxx:125
 TPieEditor.cxx:126
 TPieEditor.cxx:127
 TPieEditor.cxx:128
 TPieEditor.cxx:129
 TPieEditor.cxx:130
 TPieEditor.cxx:131
 TPieEditor.cxx:132
 TPieEditor.cxx:133
 TPieEditor.cxx:134
 TPieEditor.cxx:135
 TPieEditor.cxx:136
 TPieEditor.cxx:137
 TPieEditor.cxx:138
 TPieEditor.cxx:139
 TPieEditor.cxx:140
 TPieEditor.cxx:141
 TPieEditor.cxx:142
 TPieEditor.cxx:143
 TPieEditor.cxx:144
 TPieEditor.cxx:145
 TPieEditor.cxx:146
 TPieEditor.cxx:147
 TPieEditor.cxx:148
 TPieEditor.cxx:149
 TPieEditor.cxx:150
 TPieEditor.cxx:151
 TPieEditor.cxx:152
 TPieEditor.cxx:153
 TPieEditor.cxx:154
 TPieEditor.cxx:155
 TPieEditor.cxx:156
 TPieEditor.cxx:157
 TPieEditor.cxx:158
 TPieEditor.cxx:159
 TPieEditor.cxx:160
 TPieEditor.cxx:161
 TPieEditor.cxx:162
 TPieEditor.cxx:163
 TPieEditor.cxx:164
 TPieEditor.cxx:165
 TPieEditor.cxx:166
 TPieEditor.cxx:167
 TPieEditor.cxx:168
 TPieEditor.cxx:169
 TPieEditor.cxx:170
 TPieEditor.cxx:171
 TPieEditor.cxx:172
 TPieEditor.cxx:173
 TPieEditor.cxx:174
 TPieEditor.cxx:175
 TPieEditor.cxx:176
 TPieEditor.cxx:177
 TPieEditor.cxx:178
 TPieEditor.cxx:179
 TPieEditor.cxx:180
 TPieEditor.cxx:181
 TPieEditor.cxx:182
 TPieEditor.cxx:183
 TPieEditor.cxx:184
 TPieEditor.cxx:185
 TPieEditor.cxx:186
 TPieEditor.cxx:187
 TPieEditor.cxx:188
 TPieEditor.cxx:189
 TPieEditor.cxx:190
 TPieEditor.cxx:191
 TPieEditor.cxx:192
 TPieEditor.cxx:193
 TPieEditor.cxx:194
 TPieEditor.cxx:195
 TPieEditor.cxx:196
 TPieEditor.cxx:197
 TPieEditor.cxx:198
 TPieEditor.cxx:199
 TPieEditor.cxx:200
 TPieEditor.cxx:201
 TPieEditor.cxx:202
 TPieEditor.cxx:203
 TPieEditor.cxx:204
 TPieEditor.cxx:205
 TPieEditor.cxx:206
 TPieEditor.cxx:207
 TPieEditor.cxx:208
 TPieEditor.cxx:209
 TPieEditor.cxx:210
 TPieEditor.cxx:211
 TPieEditor.cxx:212
 TPieEditor.cxx:213
 TPieEditor.cxx:214
 TPieEditor.cxx:215
 TPieEditor.cxx:216
 TPieEditor.cxx:217
 TPieEditor.cxx:218
 TPieEditor.cxx:219
 TPieEditor.cxx:220
 TPieEditor.cxx:221
 TPieEditor.cxx:222
 TPieEditor.cxx:223
 TPieEditor.cxx:224
 TPieEditor.cxx:225
 TPieEditor.cxx:226
 TPieEditor.cxx:227
 TPieEditor.cxx:228
 TPieEditor.cxx:229
 TPieEditor.cxx:230
 TPieEditor.cxx:231
 TPieEditor.cxx:232
 TPieEditor.cxx:233
 TPieEditor.cxx:234
 TPieEditor.cxx:235
 TPieEditor.cxx:236
 TPieEditor.cxx:237
 TPieEditor.cxx:238
 TPieEditor.cxx:239
 TPieEditor.cxx:240
 TPieEditor.cxx:241
 TPieEditor.cxx:242
 TPieEditor.cxx:243
 TPieEditor.cxx:244
 TPieEditor.cxx:245
 TPieEditor.cxx:246
 TPieEditor.cxx:247
 TPieEditor.cxx:248
 TPieEditor.cxx:249
 TPieEditor.cxx:250
 TPieEditor.cxx:251
 TPieEditor.cxx:252
 TPieEditor.cxx:253
 TPieEditor.cxx:254
 TPieEditor.cxx:255
 TPieEditor.cxx:256
 TPieEditor.cxx:257
 TPieEditor.cxx:258
 TPieEditor.cxx:259
 TPieEditor.cxx:260
 TPieEditor.cxx:261
 TPieEditor.cxx:262
 TPieEditor.cxx:263
 TPieEditor.cxx:264
 TPieEditor.cxx:265
 TPieEditor.cxx:266
 TPieEditor.cxx:267
 TPieEditor.cxx:268
 TPieEditor.cxx:269
 TPieEditor.cxx:270
 TPieEditor.cxx:271
 TPieEditor.cxx:272
 TPieEditor.cxx:273
 TPieEditor.cxx:274
 TPieEditor.cxx:275
 TPieEditor.cxx:276
 TPieEditor.cxx:277
 TPieEditor.cxx:278
 TPieEditor.cxx:279
 TPieEditor.cxx:280
 TPieEditor.cxx:281
 TPieEditor.cxx:282
 TPieEditor.cxx:283
 TPieEditor.cxx:284
 TPieEditor.cxx:285
 TPieEditor.cxx:286
 TPieEditor.cxx:287
 TPieEditor.cxx:288
 TPieEditor.cxx:289
 TPieEditor.cxx:290
 TPieEditor.cxx:291
 TPieEditor.cxx:292
 TPieEditor.cxx:293
 TPieEditor.cxx:294
 TPieEditor.cxx:295
 TPieEditor.cxx:296
 TPieEditor.cxx:297
 TPieEditor.cxx:298
 TPieEditor.cxx:299
 TPieEditor.cxx:300
 TPieEditor.cxx:301
 TPieEditor.cxx:302
 TPieEditor.cxx:303
 TPieEditor.cxx:304
 TPieEditor.cxx:305
 TPieEditor.cxx:306
 TPieEditor.cxx:307
 TPieEditor.cxx:308
 TPieEditor.cxx:309
 TPieEditor.cxx:310
 TPieEditor.cxx:311
 TPieEditor.cxx:312
 TPieEditor.cxx:313
 TPieEditor.cxx:314
 TPieEditor.cxx:315
 TPieEditor.cxx:316
 TPieEditor.cxx:317
 TPieEditor.cxx:318
 TPieEditor.cxx:319
 TPieEditor.cxx:320
 TPieEditor.cxx:321
 TPieEditor.cxx:322
 TPieEditor.cxx:323
 TPieEditor.cxx:324
 TPieEditor.cxx:325
 TPieEditor.cxx:326
 TPieEditor.cxx:327
 TPieEditor.cxx:328
 TPieEditor.cxx:329
 TPieEditor.cxx:330
 TPieEditor.cxx:331
 TPieEditor.cxx:332
 TPieEditor.cxx:333
 TPieEditor.cxx:334
 TPieEditor.cxx:335
 TPieEditor.cxx:336
 TPieEditor.cxx:337
 TPieEditor.cxx:338
 TPieEditor.cxx:339
 TPieEditor.cxx:340
 TPieEditor.cxx:341
 TPieEditor.cxx:342
 TPieEditor.cxx:343
 TPieEditor.cxx:344
 TPieEditor.cxx:345
 TPieEditor.cxx:346
 TPieEditor.cxx:347
 TPieEditor.cxx:348
 TPieEditor.cxx:349
 TPieEditor.cxx:350
 TPieEditor.cxx:351
 TPieEditor.cxx:352
 TPieEditor.cxx:353
 TPieEditor.cxx:354
 TPieEditor.cxx:355
 TPieEditor.cxx:356
 TPieEditor.cxx:357
 TPieEditor.cxx:358
 TPieEditor.cxx:359
 TPieEditor.cxx:360
 TPieEditor.cxx:361
 TPieEditor.cxx:362
 TPieEditor.cxx:363
 TPieEditor.cxx:364
 TPieEditor.cxx:365
 TPieEditor.cxx:366
 TPieEditor.cxx:367
 TPieEditor.cxx:368
 TPieEditor.cxx:369
 TPieEditor.cxx:370
 TPieEditor.cxx:371
 TPieEditor.cxx:372
 TPieEditor.cxx:373
 TPieEditor.cxx:374
 TPieEditor.cxx:375
 TPieEditor.cxx:376
 TPieEditor.cxx:377
 TPieEditor.cxx:378
 TPieEditor.cxx:379
 TPieEditor.cxx:380
 TPieEditor.cxx:381
 TPieEditor.cxx:382
 TPieEditor.cxx:383
 TPieEditor.cxx:384
 TPieEditor.cxx:385
 TPieEditor.cxx:386
 TPieEditor.cxx:387
 TPieEditor.cxx:388
 TPieEditor.cxx:389
 TPieEditor.cxx:390
 TPieEditor.cxx:391
 TPieEditor.cxx:392
 TPieEditor.cxx:393
 TPieEditor.cxx:394
 TPieEditor.cxx:395
 TPieEditor.cxx:396
 TPieEditor.cxx:397
 TPieEditor.cxx:398
 TPieEditor.cxx:399
 TPieEditor.cxx:400
 TPieEditor.cxx:401
 TPieEditor.cxx:402
 TPieEditor.cxx:403
 TPieEditor.cxx:404
 TPieEditor.cxx:405
 TPieEditor.cxx:406
 TPieEditor.cxx:407
 TPieEditor.cxx:408
 TPieEditor.cxx:409
 TPieEditor.cxx:410
 TPieEditor.cxx:411
 TPieEditor.cxx:412
 TPieEditor.cxx:413
 TPieEditor.cxx:414
 TPieEditor.cxx:415
 TPieEditor.cxx:416
 TPieEditor.cxx:417
 TPieEditor.cxx:418