1 /**************************************************************************** 2 ** 3 ** Copyright (C) 2016 The Qt Company Ltd. 4 ** Contact: https://www.qt.io/licensing/ 5 ** 6 ** This file is part of the Qt Linguist of the Qt Toolkit. 7 ** 8 ** $QT_BEGIN_LICENSE:GPL-EXCEPT$ 9 ** Commercial License Usage 10 ** Licensees holding valid commercial Qt licenses may use this file in 11 ** accordance with the commercial license agreement provided with the 12 ** Software or, alternatively, in accordance with the terms contained in 13 ** a written agreement between you and The Qt Company. For licensing terms 14 ** and conditions see https://www.qt.io/terms-conditions. For further 15 ** information use the contact form at https://www.qt.io/contact-us. 16 ** 17 ** GNU General Public License Usage 18 ** Alternatively, this file may be used under the terms of the GNU 19 ** General Public License version 3 as published by the Free Software 20 ** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT 21 ** included in the packaging of this file. Please review the following 22 ** information to ensure the GNU General Public License requirements will 23 ** be met: https://www.gnu.org/licenses/gpl-3.0.html. 24 ** 25 ** $QT_END_LICENSE$ 26 ** 27 ****************************************************************************/ 28 29 #ifndef MESSAGEEDITOR_H 30 #define MESSAGEEDITOR_H 31 32 #include "messagemodel.h" 33 34 #include <QtCore/QLocale> 35 #include <QtCore/QTimer> 36 37 #include <QtWidgets/QFrame> 38 #include <QtWidgets/QScrollArea> 39 40 QT_BEGIN_NAMESPACE 41 42 class QBoxLayout; 43 class QMainWindow; 44 class QTextEdit; 45 46 class MessageEditor; 47 class FormatTextEdit; 48 class FormWidget; 49 class FormMultiWidget; 50 51 struct MessageEditorData { 52 QWidget *container; 53 FormWidget *transCommentText; 54 QList<FormMultiWidget *> transTexts; 55 QString invariantForm; 56 QString firstForm; 57 qreal fontSize; 58 bool pluralEditMode; 59 }; 60 61 class MessageEditor : public QScrollArea 62 { 63 Q_OBJECT 64 65 public: 66 MessageEditor(MultiDataModel *dataModel, QMainWindow *parent = 0); 67 68 void showNothing(); 69 void showMessage(const MultiDataIndex &index); 70 void setNumerusForms(int model, const QStringList &numerusForms); 71 bool eventFilter(QObject *, QEvent *); 72 void setTranslation(int model, const QString &translation, int numerus); activeModel()73 int activeModel() const { return (m_editors.count() != 1) ? m_currentModel : 0; } 74 void setEditorFocus(int model); 75 void setUnfinishedEditorFocus(); 76 bool focusNextUnfinished(); 77 void setVisualizeWhitespace(bool value); 78 void setFontSize(const float fontSize); 79 float fontSize(); 80 81 signals: 82 void translationChanged(const QStringList &translations); 83 void translatorCommentChanged(const QString &comment); 84 void activeModelChanged(int model); 85 86 void undoAvailable(bool avail); 87 void redoAvailable(bool avail); 88 #ifndef QT_NO_CLIPBOARD 89 void cutAvailable(bool avail); 90 void copyAvailable(bool avail); 91 void pasteAvailable(bool avail); 92 #endif 93 void beginFromSourceAvailable(bool enable); 94 95 public slots: 96 void undo(); 97 void redo(); 98 #ifndef QT_NO_CLIPBOARD 99 void cut(); 100 void copy(); 101 void paste(); 102 #endif 103 void selectAll(); 104 void beginFromSource(); 105 void setEditorFocus(); 106 void setTranslation(int latestModel, const QString &translation); 107 void setLengthVariants(bool on); 108 void increaseFontSize(); 109 void decreaseFontSize(); 110 void resetFontSize(); 111 112 private slots: 113 void editorCreated(QTextEdit *); 114 void editorDestroyed(); 115 void selectionChanged(QTextEdit *); 116 void resetHoverSelection(); 117 void emitTranslationChanged(QTextEdit *); 118 void emitTranslatorCommentChanged(QTextEdit *); 119 #ifndef QT_NO_CLIPBOARD 120 void updateCanPaste(); 121 void clipboardChanged(); 122 #endif 123 void messageModelAppended(); 124 void messageModelDeleted(int model); 125 void allModelsDeleted(); 126 void setTargetLanguage(int model); 127 void reallyFixTabOrder(); 128 129 private: 130 void setupEditorPage(); 131 void setEditingEnabled(int model, bool enabled); 132 bool focusNextUnfinished(int start); 133 void resetSelection(); 134 void grabFocus(QWidget *widget); 135 void trackFocus(QWidget *widget); 136 void activeModelAndNumerus(int *model, int *numerus) const; 137 QTextEdit *activeTranslation() const; 138 QTextEdit *activeOr1stTranslation() const; 139 QTextEdit *activeTransComment() const; 140 QTextEdit *activeEditor() const; 141 QTextEdit *activeOr1stEditor() const; 142 MessageEditorData *modelForWidget(const QObject *o); 143 int activeTranslationNumerus() const; 144 QStringList translations(int model) const; 145 void updateBeginFromSource(); 146 void updateUndoRedo(); 147 #ifndef QT_NO_CLIPBOARD 148 void updateCanCutCopy(); 149 #endif 150 void addPluralForm(int model, const QString &label, bool writable); 151 void fixTabOrder(); 152 QPalette paletteForModel(int model) const; 153 void applyFontSize(); 154 155 MultiDataModel *m_dataModel; 156 157 MultiDataIndex m_currentIndex; 158 int m_currentModel; 159 int m_currentNumerus; 160 161 bool m_lengthVariants; 162 float m_fontSize; 163 164 bool m_undoAvail; 165 bool m_redoAvail; 166 bool m_cutAvail; 167 bool m_copyAvail; 168 169 bool m_clipboardEmpty; 170 bool m_visualizeWhitespace; 171 172 QTextEdit *m_selectionHolder; 173 QWidget *m_focusWidget; 174 QBoxLayout *m_layout; 175 FormWidget *m_source; 176 FormWidget *m_pluralSource; 177 FormWidget *m_commentText; 178 QList<MessageEditorData> m_editors; 179 180 QTimer m_tabOrderTimer; 181 }; 182 183 QT_END_NAMESPACE 184 185 #endif // MESSAGEEDITOR_H 186