#pragma implementation
#include "hsubuttons.h"
#include "TSystem.h"
ClassImp(HSUCheckButton);
ClassImp(HSUHorizontalLine);
ClassImp(HSUFileOpen);
TGLayoutHints g_FileOpenEditHints(kLHintsLeft | kLHintsCenterY);
TGLayoutHints g_FileOpenButtonHints(kLHintsRight | kLHintsCenterY);
#define SAFE_DELETE(A) { if(A != NULL) { delete A; A = NULL; }}
#define OPEN_FILE_SPACE 5
static const Char_t *gOpenAsTypes[] =
{
"Macro files", "*.C",
"HLD files", "*.hld",
"ROOT files", "*.root",
"PostScript", "*.ps",
"Encapsulated PostScript", "*.eps",
"Gif files", "*.gif",
"All files", "*",
0, 0
};
HSUCheckButton::HSUCheckButton(const Char_t *pName, Int_t *piVal, Int_t iMask,
const TGWindow* pParent, Int_t iId)
: TGCheckButton(pParent, pName, iId)
{
if(piVal == NULL)
Error("HSUCheckButton", "piVal == NULL");
m_piVal = piVal;
m_iMask = iMask;
}
void HSUCheckButton::Reset(void)
{
if(m_piVal == NULL)
Error("Reset", "m_piVal == NULL");
else
{
if((*m_piVal & m_iMask) != 0)
{
PSetState(kButtonDown,kFALSE);
fPrevState = fState;
}
}
}
void HSUCheckButton::SetData(void)
{
if(m_piVal == NULL)
Error("SetData", "m_piVal == NULL");
else
{
if(fState == kButtonDown)
*m_piVal |= m_iMask;
else
*m_piVal &= ~m_iMask;
}
}
HSUFileOpen::HSUFileOpen(Char_t *pFileName, EFileDialogMode eMode,
const Char_t **pFileTypes, const TGWindow *pParent)
: TGHorizontalFrame(pParent, 10, 10)
{
m_pTStrFileName = NULL;
if((m_pFileName = pFileName) == NULL)
Error("HSUFileOpen", "pFileName == NULL");
m_bDeleteFileTypes = kFALSE;
Init(eMode, pFileTypes);
}
HSUFileOpen::HSUFileOpen(TString *pFileName, EFileDialogMode eMode,
const Char_t **pFileTypes, const TGWindow *pParent)
: TGHorizontalFrame(pParent, 10, 10)
{
m_pFileName = NULL;
if((m_pTStrFileName = pFileName) == NULL)
Error("HSUFileOpen", "pFileName == NULL");
m_bDeleteFileTypes = kFALSE;
Init(eMode, pFileTypes);
}
HSUFileOpen::HSUFileOpen(Char_t *pFileName, EFileDialogMode eMode,
UInt_t uiFileTypes, const TGWindow *pParent)
: TGHorizontalFrame(pParent, 10, 10)
{
m_pTStrFileName = NULL;
if((m_pFileName = pFileName) == NULL)
Error("HSUFileOpen", "pFileName == NULL");
InitFilesType(uiFileTypes);
Init(eMode, m_pFileTypes);
}
HSUFileOpen::HSUFileOpen(TString *pFileName, EFileDialogMode eMode,
UInt_t uiFileTypes, const TGWindow *pParent)
: TGHorizontalFrame(pParent, 10, 10)
{
m_pFileName = NULL;
if((m_pTStrFileName = pFileName) == NULL)
Error("HSUFileOpen", "pFileName == NULL");
InitFilesType(uiFileTypes);
Init(eMode, m_pFileTypes);
}
void HSUFileOpen::InitFilesType(UInt_t uiFileTypes)
{
Int_t i, iMax, k;
iMax = sizeof(gOpenAsTypes) / (2 * sizeof(const Char_t *));
m_pFileTypes = new const Char_t* [2 * iMax];
for(i = 0; i < 2 * iMax; i++)
m_pFileTypes[i] = NULL;
for(k = 0, i = 0; i < iMax - 1; i++)
{
if((uiFileTypes & (1 << i)) == 0)
continue;
m_pFileTypes[k++] = gOpenAsTypes[2 * i];
m_pFileTypes[k++] = gOpenAsTypes[2 * i + 1];
}
if(k == 0)
{
m_pFileTypes[k++] = gOpenAsTypes[2 * iMax - 4];
m_pFileTypes[k++] = gOpenAsTypes[2 * iMax - 3];
}
m_pFileTypes[k++] = gOpenAsTypes[2 * iMax - 2];
m_pFileTypes[k++] = gOpenAsTypes[2 * iMax - 1];
m_bDeleteFileTypes = kTRUE;
}
void HSUFileOpen::Init(EFileDialogMode eMode, const Char_t **pFileTypes)
{
static const Char_t *pIconName = "folder_t.xpm";
m_eMode = eMode;
m_pFileTypes = pFileTypes;
m_pTextField = new TGTextEntry(this, (m_pTStrFileName != NULL) ?
m_pTStrFileName->Data() : m_pFileName);
AddFrame(m_pTextField, &g_FileOpenEditHints);
m_pTextField->SetWidth(10 * m_pTextField->GetDefaultHeight());
if((m_pPicture = fClient->GetPicture(pIconName)) == NULL)
Error("HSUFileOpen", "%s not found !\n", pIconName);
m_pButton = new TGPictureButton(this, m_pPicture, 1);
AddFrame(m_pButton, &g_FileOpenButtonHints);
}
HSUFileOpen::~HSUFileOpen(void)
{
SAFE_DELETE(m_pTextField);
SAFE_DELETE(m_pButton);
if(m_pPicture != NULL)
{
fClient->FreePicture(m_pPicture);
m_pPicture = NULL;
}
if((m_bDeleteFileTypes) && (m_pFileTypes != NULL))
{
delete [] m_pFileTypes;
m_pFileTypes = NULL;
}
}
void HSUFileOpen::Reset(void)
{
if(m_pTStrFileName != NULL)
m_pTextField->SetText(m_pTStrFileName->Data());
else
{
if(m_pFileName != NULL)
m_pTextField->SetText(m_pFileName);
}
}
void HSUFileOpen::SetData(void)
{
if(m_pTStrFileName != NULL)
{
*m_pTStrFileName = m_pTextField->GetText();
return;
}
if(m_pFileName == NULL)
{
Error("SetData", "m_pFileName == NULL");
return;
}
strcpy(m_pFileName, m_pTextField->GetText());
}
TGDimension HSUFileOpen::GetDefaultSize() const
{
Int_t iWidth = m_pTextField->GetDefaultWidth();
Int_t iHeight = m_pTextField->GetDefaultHeight();
Int_t i;
if((i = m_pButton->GetDefaultHeight()) > iHeight)
iHeight = i;
iWidth += m_pButton->GetDefaultWidth() + OPEN_FILE_SPACE;
return TGDimension(iWidth, iHeight);
}
void HSUFileOpen::Resize(UInt_t w, UInt_t h)
{
SetWidth(w);
SetHeight(h);
m_pButton->Resize(m_pButton->GetDefaultSize());
m_pTextField->Resize(w - OPEN_FILE_SPACE - m_pButton->GetDefaultWidth(), h);
}
Bool_t HSUFileOpen::ProcessMessage(Long_t lMsg, Long_t lParam1, Long_t)
{
switch(GET_MSG(lMsg))
{
case kC_COMMAND:
switch(GET_SUBMSG(lMsg))
{
case kCM_BUTTON:
if(lParam1 != 0)
OpenFileDialog();
break;
default:
break;
}
default:
break;
}
return kTRUE;
}
void HSUFileOpen::OpenFileDialog(void)
{
TGFileInfo fInfo;
Char_t sFile[256];
const Char_t *pDirName;
void *pDir;
strcpy(sFile, m_pTextField->GetText());
fInfo.fFilename = sFile;
pDirName = gSystem->DirName(sFile);
if((pDir = gSystem->OpenDirectory(pDirName)) == NULL)
{
Warning("OpenFileDialog", "Directory: \"%s\" doesn't exisit", pDirName);
fInfo.fIniDir = StrDup(".");
}
else
{
fInfo.fIniDir = StrDup(pDirName);
gSystem->FreeDirectory(pDir);
}
fInfo.fFileTypes = ((m_pFileTypes == NULL)
? gOpenAsTypes : m_pFileTypes);
new TGFileDialog(fClient->GetRoot(), this, m_eMode, &fInfo);
if(fInfo.fFilename != NULL)
m_pTextField->SetText(fInfo.fFilename);
}
Last change: Sat May 22 13:12:55 2010
Last generated: 2010-05-22 13:12
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.