00001
00002
00003
00004
00005
00006
00007
00008
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
00030
00031
00032
00033
00034
00035
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
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
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
00114 }
00115
00116
00117 void TGTableHeader::Init()
00118 {
00119
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
00141
00142 Resize(width, GetDefaultHeight());
00143 }
00144
00145
00146 void TGTableHeader::SetHeight(UInt_t height)
00147 {
00148
00149
00150 Resize(GetDefaultWidth(), height);
00151 }
00152
00153
00154 void TGTableHeader::SetLabel(const char *label)
00155 {
00156
00157
00158 if(label) {
00159 TGTableCell::SetLabel(label);
00160 } else {
00161 SetDefaultLabel();
00162 }
00163 }
00164
00165
00166 void TGTableHeader::SetDefaultLabel()
00167 {
00168
00169
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
00192
00193
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
00211
00212 Resize(newsize.fWidth, newsize.fHeight);
00213 }
00214
00215
00216 void TGTableHeader::Resize(UInt_t width, UInt_t height)
00217 {
00218
00219
00220
00221 TGTableCell::Resize(width, height);
00222 }
00223
00224
00225 void TGTableHeader::Sort(Bool_t order)
00226 {
00227
00228
00229
00230
00231 if (order == kSortAscending) {
00232 } else {
00233 }
00234 }
00235
00236
00237 void TGTableHeader::UpdatePosition()
00238 {
00239
00240
00241
00242
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 }