connect(m_ui.actionLengthVariants, SIGNAL(toggled(bool)),
m_messageEditor, SLOT(setLengthVariants(bool)));
m_messageEditor->setLengthVariants(m_ui.actionLengthVariants->isChecked());
+ m_messageEditor->setVisualizeWhitespace(m_ui.actionVisualizeWhitespace->isChecked());
m_focusWatcher = new FocusWatcher(m_messageEditor, this);
m_contextView->installEventFilter(m_focusWatcher);
connect(m_ui.actionResetSorting, SIGNAL(triggered()), this, SLOT(resetSorting()));
connect(m_ui.actionDisplayGuesses, SIGNAL(triggered()), m_phraseView, SLOT(toggleGuessing()));
connect(m_ui.actionStatistics, SIGNAL(triggered()), this, SLOT(toggleStatistics()));
+ connect(m_ui.actionVisualizeWhitespace, SIGNAL(triggered()), this, SLOT(toggleVisualizeWhitespace()));
connect(m_ui.menuView, SIGNAL(aboutToShow()), this, SLOT(updateViewMenu()));
m_ui.menuViewViews->addAction(m_contextDock->toggleViewAction());
m_ui.menuViewViews->addAction(m_messagesDock->toggleViewAction());
config.value(settingPath("Validators/PlaceMarkers"), true).toBool());
m_ui.actionLengthVariants->setChecked(
config.value(settingPath("Options/LengthVariants"), false).toBool());
+ m_ui.actionVisualizeWhitespace->setChecked(
+ config.value(settingPath("Options/VisualizeWhitespace"), true).toBool());
recentFiles().readConfig();
m_ui.actionPlaceMarkerMatches->isChecked());
config.setValue(settingPath("Options/LengthVariants"),
m_ui.actionLengthVariants->isChecked());
+ config.setValue(settingPath("Options/VisualizeWhitespace"),
+ m_ui.actionVisualizeWhitespace->isChecked());
config.setValue(settingPath("MainWindowState"),
saveState());
recentFiles().writeConfig();
}
}
+void MainWindow::toggleVisualizeWhitespace()
+{
+ m_messageEditor->setVisualizeWhitespace(m_ui.actionVisualizeWhitespace->isChecked());
+}
+
void MainWindow::maybeUpdateStatistics(const MultiDataIndex &index)
{
if (index.model() == m_currentIndex.model())
bool matchCase, bool ignoreAccelerators, bool skipObsolete);
void revalidate();
void toggleStatistics();
+ void toggleVisualizeWhitespace();
void onWhatsThis();
void updatePhraseDicts();
void updatePhraseDict(int model);
<addaction name="actionDisplayGuesses"/>
<addaction name="actionStatistics"/>
<addaction name="actionLengthVariants"/>
+ <addaction name="actionVisualizeWhitespace"/>
<addaction name="separator"/>
<addaction name="menuToolbars"/>
<addaction name="menuViewViews"/>
<string>Length Variants</string>
</property>
</action>
+ <action name="actionVisualizeWhitespace">
+ <property name="checkable">
+ <bool>true</bool>
+ </property>
+ <property name="text">
+ <string>Visualize whitespaces</string>
+ </property>
+ <property name="toolTip">
+ <string>Toogle visualize whitespaces in editors</string>
+ </property>
+ </action>
</widget>
<resources/>
<connections/>
m_redoAvail(false),
m_cutAvail(false),
m_copyAvail(false),
+ m_visualizeWhitespace(true),
m_selectionHolder(0),
m_focusWidget(0)
{
ed.transCommentText->setWhatsThis(tr("Here you can enter comments for your own use."
" They have no effect on the translated applications.") );
ed.transCommentText->getEditor()->installEventFilter(this);
+ ed.transCommentText->getEditor()->setVisualizeWhitespace(m_visualizeWhitespace);
connect(ed.transCommentText, SIGNAL(selectionChanged(QTextEdit*)),
SLOT(selectionChanged(QTextEdit*)));
connect(ed.transCommentText, SIGNAL(textChanged(QTextEdit*)),
te->installEventFilter(this);
+ if (m_visualizeWhitespace) {
+ QTextOption option = te->document()->defaultTextOption();
+
+ option.setFlags(option.flags()
+ | QTextOption::ShowLineAndParagraphSeparators
+ | QTextOption::ShowTabsAndSpaces);
+ te->document()->setDefaultTextOption(option);
+ }
+
fixTabOrder();
return;
}
return focusNextUnfinished(m_currentModel + 1);
}
+void MessageEditor::setVisualizeWhitespace(bool value)
+{
+ m_visualizeWhitespace = value;
+ m_source->getEditor()->setVisualizeWhitespace(value);
+ m_pluralSource->getEditor()->setVisualizeWhitespace(value);
+ m_commentText->getEditor()->setVisualizeWhitespace(value);
+
+ foreach (const MessageEditorData &med, m_editors) {
+ med.transCommentText->getEditor()->setVisualizeWhitespace(value);
+ foreach (FormMultiWidget *widget, med.transTexts)
+ foreach (FormatTextEdit *te, widget->getEditors())
+ te->setVisualizeWhitespace(value);
+ }
+}
+
QT_END_NAMESPACE
void setEditorFocus(int model);
void setUnfinishedEditorFocus();
bool focusNextUnfinished();
+ void setVisualizeWhitespace(bool value);
signals:
void translationChanged(const QStringList &translations);
bool m_copyAvail;
bool m_clipboardEmpty;
+ bool m_visualizeWhitespace;
QTextEdit *m_selectionHolder;
QWidget *m_focusWidget;
{
setLineWrapMode(QTextEdit::WidgetWidth);
setAcceptRichText(false);
- QTextOption option = document()->defaultTextOption();
- option.setFlags(option.flags()
- | QTextOption::ShowLineAndParagraphSeparators
- | QTextOption::ShowTabsAndSpaces);
- document()->setDefaultTextOption(option);
// Do not set different background if disabled
QPalette p = palette();
}
}
+void FormatTextEdit::setVisualizeWhitespace(bool value)
+{
+ QTextOption option = document()->defaultTextOption();
+ if (value) {
+ option.setFlags(option.flags()
+ | QTextOption::ShowLineAndParagraphSeparators
+ | QTextOption::ShowTabsAndSpaces);
+ } else {
+ option.setFlags(option.flags()
+ & ~QTextOption::ShowLineAndParagraphSeparators
+ & ~QTextOption::ShowTabsAndSpaces);
+ }
+ document()->setDefaultTextOption(option);
+}
+
FormWidget::FormWidget(const QString &label, bool isEditable, QWidget *parent)
: QWidget(parent),
m_hideWhenEmpty(false)
public slots:
void setPlainText(const QString & text, bool userAction);
+ void setVisualizeWhitespace(bool value);
private:
MessageHighlighter *m_highlighter;