Unicode dialog checking for control character
Comments added
WordWrap enabled for Unicode dialog
svn path=/trunk/kdenlive/; revision=3558
13 files changed:
buttonAlignCenter->setIcon(KIcon("format-justify-center"));
buttonAlignLeft->setIcon(KIcon("format-justify-left"));
buttonAlignRight->setIcon(KIcon("format-justify-right"));
buttonAlignCenter->setIcon(KIcon("format-justify-center"));
buttonAlignLeft->setIcon(KIcon("format-justify-left"));
buttonAlignRight->setIcon(KIcon("format-justify-right"));
+ buttonAlignNone->setIcon(KIcon("kdenlive-align-none"));
+ buttonInsertUnicode->setIcon(KIcon("kdenlive-insert-unicode"));
+
buttonAlignNone->setToolTip(i18n("No alignment"));
buttonAlignRight->setToolTip(i18n("Align right"));
buttonAlignLeft->setToolTip(i18n("Align left"));
buttonAlignNone->setToolTip(i18n("No alignment"));
buttonAlignRight->setToolTip(i18n("Align right"));
buttonAlignLeft->setToolTip(i18n("Align left"));
-QString UnicodeDialog::unicodeInfo(QString unicode_number)
+bool UnicodeDialog::controlCharacter(QString text)
- QString infoText("");
- QString u = unicode_number;
+ bool isControlCharacter = false;
+ QString t = text.toLower();
- while (unicode_number.at(0) == QChar('0')) {
- unicode_number = unicode_number.remove(0, 1);
+ switch (inputMethod) {
+ case InputHex:
+ if (t == ""
+ || (t.length() == 1 && !(t == "9" || t == "a" || t == "d"))
+ || (t.length() == 2 && t.at(0) == QChar('1'))) {
+ isControlCharacter = true;
+ }
+ break;
+
+ case InputDec:
+ break;
- if (false) {
- // Just a placeholder for reason of ease (shifting around lines)
+ return isControlCharacter;
+}
+
+QString UnicodeDialog::trimmedUnicodeNumber(QString text)
+{
+ while (text.length() > 0 && text.at(0) == QChar('0')) {
+ text = text.remove(0, 1);
+ }
+ return text;
+}
+
+QString UnicodeDialog::unicodeInfo(QString unicode_number)
+{
+ QString infoText("");
+ QString u = trimmedUnicodeNumber(unicode_number);
+
+ if (controlCharacter(u)) {
+ infoText = i18n("Control character. Cannot be inserted/printed. See <a href=\"http://en.wikipedia.org/wiki/Control_character\">Wikipedia:Control_character</a>");
} else if (u == "2009") {
infoText = i18n("A thin space, in HTML also &thinsp;. See <a href=\"http://en.wikipedia.org/wiki/Space_(punctuation)\">Wikipedia:Space_(punctuation)</a>");
} else if (u == "2019") {
} else if (u == "2009") {
infoText = i18n("A thin space, in HTML also &thinsp;. See <a href=\"http://en.wikipedia.org/wiki/Space_(punctuation)\">Wikipedia:Space_(punctuation)</a>");
} else if (u == "2019") {
-/**
- * Validates an Unicode number.
- */
QString UnicodeDialog::validateText(QString text)
{
QRegExp regex("([0-9]|[a-f])", Qt::CaseInsensitive, QRegExp::RegExp2);
QString UnicodeDialog::validateText(QString text)
{
QRegExp regex("([0-9]|[a-f])", Qt::CaseInsensitive, QRegExp::RegExp2);
switch (inputMethod) {
case InputHex:
switch (inputMethod) {
case InputHex:
+ // Remove all characters we don't want
while ((pos = regex.indexIn(text, pos)) != -1) {
newText += regex.cap(1);
pos++;
while ((pos = regex.indexIn(text, pos)) != -1) {
newText += regex.cap(1);
pos++;
unicodeNumber->setText(newText);
unicodeNumber->setCursorPosition(cursorPos);
unicodeNumber->setText(newText);
unicodeNumber->setCursorPosition(cursorPos);
+ // Get the decimal number as uint to create the QChar from
uint value;
switch (inputMethod) {
case InputHex:
uint value;
switch (inputMethod) {
case InputHex:
+ // Impossible! validateText never fails!
}
// If an invalid character has been entered:
}
// If an invalid character has been entered:
unicodeNumber->blockSignals(false);
}
unicodeNumber->blockSignals(false);
}
+/**
+ * When return pressed, we return the selected unicode character
+ * if it was not a control character.
+ */
void UnicodeDialog::slotReturnPressed()
{
void UnicodeDialog::slotReturnPressed()
{
- emit charSelected(unicodeChar->text());
+ QString text = trimmedUnicodeNumber(unicodeNumber->text());
+ if (!controlCharacter(text)) {
+ emit charSelected(unicodeChar->text());
+ }
UnicodeDialog(InputMethod inputMeth);
~UnicodeDialog();
UnicodeDialog(InputMethod inputMeth);
~UnicodeDialog();
- /** \brief Returns infos about an unicode number. Extendable/improvable ;) */
+ /** \brief Returns infos about a unicode number. Extendable/improvable ;) */
QString unicodeInfo(QString unicode_number);
private:
QString unicodeInfo(QString unicode_number);
private:
/** Selected input method */
InputMethod inputMethod;
/** Selected input method */
InputMethod inputMethod;
/** \brief Validates text and removes all invalid characters (non-hex e.g.) */
QString validateText(QString text);
/** \brief Validates text and removes all invalid characters (non-hex e.g.) */
QString validateText(QString text);
+ /** \brief Removes all leading zeros */
+ QString trimmedUnicodeNumber(QString text);
+ /** \brief Checks whether the given string is a control character */
+ bool controlCharacter(QString text);
int lastCursorPos;
QString lastUnicodeNumber;
int lastCursorPos;
QString lastUnicodeNumber;
<height>442</height>
</rect>
</property>
<height>442</height>
</rect>
</property>
</property>
</widget>
</item>
</property>
</widget>
</item>
+ <item>
+ <widget class="Line" name="line">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ </widget>
+ </item>
<item>
<widget class="QToolButton" name="buttonInsertUnicode">
<property name="text">
<item>
<widget class="QToolButton" name="buttonInsertUnicode">
<property name="text">
<height>143</height>
</rect>
</property>
<height>143</height>
</rect>
</property>
- <width>441</width>
- <height>143</height>
+ <width>96</width>
+ <height>73</height>
</rect>
</property>
<attribute name="label">
</rect>
</property>
<attribute name="label">
<height>224</height>
</rect>
</property>
<height>224</height>
</rect>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
</property>
+ <property name="wordWrap">
+ <bool>true</bool>
+ </property>
</widget>
</item>
<item row="0" column="0">
</widget>
</item>
<item row="0" column="0">