From c61a67584434b6712359f973c7767c3a9242074e Mon Sep 17 00:00:00 2001 From: "Simon A. Eugster" Date: Wed, 17 Jun 2009 18:35:16 +0000 Subject: [PATCH] Title Widget: Icon for align:none and Unicode Insert added Unicode dialog checking for control character Comments added WordWrap enabled for Unicode dialog svn path=/trunk/kdenlive/; revision=3558 --- icons/hi16-action-kdenlive-align-none.png | Bin 0 -> 709 bytes icons/hi16-action-kdenlive-insert-unicode.png | Bin 0 -> 708 bytes icons/hisc-action-kdenlive-align-none.svgz | Bin 0 -> 1720 bytes .../hisc-action-kdenlive-insert-unicode.svgz | Bin 0 -> 1745 bytes icons/ox16-action-kdenlive-align-none.png | Bin 0 -> 709 bytes icons/ox16-action-kdenlive-insert-unicode.png | Bin 0 -> 708 bytes icons/oxsc-action-kdenlive-align-none.svgz | Bin 0 -> 1720 bytes .../oxsc-action-kdenlive-insert-unicode.svgz | Bin 0 -> 1745 bytes src/titlewidget.cpp | 3 + src/unicodedialog.cpp | 55 ++++++++++++++---- src/unicodedialog.h | 7 ++- src/widgets/titlewidget_ui.ui | 17 ++++-- src/widgets/unicodedialog_ui.ui | 3 + 13 files changed, 67 insertions(+), 18 deletions(-) create mode 100644 icons/hi16-action-kdenlive-align-none.png create mode 100644 icons/hi16-action-kdenlive-insert-unicode.png create mode 100644 icons/hisc-action-kdenlive-align-none.svgz create mode 100644 icons/hisc-action-kdenlive-insert-unicode.svgz create mode 100644 icons/ox16-action-kdenlive-align-none.png create mode 100644 icons/ox16-action-kdenlive-insert-unicode.png create mode 100644 icons/oxsc-action-kdenlive-align-none.svgz create mode 100644 icons/oxsc-action-kdenlive-insert-unicode.svgz diff --git a/icons/hi16-action-kdenlive-align-none.png b/icons/hi16-action-kdenlive-align-none.png new file mode 100644 index 0000000000000000000000000000000000000000..f207824aea44a1c64d57be6596a22bd3974876ec GIT binary patch literal 709 zcmV;$0y_PPP)LCmfqaGx}0wJZO#1@sQDS?v_K`+%q57D-2SQKe$Zc`C-n|iP7em%rs zt2OJu_we(7=ltjU{=*Rw{ulmg>nYA4HR&s{Jq!SxjSU`ET~*d2N)$(}K7ry*xj(p- z2ml;l0HCU?N^{EvNRlzi7z;DT!b~uP7!$%G6T_mw!V&lFoJDs}lc}`a6d4~AX?f`p zfIg0hGCJTu*c+e5Zp@>g{xrUixbQ(Wesm7MEdc;7(++$NO93xuKamTIZ5Bs^X{!6u z3Tf)uo$gRiqK9Q5ALI?jhj}%PvSck}Q#V^_$;br z6N;LyA^K$upS#=efZ4NW<&9_hffNBg`JifA=(-+xtzN@vR zv-ha3>yF=@rZ_0qLt|^BcS>x{?EueX;{FY;SF~@K>vFXLF7Q0>`D0ch0ujNhn9JYQ z6-Hxk21y%#K>?>d>Z{5=)GFG=f8SDeqi| z|H`(qugOXLl~5@Z2m~VS*RQ@$XmMV}%mkx6l2v4@hy`b)(d8V$CtB0LoW=o1MDRH* rOvp0zgY=~x!;>d6vr~~V%Kw6&EsG`>C`@Zu00000NkvXXu0mjf`pP(a literal 0 HcmV?d00001 diff --git a/icons/hi16-action-kdenlive-insert-unicode.png b/icons/hi16-action-kdenlive-insert-unicode.png new file mode 100644 index 0000000000000000000000000000000000000000..ec47bea7258833b1153646cbd77b2968f5fcaa27 GIT binary patch literal 708 zcmV;#0z3VQP)RPZCTS9cs%b1OY7qr3#mQDDCkJhV zo!o?CJGh9@La~lI2qGflE+}dP1qVSv7ZKwkhzLFqF*UYAA8C_&b94W591OQf6FloV z-}4A&M)MT&qF<=k3}pByxSnD1k^l>AA2vSNBt6WT=HGAP`o1${v`rwVee3c%^x& ze44IseMLfs*V$BdrbY@%#SgR)$bdk|AuBlqDHWttsD8b+Nwv}hQ!UYRdc8;Jcu7hb z?AsgwY$>Iolmx&a=SLX8>uheTBq?QM-@yU1|EgA+_x>qpM0TGsLMI*;^Ws7=FGfN2 z=zkq>y*yp{es5IA_oZX~lQMPqrtNm09Cnvq43hW97eZUo>Vnwzk(M_W^J1^iiRY2b zSSESoZdhz_fQH$YCb`etye qOcj5W&GGv{o!pvJIM&iP0Q?14I}KrpLf&ft0000yZ`(K!zV}yX)k}+wB#L?~ae8RCivnFN&$98`G4)vDoq)EF4dZ>WF(mXlC;mpTey*g}j5SyhsZRZd5* z_4k~r&BF9>{k36yy;1!qrwbFJ^8!DvzdQeFUqs06L|da{mLJxvNySafP?70%ElhE! zGK*vi#H<_2iX3*^A~|0dRsp4G!y@jcZp2QNJN1Pf6e}9*5alT3nqBMJlX!ar>`)4+ ztQF5$vj&F}MVxFeC4|40rM?bJIGiQRbbIYA^~X~kbw`G(;6>O*euRAx_X1=` zapcWZAyK2a;f#etz8=cViDDT1FYEc{*dLkD2Y2Ud+udj8o|DzdL+R#_mxW34Jvmmr z{d(l38_8fqKRJg|uitIR!N2U%KWMed!#ph(#t+USs zS1{vu6_X!z`~SQ6T(KV-yl&GEcJXi$ylV%Ou-#xp&=GrREP-bdkBRfj(KDxh>#IT! zM|#WIei%$kQnA)&2o&HK5>QF@;4Y#I%W4hXsWrfA@H_JNgB&|M9+PcrqLw%_nd zNxt0u5Zg@h+nS-1UCno(&3K2)M)i8-bOl|1t!GCyCrg$u%s-Z_VEy189aga`w}P^^ z?U=(cnY1AVt)|iit&bwS=5V2ZVTA#1#^iGL26qQGlEn|7Dt?o(TaAXC^cHKzS5c#*kTepSs+ zT{SSX@w{pP_&lv@k~3A4oU0lD;a(I>N~R_Ks+XUnUd~mBf6`ab_g9FIzN@d4L~Uku za({Ki;mc7uuv=CLO8auiR(|4sQ#sVhJKd65AwGJ;`o;f0g`B|x^B#=LM@%JkDi{Pp#-D-E%) OpZy0{N^KR77ytlKVO`Mx literal 0 HcmV?d00001 diff --git a/icons/hisc-action-kdenlive-insert-unicode.svgz b/icons/hisc-action-kdenlive-insert-unicode.svgz new file mode 100644 index 0000000000000000000000000000000000000000..68525a0f22e3b2bad615dc969ecb1f1f59552491 GIT binary patch literal 1745 zcmV;?1}^y@iwFP!000000M%FNZsRr({-38%wJ4CFt6R1X+bPhdTP#qZz#i?-1ufAw zHxemOl#jerU!{-KA$8lzCfRO()Inf#4$i^h%*W-A$2`;an3sgnmF}3fu3?(6l+f); z|M=mJ5$akg5KU3WC|>E5=|A3HEx$7i?PrdWz^Qg1VyC^O_ho_#tX=PfC}PVx91bRF zh$iD(>qavS&@A`cD^1hDEG^?SS?P^@QSnU4rHO?zoMS3V%P}2G@5Pf|Jdwu99w#i% z87-A2Enf|UdAjMOr85Ul2{};|S+;Art^pE8d7=Uxjj<~DIHl^^wrv5gmwcX7e9Ryd zk2<5cL+gCN?P+*4>A@j%nCtD$>C=ZSqHUM<+s2j>`fixU^cj z(m#+?>{hzxs?`pY?M`${lCE@!u3ogpC{SR$1*Wc zB0$WzPchBls0~6(%!N@=0tJdq@Zw=?idCYh#3y_dnAR2`%t6eGt@O-Mz}*J;STL}# zAsMdyuu>$Dl^htqSDCU}XDsl6mKHlY^QZhQ=yuY|F)iSX{n;e*)G}{@yG-$>lu~v2 z<;qtKU_tR<#DC=|C2(bGp;~Or@tmO50j*N7qLqdGi&F-{N}`dljPdwY;>*8}s+bc6yYvZ1#-bv;3xWDgsQ zdTD2|?=!`xBjiPkwV69NozSr(`0Y#zo@zk{S~YyxlQIu0J@9?gj(k6Sdeg=&gK@GY z(0IJSHElm|eGvC%wi$$hccu!78pQ4NweVQAwzlASGEiFSC_A82+3lzXNxb722H&fR zy8cqx&;5QI2Ts&CLm#r!E1euwbTilSL$@a%-AQ4fdXCIjpKW74tsU(7x7(k}5I9{k%oJ)ZW zoiK#0zS`bU?$}|=W%>lK@VVxJP>9B8K$eWITVqE^gjTyhQjX{ zBVn11e$#qej%&z1`N~O?oJb|>y&zfkRvHKXyAqR4i}uIl|tJWnfjM|-;om9=eqh&_Qss- z6+^cP-@%FvTnSw+b-qKknb2uM+|A7 z8KE&$4d#m+@q5hWwz&CiC{IU}oTQ^Qrp>z9Q*D(I_=^3OmLeE!oTJl7Qc`PV9(PXn zVX9V4GP!8F@**W=0VNR=Dji=ic%N@FcIfzZpElMgxtB!+j-dqRTO|=$eUKZJlk61V z;m_!gN_!8OWMQ<0Xw*jyFqdpdg5(7o3Ti(=IrKFBph0R%dD@U*g=$+DIjXU`a=0040Kc$;+a5f}eISLVwXW%?cr nZq7F;f!n|TT3RaQx9|-v)*Wzrd$p9a_x9=^Z7acLCmfqaGx}0wJZO#1@sQDS?v_K`+%q57D-2SQKe$Zc`C-n|iP7em%rs zt2OJu_we(7=ltjU{=*Rw{ulmg>nYA4HR&s{Jq!SxjSU`ET~*d2N)$(}K7ry*xj(p- z2ml;l0HCU?N^{EvNRlzi7z;DT!b~uP7!$%G6T_mw!V&lFoJDs}lc}`a6d4~AX?f`p zfIg0hGCJTu*c+e5Zp@>g{xrUixbQ(Wesm7MEdc;7(++$NO93xuKamTIZ5Bs^X{!6u z3Tf)uo$gRiqK9Q5ALI?jhj}%PvSck}Q#V^_$;br z6N;LyA^K$upS#=efZ4NW<&9_hffNBg`JifA=(-+xtzN@vR zv-ha3>yF=@rZ_0qLt|^BcS>x{?EueX;{FY;SF~@K>vFXLF7Q0>`D0ch0ujNhn9JYQ z6-Hxk21y%#K>?>d>Z{5=)GFG=f8SDeqi| z|H`(qugOXLl~5@Z2m~VS*RQ@$XmMV}%mkx6l2v4@hy`b)(d8V$CtB0LoW=o1MDRH* rOvp0zgY=~x!;>d6vr~~V%Kw6&EsG`>C`@Zu00000NkvXXu0mjf`pP(a literal 0 HcmV?d00001 diff --git a/icons/ox16-action-kdenlive-insert-unicode.png b/icons/ox16-action-kdenlive-insert-unicode.png new file mode 100644 index 0000000000000000000000000000000000000000..ec47bea7258833b1153646cbd77b2968f5fcaa27 GIT binary patch literal 708 zcmV;#0z3VQP)RPZCTS9cs%b1OY7qr3#mQDDCkJhV zo!o?CJGh9@La~lI2qGflE+}dP1qVSv7ZKwkhzLFqF*UYAA8C_&b94W591OQf6FloV z-}4A&M)MT&qF<=k3}pByxSnD1k^l>AA2vSNBt6WT=HGAP`o1${v`rwVee3c%^x& ze44IseMLfs*V$BdrbY@%#SgR)$bdk|AuBlqDHWttsD8b+Nwv}hQ!UYRdc8;Jcu7hb z?AsgwY$>Iolmx&a=SLX8>uheTBq?QM-@yU1|EgA+_x>qpM0TGsLMI*;^Ws7=FGfN2 z=zkq>y*yp{es5IA_oZX~lQMPqrtNm09Cnvq43hW97eZUo>Vnwzk(M_W^J1^iiRY2b zSSESoZdhz_fQH$YCb`etye qOcj5W&GGv{o!pvJIM&iP0Q?14I}KrpLf&ft0000yZ`(K!zV}yX)k}+wB#L?~ae8RCivnFN&$98`G4)vDoq)EF4dZ>WF(mXlC;mpTey*g}j5SyhsZRZd5* z_4k~r&BF9>{k36yy;1!qrwbFJ^8!DvzdQeFUqs06L|da{mLJxvNySafP?70%ElhE! zGK*vi#H<_2iX3*^A~|0dRsp4G!y@jcZp2QNJN1Pf6e}9*5alT3nqBMJlX!ar>`)4+ ztQF5$vj&F}MVxFeC4|40rM?bJIGiQRbbIYA^~X~kbw`G(;6>O*euRAx_X1=` zapcWZAyK2a;f#etz8=cViDDT1FYEc{*dLkD2Y2Ud+udj8o|DzdL+R#_mxW34Jvmmr z{d(l38_8fqKRJg|uitIR!N2U%KWMed!#ph(#t+USs zS1{vu6_X!z`~SQ6T(KV-yl&GEcJXi$ylV%Ou-#xp&=GrREP-bdkBRfj(KDxh>#IT! zM|#WIei%$kQnA)&2o&HK5>QF@;4Y#I%W4hXsWrfA@H_JNgB&|M9+PcrqLw%_nd zNxt0u5Zg@h+nS-1UCno(&3K2)M)i8-bOl|1t!GCyCrg$u%s-Z_VEy189aga`w}P^^ z?U=(cnY1AVt)|iit&bwS=5V2ZVTA#1#^iGL26qQGlEn|7Dt?o(TaAXC^cHKzS5c#*kTepSs+ zT{SSX@w{pP_&lv@k~3A4oU0lD;a(I>N~R_Ks+XUnUd~mBf6`ab_g9FIzN@d4L~Uku za({Ki;mc7uuv=CLO8auiR(|4sQ#sVhJKd65AwGJ;`o;f0g`B|x^B#=LM@%JkDi{Pp#-D-E%) OpZy0{N^KR77ytlKVO`Mx literal 0 HcmV?d00001 diff --git a/icons/oxsc-action-kdenlive-insert-unicode.svgz b/icons/oxsc-action-kdenlive-insert-unicode.svgz new file mode 100644 index 0000000000000000000000000000000000000000..68525a0f22e3b2bad615dc969ecb1f1f59552491 GIT binary patch literal 1745 zcmV;?1}^y@iwFP!000000M%FNZsRr({-38%wJ4CFt6R1X+bPhdTP#qZz#i?-1ufAw zHxemOl#jerU!{-KA$8lzCfRO()Inf#4$i^h%*W-A$2`;an3sgnmF}3fu3?(6l+f); z|M=mJ5$akg5KU3WC|>E5=|A3HEx$7i?PrdWz^Qg1VyC^O_ho_#tX=PfC}PVx91bRF zh$iD(>qavS&@A`cD^1hDEG^?SS?P^@QSnU4rHO?zoMS3V%P}2G@5Pf|Jdwu99w#i% z87-A2Enf|UdAjMOr85Ul2{};|S+;Art^pE8d7=Uxjj<~DIHl^^wrv5gmwcX7e9Ryd zk2<5cL+gCN?P+*4>A@j%nCtD$>C=ZSqHUM<+s2j>`fixU^cj z(m#+?>{hzxs?`pY?M`${lCE@!u3ogpC{SR$1*Wc zB0$WzPchBls0~6(%!N@=0tJdq@Zw=?idCYh#3y_dnAR2`%t6eGt@O-Mz}*J;STL}# zAsMdyuu>$Dl^htqSDCU}XDsl6mKHlY^QZhQ=yuY|F)iSX{n;e*)G}{@yG-$>lu~v2 z<;qtKU_tR<#DC=|C2(bGp;~Or@tmO50j*N7qLqdGi&F-{N}`dljPdwY;>*8}s+bc6yYvZ1#-bv;3xWDgsQ zdTD2|?=!`xBjiPkwV69NozSr(`0Y#zo@zk{S~YyxlQIu0J@9?gj(k6Sdeg=&gK@GY z(0IJSHElm|eGvC%wi$$hccu!78pQ4NweVQAwzlASGEiFSC_A82+3lzXNxb722H&fR zy8cqx&;5QI2Ts&CLm#r!E1euwbTilSL$@a%-AQ4fdXCIjpKW74tsU(7x7(k}5I9{k%oJ)ZW zoiK#0zS`bU?$}|=W%>lK@VVxJP>9B8K$eWITVqE^gjTyhQjX{ zBVn11e$#qej%&z1`N~O?oJb|>y&zfkRvHKXyAqR4i}uIl|tJWnfjM|-;om9=eqh&_Qss- z6+^cP-@%FvTnSw+b-qKknb2uM+|A7 z8KE&$4d#m+@q5hWwz&CiC{IU}oTQ^Qrp>z9Q*D(I_=^3OmLeE!oTJl7Qc`PV9(PXn zVX9V4GP!8F@**W=0VNR=Dji=ic%N@FcIfzZpElMgxtB!+j-dqRTO|=$eUKZJlk61V z;m_!gN_!8OWMQ<0Xw*jyFqdpdg5(7o3Ti(=IrKFBph0R%dD@U*g=$+DIjXU`a=0040Kc$;+a5f}eISLVwXW%?cr nZq7F;f!n|TT3RaQx9|-v)*Wzrd$p9a_x9=^Z7acsetIcon(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")); diff --git a/src/unicodedialog.cpp b/src/unicodedialog.cpp index af995cac..c676d578 100644 --- a/src/unicodedialog.cpp +++ b/src/unicodedialog.cpp @@ -39,17 +39,42 @@ UnicodeDialog::~UnicodeDialog() /// 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 Wikipedia:Control_character"); } else if (u == "2009") { infoText = i18n("A thin space, in HTML also &thinsp;. See Wikipedia:Space_(punctuation)"); } else if (u == "2019") { @@ -65,9 +90,6 @@ QString UnicodeDialog::unicodeInfo(QString unicode_number) return infoText; } -/** - * Validates an Unicode number. - */ QString UnicodeDialog::validateText(QString text) { QRegExp regex("([0-9]|[a-f])", Qt::CaseInsensitive, QRegExp::RegExp2); @@ -76,6 +98,7 @@ QString UnicodeDialog::validateText(QString text) switch (inputMethod) { case InputHex: + // Remove all characters we don't want while ((pos = regex.indexIn(text, pos)) != -1) { newText += regex.cap(1); pos++; @@ -107,6 +130,7 @@ void UnicodeDialog::slotTextChanged(QString text) unicodeNumber->setText(newText); unicodeNumber->setCursorPosition(cursorPos); + // Get the decimal number as uint to create the QChar from uint value; switch (inputMethod) { case InputHex: @@ -118,7 +142,7 @@ void UnicodeDialog::slotTextChanged(QString text) } if (!ok) { - //TODO! + // Impossible! validateText never fails! } // If an invalid character has been entered: @@ -135,9 +159,16 @@ void UnicodeDialog::slotTextChanged(QString text) 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(); } diff --git a/src/unicodedialog.h b/src/unicodedialog.h index 4c037662..52abd3f7 100644 --- a/src/unicodedialog.h +++ b/src/unicodedialog.h @@ -23,7 +23,7 @@ public: 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: @@ -31,8 +31,13 @@ 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; diff --git a/src/widgets/titlewidget_ui.ui b/src/widgets/titlewidget_ui.ui index c0e63b87..5e8ca006 100644 --- a/src/widgets/titlewidget_ui.ui +++ b/src/widgets/titlewidget_ui.ui @@ -6,7 +6,7 @@ 0 0 - 902 + 906 442 @@ -285,6 +285,13 @@ + + + + Qt::Vertical + + + @@ -331,7 +338,7 @@ 0 0 - 441 + 443 143 @@ -450,8 +457,8 @@ 0 0 - 441 - 143 + 96 + 73 @@ -498,7 +505,7 @@ 0 0 - 425 + 272 224 diff --git a/src/widgets/unicodedialog_ui.ui b/src/widgets/unicodedialog_ui.ui index 534e9177..30678bf3 100644 --- a/src/widgets/unicodedialog_ui.ui +++ b/src/widgets/unicodedialog_ui.ui @@ -187,6 +187,9 @@ Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop + + true + -- 2.39.2