From 6ba2d47c81f28145408c21a1e7fffd46eeb54008 Mon Sep 17 00:00:00 2001 From: "royqh1979@gmail.com" Date: Mon, 22 Nov 2021 16:16:58 +0800 Subject: [PATCH] - enhancement: add "delete line"/"duplicate line"/"delete word"/"delete to EOL"/"delete to BOL" in the edit menu --- NEWS.md | 1 + RedPandaIDE/RedPandaIDE_zh_CN.qm | Bin 105699 -> 106064 bytes RedPandaIDE/RedPandaIDE_zh_CN.ts | 760 +++++++++++++++------------- RedPandaIDE/editor.cpp | 30 ++ RedPandaIDE/editor.h | 6 + RedPandaIDE/mainwindow.cpp | 54 ++ RedPandaIDE/mainwindow.h | 12 + RedPandaIDE/mainwindow.ui | 31 ++ RedPandaIDE/qsynedit/KeyStrokes.cpp | 12 +- RedPandaIDE/qsynedit/SynEdit.cpp | 2 + 10 files changed, 538 insertions(+), 370 deletions(-) diff --git a/NEWS.md b/NEWS.md index daffe860..a918d8aa 100644 --- a/NEWS.md +++ b/NEWS.md @@ -4,6 +4,7 @@ Version 0.9.2 For Dev-C++ 7 Beta - fix: executor / problem set options not correctly saved - fix: option "Move caret to the first non-space char in the current line when press HOME key" dosen't work fine. - fix: ctrl+left can't correctly move to the beginning of the last word + - enhancement: add "delete line"/"duplicate line"/"delete word"/"delete to EOL"/"delete to BOL" in the edit menu Version 0.9.1 For Dev-C++ 7 Beta - enhancement: code completion suggestion for "__func__" variable diff --git a/RedPandaIDE/RedPandaIDE_zh_CN.qm b/RedPandaIDE/RedPandaIDE_zh_CN.qm index 743bdf76743bd13efbc9e6004791f6c7e805b093..5148f564acfda7203df617b37fb663481920e8fa 100644 GIT binary patch delta 7144 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 UO_=oK1X;s$%&_;b&-NSt3mi6_7XSbN delta 6888 zcmX9@c|c9;7v0~v=iKq!do^7t-O@;pWXcd3q7jkMKvFWK@{B*8r)$of98qL=rk*K7 zW|@b~naTX5456oFe)%okzt%mcbIv#HwbtJI>w2NQ^ss!X(KM2XmxwO)04@h60keP^ zz!kuKz?HxfU^cK8m_u~g1-O@(PkUe$vG)HE36{hbd z43SS<9WpL)M&>#r_r)^vguyOh3Q=$uqKj97U4eKxxEls_$gK40aLNwGB3?H3L z^xq)hIHD>eQOrW3EpnnEXNU!EA>Jbj&-oFLFEY_j8pw>E=ktg!=7}ymB>uV^R*(zq zPAudT@wb-}HBu9QH-cFIj?y}I!1Uu3E*BHyO=eVeF{ApN88yAlsQufF7E8@&ur_0Z zY%>}ko6#k~jEOd8OsyvVtvAt)>BN7FC1!Do1m!8BwQ3T)dysUSYhu}FX5DYrXRjF( z`b&D5A^OfX61qs3>2(r<+7LAjBcbOMRLo@p#QZ5{ip}X{2apL)3gTDF%QhIU;Gx z?-296L;5&ZqFS9)B=fOMXhKahj}h&BK+V>VA~sGf>3M_Y{XA+>1cG?YCEw-(F}Lwj zTi(4}Upoq#UrjW_hJqIMBi1;Wg4?V{KzmZ~ytBko{3&>$idf4R6ue1BEEIUsm6&rJ zg*4ts%sWR~$Gh8wXHrPouen%K$l-%TXYNwSxl&@kM@Ub3qvwUe)H5fZnEMkmwsE0e z+!>;)m+O#4JfmK1W)o|3RPqqq)#7&QGw>|Y&DYXE!QI*QJ4Fb1+pR4{%vwP7HLebs zWe*y#U^CH^_R>1R-PCOvMNeo!Omzm>68MFp=PQZnwo>%5Wst@ZiqW_c8_}3zhPNX6 zc)1Q)l!*q-+D~lsG8()9()#2@BW}Z-zb=YQR2WYsC7^SgAbKEzmZeqnsK;Sq-Ad`n7_8qjnO=+m zgF62~<&pWAZ6=jhwIkeH@xYi?Fg*PhCce#5;;7ipE;Q5&=^K- zYltF)n4-xrqQFpQ!C~K>bD2}Fi6=HJP&%jxu#El4hFM|()_<{K^+jM`Nv|}jFP~x4 z-nArpSR%Dmx?84ZvcG-r5v3=y{4OS<`(Dx*rMoG(nqBfvB>G#yE~OO{i+aMYGk>Cv z7uoX)U?tDW%WH@^MX^s4KN54vX5UpHLyt@BM|=d4-#m^zeGPxi;P^)khys+Hu}2lc{%|N}B=_nHHu33zI%ET? zxVMAh{1#PQ&H2+ro-*#+-;n*ZvE28TV9>iG+|R%;qTSvye%Ep+vRWpFdO`QLGW`)u zcY?dD{xfU}S;(B+EQ!1`WlsG=NW(0r$eM~!{>xJ7soKERI7^?^KF*2VWidnh6KlFv z7PEg8u^x?Og9gta7C&7!cz7nzT?*3}otsAC5{n*nRW`&j6$vOvmN*f%o3cxmSk@l= zz9(g9-0f0+$_jnTke6o5&YPSunQyY9G(_s3XHv1oz&(B}z0|mKm48Zl(P%eb&D))9 zP2@I}ci3wr)?ymp$k2dT2bmNo!V*UEkt)0!k;F$S+7h$<$VV%{a#waqm7+o2ybC{DiCz5ZE9tccQ)E1! z9b8CsV5%8^^r=G@oMFa<`+Rl?nA7(IpOczJOuyKSHkoEL=9w`ek6+a#iCCYm{HhAL z>>tT|Zii|js}=ml6Og}V7QZO~L3~igZ{Cp(E_L9ybo4_o;vevNm3W}ZercC>i7BKp zzq{Ozs9p_!qzS&K{=^^Ez`a|im@%R|UzoFzXmT&Uu=oL(uIG;rx<-`hV#aS}{OPoP zpz>$_0tftU8-HbJci8hGzIf7d6eBJ8>rL@pix~c9pAAI$TlqU}XMsdD{GD+FNh;K- zqR$TFA6x}rhfL>7BmYF!I?TU_!?$+N=gVW=h}PKiuM$Bl$N%_OuUZgI46Q>ZEH~re zaeRfWH&OkEd_{9L(TG-c$Xq)}j(VfIZ4drkHuBT${ZgRb=zQ~}Amn0Zw=4wVn2uP_ zeS&%>cCOzsLA@P;x;0ix*ZY`Qs^Gp58nx*yc=tVxispzJJ6Z{?Pl_=5RH03FE229c zgf?e}5``QRItJvxBJ@JfJWOWo79r|!8=^7ALbL<&$|sW$YxRaGbfhrEAP}qHTo@Kw zOLTpPFuV>w3CRaB%g6KTuodeZQTKxl2p3W~>{!f}I%G}CgcLs|)HGI@NRXptt}v+y zT%xqOG^U;*=|!5bC;eUqeoZ#M|J4%mm3Tr+-)7XF%a3->!omGulE?K%qE zmj)v392N4KUCl@fs-ZO=#0n3Q?B?`|%M__LU z2rm-w)}V1hx$jq^?OTNMJdig0jPPy(LS1o4cwefTaR9-MCp*4>`{>jzd~BNbV? zbK&o$N=t*?pl9-g{m^vOc6qWzEI8yPPxk!?&qgA*O2J2qrA?G?0(8ug&)T1&&yZU z_@k7nm9I@ZP860Q-yDKkCsZcSi;M!Ly2`iZH6dn4@*NGLNJDX9@*T0B#1uEAA}cSu z-_zyAmVJmewUpnmfHaQWmERZ+{g*gPdTXO|=p6Yk`7?2>yzEL3M9Czt2$)E;)l2^G zi6u~2J1NZC;OSkcP+s!FWtu|OwJS0Cc!f6SHk@^n!lrN-kxNsBb7(FcC|b&}HiY}^ zQ3Tv}AzI+52wY|jbFWeaGZ<1udL6Rp5Jj(&Yq$$S<36w?YE(O#{WI@{DYX%+KN6~G-& zD6*EJsC;rtk#&6{lGYAI)~ja3hKDFtXb`App>@ax4pFS=jq5L66xnewmqX5q_1B=T z`ss?l$_FAV{Gr(J2(?#mykeX03v9_O#m;2Z8;&~_yW>Fcp7x6UzKG0khZF~9V{su3 zrYj1M>xo5PQxx6?A(w1d9Lqp@arvS+VUJL@>Z7>$7dn7DBNR98{u+3);$~}1beBQ# z{Pb;vq#qFXzb=;?4Tf%lzoP8aKg0&RC|(cVOSJ8a;&t3On8hf?n_lpuTe*ri&(%cp zm5LAC9HLG|b;yz)De460Xd(U2V6=-}uVi~?5aYfoWy$cs4>Og@zjt9fc1pVpMw5%P z(*88~IwMnQ|I4EKXDN*rk!Q#6RyuB~CR$jcblw?(5>=*jx$pw1Y@xDoDpVP_UFq%j z9!@@9={?|IqV6k|?bYpx`8g}wpS2>En6LCbAA(+Xj$n!=#{AsS-ci}zz}R*JRE{3F|6q;EEw%*CdsO8S6pT{y zsj7(`)X?Ues>uk1B4WJix2t&W-4vDALd^9^g{sBrG@|8OC4B<}=dF`G8u+yQF;~^w z1{$l`tP1N?iJY@T6&B!vo+LpP6{;h0+@gw|1==^Ory3%lH~dX5Wi&8$aQmT}v>7S3 z+ZL56X+N<>-&EU`u39rzxJxe^7@bE4sxtqFuP(?^ zN%^TTiW{n&kquD)W~){;#cZxFl058;(N{fGTib!^<>jjFQ@l`h^jGbwM9{~^sg9Jl z0Z9j_j-^$jw`i_9w&F9<+19Ev58%~}omA)g)W;Uasm@===dK5+in1`fG4;*({U2$a zox$#TuQ*FAnzDz@`-c3Q2f$-tVy5TsXl{)kj zCfjVix(~`Q7U`{y+#8R^N~?~IfRTiis)tUUK#a9l59^5Gyep+VdoRxx7u1P6aG5~r zQ5(Wh^n6v1-V0}*G@uSyY^*x@h73DiEB&;0@TH&Y)eHGqL@)Bxi>K^GhvK2mD9(p4 zvej8zA@Iik1I`2%0%t*~3^*GYAPsC7z$rYWbq$T4LH_E(MH7f}51R4I8};!kg9V8mEc%--J@4 zk!Hk;7vS0v&7@PV#9Sw7rnu(7c|A2#5=IdVs?toAw@2$>&`ga#Ow^@ZGjj>P*P>E0 zYY=wK{iSBsjz1un0L_AqX~=M+^2~9Yt4$h z8^nbBn$;y>Rlld2HHy<1CrQdM8o0N$Ql8N(DWt#VP&c&CFPdtOhpvHPR%ni=A%nhj z)|^OM1{=SlIr*H!P9cdZsDb{T#Jnk>;WkSY-27bM4x{aLyvltv)H>x=!AihYXGiz&e{D6D2cYtY*_waP+(dgjQuE>ZuSr>Js>1Bh zP6ued6~avZbP(B4Y)<<`Q8oh4dxnb|em2_XTv77?e?2`=aGm z%<5Hr(aOgSU4EcwV^x8^w?MSHit?-LAEF^X5SbnQQwn0>kty1a-h=yXMEg~J(XciY z?ROyXE3{(6f@-4QgGAR8daQbx=!UMI{{0}jb0?5B?@FDW4BP`ZX`qwQu6&>9bryR! z?lJX+#^>1gD}}%5o_o&_P;{>d^;Gmd@J!w9_qeF>$Ni9 zTB32!wEWoKFq!*WK64DLtFe~fis1rFv=$3c?RK};TE#&1IfYtVZ4I?z!AG>VId^a@ z9P1^V!w@?p=+L3jqn~vI1_s?RNp41@=jnXFdx`xs$K$~3nC-@bt zO+MocXKt)bF0w)g^{5V+=LYS>7voV~o3vAho+fG>r2W%vEsg}M0;CKVLx)EXwKGoQ zSYSwB?R+>p>v2cBG87$G;Rfx>X?ZxJY^Ys*ECN;AZEfyFxZmt6+O>9@V9Hg}Qx^m0 zRW5yYF{=BI(4Gs*K(>#S99<3STOG7j1u%#)E>dS#Lx{Yw_M0ErSgh23UxGQ`FV+5B z1*vH7>F5SxQ@cwi%SX&?$Lo}9QCkI!>mpTT1I(jh0Ch zboFN;L~{@5Y=5=kwdGQ=tHF|;(RCbu3oC7{^XrALyU&n5yLy>!+}0%=yM!#zMwfi4 z6cVV`rFI6{cRbgn_Qaquak}v(kjA*Zy4m6XVZnEFb5+BTyGnKQvk`#NpLLl}FxnLh z-Rdu(?bBnr+=zUlRgZM*syVbTk-EG!X+&BZ-QO=FU}jBp`QyO{n{&E7$6d&U(w^(~ z-StA*uvvGo=sl4!Qg`C;e$+B>aEkeQRB9EJWGvtr_2M z*43VFk7{MGUNoT~XltR@HcY_Y?$$dwfbecd^{(r&NlOOkTXtECb&b}yxjPI;O}rH5 zZd8|f=)=BV#Ilvr|J=QtFLL_d%U0o>ORoQ8Kgz?*C;FN1qtTpY=@*{d02*zTirkH+ z|2*`|oN+o~wZx2(YxOx55MOdP{c0s7K7W^fbz`jItDSz$I!wxLr+$M3tuLOV-!urS$-Vl-zxo$ zMG{3aD{uX+&erJU)AaZH!R+6U);}7Oicb8p{!It0dP0i6;wfzKY?l7ro8CCh3f0$q z*o>xNvi|EHd$i&&^xp?HAj-a=uZ>4E<5wV$O&nNI=rQta!MC?+uE4kQidfM0M}rOj E2Z(o8^8f$< diff --git a/RedPandaIDE/RedPandaIDE_zh_CN.ts b/RedPandaIDE/RedPandaIDE_zh_CN.ts index 4088ca1d..a9078b29 100644 --- a/RedPandaIDE/RedPandaIDE_zh_CN.ts +++ b/RedPandaIDE/RedPandaIDE_zh_CN.ts @@ -1068,35 +1068,35 @@ Are you really want to continue? 要剪切的内容超过了字符数限制! - + Print Document 打印文档 - - - + + + Ctrl+click for more info Ctrl+单击以获取更多信息 - + Symbol '%1' not found! 未找到符号'%1'! - + Break point condition 断点条件 - + Enter the condition of the breakpoint: 输入当前断点的生效条件: - + Readonly 只读 @@ -2856,18 +2856,18 @@ Are you really want to continue? - - - - - - + + + + + + Issues 编译器 - + Compile Log 编译日志 @@ -2882,8 +2882,8 @@ Are you really want to continue? 工具 - - + + Run 运行 @@ -2894,26 +2894,26 @@ Are you really want to continue? - - + + Project 项目 - + Watch 监视 - + Structure 结构 - + Files 文件 @@ -2923,10 +2923,10 @@ Are you really want to continue? - - - - + + + + Debug 调试 @@ -2957,8 +2957,8 @@ Are you really want to continue? - - + + Search 查找 @@ -2983,7 +2983,7 @@ Are you really want to continue? 替换 - + Close 关闭 @@ -2993,13 +2993,13 @@ Are you really want to continue? 运行 - - + + Code 代码 - + Window 窗口 @@ -3017,249 +3017,249 @@ Are you really want to continue? 新建 - + Ctrl+N Ctrl+N - + Open... 打开... - + Ctrl+O Ctrl+O - + Save 保存 - + Ctrl+S Ctrl+S - + Save As... 另存为... - + Save As 另存为 - + Save All 全部保存 - + Ctrl+Shift+S Ctrl+Shift+S - + Options 选项 - - - - - + + + + + Compile 编译 - + F9 F9 - + F10 F10 - + Undo 恢复 - + Ctrl+Z Ctrl+Z - + Redo 重做 - + Ctrl+Y Ctrl+Y - + Cut 剪切 - + Ctrl+X Ctrl+X - - - + + + Copy 复制 - + Ctrl+C Ctrl+C - - + + Paste 粘贴 - + Ctrl+V Ctrl+V - - + + Select All 选择全部 - + Ctrl+A Ctrl+A - + Indent 缩进 - + UnIndent 取消缩进 - + Toggle Comment 切换注释 - + Ctrl+/ Ctrl+/ - + Collapse All 全部收起 - + Uncollapse All 全部展开 - + Encode in ANSI 使用ANSI编码 - + Encode in UTF-8 使用UTF-8编码 - + Auto Detect 自动检测 - + Convert to ANSI 转换为ANSI编码 - + Convert to UTF-8 转换为UTF-8编码 - - + + Compile & Run 编译运行 - + F11 F11 - - + + Rebuild All 全部重编译 - + F12 F12 - + Stop Execution 停止执行 - + F6 F6 - + F5 F5 - + Step Over 单步跳过 - + F7 F7 - + Step Into 单步进入 - + Problem Set 试题集 @@ -3267,7 +3267,7 @@ Are you really want to continue? - + New Problem Set 新建试题集 @@ -3286,14 +3286,14 @@ Are you really want to continue? - + Save Problem Set 保存试题集 - + Load Problem Set 载入试题集 @@ -3315,20 +3315,20 @@ Are you really want to continue? - + TODO TODO - + Bookmark 书签 - + Problem 试题 @@ -3380,459 +3380,489 @@ Are you really want to continue? 期望输出 - + Help 帮助 - + Refactor 重构 - + View 视图 - + Tool Windows 工具窗口 - + Main 主工具栏 - + Compiler Set 编译器配置集 - - + + New Source File 新建源代码文件 - + Tab Tab - + Shift+Tab Shift+Tab - + F8 F8 - + Step Out 单步跳出 - + Ctrl+F8 Ctrl+F8 - + Run To Cursor 执行到光标处 - + Ctrl+F5 Ctrl+F5 - + Continue 继续执行 - + F4 F4 - + Add Watch... 添加监视 - + View CPU Window... 打开CPU信息窗口... - + Exit 退出 - + Find... 查找... - + Ctrl+F Ctrl+F - + Find in Files... 在文件中查找... - + Ctrl+Shift+F Ctrl+Shift+F - + Replace... 替换 - + Ctrl+R Ctrl+R - + Find Next 查找下一个 - + F3 F3 - + Find Previous 查找前一个 - + Shift+F3 Shift+F3 - + Remove Watch 删除监视值 - + Remove All Watches Remove All 删除全部监视值 - + Modify Watch... 修改监视值 - + Reformat Code 对代码重新排版 - + Ctrl+Shift+A Ctrl+Shift+A - + Go back 前一次编辑位置 - + Ctrl+Alt+Left Ctrl+Alt+Left - + Forward 后一次编辑位置 - + Ctrl+Alt+Right Ctrl+Alt+Right - + Ctrl+W Ctrl+W - + Close All 全部关闭 - + Ctrl+Shift+W Ctrl+Shift+W - + Maximize Editor 最大化编辑器 - + Ctrl+F11 Ctrl+F11 - + Next 下一窗口 - + Ctrl+Tab Ctrl+Tab - + Previous 前一窗口 - + Ctrl+Shift+Tab Ctrl+Shift+Tab - + Toggle breakpoint 切换断点 - + Ctrl+F4 Ctrl+F4 - - + + Clear all breakpoints 删除所有断点 - + Breakpoint property... 设置断点条件... - + Goto Declaration 跳转到声明处 - + Goto Definition 跳转到定义处 - + Find references 查找符号的引用 - + Open containing folder 打开所在的文件夹 - + Ctrl+B Ctrl+B - + Open a terminal here 打开命令行窗口 - + File Properties... 文件属性... - + Close Project 关闭项目 - + Project options 项目属性 - + New Project... 新建项目... - + New File 新建项目文件 - + Add to project... 添加到项目... - + Remove from project 从项目删除 - + View Makefile 查看Makefile - + Clean 清理构建文件 - + Open Folder in Explorer 在浏览器中打开 - + Open In Terminal 在终端中打开 - + About 关于 - - + + Rename Symbol 重命名符号 - + Shift+F6 Shift+F6 - + Print... 打印... - + Ctrl+P Ctrl+P - - + + Export As RTF 导出为RTF - - + + Export As HTML 导出为HTML - + Move To Other View 移动到其他视图 - + Ctrl+M Ctrl+M - - + + C++ Reference C++参考手册 - + C Reference C参考手册 - + Tool Window Bars 工具窗口栏 - + Status Bar 状态栏 + + + Insert Line + 插入行 + + + + Delete Line + 删除当前行 + + + + Duplicate Line + 复制当前行 + + + + Delete Word + 删除当前单词 + + + + Delete to EOL + 删除到行尾 + + + + Delete to BOL + 删除到行首 + C/C++ Reference C/C++参考 - + EGE Manual EGE图形库手册 - + Add Bookmark 添加书签 - + Remove Bookmark 删除书签 - + Modify Bookmark Description 修改书签说明 - + Locate in Files View 在文件视图中定位 - - + + Open Folder 打开文件夹 - + Running Parameters... 运行参数... - + File Encoding 文件编码 @@ -3842,32 +3872,32 @@ Are you really want to continue? 文件历史 - - + - + + Debugging 正在调试 - - + - + + Running 正在运行 - - + - + + Compiling 正在编译 @@ -3876,168 +3906,168 @@ Are you really want to continue? 行:%1 列:%2 已选择:%3 总行数:%4 总长度:%5 - + Line:%1 Col:%2 Selected:%3 Lines:%4 Length:%5 Line: %1 Col: %2 Selected: %3 Lines: %4 Length: %5 行: %1 列: %2 已选择 :%3 总行数: %4 总长度: %5 - + Read Only 只读 - + Insert 插入 - + Overwrite 覆写 - + Close project 关闭项目 - + Are you sure you want to close %1? 你确定要关闭'%1'吗? - - + + Confirm 确认 - - - + + + Source file is not compiled. 源文件尚未编译。 - - + + Compile now? 现在编译? - - - + + + Source file is more recent than executable. 源文件比可执行程序新。 - + Recompile now? 重新编译? - + No compiler set 无编译器设置 - + No compiler set is configured. 没有配置编译器设置。 - + Can't start debugging. 无法启动调试器 - - + + Enable debugging 启用调试参数 - - + + You have not enabled debugging info (-g3) and/or stripped it from the executable (-s) in Compiler Options.<BR /><BR />Do you want to correct this now? 当前编译设置中未启用调试选项(-g3),或启用了信息剥除选项(-s)<br /><br/>是否纠正这一问题? - + Project not built 项目尚未构建 - + Project hasn't been built. Build it now? 项目尚未构建。是否构建? - + Host applcation missing 宿主程序不存在 - + DLL project needs a host application to run. 动态链接库(DLL)需要一个宿主程序来运行。 - + But it's missing. 但它不存在。 - + Host application not exists 宿主程序不存在 - + Host application file '%1' doesn't exist. 宿主程序'%1'不存在。 - + Recompile? 重新编译? - - + + Save last open info error 保存上次打开信息失败 - + Can't remove old last open information file '%1' 无法删除旧上次打开信息文件'%1' - + Can't save last open info file '%1' 无法保存上次打开信息文件'%1' - + Load last open info error 载入上次打开信息失败 - + Can't load last open info file '%1' 无法载入上次打开信息文件'%1' - + Copy all 全部复制 - - + + Clear 清除 @@ -4053,7 +4083,7 @@ Are you really want to continue? - + Problem Set %1 试题集%1 @@ -4074,427 +4104,427 @@ Are you really want to continue? 或者选择使用其他的网络端口。 - + Red Panda Dev-C++ 小熊猫Dev-C++ - + Auto Save Error 自动保存出错 - + Auto save "%1" to "%2" failed:%3 自动保存"%1"到"%2"失败:%3 - + Properties... 试题属性... - + Set Problem Set Name 设置试题集名称 - + Problem Set Name: 试题集名称: - + Remove 删除 - + Remove All Bookmarks 删除全部书签 - + Modify Description 修改描述 - - - + + + Bookmark Description 书签描述 - - - + + + Description: 描述: - + Show debug logs in the debug console 在调试主控台中显示调试器输出 - + Remove this search 清除这次搜索 - + Clear all searches 删除所有搜索 - + Breakpoint condition... 断点条件... - + Break point condition 断点条件 - + Enter the condition of the breakpoint: 输入当前断点的生效条件: - + Remove All Breakpoints Remove all breakpoints 删除所有断点 - + Remove Breakpoint 删除当前断点 - + Rename File 重命名文件 - - + + Add Folder 添加文件夹 - + New folder 新文件夹 - + Folder name: 文件夹: - + Rename Folder 重命名 - + Remove Folder 删除文件夹 - + Sort By Type 按类型排序 - + Sort alphabetically 按名称排序 - + Show inherited members 显示继承的成员 - + Goto declaration 跳转到声明处 - + Goto definition 跳转到定义处 - + Open in Editor 在编辑器中打开 - + Open in External Program 使用外部程序打开 - + Open in Terminal 在终端中打开 - + Open in Windows Explorer 在Windows浏览器中打开 - + Character sets 字符集 - + %1 files autosaved 已自动保存%1个文件 - + Set answer to... 设置答案源代码... - + select other file... 选择其他文件... - + Select Answer Source File 选择答案源代码文件 - + C/C++Source Files (*.c *.cpp *.cc *.cxx) C/C++Source Files (*.c *.cpp *.cc *.cxx C/C++源代码文件 (*.c *.cpp *.cc *.cxx) - + Save project 保存项目 - + The project '%1' has modifications. 项目'%1'有改动。 - - + + Do you want to save it? 需要保存吗? - - + + File Changed 文件已发生变化 - + New Project File? 新建项目文件? - + Do you want to add the new file to the project? 您是否要将新建的文件加入项目? - - - - + + + + Save Error 保存失败 - + Change Project Compiler Set 改变项目编译器配置集 - + Change the project's compiler set will lose all custom compiler set options. 改变项目的编译器配置集会导致所有的自定义编译器选项被重置。 - + Do you really want to do that? 你真的想要做那些吗? - + Do you really want to clear all breakpoints in this file? 您真的要清除该文件的所有断点吗? - + New project 新建项目 - + Close %1 and start new project? 关闭'%1'以打开新项目? - + Folder not exist 文件夹不存在 - + Folder '%1' doesn't exist. Create it now? 文件夹'%1'不存在。是否创建? - + Can't create folder 无法创建文件夹 - + Failed to create folder '%1'. 创建文件夹'%1'失败。 - + Save new project as - + Red panda Dev-C++ project file (*.dev) 小熊猫Dev-C++项目文件 (*.dev) - + New project fail 新建项目失败 - + Can't assign project template 无法使用模板创建项目 - + Remove file 删除文件 - + Remove the file from disk? 同时从硬盘上删除文件? - + untitled 无标题 - + New Project File Name 新的项目文件名 - + File Name: 文件名: - + File Already Exists! 文件已存在! - + File '%1' already exists! 文件'%1'已经存在! - + Add to project 添加到项目 - + Rename Error 重命名出错 - + Symbol '%1' is defined in system header. 符号'%1'在系统头文件中定义,无法修改。 - + New Name 新名称 - - + + Replace Error 替换出错 - + Can't open file '%1' for replace! 无法打开文件'%1'进行替换! - + Contents has changed since last search! 内容和上次查找时不一致。 - + Rich Text Format Files (*.rtf) RTF格式文件 (*.rtf) - + HTML Files (*.html) HTML文件 (*.html) - + The current problem set is not empty. 当前的试题集不是空的。 - + Problem %1 试题%1 - - + + Problem Set Files (*.pbs) 试题集文件 (*.pbs) - + Load Error 载入失败 - - + + Problem Case %1 试题案例%1 @@ -4505,15 +4535,15 @@ Are you really want to continue? - - - - - - - - - + + + + + + + + + Error 错误 @@ -4523,75 +4553,75 @@ Are you really want to continue? 项目历史 - + File '%1' was changed. 磁盘文件'%1'已被修改。 - + Reload its content from disk? 是否重新读取它的内容? - + File '%1' was removed. 磁盘文件'%1'已被删除。 - + Keep it open? 是否保持它在小熊猫C++中打开的编辑窗口? - + Open 打开 - + Compile Failed 编译失败 - + Run Failed 运行失败 - - + + Confirm Convertion 确认转换 - - + + The editing file will be saved using %1 encoding. <br />This operation can't be reverted. <br />Are you sure to continue? 当前编辑器中的文件将会使用%1编码保存。<br />这项操作无法被撤回。<br />你确定要继续吗? - + New Watch Expression 新监视表达式 - + Enter Watch Expression (it is recommended to use 'this->' for class members): 输入监视表达式 - + Parsing file %1 of %2: "%3" (%1/%2)正在解析文件"%3" - - + + Done parsing %1 files in %2 seconds 完成%1个文件的解析,用时%2秒 - + (%1 files per second) (每秒%1个文件) @@ -6516,7 +6546,7 @@ Are you really want to continue? 自动链接 - + @@ -6592,7 +6622,7 @@ Are you really want to continue? 杂项 - + Program Runner diff --git a/RedPandaIDE/editor.cpp b/RedPandaIDE/editor.cpp index 2996326d..7873cbb1 100644 --- a/RedPandaIDE/editor.cpp +++ b/RedPandaIDE/editor.cpp @@ -1593,6 +1593,36 @@ bool Editor::notParsed() return mParser->findFileIncludes(mFilename)==nullptr; } +void Editor::insertLine() +{ + ExecuteCommand(SynEditorCommand::ecInsertLine,QChar(),nullptr); +} + +void Editor::deleteWord() +{ + ExecuteCommand(SynEditorCommand::ecDeleteWord,QChar(),nullptr); +} + +void Editor::deleteLine() +{ + ExecuteCommand(SynEditorCommand::ecDeleteLine,QChar(),nullptr); +} + +void Editor::duplicateLine() +{ + ExecuteCommand(SynEditorCommand::ecDuplicateLine,QChar(),nullptr); +} + +void Editor::deleteToEOL() +{ + ExecuteCommand(SynEditorCommand::ecDeleteEOL,QChar(),nullptr); +} + +void Editor::deleteToBOL() +{ + ExecuteCommand(SynEditorCommand::ecDeleteBOL,QChar(),nullptr); +} + QChar Editor::getCurrentChar() { if (lineText().length()tabProblem,state); } + +void MainWindow::on_actionInsert_Line_triggered() +{ + Editor *e=mEditorList->getEditor(); + if (e) { + e->insertLine(); + } +} + + +void MainWindow::on_actionDelete_Line_triggered() +{ + Editor *e=mEditorList->getEditor(); + if (e) { + e->deleteLine(); + } +} + + +void MainWindow::on_actionDuplicate_Line_triggered() +{ + Editor *e=mEditorList->getEditor(); + if (e) { + e->duplicateLine(); + } +} + + +void MainWindow::on_actionDelete_Word_triggered() +{ + Editor *e=mEditorList->getEditor(); + if (e) { + e->deleteWord(); + } +} + + +void MainWindow::on_actionDelete_to_EOL_triggered() +{ + Editor *e=mEditorList->getEditor(); + if (e) { + e->deleteToEOL(); + } +} + + +void MainWindow::on_actionDelete_to_BOL_triggered() +{ + Editor *e=mEditorList->getEditor(); + if (e) { + e->deleteToBOL(); + } +} + diff --git a/RedPandaIDE/mainwindow.h b/RedPandaIDE/mainwindow.h index c11f45b7..693299e8 100644 --- a/RedPandaIDE/mainwindow.h +++ b/RedPandaIDE/mainwindow.h @@ -518,6 +518,18 @@ private slots: void on_actionProblem_triggered(); + void on_actionInsert_Line_triggered(); + + void on_actionDelete_Line_triggered(); + + void on_actionDuplicate_Line_triggered(); + + void on_actionDelete_Word_triggered(); + + void on_actionDelete_to_EOL_triggered(); + + void on_actionDelete_to_BOL_triggered(); + private: Ui::MainWindow *ui; EditorList *mEditorList; diff --git a/RedPandaIDE/mainwindow.ui b/RedPandaIDE/mainwindow.ui index 70747547..52bd5973 100644 --- a/RedPandaIDE/mainwindow.ui +++ b/RedPandaIDE/mainwindow.ui @@ -1449,6 +1449,12 @@ + + + + + + @@ -2603,6 +2609,31 @@ Problem + + + Delete Line + + + + + Duplicate Line + + + + + Delete Word + + + + + Delete to EOL + + + + + Delete to BOL + + diff --git a/RedPandaIDE/qsynedit/KeyStrokes.cpp b/RedPandaIDE/qsynedit/KeyStrokes.cpp index e0c991e2..4aba2d29 100644 --- a/RedPandaIDE/qsynedit/KeyStrokes.cpp +++ b/RedPandaIDE/qsynedit/KeyStrokes.cpp @@ -219,11 +219,13 @@ void SynEditKeyStrokes::resetDefaults() add(SynEditorCommand::ecCut, Qt::Key_X, Qt::ControlModifier); add(SynEditorCommand::ecBlockIndent, Qt::Key_I, Qt::ControlModifier|Qt::ShiftModifier); add(SynEditorCommand::ecBlockUnindent, Qt::Key_U, Qt::ControlModifier|Qt::ShiftModifier); - add(SynEditorCommand::ecLineBreak, Qt::Key_M, Qt::ControlModifier); - add(SynEditorCommand::ecInsertLine, Qt::Key_N, Qt::ControlModifier); - add(SynEditorCommand::ecDeleteWord, Qt::Key_T, Qt::ControlModifier); - add(SynEditorCommand::ecDeleteLine, Qt::Key_Y, Qt::ControlModifier); - add(SynEditorCommand::ecDeleteEOL, Qt::Key_Y, Qt::ControlModifier|Qt::ShiftModifier); +// add(SynEditorCommand::ecLineBreak, Qt::Key_M, Qt::ControlModifier); +// add(SynEditorCommand::ecInsertLine, Qt::Key_N, Qt::ControlModifier); +// add(SynEditorCommand::ecDeleteWord, Qt::Key_T, Qt::ControlModifier); +// add(SynEditorCommand::ecDeleteLine, Qt::Key_Y, Qt::ControlModifier); +// add(SynEditorCommand::ecDeleteEOL, Qt::Key_Y, Qt::ControlModifier|Qt::ShiftModifier); +// add(SynEditorCommand::ecDuplicateLine, Qt::Key_D, Qt::ControlModifier); + add(SynEditorCommand::ecUndo, Qt::Key_Z, Qt::ControlModifier); add(SynEditorCommand::ecRedo, Qt::Key_Z, Qt::ControlModifier|Qt::ShiftModifier); add(SynEditorCommand::ecGotoMarker0, Qt::Key_0, Qt::ControlModifier); diff --git a/RedPandaIDE/qsynedit/SynEdit.cpp b/RedPandaIDE/qsynedit/SynEdit.cpp index 621152ac..5194d8f3 100644 --- a/RedPandaIDE/qsynedit/SynEdit.cpp +++ b/RedPandaIDE/qsynedit/SynEdit.cpp @@ -5436,6 +5436,8 @@ void SynEdit::ExecuteCommand(SynEditorCommand Command, QChar AChar, void *pData) clearAll(); break; case SynEditorCommand::ecInsertLine: + insertLine(Command == SynEditorCommand::ecInsertLine); + break; case SynEditorCommand::ecLineBreak: insertLine(Command == SynEditorCommand::ecLineBreak); break;