15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// Copyright (c) 2011 The Chromium Authors. All rights reserved. 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// found in the LICENSE file. 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#ifndef PRINTING_PAGE_NUMBER_H_ 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define PRINTING_PAGE_NUMBER_H_ 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include <ostream> 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "printing/page_range.h" 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)namespace printing { 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class PrintSettings; 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// Represents a page series following the array of page ranges defined in a 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// PrintSettings. 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class PRINTING_EXPORT PageNumber { 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) public: 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Initializes the page to the first page in the settings's range or 0. 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) PageNumber(const PrintSettings& settings, int document_page_count); 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) PageNumber(); 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void operator=(const PageNumber& other); 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Initializes the page to the first page in the setting's range or 0. It 285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // initialize to npos if the range is empty and document_page_count is 0. 295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void Init(const PrintSettings& settings, int document_page_count); 305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Converts to a page numbers. 3253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) int ToInt() const { 335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return page_number_; 34197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch } 3553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 3606f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles) // Calculates the next page in the serie. 3753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) int operator++(); 38c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 39e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) // Returns an instance that represents the end of a serie. 40e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) static const PageNumber npos() { 4153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) return PageNumber(); 425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 43c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Equality operator. Only the current page number is verified so that 455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // "page != PageNumber::npos()" works. 465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool operator==(const PageNumber& other) const; 475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool operator!=(const PageNumber& other) const; 485d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) private: 50197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch // The page range to follow. 515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const PageRanges* ranges_; 525d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // The next page to be printed. -1 when not printing. 545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) int page_number_; 551e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) 56926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) // The next page to be printed. -1 when not used. Valid only if 575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // document()->settings().range.empty() is false. 585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) int page_range_index_; 595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Number of expected pages in the document. Used when ranges_ is NULL. 615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) int document_page_count_; 625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// Debug output support. 655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)template<class E, class T> 66c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)inline typename std::basic_ostream<E,T>& operator<<( 675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) typename std::basic_ostream<E,T>& ss, const PageNumber& page) { 685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return ss << page.ToInt(); 695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} // namespace printing 725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif // PRINTING_PAGE_NUMBER_H_ 745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)