From 941c73d3733766afde1e30229f9564644825a90e Mon Sep 17 00:00:00 2001
From: DreamSourceLab <support@dreamsourcelab.com>
Date: Wed, 10 Aug 2016 15:12:13 +0800
Subject: [PATCH] Fix some minor display/platform issues

---
 DSView/DSView.qrc                     |  17 ---
 DSView/darkstyle/style.qss            |   5 +
 DSView/icons/Blackman.png             | Bin
 DSView/icons/Flat_top.png             | Bin
 DSView/icons/Hamming.png              | Bin
 DSView/icons/Hann.png                 | Bin
 DSView/icons/Rectangle.png            | Bin
 DSView/icons/about.png                | Bin
 DSView/icons/close.png                | Bin
 DSView/icons/export.png               | Bin
 DSView/icons/fft.png                  | Bin
 DSView/icons/file.png                 | Bin
 DSView/icons/file_cn.png              | Bin 1362 -> 0 bytes
 DSView/icons/file_dis.png             | Bin
 DSView/icons/file_dis_cn.png          | Bin 1224 -> 0 bytes
 DSView/icons/instant.png              | Bin
 DSView/icons/instant_cn.png           | Bin 1262 -> 0 bytes
 DSView/icons/instant_dis.png          | Bin
 DSView/icons/instant_dis_cn.png       | Bin 1352 -> 0 bytes
 DSView/icons/math.png                 | Bin
 DSView/icons/math_dis.png             | Bin
 DSView/icons/maximize.png             | Bin
 DSView/icons/measure.png              | Bin
 DSView/icons/measure_cn.png           | Bin 1316 -> 0 bytes
 DSView/icons/measure_dis.png          | Bin
 DSView/icons/measure_dis_cn.png       | Bin 1414 -> 0 bytes
 DSView/icons/minimize.png             | Bin
 DSView/icons/next.png                 | Bin
 DSView/icons/params.png               | Bin
 DSView/icons/params_cn.png            | Bin 1388 -> 0 bytes
 DSView/icons/params_dis.png           | Bin
 DSView/icons/params_dis_cn.png        | Bin 1619 -> 0 bytes
 DSView/icons/pre.png                  | Bin
 DSView/icons/protocol.png             | Bin
 DSView/icons/protocol_cn.png          | Bin 3269 -> 0 bytes
 DSView/icons/protocol_dis.png         | Bin
 DSView/icons/protocol_dis_cn.png      | Bin 1454 -> 0 bytes
 DSView/icons/restore.png              | Bin
 DSView/icons/search-bar.png           | Bin
 DSView/icons/search-bar_cn.png        | Bin 1580 -> 0 bytes
 DSView/icons/search-bar_dis.png       | Bin
 DSView/icons/search-bar_dis_cn.png    | Bin 1888 -> 0 bytes
 DSView/icons/settings.png             | Bin
 DSView/icons/single.png               | Bin
 DSView/icons/single_dis.png           | Bin
 DSView/icons/start.png                | Bin
 DSView/icons/start_cn.png             | Bin 1401 -> 0 bytes
 DSView/icons/start_dis.png            | Bin
 DSView/icons/start_dis_cn.png         | Bin 1495 -> 0 bytes
 DSView/icons/stop.png                 | Bin
 DSView/icons/stop_cn.png              | Bin 830 -> 0 bytes
 DSView/icons/trigger.png              | Bin
 DSView/icons/trigger_cn.png           | Bin 1141 -> 0 bytes
 DSView/icons/trigger_dis.png          | Bin
 DSView/icons/trigger_dis_cn.png       | Bin 1453 -> 0 bytes
 DSView/icons/wiki.png                 | Bin
 DSView/pv/data/mathstack.cpp          |  10 +-
 DSView/pv/dialogs/calibration.cpp     |  11 +-
 DSView/pv/dialogs/deviceoptions.cpp   |  23 ++--
 DSView/pv/dialogs/deviceoptions.h     |   3 +-
 DSView/pv/dialogs/fftoptions.cpp      |  36 +++---
 DSView/pv/dialogs/fftoptions.h        |   3 +-
 DSView/pv/dialogs/protocolexp.cpp     |   4 +
 DSView/pv/dialogs/protocollist.cpp    |   4 +
 DSView/pv/dialogs/search.cpp          |   1 +
 DSView/pv/dialogs/waitingdialog.cpp   |   4 +-
 DSView/pv/dock/dsotriggerdock.cpp     |   6 +-
 DSView/pv/dock/measuredock.cpp        |   2 +
 DSView/pv/dock/triggerdock.cpp        |   3 +
 DSView/pv/mainwindow.cpp              |  10 +-
 DSView/pv/mainwindow.h                |   7 +-
 DSView/pv/prop/binding/binding.cpp    |   4 +
 DSView/pv/sigsession.cpp              |   4 +-
 DSView/pv/sigsession.h                |   2 +
 DSView/pv/toolbars/trigbar.cpp        |   1 +
 DSView/pv/view/analogsignal.cpp       |   1 +
 DSView/pv/view/decodetrace.cpp        |  13 +-
 DSView/pv/view/devmode.cpp            |   2 +
 DSView/pv/view/dsosignal.cpp          |   6 +-
 DSView/pv/view/ruler.cpp              |  25 ++--
 DSView/pv/view/trace.cpp              |   9 +-
 DSView/pv/view/trace.h                |   1 +
 DSView/pv/view/view.cpp               |  38 ++++--
 DSView/pv/view/view.h                 |   1 +
 DSView/pv/view/viewport.cpp           |  14 +--
 DSView/pv/widgets/decodergroupbox.cpp |   1 +
 DSView/res/DSCope1.def.dsc            |  78 ++++++------
 DSView/res/DSLogic0.def.dsc           |  34 +++---
 DSView/res/DSLogic2.def.dsc           | 163 +++++++++++++-------------
 libsigrok4DSL/hardware/DSL/dscope.c   |   6 +-
 libsigrok4DSL/hardware/DSL/dsl.h      |   1 +
 libsigrok4DSL/hardware/DSL/dslogic.c  |  51 +++++---
 libsigrok4DSL/hardware/demo/demo.c    |   7 +-
 libsigrok4DSL/libsigrok.h             |   3 +
 94 files changed, 357 insertions(+), 257 deletions(-)
 mode change 100755 => 100644 DSView/icons/Blackman.png
 mode change 100755 => 100644 DSView/icons/Flat_top.png
 mode change 100755 => 100644 DSView/icons/Hamming.png
 mode change 100755 => 100644 DSView/icons/Hann.png
 mode change 100755 => 100644 DSView/icons/Rectangle.png
 mode change 100755 => 100644 DSView/icons/about.png
 mode change 100755 => 100644 DSView/icons/close.png
 mode change 100755 => 100644 DSView/icons/export.png
 mode change 100755 => 100644 DSView/icons/fft.png
 mode change 100755 => 100644 DSView/icons/file.png
 delete mode 100644 DSView/icons/file_cn.png
 mode change 100755 => 100644 DSView/icons/file_dis.png
 delete mode 100644 DSView/icons/file_dis_cn.png
 mode change 100755 => 100644 DSView/icons/instant.png
 delete mode 100644 DSView/icons/instant_cn.png
 mode change 100755 => 100644 DSView/icons/instant_dis.png
 delete mode 100755 DSView/icons/instant_dis_cn.png
 mode change 100755 => 100644 DSView/icons/math.png
 mode change 100755 => 100644 DSView/icons/math_dis.png
 mode change 100755 => 100644 DSView/icons/maximize.png
 mode change 100755 => 100644 DSView/icons/measure.png
 delete mode 100644 DSView/icons/measure_cn.png
 mode change 100755 => 100644 DSView/icons/measure_dis.png
 delete mode 100644 DSView/icons/measure_dis_cn.png
 mode change 100755 => 100644 DSView/icons/minimize.png
 mode change 100755 => 100644 DSView/icons/next.png
 mode change 100755 => 100644 DSView/icons/params.png
 delete mode 100644 DSView/icons/params_cn.png
 mode change 100755 => 100644 DSView/icons/params_dis.png
 delete mode 100644 DSView/icons/params_dis_cn.png
 mode change 100755 => 100644 DSView/icons/pre.png
 mode change 100755 => 100644 DSView/icons/protocol.png
 delete mode 100755 DSView/icons/protocol_cn.png
 mode change 100755 => 100644 DSView/icons/protocol_dis.png
 delete mode 100644 DSView/icons/protocol_dis_cn.png
 mode change 100755 => 100644 DSView/icons/restore.png
 mode change 100755 => 100644 DSView/icons/search-bar.png
 delete mode 100644 DSView/icons/search-bar_cn.png
 mode change 100755 => 100644 DSView/icons/search-bar_dis.png
 delete mode 100644 DSView/icons/search-bar_dis_cn.png
 mode change 100755 => 100644 DSView/icons/settings.png
 mode change 100755 => 100644 DSView/icons/single.png
 mode change 100755 => 100644 DSView/icons/single_dis.png
 mode change 100755 => 100644 DSView/icons/start.png
 delete mode 100644 DSView/icons/start_cn.png
 mode change 100755 => 100644 DSView/icons/start_dis.png
 delete mode 100755 DSView/icons/start_dis_cn.png
 mode change 100755 => 100644 DSView/icons/stop.png
 delete mode 100644 DSView/icons/stop_cn.png
 mode change 100755 => 100644 DSView/icons/trigger.png
 delete mode 100644 DSView/icons/trigger_cn.png
 mode change 100755 => 100644 DSView/icons/trigger_dis.png
 delete mode 100644 DSView/icons/trigger_dis_cn.png
 mode change 100755 => 100644 DSView/icons/wiki.png

diff --git a/DSView/DSView.qrc b/DSView/DSView.qrc
index b2799fa..f58808f 100644
--- a/DSView/DSView.qrc
+++ b/DSView/DSView.qrc
@@ -36,25 +36,8 @@
         <file>icons/gear.png</file>
         <file>icons/wiki.png</file>
         <file>icons/wait.gif</file>
-        <file>icons/file_cn.png</file>
-        <file>icons/file_dis_cn.png</file>
-        <file>icons/instant_cn.png</file>
-        <file>icons/measure_cn.png</file>
-        <file>icons/measure_dis_cn.png</file>
-        <file>icons/params_cn.png</file>
-        <file>icons/params_dis_cn.png</file>
-        <file>icons/protocol_dis_cn.png</file>
-        <file>icons/search-bar_cn.png</file>
-        <file>icons/search-bar_dis_cn.png</file>
-        <file>icons/start_cn.png</file>
-        <file>icons/stop_cn.png</file>
-        <file>icons/trigger_cn.png</file>
-        <file>icons/trigger_dis_cn.png</file>
-        <file>icons/protocol_cn.png</file>
         <file>icons/instant_dis.png</file>
-        <file>icons/instant_dis_cn.png</file>
         <file>icons/start_dis.png</file>
-        <file>icons/start_dis_cn.png</file>
         <file>icons/settings.png</file>
         <file>darkstyle/style.qss</file>
         <file>icons/export.png</file>
diff --git a/DSView/darkstyle/style.qss b/DSView/darkstyle/style.qss
index 6b3fc4e..2145551 100755
--- a/DSView/darkstyle/style.qss
+++ b/DSView/darkstyle/style.qss
@@ -881,6 +881,11 @@ QDockWidget {
     titlebar-normal-icon: url(:/qss_icons/rc/undock.png);
 }
 
