/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-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/. * */ #include #include #include #include #include #include #include extern "C" SAL_DLLPUBLIC_EXPORT void SAL_CALL makeClassificationEditView(VclPtr & rRet, VclPtr & pParent, VclBuilder::stringmap &) { rRet = VclPtr::Create(pParent, WB_BORDER|WB_TABSTOP); } namespace svx { ClassificationEditEngine::ClassificationEditEngine(SfxItemPool* pItemPool) : EditEngine(pItemPool) {} OUString ClassificationEditEngine::CalcFieldValue(const SvxFieldItem& rField, sal_Int32 /*nPara*/, sal_Int32 /*nPos*/, Color*& /*rTxtColor*/, Color*& /*rFldColor*/) { OUString aString; const ClassificationField* pClassificationField = dynamic_cast(rField.GetField()); if (pClassificationField) aString = pClassificationField->msDescription; else aString = "Unknown"; return aString; } ClassificationEditView::ClassificationEditView(vcl::Window* pParent, WinBits nBits) : Control(pParent, nBits) { EnableRTL(false); const StyleSettings& rStyleSettings = Application::GetSettings().GetStyleSettings(); Color aBgColor = rStyleSettings.GetWindowColor(); float fScaleFactor = GetDPIScaleFactor(); set_width_request(500 * fScaleFactor); set_height_request(100 * fScaleFactor); SetMapMode(MapMode(MapUnit::MapTwip)); SetPointer(PointerStyle::Text); SetBackground(aBgColor); Size aOutputSize(GetOutputSize()); Size aSize(aOutputSize); aSize.Height() *= 4; pEdEngine.reset(new ClassificationEditEngine(EditEngine::CreatePool())); pEdEngine->SetPaperSize( aSize ); pEdEngine->SetRefDevice( this ); pEdEngine->SetControlWord(pEdEngine->GetControlWord() | EEControlBits::MARKFIELDS); pEdView.reset(new EditView(pEdEngine.get(), this)); pEdView->SetOutputArea(tools::Rectangle(Point(0,0), aOutputSize)); pEdView->SetBackgroundColor(aBgColor); pEdEngine->InsertView(pEdView.get()); } ClassificationEditView::~ClassificationEditView() { disposeOnce(); } void ClassificationEditView::Resize() { Size aOutputSize(GetOutputSize()); Size aSize(aOutputSize); aSize.Height() *= 4; pEdEngine->SetPaperSize(aSize); pEdView->SetOutputArea(tools::Rectangle(Point(0,0), aOutputSize)); Control::Resize(); } void ClassificationEditView::InsertField(const SvxFieldItem& rFieldItem) { pEdView->InsertField(rFieldItem); pEdView->Invalidate(); } void ClassificationEditView::InvertSelectionWeight() { ESelection aSelection = pEdView->GetSelection(); for (sal_Int32 nParagraph = aSelection.nStartPara; nParagraph <= aSelection.nEndPara; ++nParagraph) { FontWeight eFontWeight = WEIGHT_BOLD; std::unique_ptr pSet(new SfxItemSet(pEdEngine->GetParaAttribs(nParagraph))); if (const SfxPoolItem* pItem = pSet->GetItem(EE_CHAR_WEIGHT, false)) { const SvxWeightItem* pWeightItem = dynamic_cast(pItem); if (pWeightItem && pWeightItem->GetWeight() == WEIGHT_BOLD) eFontWeight = WEIGHT_NORMAL; } SvxWeightItem aWeight(eFontWeight, EE_CHAR_WEIGHT); pSet->Put(aWeight); pEdEngine->SetParaAttribs(nParagraph, *pSet); } pEdView->Invalidate(); } void ClassificationEditView::Paint(vcl::RenderContext& rRenderContext, const tools::Rectangle& rRect) { const StyleSettings& rStyleSettings = Application::GetSettings().GetStyleSettings(); Color aBgColor = rStyleSettings.GetWindowColor(); pEdView->SetBackgroundColor(aBgColor); SetBackground(aBgColor); Control::Paint(rRenderContext, rRect); pEdView->Paint(rRect); if (HasFocus()) pEdView->ShowCursor(); } void ClassificationEditView::MouseMove(const MouseEvent& rMEvt) { pEdView->MouseMove(rMEvt); } void ClassificationEditView::MouseButtonDown(const MouseEvent& rMEvt) { if (!HasFocus()) GrabFocus(); pEdView->MouseButtonDown(rMEvt); } void ClassificationEditView::MouseButtonUp(const MouseEvent& rMEvt) { pEdView->MouseButtonUp(rMEvt); } void ClassificationEditView::KeyInput(const KeyEvent& rKEvt) { sal_uInt16 nKey = rKEvt.GetKeyCode().GetModifier() + rKEvt.GetKeyCode().GetCode(); if (nKey == KEY_TAB || nKey == KEY_TAB + KEY_SHIFT) { Control::KeyInput( rKEvt ); } else if (!pEdView->PostKeyEvent(rKEvt)) { Control::KeyInput(rKEvt); } } void ClassificationEditView::Command(const CommandEvent& rCEvt) { pEdView->Command(rCEvt); } void ClassificationEditView::GetFocus() { pEdView->ShowCursor(); Control::GetFocus(); } } // end sfx2 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */