// @(#)root/guibuilder:$Name:  $:$Id: TGuiBldEditor.cxx,v 1.7 2005/07/05 12:36:06 brun Exp $
// Author: Valeriy Onuchin   12/09/04

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

//////////////////////////////////////////////////////////////////////////
//                                                                      //
// TGuiBldEditor                                                        //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

#include "TGuiBldEditor.h"
#include "TGuiBldHintsEditor.h"
#include "TGResourcePool.h"
#include "TGTab.h"
#include "TGLabel.h"
#include "TGButtonGroup.h"
#include "TGNumberEntry.h"
#include "TG3DLine.h"
#include "TGColorSelect.h"
#include "TGColorDialog.h"


ClassImp(TGuiBldEditor)


////////////////////////////////////////////////////////////////////////////////
class TGuiBldNameFrame : public TGCompositeFrame {

private:
   TGLabel         *fLabel;
   TGTextEntry     *fFrameName;
   TGuiBldEditor   *fEditor;

public:
   TGuiBldNameFrame(const TGWindow *p, TGuiBldEditor *editor);
   virtual ~TGuiBldNameFrame() { }

   void ChangeSelected(TGFrame *frame);
};

//______________________________________________________________________________
TGuiBldNameFrame::TGuiBldNameFrame(const TGWindow *p, TGuiBldEditor *editor) :
                  TGCompositeFrame(p, 1, 1)
{
   //

   fEditor = editor;
   fEditDisabled = kTRUE;
   SetCleanup(kDeepCleanup);
   TGFrame *frame = fEditor->GetSelected();

   TGCompositeFrame *f = new TGHorizontalFrame(this);
   f->AddFrame(new TGLabel(f, "Name"), new TGLayoutHints(kLHintsLeft, 0, 1, 0, 0));
   f->AddFrame(new TGHorizontal3DLine(f), new TGLayoutHints(kLHintsExpandX, 5, 5, 7, 7));
   AddFrame(f, new TGLayoutHints(kLHintsTop | kLHintsExpandX));
   f = new TGHorizontalFrame(this);
   AddFrame(f, new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandX, 1, 1, 0, 0));

   TString name = "";
   if (frame) {
      frame->ClassName();
      name += "::";
   }

   fLabel = new TGLabel(f, name.Data());
   f->AddFrame(fLabel, new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 10, 1, 0, 0));
   fFrameName = new TGTextEntry(f, frame ? frame->GetName() : "noname");
   fFrameName->SetAlignment(kTextLeft);
   fFrameName->Resize(80, fFrameName->GetHeight());
   f->AddFrame(fFrameName, new TGLayoutHints(kLHintsLeft | kLHintsCenterY,1));
   fFrameName->SetEnabled(kFALSE);

   //Pixel_t color;
   //fClient->GetColorByName("#ff0000", color);
   //fLabel->SetTextColor(color, kFALSE);
   //fFrameName->SetTextColor(color, kFALSE);
}

//______________________________________________________________________________
void TGuiBldNameFrame::ChangeSelected(TGFrame *frame)
{
   //

   fFrameName->Disconnect();

   if (!frame) return;

   TString name = frame->ClassName();
   name += "::";

   fLabel->SetText(name.Data());
   fFrameName->SetText(frame->GetName());
   fFrameName->Connect("TextChanged(char*)", frame->ClassName(), frame, "SetName(char*)");
   Resize();
   DoRedraw();
}

////////////////////////////////////////////////////////////////////////////////
class TGuiBldGeometryFrame : public TGVerticalFrame {

private:
   TGuiBldEditor   *fEditor;

public:
   TGuiBldGeometryFrame(const TGWindow *p, TGuiBldEditor *editor);
   virtual ~TGuiBldGeometryFrame() { }

};