+QDockWidget::title {
+    border: 1px solid #282727;
+    background-color: #2b2a2a;
+}
+
 QDockWidget::close-button, QDockWidget::float-button {
     border: 1px solid transparent;
     border-radius: 2px;
diff --git a/DSView/icons/Blackman.png b/DSView/icons/Blackman.png
old mode 100755
new mode 100644
diff --git a/DSView/icons/Flat_top.png b/DSView/icons/Flat_top.png
old mode 100755
new mode 100644
diff --git a/DSView/icons/Hamming.png b/DSView/icons/Hamming.png
old mode 100755
new mode 100644
diff --git a/DSView/icons/Hann.png b/DSView/icons/Hann.png
old mode 100755
new mode 100644
diff --git a/DSView/icons/Rectangle.png b/DSView/icons/Rectangle.png
old mode 100755
new mode 100644
diff --git a/DSView/icons/about.png b/DSView/icons/about.png
old mode 100755
new mode 100644
diff --git a/DSView/icons/close.png b/DSView/icons/close.png
old mode 100755
new mode 100644
diff --git a/DSView/icons/export.png b/DSView/icons/export.png
old mode 100755
new mode 100644
diff --git a/DSView/icons/fft.png b/DSView/icons/fft.png
old mode 100755
new mode 100644
diff --git a/DSView/icons/file.png b/DSView/icons/file.png
old mode 100755
new mode 100644
diff --git a/DSView/icons/file_cn.png b/DSView/icons/file_cn.png
deleted file mode 100644
index 00096c509581fc2426e123cf58cdef3c27234a65..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1362
zcmXw(2~g5m7{DK(sFWaOO5zok$7&mCZR+ZJ{Z+I9jhxk-B3%Qe5?I8{Rl#oTGIv2&
zOHDVmY_&u37&WtOJR-F`YCYS5h&IJr$};y)O*8L%-^}m(ec#NRdGBR~(}ImL78n44
zaR>#X!<noLLo~ccB0rpglM#=yCkX&-n=TMiXDkth27(Z3puxEQI^2$}q1I1iUr=C_
zz%N;lz~zG*)p81qRtsPRF_Yr>Y@UG4<$$$D8|+|?(eVH-FO|=ZPY{5=adJ<XV!u#6
zGghbC3fPHEuw9EYf-6S4%5E-8kP^#hf_=OdoxbYJaCTDM;aFJZgSrQ@Y#1BraAYi>
z!{)?;2Sk<b2nJvKllgH>u&{FC-8U_Oo0!Pt2*9E|w*_Wsofg3s9A<*+n&%Dx=vjq8
zeh~@BCZk#o5#tHMv8j1Q|97r$+RUuai|(0Dl*z2U%(kr`(sYI=I9YkgtcF@e0d9n7
zHJze1aa>=>Ss$$~(8E|OhbChr;;y?FlBJv9&fm96cM$zlZ2CbX$Cnyh{HST3(iFW}
zUdULJWyoM&zh(qIruaT57*Q;4ka1g+Sn=_1gcW@aRS_Z^S#*{8Q`THsS%0>(vvY9C
z9;~k;0$h5^+Uo5++Q?!#mia>7!!t885zUPKZq%AxHwT2Vs+C2pHY_hU*WF?=Dg4jm
z%zU@Bv^1@Qg9G=+i>TpRSb`^Pk*~#z4aI8N@MJBGMza<)jv7BAAIZ(ji^JnRk=7D=
z#{pMIvvUL@5tX@W7q7iMaTs33?iUqGeuE7bhfCS~<iDWL!j}eF*HezhsK)+H-S2}r
z_3&~oGoy%B(c(&-s|qdqWuv_<<)n}bH5c?|`<GnWS<zQKRNFkrsWb0-&EJT>BYP%9
ze)@qGRMB^gUEo1lnwX!T-^pSm)D4%ULX`*+Mjx-eD)GNLa9rVD<Xzl(;J#Ymxq^HN
zc$TLFl%&B<bdI*WobB(Vuc}emkq9<6VK$bQE~ulZ5X`g~EhrxID5Tj*L-#oz1n!<^
zYwtg%qdwnj3uBm@?I0QTdgq&x%EH5MiT)X>$9tSY<L4%pmSgpC=X&vmvqF;%DO&`7
z=WBy8JtKk2@0HqW8{zEIh`Zj&(2|9PWVu{EGP71=zHWJXN?J<lKQa{1u-A-*#<$*e
zQO<p+$wMEW&wPS3e&l;Edi2WW%OBnG2+zuaN>j|KIdh!Js|!+k$7_DhtYfXTo_^yh
z<CeDi<G=|~Q+++*ZR4FlTc_3Qj`@xHL;Zt;KUYS%upI2|Es8SI(i&q3K~t@qy5Ttq
za}N^8U7oV~@(T+S@y|AeVHG1KBwk@!z8~TAu=7ewFMPL-HtUm<vhs=YCXbkIDofZU
z?+HA>sNpUp#+oc}r6RBmH2Gw9G=eeoGz6*kwx;}*9@#F{BhQs5fZIEv-Ox7un8=oj
zK<0oq7es9;^~&^7tReSfT`A&soxighB{Y(2kG!Y3L1^$^Z~xgY^2o#T-hdZ>+$@+p
z^kOmG?zSq(0H}V=J(w*PL&_X+6S(aQU6U-?ug(caiq$x+B4zKEJdkcn>H(iBsTsk<
zFjPH)8e?hb{E7>3;)GC0gLvQFyii52tfp>0q!^ddcSz_yXOtG_$=kt|x^_R0iSEXC
zgAc-%XU8)>JGqTFxz-sXL**mtzSQG-lJv#AYSasQ8zX*0X*&=mt(wghd)bxZPINFF
zs++LjrT%o=q@@ia6P_>mEezry-k%d&<Dv@{ZEEe;$GL*)8!CU>RDq+xUk3;Yq(RmG
HF~|Q0GjCVq

diff --git a/DSView/icons/file_dis.png b/DSView/icons/file_dis.png
old mode 100755
new mode 100644
diff --git a/DSView/icons/file_dis_cn.png b/DSView/icons/file_dis_cn.png
deleted file mode 100644
index b6e24584d2bed42577493c96ca1c70cc01f42a92..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1224
zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTC&H|6fVg?4jBOuH;Rhv&5D9B#o
z>FdgVpH-CK+`v}yw-Q*$HKN3^v?L?Hh+*ZrGaf)8o)VytOKNd)QD#9&W_})nFsGt2
zP@D@S?wnsxS(KTcQNpl>|BMw-ln*Rgl$r=qs!)=do62DNou3mZ!wHfJ&QB{TPb^Ah
zh%NXJQqB!FJhM1CClRQ$h++GIE&V`Y4v=toVo_dZUOK}8>1QA>utW5h7A2=LeEr}2
z8m7!SKQ}iuuY}>-nQ8lhVr(E~A(<sPsSGRLT~cRYV4m#h;uw<A_;$wmZV`8p<NHIe
zK7QlRYU?U=NJ6kPJI(y|<=A%Hp6LhTuC3-2GGGy&E+DA#Q~D31oXr!lA^{Z+?%j<t
zMK=Y6R{S$Oci>%zOF+?uJ1IBi3y-~A^=ZTH*@=%{`INpdb9z?1sxIVf_5E=BxKiP@
zrvFY~Si|h$74LBE3u{Vms?mwhdukc>F@JcNz3ZRm(mkG<f7^=pB|UmwD#7`p(Oe>V
zGs88T^S|W|ur;*3-le6>UcIs99!ml50p?>jN*UY_8~B`kANRJAk%4{56nW+!PF|H)
zKHE$?*8ROon4kHF$N^V|l^rJ@iAb>&@Ey=;D4*1I;+2Ff%LmQ|{f(N3Ec$d_AK+;C
z%y2GeYww9&6P_~MU}*D+pRl#z2+(o9P&ZC&*tyek$GYEvw+_y5nDi&?qm6!Vy^;Nn
zb=JvN784uFe2(r|=RN6%Z!UktwY>T}d*@t9Q_$Y!C9P<Ee$%yC*It)qr>3gfo0@JF
zyWJ}ATle%WISJQ^?{c<B>GCRQO+W4Hbi&@~rf<>iS&iYGH+*+>zWpD`{?8ZW042sM
zO^x49Yq}O#?GKh;I*mW9Mv&{F{W{Iij<;7G&XnKs@lbo<@{XS&dxCEDatDvUH>-ml
zN<`@CT+_}6YWwx@(^QqZ+b>tvgfSc5pK@d0_8)c0tCwE*@VDKmW54z0KTP_*bJm%E
z-NM8wEwMi^pY1Z2#L_o+RbBplG+~jr+UTqJMMPTf>=eIA^Bd1T70Efldh}EG9+N^T
zhAFE=o%VlR%_N(8c&X&-hp}1y4%SzscD}li9KZc`*;+mk-75Bg#k(Ts_vLPF+q0x0
zFiZ6Pk!{uG^Xu0&9A<FvTzg^ChJ&BD=M+y$k6?H)nen*gAxrhS2g|!}%4xj&-OJ=3
z^5y!?SwXCOMW#dxEq5rMx=^XEXZO}Ex8l^SCgm@5PLPt|Tu}1o;sn=x##aT(YwD`M
z&)l=l;UL@n{WfkdFYk!&yYRa(dh^M6nRDN*g};PJH6E9^-#R7AE`s-ZeU_#VlYabR
zh7B^m!mlaEY|tsP?t1c5cJ76k)FbnLEU;y~dnB!<^S+(j_JE7O!j)FY^_v%{Tjk$>
zX7*F3?w%FL8^+`Fq?Uh~m?>kcuedaeHNNBcy|$PTo&6^))%%Q#G~5FlbIx%*T+imc
zD@Q6|{TG!5QXQ4|^KC+O<crRE&dK#UKF`nU&OMPub<?HqJzBl0c-EKw?3<S9D`dwp
YutiokTPdH|0nD%rp00i_>zopr0P0f`>Hq)$

diff --git a/DSView/icons/instant.png b/DSView/icons/instant.png
old mode 100755
new mode 100644
diff --git a/DSView/icons/instant_cn.png b/DSView/icons/instant_cn.png
deleted file mode 100644
index 0e5860945bdcd8295e5349b56df5d1b62eb57f15..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1262
zcmXxje>~H990%~vjAOJdg?dCxQ#zG-a4Y$7P0a19g-S*U$HopD^YuWkTGCzD4l|*h
zN>`^Nl8b0vw7R0zI%~&6n#ZPV(H=Ew9ye*jeb+tikN4;O_&ndQ&*$;@{PFoAHu@{9
z{Th1!02ZP}>_xhtrR+XKR)*F5_ejI!(-I2-z}>eLs%{g`6+v4V+D*09*f`_2kvbiX
zqo0VH0EZR9*<2oI?U2(DS_UH&!7R++vGZXzmjhN}Jc)?gTRfbbU&>==Wy7EyFAqW#
z_epuobW4-~v-6mMJcq|16O3iDkIRCK(|JsglD}k$JAAsFU6_%ZjzoE&SK3{Tu$_e&
z={ydblLe%%la?pg{&&8Jm%#-8EFFLIe=MAvm&fG5z$mZ3gV<-5SR5P9WrCJzr8fX*
z2^0|)mwim1FqD(Le|4y4*Lk)~n6`}WQxheP-P7splQ`^=@G>ggB~j;9Lz7>;G%U-#
z=-}*m%ny5lLJ%ZYI5}Py5?)`%9vJ=nBR;~q^6S_EdiGDxw+~V^6K?{cEOpsSFBq4s
zmiKA;G}|=`>V^086;=Lc53RHle8)d@$@79byW_zHfk5DmI%}oS?$3*+)4xr1NEJG<
zbu%;DL^C3Dr8f1T#6LJ#<#dAtk;N!90bFId%$8>!Jgf~g%uvE9eU1r~5O=PxlYN%I
zn4TqEM5EE1pJPk5*3d%SPNSFa<cmYKfq$xMYinC|I$g$yafsD*Ex2m7M*QG758P`O
zg8SfhQ}nMp#7#{zEx-Kr?Af#TdcD3kC^(peer*`Q{HS=`B3@gVGPl!T3^&x*Uq+cr
zg@?B`u0_8)CJyz{jdm^)$86>8`<1~&BJsEW{(dL$xB8(^4eh2RdHRXbXpDKXIZkbI
zjO2sy({X-X8v=4{{M0H{lJscSixLK7v<xVz29X`Xb|T&mcei@Q`;u{5KZSQLGt8Z)
z_L>insrqkephZs)+G2N4kMTfpaj)y-M#qnvMN!Ss`swK-y9`y;Zjf?GGiSodT-(~(
zNRb6Dr?eC@nOsz_ExL1Zfx<h?WWE}ys;Zg{CrXP_c5SGQnc_)C79xb^MlF6U*GS*&
zB6yp*Mn-tx9};2?l(jXlyWKs{DJ`9!-?%{arK}hj9Bg_tHJd6N-z3tgRKNFkcD_qa
zN=niemp`<j-BTzO8OV-7Q?Dz{W3eV>2R^il0kqo9Ed(<BA(2SBwrtrFziG#YwR%#a
zv;IDdEWxT*)mhKo?Nhk9d|^H8ithnXsMj`#_2@=zNQ^(pgT{&an6RF(eJ>t0C4Xzp
z$B3rzov!47T3E*DCF-1^OX-1e>-m`j9^`-|D-a+MkBx{<)}O0u*;5Aw3zYGmZiCP&
zlXy(zU2?s{ihp$WR&oWzy4_QzY)!VOp15LjW~>?*fLb`buibmzj^BXNhBhwQgjwf;
z4{~`lEodqy2s?oRZ_ZcV8F~SERx8S<kDR{sn(7XG4-GwTHi{zGr--`IX$i_m$b{pk
zmgi%9($LbN=}2>T!z>B)VW8k_jtMqBFY|3oj460!h`&C;W<0$*_2ow2Yt4;&B$e_m
z)0OeZ?iEQlOwxwtOtU0KUR15cf}t~s?Kkb6Q4_P@nB6N*aWX3%c4MC|kL8-t(w_0a
TMts0l<XZ!X8XeKGGp+nz2#qoq

diff --git a/DSView/icons/instant_dis.png b/DSView/icons/instant_dis.png
old mode 100755
new mode 100644
diff --git a/DSView/icons/instant_dis_cn.png b/DSView/icons/instant_dis_cn.png
deleted file mode 100755
index 4477a5449749763ae6aa12712b7dbb0cf0d05286..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1352
zcmXw(do<K(7{}ka#2BG5Y=z_2WJxzFOIilM(TtNz*b`x0B4#s}W`5J8<V+mLt#TQf
z7&+Z+ED=eHX~-UzHN{3Fx{NZ(r81@+qm=eH?b$z`_c`bDeBS4r?>|poNYGv*yagTr
zU__%rp-A7ZE1Vwk9zcJ}L7D-Z8p#E~_)lG-%AAcY5vUK-0x9|mJ%Wk3TRUEJ^E;wM
zz&<=Ug~b824KgZ%R>KH_lDLOBbT&+9F#*xQZUe&cI_}3}r*Y`XDKMxvk?lsP@psBe
zir1;OFrASEc4<uvkcokA62>|V^W!;5Acp--ryG7>PUjv<jYm`txYOBEh+v!!ABg8L
z>C9x%X*s2fp#R^09_LUJ(0t39`(N{8F&Ifq7%a-pOA)50)57U+Y7(gV@c2gnutXZ<
z6P|MVeMDeN^e^jv?v+so_W8ot8(rb(2Yc{#czL#YCa<{22}h&mlETb{lq)R{P3&$R
zKT6uF#;o$8vWZ3%_GKtnY@G6?-+o6*^3nOICuhHoL8Vyw<(aqk+HBEIr}8wGRRMRx
zMf+m;#qve2bpEBMc0Z(YoNVF{RR#G1&Q<$M&v9i5L$$TFLhu^=vG2*l@J*T{PU$`n
z`c#EjTw8h~*ohbAq!Fc^@9FKW%Us-OzcCM>Z~|O^O*yIJbLT=|<7wTZ6cmrgv#TB{
zAQFke=EKtJ>W%fKCu${<uXza`zzbWHUa9nyNF*Zvy?YDI#}%#bxg<tO@Y(^CO5}^S
z#ZM%}#wzrMLSe9Vbr_$oU5MVwzu(%r=qgB-xl_8eZUO2DM>C6ev$Oa?nJgVUQJ6FK
zto5s#z@TI>zi*3l1>>Pl^@px`7gHfiOUrGjwnE7cX9k1uN~6)-x$^gP4(Zez$=VDo
zP9UWuiWANIaRUC_+}xdoIJ0xT2~AqmnKmUw=_T++JzwbR5((PDeW1$E-B}EehM9Vz
zI}De1frli?oKl<WwtUo0ESbr|Olt$i6bc&~3yTVqobJYwdNgp!D!I1&!HI?GYiwxv
z)oR_krI#WumR+=E^Je#tA3tsY8E#54X0#_tkG)0Me+G#lj8%{U0SIPie>(=ll@?Z3
zmHCi8gGuUGQ+yJPsMYFEGcz+^dU|?VS-m)_py1J?M{kE`{<;3NUmHVka6RJe>`d(L
z?)Jt`4Xw7G9v&X%ZW0ZgsxG}(cl(Fx5lOn2v?AzwFp{xz9(&qw4S{5u_f{^KpDzvN
zmxh)%HM!K8Wdt~op`r2d6QNFJ0o9?~Mn^_&hG(E-FmF1)X}wgjJ{0oZ{e%$a(!C+~
zbHldw-srZ3NO|ANu^XC55Zi9k2FMVzI2y#AWKc--NO^KLM`ey8c=)NY0+iq4_V&a*
z*4J}oX|t`6(uhF&{3;{_+akY3%6Y-p#x|F~syjD%oHmGBlAGMUddU{$5NJ&;>z?q>
zR$iHOFCf{WqLmUy_v{vV@@={J;M^Ey{BYp2DtNbJcBXF^n!2JFM<f?cx*IVi^4)q9
zJRt6wiuLJ2zg}44fdka4HN`uses=)dK;L?C%mp*k`OgM;%6ngux69r1F4-Osy<IBO
zJ}aPxLQ_zpA-OR(S}}Tm)r7xGbiQfaVfUPi>shWIiq#XI1I?~EFqeOAkmgo&rlcc)
zL-2asFr6i9uIDnxQXBUZKB;Y^{2o)np&-mtv}(!^Yh#dIg;5mkvm&!aHAog<YcB;6
vt`8O~n-9);y-R<mKKs|%`sXz`$DdYE9p2@WiH$1`$iV<KN)XiG8<+Vn-hx(s

diff --git a/DSView/icons/math.png b/DSView/icons/math.png
old mode 100755
new mode 100644
diff --git a/DSView/icons/math_dis.png b/DSView/icons/math_dis.png
old mode 100755
new mode 100644
diff --git a/DSView/icons/maximize.png b/DSView/icons/maximize.png
old mode 100755
new mode 100644
diff --git a/DSView/icons/measure.png b/DSView/icons/measure.png
old mode 100755
new mode 100644
diff --git a/DSView/icons/measure_cn.png b/DSView/icons/measure_cn.png
deleted file mode 100644
index 71619a88f91a8ad749904213a4d14c6db90247a3..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1316
zcmXw(dsLEV7{FhYQoN(J<w#9T3$0K$b>4~$6|B4sGnbU4gcLXNGfRg`u4P$TWEf%F
zOv}6^rXF-`DyMYqoHWbIG*X#cHnPu4POYJ1A9eP}^E~JLp5ObN^PclQ@9Eg+NNbDF
zEC2x3R0=sBsousgUy0;IllP~Pf)P-XG6Ar3Fa`=-saS(RGl;r7+-z*cYTE!}6L#U*
z2Nb>++MWfa^M#<cv6q4%D+obkW@f68Er8g39&o_8x*^=c$anAs$AxTGIs_VQdxH>a
z^MMMP45PXZVsn|mZ_yTmbTG!wSNuazHbck+bb-OBTYebM&P?Sn5LF1;)UBlmHaFr#
zhLFeRv49#kVZ4Ib$MadjR3?}=6i)uH?cj5{OdbRldZk?mTWQp2Y>2}IH>U<R0AM;z
zC2yyti{Z<C#mV8Tdh*+HB7!llQDG8U_eM-yfJG{~`M0n&CKjjLg@NWgbhhLw&h!q)
z-e9t9ivIMD`3V;s7E0}=FHzL4vh=Or`8ehVh0Z<5c;rW&lgM<>MuyBq+S$6P`kbuj
z5!LiyeN&&okv)X|r-!0$^0D{koJCvV+)$)VMB;Rd=;1;YP;TIK4W)l!1C=oKKkccX
zUjo1Wvh5x4&7cpIV{acAxJS7DvpQIvr#&3EYI^wJR1SwTxZp!lv#_%~@{6f#0cSCb
z`rJboqme!lU?e<>Do&}mb?d4wo1<AKRu*k6=t&+uq%TB9pQw&$;g-T0Wz4GZS!wlC
z&bAd#{&DJ>c5DjWqKnjQIWyi2hYo+P$U4Rt^q-rX)2v^v;C5*mZAVP6QV5$(jsWbV
zzm7dIx%u=kszITLt+Z~wu_)z5xa@wMGfOD6PZ`;IUbM8)HZ3GxRX!Fv80VZ%(R}Zt
z%(~bp=vhDu-0@{xFQwwuTRf>mcSOB8WmM@l?y8t{E~KQP-c&i2S!;vfv;@At+yTtz
zh_LU1OWOkQM~6CbSj)d1Eeq|uX|!|VG(A;oS4at4j5D?IllRrs3F}^q>5@FK2S0wP
zsJ)X}x+Nu-ICBzqB3%DN9p5JMT5%ixI!c$MF_60tCtSn1;`eY}b`#)MdcFP7B{cb4
zZa_hTCbFRGT7Q3$W@m~^?9l$ogRzP8BtXDBn|4ZRWxhP3AgXrdn`TkDUZ(P*&661V
zYw$hsY#uA$Y1ne7I(~HIXn(DI-Tqgy#XvK8-^AXI{m&*k>MDmhH*z{UBO-m@oY}V;
zW$;t|?*F{k8hHbEBivDv8}1@6_F@E=<05Tc$M#s1dHp~sb7eOsqB@prccI31;_)R%
z?F=DfxR*9cMR@n=qW0uw7v(bDcI{N9#4J8)3@9EykUA*)BXjdJ@>=q+KB#2R{ty9S
z+oWSc`NKeMg7(W9+>E69fOv!dWVzu^2^pilu++e!(Zej&!{3bAOD5i;K4}e|A;~M&
z$52(EVi#egF6^eHplslj#6#TH!aiQSP?K5U45AOsCB7d`>bepiL_c{y$kQw%N_Vz;
z*ap83kH1kMcc1G}!SxBp8>*TMLaO@zd>yT|fgdYj-2Clj2YK#~ESmNBNNf3BBH?<C
zxLA$mZs$uinyprAi;HTD+GUDbq0_OX0Vu{o6-a{Zyf^DgsvW7Xgzu{!q|u_&USiHe
zt_N@)ccWf-T3o)^nxbFcl^3L8`RZbtF9%CT&qIv*O)oB-bFq7B-S)`vaod(G4|?c5
U6C%TFkk0^6!=uTKVJRp61M5Rcs{jB1

diff --git a/DSView/icons/measure_dis.png b/DSView/icons/measure_dis.png
old mode 100755
new mode 100644
diff --git a/DSView/icons/measure_dis_cn.png b/DSView/icons/measure_dis_cn.png
deleted file mode 100644
index d023a23dd03d2b3354fd458411cc4804f8259bbe..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1414
zcmV;11$p|3P)<h;3K|Lk000e1NJLTq001xm001xu1^@s6R|5Hm00009a7bBm000XU
z000XU0RWnu7ytkO2XskIMF-yn6%RKq#}>vx00007bVXQnL3MO!Z*l;suFOaP000bh
zMObu1WpiV4X>fFDZ*Bk+2_Yi@000VfMObu0Z*X~XX=iA30IUzpIsgCw4s=CWbVG7w
zVRUJ4ZXk4NZDjy8_YVmG000SeMObuGZ)S9NVRB^vU2y+80000BbVXQnL}_zlY+-3_
zWpV(wz_gD5000PdMObuKVRCM1Zf5|%8|H@q000McMObuGZ*_8GWdQa6gX;hQ00?wN
zSad^gZEa<4bO83umcIZ100wkLSaeirbZlh+sP57y000D0Nkl<ZXo2mQPiP!f9LGQJ
z&8|tB#D6Jj+IlErTQL0-_s?vhhxX!0l7lz#U=j4tn;-=}^iq(B2lZk-hzEs&2-=<`
zc<7;$o!MEowh`mSVCh;^TBO-#cRM@pd6?N`+ce3(%-|Z>FD&!kZ{K^r-*<lR_h*FG
zn(YkPYXjn<PoUT66X-Si1bU5aPaqZd0LO6z@Dz{+{<dwq={U|fup78(+jcctCxI6L
zVcYiAxO&?VaVxRoID^0}@C@)d&;(9J^D6Kj@H_B6kO36%9q_ho+jn9qCjk!t0@w#U
z4V(dnI{w=aoQuXgJLGQw3&4kQl_wDc0dPAS4*_R^7lCgg*-qdNaE#D!Ka#)fIF1!p
zc@hLPP>;roz{j?2SAZ`&)_iT-_K(1M;Fn0YhcIqpA?Yl18)!x2<qrA1=qU)j0k9(p
z{Yev$9cPMl^t9!P^zqxi4kSh3kq4d+p52-4(hpg?Wh9YC0d4@}(NjgTI`CICZf7YC
z+yrg`*Gb?SB|)GCoFoj&WmbdK1q#u)O`rk11q>4wyhdE*u`6+}VdR0RpLv$h^;O%p
zgCvZI3fgYMxVdiIw%TON3QU7|6!@O7ml-qMyAj5KZ=<sxHQ8ty0~T-qxXWrwkOX|-
zdBPWD)Lxhp(1d~N1J5~*^C$NgtgS#3Hi7|R<}wOOQv!nU+C2{Z5GhT9fCW58n3;^u
zGbIoZw!u#j7Noewx1oW5qMuP>=qim05!$J>mgRDJk5VcX1VPuCq8nJ2C8d<DOeS+f
z2%#c<o7-kW;J-#Uw)LC2UZYQ-*Dy+>`daC@yDZNP=O$m7kn;A!)+lvluje){Gmt->
zpOjx!O2rG!fT;}+wgxU1a+A|0wzOf~P7Cd4mb~&@$(<umVqd2b12pj}L2d0W`Nv>B
zd+dmmi=EOo**N*wh=4elyQHs`rb>1FnO0(4rba%<XD3e2d+tn4b71|QYFEQ`e=8P?
z_eoth_UC{ZfqBoJDK&@4W;t5%YO^i1oOkC+zcz*THtt~lCmv8KQKeBkTfVxZ+D-JY
z-hai09tfIKMYrsYWG7!*FSgc$Q5HIMB=^aVl>D@HuX#$LM>ktPnJY{WSX@M=%Om;x
zSUx{8mX?&)%&mcog?uJ!YCLQqh$pi7(@M?HRJ_`3*REH7rslf0+!cY(eRGSdsU2+?
z*MUl@c){`Na|%5wV3)GwlBM<1##%P<KnxfWP-^~3rP(b+Y9W_Dx<4({0=hNc3{v|?
zGKWvDU4Lb-ACO(~fLpueD>7^5fq$ZOO&{M10kbsvbNx`D*e3@Le>Cs8Gqn~cQYmr1
z)$-r0m4Eu8kSk1wnZ>^hAmx!o!jJWp7f|tPvp#9I60i@o$)ueQvx>|P4vKS)hJMEy
z&Q0YGic6~EzUDTWNvFBw`|4GYOX=aE*Qwuq*H>h^vP7oK50dJC4{QhY3G^EO0?eMs
UOLmr@eE<Le07*qoM6N<$f|p2lG5`Po

diff --git a/DSView/icons/minimize.png b/DSView/icons/minimize.png
old mode 100755
new mode 100644
diff --git a/DSView/icons/next.png b/DSView/icons/next.png
old mode 100755
new mode 100644
diff --git a/DSView/icons/params.png b/DSView/icons/params.png
old mode 100755
new mode 100644
diff --git a/DSView/icons/params_cn.png b/DSView/icons/params_cn.png
deleted file mode 100644
index 86e2811f49cfa8c45504590b009cf3432cddfc74..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1388
zcmXxkdpOg390&04n#)FViAL01Cejfnv>YkqvUPGBippi!Sa#7i)G79h6&1xEmo9pC
za+Zi=V&;_FI*&sxxuxjLr4prFB2CVcvvr>H$M^erp4aF7{XEb2`^WcUfS-?+#%2uw
zfEFI-Nl;XK<wB?__9N?7G8F}xhznx@u%T7CU<Eri7%Nbnjra9ZA6GTd#@a@pi{#(Q
zE0pb?#Exe$L3vd-PC@J03i2eeVwjXfHibb48<A!f3fEBj0Y>6!CM7PO4Jx&}e^Tg%
z@5&?*l~GeRg+>BS%i2gq2dV4?G05x`B9jEd6W5e+&F{l0tQaa$5oLmUiRh|=5lTKn
zWYQ`0I3O{eQeHv*zw=4V7!vrrmhs{L*Z~HOMxwKUth=y9VQR`)FojJefwH*)D*#lm
zcu)7>_;a&iy$Q!d3|-&03GO>>GD0N>UA8n28$PNMsA*n)^MvlmaER!#c^3U1Vy8+{
zU^pf}T~qU~{Sve$-izCo^R5bsyIoe6wWrSDSjTWF<%#posR*WvA8+|L5~Al^`^fU>
ze8YUPyjec#;vmZToZXkOE~y{Ym$0O|v^f>l<V}K!GihjXYPT#NRn$OhF&5IoU;EI|
z@Q)jyV-<_g?7g9Fc-#7g(6|<X4<@`&6eaKPZay*~=at4(TBhpImJ26O{;c{WLyU$0
z0hbVpx!#SDnA6VxASF&fWXs$BjmWcm1Ly74X<spvER!DR`<Y2yK(UIwFO%hnR<(ym
zm1JD&+r+cDxG(z5-UzD_&NRz+8moh!uWpK$J3<^lwOoN_fA_kO#b;q!RDjgKXfiKg
zQcGa8sw3Ic(GD}YBEC~Hk!#XJSMOTHmDQ-}9mVvv%g)z45*O7Z^<O8S5A=~pG-m5^
z7r!C_T$~AJ6jORU4Lr8MhH7NdaaJ7_bj}M?s3L60ZDw3MilhE&*GAZ{H=w1~INCT$
zDt&!-B700b3RTFGKa#y!j060?ziCMfJBny_xo5j%<De&>9F#nfWjyGN=a7v1(*@&}
zP1e)f@t@`(!D+nu;>nWLbU{uCcF=~j<Os!488xfA9a31M+Dm<i4`wW#qvh)%Ve~Ma
z7bC{TPOMK(DDo=MzoGuo2{QXZm=T0&fdMI{+aK4gOJl$d4;-dNAH0)n-EeB74SEVk
zZ(aPwuxF;c)4JAR4BZ($ioW|HzdyvCiIAv)YS&;VujhYip>h{r$UcFsm!^X0j4#GQ
zODGoWQAEYUvRhet)cTTH0&4AO$q8h&t6`9Z)q)Y^3>v6tpEI{xxXIUP<h1RjOr)xY
z#=F86v2Zx8H#y^t-Su8CfU;aA%5g5mkzAdg$pv0o0oz2v#|SGwX4gG1U_QiaCfe%1
z63=zTN4g0Y*7Quv%_xTlJRAABgFJQsA!r~rlk-jL|5SGKR{KmP=OHiMJZ>(#?-XW4
zlzLS#Jv{c**G(_)tAo@Nvx;6D80kbj_WWu({R~$rrHU~*DH^$s4+=S9uscI;2;w%b
zy~fMEkgoI$pw_28m+9j#=y-b|9CmcS4+ByoqWnRPN!3J9oAabdunn@pk9jX*AT*wC
zwsJ79SbXa_p{`MAW6G`WmFa`rv!k+G;<r?OwQE5y9YKr?XP)2l40&b0!<g#JhS)B0
zO39()A%l8Ra%)Hz@Zn!}i&MOr6+~=@?T@8fZGvxigznOAd!HxcE-Z1}BX-v&J-xI~
z3tw9i!Y7Q}n}IL9s^x92@b&XfJ4~=B93YFfbaL5SK9CXD4&C%`?y3rq3M=d>+V4bG
mfulAAUHa-gyvbYnhIV*D;QeWGXqw_v0eCMz&nl0o^nU?(TxmA|

diff --git a/DSView/icons/params_dis.png b/DSView/icons/params_dis.png
old mode 100755
new mode 100644
diff --git a/DSView/icons/params_dis_cn.png b/DSView/icons/params_dis_cn.png
deleted file mode 100644
index fcb8a6115a2f9bab5859f2a4023ee9e55595a4de..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1619
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
K?aXl`9{UgV%F}lM

diff --git a/DSView/icons/pre.png b/DSView/icons/pre.png
old mode 100755
new mode 100644
diff --git a/DSView/icons/protocol.png b/DSView/icons/protocol.png
old mode 100755
new mode 100644
diff --git a/DSView/icons/protocol_cn.png b/DSView/icons/protocol_cn.png
deleted file mode 100755
index f1af4fec243d36267a544397932c5ba138de3388..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 3269
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
DdL~PV

diff --git a/DSView/icons/protocol_dis.png b/DSView/icons/protocol_dis.png
old mode 100755
new mode 100644
diff --git a/DSView/icons/protocol_dis_cn.png b/DSView/icons/protocol_dis_cn.png
deleted file mode 100644
index 005d3add3fc9c515a3efb0f8d805f9ff7eae43e4..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1454
zcmXw(c{JNu6o7x0mRPGyjaW+Bv@w>Uwv$>$f(mUdDXKD-FbOGHM4~i0qG*SPqSmy=
zR;MVz5c?9X>2%OhJB?bZs<pJW#8QSy+B1LLchC9m_wIS`p7UOkn~S5o3|IyL0C^{r
zJzAKJL?L}xxLy|Dxh+f}3hGJ(04Q{eLM%&9L0t%?XigU$q^1vjr)Z(q7<1;IugJlh
zhM?0z$W)-5(}xlwIhqjJ<068n1PYBnCIQMIofASXBjR>sN;H)a96|#s75mN#slr!E
z#bHINHjO~U0cKl@AYlb0s$3%DY1gn+9N<ei5b3gCn-d~}!mvV>3N-TS?+UTB2w%oh
zNd!_bz*B!Gx`NcV{d8&&4iFr~Fa59Ck%>eci3V);Wp@hMVUgxRpoQUpvX6tO0YEa^
z$sXYm61S4;8m8``@+{V5iR+tDU;MDpysXqZ;aNfhDMR4=GgyafA%n6;z~9;`y&056
z!H~a6pcx?5hg5{pMo%1NW?XB#E<CK67+6k09Ae8<oGXny+PaiKI}_GIhot-Rz0>!6
z+jgyXr*<Q!w($7GQTB@5#0N>XLyqmE0q9Et4MYRidRbc07c)_%XltelvXFa>X=!H0
z9bEJVibrH8Ha0eXFDfcp=b8K}H-oSB-irwg3~Vm#3VA9Av@%V25n_B-UJkE88z=<F
zgzDI1#EA?gGDAH5JS^X(*B(+E-+~%5hQrm!^<piZoj;NIk>rwgpDK=uOycwWlT=l9
ze*SCOHu+`AnA6~>qfzqXn&0nBeb%f2v*fJ+L)@9XP6!kc0hzMP=MCN83pSlptV|(x
zPxCBn9i?smH6Z<Y`<IAzka;!+W~%oF&j=c7=jN$>X2ybJLKf%i>bmxiz*bRuHXkLp
zr>G&xJcAi)ZKWFBMZx~+tLnS{OxN-|=G&u>hYx9~t&GcRYJkCCw4!VRI?(#Z{0nk(
zo2CZ?>VtJm#=ZGy>49uwZ-al*fra?Wm;K>X!U$6~Q^GtaMY9YVA{EEr1rIl>xQ#vi
zR6nZ^V3v{Ct+jHGA39<W_64^;PPIQ?+i6obZ#I}8RS>Uw;zeDGEOIG1UpOTF`kY{I
zGN~CyzLg;0WM$`MwL}`_RP7Z8_){LR1b(LU9m>dD7L)GoOn1~hrxkJaB!0Pe;{!|*
z+0Wx9U-Ls0RNy-!H5?Z>$D;|Ae?{3Lot|C)5r3T(4uZ0VW3Knv5TS3cq(Mtgn~?aU
zOx#3C15uXWkcfjSI(f4)qE3oeq}`}n{5xDIOsU^fMHsU2T@Nsu_)OE-l)ARi$cfhC
zw9;+&UnQITE(J3)c5Zge?@}Ht$2Ujc2($)ar&!L~9-u1d(1Jm~-|7}<#B<$~-*D~l
zt@b&87`LW1O;0f(w>b#CKl<KP<+X&Ze`fcM1PDc+aN$K3Tw}UxzQ->5tZry?GX4|N
zkWp00%DFh1ac5%8l5GRmpU;4Cv{qH(-892B98bL1ldsN}a4$%QNC8IZb$3vLPtpys
z$1|9F?>v<o`-w;JZrw{`uQX6SJ{<JW0yyY-0)5oEw-<q7cm)zCold3PO~c!$Df<^r
zDswUz_p<3QtWmt_dV97Y)9mbCobKCOuTnLS@4i&6CGv|6*WODz*p6+~IY-53C2xUx
zG|PuK;H+*I5hHPbBx*5gZ*a7QrJt0$ZF0fT<_Y;xX<jUZ)8P{hn|2l+pm=hia&FSA
zrg~AVDYI^Z;bLCke`Ku|Jy6y$GP&HJIw!}0W7>4OOYx~Pv#n`HWW`Xj?vi?9H2;sG
z5+D)2z^^cuic!*|uLLN#ao2V|ZBcpC#%#D~C<oiZQRz@Ov7lV!6wO#nHPaI9&U)TG
za8Nnx2;szD1#zb4+2SXRO*V_0z=^h7R^J}`fq2K$>KVng6w!|iI61i3bC3Zy{{ty3
Bmcjr4

diff --git a/DSView/icons/restore.png b/DSView/icons/restore.png
old mode 100755
new mode 100644
diff --git a/DSView/icons/search-bar.png b/DSView/icons/search-bar.png
old mode 100755
new mode 100644
diff --git a/DSView/icons/search-bar_cn.png b/DSView/icons/search-bar_cn.png
deleted file mode 100644
index b8a249e4352d7a09d6742fc7489dac78701cd31b..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1580
zcmXxkc|6o<90%~9agO`eGFrzVw_fW=x-gSD9Jyj7M`JMM7-Os&jbo!!YM4;MI-*EB
zNyb^tlw(+fWOBtKSJsh5BS+27w6Fc+`+Q%o_xJNWujl#axqiysMNV2%8UO$}Bm(9o
z=vKm#k`SzZpzUjd1|}dd@c<y-E-aBeQ+X``N|KOnaLGw=H3d5pRuahn2f_VGjtQj5
zSRznO=O6?mOA-(a7mp?42_$@M44?wm)fc$5(4Aummx%a?ND}Zwfpb`(@;{V_3l&Cn
zNcd<RV6&wF7EHjxiFa%`DKV6Y1I`lo!nn+j!}0Ohs8B(a2sE<lsREV~vR^1M1|Jgv
zu(aldPmug?e*zJU1HSODEd3vIj*X7S#gG6VC!Z-W31Q3!Pm00;Rjcoe06=UD33K#`
zOk44fMU3Mh{3GXEdvAqL9N2yKGBWMyeO&E!`MCOmVa8w=rhs2Xs7Q=Gxz9G;`3-!E
zY%Ej$Iw)O6wi9$l-YXPN>;)e*;TEO1kCFO{7oz|Eys^@8bU3+Xac`pduan7BX$$<%
z8<$>9F6>fPb2FzrPkNPu+ixU@T<>g2h3Oj%$?;YvT7P1l2C4z65KUGuolYP1-wFbk
zt7jJ$w(2@KIMh6Uz99$ni(ZsY1&8coJ?-u7JwC+c?(H}F9qkN@x?5CKWG*Ty>VgO|
zymZDaWM8A};3k8?SfPfeICStpcY7EIRi!CT>sJl6^z2WpN6;pqd|mrT?C-}YJ0!<|
zfPnS$;Mx_ZNAAVs?rB0(o|i{vmo{^fpMXZAWl~K6+wick7eyr{!SXEe5El%l;DdFq
zDX{Z#`AF!9FGN=2IJM~}{{H0r>}=HY+gew1NWA6Iv(S_Q3meBej#XAgdh6SQUm|RC
zHu2}2DHKZ5s-2~cjc-C?BD25s>l>>qw;Ekm%zgx@7Bl><va)h!t58)|0+*cpN|IIN
zh0=wT(H?BwnFEie=|D_GLeS36ZP*@8!bgk6>>#bg5oN;47{lQq{(D(rzxE-5PQO)F
z5^s(CvKoWIbfBukl$zzHJb)V7NEBR`%ErnoD5Nw}c6q~jUWLHr@qvLjMqOQ<49hKD
zq5Xid@ulHug6bmfo3^&LhKq~K!bgraPzqbdG_<trEY8o*TZ%wHrGTu+S1=2gUZV08
z=#p52rn0s-77EEpNtTC-`>ad)x7xbz7|kr98dO|RHy%HJOg^Y6Ri9Hd;2C~<*1B5<
z>3tVZD{*smeR0^vCLwKhip%vWV9$(Z*IJ!7pPQR=pa(O9Jl5@K5ALs-)BKPPjg5^d
z2qLxbEw?N&x1yC!x3HN8!NlNjxYl^g7JX=F$Qeq_-eWCn%r#G}Mhp%PdLz_n5H%UZ
z?RyUw?a7-}s3zb-H;3c;Cx;W59gRkz8pN)=Hi=dXfQ?Iufj+-~|Gx5wH7MUCBO}9D
zUtj+kl4n`heyDqFhD|;G{gjNNlB%jI)Wh99p9Tqpp34f0#$vJD{wy0M9lfreo_J1Q
zU;fggEl{F#hSSeSHwAaw<*lGKArOwy=mjN0e0X?g((=f&s-T(+CMRHowW-&$Wo2c<
z^#+~D<bdE{W`eJ|Vyvo$hS8GZnVB!-#tvGT-)629Gjn*q=`^p4Z&`1lGw_uU))|GZ
zD<dN+JYc`lHt#&S$O?EA)EYuD%j^I-Aa@KPCOdgv{lG;wt<(h3f{@UopsM34eex}4
z@|#6y^eX?6Zc%7I=Gftf#{)wdEaFh@g*0Den7YQ8_OsNOU1YMFeOz>!Ax0Nr3)k0~
zN1N&8p{m<jMk{m4j<8O%nL)kvhRn@RJaA>Ma*m4Ly9extSly5hpwk)w^DxuR%SPR3
zG-vzf?CQOyKYUX25Z0cENvc#FGjsM>q+6i4zj>*6m|1*XveIa?*gpt<A(TzxH%E%M
z6D17+E^36$98Nx4&3@&HlKVuC3rmw{eAClIRiCc(Y1u!<Gz?X3vdh7E_?LtamT${A
z8Fk0Ee9xC}Lto`KwVr}1L@MX>>;)^=8CtkK@g6o+Z>D_#0?E{*@koR5p%ewE<`PKx
bR*DFyWFL0<1mn8kQv{H3cNpC%<hOqTs1D8V

diff --git a/DSView/icons/search-bar_dis.png b/DSView/icons/search-bar_dis.png
old mode 100755
new mode 100644
diff --git a/DSView/icons/search-bar_dis_cn.png b/DSView/icons/search-bar_dis_cn.png
deleted file mode 100644
index f21aa2d45fcbe5c08341bd938d4c923eab24a853..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1888
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
V|AC}Y!uTHvU}xoop;}<m{snD^bb0^)

diff --git a/DSView/icons/settings.png b/DSView/icons/settings.png
old mode 100755
new mode 100644
diff --git a/DSView/icons/single.png b/DSView/icons/single.png
old mode 100755
new mode 100644
diff --git a/DSView/icons/single_dis.png b/DSView/icons/single_dis.png
old mode 100755
new mode 100644
diff --git a/DSView/icons/start.png b/DSView/icons/start.png
old mode 100755
new mode 100644
diff --git a/DSView/icons/start_cn.png b/DSView/icons/start_cn.png
deleted file mode 100644
index 6052468a62e254135ceb649558ad20497a648a78..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1401
zcmXw(dpOg37{I^IPTR~q;b=Oc3x;ANm(;Z8)@c$RA<C@ThS_XGZl&A9baWh-<Sy08
z8m8Pj=xisBvoy-B4n-nG8XnqoQO<9j=e*DJzVGvV-p}{@e82y^d_P|=E!0L706@#f
zo9GX9J5?g#P(AY9$4scHv%N#O0BCoqQmxQh8x27O&xhoJc(Kkv$H^*$6EOJ=c?9$J
zCGhAh4iMDKydk8?gAkF*rEnN*9)lGJ^wrI_Kpdsw`&sN{4ueMLfm$7zD@3)wQ4W=?
zQcZabCKWiY=%_;zb=4$*6~#*;bEqJky{6JNzFp4XQew%F$^osCre7e8RN*6JP8=hS
z1|;a$sxKh^JD<RzP=R9Y+}!`#eioBSjpG5O?6MeQaFrIw;Kfow&HR7`0N)dRi2DNR
zXXICy-bau8@b}uAT66DqY4%@Od01Nu#nNYW>t~1KZ!;6^tWwXo46!CNbL$Rw|Dkz5
z;?nGDlhM|5E+(Zv|4t%N#!PP4mqf=jW9W*Y=yI*0w`sFOA?X$A|MVh#9h_FWO<y65
zIEVVu`_?L#-QJXi{V8*nN`o~X|Mc9wmXFSIjE4mY6@l^b@hy6h=4Xo&!VL@zSeWdA
z@u8tt4bS8jitfRbS?vk7^NuC4+m+JN&(CLhh9PxND2VQivA9+oPG1j)v$eGyQ=W8N
zC@LzV(Wult$q|~dOeQlPiAJN-VKCUVcIFf@GICPCAIr83Z7$5s&1E)@_|i_C=(t=_
z@l`M!eGlv4@c!mYm`4npaI)j>U1xhNcCub5Otr${1|N@PjcT4}OHW|SvBd`k3<jgv
z@ZycmX-@c3%DvW4pFZv4A)E;0D<(d^zI_iKKHOcNpHFEHwkhIrxqJ3jF6ivpw=(FS
zdowRD@0b+^bLYnO>uzs&uFpi_bDN<^b;hqPvU>ZKSK*0g3433Zmz8~8ynkW9$lMqo
zL^D%!|6={&gK^`>E|<oU#O-<Rx7}pw07s$ZA0K*hYSq`v>)auvSreS^p#>zPOG`_I
zB_$=I)l+K<KK~hRWxhAob3I+GRV%8iQz(?mWApFcy}Kn6iElSF=>EEB`k5L5J(J5}
zvm4rl!Z{1k)4Ao3Y3SkM;WpSp<{8Q2B71FSW=1Ej^|Mjsqm`;#w|ef*^oM%#>FH2-
zA1+AJK%p+7lhcs*s_kJ-ZEdb~mOW0ry}hKIoSeacfPm8;WD@|t?#G_Z_dfuv$HvC+
zEiEmlo(>LjI~P_SwTJB(Gf&!9#u&}%={c|)x3jOWFC{cIbR1)2llCKAzLU%tj4{RI
z#S(eqX}_Q#Wwl;)^Tx;J1c5;CCA&I|MW+X22~9y=$HaDk*wBe4IFC;5Y>CX-4kH#E
zB3kb*TUbNr71lf|(CtU*O(Ul48jG{$_50JKcFl2gA7D0^SJ`%j@i85VrL&`Q0>6gj
zsF+UVhBkZ1ZHPoKwN=dd1_3E4%Mwf^nRPvsg`p<aXT$<WA}{EGizuP2#yHo%54S9o
zr5Q+Cqq+7OTwr?sgKHBWCq`8HFFU7Pn1|!=8WYG2GN6H4fUJ2@h%$&$0%-t^v}{Tq
z26~&eRhPcp&=9KO#Gk1ynGy+Cn5okKdfPm6?Rw9v>)HeK^bgmK8X}bz)h(N3^TE=W
z^otG`DhvrG<HG!cJN~4?z-B?Xfgxb~lPU+0jv%Wlt9V2v+ibslt*VNxOE8IgU8&}F
z|FkIZ{k7yRl-EZISySNcjRLWJc(a5ibCb$gU<R)1S1In4b)-8EWIx&9s$(jVReD=>
zhAfT4?bIh~3zkx?rjtRV=Wl+i4jW@8;gP*~<Ad(koQH}Up$!9kJba1ugov~M0_M7U
A2mk;8

diff --git a/DSView/icons/start_dis.png b/DSView/icons/start_dis.png
old mode 100755
new mode 100644
diff --git a/DSView/icons/start_dis_cn.png b/DSView/icons/start_dis_cn.png
deleted file mode 100755
index 86531127d52e8fdac86fe3b8fe1ef02facabfa41..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1495
zcmXw(do<K}6u`fXyw;%9DnporNJv>p5u@?Sb7nmgF=GZZW5<tnh+!KBl{Si*NKB8>
zdN-cU!E7cfs>w4%<rx+$dF^R;cBVc1$Nk=OKKFC)Ip6y|=bP>AiH0j{DFXoDt}ZBF
zNw$!NqP*nvm)&AYl2V*YU_1b-LTSj{G*v}NpaSH2##!OL{B||XJ;=r1V!k2g0O(W#
zM4(W?!|EOv2~vS12!)G}pc3OCB83bzl=SyWxU!TxQQ~M+ViW-am1;e<5~})*QgPu@
zRSzPPaNy{Mnv$fVB(3;S@X&>DDh`~D6HE2)z6~eFN5qCpR4Ql^)L)ZeMJe_Vr;>@}
zC?G)0NUxyqUw;BM0teQ_mlpoloG2s`jtqhIo`QA>lb323A{2`Q<x9Or0LXD%QKvA3
z^hK5r!7plOmzZm8-00hsi?_DH$Hd#S+~>0n)_NCf<k(s}5Br$~5SZq{A}0LeO1MQF
z%_UHwE%shNu~BrOK4$jDeZzp>OzWoH@oudu>-_o(92C_1xSz)i-G7Og98b}b-)fa>
zD_SlVi%V8hHu#0CJ>n=gWix@XGc4l)p;WXJ{&sO)hpDDJj>}|)SahVV3bQrtG&D4%
zKwmdkqODMK;kVy_g`t|JfT}_Hih;j6m&W)cGcz-Pc?AWEaB{`IN4<GRCfs86{m8QW
z^z^iDV`Jk|g6-{D1Omaw1$th|&HV=#GQ+cs)w|pU+^k6>n1w|C>*kPZST<^6VP<A#
zJj~)}3YkoPE)4Oq>=U%ZYJ!`(@w@@@*yFYGr{}kN$xR#GkG^u}Xg#VdouaH4KTyU)
z=$}Moq(g-j;xBW3v*zd8wA*N_4~PTLxar(uZtm_E`uqC>OiWGB@rGmVX?7(gE(S<7
zIQ+z6?RP2}756GDEB`pd?F;0`&w8RsB+{MH#U)i{M>|64ae;ivpHDL3i1ATgl-F2+
zS#WevP*4&YO~)?3Ye}I;M@RcmY8`h=p0)Pn$GBq1MjM^?{2?W!t;Sa7${ZY1&QlK`
zmP_j~{jmZ^$KH(W-tS#z0uC0rczSpwZfu+rr-qeMA}2d}H$1rst&`usa7ao`ZF|4G
zLEqQ?Su`~@HYF6^_BfP2I3jp5F>xMKFx^HtqNOZ<scvp=u9#sTUZoOQP*Bi`#kTIf
z{4_NSg=}YZd_*rUE@r}NGSd4uH#ftO*A){J63!|yJ06tyuHw_!npW&9wkJ-c{JyZ3
z$Z#yX(KTs#!t11pU1&f+bCHMP@tV-qq&hBlmW;g4dhN6q%<R?!dYm0VEtARQJC=#I
z1r|iSAwYw(tL$GVhFL48JHZSdk4HvCL}<d&9b&`6J~TnLf4`MWF?BrMesyqYsJ%}l
z^47i9l?+Q4!1JLht&Uyg<>k9Q4D+4R9l~CzoJz6`Nq6-7T8kw>RWi;#>$1%#)P2*x
z3)w{sb)6iJHcX`YAw^$!6nJA3j$5HYTGn`;!Ca#1h|H(TH1&yF>Kqk^qgGs2OK_e+
zo<TON#Z_bJra`u(d8B?w#!ioueK7tcz=70Ad?4TQ*!8Bn434q6>?S*FzP>CthjR}w
zvOksLn-v6yK-4bhVIu}>pvZ_4<Dh8ijzZVF(b&V6r@8B?Ko4oZeawhs`*MogGWC1`
ziJ$SWduMVN#DcxRg*bHU(MSzKFd8%f)y>Ze==DOk2{eFYZD6H)1V&&<Nq>C6^fPVh
zi(c|0gp7?5!{+`~oqb4qt7Kkhn;s{>$8KBcPQfu?jkIOyTx07ZV+wnns?9JBx2iCT
zKjpBCvYv6^YqG$K3oud3p)H(bO<&1E(q1?42l*p36y`-wA+Qtnd6{&+!AkddnCF2q
zk7!9L38q#JjIe18wmpc`ad0c5yJNA2NcyY!vi1yB;DX!OQog7XrY$(BFTCKG1p`a$
kVaKO^gt7x##z(~9*((`4ADvMx$^Qjhojp<2j$yz23pgpDRR910

diff --git a/DSView/icons/stop.png b/DSView/icons/stop.png
old mode 100755
new mode 100644
diff --git a/DSView/icons/stop_cn.png b/DSView/icons/stop_cn.png
deleted file mode 100644
index da13d8481798454b9dbd278590143f710b8dc76b..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 830
zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTC&H|6fVg?4jBOuH;Rhv&5D9B#o
z>FdgVpH-CKTtlxkxdbfa8d2g{T9T1p#ISPR84sWkPYF=SCAB!YD6^m>Ge3_(m{U<1
zD9!~Ecg`=UEXqvJC}CK`f5r+Z$_ExLN=*bQRVc~KO=U3s&d&*y;RMM9=ckpFCl;kL
z#1{MqDdz?oo>`onlL%B=#IXIqmVTfx2S_+Pu_!MyFP-6l^fQnb*dh8$i;`0rzW#51
z4O8ZvpPQSSSHke^%(VSLF*cC0kj#>tRE8DrE~zsxFmZaiIEG|2zMZ+hE7(!w*#7ql
zw_ZePXhcUvab!=-vKC}omk^hr8<V8{gURl|J}0jG3cDIb>>8X7=|yBH<~+CekTTcK
zD752#KlSu3mG9?bB$z%oXX?!~eqNr=XI$>&8Ii72%Cs@1@d^aRaJ;?o`m5QlyYFNf
z#FdZzx0UO^&)<Gnej#HMtJU0dZ|nBkGZZMBur<8jeDjTALpezNL;26#345fZ94`60
z=sn)LzENkwEHt!Lyu;GZx}kN+<PM4D42$xvHL<EqK6(6L!UvWEOFKT+`!2uCFZlPM
zRd}~b@-dEOetFsP%#jMFK-9~sa<}Na{=0qgcE#UoJ&V5I4gGuf@4Vgfcl>s|yz#uU
zOM>(PQ3hGj2{n8SD)H0K-}!st?)t40pBPDTig4O8f8abYZ^`0CvFVLVCN5EC_<lAg
zZsx|Ydlgd{8rW5~uj2Q}n>Z&lEqVFTKVd<?H3BPts}>vYmbNlDDJvSicFB5`?VfVx
zy}{LNXL9^LZC#SjpvPRXT6N7TM$g4XH)q~V^Z3-u!qD)9o8j{3Nh_2xMJD-hEL?t(
zwP86!+|<(xx|XmuxVs9n-;cYl_^kTDjWcGA^<O`-9Y{B>zTuT-nwhGu_fL7pO}912
zJfd!{0(vNNfvfczk$3NI-q+LqV(j|=zFnaD_CJo3LBVN%^JPWptV2hufysoy)78&q
Iol`;+00qcRwg3PC

diff --git a/DSView/icons/trigger.png b/DSView/icons/trigger.png
old mode 100755
new mode 100644
diff --git a/DSView/icons/trigger_cn.png b/DSView/icons/trigger_cn.png
deleted file mode 100644
index 8f98b4dd629ef727038a2e1be09ec920c443df94..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1141
zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTC&H|6fVg?4jBOuH;Rhv&5D9B#o
z>FdgVpH-CKTz%iEx~E_v*N76w(vpn)B8HXg&UgTYcuIgmE~&-IMVSR9nfZAP!kmiA
zKyfaRxO09%Wl?5&MhU|j{xeoUQ9iI}QEDPcsX|F+ZYqQ6cYaQw3@1n?I6tkVJh3R1
zA-3Q@NI5sy@XX@moJ63~B8Ke;w)6vqIY7eUiA8ytdFc!Xq@RJjzz)%0T9lm1@b!Q5
zYnU?U{M_8syb^|QXQu53im`!|g=CiGq%y2{cS)Urf!V>+#W5tK@$HQB-BUv)j@#ci
zm*hOw#m2QWcaPv^BaM~YZths=R<d}tRA!*SmI+-Mf*NbpIesy#bUEDOxLzju_G;kt
ztWynD;(-QV4mTRk&+oQeANT&u*V_BP`#u|ese5?fY32OlbKk4aeV+4tj`r=G)D&Og
z72RPDmor#RdZCoAenRxwf9yH+3_1SEy3FE@{;F%QsD`tZvf8L-&VO6qpz0}myFXv7
zQbX~;x99`w1n0+3WGUdWNd2v{;qtfV2j22N*sk$%wo;Sp+a7KK!S^@r$qDWk`5ETu
zGDrJScpCe(OIrOcOLDiVH@N5MGhc78KG1BvuK%`!`=!eVf+iN<mD$1V>7}%eDW7S(
z#QQ1HY<A3cnveG+G6}J)@z}+9WJmLjf1B65|G$rq=kNiR3ygU;<;+{;v|j^N<VZ&_
zmfil>cvWScj>Dy{x9O*TiE~Z(;xe)SZT;mV<tnyZZ}hwqj?DRa{?N|TGK=Fqqqa}D
zSr>Up`oQFE)(4inwJUH6dh4W?x$(lv6#*h!%7YL7)K*%z{C;|NU*yWGXB+S5{6Dkz
z^qutwTyG1{E|s5j+kV?D*OdZVySQz2rgZk{?q^=xu<RmNhSXG6mm@x__7pdl-M-uL
zg8vqK&fY8Kc3<aqcC74(=;-+AE6N}<)kO2<>p5pM+;8u0kUg-pV+K<k^Ew9c20a7K
zmx~`BUD0Cny;sIr+hTs$hov1a)_+!*-`%m3ec!G3-{U=$Ru`_;SYV#?Xy4n%nlW}h
z+kS_cDpk2!o1J?Uw)aeJW_8r1@@?N$qL;4-R{FbYiRXjk54o~`mrP6jtzE=;>~!PY
z1BRZPC#89Rvz&Dz`FDp<&V0Z7`{kRDYiYGz@NtRpdw9t^H!*~7iQVVsh0~7zI*@s7
z_0hG98caQR`thCN{k{DCT}DH7_WtWuOsk$9_`K~r^L?i3;^b+m`nTROz4v_Ob|m#d
z?Slz#_cv}=jb*m$>&WzM7e46c;*%Qr&D~Y5JkXSVS>x;j?{_+0S`)tg<*Fq%_VbwI
zrkC(p%t*cI|ML}dbwhe?z2ZyOgpH?8Zea^`)>uD>`Qe6T9IE?UJ7#>^n{~&3x5=B^
t-jCOCE;qX4Wvh9c{j9T#_JYhm>^zd^FK*cwWCF}x44$rjF6*2UngD((_3Z!v

diff --git a/DSView/icons/trigger_dis.png b/DSView/icons/trigger_dis.png
old mode 100755
new mode 100644
diff --git a/DSView/icons/trigger_dis_cn.png b/DSView/icons/trigger_dis_cn.png
deleted file mode 100644
index e17bfce7150364663554979b53aaa7a5bc6b77d5..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1453
zcmXw(dpOg39LK-AFveWgWg10WsdE-nlyZdlY0TM<dm@)LixtLfxo4%=NO4Me9Ce&g
zF3E|ONYh9PQ*NcFj!VTVx;SnNm9zCc=a0|#^E|Kj`}_I4zyEwio^%QZjYk6jFz#-U
zx2jvIOG{IA?t?F6shW1I+x~a}^xD(~D<J6^t00Q!PIE<#Xspt=HSg%At8^7|4dCtJ
z^CCH1P+22)Qz2b7f>`lPE<2XT=EQ&%+Utobj#hIQPHYmF9TCX`)%tQf71jGexh#g-
zYQ|$nv%q$xzP3uyRx3W7L%akAmj!}jm(_NiAH&)4%qWJ+$_2M&lCvtTrN;Xh+!%ID
z1dtgk)KB;k&4<J1GFf15Ib-sFn+qp8niazX^YRP#R7_KS)tAkSVu6ZJeVYJ4Cb~m=
zd?Sy444_3B`x$&!d|V`p5OoC4BI@SbR2sGPc{@r^l$}@Nojjodw}tZZ&{*m&kTncP
zoooQu*F9R=bIyd8e1&JnWN;H5kAq=*Tzod@`Hk6i)O@`3D(siIKAZU$UY9)6f8Y4I
zUpXvSD!S#(8x33HGAAU6k780u|2y<Mn>%p3+!_J>&2ya|X`U!@@Fv3u2kw#x$0q`V
zfPd?&sVpLq_`qdm8YE(G;0V*YhEil$hVU6o7nV2?w@V)kykl7wP-zGwO+i`%*`PPc
za6!f&GUW#^!(?Uxj%(RKeLR$a6}3Ih*x3z@Vg-@>7E0Www=)Y(`EF%k6e&2XKbqV^
z1JODGoD-!=rE&=t3F@ISGJy+|h{Y#6y;A)l{EHY8>ZnE8BvM8uq%Wp6&ww3kAO3q_
z918d7mz)(w*8kKLg0ZopL%t@aruRIce<tiY!ncJ6|Gi$>F@eZ+f(V3TU3Hn>mA)R7
zNBkiR@U44VpXStfV0G|d4rJ3QcN7UHl}o#I!W3d*aa4WwcH-!J^PS_V4xy(Zf~CMf
z(Cgn-;a&AT-Q{Js))(y4z4iL9L5POI8Y3g4g9-<r1gTlnT~Rs^uYCQ(u80C@Q_-*H
zBLp!Atc1cZ3F+`h8?d4ZN@&pDAU~n-`>Om<P;JnQ7i<K!+{WT%tKuV_Sw{)6E2ow}
zBPel$lW`x2J*#@yJPjUxm~3+G*-5rhl66=A+#7k<{i}@Xr)LM-bxBPCG)i_w7#$i8
zEYMaQ*uccItuOtNQVqWltxVHw{ZP2?$Yc9#kJ}zkU|OW<Z|%i7JLPXnB#zGI<EzIL
z3)eF&afg&KnK+vdZF6a67k9ixv+kD8wO@5UGe<psD}MLZk(Wmg$LEtSE<{&2ea+q6
zXSLR0%DdUR<>LFCGg5o;KpGitKZK&TmV=W+xdU@>AgE<GhLS*_)fdt8d0mYZg>T#p
z4JW|oJV6wq1l6o9J8Oytl9@iWUV+mGl|9H}%;7(SG>WIQtT-2EBY~bti)U$4-C<gQ
z@uv+kMgoyPWOaH7X>p@am>WE$NY)tUgpcXH*ii#4O@QYkn<DQn;}WjqHM7d{=R)tr
znL+y{uTu#y@wXMauWm{WW22YQKsNlf^#Pq<F^2hVPvz-@>&Cq2r6w~^$~h5_)mtR8
zgEUXl)cLmJ?d7J_&MM|g-D4Z;cV{?#<#zwIw)qb3G$nL^b2S3Zy6opLqTF0y9-vbe
zwA=2bLYkM(--;gZnnm97=z-_JFga!;f%f@Ect;<1e{s-#|Guw7fd!(1ZK22k#C6;G
z#r;>luM@SCQ8rt+m9u!nCNul<%rg?A%m-O_p?1_v&=7Lx(1kP{B6hT)@CD~`-;x8S
z_Zi})snpQ;%9RPPq9NnlD%msAIibmyYp96s_knM#d44YQN1RpBG1liEZ>7{X)iP=<
ztQ}|L%#N(l$z-@)4@x;zu4UqCpG1zQU>=6Z(uEJKvQzdvp{RZ(;O<I?YMjGP{0A1!
BcRBz7

diff --git a/DSView/icons/wiki.png b/DSView/icons/wiki.png
old mode 100755
new mode 100644
diff --git a/DSView/pv/data/mathstack.cpp b/DSView/pv/data/mathstack.cpp
index 363232d..0bec787 100644
--- a/DSView/pv/data/mathstack.cpp
+++ b/DSView/pv/data/mathstack.cpp
@@ -36,11 +36,11 @@ namespace pv {
 namespace data {
 
 const QString MathStack::windows_support[5] = {
-    "Rectangle",
-    "Hann",
-    "Hamming",
-    "Blackman",
-    "Flat_top"
+    QT_TR_NOOP("Rectangle"),
+    QT_TR_NOOP("Hann"),
+    QT_TR_NOOP("Hamming"),
+    QT_TR_NOOP("Blackman"),
+    QT_TR_NOOP("Flat_top")
 };
 
 const uint64_t MathStack::length_support[5] = {
diff --git a/DSView/pv/dialogs/calibration.cpp b/DSView/pv/dialogs/calibration.cpp
index b25b7ea..f9e7995 100755
--- a/DSView/pv/dialogs/calibration.cpp
+++ b/DSView/pv/dialogs/calibration.cpp
@@ -39,13 +39,13 @@ using namespace std;
 namespace pv {
 namespace dialogs {
 
-const QString Calibration::VGAIN = tr(" VGAIN");
-const QString Calibration::VOFF = tr(" VOFF");
+const QString Calibration::VGAIN = QT_TR_NOOP(" VGAIN");
+const QString Calibration::VOFF = QT_TR_NOOP(" VOFF");
 
 Calibration::Calibration(QWidget *parent) :
     DSDialog(parent)
 {
-    this->setFixedSize(400, 200);
+    this->setFixedSize(400, 250);
     this->setWindowOpacity(0.7);
     this->setModal(false);
 
@@ -55,7 +55,12 @@ Calibration::Calibration(QWidget *parent) :
     _exit_btn = new QPushButton(tr("Exit"), this);
 
     _flayout = new QFormLayout();
+    _flayout->setVerticalSpacing(10);
+    _flayout->setFormAlignment(Qt::AlignLeft);
+    _flayout->setLabelAlignment(Qt::AlignLeft);
+    _flayout->setFieldGrowthPolicy(QFormLayout::AllNonFixedFieldsGrow);
     QGridLayout *glayout = new QGridLayout();
+    glayout->setVerticalSpacing(5);
 
     glayout->addLayout(_flayout, 1, 0, 1, 5);
     glayout->addWidget(_save_btn, 2, 0);
diff --git a/DSView/pv/dialogs/deviceoptions.cpp b/DSView/pv/dialogs/deviceoptions.cpp
index 970bf4a..74f8f55 100644
--- a/DSView/pv/dialogs/deviceoptions.cpp
+++ b/DSView/pv/dialogs/deviceoptions.cpp
@@ -45,8 +45,7 @@ DeviceOptions::DeviceOptions(QWidget *parent, boost::shared_ptr<pv::device::DevI
     _device_options_binding(_dev_inst->dev_inst())
 {
     _props_box = new QGroupBox(tr("Mode"), this);
-    _props_box->setLayout(&_props_box_layout);
-    _props_box_layout.addWidget(get_property_form());
+    _props_box->setLayout(get_property_form(_props_box));
     _layout.addWidget(_props_box);
 
     if (_dev_inst->dev_inst()->mode != DSO) {
@@ -118,25 +117,27 @@ void DeviceOptions::reject()
     QDialog::reject();
 }
 
-QWidget* DeviceOptions::get_property_form()
+QGridLayout * DeviceOptions::get_property_form(QWidget * parent)
 {
-	QWidget *const form = new QWidget(this);
-	QFormLayout *const layout = new QFormLayout(form);
-	form->setLayout(layout);
+    QGridLayout *const layout = new QGridLayout(parent);
+    layout->setVerticalSpacing(5);
 
 	const vector< boost::shared_ptr<pv::prop::Property> > &properties =
 		_device_options_binding.properties();
-	BOOST_FOREACH(boost::shared_ptr<pv::prop::Property> p, properties)
+    int i = 0;
+    BOOST_FOREACH(boost::shared_ptr<pv::prop::Property> p, properties)
 	{
 		assert(p);
         const QString label = p->labeled_widget() ? QString() : p->name();
+        layout->addWidget(new QLabel(label, parent), i, 0);
         if (label == tr("Operation Mode"))
-            layout->addRow(label, p->get_widget(form, true));
+            layout->addWidget(p->get_widget(parent, true), i, 1);
         else
-            layout->addRow(label, p->get_widget(form));
+            layout->addWidget(p->get_widget(parent), i, 1);
+        i++;
 	}
 
-	return form;
+    return layout;
 }
 
 void DeviceOptions::setup_probes()
@@ -177,8 +178,8 @@ void DeviceOptions::setup_probes()
                         ch_opts->setChecked(true);
                 }
             }
+            g_variant_unref(gvar_opts);
         }
-        g_variant_unref(gvar_opts);
     }
 
     for (const GSList *l = _dev_inst->dev_inst()->channels; l; l = l->next) {
diff --git a/DSView/pv/dialogs/deviceoptions.h b/DSView/pv/dialogs/deviceoptions.h
index c2dd9ee..6de30d9 100644
--- a/DSView/pv/dialogs/deviceoptions.h
+++ b/DSView/pv/dialogs/deviceoptions.h
@@ -61,7 +61,7 @@ protected:
 
 private:
 
-	QWidget* get_property_form();
+    QGridLayout *get_property_form(QWidget *parent);
 
 	void setup_probes();
 
@@ -86,7 +86,6 @@ private:
     QVector <QCheckBox *> _probes_checkBox_list;
 
     QGroupBox *_props_box;
-    QVBoxLayout _props_box_layout;
 
     QPushButton *_config_button;
     QPushButton *_cali_button;
diff --git a/DSView/pv/dialogs/fftoptions.cpp b/DSView/pv/dialogs/fftoptions.cpp
index 3b08406..d1df974 100644
--- a/DSView/pv/dialogs/fftoptions.cpp
+++ b/DSView/pv/dialogs/fftoptions.cpp
@@ -169,26 +169,34 @@ FftOptions::FftOptions(QWidget *parent, SigSession &session) :
         }
     }
 
-    _flayout = new QFormLayout();
-    _flayout->addRow(new QLabel(tr("FFT Enable: "), this), _en_checkbox);
-    _flayout->addRow(new QLabel(tr("FFT Length: "), this), _len_combobox);
-    _flayout->addRow(new QLabel(tr("Sample Interval: "), this), _interval_combobox);
-    _flayout->addRow(new QLabel(tr("FFT Source: "), this), _ch_combobox);
-    _flayout->addRow(new QLabel(tr("FFT Window: "), this), _window_combobox);
-    _flayout->addRow(new QLabel(tr("DC Ignored: "), this), _dc_checkbox);
-    _flayout->addRow(new QLabel(tr("Y-axis Mode: "), this), _view_combobox);
-    _flayout->addRow(new QLabel(tr("DBV Range: "), this), _dbv_combobox);
-
-    _hlayout = new QHBoxLayout();
-    _hlayout->addLayout(_flayout);
     _hint_label = new QLabel(this);
     QString hint_pic= ":/icons/" + _window_combobox->currentText()+".png";
     QPixmap pixmap(hint_pic);
     _hint_label->setPixmap(pixmap);
-    _hlayout->addWidget(_hint_label);
+
+    _glayout = new QGridLayout();
+    _glayout->setVerticalSpacing(5);
+    _glayout->addWidget(new QLabel(tr("FFT Enable: "), this), 0, 0);
+    _glayout->addWidget(_en_checkbox, 0, 1);
+    _glayout->addWidget(new QLabel(tr("FFT Length: "), this), 1, 0);
+    _glayout->addWidget(_len_combobox, 1, 1);
+    _glayout->addWidget(new QLabel(tr("Sample Interval: "), this), 2, 0);
+    _glayout->addWidget(_interval_combobox, 2, 1);
+    _glayout->addWidget(new QLabel(tr("FFT Source: "), this), 3, 0);
+    _glayout->addWidget(_ch_combobox, 3, 1);
+    _glayout->addWidget(new QLabel(tr("FFT Window: "), this), 4, 0);
+    _glayout->addWidget(_window_combobox, 4, 1);
+    _glayout->addWidget(new QLabel(tr("DC Ignored: "), this), 5, 0);
+    _glayout->addWidget(_dc_checkbox, 5, 1);
+    _glayout->addWidget(new QLabel(tr("Y-axis Mode: "), this), 6, 0);
+    _glayout->addWidget(_view_combobox, 6, 1);
+    _glayout->addWidget(new QLabel(tr("DBV Range: "), this), 7, 0);
+    _glayout->addWidget(_dbv_combobox, 7, 1);
+    _glayout->addWidget(_hint_label, 0, 2, 8, 1);
+
 
     _layout = new QVBoxLayout();
-    _layout->addLayout(_hlayout);
+    _layout->addLayout(_glayout);
     _layout->addWidget(&_button_box);
 
     layout()->addLayout(_layout);
diff --git a/DSView/pv/dialogs/fftoptions.h b/DSView/pv/dialogs/fftoptions.h
index 9dcb20e..b16dfe6 100644
--- a/DSView/pv/dialogs/fftoptions.h
+++ b/DSView/pv/dialogs/fftoptions.h
@@ -75,8 +75,7 @@ private:
     QComboBox *_dbv_combobox;
 
     QLabel *_hint_label;
-    QFormLayout *_flayout;
-    QHBoxLayout *_hlayout;
+    QGridLayout *_glayout;
     QVBoxLayout *_layout;
     QDialogButtonBox _button_box;
 
diff --git a/DSView/pv/dialogs/protocolexp.cpp b/DSView/pv/dialogs/protocolexp.cpp
index 2f7ec22..11f2435 100644
--- a/DSView/pv/dialogs/protocolexp.cpp
+++ b/DSView/pv/dialogs/protocolexp.cpp
@@ -58,6 +58,10 @@ ProtocolExp::ProtocolExp(QWidget *parent, SigSession &session) :
     _format_combobox->addItem(tr("Text files (*.txt)"));
 
     _flayout = new QFormLayout();
+    _flayout->setVerticalSpacing(5);
+    _flayout->setFormAlignment(Qt::AlignLeft);
+    _flayout->setLabelAlignment(Qt::AlignLeft);
+    _flayout->setFieldGrowthPolicy(QFormLayout::AllNonFixedFieldsGrow);
     _flayout->addRow(new QLabel(tr("Export Format: "), this), _format_combobox);
 
     pv::data::DecoderModel* decoder_model = _session.get_decoder_model();
diff --git a/DSView/pv/dialogs/protocollist.cpp b/DSView/pv/dialogs/protocollist.cpp
index e8d4b5a..fbc5137 100644
--- a/DSView/pv/dialogs/protocollist.cpp
+++ b/DSView/pv/dialogs/protocollist.cpp
@@ -63,6 +63,10 @@ ProtocolList::ProtocolList(QWidget *parent, SigSession &session) :
         _protocol_combobox->setCurrentIndex(index);
 
     _flayout = new QFormLayout();
+    _flayout->setVerticalSpacing(5);
+    _flayout->setFormAlignment(Qt::AlignLeft);
+    _flayout->setLabelAlignment(Qt::AlignLeft);
+    _flayout->setFieldGrowthPolicy(QFormLayout::AllNonFixedFieldsGrow);
     _flayout->addRow(new QLabel(tr("Decoded Protocols: "), this), _protocol_combobox);
 
     _layout = new QVBoxLayout();
diff --git a/DSView/pv/dialogs/search.cpp b/DSView/pv/dialogs/search.cpp
index 5f41fc4..1469df7 100644
--- a/DSView/pv/dialogs/search.cpp
+++ b/DSView/pv/dialogs/search.cpp
@@ -54,6 +54,7 @@ Search::Search(QWidget *parent, boost::shared_ptr<device::DevInst> dev_inst, QSt
     search_buttonBox.addButton(QDialogButtonBox::Cancel);
 
     QGridLayout *search_layout = new QGridLayout();
+    search_layout->setVerticalSpacing(5);
     search_layout->addWidget(search_label, 1, 1);
     search_layout->addWidget(new QLabel(tr("Search Value: ")), 2,0, Qt::AlignRight);
     search_layout->addWidget(&search_lineEdit, 2, 1);
diff --git a/DSView/pv/dialogs/waitingdialog.cpp b/DSView/pv/dialogs/waitingdialog.cpp
index 54035be..c069c61 100644
--- a/DSView/pv/dialogs/waitingdialog.cpp
+++ b/DSView/pv/dialogs/waitingdialog.cpp
@@ -40,8 +40,8 @@ using namespace std;
 namespace pv {
 namespace dialogs {
 
-const QString WaitingDialog::TIPS_WAIT = tr("Waiting");
-const QString WaitingDialog::TIPS_FINISHED = tr("Finished!");
+const QString WaitingDialog::TIPS_WAIT = QT_TR_NOOP("Waiting");
+const QString WaitingDialog::TIPS_FINISHED = QT_TR_NOOP("Finished!");
 
 WaitingDialog::WaitingDialog(QWidget *parent, boost::shared_ptr<pv::device::DevInst> dev_inst) :
     DSDialog(parent),
diff --git a/DSView/pv/dock/dsotriggerdock.cpp b/DSView/pv/dock/dsotriggerdock.cpp
index 39782c0..8f6dffb 100644
--- a/DSView/pv/dock/dsotriggerdock.cpp
+++ b/DSView/pv/dock/dsotriggerdock.cpp
@@ -51,6 +51,7 @@ DsoTriggerDock::DsoTriggerDock(QWidget *parent, SigSession &session) :
     QScrollArea(parent),
     _session(session)
 {
+    this->setWidgetResizable(true);
     _widget = new QWidget(this);
 
     QLabel *position_label = new QLabel(tr("Trigger Position: "), _widget);
@@ -127,6 +128,7 @@ DsoTriggerDock::DsoTriggerDock(QWidget *parent, SigSession &session) :
 
     QVBoxLayout *layout = new QVBoxLayout(_widget);
     QGridLayout *gLayout = new QGridLayout();
+    gLayout->setVerticalSpacing(5);
     gLayout->addWidget(position_label, 0, 0);
     gLayout->addWidget(position_spinBox, 0, 1);
     gLayout->addWidget(new QLabel(tr("%"), _widget), 0, 2);
@@ -156,14 +158,14 @@ DsoTriggerDock::DsoTriggerDock(QWidget *parent, SigSession &session) :
     gLayout->addWidget(margin_label, 15, 0);
     gLayout->addWidget(margin_slider, 16, 0, 1, 4);
 
-    gLayout->setColumnStretch(3, 1);
+    gLayout->setColumnStretch(4, 1);
 
     layout->addLayout(gLayout);
     layout->addStretch(1);
     _widget->setLayout(layout);
 
     this->setWidget(_widget);
-    _widget->setGeometry(0, 0, sizeHint().width(), 500);
+    //_widget->setGeometry(0, 0, sizeHint().width(), 500);
     _widget->setObjectName("dsoTriggerWidget");
 }
 
diff --git a/DSView/pv/dock/measuredock.cpp b/DSView/pv/dock/measuredock.cpp
index 3515657..27fe384 100644
--- a/DSView/pv/dock/measuredock.cpp
+++ b/DSView/pv/dock/measuredock.cpp
@@ -66,6 +66,7 @@ MeasureDock::MeasureDock(QWidget *parent, View &view, SigSession &session) :
     _duty_label = new QLabel("#####", _widget);
 
     _mouse_layout = new QGridLayout();
+    _mouse_layout->setVerticalSpacing(5);
     _mouse_layout->addWidget(_fen_checkBox, 0, 0, 1, 4);
     _mouse_layout->addWidget(new QLabel(tr("W: "), _widget), 1, 0);
     _mouse_layout->addWidget(_width_label, 1, 1);
@@ -97,6 +98,7 @@ MeasureDock::MeasureDock(QWidget *parent, View &view, SigSession &session) :
     _t3_comboBox->setSizeAdjustPolicy(QComboBox::AdjustToContents);
 
     _cursor_layout = new QGridLayout(_widget);
+    _cursor_layout->setVerticalSpacing(5);
     _cursor_layout->addWidget(new QLabel(tr("T1: "), _widget), 0, 0);
     _cursor_layout->addWidget(_t1_comboBox, 0, 1);
     _cursor_layout->addWidget(new QLabel(tr("T2: "), _widget), 1, 0);
diff --git a/DSView/pv/dock/triggerdock.cpp b/DSView/pv/dock/triggerdock.cpp
index bef00fd..0256df0 100644
--- a/DSView/pv/dock/triggerdock.cpp
+++ b/DSView/pv/dock/triggerdock.cpp
@@ -125,6 +125,7 @@ TriggerDock::TriggerDock(QWidget *parent, SigSession &session) :
 
         QVBoxLayout *stage_layout = new QVBoxLayout();
         QGridLayout *stage_glayout = new QGridLayout();
+        stage_glayout->setVerticalSpacing(5);
         stage_glayout->addWidget(value_exp_label, 1, 0);
         stage_glayout->addWidget(inv_exp_label, 1, 1);
         stage_glayout->addWidget(count_exp_label, 1, 2);
@@ -197,6 +198,7 @@ TriggerDock::TriggerDock(QWidget *parent, SigSession &session) :
 
     QVBoxLayout *serial_layout = new QVBoxLayout();
     QGridLayout *serial_glayout = new QGridLayout();
+    serial_glayout->setVerticalSpacing(5);
     serial_glayout->addWidget(serial_value_exp_label, 1, 1, 1, 3);
     serial_glayout->addWidget(_serial_start_label, 2, 0);
     serial_glayout->addWidget(_serial_start_lineEdit, 2, 1, 1, 3);
@@ -243,6 +245,7 @@ TriggerDock::TriggerDock(QWidget *parent, SigSession &session) :
 
     QVBoxLayout *layout = new QVBoxLayout(_widget);
     QGridLayout *gLayout = new QGridLayout();
+    gLayout->setVerticalSpacing(5);
     gLayout->addWidget(simple_radioButton, 0, 0);
     gLayout->addWidget(adv_radioButton, 1, 0);
     gLayout->addWidget(position_label, 2, 0);
diff --git a/DSView/pv/mainwindow.cpp b/DSView/pv/mainwindow.cpp
index 9b58784..af8166e 100644
--- a/DSView/pv/mainwindow.cpp
+++ b/DSView/pv/mainwindow.cpp
@@ -254,6 +254,8 @@ void MainWindow::setup_ui()
             SLOT(malloc_error()));
     connect(&_session, SIGNAL(hardware_connect_failed()), this,
             SLOT(hardware_connect_failed()));
+    connect(&_session, SIGNAL(on_mode_change()), this,
+            SLOT(session_save()));
 
     connect(_view, SIGNAL(cursor_update()), _measure_widget,
             SLOT(cursor_update()));
@@ -295,7 +297,7 @@ void MainWindow::update_device_list()
     assert(_sampling_bar);
 
     _session.stop_capture();
-    _view->show_trig_cursor(false);
+    _view->reload();
     _trigger_widget->device_change();
 #ifdef ENABLE_DECODE
     _protocol_widget->del_all_protocol();
@@ -347,6 +349,11 @@ void MainWindow::reload()
     _session.reload();
 }
 
+void MainWindow::mode_changed()
+{
+    update_device_list();
+}
+
 void MainWindow::load_file(QString file_name)
 {
     try {
@@ -750,6 +757,7 @@ bool MainWindow::load_session(QString name)
                     dsoSig->load_settings();
                     dsoSig->set_zero_vrate(obj["zeroPos"].toDouble());
                     dsoSig->set_trig_vrate(obj["trigValue"].toDouble());
+                    dsoSig->commit_settings();
                 }
                 break;
             }
diff --git a/DSView/pv/mainwindow.h b/DSView/pv/mainwindow.h
index f6cdb0b..a8e7356 100644
--- a/DSView/pv/mainwindow.h
+++ b/DSView/pv/mainwindow.h
@@ -76,8 +76,6 @@ public:
 		const char *open_file_name = NULL,
 		QWidget *parent = 0);
 
-        void session_save();
-
 protected:
     void closeEvent(QCloseEvent *event);
 
@@ -88,6 +86,9 @@ private:
 
     bool eventFilter(QObject *object, QEvent *event);
 
+public slots:
+    void session_save();
+
 private slots:
 	void load_file(QString file_name);
 
@@ -99,6 +100,8 @@ private slots:
      */
     void update_device_list();
 
+    void mode_changed();
+
     void reload();
 
 	void show_session_error(
diff --git a/DSView/pv/prop/binding/binding.cpp b/DSView/pv/prop/binding/binding.cpp
index 2470ba2..95fe443 100644
--- a/DSView/pv/prop/binding/binding.cpp
+++ b/DSView/pv/prop/binding/binding.cpp
@@ -70,6 +70,10 @@ QWidget* Binding::get_property_form(QWidget *parent,
 {
     QWidget *const form = new QWidget(parent);
     QFormLayout *const layout = new QFormLayout(form);
+    layout->setVerticalSpacing(5);
+    layout->setFormAlignment(Qt::AlignLeft);
+    layout->setLabelAlignment(Qt::AlignLeft);
+    layout->setFieldGrowthPolicy(QFormLayout::AllNonFixedFieldsGrow);
     form->setLayout(layout);
     add_properties_to_form(layout, auto_commit);
     return form;
diff --git a/DSView/pv/sigsession.cpp b/DSView/pv/sigsession.cpp
index d85341f..a42b50e 100644
--- a/DSView/pv/sigsession.cpp
+++ b/DSView/pv/sigsession.cpp
@@ -473,7 +473,7 @@ double SigSession::cur_sampletime() const
     if (_cur_samplerate == 0)
         return 0;
     else
-        return  _cur_samplelimits * 1.0 / _cur_samplerate;
+        return  cur_samplelimits() * 1.0 / cur_samplerate();
 }
 
 void SigSession::set_cur_samplerate(uint64_t samplerate)
@@ -602,8 +602,6 @@ void SigSession::start_capture(bool instant,
 void SigSession::stop_capture()
 {
     _instant = false;
-    //_data_lock = true;
-    //_view_timer.stop();
 #ifdef ENABLE_DECODE
     for (vector< boost::shared_ptr<view::DecodeTrace> >::iterator i =
         _decode_traces.begin();
diff --git a/DSView/pv/sigsession.h b/DSView/pv/sigsession.h
index 569ae28..59cf332 100644
--- a/DSView/pv/sigsession.h
+++ b/DSView/pv/sigsession.h
@@ -333,6 +333,8 @@ signals:
 
     void show_wait_trigger();
 
+    void on_mode_change();
+
 public slots:
     void reload();
     void refresh(int holdtime);
diff --git a/DSView/pv/toolbars/trigbar.cpp b/DSView/pv/toolbars/trigbar.cpp
index 5a938e2..d616000 100644
--- a/DSView/pv/toolbars/trigbar.cpp
+++ b/DSView/pv/toolbars/trigbar.cpp
@@ -184,6 +184,7 @@ void TrigBar::reload()
         _search_action->setVisible(false);
         _math_action->setVisible(true);
     }
+    enable_toggle(true);
     update();
 }
 
diff --git a/DSView/pv/view/analogsignal.cpp b/DSView/pv/view/analogsignal.cpp
index e026b33..8600d00 100644
--- a/DSView/pv/view/analogsignal.cpp
+++ b/DSView/pv/view/analogsignal.cpp
@@ -57,6 +57,7 @@ AnalogSignal::AnalogSignal(boost::shared_ptr<pv::device::DevInst> dev_inst,
     Signal(dev_inst, probe),
     _data(data)
 {
+    _typeWidth = 2;
     _colour = SignalColours[probe->index % countof(SignalColours)];
     _scale = _totalHeight * 1.0f / 65536;
 }
diff --git a/DSView/pv/view/decodetrace.cpp b/DSView/pv/view/decodetrace.cpp
index 7a9e72b..d1bfe66 100644
--- a/DSView/pv/view/decodetrace.cpp
+++ b/DSView/pv/view/decodetrace.cpp
@@ -112,8 +112,8 @@ const QColor DecodeTrace::OutlineColours[16] = {
 	QColor(0x6B, 0x23, 0x37)
 };
 
-const QString DecodeTrace::RegionStart = "Start";
-const QString DecodeTrace::RegionEnd = "End  ";
+const QString DecodeTrace::RegionStart = QT_TR_NOOP("Start");
+const QString DecodeTrace::RegionEnd = QT_TR_NOOP("End  ");
 
 DecodeTrace::DecodeTrace(pv::SigSession &session,
 	boost::shared_ptr<pv::data::DecoderStack> decoder_stack, int index) :
@@ -377,6 +377,10 @@ void DecodeTrace::create_popup_form()
         _popup->reload(false);
 
     _popup_form = new QFormLayout();
+    _popup_form->setVerticalSpacing(5);
+    _popup_form->setFormAlignment(Qt::AlignLeft);
+    _popup_form->setLabelAlignment(Qt::AlignLeft);
+    _popup_form->setFieldGrowthPolicy(QFormLayout::AllNonFixedFieldsGrow);
     _popup->layout()->addLayout(_popup_form);
     _popup->setTitle(tr("Decoder Options"));
 
@@ -662,6 +666,11 @@ void DecodeTrace::create_decoder_form(
         this, SLOT(on_del_stack(boost::shared_ptr<data::decode::Decoder>&)));
 
     QFormLayout *const decoder_form = new QFormLayout();
+    decoder_form->setContentsMargins(0,0,0,0);
+    decoder_form->setVerticalSpacing(5);
+    decoder_form->setFormAlignment(Qt::AlignLeft);
+    decoder_form->setLabelAlignment(Qt::AlignLeft);
+    decoder_form->setFieldGrowthPolicy(QFormLayout::AllNonFixedFieldsGrow);
 	group->add_layout(decoder_form);
 
 	// Add the mandatory channels
diff --git a/DSView/pv/view/devmode.cpp b/DSView/pv/view/devmode.cpp
index 54d52ff..6f81f27 100644
--- a/DSView/pv/view/devmode.cpp
+++ b/DSView/pv/view/devmode.cpp
@@ -75,6 +75,7 @@ void DevMode::set_device()
 
         QPushButton *mode_button = new QPushButton(this);
         //mode_button->setFlat(true);
+        mode_button->setMinimumWidth(32);
         mode_button->setText(mode->name);
         mode_button->setCheckable(true);
 
@@ -116,6 +117,7 @@ void DevMode::on_mode_change()
         if ((*i).first == button) {
             if (dev_inst->dev_inst()->mode != (*i).second->mode) {
                 _session.stop_capture();
+                _session.on_mode_change();
                 dev_inst->set_config(NULL, NULL,
                                      SR_CONF_DEVICE_MODE,
                                      g_variant_new_int16((*i).second->mode));
diff --git a/DSView/pv/view/dsosignal.cpp b/DSView/pv/view/dsosignal.cpp
index 10b0a12..461aafc 100644
--- a/DSView/pv/view/dsosignal.cpp
+++ b/DSView/pv/view/dsosignal.cpp
@@ -437,7 +437,7 @@ bool DsoSignal::load_settings()
     //    qDebug() << "ERROR: config_get SR_CONF_EN_CH failed.";
     //    return false;
     //}
-    gvar = _dev_inst->get_config(_probe, NULL, SR_CONF_DSO_BITS);
+    gvar = _dev_inst->get_config(NULL, NULL, SR_CONF_DSO_BITS);
     if (gvar != NULL) {
         _bits = g_variant_get_byte(gvar);
         g_variant_unref(gvar);
@@ -564,6 +564,10 @@ int DsoSignal::commit_settings()
     ret = _dev_inst->set_config(_probe, NULL, SR_CONF_VPOS,
                                 g_variant_new_double(vpos_off));
 
+    // -- trig_value
+    _dev_inst->set_config(_probe, NULL, SR_CONF_TRIGGER_VALUE,
+                          g_variant_new_byte(_trig_value));
+
     return ret;
 }
 
diff --git a/DSView/pv/view/ruler.cpp b/DSView/pv/view/ruler.cpp
index f6050a7..c14af95 100644
--- a/DSView/pv/view/ruler.cpp
+++ b/DSView/pv/view/ruler.cpp
@@ -426,14 +426,15 @@ void Ruler::draw_logic_tick_mark(QPainter &p)
     const double SpacingIncrement = 32.0;
     const double MinValueSpacing = 16.0;
     const int ValueMargin = 5;
-
     const double abs_min_period = 10.0 / _view.session().cur_samplerate();
 
     double min_width = SpacingIncrement;
     double typical_width;
     double tick_period = 0;
+    double scale = _view.scale();
+    double offset = _view.offset();
 
-    const uint64_t cur_period_scale = ceil((_view.scale() * min_width) / abs_min_period);
+    const uint64_t cur_period_scale = ceil((scale * min_width) / abs_min_period);
 
     // Find tick spacing, and number formatting that does not cause
     // value to collide.
@@ -442,19 +443,19 @@ void Ruler::draw_logic_tick_mark(QPainter &p)
     } else {
         _min_period = cur_period_scale * abs_min_period;
     }
-    const int order = (int)floorf(log10f(_view.scale() * _view.get_view_width()));
+    const int order = (int)floorf(log10f(scale * _view.get_view_width()));
     //const double order_decimal = pow(10, order);
     const unsigned int prefix = (order - FirstSIPrefixPower) / 3;
     _cur_prefix = prefix;
     assert(prefix < countof(SIPrefixes));
     typical_width = p.boundingRect(0, 0, INT_MAX, INT_MAX,
-        AlignLeft | AlignTop, format_time(_view.offset(),
+        AlignLeft | AlignTop, format_time(offset,
         prefix)).width() + MinValueSpacing;
     do
     {
         tick_period += _min_period;
 
-    } while(typical_width > tick_period / _view.scale());
+    } while(typical_width > tick_period / scale);
 
     const int text_height = p.boundingRect(0, 0, INT_MAX, INT_MAX,
         AlignLeft | AlignTop, "8").height();
@@ -469,9 +470,9 @@ void Ruler::draw_logic_tick_mark(QPainter &p)
     assert(minor_prefix < countof(SIPrefixes));
 
     const double first_major_division =
-        floor(_view.offset() / tick_period);
+        floor(offset / tick_period);
     const double first_minor_division =
-        floor(_view.offset() / minor_tick_period + 1);
+        floor(offset / minor_tick_period + 1);
     const double t0 = first_major_division * tick_period;
 
     int division = (int)round(first_minor_division -
@@ -491,7 +492,7 @@ void Ruler::draw_logic_tick_mark(QPainter &p)
         const double t = t0 + division * minor_tick_period;
         const double major_t = t0 + floor(division / MinPeriodScale) * tick_period;
 
-        x = (t - _view.offset()) / _view.scale();
+        x = (t - offset) / scale;
 
         if (division % MinPeriodScale == 0)
         {
@@ -505,13 +506,13 @@ void Ruler::draw_logic_tick_mark(QPainter &p)
         else
         {
             // Draw a minor tick
-            if (minor_tick_period / _view.scale() > 2 * typical_width)
+            if (minor_tick_period / scale > 2 * typical_width)
                 p.drawText(x, 2 * ValueMargin, 0, text_height,
                     AlignCenter | AlignTop | TextDontClip,
                     format_time(t, prefix));
-            //else if ((tick_period / _view.scale() > width() / 4) && (minor_tick_period / _view.scale() > inc_text_width))
-            else if (minor_tick_period / _view.scale() > 1.1 * inc_text_width ||
-                     tick_period / _view.scale() > _view.get_view_width())
+            //else if ((tick_period / scale > width() / 4) && (minor_tick_period / scale > inc_text_width))
+            else if (minor_tick_period / scale > 1.1 * inc_text_width ||
+                     tick_period / scale > _view.get_view_width())
                 p.drawText(x, 2 * ValueMargin, 0, minor_tick_y1 + ValueMargin,
                     AlignCenter | AlignTop | TextDontClip,
                     format_time(t - major_t, minor_prefix));
diff --git a/DSView/pv/view/trace.cpp b/DSView/pv/view/trace.cpp
index 7c92308..aec3700 100644
--- a/DSView/pv/view/trace.cpp
+++ b/DSView/pv/view/trace.cpp
@@ -83,7 +83,8 @@ Trace::Trace(QString name, uint16_t index, int type) :
     _v_offset(INT_MAX),
     _type(type),
     _sec_index(0),
-    _totalHeight(30)
+    _totalHeight(30),
+    _typeWidth(SquareNum)
 {
     _index_list.push_back(index);
 }
@@ -95,7 +96,8 @@ Trace::Trace(QString name, std::list<int> index_list, int type, int sec_index) :
     _type(type),
     _index_list(index_list),
     _sec_index(sec_index),
-    _totalHeight(30)
+    _totalHeight(30),
+    _typeWidth(SquareNum)
 {
 }
 
@@ -109,6 +111,7 @@ Trace::Trace(const Trace &t) :
     _sec_index(t._sec_index),
     _old_v_offset(t._old_v_offset),
     _totalHeight(t._totalHeight),
+    _typeWidth(t._typeWidth),
     _text_size(t._text_size)
 {
 }
@@ -404,7 +407,7 @@ int Trace::get_leftWidth() const
 
 int Trace::get_rightWidth() const
 {
-    return 2 * Margin + SquareNum * SquareWidth + 1.5 * SquareWidth;
+    return 2 * Margin + _typeWidth * SquareWidth + 1.5 * SquareWidth;
 }
 
 int Trace::get_headerHeight() const
diff --git a/DSView/pv/view/trace.h b/DSView/pv/view/trace.h
index 0426025..1f3a4c4 100644
--- a/DSView/pv/view/trace.h
+++ b/DSView/pv/view/trace.h
@@ -306,6 +306,7 @@ protected:
     int _sec_index;
     int _old_v_offset;
     int _totalHeight;
+    int _typeWidth;
 
     QSizeF _text_size;
 };
diff --git a/DSView/pv/view/view.cpp b/DSView/pv/view/view.cpp
index 357fdb8..4a6f0d2 100644
--- a/DSView/pv/view/view.cpp
+++ b/DSView/pv/view/view.cpp
@@ -167,7 +167,7 @@ View::View(SigSession &session, pv::toolbars::SamplingBar *sampling_bar, QWidget
             _time_viewport, SLOT(show_wait_trigger()));
 
     connect(_devmode, SIGNAL(mode_changed()),
-            parent, SLOT(update_device_list()), Qt::DirectConnection);
+            parent, SLOT(mode_changed()), Qt::DirectConnection);
 
     connect(_header, SIGNAL(traces_moved()),
         this, SLOT(on_traces_moved()));
@@ -571,11 +571,13 @@ void View::update_scale_offset()
     if (_session.get_device()->dev_inst()->mode != DSO) {
         //_scale = (1.0 / sample_rate) / WellPixelsPerSample;
         _maxscale = _session.cur_sampletime() / (get_view_width() * MaxViewRate);
+        _minscale = (1.0 / sample_rate) / MaxPixelsPerSample;
     } else {
         _scale = _session.get_device()->get_time_base() * 10.0 / get_view_width() * std::pow(10.0, -9.0);
         _maxscale = 1e9;
+        _minscale = 1e-15;
     }
-    _minscale = (1.0 / sample_rate) / MaxPixelsPerSample;
+
 
     _scale = max(min(_scale, _maxscale), _minscale);
     _offset = max(min(_offset, get_max_offset()), get_min_offset());
@@ -595,11 +597,7 @@ void View::signals_changed()
     uint8_t max_height = MaxHeightUnit;
     vector< boost::shared_ptr<Trace> > time_traces;
     vector< boost::shared_ptr<Trace> > fft_traces;
-
-    if (_session.get_device()->dev_inst()->mode == LOGIC)
-        _viewbottom->setFixedHeight(StatusHeight);
-    else
-        _viewbottom->setFixedHeight(10);
+    int bits = 8;
 
     BOOST_FOREACH(const boost::shared_ptr<Trace> t, get_traces(ALL_VIEW)) {
         if (_trace_view_map[t->get_type()] == TIME_VIEW)
@@ -672,8 +670,14 @@ void View::signals_changed()
             next_v_offset += traceHeight + 2 * SignalMargin;
 
             boost::shared_ptr<view::DsoSignal> dsoSig;
-            if (dsoSig = dynamic_pointer_cast<view::DsoSignal>(t))
-                dsoSig->set_scale(dsoSig->get_view_rect().height() / 256.0f);
+            if (dsoSig = dynamic_pointer_cast<view::DsoSignal>(t)) {
+                GVariant *gvar = _session.get_device()->get_config(NULL, NULL, SR_CONF_DSO_BITS);
+                if (gvar != NULL) {
+                    bits = g_variant_get_byte(gvar);
+                    g_variant_unref(gvar);
+                }
+                dsoSig->set_scale(dsoSig->get_view_rect().height() * 1.0f / (1 << bits));
+            }
         }
         _time_viewport->clear_measure();
     }
@@ -1066,5 +1070,21 @@ void View::splitterMoved(int pos, int index)
     signals_changed();
 }
 
+void View::reload()
+{
+    show_trig_cursor(false);
+
+    /*
+     * if headerwidth not change, viewport height will not be updated
+     * lead to a wrong signal height
+     */
+    if (_session.get_device()->dev_inst()->mode == LOGIC)
+        _viewbottom->setFixedHeight(StatusHeight);
+    else
+        _viewbottom->setFixedHeight(10);
+
+
+}
+
 } // namespace view
 } // namespace pv
diff --git a/DSView/pv/view/view.h b/DSView/pv/view/view.h
index 5ba901e..4132257 100644
--- a/DSView/pv/view/view.h
+++ b/DSView/pv/view/view.h
@@ -223,6 +223,7 @@ private:
 	void resizeEvent(QResizeEvent *e);
 
 public slots:
+    void reload();
     void set_measure_en(int enable);
     void signals_changed();
     void data_updated();
diff --git a/DSView/pv/view/viewport.cpp b/DSView/pv/view/viewport.cpp
index a1e47c5..92fdaae 100644
--- a/DSView/pv/view/viewport.cpp
+++ b/DSView/pv/view/viewport.cpp
@@ -242,18 +242,18 @@ void Viewport::paintSignals(QPainter &p)
         if (_view.session().get_device()->dev_inst()->mode == DSO &&
             _view.session().get_capture_state() == SigSession::Running) {
             uint8_t type;
-            bool stream = false;
+            bool roll = false;
             QString type_str="";
-            GVariant *gvar = _view.session().get_device()->get_config(NULL, NULL, SR_CONF_STREAM);
+            GVariant *gvar = _view.session().get_device()->get_config(NULL, NULL, SR_CONF_ROLL);
             if (gvar != NULL) {
-                stream = g_variant_get_boolean(gvar);
+                roll = g_variant_get_boolean(gvar);
                 g_variant_unref(gvar);
             }
             gvar = _view.session().get_device()->get_config(NULL, NULL, SR_CONF_TRIGGER_SOURCE);
             if (gvar != NULL) {
                 type = g_variant_get_byte(gvar);
                 g_variant_unref(gvar);
-                if (type == DSO_TRIGGER_AUTO && stream) {
+                if (type == DSO_TRIGGER_AUTO && roll) {
                     type_str = "Auto(Roll)";
                 } else if (type == DSO_TRIGGER_AUTO && !_view.session().trigd()) {
                     type_str = "Auto";
@@ -929,9 +929,9 @@ void Viewport::measure()
                         _cur_aftX = _view.hover_point().x();
                         _cur_midY = logicSig->get_y() - logicSig->get_totalHeight()/2 - 5;
 
-                        _em_rising = "Rising: " + QString::number(_edge_rising);
-                        _em_falling = "Falling: " + QString::number(_edge_falling);
-                        _em_edges = "Edges: " + QString::number(_edge_rising + _edge_falling);
+                        _em_rising = tr("Rising: ") + QString::number(_edge_rising);
+                        _em_falling = tr("Falling: ") + QString::number(_edge_falling);
+                        _em_edges = tr("Edges: ") + QString::number(_edge_rising + _edge_falling);
 
                         break;
                     }
diff --git a/DSView/pv/widgets/decodergroupbox.cpp b/DSView/pv/widgets/decodergroupbox.cpp
index b7bf92e..1b802e3 100644
--- a/DSView/pv/widgets/decodergroupbox.cpp
+++ b/DSView/pv/widgets/decodergroupbox.cpp
@@ -49,6 +49,7 @@ DecoderGroupBox::DecoderGroupBox(boost::shared_ptr<data::DecoderStack> &decoder_
     _layout(new QGridLayout(this))
 {
     _layout->setContentsMargins(0, 0, 0, 0);
+    _layout->setVerticalSpacing(5);
     setLayout(_layout);
 
     _layout->addWidget(new QLabel(QString("<h3>%1</h3>").arg(_dec->decoder()->name), this),
diff --git a/DSView/res/DSCope1.def.dsc b/DSView/res/DSCope1.def.dsc
index 852f890..ea6deb4 100755
--- a/DSView/res/DSCope1.def.dsc
+++ b/DSView/res/DSCope1.def.dsc
@@ -1,38 +1,40 @@
-{
-    "Device": "DSCope",
-    "DeviceMode": 1,
-    "Horizontal trigger position": "1",
-    "Operation Mode": "Normal",
-    "Sample count": "1048576",
-    "Sample rate": "100000000",
-    "Time base": "10000",
-    "Trigger hold off": "0",
-    "Trigger slope": "0",
-    "Trigger source": "0",
-    "channel": [
-        {
-            "colour": "#eeb211",
-            "coupling": 0,
-            "enabled": true,
-            "index": 0,
-            "name": "0",
-            "trigValue": 0.5,
-            "type": 10001,
-            "vdiv": 1000,
-            "vfactor": 1,
-            "zeroPos": 0.5
-        },
-        {
-            "colour": "#009925",
-            "coupling": 0,
-            "enabled": true,
-            "index": 1,
-            "name": "1",
-            "trigValue": 0.5,
-            "type": 10001,
-            "vdiv": 1000,
-            "vfactor": 1,
-            "zeroPos": 0.5
-        }
-    ]
-}
+{
+    "Device": "DSCope",
+    "DeviceMode": 1,
+    "Horizontal trigger position": "0",
+    "Operation Mode": "Normal",
+    "Sample count": "1048576",
+    "Sample rate": "100000000",
+    "Time base": "10000",
+    "Trigger channel": "0",
+    "Trigger hold off": "0",
+    "Trigger margin": "8",
+    "Trigger slope": "0",
+    "Trigger source": "0",
+    "channel": [
+        {
+            "colour": "#eeb211",
+            "coupling": 0,
+            "enabled": true,
+            "index": 0,
+            "name": "0",
+            "trigValue": 0.50196078431372548,
+            "type": 10001,
+            "vdiv": 1000,
+            "vfactor": 1,
+            "zeroPos": 0.5
+        },
+        {
+            "colour": "#009925",
+            "coupling": 0,
+            "enabled": true,
+            "index": 1,
+            "name": "1",
+            "trigValue": 0.50196078431372548,
+            "type": 10001,
+            "vdiv": 1000,
+            "vfactor": 1,
+            "zeroPos": 0.5
+        }
+    ]
+}
diff --git a/DSView/res/DSLogic0.def.dsc b/DSView/res/DSLogic0.def.dsc
index 08aea6e..83ecadd 100755
--- a/DSView/res/DSLogic0.def.dsc
+++ b/DSView/res/DSLogic0.def.dsc
@@ -8,14 +8,16 @@
     "Sample count": "1048576",
     "Sample rate": "1000000",
     "Threshold Level": 1,
+    "Trigger channel": "0",
     "Trigger hold off": "0",
+    "Trigger margin": "8",
     "Trigger slope": "0",
     "Trigger source": "0",
     "Using Clock Negedge": 0,
     "Using External Clock": 0,
     "channel": [
         {
-            "colour": "#6a6a6a",
+            "colour": "#969696",
             "enabled": true,
             "index": 0,
             "name": "0",
@@ -23,7 +25,7 @@
             "type": 10000
         },
         {
-            "colour": "#6a6a6a",
+            "colour": "#969696",
             "enabled": true,
             "index": 1,
             "name": "1",
@@ -31,7 +33,7 @@
             "type": 10000
         },
         {
-            "colour": "#6a6a6a",
+            "colour": "#969696",
             "enabled": true,
             "index": 2,
             "name": "2",
@@ -39,7 +41,7 @@
             "type": 10000
         },
         {
-            "colour": "#6a6a6a",
+            "colour": "#969696",
             "enabled": true,
             "index": 3,
             "name": "3",
@@ -47,7 +49,7 @@
             "type": 10000
         },
         {
-            "colour": "#6a6a6a",
+            "colour": "#969696",
             "enabled": true,
             "index": 4,
             "name": "4",
@@ -55,7 +57,7 @@
             "type": 10000
         },
         {
-            "colour": "#6a6a6a",
+            "colour": "#969696",
             "enabled": true,
             "index": 5,
             "name": "5",
@@ -63,7 +65,7 @@
             "type": 10000
         },
         {
-            "colour": "#6a6a6a",
+            "colour": "#969696",
             "enabled": true,
             "index": 6,
             "name": "6",
@@ -71,7 +73,7 @@
             "type": 10000
         },
         {
-            "colour": "#6a6a6a",
+            "colour": "#969696",
             "enabled": true,
             "index": 7,
             "name": "7",
@@ -79,7 +81,7 @@
             "type": 10000
         },
         {
-            "colour": "#6a6a6a",
+            "colour": "#969696",
             "enabled": true,
             "index": 8,
             "name": "8",
@@ -87,7 +89,7 @@
             "type": 10000
         },
         {
-            "colour": "#6a6a6a",
+            "colour": "#969696",
             "enabled": true,
             "index": 9,
             "name": "9",
@@ -95,7 +97,7 @@
             "type": 10000
         },
         {
-            "colour": "#6a6a6a",
+            "colour": "#969696",
             "enabled": true,
             "index": 10,
             "name": "10",
@@ -103,7 +105,7 @@
             "type": 10000
         },
         {
-            "colour": "#6a6a6a",
+            "colour": "#969696",
             "enabled": true,
             "index": 11,
             "name": "11",
@@ -111,7 +113,7 @@
             "type": 10000
         },
         {
-            "colour": "#6a6a6a",
+            "colour": "#969696",
             "enabled": true,
             "index": 12,
             "name": "12",
@@ -119,7 +121,7 @@
             "type": 10000
         },
         {
-            "colour": "#6a6a6a",
+            "colour": "#969696",
             "enabled": true,
             "index": 13,
             "name": "13",
@@ -127,7 +129,7 @@
             "type": 10000
         },
         {
-            "colour": "#6a6a6a",
+            "colour": "#969696",
             "enabled": true,
             "index": 14,
             "name": "14",
@@ -135,7 +137,7 @@
             "type": 10000
         },
         {
-            "colour": "#6a6a6a",
+            "colour": "#969696",
             "enabled": true,
             "index": 15,
             "name": "15",
diff --git a/DSView/res/DSLogic2.def.dsc b/DSView/res/DSLogic2.def.dsc
index 37160a1..2d9155b 100755
--- a/DSView/res/DSLogic2.def.dsc
+++ b/DSView/res/DSLogic2.def.dsc
@@ -1,81 +1,82 @@
-{
-    "Channel Mode": "Use Channels 0~15 (Max 100MHz)",
-    "Device": "DSLogic",
-    "DeviceMode": 2,
-    "Filter Targets": "None",
-    "Horizontal trigger position": "245",
-    "Operation Mode": "Buffer Mode",
-    "Sample count": "1048576",
-    "Sample rate": "100000000",
-    "Threshold Level": "1.8/2.5/3.3V Level",
-    "Trigger hold off": "0",
-    "Trigger slope": "0",
-    "Trigger source": "0",
-    "Using Clock Negedge": 0,
-    "Using External Clock": 0,
-    "channel": [
-        {
-            "colour": "#1185d1",
-            "enabled": true,
-            "index": 0,
-            "name": "0",
-            "type": 10002
-        },
-        {
-            "colour": "#eeb211",
-            "enabled": true,
-            "index": 1,
-            "name": "1",
-            "type": 10002
-        },
-        {
-            "colour": "#d50f25",
-            "enabled": true,
-            "index": 2,
-            "name": "2",
-            "type": 10002
-        },
-        {
-            "colour": "#009925",
-            "enabled": true,
-            "index": 3,
-            "name": "3",
-            "type": 10002
-        },
-        {
-            "colour": "#1185d1",
-            "enabled": true,
-            "index": 4,
-            "name": "4",
-            "type": 10002
-        },
-        {
-            "colour": "#eeb211",
-            "enabled": true,
-            "index": 5,
-            "name": "5",
-            "type": 10002
-        },
-        {
-            "colour": "#d50f25",
-            "enabled": true,
-            "index": 6,
-            "name": "6",
-            "type": 10002
-        },
-        {
-            "colour": "#009925",
-            "enabled": true,
-            "index": 7,
-            "name": "7",
-            "type": 10002
-        },
-        {
-            "colour": "#1185d1",
-            "enabled": true,
-            "index": 8,
-            "name": "8",
-            "type": 10002
-        }
-    ]
-}
+{
+    "Channel Mode": "Use Channels 0~15 (Max 10MHz)",
+    "Device": "DSLogic",
+    "DeviceMode": 2,
+    "Filter Targets": "None",
+    "Horizontal trigger position": "0",
+    "Operation Mode": "Stream Mode",
+    "Sample count": "1048576",
+    "Sample rate": "1000000",
+    "Threshold Level": "1.8/2.5/3.3V Level",
+    "Trigger hold off": "0",
+    "Trigger margin": "8",
+    "Trigger slope": "0",
+    "Trigger source": "0",
+    "Using Clock Negedge": 0,
+    "Using External Clock": 0,
+    "channel": [
+        {
+            "colour": "#1185d1",
+            "enabled": true,
+            "index": 0,
+            "name": "0",
+            "type": 10002
+        },
+        {
+            "colour": "#eeb211",
+            "enabled": true,
+            "index": 1,
+            "name": "1",
+            "type": 10002
+        },
+        {
+            "colour": "#d50f25",
+            "enabled": true,
+            "index": 2,
+            "name": "2",
+            "type": 10002
+        },
+        {
+            "colour": "#009925",
+            "enabled": true,
+            "index": 3,
+            "name": "3",
+            "type": 10002
+        },
+        {
+            "colour": "#1185d1",
+            "enabled": true,
+            "index": 4,
+            "name": "4",
+            "type": 10002
+        },
+        {
+            "colour": "#eeb211",
+            "enabled": true,
+            "index": 5,
+            "name": "5",
+            "type": 10002
+        },
+        {
+            "colour": "#d50f25",
+            "enabled": true,
+            "index": 6,
+            "name": "6",
+            "type": 10002
+        },
+        {
+            "colour": "#009925",
+            "enabled": true,
+            "index": 7,
+            "name": "7",
+            "type": 10002
+        },
+        {
+            "colour": "#1185d1",
+            "enabled": true,
+            "index": 8,
+            "name": "8",
+            "type": 10002
+        }
+    ]
+}
diff --git a/libsigrok4DSL/hardware/DSL/dscope.c b/libsigrok4DSL/hardware/DSL/dscope.c
index b355ebb..bd7481a 100644
--- a/libsigrok4DSL/hardware/DSL/dscope.c
+++ b/libsigrok4DSL/hardware/DSL/dscope.c
@@ -1276,11 +1276,11 @@ static int config_get(int id, GVariant **data, const struct sr_dev_inst *sdi,
         devc = sdi->priv;
         *data = g_variant_new_boolean(devc->cali);
         break;
-    case SR_CONF_STREAM:
+    case SR_CONF_ROLL:
         if (!sdi)
             return SR_ERR;
         devc = sdi->priv;
-        *data = g_variant_new_boolean(devc->stream);
+        *data = g_variant_new_boolean(devc->roll);
         break;
     case SR_CONF_TEST:
         if (!sdi)
@@ -2408,7 +2408,7 @@ static void receive_transfer(struct libusb_transfer *transfer)
                  mstatus.vlen != 0 &&
                  mstatus.vlen <= (transfer->actual_length - 512) / sample_width) ||
                 devc->instant) {
-                devc->stream = (mstatus.stream_mode != 0);
+                devc->roll = (mstatus.stream_mode != 0);
                 devc->mstatus_valid = TRUE;
                 packet.type = SR_DF_DSO;
                 packet.payload = &dso;
diff --git a/libsigrok4DSL/hardware/DSL/dsl.h b/libsigrok4DSL/hardware/DSL/dsl.h
index 6fa3061..4916367 100644
--- a/libsigrok4DSL/hardware/DSL/dsl.h
+++ b/libsigrok4DSL/hardware/DSL/dsl.h
@@ -250,6 +250,7 @@ struct DSL_context {
     int zero_pcnt;
     int zero_comb;
     gboolean stream;
+    gboolean roll;
     gboolean data_lock;
     uint8_t dso_bits;
 
diff --git a/libsigrok4DSL/hardware/DSL/dslogic.c b/libsigrok4DSL/hardware/DSL/dslogic.c
index 503ecbf..973a266 100644
--- a/libsigrok4DSL/hardware/DSL/dslogic.c
+++ b/libsigrok4DSL/hardware/DSL/dslogic.c
@@ -134,12 +134,12 @@ static const int32_t hwoptions_pro[] = {
 };
 
 static const int32_t sessions[] = {
+    SR_CONF_OPERATION_MODE,
+    SR_CONF_CHANNEL_MODE,
     SR_CONF_SAMPLERATE,
     SR_CONF_LIMIT_SAMPLES,
     SR_CONF_CLOCK_TYPE,
     SR_CONF_CLOCK_EDGE,
-    SR_CONF_OPERATION_MODE,
-    SR_CONF_CHANNEL_MODE,
     SR_CONF_THRESHOLD,
     SR_CONF_FILTER,
     SR_CONF_TRIGGER_SLOPE,
@@ -150,12 +150,12 @@ static const int32_t sessions[] = {
 };
 
 static const int32_t sessions_pro[] = {
+    SR_CONF_OPERATION_MODE,
+    SR_CONF_CHANNEL_MODE,
     SR_CONF_SAMPLERATE,
     SR_CONF_LIMIT_SAMPLES,
     SR_CONF_CLOCK_TYPE,
     SR_CONF_CLOCK_EDGE,
-    SR_CONF_OPERATION_MODE,
-    SR_CONF_CHANNEL_MODE,
     SR_CONF_VTH,
     SR_CONF_FILTER,
     SR_CONF_TRIGGER_SLOPE,
@@ -937,6 +937,7 @@ static uint64_t dso_cmd_gen(const struct sr_dev_inst *sdi, struct sr_channel* ch
     uint64_t cmd = 0;
     int channel_cnt = 0;
     GSList *l;
+    struct sr_channel *en_probe;
 
     devc = sdi->priv;
 
@@ -947,14 +948,18 @@ static uint64_t dso_cmd_gen(const struct sr_dev_inst *sdi, struct sr_channel* ch
     case SR_CONF_COUPLING:
         for (l = sdi->channels; l; l = l->next) {
             struct sr_channel *probe = (struct sr_channel *)l->data;
-            if (probe->enabled)
+            if (probe->enabled) {
                 channel_cnt += probe->index + 0x1;
+                en_probe = probe;
+            }
         }
         if (channel_cnt == 0)
             return 0x0;
 
         //  --VDBS
-        switch(ch->vdiv){
+        if (channel_cnt != 1)
+            en_probe = ch;
+        switch(en_probe->vdiv){
         case 5:     cmd += 0x247000; break;
         case 10:    cmd += 0x23D000; break;
         case 20:    cmd += 0x22F000; break;
@@ -1317,6 +1322,12 @@ static int config_get(int id, GVariant **data, const struct sr_dev_inst *sdi,
         devc = sdi->priv;
         *data = g_variant_new_boolean(devc->stream);
         break;
+    case SR_CONF_ROLL:
+        if (!sdi)
+            return SR_ERR;
+        devc = sdi->priv;
+        *data = g_variant_new_boolean(devc->roll);
+        break;
     case SR_CONF_MAX_DSO_SAMPLERATE:
         if (!sdi)
             return SR_ERR;
@@ -1410,7 +1421,6 @@ static int config_set(int id, GVariant *data, struct sr_dev_inst *sdi,
             num_probes = devc->profile->dev_caps & DEV_CAPS_16BIT ? 16 : 8;
             devc->samplecounts_size = ARRAY_SIZE(samplecounts);
         } else if (sdi->mode == DSO) {
-            sdi->mode = DSO;
             num_probes = devc->profile->dev_caps & DEV_CAPS_16BIT ? MAX_DSO_PROBES_NUM : 1;
             ret = command_dso_ctrl(usb->devhdl, dso_cmd_gen(sdi, NULL, SR_CONF_DSO_SYNC));
             if (ret != SR_OK)
@@ -1558,8 +1568,13 @@ static int config_set(int id, GVariant *data, struct sr_dev_inst *sdi,
             __func__, devc->th_level);
     } else if (id == SR_CONF_VTH) {
         devc->vth = g_variant_get_double(data);
-        sr_dbg("%s: setting threshold voltage to %f failed",
-            __func__, devc->vth);
+        if ((ret = command_wr_reg(usb->devhdl, (uint8_t)(devc->vth/5.0*255), VTH_ADDR)) == SR_OK) {
+            sr_err("%s: setting threshold voltage to %f",
+                __func__, devc->vth);
+        } else {
+            sr_info("%s: setting threshold voltage to %f failed",
+                __func__, devc->vth);
+        }
     } else if (id == SR_CONF_FILTER) {
         stropt = g_variant_get_string(data, NULL);
         if (!strcmp(stropt, filters[SR_FILTER_NONE])) {
@@ -1889,6 +1904,14 @@ static int dev_open(struct sr_dev_inst *sdi)
                 sr_err("%s: Configure FPGA failed!", __func__);
             }
             g_free(fpga_bit);
+
+            if ((ret = command_wr_reg(usb->devhdl, (uint8_t)(devc->vth/5.0*255), VTH_ADDR)) == SR_OK) {
+                sr_err("%s: setting threshold voltage to %f",
+                    __func__, devc->vth);
+            } else {
+                sr_info("%s: setting threshold voltage to %f failed",
+                    __func__, devc->vth);
+            }
         }
     }
 
@@ -2144,7 +2167,7 @@ static void receive_transfer(struct libusb_transfer *transfer)
                  mstatus.vlen != 0 &&
                  mstatus.vlen <= (transfer->actual_length - 512) / sample_width) ||
                 devc->instant) {
-                devc->stream = (mstatus.stream_mode != 0);
+                devc->roll = (mstatus.stream_mode != 0);
                 devc->mstatus_valid = TRUE;
                 packet.type = SR_DF_DSO;
                 packet.payload = &dso;
@@ -2491,14 +2514,6 @@ static int dev_acquisition_start(const struct sr_dev_inst *sdi, void *cb_data)
         else
             sr_dbg("%s: setting DSO Horiz Trigger Position to %d failed",
                 __func__, devc->trigger_hpos);
-    } else if (sdi->mode == LOGIC) {
-        if ((ret = command_wr_reg(usb->devhdl, (uint8_t)(devc->vth/5.0*255), VTH_ADDR)) == SR_OK) {
-            sr_err("%s: setting threshold voltage to %f",
-                __func__, devc->vth);
-        } else {
-            sr_info("%s: setting threshold voltage to %f failed",
-                __func__, devc->vth);
-        }
     }
 
     /* poll trigger status transfer*/
diff --git a/libsigrok4DSL/hardware/demo/demo.c b/libsigrok4DSL/hardware/demo/demo.c
index 6c27932..f575db7 100644
--- a/libsigrok4DSL/hardware/demo/demo.c
+++ b/libsigrok4DSL/hardware/demo/demo.c
@@ -146,7 +146,7 @@ static const int32_t sessions[] = {
     SR_CONF_PATTERN_MODE,
 };
 
-static const int const_dc = 50;
+static const int const_dc = 1.95 / 10 * 255;
 static const int sinx[] = {
   0,   2,   3,   5,   6,   8,   9,  11,  12,  14,  16,  17,  18,  20,  21,  23,  24,  26,  27,  28,
  30,  31,  32,  33,  34,  35,  37,  38,  39,  40,  41,  41,  42,  43,  44,  45,  45,  46,  47,  47,
@@ -357,7 +357,7 @@ static GSList *hw_scan(GSList *options)
     devc->limit_samples_show = devc->limit_samples;
 	devc->limit_msec = 0;
     devc->sample_generator = PATTERN_SINE;
-    devc->timebase = 200;
+    devc->timebase = 500;
     devc->data_lock = FALSE;
     devc->max_height = 0;
     devc->dso_bits = 8;
@@ -876,7 +876,8 @@ static void samples_generator(uint16_t *buf, uint64_t size,
         for (l = sdi->channels; l; l = l->next) {
             start_rand = devc->pre_index == 0 ? rand()%len : 0;
             probe = (struct sr_channel *)l->data;
-            offset = ceil((0.5 - (probe->vpos/probe->vdiv/10.0)) * 255);
+            //offset = ceil((0.5 - (probe->vpos/probe->vdiv/10.0)) * 255);
+            offset = 128;
             pre0_i = devc->pre_index;
             pre1_i = devc->pre_index;
             for (i = devc->pre_index; i < devc->pre_index + size; i++) {
diff --git a/libsigrok4DSL/libsigrok.h b/libsigrok4DSL/libsigrok.h
index 7626c5d..c40428b 100644
--- a/libsigrok4DSL/libsigrok.h
+++ b/libsigrok4DSL/libsigrok.h
@@ -785,6 +785,9 @@ enum {
     /** Stream */
     SR_CONF_STREAM,
 
+    /** DSO Roll */
+    SR_CONF_ROLL,
+
     /** Test */
     SR_CONF_TEST,
 
-- 
GitLab