Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/LibreOffice/sd/source/ui/dlg/   (Office von Apache Version 25.8.3.2©)  Datei vom 5.10.2025 mit Größe 11 kB image not shown  

Quelle  dlgfield.cxx   Sprache: C

 
/* -*- 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/.
 *
 * This file incorporates work covered by the following license notice:
 *
 *   Licensed to the Apache Software Foundation (ASF) under one or more
 *   contributor license agreements. See the NOTICE file distributed
 *   with this work for additional information regarding copyright
 *   ownership. The ASF licenses this file to you under the Apache
 *   License, Version 2.0 (the "License"); you may not use this file
 *   except in compliance with the License. You may obtain a copy of
 *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
 */


#include <editeng/eeitem.hxx>
#include <editeng/flditem.hxx>
#include <sfx2/objsh.hxx>
#include <sfx2/docfile.hxx>
#include <svl/itemset.hxx>
#include <svx/langbox.hxx>
#include <editeng/langitem.hxx>
#include <unotools/useroptions.hxx>

#include <strings.hrc>
#include <sdresid.hxx>
#include <sdmod.hxx>
#include <dlgfield.hxx>
#include <DrawDocShell.hxx>
#include <utility>

/**
 * dialog to edit field commands
 */

SdModifyFieldDlg::SdModifyFieldDlg(weld::Window* pWindow, const SvxFieldData* pInField, SfxItemSet aSet)
    : GenericDialogController(pWindow, u"modules/simpress/ui/dlgfield.ui"_ustr, u"EditFieldsDialog"_ustr)
    , m_aInputSet(std::move(aSet))
    , m_pField(pInField)
    , m_xRbtFix(m_xBuilder->weld_radio_button(u"fixedRB"_ustr))
    , m_xRbtVar(m_xBuilder->weld_radio_button(u"varRB"_ustr))
    , m_xLbLanguage(new SvxLanguageBox(m_xBuilder->weld_combo_box(u"languageLB"_ustr)))
    , m_xLbFormat(m_xBuilder->weld_combo_box(u"formatLB"_ustr))
{
    m_xLbLanguage->SetLanguageList( SvxLanguageListFlags::ALL|SvxLanguageListFlags::ONLY_KNOWN, false );
    m_xLbLanguage->connect_changed(LINK(this, SdModifyFieldDlg, LanguageChangeHdl));
    FillControls();
}

SdModifyFieldDlg::~SdModifyFieldDlg()
{
}

/**
 * Returns the new field, owned by caller.
 * Returns NULL if nothing has changed.
 */

SvxFieldData* SdModifyFieldDlg::GetField()
{
    SvxFieldData* pNewField = nullptr;

    if( m_xRbtFix->get_state_changed_from_saved() ||
        m_xRbtVar->get_state_changed_from_saved() ||
        m_xLbFormat->get_value_changed_from_saved() )
    {
        ifauto pDateField = dynamic_castconst SvxDateField *>( m_pField ) )
        {
            SvxDateType   eType;
            SvxDateFormat eFormat;

            if( m_xRbtFix->get_active() )
                eType = SvxDateType::Fix;
            else
                eType = SvxDateType::Var;

            eFormat = static_cast<SvxDateFormat>( m_xLbFormat->get_active() + 2 );

            pNewField = new SvxDateField( *pDateField );
            static_cast<SvxDateField*>( pNewField )->SetType( eType );
            static_cast<SvxDateField*>( pNewField )->SetFormat( eFormat );
        }
        else ifauto pTimeField = dynamic_castconst SvxExtTimeField *>( m_pField ) )
        {
            SvxTimeType   eType;
            SvxTimeFormat eFormat;

            if( m_xRbtFix->get_active() )
                eType = SvxTimeType::Fix;
            else
                eType = SvxTimeType::Var;

            eFormat = static_cast<SvxTimeFormat>( m_xLbFormat->get_active() + 2 );

            pNewField = new SvxExtTimeField( *pTimeField );
            static_cast<SvxExtTimeField*>( pNewField )->SetType( eType );
            static_cast<SvxExtTimeField*>( pNewField )->SetFormat( eFormat );
        }
        else ifdynamic_castconst SvxExtFileField *>( m_pField ) !=  nullptr )
        {
            SvxFileType   eType;
            SvxFileFormat eFormat;

            if( m_xRbtFix->get_active() )
                eType = SvxFileType::Fix;
            else
                eType = SvxFileType::Var;

            eFormat = static_cast<SvxFileFormat>( m_xLbFormat->get_active() );

            ::sd::DrawDocShell* pDocSh = dynamic_cast< ::sd::DrawDocShell* >(SfxObjectShell::Current() );

            if( pDocSh )
            {
                OUString aName;
                if( pDocSh->HasName() )
                    aName = pDocSh->GetMedium()->GetName();

                // Get current filename, not the one stored in the old field
                pNewField = new SvxExtFileField( aName );
                static_cast<SvxExtFileField*>( pNewField )->SetType( eType );
                static_cast<SvxExtFileField*>( pNewField )->SetFormat( eFormat );
            }
        }
        else ifdynamic_castconst SvxAuthorField *>( m_pField ) !=  nullptr )
        {
            SvxAuthorType   eType;
            SvxAuthorFormat eFormat;

            if( m_xRbtFix->get_active() )
                eType = SvxAuthorType::Fix;
            else
                eType = SvxAuthorType::Var;

            eFormat = static_cast<SvxAuthorFormat>( m_xLbFormat->get_active() );

            // Get current state of address, not the old one
            SvtUserOptions aUserOptions;
            pNewField = new SvxAuthorField( aUserOptions.GetFirstName(), aUserOptions.GetLastName(), aUserOptions.GetID() );
            static_cast<SvxAuthorField*>( pNewField )->SetType( eType );
            static_cast<SvxAuthorField*>( pNewField )->SetFormat( eFormat );
        }
    }

    return pNewField;
}

