// Copyright 2014 PDFium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

#include "../../include/fpdfdoc/fpdf_doc.h"
CPDF_ViewerPreferences::CPDF_ViewerPreferences(CPDF_Document *pDoc): m_pDoc(pDoc)
{
}
CPDF_ViewerPreferences::~CPDF_ViewerPreferences()
{
}
bool CPDF_ViewerPreferences::IsDirectionR2L() const
{
    CPDF_Dictionary *pDict = m_pDoc->GetRoot();
    pDict = pDict->GetDict(FX_BSTRC("ViewerPreferences"));
    if (!pDict)	{
        return false;
    }
    return FX_BSTRC("R2L") == pDict->GetString(FX_BSTRC("Direction"));
}
bool CPDF_ViewerPreferences::PrintScaling() const
{
    CPDF_Dictionary *pDict = m_pDoc->GetRoot();
    pDict = pDict->GetDict(FX_BSTRC("ViewerPreferences"));
    if (!pDict)	{
        return true;
    }
    return FX_BSTRC("None") != pDict->GetString(FX_BSTRC("PrintScaling"));
}
int32_t CPDF_ViewerPreferences::NumCopies() const
{
    CPDF_Dictionary *pDict = m_pDoc->GetRoot();
    pDict = pDict->GetDict(FX_BSTRC("ViewerPreferences"));
    if (!pDict) {
        return 1;
    }
    return pDict->GetInteger(FX_BSTRC("NumCopies"));
}
CPDF_Array* CPDF_ViewerPreferences::PrintPageRange() const
{
    CPDF_Dictionary *pDict = m_pDoc->GetRoot();
    CPDF_Array *pRange = NULL;
    pDict = pDict->GetDict(FX_BSTRC("ViewerPreferences"));
    if (!pDict) {
        return pRange;
    }
    pRange = pDict->GetArray(FX_BSTRC("PrintPageRange"));
    return pRange;
}
CFX_ByteString CPDF_ViewerPreferences::Duplex() const
{
    CPDF_Dictionary *pDict = m_pDoc->GetRoot();
    pDict = pDict->GetDict(FX_BSTRC("ViewerPreferences"));
    if (!pDict) {
        return FX_BSTRC("None");
    }
    return pDict->GetString(FX_BSTRC("Duplex"));
}
