home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / ocl150a.zip / OCL / Samples / GTakPM / Source / FilesCnr.cpp < prev    next >
C/C++ Source or Header  |  1996-08-12  |  5KB  |  189 lines

  1. // GTakPM
  2. // (c) Benjamin Stein 1994
  3. // All Rights Reserved
  4. // FilesCnr.cpp
  5.  
  6. // $Header: W:/Projects/OCL/Samples/GTakPM/Source/rcs/FilesCnr.cpp 1.50 1996/08/11 23:48:06 B.STEIN Release $
  7.  
  8. #include "..\Source\GTakPM.hpp"
  9.  
  10.  
  11. #define SPLITBAR_OFFSET  150  // Pixel offset of details splitbar
  12.  
  13.  
  14. FilesCnr::FilesCnr(pGTPMWin Parent)
  15.   : OContainer<FileInfo, MINIRECORDCORE>(GTPM_FILECNR, Parent, 
  16.                CCS_AUTOPOSITION | CCS_MINIRECORDCORE | CCS_READONLY | CCS_MINIICONS,
  17.                CA_CONTAINERTITLE | CA_TITLESEPARATOR | 
  18.                CV_DETAIL | CA_DETAILSVIEWTITLES | CV_MINI),
  19.     populate(this, &FilesCnr::getFiles, 65536),
  20.     file_ico(FILE_ICO, NULLHANDLE),
  21.     fileS_ico(FILE_INC_ICO, NULLHANDLE)
  22.   {}
  23.  
  24. FilesCnr::~FilesCnr()
  25.   {}
  26.  
  27.  
  28. BOOL FilesCnr::setupDetails()
  29. {
  30.  PFIELDINFO      pfi, pfiFirst, pfiLastLeftCol;
  31.  FIELDINFOINSERT fii;
  32.  
  33.  
  34.  // Allocate storage for container column data
  35.  
  36.  pfi = allocDetailFields(5);
  37.  
  38.  if(!pfi)
  39.    return(FALSE);
  40.  
  41.  pfiFirst = pfi;
  42.  
  43.  pfi->flData     = CFA_BITMAPORICON | CFA_LEFT;
  44.  pfi->flTitle    = CFA_LEFT | CFA_FITITLEREADONLY;
  45.  pfi->pTitleData = "";
  46. #ifndef __WATCOM_CPLUSPLUS__
  47.  pfi->offStruct  = (ULONG) offsetof(FileInfo, rc.hptrIcon);
  48. #else
  49.  pfi->offStruct  = offsetof(FileInfo, rc) + offsetof(RECORDCORE, hptrIcon);
  50. #endif
  51.  pfi             = pfi->pNextFieldInfo;
  52.  
  53.  pfi->flData     = CFA_STRING | CFA_LEFT | CFA_HORZSEPARATOR;
  54.  pfi->flTitle    = CFA_LEFT | CFA_FITITLEREADONLY;
  55.  pfi->pTitleData = "File";
  56. #ifndef __WATCOM_CPLUSPLUS__
  57.  pfi->offStruct  = (ULONG)offsetof(FileInfo, rc.pszIcon);
  58. #else
  59.  pfi->offStruct  = offsetof(FileInfo, rc) + offsetof(RECORDCORE, pszIcon);
  60. #endif
  61.  pfiLastLeftCol  = pfi;                 // set splitbar after this column
  62.  pfi             = pfi->pNextFieldInfo;
  63.  
  64.  pfi->flData     = CFA_ULONG | CFA_RIGHT | CFA_HORZSEPARATOR | CFA_SEPARATOR;
  65.  pfi->flTitle    = CFA_LEFT | CFA_FITITLEREADONLY;
  66.  pfi->pTitleData = "Bytes";
  67.  pfi->offStruct  = (ULONG)offsetof(FileInfo, cbFile);
  68.  pfi                = pfi->pNextFieldInfo;
  69.  
  70.  pfi->flData     = CFA_DATE | CFA_RIGHT | CFA_HORZSEPARATOR | CFA_SEPARATOR;
  71.  pfi->flTitle    = CFA_LEFT | CFA_FITITLEREADONLY;
  72.  pfi->pTitleData = "Date";
  73.  pfi->offStruct  = (ULONG)offsetof(FileInfo, date);
  74.  pfi             = pfi->pNextFieldInfo;
  75.  
  76.  pfi->flData     = CFA_TIME | CFA_RIGHT | CFA_HORZSEPARATOR | CFA_SEPARATOR;
  77.  pfi->flTitle    = CFA_LEFT | CFA_FITITLEREADONLY;
  78.  pfi->pTitleData = "Time";
  79.  pfi->offStruct  = (ULONG)offsetof(FileInfo, time);
  80.  
  81.  memset(&fii, 0, sizeof(FIELDINFOINSERT));
  82.  fii.cb                   = (ULONG)(sizeof(FIELDINFOINSERT));    
  83.  fii.pFieldInfoOrder      = (PFIELDINFO)CMA_END;
  84.  fii.cFieldInfoInsert     = 5;
  85.  fii.fInvalidateFieldInfo = TRUE;              
  86.  
  87.  cnri.pFieldInfoLast = pfiLastLeftCol;
  88.  cnri.xVertSplitbar  = SPLITBAR_OFFSET;
  89.  
  90.  return((insertDetailInfo(pfiFirst, &fii)) &&
  91.         (setCnrInfo(CMA_PFIELDINFOLAST | CMA_XVERTSPLITBAR)));
  92. }
  93.  
  94.  
  95.  
  96. BOOL FilesCnr::setupItems()
  97. {
  98.  return(TRUE);
  99. }
  100.  
  101.  
  102. void FilesCnr::getFiles()
  103. {
  104.  PFILEFINDBUF3 pffb = NULL;
  105.  OString       FileSpec(scanDirectory);
  106.  ULONG         bufSize = sizeof(FILEFINDBUF3) * 200;
  107.  HDIR          hdir = HDIR_CREATE;
  108.  ULONG         ulMaxFiles = 200;
  109.  APIRET        rc;
  110.  
  111.  freeItems();
  112.  FileList.reset();
  113.  
  114.  DosAllocMem((PPVOID)&pffb, bufSize, PAG_READ | PAG_WRITE | PAG_COMMIT);
  115.  
  116.  if (!pffb)
  117.    return;
  118.  
  119.  FileSpec + "\\*";
  120.  
  121.  DosError(FERR_DISABLEHARDERR);
  122.  rc = DosFindFirst(FileSpec, &hdir, 
  123.                    FILE_NORMAL | FILE_HIDDEN | FILE_SYSTEM | FILE_READONLY,
  124.                    pffb, bufSize, &ulMaxFiles, FIL_STANDARD);
  125.  
  126.  while(!rc) {
  127.    insertFiles(pffb, ulMaxFiles);
  128.    rc = DosFindNext(hdir, pffb, bufSize, &ulMaxFiles); }
  129.  
  130.  DosFindClose(hdir);
  131.  DosError(FERR_ENABLEHARDERR);
  132.  DosFreeMem(pffb);
  133. }
  134.  
  135.  
  136. void FilesCnr::insertFiles(PFILEFINDBUF3 pffb, ULONG cFiles)
  137. {
  138.  PBYTE          pbBuf = (PBYTE) pffb;
  139.  pFileInfo      pfiFirst, pfi;
  140.  ULONG          i;
  141.  PFILEFINDBUF3  pffbFile;
  142.  RECORDINSERT   ri;
  143.  
  144.  if (!cFiles)
  145.    return;
  146.  
  147.  pfi = allocRecords(cFiles);
  148.  pfiFirst = pfi;
  149.  
  150.  for(i = 0; i < cFiles; i++)
  151.   {
  152.    pffbFile = (PFILEFINDBUF3) pbBuf;
  153.  
  154.    pFileItem item = new FileItem;
  155.  
  156.    item->fullName << scanDirectory;
  157.    item->fullName + "\\" + pffbFile->achName;
  158.    item->name     << pffbFile->achName;
  159.  
  160.    pfi->rc.pszIcon   = item->name;
  161.    pfi->fileItem     = item;
  162.    pfi->rc.hptrIcon  = file_ico.hptr;
  163.    pfi->date.day     = pffbFile->fdateLastWrite.day;
  164.    pfi->date.month   = pffbFile->fdateLastWrite.month;
  165.    pfi->date.year    = pffbFile->fdateLastWrite.year + 80;
  166.    pfi->time.seconds = pffbFile->ftimeLastWrite.twosecs;
  167.    pfi->time.minutes = pffbFile->ftimeLastWrite.minutes;
  168.    pfi->time.hours   = pffbFile->ftimeLastWrite.hours;
  169.    pfi->cbFile       = pffbFile->cbFile;
  170.  
  171.    FileList.add(item);
  172.    pfi = (pFileInfo) pfi->rc.preccNextRecord;   // Get the next container record
  173.    pbBuf += pffbFile->oNextEntryOffset;         // Point to the next file in the buffer
  174.   }
  175.  
  176.  memset(&ri, 0, sizeof( RECORDINSERT));
  177.  ri.cb                 = sizeof(RECORDINSERT);
  178.  ri.pRecordOrder       = (PRECORDCORE) CMA_END;
  179.  ri.pRecordParent      = (PRECORDCORE) NULL;
  180.  ri.zOrder             = (USHORT) CMA_TOP;
  181.  ri.cRecordsInsert     = cFiles;
  182.  ri.fInvalidateRecord  = TRUE;
  183.  
  184.  insertRecord(pfiFirst, &ri);
  185. }
  186.  
  187.  
  188. // end of source
  189.