//______________________________________________________________________________
TGuiBldGeometryFrame::TGuiBldGeometryFrame(const TGWindow *p, TGuiBldEditor *editor) :
                        TGVerticalFrame(p, 1, 1)
{
   //

   fEditor = editor;
   fEditDisabled = kTRUE;
   SetCleanup(kDeepCleanup);

   TGCompositeFrame *f = new TGHorizontalFrame(this);
   f->AddFrame(new TGLabel(f, "Geometry"), new TGLayoutHints(kLHintsNormal, 1, 1));
   f->AddFrame(new TGHorizontal3DLine(f), new TGLayoutHints(kLHintsExpandX | kLHintsCenterY, 5, 5));
   AddFrame(f, new TGLayoutHints(kLHintsTop | kLHintsExpandX));

   // composite frame
   TGCompositeFrame *frame826 = new TGCompositeFrame(this,275,69,kHorizontalFrame);

   // vertical frame
   TGVerticalFrame *frame928 = new TGVerticalFrame(frame826,59,64,kVerticalFrame);
   TGLabel *frame834 = new TGLabel(frame928,"      ");
   frame928->AddFrame(frame834, new TGLayoutHints(kLHintsLeft | kLHintsCenterY,2,2,2,2));
   TGLabel *frame833 = new TGLabel(frame928,"Width");
   frame928->AddFrame(frame833,  new TGLayoutHints(kLHintsLeft | kLHintsCenterY,5,3,2,2));
   TGLabel *frame839 = new TGLabel(frame928,"Height");
   frame928->AddFrame(frame839, new TGLayoutHints(kLHintsLeft | kLHintsCenterY,5,3,2,2));
   frame826->AddFrame(frame928);
   frame928->MoveResize(2,2,59,64);

   // vertical frame
   TGVerticalFrame *frame24 = new TGVerticalFrame(frame826,68,67,kVerticalFrame);
   TGLabel *frame25 = new TGLabel(frame24,"      ");
   frame24->AddFrame(frame25, new TGLayoutHints(kLHintsLeft | kLHintsTop,0,0,1,0));
   TGNumberEntry *frame26 = new TGNumberEntry(frame24, (Double_t) 0,5,-1,(TGNumberFormat::EStyle) 0);
   frame24->AddFrame(frame26, new TGLayoutHints(kLHintsLeft | kLHintsTop,0,0,1,0));
   TGNumberEntry *frame30 = new TGNumberEntry(frame24, (Double_t) 0,5,-1,(TGNumberFormat::EStyle) 0);
   frame24->AddFrame(frame30, new TGLayoutHints(kLHintsLeft | kLHintsTop,0,0,1,0));
   frame826->AddFrame(frame24);
   frame24->MoveResize(65,2,68,67);

   // vertical frame
   TGVerticalFrame *frame14 = new TGVerticalFrame(frame826,68,67,kVerticalFrame);
   TGLabel *frame15 = new TGLabel(frame14,"Min");
   frame14->AddFrame(frame15, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterX,0,0,1,0));
   TGNumberEntry *frame16 = new TGNumberEntry(frame14, (Double_t) 0,5,-1,(TGNumberFormat::EStyle) 0);
   frame14->AddFrame(frame16, new TGLayoutHints(kLHintsLeft | kLHintsTop,0,0,1,0));
   TGNumberEntry *frame20 = new TGNumberEntry(frame14, (Double_t) 0,5,-1,(TGNumberFormat::EStyle) 0);
   frame14->AddFrame(frame20, new TGLayoutHints(kLHintsLeft | kLHintsTop,0,0,1,0));
   frame826->AddFrame(frame14);
   frame14->MoveResize(137,2,68,67);

   // vertical frame
   TGVerticalFrame *frame4 = new TGVerticalFrame(frame826,68,67,kVerticalFrame);
   TGLabel *frame5 = new TGLabel(frame4,"Max");
   frame4->AddFrame(frame5, new TGLayoutHints(kLHintsLeft | kLHintsTop  | kLHintsCenterX,0,0,1,0));
   TGNumberEntry *frame6 = new TGNumberEntry(frame4, (Double_t) 0,5,-1,(TGNumberFormat::EStyle) 0);
   frame4->AddFrame(frame6, new TGLayoutHints(kLHintsLeft | kLHintsTop,0,0,1,0));
   TGNumberEntry *frame10 = new TGNumberEntry(frame4, (Double_t) 0,5,-1,(TGNumberFormat::EStyle) 0);
   frame4->AddFrame(frame10, new TGLayoutHints(kLHintsLeft | kLHintsTop,0,0,1,0));
   frame826->AddFrame(frame4);
   frame4->MoveResize(207,0,68,67);

   AddFrame(frame826, new TGLayoutHints(kLHintsLeft | kLHintsTop,0,0,1,0));

   MapSubwindows();
   Resize();
}

