Branch libreoffice-5-0-4
[LibreOffice.git] / framework / source / xml / acceleratorconfigurationwriter.cxx
blobfce62f84893006ac83b055cf58431b11f0228e58
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3 * This file is part of the LibreOffice project.
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
9 * This file incorporates work covered by the following license notice:
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
20 #include <xml/acceleratorconfigurationwriter.hxx>
22 #include <acceleratorconst.h>
24 #include <com/sun/star/xml/sax/XExtendedDocumentHandler.hpp>
25 #include <com/sun/star/xml/sax/XAttributeList.hpp>
26 #include <com/sun/star/awt/KeyModifier.hpp>
28 #include <vcl/svapp.hxx>
29 #include <rtl/ustrbuf.hxx>
31 #include <comphelper/attributelist.hxx>
33 namespace framework{
35 AcceleratorConfigurationWriter::AcceleratorConfigurationWriter(const AcceleratorCache& rContainer,
36 const css::uno::Reference< css::xml::sax::XDocumentHandler >& xConfig )
37 : m_xConfig (xConfig )
38 , m_rContainer (rContainer )
42 AcceleratorConfigurationWriter::~AcceleratorConfigurationWriter()
46 void AcceleratorConfigurationWriter::flush()
48 css::uno::Reference< css::xml::sax::XExtendedDocumentHandler > xExtendedCFG(m_xConfig, css::uno::UNO_QUERY_THROW);
50 // prepare attribute list
51 ::comphelper::AttributeList* pAttribs = new ::comphelper::AttributeList;
52 css::uno::Reference< css::xml::sax::XAttributeList > xAttribs(static_cast< css::xml::sax::XAttributeList* >(pAttribs), css::uno::UNO_QUERY);
54 pAttribs->AddAttribute(AL_XMLNS_ACCEL, ATTRIBUTE_TYPE_CDATA, NS_XMLNS_ACCEL);
55 pAttribs->AddAttribute(AL_XMLNS_XLINK, ATTRIBUTE_TYPE_CDATA, NS_XMLNS_XLINK);
57 // generate xml
58 xExtendedCFG->startDocument();
60 xExtendedCFG->unknown(DOCTYPE_ACCELERATORS);
61 xExtendedCFG->ignorableWhitespace(OUString());
63 xExtendedCFG->startElement(AL_ELEMENT_ACCELERATORLIST, xAttribs);
64 xExtendedCFG->ignorableWhitespace(OUString());
66 // TODO think about threadsafe using of cache
67 AcceleratorCache::TKeyList lKeys = m_rContainer.getAllKeys();
68 AcceleratorCache::TKeyList::const_iterator pKey;
69 for ( pKey = lKeys.begin();
70 pKey != lKeys.end();
71 ++pKey )
73 const css::awt::KeyEvent& rKey = *pKey;
74 const OUString& rCommand = m_rContainer.getCommandByKey(rKey);
75 impl_ts_writeKeyCommandPair(rKey, rCommand, xExtendedCFG);
78 /* TODO write key-command list
79 std::vector< SfxAcceleratorConfigItem>::const_iterator p;
80 for ( p = m_aWriteAcceleratorList.begin(); p != m_aWriteAcceleratorList.end(); p++ )
81 WriteAcceleratorItem( *p );
84 xExtendedCFG->ignorableWhitespace(OUString());
85 xExtendedCFG->endElement(AL_ELEMENT_ACCELERATORLIST);
86 xExtendedCFG->ignorableWhitespace(OUString());
87 xExtendedCFG->endDocument();
90 void AcceleratorConfigurationWriter::impl_ts_writeKeyCommandPair(const css::awt::KeyEvent& aKey ,
91 const OUString& sCommand,
92 const css::uno::Reference< css::xml::sax::XDocumentHandler >& xConfig )
94 ::comphelper::AttributeList* pAttribs = new ::comphelper::AttributeList;
95 css::uno::Reference< css::xml::sax::XAttributeList > xAttribs (static_cast< css::xml::sax::XAttributeList* >(pAttribs) , css::uno::UNO_QUERY_THROW);
97 OUString sKey = m_rKeyMapping->mapCodeToIdentifier(aKey.KeyCode);
98 // TODO check if key is empty!
100 pAttribs->AddAttribute(AL_ATTRIBUTE_KEYCODE, ATTRIBUTE_TYPE_CDATA, sKey );
101 pAttribs->AddAttribute(AL_ATTRIBUTE_URL , ATTRIBUTE_TYPE_CDATA, sCommand);
103 if ((aKey.Modifiers & css::awt::KeyModifier::SHIFT) == css::awt::KeyModifier::SHIFT)
104 pAttribs->AddAttribute(AL_ATTRIBUTE_MOD_SHIFT, ATTRIBUTE_TYPE_CDATA, OUString("true"));
106 if ((aKey.Modifiers & css::awt::KeyModifier::MOD1) == css::awt::KeyModifier::MOD1)
107 pAttribs->AddAttribute(AL_ATTRIBUTE_MOD_MOD1, ATTRIBUTE_TYPE_CDATA, OUString("true"));
109 if ((aKey.Modifiers & css::awt::KeyModifier::MOD2) == css::awt::KeyModifier::MOD2)
110 pAttribs->AddAttribute(AL_ATTRIBUTE_MOD_MOD2, ATTRIBUTE_TYPE_CDATA, OUString("true"));
112 if ((aKey.Modifiers & css::awt::KeyModifier::MOD3) == css::awt::KeyModifier::MOD3)
113 pAttribs->AddAttribute(AL_ATTRIBUTE_MOD_MOD3, ATTRIBUTE_TYPE_CDATA, OUString("true"));
115 xConfig->ignorableWhitespace(OUString());
116 xConfig->startElement(AL_ELEMENT_ITEM, xAttribs);
117 xConfig->ignorableWhitespace(OUString());
118 xConfig->endElement(AL_ELEMENT_ITEM);
119 xConfig->ignorableWhitespace(OUString());
122 } // namespace framework
124 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */