diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 5bd26991b..e7fb14567 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,54 +1,54 @@ include: - https://invent.kde.org/sysadmin/ci-tooling/raw/master/invent/ci-before.yml - https://invent.kde.org/sysadmin/ci-tooling/raw/master/invent/ci-applications-linux.yml build_ubuntu_18_04: stage: build image: ubuntu:bionic only: - merge_requests before_script: - sed -i -e 's/# deb-src/deb-src/g' /etc/apt/sources.list - apt-get update - apt-get build-dep --yes --no-install-recommends okular - apt-get install --yes --no-install-recommends ninja-build libkf5crash-dev script: - mkdir -p build && cd build - cmake -G Ninja .. - ninja build_ubuntu_20_04: stage: build image: ubuntu:focal only: - merge_requests before_script: - sed -i -e 's/# deb-src/deb-src/g' /etc/apt/sources.list - apt-get update - apt-get build-dep --yes --no-install-recommends okular - apt-get install --yes --no-install-recommends ninja-build script: - mkdir -p build && cd build - cmake -DOKULAR_UI=desktop -G Ninja .. - ninja - rm -rf * - cmake -DOKULAR_UI=mobile -G Ninja .. - ninja build_clang_tidy: stage: build image: debian:unstable only: - merge_requests before_script: - echo 'deb-src http://deb.debian.org/debian unstable main' >> /etc/apt/sources.list - apt-get update - apt-get build-dep --yes --no-install-recommends okular - apt-get install --yes --no-install-recommends ninja-build clazy clang clang-tidy python python-yaml libkf5crash-dev libkf5purpose-dev libegl-dev jq script: - srcdir=`pwd` && mkdir -p /tmp/okular_build && cd /tmp/okular_build && CC=clang CXX=clazy CXXFLAGS="-Werror -Wno-deprecated-declarations" cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -G Ninja $srcdir && cat compile_commands.json | jq '[.[] | select(.file | contains("'"$srcdir"'"))]' > compile_commands.aux.json && cat compile_commands.aux.json | jq '[.[] | select(.file | contains("/synctex/")| not)]' > compile_commands.json - - CLAZY_CHECKS="qstring-arg,incorrect-emit,qhash-namespace,detaching-temporary,range-loop" ninja + - CLAZY_CHECKS="qstring-arg,incorrect-emit,qhash-namespace,detaching-temporary,range-loop,qdeleteall"" ninja # Fix the poppler header, remove when debian:unstable ships poppler 0.82 or later - sed -i "N;N;N;N; s#class MediaRendition\;\nclass MovieAnnotation\;\nclass ScreenAnnotation;#class MediaRendition\;#g" /usr/include/poppler/qt5/poppler-link.h - "run-clang-tidy -header-filter='.*/okular/.*' -checks='-*,performance-*,bugprone-*,readability-inconsistent-declaration-parameter-name,readability-string-compare,modernize-redundant-void-arg,modernize-use-bool-literals,modernize-make-unique,modernize-make-shared,modernize-use-override,modernize-use-equals-delete,modernize-use-emplace,modernize-loop-convert,modernize-use-nullptr,-bugprone-macro-parentheses,-bugprone-narrowing-conversions,-bugprone-branch-clone,-bugprone-incorrect-roundings' -config=\"{WarningsAsErrors: '*'}\"" diff --git a/core/form.cpp b/core/form.cpp index d10dd968f..b1ebb29a6 100644 --- a/core/form.cpp +++ b/core/form.cpp @@ -1,337 +1,337 @@ /*************************************************************************** * Copyright (C) 2007 by Pino Toscano * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * ***************************************************************************/ #include "form.h" #include "form_p.h" // qt includes #include #include "action.h" using namespace Okular; FormFieldPrivate::FormFieldPrivate( FormField::FieldType type ) : m_type( type ), m_activateAction( nullptr ) { } FormFieldPrivate::~FormFieldPrivate() { delete m_activateAction; - qDeleteAll( m_additionalActions.values() ); - qDeleteAll( m_additionalAnnotActions.values() ); + qDeleteAll( m_additionalActions ); + qDeleteAll( m_additionalAnnotActions ); } void FormFieldPrivate::setDefault() { m_default = value(); } FormField::FormField( FormFieldPrivate &dd ) : d_ptr( &dd ) { d_ptr->q_ptr = this; } FormField::~FormField() { delete d_ptr; } FormField::FieldType FormField::type() const { Q_D( const FormField ); return d->m_type; } bool FormField::isReadOnly() const { return false; } void FormField::setReadOnly( bool ) { } bool FormField::isVisible() const { return true; } void FormField::setVisible( bool ) { } bool FormField::isPrintable() const { return true; } void FormField::setPrintable( bool ) { } Action* FormField::activationAction() const { Q_D( const FormField ); return d->m_activateAction; } void FormField::setActivationAction( Action *action ) { Q_D( FormField ); delete d->m_activateAction; d->m_activateAction = action; } Action* FormField::additionalAction( AdditionalActionType type ) const { Q_D( const FormField ); return d->m_additionalActions.value(type); } void FormField::setAdditionalAction( AdditionalActionType type, Action *action ) { Q_D( FormField ); delete d->m_additionalActions.value(type); d->m_additionalActions[type] = action; } Action* FormField::additionalAction( Annotation::AdditionalActionType type ) const { Q_D( const FormField ); return d->m_additionalAnnotActions.value(type); } void FormField::setAdditionalAction( Annotation::AdditionalActionType type, Action *action ) { Q_D( FormField ); delete d->m_additionalAnnotActions.value(type); d->m_additionalAnnotActions[type] = action; } class Okular::FormFieldButtonPrivate : public Okular::FormFieldPrivate { public: FormFieldButtonPrivate() : FormFieldPrivate( FormField::FormButton ) { } Q_DECLARE_PUBLIC( FormFieldButton ) void setValue( const QString& v ) override { Q_Q( FormFieldButton ); q->setState( QVariant( v ).toBool() ); } QString value() const override { Q_Q( const FormFieldButton ); return QVariant::fromValue( q->state() ).toString(); } }; FormFieldButton::FormFieldButton() : FormField( *new FormFieldButtonPrivate() ) { } FormFieldButton::~FormFieldButton() { } void FormFieldButton::setState( bool ) { } void FormFieldButton::setIcon( Okular::FormField * ) { } class Okular::FormFieldTextPrivate : public Okular::FormFieldPrivate { public: FormFieldTextPrivate() : FormFieldPrivate( FormField::FormText ) { } Q_DECLARE_PUBLIC( FormFieldText ) void setValue( const QString& v ) override { Q_Q( FormFieldText ); q->setText( v ); } QString value() const override { Q_Q( const FormFieldText ); return q->text(); } }; FormFieldText::FormFieldText() : FormField( *new FormFieldTextPrivate() ) { } FormFieldText::~FormFieldText() { } void FormFieldText::setText( const QString& ) { } bool FormFieldText::isPassword() const { return false; } bool FormFieldText::isRichText() const { return false; } int FormFieldText::maximumLength() const { return -1; } Qt::Alignment FormFieldText::textAlignment() const { return Qt::AlignVCenter | Qt::AlignLeft; } bool FormFieldText::canBeSpellChecked() const { return false; } class Okular::FormFieldChoicePrivate : public Okular::FormFieldPrivate { public: FormFieldChoicePrivate() : FormFieldPrivate( FormField::FormChoice ) { } Q_DECLARE_PUBLIC( FormFieldChoice ) void setValue( const QString& v ) override { Q_Q( FormFieldChoice ); const QStringList choices = v.split( QLatin1Char (';'), QString::SkipEmptyParts ); QList newchoices; for ( const QString &str : choices ) { bool ok = true; int val = str.toInt( &ok ); if ( ok ) newchoices.append( val ); } if ( !newchoices.isEmpty() ) q->setCurrentChoices( newchoices ); } QString value() const override { Q_Q( const FormFieldChoice ); QList choices = q->currentChoices(); std::sort(choices.begin(), choices.end()); QStringList list; for ( const int c : qAsConst(choices) ) { list.append( QString::number( c ) ); } return list.join( QStringLiteral( ";" ) ); } }; FormFieldChoice::FormFieldChoice() : FormField( *new FormFieldChoicePrivate() ) { } FormFieldChoice::~FormFieldChoice() { } bool FormFieldChoice::isEditable() const { return false; } bool FormFieldChoice::multiSelect() const { return false; } void FormFieldChoice::setCurrentChoices( const QList< int >& ) { } QString FormFieldChoice::editChoice() const { return QString(); } void FormFieldChoice::setEditChoice( const QString& ) { } Qt::Alignment FormFieldChoice::textAlignment() const { return Qt::AlignVCenter | Qt::AlignLeft; } bool FormFieldChoice::canBeSpellChecked() const { return false; } class Okular::FormFieldSignaturePrivate : public Okular::FormFieldPrivate { public: FormFieldSignaturePrivate() : FormFieldPrivate( FormField::FormSignature ) { } Q_DECLARE_PUBLIC( FormFieldSignature ) void setValue( const QString& v ) override { Q_UNUSED( v ) } QString value() const override { return QString(); } }; FormFieldSignature::FormFieldSignature() : FormField( *new FormFieldSignaturePrivate() ) { } FormFieldSignature::~FormFieldSignature() { }