////////////////////////////////////////////////////////////////////////////////
class TGuiBldBorderFrame : public TGHorizontalFrame {

private:
 enum  EBldBorderFrameMode { kBldBorderNone, kBldBorderSunken,
                             kBldBorderPlain, kBldBorderRaised, kBldBorderDouble };

private:
   TGuiBldEditor   *fEditor;
   TGFrame         *fSelected;
   TGButtonGroup   *fBtnGroup;
   TGColorSelect   *fBgndFrame;
   TGColorSelect   *fFgndFrame;

public:
   TGuiBldBorderFrame(const TGWindow *p, TGuiBldEditor *editor);
   virtual ~TGuiBldBorderFrame() { }

   void  ChangeSelected(TGFrame*);
};

//______________________________________________________________________________
TGuiBldBorderFrame::TGuiBldBorderFrame(const TGWindow *p, TGuiBldEditor *editor) :
             TGHorizontalFrame(p, 1, 1)
{
   //

   fEditor = editor;
   fEditDisabled = kTRUE;
   fBgndFrame = 0;
   fFgndFrame = 0;

   SetCleanup(kDeepCleanup);

   fBtnGroup = new TGButtonGroup(this,"Border Mode",kVerticalFrame | kFitWidth);

   TGRadioButton *frame299 = new TGRadioButton(fBtnGroup," Sunken",kBldBorderSunken);
   frame299->SetToolTipText("Set a sunken border of the frame");
   TGRadioButton *frame302 = new TGRadioButton(fBtnGroup," Plain",kBldBorderPlain);
   frame302->SetToolTipText("Set no border of the frame");
   TGRadioButton *frame305 = new TGRadioButton(fBtnGroup," Raised",kBldBorderRaised);
   frame305->SetState(kButtonDown);
   frame305->SetToolTipText("Set a raised border of the frame");
   TGCheckButton *frame300 = new TGCheckButton(fBtnGroup," Double",kBldBorderDouble);
   frame300->SetToolTipText("Set double border of the frame");

   fBtnGroup->SetRadioButtonExclusive(kTRUE);
   fBtnGroup->Resize(136,86);
   AddFrame(fBtnGroup);
   fBtnGroup->Connect("Pressed(Int_t)", "TGuiBldEditor", fEditor, "UpdateBorder(Int_t)");
   frame300->Connect("Pressed()", "TGuiBldEditor", fEditor, "UpdateBorder(=4)");
   frame300->Connect("Released()", "TGuiBldEditor", fEditor, "UpdateBorder(=5)");
/*
   TGCompositeFrame *f = new TGGroupFrame(this,"Palette",kVerticalFrame | kFitWidth);
   TGHorizontalFrame *hf = new TGHorizontalFrame(f ,1, 1);
   f->AddFrame(hf);
   fBgndFrame = new TGColorSelect(hf, 0, 1);
   fBgndFrame->SetEditDisabled();
   fBgndFrame->SetColor(GetDefaultFrameBackground());
   fBgndFrame->Connect("ColorSelected(Pixel_t)", "TGuiBldEditor", fEditor, "UpdateBackground(Pixel_t)");
   hf->AddFrame(fBgndFrame);
   TGLabel *bl = new TGLabel(hf, "Backgrnd");
   hf->AddFrame(bl);

   hf = new TGHorizontalFrame(f ,1, 1);
   f->AddFrame(hf);
   fFgndFrame = new TGColorSelect(hf, 0, 1);
   fFgndFrame->SetEditDisabled();
   fFgndFrame->SetColor(GetBlackPixel());
   fFgndFrame->Connect("ColorSelected(Pixel_t)", "TGuiBldEditor", fEditor, "UpdateForeground(Pixel_t)");
   hf->AddFrame(fFgndFrame);
   bl = new TGLabel(hf, "Foregrnd");
   hf->AddFrame(bl);

   f->Resize(44,86);
   AddFrame(f);
*/
}

//______________________________________________________________________________
void TGuiBldBorderFrame::ChangeSelected(TGFrame *frame)
{
   //

   fSelected = frame;

   UInt_t opt = fSelected->GetOptions();

   fBtnGroup->SetButton(kBldBorderDouble, opt & kDoubleBorder);
   fBtnGroup->SetButton(kBldBorderSunken, opt & kSunkenFrame);
   fBtnGroup->SetButton(kBldBorderRaised, opt & kRaisedFrame);
   fBtnGroup->SetButton(kBldBorderPlain, !(opt & kRaisedFrame) && !(opt & kSunkenFrame));

   if (fBgndFrame) fBgndFrame->SetColor(fSelected->GetBackground());
   if (fFgndFrame) fFgndFrame->SetColor(fSelected->GetForeground());
}

