McoStatus Techkon::GetPaperDensity(void) { long tick = TickCount(); while (TickCount() - tick < 240) { if ((!IsBufferEmpty()) && (IsDataPresent())) return getNextPatch(paperDensity); } return MCO_FAILURE; }
bool Columns::Less(int column, const PhotoInfo& info1, const PhotoInfo& info2) const { // p1 < p2 bool present1= IsDataPresent(column, info1); bool present2= IsDataPresent(column, info2); if (!present1 && !present2) return false; if (present1 && !present2) return true; // present entries first (before empty ones) if (present2 && !present1) return false; switch (column) { case COL_PHOTO_NAME: // file name //return info1.GetName() < info2.GetName(); return NameIsLess/*StringILess*/(info1.GetName().c_str(), info2.GetName().c_str()); case COL_DATE_TIME: // date & time return info1.GetDateTime() < info2.GetDateTime(); // return info1.GetPhotoExactTime() < info2.GetPhotoExactTime(); //info1.tm_date_ < info2.tm_date_; //info1.date_time_ < info2.date_time_; case COL_EXP_TIME: // exposure time return info1.ExposureTimeValue() < info2.ExposureTimeValue(); case COL_FNUMBER: // f-number return info1.FNumberValue() < info2.FNumberValue(); case COL_EXP_PROG: // exp. program return info1.GetExposureProgram() < info2.GetExposureProgram(); case COL_EXP_BIAS: // exp. bias //TEST return info1.index_.Feature() < info2.index_.Feature(); return info1.GetExposureBias() > info2.GetExposureBias(); case COL_MET_MODE: // metering mode return info1.GetMeteringMode() < info2.GetMeteringMode(); case COL_LIGHT_SRC: // light source return info1.GetLightSource() < info2.GetLightSource(); case COL_FLASH: // flash return info1.GetFlash() < info2.GetFlash(); case COL_FOCAL_LENGTH: // focal length return info1.GetFocalLength() < info2.GetFocalLength(); case COL_FOCAL_LENGTH_35MM: return info1.GetFocalLength35mm() < info2.GetFocalLength35mm(); case COL_ISO: // ISO speed return info1.GetISOSpeed() < info2.GetISOSpeed(); case COL_ORIENTATION: // orientation return info1.OrientationField() < info2.OrientationField(); case COL_DIMENSIONS: // dimensions return info1.GetWidth() * info1.GetHeight() < info2.GetWidth() * info2.GetHeight(); case COL_FILE_SIZE: // file size return info1.GetFileSize() < info2.GetFileSize(); case COL_PATH: // path return info1.GetOriginalPath() < info2.GetOriginalPath(); case COL_MAKE: // make { int cmp= info1.GetMake().compare(info2.GetMake()); if (cmp != 0) return cmp < 0; return info1.GetModel() < info2.GetModel(); } case COL_MODEL: // model return info1.GetModel() < info2.GetModel(); case COL_DESCRIPTION: return info1.photo_desc_ < info2.photo_desc_; case COL_FILE_TYPE_NAME: return info1.GetFileTypeName() < info2.GetFileTypeName(); case COL_FILE_NAME: return info1.GetNameAndExt() < info2.GetNameAndExt(); // case COL_COMPR_BPP: // return info1.compressed_bpp_ < info2.compressed_bpp_; case COL_SUBJECT_DIST: return info1.GetSubjectDistance() < info2.GetSubjectDistance(); case COL_RATE: return info1.GetRating() < info2.GetRating(); #ifdef _TRUE_EXPOSURE_COL_ case COL_TRUE_EXPOSURE: return GetTrueIntensity(info1) < GetTrueIntensity(info2); #endif // GPS =================== case COL_GPS_LATITUDE: return info1.GetGpsData()->LessLatitude(*info2.GetGpsData()); break; case COL_GPS_LONGITUDE: return info1.GetGpsData()->LessLongitude(*info2.GetGpsData()); break; case COL_GPS_ALTITUDE: return info1.GetGpsData()->LessAltitude(*info2.GetGpsData()); break; case COL_GPS_TIME_STAMP: return info1.GetGpsData()->LessTimeStamp(*info2.GetGpsData()); break; default: if (column >= COL_METADATA_SET_START && column <= COL_METADATA_SET_END) { ASSERT(info1.HasMetadata()); // IsDataPresent should ASSERT(info2.HasMetadata()); // filter out img w/o metadata const String& s1= ::GetXmpDataField(*info1.GetMetadata(), column - COL_METADATA_SET_START); const String& s2= ::GetXmpDataField(*info2.GetMetadata(), column - COL_METADATA_SET_START); return s1 < s2; } else if (column >= COL_CUSTOM_SET_START && column <= COL_CUSTOM_SET_END) return custom_.Less(column - COL_CUSTOM_SET_START, info1, info2); else return info1.GetMakerNote()->Less(column, *info2.GetMakerNote()); } }
void Columns::GetInfo(String& out, int index, const PhotoInfo& inf) const { ASSERT(index >= 0 && index < PredefCount() || index >= COL_CUSTOM_SET_START && index <= COL_CUSTOM_SET_END || index >= COL_METADATA_SET_START && index <= COL_METADATA_SET_END); if (!IsDataPresent(index, inf)) { out = _T("-"); return; } switch (index) { case COL_PHOTO_NAME: out = inf.GetName(); break; case COL_DATE_TIME: out = inf.DateTimeStr(); break; case COL_EXP_TIME: out = inf.ExposureTime(); break; case COL_FNUMBER: out = inf.FNumber(); break; case COL_EXP_PROG: out = inf.ExposureProgram(); break; case COL_EXP_BIAS: out = inf.ExposureBias(); //TEST out = inf.index_.AsString(); break; case COL_MET_MODE: out = inf.MeteringMode(); break; case COL_LIGHT_SRC: out = inf.LightSource(); break; case COL_FLASH: out = inf.Flash(); break; case COL_FOCAL_LENGTH: out = inf.FocalLength(); break; case COL_FOCAL_LENGTH_35MM: out = inf.FocalLength35mm(); break; case COL_ISO: out = inf.ISOSpeed(); break; case COL_ORIENTATION: out = inf.Orientation(); break; case COL_DIMENSIONS: out = inf.Size(); break; case COL_FILE_SIZE: out = inf.FileSize(); break; case COL_PATH: out = inf.GetOriginalPath(); break; case COL_MAKE: out = inf.GetMake(); break; case COL_MODEL: out = inf.GetModel(); break; case COL_DESCRIPTION: inf.Description(out); break; case COL_FILE_TYPE_NAME: out = inf.GetFileTypeName(); break; case COL_FILE_NAME: out = inf.GetNameAndExt(); break; // case COL_COMPR_BPP: // TODO // { "Compressed Bits Per Pixel", "Compressed BPP", LVCFMT_RIGHT, 40 }, // break; case COL_SUBJECT_DIST: { extern String SubjectDistance(Rational dist); out = SubjectDistance(inf.GetSubjectDistance()); } // { "Subject Distance", "Subject Distance", LVCFMT_RIGHT, 60 }, break; case COL_RATE: { int stars= inf.GetRating(); if (stars != 0) { TCHAR buf[64]; out = _itot(stars, buf, 10); } else out = _T("-"); } break; #ifdef _TRUE_EXPOSURE_COL_ case COL_TRUE_EXPOSURE: { double ti= GetTrueIntensity(inf); if (ti > 0.0) { oStringstream ost; //ost.precision(3); ost << ti; out = ost.str(); } else out = _T("-"); } break; #endif case COL_GPS_LATITUDE: out = inf.GetGpsData()->GetLatitude(); break; case COL_GPS_LONGITUDE: out = inf.GetGpsData()->GetLongitude(); break; case COL_GPS_ALTITUDE: out = inf.GetGpsData()->GetAltitude(); break; case COL_GPS_TIME_STAMP: out = inf.GetGpsData()->GPSTimeStamp(); break; default: if (index >= COL_METADATA_SET_START && index <= COL_METADATA_SET_END) { ASSERT(inf.HasMetadata()); // IsDataPresent should filter out img w/o metadata out = ::GetXmpDataField(*inf.GetMetadata(), index - COL_METADATA_SET_START); // no multiple lines boost::algorithm::replace_all(out, _T("\xd\xa"), _T(" ")); break; } else if (index >= COL_CUSTOM_SET_START && index <= COL_CUSTOM_SET_END) { double num= 0.0; switch (custom_.CalcValue(index - COL_CUSTOM_SET_START, inf, num, out)) { case CustomColumns::Text: // no op; out already contains the result break; case CustomColumns::Number: { TCHAR buf[128]; _stprintf_s(buf, array_count(buf), _T("%.14g"), num); out = buf; } break; default: out = _T("<error>"); break; } } else inf.GetMakerNote()->GetInfo(index, out); break; } }