# -*- tab-width: 4; indent-tabs-mode: nil; py-indent-offset: 4 -*-
#
# This file is part of the LibreOffice project.
#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
#

from uitest.framework import UITestCase
from libreoffice.uno.propertyvalue import mkPropertyValues
from uitest.uihelper.common import get_state_as_dict
from uitest.uihelper.common import select_pos

class documentProperties(UITestCase):

    def assert_custom_properties(self, dialog, bIsFirstItemVisible):
        for i in range(6):
            aExpected = 'false'
            if bIsFirstItemVisible and i == 0:
                aExpected = 'true'
            xNameBox = dialog.getChild("namebox" + str(i + 1))
            xTypeBox = dialog.getChild("typebox" + str(i + 1))
            xValueEdit = dialog.getChild("valueedit" + str(i + 1))
            xRemoveBtn = dialog.getChild("remove" + str(i + 1))
            self.assertEqual(aExpected, get_state_as_dict(xNameBox)['ReallyVisible'])
            self.assertEqual(aExpected, get_state_as_dict(xTypeBox)['ReallyVisible'])
            self.assertEqual(aExpected, get_state_as_dict(xValueEdit)['ReallyVisible'])
            self.assertEqual(aExpected, get_state_as_dict(xRemoveBtn)['ReallyVisible'])

    def test_open_documentProperties_writer(self):
        with self.ui_test.create_doc_in_start_center("writer"):
            with self.ui_test.execute_dialog_through_command(".uno:SetDocumentProperties") as xDialog:
                xResetBtn = xDialog.getChild("reset")
                xResetBtn.executeAction("CLICK", tuple())

                xUserDataCheckbox = xDialog.getChild("userdatacb")  # apply user data
                xUserDataCheckbox.executeAction("CLICK", tuple())
                xThumbSaveCheckbox = xDialog.getChild("thumbnailsavecb")  # save preview image with document
                xThumbSaveCheckbox.executeAction("CLICK", tuple())

#digital signature
                xDigSignBtn = xDialog.getChild("signature")

                with self.ui_test.execute_blocking_action(xDigSignBtn.executeAction, args=('CLICK', ()), close_button="no"):
                    pass

                xTabs = xDialog.getChild("tabcontrol")
                select_pos(xTabs, "1")     #tab Description

                xTitleText = xDialog.getChild("title")
                xTitleText.executeAction("TYPE", mkPropertyValues({"TEXT":"Title text"}))
                xSubjectText = xDialog.getChild("subject")
                xSubjectText.executeAction("TYPE", mkPropertyValues({"TEXT":"Subject text"}))
                xKeywordsText = xDialog.getChild("keywords")
                xKeywordsText.executeAction("TYPE", mkPropertyValues({"TEXT":"Keywords text"}))
                xCommentsText = xDialog.getChild("comments")
                xCommentsText.executeAction("TYPE", mkPropertyValues({"TEXT":"Comments text"}))


#Font tab
                select_pos(xTabs, "4")     #tab Fonts
                xFontEmbedCheckbox = xDialog.getChild("embedFonts")
                xFontEmbedCheckbox.executeAction("CLICK", tuple())

#Security tab
                select_pos(xTabs, "3")     #tab Security
                xReadOnlyCheckbox = xDialog.getChild("readonly")
                xReadOnlyCheckbox.executeAction("CLICK", tuple())
                xRecordChangesCheckbox = xDialog.getChild("recordchanges")
                xRecordChangesCheckbox.executeAction("CLICK", tuple())
                xProtectBtn = xDialog.getChild("protect")

                with self.ui_test.execute_blocking_action(xProtectBtn.executeAction, args=('CLICK', ())) as dialog:
                    xPasswordText = dialog.getChild("pass1ed")
                    xPasswordText.executeAction("TYPE", mkPropertyValues({"TEXT":"password"}))
                    xConfirmText = dialog.getChild("confirm1ed")
                    xConfirmText.executeAction("TYPE", mkPropertyValues({"TEXT":"password"}))

                select_pos(xTabs, "2")     #tab Custom properties

                self.assert_custom_properties(xDialog, False)

                xAddBtn = xDialog.getChild("add")
                xAddBtn.executeAction("CLICK", tuple())

                self.assert_custom_properties(xDialog, True)

                xRemoveBtn = xDialog.getChild("remove1")
                xRemoveBtn.executeAction("CLICK", tuple())

                self.assert_custom_properties(xDialog, False)

                select_pos(xTabs, "5")     #tab Statistics
                xUpdateBtn = xDialog.getChild("update")
                xUpdateBtn.executeAction("CLICK", tuple())

#now open the dialog again and read the properties
            with self.ui_test.execute_dialog_through_command(".uno:SetDocumentProperties", close_button="cancel") as xDialog:
                xTitleText = xDialog.getChild("title")
                xSubjectText = xDialog.getChild("subject")
                xKeywordsText = xDialog.getChild("keywords")
                xCommentsText = xDialog.getChild("comments")
                xReadOnlyCheckbox = xDialog.getChild("readonly")
                xRecordChangesCheckbox = xDialog.getChild("recordchanges")
                xFontEmbedCheckbox = xDialog.getChild("embedFonts")
                xUserDataCheckbox = xDialog.getChild("userdatacb")
                xThumbSaveCheckbox = xDialog.getChild("thumbnailsavecb")
                self.assertEqual(get_state_as_dict(xTitleText)["Text"], "Title text")
                self.assertEqual(get_state_as_dict(xSubjectText)["Text"], "Subject text")
                self.assertEqual(get_state_as_dict(xKeywordsText)["Text"], "Keywords text")
                self.assertEqual(get_state_as_dict(xReadOnlyCheckbox)["Selected"], "true")
                self.assertEqual(get_state_as_dict(xRecordChangesCheckbox)["Selected"], "true")
                self.assertEqual(get_state_as_dict(xReadOnlyCheckbox)["Selected"], "true")
                self.assertEqual(get_state_as_dict(xFontEmbedCheckbox)["Selected"], "true")
                self.assertEqual(get_state_as_dict(xUserDataCheckbox)["Selected"], "false")
                self.assertEqual(get_state_as_dict(xThumbSaveCheckbox)["Selected"], "false")
                self.assertEqual(get_state_as_dict(xCommentsText)["Text"], "Comments text")
                xResetBtn = xDialog.getChild("reset")
                xResetBtn.executeAction("CLICK", tuple())


# vim: set shiftwidth=4 softtabstop=4 expandtab:
