okular/ui/annotationwidgets.h
Simone Gaiarin a33cb321df Improve layout of annotation configuration dialogs
Summary:
The config dialog of each annotation tool is now a form layout without group boxes. Everything is aligned.

Reviewers: #okular, #vdg, ngraham, aacid

Reviewed By: #okular, #vdg, ngraham, aacid

Subscribers: sander, davidhurka, aacid, okular-devel, knambiar, ngraham

Tags: #okular

Maniphest Tasks: T8076

Differential Revision: https://phabricator.kde.org/D10859
2019-06-24 07:36:21 +02:00

283 lines
6.8 KiB
C++

/***************************************************************************
* Copyright (C) 2006 by Pino Toscano <pino@kde.org> *
* *
* 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. *
***************************************************************************/
#ifndef _ANNOTATIONWIDGETS_H_
#define _ANNOTATIONWIDGETS_H_
#include <qwidget.h>
#include "core/annotations.h"
class QCheckBox;
class QComboBox;
class QDoubleSpinBox;
class QFormLayout;
class QLabel;
class QWidget;
class KColorButton;
class QSpinBox;
class KFontRequester;
class AnnotationWidget;
class PixmapPreviewSelector
: public QWidget
{
Q_OBJECT
public:
explicit PixmapPreviewSelector( QWidget * parent = nullptr );
virtual ~PixmapPreviewSelector();
void setIcon( const QString& icon );
QString icon() const;
void addItem( const QString& item, const QString& id );
void setPreviewSize( int size );
int previewSize() const;
void setEditable( bool editable );
Q_SIGNALS:
void iconChanged( const QString& );
private Q_SLOTS:
void iconComboChanged( const QString& icon );
private:
QString m_icon;
QLabel * m_iconLabel;
QComboBox * m_comboItems;
int m_previewSize;
};
/**
* A factory to create AnnotationWidget's.
*/
class AnnotationWidgetFactory
{
public:
static AnnotationWidget * widgetFor( Okular::Annotation * ann );
};
class AnnotationWidget
: public QObject
{
Q_OBJECT
public:
explicit AnnotationWidget( Okular::Annotation * ann );
virtual ~AnnotationWidget();
virtual Okular::Annotation::SubType annotationType() const;
QWidget * appearanceWidget();
QWidget * extraWidget();
virtual void applyChanges();
Q_SIGNALS:
void dataChanged();
protected:
QWidget * createAppearanceWidget();
virtual void createStyleWidget(QFormLayout * formLayout);
virtual QWidget * createExtraWidget();
void addColorButton( QWidget * widget, QFormLayout * formlayout );
void addOpacitySpinBox( QWidget * widget, QFormLayout * formlayout );
void addVerticalSpacer( QFormLayout * formlayout );
private:
Okular::Annotation * m_ann;
QWidget * m_appearanceWidget { nullptr };
QWidget * m_extraWidget { nullptr };
KColorButton *m_colorBn { nullptr };
QSpinBox *m_opacity { nullptr };
};
class QVBoxLayout;
class QFormLayout;
class TextAnnotationWidget
: public AnnotationWidget
{
Q_OBJECT
public:
explicit TextAnnotationWidget( Okular::Annotation * ann );
void applyChanges() override;
protected:
void createStyleWidget( QFormLayout * formlayout ) override;
private:
void createPopupNoteStyleUi( QWidget * widget, QFormLayout * formlayout );
void createInlineNoteStyleUi( QWidget * widget, QFormLayout * formlayout );
void createTypewriterStyleUi( QWidget * widget, QFormLayout * formlayout );
void addPixmapSelector( QWidget * widget, QFormLayout * formlayout );
void addFontRequester( QWidget * widget, QFormLayout * formlayout );
void addTextColorButton( QWidget * widget, QFormLayout * formlayout );
void addTextAlignComboBox( QWidget * widget, QFormLayout * formlayout );
void addWidthSpinBox( QWidget * widget, QFormLayout * formlayout );
inline bool isTypewriter() const { return ( m_textAnn->inplaceIntent() == Okular::TextAnnotation::TypeWriter ); }
Okular::TextAnnotation * m_textAnn;
PixmapPreviewSelector * m_pixmapSelector { nullptr };
KFontRequester * m_fontReq { nullptr };
KColorButton *m_textColorBn { nullptr };
QComboBox * m_textAlign { nullptr };
QDoubleSpinBox * m_spinWidth { nullptr };
};
class StampAnnotationWidget
: public AnnotationWidget
{
Q_OBJECT
public:
explicit StampAnnotationWidget( Okular::Annotation * ann );
void applyChanges() override;
protected:
void createStyleWidget( QFormLayout * formlayout ) override;
private:
Okular::StampAnnotation * m_stampAnn;
PixmapPreviewSelector * m_pixmapSelector;
};
class LineAnnotationWidget
: public AnnotationWidget
{
Q_OBJECT
public:
explicit LineAnnotationWidget( Okular::Annotation * ann );
void applyChanges() override;
protected:
void createStyleWidget( QFormLayout * formlayout ) override;
private:
static QIcon endStyleIcon( Okular::LineAnnotation::TermStyle endStyle, const QColor &lineColor );
Okular::LineAnnotation * m_lineAnn;
int m_lineType;
QDoubleSpinBox * m_spinLL { nullptr };
QDoubleSpinBox * m_spinLLE { nullptr };
QCheckBox * m_useColor { nullptr };
KColorButton * m_innerColor { nullptr };
QDoubleSpinBox * m_spinSize { nullptr };
QComboBox * m_startStyleCombo { nullptr };
QComboBox * m_endStyleCombo { nullptr };
};
class HighlightAnnotationWidget
: public AnnotationWidget
{
Q_OBJECT
public:
explicit HighlightAnnotationWidget( Okular::Annotation * ann );
void applyChanges() override;
protected:
void createStyleWidget( QFormLayout * formlayout ) override;
private:
Okular::HighlightAnnotation * m_hlAnn;
QComboBox * m_typeCombo;
};
class GeomAnnotationWidget
: public AnnotationWidget
{
Q_OBJECT
public:
explicit GeomAnnotationWidget( Okular::Annotation * ann );
void applyChanges() override;
protected:
void createStyleWidget( QFormLayout * formlayout ) override;
private:
Okular::GeomAnnotation * m_geomAnn;
QComboBox * m_typeCombo;
QCheckBox * m_useColor;
KColorButton * m_innerColor;
QDoubleSpinBox * m_spinSize;
};
class FileAttachmentAnnotationWidget
: public AnnotationWidget
{
Q_OBJECT
public:
explicit FileAttachmentAnnotationWidget( Okular::Annotation * ann );
void applyChanges() override;
protected:
void createStyleWidget( QFormLayout * formlayout ) override;
QWidget * createExtraWidget() override;
private:
Okular::FileAttachmentAnnotation * m_attachAnn;
PixmapPreviewSelector * m_pixmapSelector;
};
class CaretAnnotationWidget
: public AnnotationWidget
{
Q_OBJECT
public:
explicit CaretAnnotationWidget( Okular::Annotation * ann );
void applyChanges() override;
protected:
void createStyleWidget( QFormLayout * formlayout ) override;
private:
Okular::CaretAnnotation * m_caretAnn;
PixmapPreviewSelector * m_pixmapSelector;
};
class InkAnnotationWidget
: public AnnotationWidget
{
Q_OBJECT
public:
explicit InkAnnotationWidget( Okular::Annotation * ann );
void applyChanges() override;
protected:
void createStyleWidget( QFormLayout * formlayout ) override;
private:
Okular::InkAnnotation * m_inkAnn;
QDoubleSpinBox * m_spinSize;
};
#endif