bool Rectangle::Intersect(Rectangle* rect) {
    GLfloat xLeft2 = rect->GetXLeft();
    GLfloat xRight2 = rect->GetXRight();
    GLfloat yDown2 = rect->GetYDown();
    GLfloat yUp2 = rect->GetYUp();

    bool xOverlap = IsValueInRange(xLeft, xLeft2, xRight2) ||
                    IsValueInRange(xLeft2, xLeft, xRight);

    bool yOverlap = IsValueInRange(yDown, yDown2, yUp2) ||
            IsValueInRange(yDown2, yDown, yUp);

    return xOverlap && yOverlap;
}
bool CCellListCtrl::InsertItem(int index, LPCTSTR text)
{
	if (!IsValueInRange(index, 0, GetItemCount())) {
		return false;
	}

	Item item;
	item.Text.resize((std::max)(1, GetColumnCount()));
	item.Text[0] = text;
	m_items.insert(m_items.begin() + index, item);

	return true;
}
bool CCellListCtrl::InsertColumn(int index, LPCTSTR headingText, int width)
{
	if (!IsValueInRange(index, 0, GetColumnCount())) {
		return false;
	}

	Column column = {};
	column.HeadingText = headingText;
	column.Width = width;
	m_columns.insert(m_columns.begin() + index, column);

	int itemCount = GetItemCount();
	for (int iItem = 0; iItem < itemCount; ++iItem) {
		m_items[iItem].Text.resize(m_columns.size());
	}

	return true;
}
void FileTimeSearcher::DoUpdate(const Result& result)
{
    QDateTime matchedFileTime = GetTimeFrom(result, matchedTimeType);

    qDebug() << "FileTimeSearcher::DoUpdate()";
    qDebug() << "matchedFileTime: " << matchedFileTime;

    // no size bound limit
    if (beginTime.isNull() && endTime.isNull())
    {
  // throw exception
  // should not happen
    }

    if (IsValueInRange(matchedFileTime, beginTime, endTime))
    {
  // ok, meet requirement, pass it along
  qDebug() << "match meet time requirement";
  Notify(result);
    }
}