////////////////////////////////////////////////////////////////////////////////
//______________________________________________________________________________
 TGuiBldEditor::TGuiBldEditor(const TGWindow *p) : TGCompositeFrame(p, 1, 1)
{
   //

   fSelected = 0;
   fEditDisabled = kTRUE;

   SetCleanup(kDeepCleanup);

   TGTab *tab = new TGTab(this, 80, 40);

   AddFrame(tab, new TGLayoutHints(kLHintsNormal | kLHintsExpandX | kLHintsExpandY));
   TGCompositeFrame *tabcont = tab->AddTab("Properties");

   fNameFrame  = new TGuiBldNameFrame(tabcont, this);
   tabcont->AddFrame(fNameFrame,  new TGLayoutHints(kLHintsNormal | kLHintsExpandX,2,2,2,2));

   fHintsFrame = 0;

   fHintsFrame = new TGuiBldHintsEditor(tabcont, this);
   tabcont->AddFrame(fHintsFrame, new TGLayoutHints(kLHintsNormal | kLHintsExpandX,2,2,2,2));

   //TGFrame *frame = new TGuiBldGeometryFrame(tabcont, this);
   //tabcont->AddFrame(frame, new TGLayoutHints(kLHintsNormal | kLHintsExpandX,2,2,2,2));

   fBorderFrame = new TGuiBldBorderFrame(tabcont, this);
   tabcont->AddFrame(fBorderFrame, new TGLayoutHints(kLHintsNormal | kLHintsExpandX,2,2,2,2));

   MapSubwindows();
   Resize(239, 357);
   SetWindowName("Frame Property Editor");

   fEmbedded = kFALSE;
}

//______________________________________________________________________________
 TGuiBldEditor::~TGuiBldEditor()
{
   //

}

//______________________________________________________________________________
 void  TGuiBldEditor::Hide()
{
   //

   UnmapWindow();
}

//______________________________________________________________________________
 void  TGuiBldEditor::ChangeSelected(TGFrame *frame)
{
   //

   if (!frame) return;

   fSelected = frame;

   if (fNameFrame) fNameFrame->ChangeSelected(fSelected);

   if (frame->GetFrameElement()) {
      if (fHintsFrame) {
         fHintsFrame->MapWindow();
         fHintsFrame->ChangeSelected(fSelected);
      }
   } else {
      if (fHintsFrame) fHintsFrame->UnmapWindow();
   }

   if (fBorderFrame) fBorderFrame->ChangeSelected(fSelected);

   Emit("ChangeSelected(TGFrame*)", (long)fSelected);

   Resize(GetDefaultSize());
   MapRaised();
}

//______________________________________________________________________________
 void  TGuiBldEditor::UpdateSelected(TGFrame *)
{
   //

   Emit("UpdateSelected(TGFrame*)", (long)fSelected);
}

//______________________________________________________________________________
 void  TGuiBldEditor::UpdateBorder(Int_t b)
{
   //

   if (!fSelected) return;

   UInt_t opt = fSelected->GetOptions();

   switch (b) {
   case 1:
      opt &= ~kRaisedFrame;
      opt |= kSunkenFrame;
      break;
   case 2:
      opt &= ~kSunkenFrame;
      opt &= ~kRaisedFrame;
      break;
   case 3:
      opt &= ~kSunkenFrame;
      opt |= kRaisedFrame;
      break;
   case 4:
      opt |= kDoubleBorder;
      break;
   case 5:
      opt &= ~kDoubleBorder;
      break;
   default:
      return;
   }

   fSelected->ChangeOptions(opt);
   fClient->NeedRedraw(fSelected, kTRUE);
}

//______________________________________________________________________________
 void  TGuiBldEditor::UpdateBackground(Pixel_t col)
{
   //

   if (!fSelected) return;

   fSelected->SetBackgroundColor(col);
   fClient->NeedRedraw(fSelected, kTRUE);
}

//______________________________________________________________________________
 void  TGuiBldEditor::UpdateForeground(Pixel_t col)
{
   //

   if (!fSelected) return;

   fSelected->SetForegroundColor(col);
   fClient->NeedRedraw(fSelected, kTRUE);
}



ROOT page - Class index - Class Hierarchy - Top of the page

This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.