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"));
/// METHODS
-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") {
return infoText;
}
-/**
- * Validates an Unicode number.
- */
QString UnicodeDialog::validateText(QString text)
{
QRegExp regex("([0-9]|[a-f])", Qt::CaseInsensitive, QRegExp::RegExp2);
switch (inputMethod) {
case InputHex:
+ // Remove all characters we don't want
while ((pos = regex.indexIn(text, pos)) != -1) {
newText += regex.cap(1);
pos++;
unicodeNumber->setText(newText);
unicodeNumber->setCursorPosition(cursorPos);
+ // Get the decimal number as uint to create the QChar from
uint value;
switch (inputMethod) {
case InputHex:
}
if (!ok) {
- //TODO!
+ // Impossible! validateText never fails!
}
// If an invalid character has been entered:
unicodeNumber->blockSignals(false);
}
+/**
+ * When return pressed, we return the selected unicode character
+ * if it was not a control character.
+ */
void UnicodeDialog::slotReturnPressed()
{
- emit charSelected(unicodeChar->text());
+ QString text = trimmedUnicodeNumber(unicodeNumber->text());
+ if (!controlCharacter(text)) {
+ emit charSelected(unicodeChar->text());
+ }
emit accept();
}
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:
/** Selected input method */
InputMethod inputMethod;
+
/** \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;