void ThumbnailSequence::Impl::reset( PageSequence const& pages, SelectionAction const selection_action, IntrusivePtr<PageOrderProvider const> const& order_provider) { m_ptrOrderProvider = order_provider; std::set<PageId> selected; PageInfo selection_leader; if (selection_action == KEEP_SELECTION) { selectedItems().swap(selected); if (m_pSelectionLeader) { selection_leader = m_pSelectionLeader->pageInfo; } } clear(); // Also clears the selection. size_t const num_pages = pages.numPages(); if (num_pages == 0) { return; } Item const* some_selected_item = 0; for (size_t i = 0; i < num_pages; ++i) { PageInfo const& page_info(pages.pageAt(i)); std::auto_ptr<CompositeItem> composite(getCompositeItem(0, page_info)); m_itemsInOrder.push_back(Item(page_info, composite.release())); Item const* item = &m_itemsInOrder.back(); item->composite->setItem(item); if (selected.find(page_info.id()) != selected.end()) { item->setSelected(true); moveToSelected(item); some_selected_item = item; } if (page_info.id() == selection_leader.id()) { m_pSelectionLeader = item; } } invalidateAllThumbnails(); if (!m_pSelectionLeader) { if (some_selected_item) { m_pSelectionLeader = some_selected_item; } } if (m_pSelectionLeader) { m_pSelectionLeader->setSelectionLeader(true); m_rOwner.emitNewSelectionLeader( selection_leader, m_pSelectionLeader->composite, DEFAULT_SELECTION_FLAGS ); } }
PageSequence ThumbnailSequence::Impl::toPageSequence() const { PageSequence pages; BOOST_FOREACH(Item const& item, m_itemsInOrder) { pages.append(item.pageInfo); }
bool Settings::Impl::checkEverythingDefined( PageSequence const& pages, PageId const* ignore) const { QMutexLocker const locker(&m_mutex); size_t const num_pages = pages.numPages(); for (size_t i = 0; i < num_pages; ++i) { PageInfo const& page_info = pages.pageAt(i); if (ignore && *ignore == page_info.id()) { continue; } Container::iterator const it(m_items.find(page_info.id())); if (it == m_items.end() || !it->contentSizeMM.isValid()) { return false; } } return true; }
void Settings::Impl::removePagesMissingFrom(PageSequence const& pages) { QMutexLocker const locker(&m_mutex); std::vector<PageId> sorted_pages; size_t const num_pages = pages.numPages(); sorted_pages.reserve(num_pages); for (size_t i = 0; i < num_pages; ++i) { sorted_pages.push_back(pages.pageAt(i).id()); } std::sort(sorted_pages.begin(), sorted_pages.end()); UnorderedItems::const_iterator it(m_unorderedItems.begin()); UnorderedItems::const_iterator const end(m_unorderedItems.end()); while (it != end) { if (std::binary_search(sorted_pages.begin(), sorted_pages.end(), it->pageId)) { ++it; } else { m_unorderedItems.erase(it++); } } }