void SdModifyFieldDlg::FillFormatList()
{
    LanguageType eLangType = m_xLbLanguage->get_active_id();

    m_xLbFormat->clear();

    ifauto pDateField = dynamic_castconst SvxDateField *>( m_pField ) )
    {
        SvxDateField aDateField( *pDateField );

        //SvxDateFormat::AppDefault,     // not used
        //SvxDateFormat::System,         // not used
        m_xLbFormat->append_text( SdResId( STR_STANDARD_SMALL ) );
        m_xLbFormat->append_text( SdResId( STR_STANDARD_BIG ) );

        SvNumberFormatter* pNumberFormatter = SdModule::get()->GetNumberFormatter();
        aDateField.SetFormat( SvxDateFormat::A );    // 13.02.96
        m_xLbFormat->append_text( aDateField.GetFormatted( *pNumberFormatter, eLangType ) );
        aDateField.SetFormat( SvxDateFormat::B );    // 13.02.1996
        m_xLbFormat->append_text( aDateField.GetFormatted( *pNumberFormatter, eLangType ) );
        aDateField.SetFormat( SvxDateFormat::C );    // 13.Feb 1996
        m_xLbFormat->append_text( aDateField.GetFormatted( *pNumberFormatter, eLangType ) );
        aDateField.SetFormat( SvxDateFormat::D );    // 13.February 1996
        m_xLbFormat->append_text( aDateField.GetFormatted( *pNumberFormatter, eLangType ) );
        aDateField.SetFormat( SvxDateFormat::E );    // Tue, 13.February 1996
        m_xLbFormat->append_text( aDateField.GetFormatted( *pNumberFormatter, eLangType ) );
        aDateField.SetFormat( SvxDateFormat::F );    // Tuesday, 13.February 1996
        m_xLbFormat->append_text( aDateField.GetFormatted( *pNumberFormatter, eLangType ) );

        m_xLbFormat->set_active( static_cast<sal_uInt16>(pDateField->GetFormat()) - 2 );
    }
    else ifauto pTimeField = dynamic_castconst SvxExtTimeField *>( m_pField ) )
    {
        SvxExtTimeField aTimeField( *pTimeField );

        //SvxTimeFormat::AppDefault,     // not used
        //SvxTimeFormat::System,         // not used
        m_xLbFormat->append_text( SdResId( STR_STANDARD_NORMAL ) );

        SvNumberFormatter* pNumberFormatter = SdModule::get()->GetNumberFormatter();
        aTimeField.SetFormat( SvxTimeFormat::HH24_MM );    // 13:49
        m_xLbFormat->append_text( aTimeField.GetFormatted( *pNumberFormatter, eLangType ) );
        aTimeField.SetFormat( SvxTimeFormat::HH24_MM_SS );   // 13:49:38
        m_xLbFormat->append_text( aTimeField.GetFormatted( *pNumberFormatter, eLangType ) );
        aTimeField.SetFormat( SvxTimeFormat::HH24_MM_SS_00 );  // 13:49:38.78
        m_xLbFormat->append_text( aTimeField.GetFormatted( *pNumberFormatter, eLangType ) );
        aTimeField.SetFormat( SvxTimeFormat::HH12_MM );    // 01:49
        m_xLbFormat->append_text( aTimeField.GetFormatted( *pNumberFormatter, eLangType ) );
        aTimeField.SetFormat( SvxTimeFormat::HH12_MM_SS );   // 01:49:38
        m_xLbFormat->append_text( aTimeField.GetFormatted( *pNumberFormatter, eLangType ) );
        aTimeField.SetFormat( SvxTimeFormat::HH12_MM_SS_00 );  // 01:49:38.78
        m_xLbFormat->append_text( aTimeField.GetFormatted( *pNumberFormatter, eLangType ) );
        //SvxTimeFormat::HH12_MM_AMPM,  // 01:49 PM
        //SvxTimeFormat::HH12_MM_SS_AMPM, // 01:49:38 PM
        //SvxTimeFormat::HH12_MM_SS_00_AMPM // 01:49:38.78 PM

        m_xLbFormat->set_active( static_cast<sal_uInt16>(pTimeField->GetFormat()) - 2 );
    }
    else ifauto pFileField = dynamic_castconst SvxExtFileField *>( m_pField ) )
    {
        m_xLbFormat->append_text( SdResId( STR_FILEFORMAT_NAME_EXT ) );
        m_xLbFormat->append_text( SdResId( STR_FILEFORMAT_FULLPATH ) );
        m_xLbFormat->append_text( SdResId( STR_FILEFORMAT_PATH ) );
        m_xLbFormat->append_text( SdResId( STR_FILEFORMAT_NAME ) );

        m_xLbFormat->set_active( static_cast<sal_uInt16>( pFileField->GetFormat() ) );
    }
    else ifauto pAuthorField = dynamic_castconst SvxAuthorField *>( m_pField ) )
    {
        SvxAuthorField aAuthorField( *pAuthorField );

        for( sal_uInt16 i = 0; i < 4; i++ )
        {
            aAuthorField.SetFormat( static_cast<SvxAuthorFormat>(i) );
            m_xLbFormat->append_text( aAuthorField.GetFormatted() );
        }

        m_xLbFormat->set_active( static_cast<sal_uInt16>( pAuthorField->GetFormat() ) );

    }

}

