TGTableHeader.cxx

Go to the documentation of this file.
00001 // Author: Roel Aaij 21/07/2007
00002 
00003 /*************************************************************************
00004  * Copyright (C) 1995-2007, Rene Brun and Fons Rademakers.               *
00005  * All rights reserved.                                                  *
00006  *                                                                       *
00007  * For the licensing terms see $ROOTSYS/LICENSE.                         *
00008  * For the list of contributors see $ROOTSYS/README/CREDITS.             *
00009  *************************************************************************/
00010 
00011 #include "TGTableCell.h"
00012 #include "TClass.h"
00013 #include "TGWindow.h"
00014 #include "TGResourcePool.h"
00015 #include "Riostream.h"
00016 #include "TSystem.h"
00017 #include "TImage.h"
00018 #include "TEnv.h"
00019 #include "TGToolTip.h"
00020 #include "TGWidget.h"
00021 #include "TGPicture.h"
00022 #include "TGTable.h"
00023 #include "TRandom3.h"
00024 
00025 ClassImp(TGTableHeader)
00026 
00027 //////////////////////////////////////////////////////////////////////////
00028 //                                                                      //
00029 // TGTableHeader                                                        //
00030 //                                                                      //
00031 // TGTableHeader is the class that implements a header for a row or     //
00032 // column. Interactivity on a per column or row basis is implemented    //
00033 // using this header.                                                   //
00034 //                                                                      //
00035 // TGTableHeader is for internal use in TGTable only.                   //
00036 //                                                                      //
00037 //////////////////////////////////////////////////////////////////////////
00038 
00039 //______________________________________________________________________________
00040 TGTableHeader::TGTableHeader(const TGWindow *p, TGTable *table, TGString *label,
00041                              UInt_t position, EHeaderType type, UInt_t width, 
00042                              UInt_t height, GContext_t norm, FontStruct_t font, 
00043                              UInt_t option)
00044    : TGTableCell(p, table, label, 0, 0, width, height, norm, font, option, 
00045                  kFALSE), fType(type), fReadOnly(kFALSE), fEnabled(kTRUE), 
00046      fHasOwnLabel(kFALSE)
00047 {
00048    // TGTableHeader constuctor.
00049 
00050    if (type == kColumnHeader) {
00051       fWidth = table->GetTableHeader()->GetWidth();
00052       fHeight = 25;
00053       fRow = 0;
00054       fColumn = position;
00055    } else if (type == kRowHeader) {
00056       fWidth = 80;
00057       fHeight = table->GetTableHeader()->GetHeight();
00058       fRow = position;
00059       fColumn = 0;
00060    } else {
00061       fWidth = 80;
00062       fHeight = 25;
00063    }
00064 
00065    if (!label) {
00066       SetDefaultLabel();
00067    } else {
00068       fHasOwnLabel = kTRUE;
00069    }
00070 
00071    Init();
00072 }
00073 
00074 //______________________________________________________________________________
00075 TGTableHeader::TGTableHeader(const TGWindow *p, TGTable *table,  
00076                              const char *label, UInt_t position, 
00077                              EHeaderType type, UInt_t width, UInt_t height, 
00078                              GContext_t norm, FontStruct_t font, UInt_t option)
00079    : TGTableCell(p, table, label, 0, 0, width, height, norm, font, 
00080                  option, kFALSE), fType(type), fReadOnly(kFALSE), fEnabled(kTRUE), 
00081      fHasOwnLabel(kFALSE)
00082 {
00083    // TGTableHeader constuctor.
00084 
00085    if (type == kColumnHeader) {
00086       fWidth = table->GetTableHeader()->GetWidth();
00087       fHeight = 25;
00088       fRow = 0;
00089       fColumn = position;
00090    } else if (type == kRowHeader) {
00091       fWidth = 80;
00092       fHeight = table->GetTableHeader()->GetHeight();
00093       fRow = position;
00094       fColumn = 0;
00095    } else {
00096       fWidth = 80;
00097       fHeight = 25;
00098    }
00099 
00100    if (!label) {
00101       SetDefaultLabel();
00102    } else {
00103       fHasOwnLabel = kTRUE;
00104    }
00105 
00106    Init();
00107 }
00108 
00109 
00110 //______________________________________________________________________________
00111 TGTableHeader::~TGTableHeader()
00112 {
00113    // TGTableHeader destructor.
00114 }
00115 
00116 //______________________________________________________________________________
00117 void TGTableHeader::Init()
00118 {
00119    // Initialize the TGTableHeader   
00120 
00121    if (fType == kTableHeader) {
00122       SetBackgroundColor(fTable->GetBackground());
00123    } else {
00124       SetBackgroundColor(fTable->GetHeaderBackground());
00125    }
00126 
00127    Resize(fWidth, fHeight);      
00128 
00129    Int_t max_ascent = 0, max_descent = 0;
00130 
00131    fTWidth  = gVirtualX->TextWidth(fFontStruct, fLabel->GetString(), fLabel->GetLength());
00132    gVirtualX->GetFontProperties(fFontStruct, max_ascent, max_descent);
00133    fTHeight = max_ascent + max_descent;
00134 
00135 }
00136 
00137 //______________________________________________________________________________
00138 void TGTableHeader::SetWidth(UInt_t width)
00139 {
00140    // Resize the TGTableHeader.
00141 
00142    Resize(width, GetDefaultHeight());
00143 }
00144 
00145 //______________________________________________________________________________
00146 void TGTableHeader::SetHeight(UInt_t height)
00147 {
00148    // Resize the TGTableHeader.
00149 
00150    Resize(GetDefaultWidth(), height);
00151 }
00152 
00153 //______________________________________________________________________________
00154 void TGTableHeader::SetLabel(const char *label)
00155 {
00156    // Set the label of the TGTableHeader to label.
00157 
00158    if(label) {
00159       TGTableCell::SetLabel(label);
00160    } else {
00161       SetDefaultLabel();
00162    }
00163 }
00164 
00165 //______________________________________________________________________________
00166 void TGTableHeader::SetDefaultLabel()
00167 {
00168    // Set the label of the TGTableHeader to the default label, "Row #"
00169    // or "Col #".
00170 
00171    fHasOwnLabel = kFALSE;
00172    if (fLabel) delete fLabel;
00173    fLabel = new TGString();
00174    if (fType == kRowHeader) {
00175       *fLabel += "Row ";
00176       *fLabel += fRow;
00177    } else if (fType == kColumnHeader) {
00178       *fLabel += "Col ";
00179       *fLabel += fColumn;
00180    } else {
00181       *fLabel += fTable->GetNTableRows();
00182       *fLabel += "x";
00183       *fLabel += fTable->GetNTableColumns();
00184       *fLabel += " Table";
00185    }
00186 }
00187 
00188 //______________________________________________________________________________
00189 void TGTableHeader::SetPosition(UInt_t pos)
00190 {
00191    // Set the position of the TGTableHeader to pos.
00192    
00193    // Verify functionality
00194 
00195    if (fType == kRowHeader) {
00196       fRow = pos;
00197       fColumn = 0;
00198    } else if (fType == kColumnHeader) {
00199       fRow = 0;
00200       fColumn = pos;
00201    } else {
00202       fRow = 0;
00203       fColumn = 0;
00204    }
00205 }
00206 
00207 //______________________________________________________________________________
00208 void TGTableHeader::Resize(TGDimension newsize)
00209 {
00210    // Resize the TGTableHeader.
00211 
00212    Resize(newsize.fWidth, newsize.fHeight);
00213 }
00214 
00215 //______________________________________________________________________________
00216 void TGTableHeader::Resize(UInt_t width, UInt_t height)
00217 {
00218    // Resize the TGTableHeader.
00219 
00220    // Implementation of resizing of an entire row of columns probably goes here.
00221    TGTableCell::Resize(width, height);
00222 }
00223 
00224 //______________________________________________________________________________
00225 void TGTableHeader::Sort(Bool_t order)
00226 {
00227    // Sort the contents of this row or column in given order.
00228 
00229    // Note: not implemented yet.
00230 
00231    if (order == kSortAscending) {
00232    } else {
00233    }
00234 }
00235 
00236 //______________________________________________________________________________
00237 void TGTableHeader::UpdatePosition()
00238 {
00239    // Update the positon of the TGTableHeader.
00240 
00241    // Verify functionality. If rows are inserted or removed, internal
00242    // column numbers are no longer consistent.
00243 
00244    UInt_t nhdr = 0;
00245    if (fType == kColumnHeader) {
00246       while(fTable->GetColumnHeader(nhdr) != this) {
00247          nhdr++;
00248       }
00249       fColumn = nhdr;
00250    } else if (fType == kRowHeader) {
00251       while(fTable->GetRowHeader(nhdr) != this) {
00252          nhdr++;
00253       }
00254       fRow = nhdr;
00255    } else {
00256       fRow = 0;
00257       fColumn = 0;
00258    }
00259 }

Generated on Tue Jul 5 14:22:04 2011 for ROOT_528-00b_version by  doxygen 1.5.1