void SdModifyFieldDlg::FillControls()
{
    m_xLbFormat->clear();

    ifauto pDateField = dynamic_castconst SvxDateField *>( m_pField ) )
    {
        if( pDateField->GetType() == SvxDateType::Fix )
            m_xRbtFix->set_active(true);
        else
            m_xRbtVar->set_active(true);
    }
    else ifauto pTimeField = dynamic_castconst SvxExtTimeField *>( m_pField ) )
    {
        if( pTimeField->GetType() == SvxTimeType::Fix )
            m_xRbtFix->set_active(true);
        else
            m_xRbtVar->set_active(true);
    }
    else ifauto pFileField = dynamic_castconst SvxExtFileField *>( m_pField ) )
    {
        if( pFileField->GetType() == SvxFileType::Fix )
            m_xRbtFix->set_active(true);
        else
            m_xRbtVar->set_active(true);
    }
    else ifauto pAuthorField = dynamic_castconst SvxAuthorField *>( m_pField ) )
    {
        if( pAuthorField->GetType() == SvxAuthorType::Fix )
            m_xRbtFix->set_active(true);
        else
            m_xRbtVar->set_active(true);
    }
    m_xRbtFix->save_state();
    m_xRbtVar->save_state();

    ifconst SvxLanguageItem* pItem = m_aInputSet.GetItemIfSet(EE_CHAR_LANGUAGE ) )
        m_xLbLanguage->set_active_id(pItem->GetLanguage());

    m_xLbLanguage->save_active_id();

    FillFormatList();
    m_xLbFormat->save_value();
}

IMPL_LINK_NOARG(SdModifyFieldDlg, LanguageChangeHdl, weld::ComboBox&, void)
{
    FillFormatList();
}

SfxItemSet SdModifyFieldDlg::GetItemSet() const
{
    SfxItemSet aOutput( *m_aInputSet.GetPool(), svl::Items<EE_CHAR_LANGUAGE, EE_CHAR_LANGUAGE_CTL> );

    if (m_xLbLanguage->get_active_id_changed_from_saved())
    {
        LanguageType eLangType = m_xLbLanguage->get_active_id();
        SvxLanguageItem aItem( eLangType, EE_CHAR_LANGUAGE );
        aOutput.Put( aItem );

        SvxLanguageItem aItemCJK( eLangType, EE_CHAR_LANGUAGE_CJK );
        aOutput.Put( aItemCJK );

        SvxLanguageItem aItemCTL( eLangType, EE_CHAR_LANGUAGE_CTL );
        aOutput.Put( aItemCTL );
    }

    return aOutput;
}

/* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Messung V0.5
C=93 H=99 G=95

¤ Dauer der Verarbeitung: 0.15 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.