diff --git a/.github/workflows/dockerimage.yml b/.github/workflows/dockerimage.yml index 804ced118b..b10a0bfb65 100644 --- a/.github/workflows/dockerimage.yml +++ b/.github/workflows/dockerimage.yml @@ -10,13 +10,13 @@ jobs: steps: - uses: actions/checkout@v2 - name: Pull the Docker Image - run: docker pull alexandratr/scopy-flatpak-bionic:clean + run: docker pull adisuciu/scopy-flatpak-ubuntu20:latest - name: Run Docker Image run: | docker run --privileged \ -v `pwd`:$GITHUB_WORKSPACE:rw \ -e "GITHUB_WORKSPACE=$GITHUB_WORKSPACE" \ - alexandratr/scopy-flatpak-bionic:clean /bin/bash -xe $GITHUB_WORKSPACE/CI/appveyor/inside_flatpak_docker.sh + adisuciu/scopy-flatpak-ubuntu20:latest /bin/bash -xe $GITHUB_WORKSPACE/CI/appveyor/inside_flatpak_docker.sh - uses: actions/upload-artifact@v2 with: name: Scopy.flatpak diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000000..96cb6dc2ca --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "iio-emu"] + path = iio-emu + url = https://github.com/analogdevicesinc/iio-emu.git diff --git a/CI/appveyor/build_appveyor_macos.sh b/CI/appveyor/build_appveyor_macos.sh index 8558022f37..32bf443188 100755 --- a/CI/appveyor/build_appveyor_macos.sh +++ b/CI/appveyor/build_appveyor_macos.sh @@ -10,7 +10,7 @@ if [ -f /opt/qt59/bin/qt59-env.sh ] ; then fi if command -v brew ; then - QT_PATH="$(brew --prefix qt)/bin" + QT_PATH="$(brew --prefix ${QT_FORMULAE})/bin" export PATH="${QT_PATH}:$PATH" fi diff --git a/CI/appveyor/build_appveyor_mingw.sh b/CI/appveyor/build_appveyor_mingw.sh index 502cbea4f3..e3617fc66e 100755 --- a/CI/appveyor/build_appveyor_mingw.sh +++ b/CI/appveyor/build_appveyor_mingw.sh @@ -4,16 +4,21 @@ set -e export PATH=/bin:/usr/bin:/${MINGW_VERSION}/bin:/c/Program\ Files/Git/cmd:/c/Windows/System32:/c/Program\ Files/7-Zip:/c/Program\ Files\ \(x86\)/Inno\ Setup\ \6:/c/Program\ Files/Appveyor/BuildAgent echo $PATH - +appveyor AddMessage "1. Starting build_appveyor_mingw.sw" RC_COMPILER_OPT="-DCMAKE_RC_COMPILER=/c/msys64/${MINGW_VERSION}/bin/windres.exe" WORKDIR=${PWD} echo BUILD_NO $BUILD_NO JOBS=$(nproc) +wget http://swdownloads.analog.com/cse/m1k/drivers/dpinst.zip +wget http://swdownloads.analog.com/cse/m1k/drivers/dfu-util.zip +7z x -y "dpinst.zip" -o"/c/dpinst" +7z x -y "dfu-util.zip" -o"/c/dfu-util" + CC=/${MINGW_VERSION}/bin/${ARCH}-w64-mingw32-gcc.exe CXX=/${MINGW_VERSION}/bin/${ARCH}-w64-mingw32-g++.exe -CMAKE_OPTS=" +CMAKE_OPTS="\ -DCMAKE_C_COMPILER:FILEPATH=${CC} \ -DCMAKE_CXX_COMPILER:FILEPATH=${CXX} \ -DPKG_CONFIG_EXECUTABLE=/$MINGW_VERSION/bin/pkg-config.exe \ @@ -21,22 +26,30 @@ CMAKE_OPTS=" -DCMAKE_BUILD_TYPE=RelWithDebInfo \ " -SCOPY_CMAKE_OPTS=" +SCOPY_CMAKE_OPTS="\ $RC_COMPILER_OPT \ -DBREAKPAD_HANDLER=ON \ - -DGIT_EXECUTABLE=/c/Program\\ Files/Git/cmd/git.exe \ + -DWITH_DOC=ON \ -DPYTHON_EXECUTABLE=/$MINGW_VERSION/bin/python3.exe \ " -DLL_DEPS="libmatio-*.dll libhdf5-*.dll libszip*.dll libpcre*.dll libdouble-conversion*.dll libwinpthread-*.dll libgcc_*.dll libstdc++-*.dll libboost_*.dll libglib-*.dll libintl-*.dll libiconv-*.dll libglibmm-2.*.dll libgmodule-2.*.dll libgobject-2.*.dll libffi-*.dll libsigc-2.*.dll libfftw3f-*.dll libicu*.dll zlib*.dll libharfbuzz-*.dll libfreetype-*.dll libbz2-*.dll libpng16-*.dll libgraphite2.dll libjpeg-*.dll libsqlite3-*.dll libwebp-*.dll libxml2-*.dll liblzma-*.dll libxslt-*.dll libzip*.dll libpython3.*.dll libgnutls*.dll libnettle*.dll libhogweed*.dll libgmp*.dll libidn*.dll libp11*.dll libtasn*.dll libunistring*.dll libusb-*.dll libzstd*.dll libgnuradio-*.dll /$MINGW_VERSION/lib/python3.* libiio*.dll libvolk*.dll liblog4cpp*.dll libad9361*.dll liborc*.dll libsigrok*.dll qwt*.dll libm2k*.dll libbrotli*.dll" +PYTHON_LOCATION=/$MINGW_VERSION/lib/python3.8 +PYTHON_FILES="${PYTHON_LOCATION}/*.py ${PYTHON_LOCATION}/asyncio ${PYTHON_LOCATION}/collections ${PYTHON_LOCATION}/concurrent ${PYTHON_LOCATION}/config-3.* ${PYTHON_LOCATION}/ctypes ${PYTHON_LOCATION}/distutils ${PYTHON_LOCATION}/encodings ${PYTHON_LOCATION}/lib-dynload ${PYTHON_LOCATION}/site-packages" + +DLL_DEPS=$(cat ${WORKDIR}/CI/appveyor/mingw_dll_deps) +DLL_DEPS="$DLL_DEPS $PYTHON_FILES" + +echo $DLL_DEPS OLD_PATH=$PATH DEST_FOLDER=scopy_$ARCH_BIT BUILD_FOLDER=build_$ARCH_BIT DEBUG_FOLDER=debug_$ARCH_BIT +appveyor AddMessage "2. Installing msys deps.sw" cd /c source ${WORKDIR}/CI/appveyor/install_msys_deps.sh +appveyor AddMessage "3. Installed msys deps.sw" # Download a 32-bit version of windres.exe cd ${WORKDIR} @@ -45,23 +58,35 @@ gunzip windres.exe.gz echo "### Building Scopy ..." +appveyor AddMessage "4. Running CMake" /$MINGW_VERSION/bin/python3.exe --version mkdir /c/$BUILD_FOLDER cd /c/$BUILD_FOLDER +cp /tmp/scopy-mingw-build-status /c/projects/scopy +cat /c/projects/scopy/scopy-mingw-build-status cmake -G 'Unix Makefiles' $SCOPY_CMAKE_OPTS $CMAKE_OPTS /c/projects/scopy +appveyor AddMessage "5. Build configured" +cat /c/$BUILD_FOLDER/buildinfo.html +appveyor PushArtifact /c/$BUILD_FOLDER/buildinfo.html + +appveyor AddMessage "6. Starting build" cd /c/$BUILD_FOLDER/resources sed -i 's/^\(FILEVERSION .*\)$/\1,'$BUILD_NO'/' properties.rc cat properties.rc cd /c/build_$ARCH_BIT && make -j $JOBS +appveyor AddMessage "7. Build finished" echo "### Deploy the application (copy the dependencies) ..." +appveyor AddMessage "8. Deploying Scopy" mkdir /c/$DEST_FOLDER cp /c/$BUILD_FOLDER/Scopy.exe /c/$DEST_FOLDER/ cp /c/$BUILD_FOLDER/qt.conf /c/$DEST_FOLDER/ mkdir /c/$DEST_FOLDER/resources +cp /c/$BUILD_FOLDER/iio-emu/iio-emu.exe /c/$DEST_FOLDER/ + # windeployqt was broken in qt version 5.14.2 - it should be fixed in Qt 5.15 - https://bugreports.qt.io/browse/QTBUG-80763 /c/msys64/$MINGW_VERSION/bin/windeployqt.exe --dir /c/$DEST_FOLDER --no-system-d3d-compiler --no-compiler-runtime --no-quick-import --opengl --printsupport /c/$BUILD_FOLDER/Scopy.exe cp -r /$MINGW_VERSION/share/libsigrokdecode/decoders /c/$DEST_FOLDER/ @@ -76,15 +101,30 @@ mkdir /c/scopy_$ARCH_BIT/.debug #/$MINGW_VERSION/bin/objcopy -v --only-keep-debug /c/$DEST_FOLDER/Scopy.exe /c/$DEST_FOLDER/.debug/Scopy.exe.debug dump_syms -r /c/$DEST_FOLDER/Scopy.exe > /c/$DEST_FOLDER/Scopy.exe.sym #/c/msys64/$MINGW_VERSION/bin/strip.exe --strip-debug --strip-unneeded /c/$DEST_FOLDER/Scopy.exe +#/c/msys64/$MINGW_VERSION/bin/strip.exe --strip-debug --strip-unneeded /c/$DEST_FOLDER/*.dll #/c/msys64/$MINGW_VERSION/bin/objcopy.exe -v --add-gnu-debuglink=/c/$DEST_FOLDER/.debug/Scopy.exe.debug /c/$DEST_FOLDER/Scopy.exe mkdir /c/$DEBUG_FOLDER mv /c/$DEST_FOLDER/Scopy.exe.sym /c/$DEBUG_FOLDER mv /c/$DEST_FOLDER/.debug /c/$DEBUG_FOLDER +cp -r /c/projects/scopy/drivers /c/$DEST_FOLDER +if [[ $ARCH_BIT == "64" ]]; then + cp /c/dfu-util/dfu-util-static-amd64.exe /c/$DEST_FOLDER/drivers/dfu-util.exe + cp /c/dpinst/dpinst_amd64.exe /c/$DEST_FOLDER/drivers/dpinst.exe +else + cp /c/dfu-util/dfu-util-static.exe /c/$DEST_FOLDER/drivers/dfu-util.exe + cp /c/dpinst/dpinst.exe /c/$DEST_FOLDER/drivers/dpinst.exe +fi + +appveyor AddMessage "9. Scopy succesfully deployed" + echo "### Creating archives ... " +appveyor AddMessage "10. Creating archives" 7z a "/c/scopy-${ARCH_BIT}bit.zip" /c/$DEST_FOLDER -# appveyor PushArtifact /c/scopy-${ARCH_BIT}bit.zip +appveyor PushArtifact /c/scopy-${ARCH_BIT}bit.zip 7z a "/c/debug-${ARCH_BIT}bit.zip" /c/$DEBUG_FOLDER -# appveyor PushArtifact /c/debug-${ARCH_BIT}bit.zip +appveyor PushArtifact /c/debug-${ARCH_BIT}bit.zip +appveyor AddMessage "11. Creating installer" iscc //Qp /c/$BUILD_FOLDER/scopy-$ARCH_BIT.iss -# appveyor PushArtifact /c/$BUILD_FOLDER/scopy-$ARCH_BIT.iss +appveyor PushArtifact $DEPLOY_FILE +appveyor AddMessage "12. Job complete" diff --git a/CI/appveyor/docker/Dockerfile b/CI/appveyor/docker/Dockerfile index 435e7df9b2..640fa68604 100644 --- a/CI/appveyor/docker/Dockerfile +++ b/CI/appveyor/docker/Dockerfile @@ -1,9 +1,11 @@ -FROM ubuntu:18.04 +FROM ubuntu:20.04 +ENV TZ=Europe/Bucharest +RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone RUN apt-get update -y # Install base dependencies -RUN apt-get install -y software-properties-common build-essential git sudo apt-utils +RUN apt-get install -y software-properties-common build-essential git sudo apt-utils subversion # Install flatpak RUN add-apt-repository ppa:alexlarsson/flatpak -y @@ -12,17 +14,19 @@ RUN apt install flatpak flatpak-builder -y # Install remote RUN flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo -RUN flatpak install flathub org.kde.Platform//5.12 -y -RUN flatpak install flathub org.kde.Sdk//5.12 -y +RUN flatpak install flathub org.kde.Platform//5.15 -y +RUN flatpak install flathub org.kde.Sdk//5.15 -y # Clean RUN apt-get clean -y && apt-get autoclean -y +RUN echo Cloning scopy-flatpak ARG REPO_LINK=https://github.com/analogdevicesinc/scopy-flatpak ARG REPO_LOCAL=/home/docker/scopy-flatpak ARG REPO_BRANCH=master RUN git clone --recurse-submodules "$REPO_LINK" -b "$REPO_BRANCH" "$REPO_LOCAL" 2> /dev/null || (cd "$REPO_LOCAL"; git pull) +#RUN cd /home/docker/scopy-flatpak && make -j4 CMD ["/bin/bash"] diff --git a/CI/appveyor/inside_flatpak_docker.sh b/CI/appveyor/inside_flatpak_docker.sh index 31ff8832a2..f793c7f285 100755 --- a/CI/appveyor/inside_flatpak_docker.sh +++ b/CI/appveyor/inside_flatpak_docker.sh @@ -10,7 +10,9 @@ apt-get install -y jq REPO_LOCAL=/home/docker/scopy-flatpak cd "$REPO_LOCAL" -git pull && git checkout master +# this ensures that latest master is pulled from origin while keeping file cache +# the cache should be updated from time to time locally +git fetch && git reset origin/master --hard # check the number of elements in the json file in order to get the last element, which is Scopy cnt=$( echo `jq '.modules | length' org.adi.Scopy.json` ) diff --git a/CI/appveyor/install_macos_deps.sh b/CI/appveyor/install_macos_deps.sh index a43a31909a..2b28d6e834 100755 --- a/CI/appveyor/install_macos_deps.sh +++ b/CI/appveyor/install_macos_deps.sh @@ -5,19 +5,20 @@ LIBAD9361_BRANCH=master LIBM2K_BRANCH=master GRIIO_BRANCH=upgrade-3.8 GNURADIO_FORK=analogdevicesinc -GNURADIO_BRANCH=ming-3.8-clean +GNURADIO_BRANCH=scopy GRSCOPY_BRANCH=master GRM2K_BRANCH=master QWT_BRANCH=qwt-6.1-multiaxes QWTPOLAR_BRANCH=master # not used LIBSIGROK_BRANCH=master LIBSIGROKDECODE_BRANCH=master #not used -BOOST_VERSION_FILE=1_65_1 -BOOST_VERSION=1.65.1 +BOOST_VERSION_FILE=1_73_0 +BOOST_VERSION=1.73.0 +LIBTINYIIOD_BRANCH=master PYTHON="python3" -PACKAGES=" qt pkg-config cmake fftw bison gettext autoconf automake libtool libzip glib libusb $PYTHON" -PACKAGES="$PACKAGES glibmm doxygen wget gnu-sed libmatio dylibbundler libxml2" +PACKAGES=" ${QT_FORMULAE} pkg-config cmake fftw bison gettext autoconf automake libtool libzip glib libusb glog $PYTHON" +PACKAGES="$PACKAGES doxygen wget gnu-sed libmatio dylibbundler libxml2" set -e cd ~ @@ -48,14 +49,15 @@ pip3 install mako six pwd source ./projects/scopy/CI/appveyor/before_install_lib.sh -QT_PATH="$(brew --prefix qt)/bin" +QT_PATH="$(brew --prefix ${QT_FORMULAE})/bin" + export PATH="/usr/local/bin:$PATH" export PATH="/usr/local/opt/bison/bin:$PATH" export PATH="${QT_PATH}:$PATH" export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/local/opt/libzip/lib/pkgconfig" export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/local/opt/libffi/lib/pkgconfig" -export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/local/opt/glibmm/lib/pkgconfig" +echo $PKG_CONFIG_PATH QMAKE="$(command -v qmake)" CMAKE_OPTS="-DCMAKE_PREFIX_PATH=$STAGINGDIR -DCMAKE_INSTALL_PREFIX=$STAGINGDIR" @@ -98,6 +100,7 @@ build_libm2k() { -DBUILD_EXAMPLES=OFF \ -DENABLE_TOOLS=OFF \ -DINSTALL_UDEV_RULES=OFF \ + -DENABLE_LOG=ON\ ${WORKDIR}/libm2k make $JOBS @@ -200,7 +203,6 @@ build_grm2k() { build_grscopy() { echo "### Building gr-scopy - branch $GRSCOPY_BRANCH" - cd ~ git clone --depth 1 https://github.com/analogdevicesinc/gr-scopy.git -b $GRSCOPY_BRANCH ${WORKDIR}/gr-scopy mkdir ${WORKDIR}/gr-scopy/build-${ARCH} @@ -212,6 +214,27 @@ build_grscopy() { make $JOBS sudo make $JOBS install } +build_glibmm() { + echo "### Building glibmm - 2.64.0" + cd ~ + wget http://ftp.acc.umu.se/pub/gnome/sources/glibmm/2.64/glibmm-2.64.0.tar.xz + tar xzvf glibmm-2.64.0.tar.xz + cd glibmm-2.64.0 + ./configure + make $JOBS + sudo make $JOBS install +} + +build_sigcpp() { + echo "### Building libsigc++ -2.10.0" + cd ~ + wget http://ftp.acc.umu.se/pub/GNOME/sources/libsigc++/2.10/libsigc++-2.10.0.tar.xz + tar xvzf libsigc++-2.10.0.tar.xz + cd libsigc++-2.10.0 + ./configure + make $JOBS + sudo make $JOBS install +} build_libsigrokdecode() { echo "### Building libsigrokdecode - branch $LIBSIGROKDECODE_BRANCH" @@ -256,6 +279,24 @@ build_qwtpolar() { qmake_build_wget "qwtpolar-1.1.1" "https://downloads.sourceforge.net/project/qwtpolar/qwtpolar/1.1.1/qwtpolar-1.1.1.tar.bz2" "qwtpolar.pro" "patch_qwtpolar_mac" } +build_libtinyiiod() { + echo "### Building libtinyiiod - branch $LIBTINYIIOD_BRANCH" + + cd ~ + git clone --depth 1 https://github.com/analogdevicesinc/libtinyiiod.git -b $LIBTINYIIOD_BRANCH ${WORKDIR}/libtinyiiod + mkdir ${WORKDIR}/libtinyiiod/build-${ARCH} + cd ${WORKDIR}/libtinyiiod/build-${ARCH} + + cmake ${CMAKE_OPTS} \ + -DBUILD_EXAMPLES=OFF \ + ${WORKDIR}/libtinyiiod + + make $JOBS + sudo make $JOBS install +} + +build_sigcpp +build_glibmm build_libiio build_libad9361 build_libm2k @@ -268,8 +309,4 @@ build_grm2k build_qwt build_qwtpolar build_libsigrokdecode - - - - - +build_libtinyiiod diff --git a/CI/appveyor/install_msys_deps.sh b/CI/appveyor/install_msys_deps.sh index 3f0540bd4e..2154fd9102 100644 --- a/CI/appveyor/install_msys_deps.sh +++ b/CI/appveyor/install_msys_deps.sh @@ -6,20 +6,23 @@ SCOPY_MINGW_BUILD_DEPS_BRANCH=master echo "Download and install pre-compiled libraries ... " wget "https://ci.appveyor.com/api/projects/$SCOPY_MINGW_BUILD_DEPS_FORK/scopy-mingw-build-deps/artifacts/scopy-$MINGW_VERSION-build-deps-pacman.txt?branch=$SCOPY_MINGW_BUILD_DEPS_BRANCH&job=Environment: MINGW_VERSION=$MINGW_VERSION, ARCH=$ARCH" -O /tmp/scopy-$MINGW_VERSION-build-deps-pacman.txt wget "https://ci.appveyor.com/api/projects/$SCOPY_MINGW_BUILD_DEPS_FORK/scopy-mingw-build-deps/artifacts/scopy-$MINGW_VERSION-build-deps.tar.xz?branch=$SCOPY_MINGW_BUILD_DEPS_BRANCH&job=Environment: MINGW_VERSION=$MINGW_VERSION, ARCH=$ARCH" -O /tmp/scopy-$MINGW_VERSION-build-deps.tar.xz +wget "https://ci.appveyor.com/api/projects/$SCOPY_MINGW_BUILD_DEPS_FORK/scopy-mingw-build-deps/artifacts/scopy-mingw-build-status?branch=$SCOPY_MINGW_BUILD_DEPS_BRANCH&job=Environment: MINGW_VERSION=$MINGW_VERSION, ARCH=$ARCH" -O /tmp/scopy-mingw-build-status cd /c tar xJf /tmp/scopy-$MINGW_VERSION-build-deps.tar.xz +cat /tmp/scopy-mingw-build-status + SCOPY_MINGW_BUILD_DEPS_PACMAN=$(${file_name}.qm") +endforeach() + configure_file(${CMAKE_SOURCE_DIR}/resources/translations.qrc ${CMAKE_BINARY_DIR}/translations.qrc - COPYONLY) + @ONLY) qt5_add_resources(TRANSLATION_RESOURCES ${CMAKE_BINARY_DIR}/translations.qrc) @@ -107,7 +130,7 @@ endif() option(BREAKPAD_HANDLER "Build with breakpad exception handler " OFF) -message(BREAKPAD_HANDLER - ${BREAKPAD_HANDLER}) +message(STATUS BREAKPAD_HANDLER - ${BREAKPAD_HANDLER}) if (${BREAKPAD_HANDLER}) message("-- Building with breakpad crash handler") set(BREAKPAD_HANDLER_BOOL 1) @@ -150,8 +173,16 @@ endif() find_library(QWTPOLAR_LIBRARIES qwtpolar) find_path(QWTPOLAR_INCLUDE_DIRS qwt_polar_plot.h PATH_SUFFIXES qwt) -if (NOT QWTPOLAR_LIBRARIES OR NOT QWTPOLAR_INCLUDE_DIRS) - message(SEND_ERROR "QwtPolar not found") +if (QWTPOLAR_LIBRARIES) + message(STATUS "QwtPolar libraries found - ${QWTPOLAR_LIBRARIES}") +else() + message(STATUS "QwtPolar libraries not found - assuming they are built in Qwt") + set(QWTPOLAR_LIBRARIES "") +endif() +if (NOT QWTPOLAR_INCLUDE_DIRS) + message(SEND_ERROR "QwtPolar includes not found") +else() + message(STATUS "Found QwtPolar include files - ${QWTPOLAR_INCLUDE_DIRS}/qwt_polar_plot.h") endif() find_package(PkgConfig) @@ -182,6 +213,7 @@ include_directories( ${CMAKE_SOURCE_DIR}/src ${BREAKPAD_INCLUDE_DIRS} ${BREAKPAD_INCLUDE_DIRS}/breakpad + ${CMAKE_CURRENT_SOURCE_DIR}/iio-emu ) link_directories( @@ -200,7 +232,7 @@ FILE(GLOB SRC_LIST src/*.cpp src/*.cc FILE(GLOB M2KSCOPE_UIS ui/patterns/*.ui ui/*.ui) qt5_wrap_ui (m2kscope_FORMS_HEADERS ${M2KSCOPE_UIS}) -FILE(GLOB M2KSCOPE_RESOURCES resources/*.qrc) +FILE(GLOB M2KSCOPE_RESOURCES resources/resources.qrc) qt5_add_resources(m2kscope_RESOURCES ${M2KSCOPE_RESOURCES}) if (WIN32) @@ -258,8 +290,65 @@ if (ENABLE_APPLICATION_BUNDLE) set(EXTRA_BUNDLE_FILES ${QT_PLUGINS} ${ICON_FILE} ${PKGINFO} ${QT_CONF} ${DECODERS}) endif() -# Creates translation .ts files from ${CMAKE_SOURCE_DIR} -#qt5_create_translation(QM_FILES ${CMAKE_SOURCE_DIR} ${TS_FILES} +#dump_cmake_variables("iio") + +string(TIMESTAMP TODAY "%Y-%m-%d") +string(TIMESTAMP NOW "%H:%M:%S") +cmake_host_system_information(RESULT BUILD_HOST QUERY HOSTNAME) + +set(APPVEYOR_INFO) +if($ENV{APPVEYOR}) + set(APPVEYOR_INFO ${APPVEYOR_INFO}Built\ on\ Appveyor\n) + set(APPVEYOR_INFO ${APPVEYOR_INFO}url:\ $ENV{APPVEYOR_URL}\n) + set(APPVEYOR_INFO ${APPVEYOR_INFO}api_url:\ $ENV{APPVEYOR_API_URL}\n) + set(APPVEYOR_INFO ${APPVEYOR_INFO}acc_name:\ $ENV{APPVEYOR_ACCOUNT_NAME}\n) + set(APPVEYOR_INFO ${APPVEYOR_INFO}prj_name:\ $ENV{APPVEYOR_PROJECT_NAME}\n) + set(APPVEYOR_INFO ${APPVEYOR_INFO}build_id:\ $ENV{APPVEYOR_BUILD_ID}\n) + set(APPVEYOR_INFO ${APPVEYOR_INFO}build_nr:\ $ENV{APPVEYOR_BUILD_NUMBER}\n) + set(APPVEYOR_INFO ${APPVEYOR_INFO}build_version:\ $ENV{APPVEYOR_BUILD_VERSION}\n) + set(APPVEYOR_INFO ${APPVEYOR_INFO}job_id:\ $ENV{APPVEYOR_JOB_ID}\n) + set(APPVEYOR_INFO ${APPVEYOR_INFO}job_name:\ $ENV{APPVEYOR_JOB_NAME}\n) + set(APPVEYOR_INFO ${APPVEYOR_INFO}job_nr:\ $ENV{APPVEYOR_JOB_NUMBER}\n) + set(APPVEYOR_INFO ${APPVEYOR_INFO}job_link:\ $ENV{APPVEYOR_URL}/project/$ENV{APPVEYOR_ACCOUNT_NAME}/$ENV{APPVEYOR_PROJECT_NAME}/builds/$ENV{APPVEYOR_BUILD_ID}/job/$ENV{APPVEYOR_JOB_ID}\n) + if(EXISTS ${CMAKE_SOURCE_DIR}/scopy-mingw-build-status) + message(scopy-mingw-build-status found .. populating) + FILE(READ ${CMAKE_SOURCE_DIR}/scopy-mingw-build-status SCOPY_MINGW_BUILD_STATUS_INFO) + endif() +else() + set(APPVEYOR_INFO ${APPVEYOR_INFO}Built\ locally\n) +endif() + +# TODO: Pack these in a GLOB and run foreach +configure_file(resources/buildinfo.html.cmakein ${CMAKE_CURRENT_BINARY_DIR}/buildinfo.html) +configure_file(resources/scopy_osp.html.cmakein ${CMAKE_CURRENT_BINARY_DIR}/scopy_osp.html) +configure_file(resources/credits.html.cmakein ${CMAKE_CURRENT_BINARY_DIR}/credits.html) +configure_file(resources/about.html.cmakein ${CMAKE_CURRENT_BINARY_DIR}/about.html) + +SET(ABOUT_HTML_SOURCES ${CMAKE_CURRENT_BINARY_DIR}/resources/buildinfo.html ${CMAKE_CURRENT_BINARY_DIR}/resources/scopy_osp.html ${CMAKE_CURRENT_BINARY_DIR}/resources/credits.html ${CMAKE_CURRENT_BINARY_DIR}/resources/about.html) + +set(ABOUT_HTML_QRC_SOURCES) +foreach(file ${ABOUT_HTML_SOURCES}) + get_filename_component(file_name ${file} NAME) + set(ABOUT_HTML_QRC_SOURCES "${ABOUT_HTML_QRC_SOURCES}\n${file_name}") +endforeach() + +configure_file(${CMAKE_SOURCE_DIR}/resources/aboutpage.qrc + ${CMAKE_BINARY_DIR}/aboutpage.qrc + @ONLY) + +qt5_add_resources(ABOUT_PAGE_RESOURCES ${CMAKE_CURRENT_BINARY_DIR}/aboutpage.qrc) + +option(CLONE_IIO_EMU "Clone iio-emu" ON) +if (CLONE_IIO_EMU) + message(STATUS "Checking for iio-emu") + execute_process(COMMAND ${GIT_EXECUTABLE} submodule update --init --recursive + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + RESULT_VARIABLE GIT_SUBMOD_RESULT) + if(NOT GIT_SUBMOD_RESULT EQUAL "0") + message(FATAL_ERROR "git submodule update --init failed with ${GIT_SUBMOD_RESULT}, please checkout submodules") + endif() + add_subdirectory(iio-emu) +endif() add_executable(${PROJECT_NAME} WIN32 ${OSX_BUNDLE} ${SRC_LIST} @@ -268,11 +357,13 @@ add_executable(${PROJECT_NAME} WIN32 ${OSX_BUNDLE} ${m2kscope_FORMS_HEADERS} ${EXTRA_BUNDLE_FILES} ${TRANSLATION_RESOURCES} + ${ABOUT_PAGE_RESOURCES} ) if (WIN32 OR ENABLE_APPLICATION_BUNDLE) set_target_properties(${PROJECT_NAME} PROPERTIES OUTPUT_NAME Scopy) endif() + target_link_libraries(${PROJECT_NAME} LINK_PRIVATE ${BREAKPAD_LIBRARIES} ${BREAKPADCLIENT_LIBRARIES} @@ -340,8 +431,7 @@ set_target_properties(${PROJECT_NAME} PROPERTIES set(CMAKE_INSTALL_DOCDIR "${CMAKE_CURRENT_BINARY_DIR}/doc") find_package(Doxygen) if(DOXYGEN_FOUND) - option(WITH_DOC "Generate documentation with Doxygen" ON) - + option(WITH_DOC "Generate documentation with Doxygen" OFF) if (WITH_DOC) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/doc/Doxyfile_API.in ${CMAKE_CURRENT_BINARY_DIR}/doc/Doxyfile @ONLY) set(HTML_DEST_DIR ${CMAKE_CURRENT_BINARY_DIR}) diff --git a/appveyor.yml b/appveyor.yml index 7b105f3820..23acfd3ebc 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -32,21 +32,22 @@ environment: DEPLOY_FILE: "/Users/appveyor/projects/scopy/build/Scopy.dmg" C_COMPILER: -DCMAKE_C_COMPILER=/usr/bin/gcc CXX_COMPILER: -DCMAKE_CXX_COMPILER=/usr/bin/g++ + QT_FORMULAE: "qt5" - ARCH: x86_64 ARCH_BIT: 64 - APPVEYOR_BUILD_WORKER_IMAGE: macos-mojave - BUILD_DEPS_CMD: "/Users/appveyor/projects/scopy/CI/appveyor/install_macos_deps.sh" - BUILD_CMD: "/Users/appveyor/projects/scopy/CI/appveyor/build_appveyor_macos.sh" - PACKAGE_CMD: "/Users/appveyor/projects/scopy/CI/appveyor/package_darwin.sh" - DEPLOY_FILE: "/Users/appveyor/projects/scopy/build/Scopy.dmg" - C_COMPILER: -DCMAKE_C_COMPILER=/usr/bin/gcc - CXX_COMPILER: -DCMAKE_CXX_COMPILER=/usr/bin/g++ - + APPVEYOR_BUILD_WORKER_IMAGE: Ubuntu1804 + PKG_MANAGER_UPDATE_CMD: "sudo apt-get -y update" + BUILD_DEPS_CMD: "/home/appveyor/projects/scopy/CI/appveyor/install_ubuntu_18_deps.sh /home/appveyor/Qt/5.14.2" + BUILD_CMD: "/home/appveyor/projects/scopy/CI/appveyor/build_appveyor_ubuntu.sh /home/appveyor/Qt/5.14.2" + PACKAGE_CMD: "" + DEPLOY_FILE: "" + - ARCH: x86_64 ARCH_BIT: 64 - APPVEYOR_BUILD_WORKER_IMAGE: Ubuntu1804 - BUILD_DEPS_CMD: "/home/appveyor/projects/scopy/CI/appveyor/install_ubuntu_deps.sh /home/appveyor/Qt/5.14.2" + APPVEYOR_BUILD_WORKER_IMAGE: Ubuntu2004 + PKG_MANAGER_UPDATE_CMD: "sudo apt-get -y update" + BUILD_DEPS_CMD: "/home/appveyor/projects/scopy/CI/appveyor/install_ubuntu_20_deps.sh /home/appveyor/Qt/5.14.2" BUILD_CMD: "/home/appveyor/projects/scopy/CI/appveyor/build_appveyor_ubuntu.sh /home/appveyor/Qt/5.14.2" PACKAGE_CMD: "" DEPLOY_FILE: "" @@ -69,16 +70,13 @@ build_script: - cmd: set PATH=%PATH%;"C:\Program Files (x86)\Inno Setup 6" - cmd: "%BUILD_DEPS_CMD%" + - sh: $PKG_MANAGER_UPDATE_CMD - sh: echo $BUILD_DEPS_CMD - sh: $BUILD_DEPS_CMD - sh: $BUILD_CMD - sh: $PACKAGE_CMD - echo "### Push artifacts ... " - - cmd: appveyor PushArtifact c:\scopy-%ARCH_BIT%bit.zip - - cmd: appveyor PushArtifact C:\debug-%ARCH_BIT%bit.zip - - - cmd: appveyor PushArtifact %DEPLOY_FILE% - sh: if [[ $DEPLOY_FILE != "" ]]; then appveyor PushArtifact $DEPLOY_FILE; fi #on_finish: diff --git a/drivers/amd64/WdfCoInstaller01011.dll b/drivers/amd64/WdfCoInstaller01011.dll new file mode 100644 index 0000000000..d49d29132e Binary files /dev/null and b/drivers/amd64/WdfCoInstaller01011.dll differ diff --git a/drivers/amd64/winusbcoinstaller2.dll b/drivers/amd64/winusbcoinstaller2.dll new file mode 100644 index 0000000000..30e55025b2 Binary files /dev/null and b/drivers/amd64/winusbcoinstaller2.dll differ diff --git a/drivers/dpinst.xml b/drivers/dpinst.xml new file mode 100644 index 0000000000..6d607f8352 --- /dev/null +++ b/drivers/dpinst.xml @@ -0,0 +1,14 @@ + + + + * + + + PlutoSDR/M2k Device Driver Updater + Welcome to the PlutoSDR/M2k Installer! + This wizard will walk you through updating the drivers for your PlutoSDR/M2k. + Installing the software for your PlutoSDR/M2k... + Congratulations! You finished installing your PlutoSDR/M2k drivers. + + + diff --git a/drivers/license/dfu-util/COPYING b/drivers/license/dfu-util/COPYING new file mode 100644 index 0000000000..d60c31a97a --- /dev/null +++ b/drivers/license/dfu-util/COPYING @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/drivers/pluto-cdc-acm.cat b/drivers/pluto-cdc-acm.cat new file mode 100644 index 0000000000..96f22e185a Binary files /dev/null and b/drivers/pluto-cdc-acm.cat differ diff --git a/drivers/pluto-cdc-acm.inf b/drivers/pluto-cdc-acm.inf new file mode 100644 index 0000000000..9957d3745f --- /dev/null +++ b/drivers/pluto-cdc-acm.inf @@ -0,0 +1,108 @@ +; Windows USB CDC ACM Setup File + +; Based on INF template which was: +; Copyright (c) 2000 Microsoft Corporation +; Copyright (c) 2007 Microchip Technology Inc. +; likely to be covered by the MLPL as found at: +; . +; For use only on Windows operating systems. + +[Strings] +Analog = "Analog Devices, Inc." +DESCRIPTION = "PlutoSDR Serial Console" +DeviceID = "VID_0456&PID_B673&MI_03" +M2kDESCRIPTION = "M2k Serial Console" +M2kDeviceID = "VID_0456&PID_B672&MI_03" +SERVICE = "USB RS-232 Emulation Driver" + +[Version] +Signature="$Windows NT$" +Class=Ports +ClassGuid={4D36E978-E325-11CE-BFC1-08002BE10318} +Provider=%Analog% +DriverVer=11/15/2007,5.1.2600.0 +CatalogFile = pluto-cdc-acm.cat +LayoutFile=layout.inf + +[Manufacturer] +%Analog%=DeviceList, NTamd64 + +[DestinationDirs] +DefaultDestDir=12 + + +;------------------------------------------------------------------------------ +; Windows 2000/XP/Vista-32bit Sections +;------------------------------------------------------------------------------ + +[DriverInstall.nt] +include=mdmcpq.inf +CopyFiles=DriverCopyFiles.nt +AddReg=DriverInstall.nt.AddReg + +[DriverCopyFiles.nt] +usbser.sys,,,0x20 + +[DriverInstall.nt.AddReg] +HKR,,DevLoader,,*ntkern +HKR,,NTMPDriver,,USBSER.sys +HKR,,EnumPropPages32,,"MsPorts.dll,SerialPortPropPageProvider" + +[DriverInstall.nt.Services] +AddService=usbser, 0x00000002, DriverService.nt + +[DriverService.nt] +DisplayName=%SERVICE% +ServiceType=1 +StartType=3 +ErrorControl=1 +ServiceBinary=%12%\USBSER.sys + +;------------------------------------------------------------------------------ +; Vista-64bit Sections +;------------------------------------------------------------------------------ + +[DriverInstall.NTamd64] +include=mdmcpq.inf +CopyFiles=DriverCopyFiles.NTamd64 +AddReg=DriverInstall.NTamd64.AddReg + +[DriverCopyFiles.NTamd64] +USBSER.sys,,,0x20 + +[DriverInstall.NTamd64.AddReg] +HKR,,DevLoader,,*ntkern +HKR,,NTMPDriver,,USBSER.sys +HKR,,EnumPropPages32,,"MsPorts.dll,SerialPortPropPageProvider" + +[DriverInstall.NTamd64.Services] +AddService=usbser, 0x00000002, DriverService.NTamd64 + +[DriverService.NTamd64] +DisplayName=%SERVICE% +ServiceType=1 +StartType=3 +ErrorControl=1 +ServiceBinary=%12%\USBSER.sys + + +;------------------------------------------------------------------------------ +; Vendor and Product ID Definitions +;------------------------------------------------------------------------------ +; When developing your USB device, the VID and PID used in the PC side +; application program and the firmware on the microcontroller must match. +; Modify the below line to use your VID and PID. Use the format as shown +; below. +; Note: One INF file can be used for multiple devices with different +; VID and PIDs. For each supported device, append +; ",USB\VID_xxxx&PID_yyyy" to the end of the line. +;------------------------------------------------------------------------------ +[SourceDisksFiles] +[SourceDisksNames] +[DeviceList] +%DESCRIPTION%=DriverInstall, USB\%DeviceID% +%M2kDESCRIPTION%=DriverInstall, USB\%M2kDeviceID% + +[DeviceList.NTamd64] +%DESCRIPTION%=DriverInstall, USB\%DeviceID% +%M2kDESCRIPTION%=DriverInstall, USB\%M2kDeviceID% diff --git a/drivers/pluto-dfu.cat b/drivers/pluto-dfu.cat new file mode 100644 index 0000000000..ab7ee2715d Binary files /dev/null and b/drivers/pluto-dfu.cat differ diff --git a/drivers/pluto-dfu.inf b/drivers/pluto-dfu.inf new file mode 100644 index 0000000000..77474db91a Binary files /dev/null and b/drivers/pluto-dfu.inf differ diff --git a/drivers/pluto-rndis.cat b/drivers/pluto-rndis.cat new file mode 100644 index 0000000000..1d7e66a9a2 Binary files /dev/null and b/drivers/pluto-rndis.cat differ diff --git a/drivers/pluto-rndis.inf b/drivers/pluto-rndis.inf new file mode 100644 index 0000000000..38274e92cb --- /dev/null +++ b/drivers/pluto-rndis.inf @@ -0,0 +1,73 @@ +; Based on template INF file found at +; +; which was: +; Copyright (c) Microsoft Corporation +; and released under the MLPL as found at: +; . +; For use only on Windows operating systems. + +[Strings] +Analog = "Analog Devices, Inc." +PlutoDeviceID = "VID_0456&PID_B673&MI_00" +PlutoDevice = "PlutoSDR USB Ethernet/RNDIS Gadget" +M2kDeviceID = "VID_0456&PID_B672&MI_00" +M2kDevice = "M2k USB Ethernet/RNDIS Gadget" +Vista_Property = "Optional Vista Property" + +[Version] +Signature = "$Windows NT$" +Class = Net +ClassGUID = {4d36e972-e325-11ce-bfc1-08002be10318} +Provider = %Analog% +DriverVer = 06/21/2006,6.0.6000.16384 +CatalogFile = pluto-rndis.cat + +[Manufacturer] +%Analog% = LinuxDevices,NTx86,NTamd64,NTia64 + +; Decoration for x86 architecture +[LinuxDevices.NTx86] +%PlutoDevice% = RNDIS.NT.5.1, USB\%PlutoDeviceID% +%M2kDevice% = RNDIS.NT.5.1, USB\%M2kDeviceID% +; Decoration for x64 architecture +[LinuxDevices.NTamd64] +%PlutoDevice% = RNDIS.NT.5.1, USB\%PlutoDeviceID% +%M2kDevice% = RNDIS.NT.5.1, USB\%M2kDeviceID% +; Decoration for ia64 architecture +[LinuxDevices.NTia64] +%PlutoDevice% = RNDIS.NT.5.1, USB\%PlutoDeviceID% +%M2kDevice% = RNDIS.NT.5.1, USB\%M2kDeviceID% + +;@@@ This is the common setting for setup +[ControlFlags] +ExcludeFromSelect=* + +; DDInstall section +; References the in-build Netrndis.inf +[RNDIS.NT.5.1] +Characteristics = 0x84 ; NCF_PHYSICAL + NCF_HAS_UI +BusType = 15 +; NEVER REMOVE THE FOLLOWING REFERENCE FOR NETRNDIS.INF +include = netrndis.inf +needs = Usb_Rndis.ndi +AddReg = Rndis_AddReg_Vista + +; DDInstal.Services section +[RNDIS.NT.5.1.Services] +include = netrndis.inf +needs = Usb_Rndis.ndi.Services + +; Optional registry settings. You can modify as needed. +[RNDIS_AddReg_Vista] +HKR, NDI\params\VistaProperty, ParamDesc, 0, %Vista_Property% +HKR, NDI\params\VistaProperty, type, 0, "edit" +HKR, NDI\params\VistaProperty, LimitText, 0, "12" +HKR, NDI\params\VistaProperty, UpperCase, 0, "1" +HKR, NDI\params\VistaProperty, default, 0, " " +HKR, NDI\params\VistaProperty, optional, 0, "1" + +; No sys copyfiles - the sys files are already in-build +; (part of the operating system). +; We do not support XP SP1-, 2003 SP1-, ME, 9x. + + diff --git a/drivers/pluto-usbd.cat b/drivers/pluto-usbd.cat new file mode 100644 index 0000000000..57bd2f6703 Binary files /dev/null and b/drivers/pluto-usbd.cat differ diff --git a/drivers/pluto-usbd.inf b/drivers/pluto-usbd.inf new file mode 100644 index 0000000000..bc9157bba1 Binary files /dev/null and b/drivers/pluto-usbd.inf differ diff --git a/drivers/x86/WdfCoInstaller01011.dll b/drivers/x86/WdfCoInstaller01011.dll new file mode 100644 index 0000000000..e943ea45ef Binary files /dev/null and b/drivers/x86/WdfCoInstaller01011.dll differ diff --git a/drivers/x86/winusbcoinstaller2.dll b/drivers/x86/winusbcoinstaller2.dll new file mode 100644 index 0000000000..fc450d2b25 Binary files /dev/null and b/drivers/x86/winusbcoinstaller2.dll differ diff --git a/icons/default/ADALM2000.png b/icons/default/ADALM2000.png new file mode 100644 index 0000000000..cd8ed5dfd4 Binary files /dev/null and b/icons/default/ADALM2000.png differ diff --git a/icons/default/ADALM2000Pinout.png b/icons/default/ADALM2000Pinout.png new file mode 100644 index 0000000000..f121b46cd5 Binary files /dev/null and b/icons/default/ADALM2000Pinout.png differ diff --git a/icons/default/add.svg b/icons/default/add.svg new file mode 100644 index 0000000000..881f36ce67 --- /dev/null +++ b/icons/default/add.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/default/adi.png b/icons/default/adi.png new file mode 100644 index 0000000000..d7b45abb77 Binary files /dev/null and b/icons/default/adi.png differ diff --git a/icons/default/face.png b/icons/default/face.png new file mode 100644 index 0000000000..c86b7f55f3 Binary files /dev/null and b/icons/default/face.png differ diff --git a/icons/default/home.png b/icons/default/home.png new file mode 100644 index 0000000000..c872ba2137 Binary files /dev/null and b/icons/default/home.png differ diff --git a/icons/default/ic adalm.png b/icons/default/ic adalm.png new file mode 100644 index 0000000000..6bdd8be75a Binary files /dev/null and b/icons/default/ic adalm.png differ diff --git a/icons/default/ic adalm.svg b/icons/default/ic adalm.svg new file mode 100644 index 0000000000..9648b34552 --- /dev/null +++ b/icons/default/ic adalm.svg @@ -0,0 +1,69 @@ + + + + C7953CEC-1985-4C73-9530-59F852DD5708 + Created with sketchtool. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ADALM2000 + + + + + + \ No newline at end of file diff --git a/icons/default/icons/calibration.png b/icons/default/icons/calibration.png new file mode 100644 index 0000000000..3f9da51e08 Binary files /dev/null and b/icons/default/icons/calibration.png differ diff --git a/icons/default/icons/debugger.png b/icons/default/icons/debugger.png new file mode 100644 index 0000000000..a8558bced9 Binary files /dev/null and b/icons/default/icons/debugger.png differ diff --git a/icons/default/icons/io.png b/icons/default/icons/io.png new file mode 100644 index 0000000000..8c4ca65040 Binary files /dev/null and b/icons/default/icons/io.png differ diff --git a/icons/default/icons/logic_analyzer.png b/icons/default/icons/logic_analyzer.png new file mode 100644 index 0000000000..a20ea400d6 Binary files /dev/null and b/icons/default/icons/logic_analyzer.png differ diff --git a/icons/default/icons/network_analyzer.png b/icons/default/icons/network_analyzer.png new file mode 100644 index 0000000000..259686a2c3 Binary files /dev/null and b/icons/default/icons/network_analyzer.png differ diff --git a/icons/default/icons/oscilloscope.png b/icons/default/icons/oscilloscope.png new file mode 100644 index 0000000000..4ebe20fe1c Binary files /dev/null and b/icons/default/icons/oscilloscope.png differ diff --git a/icons/default/icons/pattern_generator.png b/icons/default/icons/pattern_generator.png new file mode 100644 index 0000000000..d2fe950127 Binary files /dev/null and b/icons/default/icons/pattern_generator.png differ diff --git a/icons/default/icons/power_supply.png b/icons/default/icons/power_supply.png new file mode 100644 index 0000000000..7c91f7154e Binary files /dev/null and b/icons/default/icons/power_supply.png differ diff --git a/icons/default/icons/signal_generator.png b/icons/default/icons/signal_generator.png new file mode 100644 index 0000000000..dac4ac6763 Binary files /dev/null and b/icons/default/icons/signal_generator.png differ diff --git a/icons/default/icons/spectrum_analyzer.png b/icons/default/icons/spectrum_analyzer.png new file mode 100644 index 0000000000..2f92ed3691 Binary files /dev/null and b/icons/default/icons/spectrum_analyzer.png differ diff --git a/icons/default/icons/voltmeter.png b/icons/default/icons/voltmeter.png new file mode 100644 index 0000000000..6015d85ca1 Binary files /dev/null and b/icons/default/icons/voltmeter.png differ diff --git a/icons/default/index.theme b/icons/default/index.theme new file mode 100644 index 0000000000..ed952a2981 --- /dev/null +++ b/icons/default/index.theme @@ -0,0 +1,7 @@ +[Icon Theme] +Name=default +Comment=Default dark theme +Directories=icons + +[icons] +Size=16 diff --git a/icons/default/menu_button.png b/icons/default/menu_button.png new file mode 100644 index 0000000000..a3e6421ffc Binary files /dev/null and b/icons/default/menu_button.png differ diff --git a/icons/default/options.png b/icons/default/options.png new file mode 100644 index 0000000000..4a8c09f47f Binary files /dev/null and b/icons/default/options.png differ diff --git a/icons/default/scopy_title.png b/icons/default/scopy_title.png new file mode 100644 index 0000000000..8db083727e Binary files /dev/null and b/icons/default/scopy_title.png differ diff --git a/icons/light/icons/Gear.png b/icons/light/icons/Gear.png new file mode 100644 index 0000000000..883eaf6b33 Binary files /dev/null and b/icons/light/icons/Gear.png differ diff --git a/icons/light/icons/Rectangle_6_copy_12.png b/icons/light/icons/Rectangle_6_copy_12.png new file mode 100644 index 0000000000..9d65147e7f Binary files /dev/null and b/icons/light/icons/Rectangle_6_copy_12.png differ diff --git a/icons/light/icons/debugger.png b/icons/light/icons/debugger.png new file mode 100644 index 0000000000..883eaf6b33 Binary files /dev/null and b/icons/light/icons/debugger.png differ diff --git a/icons/light/icons/house.png b/icons/light/icons/house.png new file mode 100644 index 0000000000..057044bf19 Binary files /dev/null and b/icons/light/icons/house.png differ diff --git a/icons/light/icons/ic load.svg b/icons/light/icons/ic load.svg new file mode 100644 index 0000000000..b1434ccc00 --- /dev/null +++ b/icons/light/icons/ic load.svg @@ -0,0 +1,16 @@ + + + + D53F0AF1-68DA-4E77-B3F5-3CA7CFEE268F + Created with sketchtool. + + + + + + + + + + + \ No newline at end of file diff --git a/icons/light/icons/ic save.svg b/icons/light/icons/ic save.svg new file mode 100644 index 0000000000..0705ebcd89 --- /dev/null +++ b/icons/light/icons/ic save.svg @@ -0,0 +1,16 @@ + + + + E376C00B-4D9F-47A7-9492-0381FE96F84A + Created with sketchtool. + + + + + + + + + + + \ No newline at end of file diff --git a/icons/light/icons/ico info.png b/icons/light/icons/ico info.png new file mode 100644 index 0000000000..5a223cc257 Binary files /dev/null and b/icons/light/icons/ico info.png differ diff --git a/icons/light/icons/io.png b/icons/light/icons/io.png new file mode 100644 index 0000000000..4359ab54c0 Binary files /dev/null and b/icons/light/icons/io.png differ diff --git a/icons/light/icons/logic_analyzer.png b/icons/light/icons/logic_analyzer.png new file mode 100644 index 0000000000..2e0a1be73b Binary files /dev/null and b/icons/light/icons/logic_analyzer.png differ diff --git a/icons/light/icons/logo analog.png b/icons/light/icons/logo analog.png new file mode 100644 index 0000000000..398afd8b29 Binary files /dev/null and b/icons/light/icons/logo analog.png differ diff --git a/icons/light/icons/logo.png b/icons/light/icons/logo.png new file mode 100644 index 0000000000..bba9f1142b Binary files /dev/null and b/icons/light/icons/logo.png differ diff --git a/icons/light/icons/menu.png b/icons/light/icons/menu.png new file mode 100644 index 0000000000..14d16820f9 Binary files /dev/null and b/icons/light/icons/menu.png differ diff --git a/icons/light/icons/network_analyzer.png b/icons/light/icons/network_analyzer.png new file mode 100644 index 0000000000..487c01b32d Binary files /dev/null and b/icons/light/icons/network_analyzer.png differ diff --git a/icons/light/icons/oscilloscope.png b/icons/light/icons/oscilloscope.png new file mode 100644 index 0000000000..fccb8bd398 Binary files /dev/null and b/icons/light/icons/oscilloscope.png differ diff --git a/icons/light/icons/pattern_generator.png b/icons/light/icons/pattern_generator.png new file mode 100644 index 0000000000..d481ea5c26 Binary files /dev/null and b/icons/light/icons/pattern_generator.png differ diff --git a/icons/light/icons/power_supply.png b/icons/light/icons/power_supply.png new file mode 100644 index 0000000000..23cd1a6516 Binary files /dev/null and b/icons/light/icons/power_supply.png differ diff --git a/icons/light/icons/signal_generator.png b/icons/light/icons/signal_generator.png new file mode 100644 index 0000000000..f193f388a3 Binary files /dev/null and b/icons/light/icons/signal_generator.png differ diff --git a/icons/light/icons/spectrum_analyzer.png b/icons/light/icons/spectrum_analyzer.png new file mode 100644 index 0000000000..28e580336e Binary files /dev/null and b/icons/light/icons/spectrum_analyzer.png differ diff --git a/icons/light/icons/voltmeter.png b/icons/light/icons/voltmeter.png new file mode 100644 index 0000000000..e4f8564353 Binary files /dev/null and b/icons/light/icons/voltmeter.png differ diff --git a/icons/light/index.theme b/icons/light/index.theme new file mode 100644 index 0000000000..6ebb89f8c0 --- /dev/null +++ b/icons/light/index.theme @@ -0,0 +1,8 @@ +[Icon Theme] +Name=LightTheme +Comment=An example icon theme + +[icons] +Size=16 +Context=Actions +Type=Fixed diff --git a/iio-emu b/iio-emu new file mode 160000 index 0000000000..710386fda8 --- /dev/null +++ b/iio-emu @@ -0,0 +1 @@ +Subproject commit 710386fda8daa5bbb3ffb6d4f214f014aa260f57 diff --git a/resources/about.html.cmakein b/resources/about.html.cmakein new file mode 100644 index 0000000000..f918f3946b --- /dev/null +++ b/resources/about.html.cmakein @@ -0,0 +1,14 @@ + +

Scopy, a multi-functional software toolset with strong capabilities for signal analysis.

+ +

Scopy version: ${scopy_VERSION}-${SCOPY_VERSION_GIT}
+ Build info: here

+ +

Copyright 2019-2020 Analog Devices and others.
Scopy is made possible by the Scopy open source project and other open source software.

+ +

Latest Release
+Documentation
+Support Forum

+ + + diff --git a/resources/aboutpage.qrc b/resources/aboutpage.qrc new file mode 100644 index 0000000000..963dcd477a --- /dev/null +++ b/resources/aboutpage.qrc @@ -0,0 +1,5 @@ + + + @ABOUT_HTML_QRC_SOURCES@ + + diff --git a/resources/buildinfo.html.cmakein b/resources/buildinfo.html.cmakein new file mode 100644 index 0000000000..637cf391fa --- /dev/null +++ b/resources/buildinfo.html.cmakein @@ -0,0 +1,26 @@ + +
Scopy version: ${scopy_VERSION}-${SCOPY_VERSION_GIT}
+This Scopy version was built on ${TODAY} ${NOW} 
+on machine: ${BUILD_HOST} by user: $ENV{USERNAME}
+
+Build machine is ${CMAKE_HOST_SYSTEM}
+Built using ${CMAKE_CXX_COMPILER} - ${CMAKE_CXX_COMPILER_VERSION}
+Compiler library architecture: ${CMAKE_CXX_LIBRARY_ARCHITECTURE}
+
+${APPVEYOR_INFO}
+
+This Scopy version uses the following library/tools versions:
+libboost: ${Boost_VERSION}
+libqt5: ${Qt5_VERSION}
+volk: ${Volk_VERSION}
+cmake: ${CMAKE_VERSION}
+gnuradio: ${Gnuradio_VERSION}
+python: ${PYTHON_VERSION_STRING}
+pythonlibs: ${PYTHONLIBS_VERSION_STRING}
+libsigrokdecode: ${LIBSIGROK_DECODE_VERSION}
+libm2k: ${libm2k_VERSION}-${libm2k_VERSION_GIT}
+
+Scopy dependencies info:
+${SCOPY_MINGW_BUILD_STATUS_INFO}
+
+ diff --git a/resources/credits.html.cmakein b/resources/credits.html.cmakein new file mode 100644 index 0000000000..8894d3f9d3 --- /dev/null +++ b/resources/credits.html.cmakein @@ -0,0 +1,234 @@ + +

Scopy includes or is linked to a number of open source libraries, released under their own licenses.

+ +

+ + +

 

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ProjectLicenseHomepage
BoostLicenseHomepage
QtLicenseHomepage
QwtLicenseHomepage
QwtPolarLicenseHomepage
GNURadioLicenseHomepage
libsigrokdecodeLicenseHomepage
PulseViewLicenseHomepage
glibLicenseHomepage
glibmmLicenseHomepage
libsigc++LicenseHomepage
matioLicenseHomepage
PythonLicenseHomepage
flatpakLicenseHomepage
InnoSetupLicenseHomepage
log4cppLicense Homepage
libvolkLicenseHomepage
fftwLicenseHomepage
gmplibLicenseHomepage
gettextLicenseHomepage
pcreLicenseHomepage
libiconvLicenseHomepage
icuLicenseHomepage
zlibLicenseHomepage
zstdLicenseHomepage
harfbuzzLicenseHomepage
libpngLicenseHomepage
liborcLicenseHomepage
freetypeLicenseHomepage
graphiteLicenseHomepage
brotliLicenseHomepage
libbz2LicenseHomepage
BreakpadLicenseHomepage
doxygenLicenseHomepage
libiio LicenseHomepage
gtkLicenseHomepage
avahiLicenseHomepage
libusbLicenseHomepage
libxml2LicenseHomepage
libm2kLicenseHomepage
gr-iioLicenseHomepage
gr-m2kLicenseHomepage
sshpassLicenseHomepage
+ diff --git a/resources/icons.qrc b/resources/icons.qrc new file mode 100644 index 0000000000..b273f50eb3 --- /dev/null +++ b/resources/icons.qrc @@ -0,0 +1,209 @@ + + + icons/default/ADALM2000.png + icons/default/ADALM2000Pinout.png + icons/default/add.svg + icons/default/adi.png + icons/default/face.png + icons/default/home.png + icons/default/ic adalm.png + icons/default/ic adalm.svg + icons/default/index.theme + icons/default/menu_button.png + icons/default/options.png + icons/default/scopy_title.png + icons/light/icons/debugger.png + icons/light/icons/Gear.png + icons/light/icons/house.png + icons/light/icons/ic load.svg + icons/light/icons/ic save.svg + icons/light/icons/ico info.png + icons/light/icons/io.png + icons/light/icons/logic_analyzer.png + icons/light/icons/logo analog.png + icons/light/icons/logo.png + icons/light/icons/menu.png + icons/light/icons/network_analyzer.png + icons/light/icons/oscilloscope.png + icons/light/icons/pattern_generator.png + icons/light/icons/power_supply.png + icons/light/icons/Rectangle_6_copy_12.png + icons/light/icons/signal_generator.png + icons/light/icons/spectrum_analyzer.png + icons/light/icons/voltmeter.png + icons/light/index.theme + icons/measurements/amplitude.svg + icons/measurements/area.svg + icons/measurements/cycle_area.svg + icons/measurements/cycle_mean.svg + icons/measurements/cycle_rms.svg + icons/measurements/fall_time.svg + icons/measurements/frequency.svg + icons/measurements/high.svg + icons/measurements/low.svg + icons/measurements/max.svg + icons/measurements/mean.svg + icons/measurements/middle.svg + icons/measurements/min.svg + icons/measurements/n_duty.svg + icons/measurements/n_overshoot.svg + icons/measurements/n_width.svg + icons/measurements/p_duty.svg + icons/measurements/p_overshoot.svg + icons/measurements/p_width.svg + icons/measurements/peak_to_peak.svg + icons/measurements/period.svg + icons/measurements/rise_time.svg + icons/measurements/rms.svg + icons/add-decoder.svg + icons/channels.svg + icons/close.svg + icons/close_hovered.svg + icons/configure.png + icons/decoder-delete.svg + icons/decoder-hidden.svg + icons/decoder-shown.svg + icons/dio100.svg + icons/dio101.svg + icons/dio101.svg1 + icons/document-open.png + icons/document-save-as.png + icons/dots_on_plot.svg + icons/floppy.svg + icons/floppy_hover.svg + icons/gate_handle.svg + icons/gear_wheel.svg + icons/gear_wheel_hover.svg + icons/gear_wheel_pressed.svg + icons/h_cursor_handle.svg + icons/handle_down_arrow.svg + icons/handle_right_arrow.svg + icons/handle_up_arrow.svg + icons/house.png + icons/ic arrow down.svg + icons/ic arrow left.svg + icons/ic arrow right.svg + icons/ic arrow up.svg + icons/ic load.svg + icons/ic printer.svg + icons/ic save.svg + icons/ic-locked.svg + icons/ic-unlocked.svg + icons/ic_note_checked.svg + icons/ic_note_unchecked.svg + icons/ico-collapse.svg + icons/ico-expand.svg + icons/ico-oneshot.svg + icons/ico-play-green.svg + icons/ico-play.svg + icons/ico-stop.svg + icons/in-out-in.svg + icons/in-out-out.svg + icons/level_trigger_down.svg + icons/level_trigger_handle.svg + icons/level_trigger_up.svg + icons/lines_on_plot.svg + icons/redX.svg + icons/refresh.svg + icons/sba_cmb_box_arrow.svg + icons/sba_cmb_box_arrow_right.svg + icons/sba_dn_btn.svg + icons/sba_dn_btn_hover.svg + icons/sba_dn_btn_pressed.svg + icons/sba_up_btn.svg + icons/sba_up_btn_hover.svg + icons/sba_up_btn_pressed.svg + icons/setup3_checked.svg + icons/setup3_checked.xcf-setup3_checked.svg.svg + icons/setup3_checked.xcf.svg + icons/setup3_checked_hover.svg + icons/setup3_unchecked.svg + icons/setup3_unchecked_hover.svg + icons/setup_btn_checked.svg + icons/setup_btn_checked_hover.svg + icons/setup_btn_hover.svg + icons/setup_btn_unchecked.svg + icons/show-cursors.svg + icons/status-green.svg + icons/status-grey.svg + icons/status-red.svg + icons/time_trigger_handle.svg + icons/time_trigger_left.svg + icons/time_trigger_right.svg + icons/trigger_any_disabled.svg + icons/trigger_any_enabled.svg + icons/trigger_falling_disabled.svg + icons/trigger_falling_enabled.svg + icons/trigger_high_disabled.svg + icons/trigger_high_enabled.svg + icons/trigger_low_disabled.svg + icons/trigger_low_enabled.svg + icons/trigger_rising_disabled.svg + icons/trigger_rising_enabled.svg + icons/v_cursor_handle.svg + icons/zoom-fit.png + icons/zoom-in.png + icons/zoom-original.png + icons/zoom-out.png + menu/ADALM2000.png + menu/ADALM2000Pinout.png + menu/add.svg + menu/adi.png + menu/calibration.png + menu/debugger.png + menu/face.png + menu/home.png + menu/ic adalm.png + menu/ic adalm.svg + menu/io.png + menu/logic_analyzer.png + menu/menu_button.png + menu/network_analyzer.png + menu/options.png + menu/oscilloscope.png + menu/pattern_generator.png + menu/power_supply.png + menu/scopy_title.png + menu/signal_generator.png + menu/spectrum_analyzer.png + menu/voltmeter.png + stylesheets/bigCustomSwitch.qss + stylesheets/browser.qss + stylesheets/channel_widget.qss + stylesheets/customSwitch.qss + stylesheets/default.qss + stylesheets/dropdown_switch_list.qss + stylesheets/global.qss + stylesheets/smallOnOffSwitch.qss + stylesheets/spinbox_type_a.qss + stylesheets/stopButton.qss + stylesheets/toolMenuItem.qss + translations/scopy_ar.ts + translations/scopy_cn.ts + translations/scopy_de.ts + translations/scopy_en.ts + translations/scopy_es.ts + translations/scopy_fr.ts + translations/scopy_it.ts + translations/scopy_jp.ts + translations/scopy_kr.ts + translations/scopy_ro.ts + about.html.cmakein + aboutpage.qrc + buildinfo.html.cmakein + credits.html.cmakein + filter.json + icon.ico + icon_big.svg + icon_small.svg + icons.qrc + m2k.html + open-sans-regular.ttf + resources.qrc + scopy.desktop.cmakein + scopy.html + Scopy.icns + scopy_osp.html.cmakein + translations.qrc + + diff --git a/resources/icons/scopy-default/icons/calibration.png b/resources/icons/scopy-default/icons/calibration.png new file mode 100644 index 0000000000..3f9da51e08 Binary files /dev/null and b/resources/icons/scopy-default/icons/calibration.png differ diff --git a/resources/icons/scopy-default/icons/debugger.png b/resources/icons/scopy-default/icons/debugger.png new file mode 100644 index 0000000000..a8558bced9 Binary files /dev/null and b/resources/icons/scopy-default/icons/debugger.png differ diff --git a/resources/icons/house.png b/resources/icons/scopy-default/icons/house.png similarity index 100% rename from resources/icons/house.png rename to resources/icons/scopy-default/icons/house.png diff --git a/resources/icons/scopy-default/icons/ico info.png b/resources/icons/scopy-default/icons/ico info.png new file mode 100644 index 0000000000..fe6c06f811 Binary files /dev/null and b/resources/icons/scopy-default/icons/ico info.png differ diff --git a/resources/icons/scopy-default/icons/io.png b/resources/icons/scopy-default/icons/io.png new file mode 100644 index 0000000000..8c4ca65040 Binary files /dev/null and b/resources/icons/scopy-default/icons/io.png differ diff --git a/resources/icons/scopy-default/icons/logic_analyzer.png b/resources/icons/scopy-default/icons/logic_analyzer.png new file mode 100644 index 0000000000..a20ea400d6 Binary files /dev/null and b/resources/icons/scopy-default/icons/logic_analyzer.png differ diff --git a/resources/icons/scopy-default/icons/network_analyzer.png b/resources/icons/scopy-default/icons/network_analyzer.png new file mode 100644 index 0000000000..259686a2c3 Binary files /dev/null and b/resources/icons/scopy-default/icons/network_analyzer.png differ diff --git a/resources/icons/scopy-default/icons/oscilloscope.png b/resources/icons/scopy-default/icons/oscilloscope.png new file mode 100644 index 0000000000..4ebe20fe1c Binary files /dev/null and b/resources/icons/scopy-default/icons/oscilloscope.png differ diff --git a/resources/icons/scopy-default/icons/pattern_generator.png b/resources/icons/scopy-default/icons/pattern_generator.png new file mode 100644 index 0000000000..d2fe950127 Binary files /dev/null and b/resources/icons/scopy-default/icons/pattern_generator.png differ diff --git a/resources/icons/scopy-default/icons/power_supply.png b/resources/icons/scopy-default/icons/power_supply.png new file mode 100644 index 0000000000..7c91f7154e Binary files /dev/null and b/resources/icons/scopy-default/icons/power_supply.png differ diff --git a/resources/icons/scopy-default/icons/signal_generator.png b/resources/icons/scopy-default/icons/signal_generator.png new file mode 100644 index 0000000000..dac4ac6763 Binary files /dev/null and b/resources/icons/scopy-default/icons/signal_generator.png differ diff --git a/resources/icons/scopy-default/icons/spectrum_analyzer.png b/resources/icons/scopy-default/icons/spectrum_analyzer.png new file mode 100644 index 0000000000..2f92ed3691 Binary files /dev/null and b/resources/icons/scopy-default/icons/spectrum_analyzer.png differ diff --git a/resources/icons/scopy-default/icons/voltmeter.png b/resources/icons/scopy-default/icons/voltmeter.png new file mode 100644 index 0000000000..6015d85ca1 Binary files /dev/null and b/resources/icons/scopy-default/icons/voltmeter.png differ diff --git a/resources/icons/scopy-default/index.theme b/resources/icons/scopy-default/index.theme new file mode 100644 index 0000000000..46abccf93f --- /dev/null +++ b/resources/icons/scopy-default/index.theme @@ -0,0 +1,8 @@ +[Icon Theme] +Name=DefaultTheme +Comment=Default dark theme + +Directories=icons + +[icons] +Size=16 diff --git a/resources/icons/scopy-light/icons/Gear.png b/resources/icons/scopy-light/icons/Gear.png new file mode 100644 index 0000000000..883eaf6b33 Binary files /dev/null and b/resources/icons/scopy-light/icons/Gear.png differ diff --git a/resources/icons/scopy-light/icons/Gear.svg b/resources/icons/scopy-light/icons/Gear.svg new file mode 100644 index 0000000000..398cc68734 --- /dev/null +++ b/resources/icons/scopy-light/icons/Gear.svg @@ -0,0 +1,11 @@ + + + + F6E21ED0-2276-4CD7-B3D4-285F7E40FB42 + Created with sketchtool. + + + + + + \ No newline at end of file diff --git a/resources/icons/scopy-light/icons/debugger.png b/resources/icons/scopy-light/icons/debugger.png new file mode 100644 index 0000000000..883eaf6b33 Binary files /dev/null and b/resources/icons/scopy-light/icons/debugger.png differ diff --git a/resources/icons/scopy-light/icons/gear_wheel_hover.png b/resources/icons/scopy-light/icons/gear_wheel_hover.png new file mode 100644 index 0000000000..cf5b50fb49 Binary files /dev/null and b/resources/icons/scopy-light/icons/gear_wheel_hover.png differ diff --git a/resources/icons/scopy-light/icons/gear_wheel_pressed.svg b/resources/icons/scopy-light/icons/gear_wheel_pressed.svg new file mode 100644 index 0000000000..dfc74ef190 --- /dev/null +++ b/resources/icons/scopy-light/icons/gear_wheel_pressed.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/icons/scopy-light/icons/house.png b/resources/icons/scopy-light/icons/house.png new file mode 100644 index 0000000000..057044bf19 Binary files /dev/null and b/resources/icons/scopy-light/icons/house.png differ diff --git a/resources/icons/scopy-light/icons/ic load.svg b/resources/icons/scopy-light/icons/ic load.svg new file mode 100644 index 0000000000..b1434ccc00 --- /dev/null +++ b/resources/icons/scopy-light/icons/ic load.svg @@ -0,0 +1,16 @@ + + + + D53F0AF1-68DA-4E77-B3F5-3CA7CFEE268F + Created with sketchtool. + + + + + + + + + + + \ No newline at end of file diff --git a/resources/icons/scopy-light/icons/ic loadD.png b/resources/icons/scopy-light/icons/ic loadD.png new file mode 100644 index 0000000000..5472ba654e Binary files /dev/null and b/resources/icons/scopy-light/icons/ic loadD.png differ diff --git a/resources/icons/scopy-light/icons/ic save.svg b/resources/icons/scopy-light/icons/ic save.svg new file mode 100644 index 0000000000..0705ebcd89 --- /dev/null +++ b/resources/icons/scopy-light/icons/ic save.svg @@ -0,0 +1,16 @@ + + + + E376C00B-4D9F-47A7-9492-0381FE96F84A + Created with sketchtool. + + + + + + + + + + + \ No newline at end of file diff --git a/resources/icons/scopy-light/icons/ic saveD.png b/resources/icons/scopy-light/icons/ic saveD.png new file mode 100644 index 0000000000..14740ca2eb Binary files /dev/null and b/resources/icons/scopy-light/icons/ic saveD.png differ diff --git a/resources/icons/scopy-light/icons/ic_note_checked.svg b/resources/icons/scopy-light/icons/ic_note_checked.svg new file mode 100644 index 0000000000..3a386fda56 --- /dev/null +++ b/resources/icons/scopy-light/icons/ic_note_checked.svg @@ -0,0 +1,12 @@ + + + + A8FEBD7D-95E8-4125-8AAF-B10795811545 + Created with sketchtool. + + + + + + + diff --git a/resources/icons/scopy-light/icons/ic_note_unchecked.svg b/resources/icons/scopy-light/icons/ic_note_unchecked.svg new file mode 100644 index 0000000000..7f04b373d7 --- /dev/null +++ b/resources/icons/scopy-light/icons/ic_note_unchecked.svg @@ -0,0 +1,12 @@ + + + + DC6DF08B-A28D-4962-A0CB-9C15F196A791 + Created with sketchtool. + + + + + + + diff --git a/resources/icons/scopy-light/icons/ico info.png b/resources/icons/scopy-light/icons/ico info.png new file mode 100644 index 0000000000..5a223cc257 Binary files /dev/null and b/resources/icons/scopy-light/icons/ico info.png differ diff --git a/resources/icons/scopy-light/icons/ico-play-green.svg b/resources/icons/scopy-light/icons/ico-play-green.svg new file mode 100644 index 0000000000..4c00092506 --- /dev/null +++ b/resources/icons/scopy-light/icons/ico-play-green.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/icons/scopy-light/icons/ico-stop.svg b/resources/icons/scopy-light/icons/ico-stop.svg new file mode 100644 index 0000000000..fdca095ec6 --- /dev/null +++ b/resources/icons/scopy-light/icons/ico-stop.svg @@ -0,0 +1 @@ + diff --git a/resources/icons/scopy-light/icons/io.png b/resources/icons/scopy-light/icons/io.png new file mode 100644 index 0000000000..4359ab54c0 Binary files /dev/null and b/resources/icons/scopy-light/icons/io.png differ diff --git a/resources/icons/scopy-light/icons/logic_analyzer.png b/resources/icons/scopy-light/icons/logic_analyzer.png new file mode 100644 index 0000000000..2e0a1be73b Binary files /dev/null and b/resources/icons/scopy-light/icons/logic_analyzer.png differ diff --git a/resources/icons/scopy-light/icons/logo analog.png b/resources/icons/scopy-light/icons/logo analog.png new file mode 100644 index 0000000000..398afd8b29 Binary files /dev/null and b/resources/icons/scopy-light/icons/logo analog.png differ diff --git a/resources/icons/scopy-light/icons/logo.png b/resources/icons/scopy-light/icons/logo.png new file mode 100644 index 0000000000..bba9f1142b Binary files /dev/null and b/resources/icons/scopy-light/icons/logo.png differ diff --git a/resources/icons/scopy-light/icons/menu.png b/resources/icons/scopy-light/icons/menu.png new file mode 100644 index 0000000000..14d16820f9 Binary files /dev/null and b/resources/icons/scopy-light/icons/menu.png differ diff --git a/resources/icons/scopy-light/icons/network_analyzer.png b/resources/icons/scopy-light/icons/network_analyzer.png new file mode 100644 index 0000000000..487c01b32d Binary files /dev/null and b/resources/icons/scopy-light/icons/network_analyzer.png differ diff --git a/resources/icons/scopy-light/icons/oscilloscope.png b/resources/icons/scopy-light/icons/oscilloscope.png new file mode 100644 index 0000000000..0d32cae2d9 Binary files /dev/null and b/resources/icons/scopy-light/icons/oscilloscope.png differ diff --git a/resources/icons/scopy-light/icons/pattern_generator.png b/resources/icons/scopy-light/icons/pattern_generator.png new file mode 100644 index 0000000000..d481ea5c26 Binary files /dev/null and b/resources/icons/scopy-light/icons/pattern_generator.png differ diff --git a/resources/icons/scopy-light/icons/power_supply.png b/resources/icons/scopy-light/icons/power_supply.png new file mode 100644 index 0000000000..23cd1a6516 Binary files /dev/null and b/resources/icons/scopy-light/icons/power_supply.png differ diff --git a/resources/icons/scopy-light/icons/sba_cmb_box_arrow.svg b/resources/icons/scopy-light/icons/sba_cmb_box_arrow.svg new file mode 100644 index 0000000000..3782071b1f --- /dev/null +++ b/resources/icons/scopy-light/icons/sba_cmb_box_arrow.svg @@ -0,0 +1 @@ + diff --git a/resources/icons/scopy-light/icons/sba_cmb_box_arrow_right.svg b/resources/icons/scopy-light/icons/sba_cmb_box_arrow_right.svg new file mode 100644 index 0000000000..968fd7fb77 --- /dev/null +++ b/resources/icons/scopy-light/icons/sba_cmb_box_arrow_right.svg @@ -0,0 +1,9 @@ + + + CFAC343D-103A-4674-8E8F-56E5FD84F30A + + + + + + \ No newline at end of file diff --git a/resources/icons/scopy-light/icons/setup3_checked_hover.svg b/resources/icons/scopy-light/icons/setup3_checked_hover.svg new file mode 100644 index 0000000000..993e4c6667 --- /dev/null +++ b/resources/icons/scopy-light/icons/setup3_checked_hover.svg @@ -0,0 +1,15 @@ + + + + + + + + +image/svg+xml + + + + + + \ No newline at end of file diff --git a/resources/icons/scopy-light/icons/setup3_unchecked.png b/resources/icons/scopy-light/icons/setup3_unchecked.png new file mode 100644 index 0000000000..efa13c967d Binary files /dev/null and b/resources/icons/scopy-light/icons/setup3_unchecked.png differ diff --git a/resources/icons/scopy-light/icons/setup3_unchecked_hover.png b/resources/icons/scopy-light/icons/setup3_unchecked_hover.png new file mode 100644 index 0000000000..a78d93d548 Binary files /dev/null and b/resources/icons/scopy-light/icons/setup3_unchecked_hover.png differ diff --git a/resources/icons/scopy-light/icons/signal_generator.png b/resources/icons/scopy-light/icons/signal_generator.png new file mode 100644 index 0000000000..f193f388a3 Binary files /dev/null and b/resources/icons/scopy-light/icons/signal_generator.png differ diff --git a/resources/icons/scopy-light/icons/spectrum_analyzer.png b/resources/icons/scopy-light/icons/spectrum_analyzer.png new file mode 100644 index 0000000000..28e580336e Binary files /dev/null and b/resources/icons/scopy-light/icons/spectrum_analyzer.png differ diff --git a/resources/icons/scopy-light/icons/voltmeter.png b/resources/icons/scopy-light/icons/voltmeter.png new file mode 100644 index 0000000000..e4f8564353 Binary files /dev/null and b/resources/icons/scopy-light/icons/voltmeter.png differ diff --git a/resources/icons/scopy-light/index.theme b/resources/icons/scopy-light/index.theme new file mode 100644 index 0000000000..6ebb89f8c0 --- /dev/null +++ b/resources/icons/scopy-light/index.theme @@ -0,0 +1,8 @@ +[Icon Theme] +Name=LightTheme +Comment=An example icon theme + +[icons] +Size=16 +Context=Actions +Type=Fixed diff --git a/resources/resources.qrc b/resources/resources.qrc index dc1045bc10..240c19c0e3 100644 --- a/resources/resources.qrc +++ b/resources/resources.qrc @@ -127,7 +127,6 @@ icons/ic arrow left.svg icons/ic arrow right.svg icons/ic arrow up.svg - icons/house.png icons/ic_note_checked.svg icons/ic_note_unchecked.svg m2k.html @@ -136,9 +135,91 @@ icons/gate_handle.svg icons/refresh.svg open-sans-regular.ttf + icons/dio101.svg1 + icons/setup3_checked.xcf-setup3_checked.svg.svg + icons/setup3_checked.xcf.svg + icons/zoom-out.png + stylesheets/bigCustomSwitch.qss + stylesheets/browser.qss + stylesheets/channel_widget.qss + stylesheets/customSwitch.qss + stylesheets/dropdown_switch_list.qss + stylesheets/light.qss + stylesheets/smallOnOffSwitch.qss + stylesheets/spinbox_type_a.qss + stylesheets/stopButton.qss + stylesheets/toolMenuItem.qss + translations/scopy_ar.ts + translations/scopy_cn.ts + translations/scopy_de.ts + translations/scopy_en.ts + translations/scopy_es.ts + translations/scopy_fr.ts + translations/scopy_it.ts + translations/scopy_jp.ts + translations/scopy_kr.ts + translations/scopy_ro.ts + about.html.cmakein + aboutpage.qrc + buildinfo.html.cmakein + credits.html.cmakein + icon_big.svg + icon_small.svg + resources.qrc + scopy.desktop.cmakein + Scopy.icns + scopy_osp.html.cmakein + translations.qrc + stylesheets/default.qss + icons/scopy-default/index.theme + icons/scopy-default/icons/oscilloscope.png + icons/scopy-default/icons/calibration.png + icons/scopy-default/icons/debugger.png + icons/scopy-default/icons/io.png + icons/scopy-default/icons/logic_analyzer.png + icons/scopy-default/icons/network_analyzer.png + icons/scopy-default/icons/pattern_generator.png + icons/scopy-default/icons/power_supply.png + icons/scopy-default/icons/signal_generator.png + icons/scopy-default/icons/spectrum_analyzer.png + icons/scopy-default/icons/voltmeter.png + icons/scopy-light/index.theme + icons/scopy-light/icons/debugger.png + icons/scopy-light/icons/house.png + icons/scopy-light/icons/ic load.svg + icons/scopy-light/icons/ico info.png + icons/scopy-light/icons/ic save.svg + icons/scopy-light/icons/io.png + icons/scopy-light/icons/logic_analyzer.png + icons/scopy-light/icons/logo.png + icons/scopy-light/icons/logo analog.png + icons/scopy-light/icons/menu.png + icons/scopy-light/icons/network_analyzer.png + icons/scopy-light/icons/oscilloscope.png + icons/scopy-light/icons/pattern_generator.png + icons/scopy-light/icons/power_supply.png + icons/scopy-light/icons/signal_generator.png + icons/scopy-light/icons/spectrum_analyzer.png + icons/scopy-light/icons/voltmeter.png + icons/scopy-light/icons/gear_wheel_pressed.svg + icons/scopy-light/icons/sba_cmb_box_arrow.svg + icons/scopy-light/icons/sba_cmb_box_arrow_right.svg + icons/scopy-light/icons/setup3_checked_hover.svg + icons/scopy-light/icons/ico-play-green.svg + icons/scopy-light/icons/ico-stop.svg + icons/scopy-light/icons/Gear.svg + icons/scopy-light/icons/Gear.png + icons/scopy-light/icons/gear_wheel_hover.png + icons/scopy-light/icons/setup3_unchecked.png + icons/scopy-light/icons/setup3_unchecked_hover.png + icons/scopy-default/icons/house.png + icons/scopy-light/icons/ic loadD.png + icons/scopy-light/icons/ic saveD.png + icons/scopy-light/icons/ic_note_checked.svg + icons/scopy-light/icons/ic_note_unchecked.svg + icons/scopy-default/icons/ico info.png - stylesheets/global.qss stylesheets/spinbox_type_a.qss stylesheets/dropdown_switch_list.qss stylesheets/customSwitch.qss @@ -146,5 +227,8 @@ stylesheets/bigCustomSwitch.qss stylesheets/toolMenuItem.qss stylesheets/stopButton.qss + stylesheets/browser.qss + stylesheets/channel_widget.qss + stylesheets/default.qss diff --git a/resources/scopy.html b/resources/scopy.html index a1c79fe1a3..43bce635a5 100644 --- a/resources/scopy.html +++ b/resources/scopy.html @@ -2,7 +2,7 @@ - + diff --git a/resources/scopy_osp.html.cmakein b/resources/scopy_osp.html.cmakein new file mode 100644 index 0000000000..ec0a28b54d --- /dev/null +++ b/resources/scopy_osp.html.cmakein @@ -0,0 +1,20 @@ + +

Scopy is released under GPLv3.

+ +

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see https://www.gnu.org/licenses/.

+

You may obtain the complete corresponding Source code from us for a period of three years after our last shipment of this product, which will be no earlier than three years past ${TODAY} by sending a money order or check for 100 (RON) to:
+
+Analog Devices Inc.
+Systems Development Group
+GPL Compliance
+Attention: Adrian Suciu
+
+TEODOR MIHALI 64,
+CLUJ-NAPOCA, CLUJ,
+400591
+ROMANIA
+

+ +

Please write Source for Scopy in the memo line of your payment. Since the source does not fit on a DVD-RW, it will be delivered on a USB Thumb drive (hence the higher cost than just DVD or CD).

+

You will also find the source on-line, and are encouraged to obtain it for zero cost, at the project web sites.

+ diff --git a/resources/stylesheets/browser.qss b/resources/stylesheets/browser.qss new file mode 100644 index 0000000000..0554f8b642 --- /dev/null +++ b/resources/stylesheets/browser.qss @@ -0,0 +1,2 @@ +body {color: rgba(255,255,255,150);} +a {color: white; } diff --git a/resources/stylesheets/channel_widget.qss b/resources/stylesheets/channel_widget.qss new file mode 100644 index 0000000000..e85a5d2537 --- /dev/null +++ b/resources/stylesheets/channel_widget.qss @@ -0,0 +1,82 @@ +QWidget { + color: rgba(0, 0, 0, 170); + + border-width: 0px; + border-radius: 6px; +} + +/* Widget containing box, name, btn */ +QWidget#widget { + background-color: transparent; + border-radius: 4px; +} +QWidget#widget[selected=true] { + background-color: rbga(0, 0, 0, 40); +} + +/* Round check box */ +QCheckBox#box{ + spacing: 0px; + background-color: none; + font-size: 14px; + font-weight: bold; +} +QCheckBox#box::indicator { + width: 14px; + height: 14px; + border: 2px solid #000000; /* Will be overwritted in the ChannelWidget constructor */ + border-radius: 9px; +} +QCheckBox#box::indicator:unchecked { + background-color: transparent; +} +QCheckBox#box::indicator:checked { + background-color: #000000; /* Will be overwritted in the ChannelWidget constructor */ +} + +/* Name */ +QPushButton#name { + font-size: 14px; + font-weight: bold; + background-color: none; +} + +/* Delete Button */ +QPushButton#delBtn { + width: 24px; + height: 24px; + background-color: transparent; + background-position: center center; + background-repeat: no-repeat; + background-image: url(:/icons/redX.svg); +} +QPushButton#delBtn::hover { + background-image: url(:/icons/redX.svg); +} + +/* Menu button */ +QPushButton#btn { + width: 40px; + height: 20px; + background-color: transparent; +} +QPushButton#btn:pressed { + border-image: url(:/icons/setup_btn_checked.svg) +} +QPushButton#btn:!pressed { + border-image: url(:/icons/setup_btn_unchecked.svg) +} +QPushButton#btn:hover:!pressed:!checked { + border-image: url(:/icons/setup_btn_hover.svg) +} +QPushButton#btn:checked { + border-image: url(:/icons/setup_btn_checked.svg) +} + +/* Underline */ +QFrame#line { + border: 2px solid transparent; +} +QFrame#line[selected=true] { + border: 2px solid #000000; /* Will be overwritted in the ChannelWidget constructor */ +} diff --git a/resources/stylesheets/default.qss b/resources/stylesheets/default.qss new file mode 100644 index 0000000000..1ac70060d6 --- /dev/null +++ b/resources/stylesheets/default.qss @@ -0,0 +1,878 @@ +/* Default background color */ +QMainWindow > .QWidget, adiscope--Sismograph > QwtPlotCanvas, QMessageBox, QToolTip { + background-color: #272730; +} + +/* Default settings for QWidget and its sub-classes */ +QWidget { + background-color: transparent; + color: #bebebe; + font-style: normal; + font-weight: normal; + font-size: 13px; +} + +QToolTip { + padding: 6px; + border: 1px solid rgba(149, 152, 154, 150); + color: white; +} + +QLabel { + color: rgba(255, 255, 255, 150); + font-size: 13px; + font-style: normal; + font-weight: normal; + text-align: left; +} + +QLabel:disabled, QRadioButton:disabled {color: rgba(255, 255, 255, 80); } + +QLabel[invalid=true] { color: red; } + +QLabel[valid=true] { color: rgba(255, 255, 255, 150) } + +QTextBrowser { background-color: rgba(0, 0, 0, 150); } + +/* Apply a gradient to the MenuAnim widgets */ +adiscope--MenuAnim, adiscope--DMM #widget_2, .adiscope--PowerController #rightMenu { + background-color: qlineargradient(spread:pad, x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 rgba(0, 0, 0, 40), stop: 0.15 transparent, stop: 0.85 transparent, stop: 1.0 rgba(0, 0, 0, 40)); +} + +/* Except for the tool launcher's MenuAnim */ +QMainWindow > .QWidget > .adiscope--MenuAnim { background-color: none; } + +QwtPlot, QwtPolarPlot, pv--view--Viewport, QWidget[plot_container=true]{ + background-color: black; +} + +/* QwtPlot should have a black background, except the sismographs */ +adiscope--Sismograph { background-color: transparent; } + +QwtPlotCanvas { background-color: #141416; } + +QwtPolarCanvas { background-color: none; } + +QwtScaleWidget { color: rgba(255, 255, 255, 180); } + +QwtThermo { + color: #999999; + font-size: 26px; +} + +adiscope--BufferPreviewer { + border: 1px solid #7092be; + alternate-background-color: #4a64ff; + selection-background-color: #141416; + selection-color: #ff7200; + color: white; +} + +QDial { + background-color: black; + color: #4963ff; +} + +QTabWidget::tab-bar { left: 0; } + +QTabWidget::pane { border-top: 0px; } + +QTabBar::tab { + min-width: 100px; + min-height: 32px; + padding-bottom: 5px; + font: normal; +} + +QTabBar::tab:selected { + color: white; + border-bottom: 2px solid #f36d0a; + margin-top: 0px; +} + +QTabBar::tab:!selected { + border-bottom: 2px solid #373740; +} + +QRadioButton { + color: white; + spacing: 12px; +} + +QRadioButton::indicator { + width: 14px; + height: 14px; + border: 2px solid; + border-radius: 9px; + border-color: #4963FF; +} + +QRadioButton::indicator:checked { background-color: #4963FF; } + +QRadioButton::indicator:disabled { border-color: #555555; } + +QRadioButton::indicator:checked:disabled { background-color: #555555; } + +QLineEdit { + color: white; + font-size: 16px; + border: 0px solid gray; + border-bottom: 1px solid rgba(255, 255, 255, 102); + padding: 2px; +} + +QLineEdit[valid=true]{ color: white; } +QLineEdit[invalid=true]{ color: red; } + +QComboBox { + height: 24px; + border: none; + font-size: 14px; + + border-bottom: 1px solid rgba(255, 255, 255, 102); + padding-bottom: 4px; +} + +QComboBox:disabled, QLineEdit:disabled { color: #555555; } + +QComboBox QAbstractItemView { + border: none; + background-color: #1b1b21; + text-align: left; + color: #bebebe; + outline: none; + + border-bottom: 1px solid #bebebe; + border-top: 1px solid #bebebe; +} + +/* This only works on Windows */ +QComboBox QAbstractItemView { + selection-background-color: #272730; +} + +/* This does not work on Windows */ +QComboBox::item:selected { + font-weight: bold; + font-size: 18px; + border-bottom: 0px solid none; + background-color: #272730; +} + +QComboBox::drop-down { + subcontrol-position: center right; + border-image: url(:/icons/sba_cmb_box_arrow.svg); + width: 10px; + height: 6px; + font-size: 16px; + text-align: left; +} + +QComboBox::indicator { + background-color: transparent; + selection-background-color: transparent; + color: transparent; + selection-color: transparent; +} + +QMessageBox QLabel { + height: 420px; + width: 680px; + color: rgba(255,255,255,240); + font-size: 14px; + font: bold; +} + +QMessageBox QPushButton { + height: 20px; + width: 120px; + background-color: #4a64ff; + color: white; + font-size: 16px; + font: bold; + border-radius: 5px; + border-color: #4a64ff; + border-style: solid; + border-width: 1px; +} + +QAbstractSpinBox { + height: 45px; + font-size: 16px; + font-weight: bold; + border-bottom: 1px solid rgba(255, 255, 255, 102); +} + +QAbstractSpinBox::up-button, QAbstractSpinBox::down-button { + height: 20px; + width: 20px; +} + +QAbstractSpinBox::up-button { border-image: url(:/icons/sba_up_btn.svg); } + +QAbstractSpinBox::up-button:hover { border-image: url(:/icons/sba_up_btn_hover.svg); } + +QAbstractSpinBox::up-button:pressed { border-image: url(:/icons/sba_up_btn_pressed.svg); } + +QAbstractSpinBox::down-button { border-image: url(:/icons/sba_dn_btn.svg); } + +QAbstractSpinBox::down-button:hover { border-image: url(:/icons/sba_dn_btn_hover.svg); } + +QAbstractSpinBox::down-button:pressed { border-image: url(:/icons/sba_dn_btn_pressed.svg); } + +QGroupBox { + border: 2px solid rgba(255, 255, 255, 40); + border-radius: 8px; + color: rgba(255, 255, 255, 40); + font-size: 16px; + font-weight: bold; + margin-top: 9px; + padding-top: 5px; +} + +QGroupBox::title { + subcontrol-origin: margin; + subcontrol-position: top left; /* position at the top center */ +} + +QScrollBar:vertical { + background: #262628; + max-width: 8px; +} + +QScrollBar::handle:vertical { + background: #404040; + border: 0; + border-radius: 3px; +} +QScrollBar::handle:vertical:hover { + background: #4a4a4b; + border: 0; + border-radius: 3px; +} + +QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical { background: none; } + +QScrollBar::add-line:vertical, QScrollBar::sub-line:vertical { + border: none; + background: none; +} + +QScrollBar:horizontal { + background: #262628; + max-height: 6px; + border-radius: 3px; +} + +QScrollBar::handle:horizontal { + background: #404040; + border: 0; + border-radius: 3px; +} + +QScrollBar::handle:horizontal:hover { + background: #4a4a4b; + border: 0; + border-radius: 3px; +} + +QScrollBar::add-page:horizontal, QScrollBar::sub-page:horizontal { background: none; } + +QScrollBar::add-line:horizontal, QScrollBar::sub-line:horizontal { + border: none; + background: none; +} + +QDialog { background-color: #1b1b21; } + +ScopyAboutDialog QPushButton{ + background-color: #4a64ff; + color: #ffffff; +} + +QTextBrowser#aboutTextBrowser{ + background-color: transparent; + link-color: yellow; + selection-color: yellow; + color: white; +} + +/* Label, line and arrow button dividers between sections */ + +QLabel[subsection_label=true]{ + font-size: 12px; + color: rgba(255, 255, 255, 70); +} + +QFrame[subsection_line=true]{ border: 1px solid rgba(255, 255, 255, 70); } + +QPushButton[subsection_arrow_button=true]{ + max-height: 6px; + max-width: 10px; + border-image: url(:/icons/sba_cmb_box_arrow.svg); +} + +QPushButton[subsection_arrow_button=true]:checked{ + max-height: 10px; + max-width: 6px; + border-image: url(:/icons/sba_cmb_box_arrow_right.svg); +} + + +/* Label associated with settings menu, right above a blue line divider */ + +QLabel[general_settings_label=true]{ + color: white; + font-size: 14px; + font-weight: normal; +} + +/* Blue line divider */ + +QFrame[blue_line=true]{ border: 2px solid #4A64FF; } + + +/* General style for blue buttons */ + +QPushButton[blue_button=true]{ + background-color: #4a64ff; + color: #ffffff; + border-radius: 4px; + font-size: 14px; +} + +QPushButton[blue_button=true]:pressed{ background-color: #2a44df; } + +QPushButton[blue_button=true]:hover{ background-color: #4a34ff; } + +QPushButton[blue_button=true]:disabled { background-color: grey; } + +/* Info button for each tool */ + +QPushButton[info_button=true]{ + min-height: 40px; + max-height: 40px; + min-width: 40px; + max-width: 40px; + background-color: transparent; + border-radius: 4px; +} + +QPushButton[info_button=true]:hover { background-color: rgba(0, 0, 0, 60); } + + +/* Menu title label */ + +QLabel[menu_title_label=true]{ + color: white; + font-weight: normal; + font-size: 14px; +} + + +/* Style for all SpinBoxes */ + +QSpinBox{ + color: white; + border: 0px; + border-bottom: 1px solid rgba(255, 255, 255, 100); +} + + +QCheckBox { + spacing: 8px; + background-color: transparent; + font-size: 14px; + font-weight: bold; + color: rgba(255, 255, 255, 153); +} + +QCheckBox::indicator { + width: 14px; + height: 14px; + border: 2px solid rgb(74,100,255); + border-radius: 4px; +} + +QCheckBox::indicator:unchecked { background-color: transparent; } +QCheckBox::indicator:checked { background-color: rgb(74,100,255); } + + +QSlider::groove { + border: 1px solid #444444; + height: 2px; /* the groove expands to the size of the slider by default. by giving it a height, it has a fixed size */ + background: #999999; + margin: 2px 0; + border-radius: 2px; +} + +QSlider::handle { + background: rgb(73, 99, 255); + border: 0px solid; + width: 18px; + margin: -8px 0; /* handle is placed by default on the contents rect of the groove. Expand outside the groove */ + border-radius: 8px; +} + +QSlider::handle:disabled { background: #444444; } + +QSlider::sub-page:horizontal { background: #4A64FF; } + + +/* Style for settings and general settings buttons from all menus */ + +QPushButton[menu_icon_button=true] { + min-height: 40px; + max-height: 40px; + min-width: 60px; + max-width: 60px; + padding-top:5px +} + +QPushButton[menu_icon_button=true]:checked { border-top: 1px solid rgba(255,255,255,150); } + +QPushButton[menu_icon_button=true]:!checked { border-top: 1px solid rgba(255,255,255,0); } + +QPushButton[menu_icon_button=true]:!checked:hover { border-top: 1px solid rgba(255,255,255,0); } + +QPushButton[menu_icon_button=true]:checked:hover { border-top: 1px solid rgba(255,255,255,200); } + + +/* Style for all Tool launcher buttons, such as Home, Menu, Preferences, Load, Save, Notes, etc. */ + +QPushButton[tool_launcher_custom_widget=true] { + text-align:left; + border: none; + background-color: none; +} + +.QWidget[tool_launcher_custom_widget=true]:hover { + background-color: rgba(0, 0, 0, 60); + border: 1px solid rgba(0, 0, 0, 30); + border-radius:5px; +} + +QWidget[tool_launcher_custom_widget=true][selected=true] { + background-color: rgba(0, 0, 0, 60); + border: 1px solid rgba(0, 0, 0, 30); + border-radius:5px; +} + + +/* Style for icon-buttons such as Device, Home, Plus, etc. */ + +QWidget[menu_button=true][selected=true] { + opacity: 0.6; + border-radius: 4px; + background-color: #141416; +} + +QWidget[menu_button=true][selected=false] { background-color: transparent; } + + +/* Styles for DigitalIO widgets */ + +QWidget#page { + border-radius: 12px; + background-color: rgba(0, 0, 0, 80); +} + +QWidget#stackedWidgetPage1 { + border-radius: 12px; + background-color: #141416; +} + + +/* Background color for info page */ + +.adiscope--StackedHomepage#stackedWidget{ background-color: black; } + + +/* Style for all line separators */ + +QFrame[line_separator=true]{ background-color: rgba(255, 255, 255, 16); } + + +/* Background color for Voltmeter and Power Supply */ + +.adiscope--PowerController #leftPanel, .adiscope--DMM #leftPanel{ + background-color: rgba(0, 0, 0, 40); +} + + +/* Gradient background for all instruments */ + +.adiscope--Oscilloscope #mainWidget, .adiscope--SpectrumAnalyzer #mainWidget, +.adiscope--NetworkAnalyzer #mainWidget, .adiscope--SignalGenerator #mainWidget, +.adiscope--logic--LogicAnalyzer #mainWidget, .adiscope--logic--PatternGenerator #mainWidget, +.adiscope--DigitalIO #widget, .adiscope--DMM #hLayout_top_btn_area_voltmeter, .adiscope--PowerController #hWidget_top_area { + background-color: qlineargradient(spread:pad, x1: 0, y1: 0, x2: 1, y2: 0, stop: 0 rgba(0, 0, 0, 40), stop: 0.1 transparent, stop: 1.0 transparent); +} + +/* Remove inherited gradient from the export setting of the Oscilloscope */ + +.adiscope--ExportSettings #mainWidget, .adiscope--ImportSettings #mainWidget { + background-color: none; +} + +adiscope--CursorReadouts { + background-color: black; +} + +QWidget[scopy_logo=true]{ + background-image: url(:/menu/scopy_title.png); + background-repeat: no-repeat; + background-position: left center; +} + +QPushButton[menu_icon=true]{ + background-image: url(:/menu/menu_button.png); + background-repeat: no-repeat; + background-position: left center; +} + +QWidget[adi_logo=true]{ + background-image: url(:/menu/adi.png); + background-repeat: no-repeat; + background-position: left center; + min-width: 104px; + min-height: 30px; +} + +QPushButton[save_logo=true]{ + background-image: url(:/icons/ic save.svg); + background-repeat: no-repeat; +} + +QPushButton[load_logo=true]{ + background-image: url(:/icons/ic load.svg); + background-repeat: no-repeat; + background-position: left center; +} + +QPushButton[preferences_icon=true]{ + background-image: url(:/menu/debugger.png); + background-repeat: no-repeat; + background-position: left center; + qproperty-text: "Preferences"; + text-align: center; +} + +QPushButton[general_settings_icon=true]:checked { + image: url(:/icons/gear_wheel_pressed.svg); +} + +QPushButton[general_settings_icon=true]:!checked { + image: url(:/icons/gear_wheel.svg); +} + + +QPushButton[general_settings_icon=true]:!checked:hover { + image: url(:/icons/gear_wheel_hover.svg); +} + +QPushButton[general_settings_icon=true]:checked:hover { + image: url(:/icons/gear_wheel_pressed.svg); +} + +QPushButton[settings_icon=true]:checked { + image: url(:/icons/setup3_checked_hover.svg); +} + +QPushButton[settings_icon=true]:!checked { + image: url(:/icons/setup3_unchecked.svg); +} + +QPushButton[settings_icon=true]:!checked:hover { + image: url(:/icons/setup3_unchecked_hover.svg); +} + +QPushButton[settings_icon=true]:checked:hover { + image: url(:/icons/setup3_checked_hover.svg); +} + +QHeaderView::section { + background-color: transparent; +} + +QHeaderView::section:checked { + background-color: transparent; +} + +/*************************************************************/ + + + +/************************** Channel widget **************************/ + +adiscope--ChannelWidget QWidget { + color: rgba(255, 255, 255, 153); + + border-width: 0px; + border-radius: 6px; +} + +/* Widget containing box, name, btn */ + +adiscope--ChannelWidget QWidget#widget { + background-color: transparent; + border-radius: 4px; +} +adiscope--ChannelWidget QWidget#widget[selected=true] { + background-color: rbga(20, 20, 22, 153); +} + +/* Round check box */ +adiscope--ChannelWidget QCheckBox#box{ + spacing: 0px; + background-color: none; + font-size: 14px; + font-weight: bold; +} +adiscope--ChannelWidget QCheckBox#box::indicator { + width: 14px; + height: 14px; + border: 2px solid #000000; /* Will be overwritted in the ChannelWidget constructor */ + border-radius: 9px; +} +adiscope--ChannelWidget QCheckBox#box::indicator:unchecked { + background-color: transparent; +} +adiscope--ChannelWidget QCheckBox#box::indicator:checked { + background-color: #000000; /* Will be overwritted in the ChannelWidget constructor */ +} + +/* Name */ +adiscope--ChannelWidget QPushButton#name { + font-size: 14px; + font-weight: bold; + background-color: none; +} + +/* Delete Button */ +adiscope--ChannelWidget QPushButton#delBtn { + width: 24px; + height: 24px; + background-color: transparent; + background-position: center center; + background-repeat: no-repeat; + background-image: url(:/icons/redX.svg); +} +adiscope--ChannelWidget QPushButton#delBtn::hover { + background-image: url(:/icons/redX.svg); +} + +/* Menu button */ +adiscope--ChannelWidget QPushButton#btn { + width: 40px; + height: 20px; + background-color: transparent; +} +adiscope--ChannelWidget QPushButton#btn:pressed { + border-image: url(:/icons/setup_btn_checked.svg) +} +adiscope--ChannelWidget QPushButton#btn:!pressed { + border-image: url(:/icons/setup_btn_unchecked.svg) +} +adiscope--ChannelWidget QPushButton#btn:hover:!pressed:!checked { + border-image: url(:/icons/setup_btn_hover.svg) +} +adiscope--ChannelWidget QPushButton#btn:checked { + border-image: url(:/icons/setup_btn_checked.svg) +} + +/* Underline */ +adiscope--ChannelWidget QFrame#line { + border: 2px solid transparent; +} +adiscope--ChannelWidget QFrame#line[selected=true] { + border: 2px solid #000000; /* Will be overwritted in the ChannelWidget constructor */ +} + +/*************************************************************/ + + + +/******************** Dropdown switch list ************************/ + +adiscope--DropdownSwitchList { + height: 30px; + border: 0px; + font-size: 18px; + border-radius: 4px; + padding-left: 20px; +} + +adiscope--DropdownSwitchList:editable{ + background-color: #141416; + color: white; +} + +adiscope--DropdownSwitchList::drop-down { + subcontrol-position: center right; + width: 10px; + height: 6px; + border-image: url(:/icons/sba_cmb_box_arrow.svg); + margin-right: 20px; +} + +adiscope--DropdownSwitchList QAbstractItemView { + border: 0px; + background-color: #141416; + font-size: 18px; + outline: 0px; + + /* Add left space. Color should match background-color*/ + border-left: 0px solid #141416; /* setting to 0 for now */ +} + +adiscope--DropdownSwitchList QAbstractItemView::item { + color: #ffffff; + height: 60px; +} + +adiscope--DropdownSwitchList QAbstractItemView::item:hover { + background-color: #141416; + font-weight: bold; + border-bottom: 0px solid none; +} + +adiscope--DropdownSwitchList QHeaderView { + /* Cancel the effect of the QAbstractItemView border-left property. It's + necessary because the border (or padding) of the QAbstractItemView applies to + this element as well. */ + padding-left: -0px; +} + +adiscope--DropdownSwitchList QHeaderView:section { + color: rgba(255, 255, 255, 153); + background-color: #141416; + border: 0px; + font: 14px; +} + +adiscope--DropdownSwitchList QCheckBox { + background-color: #141416; +} + +adiscope--DropdownSwitchList QCheckBox::indicator { + width: 16px; + height: 16px; + subcontrol-position: center; +} + +/*************************************************************/ + + + +/************************* SpinBoxes *************************/ + +adiscope--SpinBoxA QPushButton#SBA_UpButton { + width: 30px; + height: 30px; + border-image: url(:/icons/sba_up_btn.svg); + border: 0px; +} + +adiscope--SpinBoxA QPushButton#SBA_UpButton:pressed { + border-image: url(:/icons/sba_up_btn_pressed.svg); +} +adiscope--SpinBoxA QPushButton#SBA_UpButton:hover:!pressed { + border-image: url(:/icons/sba_up_btn_hover.svg); +} + +adiscope--SpinBoxA QPushButton#SBA_DownButton { + width: 30px; + height: 30px; + border-image: url(:/icons/sba_dn_btn.svg); + border: 0px; +} +adiscope--SpinBoxA QPushButton#SBA_DownButton:pressed { + border-image: url(:/icons/sba_dn_btn_pressed.svg); +} +adiscope--SpinBoxA QPushButton#SBA_DownButton:hover:!pressed { + border-image: url(:/icons/sba_dn_btn_hover.svg); +} + +adiscope--SpinBoxA QLabel#SBA_Label { + color: rgba(255, 255, 255, 102); + font-size: 14px; +} + +adiscope--SpinBoxA QLineEdit#SBA_LineEdit { + height: 20px; + width: 75px; + font-size: 18px; + border: 0px; + bottom: 10px; +} + +adiscope--SpinBoxA QFrame#SBA_Line { + color: #4a64ff; +} + +adiscope--SpinBoxA QFrame#SBA_Line:disabled { + color: #555555; +} + +adiscope--SpinBoxA QComboBox#SBA_Combobox { + height: 20px; + font-size: 12px; + font-weight: normal; + border-bottom: 0px; + padding-bottom: 0px; +} + +adiscope--SpinBoxA QComboBox#SBA_Combobox::drop-down { + subcontrol-position: center right; + width: 10px; + height: 6px; + border-image: url(:/icons/sba_cmb_box_arrow.svg); +} + +adiscope--SpinBoxA QComboBox#SBA_Combobox::drop-down:disabled { + subcontrol-position: center right; + width: 0px; + height: 0px; + border-image: url(:/icons/sba_cmb_box_arrow.svg); +} + +adiscope--SpinBoxA QDial#SBA_CompletionCircle { + background-color: black; + color: #4963ff; +} +/*************************************************************/ + + +/******************** Stop buttons *************************/ + +QPushButton[stopButton=true] { + background-repeat: no-repeat; + background-position: center center; +} + +QPushButton[stopButton=true]:enabled { + background-image: url(:/icons/ico-stop.svg); +} + +QPushButton[stopButton=true][disabled=true][enabled=false] { + background-image: url(:/icons/ico-stop.svg); +} + +QPushButton[stopButton=true]:checked { + background-image: url(:/icons/ico-play-green.svg); +} + +/*************************************************************/ + +/******************** User Notes *************************/ + +QPushButton[userNote=true] { + background-image: url(:/icons/ic_note_unchecked.svg); +} + +QPushButton[userNote=true]:checked { + background-image: url(:/icons/ic_note_checked.svg); +} + +/*************************************************************/ diff --git a/resources/stylesheets/dropdown_switch_list.qss b/resources/stylesheets/dropdown_switch_list.qss index 5c91fbd1bc..1d48f6f2e6 100644 --- a/resources/stylesheets/dropdown_switch_list.qss +++ b/resources/stylesheets/dropdown_switch_list.qss @@ -1,6 +1,5 @@ adiscope--DropdownSwitchList { height: 30px; - color: rgba(255, 255, 255, 102); border: 0px; font-size: 18px; border-radius: 4px; @@ -8,8 +7,8 @@ adiscope--DropdownSwitchList { } adiscope--DropdownSwitchList:editable{ - background-color: #141416; - color: white; + background-color: white; + color: rgba(0, 0, 0, 200); } adiscope--DropdownSwitchList::drop-down { @@ -22,21 +21,23 @@ adiscope--DropdownSwitchList::drop-down { adiscope--DropdownSwitchList QAbstractItemView { border: 0px; - background-color: #141416; + background-color: white; font-size: 18px; outline: 0px; /* Add left space. Color should match background-color*/ - border-left: 0px solid #141416; /* setting to 0 for now */ + border-left: 0px solid white; /* setting to 0 for now */ } adiscope--DropdownSwitchList QAbstractItemView::item { - color: #ffffff; + color: rgba(0, 0, 0, 200); height: 60px; } adiscope--DropdownSwitchList QAbstractItemView::item:hover { - background-color: #141416; + background-color: #EDEDED; + font-weight: bold; + border-bottom: 0px solid none; } QHeaderView { @@ -47,45 +48,18 @@ QHeaderView { } QHeaderView:section { - color: rgba(255, 255, 255, 153); - background-color: #141416; + color: rgba(0, 0, 0, 200); + background-color: white; border: 0px; font: 14px; } QCheckBox { - background-color: #141416; + background-color: white; } QCheckBox::indicator { - border: 2px solid rgb(74, 100, 255); - border-radius: 4px; width: 16px; height: 16px; - background-color: #272730; subcontrol-position: center; } - -QCheckBox::indicator:checked { - background-color: rgb(74, 100, 255); -} - -QScrollBar:vertical { - background: #262628; - max-width: 8px; -} - -QScrollBar::handle:vertical { - background: #4a4a4b; - border: 0; - border-radius: 3px; -} - -QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical { - background: none; -} - -QScrollBar::add-line:vertical, QScrollBar::sub-line:vertical { - border: none; - background: none; -} diff --git a/resources/stylesheets/global.qss b/resources/stylesheets/global.qss deleted file mode 100644 index 1269c4977d..0000000000 --- a/resources/stylesheets/global.qss +++ /dev/null @@ -1,328 +0,0 @@ -/* Default background color */ -QMainWindow > .QWidget, adiscope--Sismograph > QwtPlotCanvas, QMessageBox, QToolTip { - background-color: #272730; -} - -/* Default settings for QWidget and its sub-classes */ -QWidget { - background-color: transparent; - color: #bebebe; - font-style: normal; - font-weight: normal; - font-size: 13px; -} - -QToolTip { - padding: 6px; - border: 1px solid rgba(149, 152, 154, 150); - color: white; -} - -QLabel { - color: rgba(255, 255, 255, 150); - font-size: 13px; - font-style: normal; - font-weight: normal; - text-align: left; -} - -QLabel:disabled, QRadioButton:disabled { - color: rgba(255, 255, 255, 80); -} - -QTextBrowser { - background-color: rgba(0, 0, 0, 150); -} - -/* Apply a gradiant to the MenuAnim widgets */ -adiscope--MenuAnim { - background-color: qlineargradient(spread:pad, x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 rgba(0, 0, 0, 40), stop: 0.15 transparent, stop: 0.85 transparent, stop: 1.0 rgba(0, 0, 0, 40)); -} - -/* Except for the tool launcher's MenuAnim */ -QMainWindow > .QWidget > .adiscope--MenuAnim { - background-color: none; -} - -QwtPlot, QwtPolarPlot, pv--view--Viewport, adiscope--SignalGenerator #plot_2, adiscope--Oscilloscope #widgetPlotContainer, adiscope--NetworkAnalyzer #widgetPlotContainer { - background-color: black; -} - -/* QwtPlot should have a black background, except the sismographs */ -adiscope--Sismograph { - background-color: transparent; -} - -QwtPlotCanvas { - background-color: #141416; -} - -QwtPolarCanvas { - background-color: none; -} - -QwtScaleWidget { - color: rgba(255, 255, 255, 180); -} - -QwtThermo { - color: #999999; - font-size: 26px; -} - -adiscope--BufferPreviewer { - border: 1px solid #7092be; - alternate-background-color: #4a64ff; - selection-background-color: #141416; - selection-color: #ff7200; - color: white; -} - -QDial { - background-color: black; - color: #4963ff; -} - -QTabWidget::tab-bar { - left: 0; -} - -QTabWidget::pane { - border-top: 0px; -} - -QTabBar::tab { - min-width: 100px; - min-height: 32px; - padding-bottom: 5px; - font: normal; -} - -QTabBar::tab:selected { - color: white; - border-bottom: 2px solid #f36d0a; - margin-top: 0px; -} - -QTabBar::tab:!selected { - border-bottom: 2px solid #373740; - margin-top: 0px; -} - -QRadioButton { - color: white; - spacing: 12px; -} - -QRadioButton::indicator { - width: 14px; - height: 14px; - border: 2px solid; - border-radius: 9px; - border-color: #4963FF; -} - -QRadioButton::indicator:checked { - background-color: #4963FF; -} - -QRadioButton::indicator:disabled { - border-color: #555555; -} - -QRadioButton::indicator:checked:disabled { - background-color: #555555; -} - -QLineEdit { - color: white; - font-size: 16px; - border: 0px solid gray; - border-bottom: 1px solid rgba(255, 255, 255, 102); - padding: 2px; -} - -QComboBox { - height: 24px; - border: none; - font-size: 14px; - - border-bottom: 1px solid rgba(255, 255, 255, 102); - padding-bottom: 4px; -} - -QComboBox:disabled, QLineEdit:disabled -{ - color: #555555; -} - -QComboBox QAbstractItemView { - border: none; - background-color: #1b1b21; - text-align: left; - color: #bebebe; - outline: none; - - border-bottom: 1px solid #bebebe; - border-top: 1px solid #bebebe; -} - -/* This only works on Windows */ -QComboBox QAbstractItemView { - selection-background-color: #272730; -} - -/* This does not work on Windows */ -QComboBox::item:selected { - font-weight: bold; - font-size: 18px; - border-bottom: 0px solid none; - background-color: #272730; -} - -QComboBox::drop-down { - subcontrol-position: center right; - border-image: url(:/icons/sba_cmb_box_arrow.svg); - width: 10px; - height: 6px; - font-size: 16px; - text-align: left; -} - -QComboBox::indicator { - background-color: transparent; - selection-background-color: transparent; - color: transparent; - selection-color: transparent; -} - -QMessageBox QLabel { - height: 420px; - width: 680px; - color: rgba(255,255,255,240); - font-size: 14px; - font: bold; -} - -QMessageBox QPushButton { - height: 20px; - width: 120px; - background-color: #4a64ff; - color: white; - font-size: 16px; - font: bold; - border-radius: 5px; - border-color: #4a64ff; - border-style: solid; - border-width: 1px; -} - -QAbstractSpinBox -{ - height: 45px; - font-size: 16px; - font-weight: bold; - border-bottom: 1px solid rgba(255, 255, 255, 102); -} - -QAbstractSpinBox::up-button, QAbstractSpinBox::down-button { - height: 20px; - width: 20px; -} - -QAbstractSpinBox::up-button -{ - border-image: url(:/icons/sba_up_btn.svg); -} - -QAbstractSpinBox::up-button:hover -{ - border-image: url(:/icons/sba_up_btn_hover.svg); -} - -QAbstractSpinBox::up-button:pressed -{ - border-image: url(:/icons/sba_up_btn_pressed.svg); -} - -QAbstractSpinBox::down-button -{ - border-image: url(:/icons/sba_dn_btn.svg); -} - -QAbstractSpinBox::down-button:hover -{ - border-image: url(:/icons/sba_dn_btn_hover.svg); -} - -QAbstractSpinBox::down-button:pressed -{ - border-image: url(:/icons/sba_dn_btn_pressed.svg); -} - -QGroupBox { - border: 2px solid rgba(255, 255, 255, 40); - border-radius: 8px; - color: rgba(255, 255, 255, 40); - font-size: 16px; - font-weight: bold; - margin-top: 9px; - padding-top: 5px; -} - -QGroupBox::title { - subcontrol-origin: margin; - subcontrol-position: top left; /* position at the top center */ -} - -QScrollBar:vertical { - background: #262628; - max-width: 8px; -} - -QScrollBar::handle:vertical { - background: #404040; - border: 0; - border-radius: 3px; -} -QScrollBar::handle:vertical:hover { - background: #4a4a4b; - border: 0; - border-radius: 3px; -} - -QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical { - background: none; -} - -QScrollBar::add-line:vertical, QScrollBar::sub-line:vertical { - border: none; - background: none; -} - -QScrollBar:horizontal { - background: #262628; - max-height: 6px; - border-radius: 3px; -} - -QScrollBar::handle:horizontal { - background: #404040; - border: 0; - border-radius: 3px; -} - -QScrollBar::handle:horizontal:hover { - background: #4a4a4b; - border: 0; - border-radius: 3px; -} - -QScrollBar::add-page:horizontal, QScrollBar::sub-page:horizontal { - background: none; -} - -QScrollBar::add-line:horizontal, QScrollBar::sub-line:horizontal { - border: none; - background: none; -} diff --git a/resources/stylesheets/light.qss b/resources/stylesheets/light.qss new file mode 100644 index 0000000000..4aa40cb6d8 --- /dev/null +++ b/resources/stylesheets/light.qss @@ -0,0 +1,877 @@ +/* Default background color */ +QMainWindow > .QWidget, adiscope--Sismograph > QwtPlotCanvas, QMessageBox, QToolTip { + background-color: #F7F7F7; +} + +/* Default settings for QWidget and its sub-classes */ +QWidget { + background-color: transparent; + color: #141416; + font-style: normal; + font-weight: normal; + font-size: 13px; +} + +QToolTip { + padding: 6px; + border: 1px solid rgba(149, 152, 154, 150); + color: rgba(0, 0, 0, 200); +} + +QLabel { + color: rgba(0, 0, 0, 200); + font-size: 13px; + font-style: normal; + font-weight: normal; + text-align: left; +} + +QLabel:disabled, QRadioButton:disabled {color: rgba(0, 0, 0, 70); } + +QLabel[invalid=true] { color: red; } + +QLabel[valid=true] { color: rgba(0, 0, 0, 200); } + +QTextBrowser { background-color: #EDEDED; } + +/* Apply a gradient to the MenuAnim widgets */ +adiscope--MenuAnim, adiscope--DMM #widget_2, .adiscope--PowerController #rightMenu { + background-color: qlineargradient(spread:pad, x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #EDEDED, stop: 0.15 #F7F7F7, stop: 0.85 #F7F7F7, stop: 1.0 #EDEDED); +} + +/* Except for the tool launcher's MenuAnim */ +QMainWindow > .QWidget > .adiscope--MenuAnim { background-color: none; } + +QwtPlot, QwtPolarPlot, pv--view--Viewport, QWidget[plot_container=true] { + background-color: white; +} + +/* QwtPlot should have a black background, except the sismographs */ +adiscope--Sismograph { background-color: transparent; } + +QwtPlotCanvas { background-color: white; } + +QwtPolarCanvas { background-color: none; } + +QwtScaleWidget { color: rgba(0, 0, 0, 180); } + +QwtThermo { + color: #999999; + font-size: 26px; +} + +adiscope--BufferPreviewer { + border: 1px solid #7092be; + alternate-background-color: #4a64ff; + selection-background-color: #F7F7F7; + selection-color: #ff7200; + color: white; +} + +QDial { + background-color: white; + color: #4963ff; +} + +QTabWidget::tab-bar { left: 0; } + +QTabWidget::pane { border-top: 0px; } + +QTabBar::tab { + min-width: 100px; + min-height: 32px; + padding-bottom: 5px; + font: normal; +} + +QTabBar::tab:selected { + color: #7D7D83; + border-bottom: 2px solid #f36d0a; + margin-top: 0px; +} + +QTabBar::tab:!selected { + border-bottom: 2px solid #7D7D83; +} + +QRadioButton { + color: rgba(0, 0, 0, 200); + spacing: 12px; +} + +QRadioButton::indicator { + width: 14px; + height: 14px; + border: 2px solid; + border-radius: 9px; + border-color: #4963FF; +} + +QRadioButton::indicator:checked { background-color: #4963FF; } + +QRadioButton::indicator:disabled { border-color: #C5C5C5; } + +QRadioButton::indicator:checked:disabled { background-color: #C5C5C5; } + +QLineEdit { + color: rgba(0, 0, 0, 200); + font-size: 16px; + border: 0px solid gray; + border-bottom: 1px solid rgba(0, 0, 0, 40); + padding: 2px; +} + +QLineEdit[valid=true]{ color: rgba(0, 0, 0, 200); } +QLineEdit[invalid=true]{ color: red; } + +QComboBox { + height: 24px; + border: none; + font-size: 14px; + + border-bottom: 1px solid rgba(0, 0, 0, 40); + padding-bottom: 4px; +} + +QComboBox:disabled, QLineEdit:disabled { color: rgba(0, 0, 0, 70); } + +QComboBox QAbstractItemView { + border: none; + background-color: white; + text-align: left; + color: #bebebe; + outline: none; + + border-bottom: 1px solid #bebebe; + border-top: 1px solid #bebebe; +} + +/* This only works on Windows */ +QComboBox QAbstractItemView { + selection-background-color: #EDEDED; +} + +/* This does not work on Windows */ +QComboBox::item:selected { + font-weight: bold; + font-size: 18px; + border-bottom: 0px solid none; + background-color: #EDEDED; +} + +QComboBox::drop-down { + subcontrol-position: center right; + border-image: url(:/icons/scopy-light/icons/sba_cmb_box_arrow.svg); + width: 10px; + height: 6px; + font-size: 16px; + text-align: left; +} + +QComboBox::indicator { + background-color: transparent; + selection-background-color: transparent; + color: transparent; + selection-color: transparent; +} + +QMessageBox QLabel { + height: 420px; + width: 680px; + color: rgba(0, 0, 0, 200); + font-size: 14px; + font: bold; +} + +QMessageBox QPushButton { + height: 20px; + width: 120px; + background-color: #4a64ff; + color: white; + font-size: 16px; + font: bold; + border-radius: 5px; + border-color: #4a64ff; + border-style: solid; + border-width: 1px; +} + +QAbstractSpinBox { + height: 45px; + font-size: 16px; + font-weight: bold; + border-bottom: 1px solid rgba(0, 0, 0, 40); +} + +QAbstractSpinBox::up-button, QAbstractSpinBox::down-button { + height: 20px; + width: 20px; +} + +QAbstractSpinBox::up-button { border-image: url(:/icons/sba_up_btn.svg); } + +QAbstractSpinBox::up-button:hover { border-image: url(:/icons/sba_up_btn_hover.svg); } + +QAbstractSpinBox::up-button:pressed { border-image: url(:/icons/sba_up_btn_pressed.svg); } + +QAbstractSpinBox::down-button { border-image: url(:/icons/sba_dn_btn.svg); } + +QAbstractSpinBox::down-button:hover { border-image: url(:/icons/sba_dn_btn_hover.svg); } + +QAbstractSpinBox::down-button:pressed { border-image: url(:/icons/sba_dn_btn_pressed.svg); } + +QGroupBox { + border: 2px solid rgba(255, 255, 255, 40); + border-radius: 8px; + color: rgba(255, 255, 255, 40); + font-size: 16px; + font-weight: bold; + margin-top: 9px; + padding-top: 5px; +} + +QGroupBox::title { + subcontrol-origin: margin; + subcontrol-position: top left; /* position at the top center */ +} + +QScrollBar:vertical { + background: #F7F7F7; + max-width: 8px; +} + +QScrollBar::handle:vertical { + background: #BEBEC1; + border: 0; + border-radius: 3px; +} +QScrollBar::handle:vertical:hover { + background: #7D7D83; + border: 0; + border-radius: 3px; +} + +QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical { background: none; } + +QScrollBar::add-line:vertical, QScrollBar::sub-line:vertical { + border: none; + background: none; +} + +QScrollBar:horizontal { + background: #F7F7F7; + max-height: 6px; + border-radius: 3px; +} + +QScrollBar::handle:horizontal { + background: #BEBEC1; + border: 0; + border-radius: 3px; +} + +QScrollBar::handle:horizontal:hover { + background: #7D7D83; + border: 0; + border-radius: 3px; +} + +QScrollBar::add-page:horizontal, QScrollBar::sub-page:horizontal { background: none; } + +QScrollBar::add-line:horizontal, QScrollBar::sub-line:horizontal { + border: none; + background: none; +} + +QDialog { background-color: white; } + +ScopyAboutDialog QPushButton{ + background-color: #4a64ff; + color: #ffffff; +} + +QTextBrowser#aboutTextBrowser{ + background-color: transparent; + link-color: yellow; + selection-color: yellow; + color: rgba(0, 0, 0, 200); +} + +/* Label, line and arrow button dividers between sections */ + +QLabel[subsection_label=true]{ + font-size: 12px; + color: rgba(0, 0, 0, 70); +} + +QFrame[subsection_line=true]{ border: 1px solid rgba(0, 0, 0, 50); } + +QPushButton[subsection_arrow_button=true]{ + max-height: 6px; + max-width: 10px; + border-image: url(:/icons/scopy-light/icons/sba_cmb_box_arrow.svg); +} + +QPushButton[subsection_arrow_button=true]:checked{ + max-height: 10px; + max-width: 6px; + border-image: url(:/icons/scopy-light/icons/sba_cmb_box_arrow_right.svg); +} + + +/* Label associated with settings menu, right above a blue line divider */ + +QLabel[general_settings_label=true]{ + color: rgba(0, 0, 0, 200); + font-size: 14px; + font-weight: normal; +} + +/* Blue line divider */ + +QFrame[blue_line=true]{ border: 2px solid #4A64FF; } + + +/* General style for blue buttons */ + +QPushButton[blue_button=true]{ + background-color: #4a64ff; + color: #ffffff; + border-radius: 4px; + font-size: 14px; +} + +QPushButton[blue_button=true]:pressed{ background-color: #2a44df; } + +QPushButton[blue_button=true]:hover{ background-color: #4a34ff; } + +QPushButton[blue_button=true]:disabled { background-color: grey; } + +/* Info button for each tool */ + +QPushButton[info_button=true]{ + min-height: 40px; + max-height: 40px; + min-width: 40px; + max-width: 40px; + background-color: transparent; + border-radius: 4px; +} + +QPushButton[info_button=true]:hover { background-color: rgba(0, 0, 0, 60); } + +/* Menu title label */ + +QLabel[menu_title_label=true]{ + color: rgba(0, 0, 0, 200); + font-weight: normal; + font-size: 14px; +} + + +/* Style for all SpinBoxes */ + +QSpinBox{ + color: rgba(0, 0, 0, 200); + border: 0px; + border-bottom: 1px solid rgba(0, 0, 0, 40); +} + + +QCheckBox { + spacing: 8px; + background-color: transparent; + font-size: 14px; + font-weight: normal; + color: rgba(0, 0, 0, 200); +} + +QCheckBox::indicator { + width: 14px; + height: 14px; + border: 2px solid rgb(74,100,255); + border-radius: 4px; +} + +QCheckBox::indicator:unchecked { background-color: transparent; } +QCheckBox::indicator:checked { background-color: rgb(74,100,255); } + + +QSlider::groove { + border: 1px solid #444444; + height: 2px; /* the groove expands to the size of the slider by default. by giving it a height, it has a fixed size */ + background: #999999; + margin: 2px 0; + border-radius: 2px; +} + +QSlider::handle { + background: rgb(73, 99, 255); + border: 0px solid; + width: 18px; + margin: -8px 0; /* handle is placed by default on the contents rect of the groove. Expand outside the groove */ + border-radius: 8px; +} + +QSlider::handle:disabled { background: #444444; } + +QSlider::sub-page:horizontal { background: #4A64FF; } + + +/* Style for settings and general settings buttons from all menus */ + +QPushButton[menu_icon_button=true] { + min-height: 40px; + max-height: 40px; + min-width: 60px; + max-width: 60px; + padding-top:5px +} + +QPushButton[menu_icon_button=true]:checked { border-top: 1px solid rgba(0, 0, 0, 150); } + +QPushButton[menu_icon_button=true]:!checked { border-top: 1px solid rgba(0, 0, 0, 0); } + +QPushButton[menu_icon_button=true]:!checked:hover { border-top: 1px solid rgba(0, 0, 0, 0); } + +QPushButton[menu_icon_button=true]:checked:hover { border-top: 1px solid rgba(0, 0, 0, 200); } + + +/* Style for all Tool launcher buttons, such as Home, Menu, Preferences, Load, Save, Notes, etc. */ + +QPushButton[tool_launcher_custom_widget=true] { + text-align:left; + border: none; + background-color: none; +} + +.QWidget[tool_launcher_custom_widget=true]:hover { + background-color: rgba(0, 0, 0, 60); + border: 1px solid rgba(0, 0, 0, 30); + border-radius:5px; +} + +QWidget[tool_launcher_custom_widget=true][selected=true] { + background-color: rgba(0, 0, 0, 60); + border: 1px solid rgba(0, 0, 0, 30); + border-radius:5px; +} + + +/* Style for icon-buttons such as Device, Home, Plus, etc. */ + +QWidget[menu_button=true][selected=true] { + opacity: 0.6; + border-radius: 4px; + background-color: #C5C5C5; +} + +QWidget[menu_button=true][selected=false] { background-color: transparent; } + + +/* Styles for DigitalIO widgets */ + +QWidget#page { + border-radius: 12px; + background-color: rgba(0, 0, 0, 40); +} + +QWidget#stackedWidgetPage1 { + border-radius: 12px; + background-color: rgba(0, 0, 0, 80); +} + + +/* Background color for info page */ + +.adiscope--StackedHomepage#stackedWidget{ background-color: #EDEDED; } + + +/* Style for all line separators */ + +QFrame[line_separator=true]{ background-color: rgba(0, 0, 0, 20); } + + +/* Background color for Voltmeter and Power Supply */ + +.adiscope--PowerController #leftPanel, .adiscope--DMM #leftPanel{ + background-color: #EDEDED; +} + + +/* Gradient background for all instruments */ + +.adiscope--Oscilloscope #mainWidget, .adiscope--SpectrumAnalyzer #mainWidget, +.adiscope--NetworkAnalyzer #mainWidget, .adiscope--SignalGenerator #mainWidget, +.adiscope--logic--LogicAnalyzer #mainWidget, .adiscope--logic--PatternGenerator #mainWidget, +.adiscope--DigitalIO #widget, .adiscope--DMM #hLayout_top_btn_area_voltmeter, .adiscope--PowerController #hWidget_top_area { + background-color: qlineargradient(spread:pad, x1: 0, y1: 0, x2: 1, y2: 0, stop: 0 #EDEDED, stop: 0.1 #F7F7F7, stop: 1.0 #F7F7F7); +} + +/* Remove inherited gradient from the export setting of the Oscilloscope */ + +.adiscope--ExportSettings #mainWidget, .adiscope--ImportSettings #mainWidget { + background-color: none; +} + +adiscope--CursorReadouts { + background-color: white; +} + +QWidget[scopy_logo=true]{ + background-image: url(:/icons/scopy-light/icons/logo.png); + background-repeat: no-repeat; + background-position: left center; +} + +QPushButton[menu_icon=true]{ + background-image: url(:/icons/scopy-light/icons/menu.png); + background-repeat: no-repeat; + background-position: left center; +} + +QWidget[adi_logo=true]{ + background-image: url(:/icons/scopy-light/icons/logo analog.png); + background-repeat: no-repeat; + background-position: left center; + min-width: 104px; + min-height: 30px; +} + +QPushButton[save_logo=true]{ + background-image: url(:/icons/scopy-light/icons/ic save.svg); + background-repeat: no-repeat; +} + +QPushButton[load_logo=true]{ + background-image: url(:/icons/scopy-light/icons/ic load.svg); + background-repeat: no-repeat; + background-position: left center; +} + +QPushButton[preferences_icon=true]{ + background-image: url(:/icons/scopy-light/icons/Gear.png); + background-repeat: no-repeat; + background-position: left center; + qproperty-text: "Preferences"; + text-align: center; +} + +QPushButton[general_settings_icon=true]:checked { + image: url(:/icons/scopy-light/icons/gear_wheel_pressed.svg); +} + +QPushButton[general_settings_icon=true]:!checked { + image: url(:/icons/scopy-light/icons/Gear.png); +} + + +QPushButton[general_settings_icon=true]:!checked:hover { + image: url(:/icons/scopy-light/icons/gear_wheel_hover.png); +} + +QPushButton[general_settings_icon=true]:checked:hover { + image: url(:/icons/scopy-light/icons/gear_wheel_pressed.svg); +} + +QPushButton[settings_icon=true]:checked { + image: url(:/icons/scopy-light/icons/setup3_checked_hover.svg); +} + +QPushButton[settings_icon=true]:!checked { + image: url(:/icons/scopy-light/icons/setup3_unchecked.png); +} + +QPushButton[settings_icon=true]:!checked:hover { + image: url(:/icons/scopy-light/icons/setup3_unchecked_hover.png); +} + +QPushButton[settings_icon=true]:checked:hover { + image: url(:/icons/scopy-light/icons/setup3_checked_hover.svg); +} + +QHeaderView::section { + background-color: #D3D3D3; +} + +QHeaderView::section:checked { + background-color: #D3D3D3; +} + +/*************************************************************/ + + + +/*********************** Channel widget *******************/ + +adiscope--ChannelWidget QWidget { + color: rgba(0, 0, 0, 170); + + border-width: 0px; + border-radius: 6px; +} + +/* Widget containing box, name, btn */ +adiscope--ChannelWidget QWidget#widget { + background-color: transparent; + border-radius: 4px; +} +adiscope--ChannelWidget QWidget#widget[selected=true] { + background-color: rbga(0, 0, 0, 40); +} + +/* Round check box */ +adiscope--ChannelWidget QCheckBox#box{ + spacing: 0px; + background-color: none; + font-size: 14px; + font-weight: bold; +} +adiscope--ChannelWidget QCheckBox#box::indicator { + width: 14px; + height: 14px; + border: 2px solid #000000; /* Will be overwritted in the ChannelWidget constructor */ + border-radius: 9px; +} +adiscope--ChannelWidget QCheckBox#box::indicator:unchecked { + background-color: transparent; +} +adiscope--ChannelWidget QCheckBox#box::indicator:checked { + background-color: #000000; /* Will be overwritted in the ChannelWidget constructor */ +} + +/* Name */ +adiscope--ChannelWidget QPushButton#name { + font-size: 14px; + font-weight: bold; + background-color: none; +} + +/* Delete Button */ +adiscope--ChannelWidget QPushButton#delBtn { + width: 24px; + height: 24px; + background-color: transparent; + background-position: center center; + background-repeat: no-repeat; + background-image: url(:/icons/redX.svg); +} +adiscope--ChannelWidget QPushButton#delBtn::hover { + background-image: url(:/icons/redX.svg); +} + +/* Menu button */ +adiscope--ChannelWidget QPushButton#btn { + width: 40px; + height: 20px; + background-color: transparent; +} +adiscope--ChannelWidget QPushButton#btn:pressed { + border-image: url(:/icons/setup_btn_checked.svg) +} +adiscope--ChannelWidget QPushButton#btn:!pressed { + border-image: url(:/icons/setup_btn_unchecked.svg) +} +adiscope--ChannelWidget QPushButton#btn:hover:!pressed:!checked { + border-image: url(:/icons/setup_btn_hover.svg) +} +adiscope--ChannelWidget QPushButton#btn:checked { + border-image: url(:/icons/setup_btn_checked.svg) +} + +/* Underline */ +adiscope--ChannelWidget QFrame#line { + border: 2px solid transparent; +} +adiscope--ChannelWidget QFrame#line[selected=true] { + border: 2px solid #000000; /* Will be overwritted in the ChannelWidget constructor */ +} + +/*************************************************************/ + + + +/******************* Dropdown ***************/ + +adiscope--DropdownSwitchList { + height: 30px; + border: 0px; + font-size: 18px; + border-radius: 4px; + padding-left: 20px; +} + +adiscope--DropdownSwitchList:editable{ + background-color: white; + color: rgba(0, 0, 0, 200); +} + +adiscope--DropdownSwitchList::drop-down { + subcontrol-position: center right; + width: 10px; + height: 6px; + border-image: url(:/icons/scopy-light/icons/sba_cmb_box_arrow.svg); + margin-right: 20px; +} + +adiscope--DropdownSwitchList QAbstractItemView { + border: 0px; + background-color: white; + font-size: 18px; + outline: 0px; + + /* Add left space. Color should match background-color*/ + border-left: 0px solid white; /* setting to 0 for now */ +} + +adiscope--DropdownSwitchList QAbstractItemView::item { + color: rgba(0, 0, 0, 200); + height: 60px; +} + +adiscope--DropdownSwitchList QAbstractItemView::item:hover { + background-color: #EDEDED; + font-weight: bold; + border-bottom: 0px solid none; +} + +adiscope--DropdownSwitchList QHeaderView { + /* Cancel the effect of the QAbstractItemView border-left property. It's + necessary because the border (or padding) of the QAbstractItemView applies to + this element as well. */ + padding-left: -0px; +} + +adiscope--DropdownSwitchList QHeaderView:section { + color: rgba(0, 0, 0, 200); + background-color: white; + border: 0px; + font: 14px; +} + +adiscope--DropdownSwitchList QCheckBox { + background-color: white; +} + +adiscope--DropdownSwitchList QCheckBox::indicator { + width: 16px; + height: 16px; + subcontrol-position: center; +} + +/*************************************************************/ + + + +/**************** SpinBoxes *****************/ + +adiscope--SpinBoxA QPushButton#SBA_UpButton { + width: 30px; + height: 30px; + border-image: url(:/icons/sba_up_btn.svg); + border: 0px; +} + +adiscope--SpinBoxA QPushButton#SBA_UpButton:pressed { + border-image: url(:/icons/sba_up_btn_pressed.svg); +} +adiscope--SpinBoxA QPushButton#SBA_UpButton:hover:!pressed { + border-image: url(:/icons/sba_up_btn_hover.svg); +} + +adiscope--SpinBoxA QPushButton#SBA_DownButton { + width: 30px; + height: 30px; + border-image: url(:/icons/sba_dn_btn.svg); + border: 0px; +} +adiscope--SpinBoxA QPushButton#SBA_DownButton:pressed { + border-image: url(:/icons/sba_dn_btn_pressed.svg); +} +adiscope--SpinBoxA QPushButton#SBA_DownButton:hover:!pressed { + border-image: url(:/icons/sba_dn_btn_hover.svg); +} + +adiscope--SpinBoxA QLabel#SBA_Label { + color: rgba(0, 0, 0, 200); + font-size: 14px; +} + +adiscope--SpinBoxA QLineEdit#SBA_LineEdit { + height: 20px; + width: 75px; + font-size: 18px; + border: 0px; + bottom: 10px; +} + +adiscope--SpinBoxA QFrame#SBA_Line { + color: #4a64ff; +} + +adiscope--SpinBoxA QFrame#SBA_Line:disabled { + color: #555555; +} + +adiscope--SpinBoxA QComboBox#SBA_Combobox { + height: 20px; + font-size: 12px; + font-weight: normal; + border-bottom: 0px; + padding-bottom: 0px; +} + +adiscope--SpinBoxA QComboBox#SBA_Combobox::drop-down { + subcontrol-position: center right; + width: 10px; + height: 6px; + border-image: url(:/icons/scopy-light/icons/sba_cmb_box_arrow.svg); +} + +adiscope--SpinBoxA QComboBox#SBA_Combobox::drop-down:disabled { + subcontrol-position: center right; + width: 0px; + height: 0px; + border-image: url(:/icons/scopy-light/icons/sba_cmb_box_arrow.svg); +} + +adiscope--SpinBoxA QDial#SBA_CompletionCircle { + background-color: #C5C5C5; + color: #4963ff; +} + +/*************************************************************/ + + +/******************** Stop buttons *************************/ + +QPushButton[stopButton=true] { + background-repeat: no-repeat; + background-position: center center; +} + +QPushButton[stopButton=true]:enabled { + background-image: url(:/icons/scopy-light/icons/ico-stop.svg); +} + +QPushButton[stopButton=true][disabled=true][enabled=false] { + background-image: url(:/icons/scopy-light/icons/ico-stop.svg); +} + +QPushButton[stopButton=true]:checked { + background-image: url(:/icons/scopy-light/icons/ico-play-green.svg); +} + +/*************************************************************/ + +/******************** User Notes *************************/ + +QPushButton[userNote=true] { + background-image: url(:/icons/scopy-light/icons/ic_note_unchecked.svg); +} + +QPushButton[userNote=true]:checked { + background-image: url(:/icons/scopy-light/icons/ic_note_checked.svg); +} + +/*************************************************************/ diff --git a/resources/stylesheets/spinbox_type_a.qss b/resources/stylesheets/spinbox_type_a.qss index b83a2e4d01..6c253e9c7b 100644 --- a/resources/stylesheets/spinbox_type_a.qss +++ b/resources/stylesheets/spinbox_type_a.qss @@ -25,7 +25,7 @@ QPushButton#SBA_DownButton:hover:!pressed { } QLabel#SBA_Label { - color: rgba(255, 255, 255, 102); + color: rgba(0, 0, 0, 200); font-size: 14px; } @@ -68,6 +68,6 @@ QComboBox#SBA_Combobox::drop-down:disabled { } QDial#SBA_CompletionCircle { - background-color: black; + background-color: #C5C5C5; color: #4963ff; } diff --git a/resources/translations.qrc b/resources/translations.qrc index 68d99c8df2..94186dd8f9 100644 --- a/resources/translations.qrc +++ b/resources/translations.qrc @@ -1,8 +1,5 @@ - scopy_en.qm - scopy_ro.qm - scopy_fr.qm - scopy_cn.qm + @TRANSLATIONS@ diff --git a/resources/translations/scopy_ar.ts b/resources/translations/scopy_ar.ts new file mode 100644 index 0000000000..80da7e24b3 --- /dev/null +++ b/resources/translations/scopy_ar.ts @@ -0,0 +1,6455 @@ + + + + + BaseMenu + + + Form + + + + + BaseMenuItem + + + Form + + + + + BinaryCounterPatternUI + + + Form + + + + + Init Value + Init Value + القيمة الأولية + + + + + 0 + + + + + Frequency + Frequency + التردد + + + + 1000 + + + + + Start counter + Start counter + بداية العداد + + + + End counter + End counter + نهاية العداد + + + + 65535 + + + + + Increment + Increment + مقدار التزايد + + + + 1 + + + + + BitfieldWidget + + + Form + + + + + + TextLabel + TextLabel + ملصق نصي + + + + 0x + + + + + CalibrationTemplate + + + Form + + + + + Calibration info here + Calibration info here + معلومات المعايرة + + + + Set + Set + ضبط + + + + Measured + Measured + قياس + + + + Enter value here + Enter value here + ادخل القيم هنا + + + + Restart + Restart + اعادة تشغيل + + + + Next + Next + التالي + + + + Finish + Finish + انهاء + + + + Channel + + + Form + + + + + Channel + Channel + مسار + + + + ChannelSettings + + + Form + + + + + Channel + Channel + مسار + + + + MATH + MATH + الحساب + + + + Edit Function + Edit Function + تعديل المعادلة + + + + HORIZONTAL + HORIZONTAL + أفقي + + + + VERTICAL + VERTICAL + رأسي + + + + SETTINGS + SETTINGS + الإعدادات + + + + CH Thickness + CH Thickness + سمك المسار + + + + 0.5 + + + + + + + 1 + + + + + 1.5 + + + + + 2 + + + + + 2.5 + + + + + 3 + + + + + 3.5 + + + + + 4 + + + + + 4.5 + + + + + 5 + + + + + Memory depth + Memory depth + عمق الذاكرة + + + + Probe +Attenuation + Probe Attenuation + تهوين/إضعاف المجس + + + + 0.1X + + + + + 1X + + + + + 10X + + + + + 100X + + + + + Curve Style + Curve Style + نمط رسم المنحني + + + + Lines + Lines + خطوط + + + + Dots + Dots + نقط + + + + Steps + Steps + + + + + Sticks + Sticks + أعواد + + + + Smooth + Smooth + أملس + + + + Software +AC Coupling + Software AC Coupling + برنامج ربط التيار المتردد + + + + Filter 1 - Enabled + Filter 1 - Enabled + تفعيل منقح 1 + + + + + TC + + + + + + Gain + Gain + الربح + + + + + 0 + + + + + Filter 2 - Enabled + Filter 2 - Enabled + تفعيل منقح 2 + + + + Autoset + Autoset + ضبط أوتوماتيكي + + + + Snapshot + Snapshot + لقطة فوتغرافية + + + + Connect + + + Form + + + + + URI (Hostname) + URI (Hostname) + عنوان الموقع (اسم المضيف) + + + + Connect + Connect + اتصل + + + + Context info + Context info + معلومات السياق + + + + ConstantPatternUI + + + Form + + + + + Constant + Constant + ثابت + + + + 0 + + + + + 1 + + + + + CursorReadouts + + + Form + + + + + Δt = + + + + + + 0.000ms + + + + + CurT2 = + + + + + 1/Δt = + + + + + - 000.000 ms + + + + + - 000.000 mHz + + + + + CurT1 = + + + + + CurV2 + + + + + ΔV + + + + + CurV1 + + + + + + 000.000 mV + + + + + - 000.000 mV + + + + + + + = + + + + + CursorsSettings + + + Form + + + + + Cursors + Cursors + المؤشرات + + + + Normal + Normal + عادي + + + + Track + Track + تعقب + + + + 0 + + + + + HORIZONTAL + HORIZONTAL + أفقي + + + + VERTICAL + VERTICAL + رأسي + + + + CURSOR READOUTS + CURSOR READOUTS + قراءات المؤشر + + + + Transparency 0% + Transparency 0% + الشفافية 0% + + + + Position + Position + الوضع + + + + CustomPlotPositionButton + + + Form + + + + + DMM + + + + MAX + MAX + الحد الأقصى + + + + + MIN + MIN + الحد الأدنى + + + + + VDC + VDC + فولت تيار مباشر + + + + Run + Run + انطلق + + + + Channel 1 + Channel 1 + مسار 1 + + + + + DC (Direct Current) + DC (Direct Current) + تيار الثابت + + + + + AC (20 Hz - 40 kHz) + AC (20 Hz - 40 kHz) + تيار متغير (20Hz -40kHz) + + + + + 1s + 1s + ثانية + + + + + 10s + 10s + 10 ثوان + + + + + 60s + 60s + 60 ثانية + + + + + History + History + التاريخ + + + + + Line thickness + Line thickness + سمك الخط + + + + + 0.5 + + + + + + 1 + + + + + + 1.5 + + + + + + 2 + + + + + + 2.5 + + + + + + 3 + + + + + + 3.5 + + + + + + 4 + + + + + + 4.5 + + + + + + 5 + + + + + Channel 2 + Channel 2 + مسار 2 + + + + PEAK HOLD + PEAK HOLD + حيز الذروة + + + + Reset + Reset + إعادة الضبط + + + + DATA LOGGING + DATA LOGGING + تسجيل البيانات + + + + Browse + Browse + تصفح + + + + Append + Append + ألحق + + + + Choose a file + Choose a file + اختر ملف + + + + Overwrite + Overwrite + اكتب على الملف السابق + + + + DbClickButtons + + + Form + + + + + 1 + + + + + 2 + + + + + 3 + + + + + 4 + + + + + 5 + + + + + Debugger + + + MainWindow + MainWindow + النافذة الرئيسية + + + + SCRIPTING ENGINE + SCRIPTING ENGINE + محرك النص + + + + Load Script + Load Script + تحميل البرنامج النصي + + + + Run + Run + تشغيل + + + + Filename + Filename + اسم الملف + + + + + Read + Read + اقرأ + + + + Device + Device + الجهاز + + + + New Window + New Window + نافذة جديدة + + + + + Write + Write + اكتب + + + + + Value: + Value: + القيمة: + + + + DEVICE SELECTION + DEVICE SELECTION + اخيار الجهاز + + + + Detailed Register Map + Detailed Register Map + خريطة مفصلة عن السجل + + + + Address: + Address: + العنوان: + + + + 0x0000 + + + + + Display mode: + Display mode: + وضع العرض: + + + + <value> + <value> + <القيمة> + + + + + 0x + + + + + Description: + Description: + الوصف: + + + + Default Value: + Default Value: + القيمة المبدأية + + + + Source: + Source: + المصدر: + + + + Enable AutoRead + Enable AutoRead + تفعيل القراءة اتوماتيكيا + + + + REGISTER MAP SETTINGS + REGISTER MAP SETTINGS + إعدادات خريطة السجل + + + + DetachDragZone + + + Form + + + + + Drag here to detach! + Drag here to detach! + اسحب هنا للفصل! + + + + Device + + + Form + + + + + DigitalIO + + + Form + + + + + Run + Run + تشغيل + + + + DigitalIoMenu + + + Form + + + + + PollingRate + PollingRate + معدل الاقتراع + + + + 1000 + + + + + Enable Outputs + Enable Outputs + تفعيل النتائج + + + + DigitalTriggerSettings + + + Form + + + + + Trigger Settings + Trigger Settings + إعدادات المحفز + + + + Trigger mode + Trigger mode + وضع المحفز + + + + auto + auto + أوتوماتيكي + + + + normal + normal + عادي + + + + Trigger Logic + Trigger Logic + منطق المحفز + + + + OR + OR + أو + + + + AND + AND + و + + + + EXTERNAL TRIGGER + EXTERNAL TRIGGER + محفز خارجي + + + + Source + Source + المصدر + + + + Condition + Condition + الحالة + + + + None + None + لا شيء + + + + EXTERNAL TRIGGER OUT + EXTERNAL TRIGGER OUT + مخرج المحفز الخارجي + + + + DragZone + + + Form + + + + + EmptyPatternUI + + + Form + + + + + ExportSettings + + + Form + + + + + EXPORT + EXPORT + إخراج + + + + Export All + Export All + إخراج الكل + + + + Export + Export + إخراج + + + + FrequencyPatternUI + + + Form + + + + + Frequency + Frequency + التردد + + + + 1000 + + + + + GenericJSPatternUI + + + Form + + + + + Script status + Script status + حالة النص + + + + Clear console + Clear console + مسح وحدة التحكم + + + + HomepageControls + + + Form + + + + + I2CPatternUI + + + Form + + + + + R + R + اقرأ + + + + W + W + اكتب + + + + Read/Write + Read/Write + اقرأ/اكتب + + + + MSB First + MSB First + البت الأعلى قيمة أولا + + + + Address + Address + العنوان + + + + Inter frame space + Inter frame space + أدخل مسافة الاطار + + + + Data + Data + المعلومات + + + + InfoPage + + + Form + + + + + Forget device + Forget device + انسى الجهاز + + + + Identify + Identify + عرّف + + + + Connect + Connect + اتصل + + + + Calibrate + Calibrate + عاير + + + + InfoWidget + + + Form + + + + + Move + Move + تحرك + + + + InstrumentNotes + + + Form + + + + + Notes + Notes + الملاحظات + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html> + + + + + Insert notes here + Insert notes here + أدخل الملاحظات هنا + + + + LAChannelGroup + + + Form + + + + + DIO + DIO + + + + + + 12 + + + + + None + None + لا شيء + + + + LAChannelManager + + + Form + + + + + LAManagerHeader + + + Form + + + + + View + View + عرض + + + + Name + Name + الاسم + + + + DIO + + + + + Trigger + Trigger + المحفز + + + + Select + Select + اختار + + + + LARequiredChannel + + + Form + + + + + Settings + Settings + الإعدادات + + + + + Role + Role + الدور + + + + LASettingsWidget + + + Form + + + + + REQUIRED + REQUIRED + مطلوب + + + + OPTIONAL + OPTIONAL + اختياري + + + + OPTIONS + OPTIONS + الاختيارات + + + + LChannelSettings + + + Form + + + + + BG Color + BG Color + لون الخلفية + + + + Edge Color + Edge Color + لون الطرف + + + + Low Color + Low Color + لون قليل + + + + High Color + High Color + لون مرتفع + + + + SETTINGS + SETTINGS + الإعدادات + + + + COLOR SETTINGS + COLOR SETTINGS + إعدادات اللون + + + + Name + Name + الإسم + + + + Thickness + Thickness + السمك + + + + 1 + + + + + 1.5 + + + + + 2 + + + + + 2.5 + + + + + 3 + + + + + 3.5 + + + + + 4 + + + + + 4.5 + + + + + 5 + + + + + LFSRPatternUI + + + Form + + + + + + 0x0001 + + + + + Generator Polynomial + Generator Polynomial + مُولد مُتعدِّد الحدود + + + + Start State + Start State + الحالة الأولية + + + + Period + Period + المدة + + + + LogicAnalyzer + + + Scopy Logic Analyzer + Scopy Logic Analyzer + سكوبي محلل منطقي + + + + Group + Group + مجموعة + + + + + Channel Settings + Channel Settings + إعدادات المسار + + + + + - + - + + + + + Name + Name + الإسم + + + + 1 + + + + + Trace Height + Trace Height + ارتفاع المنحنى + + + + GROUP + GROUP + المجموعة + + + + Stack Decoder: + Stack Decoder: + محلل المكدس + + + + Trigger Settings + Trigger Settings + إعدادات المحفز + + + + Trigger mode + Trigger mode + وضع المحفز + + + + auto + auto + أوتوماتيكي + + + + normal + normal + عادي + + + + Trigger Logic + Trigger Logic + منطق المحفز + + + + EXTERNAL TRIGGER + EXTERNAL TRIGGER + المحفز الخارجي + + + + "Warning: This feature is not supported on the current firmware version!" + "Warning: This feature is not supported on the current firmware version!" + "إنذار: هذه الخاصية غير متاحة في نسخة البرنامج الحالية" + + + + Source + Source + المصدر + + + + Condition + Condition + الحالة + + + + General Settings + General Settings + الإعدادات العامة + + + + OneShot + OneShot + لقطة واحدة + + + + AVAILABLE CHANNELS + AVAILABLE CHANNELS + المسارات المتاحة + + + + DECODERS + DECODERS + مزيل الشفرات + + + + Close + Close + أغلق + + + + Print + Print + اطبع + + + + Stream + Stream + تيار + + + + Cursors + Cursors + المؤشرات + + + + + Trigger + Trigger + المحفز + + + + ManualCalibration + + + Form + + + + + Load Calibration + Load Calibration + تحميل المعايره + + + + Save Calibration + Save Calibration + حفظ المعايره + + + + Run automatic + Run automatic + تشغيل أوتوماتيكي + + + + MarkerTable + + + Form + + + + + Math + + + Form + + + + + f(t) = + + + + + cos + + + + + 2 + + + + + 7 + + + + + , + + + + + 3 + + + + + ← + + + + + ( + + + + + exp + + + + + 1 + + + + + 8 + + + + + - + + + + + / + + + + + * + + + + + e + + + + + C + + + + + 0 + + + + + 6 + + + + + ) + + + + + log + + + + + t + + + + + + + + + + + 9 + + + + + tan + + + + + ^ + + + + + 4 + + + + + Apply + + + + + pi + + + + + 5 + + + + + sin + + + + + MathPanel + + + Form + + + + + Add channel + Add channel + إضافة مسار + + + + MeasureSettings + + + Form + + + + + Measure + Measure + قِس + + + + Channel + Channel + مسار + + + + MEASUREMENTS + MEASUREMENTS + القياسات + + + + Counter + Counter + العداد + + + + Display All + Display All + عرض الكل + + + + + Delete All + Delete All + مسح الكل + + + + STATISTICS + STATISTICS + الإحصائيات + + + + Reset + Reset + إعادة الضبط + + + + CUSTOM SELECTION + CUSTOM SELECTION + اختيار مخصص + + + + Enable + Enable + تفعيل + + + + GATING SETTINGS + GATING SETTINGS + إعدادات البوابات + + + + MeasurementsPanel + + + Form + + + + + NetworkAnalyzer + + + Print + Print + اطبع + + + + Current Frequency: + Current Frequency: + التردد الحالي: + + + + Sample: + Sample: + العينة: + + + + Average: + Average: + المتوسط: + + + + Phase (°) + Phase (°) + الدرجة (°) + + + + Magnitude (dB) + Magnitude (dB) + المقدار (dB) + + + + ° + + + + + 10 + + + + + Settings + Settings + الإعدادات + + + + + REFERENCE + REFERENCE + المرجع + + + + Channel 1 + Channel 1 + مسار 1 + + + + Channel 2 + Channel 2 + مسار 2 + + + + 0 + + + + + Gain Mode + Gain Mode + حالة الربح + + + + Automatic + Automatic + أوتوماتيكي + + + + Low + Low + منخفض + + + + High + High + مرتفع + + + + RESPONSE + Response + الإجابة + + + + DC Filtering + DC Filtering + منقح للتيار الثابت + + + + + On + On + يعمل + + + + + Off + Off + لا يعمل + + + + SWEEP + SWEEP + المدى + + + + Logarithmic + Logarithmic + لُوغارِتمِيّ + + + + Linear + Linear + خطي + + + + Average + Average + المتوسط + + + + + Apply + Apply + طَبِّق + + + + Periods + Periods + المدد + + + + DISPLAY + DISPLAY + عرض + + + + Delta Label + Delta Label + ملصق الدلتا + + + + BUFFER PREVIEWER + BUFFER PREVIEWER + مراجعة المنظم + + + + ViewInOsc + ViewInOsc + اعرض في جهاز رسم الموجات + + + + Previous + Previous + السابق + + + + Next + Next + التالي + + + + General Settings + General Settings + الإعدادات العامة + + + + PLOT + PLOT + ارسم + + + + Type + Type + النوع + + + + Bode + Bode + بود + + + + Nyquist + Nyquist + نايكويست + + + + Nichols + Nichols + نيكولس + + + + Line thickness + Line thickness + سمك الخط + + + + 0.5 + + + + + 1 + + + + + 1.5 + + + + + 2 + + + + + 2.5 + + + + + 3 + + + + + 3.5 + + + + + 4 + + + + + 4.5 + + + + + 5 + + + + + EXPORT + EXPORT + إخراج + + + + Export + Export + إخراج + + + + Import + Import + أورد + + + + Snapshot + Snapshot + لقطة فوتغرافية + + + + Remove Reference + Remove Reference + إزالة المرجع + + + + Cursors + Cursors + المؤشرات + + + + CURSOR READOUTS + CURSOR READOUTS + قراءات المؤشر + + + + Transparency 0% + Transparency 0% + الشفافية 0% + + + + Position + Position + الوضع + + + + Cursors + Cursors + المؤشرات + + + + NetworkAnalyzerBufferViewer + + + Form + + + + + Note + + + TextLabel + TextLabel + ملصق نصي + + + + NumberPatternUI + + + Form + + + + + Number + Number + رقم + + + + OscGeneralSettings + + + GeneralSettings + GeneralSettings + الإعدادات العامة + + + + General settings + General settings + الإعدادات العامة + + + + VIEWS + VIEWS + طريقة العرض + + + + FFT + FFT + انتقال فورير السريع + + + + X-Y + + + + + Histogram + Histogram + مخَطط دَرَجي + + + + X-Y + + + + + Y-Axis + Y-Axis + محور Y + + + + X-Axis + X-Axis + محور X + + + + dots + dots + نقط + + + + lines + lines + خطوط + + + + X-Y Line thickness + X-Y Line thickness + سمك الخط + + + + 1 + + + + + 2 + + + + + 3 + + + + + 4 + + + + + 5 + + + + + 6 + + + + + 7 + + + + + 8 + + + + + 9 + + + + + 10 + + + + + Oscilloscope + + + Scopy Oscilloscope + Scopy Oscilloscope + جهاز سكوبي لرسم الموجات + + + + Print + Print + اطبع + + + + Cursors + Cursors + المؤشرات + + + + Measure + Measure + قِس + + + + Trigger + Trigger + المحفز + + + + Close + Close + أغلق + + + + PGCGSettings + + + Form + + + + + TextLabel + TextLabel + ملصق نصي + + + + Pattern + Pattern + النمط + + + + Output + Output + النتيجة + + + + PP + PP + + + + + OD + + + + + CLOCK + CLOCK + الساعة + + + + SETTINGS + SETTINGS + الإعدادات + + + + Name + Name + الإسم + + + + Thickness + Thickness + السمك + + + + 1 + + + + + 1.5 + + + + + 2 + + + + + 2.5 + + + + + 3 + + + + + 3.5 + + + + + 4 + + + + + 4.5 + + + + + 5 + + + + + COLOR SETTINGS + COLOR SETTINGS + إعدادات اللون + + + + BG Color + BG Color + لون الخلفية + + + + Edge Color + Edge Color + لون الطرف + + + + Low Color + Low Color + لون قليل + + + + High Color + High Color + لون مرتفع + + + + PGChannel + + + Form + + + + + TextLabel + TextLabel + ملصق نصي + + + + PGChannelGroup + + + Form + + + + + TextLabel + TextLabel + ملصق نصي + + + + 12 + + + + + PGChannelManager + + + Form + + + + + PGChannelManagerHeader + + + Form + + + + + Enable + Enable + تفعيل + + + + Name + Name + الإسم + + + + DIO + + + + + Select + Select + اختار + + + + PGSettings + + + Form + + + + + Settings + Settings + الإعدادات + + + + Autoset + Autoset + ضبط أوتوماتيكي + + + + Sample Rate + Sample Rate + سرعة المعاينة + + + + Buffer Size + Buffer Size + حجم المنظم + + + + ExternalClock + ExternalClock + ساعة خارجية + + + + External Clock Frequency + External Clock Frequency + تردد الساعة الخارجية + + + + Reset Instrument + Reset Instrument + إعادة ضبط الجهاز + + + + PatternGenerator + + + Scopy Pattern Generator + Scopy Pattern Generator + سكوبي مولد إشارة + + + + Print + Print + اطبع + + + + Group + Group + مجموعة + + + + + Channel Settings + Channel Settings + إعدادات المسار + + + + 1 + + + + + Trace Height + Trace Height + ارتفاع المنحنى + + + + Name + Name + الإسم + + + + Open-Drain + Open-Drain + الصرف مفتوح + + + + Push-Pull + Push-Pull + ادفع-اسحب + + + + GROUP + GROUP + مجموعة + + + + Pattern + Pattern + النمط + + + + Trigger Settings + Trigger Settings + إعدادات المحفز + + + + Trigger mode + Trigger mode + وضع المحفز + + + + auto + auto + أوتوماتيكي + + + + normal + normal + عادي + + + + Trigger Logic + Trigger Logic + منطق المحفز + + + + EXTERNAL TRIGGER + EXTERNAL TRIGGER + محفز خارجي + + + + Source + Source + المصدر + + + + Condition + Condition + الحالة + + + + - + + + + + General Settings + General Settings + الإعدادات العامة + + + + AVAILABLE CHANNELS + AVAILABLE CHANNELS + المسارات المتاحة + + + + Cursors + Cursors + المؤشرات + + + + Trigger + Trigger + المحفز + + + + Close + Close + أغلق + + + + PowerController + + + Scopy Power Control + Scopy Power Control + سكوبي للتحكم في الطاقة + + + + + Set + Set + ضبط + + + + + Measure + Measure + قِس + + + + + + + VDC + VDC + فولت تيار مباشر + + + + Tracking ratio control + Tracking ratio control + مراقبة ضبط النسبة + + + + Independent + Independent + مستقل + + + + Tracking + Tracking + تعقب + + + + 100 + + + + + % + + + + + Positive output + Positive output + نتيجة إجابية + + + + + Enable + Enable + تفعيل + + + + Negative output + Negative output + نتيجة سلبية + + + + Preferences + + + Form + + + + + GENERAL + GENERAL + عام + + + + OSCILLOSCOPE + OSCILLOSCOPE + جهاز لرسم الموجات + + + + Enable labels on the plot + Enable labels on the plot + تفعيل اللاصق على الرسمة + + + + Enable graticule + Enable graticule + تفعيل التقسيم إلى مربعات + + + + Enable mini histogram + Enable mini histogram + تفعيل مصغر من المخَطط الدَرَجي + + + + Enable all instrument notes + Enable all instrument notes + تفعيل الملاحاظات لكل الأجهزة + + + + Language (requires app restart) + Language (requires app restart) + اللغة (تتطلب إعادة تشغيل البرنامج) + + + + Restart the application for changes to take effect + Restart the application for changes to take effect + أعد تشغيل البرنامج لتفعيل التغيرات + + + + Attempt temperature-based calibration (EXPERIMENTAL) + Attempt temperature-based calibration (EXPERIMENTAL) + محاولة معايرة درجة الحرارة (اختباريا) + + + + Enable animations + Enable animations + تفعيل الحركة + + + + 1 + + + + + Run external scripts (Experimental) + Run external scripts (Experimental) + تشغيل النصوص الخارجية (اختباريا) + + + + SPECTRUM ANALYZER + SPECTRUM ANALYZER + محلل الطيف + + + + Only search marker peaks in visible domain + Only search marker peaks in visible domain + ابحث عن علامات الذروة في النطاق المرئي فقط + + + + Double click to detach a tool + Double click to detach a tool + انقر مرتين لفصل الاداه + + + + Save session when closing Scopy + Save session when closing Scopy + احفظ الإعدادات حين غلق سكوبي + + + + NETWORK ANALYZER + NETWORK ANALYZER + محلل شبكات + + + + Always display 0db value on graph + Always display 0db value on graph + دائما أظهر قيمة 0dB على الرسم البياني + + + + Scriptable manual calibration + Scriptable manual calibration + معايرة يدوية للنص + + + + Show advanced device information + Show advanced device information + أظهر معلومات متقدمة عن الجهاز + + + + LOGIC ANALYZER + LOGIC ANALYZER + محلل منطقي + + + + Display sampling points when zoomed + Display sampling points when zoomed + أظهر نقط العينات عند التحديق + + + + SIGNAL GENERATOR + SIGNAL GENERATOR + مُولد اشارة + + + + Number of displayed periods + Number of displayed periods + عدد المدد المعروضة + + + + Enable digital decoders + Enable digital decoders + تفعيل فك الشفرة الرقمية + + + + Enable sample rate filters + Enable sample rate filters + تفعيل منقحات سرعة المعاينة + + + + Show ADC digital filter config + Show ADC digital filter config + أظهر إعدادات المنقح الرقمي لمحوّل التماثلي إلى رقمي + + + + DEBUG + DEBUG + نقّح + + + + Enable Debug Messages (Only for Debugging, Bugreporting) + Enable Debug Messages (Only for Debugging, Bugreporting) + تفعيل تنقيح الرسائل (فقط للتنقيح والإبلاغ عن الأخطاء) + + + + Enable Debug Instrument + Enable Debug Instrument + تفعيل تنقيح الجهاز + + + + Enable user notes in main page + Enable user notes in main page + تفعيل ملاحظات المستخدم في الصفحة الرئيسية + + + + Skip calibration if already calibrated (cal values are not default) + Skip calibration if already calibrated (cal values are not default) + أهمل المعايرة اذا تمت المعايرة سابقا (المعايرة ليس لها قيم أولية) + + + + Reset Scopy + Reset Scopy + أعد تشغيل سكوبي + + + + PulsePatternUI + + + Form + + + + + Low + Low + الحد الأدنى + + + + + + + 0 + + + + + High + High + الحد الأعلى + + + + 100 + + + + + Counter Init + Counter Init + بداية العداد + + + + Delay + Delay + مدة التأخير + + + + + 1 + + + + + Delay polarity + Delay polarity + قطبية التأخير + + + + Number of pulses + Number of pulses + عدد النبضات + + + + QObject + + + Period + Period + + + + + Frequency + + + + + Min + + + + + Max + + + + + Peak-peak + + + + + Mean + + + + + Cycle Mean + + + + + RMS + + + + + Cycle RMS + + + + + AC RMS + + + + + Area + + + + + Cycle Area + + + + + Low + + + + + High + + + + + Amplitude + + + + + Middle + + + + + +Over + + + + + -Over + + + + + Rise + + + + + Fall + + + + + +Width + + + + + -Width + + + + + +Duty + + + + + -Duty + + + + + RegisterWidget + + + Form + + + + + RunSingleWidget + + + Form + + + + + Run + Run + تشغيل + + + + Single + Single + مرة + + + + SPIPatternUI + + + Form + + + + + MSB First + MSB First + البت الأعلى قيمة أولا + + + + + + 1 + + + + + + + 0 + + + + + CLK Phase + CLK Phase + درجة الساعة + + + + CS Polarity + CS Polarity + قطبية انتقاء الدائرة + + + + CLK Polarity + CLK Polarity + قطبية الساعة + + + + Bytes per frame + Bytes per frame + البايت في الإطار + + + + Inter frame space + Inter frame space + أدخل مسافة الاطار + + + + Data + Data + المعلومات + + + + SignalGenerator + + + Scopy Signal Generator + Scopy Signal Generator + سكوبي مولد إشارة + + + + Constant + Constant + ثابت + + + + Waveform + Waveform + الشكل الموجي + + + + Sine + Sine + جيب الزاوية + + + + Square + Square + مربع + + + + Triangle + Triangle + مثلث + + + + Trapezoidal + Trapezoidal + رباعي شبه منحرف + + + + Rising Ramp Sawtooth + Rising Ramp Sawtooth + مطلع سن المنشار + + + + Falling Ramp Sawtooth + Falling Ramp Sawtooth + منزل سن المنشار + + + + Stair Step + Stair Step + درج السلم + + + + TIMING + TIMING + التوقيت + + + + Buffer + Buffer + منظم + + + + FILE + FILE + ملف + + + + Path + Path + مسار + + + + + No file loaded + No file loaded + لم يتم تحميل الملف + + + + Format + Format + التنسيق + + + + Size + Size + الحجم + + + + 0 samples + 0 samples + لا يوجد عينات + + + + Load file + Load file + حمّل الملف + + + + Channel + Channel + مسار + + + + SCALING + SCALING + تغير الحجم + + + + Math + Math + الحساب + + + + NOISE + NOISE + الشوشرة + + + + None + None + لا شيء + + + + Uniform + Uniform + منتظم + + + + Gaussian + Gaussian + غاوسي + + + + Laplacian + Laplacian + لابلاس + + + + Impulse + Impulse + دَفعة + + + + OTHER + OTHER + آخرى + + + + Line thickness + Line thickness + سمك الخط + + + + 0.5 + + + + + 1 + + + + + 1.5 + + + + + 2 + + + + + 2.5 + + + + + 3 + + + + + 3.5 + + + + + 4 + + + + + 4.5 + + + + + 5 + + + + + Close + Close + أغلق + + + + SpectrumAnalyzer + + + Form + + + + + Print + Print + اطبع + + + + Preset + Preset + ضبط مسبق + + + + + dBFS + dBFS + + + + + Sample: + Sample: + العينة: + + + + Average Sample: + Average Sample: + متوسط العينات + + + + Marker_n 0.000 Hz 0dB + Marker_n 0.000 Hz 0dB + علامة_n 0Hz 0dB + + + + Channel + Channel + مسار + + + + Type + Type + النوع + + + + Sample + Sample + العينة + + + + and other types + and other types + والأنواع الآخرى + + + + Window + Window + نافذة + + + + Uniform (none) + Uniform (none) + منتظم (لا شيء) + + + + and others windows + and others windows + والنوافذ الآخرى + + + + Averaging + Averaging + عدد العينات لحساب المتوسط + + + + Apply + Apply + طَبِّق + + + + CH Thickness + CH Thickness + سمك المسار + + + + 0.5 + + + + + 1 + + + + + 1.5 + + + + + 2 + + + + + 2.5 + + + + + 3 + + + + + 3.5 + + + + + 4 + + + + + 4.5 + + + + + 5 + + + + + History + History + التاريخ + + + + Gain mode + Gain mode + حالة الربح + + + + + Low + Low + منخفض + + + + High + High + مرتفع + + + + Snapshot + Snapshot + لقطة فوتغرافية + + + + General settings + General settings + الإعدادات العامة + + + + Export + Export + إخراج + + + + + Sweep + Sweep + المدى + + + + Logarithmic + Logarithmic + لُوغارِتمِيّ + + + + Linear + Linear + خطي + + + + FREQUENCY + FREQUENCY + التردد + + + + AMPLITUDE + AMPLITUDE + ارتفاع الموجة الأقصى + + + + Resolution BW + Resolution BW + عرض نطاق التبيين + + + + Units + Units + الوحدات + + + + + Markers + Markers + العلامات + + + + Settings + Settings + الإعدادات + + + + MARKER + MARKER + العلامة + + + + Normal + Normal + عادي + + + + Delta + Delta + دلتا + + + + Peak + Peak + الذروة + + + + + Peak + Peak + الذروة + + + + + Ampl + Ampl + ارتفاع الموجة الأقصى + + + + GENERAL + GENERAL + عام + + + + Marker Table + Marker Table + جدول العلامات + + + + Import Reference Channels + Import Reference Channels + إيراد مرجع المسارات + + + + No file selected! + No file selected! + لم يتم تحميل الملف + + + + Browse + Browse + تصفح + + + + Import + Import + أورد + + + + SpinBoxA + + + Form + + + + + StartStopRangeWidget + + + Form + + + + + Statistic + + + Form + + + + + Avg: + Avg: + المتوسط: + + + + + + 0.000 + + + + + Min: + Min: + الحد الأدنى + + + + Max: + Max: + الحد الأقصى + + + + 1 + + + + + Measurement + Measurement + القياسات + + + + StatisticsPanel + + + Form + + + + + ToolLauncher + + + Scopy + Scopy + سكوبي + + + + Home + Home + الصفحة الرئيسية + + + + Save + Save + احفظ + + + + Load + Load + حمّل + + + + Preferences + Preferences + التفضيلات + + + + Notes + Notes + الملاحظات + + + + Quit + Quit + خروج + + + + ADC Offset + ADC Offset + إزاحة المحول الرقمي التناظري + + + + ADC Gain + ADC Gain + ربح المحول الرقمي التناظري + + + + Reset ADC Calibration + Reset ADC Calibration + إعادة معايرة المحول الرقمي التناظري + + + + TriggerSettings + + + Form + + + + + Trigger Settings + Trigger Settings + إعدادات المحفز + + + + Trigger mode + Trigger mode + وضع المحفز + + + + auto + auto + أوتوماتيكي + + + + normal + normal + عادي + + + + + Source + Source + المصدر + + + + INTERNAL (ANALOG) + INTERNAL (ANALOG) + داخلي (أنالوج) + + + + + Condition + Condition + الحالة + + + + + Rising Edge + Rising Edge + وقت النهوض + + + + + Falling Edge + Falling Edge + وقت الهبوط + + + + + Low + Low + منخفض + + + + + High + High + مرتفع + + + + This feature is not supported while the Mixed Signal View is enabled! + This feature is not supported while the Mixed Signal View is enabled! + هذه الخاصية غير متاحة عند تفعيل عرض الاشارة المختلطة + + + + DIGITAL + DIGITAL + رقمي + + + + Any Edge + Any Edge + أي وقت + + + + M2K daisychain position + M2K daisychain position + M2k وضع السلسة التعاقبية + + + + TRIGGER LOGIC + TRIGGER LOGIC + منطق التحفيز + + + + Analog - Digital + Analog - Digital + قياسي - رقمي + + + + Digital OR Analog + Digital OR Analog + قياسي أو رقمي + + + + Digital AND Analog + Digital AND Analog + قياسي ورقمي + + + + Digital XOR Analog + Digital XOR Analog + قياسي XOR رقمي + + + + !Digital OR Analog + !Digital OR Analog + قياسي أو !(رقمي) + + + + !Digital AND Analog + !Digital AND Analog + قياسي و!(رقمي) + + + + !Digital XOR Analog + !Digital XOR Analog + قياسي XOR !(رقمي) + + + + EXTERNAL TRIGGER OUT + EXTERNAL TRIGGER OUT + مخرج المحفز الخارجي + + + + UARTPatternUI + + + Form + + + + + Stop + Stop + توقف + + + + 1 + + + + + 2 + + + + + 3 + + + + + Baud + Baud + سرعة الإرسال + + + + + 9600 + + + + + 1200 + + + + + 2400 + + + + + 4800 + + + + + 14400 + + + + + 19200 + + + + + 28800 + + + + + 38400 + + + + + 57600 + + + + + 115200 + + + + + 230400 + + + + + Parity + Parity + الزوجية + + + + NONE + NONE + لا شيء + + + + ODD + ODD + فردي + + + + EVEN + EVEN + زوجي + + + + MARK + MARK + علامة + + + + SPACE + SPACE + مسافة + + + + Parameters + Parameters + المعامِلات + + + + Data to Send + Data to Send + البيانات للإرسال + + + + UserNotePage + + + Form + + + + + Remove note + Remove note + إزالة الملحوظة + + + + UserNotes + + + Form + + + + + Save + Save + احفظ + + + + File path + File path + مسار الملف + + + + Browse + Browse + تصفح + + + + Note name + Note name + اسم الملحوظة + + + + WalkingPatternUI + + + Form + + + + + Walking level + Walking level + مستوى المشي + + + + 0 + + + + + + 1 + + + + + Frequency + Frequency + التردد + + + + 1000 + + + + + Direction + Direction + الاتجاه + + + + Right + Right + يمين + + + + Left + Left + يسار + + + + Length + Length + الطول + + + + adiscope::BinaryCounterPatternUI + + + Frequency + + + + + adiscope::CapturePlot + + + + + + + + Zoom: + + + + + + /div + + + + + Waiting + + + + + Triggered + + + + + Stop + + + + + Auto + + + + + adiscope::ClockPatternUI + + + Frequency + + + + + Phase + + + + + Duty + + + + + adiscope::ConnectDialog + + + + Connect + + + + + Waiting for connection ... + + + + + + Context info + + + + + Add + + + + + Warning + + + + + Error: Unable to find host: No such host is known! + + + + + adiscope::CustomSwitch + + + on + + + + + off + + + + + adiscope::DMM + + + Timer + + + + + Stop + + + + + Run + + + + + Export + + + + + Comma-separated values files (*.csv);;All Files(*) + + + + + No file selected + + + + + + File is open in another program + + + + + + Choose a file + + + + + adiscope::Debugger + + + Save File + + + + + JavaScript (*.js) + + + + + adiscope::DigitalIO + + + Stop + + + + + Run + + + + + adiscope::ExportSettings + + + Channels + + + + + Name + + + + + Export + + + + + adiscope::GrayCounterPatternUI + + + Frequency + + + + + adiscope::I2CPatternUI + + + Frequency + + + + + adiscope::ImportPatternUI + + + Frequency + + + + + Open file + + + + + Import selected channels + + + + + No file selected + + + + + Export + + + + + Comma-separated values files (*.csv);;Tab-delimited values files (*.txt) + + + + + adiscope::ImportSettings + + + Import + + + + + Import all + + + + + adiscope::InfoPage + + + Error: Connection failed! + + + + + Connected + + + + + Your hardware revision does not support the identify feature + + + + + adiscope::M2kDeviceWidget + + + M2K + + + + + adiscope::M2kInfoPage + + + Not connected + + + + + Always disconnect analog inputs/outputs before calibration + + + + + Can't identify this device. + + + + + Can't identify device. Please try to update your firmware! + + + + + Your hardware revision does not support the identify feature + + + + + adiscope::ManualCalibration + + + Save File + + + + + ini (*.ini) + + + + + + °C + + + + + adiscope::MarkerTable + + + Id + + + + + Marker + + + + + Channel + + + + + Frequency + + + + + Magnitude + + + + + Type + + + + + adiscope::MeasureSettings + + + Horizontal + + + + + + Name + + + + + + Measure + + + + + + Stats + + + + + Vertical + + + + + + Recover + + + + + + Delete All + + + + + adiscope::NetworkAnalyzer + + + + Stopped + + + + + Frequency (Hz) + + + + + Magnitude(dB) + + + + + Phase (°) + + + + + Samples count + + + + + Samps/decade + + + + + Step + + + + + Amplitude + + + + + Offset + + + + + Max. Magnitude + + + + + Min. Magnitude + + + + + Max. Phase + + + + + Min. Phase + + + + + + Settling time + + + + + Before Buffer + + + + + After Buffer + + + + + + Sample: + + + + + + Current Frequency: + + + + + + DC Voltage: + + + + + + Response channel voltage < 50mV! + + + + + + Low + + + + + + High + + + + + + Gain Mode: + + + + + Transparency + + + + + Image + + + + + Save to + + + + + Import + + + + + Comma-separated values files (*.csv);;Tab-delimited values files (*.txt) + + + + + Comma-separated values files (*.csv) + + + + + Tab-delimited values files (*.txt) + + + + + All Files(*) + + + + + Export + + + + + Average: + + + + + Running + + + + + Stopping... + + + + + adiscope::NetworkAnalyzer_API + + + Transparency + + + + + adiscope::Oscilloscope + + + + Time Base + + + + + + Position + + + + + Volts/Div + + + + + + Add Channel + + + + + + + Export + + + + + + Comma-separated values files (*.csv) + + + + + + Tab-delimited values files (*.txt) + + + + + + All Files(*) + + + + + Transparency + + + + + "Warning: This feature is not supported on the current firmware version!" + + + + + * When the Mixed Signal View is enabled the LogicAnalyzer tool will be disabled! +** The trigger can be disabled or set only on the Digital channels or Analog channels, not on both at the same time! + + + + + Math + + + + + Browse + + + + + No file selected + + + + + + Reference + + + + + Logic + + + + + Add channel + + + + + Import selected channels + + + + + Enable Mixed Signal View + + + + + Import + + + + + Comma-separated values files (*.csv);;Tab-delimited values files (*.txt) + + + + + + Snapshot + + + + + Filter 1 - Enable - + + + + + Filter 2 - Enable - + + + + + + Save + + + + + adiscope::PowerController + + + + mVolts + + + + + + Volts + + + + + + Value + + + + + + Disable + + + + + + Enable + + + + + adiscope::Preferences + + + This change will be applied only after a Scopy reset. + + + + + By resetting scopy you will lose the current configuration! + + + + + Do you want to reset? + + + + + Load language + + + + + Language files (*.qm) + + + + + adiscope::PrintablePlot + + + + + + Documents + + + + + Image + + + + + Export File Name + + + + + adiscope::PulsePatternUI + + + Sample Rate + + + + + adiscope::RandomPatternUI + + + Frequency + + + + + adiscope::RunSingleWidget + + + + + Run + + + + + + + Single + + + + + + + + + Stop + + + + + adiscope::SPIPatternUI + + + Frequency + + + + + adiscope::SignalGenerator + + + deg + + + + + π rad + + + + + + + + + ns + + + + + + + + + μs + + + + + + + + + ms + + + + + + + + + s + + + + + + + Phase + + + + + μVolts p-p + + + + + mVolts p-p + + + + + Volts p-p + + + + + + + Amplitude + + + + + + + + μVolts + + + + + + + + + mVolts + + + + + + + + + Volts + + + + + + Offset + + + + + mHz + + + + + Hz + + + + + kHz + + + + + MHz + + + + + Frequency + + + + + Rising + + + + + Falling + + + + + Rise Time + + + + + Fall Time + + + + + High Time + + + + + Low Time + + + + + + SampleRate + + + + + Record Length + + + + + Value + + + + + Duty Cycle + + + + + + + samples + + + + + Open File + + + + + Comma-separated values files (*.csv);;Tab-delimited values files (*.txt);;Waveform Audio File Format (*.wav);;Matlab files (*.mat) + + + + + adiscope::Sismograph + + + Voltage (V) + + + + + Time (s) + + + + + adiscope::SpectrumAnalyzer + + + + + + Export + + + + + dBFS + + + + + dBV + + + + + dBu + + + + + Vpeak + + + + + Vrms + + + + + V/√Hz + + + + + Sample + + + + + Peak Hold + + + + + Peak Hold Continous + + + + + Min Hold + + + + + Min Hold Continous + + + + + Linear RMS + + + + + Linear dB + + + + + Exponential RMS + + + + + Exponential dB + + + + + Flat top + + + + + Rectangular + + + + + Triangular (Bartlett) + + + + + Hamming + + + + + Hann + + + + + Blackman-Harris + + + + + Kaiser + + + + + Manual + + + + + Peak + + + + + Delta + + + + + Fixed + + + + + Scale/Div + + + + + + Top + + + + + + Bottom + + + + + Hz + + + + + kHz + + + + + MHz + + + + + Frequency Position + + + + + + Comma-separated values files (*.csv) + + + + + + Tab-delimited values files (*.txt) + + + + + + All Files(*) + + + + + Comma-separated values files (*.csv);;Tab-delimited values files (*.txt) + + + + + Snapshot + + + + + Sample: + + + + + Average Sample: + + + + + adiscope::StartStopRangeWidget + + + Start + + + + + Stop + + + + + Center + + + + + Span + + + + + adiscope::ToolLauncher + + + Preferences + + + + + Calibration skipped because already calibrated. + + + + + Calibrated + + + + + Save session + + + + + + Scopy-Files (*.ini) + + + + + Load session + + + + + Click to open the home menu + + + + + Click to disconnect the device + + + + + Click to save the current session + + + + + + Click to load a session + + + + + + Select a device first + + + + + + + Click to connect the device + + + + + Report a bug! + + + + + Connecting... + + + + + Disconnecting... + + + + + Connect + + + + + Calibrating... + + + + + Calibration Failed + + + + + + Disconnect + + + + + Digital decoders support is disabled. Some features may be missing + + + + + There was a problem initializing libsigrokdecode. Some features may be missing + + + + + Calibrating + + + + + adiscope::ToolMenu + + + Oscilloscope + + + + + Spectrum Analyzer + + + + + Network Analyzer + + + + + Signal Generator + + + + + Logic Analyzer + + + + + Pattern Generator + + + + + Digital IO + + + + + Voltmeter + + + + + Power Supply + + + + + Debugger + + + + + Calibration + + + + + adiscope::ToolMenuItem + + + Calibrating... + + + + + adiscope::TriggerSettings + + + Forward Trigger In + + + + + Oscilloscope + + + + + + Logic Analyzer + + + + + + μVolts + + + + + + mVolts + + + + + + Volts + + + + + Level + + + + + Hysteresis + + + + + External Trigger In + + + + + None + + + + + adiscope::UserNotes + + + Note + + + + + Invalid or empty file! + + + + + Path: + + + + + Warning: The file is empty! + + + + + Warning: The path is invalid! + + + + + adiscope::logic::LogicAnalyzer + + + Sample Rate + + + + + Nr of samples + + + + + Delay + + + + + Transparency + + + + + Select a decoder to add + + + + + External Trigger In + + + + + Oscilloscope + + + + + Comma-separated values files (*.csv) + + + + + Tab-delimited values files (*.txt) + + + + + Value Change Dump(*.vcd) + + + + + All Files(*) + + + + + Export + + + + + adiscope::prop::Bool + + + + Querying config key %1 resulted in %2 + + + + + adiscope::prop::Double + + + + Querying config key %1 resulted in %2 + + + + + adiscope::prop::Enum + + + + Querying config key %1 resulted in %2 + + + + + adiscope::prop::Int + + + + Querying config key %1 resulted in %2 + + + + + adiscope::prop::String + + + + Querying config key %1 resulted in %2 + + + + + dioChannel + + + Form + + + + + + 0 + + + + + in + + + + + out + + + + + 1 + + + + + dioElement + + + Form + + + + + 0 - 7 + + + + + Individual + + + + + Group + + + + + in + + + + + out + + + + + 127 + + + + + scriptedBinaryCounter + + + Form + + + + + PulseScript + + + + + NumberOfPulses + + + + + Samples/Pulse + + + + + Hi + + + + + Lo + + + + + Frequency: + + + + + PushButton + + + + + INVALID + + + + diff --git a/resources/translations/scopy_de.ts b/resources/translations/scopy_de.ts new file mode 100644 index 0000000000..4e758c249c --- /dev/null +++ b/resources/translations/scopy_de.ts @@ -0,0 +1,5967 @@ + + + + + BaseMenu + + + Form + Form + + + + BaseMenuItem + + + Form + Form + + + + BinaryCounterPatternUI + + + Form + Form + + + + Init Value + Anfangswert + + + + + 0 + 0 + + + + Frequency + Frequenz + + + + 1000 + 1000 + + + + Start counter + Zähler starten + + + + End counter + Zähler beenden + + + + 65535 + 65535 + + + + Increment + Zuwachs + + + + 1 + 1 + + + + BitfieldWidget + + + Form + Form + + + + + TextLabel + TextLabel + + + + 0x + 0x + + + + CalibrationTemplate + + + Form + Form + + + + Calibration info here + Kalibrierungsinfo hier + + + + Set + Einstellen + + + + Measured + Gemessen + + + + Enter value here + Geben Sie hier den Wert ein + + + + Restart + Neustart + + + + Next + Nächster + + + + Finish + Fertig + + + + Channel + + + Form + Form + + + + Channel + Kanal + + + + ChannelSettings + + + Form + Form + + + + Channel + Kanal + + + + MATH + + + + + Edit Function + Funktion bearbeiten + + + + HORIZONTAL + + + + + VERTICAL + VERTIKAL + + + + SETTINGS + EINSTELLUNGEN + + + + CH Thickness + CH Dicke + + + + 0.5 + 0.5 + + + + + + 1 + 1 + + + + 1.5 + 1.5 + + + + 2 + 2 + + + + 2.5 + 2.5 + + + + 3 + 3 + + + + 3.5 + 3.5 + + + + 4 + 4 + + + + 4.5 + 4.5 + + + + 5 + 5 + + + + Memory depth + Speichertiefe + + + + Probe +Attenuation + Tastkopfdämpfung + + + + 0.1X + 0.1X + + + + 1X + 1X + + + + 10X + 10X + + + + 100X + 100X + + + + Curve Style + Kurvenstil + + + + Lines + Linien + + + + Dots + Punkte + + + + Steps + Schritte + + + + Sticks + Sticks + + + + Smooth + Glatt + + + + Software +AC Coupling + + + + + Filter 1 - Enabled + Filter 1 - Aktiviert + + + + + TC + TC + + + + + Gain + Dazugewinnen + + + + + 0 + 0 + + + + Filter 2 - Enabled + Filter 2 - Aktiviert + + + + Autoset + Autoset + + + + Snapshot + Schnappschuss + + + + Connect + + + Form + Form + + + + URI (Hostname) + URI (Hostname) + + + + Connect + Verbinden + + + + Context info + Kontextinfo + + + + ConstantPatternUI + + + Form + Form + + + + Constant + Konstante + + + + 0 + 0 + + + + 1 + 1 + + + + CursorReadouts + + + Form + Form + + + + Δt = + Δt = + + + + + 0.000ms + 0,000ms + + + + CurT2 = + CurT2 = + + + + 1/Δt = + 1/Δt = + + + + - 000.000 ms + - 000.000 ms + + + + - 000.000 mHz + - 000.000 mHz + + + + CurT1 = + CurT1 = + + + + CurV2 + CurV2 + + + + ΔV + + + + + CurV1 + CurV1 + + + + + 000.000 mV + 000.000 mV + + + + - 000.000 mV + - 000.000 mV + + + + + + = + = + + + + CursorsSettings + + + Form + Form + + + + Cursors + Cursor + + + + Normal + Normal + + + + Track + Spur + + + + 0 + 0 + + + + HORIZONTAL + + + + + VERTICAL + VERTIKAL + + + + CURSOR READOUTS + + + + + Transparency 0% + Transparenz 0% + + + + Position + Position + + + + CustomPlotPositionButton + + + Form + Form + + + + DMM + + + + MAX + MAX + + + + + MIN + MIN + + + + + VDC + VDC + + + + Run + Run + + + + Channel 1 + Kanal 1 + + + + + DC (Direct Current) + DC (Gleichstrom) + + + + + AC (20 Hz - 40 kHz) + AC (20 Hz - 40 kHz) + + + + + 1s + 1s + + + + + 10s + 10s + + + + + 60s + 60s + + + + + History + Verlauf + + + + + Line thickness + Dicke der Linie + + + + + 0.5 + 0.5 + + + + + 1 + 1 + + + + + 1.5 + 1.5 + + + + + 2 + 2 + + + + + 2.5 + 2.5 + + + + + 3 + 3 + + + + + 3.5 + 3.5 + + + + + 4 + 4 + + + + + 4.5 + 4.5 + + + + + 5 + 5 + + + + Channel 2 + Kanal 2 + + + + PEAK HOLD + + + + + Reset + Zurücksetzen + + + + DATA LOGGING + + + + + Browse + Durchsuchen + + + + Append + Anhängen + + + + Choose a file + Wähle eine Datei aus + + + + Overwrite + Überschreiben + + + + DbClickButtons + + + Form + Form + + + + 1 + 1 + + + + 2 + 2 + + + + 3 + 3 + + + + 4 + 4 + + + + 5 + 5 + + + + Debugger + + + MainWindow + Hauptfenster + + + + SCRIPTING ENGINE + SCRIPTING ENGINE + + + + Load Script + Skript laden + + + + Run + Run + + + + Filename + Dateiname + + + + + Read + Lesen + + + + Device + Gerät + + + + New Window + Neues Fenster + + + + + Write + Schreiben + + + + + Value: + Wert: + + + + DEVICE SELECTION + GERÄTEAUSWAHL + + + + Detailed Register Map + Detaillierte Registerkarte + + + + Address: + Adresse: + + + + 0x0000 + 0x0000 + + + + Display mode: + Anzeigemodus: + + + + <value> + <Wert> + + + + + 0x + 0x + + + + Description: + Beschreibung: + + + + Default Value: + Standardwert: + + + + Source: + Quelle: + + + + Enable AutoRead + Aktiviere AutoRead + + + + REGISTER MAP SETTINGS + KARTENEINSTELLUNGEN REGISTRIEREN + + + + DetachDragZone + + + Form + Form + + + + Drag here to detach! + Zum Abnehmen hierher ziehen! + + + + Device + + + Form + Form + + + + DigitalIO + + + Form + Form + + + + Run + Run + + + + DigitalIoMenu + + + Form + Form + + + + PollingRate + Abfragerate + + + + 1000 + 1000 + + + + Enable Outputs + Ausgänge aktivieren + + + + DigitalTriggerSettings + + + Form + Form + + + + Trigger Settings + Trigger-Einstellungen + + + + Trigger mode + Trigger-Mode + + + + auto + auto + + + + normal + normal + + + + Trigger Logic + Trigger Logik + + + + OR + ODER + + + + AND + UND + + + + EXTERNAL TRIGGER + EXTERNER TRIGGER + + + + Source + Quelle + + + + Condition + Bedingung + + + + None + Keiner + + + + EXTERNAL TRIGGER OUT + EXTERNER TRIGGER AUS + + + + DragZone + + + Form + Form + + + + EmptyPatternUI + + + Form + Form + + + + ExportSettings + + + Form + Form + + + + EXPORT + + + + + Export All + Alle exportieren + + + + Export + Export + + + + FrequencyPatternUI + + + Form + Form + + + + Frequency + Frequenz + + + + 1000 + 1000 + + + + GenericJSPatternUI + + + Form + Form + + + + Script status + Skriptstatus + + + + Clear console + Ausgabe zurücksetzen + + + + HomepageControls + + + Form + Form + + + + I2CPatternUI + + + Form + Form + + + + R + R + + + + W + W + + + + Read/Write + Lesen/Schreiben + + + + MSB First + MSB zuerst + + + + Address + Adresse + + + + Inter frame space + Zwischenrahmenraum + + + + Data + Daten + + + + InfoPage + + + Form + Form + + + + Forget device + Gerät vergessen + + + + Identify + Identifizieren + + + + Connect + Verbinden + + + + Calibrate + Kalibrieren + + + + InfoWidget + + + Form + Form + + + + Move + Bewegung + + + + InstrumentNotes + + + Form + Form + + + + Notes + Anmerkungen + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html> + + + + + Insert notes here + Fügen Sie hier Notizen ein + + + + LAChannelGroup + + + Form + Form + + + + DIO + DIO + + + + + 12 + 12 + + + + None + Keiner + + + + LAChannelManager + + + Form + Form + + + + LAManagerHeader + + + Form + Form + + + + View + Ansicht + + + + Name + Name + + + + DIO + DIO + + + + Trigger + Trigger + + + + Select + Wählen + + + + LARequiredChannel + + + Form + Form + + + + Settings + die Einstellungen + + + + + Role + Rolle + + + + LASettingsWidget + + + Form + Form + + + + REQUIRED + BENÖTIGT + + + + OPTIONAL + OPTIONAL + + + + OPTIONS + OPTIONEN + + + + LChannelSettings + + + Form + Form + + + + BG Color + Hintergrund Farbe + + + + Edge Color + Kantenfarbe + + + + Low Color + Niedrige Farbe + + + + High Color + Hohe Farbe + + + + SETTINGS + Einstellungen + + + + COLOR SETTINGS + Frabeinstellungen + + + + Name + Name + + + + Thickness + Dicke + + + + 1 + 1 + + + + 1.5 + 1.5 + + + + 2 + 2 + + + + 2.5 + 2.5 + + + + 3 + 3 + + + + 3.5 + 3.5 + + + + 4 + 4 + + + + 4.5 + 4.5 + + + + 5 + 5 + + + + LFSRPatternUI + + + Form + Form + + + + + 0x0001 + 0x0001 + + + + Generator Polynomial + Generatorpolynom + + + + Start State + Startstatus + + + + Period + Zeitraum + + + + LogicAnalyzer + + + Scopy Logic Analyzer + Scopy Logic Analyzer + + + + Group + Gruppe + + + + + Channel Settings + Kanaleinstellungen + + + + + - + - + + + + Name + Name + + + + 1 + 1 + + + + Trace Height + Tracehöhe + + + + GROUP + GRUPPIERE + + + + Stack Decoder: + Stapeldecoder: + + + + Trigger Settings + Trigger-Einstellungen + + + + Trigger mode + Trigger-Mode + + + + auto + auto + + + + normal + normal + + + + Trigger Logic + Trigger Logik + + + + EXTERNAL TRIGGER + EXTERNER TIGGER + + + + "Warning: This feature is not supported on the current firmware version!" + "Warnung: Diese Funktion wird in der aktuellen Firmware-Version nicht unterstützt!" + + + + Source + Quelle + + + + Condition + Bedingung + + + + General Settings + Allgemeine Einstellungen + + + + OneShot + OneShot + + + + AVAILABLE CHANNELS + VERFÜGBARE KANÄLE + + + + DECODERS + + + + + Close + Schließen + + + + Print + Drucken + + + + Stream + Strom + + + + Cursors + Cursor + + + + + Trigger + Trigger + + + + ManualCalibration + + + Form + Form + + + + Load Calibration + Kalibrierung laden + + + + Save Calibration + Kalibrierung speichern + + + + Run automatic + Automatisch ausführen + + + + MarkerTable + + + Form + Form + + + + Math + + + Form + Form + + + + f(t) = + + + + + cos + cos + + + + 2 + 2 + + + + 7 + 7 + + + + , + , + + + + 3 + 3 + + + + ← + + + + + ( + ( + + + + exp + exp + + + + 1 + 1 + + + + 8 + 8 + + + + - + - + + + + / + / + + + + * + * + + + + e + e + + + + C + C + + + + 0 + 0 + + + + 6 + 6 + + + + ) + ) + + + + log + log + + + + t + t + + + + + + + + + + + 9 + 9 + + + + tan + tan + + + + ^ + ^ + + + + 4 + 4 + + + + Apply + Anwenden + + + + pi + pi + + + + 5 + 5 + + + + sin + sin + + + + MathPanel + + + Form + Form + + + + Add channel + Kanal hinzufügen + + + + MeasureSettings + + + Form + Form + + + + Measure + Messen + + + + Channel + Kanal + + + + MEASUREMENTS + MESSUNGEN + + + + Counter + Zähler + + + + Display All + Alle anzeigen + + + + + Delete All + Alles löschen + + + + STATISTICS + STATISTIKEN + + + + Reset + Zurücksetzen + + + + CUSTOM SELECTION + Benutzerdefinierte Auswahl + + + + Enable + Aktivieren + + + + GATING SETTINGS + EINSTELLUNGEN + + + + MeasurementsPanel + + + Form + Form + + + + NetworkAnalyzer + + + Print + Drucken + + + + Current Frequency: + Aktuelle Frequenz: + + + + Sample: + + + + + Average: + Mittelwert: + + + + Phase (°) + Phase (°) + + + + Magnitude (dB) + Magnitude (dB) + + + + ° + ° + + + + 10 + 10 + + + + Settings + die Einstellungen + + + + + REFERENCE + REFERENZ + + + + Channel 1 + Kanal 1 + + + + Channel 2 + Kanal 2 + + + + 0 + 0 + + + + Gain Mode + Verstärkungsmodus + + + + Automatic + Automatisch + + + + Low + Niedrig + + + + High + Hoch + + + + RESPONSE + RESPONSE + + + + DC Filtering + DC-Filterung + + + + + On + An + + + + + Off + Aus + + + + SWEEP + SWEEP + + + + Logarithmic + Logarithmisch + + + + Linear + Linear + + + + Average + Durchschnittlich + + + + + Apply + Anwenden + + + + Periods + Perioden + + + + DISPLAY + DARSETELLUNG + + + + Delta Label + Delta Label + + + + BUFFER PREVIEWER + + + + + ViewInOsc + ViewInOsc + + + + Previous + Bisherige + + + + Next + Nächste + + + + General Settings + Allgemeine Einstellungen + + + + PLOT + + + + + Type + Art + + + + Bode + Bode + + + + Nyquist + Nyquist + + + + Nichols + Nichols + + + + Line thickness + Dicke der Linie + + + + 0.5 + 0.5 + + + + 1 + 1 + + + + 1.5 + 1.5 + + + + 2 + 2 + + + + 2.5 + 2.5 + + + + 3 + 3 + + + + 3.5 + 3.5 + + + + 4 + 4 + + + + 4.5 + 4.5 + + + + 5 + 5 + + + + EXPORT + + + + + Export + Export + + + + Import + Importieren + + + + Snapshot + Schnappschuss + + + + Remove Reference + Referenz entfernen + + + + Cursors + Cursor + + + + CURSOR READOUTS + CURSOR READOUTS + + + + Transparency 0% + Transparenz 0% + + + + Position + Position + + + + Cursors + + + + + NetworkAnalyzerBufferViewer + + + Form + Form + + + + Note + + + TextLabel + TextLabel + + + + NumberPatternUI + + + Form + Form + + + + Number + Nummer + + + + OscGeneralSettings + + + GeneralSettings + Allgemeine Einstellungen + + + + General settings + Allgemeine Einstellungen + + + + VIEWS + ANSICHTEN + + + + FFT + FFT + + + + X-Y + X-Y + + + + Histogram + Histogramm + + + + X-Y + + + + + Y-Axis + Y-Achse + + + + X-Axis + X-Achse + + + + dots + Punkte + + + + lines + Linien + + + + X-Y Line thickness + X-Y Linienstärke + + + + 1 + 1 + + + + 2 + 2 + + + + 3 + 3 + + + + 4 + 4 + + + + 5 + 5 + + + + 6 + 6 + + + + 7 + 7 + + + + 8 + 8 + + + + 9 + 9 + + + + 10 + 10 + + + + Oscilloscope + + + Scopy Oscilloscope + Scopy-Oszilloskop + + + + Print + Drucken + + + + Cursors + Cursor + + + + Measure + Messen + + + + Trigger + Trigger + + + + Close + Schließen + + + + PGCGSettings + + + Form + Form + + + + TextLabel + TextLabel + + + + Pattern + Muster + + + + Output + Ausgabe + + + + PP + PP + + + + OD + OD + + + + CLOCK + TAKT + + + + SETTINGS + EINSTELLUNGEN + + + + Name + Name + + + + Thickness + Dicke + + + + 1 + 1 + + + + 1.5 + 1.5 + + + + 2 + 2 + + + + 2.5 + 2.5 + + + + 3 + 3 + + + + 3.5 + 3.5 + + + + 4 + 4 + + + + 4.5 + 4.5 + + + + 5 + 5 + + + + COLOR SETTINGS + FARBEINSTELLUNGEN + + + + BG Color + Hintergrund Farbe + + + + Edge Color + Kantenfarbe + + + + Low Color + Niedrige Farbe + + + + High Color + Hohe Farbe + + + + PGChannel + + + Form + Form + + + + TextLabel + TextLabel + + + + PGChannelGroup + + + Form + Form + + + + TextLabel + TextLabel + + + + 12 + 12 + + + + PGChannelManager + + + Form + Form + + + + PGChannelManagerHeader + + + Form + Form + + + + Enable + Aktivieren + + + + Name + Name + + + + DIO + DIO + + + + Select + Wählen + + + + PGSettings + + + Form + Form + + + + Settings + die Einstellungen + + + + Autoset + Autoset + + + + Sample Rate + Samplerate + + + + Buffer Size + Puffergröße + + + + ExternalClock + Externer Takt + + + + External Clock Frequency + Externe Taktfrequenz + + + + Reset Instrument + Instrument zurücksetzen + + + + PatternGenerator + + + Scopy Pattern Generator + Scopy Pattern Generator + + + + Print + Drucken + + + + Group + Gruppe + + + + + Channel Settings + Kanaleinstellungen + + + + 1 + 1 + + + + Trace Height + Tracehöhe + + + + Name + Name + + + + Open-Drain + Open-Drain + + + + Push-Pull + Push-Pull + + + + GROUP + GRUPPIEREN + + + + Pattern + Muster + + + + Trigger Settings + Trigger-Einstellungen + + + + Trigger mode + Trigger-Mode + + + + auto + auto + + + + normal + normal + + + + Trigger Logic + Trigger Logik + + + + EXTERNAL TRIGGER + EXTERNER TRIGGER + + + + Source + Quelle + + + + Condition + Bedingung + + + + - + - + + + + General Settings + Allgemeine Einstellungen + + + + AVAILABLE CHANNELS + VERFÜGBARE KANÄLE + + + + Cursors + Cursor + + + + Trigger + Trigger + + + + Close + Schließen + + + + PowerController + + + Scopy Power Control + Scopy Power Control + + + + + Set + Eingestellt + + + + + Measure + Gemessen + + + + + + + VDC + VDC + + + + Tracking ratio control + Steuerung des Nachführungsverhältnisses + + + + Independent + Unabhängig + + + + Tracking + Nachführung + + + + 100 + 100 + + + + % + % + + + + Positive output + Positiver Ausgang + + + + + Enable + Aktivieren + + + + Negative output + Negativer Ausgang + + + + Preferences + + + Form + Form + + + + GENERAL + ALLGEMEIN + + + + OSCILLOSCOPE + OSZILLOSKOP + + + + Enable labels on the plot + Beschriftungen im Plot aktivieren + + + + Enable graticule + Raster aktivieren + + + + Enable mini histogram + Aktiviere das Mini-Histogramm + + + + Enable all instrument notes + Aktiviere alle Instrumenten Hinweise + + + + Language (requires app restart) + Sprache (erfordert einen Neustart der App) + + + + Restart the application for changes to take effect + +Starten Sie die Anwendung neu, damit die Änderungen wirksam werden + + + + Attempt temperature-based calibration (EXPERIMENTAL) + Versuch einer temperaturbasierten Kalibrierung (EXPERIMENTELL) + + + + Enable animations + Animationen aktivieren + + + + 1 + 1 + + + + Run external scripts (Experimental) + Führe externe Skripte aus (experimentell) + + + + SPECTRUM ANALYZER + + + + + Only search marker peaks in visible domain + Nur Suchmarker-Peaks im sichtbaren Bereich + + + + Double click to detach a tool + Doppelklicken um ein Werkzeug abzunehmen + + + + Save session when closing Scopy + Sitzung beim Schließen von Scopy speichern + + + + NETWORK ANALYZER + NETZWERK ANALYZER + + + + Always display 0db value on graph + Zeige im Diagramm immer den Wert 0 dB an + + + + Scriptable manual calibration + Skriptfähige manuelle Kalibrierung + + + + Show advanced device information + Erweiterte Geräteinformationen anzeigen + + + + LOGIC ANALYZER + LOGIK ANALYZER + + + + Display sampling points when zoomed + Zeige beim Zoomen Abtastpunkte an + + + + SIGNAL GENERATOR + + + + + Number of displayed periods + Anzahl dargestellter Perioden + + + + Enable digital decoders + Aktiviere digitale Decoder + + + + Enable sample rate filters + Aktiviere Abtastratenfilter + + + + Show ADC digital filter config + ADC-Digitalfilterkonfiguration anzeigen + + + + DEBUG + DEBUGGEN + + + + Enable Debug Messages (Only for Debugging, Bugreporting) + Debug-Meldungen aktivieren (nur zum Debuggen, Fehlerberichterstattung) + + + + Enable Debug Instrument + Debug-Instrument aktivieren + + + + Enable user notes in main page + Aktiviere Benutzerhinweise auf der Hauptseite + + + + Skip calibration if already calibrated (cal values are not default) + Kalibrierung überspringen, falls bereits kalibriert (Kalibrierungswerte sind nicht Standard) + + + + Reset Scopy + Scopy zurücksetzen + + + + PulsePatternUI + + + Form + Form + + + + Low + Low + + + + + + + 0 + 0 + + + + High + High + + + + 100 + 100 + + + + Counter Init + Zähler Init + + + + Delay + Verzögern + + + + + 1 + 1 + + + + Delay polarity + Polarität verzögern + + + + Number of pulses + Anzahl der Impulse + + + + QObject + + + Period + Zeitraum + + + + Frequency + Frequenz + + + + Min + Min + + + + Max + Max + + + + Peak-peak + Peak-Peak + + + + Mean + Mittelwert + + + + Cycle Mean + Zyklusmittelwert + + + + RMS + RMS + + + + Cycle RMS + Zyklus RMS + + + + AC RMS + AC RMS + + + + Area + Bereich + + + + Cycle Area + Zyklusbereich + + + + Low + Low + + + + High + High + + + + Amplitude + Amplitude + + + + Middle + Mitte + + + + +Over + +Über + + + + -Over + -Über + + + + Rise + Anstieg + + + + Fall + Fallen + + + + +Width + +Breite + + + + -Width + -Breite + + + + +Duty + +Tasverhältnis + + + + -Duty + -Tasverhältnis + + + + RegisterWidget + + + Form + Form + + + + RunSingleWidget + + + Form + Form + + + + Run + Run + + + + Single + Single + + + + SPIPatternUI + + + Form + Form + + + + MSB First + MSB zuerst + + + + + + 1 + 1 + + + + + + 0 + 0 + + + + CLK Phase + CLK-Phase + + + + CS Polarity + CS Polarität + + + + CLK Polarity + CLK-Polarität + + + + Bytes per frame + Bytes pro Frame + + + + Inter frame space + Zwischenrahmenraum + + + + Data + Daten + + + + SignalGenerator + + + Scopy Signal Generator + Scopy-Signalgenerator + + + + Constant + Konstante + + + + Waveform + Wellenform + + + + Sine + Sinus + + + + Square + Quadrat + + + + Triangle + Dreieck + + + + Trapezoidal + Trapezförmig + + + + Rising Ramp Sawtooth + Steigende Rampe Sägezahn + + + + Falling Ramp Sawtooth + Fallende Rampe Sägezahn + + + + Stair Step + Treppenstufe + + + + TIMING + +ZEITLICHE KOORDINIERUNG + + + + Buffer + Puffer + + + + FILE + DATEI + + + + Path + Pfad + + + + + No file loaded + Keine Datei geladen + + + + Format + Format + + + + Size + Größe + + + + 0 samples + 0 Samples + + + + Load file + Lade Datei + + + + Channel + Kanal + + + + SCALING + SKALIERUNG + + + + Math + Mathematik + + + + NOISE + RAUSCHEN + + + + None + Keiner + + + + Uniform + Uniform + + + + Gaussian + Gaußsch + + + + Laplacian + Laplace + + + + Impulse + Impuls + + + + OTHER + ANDERE + + + + Line thickness + Dicke der Linie + + + + 0.5 + 0.5 + + + + 1 + 1 + + + + 1.5 + 1.5 + + + + 2 + 2 + + + + 2.5 + 2.5 + + + + 3 + 3 + + + + 3.5 + 3.5 + + + + 4 + 4 + + + + 4.5 + 4.5 + + + + 5 + 5 + + + + Close + Schließen + + + + SpectrumAnalyzer + + + Form + Form + + + + Print + Drucken + + + + Preset + Voreinstellung + + + + + dBFS + dBFS + + + + Sample: + Stichprobe: + + + + Average Sample: + + + + + Marker_n 0.000 Hz 0dB + Marker_n 0.000 Hz 0dB + + + + Channel + Kanal + + + + Type + Art + + + + Sample + Sample + + + + and other types + und andere Arten + + + + Window + Fenster + + + + Uniform (none) + Uniform (keine) + + + + and others windows + und andere Fenster + + + + Averaging + Mittelwertbildung + + + + Apply + Anwenden + + + + CH Thickness + CH Dicke + + + + 0.5 + 0.5 + + + + 1 + 1 + + + + 1.5 + 1.5 + + + + 2 + 2 + + + + 2.5 + 2.5 + + + + 3 + 3 + + + + 3.5 + 3.5 + + + + 4 + 4 + + + + 4.5 + 4.5 + + + + 5 + 5 + + + + History + Verlauf + + + + Gain mode + Verstärkungsmodus + + + + + Low + Niedrig + + + + High + Hoch + + + + Snapshot + Schnappschuss + + + + General settings + Allgemeine Einstellungen + + + + Export + Export + + + + + Sweep + SWEEP + + + + Logarithmic + Logarithmisch + + + + Linear + Linear + + + + FREQUENCY + FREQUENZ + + + + AMPLITUDE + AMPLITUDE + + + + Resolution BW + Auflösung BW + + + + Units + Einheiten + + + + + Markers + Marker + + + + Settings + die Einstellungen + + + + MARKER + MARKER + + + + Normal + Normal + + + + Delta + Delta + + + + Peak + + + + + + Peak + Maximum + + + + + Ampl + Ampl + + + + GENERAL + ALLGEMEIN + + + + Marker Table + Markertabelle + + + + Import Reference Channels + Referenzkanäle importieren + + + + No file selected! + Keine Datei ausgewählt! + + + + Browse + Durchsuche + + + + Import + Importieren + + + + SpinBoxA + + + Form + Form + + + + StartStopRangeWidget + + + Form + Form + + + + Statistic + + + Form + Form + + + + Avg: + Durchschn: + + + + + + 0.000 + 0.000 + + + + Min: + Min: + + + + Max: + Max: + + + + 1 + 1 + + + + Measurement + Messung + + + + StatisticsPanel + + + Form + Form + + + + ToolLauncher + + + Scopy + Scopy + + + + Home + + + + + Save + Speichern + + + + Load + Laden + + + + Preferences + Einstellungen + + + + Notes + Anmerkungen + + + + Quit + Verlassen + + + + ADC Offset + ADC-Offset + + + + ADC Gain + ADC Gain + + + + Reset ADC Calibration + ADC-Kalibrierung zurücksetzen + + + + TriggerSettings + + + Form + Form + + + + Trigger Settings + Trigger-Einstellungen + + + + Trigger mode + Trigger-Mode + + + + auto + auto + + + + normal + normal + + + + + Source + Quelle + + + + INTERNAL (ANALOG) + INTERN (ANALOG) + + + + + Condition + Bedingung + + + + + Rising Edge + Steigende Flanke + + + + + Falling Edge + Fallende Flanke + + + + + Low + Low + + + + + High + High + + + + This feature is not supported while the Mixed Signal View is enabled! + Diese Funktion wird nicht unterstützt, solange die gemischte Signalansicht aktiviert ist! + + + + DIGITAL + DIGITAL + + + + Any Edge + Beliebige Flanke + + + + M2K daisychain position + M2K Daisychain Position + + + + TRIGGER LOGIC + TRIGGER LOGIK + + + + Analog - Digital + Analog Digital + + + + Digital OR Analog + Digital ODER Analog + + + + Digital AND Analog + Digital UND Analog + + + + Digital XOR Analog + Digital XOR Analog + + + + !Digital OR Analog + !Digital ODER Analog + + + + !Digital AND Analog + !Digital UND Analog + + + + !Digital XOR Analog + !Digital XOR Analog + + + + EXTERNAL TRIGGER OUT + EXTERNER TRIGGER AUSGANG + + + + UARTPatternUI + + + Form + Form + + + + Stop + Stop + + + + 1 + 1 + + + + 2 + 2 + + + + 3 + 3 + + + + Baud + Baud + + + + + 9600 + 9600 + + + + 1200 + 1200 + + + + 2400 + 2400 + + + + 4800 + 4800 + + + + 14400 + 14400 + + + + 19200 + 19200 + + + + 28800 + 28800 + + + + 38400 + 38400 + + + + 57600 + 57600 + + + + 115200 + 115200 + + + + 230400 + 230400 + + + + Parity + Parity + + + + NONE + KEINER + + + + ODD + Ungerade + + + + EVEN + Gerade + + + + MARK + MARK + + + + SPACE + SPACE + + + + Parameters + Parameter + + + + Data to Send + Zu sendende Daten + + + + UserNotePage + + + Form + Form + + + + Remove note + Notiz entfernen + + + + UserNotes + + + Form + Form + + + + Save + Speichern + + + + File path + Dateipfad + + + + Browse + Durchsuche + + + + Note name + Name notieren + + + + WalkingPatternUI + + + Form + Form + + + + Walking level + Gehhöhe + + + + 0 + 0 + + + + + 1 + 1 + + + + Frequency + Frequenz + + + + 1000 + 1000 + + + + Direction + Richtung + + + + Right + Recht + + + + Left + Links + + + + Length + Länge + + + + adiscope::BinaryCounterPatternUI + + + Frequency + Frequenz + + + + adiscope::CapturePlot + + + + + + + + Zoom: + + + + + + /div + / div + + + + Waiting + Warten + + + + Triggered + Ausgelöst + + + + Stop + Stop + + + + Auto + Auto + + + + adiscope::ClockPatternUI + + + Frequency + Frequenz + + + + Phase + Phase + + + + Duty + Tastverhältnis + + + + adiscope::ConnectDialog + + + + Connect + Verbinden + + + + Waiting for connection ... + Auf Verbindung warten ... + + + + + Context info + Kontextinfo + + + + Add + Hinzufügen + + + + Warning + Warnung + + + + Error: Unable to find host: No such host is known! + Fehler: Host kann nicht gefunden werden: Ein solcher Host ist nicht bekannt! + + + + adiscope::CustomSwitch + + + on + an + + + + off + aus + + + + adiscope::DMM + + + Timer + Timer + + + + Stop + Stop + + + + Run + Run + + + + Export + Export + + + + Comma-separated values files (*.csv);;All Files(*) + Durch Kommas getrennte Wertedateien (* .csv) ;; Alle Dateien (*) + + + + No file selected + Keine Datei ausgewählt + + + + + File is open in another program + Die Datei ist in einem anderen Programm geöffnet + + + + + Choose a file + Wähle eine Datei aus + + + + adiscope::Debugger + + + Save File + Datei speichern + + + + JavaScript (*.js) + JavaScript (*.js) + + + + adiscope::DigitalIO + + + Stop + Stop + + + + Run + Run + + + + adiscope::ExportSettings + + + Channels + Kanäle + + + + Name + Name + + + + Export + Export + + + + adiscope::GrayCounterPatternUI + + + Frequency + Frequenz + + + + adiscope::I2CPatternUI + + + Frequency + Frequenz + + + + adiscope::ImportPatternUI + + + Frequency + Frequenz + + + + Open file + Datei öffnen + + + + Import selected channels + Importieren Sie ausgewählte Kanäle + + + + No file selected + Keine Datei ausgewählt + + + + Export + Export + + + + Comma-separated values files (*.csv);;Tab-delimited values files (*.txt) + Durch Kommas getrennte Wertedateien (* .csv); Tabulatorgetrennte Wertedateien (* .txt) + + + + adiscope::ImportSettings + + + Import + Importieren + + + + Import all + Alle importieren + + + + adiscope::InfoPage + + + Error: Connection failed! + Fehler: Verbindung fehlgeschlagen! + + + + Connected + Verbunden + + + + Your hardware revision does not support the identify feature + Ihre Hardwareversion unterstützt die Identifizierungsfunktion nicht + + + + adiscope::M2kDeviceWidget + + + M2K + M2K + + + + adiscope::M2kInfoPage + + + Not connected + Nicht verbunden + + + + Always disconnect analog inputs/outputs before calibration + Trennen Sie vor der Kalibrierung immer die analogen Ein-/Ausgänge + + + + Can't identify this device. + Dieses Gerät kann nicht identifiziert werden. + + + + Can't identify device. Please try to update your firmware! + Gerät kann nicht identifiziert werden. Bitte versuchen Sie Ihre Firmware zu aktualisieren! + + + + Your hardware revision does not support the identify feature + Ihre Hardwareversion unterstützt die Identifizierungsfunktion nicht + + + + adiscope::ManualCalibration + + + Save File + Datei speichern + + + + ini (*.ini) + ini (*.ini) + + + + + °C + + + + + adiscope::MarkerTable + + + Id + Id + + + + Marker + Marker + + + + Channel + Kanal + + + + Frequency + Frequenz + + + + Magnitude + Magnitude + + + + Type + Art + + + + adiscope::MeasureSettings + + + Horizontal + Horizontal + + + + + Name + Name + + + + + Measure + Messen + + + + + Stats + Statistiken + + + + Vertical + Vertikal + + + + + Recover + Wiederherstellen + + + + + Delete All + Alles löschen + + + + adiscope::NetworkAnalyzer + + + + Stopped + Gestoppt + + + + Frequency (Hz) + Frequenz (Hz) + + + + Magnitude(dB) + Größe (dB) + + + + Phase (°) + Phase (°) + + + + Samples count + Samples zählen + + + + Samps/decade + Samps/Dekade + + + + Step + Schritt + + + + Amplitude + Amplitude + + + + Offset + Offset + + + + Max. Magnitude + Max. Magnitude + + + + Min. Magnitude + Min. Magnitude + + + + Max. Phase + Max. Phase + + + + Min. Phase + Min. Phase + + + + + Settling time + Einschwingzeit + + + + Before Buffer + Vor dem Puffer + + + + After Buffer + Nach dem Puffer + + + + + Sample: + + + + + + Current Frequency: + Momentane Frequenz + + + + + DC Voltage: + Gleichspannung + + + + + Response channel voltage < 50mV! + Antwortkanalspannung <50mV! + + + + + Low + Niedrig + + + + + High + Hoch + + + + + Gain Mode: + + + + + Transparency + Transparenz + + + + Image + Bild + + + + Save to + Speichern unter + + + + Import + Importieren + + + + Comma-separated values files (*.csv);;Tab-delimited values files (*.txt) + Durch Kommas getrennte Wertedateien (* .csv); Tabulatorgetrennte Wertedateien (* .txt) + + + + Comma-separated values files (*.csv) + Durch Kommas getrennte Wertedateien (* .csv) + + + + Tab-delimited values files (*.txt) + Tabulatorgetrennte Wertedateien (* .txt) + + + + All Files(*) + Alle Dateien(*) + + + + Export + Export + + + + Average: + Mittelwert: + + + + Running + Laufen + + + + Stopping... + Anhalten ... + + + + adiscope::NetworkAnalyzer_API + + + Transparency + Transparenz + + + + adiscope::Oscilloscope + + + + Time Base + Zeitbasis + + + + + Position + Position + + + + Volts/Div + Volts/Div + + + + + Add Channel + Kanal hinzufügen + + + + + + Export + Export + + + + + Comma-separated values files (*.csv) + Durch Kommas getrennte Wertedateien (* .csv) + + + + + Tab-delimited values files (*.txt) + Tabulatorgetrennte Wertedateien (* .txt) + + + + + All Files(*) + Alle Dateien(*) + + + + Transparency + Transparenz + + + + "Warning: This feature is not supported on the current firmware version!" + "Warnung: Diese Funktion wird in der aktuellen Firmware-Version nicht unterstützt!" + + + + * When the Mixed Signal View is enabled the LogicAnalyzer tool will be disabled! +** The trigger can be disabled or set only on the Digital channels or Analog channels, not on both at the same time! + * Wenn die gemischte Signalansicht aktiviert ist, wird das LogicAnalyzer-Tool deaktiviert! +** Der Trigger kann deaktiviert oder nur auf den digitalen oder analogen Kanälen eingestellt werden, nicht auf beiden gleichzeitig! + + + + Math + Mathematik + + + + Browse + Durchsuche + + + + No file selected + Keine Datei ausgewählt + + + + + Reference + Referenz + + + + Logic + Logik + + + + Add channel + Kanal hinzufügen + + + + Import selected channels + Importieren Sie ausgewählte Kanäle + + + + Enable Mixed Signal View + Aktivieren Sie die gemischte Signalansicht + + + + Import + Importieren + + + + Comma-separated values files (*.csv);;Tab-delimited values files (*.txt) + Durch Kommas getrennte Wertedateien (* .csv); Tabulatorgetrennte Wertedateien (* .txt) + + + + + Snapshot + Schnappschuss + + + + Filter 1 - Enable - + Filter 1 - Aktivieren - + + + + Filter 2 - Enable - + Filter 2 - Aktivieren - + + + + + Save + Speichern + + + + adiscope::PowerController + + + + mVolts + mVolt + + + + + Volts + Volt + + + + + Value + Wert + + + + + Disable + Deaktivieren + + + + + Enable + Aktivieren + + + + adiscope::Preferences + + + This change will be applied only after a Scopy reset. + Diese Änderung wird erst nach einem Scopy-Reset angewendet. + + + + By resetting scopy you will lose the current configuration! + Durch das Zurücksetzen von scopy verlieren Sie die aktuelle Konfiguration! + + + + Do you want to reset? + Möchten Sie zurücksetzen? + + + + Load language + Sprache laden + + + + Language files (*.qm) + Sprachdateien (* .qm) + + + + adiscope::PrintablePlot + + + + + + Documents + Unterlagen + + + + Image + Bild + + + + Export File Name + Dateinamen exportieren + + + + adiscope::PulsePatternUI + + + Sample Rate + Samplerate + + + + adiscope::RandomPatternUI + + + Frequency + Frequenz + + + + adiscope::RunSingleWidget + + + + + Run + Run + + + + + + Single + Single + + + + + + + + Stop + Stop + + + + adiscope::SPIPatternUI + + + Frequency + Frequenz + + + + adiscope::SignalGenerator + + + deg + Grad + + + + π rad + π rad + + + + + + + + ns + ns + + + + + + + + μs + μs + + + + + + + + ms + ms + + + + + + + + s + s + + + + + + Phase + Phase + + + + μVolts p-p + μVolts p-p + + + + mVolts p-p + mVolts p-p + + + + Volts p-p + Volts p-p + + + + + + Amplitude + Amplitude + + + + + + + μVolts + μVolts + + + + + + + + mVolts + mVolt + + + + + + + + Volts + Volt + + + + + Offset + Offset + + + + mHz + mHz + + + + Hz + Hz + + + + kHz + kHz + + + + MHz + MHz + + + + Frequency + Frequenz + + + + Rising + Steigend + + + + Falling + Fallen + + + + Rise Time + Anstiegszeit + + + + Fall Time + Abfallzeit + + + + High Time + Höchste Zeit + + + + Low Time + Niedrige Zeit + + + + + SampleRate + Samplerate + + + + Record Length + Aufzeichnungslänge + + + + Value + Wert + + + + Duty Cycle + Auslastungsgrad + + + + + + samples + + + + + Open File + Datei öffnen + + + + Comma-separated values files (*.csv);;Tab-delimited values files (*.txt);;Waveform Audio File Format (*.wav);;Matlab files (*.mat) + Durch Kommas getrennte Wertedateien (* .csv); Tabulatorgetrennte Wertedateien (* .txt); Wellenform-Audiodateiformat (* .wav); Matlab-Dateien (* .mat) + + + + adiscope::Sismograph + + + Voltage (V) + Spannung (V) + + + + Time (s) + Zeit (en) + + + + adiscope::SpectrumAnalyzer + + + + + + Export + Export + + + + dBFS + dBFS + + + + dBV + dBV + + + + dBu + dBu + + + + Vpeak + Vpeak + + + + Vrms + Vrms + + + + V/√Hz + V/√Hz + + + + Sample + Sample + + + + Peak Hold + Peak Hold + + + + Peak Hold Continous + Peak Hold Continuous + + + + Min Hold + Min Hold + + + + Min Hold Continous + Min Hold Continuous + + + + Linear RMS + Linearer Effektivwert + + + + Linear dB + Linear dB + + + + Exponential RMS + Exponentieller Effektivwert + + + + Exponential dB + Exponentielle dB + + + + Flat top + Flat top + + + + Rectangular + Rechteckig + + + + Triangular (Bartlett) + Dreieckig (Bartlett) + + + + Hamming + Hamming + + + + Hann + Hann + + + + Blackman-Harris + Blackman-Harris + + + + Kaiser + Kaiser + + + + Manual + Manuell + + + + Peak + Maximum + + + + Delta + Delta + + + + Fixed + Fest + + + + Scale/Div + Skala/Div + + + + + Top + Max + + + + + Bottom + Min + + + + Hz + Hz + + + + kHz + kHz + + + + MHz + MHz + + + + Frequency Position + Frequenzposition + + + + + Comma-separated values files (*.csv) + Durch Kommas getrennte Wertedateien (* .csv) + + + + + Tab-delimited values files (*.txt) + Tabulatorgetrennte Wertedateien (* .txt) + + + + + All Files(*) + Alle Dateien(*) + + + + Comma-separated values files (*.csv);;Tab-delimited values files (*.txt) + Durch Kommas getrennte Wertedateien (* .csv); Tabulatorgetrennte Wertedateien (* .txt) + + + + Snapshot + Schnappschuss + + + + Sample: + Stichprobe: + + + + Average Sample: + Durchschnittliche Samples: + + + + adiscope::StartStopRangeWidget + + + Start + Start + + + + Stop + Stop + + + + Center + Center + + + + Span + Spanne + + + + adiscope::ToolLauncher + + + Preferences + Einstellungen + + + + Calibration skipped because already calibrated. + Kalibrierung übersprungen, da bereits kalibriert. + + + + Calibrated + Kalibriert + + + + Save session + Sitzung speichern + + + + + Scopy-Files (*.ini) + Scopy-Dateien (* .ini) + + + + Load session + Sitzung laden + + + + Click to open the home menu + Klicken Sie hier, um das Home-Menü zu öffnen + + + + Click to disconnect the device + Klicken Sie hier, um das Gerät zu trennen + + + + Click to save the current session + Klicken Sie hier, um die aktuelle Sitzung zu speichern + + + + + Click to load a session + Klicken Sie hier, um eine Sitzung zu laden + + + + + Select a device first + Wählen Sie zuerst ein Gerät aus + + + + + + Click to connect the device + Klicken Sie hier, um das Gerät anzuschließen + + + + Report a bug! + Melde einen technischen Fehler! + + + + Connecting... + Anschließen ... + + + + Disconnecting... + Trennen ... + + + + Connect + Verbinden + + + + Calibrating... + Kalibrieren ... + + + + Calibration Failed + Kalibrierung fehlgeschlagen + + + + + Disconnect + Trennen + + + + Digital decoders support is disabled. Some features may be missing + Die Unterstützung für digitale Decoder ist deaktiviert. Einige Funktionen fehlen möglicherweise + + + + There was a problem initializing libsigrokdecode. Some features may be missing + Beim Initialisieren von libsigrokdecode ist ein Problem aufgetreten. Einige Funktionen fehlen möglicherweise + + + + Calibrating + Kalibrieren + + + + adiscope::ToolMenu + + + Oscilloscope + Oszilloskop + + + + Spectrum Analyzer + Spektrumanalysator + + + + Network Analyzer + Netzwerkanalysator + + + + Signal Generator + Signalgenerator + + + + Logic Analyzer + Logikanalysator + + + + Pattern Generator + Mustergenerator + + + + Digital IO + Digital IO + + + + Voltmeter + Voltmeter + + + + Power Supply + Spannungsversorgung + + + + Debugger + Debugger + + + + Calibration + Kalibrierung + + + + adiscope::ToolMenuItem + + + Calibrating... + Kalibrieren ... + + + + adiscope::TriggerSettings + + + Forward Trigger In + Vorwärtstriggereingang + + + + Oscilloscope + Oszilloskop + + + + + Logic Analyzer + Logikanalysator + + + + + μVolts + μVolts + + + + + mVolts + mVolt + + + + + Volts + Volt + + + + Level + Pegel + + + + Hysteresis + Hysterese + + + + External Trigger In + Externer Trigger In + + + + None + Keiner + + + + adiscope::UserNotes + + + Note + Hinweis + + + + Invalid or empty file! + Ungültige oder leere Datei! + + + + Path: + Pfad: + + + + Warning: The file is empty! + Warnung: Die Datei ist leer! + + + + Warning: The path is invalid! + Warnung: Der Pfad ist ungültig! + + + + adiscope::logic::LogicAnalyzer + + + Sample Rate + Samplerate + + + + Nr of samples + Anzahl Samples + + + + Delay + Verzögern + + + + Transparency + Transparenz + + + + Select a decoder to add + Wählen Sie einen Decoder zum Hinzufügen aus + + + + External Trigger In + Externer Trigger In + + + + Oscilloscope + Oszilloskop + + + + Comma-separated values files (*.csv) + Durch Kommas getrennte Wertedateien (* .csv) + + + + Tab-delimited values files (*.txt) + Tabulatorgetrennte Wertedateien (* .txt) + + + + Value Change Dump(*.vcd) + Value Change Dump (*. VCD) + + + + All Files(*) + Alle Dateien(*) + + + + Export + Export + + + + adiscope::prop::Bool + + + + Querying config key %1 resulted in %2 + Das Abfragen des Konfigurationsschlüssels% 1 ergab% 2 + + + + adiscope::prop::Double + + + + Querying config key %1 resulted in %2 + Das Abfragen des Konfigurationsschlüssels% 1 ergab% 2 + + + + adiscope::prop::Enum + + + + Querying config key %1 resulted in %2 + Das Abfragen des Konfigurationsschlüssels% 1 ergab% 2 + + + + adiscope::prop::Int + + + + Querying config key %1 resulted in %2 + Das Abfragen des Konfigurationsschlüssels% 1 ergab% 2 + + + + adiscope::prop::String + + + + Querying config key %1 resulted in %2 + Das Abfragen des Konfigurationsschlüssels% 1 ergab% 2 + + + + dioChannel + + + Form + Form + + + + + 0 + 0 + + + + in + im + + + + out + out + + + + 1 + 1 + + + + dioElement + + + Form + Form + + + + 0 - 7 + 0 - 7 + + + + Individual + Individuell + + + + Group + Gruppe + + + + in + im + + + + out + out + + + + 127 + 127 + + + + scriptedBinaryCounter + + + Form + Form + + + + PulseScript + PulseScript + + + + NumberOfPulses + Anzahl der Impulse + + + + Samples/Pulse + Samples/Puls + + + + Hi + Hi + + + + Lo + Lo + + + + Frequency: + Frequenz: + + + + PushButton + Druckknopf + + + + INVALID + UNGÜLTIG + + + diff --git a/resources/translations/scopy_es.ts b/resources/translations/scopy_es.ts new file mode 100644 index 0000000000..4093120618 --- /dev/null +++ b/resources/translations/scopy_es.ts @@ -0,0 +1,5965 @@ + + + + + BaseMenu + + + Form + + + + + BaseMenuItem + + + Form + + + + + BinaryCounterPatternUI + + + Form + + + + + Init Value + Valor inicial + + + + + 0 + + + + + Frequency + Frecuencia + + + + 1000 + + + + + Start counter + Empezar contador + + + + End counter + terminar contador + + + + 65535 + + + + + Increment + Incremento + + + + 1 + + + + + BitfieldWidget + + + Form + + + + + + TextLabel + + + + + 0x + + + + + CalibrationTemplate + + + Form + + + + + Calibration info here + Información de calibración aquí + + + + Set + Establecer + + + + Measured + Medido + + + + Enter value here + Introducir el valor aqui + + + + Restart + Reiniciar + + + + Next + Próximo + + + + Finish + Terminar + + + + Channel + + + Form + + + + + Channel + Canal + + + + ChannelSettings + + + Form + + + + + Channel + Canal + + + + MATH + MATEMÁTICAS + + + + Edit Function + Editar Funciones + + + + HORIZONTAL + + + + + VERTICAL + + + + + SETTINGS + Ajustes + + + + CH Thickness + CH Grosor + + + + 0.5 + + + + + + + 1 + + + + + 1.5 + + + + + 2 + + + + + 2.5 + + + + + 3 + + + + + 3.5 + + + + + 4 + + + + + 4.5 + + + + + 5 + + + + + Memory depth + Profundidad de la memoria + + + + Probe +Attenuation + Atenuaciones de la sonda + + + + 0.1X + + + + + 1X + + + + + 10X + + + + + 100X + + + + + Curve Style + Estilo de curva + + + + Lines + Líneas + + + + Dots + Puntos + + + + Steps + Pasos + + + + Sticks + Barras + + + + Smooth + Suave + + + + Software +AC Coupling + Acoplamiento de CA por Software + + + + Filter 1 - Enabled + Filtro 1 - Habilitado + + + + + TC + + + + + + Gain + Gano + + + + + 0 + + + + + Filter 2 - Enabled + Filtro 2 - Habilitado + + + + Autoset + Ajuste automático + + + + Snapshot + Instantánea + + + + Connect + + + Form + + + + + URI (Hostname) + URI (Nombre de Host) + + + + Connect + Conectar + + + + Context info + Info de contexto + + + + ConstantPatternUI + + + Form + + + + + Constant + Constante + + + + 0 + + + + + 1 + + + + + CursorReadouts + + + Form + + + + + Δt = + + + + + + 0.000ms + + + + + CurT2 = + + + + + 1/Δt = + + + + + - 000.000 ms + + + + + - 000.000 mHz + + + + + CurT1 = + + + + + CurV2 + + + + + ΔV + + + + + CurV1 + + + + + + 000.000 mV + + + + + - 000.000 mV + + + + + + + = + + + + + CursorsSettings + + + Form + + + + + Cursors + Cursores + + + + Normal + Normal + + + + Track + Rastrear + + + + 0 + + + + + HORIZONTAL + HORIZONTAL + + + + VERTICAL + VERTICAL + + + + CURSOR READOUTS + LECTURAS DEL CURSOR + + + + Transparency 0% + Transparencia 0% + + + + Position + Posición + + + + CustomPlotPositionButton + + + Form + + + + + DMM + + + + MAX + + + + + + MIN + + + + + + VDC + + + + + Run + Ejecutar + + + + Channel 1 + Canal 1 + + + + + DC (Direct Current) + CC (Corriente Continua) + + + + + AC (20 Hz - 40 kHz) + CA (20 Hz - 40 KHz) + + + + + 1s + + + + + + 10s + + + + + + 60s + + + + + + History + Historia + + + + + Line thickness + Grosor de la línea + + + + + 0.5 + + + + + + 1 + + + + + + 1.5 + + + + + + 2 + + + + + + 2.5 + + + + + + 3 + + + + + + 3.5 + + + + + + 4 + + + + + + 4.5 + + + + + + 5 + + + + + Channel 2 + Canal 2 + + + + PEAK HOLD + SOSTENER PICO + + + + Reset + Reiniciar + + + + DATA LOGGING + LOGGING DE DATOS + + + + Browse + Buscar + + + + Append + Adjuntar + + + + Choose a file + Escoge un archivo + + + + Overwrite + Sobrescribir + + + + DbClickButtons + + + Form + + + + + 1 + + + + + 2 + + + + + 3 + + + + + 4 + + + + + 5 + + + + + Debugger + + + MainWindow + VentanaPrincipal + + + + SCRIPTING ENGINE + Motor de Scripting + + + + Load Script + Cragar Script + + + + Run + Ejecutar + + + + Filename + Nombre del archivo + + + + + Read + Leer + + + + Device + Dispositivo + + + + New Window + Nueva Ventana + + + + + Write + Escribir + + + + + Value: + Valor: + + + + DEVICE SELECTION + SELECCIÓN DE DISPOSITIVO + + + + Detailed Register Map + Mapa de Registro Detallado + + + + Address: + Dirección: + + + + 0x0000 + + + + + Display mode: + Modo de visualización: + + + + <value> + <valor> + + + + + 0x + + + + + Description: + Descripción: + + + + Default Value: + Valor por defecto: + + + + Source: + Fuente: + + + + Enable AutoRead + Habilitar Lectura Automática + + + + REGISTER MAP SETTINGS + CONFIGURACIÓN DEL MAPA DE REGISTROS + + + + DetachDragZone + + + Form + + + + + Drag here to detach! + Arrasta aquí para separar! + + + + Device + + + Form + + + + + DigitalIO + + + Form + + + + + Run + Ejecutar + + + + DigitalIoMenu + + + Form + + + + + PollingRate + Tasa de Sondeo + + + + 1000 + + + + + Enable Outputs + Habilitar Salidas + + + + DigitalTriggerSettings + + + Form + + + + + Trigger Settings + Configuración de Disparo + + + + Trigger mode + Modo de disparo + + + + auto + + + + + normal + + + + + Trigger Logic + Lógica de Disparo + + + + OR + + + + + AND + + + + + EXTERNAL TRIGGER + DISPARADOR EXTERNO + + + + Source + Fuente + + + + Condition + Condición + + + + None + Ninguno + + + + EXTERNAL TRIGGER OUT + DISPARADOR EXTERNO SALIDA + + + + DragZone + + + Form + + + + + EmptyPatternUI + + + Form + + + + + ExportSettings + + + Form + + + + + EXPORT + EXPORTAR + + + + Export All + Exportar Todo + + + + Export + Exportar + + + + FrequencyPatternUI + + + Form + + + + + Frequency + frecuencia + + + + 1000 + + + + + GenericJSPatternUI + + + Form + + + + + Script status + Estado del script + + + + Clear console + Consola limpia + + + + HomepageControls + + + Form + + + + + I2CPatternUI + + + Form + + + + + R + L + + + + W + E + + + + Read/Write + Ler/Escribir + + + + MSB First + MSB Primero + + + + Address + Dirección + + + + Inter frame space + Espacio entre frame + + + + Data + Datos + + + + InfoPage + + + Form + + + + + Forget device + Olvidar dispositivo + + + + Identify + Identificar + + + + Connect + Conectar + + + + Calibrate + Calibrar + + + + InfoWidget + + + Form + + + + + Move + Mover + + + + InstrumentNotes + + + Form + + + + + Notes + Notas + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html> + + + + + Insert notes here + Insertar notas aquí + + + + LAChannelGroup + + + Form + + + + + DIO + + + + + + 12 + + + + + None + Ninguno + + + + LAChannelManager + + + Form + + + + + LAManagerHeader + + + Form + + + + + View + Ver + + + + Name + Nombre + + + + DIO + + + + + Trigger + Disparador + + + + Select + Seleccionar + + + + LARequiredChannel + + + Form + + + + + Settings + Configuraciones + + + + + Role + Rol + + + + LASettingsWidget + + + Form + + + + + REQUIRED + NECESARIO + + + + OPTIONAL + OPCIONAL + + + + OPTIONS + OPCIONES + + + + LChannelSettings + + + Form + + + + + BG Color + Color de Fondo + + + + Edge Color + Color del Borde + + + + Low Color + Color Bajo + + + + High Color + Color de Alta + + + + SETTINGS + Configuraciones + + + + COLOR SETTINGS + AJUSTES DE COLOR + + + + Name + Nombre + + + + Thickness + Grosor + + + + 1 + + + + + 1.5 + + + + + 2 + + + + + 2.5 + + + + + 3 + + + + + 3.5 + + + + + 4 + + + + + 4.5 + + + + + 5 + + + + + LFSRPatternUI + + + Form + + + + + + 0x0001 + + + + + Generator Polynomial + Polinomio Generador + + + + Start State + Estado de inicio + + + + Period + Período + + + + LogicAnalyzer + + + Scopy Logic Analyzer + Scopy Analizador Lógico + + + + Group + Grupo + + + + + Channel Settings + Configuración de canal + + + + + - + + + + + Name + Nombre + + + + 1 + + + + + Trace Height + Traza Altura + + + + GROUP + GRUPO + + + + Stack Decoder: + Stack Decodificador: + + + + Trigger Settings + Configuración de Disparo + + + + Trigger mode + Modo de Disparo + + + + auto + + + + + normal + + + + + Trigger Logic + Lógica de Disparo + + + + EXTERNAL TRIGGER + DISPARADOR EXTERNO + + + + "Warning: This feature is not supported on the current firmware version!" + "Aviso: esta función no es compatible con la versión de firmware actual!" + + + + Source + Fuente + + + + Condition + Condición + + + + General Settings + Configuración general + + + + OneShot + + + + + AVAILABLE CHANNELS + CANALES DISPONIBLES + + + + DECODERS + DECODIFICADORES + + + + Close + Cerrar + + + + Print + Imprimir + + + + Stream + + + + + Cursors + Cursores + + + + + Trigger + Disparador + + + + ManualCalibration + + + Form + + + + + Load Calibration + Cargar calibración + + + + Save Calibration + Guardar calibración + + + + Run automatic + Ejecutar automático + + + + MarkerTable + + + Form + + + + + Math + + + Form + + + + + f(t) = + + + + + cos + + + + + 2 + + + + + 7 + + + + + , + + + + + 3 + + + + + ← + + + + + ( + + + + + exp + + + + + 1 + + + + + 8 + + + + + - + + + + + / + + + + + * + + + + + e + + + + + C + + + + + 0 + + + + + 6 + + + + + ) + + + + + log + + + + + t + + + + + + + + + + + 9 + + + + + tan + + + + + ^ + + + + + 4 + + + + + Apply + Aplicar + + + + pi + + + + + 5 + + + + + sin + + + + + MathPanel + + + Form + + + + + Add channel + Agregar canal + + + + MeasureSettings + + + Form + + + + + Measure + Medir + + + + Channel + Canal + + + + MEASUREMENTS + MEDICIONES + + + + Counter + Contador + + + + Display All + Mostrar todo + + + + + Delete All + Eliminar todos + + + + STATISTICS + ESTADÍSTICAS + + + + Reset + Reiniciar + + + + CUSTOM SELECTION + SELECCIÓN PERSONALIZADA + + + + Enable + Habilitar + + + + GATING SETTINGS + GATING AJUSTES + + + + MeasurementsPanel + + + Form + + + + + NetworkAnalyzer + + + Print + Imprimir + + + + Current Frequency: + Frecuencia actual: + + + + Sample: + Muestra: + + + + Average: + Promedio: + + + + Phase (°) + Fase (°) + + + + Magnitude (dB) + Magnitud (dB) + + + + ° + + + + + 10 + + + + + Settings + Configuraciones + + + + + REFERENCE + REFERENCIA + + + + Channel 1 + Canal 1 + + + + Channel 2 + Canal 2 + + + + 0 + + + + + Gain Mode + Modo de Gano + + + + Automatic + Automático + + + + Low + Bajo + + + + High + Alto + + + + RESPONSE + RESPUESTA + + + + DC Filtering + Filtración CC + + + + + On + On + + + + + Off + Off + + + + SWEEP + BARRER + + + + Logarithmic + Logarítmico + + + + Linear + Lineal + + + + Average + Promedio + + + + + Apply + Aplicar + + + + Periods + Periodos + + + + DISPLAY + MOSTRAR + + + + Delta Label + Delta Etiqueta + + + + BUFFER PREVIEWER + VISOR PREVIO DE BÚFER + + + + ViewInOsc + VerEnOsc + + + + Previous + Previo + + + + Next + Próximo + + + + General Settings + Configuración general + + + + PLOT + TRAZAR + + + + Type + Tipo + + + + Bode + + + + + Nyquist + + + + + Nichols + + + + + Line thickness + Grosor de la línea + + + + 0.5 + + + + + 1 + + + + + 1.5 + + + + + 2 + + + + + 2.5 + + + + + 3 + + + + + 3.5 + + + + + 4 + + + + + 4.5 + + + + + 5 + + + + + EXPORT + EXPORTAR + + + + Export + Exportar + + + + Import + Importar + + + + Snapshot + Instantánea + + + + Remove Reference + Eliminar referencia + + + + Cursors + Cursores + + + + CURSOR READOUTS + LECTURAS DEL CURSOR + + + + Transparency 0% + Transparencia 0% + + + + Position + Posición + + + + Cursors + Cursores + + + + NetworkAnalyzerBufferViewer + + + Form + + + + + Note + + + TextLabel + + + + + NumberPatternUI + + + Form + + + + + Number + Número + + + + OscGeneralSettings + + + GeneralSettings + ConfiguraciónGeneral + + + + General settings + Configuración general + + + + VIEWS + PUNTOS DE VISTA + + + + FFT + + + + + X-Y + + + + + Histogram + Histograma + + + + X-Y + + + + + Y-Axis + + + + + X-Axis + + + + + dots + puntos + + + + lines + líneas + + + + X-Y Line thickness + X-Y Grosor de la línea + + + + 1 + + + + + 2 + + + + + 3 + + + + + 4 + + + + + 5 + + + + + 6 + + + + + 7 + + + + + 8 + + + + + 9 + + + + + 10 + + + + + Oscilloscope + + + Scopy Oscilloscope + Scopy Osciloscopio + + + + Print + Imprimir + + + + Cursors + Cursores + + + + Measure + Medida + + + + Trigger + Disparador + + + + Close + Cerrar + + + + PGCGSettings + + + Form + + + + + TextLabel + + + + + Pattern + Patrón + + + + Output + Salida + + + + PP + + + + + OD + + + + + CLOCK + RELOJ + + + + SETTINGS + AJUSTES + + + + Name + Nombre + + + + Thickness + Grosor + + + + 1 + + + + + 1.5 + + + + + 2 + + + + + 2.5 + + + + + 3 + + + + + 3.5 + + + + + 4 + + + + + 4.5 + + + + + 5 + + + + + COLOR SETTINGS + AJUSTES DE COLOR + + + + BG Color + Color de Fondo + + + + Edge Color + Color del Borde + + + + Low Color + Color Bajo + + + + High Color + Color de Alta + + + + PGChannel + + + Form + + + + + TextLabel + + + + + PGChannelGroup + + + Form + + + + + TextLabel + + + + + 12 + + + + + PGChannelManager + + + Form + + + + + PGChannelManagerHeader + + + Form + + + + + Enable + Habilitar + + + + Name + Nombre + + + + DIO + + + + + Select + Seleccione + + + + PGSettings + + + Form + + + + + Settings + Configuraciones + + + + Autoset + Ajuste automático + + + + Sample Rate + Frecuencia de Muestreo + + + + Buffer Size + Tamaño del búfer + + + + ExternalClock + Reloj externo + + + + External Clock Frequency + Frecuencia de Reloj Externo + + + + Reset Instrument + Restablecer instrumento + + + + PatternGenerator + + + Scopy Pattern Generator + Scopy Generador de Patrones + + + + Print + Impirmir + + + + Group + Grupo + + + + + Channel Settings + Configuración de Canal + + + + 1 + + + + + Trace Height + Traza Altura + + + + Name + Nombre + + + + Open-Drain + + + + + Push-Pull + + + + + GROUP + GRUPO + + + + Pattern + Patrón + + + + Trigger Settings + Configuración de Disparo + + + + Trigger mode + Modo de Disparo + + + + auto + + + + + normal + + + + + Trigger Logic + Lógica de disparo + + + + EXTERNAL TRIGGER + DISPARADOR EXTERNO + + + + Source + Fuente + + + + Condition + Condición + + + + - + + + + + General Settings + Configuración General + + + + AVAILABLE CHANNELS + CANALES DISPONIBLES + + + + Cursors + Cursores + + + + Trigger + Disparador + + + + Close + Cerrar + + + + PowerController + + + Scopy Power Control + Scopy Control de Potencia + + + + + Set + Establecer + + + + + Measure + Medida + + + + + + + VDC + VDC + + + + Tracking ratio control + Rastreo del control de proporción + + + + Independent + Independiente + + + + Tracking + Rastreo + + + + 100 + + + + + % + + + + + Positive output + Salida positiva + + + + + Enable + Habilitar + + + + Negative output + Salida negativa + + + + Preferences + + + Form + + + + + GENERAL + GENERAL + + + + OSCILLOSCOPE + OSCILOSCOPIO + + + + Enable labels on the plot + Habilitar etiquetas en la trama + + + + Enable graticule + Habilitar retícula + + + + Enable mini histogram + Habilitar mini histograma + + + + Enable all instrument notes + Habilitar todas las notas del instrumento + + + + Language (requires app restart) + Idioma (requiere reiniciar la aplicación) + + + + Restart the application for changes to take effect + Reinicie la aplicación para que los cambios surtan efecto + + + + Attempt temperature-based calibration (EXPERIMENTAL) + Intentar calibración basada en temperatura (EXPERIMENTAL) + + + + Enable animations + Habilitar animaciones + + + + 1 + + + + + Run external scripts (Experimental) + Ejecutar scripts externos (Experimental) + + + + SPECTRUM ANALYZER + ANALIZADOR DE ESPECTRO + + + + Only search marker peaks in visible domain + Solo buscar picos de marcadores en el dominio visible + + + + Double click to detach a tool + Doble clic para separar una herramienta + + + + Save session when closing Scopy + Guardar sesión al cerrar Scopy + + + + NETWORK ANALYZER + ANALIZADOR DE RED + + + + Always display 0db value on graph + Mostrar siempre el valor 0db en el gráfico + + + + Scriptable manual calibration + Calibración manual programable + + + + Show advanced device information + Mostrar información avanzada del dispositivo + + + + LOGIC ANALYZER + ANALIZADOR LÓGICO + + + + Display sampling points when zoomed + Mostrar puntos de muestreo cuando se amplía + + + + SIGNAL GENERATOR + GENERADOR DE SEÑALES + + + + Number of displayed periods + Número de períodos mostrados + + + + Enable digital decoders + Habilitar decodificadores digitales + + + + Enable sample rate filters + Habilitar filtros de frecuencia de muestreo + + + + Show ADC digital filter config + Mostrar la config del filtro digital de ADC + + + + DEBUG + + + + + Enable Debug Messages (Only for Debugging, Bugreporting) + Habilitar mensajes de Debug (solo para Debugging, Informe de errores) + + + + Enable Debug Instrument + Habilitar Instrumento de Debug + + + + Enable user notes in main page + Habilitar notas de usuario en la página principal + + + + Skip calibration if already calibrated (cal values are not default) + Omita la calibración si ya está calibrado (los valores de cal no son los predeterminados) + + + + Reset Scopy + Reiniciar Scopy + + + + PulsePatternUI + + + Form + + + + + Low + Bajo + + + + + + + 0 + + + + + High + Alto + + + + 100 + + + + + Counter Init + Iniciar Contador + + + + Delay + Retrasar + + + + + 1 + + + + + Delay polarity + Demora de polaridad + + + + Number of pulses + Numero de pulsos + + + + QObject + + + Period + Período + + + + Frequency + Frecuencia + + + + Min + + + + + Max + + + + + Peak-peak + Pico-pico + + + + Mean + Media + + + + Cycle Mean + Media del Ciclo + + + + RMS + + + + + Cycle RMS + Ciclo RMS + + + + AC RMS + CA RMS + + + + Area + Área + + + + Cycle Area + Área de Ciclo + + + + Low + Bajo + + + + High + Alto + + + + Amplitude + Amplitud + + + + Middle + Medio + + + + +Over + +Terminado + + + + -Over + -Terminado + + + + Rise + Subir + + + + Fall + Caer + + + + +Width + +Anchura + + + + -Width + -Anchura + + + + +Duty + +Ciclo de trabajo + + + + -Duty + -Ciclo de trabajo + + + + RegisterWidget + + + Form + + + + + RunSingleWidget + + + Form + + + + + Run + Ejecutar + + + + Single + Único + + + + SPIPatternUI + + + Form + + + + + MSB First + MSB Primero + + + + + + 1 + + + + + + + 0 + + + + + CLK Phase + CLK Fase + + + + CS Polarity + CS Polaridad + + + + CLK Polarity + CLK Polaridad + + + + Bytes per frame + Bytes por frame + + + + Inter frame space + Espacio entre frames + + + + Data + Datos + + + + SignalGenerator + + + Scopy Signal Generator + Scopy Generador de Señal + + + + Constant + Constante + + + + Waveform + Forma de onda + + + + Sine + Seno + + + + Square + Cuadrado + + + + Triangle + Triángulo + + + + Trapezoidal + Trapezoidal + + + + Rising Ramp Sawtooth + Diente de sierra de Rampa Ascendente + + + + Falling Ramp Sawtooth + Diente de sierra de Rampa Descendente + + + + Stair Step + Escalón + + + + TIMING + SINCRONIZACIÓN + + + + Buffer + Buffer + + + + FILE + ARCHIVO + + + + Path + Camino + + + + + No file loaded + Ningún archivo cargado + + + + Format + Formato + + + + Size + Talla + + + + 0 samples + 0 muestras + + + + Load file + Cargar archivo + + + + Channel + Canal + + + + SCALING + ESCALADA + + + + Math + Matemáticas + + + + NOISE + RUIDO + + + + None + Ninguno + + + + Uniform + Uniforme + + + + Gaussian + Gaussiano + + + + Laplacian + Laplaciano + + + + Impulse + Impulso + + + + OTHER + OTRO + + + + Line thickness + Grosor de la Línea + + + + 0.5 + + + + + 1 + + + + + 1.5 + + + + + 2 + + + + + 2.5 + + + + + 3 + + + + + 3.5 + + + + + 4 + + + + + 4.5 + + + + + 5 + + + + + Close + Cerrar + + + + SpectrumAnalyzer + + + Form + + + + + Print + Impresión + + + + Preset + Preestablecido + + + + + dBFS + + + + + Sample: + Muestra: + + + + Average Sample: + Muestra Promedio: + + + + Marker_n 0.000 Hz 0dB + Marcador_n 0.000 Hz 0dB + + + + Channel + Canal + + + + Type + Tipo + + + + Sample + Muestra + + + + and other types + y otros tipos + + + + Window + Ventana + + + + Uniform (none) + Uniforme (ninguno) + + + + and others windows + Y otras ventanas + + + + Averaging + Promediando + + + + Apply + Aplicar + + + + CH Thickness + CH Grosor + + + + 0.5 + + + + + 1 + + + + + 1.5 + + + + + 2 + + + + + 2.5 + + + + + 3 + + + + + 3.5 + + + + + 4 + + + + + 4.5 + + + + + 5 + + + + + History + Historia + + + + Gain mode + Modo de Gano + + + + + Low + Bajo + + + + High + Alto + + + + Snapshot + Instantánea + + + + General settings + Configuración general + + + + Export + Exportar + + + + + Sweep + Barrer + + + + Logarithmic + Logarítmico + + + + Linear + Lineal + + + + FREQUENCY + FRECUENCIA + + + + AMPLITUDE + AMPLITUD + + + + Resolution BW + Resolución BW + + + + Units + Unidades + + + + + Markers + Marcadores + + + + Settings + Configuraciones + + + + MARKER + MARCADOR + + + + Normal + + + + + Delta + Delta + + + + Peak + Pico + + + + + Peak + Pico + + + + + Ampl + + + + + GENERAL + + + + + Marker Table + Tabla de Marcadores + + + + Import Reference Channels + Importar Canales de Referencia + + + + No file selected! + Ningún archivo seleccionado! + + + + Browse + Buscar + + + + Import + Importar + + + + SpinBoxA + + + Form + + + + + StartStopRangeWidget + + + Form + + + + + Statistic + + + Form + + + + + Avg: + + + + + + + 0.000 + + + + + Min: + + + + + Max: + + + + + 1 + + + + + Measurement + Medición + + + + StatisticsPanel + + + Form + + + + + ToolLauncher + + + Scopy + + + + + Home + Casa + + + + Save + Salvar + + + + Load + Cargar + + + + Preferences + Preferencias + + + + Notes + Notas + + + + Quit + Salir + + + + ADC Offset + ADC Offset + + + + ADC Gain + ADC Gano + + + + Reset ADC Calibration + Restablecer la calibración de ADC + + + + TriggerSettings + + + Form + + + + + Trigger Settings + Configuración de Disparo + + + + Trigger mode + Modo de Disparo + + + + auto + + + + + normal + + + + + + Source + Fuente + + + + INTERNAL (ANALOG) + INTERNO (ANALÓGICO) + + + + + Condition + Condición + + + + + Rising Edge + Flanco Ascendente + + + + + Falling Edge + Flanco Descendente + + + + + Low + Bajo + + + + + High + Alto + + + + This feature is not supported while the Mixed Signal View is enabled! + Esta función no es compatible mientras la Vista de Señales Mixtas está habilitada! + + + + DIGITAL + + + + + Any Edge + Cualquier borde + + + + M2K daisychain position + M2K daisychain posición + + + + TRIGGER LOGIC + LÓGICA DE DISPARO + + + + Analog - Digital + Analógico - Digital + + + + Digital OR Analog + Digital OR Analógico + + + + Digital AND Analog + Digital AND Analógico + + + + Digital XOR Analog + Digital XOR Analógico + + + + !Digital OR Analog + !Digital OR Analógico + + + + !Digital AND Analog + !Digital AND Analógico + + + + !Digital XOR Analog + !Digital XOR Analógico + + + + EXTERNAL TRIGGER OUT + DISPARADOR EXTERNO SALIDA + + + + UARTPatternUI + + + Form + + + + + Stop + Parar + + + + 1 + + + + + 2 + + + + + 3 + + + + + Baud + + + + + + 9600 + + + + + 1200 + + + + + 2400 + + + + + 4800 + + + + + 14400 + + + + + 19200 + + + + + 28800 + + + + + 38400 + + + + + 57600 + + + + + 115200 + + + + + 230400 + + + + + Parity + Paridad + + + + NONE + NINGUNO + + + + ODD + IMPAR + + + + EVEN + PAR + + + + MARK + MARCA + + + + SPACE + ESPACIO + + + + Parameters + Parámetros + + + + Data to Send + Datos para Enviar + + + + UserNotePage + + + Form + + + + + Remove note + Eliminar nota + + + + UserNotes + + + Form + + + + + Save + Salvar + + + + File path + Ruta de archivo + + + + Browse + Buscar + + + + Note name + Nombre de la nota + + + + WalkingPatternUI + + + Form + + + + + Walking level + Nivel para caminar + + + + 0 + + + + + + 1 + + + + + Frequency + Frecuencia + + + + 1000 + + + + + Direction + Dirección + + + + Right + Derecha + + + + Left + Izquierda + + + + Length + Longitud + + + + adiscope::BinaryCounterPatternUI + + + Frequency + Frecuencia + + + + adiscope::CapturePlot + + + + + + + + Zoom: + Enfocar: + + + + + /div + + + + + Waiting + Esperando + + + + Triggered + Disparado + + + + Stop + Parar + + + + Auto + + + + + adiscope::ClockPatternUI + + + Frequency + Frecuencia + + + + Phase + Fase + + + + Duty + Ciclo de trabajo + + + + adiscope::ConnectDialog + + + + Connect + Conectar + + + + Waiting for connection ... + Esperando la conexión ... + + + + + Context info + Info de Contexto + + + + Add + Añadir + + + + Warning + Aviso + + + + Error: Unable to find host: No such host is known! + Error: No se puede encontrar el host: No se conoce tal host! + + + + adiscope::CustomSwitch + + + on + on + + + + off + off + + + + adiscope::DMM + + + Timer + Temporizador + + + + Stop + Parar + + + + Run + Ejecutar + + + + Export + Exportar + + + + Comma-separated values files (*.csv);;All Files(*) + Archivos de valores separados por comas (* .csv) ;; Todos los archivos (*) + + + + No file selected + Ningún archivo seleccionado + + + + + File is open in another program + El archivo está abierto en otro programa + + + + + Choose a file + Escoge un archivo + + + + adiscope::Debugger + + + Save File + Guardar el archivo + + + + JavaScript (*.js) + + + + + adiscope::DigitalIO + + + Stop + Parar + + + + Run + Ejecutar + + + + adiscope::ExportSettings + + + Channels + Canales + + + + Name + Nombre + + + + Export + Exportar + + + + adiscope::GrayCounterPatternUI + + + Frequency + Frecuencia + + + + adiscope::I2CPatternUI + + + Frequency + Frecuencia + + + + adiscope::ImportPatternUI + + + Frequency + Frecuencia + + + + Open file + Abrir documento + + + + Import selected channels + Importar canales seleccionados + + + + No file selected + Ningún archivo seleccionado + + + + Export + Exportar + + + + Comma-separated values files (*.csv);;Tab-delimited values files (*.txt) + Archivos de valores separados por comas (* .csv) ;; Archivos de valores delimitados por tabulaciones (* .txt) + + + + adiscope::ImportSettings + + + Import + Importar + + + + Import all + Importar todo + + + + adiscope::InfoPage + + + Error: Connection failed! + Error: Conexión fallida! + + + + Connected + Conectado + + + + Your hardware revision does not support the identify feature + Su revisión de hardware no admite la función de identificación + + + + adiscope::M2kDeviceWidget + + + M2K + + + + + adiscope::M2kInfoPage + + + Not connected + No conectado + + + + Always disconnect analog inputs/outputs before calibration + Desconecte siempre las entradas / salidas analógicas antes de la calibración + + + + Can't identify this device. + No se puede identificar este dispositivo. + + + + Can't identify device. Please try to update your firmware! + No se puede identificar el dispositivo. Intente actualizar su firmware! + + + + Your hardware revision does not support the identify feature + Su revisión de hardware no admite la función de identificación + + + + adiscope::ManualCalibration + + + Save File + Guardar el Archivo + + + + ini (*.ini) + + + + + + °C + + + + + adiscope::MarkerTable + + + Id + + + + + Marker + Marcador + + + + Channel + Canal + + + + Frequency + Frecuencia + + + + Magnitude + Magnitud + + + + Type + Tipo + + + + adiscope::MeasureSettings + + + Horizontal + Horizontal + + + + + Name + Nombre + + + + + Measure + Medida + + + + + Stats + Estadísticas + + + + Vertical + + + + + + Recover + Recuperar + + + + + Delete All + Eliminar Todos + + + + adiscope::NetworkAnalyzer + + + + Stopped + Parado + + + + Frequency (Hz) + Frecuencia (Hz) + + + + Magnitude(dB) + Magnitud(dB) + + + + Phase (°) + Fase (°) + + + + Samples count + Recuento de muestras + + + + Samps/decade + Muestras/década + + + + Step + Paso + + + + Amplitude + Amplitud + + + + Offset + + + + + Max. Magnitude + Máx. Magnitud + + + + Min. Magnitude + Mín Magnitud + + + + Max. Phase + Máx Fase + + + + Min. Phase + Mín Fase + + + + + Settling time + Tiempo de estabilización + + + + Before Buffer + Antes del Búfer + + + + After Buffer + Después de Búfer + + + + + Sample: + Muestra: + + + + + Current Frequency: + Frecuencia actual: + + + + + DC Voltage: + CC Voltaje: + + + + + Response channel voltage < 50mV! + Voltaje del canal de respuesta <50 mV! + + + + + Low + Bajo + + + + + High + Alto + + + + + Gain Mode: + Modo de Gano: + + + + Transparency + Transparencia + + + + Image + Imagen + + + + Save to + Salvar a + + + + Import + Importar + + + + Comma-separated values files (*.csv);;Tab-delimited values files (*.txt) + Archivos de valores separados por comas (* .csv) ;; Archivos de valores delimitados por tabulaciones (* .txt) + + + + Comma-separated values files (*.csv) + Archivos de valores separados por comas (* .csv) + + + + Tab-delimited values files (*.txt) + Archivos de valores delimitados por tabuladores (* .txt) + + + + All Files(*) + Todos los archivos(*) + + + + Export + Exportar + + + + Average: + Promedio: + + + + Running + Corriendo + + + + Stopping... + Parada... + + + + adiscope::NetworkAnalyzer_API + + + Transparency + Transparencia + + + + adiscope::Oscilloscope + + + + Time Base + Base de Tiempo + + + + + Position + Posición + + + + Volts/Div + + + + + + Add Channel + Agregar canal + + + + + + Export + Exportar + + + + + Comma-separated values files (*.csv) + Archivos de valores separados por comas (* .csv) + + + + + Tab-delimited values files (*.txt) + Archivos de valores delimitados por tabuladores (* .txt) + + + + + All Files(*) + Todos los archivos(*) + + + + Transparency + Transparencia + + + + "Warning: This feature is not supported on the current firmware version!" + "Aviso: esta función no es compatible con la versión de firmware actual!" + + + + * When the Mixed Signal View is enabled the LogicAnalyzer tool will be disabled! +** The trigger can be disabled or set only on the Digital channels or Analog channels, not on both at the same time! + * Cuando la Vista de Señal Mixta está habilitada la herramienta AnalizadorLógico estará deshabilitada. +** El disparador se puede desactivar o configurar solo en los canales digitales o analógicos, ¡no en ambos al mismo tiempo! + + + + Math + Matemáticas + + + + Browse + Buscar + + + + No file selected + Ningún archivo seleccionado + + + + + Reference + Referencia + + + + Logic + Lógica + + + + Add channel + Agregar canal + + + + Import selected channels + Importar canales seleccionados + + + + Enable Mixed Signal View + Habilitar la vista de Señal Mixta + + + + Import + Importar + + + + Comma-separated values files (*.csv);;Tab-delimited values files (*.txt) + Archivos de valores separados por comas (* .csv) ;; Archivos de valores delimitados por tabulaciones (* .txt) + + + + + Snapshot + Instantánea + + + + Filter 1 - Enable - + Filtro 1 - Habilitado - + + + + Filter 2 - Enable - + Filtro 2 - Habilitado - + + + + + Save + Salvar + + + + adiscope::PowerController + + + + mVolts + + + + + + Volts + + + + + + Value + Valor + + + + + Disable + Inhabilitar + + + + + Enable + Habilitar + + + + adiscope::Preferences + + + This change will be applied only after a Scopy reset. + Este cambio se aplicará solo después de un reinicio de Scopy. + + + + By resetting scopy you will lose the current configuration! + Al resetear scopy perderá la configuración actual! + + + + Do you want to reset? + Quieres resetear? + + + + Load language + Cargar idioma + + + + Language files (*.qm) + Archivos de idioma (* .qm) + + + + adiscope::PrintablePlot + + + + + + Documents + Documentos + + + + Image + Imagen + + + + Export File Name + Exportar Nombre de Archivo + + + + adiscope::PulsePatternUI + + + Sample Rate + Frecuencia de Muestreo + + + + adiscope::RandomPatternUI + + + Frequency + Frecuencia + + + + adiscope::RunSingleWidget + + + + + Run + Ejecutar + + + + + + Single + Único + + + + + + + + Stop + Parar + + + + adiscope::SPIPatternUI + + + Frequency + Frecuencia + + + + adiscope::SignalGenerator + + + deg + + + + + π rad + + + + + + + + + ns + + + + + + + + + μs + + + + + + + + + ms + + + + + + + + + s + + + + + + + Phase + Fase + + + + μVolts p-p + + + + + mVolts p-p + + + + + Volts p-p + + + + + + + Amplitude + Amplitud + + + + + + + μVolts + + + + + + + + + mVolts + + + + + + + + + Volts + + + + + + Offset + + + + + mHz + + + + + Hz + + + + + kHz + + + + + MHz + + + + + Frequency + Frecuencia + + + + Rising + Creciente + + + + Falling + Descendente + + + + Rise Time + Tiempo de subida + + + + Fall Time + Tiempo de caída + + + + High Time + Tiempo Alto + + + + Low Time + Tiempo Bajo + + + + + SampleRate + FrecuenciaDeMuestreo + + + + Record Length + Grabar Longitud + + + + Value + Valor + + + + Duty Cycle + Ciclo de Trabajo + + + + + + samples + muestras + + + + Open File + Abrir documento + + + + Comma-separated values files (*.csv);;Tab-delimited values files (*.txt);;Waveform Audio File Format (*.wav);;Matlab files (*.mat) + Archivos de valores separados por comas (* .csv) ;; Archivos de valores delimitados por tabuladores (* .txt) ;; Formato de archivo waveform audio (* .wav) ;; Archivos Matlab (* .mat) + + + + adiscope::Sismograph + + + Voltage (V) + Voltaje (V) + + + + Time (s) + Tiempo (s) + + + + adiscope::SpectrumAnalyzer + + + + + + Export + Exportar + + + + dBFS + + + + + dBV + + + + + dBu + + + + + Vpeak + + + + + Vrms + + + + + V/√Hz + + + + + Sample + Muestra + + + + Peak Hold + Sostener Pico + + + + Peak Hold Continous + Sostener Pico Continuo + + + + Min Hold + Sostener Min + + + + Min Hold Continous + Sostener Min Continuo + + + + Linear RMS + Lineal RMS + + + + Linear dB + Lineal dB + + + + Exponential RMS + Exponencial RMS + + + + Exponential dB + Exponencial dB + + + + Flat top + Superficie plana + + + + Rectangular + Rectangular + + + + Triangular (Bartlett) + + + + + Hamming + + + + + Hann + + + + + Blackman-Harris + + + + + Kaiser + + + + + Manual + Manual + + + + Peak + Pico + + + + Delta + + + + + Fixed + Fijo + + + + Scale/Div + Escala/Div + + + + + Top + Top + + + + + Bottom + Fondo + + + + Hz + + + + + kHz + + + + + MHz + + + + + Frequency Position + Posición de Frecuencia + + + + + Comma-separated values files (*.csv) + Archivos de valores separados por comas (* .csv) + + + + + Tab-delimited values files (*.txt) + Archivos de valores delimitados por tabuladores (* .txt) + + + + + All Files(*) + Todos los archivos(*) + + + + Comma-separated values files (*.csv);;Tab-delimited values files (*.txt) + Archivos de valores separados por comas (* .csv) ;; Archivos de valores delimitados por tabulaciones (* .txt) + + + + Snapshot + Instantánea + + + + Sample: + Muestra: + + + + Average Sample: + Muestra Promedio: + + + + adiscope::StartStopRangeWidget + + + Start + Empezar + + + + Stop + Parar + + + + Center + Centrar + + + + Span + Abarcar + + + + adiscope::ToolLauncher + + + Preferences + Preferencias + + + + Calibration skipped because already calibrated. + Calibración omitida porque ya está calibrada. + + + + Calibrated + Calibrado + + + + Save session + Guardar la sesión + + + + + Scopy-Files (*.ini) + Scopy-Archivos (*.ini) + + + + Load session + Cargar sesión + + + + Click to open the home menu + Haga clic para abrir el menú de inicio + + + + Click to disconnect the device + Haga clic para desconectar el dispositivo + + + + Click to save the current session + Haga clic para guardar la sesión actual + + + + + Click to load a session + Haga clic para cargar una sesión + + + + + Select a device first + Seleccione un dispositivo primero + + + + + + Click to connect the device + Haga clic para conectar el dispositivo + + + + Report a bug! + Reportar un error! + + + + Connecting... + Conectando... + + + + Disconnecting... + Desconectando... + + + + Connect + Conectar + + + + Calibrating... + Calibrando... + + + + Calibration Failed + Error de Calibración + + + + + Disconnect + Desconectar + + + + Digital decoders support is disabled. Some features may be missing + Soporte de decodificadores digitales está deshabilitada. Es posible que falten algunas funciones + + + + There was a problem initializing libsigrokdecode. Some features may be missing + Hubo un problema al inicializar libsigrokdecode. Es posible que falten algunas funciones + + + + Calibrating + Calibrando + + + + adiscope::ToolMenu + + + Oscilloscope + Osciloscopio + + + + Spectrum Analyzer + Analizador de Espectro + + + + Network Analyzer + Analizador de Rede + + + + Signal Generator + Generador de Señal + + + + Logic Analyzer + Analizador Lógico + + + + Pattern Generator + Generador de Patrones + + + + Digital IO + IO Digital + + + + Voltmeter + Voltímetro + + + + Power Supply + Fuente de Alimentación + + + + Debugger + + + + + Calibration + Calibración + + + + adiscope::ToolMenuItem + + + Calibrating... + Calibrando... + + + + adiscope::TriggerSettings + + + Forward Trigger In + Disparador hacia adelante In + + + + Oscilloscope + Osciloscopio + + + + + Logic Analyzer + Analizador lógico + + + + + μVolts + + + + + + mVolts + + + + + + Volts + + + + + Level + Nivel + + + + Hysteresis + Histéresis + + + + External Trigger In + Disparador Externo In + + + + None + Ninguno + + + + adiscope::UserNotes + + + Note + Nota + + + + Invalid or empty file! + Archivo inválido o vacío! + + + + Path: + Camino: + + + + Warning: The file is empty! + Aviso: El archivo está vacío! + + + + Warning: The path is invalid! + Aviso: El camino no es válido! + + + + adiscope::logic::LogicAnalyzer + + + Sample Rate + Frecuencia de Muestreo + + + + Nr of samples + No de muestras + + + + Delay + Retrasar + + + + Transparency + Transparencia + + + + Select a decoder to add + Seleccione un decodificador para agregar + + + + External Trigger In + Disparador externo In + + + + Oscilloscope + Osciloscopio + + + + Comma-separated values files (*.csv) + Archivos de valores separados por comas (* .csv) + + + + Tab-delimited values files (*.txt) + Archivos de valores delimitados por tabuladores (* .txt) + + + + Value Change Dump(*.vcd) + Volcado de cambio de valor (*. Vcd) + + + + All Files(*) + Todos los archivos(*) + + + + Export + Exportar + + + + adiscope::prop::Bool + + + + Querying config key %1 resulted in %2 + La consulta de la clave de configuración %1 resultó en %2 + + + + adiscope::prop::Double + + + + Querying config key %1 resulted in %2 + La consulta de la clave de configuración %1 resultó en %2 + + + + adiscope::prop::Enum + + + + Querying config key %1 resulted in %2 + La consulta de la clave de configuración %1 resultó en %2 + + + + adiscope::prop::Int + + + + Querying config key %1 resulted in %2 + La consulta de la clave de configuración %1 resultó en %2 + + + + adiscope::prop::String + + + + Querying config key %1 resulted in %2 + La consulta de la clave de configuración %1 resultó en %2 + + + + dioChannel + + + Form + + + + + + 0 + + + + + in + entrada + + + + out + salida + + + + 1 + + + + + dioElement + + + Form + + + + + 0 - 7 + + + + + Individual + + + + + Group + Grupo + + + + in + entrada + + + + out + salida + + + + 127 + + + + + scriptedBinaryCounter + + + Form + + + + + PulseScript + + + + + NumberOfPulses + NúmeroDePulsos + + + + Samples/Pulse + Muestras/Pulso + + + + Hi + Alto + + + + Lo + Bajo + + + + Frequency: + Frecuencia: + + + + PushButton + PresionarElBotón + + + + INVALID + INVÁLIDO + + + diff --git a/resources/translations/scopy_it.ts b/resources/translations/scopy_it.ts new file mode 100644 index 0000000000..da95c9e136 --- /dev/null +++ b/resources/translations/scopy_it.ts @@ -0,0 +1,5972 @@ + + + + + BaseMenu + + + Form + Scheda + + + + BaseMenuItem + + + Form + Could be also 'Modulo' really depends on the context + Scheda + + + + BinaryCounterPatternUI + + + Form + Modulo + + + + Init Value + Valore Iniziale + + + + + 0 + 0 + + + + Frequency + Frequenza + + + + 1000 + 1000 + + + + Start counter + Avvia il contatore + + + + End counter + Ferma il contatore + + + + 65535 + 65535 + + + + Increment + Incremento + + + + 1 + 1 + + + + BitfieldWidget + + + Form + Modulo + + + + + TextLabel + Etichetta del Testo + + + + 0x + 0x + + + + CalibrationTemplate + + + Form + Modulo + + + + Calibration info here + Informazioni di calibrazione qui + + + + Set + Imposta + + + + Measured + Misurato + + + + Enter value here + Inserisci il valore qui + + + + Restart + Riavvia + + + + Next + Prossimo + + + + Finish + Completa + + + + Channel + + + Form + Scheda + + + + Channel + Canale + + + + ChannelSettings + + + Form + Scheda + + + + Channel + Canale + + + + MATH + MATEMATICA + + + + Edit Function + Modifica Funzione + + + + HORIZONTAL + ORIZZONTALE + + + + VERTICAL + VERICALE + + + + SETTINGS + IMPOSTAZIONI + + + + CH Thickness + Spessore CH + + + + 0.5 + 0.5 + + + + + + 1 + 1 + + + + 1.5 + 1.5 + + + + 2 + 2 + + + + 2.5 + 2.5 + + + + 3 + 3 + + + + 3.5 + 3.5 + + + + 4 + 4 + + + + 4.5 + 4.5 + + + + 5 + 5 + + + + Memory depth + Profondità memoria + + + + Probe +Attenuation + Attenuazione sonda + + + + 0.1X + 0.1X + + + + 1X + 1X + + + + 10X + 10X + + + + 100X + 100X + + + + Curve Style + Stile curva + + + + Lines + Linee + + + + Dots + Punti + + + + Steps + Step + + + + Sticks + Barre + + + + Smooth + Smussato + + + + Software +AC Coupling + Accoppiamento AC Software + + + + Filter 1 - Enabled + Filtro 1 - Abilitato + + + + + TC + TC + + + + + Gain + Guadagno + + + + + 0 + 0 + + + + Filter 2 - Enabled + Filtro 2 - Abilitato + + + + Autoset + Autoset + + + + Snapshot + Istantanea + + + + Connect + + + Form + Scheda + + + + URI (Hostname) + URI (Hostname) + + + + Connect + Connetti + + + + Context info + Informazioni Contestuali + + + + ConstantPatternUI + + + Form + Scheda + + + + Constant + Costante + + + + 0 + 0 + + + + 1 + 1 + + + + CursorReadouts + + + Form + Scheda + + + + Δt = + Δt = + + + + + 0.000ms + 0.000ms + + + + CurT2 = + CurT2 = + + + + 1/Δt = + 1/Δt = + + + + - 000.000 ms + - 000.000 ms + + + + - 000.000 mHz + - 000.000 mHz + + + + CurT1 = + CurT1 = + + + + CurV2 + CurV2 + + + + ΔV + CurV2 + + + + CurV1 + CurV1 + + + + + 000.000 mV + 000.000 mV + + + + - 000.000 mV + - 000.000 mV + + + + + + = + = + + + + CursorsSettings + + + Form + Scheda + + + + Cursors + Cursori + + + + Normal + Normale + + + + Track + Traccia + + + + 0 + 0 + + + + HORIZONTAL + ORIZZONTALE + + + + VERTICAL + VERTICALE + + + + CURSOR READOUTS + LETTURE DEI CURSORI + + + + Transparency 0% + Traparenza 0% + + + + Position + Posizione + + + + CustomPlotPositionButton + + + Form + Scheda + + + + DMM + + + + MAX + MAX + + + + + MIN + MIN + + + + + VDC + VDC + + + + Run + Avvia + + + + Channel 1 + Canale 1 + + + + + DC (Direct Current) + DC (Corrente diretta) + + + + + AC (20 Hz - 40 kHz) + AC (20 Hz - 40 kHz) + + + + + 1s + 1s + + + + + 10s + 10s + + + + + 60s + 60s + + + + + History + Storia + + + + + Line thickness + Spessore linea + + + + + 0.5 + 0.5 + + + + + 1 + 1 + + + + + 1.5 + 1.5 + + + + + 2 + 2 + + + + + 2.5 + 2.5 + + + + + 3 + 3 + + + + + 3.5 + 3.5 + + + + + 4 + 4 + + + + + 4.5 + 4.5 + + + + + 5 + 5 + + + + Channel 2 + Canale 2 + + + + PEAK HOLD + BLOCCA PICCO + + + + Reset + Reset + + + + DATA LOGGING + DATA LOGGING + + + + Browse + Sfoglia + + + + Append + Appendi + + + + Choose a file + Scegli un file + + + + Overwrite + Sovrascrivi + + + + DbClickButtons + + + Form + Scheda + + + + 1 + 1 + + + + 2 + 2 + + + + 3 + 3 + + + + 4 + 4 + + + + 5 + 5 + + + + Debugger + + + MainWindow + Finestra Principale + + + + SCRIPTING ENGINE + SCRIPTING ENGINE + + + + Load Script + Cairca Script + + + + Run + Avvia + + + + Filename + Nome File + + + + + Read + Leggi + + + + Device + Dispositivo + + + + New Window + Nuova Finestra + + + + + Write + Scrivi + + + + + Value: + Valore + + + + DEVICE SELECTION + SELEZIONE DISPOSITIVO + + + + Detailed Register Map + Mappa dei Registri dettagliata + + + + Address: + Indirizzo: + + + + 0x0000 + 0x0000 + + + + Display mode: + Modalità di visualizzazione: + + + + <value> + <valore> + + + + + 0x + 0x + + + + Description: + Descrizione: + + + + Default Value: + Valore di default: + + + + Source: + Sorgente: + + + + Enable AutoRead + Abilita AutoRead + + + + REGISTER MAP SETTINGS + IMPOSTAZIONI MAPPA REGISTRI + + + + DetachDragZone + + + Form + Scheda + + + + Drag here to detach! + Trascina qui per disancorare! + + + + Device + + + Form + Scheda + + + + DigitalIO + + + Form + Scheda + + + + Run + Avvia + + + + DigitalIoMenu + + + Form + + + + + PollingRate + Frequenza di Polling + + + + 1000 + 1000 + + + + Enable Outputs + Abilita Uscite + + + + DigitalTriggerSettings + + + Form + Scheda + + + + Trigger Settings + Impostazioni di Trigger + + + + Trigger mode + Modalità di Trigger + + + + auto + auto + + + + normal + normale + + + + Trigger Logic + Logica del Trigger + + + + OR + OR + + + + AND + AND + + + + EXTERNAL TRIGGER + TRIGGER ESTERNO + + + + Source + Sorgente + + + + Condition + Condizione + + + + None + Nessuno + + + + EXTERNAL TRIGGER OUT + TRIGGER OUT ESTERNO + + + + DragZone + + + Form + Scheda + + + + EmptyPatternUI + + + Form + Scheda + + + + ExportSettings + + + Form + Scheda + + + + EXPORT + ESPORTA + + + + Export All + Esporta tutti + + + + Export + Esporta + + + + FrequencyPatternUI + + + Form + Scheda + + + + Frequency + Frequenza + + + + 1000 + 1000 + + + + GenericJSPatternUI + + + Form + Scheda + + + + Script status + Stato dello script + + + + Clear console + Pulisci la console + + + + HomepageControls + + + Form + Scheda + + + + I2CPatternUI + + + Form + Scheda + + + + R + R + + + + W + W + + + + Read/Write + Leggi/Scrivi + + + + MSB First + Byte più significativo prima + + + + Address + Indirizzo + + + + Inter frame space + Spazio Inter frame + + + + Data + Dati + + + + InfoPage + + + Form + Scheda + + + + Forget device + Dimentica dispositivo + + + + Identify + Identifica + + + + Connect + Connetti + + + + Calibrate + Calibra + + + + InfoWidget + + + Form + Scheda + + + + Move + Sposta + + + + InstrumentNotes + + + Form + Scheda + + + + Notes + Note + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html> + Definitely a bug + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html> + + + + Insert notes here + Inserisci note qui + + + + LAChannelGroup + + + Form + Scheda + + + + DIO + DIO + + + + + 12 + 12 + + + + None + Nessuno + + + + LAChannelManager + + + Form + Scheda + + + + LAManagerHeader + + + Form + Scheda + + + + View + Mostra + + + + Name + Nome + + + + DIO + DIO + + + + Trigger + Trigger + + + + Select + Seleziona + + + + LARequiredChannel + + + Form + Scheda + + + + Settings + Impostazioni + + + + + Role + Ruolo + + + + LASettingsWidget + + + Form + Scheda + + + + REQUIRED + RICHIESTO + + + + OPTIONAL + OPZIONALE + + + + OPTIONS + OPZIONI + + + + LChannelSettings + + + Form + Scheda + + + + BG Color + Colore BG + + + + Edge Color + Colore Bordo + + + + Low Color + Colore Basso + + + + High Color + Colore Alto + + + + SETTINGS + IMPOSTAZIONI + + + + COLOR SETTINGS + IMPOSTAZIONI COLORE + + + + Name + Nome + + + + Thickness + Spessore + + + + 1 + 1 + + + + 1.5 + 1.5 + + + + 2 + 2 + + + + 2.5 + 2.5 + + + + 3 + 3 + + + + 3.5 + 3.5 + + + + 4 + 4 + + + + 4.5 + 4.5 + + + + 5 + 5 + + + + LFSRPatternUI + + + Form + Scheda + + + + + 0x0001 + 0x0001 + + + + Generator Polynomial + Generatore Polinomiale + + + + Start State + Stato Iniziale + + + + Period + Peiodo + + + + LogicAnalyzer + + + Scopy Logic Analyzer + Analizatore Logico Scopy + + + + Group + Gruppo + + + + + Channel Settings + Impostazioni canali + + + + + - + - + + + + Name + Nome + + + + 1 + 1 + + + + Trace Height + Altezza traccia + + + + GROUP + GRUPPO + + + + Stack Decoder: + Decoder Stack: + + + + Trigger Settings + Impostazioni di trigger + + + + Trigger mode + Modalità trigger + + + + auto + auto + + + + normal + normale + + + + Trigger Logic + Logica Trigger + + + + EXTERNAL TRIGGER + TRIGGER ESTERNO + + + + "Warning: This feature is not supported on the current firmware version!" + "Avviso: Questa funzionalità non è supportata sulla versione corrente del firmware!" + + + + Source + Sorgente + + + + Condition + Condizione + + + + General Settings + Impostazioni Generali + + + + OneShot + Shot singolo + + + + AVAILABLE CHANNELS + CANALI DISPONIBILI + + + + DECODERS + DECODERS + + + + Close + Chiudi + + + + Print + Stampa + + + + Stream + Stream + + + + Cursors + Cursori + + + + + Trigger + Trigger + + + + ManualCalibration + + + Form + Scheda + + + + Load Calibration + Carica Calibrazione + + + + Save Calibration + Salva Calibrazione + + + + Run automatic + Esegui autmaticamente + + + + MarkerTable + + + Form + Scheda + + + + Math + + + Form + Scheda + + + + f(t) = + f(t) = + + + + cos + cos + + + + 2 + 2 + + + + 7 + 7 + + + + , + , + + + + 3 + 3 + + + + ← + + + + + ( + ( + + + + exp + exp + + + + 1 + 1 + + + + 8 + 8 + + + + - + - + + + + / + / + + + + * + * + + + + e + e + + + + C + C + + + + 0 + 0 + + + + 6 + 6 + + + + ) + ) + + + + log + log + + + + t + t + + + + + + + + + + + 9 + 9 + + + + tan + tan + + + + ^ + ^ + + + + 4 + 4 + + + + Apply + Applica + + + + pi + pi + + + + 5 + 5 + + + + sin + sin + + + + MathPanel + + + Form + Scheda + + + + Add channel + Aggiungi canale + + + + MeasureSettings + + + Form + Scheda + + + + Measure + Misura + + + + Channel + Canale + + + + MEASUREMENTS + MISURE + + + + Counter + Contatore + + + + Display All + Mostra Tutto + + + + + Delete All + Cancella Tutto + + + + STATISTICS + STATISTICHE + + + + Reset + Reimposta + + + + CUSTOM SELECTION + SELEZIONE PERSONALIZZATA + + + + Enable + Abilita + + + + GATING SETTINGS + IMPOSTAZIONI DI GATING + + + + MeasurementsPanel + + + Form + Scheda + + + + NetworkAnalyzer + + + Print + Stampa + + + + Current Frequency: + Frequenza attuale: + + + + Sample: + Campione: + + + + Average: + Media: + + + + Phase (°) + Fase (°) + + + + Magnitude (dB) + Ampiezza (dB) + + + + ° + ° + + + + 10 + 10 + + + + Settings + Impostazioni + + + + + REFERENCE + RIFERIMENTO + + + + Channel 1 + Canale 1 + + + + Channel 2 + Canale 2 + + + + 0 + 0 + + + + Gain Mode + Tipo di Guadagno + + + + Automatic + Automatico + + + + Low + Basso + + + + High + Alto + + + + RESPONSE + RISPOSTA + + + + DC Filtering + Filtraggio DC + + + + + On + Acceso + + + + + Off + Spento + + + + SWEEP + SCANSIONE + + + + Logarithmic + Logaritmica + + + + Linear + Lineare + + + + Average + Media + + + + + Apply + Applica + + + + Periods + Periodi + + + + DISPLAY + MOSTRA + + + + Delta Label + Etichetta Delta + + + + BUFFER PREVIEWER + PREVISUALIZZATORE BUFFER + + + + ViewInOsc + VisualizzaInOsc + + + + Previous + Precedente + + + + Next + Successivo + + + + General Settings + Impostazioni Generali + + + + PLOT + STAMPA + + + + Type + Tipo + + + + Bode + Bode + + + + Nyquist + Nyquist + + + + Nichols + Nichols + + + + Line thickness + Spessore Linea + + + + 0.5 + 0.5 + + + + 1 + 1 + + + + 1.5 + 1.5 + + + + 2 + 2 + + + + 2.5 + 2.5 + + + + 3 + 3 + + + + 3.5 + 3.5 + + + + 4 + 4 + + + + 4.5 + 4.5 + + + + 5 + 5 + + + + EXPORT + ESPORTA + + + + Export + Esporta + + + + Import + Importa + + + + Snapshot + Istantanea + + + + Remove Reference + Rimuovi Riferimento + + + + Cursors + Cursori + + + + CURSOR READOUTS + LETTURE CURSORI + + + + Transparency 0% + Trasparenza 0% + + + + Position + Posizione + + + + Cursors + Cursori + + + + NetworkAnalyzerBufferViewer + + + Form + Scheda + + + + Note + + + TextLabel + Etichetta + + + + NumberPatternUI + + + Form + Scheda + + + + Number + Numero + + + + OscGeneralSettings + + + GeneralSettings + Impostazioni Generali + + + + General settings + Impostazioni Generali + + + + VIEWS + VISTE + + + + FFT + FFT + + + + X-Y + X-Y + + + + Histogram + Istogramma + + + + X-Y + X-YX-Y + + + + Y-Axis + Asse-Y + + + + X-Axis + Asse-X + + + + dots + punti + + + + lines + linee + + + + X-Y Line thickness + Spessore Linee X-Y + + + + 1 + 1 + + + + 2 + 2 + + + + 3 + 3 + + + + 4 + 4 + + + + 5 + 5 + + + + 6 + 6 + + + + 7 + 7 + + + + 8 + 8 + + + + 9 + 9 + + + + 10 + 10 + + + + Oscilloscope + + + Scopy Oscilloscope + Scopy Oscilloscopio + + + + Print + Stampa + + + + Cursors + Cursori + + + + Measure + Misura + + + + Trigger + Trigger + + + + Close + Chiudi + + + + PGCGSettings + + + Form + Scheda + + + + TextLabel + Etichetta + + + + Pattern + Pattern + + + + Output + Uscita + + + + PP + PD + + + + OD + OD + + + + CLOCK + CLOCK + + + + SETTINGS + IMPOSTAZIONI + + + + Name + Nome + + + + Thickness + Spessore + + + + 1 + 1 + + + + 1.5 + 1.5 + + + + 2 + 2 + + + + 2.5 + 2.5 + + + + 3 + 3 + + + + 3.5 + 3.5 + + + + 4 + 4 + + + + 4.5 + 4.5 + + + + 5 + 5 + + + + COLOR SETTINGS + IMPOSTAZIONI COLORI + + + + BG Color + Colore BG + + + + Edge Color + Colore Bordo + + + + Low Color + Colore Basso + + + + High Color + Colore Alto + + + + PGChannel + + + Form + Scheda + + + + TextLabel + Etichetta + + + + PGChannelGroup + + + Form + Scheda + + + + TextLabel + Etichetta + + + + 12 + 12 + + + + PGChannelManager + + + Form + Scheda + + + + PGChannelManagerHeader + + + Form + Scheda + + + + Enable + Abilita + + + + Name + Nome + + + + DIO + DIO + + + + Select + Seleziona + + + + PGSettings + + + Form + Scheda + + + + Settings + Impostazioni + + + + Autoset + AUtoconfigura + + + + Sample Rate + Frequenza di campionamento + + + + Buffer Size + Dimensione del buffer + + + + ExternalClock + Clock esterno + + + + External Clock Frequency + Frequenza del clock esterno + + + + Reset Instrument + Reimposta strumento + + + + PatternGenerator + + + Scopy Pattern Generator + Generatore di Pattern Scopy + + + + Print + Stampa + + + + Group + Raggruppa + + + + + Channel Settings + Impostazioni Canale + + + + 1 + 1 + + + + Trace Height + Altezza traccia + + + + Name + Nome + + + + Open-Drain + Open-Drain + + + + Push-Pull + Push-Pull + + + + GROUP + GRUPPO + + + + Pattern + Pattern + + + + Trigger Settings + Impostazioni Trigger + + + + Trigger mode + Modalità Trigger + + + + auto + auto + + + + normal + normale + + + + Trigger Logic + Logica Trigger + + + + EXTERNAL TRIGGER + TRIGGER ESTERNO + + + + Source + Sorgente + + + + Condition + Condizione + + + + - + - + + + + General Settings + Impostazioni Generali + + + + AVAILABLE CHANNELS + CANALI DISPONIBILI + + + + Cursors + Cursori + + + + Trigger + Trigger + + + + Close + Chiudi + + + + PowerController + + + Scopy Power Control + Scopy Power Control + + + + + Set + Imposta + + + + + Measure + Misura + + + + + + + VDC + VDC + + + + Tracking ratio control + Controllo del rapporto di Tracciamento + + + + Independent + Indipendente + + + + Tracking + Tracciamento + + + + 100 + 100 + + + + % + % + + + + Positive output + Uscita Positiva + + + + + Enable + Abilita + + + + Negative output + Uscita Negativa + + + + Preferences + + + Form + Scheda + + + + GENERAL + GENERALE + + + + OSCILLOSCOPE + OSCILLOSCOPIO + + + + Enable labels on the plot + Abilita etichette sulla figura + + + + Enable graticule + Abilita griglia + + + + Enable mini histogram + Abilita mini istogramma + + + + Enable all instrument notes + Abilita tutte le note degli strumenti + + + + Language (requires app restart) + Linguaggio (richede il riavvio dell'app) + + + + Restart the application for changes to take effect + Riavvia l'applicazione per rendere i cambiamenti effettivi + + + + Attempt temperature-based calibration (EXPERIMENTAL) + Tentativo di calibrazione basata sulla temperatura (SPERIMENTALE) + + + + Enable animations + Abilita animazioni + + + + 1 + 1 + + + + Run external scripts (Experimental) + Esegui gli script esterni (Sperimentale) + + + + SPECTRUM ANALYZER + ANALIZZATORE DI SPETTRO + + + + Only search marker peaks in visible domain + Cerca picchi marker sono nel dominio visibile + + + + Double click to detach a tool + Doppio click per disancorare un tool + + + + Save session when closing Scopy + Salva sessione quando chiudi Scopy + + + + NETWORK ANALYZER + ANALIZZATORE DI RETE + + + + Always display 0db value on graph + Mostra sempre 0dB sul grafico + + + + Scriptable manual calibration + Calibrazione manuale basata su script + + + + Show advanced device information + Mosta informazioni avanzate dispositivo + + + + LOGIC ANALYZER + ANALIZZATORE LOGICO + + + + Display sampling points when zoomed + Mostra punti di campionamento quando ingrandisci + + + + SIGNAL GENERATOR + GENERATORE DI SEGNALE + + + + Number of displayed periods + Numeri di periodi mostrati + + + + Enable digital decoders + Abilita i decoder digitali + + + + Enable sample rate filters + Abilita i filtri di campionamento + + + + Show ADC digital filter config + Mostra la configurazione dei filtri digitali dell'ADC + + + + DEBUG + DEBUG + + + + Enable Debug Messages (Only for Debugging, Bugreporting) + Abilita i messaggi di debug (solo per scopi di debug, bug report) + + + + Enable Debug Instrument + Abilita Strumento di Debug + + + + Enable user notes in main page + Abilita note utente nella pagina principale + + + + Skip calibration if already calibrated (cal values are not default) + Salta la calibrazione se già calibrato (i valori di calibrazione non sono i default) + + + + Reset Scopy + Ripristina Scopy + + + + PulsePatternUI + + + Form + Scheda + + + + Low + Low + + + + + + + 0 + 0 + + + + High + High + + + + 100 + 100 + + + + Counter Init + Inizializza contatore + + + + Delay + Ritardo + + + + + 1 + 1 + + + + Delay polarity + Polarità del ritardo + + + + Number of pulses + Numero di Impulsi + + + + QObject + + + Period + Periodo + + + + Frequency + Frequenza + + + + Min + Min + + + + Max + Max + + + + Peak-peak + Picco-Picco + + + + Mean + Media + + + + Cycle Mean + Media Cycle + + + + RMS + RMS + + + + Cycle RMS + RMS Cycle + + + + AC RMS + RMC AC + + + + Area + Area + + + + Cycle Area + Area Cycle + + + + Low + Basso + + + + High + Alto + + + + Amplitude + Ampiezza + + + + Middle + Medio + + + + +Over + + Over + + + + -Over + - Over + + + + Rise + Salita + + + + Fall + Discesa + + + + +Width + + Larghezza + + + + -Width + - Larghezza + + + + +Duty + + Duty + + + + -Duty + - Duty + + + + RegisterWidget + + + Form + Scheda + + + + RunSingleWidget + + + Form + Scheda + + + + Run + Avvia + + + + Single + Acquisizione Singola + + + + SPIPatternUI + + + Form + Scheda + + + + MSB First + Byte più significativo prima + + + + + + 1 + 1 + + + + + + 0 + 0 + + + + CLK Phase + Fase CLK + + + + CS Polarity + Polarità CS + + + + CLK Polarity + Polarità CLK + + + + Bytes per frame + Byte per frame + + + + Inter frame space + Spazio Inter frame + + + + Data + Dati + + + + SignalGenerator + + + Scopy Signal Generator + Generatore di Segnali Scopy + + + + Constant + Costante + + + + Waveform + Forma d'onda + + + + Sine + Seno + + + + Square + Onda quadra + + + + Triangle + Onda Triangolare + + + + Trapezoidal + Onda Trapezoidale + + + + Rising Ramp Sawtooth + Dente di sega a rampa ascendente + + + + Falling Ramp Sawtooth + Dente di sega a rampa discendente + + + + Stair Step + Rampa spezzata + + + + TIMING + TEMPO + + + + Buffer + Buffer + + + + FILE + FILE + + + + Path + Percorso + + + + + No file loaded + Nessun file caricato + + + + Format + Formato + + + + Size + Dimensione + + + + 0 samples + 0 campioni + + + + Load file + Carica File + + + + Channel + Canale + + + + SCALING + SCALING + + + + Math + Matematica + + + + NOISE + RUMORE + + + + None + Nessuno + + + + Uniform + Uniforme + + + + Gaussian + Gaussiano + + + + Laplacian + Laplaciano + + + + Impulse + Impulso + + + + OTHER + ALTRO + + + + Line thickness + Spessore linea + + + + 0.5 + 0.5 + + + + 1 + 1 + + + + 1.5 + 1.5 + + + + 2 + 2 + + + + 2.5 + 2.5 + + + + 3 + 3 + + + + 3.5 + 3.5 + + + + 4 + 4 + + + + 4.5 + 4.5 + + + + 5 + 5 + + + + Close + Chiudi + + + + SpectrumAnalyzer + + + Form + Scheda + + + + Print + Stampa + + + + Preset + Preset + + + + + dBFS + dBFS + + + + Sample: + Campione: + + + + Average Sample: + Media Campione: + + + + Marker_n 0.000 Hz 0dB + Marker_n 0.000 Hz 0dB + + + + Channel + Canale + + + + Type + Tipo + + + + Sample + Campione + + + + and other types + e altri tipi + + + + Window + Finestra + + + + Uniform (none) + Uniforme (nessuna) + + + + and others windows + e altre finestre + + + + Averaging + Media + + + + Apply + Applica + + + + CH Thickness + Spessore CH + + + + 0.5 + 0.5 + + + + 1 + 1 + + + + 1.5 + 1.5 + + + + 2 + 2 + + + + 2.5 + 2.5 + + + + 3 + 3 + + + + 3.5 + 3.5 + + + + 4 + 4 + + + + 4.5 + 4.5 + + + + 5 + 5 + + + + History + Storia + + + + Gain mode + Modo Guadagno + + + + + Low + Basso + + + + High + Alto + + + + Snapshot + Istantanea + + + + General settings + Impostazioni Generali + + + + Export + Esporta + + + + + Sweep + Spazzolata + + + + Logarithmic + Logaritmica + + + + Linear + Lineare + + + + FREQUENCY + FREQUENZA + + + + AMPLITUDE + AMPIEZZA + + + + Resolution BW + Risoluzione BW + + + + Units + Unità + + + + + Markers + Marcatori + + + + Settings + Impostazioni + + + + MARKER + MARCATORE + + + + Normal + Normale + + + + Delta + Delta + + + + Peak + Picco + + + + + Peak + Picco + + + + + Ampl + Ampl + + + + GENERAL + GENERALE + + + + Marker Table + Tabella Marcatore + + + + Import Reference Channels + Impota canali di riferimento + + + + No file selected! + Nessun file selezionato! + + + + Browse + Sfoglia + + + + Import + Importa + + + + SpinBoxA + + + Form + Scheda + + + + StartStopRangeWidget + + + Form + Scheda + + + + Statistic + + + Form + Scheda + + + + Avg: + Media: + + + + + + 0.000 + 0.000 + + + + Min: + Min: + + + + Max: + Max: + + + + 1 + 1 + + + + Measurement + Misura + + + + StatisticsPanel + + + Form + Scheda + + + + ToolLauncher + + + Scopy + Scopy + + + + Home + Home + + + + Save + Salva + + + + Load + Carica + + + + Preferences + Preferenze + + + + Notes + Nte + + + + Quit + Abbandona + + + + ADC Offset + ADC Offset + + + + ADC Gain + Guadagno del ADC + + + + Reset ADC Calibration + Reimposta Calibrazione ADC + + + + TriggerSettings + + + Form + Scheda + + + + Trigger Settings + Impostazioni Trigger + + + + Trigger mode + Modalità Trigger + + + + auto + auto + + + + normal + normale + + + + + Source + Sorgente + + + + INTERNAL (ANALOG) + INTERNO (ANALOGICO) + + + + + Condition + Condizione + + + + + Rising Edge + Fronte di Salita + + + + + Falling Edge + Fronte di Discesa + + + + + Low + Basso + + + + + High + Alto + + + + This feature is not supported while the Mixed Signal View is enabled! + Questa funzionalità non è supportata mente la Mixed Signal View è abilitata! + + + + DIGITAL + DIGITALE + + + + Any Edge + Qualunque fronte + + + + M2K daisychain position + M2K posizione daisychain + + + + TRIGGER LOGIC + LOGICA TRIGGER + + + + Analog - Digital + Analogico - Digitale + + + + Digital OR Analog + Digitale OR Analogico + + + + Digital AND Analog + Digitale AND Analogico + + + + Digital XOR Analog + Digitale XOR Analogico + + + + !Digital OR Analog + !Digitale OR Analogico + + + + !Digital AND Analog + !Digitale AND Analogico + + + + !Digital XOR Analog + !Digitale XOR Analogico + + + + EXTERNAL TRIGGER OUT + TRIGGER OUT ESTERNO + + + + UARTPatternUI + + + Form + Scheda + + + + Stop + Stop + + + + 1 + 1 + + + + 2 + 2 + + + + 3 + 3 + + + + Baud + Baud + + + + + 9600 + 9600 + + + + 1200 + 9600 + + + + 2400 + 2400 + + + + 4800 + 4800 + + + + 14400 + 14400 + + + + 19200 + 19200 + + + + 28800 + 28800 + + + + 38400 + 38400 + + + + 57600 + 57600 + + + + 115200 + 115200 + + + + 230400 + 230400 + + + + Parity + Parità + + + + NONE + NESSUNA + + + + ODD + DISPARI + + + + EVEN + PARI + + + + MARK + MARK + + + + SPACE + SPACE + + + + Parameters + Parametri + + + + Data to Send + Data to Send + + + + UserNotePage + + + Form + + + + + Remove note + Rimuovi nota + + + + UserNotes + + + Form + Scheda + + + + Save + Salva + + + + File path + Percorso del file + + + + Browse + Sfoglia + + + + Note name + Nome Nota + + + + WalkingPatternUI + + + Form + Scheda + + + + Walking level + Livello Scorrimento + + + + 0 + 0 + + + + + 1 + 1 + + + + Frequency + Frequenza + + + + 1000 + 100 + + + + Direction + Direzione + + + + Right + Destra + + + + Left + Sinistra + + + + Length + Lunghezza + + + + adiscope::BinaryCounterPatternUI + + + Frequency + Frequenza + + + + adiscope::CapturePlot + + + + + + + + Zoom: + Zoom: + + + + + /div + /div + + + + Waiting + In attesa + + + + Triggered + Trigger attivo + + + + Stop + Ferma + + + + Auto + Auto + + + + adiscope::ClockPatternUI + + + Frequency + Frequenza + + + + Phase + Fase + + + + Duty + Duty + + + + adiscope::ConnectDialog + + + + Connect + Connetti + + + + Waiting for connection ... + In attesa di connessione... + + + + + Context info + Informazioni contestuali + + + + Add + Aggiungi + + + + Warning + Avviso + + + + Error: Unable to find host: No such host is known! + Errore: Impossibile trovare l'host: non esiste alcun host con questo nome! + + + + adiscope::CustomSwitch + + + on + + + + + off + spento + + + + adiscope::DMM + + + Timer + Timer + + + + Stop + Ferma + + + + Run + Avvia + + + + Export + Esporta + + + + Comma-separated values files (*.csv);;All Files(*) + File Comma-separated values (.*csv);;Tutti i Files(*) + + + + No file selected + Nessun file selezionato + + + + + File is open in another program + Il file è aperto in un altro programma + + + + + Choose a file + Scegli un file + + + + adiscope::Debugger + + + Save File + Salva File + + + + JavaScript (*.js) + JavaScript (*.js) + + + + adiscope::DigitalIO + + + Stop + Interrompi + + + + Run + Avvia + + + + adiscope::ExportSettings + + + Channels + Canali + + + + Name + Nome + + + + Export + Esporta + + + + adiscope::GrayCounterPatternUI + + + Frequency + Frequenza + + + + adiscope::I2CPatternUI + + + Frequency + Frequenza + + + + adiscope::ImportPatternUI + + + Frequency + Frequenza + + + + Open file + Apri file + + + + Import selected channels + Importa i canali selezionati + + + + No file selected + Nessun file selezionato + + + + Export + Esporta + + + + Comma-separated values files (*.csv);;Tab-delimited values files (*.txt) + File CSV (*.CSV);;File con valori delimitati da Tab (.*txt) + + + + adiscope::ImportSettings + + + Import + Importa + + + + Import all + Importa tutti + + + + adiscope::InfoPage + + + Error: Connection failed! + Errore: Connessione fallita! + + + + Connected + Connesso + + + + Your hardware revision does not support the identify feature + La revisione del tuo hardware non supporta la funzionalità di identificazione + + + + adiscope::M2kDeviceWidget + + + M2K + M2K + + + + adiscope::M2kInfoPage + + + Not connected + Non connesso + + + + Always disconnect analog inputs/outputs before calibration + Disconnettere sempre gli ingressi/uscite analogiche prima della calibrazione + + + + Can't identify this device. + Impossibile identificare questo dispositivo + + + + Can't identify device. Please try to update your firmware! + Impossibile identificare dispositivo. Si prega di provare ad aggiornare il firmware! + + + + Your hardware revision does not support the identify feature + La revisione del tuo hardware non supporta la funzionalità di identificazione + + + + adiscope::ManualCalibration + + + Save File + Salva File + + + + ini (*.ini) + ini (*.ini) + + + + + °C + °C + + + + adiscope::MarkerTable + + + Id + Identificativo + + + + Marker + Marcatore + + + + Channel + Canale + + + + Frequency + Frequenza + + + + Magnitude + Ampiezza + + + + Type + Tipo + + + + adiscope::MeasureSettings + + + Horizontal + Orizzontale + + + + + Name + Nome + + + + + Measure + Misura + + + + + Stats + Statistiche + + + + Vertical + Verticale + + + + + Recover + Recupera + + + + + Delete All + Cancella Tutto + + + + adiscope::NetworkAnalyzer + + + + Stopped + Arrestato + + + + Frequency (Hz) + Frequenza (Hz) + + + + Magnitude(dB) + Ampiezza (dB) + + + + Phase (°) + Fase (°) + + + + Samples count + Conteggio campioni + + + + Samps/decade + Campioni/decade + + + + Step + Passo + + + + Amplitude + Ampiezza + + + + Offset + Offset + + + + Max. Magnitude + Ampiezza Max. + + + + Min. Magnitude + Ampiezza Min. + + + + Max. Phase + Fase Max. + + + + Min. Phase + Fase Min. + + + + + Settling time + Tempo di assestamento + + + + Before Buffer + Pre-buffer + + + + After Buffer + Post-buffer + + + + + Sample: + Campione: + + + + + Current Frequency: + Frequenza Corrente: + + + + + DC Voltage: + Tensione DC: + + + + + Response channel voltage < 50mV! + Risposta tensione canale < 50mV! + + + + + Low + Basso + + + + + High + Alto + + + + + Gain Mode: + Modo Guadagno: + + + + Transparency + Trasparenza + + + + Image + Immagine + + + + Save to + Salva come + + + + Import + Importa + + + + Comma-separated values files (*.csv);;Tab-delimited values files (*.txt) + File Comma-separated values (*.csv);;File Tab-delimited values (*.txt) + + + + Comma-separated values files (*.csv) + File Comma-separated values (*.csv) + + + + Tab-delimited values files (*.txt) + File Tab-delimited values (*.txt) + + + + All Files(*) + Tutti i file (*) + + + + Export + Esporta + + + + Average: + Media: + + + + Running + Eseguendo + + + + Stopping... + Arrestando... + + + + adiscope::NetworkAnalyzer_API + + + Transparency + Trasparenza + + + + adiscope::Oscilloscope + + + + Time Base + Base dei Tempi + + + + + Position + Posizione + + + + Volts/Div + Volt/Div + + + + + Add Channel + Aggiungi Canale + + + + + + Export + Esporta + + + + + Comma-separated values files (*.csv) + File Comma-separated values (*.csv) + + + + + Tab-delimited values files (*.txt) + File Tab-delimited values (*.txt) + + + + + All Files(*) + Tutti i File (*) + + + + Transparency + Trasparenza + + + + "Warning: This feature is not supported on the current firmware version!" + "Avviso: Questa funzionalità non è supportata dall versione corrente del firmware!" + + + + * When the Mixed Signal View is enabled the LogicAnalyzer tool will be disabled! +** The trigger can be disabled or set only on the Digital channels or Analog channels, not on both at the same time! + * Quando la Mixed Signal View è abilitata l'Analizatore Logico è disabilitato! ** Il trigger può essere disabilitato o abilitato solo o sui canali Digitali o su quelli Analogici, ma non su entrambi allo stesso tempo! + + + + Math + Matematica + + + + Browse + Sfoglia + + + + No file selected + Nessun file selezionato + + + + + Reference + Riferimento + + + + Logic + Logica + + + + Add channel + Aggiungi Canale + + + + Import selected channels + Importa i canali selezionati + + + + Enable Mixed Signal View + Abilita Mixed Signal View + + + + Import + Importa + + + + Comma-separated values files (*.csv);;Tab-delimited values files (*.txt) + File Comma-separated values (*.csv);;File Tab-delimited values (*.txt) + + + + + Snapshot + Istantanea + + + + Filter 1 - Enable - + Filtro 1 - Abilita - + + + + Filter 2 - Enable - + Filtro 2 - Abilita - + + + + + Save + Salva + + + + adiscope::PowerController + + + + mVolts + milliVolt + + + + + Volts + Volt + + + + + Value + Valore + + + + + Disable + Disabilita + + + + + Enable + Abilita + + + + adiscope::Preferences + + + This change will be applied only after a Scopy reset. + Questo cambiamento sarà applicato al riavvio di Scopy + + + + By resetting scopy you will lose the current configuration! + Ripristinando Scopy perderai la configurazione attuale! + + + + Do you want to reset? + Vuoi ripristinare? + + + + Load language + Carica linguaggio + + + + Language files (*.qm) + File di Linguaggio (*.qm) + + + + adiscope::PrintablePlot + + + + + + Documents + Documenti + + + + Image + Immagine + + + + Export File Name + lack of context + Nome del file Esportato + + + + adiscope::PulsePatternUI + + + Sample Rate + Frequenza di Campionamento + + + + adiscope::RandomPatternUI + + + Frequency + Frequenza + + + + adiscope::RunSingleWidget + + + + + Run + Avvia + + + + + + Single + Acquisizione Singola + + + + + + + + Stop + Ferma + + + + adiscope::SPIPatternUI + + + Frequency + Frequenza + + + + adiscope::SignalGenerator + + + deg + deg + + + + π rad + π rad + + + + + + + + ns + ns + + + + + + + + μs + μs + + + + + + + + ms + ms + + + + + + + + s + s + + + + + + Phase + Fase + + + + μVolts p-p + μVolt p-p + + + + mVolts p-p + mVolt p-p + + + + Volts p-p + Volt p-p + + + + + + Amplitude + Ampiezza + + + + + + + μVolts + μVolt + + + + + + + + mVolts + mVolt + + + + + + + + Volts + Volt + + + + + Offset + Offset + + + + mHz + mHz + + + + Hz + Hz + + + + kHz + kHz + + + + MHz + MHz + + + + Frequency + Frequenza + + + + Rising + Salita + + + + Falling + Discesa + + + + Rise Time + Tempo di Salita + + + + Fall Time + Tempo di Discesa + + + + High Time + Tempo Alto + + + + Low Time + Tempo Basso + + + + + SampleRate + Frequenza di Campionamento + + + + Record Length + Lungezza Record + + + + Value + Valore + + + + Duty Cycle + Duty Cycle + + + + + + samples + campioni + + + + Open File + Apri File + + + + Comma-separated values files (*.csv);;Tab-delimited values files (*.txt);;Waveform Audio File Format (*.wav);;Matlab files (*.mat) + File Comma-separated values (*.csv);;File Tab-delimited values (*.txt);;File Waveform Audio Format (*.wav);;File Matlab (*.mat) + + + + adiscope::Sismograph + + + Voltage (V) + Tesione (V) + + + + Time (s) + Tempo (s) + + + + adiscope::SpectrumAnalyzer + + + + + + Export + Esporta + + + + dBFS + dBFS + + + + dBV + dBV + + + + dBu + dBu + + + + Vpeak + Vpicco + + + + Vrms + Vrms + + + + V/√Hz + V/√Hz + + + + Sample + Campione + + + + Peak Hold + Peak Hold + + + + Peak Hold Continous + Peak Hold Continous + + + + Min Hold + Min Hold + + + + Min Hold Continous + Min Hold Continous + + + + Linear RMS + RMS lineare + + + + Linear dB + bB Lineare + + + + Exponential RMS + RMS esponenziale + + + + Exponential dB + dB Esponenziale + + + + Flat top + Testa piatta + + + + Rectangular + Rettangolare + + + + Triangular (Bartlett) + Triangolare (Bartlett) + + + + Hamming + Hamming + + + + Hann + Hann + + + + Blackman-Harris + Blackman-Harris + + + + Kaiser + Kaiser + + + + Manual + Manuale + + + + Peak + Picco + + + + Delta + Delta + + + + Fixed + Fisso + + + + Scale/Div + Scala/Div + + + + + Top + Sopra + + + + + Bottom + Sotto + + + + Hz + Hz + + + + kHz + kHz + + + + MHz + MHz + + + + Frequency Position + Posizione frequenza + + + + + Comma-separated values files (*.csv) + File Comma-separated values (*.csv) + + + + + Tab-delimited values files (*.txt) + File Tab-delimited values (*.txt) + + + + + All Files(*) + Tutti i file(*) + + + + Comma-separated values files (*.csv);;Tab-delimited values files (*.txt) + File Comma-separated values (*.csv);;File Tab-delimited values (*.txt) + + + + Snapshot + Istantanea + + + + Sample: + Campione: + + + + Average Sample: + Media Campione: + + + + adiscope::StartStopRangeWidget + + + Start + Avvia + + + + Stop + Ferma + + + + Center + Centro + + + + Span + Durata + + + + adiscope::ToolLauncher + + + Preferences + Preferenze + + + + Calibration skipped because already calibrated. + Calibrazione saltata perchè già calibrato. + + + + Calibrated + Calibrato + + + + Save session + Salva sessione + + + + + Scopy-Files (*.ini) + Scopy-File (*ini) + + + + Load session + Carica Sessione + + + + Click to open the home menu + Clicca per aprire il menu iniziale + + + + Click to disconnect the device + Clicca per disconnettere il dispositivo + + + + Click to save the current session + Clicca per salvare la sessione corrente + + + + + Click to load a session + Clicca per caricare una sessione + + + + + Select a device first + Seleziona un dispositivo prima + + + + + + Click to connect the device + Clicca per connettere un dispositivo + + + + Report a bug! + Riporta un bug! + + + + Connecting... + Connettendo... + + + + Disconnecting... + Disconnettendo... + + + + Connect + Connesso + + + + Calibrating... + Calibrando... + + + + Calibration Failed + Connessione Fallita + + + + + Disconnect + Disconnesso + + + + Digital decoders support is disabled. Some features may be missing + Il supporto dei decoder digitali è disabilitato. Alcune funzionalità potrebbere mancare + + + + There was a problem initializing libsigrokdecode. Some features may be missing + C'è stato un problema nell'inizializzazione di libsigrokdecode. Alcune funzionalità potrebbero mancare + + + + Calibrating + Calibrando + + + + adiscope::ToolMenu + + + Oscilloscope + Oscilloscopio + + + + Spectrum Analyzer + Analizzatore di Spettro + + + + Network Analyzer + Analizzatore di Rete + + + + Signal Generator + Generatore di Segnale + + + + Logic Analyzer + Analizzatore Logico + + + + Pattern Generator + Generatore di Pattern + + + + Digital IO + IO Digitale + + + + Voltmeter + Voltmetro + + + + Power Supply + Generatore + + + + Debugger + Debugger + + + + Calibration + Calibrazione + + + + adiscope::ToolMenuItem + + + Calibrating... + Calibrando... + + + + adiscope::TriggerSettings + + + Forward Trigger In + Lack of context + Forward Trigger In + + + + Oscilloscope + Oscilloscopio + + + + + Logic Analyzer + Analizzatore Logico + + + + + μVolts + μVolt + + + + + mVolts + mVolt + + + + + Volts + Volt + + + + Level + Livello + + + + Hysteresis + Isteresi + + + + External Trigger In + Trigger In esterno + + + + None + Nessuno + + + + adiscope::UserNotes + + + Note + Nota + + + + Invalid or empty file! + File invalido o vuoto + + + + Path: + Percorso + + + + Warning: The file is empty! + Avviso: Il file è vuoto! + + + + Warning: The path is invalid! + Avviso: Il percorso non è valido! + + + + adiscope::logic::LogicAnalyzer + + + Sample Rate + Frequenza di Campionamento + + + + Nr of samples + Nr di Campioni + + + + Delay + Ritardo + + + + Transparency + Trasparenza + + + + Select a decoder to add + Seleziona un decoder da aggiungere + + + + External Trigger In + Trigger In esterno + + + + Oscilloscope + Oscilloscopio + + + + Comma-separated values files (*.csv) + File comma-separated values (*.csv) + + + + Tab-delimited values files (*.txt) + File tab-delimited values (*.txt) + + + + Value Change Dump(*.vcd) + Value Change Dump(*.vcd) + + + + All Files(*) + Tutti i File (*) + + + + Export + Esporta + + + + adiscope::prop::Bool + + + + Querying config key %1 resulted in %2 + L'interrogazione della chiave di configurazione %1 ha prodotto %2 come risultato + + + + adiscope::prop::Double + + + + Querying config key %1 resulted in %2 + L'interrogazione della chiave di configurazione %1 ha prodotto %2 come risultato + + + + adiscope::prop::Enum + + + + Querying config key %1 resulted in %2 + L'interrogazione della chiave di configurazione %1 ha prodotto %2 come risultato + + + + adiscope::prop::Int + + + + Querying config key %1 resulted in %2 + L'interrogazione della chiave di configurazione %1 ha prodotto %2 come risultato + + + + adiscope::prop::String + + + + Querying config key %1 resulted in %2 + L'interrogazione della chiave di configurazione %1 ha prodotto %2 come risultato + + + + dioChannel + + + Form + Scheda + + + + + 0 + 0 + + + + in + ingresso + + + + out + uscita + + + + 1 + 1 + + + + dioElement + + + Form + Scheda + + + + 0 - 7 + 0 - 7 + + + + Individual + Individuale + + + + Group + Gruppo + + + + in + ingresso + + + + out + uscita + + + + 127 + 127 + + + + scriptedBinaryCounter + + + Form + Scheda + + + + PulseScript + Script di Impulsi + + + + NumberOfPulses + Numero di Impulsi + + + + Samples/Pulse + Campioni/Impulso + + + + Hi + Hi + + + + Lo + Lo + + + + Frequency: + Frequenza: + + + + PushButton + Bottone + + + + INVALID + INVALIDO + + + diff --git a/resources/translations/scopy_jp.ts b/resources/translations/scopy_jp.ts new file mode 100644 index 0000000000..c2ed3c2e86 --- /dev/null +++ b/resources/translations/scopy_jp.ts @@ -0,0 +1,5964 @@ + + + + + BaseMenu + + + Form + + + + + BaseMenuItem + + + Form + + + + + BinaryCounterPatternUI + + + Form + + + + + Init Value + 初期値 + + + + + 0 + + + + + Frequency + 周波数 + + + + 1000 + + + + + Start counter + + + + + End counter + + + + + 65535 + + + + + Increment + インクリメント + + + + 1 + + + + + BitfieldWidget + + + Form + + + + + + TextLabel + テキストラベル + + + + 0x + + + + + CalibrationTemplate + + + Form + + + + + Calibration info here + キャリブレーション情報 + + + + Set + 設定 + + + + Measured + 測定 + + + + Enter value here + 値を入力 + + + + Restart + 再スタート + + + + Next + + + + + Finish + + + + + Channel + + + Form + + + + + Channel + チャンネル + + + + ChannelSettings + + + Form + + + + + Channel + チャンネル + + + + MATH + 演算 + + + + Edit Function + 機能を編集 + + + + HORIZONTAL + 水平軸 + + + + VERTICAL + 垂直軸 + + + + SETTINGS + 設定 + + + + CH Thickness + + + + + 0.5 + + + + + + + 1 + + + + + 1.5 + + + + + 2 + + + + + 2.5 + + + + + 3 + + + + + 3.5 + + + + + 4 + + + + + 4.5 + + + + + 5 + + + + + Memory depth + + + + + Probe +Attenuation + + + + + 0.1X + + + + + 1X + + + + + 10X + + + + + 100X + + + + + Curve Style + カーブスタイル + + + + Lines + + + + + Dots + + + + + Steps + + + + + Sticks + + + + + Smooth + + + + + Software +AC Coupling + + + + + Filter 1 - Enabled + + + + + + TC + + + + + + Gain + + + + + + 0 + + + + + Filter 2 - Enabled + + + + + Autoset + + + + + Snapshot + スナップショット + + + + Connect + + + Form + + + + + URI (Hostname) + + + + + Connect + 接続 + + + + Context info + 接続情報 + + + + ConstantPatternUI + + + Form + + + + + Constant + + + + + 0 + + + + + 1 + + + + + CursorReadouts + + + Form + + + + + Δt = + + + + + + 0.000ms + + + + + CurT2 = + + + + + 1/Δt = + + + + + - 000.000 ms + + + + + - 000.000 mHz + + + + + CurT1 = + + + + + CurV2 + + + + + ΔV + + + + + CurV1 + + + + + + 000.000 mV + + + + + - 000.000 mV + + + + + + + = + + + + + CursorsSettings + + + Form + + + + + Cursors + カーソル + + + + Normal + ノーマル + + + + Track + + + + + 0 + + + + + HORIZONTAL + 水平軸 + + + + VERTICAL + 垂直軸 + + + + CURSOR READOUTS + + + + + Transparency 0% + + + + + Position + 位置 + + + + CustomPlotPositionButton + + + Form + + + + + DMM + + + + MAX + + + + + + MIN + + + + + + VDC + + + + + Run + 実行 + + + + Channel 1 + チャンネル1 + + + + + DC (Direct Current) + + + + + + AC (20 Hz - 40 kHz) + + + + + + 1s + + + + + + 10s + + + + + + 60s + + + + + + History + + + + + + Line thickness + + + + + + 0.5 + + + + + + 1 + + + + + + 1.5 + + + + + + 2 + + + + + + 2.5 + + + + + + 3 + + + + + + 3.5 + + + + + + 4 + + + + + + 4.5 + + + + + + 5 + + + + + Channel 2 + チャンネル2 + + + + PEAK HOLD + + + + + Reset + リセット + + + + DATA LOGGING + + + + + Browse + ブラウズ + + + + Append + + + + + Choose a file + ファイルを選択 + + + + Overwrite + 上書き + + + + DbClickButtons + + + Form + + + + + 1 + + + + + 2 + + + + + 3 + + + + + 4 + + + + + 5 + + + + + Debugger + + + MainWindow + + + + + SCRIPTING ENGINE + + + + + Load Script + + + + + Run + + + + + Filename + + + + + + Read + + + + + Device + + + + + New Window + + + + + + Write + + + + + + Value: + + + + + DEVICE SELECTION + + + + + Detailed Register Map + + + + + Address: + + + + + 0x0000 + + + + + Display mode: + + + + + <value> + + + + + + 0x + + + + + Description: + + + + + Default Value: + + + + + Source: + + + + + Enable AutoRead + + + + + REGISTER MAP SETTINGS + + + + + DetachDragZone + + + Form + + + + + Drag here to detach! + + + + + Device + + + Form + + + + + DigitalIO + + + Form + + + + + Run + 実行 + + + + DigitalIoMenu + + + Form + + + + + PollingRate + + + + + 1000 + + + + + Enable Outputs + + + + + DigitalTriggerSettings + + + Form + + + + + Trigger Settings + トリガー設定 + + + + Trigger mode + トリガーモード + + + + auto + 自動 + + + + normal + ノーマル + + + + Trigger Logic + トリガーロジック + + + + OR + + + + + AND + + + + + EXTERNAL TRIGGER + 外部トリガー + + + + Source + ソース + + + + Condition + 状態 + + + + None + + + + + EXTERNAL TRIGGER OUT + 外部トリガー出力 + + + + DragZone + + + Form + + + + + EmptyPatternUI + + + Form + + + + + ExportSettings + + + Form + + + + + EXPORT + エクスポート + + + + Export All + すべてエクスポート + + + + Export + エクスポート + + + + FrequencyPatternUI + + + Form + + + + + Frequency + 周波数 + + + + 1000 + + + + + GenericJSPatternUI + + + Form + + + + + Script status + + + + + Clear console + + + + + HomepageControls + + + Form + + + + + I2CPatternUI + + + Form + + + + + R + + + + + W + + + + + Read/Write + + + + + MSB First + + + + + Address + + + + + Inter frame space + + + + + Data + + + + + InfoPage + + + Form + + + + + Forget device + + + + + Identify + + + + + Connect + 接続 + + + + Calibrate + キャリブレート + + + + InfoWidget + + + Form + + + + + Move + + + + + InstrumentNotes + + + Form + + + + + Notes + + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html> + + + + + Insert notes here + + + + + LAChannelGroup + + + Form + + + + + DIO + + + + + + 12 + + + + + None + + + + + LAChannelManager + + + Form + + + + + LAManagerHeader + + + Form + + + + + View + + + + + Name + 名前 + + + + DIO + + + + + Trigger + トリガー + + + + Select + 選択 + + + + LARequiredChannel + + + Form + + + + + Settings + 設定 + + + + + Role + + + + + LASettingsWidget + + + Form + + + + + REQUIRED + + + + + OPTIONAL + + + + + OPTIONS + オプション + + + + LChannelSettings + + + Form + + + + + BG Color + + + + + Edge Color + + + + + Low Color + + + + + High Color + + + + + SETTINGS + 設定 + + + + COLOR SETTINGS + + + + + Name + + + + + Thickness + + + + + 1 + + + + + 1.5 + + + + + 2 + + + + + 2.5 + + + + + 3 + + + + + 3.5 + + + + + 4 + + + + + 4.5 + + + + + 5 + + + + + LFSRPatternUI + + + Form + + + + + + 0x0001 + + + + + Generator Polynomial + + + + + Start State + + + + + Period + + + + + LogicAnalyzer + + + Scopy Logic Analyzer + Scopyロジックアナライザー + + + + Group + グループ + + + + + Channel Settings + チャンネル設定 + + + + + - + + + + + Name + 名前 + + + + 1 + + + + + Trace Height + + + + + GROUP + グループ + + + + Stack Decoder: + + + + + Trigger Settings + トリガー設定 + + + + Trigger mode + トリガーモード + + + + auto + 自動 + + + + normal + ノーマル + + + + Trigger Logic + トリガーロジック + + + + EXTERNAL TRIGGER + 外部トリガー + + + + "Warning: This feature is not supported on the current firmware version!" + + + + + Source + ソース + + + + Condition + 状態 + + + + General Settings + + + + + OneShot + ワンショット + + + + AVAILABLE CHANNELS + + + + + DECODERS + デコーダー + + + + Close + 閉じる + + + + Print + 印刷 + + + + Stream + + + + + Cursors + カーソル + + + + + Trigger + トリガー + + + + ManualCalibration + + + Form + + + + + Load Calibration + キャリブレーションをロード + + + + Save Calibration + キャリブレーションを保存 + + + + Run automatic + 自動的に実行 + + + + MarkerTable + + + Form + + + + + Math + + + Form + + + + + f(t) = + + + + + cos + + + + + 2 + + + + + 7 + + + + + , + + + + + 3 + + + + + ← + + + + + ( + + + + + exp + + + + + 1 + + + + + 8 + + + + + - + + + + + / + + + + + * + + + + + e + + + + + C + + + + + 0 + + + + + 6 + + + + + ) + + + + + log + + + + + t + + + + + + + + + + + 9 + + + + + tan + + + + + ^ + + + + + 4 + + + + + Apply + + + + + pi + + + + + 5 + + + + + sin + + + + + MathPanel + + + Form + + + + + Add channel + チャンネル追加 + + + + MeasureSettings + + + Form + + + + + Measure + 測定 + + + + Channel + チャンネル + + + + MEASUREMENTS + + + + + Counter + カウンター + + + + Display All + + + + + + Delete All + すべて消去 + + + + STATISTICS + + + + + Reset + リセット + + + + CUSTOM SELECTION + + + + + Enable + + + + + GATING SETTINGS + + + + + MeasurementsPanel + + + Form + + + + + NetworkAnalyzer + + + Print + 印刷 + + + + Current Frequency: + 現在の周波数: + + + + Sample: + サンプル: + + + + Average: + 平均: + + + + Phase (°) + 位相 (°) + + + + Magnitude (dB) + + + + + ° + + + + + 10 + + + + + Settings + 設定 + + + + + REFERENCE + リファレンス + + + + Channel 1 + チャンネル1 + + + + Channel 2 + チャンネル2 + + + + 0 + + + + + Gain Mode + ゲインモード + + + + Automatic + 自動 + + + + Low + + + + + High + + + + + RESPONSE + + + + + DC Filtering + + + + + + On + + + + + + Off + + + + + SWEEP + + + + + Logarithmic + + + + + Linear + + + + + Average + + + + + + Apply + + + + + Periods + + + + + DISPLAY + + + + + Delta Label + + + + + BUFFER PREVIEWER + + + + + ViewInOsc + + + + + Previous + + + + + Next + + + + + General Settings + + + + + PLOT + + + + + Type + + + + + Bode + + + + + Nyquist + + + + + Nichols + + + + + Line thickness + + + + + 0.5 + + + + + 1 + + + + + 1.5 + + + + + 2 + + + + + 2.5 + + + + + 3 + + + + + 3.5 + + + + + 4 + + + + + 4.5 + + + + + 5 + + + + + EXPORT + エクスポート + + + + Export + エクスポート + + + + Import + インポート + + + + Snapshot + スナップショット + + + + Remove Reference + + + + + Cursors + カーソル + + + + CURSOR READOUTS + + + + + Transparency 0% + + + + + Position + 位置 + + + + Cursors + カーソル + + + + NetworkAnalyzerBufferViewer + + + Form + + + + + Note + + + TextLabel + + + + + NumberPatternUI + + + Form + + + + + Number + + + + + OscGeneralSettings + + + GeneralSettings + + + + + General settings + + + + + VIEWS + + + + + FFT + + + + + X-Y + + + + + Histogram + ヒストグラム + + + + X-Y + + + + + Y-Axis + + + + + X-Axis + + + + + dots + + + + + lines + + + + + X-Y Line thickness + + + + + 1 + + + + + 2 + + + + + 3 + + + + + 4 + + + + + 5 + + + + + 6 + + + + + 7 + + + + + 8 + + + + + 9 + + + + + 10 + + + + + Oscilloscope + + + Scopy Oscilloscope + Scopyオシロスコープ + + + + Print + 印刷 + + + + Cursors + カーソル + + + + Measure + 測定 + + + + Trigger + トリガー + + + + Close + 閉じる + + + + PGCGSettings + + + Form + + + + + TextLabel + + + + + Pattern + パターン + + + + Output + + + + + PP + + + + + OD + + + + + CLOCK + + + + + SETTINGS + 設定 + + + + Name + 名前 + + + + Thickness + + + + + 1 + + + + + 1.5 + + + + + 2 + + + + + 2.5 + + + + + 3 + + + + + 3.5 + + + + + 4 + + + + + 4.5 + + + + + 5 + + + + + COLOR SETTINGS + + + + + BG Color + + + + + Edge Color + + + + + Low Color + + + + + High Color + + + + + PGChannel + + + Form + + + + + TextLabel + + + + + PGChannelGroup + + + Form + + + + + TextLabel + + + + + 12 + + + + + PGChannelManager + + + Form + + + + + PGChannelManagerHeader + + + Form + + + + + Enable + + + + + Name + 名前 + + + + DIO + + + + + Select + 選択 + + + + PGSettings + + + Form + + + + + Settings + 設定 + + + + Autoset + 自動設定 + + + + Sample Rate + サンプルレート + + + + Buffer Size + + + + + ExternalClock + 外部クロック + + + + External Clock Frequency + 外部クロック周波数 + + + + Reset Instrument + + + + + PatternGenerator + + + Scopy Pattern Generator + Scopyパターン発生器 + + + + Print + 印刷 + + + + Group + グループ + + + + + Channel Settings + チャンネル設定 + + + + 1 + + + + + Trace Height + + + + + Name + + + + + Open-Drain + + + + + Push-Pull + + + + + GROUP + グループ + + + + Pattern + パターン + + + + Trigger Settings + トリガー設定 + + + + Trigger mode + トリガーモード + + + + auto + 自動 + + + + normal + ノーマル + + + + Trigger Logic + トリガーロジック + + + + EXTERNAL TRIGGER + 外部トリガー + + + + Source + ソース + + + + Condition + 状態 + + + + - + + + + + General Settings + + + + + AVAILABLE CHANNELS + + + + + Cursors + カーソル + + + + Trigger + トリガー + + + + Close + 閉じる + + + + PowerController + + + Scopy Power Control + Scopy安定化電源 + + + + + Set + 設定 + + + + + Measure + 計測 + + + + + + + VDC + + + + + Tracking ratio control + トラッキング制御 + + + + Independent + + + + + Tracking + トラッキング + + + + 100 + + + + + % + + + + + Positive output + 正出力 + + + + + Enable + + + + + Negative output + 負出力 + + + + Preferences + + + Form + + + + + GENERAL + 一般 + + + + OSCILLOSCOPE + オシロスコープ + + + + Enable labels on the plot + ラベルをプロット + + + + Enable graticule + グリッドを表示 + + + + Enable mini histogram + ミニヒストグラムを表示 + + + + Enable all instrument notes + ノートを追加 + + + + Language (requires app restart) + 言語(要再起動) + + + + Restart the application for changes to take effect + 変更のため再起動 + + + + Attempt temperature-based calibration (EXPERIMENTAL) + + + + + Enable animations + アニメーション + + + + 1 + + + + + Run external scripts (Experimental) + 外部スクリプトを実行 + + + + SPECTRUM ANALYZER + スペクトラムアナライザー + + + + Only search marker peaks in visible domain + + + + + Double click to detach a tool + + + + + Save session when closing Scopy + Scopyを閉じる際にセッションを保存 + + + + NETWORK ANALYZER + ネットワークアナライザー + + + + Always display 0db value on graph + 常に0dBを表示 + + + + Scriptable manual calibration + + + + + Show advanced device information + アドバンスドデバイス情報ほ表示 + + + + LOGIC ANALYZER + ロジックアナライザー + + + + Display sampling points when zoomed + ズームの際にサンプリングポイントを表示 + + + + SIGNAL GENERATOR + 信号発生器 + + + + Number of displayed periods + 表示ピリオド数 + + + + Enable digital decoders + デジタルデコーダーを表示 + + + + Enable sample rate filters + サンプルレートフィルタを表示 + + + + Show ADC digital filter config + ADCデジタルフィルタ設定を表示 + + + + DEBUG + + + + + Enable Debug Messages (Only for Debugging, Bugreporting) + + + + + Enable Debug Instrument + + + + + Enable user notes in main page + ユーザーノートをメインページに表示 + + + + Skip calibration if already calibrated (cal values are not default) + キャリブレーション済みの場合キャリブレーションをスキップ + + + + Reset Scopy + Scopyをリセット + + + + PulsePatternUI + + + Form + + + + + Low + + + + + + + + 0 + + + + + High + + + + + 100 + + + + + Counter Init + + + + + Delay + 遅延 + + + + + 1 + + + + + Delay polarity + 遅延極性 + + + + Number of pulses + パルス数 + + + + QObject + + + Period + + + + + Frequency + 周波数 + + + + Min + + + + + Max + + + + + Peak-peak + + + + + Mean + + + + + Cycle Mean + + + + + RMS + + + + + Cycle RMS + + + + + AC RMS + + + + + Area + + + + + Cycle Area + + + + + Low + + + + + High + + + + + Amplitude + 振幅 + + + + Middle + + + + + +Over + + + + + -Over + + + + + Rise + + + + + Fall + + + + + +Width + + + + + -Width + + + + + +Duty + + + + + -Duty + + + + + RegisterWidget + + + Form + + + + + RunSingleWidget + + + Form + + + + + Run + 実行 + + + + Single + シングル + + + + SPIPatternUI + + + Form + + + + + MSB First + + + + + + + 1 + + + + + + + 0 + + + + + CLK Phase + CLK位相 + + + + CS Polarity + CS極性 + + + + CLK Polarity + CLK極性 + + + + Bytes per frame + + + + + Inter frame space + + + + + Data + データ + + + + SignalGenerator + + + Scopy Signal Generator + Scopy信号発生器 + + + + Constant + + + + + Waveform + 波形 + + + + Sine + + + + + Square + + + + + Triangle + + + + + Trapezoidal + + + + + Rising Ramp Sawtooth + + + + + Falling Ramp Sawtooth + + + + + Stair Step + + + + + TIMING + + + + + Buffer + + + + + FILE + + + + + Path + + + + + + No file loaded + + + + + Format + + + + + Size + サイズ + + + + 0 samples + 0サンプル + + + + Load file + ファイルをロード + + + + Channel + チャンネル + + + + SCALING + + + + + Math + 演算 + + + + NOISE + + + + + None + + + + + Uniform + + + + + Gaussian + + + + + Laplacian + + + + + Impulse + + + + + OTHER + + + + + Line thickness + + + + + 0.5 + + + + + 1 + + + + + 1.5 + + + + + 2 + + + + + 2.5 + + + + + 3 + + + + + 3.5 + + + + + 4 + + + + + 4.5 + + + + + 5 + + + + + Close + 閉じる + + + + SpectrumAnalyzer + + + Form + + + + + Print + 印刷 + + + + Preset + プリセット + + + + + dBFS + + + + + Sample: + サンプル: + + + + Average Sample: + 平均サンプル: + + + + Marker_n 0.000 Hz 0dB + + + + + Channel + チャンネル + + + + Type + タイプ + + + + Sample + サンプル + + + + and other types + + + + + Window + + + + + Uniform (none) + + + + + and others windows + + + + + Averaging + 平均化 + + + + Apply + + + + + CH Thickness + + + + + 0.5 + + + + + 1 + + + + + 1.5 + + + + + 2 + + + + + 2.5 + + + + + 3 + + + + + 3.5 + + + + + 4 + + + + + 4.5 + + + + + 5 + + + + + History + + + + + Gain mode + ゲインモード + + + + + Low + + + + + High + + + + + Snapshot + スナップショット + + + + General settings + + + + + Export + エクスポート + + + + + Sweep + + + + + Logarithmic + + + + + Linear + + + + + FREQUENCY + 周波数 + + + + AMPLITUDE + 振幅 + + + + Resolution BW + BW分解能 + + + + Units + + + + + + Markers + マーカー + + + + Settings + 設定 + + + + MARKER + マーカー + + + + Normal + + + + + Delta + + + + + Peak + + + + + + Peak + + + + + + Ampl + + + + + GENERAL + + + + + Marker Table + マーカーテーブル + + + + Import Reference Channels + リファレンスチャンネルをインポート + + + + No file selected! + + + + + Browse + ブラウズ + + + + Import + インポート + + + + SpinBoxA + + + Form + + + + + StartStopRangeWidget + + + Form + + + + + Statistic + + + Form + + + + + Avg: + + + + + + + 0.000 + + + + + Min: + + + + + Max: + + + + + 1 + + + + + Measurement + 計測 + + + + StatisticsPanel + + + Form + + + + + ToolLauncher + + + Scopy + + + + + Home + ホーム + + + + Save + 保存 + + + + Load + ロード + + + + Preferences + 環境設定 + + + + Notes + ノート + + + + Quit + 終了 + + + + ADC Offset + ADCオフセット + + + + ADC Gain + ADCゲイン + + + + Reset ADC Calibration + ADCキャリブレーションをリセット + + + + TriggerSettings + + + Form + + + + + Trigger Settings + トリガー設定 + + + + Trigger mode + トリガーモード + + + + auto + 自動 + + + + normal + ノーマル + + + + + Source + ソース + + + + INTERNAL (ANALOG) + + + + + + Condition + 状態 + + + + + Rising Edge + + + + + + Falling Edge + + + + + + Low + + + + + + High + + + + + This feature is not supported while the Mixed Signal View is enabled! + + + + + DIGITAL + デジタル + + + + Any Edge + + + + + M2K daisychain position + + + + + TRIGGER LOGIC + トリガーロジック + + + + Analog - Digital + + + + + Digital OR Analog + + + + + Digital AND Analog + + + + + Digital XOR Analog + + + + + !Digital OR Analog + + + + + !Digital AND Analog + + + + + !Digital XOR Analog + + + + + EXTERNAL TRIGGER OUT + 外部トリガー出力 + + + + UARTPatternUI + + + Form + + + + + Stop + 停止 + + + + 1 + + + + + 2 + + + + + 3 + + + + + Baud + + + + + + 9600 + + + + + 1200 + + + + + 2400 + + + + + 4800 + + + + + 14400 + + + + + 19200 + + + + + 28800 + + + + + 38400 + + + + + 57600 + + + + + 115200 + + + + + 230400 + + + + + Parity + + + + + NONE + + + + + ODD + + + + + EVEN + + + + + MARK + + + + + SPACE + + + + + Parameters + + + + + Data to Send + + + + + UserNotePage + + + Form + + + + + Remove note + ノートを消去 + + + + UserNotes + + + Form + + + + + Save + 保存 + + + + File path + + + + + Browse + ブラウズ + + + + Note name + + + + + WalkingPatternUI + + + Form + + + + + Walking level + + + + + 0 + + + + + + 1 + + + + + Frequency + 周波数 + + + + 1000 + + + + + Direction + + + + + Right + + + + + Left + + + + + Length + + + + + adiscope::BinaryCounterPatternUI + + + Frequency + 周波数 + + + + adiscope::CapturePlot + + + + + + + + Zoom: + + + + + + /div + + + + + Waiting + + + + + Triggered + トリガー + + + + Stop + 停止 + + + + Auto + 自動 + + + + adiscope::ClockPatternUI + + + Frequency + 周波数 + + + + Phase + 位相 + + + + Duty + デューティ + + + + adiscope::ConnectDialog + + + + Connect + 接続 + + + + Waiting for connection ... + 接続中... + + + + + Context info + + + + + Add + 追加 + + + + Warning + 警告 + + + + Error: Unable to find host: No such host is known! + + + + + adiscope::CustomSwitch + + + on + オン + + + + off + オフ + + + + adiscope::DMM + + + Timer + タイマー + + + + Stop + 停止 + + + + Run + 実行 + + + + Export + エクスポート + + + + Comma-separated values files (*.csv);;All Files(*) + + + + + No file selected + + + + + + File is open in another program + + + + + + Choose a file + ファイルを選択 + + + + adiscope::Debugger + + + Save File + ファイルを保存 + + + + JavaScript (*.js) + + + + + adiscope::DigitalIO + + + Stop + 停止 + + + + Run + 実行 + + + + adiscope::ExportSettings + + + Channels + チャンネル + + + + Name + 名前 + + + + Export + エクスポート + + + + adiscope::GrayCounterPatternUI + + + Frequency + 周波数 + + + + adiscope::I2CPatternUI + + + Frequency + 周波数 + + + + adiscope::ImportPatternUI + + + Frequency + 周波数 + + + + Open file + ファイルを開く + + + + Import selected channels + + + + + No file selected + + + + + Export + エクスポート + + + + Comma-separated values files (*.csv);;Tab-delimited values files (*.txt) + + + + + adiscope::ImportSettings + + + Import + インポート + + + + Import all + すべてインポート + + + + adiscope::InfoPage + + + Error: Connection failed! + + + + + Connected + 接続 + + + + Your hardware revision does not support the identify feature + + + + + adiscope::M2kDeviceWidget + + + M2K + + + + + adiscope::M2kInfoPage + + + Not connected + 接続されていません + + + + Always disconnect analog inputs/outputs before calibration + キャリブレーションの前はアナログ入出力はいつも未接続 + + + + Can't identify this device. + デバイスを認識できません. + + + + Can't identify device. Please try to update your firmware! + デバイスを認識ません.ファームウェアをアップデートしてください! + + + + Your hardware revision does not support the identify feature + このハードウェアのバージョンではこの機能はサポートされていません + + + + adiscope::ManualCalibration + + + Save File + ファイルを保存 + + + + ini (*.ini) + + + + + + °C + + + + + adiscope::MarkerTable + + + Id + + + + + Marker + + + + + Channel + チャンネル + + + + Frequency + 周波数 + + + + Magnitude + + + + + Type + タイプ + + + + adiscope::MeasureSettings + + + Horizontal + 水平軸 + + + + + Name + 名前 + + + + + Measure + 測定 + + + + + Stats + + + + + Vertical + 垂直軸 + + + + + Recover + + + + + + Delete All + すべて消去 + + + + adiscope::NetworkAnalyzer + + + + Stopped + 停止 + + + + Frequency (Hz) + 周波数(Hz) + + + + Magnitude(dB) + + + + + Phase (°) + 位相(°) + + + + Samples count + サンプル数 + + + + Samps/decade + サンプル/デコード + + + + Step + ステップ + + + + Amplitude + 振幅 + + + + Offset + オフセット + + + + Max. Magnitude + + + + + Min. Magnitude + + + + + Max. Phase + Max. 位相 + + + + Min. Phase + Min. 位相 + + + + + Settling time + セトリング時間 + + + + Before Buffer + + + + + After Buffer + + + + + + Sample: + サンプル: + + + + + Current Frequency: + 現在の周波数: + + + + + DC Voltage: + DC電圧: + + + + + Response channel voltage < 50mV! + + + + + + Low + + + + + + High + + + + + + Gain Mode: + ゲインモード: + + + + Transparency + + + + + Image + + + + + Save to + 保存 + + + + Import + インポート + + + + Comma-separated values files (*.csv);;Tab-delimited values files (*.txt) + + + + + Comma-separated values files (*.csv) + + + + + Tab-delimited values files (*.txt) + + + + + All Files(*) + すべてのファイル(*) + + + + Export + エクスポート + + + + Average: + 平均: + + + + Running + 実行中 + + + + Stopping... + 停止中... + + + + adiscope::NetworkAnalyzer_API + + + Transparency + + + + + adiscope::Oscilloscope + + + + Time Base + 時間軸 + + + + + Position + 位置 + + + + Volts/Div + + + + + + Add Channel + チャンネル追加 + + + + + + Export + エクスポート + + + + + Comma-separated values files (*.csv) + + + + + + Tab-delimited values files (*.txt) + + + + + + All Files(*) + すべてのファイル(*) + + + + Transparency + + + + + "Warning: This feature is not supported on the current firmware version!" + + + + + * When the Mixed Signal View is enabled the LogicAnalyzer tool will be disabled! +** The trigger can be disabled or set only on the Digital channels or Analog channels, not on both at the same time! + + + + + Math + 演算 + + + + Browse + ブラウズ + + + + No file selected + + + + + + Reference + リファレンス + + + + Logic + ロジック + + + + Add channel + チャンネル追加 + + + + Import selected channels + 選択したチャンネルをインポート + + + + Enable Mixed Signal View + ミックスドシグナルビューをイネーブル + + + + Import + インポート + + + + Comma-separated values files (*.csv);;Tab-delimited values files (*.txt) + + + + + + Snapshot + スナップショット + + + + Filter 1 - Enable - + + + + + Filter 2 - Enable - + + + + + + Save + 保存 + + + + adiscope::PowerController + + + + mVolts + + + + + + Volts + + + + + + Value + + + + + + Disable + + + + + + Enable + + + + + adiscope::Preferences + + + This change will be applied only after a Scopy reset. + + + + + By resetting scopy you will lose the current configuration! + + + + + Do you want to reset? + + + + + Load language + + + + + Language files (*.qm) + + + + + adiscope::PrintablePlot + + + + + + Documents + ドキュメント + + + + Image + イメージ + + + + Export File Name + ファイル名をエクスポート + + + + adiscope::PulsePatternUI + + + Sample Rate + サンプルレート + + + + adiscope::RandomPatternUI + + + Frequency + 周波数 + + + + adiscope::RunSingleWidget + + + + + Run + 実行 + + + + + + Single + シングル + + + + + + + + Stop + 停止 + + + + adiscope::SPIPatternUI + + + Frequency + 周波数 + + + + adiscope::SignalGenerator + + + deg + + + + + π rad + + + + + + + + + ns + + + + + + + + + μs + + + + + + + + + ms + + + + + + + + + s + + + + + + + Phase + 位相 + + + + μVolts p-p + + + + + mVolts p-p + + + + + Volts p-p + + + + + + + Amplitude + 振幅 + + + + + + + μVolts + + + + + + + + + mVolts + + + + + + + + + Volts + + + + + + Offset + オフセット + + + + mHz + + + + + Hz + + + + + kHz + + + + + MHz + + + + + Frequency + 周波数 + + + + Rising + + + + + Falling + + + + + Rise Time + + + + + Fall Time + + + + + High Time + + + + + Low Time + + + + + + SampleRate + サンプルレート + + + + Record Length + 保存長 + + + + Value + + + + + Duty Cycle + デューティサイクル + + + + + + samples + サンプル + + + + Open File + ファイルを開く + + + + Comma-separated values files (*.csv);;Tab-delimited values files (*.txt);;Waveform Audio File Format (*.wav);;Matlab files (*.mat) + + + + + adiscope::Sismograph + + + Voltage (V) + 電圧 (V) + + + + Time (s) + 時間 (s) + + + + adiscope::SpectrumAnalyzer + + + + + + Export + エクスポート + + + + dBFS + + + + + dBV + + + + + dBu + + + + + Vpeak + + + + + Vrms + + + + + V/√Hz + + + + + Sample + サンプル + + + + Peak Hold + + + + + Peak Hold Continous + + + + + Min Hold + + + + + Min Hold Continous + + + + + Linear RMS + + + + + Linear dB + + + + + Exponential RMS + + + + + Exponential dB + + + + + Flat top + + + + + Rectangular + + + + + Triangular (Bartlett) + + + + + Hamming + + + + + Hann + + + + + Blackman-Harris + + + + + Kaiser + + + + + Manual + + + + + Peak + + + + + Delta + + + + + Fixed + + + + + Scale/Div + + + + + + Top + + + + + + Bottom + + + + + Hz + + + + + kHz + + + + + MHz + + + + + Frequency Position + 周波数位置 + + + + + Comma-separated values files (*.csv) + + + + + + Tab-delimited values files (*.txt) + + + + + + All Files(*) + すべてのファイル(*) + + + + Comma-separated values files (*.csv);;Tab-delimited values files (*.txt) + + + + + Snapshot + スナップショット + + + + Sample: + サンプル: + + + + Average Sample: + 平均サンプル: + + + + adiscope::StartStopRangeWidget + + + Start + 開始 + + + + Stop + 停止 + + + + Center + + + + + Span + + + + + adiscope::ToolLauncher + + + Preferences + 環境設定 + + + + Calibration skipped because already calibrated. + すでにキャリブレーション済みのためキャリブレーションをスキップ. + + + + Calibrated + キャリブレーション済み + + + + Save session + セッションを保存 + + + + + Scopy-Files (*.ini) + + + + + Load session + セッションをロード + + + + Click to open the home menu + クリックしてホームメニューを開く + + + + Click to disconnect the device + クリックしてデバイスを切断 + + + + Click to save the current session + クリックして現在のセッションを保存 + + + + + Click to load a session + クリックしてセッションをロード + + + + + Select a device first + デバイスを選択 + + + + + + Click to connect the device + クリックしてデバイスを接続 + + + + Report a bug! + バグを報告! + + + + Connecting... + 接続中... + + + + Disconnecting... + 切断中... + + + + Connect + 接続 + + + + Calibrating... + キャリブレーション中... + + + + Calibration Failed + キャリブレーション失敗 + + + + + Disconnect + 切断 + + + + Digital decoders support is disabled. Some features may be missing + + + + + There was a problem initializing libsigrokdecode. Some features may be missing + + + + + Calibrating + キャリブレーション中 + + + + adiscope::ToolMenu + + + Oscilloscope + オシロスコープ + + + + Spectrum Analyzer + スペクトラムアナライザー + + + + Network Analyzer + ネットワークアナライザー + + + + Signal Generator + 信号発生器 + + + + Logic Analyzer + ロジックアナライザー + + + + Pattern Generator + パターン発生器 + + + + Digital IO + デジタル IO + + + + Voltmeter + 電圧計 + + + + Power Supply + 安定化電源 + + + + Debugger + + + + + Calibration + キャリブレーション + + + + adiscope::ToolMenuItem + + + Calibrating... + キャリブレーション中... + + + + adiscope::TriggerSettings + + + Forward Trigger In + + + + + Oscilloscope + オシロスコープ + + + + + Logic Analyzer + ロジックアナライザー + + + + + μVolts + + + + + + mVolts + + + + + + Volts + + + + + Level + レベル + + + + Hysteresis + ヒステリシス + + + + External Trigger In + 外部トリガー入力 + + + + None + + + + + adiscope::UserNotes + + + Note + + + + + Invalid or empty file! + + + + + Path: + パス: + + + + Warning: The file is empty! + + + + + Warning: The path is invalid! + + + + + adiscope::logic::LogicAnalyzer + + + Sample Rate + サンプルレート + + + + Nr of samples + + + + + Delay + 遅延 + + + + Transparency + + + + + Select a decoder to add + 追加するデコーダを選択 + + + + External Trigger In + 外部トリガー入力 + + + + Oscilloscope + オシロスコープ + + + + Comma-separated values files (*.csv) + + + + + Tab-delimited values files (*.txt) + + + + + Value Change Dump(*.vcd) + + + + + All Files(*) + + + + + Export + エクスポート + + + + adiscope::prop::Bool + + + + Querying config key %1 resulted in %2 + + + + + adiscope::prop::Double + + + + Querying config key %1 resulted in %2 + + + + + adiscope::prop::Enum + + + + Querying config key %1 resulted in %2 + + + + + adiscope::prop::Int + + + + Querying config key %1 resulted in %2 + + + + + adiscope::prop::String + + + + Querying config key %1 resulted in %2 + + + + + dioChannel + + + Form + + + + + + 0 + + + + + in + + + + + out + + + + + 1 + + + + + dioElement + + + Form + + + + + 0 - 7 + + + + + Individual + + + + + Group + + + + + in + + + + + out + + + + + 127 + + + + + scriptedBinaryCounter + + + Form + + + + + PulseScript + + + + + NumberOfPulses + + + + + Samples/Pulse + + + + + Hi + + + + + Lo + + + + + Frequency: + 周波数: + + + + PushButton + + + + + INVALID + + + + diff --git a/resources/translations/scopy_kr.ts b/resources/translations/scopy_kr.ts new file mode 100644 index 0000000000..faa6b35864 --- /dev/null +++ b/resources/translations/scopy_kr.ts @@ -0,0 +1,5971 @@ + + + + + BaseMenu + + + Form + + + + + BaseMenuItem + + + Form + + + + + BinaryCounterPatternUI + + + Form + + + + + Init Value + 초기값 + + + + + 0 + 0 + + + + Frequency + 주파수 + + + + 1000 + 1000 + + + + Start counter + 시작카운터 + + + + End counter + 종료카운터 + + + + 65535 + 65535 + + + + Increment + 증가 + + + + 1 + 1 + + + + BitfieldWidget + + + Form + + + + + + TextLabel + + + + + 0x + 0x + + + + CalibrationTemplate + + + Form + + + + + Calibration info here + 캘리브레이션 정보 확인 + + + + Set + 설정 + + + + Measured + 측정 + + + + Enter value here + 이곳에서 값 입력 + + + + Restart + 재시작 + + + + Next + 다음 + + + + Finish + 마침 + + + + Channel + + + Form + + + + + Channel + 채널 + + + + ChannelSettings + + + Form + + + + + Channel + 채널 + + + + MATH + 연산 + + + + Edit Function + 함수 편집 + + + + HORIZONTAL + 수평축 + + + + VERTICAL + 수직축 + + + + SETTINGS + 설정 + + + + CH Thickness + 채널 굵기 + + + + 0.5 + 0.5 + + + + + + 1 + 1 + + + + 1.5 + 1.5 + + + + 2 + 2 + + + + 2.5 + 2.5 + + + + 3 + 3 + + + + 3.5 + 3.5 + + + + 4 + 4 + + + + 4.5 + 4.5 + + + + 5 + 5 + + + + Memory depth + 메모리 크기 + + + + Probe +Attenuation + 프로브 +감쇄 + + + + 0.1X + 0.1X + + + + 1X + 1X + + + + 10X + 10X + + + + 100X + 100X + + + + Curve Style + 곡선 형태 + + + + Lines + + + + + Dots + + + + + Steps + 스텝 + + + + Sticks + + + + + Smooth + 스무스 + + + + Software +AC Coupling + 소프트웨어 +AC 커플링 + + + + Filter 1 - Enabled + 필터 1 - 실행- + + + + + TC + TC + + + + + Gain + 이득 + + + + + 0 + 0 + + + + Filter 2 - Enabled + 필터 2 - 실행- + + + + Autoset + 오토셋 + + + + Snapshot + 스냅샷 + + + + Connect + + + Form + + + + + URI (Hostname) + URI (호스트이름) + + + + Connect + 연결 + + + + Context info + 컨텍스트 정보 + + + + ConstantPatternUI + + + Form + + + + + Constant + 상수 + + + + 0 + 0 + + + + 1 + 1 + + + + CursorReadouts + + + Form + + + + + Δt = + Δt = + + + + + 0.000ms + 0.000ms + + + + CurT2 = + CurT2 = + + + + 1/Δt = + 1/Δt = + + + + - 000.000 ms + - 000.000 ms + + + + - 000.000 mHz + - 000.000 mHz + + + + CurT1 = + CurT1 = + + + + CurV2 + CurV2 + + + + ΔV + ΔV + + + + CurV1 + CurV1 + + + + + 000.000 mV + 000.000 mV + + + + - 000.000 mV + - 000.000 mV + + + + + + = + = + + + + CursorsSettings + + + Form + + + + + Cursors + 커서 + + + + Normal + 노멀 + + + + Track + 트랙 + + + + 0 + 0 + + + + HORIZONTAL + 수평축 + + + + VERTICAL + 수직축 + + + + CURSOR READOUTS + 커서 값 + + + + Transparency 0% + 투명도 0% + + + + Position + 위치 + + + + CustomPlotPositionButton + + + Form + + + + + DMM + + + + MAX + 최대 + + + + + MIN + 최소 + + + + + VDC + VDC + + + + Run + 실행 + + + + Channel 1 + 채널 1 + + + + + DC (Direct Current) + DC (직류 전류) + + + + + AC (20 Hz - 40 kHz) + AC (20 Hz - 40 kHz) + + + + + 1s + 1s + + + + + 10s + 10s + + + + + 60s + 60s + + + + + History + 내역 + + + + + Line thickness + 선 굵기 + + + + + 0.5 + 0.5 + + + + + 1 + 1 + + + + + 1.5 + 1.5 + + + + + 2 + 2 + + + + + 2.5 + 2.5 + + + + + 3 + 3 + + + + + 3.5 + 3.5 + + + + + 4 + 4 + + + + + 4.5 + 4.5 + + + + + 5 + 5 + + + + Channel 2 + 채널 2 + + + + PEAK HOLD + 피크 홀드 + + + + Reset + 리셋 + + + + DATA LOGGING + 데이터 기록 + + + + Browse + 검색 + + + + Append + 추가 + + + + Choose a file + 파일 선택 + + + + Overwrite + 덮어쓰기 + + + + DbClickButtons + + + Form + + + + + 1 + 1 + + + + 2 + 2 + + + + 3 + 3 + + + + 4 + 4 + + + + 5 + 5 + + + + Debugger + + + MainWindow + 메인윈도우 + + + + SCRIPTING ENGINE + 스크립트 엔진 + + + + Load Script + 스크립트 적용 + + + + Run + 실행 + + + + Filename + 파일이름 + + + + + Read + 읽기 + + + + Device + 장치 + + + + New Window + 새 윈도우 + + + + + Write + 쓰기 + + + + + Value: + 값: + + + + DEVICE SELECTION + 장치 선택 + + + + Detailed Register Map + 상세 리지스터 맵 + + + + Address: + 어드레스: + + + + 0x0000 + 0x0000 + + + + Display mode: + 디스플레이 모드: + + + + <value> + <값> + + + + + 0x + 0x + + + + Description: + 설명: + + + + Default Value: + 기본값: + + + + Source: + 소스: + + + + Enable AutoRead + 자동읽기 실행 + + + + REGISTER MAP SETTINGS + 리지스터 맵 설정 + + + + DetachDragZone + + + Form + + + + + Drag here to detach! + 이 곳으로 끌어 윈도우 분리! + + + + Device + + + Form + + + + + DigitalIO + + + Form + + + + + Run + 실행 + + + + DigitalIoMenu + + + Form + + + + + PollingRate + + + + + 1000 + 1000 + + + + Enable Outputs + 출력 실행 + + + + DigitalTriggerSettings + + + Form + + + + + Trigger Settings + 트리거 설정 + + + + Trigger mode + 트리거 모드 + + + + auto + 오토 + + + + normal + 노멀 + + + + Trigger Logic + 트리거 로직 + + + + OR + OR + + + + AND + AND + + + + EXTERNAL TRIGGER + 외부 트리거 + + + + Source + 소스 + + + + Condition + 조건 + + + + None + 없음 + + + + EXTERNAL TRIGGER OUT + 외부 트리거 출력 + + + + DragZone + + + Form + + + + + EmptyPatternUI + + + Form + + + + + ExportSettings + + + Form + + + + + EXPORT + 내보내기 + + + + Export All + 모두 내보내기 + + + + Export + 내보내기 + + + + FrequencyPatternUI + + + Form + + + + + Frequency + 주파수 + + + + 1000 + 1000 + + + + GenericJSPatternUI + + + Form + + + + + Script status + 스크립트 상태 + + + + Clear console + 콘솔 지우기 + + + + HomepageControls + + + Form + + + + + I2CPatternUI + + + Form + + + + + R + R + + + + W + W + + + + Read/Write + 읽기/쓰기 + + + + MSB First + MSB 우선 + + + + Address + 어드레스 + + + + Inter frame space + 프레임간 간격 + + + + Data + 데이터 + + + + InfoPage + + + Form + + + + + Forget device + 장치 무시 + + + + Identify + 확인 + + + + Connect + 연결 + + + + Calibrate + 교정 + + + + InfoWidget + + + Form + + + + + Move + 이동 + + + + InstrumentNotes + + + Form + + + + + Notes + 노트 + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html> + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html> + + + + Insert notes here + 여기에 노트 삽입 + + + + LAChannelGroup + + + Form + + + + + DIO + DIO + + + + + 12 + 12 + + + + None + 없음 + + + + LAChannelManager + + + Form + + + + + LAManagerHeader + + + Form + + + + + View + 보기 + + + + Name + 이름 + + + + DIO + DIO + + + + Trigger + 트리거 + + + + Select + 선택 + + + + LARequiredChannel + + + Form + + + + + Settings + 설정 + + + + + Role + + + + + LASettingsWidget + + + Form + + + + + REQUIRED + 필수 + + + + OPTIONAL + 선택사항 + + + + OPTIONS + 옵션 + + + + LChannelSettings + + + Form + + + + + BG Color + BG 색상 + + + + Edge Color + 에지 색상 + + + + Low Color + 로우 색상 + + + + High Color + 하이 색상 + + + + SETTINGS + 설정 + + + + COLOR SETTINGS + 색상 설정 + + + + Name + 이름 + + + + Thickness + 굵기 + + + + 1 + 1 + + + + 1.5 + 1.5 + + + + 2 + 2 + + + + 2.5 + 2.5 + + + + 3 + 3 + + + + 3.5 + 3.5 + + + + 4 + 4 + + + + 4.5 + 4.5 + + + + 5 + 5 + + + + LFSRPatternUI + + + Form + + + + + + 0x0001 + 0x0001 + + + + Generator Polynomial + 생성 다항식 + + + + Start State + 시작 상태 + + + + Period + 주기 + + + + LogicAnalyzer + + + Scopy Logic Analyzer + 스코피 로직 분석기 + + + + Group + 그룹 + + + + + Channel Settings + 채널 설정 + + + + + - + - + + + + Name + 이름 + + + + 1 + 1 + + + + Trace Height + 트레이스 높이 + + + + GROUP + 그룹 + + + + Stack Decoder: + 스택 디코더: + + + + Trigger Settings + 트리거 설정 + + + + Trigger mode + 트리거 모드 + + + + auto + 오토 + + + + normal + 노멀 + + + + Trigger Logic + 트리거 로직 + + + + EXTERNAL TRIGGER + 외부 트리거 + + + + "Warning: This feature is not supported on the current firmware version!" + "경고: 이 기능은 현재 펌웨어 버전에서 지원되지 않습니다!" + + + + Source + 소스 + + + + Condition + 조건 + + + + General Settings + 일반 설정 + + + + OneShot + 원샷 + + + + AVAILABLE CHANNELS + 가능 채널 + + + + DECODERS + 디코더 + + + + Close + 닫기 + + + + Print + 출력 + + + + Stream + 스트림 + + + + Cursors + 커서 + + + + + Trigger + 트리거 + + + + ManualCalibration + + + Form + + + + + Load Calibration + 캘리브레이션 적용 + + + + Save Calibration + 캘리브레이션 저장 + + + + Run automatic + 자동 실행 + + + + MarkerTable + + + Form + + + + + Math + + + Form + + + + + f(t) = + f(t) = + + + + cos + cos + + + + 2 + 2 + + + + 7 + 7 + + + + , + , + + + + 3 + 3 + + + + ← + + + + + ( + ( + + + + exp + exp + + + + 1 + 1 + + + + 8 + 8 + + + + - + - + + + + / + / + + + + * + * + + + + e + e + + + + C + C + + + + 0 + 0 + + + + 6 + 6 + + + + ) + ) + + + + log + log + + + + t + t + + + + + + + + + + + 9 + 9 + + + + tan + tan + + + + ^ + ^ + + + + 4 + 4 + + + + Apply + 적용 + + + + pi + pi + + + + 5 + 5 + + + + sin + sin + + + + MathPanel + + + Form + + + + + Add channel + 채널 추가 + + + + MeasureSettings + + + Form + + + + + Measure + 측정 + + + + Channel + 채널 + + + + MEASUREMENTS + 측정 + + + + Counter + 카운터 + + + + Display All + 모두 디스플레이 + + + + + Delete All + 모두 삭제 + + + + STATISTICS + 통계 + + + + Reset + 리셋 + + + + CUSTOM SELECTION + 사용자 선택 + + + + Enable + 실행 + + + + GATING SETTINGS + 케이트 설정 + + + + MeasurementsPanel + + + Form + + + + + NetworkAnalyzer + + + Print + 출력 + + + + Current Frequency: + 현재 주파수: + + + + Sample: + 샘플: + + + + Average: + 평균: + + + + Phase (°) + 위상 (°) + + + + Magnitude (dB) + 진폭 (dB) + + + + ° + ° + + + + 10 + 10 + + + + Settings + 설정 + + + + + REFERENCE + 환경설정 + + + + Channel 1 + 채널 1 + + + + Channel 2 + 채널 2 + + + + 0 + 0 + + + + Gain Mode + 이득 모드 + + + + Automatic + 자동 + + + + Low + 로우 + + + + High + 하이 + + + + RESPONSE + 응답 + + + + DC Filtering + DC 필터 + + + + + On + 켜짐 + + + + + Off + 꺼짐 + + + + SWEEP + 스위프 + + + + Logarithmic + 로그형 + + + + Linear + 선형 + + + + Average + 평균 + + + + + Apply + 적용 + + + + Periods + 주기 + + + + DISPLAY + 디스플레이 + + + + Delta Label + 델타 레이블 + + + + BUFFER PREVIEWER + 버퍼 미리보기 + + + + ViewInOsc + + + + + Previous + 이전 + + + + Next + 다음 + + + + General Settings + 일반 설정 + + + + PLOT + 그리기 + + + + Type + 종류 + + + + Bode + 보드 + + + + Nyquist + 나이퀴스트 + + + + Nichols + 니콜즈 + + + + Line thickness + 선 굵기 + + + + 0.5 + 0.5 + + + + 1 + 1 + + + + 1.5 + 1.5 + + + + 2 + 2 + + + + 2.5 + 2.5 + + + + 3 + 3 + + + + 3.5 + 3.5 + + + + 4 + 4 + + + + 4.5 + 4.5 + + + + 5 + 5 + + + + EXPORT + 내보내기 + + + + Export + 내보내기 + + + + Import + 불러오기 + + + + Snapshot + 스냅샷 + + + + Remove Reference + 레퍼런스 제거 + + + + Cursors + 커서 + + + + CURSOR READOUTS + 커서 값 + + + + Transparency 0% + 투명도 0% + + + + Position + 위치 + + + + Cursors + 커서 + + + + NetworkAnalyzerBufferViewer + + + Form + + + + + Note + + + TextLabel + + + + + NumberPatternUI + + + Form + + + + + Number + 숫자 + + + + OscGeneralSettings + + + GeneralSettings + 일반설정 + + + + General settings + 일반 설정 + + + + VIEWS + 보기 + + + + FFT + FFT + + + + X-Y + X-Y + + + + Histogram + 히스토그램 + + + + X-Y + X-Y + + + + Y-Axis + Y-축 + + + + X-Axis + X-축 + + + + dots + + + + + lines + + + + + X-Y Line thickness + X-Y 선 굵기 + + + + 1 + 1 + + + + 2 + 2 + + + + 3 + 3 + + + + 4 + 4 + + + + 5 + 5 + + + + 6 + 6 + + + + 7 + 7 + + + + 8 + 8 + + + + 9 + 9 + + + + 10 + 10 + + + + Oscilloscope + + + Scopy Oscilloscope + 스코피 오실로스코프 + + + + Print + 출력 + + + + Cursors + 커서 + + + + Measure + 측정 + + + + Trigger + 트리거 + + + + Close + 닫기 + + + + PGCGSettings + + + Form + + + + + TextLabel + + + + + Pattern + 패턴 + + + + Output + 출력 + + + + PP + PP + + + + OD + OD + + + + CLOCK + 클럭 + + + + SETTINGS + 설정 + + + + Name + 이름 + + + + Thickness + 굵기 + + + + 1 + 1 + + + + 1.5 + 1.5 + + + + 2 + 2 + + + + 2.5 + 2.5 + + + + 3 + 3 + + + + 3.5 + 3.5 + + + + 4 + 4 + + + + 4.5 + 4.5 + + + + 5 + 5 + + + + COLOR SETTINGS + 색상 설정 + + + + BG Color + BG 색상 + + + + Edge Color + 경계 색상 + + + + Low Color + 로우 색상 + + + + High Color + 하이 색상 + + + + PGChannel + + + Form + + + + + TextLabel + + + + + PGChannelGroup + + + Form + + + + + TextLabel + + + + + 12 + 12 + + + + PGChannelManager + + + Form + + + + + PGChannelManagerHeader + + + Form + + + + + Enable + 실행 + + + + Name + 이름 + + + + DIO + DIO + + + + Select + 선택 + + + + PGSettings + + + Form + + + + + Settings + 설정 + + + + Autoset + 오토셋 + + + + Sample Rate + 샘플 속도 + + + + Buffer Size + 버퍼 크기 + + + + ExternalClock + 외부클럭 + + + + External Clock Frequency + 외부 클럭 주파수 + + + + Reset Instrument + 리셋 장치 + + + + PatternGenerator + + + Scopy Pattern Generator + 스코피 패턴 생성기 + + + + Print + 출력 + + + + Group + 그룹 + + + + + Channel Settings + 채널 설정 + + + + 1 + 1 + + + + Trace Height + 트레이스 높이 + + + + Name + 이름 + + + + Open-Drain + 오픈-드레인 + + + + Push-Pull + 푸시-풀 + + + + GROUP + 그룹 + + + + Pattern + 패턴 + + + + Trigger Settings + 트리거 설정 + + + + Trigger mode + 트리거 모드 + + + + auto + 오토 + + + + normal + 노멀 + + + + Trigger Logic + 트리거 로직 + + + + EXTERNAL TRIGGER + 외부 트리거 + + + + Source + 소스 + + + + Condition + 조건 + + + + - + - + + + + General Settings + 일반 설정 + + + + AVAILABLE CHANNELS + 가능 채널 + + + + Cursors + 커서 + + + + Trigger + 트리거 + + + + Close + 닫기 + + + + PowerController + + + Scopy Power Control + 스코피 파워 제어 + + + + + Set + 설정 + + + + + Measure + 측정 + + + + + + + VDC + VDC + + + + Tracking ratio control + 비율 출력 제어 + + + + Independent + 단일 + + + + Tracking + 비율 + + + + 100 + 100 + + + + % + % + + + + Positive output + 양극성 출력 + + + + + Enable + 실행 + + + + Negative output + 음극성 출력 + + + + Preferences + + + Form + + + + + GENERAL + 일반 + + + + OSCILLOSCOPE + 오실로스코프 + + + + Enable labels on the plot + 그래프에 레이블 표시 + + + + Enable graticule + 눈금자 표시 + + + + Enable mini histogram + 미니 히스토그램 활성화 + + + + Enable all instrument notes + 모드 장치 노트 활성화 + + + + Language (requires app restart) + 언어 (프로그램 재시작 필요) + + + + Restart the application for changes to take effect + 변경사항 적용을 위해 프로그램을 재시작 하세요 + + + + Attempt temperature-based calibration (EXPERIMENTAL) + 온도 기반 교정 수행 (시험단계) + + + + Enable animations + 애니메이션 활성화 + + + + 1 + 1 + + + + Run external scripts (Experimental) + 외부 스크립트 실행 (시험단계) + + + + SPECTRUM ANALYZER + 스펙트럼 분석기 + + + + Only search marker peaks in visible domain + 보이는 영역에서만 마커 피크 찾기 + + + + Double click to detach a tool + 더블 클릭하여 윈도우 분리 + + + + Save session when closing Scopy + 스코피 종료 시 세션 저장 + + + + NETWORK ANALYZER + 네트워크 분석기 + + + + Always display 0db value on graph + 그래프상에 항상 0dB 값 표시 + + + + Scriptable manual calibration + + + + + Show advanced device information + 상세 장치 정보 보기 + + + + LOGIC ANALYZER + 로직 분석기 + + + + Display sampling points when zoomed + 확대 시 샘플링 포인트 표시 + + + + SIGNAL GENERATOR + 신호 발생기 + + + + Number of displayed periods + + + + + Enable digital decoders + 디지털 디코더 실행 + + + + Enable sample rate filters + 샘플 레이트 필터 실행 + + + + Show ADC digital filter config + ADC 디지털 필터 설정 보기 + + + + DEBUG + 디버그 + + + + Enable Debug Messages (Only for Debugging, Bugreporting) + 디버그 메시지 실행 (디버깅과 버그 리포트 용도) + + + + Enable Debug Instrument + 디버그 장치 실행 + + + + Enable user notes in main page + 메인 페이지에서 사용자 노트 실행 + + + + Skip calibration if already calibrated (cal values are not default) + 교정이 끝났으면 교정 건너뛰기 (교정값은 디폴트 아님) + + + + Reset Scopy + 스코피 리셋 + + + + PulsePatternUI + + + Form + + + + + Low + 로우 + + + + + + + 0 + 0 + + + + High + 하이 + + + + 100 + 100 + + + + Counter Init + 카운터 초기화 + + + + Delay + 지연 + + + + + 1 + 1 + + + + Delay polarity + 지연 극성 + + + + Number of pulses + 펄스 개수 + + + + QObject + + + Period + 주기 + + + + Frequency + 주파수 + + + + Min + 최소 + + + + Max + 최대 + + + + Peak-peak + 피크-피크 + + + + Mean + 평균 + + + + Cycle Mean + 사이클 평균 + + + + RMS + RMS + + + + Cycle RMS + 사이클 RMS + + + + AC RMS + AC RMS + + + + Area + 면적 + + + + Cycle Area + 사이클 면적 + + + + Low + 로우 + + + + High + 하이 + + + + Amplitude + 진폭 + + + + Middle + 중간 + + + + +Over + +초과 + + + + -Over + -초과 + + + + Rise + 상승 + + + + Fall + 하강 + + + + +Width + +폭 + + + + -Width + -폭 + + + + +Duty + +듀티 + + + + -Duty + -듀티 + + + + RegisterWidget + + + Form + + + + + RunSingleWidget + + + Form + + + + + Run + 실행 + + + + Single + 싱글 + + + + SPIPatternUI + + + Form + + + + + MSB First + MSB 우선 + + + + + + 1 + 1 + + + + + + 0 + 0 + + + + CLK Phase + CLK 위상 + + + + CS Polarity + CS 극성 + + + + CLK Polarity + CLK 극성 + + + + Bytes per frame + 프레임당 바이트 + + + + Inter frame space + 프레임간 간격 + + + + Data + 데이터 + + + + SignalGenerator + + + Scopy Signal Generator + 스코피 신호 발생기 + + + + Constant + 상수 + + + + Waveform + 파형 + + + + Sine + Sine + + + + Square + 제곱 + + + + Triangle + 삼각형 + + + + Trapezoidal + 사다리꼴 + + + + Rising Ramp Sawtooth + 상승 램프 톱니파 + + + + Falling Ramp Sawtooth + 하강 램프 톱니파 + + + + Stair Step + 계단형 + + + + TIMING + 타이밍 + + + + Buffer + 버퍼 + + + + FILE + 파일 + + + + Path + 경로 + + + + + No file loaded + 적용된 파일 없음 + + + + Format + 포맷 + + + + Size + 크기 + + + + 0 samples + 0 샘플 + + + + Load file + 파일 적용 + + + + Channel + 채널 + + + + SCALING + 스케일링 + + + + Math + 연산 + + + + NOISE + 잠음 + + + + None + 없음 + + + + Uniform + 균등 + + + + Gaussian + 가우시안 + + + + Laplacian + 라플라시안 + + + + Impulse + 임펄스 + + + + OTHER + 기타 + + + + Line thickness + 선 굵기 + + + + 0.5 + 0.5 + + + + 1 + 1 + + + + 1.5 + 1.5 + + + + 2 + 2 + + + + 2.5 + 2.5 + + + + 3 + 3 + + + + 3.5 + 3.5 + + + + 4 + 4 + + + + 4.5 + 4.5 + + + + 5 + 5 + + + + Close + 닫기 + + + + SpectrumAnalyzer + + + Form + + + + + Print + 출력 + + + + Preset + 프리셋 + + + + + dBFS + dBFS + + + + Sample: + 샘플: + + + + Average Sample: + 평균 샘플: + + + + Marker_n 0.000 Hz 0dB + 마커_n 0.000 Hz 0dB + + + + Channel + 채널 + + + + Type + 종류 + + + + Sample + 샘플 + + + + and other types + 그리고 다른 종류 + + + + Window + 윈도우 + + + + Uniform (none) + 균등 (없음) + + + + and others windows + 그리고 다른 윈도우 + + + + Averaging + 평균 + + + + Apply + 적용 + + + + CH Thickness + 채널 굵기 + + + + 0.5 + 0.5 + + + + 1 + 1 + + + + 1.5 + 1.5 + + + + 2 + 2 + + + + 2.5 + 2.5 + + + + 3 + 3 + + + + 3.5 + 3.5 + + + + 4 + 4 + + + + 4.5 + 4.5 + + + + 5 + 5 + + + + History + 내역 + + + + Gain mode + 이득 모드 + + + + + Low + 로우 + + + + High + 하이 + + + + Snapshot + 스냅샷 + + + + General settings + 일반 설정 + + + + Export + 내보내기 + + + + + Sweep + 스위프 + + + + Logarithmic + 로그형 + + + + Linear + 선형 + + + + FREQUENCY + 주파수 + + + + AMPLITUDE + 진폭 + + + + Resolution BW + 해당도 대역폭 + + + + Units + 단위 + + + + + Markers + 마커 + + + + Settings + 설정 + + + + MARKER + 마커 + + + + Normal + 노멀 + + + + Delta + 델타 + + + + Peak + 피크 + + + + + Peak + 피크 + + + + + Ampl + 진폭 + + + + GENERAL + 일반 + + + + Marker Table + 마커 테이블 + + + + Import Reference Channels + 레퍼런스 채널 불러오기 + + + + No file selected! + 선택된 파일 없음! + + + + Browse + 검색 + + + + Import + 불러오기 + + + + SpinBoxA + + + Form + + + + + StartStopRangeWidget + + + Form + + + + + Statistic + + + Form + + + + + Avg: + 평균: + + + + + + 0.000 + 0.000 + + + + Min: + 최소: + + + + Max: + 최대: + + + + 1 + 1 + + + + Measurement + 측정 + + + + StatisticsPanel + + + Form + + + + + ToolLauncher + + + Scopy + 스코피 + + + + Home + + + + + Save + 저장 + + + + Load + 적용 + + + + Preferences + 환경설정 + + + + Notes + 노트 + + + + Quit + 종료 + + + + ADC Offset + ADC 오프셋 + + + + ADC Gain + ADC 이득 + + + + Reset ADC Calibration + ADC 캘리브레이션 리셋 + + + + TriggerSettings + + + Form + + + + + Trigger Settings + 트리거 설정 + + + + Trigger mode + 트리거 모드 + + + + auto + 오토 + + + + normal + 노멀 + + + + + Source + 소스 + + + + INTERNAL (ANALOG) + 내부 (아나로그) + + + + + Condition + 조건 + + + + + Rising Edge + 상승 에지 + + + + + Falling Edge + 하강 에지 + + + + + Low + 로우 + + + + + High + 하이 + + + + This feature is not supported while the Mixed Signal View is enabled! + 이 기능은 혼합 신호 보기에서 지원되지 않습니다! + + + + DIGITAL + 디지털 + + + + Any Edge + 모든 에지 + + + + M2K daisychain position + M2K 데이지체인 위치 + + + + TRIGGER LOGIC + 트리거 로직 + + + + Analog - Digital + 아나로그 - 디지털 + + + + Digital OR Analog + 디지털 OR 아나로그 + + + + Digital AND Analog + 디지털 AND 아나로그 + + + + Digital XOR Analog + 디지털 XOR 아나로그 + + + + !Digital OR Analog + !디지털 OR 아나로그 + + + + !Digital AND Analog + !디지털 OR 아나로그 + + + + !Digital XOR Analog + !디지털 XOR 아나로그 + + + + EXTERNAL TRIGGER OUT + 외부 트리거 출력 + + + + UARTPatternUI + + + Form + + + + + Stop + 중지 + + + + 1 + 1 + + + + 2 + 2 + + + + 3 + 3 + + + + Baud + 보 레이트 + + + + + 9600 + 9600 + + + + 1200 + 1200 + + + + 2400 + 2400 + + + + 4800 + 4800 + + + + 14400 + 14400 + + + + 19200 + 19200 + + + + 28800 + 19200 + + + + 38400 + 38400 + + + + 57600 + 57600 + + + + 115200 + 115200 + + + + 230400 + 230400 + + + + Parity + 패리티 + + + + NONE + 없음 + + + + ODD + 홀수 + + + + EVEN + 짝수 + + + + MARK + 마크 + + + + SPACE + 스페이스 + + + + Parameters + 파라미터 + + + + Data to Send + 보낼 데이터 + + + + UserNotePage + + + Form + + + + + Remove note + 노트 제거 + + + + UserNotes + + + Form + + + + + Save + 저장 + + + + File path + 파일 경로 + + + + Browse + 검색 + + + + Note name + 노트 이름 + + + + WalkingPatternUI + + + Form + + + + + Walking level + 워킹 패턴 + + + + 0 + 0 + + + + + 1 + 1 + + + + Frequency + 주파수 + + + + 1000 + 1000 + + + + Direction + 방향 + + + + Right + 우측 + + + + Left + 좌측 + + + + Length + 길이 + + + + adiscope::BinaryCounterPatternUI + + + Frequency + 주파수 + + + + adiscope::CapturePlot + + + + + + + + Zoom: + 확대: + + + + + /div + /눈금 + + + + Waiting + 기다리는중 + + + + Triggered + 트리거완료 + + + + Stop + 중지 + + + + Auto + 오토 + + + + adiscope::ClockPatternUI + + + Frequency + 주파수 + + + + Phase + 위상 + + + + Duty + 듀티 + + + + adiscope::ConnectDialog + + + + Connect + 연결 + + + + Waiting for connection ... + 연결 대기 중 ... + + + + + Context info + 컨텍스트 정보 + + + + Add + 추가 + + + + Warning + 경고 + + + + Error: Unable to find host: No such host is known! + 에러: 호스트를 찾을 수 없음: 알수 없는 호스트! + + + + adiscope::CustomSwitch + + + on + 켜짐 + + + + off + 꺼짐 + + + + adiscope::DMM + + + Timer + 타이머 + + + + Stop + 중지 + + + + Run + 실행 + + + + Export + 내보내기 + + + + Comma-separated values files (*.csv);;All Files(*) + 콤마 구분 파일 (*.csv);;모든 파일(*) + + + + No file selected + 선택된 파일 없음 + + + + + File is open in another program + 파일이 다른 프로그램에서 사용 중 + + + + + Choose a file + 파일 선택 + + + + adiscope::Debugger + + + Save File + 파일 저장 + + + + JavaScript (*.js) + 자바스크립트 (*.js) + + + + adiscope::DigitalIO + + + Stop + 중지 + + + + Run + 실행 + + + + adiscope::ExportSettings + + + Channels + 채널 + + + + Name + 이름 + + + + Export + 내보내기 + + + + adiscope::GrayCounterPatternUI + + + Frequency + 주파수 + + + + adiscope::I2CPatternUI + + + Frequency + 주파수 + + + + adiscope::ImportPatternUI + + + Frequency + 주파수 + + + + Open file + 파일 열기 + + + + Import selected channels + 선택 채널 불러오기 + + + + No file selected + 선택된 파일 없음 + + + + Export + 내보내기 + + + + Comma-separated values files (*.csv);;Tab-delimited values files (*.txt) + 콤마 구분 파일 (*.csv);;탭 구분 파일 (*.txt) + + + + adiscope::ImportSettings + + + Import + 불러오기 + + + + Import all + 모두 불러오기 + + + + adiscope::InfoPage + + + Error: Connection failed! + 에러: 연결 실패! + + + + Connected + 연결됨 + + + + Your hardware revision does not support the identify feature + 이 하드웨어 버전은 해당 기능을 지원하지 않습니다 + + + + adiscope::M2kDeviceWidget + + + M2K + M2K + + + + adiscope::M2kInfoPage + + + Not connected + 연결되지 않음 + + + + Always disconnect analog inputs/outputs before calibration + 교정전엔 항상 아나로그 입/출력을 연결해제 하세요 + + + + Can't identify this device. + 장치를 인식할 수 없습니다. + + + + Can't identify device. Please try to update your firmware! + 장치를 인식할 수 없습니다. 펌웨어를 업데이트 하세요! + + + + Your hardware revision does not support the identify feature + 이 하드웨어 버전은 해당 기능을 지원하지 않습니다 + + + + adiscope::ManualCalibration + + + Save File + 파일 저장 + + + + ini (*.ini) + ini (*.ini) + + + + + °C + °C + + + + adiscope::MarkerTable + + + Id + Id + + + + Marker + 마커 + + + + Channel + 채널 + + + + Frequency + 주파수 + + + + Magnitude + 진폭 + + + + Type + 종류 + + + + adiscope::MeasureSettings + + + Horizontal + 수평축 + + + + + Name + 이름 + + + + + Measure + 측정 + + + + + Stats + 통계 + + + + Vertical + 수직축 + + + + + Recover + 복구 + + + + + Delete All + 모두 삭제 + + + + adiscope::NetworkAnalyzer + + + + Stopped + 중지됨 + + + + Frequency (Hz) + 주파수 (Hz) + + + + Magnitude(dB) + 진폭(dB) + + + + Phase (°) + 위상 (°) + + + + Samples count + 샘플 수 + + + + Samps/decade + 샘플/데케이드 + + + + Step + 스텝 + + + + Amplitude + 진폭 + + + + Offset + 오프셋 + + + + Max. Magnitude + 최대 진폭 + + + + Min. Magnitude + 최소 진폭 + + + + Max. Phase + 최대 위상 + + + + Min. Phase + 최소 위상 + + + + + Settling time + 안정화 시간 + + + + Before Buffer + 버퍼 이전 + + + + After Buffer + 버퍼 이후 + + + + + Sample: + 샘플: + + + + + Current Frequency: + 현재 주파수: + + + + + DC Voltage: + DC 전압: + + + + + Response channel voltage < 50mV! + 응답 채널 전압 < 50mV! + + + + + Low + 로우 + + + + + High + 하이 + + + + + Gain Mode: + 이득 모드: + + + + Transparency + 투명도 + + + + Image + 이미지 + + + + Save to + 위치에 저장 + + + + Import + 불러오기 + + + + Comma-separated values files (*.csv);;Tab-delimited values files (*.txt) + 콤마 구분 파일 (*.csv);;탭 구분 파일 (*.txt) + + + + Comma-separated values files (*.csv) + 콤마 구분 파일 (*.csv) + + + + Tab-delimited values files (*.txt) + 탭 구분 파일 (*.txt) + + + + All Files(*) + 모든 파일(*) + + + + Export + 내보내기 + + + + Average: + 평균: + + + + Running + 실행중 + + + + Stopping... + 중지중... + + + + adiscope::NetworkAnalyzer_API + + + Transparency + 투명도 + + + + adiscope::Oscilloscope + + + + Time Base + 타임베이스 + + + + + Position + 위치 + + + + Volts/Div + 볼트/눈금 + + + + + Add Channel + 채널 추가 + + + + + + Export + 내보내기 + + + + + Comma-separated values files (*.csv) + 콤마 구분 파일 (*.csv) + + + + + Tab-delimited values files (*.txt) + 탭 구분 파일 (*.txt) + + + + + All Files(*) + 모든 파일(*) + + + + Transparency + 투명도 + + + + "Warning: This feature is not supported on the current firmware version!" + "경고: 이 기능은 현재 펌웨어 버전에서 지원되지 않습니다!" + + + + * When the Mixed Signal View is enabled the LogicAnalyzer tool will be disabled! +** The trigger can be disabled or set only on the Digital channels or Analog channels, not on both at the same time! + * 혼합 신호 보기에서는 로직 분석기 툴은 활성화되지 않습니다! +** 트리거는 비활성화 하거나, 디지털 채널 또는 아나로그 채널에 설정 하십시요. 두 채널에 동시에 설정되지 않습니다! + + + + Math + 연산 + + + + Browse + 검색 + + + + No file selected + 선택된 파일 없음 + + + + + Reference + 레퍼런스 + + + + Logic + 로직 + + + + Add channel + 채널 추가 + + + + Import selected channels + 선택 채널 불러오기 + + + + Enable Mixed Signal View + 혼합 신호 보기 실행 + + + + Import + 불러오기 + + + + Comma-separated values files (*.csv);;Tab-delimited values files (*.txt) + 콤마 구분 파일 (*.csv);;탭 구분 파일 (*.txt) + + + + + Snapshot + 스냅샷 + + + + Filter 1 - Enable - + 필터 1 - 실행- + + + + Filter 2 - Enable - + 필터 2 - 실행 - + + + + + Save + 저장 + + + + adiscope::PowerController + + + + mVolts + 밀리볼트 + + + + + Volts + 볼트 + + + + + Value + + + + + + Disable + 실행종료 + + + + + Enable + 실행 + + + + adiscope::Preferences + + + This change will be applied only after a Scopy reset. + 이 변경은 스코피 리셋 후 적용됩니다. + + + + By resetting scopy you will lose the current configuration! + 스코피를 리셋하면 현재 설정은 제거됩니다! + + + + Do you want to reset? + 리셋을 원하세요? + + + + Load language + 언어 적용 + + + + Language files (*.qm) + 언어 파일 (*.qm) + + + + adiscope::PrintablePlot + + + + + + Documents + 문서 + + + + Image + 이미지 + + + + Export File Name + 내보내기 파일 이름 + + + + adiscope::PulsePatternUI + + + Sample Rate + 샘플 속도 + + + + adiscope::RandomPatternUI + + + Frequency + 주파수 + + + + adiscope::RunSingleWidget + + + + + Run + 실행 + + + + + + Single + 싱글 + + + + + + + + Stop + 중지 + + + + adiscope::SPIPatternUI + + + Frequency + 주파수 + + + + adiscope::SignalGenerator + + + deg + + + + + π rad + π rad + + + + + + + + ns + ns + + + + + + + + μs + μs + + + + + + + + ms + ms + + + + + + + + s + s + + + + + + Phase + 위상 + + + + μVolts p-p + μVolts p-p + + + + mVolts p-p + mVolts p-p + + + + Volts p-p + Volts p-p + + + + + + Amplitude + 진폭 + + + + + + + μVolts + μVolts + + + + + + + + mVolts + mVolts + + + + + + + + Volts + Volts + + + + + Offset + 오프셋 + + + + mHz + mHz + + + + Hz + Hz + + + + kHz + kHz + + + + MHz + MHz + + + + Frequency + 주파수 + + + + Rising + 상승 + + + + Falling + 하강 + + + + Rise Time + 상승 시간 + + + + Fall Time + 하강 시간 + + + + High Time + 정극성 펄스폭 + + + + Low Time + 부극성 펄스폭 + + + + + SampleRate + 샘플 속도 + + + + Record Length + 측정시간 + + + + Value + + + + + Duty Cycle + 듀티 사이클 + + + + + + samples + 샘플 + + + + Open File + 파일 열기 + + + + Comma-separated values files (*.csv);;Tab-delimited values files (*.txt);;Waveform Audio File Format (*.wav);;Matlab files (*.mat) + 콤마 구분 파일 (*.csv);;탭 구분 파일 (*.txt);;파형 오디오 파일 포맷 (*.wav);;Matlab 파일 (*.mat) + + + + adiscope::Sismograph + + + Voltage (V) + 전압 (V) + + + + Time (s) + 시간 (s) + + + + adiscope::SpectrumAnalyzer + + + + + + Export + 내보내기 + + + + dBFS + dBFS + + + + dBV + dBV + + + + dBu + dBu + + + + Vpeak + Vpeak + + + + Vrms + Vrms + + + + V/√Hz + V/√Hz + + + + Sample + 샘플 + + + + Peak Hold + 피크 홀드 + + + + Peak Hold Continous + 피크 홀드 연속 + + + + Min Hold + 최소 홀드 + + + + Min Hold Continous + 최소 홀드 연속 + + + + Linear RMS + 선형 RMS + + + + Linear dB + 선형 dB + + + + Exponential RMS + 지수형 RMS + + + + Exponential dB + 지수형 dB + + + + Flat top + 고전압 + + + + Rectangular + Rectangular + + + + Triangular (Bartlett) + Triangular (Bartlett) + + + + Hamming + Hamming + + + + Hann + Hann + + + + Blackman-Harris + Blackman-Harris + + + + Kaiser + Kaiser + + + + Manual + 매뉴얼 + + + + Peak + 피크 + + + + Delta + 델타 + + + + Fixed + 고정 + + + + Scale/Div + 스케일/눈금 + + + + + Top + 최상 + + + + + Bottom + 최하 + + + + Hz + Hz + + + + kHz + kHz + + + + MHz + MHz + + + + Frequency Position + 주파수 위치 + + + + + Comma-separated values files (*.csv) + 콤마 구분 파일 (*.csv) + + + + + Tab-delimited values files (*.txt) + 탭 구분 파일 (*.txt) + + + + + All Files(*) + 모든 파일(*) + + + + Comma-separated values files (*.csv);;Tab-delimited values files (*.txt) + 콤마 구분 파일 (*.csv);;탭 구분 파일 (*.txt) + + + + Snapshot + 스냅샷 + + + + Sample: + 샘플: + + + + Average Sample: + 평균 샘플: + + + + adiscope::StartStopRangeWidget + + + Start + 시작 + + + + Stop + 중지 + + + + Center + 중심 + + + + Span + 스팬 + + + + adiscope::ToolLauncher + + + Preferences + 환경설정 + + + + Calibration skipped because already calibrated. + 교정이 이미 수행되었으므로 교정을 건너뜁니다. + + + + Calibrated + 교정됨 + + + + Save session + 세션 저장 + + + + + Scopy-Files (*.ini) + 스코피 파일 (*.ini) + + + + Load session + 세션 적용 + + + + Click to open the home menu + 클릭하여 홈메뉴 열기 + + + + Click to disconnect the device + 클릭하여 장치 연결 해제 + + + + Click to save the current session + 클릭하여 현재 세션 저장 + + + + + Click to load a session + 클릭하여 세션 적용 + + + + + Select a device first + 장치 우선 선택 + + + + + + Click to connect the device + 클릭하여 장치 연결 + + + + Report a bug! + 버그 리포트 하기! + + + + Connecting... + 연결중... + + + + Disconnecting... + 연결 해제중... + + + + Connect + 연결 + + + + Calibrating... + 교정중... + + + + Calibration Failed + 교정 실패 + + + + + Disconnect + 연결 해제 + + + + Digital decoders support is disabled. Some features may be missing + 디지탈 디코더 지원이 해제됩니다. 일부 기능을 찾을 수 없습니다 + + + + There was a problem initializing libsigrokdecode. Some features may be missing + libsigrokdecode 설정 중 문제가 발견 되었습니다. 일부 기능을 찾을 수 없습니다 + + + + Calibrating + 교정중 + + + + adiscope::ToolMenu + + + Oscilloscope + 오실로스코프 + + + + Spectrum Analyzer + 스펙트럼 분석기 + + + + Network Analyzer + 네트워크 분석기 + + + + Signal Generator + 신호 발생기 + + + + Logic Analyzer + 로직 분석기 + + + + Pattern Generator + 패턴 발생기 + + + + Digital IO + 디지털 IO + + + + Voltmeter + 볼트미터 + + + + Power Supply + 파워 서플라이 + + + + Debugger + 디버거 + + + + Calibration + 교정 + + + + adiscope::ToolMenuItem + + + Calibrating... + 교정중... + + + + adiscope::TriggerSettings + + + Forward Trigger In + 포워드 트리거 입력 + + + + Oscilloscope + 오실로스코프 + + + + + Logic Analyzer + 로직 분석기 + + + + + μVolts + μVolts + + + + + mVolts + mVolts + + + + + Volts + Volts + + + + Level + Level + + + + Hysteresis + 히스테리시스 + + + + External Trigger In + 외부 트리거 입력 + + + + None + 없음 + + + + adiscope::UserNotes + + + Note + 노트 + + + + Invalid or empty file! + 유효하지 않거나 비어 있는 파일! + + + + Path: + 경로: + + + + Warning: The file is empty! + 경고: 파일이 비어 있습니다! + + + + Warning: The path is invalid! + 경고: 경로가 유효하지 않습니다! + + + + adiscope::logic::LogicAnalyzer + + + Sample Rate + 샘플 속도 + + + + Nr of samples + 샘플 Nr + + + + Delay + 지연 + + + + Transparency + 투명도 + + + + Select a decoder to add + 추가할 디코더 선택 + + + + External Trigger In + 외부 트리거 입력 + + + + Oscilloscope + 오실로스코프 + + + + Comma-separated values files (*.csv) + 콤마 구분 파일 (*.csv) + + + + Tab-delimited values files (*.txt) + 탭 구분 파일 (*.txt) + + + + Value Change Dump(*.vcd) + + + + + All Files(*) + 모든 파일(*) + + + + Export + 내보내기 + + + + adiscope::prop::Bool + + + + Querying config key %1 resulted in %2 + + + + + adiscope::prop::Double + + + + Querying config key %1 resulted in %2 + + + + + adiscope::prop::Enum + + + + Querying config key %1 resulted in %2 + + + + + adiscope::prop::Int + + + + Querying config key %1 resulted in %2 + Querying config key %1 resulted in %2 + + + + adiscope::prop::String + + + + Querying config key %1 resulted in %2 + Querying config key %1 resulted in %2 + + + + dioChannel + + + Form + + + + + + 0 + 0 + + + + in + 입력 + + + + out + 출력 + + + + 1 + 1 + + + + dioElement + + + Form + + + + + 0 - 7 + 0 - 7 + + + + Individual + 개별 + + + + Group + 그룹 + + + + in + 입력 + + + + out + 출력 + + + + 127 + 127 + + + + scriptedBinaryCounter + + + Form + + + + + PulseScript + 펄스스크립트 + + + + NumberOfPulses + 펄스수 + + + + Samples/Pulse + 샘플/펄스 + + + + Hi + 하이 + + + + Lo + 로우 + + + + Frequency: + 주파수: + + + + PushButton + 푸쉬버튼 + + + + INVALID + 유효하지 않음 + + + diff --git a/resources/translations/scopy_th.ts b/resources/translations/scopy_th.ts new file mode 100644 index 0000000000..6ca98f751f --- /dev/null +++ b/resources/translations/scopy_th.ts @@ -0,0 +1,5969 @@ + + + + + BaseMenu + + + Form + แบบฟอร์ม + + + + BaseMenuItem + + + Form + แบบฟอร์ม + + + + BinaryCounterPatternUI + + + Form + แบบฟอร์ม + + + + Init Value + ค่าเริ่มต้น + + + + + 0 + 0 + + + + Frequency + ความถี่ + + + + 1000 + 1000 + + + + Start counter + เริ่มตัวนับ + + + + End counter + สิ้นสุดตัวนับ + + + + 65535 + 65535 + + + + Increment + เพิ่มขึ้น + + + + 1 + 1 + + + + BitfieldWidget + + + Form + แบบฟอร์ม + + + + + TextLabel + ป้ายข้อความ + + + + 0x + 0x + + + + CalibrationTemplate + + + Form + แบบฟอร์ม + + + + Calibration info here + ข้อมูลสอบเทียบตรงนี้ + + + + Set + ตั้งค่า + + + + Measured + ค่าที่วัดได้ + + + + Enter value here + ใส่ค่าตรงนี้ + + + + Restart + เริ่มใหม่ + + + + Next + ถัดไป + + + + Finish + เสร็จสิ้น + + + + Channel + + + Form + แบบฟอร์ม + + + + Channel + ช่อง + + + + ChannelSettings + + + Form + แบบฟอร์ม + + + + Channel + ช่อง + + + + MATH + คณิตศาสตร์ + + + + Edit Function + แก้ไขฟังก์ชั่น + + + + HORIZONTAL + แนวนอน + + + + VERTICAL + แนวตั้ง + + + + SETTINGS + ตั้งค่า + + + + CH Thickness + ความหนาช่อง + + + + 0.5 + 0.5 + + + + + + 1 + 1 + + + + 1.5 + 1.5 + + + + 2 + 2 + + + + 2.5 + 2.5 + + + + 3 + 3 + + + + 3.5 + 3.5 + + + + 4 + 4 + + + + 4.5 + 4.5 + + + + 5 + 5 + + + + Memory depth + ความลึกหน่วยความจำ + + + + Probe +Attenuation + อัตราการลดทอนโพรบ + + + + 0.1X + 0.1 เท่า + + + + 1X + 1 เท่า + + + + 10X + 10 เท่า + + + + 100X + 100 เท่า + + + + Curve Style + รูปแบบเส้นโค้ง + + + + Lines + เส้น + + + + Dots + จุด + + + + Steps + ขั้น + + + + Sticks + แท่ง + + + + Smooth + เรียบ + + + + Software +AC Coupling + ซอฟต์แวร์การเชื่อมต่อกระแสสลับ + + + + Filter 1 - Enabled + ตัวกรอง 1 เปิด + + + + + TC + ค่าคงที่เวลา + + + + + Gain + อัตราขยาย + + + + + 0 + 0 + + + + Filter 2 - Enabled + ตัวกรอง 2 เปิด + + + + Autoset + ตั้งค่าอัตโนมัติ + + + + Snapshot + ภาพรวม + + + + Connect + + + Form + แบบฟอร์ม + + + + URI (Hostname) + URI (ชื่อโฮสต์) + + + + Connect + เชื่อมต่อ + + + + Context info + ข้อมูลบริบท + + + + ConstantPatternUI + + + Form + แบบฟอร์ม + + + + Constant + ค่าคงที่ + + + + 0 + 0 + + + + 1 + 1 + + + + CursorReadouts + + + Form + แบบฟอร์ม + + + + Δt = + Δt = + + + + + 0.000ms + 0.000 mSec + + + + CurT2 = + CurT2 = + + + + 1/Δt = + 1/Δt = + + + + - 000.000 ms + - 000.000 mSec + + + + - 000.000 mHz + - 000.000 mHz + + + + CurT1 = + CurT1 = + + + + CurV2 + CurT2 = + + + + ΔV + ΔV + + + + CurV1 + + + + + + 000.000 mV + 000.000 mV + + + + - 000.000 mV + - 000.000 mV + + + + + + = + = + + + + CursorsSettings + + + Form + แบบฟอร์ม + + + + Cursors + เคอร์เซอร์ + + + + Normal + ปกติ + + + + Track + ติดตาม + + + + 0 + 0 + + + + HORIZONTAL + แนวนอน + + + + VERTICAL + แนวตั้ง + + + + CURSOR READOUTS + การอ่านค่าเคอร์เซอร์ + + + + Transparency 0% + ความโปร่งใส 0% + + + + Position + ตำแหน่ง + + + + CustomPlotPositionButton + + + Form + แบบฟอร์ม + + + + DMM + + + + MAX + สุงสุด + + + + + MIN + ต่ำสุด + + + + + VDC + แรงดันไฟกระแสตรง + + + + Run + เริ่ม + + + + Channel 1 + ช่อง 1 + + + + + DC (Direct Current) + กระแสตรง + + + + + AC (20 Hz - 40 kHz) + กระแสสลับ (20 Hz - 40 kHz) + + + + + 1s + 1 Sec + + + + + 10s + 10 Sec + + + + + 60s + 60 Sec + + + + + History + ประวัติ + + + + + Line thickness + ความหนาเส้น + + + + + 0.5 + 0.5 + + + + + 1 + 1 + + + + + 1.5 + 1.5 + + + + + 2 + 2 + + + + + 2.5 + 2.5 + + + + + 3 + 3 + + + + + 3.5 + 3.5 + + + + + 4 + 4 + + + + + 4.5 + 4.5 + + + + + 5 + 5 + + + + Channel 2 + ช่อง 2 + + + + PEAK HOLD + สูงสุด คงไว้ + + + + Reset + ตั้งค่าใหม่ + + + + DATA LOGGING + การบันทึกข้อมูล + + + + Browse + เรียกดู + + + + Append + ผนวก + + + + Choose a file + เลือกไฟล์ + + + + Overwrite + เขียนทับ + + + + DbClickButtons + + + Form + แบบฟอร์ม + + + + 1 + 1 + + + + 2 + 2 + + + + 3 + 3 + + + + 4 + 4 + + + + 5 + 5 + + + + Debugger + + + MainWindow + หน้าต่างหลัก + + + + SCRIPTING ENGINE + กลไกการเขียนสคริปต์ + + + + Load Script + โหลดสคริปต์ + + + + Run + ใช้ + + + + Filename + ชื่อไฟล์ + + + + + Read + อ่าน + + + + Device + อุปกรณ์ + + + + New Window + หน้าต่างใหม่ + + + + + Write + เขียน + + + + + Value: + ค่า: + + + + DEVICE SELECTION + การเลือกอุปกรณ์ + + + + Detailed Register Map + แผนผังรีจิสเตอร์โดยละเอียด + + + + Address: + ที่อยู่: + + + + 0x0000 + 0x0000 + + + + Display mode: + โหมดการแสดงผล: + + + + <value> + <ค่า> + + + + + 0x + 0x + + + + Description: + คำอธิบาย: + + + + Default Value: + ค่าเริ่มต้น: + + + + Source: + แหล่งที่มา: + + + + Enable AutoRead + เปิดใช้งาน อ่านค่าอัตโนมัติ + + + + REGISTER MAP SETTINGS + ตั้งค่าแผนผังรีจิสเตอร์ + + + + DetachDragZone + + + Form + แบบฟอร์ม + + + + Drag here to detach! + ลากมาที่นี่เพื่อปลดออก! + + + + Device + + + Form + แบบฟอร์ม + + + + DigitalIO + + + Form + แบบฟอร์ม + + + + Run + ใช้ + + + + DigitalIoMenu + + + Form + แบบฟอร์ม + + + + PollingRate + อัตราการสำรวจ + + + + 1000 + 1000 + + + + Enable Outputs + เปิดใช้งานเอาท์พุท + + + + DigitalTriggerSettings + + + Form + แบบฟอร์ม + + + + Trigger Settings + ตั้งค่าตัวกระตุ้น + + + + Trigger mode + โหมดตัวกระตุ้น + + + + auto + อัตโนมัติ + + + + normal + ปกติ + + + + Trigger Logic + ตรรกะตัวกระตุ้น + + + + OR + OR + + + + AND + AND + + + + EXTERNAL TRIGGER + ตัวกระตุ้นภายนอก + + + + Source + แหล่งที่มา + + + + Condition + เงื่อนไข + + + + None + ไม่มี + + + + EXTERNAL TRIGGER OUT + ตัวกระตุ้นภายนอก ออก + + + + DragZone + + + Form + แบบฟอร์ม + + + + EmptyPatternUI + + + Form + แบบฟอร์ม + + + + ExportSettings + + + Form + แบบฟอร์ม + + + + EXPORT + นำออก + + + + Export All + นำออกทั้งหมด + + + + Export + นำออก + + + + FrequencyPatternUI + + + Form + แบบฟอร์ม + + + + Frequency + ความถี่ + + + + 1000 + 1000 + + + + GenericJSPatternUI + + + Form + แบบฟอร์ม + + + + Script status + สถานะสคริปต์ + + + + Clear console + ล้างแผงควบคุม + + + + HomepageControls + + + Form + แบบฟอร์ม + + + + I2CPatternUI + + + Form + แบบฟอร์ม + + + + R + R + + + + W + W + + + + Read/Write + อ่าน/เขียน + + + + MSB First + MSB ก่อน + + + + Address + ที่อยู่ + + + + Inter frame space + ช่องว่างระหว่างเฟรม + + + + Data + ข้อมูล + + + + InfoPage + + + Form + แบบฟอร์ม + + + + Forget device + ลบการจำอุปกรณ์ + + + + Identify + จำแนก + + + + Connect + เชื่อมต่อ + + + + Calibrate + สอบเทียบ + + + + InfoWidget + + + Form + แบบฟอร์ม + + + + Move + ย้าย + + + + InstrumentNotes + + + Form + แบบฟอร์ม + + + + Notes + หมายเหตุ + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html> + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html> + + + + Insert notes here + แทรกหมายเหตุตรงนี้ + + + + LAChannelGroup + + + Form + แบบฟอร์ม + + + + DIO + อินพุท/เอาท์พุทแบบติจิทัล + + + + + 12 + 12 + + + + None + ไม่มี + + + + LAChannelManager + + + Form + แบบฟอร์ม + + + + LAManagerHeader + + + Form + แบบฟอร์ม + + + + View + มุมมอง + + + + Name + ชื่อ + + + + DIO + อินพุท/เอาท์พุทแบบติจิทัล + + + + Trigger + ตัวกระตุ้น + + + + Select + เลือก + + + + LARequiredChannel + + + Form + แบบฟอร์ม + + + + Settings + ตั้งค่า + + + + + Role + หน้าที่ + + + + LASettingsWidget + + + Form + แบบฟอร์ม + + + + REQUIRED + จำเป็น + + + + OPTIONAL + ทางเลือก + + + + OPTIONS + ตัวเลือก + + + + LChannelSettings + + + Form + แบบฟอร์ม + + + + BG Color + สีพื้นหลัง + + + + Edge Color + สีขอบ + + + + Low Color + สีต่ำ + + + + High Color + สีสูง + + + + SETTINGS + ตั้งค่า + + + + COLOR SETTINGS + ตั้งค่าสี + + + + Name + ชื่อ + + + + Thickness + ความหนา + + + + 1 + 1 + + + + 1.5 + 1.5 + + + + 2 + 2 + + + + 2.5 + 2.5 + + + + 3 + 3 + + + + 3.5 + 3.5 + + + + 4 + 4 + + + + 4.5 + 4.5 + + + + 5 + 5 + + + + LFSRPatternUI + + + Form + แบบฟอร์ม + + + + + 0x0001 + 0x0001 + + + + Generator Polynomial + ตัวสร้างพหุนาม + + + + Start State + สถานะเริ่มต้น + + + + Period + คาบเวลา + + + + LogicAnalyzer + + + Scopy Logic Analyzer + ตัววิเคราะห์ตรรกะ Scopy + + + + Group + กลุ่ม + + + + + Channel Settings + ตั้งค่าช่อง + + + + + - + - + + + + Name + ชื่อ + + + + 1 + 1 + + + + Trace Height + ความสูงการติดตาม + + + + GROUP + กลุ่ม + + + + Stack Decoder: + ตัวถอดรหัสซ้อน: + + + + Trigger Settings + ตั้งค่าตัวกระตุ้น + + + + Trigger mode + โหมดตัวกระตุ้น + + + + auto + อัตโนมัติ + + + + normal + ปกติ + + + + Trigger Logic + ตรรกะตัวกระตุ้น + + + + EXTERNAL TRIGGER + ตัวกระตุ้นภายนอก + + + + "Warning: This feature is not supported on the current firmware version!" + "คำเตือน: ฟีเจอร์นี้ไม่รองรับบนเฟิร์มแวร์เวอร์ชันปัจจุบัน!" + + + + Source + แหล่งที่มา + + + + Condition + เงื่อนไข + + + + General Settings + ตั้งค่าทั่วไป + + + + OneShot + ครั้งเดียว + + + + AVAILABLE CHANNELS + ช่องที่มีอยู่ + + + + DECODERS + ตัวถอดรหัส + + + + Close + ปิด + + + + Print + พิมพ์ + + + + Stream + ไหลต่อเนื่อง + + + + Cursors + เคอร์เซอร์ + + + + + Trigger + ตัวกระตุ้น + + + + ManualCalibration + + + Form + แบบฟอร์ม + + + + Load Calibration + โหลดการสอบเทียบ + + + + Save Calibration + บันทึกการสอบเทียบ + + + + Run automatic + ใช้งานอัตโนมัติ + + + + MarkerTable + + + Form + แบบฟอร์ม + + + + Math + + + Form + แบบฟอร์ม + + + + f(t) = + f(t) = + + + + cos + cos + + + + 2 + 2 + + + + 7 + 7 + + + + , + , + + + + 3 + 3 + + + + ← + + + + + ( + ( + + + + exp + exp + + + + 1 + 1 + + + + 8 + 8 + + + + - + - + + + + / + / + + + + * + * + + + + e + e + + + + C + C + + + + 0 + 0 + + + + 6 + 6 + + + + ) + ) + + + + log + log + + + + t + t + + + + + + + + + + + 9 + 9 + + + + tan + tan + + + + ^ + ^ + + + + 4 + 4 + + + + Apply + ใช้ + + + + pi + π + + + + 5 + 5 + + + + sin + sin + + + + MathPanel + + + Form + แบบฟอร์ม + + + + Add channel + เพิ่มช่อง + + + + MeasureSettings + + + Form + แบบฟอร์ม + + + + Measure + วัด + + + + Channel + ช่อง + + + + MEASUREMENTS + การวัด + + + + Counter + ตัวนับ + + + + Display All + แสดงทั้งหมด + + + + + Delete All + ลบทั้งหมด + + + + STATISTICS + สถิติ + + + + Reset + ตั้งค่าใหม่ + + + + CUSTOM SELECTION + การเลือกแบบกำหนดเอง + + + + Enable + เปิดใช้งาน + + + + GATING SETTINGS + ตั้งค่าช่องทาง + + + + MeasurementsPanel + + + Form + แบบฟอร์ม + + + + NetworkAnalyzer + + + Print + พิมพ์ + + + + Current Frequency: + ความถี่ปัจจุบัน: + + + + Sample: + ตัวอย่าง: + + + + Average: + ค่าเฉลี่ย: + + + + Phase (°) + เฟส (°) + + + + Magnitude (dB) + ขนาด (dB) + + + + ° + ° + + + + 10 + 10 + + + + Settings + การตั้งค่า + + + + + REFERENCE + ค่าอ้างอิง + + + + Channel 1 + ช่อง 1 + + + + Channel 2 + ช่อง 2 + + + + 0 + 0 + + + + Gain Mode + โหมดขยาย + + + + Automatic + อัตโนมัติ + + + + Low + ต่ำ + + + + High + สูง + + + + RESPONSE + การตอบสนอง + + + + DC Filtering + การกรองกระแสตรง + + + + + On + เปิด + + + + + Off + ปิด + + + + SWEEP + กวาด + + + + Logarithmic + ลอการิทึม + + + + Linear + เชิงเส้น + + + + Average + ค่าเฉลี่ย + + + + + Apply + ใช้ + + + + Periods + ช่วงเวลา + + + + DISPLAY + แสดง + + + + Delta Label + ป้ายความต่าง + + + + BUFFER PREVIEWER + ดูตัวอย่างบัฟเฟอร์ + + + + ViewInOsc + มุมมองใน Osc + + + + Previous + ก่อนหน้า + + + + Next + ถัดไป + + + + General Settings + ตั้งค่าทั่วไป + + + + PLOT + วาดกราฟ + + + + Type + ประเภท + + + + Bode + Bode + + + + Nyquist + Nyquist + + + + Nichols + Nichols + + + + Line thickness + ความหนาเส้น + + + + 0.5 + 0.5 + + + + 1 + 1 + + + + 1.5 + 1.5 + + + + 2 + 2 + + + + 2.5 + 2.5 + + + + 3 + 3 + + + + 3.5 + 3.5 + + + + 4 + 4 + + + + 4.5 + 4.5 + + + + 5 + 5 + + + + EXPORT + นำออก + + + + Export + นำออก + + + + Import + นำเข้า + + + + Snapshot + ภาพรวม + + + + Remove Reference + ลบการอ้างอิง + + + + Cursors + เคอร์เซอร์ + + + + CURSOR READOUTS + การอ่านเคอร์เซอร์ + + + + Transparency 0% + ความโปร่งใส 0% + + + + Position + ตำแหน่ง + + + + Cursors + เคอร์เซอร์ + + + + NetworkAnalyzerBufferViewer + + + Form + แบบฟอร์ม + + + + Note + + + TextLabel + ป้ายข้อความ + + + + NumberPatternUI + + + Form + แบบฟอร์ม + + + + Number + ตัวเลข + + + + OscGeneralSettings + + + GeneralSettings + ตั้งค่าทั่วไป + + + + General settings + ตั้งค่าทั่วไป + + + + VIEWS + มุมมอง + + + + FFT + FFT + + + + X-Y + X-Y + + + + Histogram + Histogram + + + + X-Y + X-Y + + + + Y-Axis + แกน Y + + + + X-Axis + แกน X + + + + dots + จุด + + + + lines + เส้น + + + + X-Y Line thickness + ความหนาเส้น X-Y + + + + 1 + 1 + + + + 2 + 2 + + + + 3 + 3 + + + + 4 + 4 + + + + 5 + 5 + + + + 6 + 6 + + + + 7 + 7 + + + + 8 + 8 + + + + 9 + 9 + + + + 10 + 10 + + + + Oscilloscope + + + Scopy Oscilloscope + Scopy ออสซิลโลสโคป + + + + Print + พิมพ์ + + + + Cursors + เคอร์เซอร์ + + + + Measure + วัด + + + + Trigger + ตัวกระตุ้น + + + + Close + ปิด + + + + PGCGSettings + + + Form + แบบฟอร์ม + + + + TextLabel + ป้ายข้อความ + + + + Pattern + รูปแบบ + + + + Output + เอาท์พุท + + + + PP + PP + + + + OD + OD + + + + CLOCK + นาฬิกา + + + + SETTINGS + ตั้งค่า + + + + Name + ชื่อ + + + + Thickness + ความหนา + + + + 1 + 1 + + + + 1.5 + 1.5 + + + + 2 + 2 + + + + 2.5 + 2.5 + + + + 3 + 3 + + + + 3.5 + 3.5 + + + + 4 + 4 + + + + 4.5 + 4.5 + + + + 5 + 5 + + + + COLOR SETTINGS + ตั้งค่าสี + + + + BG Color + สีพื้นหลัง + + + + Edge Color + สีขอบ + + + + Low Color + สีต่ำ + + + + High Color + สีสูง + + + + PGChannel + + + Form + แบบฟอร์ม + + + + TextLabel + ป้ายข้อความ + + + + PGChannelGroup + + + Form + แบบฟอร์ม + + + + TextLabel + ป้ายข้อความ + + + + 12 + 12 + + + + PGChannelManager + + + Form + แบบฟอร์ม + + + + PGChannelManagerHeader + + + Form + แบบฟอร์ม + + + + Enable + เปิดใช้งาน + + + + Name + ชื่อ + + + + DIO + อินพุท/เอาท์พุทแบบติจิทัล + + + + Select + เลือก + + + + PGSettings + + + Form + แบบฟอร์ม + + + + Settings + ตั้งค่า + + + + Autoset + ตั้งค่าอัตโนมัติ + + + + Sample Rate + อัตราตัวอย่าง + + + + Buffer Size + ขนาดบัฟเฟอร์ + + + + ExternalClock + สัญญาณนาฬิกาภายนอก + + + + External Clock Frequency + ความถี่สัญญาณนาฬิกาภายนอก + + + + Reset Instrument + ตั้งค่าเครื่องมือวัดใหม่ + + + + PatternGenerator + + + Scopy Pattern Generator + ตัวสร้างรูปแบบ Scopy + + + + Print + พิมพ์ + + + + Group + กลุ่ม + + + + + Channel Settings + ตั้งค่าช่อง + + + + 1 + 1 + + + + Trace Height + ความสูงการติดตาม + + + + Name + ชื่อ + + + + Open-Drain + Open-Drain + + + + Push-Pull + Push-Pull + + + + GROUP + กลุ่ม + + + + Pattern + รูปแบบ + + + + Trigger Settings + ตั้งค่าตัวกระตุ้น + + + + Trigger mode + โหมดตัวกระตุ้น + + + + auto + อัตโนมัติ + + + + normal + ปกติ + + + + Trigger Logic + ตรรกะตัวกระตุ้น + + + + EXTERNAL TRIGGER + ตัวกระตุ้นภายนอก + + + + Source + แหล่งที่มา + + + + Condition + เงื่อนไข + + + + - + - + + + + General Settings + ตั้งค่าทั่วไป + + + + AVAILABLE CHANNELS + ช่องที่มีอยู่ + + + + Cursors + เคอร์เซอร์ + + + + Trigger + ตัวกระตุ้น + + + + Close + ปิด + + + + PowerController + + + Scopy Power Control + การควบคุมพลังงาน Scopy + + + + + Set + ตั้งค่า + + + + + Measure + วัด + + + + + + + VDC + VDC + + + + Tracking ratio control + การควบคุมอัตราส่วนการติดตาม + + + + Independent + อิสระ + + + + Tracking + การติดตาม + + + + 100 + 100 + + + + % + % + + + + Positive output + เอาท์พุทบวก + + + + + Enable + เปิดใช้งาน + + + + Negative output + เอาท์พุทลบ + + + + Preferences + + + Form + แบบฟอร์ม + + + + GENERAL + ทั่วไป + + + + OSCILLOSCOPE + ออสซิลโลสโคป + + + + Enable labels on the plot + เปิดใช้งานป้ายกำกับบนการวาดกราฟ + + + + Enable graticule + เปิดใช้งาน Graticule + + + + Enable mini histogram + เปิดใช้งาน Mini histogram + + + + Enable all instrument notes + เปิดใช้งานทุกบันทึกการวัด + + + + Language (requires app restart) + ภาษา (ต้องเริ่มแอปใหม่) + + + + Restart the application for changes to take effect + เริ่มแอปพลิเคชั่นใหม่เพื่อให้การเปลี่ยนแปลงมีผล + + + + Attempt temperature-based calibration (EXPERIMENTAL) + พยายามสอบเทียบตามอุณหภูมิ (การทดลอง) + + + + Enable animations + เปิดใช้งานภาพเคลื่อนไหว + + + + 1 + 1 + + + + Run external scripts (Experimental) + เรียกใช้สคริปต์ภายนอก (ทดลอง) + + + + SPECTRUM ANALYZER + ตัววิเคราะห์คลื่นความถี่ + + + + Only search marker peaks in visible domain + ค้นหาเครื่องหมายที่ยอดสูงสุดในโดเมนที่มองเห็นได้เท่านั้น + + + + Double click to detach a tool + ดับเบิลคลิ้กเพื่อถอดเครื่องมือ + + + + Save session when closing Scopy + บันทึกข้อมูลเมื่อปิด Scopy + + + + NETWORK ANALYZER + ตัววิเคราะห์เครือข่าย + + + + Always display 0db value on graph + แสดงค่า 0db บนกราฟเสมอ + + + + Scriptable manual calibration + การสอบเทียบด้วยตนเองแบบเขียนสคริปต์ได้ + + + + Show advanced device information + แสดงข้อมูลอุปกรณ์ขั้นสูง + + + + LOGIC ANALYZER + ตัววิเคราะห์ตรรกะ + + + + Display sampling points when zoomed + แสดงจุดสุ่มตัวอย่างเมื่อซูม + + + + SIGNAL GENERATOR + ตัวกำเนิดสัญญาณ + + + + Number of displayed periods + จำนวนช่วงเวลาที่แสดง + + + + Enable digital decoders + เปิดใช้งานตัวถอดรหัสดิจิทัล + + + + Enable sample rate filters + เปิดใช้งานตัวกรองอัตราการสุ่มตัวอย่าง + + + + Show ADC digital filter config + แสดงการกำหนดค่าตัวกรองดิจิทัล ADC + + + + DEBUG + แก้ปัญหา + + + + Enable Debug Messages (Only for Debugging, Bugreporting) + เปิดใช้งานข้อความแก้ปัญหา (เฉพาะสำหรับการแก้ปัญหา, การรายงานข้อบกพร่อง) + + + + Enable Debug Instrument + เปิดใช้งานเครื่องมือแก้ไขข้อบกพร่อง + + + + Enable user notes in main page + เปิดใช้งานบันทึกย่อของผู้ใช้ในหน้าหลัก + + + + Skip calibration if already calibrated (cal values are not default) + ข้าม การสอบเทียบหากปรับเทียบแล้ว (ค่า cal ไม่ใช่ค่าเริ่มต้น) + + + + Reset Scopy + ตั้งค่า Scopy ใหม่ + + + + PulsePatternUI + + + Form + แบบฟอร์ม + + + + Low + ต่ำ + + + + + + + 0 + 0 + + + + High + สูง + + + + 100 + 100 + + + + Counter Init + การเริ่มต้นตัวนับ + + + + Delay + หน่วงเวลา + + + + + 1 + 1 + + + + Delay polarity + ขั้วการหน่วงเวลา + + + + Number of pulses + จำนวนพัลส์ + + + + QObject + + + Period + คาบเวลา + + + + Frequency + ความถี่ + + + + Min + ต่ำสุด + + + + Max + สูงสุด + + + + Peak-peak + Peak-Peak + + + + Mean + Mean + + + + Cycle Mean + Cycle Mean + + + + RMS + RMS + + + + Cycle RMS + Cycle RMS + + + + AC RMS + AC RMS + + + + Area + Area + + + + Cycle Area + Cycle Area + + + + Low + ต่ำ + + + + High + สูง + + + + Amplitude + ความสูง + + + + Middle + ตรงกลาง + + + + +Over + +Over + + + + -Over + -Over + + + + Rise + ขาขึ้น + + + + Fall + ขาลง + + + + +Width + +Width + + + + -Width + -Width + + + + +Duty + +Duty + + + + -Duty + -Duty + + + + RegisterWidget + + + Form + แบบฟอร์ม + + + + RunSingleWidget + + + Form + แบบฟอร์ม + + + + Run + ใช้ + + + + Single + ครั้งเดียว + + + + SPIPatternUI + + + Form + แบบฟอร์ม + + + + MSB First + MSB ก่อน + + + + + + 1 + 1 + + + + + + 0 + 0 + + + + CLK Phase + CLK Phase + + + + CS Polarity + CS Polarity + + + + CLK Polarity + CLK Polarity + + + + Bytes per frame + จำนวนไบต์ต่อเฟรม + + + + Inter frame space + ช่องว่างระหว่างเฟรม + + + + Data + ข้อมูล + + + + SignalGenerator + + + Scopy Signal Generator + เครื่องกำเนิดสัญญาณ Scopy + + + + Constant + ค่าคงที่ + + + + Waveform + รูปคลื่น + + + + Sine + ซายน์ + + + + Square + สี่เหลี่ยมจตุรัส + + + + Triangle + สามเหลี่ยม + + + + Trapezoidal + สี่เหลี่ยมคางหมู + + + + Rising Ramp Sawtooth + ฟันเลื่อยลาดขึ้น + + + + Falling Ramp Sawtooth + ฟันเลื่อยลาดลง + + + + Stair Step + ขั้นบันได + + + + TIMING + ช่วงเวลา + + + + Buffer + บัฟเฟอร์ + + + + FILE + ไฟล์ + + + + Path + เส้นทาง + + + + + No file loaded + ไม่มีไฟล์ถูกโหลด + + + + Format + รูปแบบ + + + + Size + ขนาด + + + + 0 samples + 0 ตัวอย่าง + + + + Load file + โหลดไฟล์ + + + + Channel + ช่อง + + + + SCALING + อัตราส่วน + + + + Math + คณิตศาสตร์ + + + + NOISE + สิ่งรบกวน + + + + None + ไม่มี + + + + Uniform + Uniform + + + + Gaussian + Gaussian + + + + Laplacian + Laplacian + + + + Impulse + Impulse + + + + OTHER + แบบอื่นๆ + + + + Line thickness + ความหนาเส้น + + + + 0.5 + 0.5 + + + + 1 + 1 + + + + 1.5 + 1.5 + + + + 2 + 2 + + + + 2.5 + 2.5 + + + + 3 + 3 + + + + 3.5 + 3.5 + + + + 4 + 4 + + + + 4.5 + 4.5 + + + + 5 + 5 + + + + Close + ปิด + + + + SpectrumAnalyzer + + + Form + แบบฟอร์ม + + + + Print + พิมพ์ + + + + Preset + ที่ตั้งไว้ล่วงหน้า + + + + + dBFS + dBFS + + + + Sample: + ตัวอย่าง: + + + + Average Sample: + ตัวอย่างเฉลี่ย: + + + + Marker_n 0.000 Hz 0dB + เครื่องหมาย_n 0.000 Hz 0dB + + + + Channel + ช่อง + + + + Type + ประเภท + + + + Sample + ตัวอย่าง + + + + and other types + และประเภทอื่นๆ + + + + Window + หน้าต่าง + + + + Uniform (none) + เครื่องแบบ (ไม่มี) + + + + and others windows + และหน้าต่างอื่นๆ + + + + Averaging + ค่าเฉลี่ย + + + + Apply + ใช้ + + + + CH Thickness + ความหนาช่อง + + + + 0.5 + 0.5 + + + + 1 + 1 + + + + 1.5 + 1.5 + + + + 2 + 2 + + + + 2.5 + 2.5 + + + + 3 + 3 + + + + 3.5 + 3.5 + + + + 4 + 4 + + + + 4.5 + 4.5 + + + + 5 + 5 + + + + History + ประวัติ + + + + Gain mode + โหมดขยาย + + + + + Low + ต่ำ + + + + High + สูง + + + + Snapshot + ภาพรวม + + + + General settings + ตั้งค่าทั่วไป + + + + Export + นำออก + + + + + Sweep + กวาด + + + + Logarithmic + ลอการิทึม + + + + Linear + เชิงเส้น + + + + FREQUENCY + ความถี่ + + + + AMPLITUDE + ขนาด + + + + Resolution BW + ความละเอียดความกว้างแถบความถี่ + + + + Units + หน่วย + + + + + Markers + เครื่องหมาย + + + + Settings + ตั้งค่า + + + + MARKER + เครื่องหมาย + + + + Normal + ค่าปกติ + + + + Delta + ความต่าง + + + + Peak + ค่าสูงสุด + + + + + Peak + ค่าสูงสุด + + + + + Ampl + ขนาด + + + + GENERAL + ทั่วไป + + + + Marker Table + ตารางเครื่องหมาย + + + + Import Reference Channels + นำเข้าช่องอ้างอิง + + + + No file selected! + ไม่มีไฟล์ถูกเลือก! + + + + Browse + เรียกดู + + + + Import + นำเข้า + + + + SpinBoxA + + + Form + แบบฟอร์ม + + + + StartStopRangeWidget + + + Form + แบบฟอร์ม + + + + Statistic + + + Form + แบบฟอร์ม + + + + Avg: + ค่าเฉลี่ย: + + + + + + 0.000 + 0.000 + + + + Min: + ค่าน้อยสุด: + + + + Max: + ค่ามากสุด: + + + + 1 + 1 + + + + Measurement + การวัด + + + + StatisticsPanel + + + Form + แบบฟอร์ม + + + + ToolLauncher + + + Scopy + Scopy + + + + Home + หน้าหลัก + + + + Save + บันทึก + + + + Load + โหลด + + + + Preferences + ค่ากำหนด + + + + Notes + หมายเหตุ + + + + Quit + ออก + + + + ADC Offset + ค่าชดเชย ADC + + + + ADC Gain + อัตราขยาย ADC + + + + Reset ADC Calibration + ตั้งค่าการสอบเทียบ ADC ใหม่ + + + + TriggerSettings + + + Form + แบบฟอร์ม + + + + Trigger Settings + ตั้งค่าตัวกระตุ้น + + + + Trigger mode + โหมดตัวกระตุ้น + + + + auto + อัตโนมัติ + + + + normal + ปกติ + + + + + Source + แหล่งที่มา + + + + INTERNAL (ANALOG) + ภายใน (อนาล็อก) + + + + + Condition + เงื่อนไข + + + + + Rising Edge + ขอบขาขึ้น + + + + + Falling Edge + ขอบขาลง + + + + + Low + ต่ำ + + + + + High + สูง + + + + This feature is not supported while the Mixed Signal View is enabled! + คุณสมบัตินี้ไม่รองรับในขณะที่เปิดใช้งานมุมมองสัญญาณผสม! + + + + DIGITAL + ติจิทัล + + + + Any Edge + ขอบใดๆ + + + + M2K daisychain position + ตำแหน่งเชื่อมโยง M2K + + + + TRIGGER LOGIC + ตรรกะตัวกระตุ้น + + + + Analog - Digital + อนาล็อก - ดิจิทัล + + + + Digital OR Analog + Digital OR Analog + + + + Digital AND Analog + Digital AND Analog + + + + Digital XOR Analog + Digital XOR Analog + + + + !Digital OR Analog + !Digital OR Analog + + + + !Digital AND Analog + !Digital AND Analog + + + + !Digital XOR Analog + !Digital XOR Analog + + + + EXTERNAL TRIGGER OUT + ตัวกระตุ้นภายนอก ออก + + + + UARTPatternUI + + + Form + แบบฟอร์ม + + + + Stop + หยุด + + + + 1 + 1 + + + + 2 + 2 + + + + 3 + 3 + + + + Baud + Baudrate + + + + + 9600 + 9600 + + + + 1200 + 1200 + + + + 2400 + 2400 + + + + 4800 + 4800 + + + + 14400 + 14400 + + + + 19200 + 19200 + + + + 28800 + 28800 + + + + 38400 + 38400 + + + + 57600 + 57600 + + + + 115200 + 115200 + + + + 230400 + 230400 + + + + Parity + Parity + + + + NONE + NONE + + + + ODD + ODD + + + + EVEN + EVEN + + + + MARK + MARK + + + + SPACE + SPACE + + + + Parameters + พารามิเตอร์ + + + + Data to Send + ข้อมูลที่ส่ง + + + + UserNotePage + + + Form + แบบฟอร์ม + + + + Remove note + ลบหมายเหตุ + + + + UserNotes + + + Form + แบบฟอร์ม + + + + Save + บันทึก + + + + File path + เส้นทางไฟล์ + + + + Browse + เรียกดู + + + + Note name + ชื่อหมายเหตุ + + + + WalkingPatternUI + + + Form + แบบฟอร์ม + + + + Walking level + ระดับการเดิน + + + + 0 + 0 + + + + + 1 + 1 + + + + Frequency + ความถี่ + + + + 1000 + 1000 + + + + Direction + ทิศทาง + + + + Right + ขวา + + + + Left + ซ้าย + + + + Length + ความยาว + + + + adiscope::BinaryCounterPatternUI + + + Frequency + ความถี่ + + + + adiscope::CapturePlot + + + + + + + + Zoom: + ซูม: + + + + + /div + /ช่อง + + + + Waiting + กำลังรอ + + + + Triggered + กระตุ้นแล้ว + + + + Stop + หยุด + + + + Auto + อัตโนมัติ + + + + adiscope::ClockPatternUI + + + Frequency + ความถี่ + + + + Phase + เฟส + + + + Duty + หน้าที่ + + + + adiscope::ConnectDialog + + + + Connect + เชื่อมต่อ + + + + Waiting for connection ... + รอการเชื่อมต่อ ... + + + + + Context info + ข้อมูลบริบท + + + + Add + เพิ่ม + + + + Warning + คำเตือน + + + + Error: Unable to find host: No such host is known! + ข้อผิดพลาด: ไม่พบโฮสต์: ไม่รู้จักโฮสต์ดังกล่าว! + + + + adiscope::CustomSwitch + + + on + เปิด + + + + off + ปิด + + + + adiscope::DMM + + + Timer + ตัวจับเวลา + + + + Stop + หยุด + + + + Run + ใช้ + + + + Export + นำออก + + + + Comma-separated values files (*.csv);;All Files(*) + ไฟล์ค่าที่แยกด้วยจุลภาค (*.csv);;ทุกไฟล์ (*) + + + + No file selected + ไม่มีไฟล์ถูกเลือก + + + + + File is open in another program + ไฟล์ถูกเปิดโดยโปรแกรมอื่นอยู่ + + + + + Choose a file + เลือกไฟล์ + + + + adiscope::Debugger + + + Save File + บันทึกไฟล์ + + + + JavaScript (*.js) + สคริปต์ Java (*.js) + + + + adiscope::DigitalIO + + + Stop + หยุด + + + + Run + ใช้ + + + + adiscope::ExportSettings + + + Channels + ช่อง + + + + Name + ชื่อ + + + + Export + นำออก + + + + adiscope::GrayCounterPatternUI + + + Frequency + ความถี่ + + + + adiscope::I2CPatternUI + + + Frequency + ความถี่ + + + + adiscope::ImportPatternUI + + + Frequency + ความถี่ + + + + Open file + เปิดไฟล์ + + + + Import selected channels + นำเข้าช่องที่เลือก + + + + No file selected + ไม่มีไฟล์ถูกเลือก + + + + Export + นำออก + + + + Comma-separated values files (*.csv);;Tab-delimited values files (*.txt) + ไฟล์ค่าที่แยกด้วยจุลภาค (*.csv);;ไฟล์ค่าที่จำกัดจำนวนด้วยแท็บ (*.txt) + + + + adiscope::ImportSettings + + + Import + นำเข้า + + + + Import all + นำเข้าทั้งหมด + + + + adiscope::InfoPage + + + Error: Connection failed! + ข้อผิดพลาด: การเชื่อมต่อล้มเหลว! + + + + Connected + เชื่อมต่อแล้ว + + + + Your hardware revision does not support the identify feature + การปรับปรุงฮาร์ดแวร์ใหม่ของคุณไม่รองรับคุณลักษณะการระบุตัวตน + + + + adiscope::M2kDeviceWidget + + + M2K + M2K + + + + adiscope::M2kInfoPage + + + Not connected + ไม่เชื่อมต่อ + + + + Always disconnect analog inputs/outputs before calibration + ตัดการเชื่อมต่ออินพุต/เอาต์พุตแบบอะนาล็อกทุกครั้งก่อนการสอบเทียบ + + + + Can't identify this device. + ไม่สามารถระบุอุปกรณ์นี้ได้. + + + + Can't identify device. Please try to update your firmware! + ไม่สามารถระบุอุปกรณ์ได้ โปรดลองอัปเดตเฟิร์มแวร์ของคุณ! + + + + Your hardware revision does not support the identify feature + การปรับปรุงฮาร์ดแวร์ใหม่ของคุณไม่รองรับคุณลักษณะการระบุตัวตน + + + + adiscope::ManualCalibration + + + Save File + บันทึกไฟล์ + + + + ini (*.ini) + ini (*.ini) + + + + + °C + °C + + + + adiscope::MarkerTable + + + Id + รหัสประจำตัว + + + + Marker + เครื่องหมาย + + + + Channel + ช่อง + + + + Frequency + ความถี่ + + + + Magnitude + ขนาด + + + + Type + ชนิด + + + + adiscope::MeasureSettings + + + Horizontal + แนวนอน + + + + + Name + ชื่อ + + + + + Measure + วัด + + + + + Stats + สถิติ + + + + Vertical + แนวตั้ง + + + + + Recover + กู้คืน + + + + + Delete All + ลบทั้งหมด + + + + adiscope::NetworkAnalyzer + + + + Stopped + หยุด + + + + Frequency (Hz) + ความถี่ (Hz) + + + + Magnitude(dB) + ขนาด (dB) + + + + Phase (°) + เฟส (°) + + + + Samples count + นับตัวอย่าง + + + + Samps/decade + ตัวอย่าง/decade + + + + Step + ขั้น + + + + Amplitude + ความสูง + + + + Offset + ค่าชดเชย + + + + Max. Magnitude + ขนาดมากสุด + + + + Min. Magnitude + ขนาดน้อยสุด + + + + Max. Phase + เฟสมากสุด + + + + Min. Phase + เฟสน้อยสุด + + + + + Settling time + เวลาการตั้งค่า + + + + Before Buffer + ก่อนบัฟเฟอร์ + + + + After Buffer + หลังบัฟเฟอร์ + + + + + Sample: + ตัวอย่าง: + + + + + Current Frequency: + ความถี่ปัจจุบัน: + + + + + DC Voltage: + แรงดันกระแสตรง: + + + + + Response channel voltage < 50mV! + แรงดันไฟฟ้าของช่องตอบสนอง < 50mV! + + + + + Low + ต่ำ + + + + + High + สูง + + + + + Gain Mode: + โหมดขยาย: + + + + Transparency + ความโปร่งแสง + + + + Image + รูปภาพ + + + + Save to + บันทึกไปที่ + + + + Import + นำเข้า + + + + Comma-separated values files (*.csv);;Tab-delimited values files (*.txt) + ไฟล์ค่าที่แยกด้วยจุลภาค (*.csv);;ไฟล์ค่าที่จำกัดจำนวนด้วยแท็บ (*.txt) + + + + Comma-separated values files (*.csv) + ไฟล์ค่าที่แยกด้วยจุลภาค (*.csv) + + + + Tab-delimited values files (*.txt) + ไฟล์ค่าที่จำกัดจำนวนด้วยแท็บ (*.txt) + + + + All Files(*) + ทุกไฟล์ (*) + + + + Export + นำออก + + + + Average: + ค่าเฉลี่ย: + + + + Running + กำลังทำ + + + + Stopping... + กำลังหยุด... + + + + adiscope::NetworkAnalyzer_API + + + Transparency + ความโปร่งใส + + + + adiscope::Oscilloscope + + + + Time Base + ฐานเวลา + + + + + Position + ตำแหน่ง + + + + Volts/Div + โวลต์/ช่อง + + + + + Add Channel + เพิ่มช่อง + + + + + + Export + นำออก + + + + + Comma-separated values files (*.csv) + ไฟล์ค่าที่แยกด้วยจุลภาค (*.csv) + + + + + Tab-delimited values files (*.txt) + ไฟล์ค่าที่จำกัดจำนวนด้วยแท็บ (*.txt) + + + + + All Files(*) + ทุกไฟล์ (*) + + + + Transparency + ความโปร่งใส + + + + "Warning: This feature is not supported on the current firmware version!" + "คำเตือน: ฟีเจอร์นี้ไม่รองรับบนเฟิร์มแวร์เวอร์ชันปัจจุบัน!" + + + + * When the Mixed Signal View is enabled the LogicAnalyzer tool will be disabled! +** The trigger can be disabled or set only on the Digital channels or Analog channels, not on both at the same time! + * เมื่อเปิดใช้งานมุมมองผสมสัญญาณ เครื่องมือวิเคราะห์ตรรกะจะถูกปิดใช้งาน! +** ตัวกระตุ้นสามารถปิดใช้งานหรือตั้งค่าได้เฉพาะในช่องดิจิทัลหรือช่องอนาล็อกเท่านั้น ไม่สามารถตั้งค่าทั้งสองช่องพร้อมกันได้! + + + + Math + คณิตศาสตร์ + + + + Browse + เรียกดู + + + + No file selected + ไม่มีไฟล์ถูกเลือก + + + + + Reference + อ้างอิง + + + + Logic + ตรรกะ + + + + Add channel + เพิ่มช่อง + + + + Import selected channels + นำเข้าช่องที่เลือก + + + + Enable Mixed Signal View + เปิดใช้งานมุมมองผสมสัญญาณ + + + + Import + นำเข้า + + + + Comma-separated values files (*.csv);;Tab-delimited values files (*.txt) + ไฟล์ค่าที่แยกด้วยจุลภาค (*.csv);;ไฟล์ค่าที่จำกัดจำนวนด้วยแท็บ (*.txt) + + + + + Snapshot + ภาพรวม + + + + Filter 1 - Enable - + ตัวกรอง 1 - เปิดใช้งาน - + + + + Filter 2 - Enable - + ตัวกรอง 2 - เปิดใช้งาน - + + + + + Save + บันทึก + + + + adiscope::PowerController + + + + mVolts + mVolts + + + + + Volts + Volts + + + + + Value + ค่า + + + + + Disable + ปิดการใช้งาน + + + + + Enable + เปิดการใช้งาน + + + + adiscope::Preferences + + + This change will be applied only after a Scopy reset. + การเปลี่ยนแปลงนี้จะมีผลหลังจากตั้งค่า Scopy ใหม่เท่านั้น. + + + + By resetting scopy you will lose the current configuration! + การตั้งค่า Scopy ใหม่จะทำให้การกำหนดค่าปัจจุบันหายไป! + + + + Do you want to reset? + คุณต้องการตั้งค่าใหม่ไหม? + + + + Load language + โหลดภาษา + + + + Language files (*.qm) + ไฟล์ภาษา (*.qm) + + + + adiscope::PrintablePlot + + + + + + Documents + เอกสาร + + + + Image + รูปภาพ + + + + Export File Name + ชื่อไฟล์นำออก + + + + adiscope::PulsePatternUI + + + Sample Rate + อัตราส่วนตัวอย่าง + + + + adiscope::RandomPatternUI + + + Frequency + ความถี่ + + + + adiscope::RunSingleWidget + + + + + Run + ใช้ + + + + + + Single + ครั้งเดียว + + + + + + + + Stop + หยุด + + + + adiscope::SPIPatternUI + + + Frequency + ความถี่ + + + + adiscope::SignalGenerator + + + deg + deg + + + + π rad + π rad + + + + + + + + ns + nSec + + + + + + + + μs + μSec + + + + + + + + ms + mSec + + + + + + + + s + Sec + + + + + + Phase + เฟส + + + + μVolts p-p + μVolts p-p + + + + mVolts p-p + mVolts p-p + + + + Volts p-p + Volts p-p + + + + + + Amplitude + ความสูง + + + + + + + μVolts + μVolts + + + + + + + + mVolts + mVolts + + + + + + + + Volts + Volts + + + + + Offset + ค่าชดเชย + + + + mHz + mHz + + + + Hz + Hz + + + + kHz + kHz + + + + MHz + MHz + + + + Frequency + ความถี่ + + + + Rising + ขาขึ้น + + + + Falling + ขาลง + + + + Rise Time + เวลาขึ้น + + + + Fall Time + เวลาลง + + + + High Time + เวลาสูง + + + + Low Time + เวลาต่ำ + + + + + SampleRate + อัตราส่วนตัวอย่าง + + + + Record Length + ความยาวการบันทึก + + + + Value + ค่า + + + + Duty Cycle + รอบการทำงาน + + + + + + samples + ตัวอย่าง + + + + Open File + เปิดไฟล์ + + + + Comma-separated values files (*.csv);;Tab-delimited values files (*.txt);;Waveform Audio File Format (*.wav);;Matlab files (*.mat) + ไฟล์ค่าที่แยกด้วยจุลภาค (*.csv);;ไฟล์ค่าที่จำกัดจำนวนด้วยแท็บ (*.txt);;ไฟล์เสียงแบบรูปคลื่น (*.wav);;ไฟล์ Matlab (*.mat) + + + + adiscope::Sismograph + + + Voltage (V) + แรงดัน (V) + + + + Time (s) + เวลา (Sec) + + + + adiscope::SpectrumAnalyzer + + + + + + Export + นำออก + + + + dBFS + dBFS + + + + dBV + dBV + + + + dBu + dBu + + + + Vpeak + Vpeak + + + + Vrms + Vrms + + + + V/√Hz + V/√Hz + + + + Sample + ตัวอย่าง + + + + Peak Hold + สูงสุด คงไว้ + + + + Peak Hold Continous + สูงสุด คงไว้ต่อเนื่อง + + + + Min Hold + ต่ำสุด คงไว้ + + + + Min Hold Continous + ต่ำสุด คงไว้ต่อเนื่อง + + + + Linear RMS + เชิงเส้น RMS + + + + Linear dB + เชิงเส้น dB + + + + Exponential RMS + เอกซ์โพเนนเชียล RMS + + + + Exponential dB + เอกซ์โพเนนเชียล dB + + + + Flat top + ด้านบนแบน + + + + Rectangular + สี่เหลี่ยม + + + + Triangular (Bartlett) + สามเหลี่ยม (บาร์ตเลตต์) + + + + Hamming + Hamming + + + + Hann + Hann + + + + Blackman-Harris + Blackman-Harris + + + + Kaiser + Kaiser + + + + Manual + ปรับด้วยมือ + + + + Peak + จุดสูงสุด + + + + Delta + ความต่าง + + + + Fixed + อยู่กับที่ + + + + Scale/Div + มาตราส่วน/ช่อง + + + + + Top + บน + + + + + Bottom + ล่าง + + + + Hz + Hz + + + + kHz + kHz + + + + MHz + MHz + + + + Frequency Position + ตำแหน่งความถี่ + + + + + Comma-separated values files (*.csv) + ไฟล์ค่าที่แยกด้วยจุลภาค (*.csv) + + + + + Tab-delimited values files (*.txt) + ไฟล์ค่าที่จำกัดจำนวนด้วยแท็บ (*.txt) + + + + + All Files(*) + ทุกไฟล์ (*) + + + + Comma-separated values files (*.csv);;Tab-delimited values files (*.txt) + ไฟล์ค่าที่แยกด้วยจุลภาค (*.csv);;ไฟล์ค่าที่จำกัดจำนวนด้วยแท็บ (*.txt) + + + + Snapshot + ภาพรวม + + + + Sample: + ตัวอย่าง: + + + + Average Sample: + ค่าเฉลี่ยตัวอย่าง: + + + + adiscope::StartStopRangeWidget + + + Start + เริ่ม + + + + Stop + หยุด + + + + Center + ตรงกลาง + + + + Span + ช่วง + + + + adiscope::ToolLauncher + + + Preferences + ค่ากำหนด + + + + Calibration skipped because already calibrated. + ข้ามการสอบเทียบเนื่องจากได้รับการปรับเทียบแล้ว. + + + + Calibrated + สอบเทียบแล้ว + + + + Save session + บันทึกรายการ + + + + + Scopy-Files (*.ini) + ไฟล์ Scopy (*.ini) + + + + Load session + โหลดรายการ + + + + Click to open the home menu + คลิกเพื่อเปิดเมนูหลัก + + + + Click to disconnect the device + คลิกเพื่อยกเลิกการเชื่อมต่ออุปกรณ์ + + + + Click to save the current session + คลิกเพื่อบันทึกรายการปัจจุบัน + + + + + Click to load a session + คลิกเพื่อโหลดรายการ + + + + + Select a device first + เลือกอุปกรณ์ก่อน + + + + + + Click to connect the device + คลิกเพื่อเชื่อมต่ออุปกรณ์ + + + + Report a bug! + รายงานข้อพกพร่อง! + + + + Connecting... + กำลังเชื่อมต่อ... + + + + Disconnecting... + กำลังยกเลิกการเชื่อมต่อ... + + + + Connect + เชื่อมต่อ + + + + Calibrating... + กำลังสอบเทียบ... + + + + Calibration Failed + การสอบเทียบล้มเหลว + + + + + Disconnect + ยกเลิกการเชื่อมต่อ + + + + Digital decoders support is disabled. Some features may be missing + การสนับสนุนตัวถอดรหัสดิจิทัลถูกปิดใช้งาน คุณสมบัติบางอย่างอาจขาดหายไป + + + + There was a problem initializing libsigrokdecode. Some features may be missing + มีปัญหาในการเริ่มต้น libsigrokdecode คุณสมบัติบางอย่างอาจขาดหายไป + + + + Calibrating + กำลังสอบเทียบ + + + + adiscope::ToolMenu + + + Oscilloscope + ออสซิลโลสโคป + + + + Spectrum Analyzer + ตัววิเคราะห์แถบความถี่ + + + + Network Analyzer + ตัววิเคราะห์เครือข่าย + + + + Signal Generator + ตัวกำเนิดสัญญาณ + + + + Logic Analyzer + ตัววิเคราะห์ตรรกะ + + + + Pattern Generator + ตัวกำเนิดรูปแบบ + + + + Digital IO + อินพุท/เอาท์พุทแบบติจิทัล + + + + Voltmeter + โวลต์มิเตอร์ + + + + Power Supply + แหล่งจ่ายไฟ + + + + Debugger + ตัวแก้ไขข้อบกพร่อง + + + + Calibration + การสอบเทียบ + + + + adiscope::ToolMenuItem + + + Calibrating... + กำลังสอบเทียบ... + + + + adiscope::TriggerSettings + + + Forward Trigger In + ตัวกระตุ้นที่ส่งมา เข้า + + + + Oscilloscope + ออสซิลโลสโคป + + + + + Logic Analyzer + ตัววิเคราะห์ตรรกะ + + + + + μVolts + μVolts + + + + + mVolts + mVolts + + + + + Volts + Volts + + + + Level + ระดับ + + + + Hysteresis + Hysteresis + + + + External Trigger In + ตัวกระตุ้นภายนอก เข้า + + + + None + ไม่มี + + + + adiscope::UserNotes + + + Note + หมายเหตุ + + + + Invalid or empty file! + ไฟล์ไม่ถูกต้องหรือว่างเปล่า! + + + + Path: + เส้นทาง: + + + + Warning: The file is empty! + คำเตือน: ไฟล์ว่างเปล่า! + + + + Warning: The path is invalid! + คำเตือน: ไฟล์ไม่ถูกต้อง! + + + + adiscope::logic::LogicAnalyzer + + + Sample Rate + อัตราส่วนตัวอย่าง + + + + Nr of samples + จำนวนตัวอย่าง + + + + Delay + เวลาหน่วง + + + + Transparency + ความโปร่งใส + + + + Select a decoder to add + เลือกตัวถอดรหัสที่จะเพิ่ม + + + + External Trigger In + ตัวถอดรหัสภายนอก เข้า + + + + Oscilloscope + ออสซิลโลสโคป + + + + Comma-separated values files (*.csv) + ไฟล์ค่าที่แยกด้วยจุลภาค (*.csv) + + + + Tab-delimited values files (*.txt) + ไฟล์ค่าที่จำกัดจำนวนด้วยแท็บ (*.txt) + + + + Value Change Dump(*.vcd) + ถ่ายโอนค่าที่เปลี่ยนแปลง (*.vcd) + + + + All Files(*) + ทุกไฟล์ (*) + + + + Export + นำออก + + + + adiscope::prop::Bool + + + + Querying config key %1 resulted in %2 + ปรับการตั้งค่าการสืบค้น %1 ส่งผลให้ %2 + + + + adiscope::prop::Double + + + + Querying config key %1 resulted in %2 + ปรับการตั้งค่าการสืบค้น %1 ส่งผลให้ %2 + + + + adiscope::prop::Enum + + + + Querying config key %1 resulted in %2 + ปรับการตั้งค่าการสืบค้น %1 ส่งผลให้ %2 + + + + adiscope::prop::Int + + + + Querying config key %1 resulted in %2 + ปรับการตั้งค่าการสืบค้น %1 ส่งผลให้ %2 + + + + adiscope::prop::String + + + + Querying config key %1 resulted in %2 + ปรับการตั้งค่าการสืบค้น %1 ส่งผลให้ %2 + + + + dioChannel + + + Form + แบบฟอร์ม + + + + + 0 + 0 + + + + in + เข้า + + + + out + ออก + + + + 1 + 1 + + + + dioElement + + + Form + แบบฟอร์ม + + + + 0 - 7 + 0 - 7 + + + + Individual + รายบุคคล + + + + Group + กลุ่ม + + + + in + เข้า + + + + out + ออก + + + + 127 + 127 + + + + scriptedBinaryCounter + + + Form + แบบฟอร์ม + + + + PulseScript + สคริปต์พัลส์ + + + + NumberOfPulses + จำนวนพัลส์ + + + + Samples/Pulse + จำนวนตัวอย่าง/พัลส์ + + + + Hi + สูง + + + + Lo + ต่ำ + + + + Frequency: + ความถี่: + + + + PushButton + กดปุ่ม + + + + INVALID + ไม่ถูกต้อง + + + diff --git a/resources/translations/scopy_tw.ts b/resources/translations/scopy_tw.ts new file mode 100644 index 0000000000..2647dad0ed --- /dev/null +++ b/resources/translations/scopy_tw.ts @@ -0,0 +1,6191 @@ + + + + + BaseMenu + + + Form + 表格 + + + + BaseMenuItem + + + Form + 表格 + + + + BinaryCounterPatternUI + + + Form + 表格 + + + + Init Value + 初始值 + + + + + 0 + + + + + Frequency + 頻率 + + + + 1000 + + + + + Start counter + 起始值 + + + + End counter + 終止值 + + + + 65535 + + + + + Increment + 增量 + + + + 1 + + + + + BitfieldWidget + + + Form + 表格 + + + + + TextLabel + 文字標籤 + + + + 0x + + + + + CalibrationTemplate + + + Form + 表格 + + + + Calibration info here + 此處查看校正信息 + + + + Set + 設定 + + + + Measured + 測量 + + + + Enter value here + 請輸入參數 + + + + Restart + 重啟 + + + + Next + 下一步 + + + + Finish + 完成 + + + + Channel + + + Form + 表格 + + + + Channel + 通道 + + + + ChannelSettings + + + Form + 表格 + + + + Channel + 通道 + + + + MATH + 公式 + + + + Edit Function + 編輯函數 + + + + HORIZONTAL + 水平 + + + + VERTICAL + 垂直 + + + + SETTINGS + 設定 + + + + CH Thickness + 通道顯示線寬 + + + + 0.5 + + + + + + + 1 + + + + + 1.5 + + + + + 2 + + + + + 2.5 + + + + + 3 + + + + + 3.5 + + + + + 4 + + + + + 4.5 + + + + + 5 + + + + + Memory depth + 記憶深度 + + + + Probe +Attenuation + 探頭衰減 + + + + 0.1X + + + + + 1X + + + + + 10X + + + + + 100X + + + + + Software +AC Coupling + 軟體AC耦合 + + + + Curve Style + 曲線樣式 + + + + Lines + + + + + Dots + 點狀 + + + + Steps + 階梯 + + + + Sticks + 桿狀 + + + + Smooth + 平滑 + + + Software AC Coupling + 軟體交流耦合 + + + + Filter 1 - Enabled + 過濾器1-已開啟 + + + + + TC + + + + + + Gain + 增益 + + + + + 0 + + + + + Filter 2 - Enabled + 過濾器2-已開啟 + + + + Autoset + 自動設定 + + + + Snapshot + 快照 + + + + Connect + + + Form + 表格 + + + Hostname + 主機名稱 + + + + URI (Hostname) + URI(主機名稱) + + + + Connect + 連接 + + + + Context info + 環境信息 + + + + ConstantPatternUI + + + Form + 表格 + + + + Constant + 常數 + + + + 0 + + + + + 1 + + + + + CursorReadouts + + + Form + 表格 + + + + Δt = + + + + + + 0.000ms + + + + + CurT2 = + + + + + 1/Δt = + + + + + - 000.000 ms + + + + + - 000.000 mHz + + + + + CurT1 = + + + + + CurV2 + + + + + ΔV + + + + + CurV1 + + + + + + 000.000 mV + + + + + - 000.000 mV + + + + + + + = + + + + + CursorsSettings + + + Form + 表格 + + + + Cursors + 遊標 + + + + Normal + 普通 + + + + Track + 跟蹤 + + + + 0 + + + + + HORIZONTAL + 水平 + + + + VERTICAL + 垂直 + + + + CURSOR READOUTS + 遊標讀數 + + + + Transparency 0% + 透明度 0% + + + + Position + 位置 + + + + CustomPlotPositionButton + + + Form + 表格 + + + + DMM + + + + MAX + 最大值 + + + + + MIN + 最小值 + + + + + VDC + + + + + Run + 運行 + + + + Channel 1 + 通道1 + + + + + DC (Direct Current) + DC(直流) + + + + + AC (20 Hz - 40 kHz) + + + + + + 1s + + + + + + 10s + + + + + + 60s + + + + + + History + 歷史記錄 + + + + + Line thickness + 線寬 + + + + + 0.5 + + + + + + 1 + + + + + + 1.5 + + + + + + 2 + + + + + + 2.5 + + + + + + 3 + + + + + + 3.5 + + + + + + 4 + + + + + + 4.5 + + + + + + 5 + + + + + Channel 2 + 通道2 + + + + PEAK HOLD + 峰值保持 + + + + Reset + 覆位 + + + + DATA LOGGING + 數據記錄 + + + + Browse + 瀏覽 + + + + Append + 疊加 + + + + Choose a file + 選擇一個檔案 + + + + Overwrite + 覆蓋 + + + + DbClickButtons + + + Form + 表格 + + + + 1 + + + + + 2 + + + + + 3 + + + + + 4 + + + + + 5 + + + + + Debugger + + + MainWindow + 主界面 + + + + SCRIPTING ENGINE + 腳本引擎 + + + + Load Script + 載入腳本 + + + + Run + 運行 + + + + Filename + 檔案名 + + + + + Read + 讀取 + + + + Device + 裝置 + + + + New Window + 新建窗口 + + + + + Write + 寫入 + + + + + Value: + 值: + + + + DEVICE SELECTION + 裝置選擇 + + + + Detailed Register Map + 暫存器映射詳解 + + + + Address: + 地址: + + + + 0x0000 + + + + + Display mode: + 顯示模式: + + + + <value> + <值> + + + + + 0x + + + + + Description: + 描述: + + + + Default Value: + 默認值: + + + + Source: + 資料來源: + + + + Enable AutoRead + 開啟自動讀取 + + + + REGISTER MAP SETTINGS + 暫存器映射設定 + + + + DetachDragZone + + + Form + 表格 + + + + Drag here to detach! + 拖放到此處拆分! + + + + Device + + + Form + 表格 + + + + DigitalIO + + + Form + 表格 + + + + Run + 運行 + + + + DigitalIoMenu + + + Form + 表格 + + + + PollingRate + + + + + 1000 + + + + + Enable Outputs + 開啟輸出 + + + + DigitalTriggerSettings + + + Form + 表格 + + + + Trigger Settings + 觸發設定 + + + + Trigger mode + 觸發模式 + + + + auto + 自動 + + + + normal + 普通 + + + + Trigger Logic + 觸發邏輯 + + + + OR + + + + + AND + + + + + EXTERNAL TRIGGER + 外部觸發 + + + + Source + + + + + Condition + 觸發條件 + + + + None + + + + + EXTERNAL TRIGGER OUT + 退出外部觸發 + + + + DragZone + + + Form + 表格 + + + + EmptyPatternUI + + + Form + 表格 + + + + ExportSettings + + + Form + 表格 + + + + EXPORT + 匯出 + + + + Export All + 全部匯出 + + + + Export + 匯出 + + + + FrequencyPatternUI + + + Form + 表格 + + + + Frequency + 頻率 + + + + 1000 + + + + + GenericJSPatternUI + + + Form + 表格 + + + + Script status + 腳本狀態 + + + + Clear console + 清除控制台 + + + + HomepageControls + + + Form + 表格 + + + + I2CPatternUI + + + Form + 表格 + + + + R + + + + + W + + + + + Read/Write + 讀/寫 + + + + MSB First + 最高有效位優先 + + + + Address + 地址 + + + + Inter frame space + 幀間空間 + + + + Data + 數據 + + + + InfoPage + + + Form + 表格 + + + + Forget device + 忘記裝置 + + + + Identify + 識別 + + + + Connect + 連接 + + + + Calibrate + 校正 + + + + InfoWidget + + + Form + 表格 + + + + Move + 移動 + + + + InstrumentNotes + + + Form + 表格 + + + + Notes + 注釋 + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html> + + + + + Insert notes here + 在這里新增注釋 + + + + LAChannelGroup + + + Form + 表格 + + + + DIO + 通道 + + + + + 12 + + + + + None + + + + + LAChannelManager + + + Form + 表格 + + + + LAManagerHeader + + + Form + 表格 + + + + View + 查看 + + + + Name + 名稱 + + + + DIO + 通道 + + + + Trigger + 觸發器 + + + + Select + 選擇 + + + + LARequiredChannel + + + Form + 表格 + + + + Settings + 設定 + + + + + Role + 角色 + + + + LASettingsWidget + + + Form + 表格 + + + + REQUIRED + 必填 + + + + OPTIONAL + 選填 + + + + OPTIONS + 選項 + + + + LChannelSettings + + + Form + 表格 + + + + BG Color + 背景顏色 + + + + Edge Color + 邊界顏色 + + + + Low Color + 低電位顏色 + + + + High Color + 高電位顏色 + + + + SETTINGS + 設定 + + + + COLOR SETTINGS + 顏色設定 + + + + Name + 名稱 + + + + Thickness + 線寬 + + + + 1 + + + + + 1.5 + + + + + 2 + + + + + 2.5 + + + + + 3 + + + + + 3.5 + + + + + 4 + + + + + 4.5 + + + + + 5 + + + + + LFSRPatternUI + + + Form + 表格 + + + + + 0x0001 + + + + + Generator Polynomial + 生成多項式 + + + + Start State + 啟始狀態 + + + + Period + 周期 + + + + LogicAnalyzer + + + Scopy Logic Analyzer + Scopy邏輯分析儀 + + + + Group + + + + + + Channel Settings + 通道設定 + + + + + - + + + + + Name + 名稱 + + + + 1 + + + + + Trace Height + 跟蹤高度 + + + + GROUP + + + + + Stack Decoder: + 堆棧解碼器: + + + + Trigger Settings + 觸發設定 + + + + Trigger mode + 觸發模式 + + + + auto + 自動 + + + + normal + 普通 + + + + Trigger Logic + 觸發邏輯 + + + + EXTERNAL TRIGGER + 外部觸發 + + + + "Warning: This feature is not supported on the current firmware version!" + "警告:當前韌體版本不支持此功能!"警告:當前韌體版本不支持此功能!" + + + + Source + + + + + Condition + 觸發條件 + + + + General Settings + 通用設定 + + + + OneShot + 單次 + + + + AVAILABLE CHANNELS + 可以獲取的通道 + + + + DECODERS + 解碼器 + + + + Close + 關閉 + + + Hide inactive + 隱藏非活動 + + + Group with selected + 將已選擇通道合並為組 + + + + Print + 列印 + + + Run + 運行 + + + Single + 單次運行 + + + Settings + 設定 + + + Run Mode + 運行模式 + + + Repeated + 重覆觸發 + + + + Stream + 數據流 + + + Reset Instrument + 覆位儀器 + + + + Cursors + 遊標 + + + + + Trigger + 觸發 + + + + ManualCalibration + + + Form + 表格 + + + + Load Calibration + 載入校正 + + + + Save Calibration + 儲存校正 + + + + Run automatic + 自動運行 + + + + MarkerTable + + + Form + 表格 + + + + Math + + + Form + 表格 + + + + f(t) = + + + + + cos + + + + + 2 + + + + + 7 + + + + + , + + + + + 3 + + + + + ← + + + + + ( + + + + + exp + + + + + 1 + + + + + 8 + + + + + - + + + + + / + + + + + * + + + + + e + + + + + C + + + + + 0 + + + + + 6 + + + + + ) + + + + + log + + + + + t + + + + + + + + + + + 9 + + + + + tan + + + + + ^ + + + + + 4 + + + + + Apply + 啟用 + + + + pi + + + + + 5 + + + + + sin + + + + + MathPanel + + + Form + 表格 + + + + Add channel + 新增通道 + + + + MeasureSettings + + + Form + 表格 + + + + Measure + 測量 + + + + Channel + 通道 + + + + MEASUREMENTS + 測量 + + + + Counter + 計數器 + + + + Display All + 全部顯示 + + + + + Delete All + 全部刪除 + + + + STATISTICS + 統計 + + + + Reset + 覆位 + + + + CUSTOM SELECTION + 自定義選擇 + + + + Enable + 開啟 + + + + GATING SETTINGS + 門設定 + + + + MeasurementsPanel + + + Form + 表格 + + + + NetworkAnalyzer + + + Print + 列印 + + + + Current Frequency: + 電流頻率: + + + + Sample: + 取樣: + + + + Average: + 平均值: + + + + Phase (°) + 相位(°) + + + + Magnitude (dB) + 幅度(dB) + + + + ° + + + + + 10 + + + + + Settings + 設定 + + + REFERENCE + 參考 + + + + + REFERENCE + 參考 + + + + Channel 1 + 通道 1 + + + + Channel 2 + 通道 2 + + + + 0 + + + + + Gain Mode + 增益模式 + + + + Automatic + 自動 + + + + Low + 低電位 + + + + High + 高電位 + + + + RESPONSE + 響應 + + + + DC Filtering + 直流濾波 + + + + + On + + + + + + Off + + + + + SWEEP + 掃描 + + + + Logarithmic + 對數 + + + + Linear + 線性 + + + + Average + 平均值 + + + + + Apply + 啟用 + + + + Periods + 周期 + + + + DISPLAY + 顯示 + + + + Delta Label + Delta標簽 + + + + BUFFER PREVIEWER + 緩衝預覽 + + + + ViewInOsc + 在示波器中查看 + + + + Previous + 上一步 + + + + Next + 下一步 + + + + General Settings + 通用設定 + + + + PLOT + 繪圖 + + + + Type + 類型 + + + + Bode + + + + + Nyquist + + + + + Nichols + + + + + Line thickness + 線寬 + + + + 0.5 + + + + + 1 + + + + + 1.5 + + + + + 2 + + + + + 2.5 + + + + + 3 + + + + + 3.5 + + + + + 4 + + + + + 4.5 + + + + + 5 + + + + + EXPORT + 匯出 + + + + Export + 匯出 + + + + Import + 匯入 + + + + Snapshot + 快照 + + + + Remove Reference + 移除參考 + + + + Cursors + 遊標 + + + + CURSOR READOUTS + 遊標讀數 + + + + Transparency 0% + 透明度 0% + + + + Position + 位置 + + + + Cursors + 遊標 + + + + NetworkAnalyzerBufferViewer + + + Form + 表格 + + + + Note + + + TextLabel + 文字標籤 + + + + NumberPatternUI + + + Form + 表格 + + + + Number + + + + + OscGeneralSettings + + + GeneralSettings + 通用設定 + + + + General settings + 通用設定 + + + + VIEWS + 視圖 + + + + FFT + + + + + X-Y + + + + + Histogram + 直方圖 + + + + X-Y + + + + + Y-Axis + Y-軸 + + + + X-Axis + X-軸 + + + + dots + + + + + lines + + + + + X-Y Line thickness + X-Y 線寬 + + + + 1 + + + + + 2 + + + + + 3 + + + + + 4 + + + + + 5 + + + + + 6 + + + + + 7 + + + + + 8 + + + + + 9 + + + + + 10 + + + + + Oscilloscope + + + Scopy Oscilloscope + Scopy示波器 + + + + Print + 列印 + + + + Cursors + 遊標 + + + + Measure + 測量 + + + + Trigger + 觸發 + + + + Close + 關閉 + + + + PGCGSettings + + + Form + 表格 + + + + TextLabel + 文字標籤 + + + + Pattern + 模式碼 + + + + Output + 輸出 + + + + PP + + + + + OD + + + + + CLOCK + 時鐘 + + + + SETTINGS + 設定 + + + + Name + 名稱 + + + + Thickness + 線寬 + + + + 1 + + + + + 1.5 + + + + + 2 + + + + + 2.5 + + + + + 3 + + + + + 3.5 + + + + + 4 + + + + + 4.5 + + + + + 5 + + + + + COLOR SETTINGS + 顏色設定 + + + + BG Color + 背景顏色 + + + + Edge Color + 邊界顏色 + + + + Low Color + 低電位顏色 + + + + High Color + 高電位顏色 + + + + PGChannel + + + Form + 表格 + + + + TextLabel + 文字標籤 + + + + PGChannelGroup + + + Form + 表格 + + + + TextLabel + 文字標籤 + + + + 12 + + + + + PGChannelManager + + + Form + 表格 + + + + PGChannelManagerHeader + + + Form + 表格 + + + + Enable + 開啟 + + + + Name + 名稱 + + + + DIO + 通道 + + + + Select + 選擇 + + + + PGSettings + + + Form + 表格 + + + + Settings + 設定 + + + + Autoset + 自動設定 + + + + Sample Rate + 取樣率 + + + + Buffer Size + 緩衝區大小 + + + + ExternalClock + 外部時鐘 + + + + External Clock Frequency + 外部時鐘頻率 + + + + Reset Instrument + 覆位儀器 + + + + PatternGenerator + + + Scopy Pattern Generator + Scopy模式產生器 + + + + Print + 列印 + + + + Group + + + + + + Channel Settings + 通道設定 + + + + 1 + + + + + Trace Height + 跟蹤高度 + + + + Name + 名稱 + + + + Open-Drain + 開漏 + + + + Push-Pull + 推挽 + + + + GROUP + + + + + Pattern + 模式碼 + + + + Trigger Settings + 觸發設定 + + + + Trigger mode + 觸發模式 + + + + auto + 自動 + + + + normal + 普通 + + + + Trigger Logic + 觸發邏輯 + + + + EXTERNAL TRIGGER + 外部觸發 + + + + Source + + + + + Condition + 觸發條件 + + + + - + + + + + General Settings + 通用設定 + + + + AVAILABLE CHANNELS + 可以獲取的通道 + + + + Cursors + 遊標 + + + + Trigger + 觸發器 + + + + Close + 關閉 + + + Hide inactive + 隱藏非活動 + + + Group with selected + 將已選擇通道合並為組 + + + Run + 運行 + + + Single + 單次運行 + + + TextLabel + 文字標籤 + + + + PowerController + + + Scopy Power Control + Scopy電源控制 + + + + + Set + 設定 + + + + + Measure + 測量 + + + + + + + VDC + + + + + Tracking ratio control + 跟蹤比率控制 + + + + Independent + 獨立模式 + + + + Tracking + 跟蹤模式 + + + + 100 + + + + + % + + + + + Positive output + 輸出正電壓 + + + + + Enable + 開啟 + + + + Negative output + 輸出負電壓 + + + + Preferences + + + Form + 表格 + + + + GENERAL + 通用 + + + + OSCILLOSCOPE + 示波器 + + + + Enable labels on the plot + 開啟圖上的標簽 + + + + Enable graticule + 開啟方格圖 + + + Enable oscilloscope filters + 開啟示波器濾波器 + + + + Enable mini histogram + 開啟微型直方圖 + + + + Language (requires app restart) + 語言(要求重啟應用程序) + + + + Restart the application for changes to take effect + 重啟應用程序,使更改生效 + + + + Attempt temperature-based calibration (EXPERIMENTAL) + 嘗試基於溫度的校正(實驗) + + + + Enable animations + 開啟動畫 + + + + 1 + + + + + Run external scripts (Experimental) + 運行外部腳本(試驗性) + + + + SPECTRUM ANALYZER + 頻譜分析儀 + + + + Only search marker peaks in visible domain + 只在可見域搜索標記峰值 + + + + Enable all instrument notes + 開啟所有儀器注釋 + + + + Double click to detach a tool + 雙擊以分離工具 + + + + Save session when closing Scopy + 關閉Scopy時儲存會話 + + + + NETWORK ANALYZER + 網絡分析儀 + + + + Always display 0db value on graph + 始終在圖上顯示0db值 + + + Enable user notes + 開啟用戶筆記 + + + + Scriptable manual calibration + 可編寫腳本的手動校正 + + + + Show advanced device information + 顯示詳細裝置的信息 + + + + LOGIC ANALYZER + 邏輯分析儀 + + + + Display sampling points when zoomed + 縮放時顯示取樣點 + + + + SIGNAL GENERATOR + 信號產生器 + + + + Number of displayed periods + 顯示的周期數 + + + + Enable digital decoders + 開啟數位解碼器 + + + + Enable sample rate filters + 開啟取樣率過濾器 + + + + Show ADC digital filter config + 顯示ADC數位濾波器配置 + + + + DEBUG + + + + + Enable Debug Messages (Only for Debugging, Bugreporting) + 開啟debug信息 + + + + Enable Debug Instrument + 啟用調試工具 + + + + Enable user notes in main page + 在主頁開啟用戶注釋 + + + + Skip calibration if already calibrated (cal values are not default) + 跳過校正如果已經校正 + + + + Reset Scopy + 重啟:Scopy + + + + PulsePatternUI + + + Form + 表格 + + + + Low + 低電位 + + + + + + + 0 + + + + + High + 高電位 + + + + 100 + + + + + Counter Init + 初始化計數器 + + + + Delay + 延時 + + + + + 1 + + + + + Delay polarity + 延遲極性 + + + + Number of pulses + 脈衝數 + + + + QObject + + + Period + 周期 + + + + Frequency + 頻率 + + + + Min + 最小值 + + + + Max + 最大值 + + + + Peak-peak + 峰對峰 + + + + Mean + 平均值 + + + + Cycle Mean + 周期平均值 + + + + RMS + + + + + Cycle RMS + 周期RMS + + + + AC RMS + + + + + Area + 區域 + + + + Cycle Area + 循環區 + + + + Low + 低電位 + + + + High + 高電位 + + + + Amplitude + 幅度 + + + + Middle + 中值 + + + + +Over + + + + + -Over + + + + + Rise + 上升沿 + + + + Fall + 下降沿 + + + + +Width + +寬度 + + + + -Width + -寬度 + + + + +Duty + +占空比 + + + + -Duty + -占空比 + + + + RegisterWidget + + + Form + 表格 + + + + RunSingleWidget + + + Form + 表格 + + + + Run + 運行 + + + + Single + 單次運行 + + + + SPIPatternUI + + + Form + 表格 + + + + MSB First + 最高有效位優先 + + + + + + 1 + + + + + + + 0 + + + + + CLK Phase + CLK相位 + + + + CS Polarity + CS極性 + + + + CLK Polarity + CLK 極性 + + + + Bytes per frame + 每幀的字節數 + + + + Inter frame space + 幀間空間 + + + + Data + 數據 + + + + SignalGenerator + + + Scopy Signal Generator + Scopy信號產生器 + + + + Constant + 常數 + + + + Waveform + 波形 + + + + Sine + 正弦波 + + + + Square + 方波 + + + + Triangle + 三角波 + + + + Trapezoidal + 梯形波 + + + + Rising Ramp Sawtooth + 上升斜坡鋸齒波 + + + + Falling Ramp Sawtooth + 下降斜坡鋸齒波 + + + + Stair Step + 梯形台階波 + + + + TIMING + 時序 + + + + Buffer + 播放檔案 + + + + FILE + 檔案 + + + + Path + 路徑 + + + + + No file loaded + 未載入檔案 + + + + Format + 格式 + + + + Size + 尺寸 + + + + 0 samples + 0取樣點 + + + + Load file + 載入檔案 + + + + Channel + 通道 + + + + SCALING + 縮放比例 + + + + Math + 數學 + + + + NOISE + + + + NOISE + 噪聲 + + + + None + + + + + Uniform + 均勻 + + + + Gaussian + 高斯 + + + + Laplacian + 拉普拉斯 + + + + Impulse + 脈衝 + + + + OTHER + 其他 + + + + Line thickness + 線寬 + + + + 0.5 + + + + + 1 + + + + + 1.5 + + + + + 2 + + + + + 2.5 + + + + + 3 + + + + + 3.5 + + + + + 4 + + + + + 4.5 + + + + + 5 + + + + + Close + 關閉 + + + + SpectrumAnalyzer + + + Form + 表格 + + + + Print + 列印 + + + + Preset + 預先設定 + + + + + dBFS + + + + + Sample: + 樣本: + + + + Average Sample: + 平均樣本: + + + + Marker_n 0.000 Hz 0dB + + + + + Channel + 通道 + + + + Type + 類型 + + + + Sample + 取樣 + + + + and other types + 其他類型 + + + + Window + 窗口 + + + + Uniform (none) + 均勻 + + + + and others windows + 其他窗口 + + + + Averaging + 均值 + + + + Apply + 啟用 + + + + CH Thickness + 通道顯示線寬 + + + + 0.5 + + + + + 1 + + + + + 1.5 + + + + + 2 + + + + + 2.5 + + + + + 3 + + + + + 3.5 + + + + + 4 + + + + + 4.5 + + + + + 5 + + + + + History + 歷史記錄 + + + + Gain mode + 增益模式 + + + + + Low + 低電位 + + + + High + 高電位 + + + + Snapshot + 快照 + + + + General settings + 通用設定 + + + + Export + 匯出 + + + + + Sweep + 掃描 + + + + Logarithmic + 對數 + + + + Linear + 線性 + + + + FREQUENCY + 頻率 + + + + AMPLITUDE + 幅度 + + + + Resolution BW + 解析度頻寬 + + + + Units + 單位 + + + + + Markers + 標記 + + + + Settings + 設定 + + + + MARKER + 標記 + + + + Normal + 普通 + + + + Delta + 差值 + + + + Peak + 峰值 + + + + + Peak + 峰值 + + + + + Ampl + 振幅 + + + + GENERAL + 通用 + + + + Marker Table + 標記表 + + + + Import Reference Channels + 匯入參考通道 + + + + No file selected! + 未選擇檔案! + + + + Browse + 瀏覽 + + + + Import + 匯入 + + + + SpinBoxA + + + Form + 表格 + + + + StartStopRangeWidget + + + Form + 表格 + + + + Statistic + + + Form + 表格 + + + + Avg: + 平均: + + + + + + 0.000 + + + + + Min: + 最小值: + + + + Max: + 最大值: + + + + 1 + + + + + Measurement + 測量 + + + + StatisticsPanel + + + Form + 表格 + + + + ToolLauncher + + + Scopy + + + + + Home + 主頁 + + + + Save + 儲存 + + + + Load + 載入 + + + + Preferences + 偏好設定 + + + + Notes + 注釋 + + + + Quit + 退出 + + + + ADC Offset + ADC偏移 + + + + ADC Gain + ADC增益 + + + + Reset ADC Calibration + 覆位ADC校正 + + + + TriggerSettings + + + Form + 表格 + + + + Trigger Settings + 觸發設定 + + + + Trigger mode + 觸發模式 + + + + auto + 自動 + + + + normal + 普通 + + + + + Source + + + + + INTERNAL (ANALOG) + 內部(類比) + + + + + Condition + 觸發條件 + + + + + Rising Edge + 上升沿 + + + + + Falling Edge + 下降沿 + + + + + Low + 低電位 + + + + + High + 高電位 + + + + This feature is not supported while the Mixed Signal View is enabled! + 啟用混合信號視圖時,不支持此功能! + + + + DIGITAL + 數位 + + + + Any Edge + 所有沿 + + + + M2K daisychain position + M2K菊花鏈位置 + + + + TRIGGER LOGIC + 觸發邏輯 + + + + Analog - Digital + 類比 - 數位 + + + + Digital OR Analog + 數位或類比 + + + + Digital AND Analog + 數位和類比 + + + + Digital XOR Analog + 數位異或類比 + + + + !Digital OR Analog + !數位或類比 + + + + !Digital AND Analog + !數位和類比 + + + + !Digital XOR Analog + !數位異或類比 + + + + EXTERNAL TRIGGER OUT + 外部觸發 + + + + UARTPatternUI + + + Form + 表格 + + + + Stop + 停止 + + + + 1 + + + + + 2 + + + + + 3 + + + + + Baud + 波特率 + + + + + 9600 + + + + + 1200 + + + + + 2400 + + + + + 4800 + + + + + 14400 + + + + + 19200 + + + + + 28800 + + + + + 38400 + + + + + 57600 + + + + + 115200 + + + + + 230400 + + + + + Parity + 奇偶性 + + + + NONE + + + + + ODD + 奇校驗 + + + + EVEN + 偶校驗 + + + + MARK + 標記 + + + + SPACE + 空間 + + + + Parameters + 參量 + + + + Data to Send + 要發送的數據 + + + + UserNotePage + + + Form + 表格 + + + + Remove note + 刪除注釋 + + + + UserNotes + + + Form + 表格 + + + + Save + 儲存 + + + + File path + 檔案路徑 + + + + Browse + 瀏覽 + + + + Note name + 備注名稱 + + + + WalkingPatternUI + + + Form + 表格 + + + + Walking level + 步進等級 + + + + 0 + + + + + + 1 + + + + + Frequency + 頻率 + + + + 1000 + + + + + Direction + 方向 + + + + Right + + + + + Left + + + + + Length + 長度 + + + + adiscope::BinaryCounterPatternUI + + + Frequency + 頻率 + + + + adiscope::CapturePlot + + + + + + + + Zoom: + 縮放: + + + + + /div + /格 + + + + Waiting + 等待中 + + + + Triggered + 已觸發 + + + + Stop + 停止 + + + + Auto + 自動 + + + + adiscope::ClockPatternUI + + + Frequency + 頻率 + + + + Phase + 相位 + + + + Duty + 占空比 + + + + adiscope::ConnectDialog + + + + Connect + 連接 + + + + Waiting for connection ... + 等待連接... + + + + + Context info + 環境信息 + + + + Add + 新增 + + + + Warning + 警告 + + + + Error: Unable to find host: No such host is known! + Error:不能找到主機:沒有對應的主機名! + + + + adiscope::CustomSwitch + + + on + + + + + off + + + + + adiscope::DMM + + + Timer + 計時器 + + + + Stop + 停止 + + + + Run + 運行 + + + + Export + 匯出 + + + + Comma-separated values files (*.csv);;All Files(*) + 逗號分隔值檔案(*.csv);;所有檔案(*) + + + + No file selected + 未選擇檔案 + + + + + File is open in another program + 檔案在另一個程序中打開 + + + + + Choose a file + 選擇一個檔案 + + + + adiscope::Debugger + + + Save File + 儲存檔案 + + + + JavaScript (*.js) + + + + + adiscope::DigitalIO + + + Stop + 停止 + + + + Run + 運行 + + + + adiscope::ExportSettings + + + Channels + 通道 + + + + Name + 名稱 + + + + Export + 匯出 + + + + adiscope::GrayCounterPatternUI + + + Frequency + + + + + adiscope::I2CPatternUI + + + Frequency + + + + + adiscope::ImportPatternUI + + + Frequency + 頻率 + + + + Open file + 打開檔案 + + + + Import selected channels + 匯入所選的通道 + + + + No file selected + 未選擇檔案 + + + + Export + 匯出 + + + + Comma-separated values files (*.csv);;Tab-delimited values files (*.txt) + 逗號分隔值檔案(*.csv);;標簽分隔的值檔案(*.txt) + + + + adiscope::ImportSettings + + + Import + 匯入 + + + + Import all + 全部匯入 + + + + adiscope::InfoPage + + Firmware version + 韌體版本 + + + Model + 型號 + + + Model variant + 型號變化 + + + Serial + 序號 + + + Product ID + 產品ID + + + Vendor ID + 供應商ID + + + Product name + 產品名稱 + + + Vendor + 供應商 + + + Release + 發布 + + + IP Address + IP地址 + + + + Error: Connection failed! + 錯誤:連接失敗 + + + + Connected + 已連接 + + + + Your hardware revision does not support the identify feature + 您的硬體版本不支持識別功能 + + + + adiscope::LogicAnalyzer + + Time Base + 時間長/格 + + + Position + 位置 + + + Frequency + 頻率 + + + Export + 匯出 + + + Comma-separated values files (*.csv) + Tab-delimited values files (*.txt) + 逗號分隔值檔案(*.csv) + + + Waiting + 等待中 + + + Triggered + 已觸發 + + + Stop + 停止 + + + Auto + 自動 + + + Scan + 掃描 + + + Zoom: + 縮放: + + + /div + /格 + + + Run + 運行 + + + Single + 單次運行 + + + Show all + 顯示全部 + + + Hide inactive + 隱藏非活動 + + + + adiscope::M2kDeviceWidget + + + M2K + + + + + adiscope::M2kInfoPage + + + Not connected + 沒有鏈接 + + + + Always disconnect analog inputs/outputs before calibration + 校正前一定要斷開類比輸入/輸出的連接。 + + + + Can't identify this device. + 無法識別這個裝置。 + + + + Can't identify device. Please try to update your firmware! + 無法識別裝置。請嘗試更新您的韌體 + + + + Your hardware revision does not support the identify feature + 您的硬體版本不支持識別功能 + + + + adiscope::ManualCalibration + + + Save File + 儲存檔案 + + + + ini (*.ini) + + + + + + °C + + + + + adiscope::MarkerTable + + + Id + + + + + Marker + 標記 + + + + Channel + 通道 + + + + Frequency + 頻率 + + + + Magnitude + 幅度 + + + + Type + 類型 + + + + adiscope::MeasureSettings + + + Horizontal + 水平 + + + + + Name + 名稱 + + + + + Measure + 測量 + + + + + Stats + 統計 + + + + Vertical + 垂直 + + + + + Recover + 恢覆 + + + + + Delete All + 全部刪除 + + + + adiscope::NetworkAnalyzer + + + + Stopped + 已停止 + + + + Frequency (Hz) + 頻率(Hz) + + + + Magnitude(dB) + 幅度(dB) + + + + Phase (°) + 相位(°) + + + + Samples count + 取樣計數 + + + + Samps/decade + + + + + Step + 步進 + + + + Amplitude + 幅度 + + + + Offset + 偏移 + + + + Max. Magnitude + 最大幅度 + + + + Min. Magnitude + 最小幅度 + + + + Max. Phase + 最大相位 + + + + Min. Phase + 最小相位 + + + + + Settling time + 穩定時間 + + + + Before Buffer + 緩衝之前 + + + + After Buffer + 緩衝之後 + + + + + Sample: + 取樣: + + + + + Current Frequency: + 電流頻率: + + + + + DC Voltage: + DC電壓: + + + + + Response channel voltage < 50mV! + 響應通道電壓 < 50mV! + + + + + Low + 低電位 + + + + + High + + + + + + Gain Mode: + 增益模式 + + + + Transparency + 透明度 + + + + Image + 圖片 + + + + Save to + 儲存至 + + + + Import + 匯入 + + + + Comma-separated values files (*.csv);;Tab-delimited values files (*.txt) + 逗號分隔值檔案(*.csv);;標簽分隔的值檔案(*.txt) + + + + Comma-separated values files (*.csv) + 逗號分隔值檔案(*.csv) + + + + Tab-delimited values files (*.txt) + 標簽分隔的值檔案(*.txt) + + + + All Files(*) + 所有檔案(*) + + + + Export + 匯出 + + + + Average: + 平均值: + + + Comma-separated values files (*.csv) + Tab-delimited values files (*.txt) + 逗號分隔值檔案(*.csv) + + + + Running + 正在運行 + + + + Stopping... + 停止中... + + + + adiscope::NetworkAnalyzer_API + + + Transparency + 透明度 + + + + adiscope::Oscilloscope + + + + Time Base + 時間長/格 + + + + + Position + 位置 + + + + Volts/Div + 伏特/格 + + + + + Add Channel + 新增通道 + + + + + Comma-separated values files (*.csv) + 逗號分隔值檔案(*.csv) + + + + + Tab-delimited values files (*.txt) + 標簽分隔的值檔案(*.txt) + + + + + All Files(*) + 所有檔案(*) + + + + + + Export + 匯出 + + + Comma-separated values files (*.csv) + Tab-delimited values files (*.txt) + 逗號分隔值檔案(*.csv) + + + + Transparency + 透明度 + + + + "Warning: This feature is not supported on the current firmware version!" + "警告:當前韌體版本不支持此功能!"警告:當前韌體版本不支持此功能!" + + + + * When the Mixed Signal View is enabled the LogicAnalyzer tool will be disabled! +** The trigger can be disabled or set only on the Digital channels or Analog channels, not on both at the same time! + * 當混合信號視圖啟用時,LogicAnalyzer工具將被禁用! +** 觸發器只能在數位通道或類比通道上禁用或設定,不能同時在兩個通道上禁用或設定。 + + + + Math + 計算 + + + + Browse + 瀏覽 + + + + No file selected + 未選擇檔案 + + + + + Reference + 參考 + + + + Logic + 邏輯 + + + + Add channel + 新增通道 + + + + Import selected channels + 匯入所選的通道 + + + + Enable Mixed Signal View + 啟用混合信號視圖 + + + + Import + 匯入 + + + + Comma-separated values files (*.csv);;Tab-delimited values files (*.txt) + 逗號分隔值檔案(*.csv);;標簽分隔的值檔案(*.txt) + + + + + Snapshot + 快照 + + + + Filter 1 - Enable - + 過濾器1-開啟- + + + + Filter 2 - Enable - + 過濾器2-開啟- + + + + + Save + 儲存 + + + + adiscope::PatternGenerator + + Stop + 停止 + + + Run + 運行 + + + Show All + 顯示全部 + + + Hide Inactive + 隱藏非活動 + + + + adiscope::PowerController + + + + mVolts + + + + + + Volts + + + + + + Value + 值: + + + + + Disable + 失能 + + + + + Enable + 開啟 + + + + adiscope::Preferences + + + This change will be applied only after a Scopy reset. + 此更改僅在Scopy覆位之後生效. + + + + By resetting scopy you will lose the current configuration! + 覆位scopy將會丟失當前配置! + + + + Do you want to reset? + 仍要覆位? + + + + Load language + 載入語言 + + + + Language files (*.qm) + 載入語言(*.qm) + + + + adiscope::PrintablePlot + + + + + + Documents + 文件 + + + + Image + + + + Images + 鏡像 + + + + Export File Name + 匯出檔案名稱 + + + + adiscope::PulsePatternUI + + + Sample Rate + 取樣率 + + + + adiscope::RandomPatternUI + + + Frequency + 頻率 + + + + adiscope::RunSingleWidget + + + + + Run + 運行 + + + + + + Single + 單次運行 + + + + + + + + Stop + 停止 + + + + adiscope::SPIPatternUI + + + Frequency + 頻率 + + + + adiscope::SignalGenerator + + + deg + + + + + π rad + + + + + + + + + ns + + + + + + + + + μs + + + + + + + + + ms + + + + + + + + + s + + + + + + + Phase + 相位 + + + + μVolts p-p + + + + + mVolts p-p + + + + + Volts p-p + + + + + + + Amplitude + 幅度 + + + + + + + μVolts + + + + + + + + + mVolts + + + + + + + + + Volts + + + + + + Offset + 偏移 + + + + mHz + + + + + Hz + + + + + kHz + + + + + MHz + + + + + Frequency + 頻率 + + + + Rising + 上升沿 + + + + Falling + 下降沿 + + + + Rise Time + 上升時間 + + + + Fall Time + 下降時間 + + + + High Time + 高電位時間 + + + + Low Time + 低電位時間 + + + + + SampleRate + 取樣率 + + + + Record Length + 記錄長度 + + + + Value + 值: + + + + Duty Cycle + 占空比 + + + + + + samples + 取樣 + + + + Open File + 打開檔案 + + + + Comma-separated values files (*.csv);;Tab-delimited values files (*.txt);;Waveform Audio File Format (*.wav);;Matlab files (*.mat) + 逗號分隔值檔案(*.csv);;制表符分隔值檔案(*.txt);;波形音頻檔案格式(*.wav);;Matlab檔案(*.mat) + + + + adiscope::Sismograph + + + Voltage (V) + 電壓(V) + + + + Time (s) + 時間(s) + + + + adiscope::SpectrumAnalyzer + + + + + + Export + 匯出 + + + Comma-separated values files (*.csv) + Tab-delimited values files (*.txt) + 逗號分隔值檔案(*.csv) + + + + dBFS + + + + + dBV + + + + + dBu + + + + + Vpeak + + + + + Vrms + + + + + V/√Hz + + + + + Sample + 取樣 + + + + Peak Hold + 峰值保持 + + + + Peak Hold Continous + 峰值保持 連續 + + + + Min Hold + 最短保持時間 + + + + Min Hold Continous + 最短保持時間 連續 + + + + Linear RMS + 線性RMS + + + + Linear dB + 線性 dB + + + + Exponential RMS + 指數RMS + + + + Exponential dB + 指數dB + + + + Flat top + 平頂型 + + + + Rectangular + 矩形 + + + + Triangular (Bartlett) + 三角形(Bartlett) + + + + Hamming + + + + + Hann + + + + + Blackman-Harris + + + + + Kaiser + + + + + Manual + 手動 + + + + Peak + 峰值 + + + + Delta + 差值 + + + + Fixed + 固定 + + + + Scale/Div + 刻度 + + + + Sample: + 樣本 + + + + Average Sample: + 平均樣本 + + + Range + 範圍 + + + + + Top + 頂部 + + + + + Bottom + 底部 + + + + Hz + + + + + kHz + + + + + MHz + + + + + Frequency Position + 頻率位置 + + + + + Comma-separated values files (*.csv) + 逗號分隔值檔案(*.csv) + + + + + Tab-delimited values files (*.txt) + 標簽分隔的值檔案(*.txt) + + + + + All Files(*) + 所有檔案(*) + + + + Comma-separated values files (*.csv);;Tab-delimited values files (*.txt) + 逗號分隔值檔案(*.csv);;標簽分隔的值檔案(*.txt) + + + + Snapshot + 快照 + + + + adiscope::StartStopRangeWidget + + + Start + 開始 + + + + Stop + 結束 + + + + Center + 中心頻率 + + + + Span + 掃描寬度 + + + + adiscope::ToolLauncher + + + Preferences + 偏好設定 + + + + Calibration skipped because already calibrated. + 因為已經校正,所以跳過校正。 + + + + Calibrated + 已校正 + + + + Save session + 載入會話 + + + + + Scopy-Files (*.ini) + Scopy檔案(*.ini) + + + + Load session + 載入會話 + + + + Click to open the home menu + 單擊打開主菜單 + + + + Click to disconnect the device + 單擊斷開裝置連接 + + + + Click to save the current session + 單擊儲存當前會話 + + + + + Click to load a session + 單擊載入會話 + + + + + Select a device first + 先選擇裝置 + + + + + + Click to connect the device + 單擊以連接裝置 + + + + Report a bug! + 報告錯誤! + + + + Connecting... + 連接中... + + + + Disconnecting... + 斷開連接中... + + + + Connect + 連接 + + + + Calibrating... + 校正中... + + + + Calibration Failed + 校正失敗 + + + + + Disconnect + 斷開連接 + + + + Digital decoders support is disabled. Some features may be missing + 數位解碼器支持已禁用.某些特性可能丟失 + + + + There was a problem initializing libsigrokdecode. Some features may be missing + 初始化 libsigrokdecode 時出現了問題.可能缺少一些功能 + + + + Calibrating + 校正中 + + + + adiscope::ToolMenu + + + Oscilloscope + 示波器 + + + + Spectrum Analyzer + 頻譜分析儀 + + + + Network Analyzer + 網絡分析儀 + + + + Signal Generator + 信號產生器 + + + + Logic Analyzer + 邏輯分析儀 + + + + Pattern Generator + 碼型產生器 + + + + Digital IO + 數位IO + + + + Voltmeter + 電壓表 + + + + Power Supply + 電源供應器 + + + + Debugger + 調試器 + + + + Calibration + 校正 + + + + adiscope::ToolMenuItem + + + Calibrating... + 校正中... + + + + adiscope::TriggerSettings + + + Forward Trigger In + 正向觸發 + + + + Oscilloscope + 示波器 + + + + + Logic Analyzer + 邏輯分析儀 + + + + + μVolts + + + + + + mVolts + + + + + + Volts + + + + + Level + 觸發等級 + + + + Hysteresis + 觸發滯後 + + + + External Trigger In + 外部觸發 + + + + None + + + + + adiscope::UserNotes + + + Note + 筆記本 + + + + Invalid or empty file! + 檔案無效或空檔案! + + + + Path: + 路徑: + + + + Warning: The file is empty! + Warning:檔案為空! + + + + Warning: The path is invalid! + Warning:路徑無效! + + + + adiscope::logic::LogicAnalyzer + + + Sample Rate + 取樣率 + + + + Nr of samples + 樣本數量 + + + + Delay + 延時 + + + + Transparency + 透明度 + + + + Select a decoder to add + 選擇一個要新增的解碼器 + + + + External Trigger In + 外部觸發 + + + + Oscilloscope + 示波器 + + + + Comma-separated values files (*.csv) + 逗號分隔值檔案(*.csv) + + + + Tab-delimited values files (*.txt) + 標簽分隔的值檔案(*.txt) + + + + Value Change Dump(*.vcd) + 值變化轉存(*.vcd) + + + + All Files(*) + 所有檔案(*) + + + + Export + 匯出 + + + + adiscope::prop::Bool + + + + Querying config key %1 resulted in %2 + 查詢配置鍵%1導致%2 + + + + adiscope::prop::Double + + + + Querying config key %1 resulted in %2 + 查詢配置鍵%1導致%2 + + + + adiscope::prop::Enum + + + + Querying config key %1 resulted in %2 + 查詢配置鍵%1導致%2 + + + + adiscope::prop::Int + + + + Querying config key %1 resulted in %2 + 查詢配置鍵%1導致%2 + + + + adiscope::prop::String + + + + Querying config key %1 resulted in %2 + 查詢配置鍵%1導致%2 + + + + dioChannel + + + Form + 表格 + + + + + 0 + + + + + in + 輸入 + + + + out + 輸出 + + + + 1 + + + + + dioElement + + + Form + 表格 + + + + 0 - 7 + + + + + Individual + 單個 + + + + Group + + + + + in + 輸入 + + + + out + 輸出 + + + + 127 + + + + + scriptedBinaryCounter + + + Form + 表格 + + + + PulseScript + 脈衝腳本 + + + + NumberOfPulses + 脈衝數 + + + + Samples/Pulse + 取樣/脈衝 + + + + Hi + 高電位 + + + + Lo + 低電位 + + + + Frequency: + 頻率: + + + + PushButton + 按鈕 + + + + INVALID + 無效 + + + diff --git a/scopy-32.iss.cmakein b/scopy-32.iss.cmakein index 136aa7f18d..828f614a06 100644 --- a/scopy-32.iss.cmakein +++ b/scopy-32.iss.cmakein @@ -2,6 +2,7 @@ #define AppName "Scopy" #define AppDev "Analog Devices" #define Python "@PYTHON_VERSION@" +#define DriverVersion "0.7" [Setup] AppId={{02A7A7F9-F068-4B1C-85F6-B6D325938E19} @@ -48,9 +49,20 @@ Name: "spanish"; MessagesFile: "compiler:Languages\Spanish.isl" Name: "turkish"; MessagesFile: "compiler:Languages\Turkish.isl" Name: "ukrainian"; MessagesFile: "compiler:Languages\Ukrainian.isl" +[Code] +function isDriverInstalled(): Boolean; +begin + Result := True; + if not RegKeyExists(HKLM, 'Software\Analog Devices\{#AppName}\Settings') then + begin + Result := False; + end; +end; + [Tasks] Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}" Name: "deleteini"; Description: Delete previous settings (Scopy.ini) +Name: "drivers"; Description: Install drivers for ADALM2000; Check: not isDriverInstalled; [Files] Source: "c:\scopy_32\*"; DestDir: "{app}"; Check: not Is64BitInstallMode; Flags: ignoreversion recursesubdirs createallsubdirs @@ -62,3 +74,18 @@ Name: "{commondesktop}\{#AppName}"; Filename: "{app}\{#AppExeName}"; Tasks: desk [InstallDelete] Type: files; Name: "{userappdata}\ADI\Scopy.ini"; Tasks: deleteini + +[Run] +Filename: "{app}\drivers\dpinst.exe"; Parameters: "/PATH ""{app}\drivers"" {param:dpinstflags|/F}" ; Flags: waituntilterminated; Tasks: drivers + +[UninstallRun] +Filename: "{app}\drivers\dpinst.exe"; Parameters: "/s /U pluto-cdc-acm.inf"; WorkingDir: "{app}\drivers"; Flags: waituntilterminated; +Filename: "{app}\drivers\dpinst.exe"; Parameters: "/s /U pluto-rndis.inf"; WorkingDir: "{app}\drivers"; Flags: waituntilterminated; +Filename: "{app}\drivers\dpinst.exe"; Parameters: "/s /U pluto-usbd.inf"; WorkingDir: "{app}\drivers"; Flags: waituntilterminated; +Filename: "{app}\drivers\dpinst.exe"; Parameters: "/s /U pluto-dfu.inf"; WorkingDir: "{app}\drivers"; Flags: waituntilterminated; + +[Registry] +Root: HKLM; Subkey: "Software\Analog Devices"; Flags: uninsdeletekeyifempty +Root: HKLM; Subkey: "Software\Analog Devices\{#AppName}"; Flags: uninsdeletekey +Root: HKLM; Subkey: "Software\Analog Devices\{#AppName}\Settings"; ValueType: string; ValueName: "InstallPath"; ValueData: "{app}" +Root: HKLM; Subkey: "Software\Analog Devices\{#AppName}\Settings"; ValueType: string; ValueName: "InstallVersion"; ValueData: {#DriverVersion} diff --git a/scopy-64.iss.cmakein b/scopy-64.iss.cmakein index 02d7e651db..500d281a36 100644 --- a/scopy-64.iss.cmakein +++ b/scopy-64.iss.cmakein @@ -2,6 +2,7 @@ #define AppName "Scopy" #define AppDev "Analog Devices" #define Python "@PYTHON_VERSION@" +#define DriverVersion "0.7" [Setup] AppId={{02A7A7F9-F068-4B1C-85F6-B6D325938E19} @@ -48,9 +49,20 @@ Name: "spanish"; MessagesFile: "compiler:Languages\Spanish.isl" Name: "turkish"; MessagesFile: "compiler:Languages\Turkish.isl" Name: "ukrainian"; MessagesFile: "compiler:Languages\Ukrainian.isl" +[Code] +function isDriverInstalled(): Boolean; +begin + Result := True; + if not RegKeyExists(HKLM, 'Software\Analog Devices\{#AppName}\Settings') then + begin + Result := False; + end; +end; + [Tasks] Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}" Name: "deleteini"; Description: Delete previous settings (Scopy.ini) +Name: "drivers"; Description: Install drivers for ADALM2000; Check: not isDriverInstalled; [Files] Source: "c:\scopy_64\*"; DestDir: "{app}"; Check: Is64BitInstallMode; Flags: ignoreversion recursesubdirs createallsubdirs @@ -62,3 +74,18 @@ Name: "{commondesktop}\{#AppName}"; Filename: "{app}\{#AppExeName}"; Tasks: desk [InstallDelete] Type: files; Name: "{userappdata}\ADI\Scopy.ini"; Tasks: deleteini + +[Run] +Filename: "{app}\drivers\dpinst.exe"; Parameters: "/PATH ""{app}\drivers"" {param:dpinstflags|/F}" ; Flags: waituntilterminated; Tasks: drivers + +[UninstallRun] +Filename: "{app}\drivers\dpinst.exe"; Parameters: "/s /U pluto-cdc-acm.inf"; WorkingDir: "{app}\drivers"; Flags: waituntilterminated; +Filename: "{app}\drivers\dpinst.exe"; Parameters: "/s /U pluto-rndis.inf"; WorkingDir: "{app}\drivers"; Flags: waituntilterminated; +Filename: "{app}\drivers\dpinst.exe"; Parameters: "/s /U pluto-usbd.inf"; WorkingDir: "{app}\drivers"; Flags: waituntilterminated; +Filename: "{app}\drivers\dpinst.exe"; Parameters: "/s /U pluto-dfu.inf"; WorkingDir: "{app}\drivers"; Flags: waituntilterminated; + +[Registry] +Root: HKLM; Subkey: "Software\Analog Devices"; Flags: uninsdeletekeyifempty +Root: HKLM; Subkey: "Software\Analog Devices\{#AppName}"; Flags: uninsdeletekey +Root: HKLM; Subkey: "Software\Analog Devices\{#AppName}\Settings"; ValueType: string; ValueName: "InstallPath"; ValueData: "{app}" +Root: HKLM; Subkey: "Software\Analog Devices\{#AppName}\Settings"; ValueType: string; ValueName: "InstallVersion"; ValueData: {#DriverVersion} diff --git a/scopy.iss.cmakein b/scopy.iss.cmakein index f2eb22dcf6..eaa38ba170 100644 --- a/scopy.iss.cmakein +++ b/scopy.iss.cmakein @@ -2,6 +2,7 @@ #define AppName "Scopy" #define AppDev "Analog Devices" #define Python "@PYTHON_VERSION@" +#define DriverVersion "0.7" [Setup] AppId={{02A7A7F9-F068-4B1C-85F6-B6D325938E19} @@ -48,13 +49,25 @@ Name: "spanish"; MessagesFile: "compiler:Languages\Spanish.isl" Name: "turkish"; MessagesFile: "compiler:Languages\Turkish.isl" Name: "ukrainian"; MessagesFile: "compiler:Languages\Ukrainian.isl" +[Code] +function isDriverInstalled(): Boolean; +begin + Result := True; + if not RegKeyExists(HKLM, 'Software\Analog Devices\{#AppName}\Settings') then + begin + Result := False; + end; +end; + [Tasks] Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}" Name: "deleteini"; Description: Delete previous settings (Scopy.ini) +Name: "drivers"; Description: Install drivers for ADALM2000; Check: not isDriverInstalled; [Files] -Source: "c:\scopy_32\*"; DestDir: "{app}"; Check: not Is64BitInstallMode; Flags: ignoreversion recursesubdirs createallsubdirs Source: "c:\scopy_64\*"; DestDir: "{app}"; Check: Is64BitInstallMode; Flags: ignoreversion recursesubdirs createallsubdirs +Source: "c:\scopy_32\*"; DestDir: "{app}"; Check: not Is64BitInstallMode; Flags: ignoreversion recursesubdirs createallsubdirs + [Icons] Name: "{group}\{#AppName}"; Filename: "{app}\{#AppExeName}" @@ -63,3 +76,18 @@ Name: "{commondesktop}\{#AppName}"; Filename: "{app}\{#AppExeName}"; Tasks: desk [InstallDelete] Type: files; Name: "{userappdata}\ADI\Scopy.ini"; Tasks: deleteini + +[Run] +Filename: "{app}\drivers\dpinst.exe"; Parameters: "/PATH ""{app}\drivers"" {param:dpinstflags|/F}" ; Flags: waituntilterminated; Tasks: drivers + +[UninstallRun] +Filename: "{app}\drivers\dpinst.exe"; Parameters: "/s /U pluto-cdc-acm.inf"; WorkingDir: "{app}\drivers"; Flags: waituntilterminated; +Filename: "{app}\drivers\dpinst.exe"; Parameters: "/s /U pluto-rndis.inf"; WorkingDir: "{app}\drivers"; Flags: waituntilterminated; +Filename: "{app}\drivers\dpinst.exe"; Parameters: "/s /U pluto-usbd.inf"; WorkingDir: "{app}\drivers"; Flags: waituntilterminated; +Filename: "{app}\drivers\dpinst.exe"; Parameters: "/s /U pluto-dfu.inf"; WorkingDir: "{app}\drivers"; Flags: waituntilterminated; + +[Registry] +Root: HKLM; Subkey: "Software\Analog Devices"; Flags: uninsdeletekeyifempty +Root: HKLM; Subkey: "Software\Analog Devices\{#AppName}"; Flags: uninsdeletekey +Root: HKLM; Subkey: "Software\Analog Devices\{#AppName}\Settings"; ValueType: string; ValueName: "InstallPath"; ValueData: "{app}" +Root: HKLM; Subkey: "Software\Analog Devices\{#AppName}\Settings"; ValueType: string; ValueName: "InstallVersion"; ValueData: {#DriverVersion} diff --git a/src/DisplayPlot.cc b/src/DisplayPlot.cc index 721e6c6117..a6da863954 100644 --- a/src/DisplayPlot.cc +++ b/src/DisplayPlot.cc @@ -56,6 +56,7 @@ #include #include #include +#include using namespace adiscope; @@ -579,6 +580,12 @@ DisplayPlot::DisplayPlot(int nplots, QWidget* parent, plotLayout()->setAlignCanvasToScales(true); + QColor plotColor; + if (QIcon::themeName() == "scopy-default") { + plotColor = QColor("#6E6E6F"); + } else { + plotColor = QColor("#D3D3D3"); + } for (unsigned int i = 0; i < 4; i++) { QwtScaleDraw::Alignment scale = @@ -591,8 +598,9 @@ DisplayPlot::DisplayPlot(int nplots, QWidget* parent, scaleItem->setFont(this->axisWidget(QwtPlot::yLeft)->font()); QPalette palette = scaleItem->palette(); - palette.setBrush(QPalette::Foreground, QColor("#6E6E6F")); - palette.setBrush(QPalette::Text, QColor("#6E6E6F")); + + palette.setBrush(QPalette::Foreground, plotColor); + palette.setBrush(QPalette::Text, plotColor); scaleItem->setPalette(palette); scaleItem->setBorderDistance(0); scaleItem->attach(this); @@ -626,7 +634,7 @@ DisplayPlot::DisplayPlot(int nplots, QWidget* parent, // Plot needs a grid d_grid = new EdgelessPlotGrid(); - QColor majorPenColor("#353537"); + QColor majorPenColor(plotColor); d_grid->setMajorPen(majorPenColor, 1.0, Qt::DashLine); d_grid->attach(this); } diff --git a/src/TimeDomainDisplayPlot.cc b/src/TimeDomainDisplayPlot.cc index a4bb042745..f2212fb63d 100644 --- a/src/TimeDomainDisplayPlot.cc +++ b/src/TimeDomainDisplayPlot.cc @@ -185,6 +185,8 @@ TimeDomainDisplayPlot::TimeDomainDisplayPlot(QWidget* parent, unsigned int xNumD d_nb_ref_curves = 0; + d_autoscale_state = false; + // Reconfigure the bottom horizontal axis that was created by the base class configureAxis(QwtPlot::xBottom, 0); configureAxis(QwtPlot::yLeft, 0); @@ -448,24 +450,27 @@ TimeDomainDisplayPlot::plotNewData(const std::string &sender, // } // } -// if(d_autoscale_state) { -// double bottom=1e20, top=-1e20; -// for(int n = 0; n < d_nplots; n++) { -// for(int64_t point = 0; point < numDataPoints; point++) { -// if(d_ydata[n][point] < bottom) { -// bottom = d_ydata[n][point]; -// } -// if(d_ydata[n][point] > top) { -// top = d_ydata[n][point]; -// } -// } -// } -// _autoScale(bottom, top); -// if(d_autoscale_shot) { -// d_autoscale_state = false; -// d_autoscale_shot = false; -// } -// } + + if(d_autoscale_state) { + double bottom=1e20, top=-1e20; + for(int n = 0; n < d_nplots; n++) { + if(d_plot_curve[n]->plot()) { + for(int64_t point = 0; point < numDataPoints; point++) { + if(d_ydata[n][point] < bottom) { + bottom = d_ydata[n][point]; + } + if(d_ydata[n][point] > top) { + top = d_ydata[n][point]; + } + } + } + } + _autoScale(bottom, top); + if(d_autoscale_shot) { + d_autoscale_state = false; + d_autoscale_shot = false; + } + } replot(); @@ -563,8 +568,8 @@ void TimeDomainDisplayPlot::_autoScale(double bottom, double top) { // Auto scale the y-axis with a margin of 20% (10 dB for log scale) - double _bot = bottom - fabs(bottom)*0.20; - double _top = top + fabs(top)*0.20; + double _bot = bottom - fabs(bottom-top)*0.125; + double _top = top + fabs(bottom-top)*0.125; if(d_semilogy) { if(bottom > 0) { setYaxis(_bot-10, _top+10); @@ -574,8 +579,15 @@ TimeDomainDisplayPlot::_autoScale(double bottom, double top) } } else { - setYaxis(_bot, _top); + if(_bot == 0 && _top == 0){ + setYaxis(-1e-3, 1e-3); + } + else{ + setYaxis(_bot, _top); + } } + + replot(); } void @@ -636,10 +648,34 @@ void TimeDomainDisplayPlot::setXAxisNumPoints(unsigned int pts) d_nbPtsXAxis = pts; } -void -TimeDomainDisplayPlot::setAutoScale(bool state) +void TimeDomainDisplayPlot::setAutoScale(bool state) { d_autoscale_state = state; + + if(d_autoscale_state) { + double bottom=1e20, top=-1e20; + for(int n = 0; n < d_nplots; n++) { + if(d_plot_curve[n]->plot()) { + for(int64_t point = 0; point < Curve(n)->data()->size(); point++) { + if(d_ydata[n][point] < bottom) { + bottom = d_ydata[n][point]; + } + if(d_ydata[n][point] > top) { + top = d_ydata[n][point]; + } + } + } + } + _autoScale(bottom, top); + if(d_autoscale_shot) { + d_autoscale_state = false; + d_autoscale_shot = false; + } + } + else{ + setYaxis(-5, 5); + replot(); + } } void diff --git a/src/TimeDomainDisplayPlot.h b/src/TimeDomainDisplayPlot.h index 1405d53e2a..d8549efbaf 100644 --- a/src/TimeDomainDisplayPlot.h +++ b/src/TimeDomainDisplayPlot.h @@ -219,6 +219,7 @@ private Q_SLOTS: bool isReferenceWaveform(QwtPlotCurve *curve); bool isMathWaveform(QwtPlotCurve *curve) const; int countReferenceWaveform(int position); + QVector d_logic_curves; private: void _resetXAxisPoints(double*& xAxis, unsigned long long numPoints, double sampleRate); @@ -254,7 +255,6 @@ private Q_SLOTS: QMap d_ref_curves; QMap d_math_curves; - QVector d_logic_curves; int d_nb_ref_curves; int getCurveNextTo(int pos); }; diff --git a/src/application_restarter.cpp b/src/application_restarter.cpp new file mode 100644 index 0000000000..aa51d98690 --- /dev/null +++ b/src/application_restarter.cpp @@ -0,0 +1,39 @@ +#include "application_restarter.h" + +#include +#include +#include + +using namespace adiscope; + +ApplicationRestarter::ApplicationRestarter(const QString &executable) + : m_executable(executable) + , m_currentPath(QDir::currentPath()) +{ + +} + +void ApplicationRestarter::setArguments(const QStringList &arguments) +{ + m_arguments = arguments; +} + +QStringList ApplicationRestarter::getArguments() const +{ + return m_arguments; +} + +int ApplicationRestarter::restart(int exitCode) +{ + if (qApp->property("restart").toBool()) { + QProcess::startDetached(m_executable, m_arguments, m_currentPath); + } + + return exitCode; +} + +void ApplicationRestarter::triggerRestart() +{ + qApp->setProperty("restart", QVariant(true)); + qApp->exit(); +} diff --git a/src/application_restarter.h b/src/application_restarter.h new file mode 100644 index 0000000000..96ff0f3e29 --- /dev/null +++ b/src/application_restarter.h @@ -0,0 +1,25 @@ +#ifndef APPLICATIONRESTARTER_H +#define APPLICATIONRESTARTER_H + +#include +#include + +namespace adiscope { +class ApplicationRestarter +{ +public: + ApplicationRestarter(const QString &executable); + + void setArguments(const QStringList &arguments); + QStringList getArguments() const; + + int restart(int exitCode); + static void triggerRestart(); + +private: + QString m_executable; + QStringList m_arguments; + QString m_currentPath; +}; +} // namespace adiscope +#endif // APPLICATIONRESTARTER_H diff --git a/src/calibration.cpp b/src/calibration.cpp index e7cad0e541..4790a817b8 100644 --- a/src/calibration.cpp +++ b/src/calibration.cpp @@ -135,6 +135,16 @@ void Calibration::cancelCalibration() m_cancel = true; } +bool Calibration::hasContextCalibration() const +{ + return m_m2k->hasContextCalibration(); +} + +float Calibration::calibrateFromContext() +{ + return m_m2k->calibrateFromContext(); +} + /* FIXME: TODO: Move this into a HW class / lib M2k */ double Calibration::getIioDevTemp(const QString& devName) const { diff --git a/src/calibration.hpp b/src/calibration.hpp index 6ae362ca0a..8ade9ecd3f 100644 --- a/src/calibration.hpp +++ b/src/calibration.hpp @@ -71,6 +71,8 @@ class Calibration bool calibrateAll(); bool calibrateAdc(); bool calibrateDac(); + bool hasContextCalibration() const; + float calibrateFromContext(); bool resetCalibration(); void updateCorrections(); diff --git a/src/connectDialog.cpp b/src/connectDialog.cpp index 062d22e67a..973ba45d71 100644 --- a/src/connectDialog.cpp +++ b/src/connectDialog.cpp @@ -27,11 +27,12 @@ #include #include +#include using namespace adiscope; ConnectDialog::ConnectDialog(QWidget *widget) : QWidget(widget), - ui(new Ui::Connect), connected(false) + ui(new Ui::Connect), connected(false), enableDemo(false) { ui->setupUi(this); ui->connectBtn->setText(tr("Connect")); @@ -39,6 +40,7 @@ ConnectDialog::ConnectDialog(QWidget *widget) : QWidget(widget), ui->connectBtn->setDisabled(true); connect(ui->connectBtn, SIGNAL(clicked()), this, SLOT(btnClicked())); + connect(ui->enableDemoBtn, SIGNAL(clicked()), this, SLOT(enableDemoBtn())); connect(ui->hostname, SIGNAL(returnPressed()), this, SLOT(btnClicked())); connect(ui->hostname, SIGNAL(textChanged(const QString&)), @@ -50,6 +52,10 @@ ConnectDialog::ConnectDialog(QWidget *widget) : QWidget(widget), setDynamicProperty(ui->hostname, "invalid", false); setDynamicProperty(ui->hostname, "valid", false); ui->infoSection->hide(); + + ui->demoDevicesComboBox->addItem("adalm2000"); + ui->demoDevicesComboBox->setDisabled(false); + process = new QProcess(this); } ConnectDialog::~ConnectDialog() @@ -90,6 +96,56 @@ void ConnectDialog::btnClicked() } } +void ConnectDialog::enableDemoBtn() +{ + if (!enableDemo) { + QProcess killProcess; +#if defined(_WIN32) || defined(__CYGWIN__) || defined(__MINGW32__) + killProcess.start("taskkill /im iio-emu /f"); +#else + killProcess.start("pkill iio-emu"); +#endif + killProcess.waitForFinished(); + + // iio-emu found in system + QString dirPath = QCoreApplication::applicationDirPath(); + QString program = dirPath + "/iio-emu"; + QStringList arguments; + arguments.append(ui->demoDevicesComboBox->currentText()); + process->setProgram(program); + process->setArguments(arguments); + process->start(); + auto started = process->waitForStarted(); + if (!started) { + // retry to start the process + // path for iio-emu when Scopy is built manually + program = dirPath + "/iio-emu/iio-emu"; + process->setProgram(program); + process->start(); + started = process->waitForStarted(); + if (!started) { + ui->description->setText("Server failed to start"); + qDebug() << "Process failed to start"; + return; + } + } + + ui->enableDemoBtn->setChecked(true); + ui->enableDemoBtn->setText("Disable Demo"); + ui->hostname->setText("127.0.0.1"); + + enableDemo = true; + } else { + process->kill(); + ui->enableDemoBtn->setChecked(false); + ui->enableDemoBtn->setText("Enable Demo"); + ui->hostname->setText(""); + + enableDemo = false; + } + +} + void ConnectDialog::discardSettings() { if (!ui->hostname->text().isEmpty()) { diff --git a/src/connectDialog.hpp b/src/connectDialog.hpp index bb1431846c..f132db3dab 100644 --- a/src/connectDialog.hpp +++ b/src/connectDialog.hpp @@ -22,6 +22,7 @@ #define CONNECTDIALOG_HPP #include +#include extern "C" { struct iio_context; @@ -52,6 +53,7 @@ public Q_SLOTS: private Q_SLOTS: void btnClicked(); + void enableDemoBtn(); void validateInput(); void updatePopUp(struct iio_context *ctx); @@ -59,6 +61,8 @@ private Q_SLOTS: private: Ui::Connect *ui; bool connected; + bool enableDemo; + QProcess *process; void createContext(const QString& uri); bool eventFilter(QObject *watched, QEvent *event); }; diff --git a/src/cursor_readouts.cpp b/src/cursor_readouts.cpp index 15ae5d57f9..2a18d65ba9 100644 --- a/src/cursor_readouts.cpp +++ b/src/cursor_readouts.cpp @@ -23,6 +23,7 @@ #include #include +#include #include #include #include @@ -41,18 +42,19 @@ CursorReadouts::CursorReadouts(QwtPlot *plot): vAxis(QwtPlot::yLeft) { ui->setupUi(this); - ui->TimeCursors->setParent(plot->canvas()); ui->VoltageCursors->setParent(plot->canvas()); this->setGeometry(0, 0, 0, 0); - plot->canvas()->installEventFilter(this); + plot->canvas()->installEventFilter(this); ui->TimeCursors->setAttribute(Qt::WA_TransparentForMouseEvents); ui->VoltageCursors->setAttribute(Qt::WA_TransparentForMouseEvents); anim = new CustomAnimation(ui->VoltageCursors, "geometry"); anim2 = new CustomAnimation(ui->TimeCursors, "geometry"); + + setTransparency(0); } CursorReadouts::~CursorReadouts() @@ -65,15 +67,21 @@ CursorReadouts::~CursorReadouts() void CursorReadouts::setTransparency(int value) { double percent = (100 - value) / 100.0; - QString color = "rgba(20, 20, 22, " + QString::number(percent); + + QString color = ""; + if (QIcon::themeName() == "scopy-default") { + color +="rgba(20, 20, 22, "; + } else { + color +="rgba(197, 197, 197, "; + } + + color += QString::number(percent); ui->TimeCursors->setStyleSheet("QWidget {" "background-color: " + color + ");" - "color: white;" "}"); ui->VoltageCursors->setStyleSheet("QWidget {" "background-color: " + color + ");" - "color: white;" "}"); } diff --git a/src/dbgraph.cpp b/src/dbgraph.cpp index fba30b0d5f..0a9f6d06d6 100644 --- a/src/dbgraph.cpp +++ b/src/dbgraph.cpp @@ -25,6 +25,7 @@ #include "plotpickerwrapper.h" #include +#include using namespace adiscope; @@ -123,8 +124,15 @@ dBgraph::dBgraph(QWidget *parent) : QwtPlot(parent), setAxisAutoScale(QwtPlot::yLeft, false); setAxisAutoScale(QwtPlot::xTop, false); + QColor plotColor; + if (QIcon::themeName() == "scopy-default") { + plotColor = QColor("#6E6E6F"); + } else { + plotColor = QColor("#D3D3D3"); + } + EdgelessPlotGrid *grid = new EdgelessPlotGrid; - grid->setMajorPen(QColor("#353537"), 1.0, Qt::DashLine); + grid->setMajorPen(plotColor, 1.0, Qt::DashLine); grid->setXAxis(QwtPlot::xTop); grid->attach(this); @@ -183,8 +191,8 @@ dBgraph::dBgraph(QWidget *parent) : QwtPlot(parent), QwtAbstractScaleDraw::Labels, false); QPalette palette = scaleItem->palette(); - palette.setBrush(QPalette::Foreground, QColor("#6E6E6F")); - palette.setBrush(QPalette::Text, QColor("#6E6E6F")); + palette.setBrush(QPalette::Foreground, plotColor); + palette.setBrush(QPalette::Text, plotColor); scaleItem->setPalette(palette); scaleItem->setBorderDistance(0); scaleItem->attach(this); diff --git a/src/debug.cpp b/src/debug.cpp index 0d59e1da54..51c2c6c09c 100644 --- a/src/debug.cpp +++ b/src/debug.cpp @@ -147,7 +147,7 @@ void Debug::scanChannels(const QString& devName) void Debug::scanChannelAttributes(QString devName, QString& channel) { struct iio_device *device; - struct iio_channel *ch; + struct iio_channel *ch = nullptr; const char *attr; unsigned int nb_attrs; bool isOutput; @@ -166,36 +166,37 @@ void Debug::scanChannelAttributes(QString devName, QString& channel) attributeAvailable.clear(); filename.clear(); - if (channel != QString("Global")) { + const bool isGlobal = (channel == QString("Global")); + if (isGlobal) { + nb_attrs = iio_device_get_attrs_count(device); + } else { ch = iio_device_find_channel(device, channel.toLatin1().data(), isOutput); - nb_attrs = iio_channel_get_attrs_count(ch); + } - for (unsigned int k = 0; k < nb_attrs; k++) { + for (unsigned int k = 0; k < nb_attrs; k++) { + if (isGlobal) { + attr = iio_device_get_attr(device, k); + } else { attr = iio_channel_get_attr(ch, k); - - if (QString(attr).contains("available", Qt::CaseInsensitive)) { - attributeAvailable.append(QString(attr)); - } else { - filename << QString(iio_channel_attr_get_filename(ch, attr)); - attributeList << QString(attr); - } } - } else { - nb_attrs = iio_device_get_attrs_count(device); - - for (unsigned int k = 0; k < nb_attrs; k++) { - attr = iio_device_get_attr(device, k); - if (QString(attr).contains("available", Qt::CaseInsensitive)) { - attributeAvailable.append(QString(attr)); - } else { + if (QString(attr).contains("available", Qt::CaseInsensitive)) { + std::string tmp_attr = std::string(attr); + std::string to_erase = "_available"; + size_t pos = tmp_attr.find(to_erase); + if (pos != std::string::npos) { + tmp_attr.erase(pos, to_erase.length()); + } + attributeAvailable.append(QString::fromStdString(tmp_attr)); + } else { + if (isGlobal) { filename << QString(attr); - attributeList << QString(attr); + } else { + filename << QString(iio_channel_attr_get_filename(ch, attr)); } - + attributeList << QString(attr); } - } } diff --git a/src/debugger.cpp b/src/debugger.cpp index e9df9b96de..bbd109f529 100644 --- a/src/debugger.cpp +++ b/src/debugger.cpp @@ -18,6 +18,7 @@ * along with this program. If not, see . */ +#include "utils.h" #include "debugger.h" #include "ui_debugger.h" #include @@ -104,7 +105,10 @@ void Debugger::updateChannelComboBox(QString devName) channels.append(QString("None")); } - std::sort(channels.begin(), channels.end(), std::less_equal()); + std::sort(channels.begin(), channels.end(), [](QString a, QString b) { + return Util::compareNatural(a.toStdString(), b.toStdString()); + }); + ui->ChannelComboBox->addItems(channels); updateAttributeComboBox(ui->ChannelComboBox->currentText()); @@ -153,7 +157,7 @@ void Debugger::updateValueWidget(QString attribute) ui->valueStackedWidget->setEnabled(true); for (QString t : availableValues) { - if (t.contains(attribute.toLatin1(), Qt::CaseInsensitive)) { + if (!QString::compare(t, attribute, Qt::CaseInsensitive)) { available = true; /*read device, channel and get values to update widget*/ diff --git a/src/device_widget.cpp b/src/device_widget.cpp index e094acad7e..ccdcbaec4c 100644 --- a/src/device_widget.cpp +++ b/src/device_widget.cpp @@ -43,7 +43,8 @@ DeviceWidget::DeviceWidget(QString uri, QString name, if (name.compare("M2K") != 0) { m_infoPage = InfoPageBuilder::newPage(InfoPageBuilder::GENERIC, m_uri, - parent->getPrefPanel()); + parent->getPrefPanel(), + parent->getPhoneHome()); connect(m_infoPage->forgetDeviceButton(), SIGNAL(clicked(bool)), this, SLOT(forgetDevice_clicked(bool))); connect(m_infoPage->identifyDeviceButton(), SIGNAL(clicked(bool)), @@ -183,6 +184,7 @@ M2kDeviceWidget::M2kDeviceWidget(QString uri, QString name, ToolLauncher *parent m_infoPage = InfoPageBuilder::newPage(InfoPageBuilder::M2K, m_uri, parent->getPrefPanel(), + parent->getPhoneHome(), nullptr); connect(m_infoPage->forgetDeviceButton(), SIGNAL(clicked(bool)), diff --git a/src/digitalio.cpp b/src/digitalio.cpp index 351854e388..cc40bb947a 100644 --- a/src/digitalio.cpp +++ b/src/digitalio.cpp @@ -183,6 +183,8 @@ DigitalIO::DigitalIO(struct iio_context *ctx, Filter *filt, ToolMenuItem *toolMe updateUi(); readPreferences(); + ui->btnHelp->setUrl("https://wiki.analog.com/university/tools/m2k/scopy/digitalio"); + } void DigitalIO::readPreferences() diff --git a/src/dmm.cpp b/src/dmm.cpp index 38e4bf5cbc..570608ef1f 100644 --- a/src/dmm.cpp +++ b/src/dmm.cpp @@ -33,6 +33,10 @@ #include #include #include +#include +#include +#include +#include #include @@ -69,7 +73,10 @@ DMM::DMM(struct iio_context *ctx, Filter *filt, ToolMenuItem *toolMenuItem, filename(""), use_timer(false), logging_refresh_rate(0), - wheelEventGuard(nullptr) + wheelEventGuard(nullptr), + m_autoGainEnabled({true, true}), + m_historyForGain({0, 0}), + m_gainHistorySize(10) { ui->setupUi(this); @@ -79,6 +86,13 @@ DMM::DMM(struct iio_context *ctx, Filter *filt, ToolMenuItem *toolMenuItem, ui->sismograph_ch1->setColor(QColor("#ff7200")); ui->sismograph_ch2->setColor(QColor("#9013fe")); + std::vector scales {ui->scaleCh1, ui->scaleCh2}; + for (auto scale : scales) { + scale->setOrientation(Qt::Horizontal); + scale->setScalePosition(QwtThermo::LeadingScale); + scale->setOriginMode(QwtThermo::OriginCustom); + } + data_logging_timer = new PositionSpinButton({ {"s", 1}, {"min", 60}, @@ -160,6 +174,14 @@ DMM::DMM(struct iio_context *ctx, Filter *filt, ToolMenuItem *toolMenuItem, connect(ui->btnCollapsePeakHold, SIGNAL(toggled(bool)), SLOT(collapsePeakHold(bool))); + std::vector comboBoxes {ui->gainCh1ComboBox, ui->gainCh2ComboBox}; + + for (auto cb : comboBoxes) { + connect(cb, QOverload::of(&QComboBox::currentIndexChanged), + this, &DMM::gainModeChanged); + cb->setCurrentIndex(0); + } + setHistorySizeCh1(ui->historySizeCh1->currentIndex()); setHistorySizeCh2(ui->historySizeCh2->currentIndex()); @@ -188,6 +210,8 @@ DMM::DMM(struct iio_context *ctx, Filter *filt, ToolMenuItem *toolMenuItem, wheelEventGuard = new MouseWheelWidgetGuard(ui->widget_2); wheelEventGuard->installEventRecursively(ui->widget_2); readPreferences(); + + ui->btnHelp->setUrl("https://wiki.analog.com/university/tools/m2k/scopy/voltmeter"); } void DMM::readPreferences() @@ -195,6 +219,52 @@ void DMM::readPreferences() ui->instrumentNotes->setVisible(prefPanel->getInstrumentNotesActive()); } +void DMM::gainModeChanged(int idx) +{ + const QObject *who = QObject::sender(); + const int channelIdx = who == ui->gainCh1ComboBox ? 0 : (who == ui->gainCh2ComboBox ? 1 : -1); + + if (channelIdx == -1 || !who) { + return; + } + + QLabel *gainLabel = channelIdx == 0 ? ui->currentGainCh1Label : ui->currentGainCh2Label; + + const bool started = isIioManagerStarted(); + if (started) { + manager->lock(); + } + + // rebuild the flowgraph + // there might be data on in the gnuradio flowgraph that + // was captured using one gain mode and plotted and converted + // with another gain mode. This will ensure this situation doesn't + // happen + manager->disconnect(id_ch1); + manager->disconnect(id_ch2); + + configureModes(); + + m_autoGainEnabled[channelIdx] = false; + if (idx == 0) { // auto + m_autoGainEnabled[channelIdx] = true; + } else if (idx == 1) { // low + gainLabel->setText("Low Gain"); + m_m2k_analogin->setRange(static_cast(channelIdx), + libm2k::analog::PLUS_MINUS_25V); + } else if (idx == 2) { // high + gainLabel->setText("High Gain"); + m_m2k_analogin->setRange(static_cast(channelIdx), + libm2k::analog::PLUS_MINUS_2_5V); + } + + if (started) { + manager->start(id_ch1); + manager->start(id_ch2); + manager->unlock(); + } +} + void DMM::disconnectAll() { bool started = isIioManagerStarted(); @@ -227,8 +297,8 @@ void DMM::updateValuesList(std::vector values) if(!use_timer) boost::unique_lock lock(data_mutex); - double volts_ch1 = m_m2k_analogin->convertRawToVolts(0, (int)values[0]); - double volts_ch2 = m_m2k_analogin->convertRawToVolts(1, (int)values[1]); + const double volts_ch1 = m_m2k_analogin->convertRawToVolts(0, static_cast(values[0])); + const double volts_ch2 = m_m2k_analogin->convertRawToVolts(1, static_cast(values[1])); ui->lcdCh1->display(volts_ch1); ui->lcdCh2->display(volts_ch2); @@ -242,6 +312,11 @@ void DMM::updateValuesList(std::vector values) checkPeakValues(0, volts_ch1); checkPeakValues(1, volts_ch2); + checkAndUpdateGainMode({m_m2k_analogin->convertRawToVolts(0, static_cast(values[2])), + m_m2k_analogin->convertRawToVolts(0, static_cast(values[3])), + m_m2k_analogin->convertRawToVolts(0, static_cast(values[4])), + m_m2k_analogin->convertRawToVolts(0, static_cast(values[5]))}); + if(!use_timer) data_cond.notify_all(); } @@ -267,6 +342,102 @@ bool DMM::isIioManagerStarted() const return manager->started() && ui->run_button->isChecked(); } +void DMM::checkAndUpdateGainMode(const std::vector &volts) +{ + if (volts.size() < m_adc_nb_channels * 2) { + return; + } + + std::vector gainLabels {ui->currentGainCh1Label, ui->currentGainCh2Label}; + std::vector errorLabels {ui->ch1ErrorLabel, ui->ch2ErrorLabel}; + + double hi = 0.0; + double lo = 0.0; + std::tie(lo, hi) = m_m2k_analogin->getRangeLimits(libm2k::analog::PLUS_MINUS_2_5V); + + // hist interval 10% from range of High gain ~ 250 mV + const double percent = 0.1; // 10% + const double half_hist_interval = (hi * percent) / 2.0; + + const double hi_hi = hi + half_hist_interval; + const double hi_lo = hi - half_hist_interval; + const double lo_hi = lo + half_hist_interval; + const double lo_lo = lo - half_hist_interval; + + for (int i = 0; i < m_adc_nb_channels; ++i) { + libm2k::analog::M2K_RANGE gain = libm2k::analog::PLUS_MINUS_25V; + + bool changed = false; + if (volts[m_adc_nb_channels * i] > 0.0) { + changed = true; + if (volts[m_adc_nb_channels * i] >= hi_hi) { + gain = libm2k::analog::PLUS_MINUS_25V; + } else if (volts[m_adc_nb_channels * i] <= hi_lo) { + gain = libm2k::analog::PLUS_MINUS_2_5V; + } else { + changed = false; + } + } + + if (volts[m_adc_nb_channels * i + 1] <= 0.0) { + changed = true; + if (volts[m_adc_nb_channels * i + 1] <= lo_lo ) { + gain = libm2k::analog::PLUS_MINUS_25V; + } else if (volts[m_adc_nb_channels * i + 1] >= lo_hi) { + gain = libm2k::analog::PLUS_MINUS_2_5V; + } else { + changed = false; + } + } + + if (!changed) { + continue; + } + + if (gain == libm2k::analog::PLUS_MINUS_2_5V && m_m2k_analogin->getRange(static_cast(i)) != gain + && m_historyForGain[i] < m_gainHistorySize) { + m_historyForGain[i]++; + continue; // we don't wanna change the gain now; + } + + if (gain == libm2k::analog::PLUS_MINUS_25V) { + m_historyForGain[i] = 0; + } + + errorLabels[i]->setText(""); + if (m_m2k_analogin->getRange(static_cast(i)) != gain) { + if (m_autoGainEnabled[i]) { + const bool started = isIioManagerStarted(); + if (started) { + manager->lock(); + } + + // rebuild the flowgraph + // there might be data on in the gnuradio flowgraph that + // was captured using one gain mode and plotted and converted + // with another gain mode. This will ensure this situation doesn't + // happen + manager->disconnect(id_ch1); + manager->disconnect(id_ch2); + + configureModes(); + + m_m2k_analogin->setRange(static_cast(i), gain); + + gainLabels[i]->setText(gain == libm2k::analog::PLUS_MINUS_25V ? "Low Gain" : "High Gain"); + + if (started) { + manager->start(id_ch1); + manager->start(id_ch2); + manager->unlock(); + } + } else { + errorLabels[i]->setText("Out of range!"); + } + } + } +} + void DMM::collapseDataLog(bool checked) { if(checked) @@ -370,17 +541,36 @@ void DMM::configureModes() auto s2f1 = gr::blocks::short_to_float::make(); auto s2f2 = gr::blocks::short_to_float::make(); - bool is_ac_ch1 = ui->btn_ch1_ac->isChecked(); - bool is_ac_ch2 = ui->btn_ch2_ac->isChecked(); + auto max1 = gr::blocks::max_ff::make(sample_rate / 10); + auto max2 = gr::blocks::max_ff::make(sample_rate / 10); + auto min1 = gr::blocks::min_ff::make(sample_rate / 10); + auto min2 = gr::blocks::min_ff::make(sample_rate / 10); + auto stv1 = gr::blocks::stream_to_vector::make(sizeof(float), sample_rate / 10); + auto stv2 = gr::blocks::stream_to_vector::make(sizeof(float), sample_rate / 10); + + const bool is_ac_ch1 = ui->btn_ch1_ac->isChecked(); + const bool is_ac_ch2 = ui->btn_ch2_ac->isChecked(); id_ch1 = manager->connect(s2f1, 0, 0, false, sample_rate / 10); id_ch2 = manager->connect(s2f2, 1, 0, false, sample_rate / 10); + manager->connect(s2f1, 0, stv1, 0); + manager->connect(s2f2, 0, stv2, 0); + manager->connect(stv1, 0, max1, 0); + manager->connect(stv2, 0, max2, 0); + manager->connect(stv1, 0, min1, 0); + manager->connect(stv2, 0, min2, 0); + auto block1 = configureGraph(s2f1, is_ac_ch1); auto block2 = configureGraph(s2f2, is_ac_ch2); manager->connect(block1, 0, signal, 0); manager->connect(block2, 0, signal, 1); + + manager->connect(max1, 0, signal, 2); + manager->connect(min1, 0, signal, 3); + manager->connect(max2, 0, signal, 4); + manager->connect(min2, 0, signal, 5); } void DMM::chooseFile() @@ -657,7 +847,6 @@ void DMM::writeAllSettingsToHardware() for (unsigned int i = 0; i < m_adc_nb_channels; i++) { auto chn = static_cast(i); m_m2k_analogin->setVerticalOffset(chn, 0.0); - m_m2k_analogin->setRange(chn, libm2k::analog::PLUS_MINUS_25V); if (trigger) { trigger->setAnalogMode(i, libm2k::ALWAYS); } diff --git a/src/dmm.hpp b/src/dmm.hpp index 9b2a0e6cf5..a2bc5748a4 100644 --- a/src/dmm.hpp +++ b/src/dmm.hpp @@ -86,6 +86,10 @@ namespace adiscope { std::vector m_min, m_max; + std::vector m_autoGainEnabled; + std::vector m_historyForGain; + int m_gainHistorySize; + void disconnectAll(); gr::basic_block_sptr configureGraph(gr::basic_block_sptr s2f, bool is_ac); @@ -94,6 +98,7 @@ namespace adiscope { void writeAllSettingsToHardware(); void checkPeakValues(int, double); bool isIioManagerStarted() const; + void checkAndUpdateGainMode(const std::vector &volts); public Q_SLOTS: void toggleTimer(bool start); @@ -130,6 +135,8 @@ namespace adiscope { void readPreferences(); + void gainModeChanged(int idx); + Q_SIGNALS: void showTool(); }; diff --git a/src/dmm_api.cpp b/src/dmm_api.cpp index afefe27070..cfc309f1e2 100644 --- a/src/dmm_api.cpp +++ b/src/dmm_api.cpp @@ -189,4 +189,20 @@ void DMM_API::setNotes(QString str) dmm->ui->instrumentNotes->setNotes(str); } +QVector DMM_API::getGainModes() const +{ + return {dmm->ui->gainCh1ComboBox->currentIndex(), + dmm->ui->gainCh2ComboBox->currentIndex()}; +} + +void DMM_API::setGainModes(const QVector &gainModes) +{ + if (gainModes.size() < dmm->m_adc_nb_channels) { + return; + } + + dmm->ui->gainCh1ComboBox->setCurrentIndex(gainModes[0]); + dmm->ui->gainCh2ComboBox->setCurrentIndex(gainModes[1]); +} + } diff --git a/src/dmm_api.hpp b/src/dmm_api.hpp index c292c56400..cfbff25d45 100644 --- a/src/dmm_api.hpp +++ b/src/dmm_api.hpp @@ -69,6 +69,8 @@ class DMM_API : public ApiObject WRITE setPeakHoldEn) Q_PROPERTY(QString notes READ getNotes WRITE setNotes) + Q_PROPERTY(QVector gainModes READ getGainModes WRITE setGainModes) + public: bool get_mode_ac_ch1() const; bool get_mode_ac_ch2() const; @@ -113,6 +115,9 @@ class DMM_API : public ApiObject QString getNotes(); void setNotes(QString); + QVector getGainModes() const; + void setGainModes(const QVector &gainModes); + Q_INVOKABLE void show(); explicit DMM_API(DMM *dmm) : ApiObject(), dmm(dmm) {} diff --git a/src/dropdown_switch_list.cpp b/src/dropdown_switch_list.cpp index b19b1aec2a..05f8affad8 100644 --- a/src/dropdown_switch_list.cpp +++ b/src/dropdown_switch_list.cpp @@ -89,11 +89,6 @@ DropdownSwitchList::DropdownSwitchList(int switchColCount, QWidget *parent): m_treeView->setUniformRowHeights(true); m_treeView->header()->setSectionResizeMode(0, QHeaderView::Fixed); m_treeView->header()->setDefaultAlignment(Qt::AlignCenter); - - QFile file(":stylesheets/stylesheets/dropdown_switch_list.qss"); - file.open(QFile::ReadOnly); - QString styleSheet = QString::fromLatin1(file.readAll()); - setStyleSheet(styleSheet); } QString DropdownSwitchList::title() const diff --git a/src/homepage_controls.cpp b/src/homepage_controls.cpp index dbf150056c..c4543629a7 100644 --- a/src/homepage_controls.cpp +++ b/src/homepage_controls.cpp @@ -52,7 +52,7 @@ HomepageControls::~HomepageControls() void HomepageControls::updatePosition() { - move(parentWidget()->width() - 150, geometry().topLeft().y()); + move(parentWidget()->width() - 120, 5); } bool HomepageControls::eventFilter(QObject *watched, QEvent *event) diff --git a/src/info_page.cpp b/src/info_page.cpp index b3105ad277..2bd36d901a 100644 --- a/src/info_page.cpp +++ b/src/info_page.cpp @@ -24,15 +24,17 @@ #include #include #include "libm2k/analog/dmm.hpp" - +#include "dynamicWidget.hpp" #include #include #include +#include +#include using namespace std; using namespace adiscope; -InfoPage::InfoPage(QString uri, Preferences *pref, +InfoPage::InfoPage(QString uri, Preferences *pref, PhoneHome* phoneHome, struct iio_context *ctx, QWidget *parent) : QWidget(parent), @@ -44,7 +46,8 @@ InfoPage::InfoPage(QString uri, Preferences *pref, m_led_timer(new QTimer(this)), m_blink_timer(new QTimer(this)), m_connected(false), - m_search_interrupted(false) + m_search_interrupted(false), + m_phoneHome(phoneHome) { ui->setupUi(this); ui->paramLabel->setText(uri); @@ -170,8 +173,9 @@ QPair InfoPage::translateInfoParams(QString key) } else if (key.contains("ip")) { key = "IP Address"; } else if (key.startsWith("cal,gain") || - key.startsWith("cal,offset")) { - key = ""; + key.startsWith("cal,offset") || + key.startsWith("cal,temp_lut")) { + advanced = true; } return QPair(advanced, key); } @@ -202,7 +206,14 @@ void InfoPage::setStatusLabel(QLabel *lbl, QString str, QString color) { lbl->setVisible(true); lbl->setText(str); - lbl->setStyleSheet("color: " + color); + + if(color == "white"){ + setDynamicProperty(lbl, "invalid", false); + setDynamicProperty(lbl, "valid", true); + } + else { setDynamicProperty(lbl, "valid", false); + setDynamicProperty(lbl, "invalid", true); + } } else { @@ -240,11 +251,13 @@ void InfoPage::refreshInfoWidget() } int pos = 0; + ui->paramLayout->setRowMinimumHeight(pos, 20); + for (auto key : m_info_params.keys()) { QLabel *valueLbl = new QLabel(this); QLabel *keyLbl = new QLabel(this); valueLbl->setText(m_info_params.value(key)); - valueLbl->setStyleSheet("color: white"); + valueLbl->setWordWrap(true); keyLbl->setText(key); keyLbl->setMinimumWidth(240); keyLbl->setMaximumWidth(240); @@ -252,23 +265,31 @@ void InfoPage::refreshInfoWidget() ui->paramLayout->addWidget(valueLbl, pos, 1, 1, 1); pos++; } + pos++; + ui->paramLayout->addWidget(new QLabel(""), pos, 0, 1, 1); if (m_advanced) { - ui->paramLayout->setRowMinimumHeight(pos, 20); pos++; ui->paramLayout->addWidget(new QLabel("Advanced"), pos, 0, 1, 1); pos++; for (auto key : m_info_params_advanced.keys()) { QLabel *valueLbl = new QLabel(this); QLabel *keyLbl = new QLabel(this); + + valueLbl->setWordWrap(true); valueLbl->setText(m_info_params_advanced.value(key)); - valueLbl->setStyleSheet("color: white"); keyLbl->setText(key); + ui->paramLayout->addWidget(keyLbl, pos, 0, 1, 1); ui->paramLayout->addWidget(valueLbl, pos, 1, 1, 1); pos++; } + pos++; + ui->paramLayout->addWidget(new QLabel(""), pos, 0, 1, 1); } + // creates some spacing + + } QString InfoPage::uri() const @@ -386,12 +407,23 @@ bool InfoPage::supportsCalibration() return false; } +QString InfoPage::getFirmwareVersion() const +{ + return m_info_params.value("Firmware version", ""); +} + +QString InfoPage::getSerialNumber() const +{ + return m_info_params.value("Serial", ""); +} + M2kInfoPage::M2kInfoPage(QString uri, Preferences* prefPanel, + PhoneHome* phoneHome, struct iio_context *ctx, QWidget *parent) : - InfoPage(uri, prefPanel, ctx, parent), - m_fabric_channel(nullptr) + InfoPage(uri, prefPanel, phoneHome, ctx, parent), + m_fabric_channel(nullptr), m_m2k(nullptr), m_refreshTemperatureTimer(nullptr) { ui->btnCalibrate->setEnabled(false); ui->extraWidget->setFrameShape(QFrame::NoFrame); @@ -401,6 +433,14 @@ M2kInfoPage::M2kInfoPage(QString uri, ui->extraWidget->setMinimumHeight(700); setConnectionStatusLabel(tr("Not connected")); setCalibrationInfoLabel(tr("Always disconnect analog inputs/outputs before calibration")); + if(ctx) { + m_m2k = libm2k::context::m2kOpen(ctx, uri.toLocal8Bit().constData()); + } + + m_refreshTemperatureTimer = new QTimer(this); + connect(m_refreshTemperatureTimer, SIGNAL(timeout()), this, SLOT(refreshTemperature())); + connect(ui->btnRegister,SIGNAL(clicked()),this,SLOT(m2kRegistration())); + m_refreshTemperatureTimer->start(m_temperatureUpdateInterval); } @@ -409,10 +449,71 @@ M2kInfoPage::~M2kInfoPage() } + +void M2kInfoPage::updateFwVersionWidget() { + if(m_phoneHome->getDone()) + { + const int checked = this->checkLatestFwVersion(m_info_params.value("Firmware version")); + if (checked == 1) { + ui->lblFirmware->setText(tr("Firmware is up to date!")); + } else if (checked == 0) { + const QString message = tr("New firmware version is available. ") + + "Download " + m_phoneHome->getM2kVersion() + " " + "lblFirmware->setText(message + m_phoneHome->getM2kLink() + "\">here"); + ui->lblFirmware->setTextFormat(Qt::RichText); + ui->lblFirmware->setTextInteractionFlags(Qt::TextBrowserInteraction); + ui->lblFirmware->setOpenExternalLinks(true); + } + } +} + +void M2kInfoPage::m2kRegistration() +{ + QString versionString = QString(m_info_params["Model"].split("Rev")[1][1]); + QString url = "https://my.analog.com/en/app/registration/hardware/ADALM2000?sn="+QString(getSerialNumber())+"&v=Rev."+versionString; + QDesktopServices::openUrl(QUrl(url)); +} + void M2kInfoPage::getDeviceInfo() { InfoPage::getDeviceInfo(); - //refreshTemperature(); + updateFwVersionWidget(); + refreshTemperature(); +} + +void M2kInfoPage::refreshTemperature() +{ + + libm2k::context::M2k *temp_m2k = nullptr; + if(!m_ctx) { + temp_m2k = libm2k::context::m2kOpen(m_uri.toLocal8Bit().constData()); + } else { + temp_m2k = m_m2k; + } + + if(temp_m2k) { + auto dmm = temp_m2k->getDMM("ad9963"); + auto ch = dmm->readChannel("temp0"); + auto val = ch.value; + m_info_params["Temperature"] = QString::number(val); + } + + if(!m_ctx) { + libm2k::context::contextClose(temp_m2k, false); + } + + refreshInfoWidget(); +} + +void M2kInfoPage::setCtx(iio_context *ctx) +{ + InfoPage::setCtx(ctx); + if(ctx) { + m_m2k = libm2k::context::m2kOpen(ctx, ""); + } else { + m_m2k = nullptr; + } } void M2kInfoPage::startIdentification(bool start) @@ -483,3 +584,15 @@ void M2kInfoPage::blinkTimeout() "done_led_overwrite_powerdown", !oldVal); } + +int M2kInfoPage::checkLatestFwVersion(const QString ¤tVersion) const { + if (m_phoneHome->getM2kVersion().isEmpty()) { + return -1; + } + + if (m_phoneHome->getM2kVersion() == currentVersion) { + return 1; + } + + return 0; +} diff --git a/src/info_page.hpp b/src/info_page.hpp index a649542694..b79b44d05b 100644 --- a/src/info_page.hpp +++ b/src/info_page.hpp @@ -27,9 +27,15 @@ #include #include #include +#include #include "iio.h" +#include "phonehome.h" +#include "libm2k/contextbuilder.hpp" +#include "libm2k/context.hpp" + + namespace Ui { class InfoPage; } @@ -44,13 +50,14 @@ class InfoPage : public QWidget public: explicit InfoPage(QString uri, Preferences* prefPanel, + PhoneHome* phoneHome, struct iio_context *ctx = nullptr, QWidget *parent = 0); virtual ~InfoPage(); struct iio_context *ctx() const; - void setCtx(iio_context *ctx); + virtual void setCtx(iio_context *ctx); QString uri() const; void setUri(QString uri); @@ -67,6 +74,9 @@ class InfoPage : public QWidget bool supportsIdentification(); bool supportsCalibration(); + QString getFirmwareVersion() const; + QString getSerialNumber() const; + public Q_SLOTS: void readPreferences(); void identifyDevice(bool clicked = true); @@ -105,6 +115,7 @@ private Q_SLOTS: QTimer *m_blink_timer; bool m_connected; bool m_search_interrupted; + PhoneHome* m_phoneHome; }; @@ -114,20 +125,31 @@ class M2kInfoPage : public InfoPage public: explicit M2kInfoPage(QString uri, Preferences* prefPanel, + PhoneHome* phoneHome, struct iio_context *ctx = nullptr, - QWidget *parent = 0); + QWidget *parent = 0); ~M2kInfoPage(); - void getDeviceInfo(); + + void getDeviceInfo() override; + void updateFwVersionWidget(); + void setCtx(iio_context *ctx) override; + int checkLatestFwVersion(const QString ¤tVersion) const; protected: virtual void startIdentification(bool); private Q_SLOTS: void blinkTimeout(); +public Q_SLOTS: + void refreshTemperature(); + void m2kRegistration(); private: struct iio_channel *m_fabric_channel; QFuture calibration_thread; + libm2k::context::M2k *m_m2k; + QTimer *m_refreshTemperatureTimer; + const int m_temperatureUpdateInterval = 5000; }; @@ -142,13 +164,14 @@ class InfoPageBuilder static InfoPage* newPage(InfoPageType page_type, QString uri, Preferences* prefPanel, + PhoneHome* phoneHome, struct iio_context *ctx = nullptr, QWidget *parent = 0) { switch (page_type) { - case GENERIC: return new InfoPage(uri, prefPanel, + case GENERIC: return new InfoPage(uri, prefPanel, phoneHome, ctx, parent); - case M2K: return new M2kInfoPage(uri, prefPanel, + case M2K: return new M2kInfoPage(uri, prefPanel, phoneHome, ctx, parent); } return nullptr; diff --git a/src/linked_button.cpp b/src/linked_button.cpp new file mode 100644 index 0000000000..344884d7ef --- /dev/null +++ b/src/linked_button.cpp @@ -0,0 +1,29 @@ +#include "linked_button.hpp" +#include "dynamicWidget.hpp" + +#include +#include +#include + +using namespace adiscope; + +LinkedButton::LinkedButton(QWidget* parent) + : QPushButton(parent) +{ + setDynamicProperty(this,"info_button", true); + + this->setIcon(QIcon::fromTheme("ico info")); + this->setIconSize(QSize(32, 32)); + + this->setToolTip("See more info"); + + connect(this, SIGNAL(clicked()), this, SLOT(openUrl())); +} + +void LinkedButton::openUrl() { + QDesktopServices::openUrl(QUrl(this->url)); +} + +void LinkedButton::setUrl(QString url) { + this->url = url; +} diff --git a/src/linked_button.hpp b/src/linked_button.hpp new file mode 100644 index 0000000000..3366a9f968 --- /dev/null +++ b/src/linked_button.hpp @@ -0,0 +1,25 @@ +#ifndef LINKEDBUTTON_HPP +#define LINKEDBUTTON_HPP + +#include + +namespace adiscope { + +class LinkedButton : public QPushButton +{ + Q_OBJECT + +public: + explicit LinkedButton(QWidget* parent = Q_NULLPTR); + + void setUrl(QString url); + +private: + QString url; + +public Q_SLOTS: + void openUrl(); +}; +} + +#endif // LINKEDBUTTON_HPP diff --git a/src/logicanalyzer/annotationcurve.cpp b/src/logicanalyzer/annotationcurve.cpp index 59cea4ad7b..c490f9e9a9 100644 --- a/src/logicanalyzer/annotationcurve.cpp +++ b/src/logicanalyzer/annotationcurve.cpp @@ -441,8 +441,15 @@ void AnnotationCurve::drawLines(QPainter *painter, const QwtScaleMap &xMap, cons painter->save(); - painter->setPen(QPen(QBrush(Qt::white), 2)); - painter->setBrush(QBrush(Qt::black)); + QColor painterColor; + + if (QIcon::themeName() == "scopy-default") { + painterColor = Qt::white; + } else { + painterColor = Qt::black; + } + + painter->setPen(QPen(QBrush(painterColor), 2)); int currentTitleIndex = 0; const int pixOffsetFromCanvasMargin = 5; for (const QString &title : titles) { diff --git a/src/logicanalyzer/logic_analyzer.cpp b/src/logicanalyzer/logic_analyzer.cpp index ea9137e84b..0607bc298c 100644 --- a/src/logicanalyzer/logic_analyzer.cpp +++ b/src/logicanalyzer/logic_analyzer.cpp @@ -53,12 +53,15 @@ #include "osc_export_settings.h" #include "filemanager.h" #include "config.h" +#include "state_updater.h" using namespace adiscope; using namespace adiscope::logic; constexpr int MAX_BUFFER_SIZE_ONESHOT = 4 * 1024 * 1024; // 4M -constexpr int MAX_BUFFER_SIZE_STREAM = 64 * 4 * 1024 * 1024; // 64 x 4M +constexpr int MAX_BUFFER_SIZE_STREAM = 1024 * 1024 * 1024; // 1Gb +constexpr int MAX_SR_STREAM = 5e6; // 10M +constexpr int MAX_KERNEL_BUFFERS = 64; constexpr int DIGITAL_NR_CHANNELS = 16; /* helper method to sort srd_decoder objects based on ids(name) */ @@ -93,7 +96,7 @@ LogicAnalyzer::LogicAnalyzer(struct iio_context *ctx, adiscope::Filter *filt, {"k samples", 1E+3}, {"M samples", 1E+6}, {"G samples", 1E+9}, - }, tr("Nr of samples"), 1, + }, tr("Nr of samples"), 1000, MAX_BUFFER_SIZE_ONESHOT, true, false, this, {1, 2, 5})), m_timePositionButton(new PositionSpinButton({ @@ -109,6 +112,7 @@ LogicAnalyzer::LogicAnalyzer(struct iio_context *ctx, adiscope::Filter *filt, m_resetHorizAxisOffset(true), m_captureThread(nullptr), m_stopRequested(false), + m_acquisitionStarted(false), m_plotScrollBar(new QScrollBar(Qt::Vertical, this)), m_started(false), m_selectedChannel(-1), @@ -123,7 +127,9 @@ LogicAnalyzer::LogicAnalyzer(struct iio_context *ctx, adiscope::Filter *filt, m_saveRestoreSettings(nullptr), m_oscPlot(nullptr), m_oscChannelSelected(-1), - m_oscDecoderMenu(nullptr) + m_oscDecoderMenu(nullptr), + m_currentKernelBuffers(4), + m_triggerUpdater(new StateUpdater(250, this)) { // setup ui setupUi(); @@ -133,8 +139,6 @@ LogicAnalyzer::LogicAnalyzer(struct iio_context *ctx, adiscope::Filter *filt, m_plot.setLeftVertAxesCount(1); - // TODO: get number of channels from libm2k; - for (uint8_t i = 0; i < m_nbChannels; ++i) { QCheckBox *channelBox = new QCheckBox("DIO " + QString::number(i)); @@ -151,9 +155,11 @@ LogicAnalyzer::LogicAnalyzer(struct iio_context *ctx, adiscope::Filter *filt, channelBox->setChecked(true); + triggerBox->setStyleSheet("QComboBox QAbstractItemView { min-width: 130px; }"); + + triggerBox->setSizeAdjustPolicy(QComboBox::AdjustToContentsOnFirstShow); for (int i = 1; i < ui->triggerComboBox->count(); ++i) { - triggerBox->addItem(ui->triggerComboBox->itemIcon(i), - ui->triggerComboBox->itemText(i)); + triggerBox->addItem(ui->triggerComboBox->itemText(i)); } int condition = static_cast( @@ -218,14 +224,18 @@ LogicAnalyzer::LogicAnalyzer(struct iio_context *ctx, adiscope::Filter *filt, m_timePositionButton->setStep(1); - // default: stream - ui->btnStreamOneShot->setChecked(false); + // default: oneshot + ui->btnStreamOneShot->setChecked(true); // default m_sampleRateButton->setValue(m_sampleRate); m_sampleRateButton->setIntegerDivider(m_sampleRateButton->maxValue()); m_bufferSizeButton->setValue(m_bufferSize); + m_triggerUpdater->setOffState(CapturePlot::Stop); + connect(m_triggerUpdater, &StateUpdater::outputChanged, + &m_plot, &CapturePlot::setTriggerState); + readPreferences(); ui->btnGeneralSettings->setChecked(true); @@ -238,6 +248,8 @@ LogicAnalyzer::LogicAnalyzer(struct iio_context *ctx, adiscope::Filter *filt, // Scroll wheel event filter m_wheelEventGuard = new MouseWheelWidgetGuard(ui->mainWidget); m_wheelEventGuard->installEventRecursively(ui->mainWidget); + + ui->btnHelp->setUrl("https://wiki.analog.com/university/tools/m2k/scopy/logicanalyzer"); } LogicAnalyzer::~LogicAnalyzer() @@ -250,11 +262,6 @@ LogicAnalyzer::~LogicAnalyzer() disconnect(prefPanel, &Preferences::notify, this, &LogicAnalyzer::readPreferences); - for (auto &curve : m_plotCurves) { - m_plot.removeDigitalPlotCurve(curve); - delete curve; - } - if (m_captureThread) { m_stopRequested = true; m_m2kDigital->cancelAcquisition(); @@ -263,6 +270,11 @@ LogicAnalyzer::~LogicAnalyzer() m_captureThread = nullptr; } + for (auto &curve : m_plotCurves) { + m_plot.removeDigitalPlotCurve(curve); + delete curve; + } + if (m_buffer) { delete[] m_buffer; m_buffer = nullptr; @@ -304,6 +316,13 @@ std::vector LogicAnalyzer::enableMixedSignalView(CapturePlot *osc, in // save the state of the tool m_saveRestoreSettings = std::unique_ptr(new SaveRestoreToolSettings(this)); + if (m_started) { + auto btn = dynamic_cast(run_button); + if (btn) { + btn->setChecked(false); + } + } + // disable the menu item for the logic analyzer when mixed signal view is enabled toolMenuItem->setDisabled(true); @@ -314,6 +333,12 @@ std::vector LogicAnalyzer::enableMixedSignalView(CapturePlot *osc, in QTabWidget *tabWidget = new QTabWidget(); tabWidget->setMovable(true); + QScrollArea *generalScrollArea = new QScrollArea(); + generalScrollArea->setWidgetResizable(true); + generalScrollArea->setMinimumSize(220, 300); + generalScrollArea->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + generalScrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + QWidget *channelEnumerator = new QWidget(); QVBoxLayout *layout = new QVBoxLayout(); QGridLayout *chEnumeratorLayout = new QGridLayout(); @@ -342,6 +367,7 @@ std::vector LogicAnalyzer::enableMixedSignalView(CapturePlot *osc, in }); QCheckBox *channelBox = new QCheckBox("DIO " + QString::number(i)); + curve->setName("DIO " + QString::number(i)); QHBoxLayout *hBoxLayout = new QHBoxLayout(this); @@ -371,9 +397,10 @@ std::vector LogicAnalyzer::enableMixedSignalView(CapturePlot *osc, in }); connect(channelBox, &QCheckBox::toggled, [=](bool toggled){ + const int oscAnalogChannels = m_oscPlot->getAnalogChannels(); m_oscPlot->enableDigitalPlotCurve(i, toggled); - m_oscPlot->setOffsetWidgetVisible(i + m_oscAnalogChannels, toggled); - m_oscPlot->positionInGroupChanged(i + m_oscAnalogChannels, 0, 0); + m_oscPlot->setOffsetWidgetVisible(i + oscAnalogChannels, toggled); + m_oscPlot->positionInGroupChanged(i + oscAnalogChannels, 0, 0); m_oscPlot->replot(); }); channelBox->setChecked(false); @@ -588,9 +615,10 @@ std::vector LogicAnalyzer::enableMixedSignalView(CapturePlot *osc, in decoderComboBox->setCurrentIndex(0); connect(decoderBox, &QCheckBox::toggled, [=](bool toggled){ - m_oscPlot->enableDigitalPlotCurve(m_oscAnalogChannels + m_nbChannels + itemsInLayout, toggled); - m_oscPlot->setOffsetWidgetVisible(m_oscAnalogChannels + m_nbChannels + itemsInLayout, toggled); - m_oscPlot->positionInGroupChanged(m_oscAnalogChannels + m_nbChannels + itemsInLayout, 0, 0); + const int analogChannels = m_oscPlot->getAnalogChannels(); + m_oscPlot->enableDigitalPlotCurve(analogChannels + m_nbChannels + itemsInLayout, toggled); + m_oscPlot->setOffsetWidgetVisible(analogChannels + m_nbChannels + itemsInLayout, toggled); + m_oscPlot->positionInGroupChanged(analogChannels + m_nbChannels + itemsInLayout, 0, 0); m_oscPlot->replot(); }); @@ -633,7 +661,24 @@ std::vector LogicAnalyzer::enableMixedSignalView(CapturePlot *osc, in nameLineEdit->setAlignment(Qt::AlignCenter); nameLineEdit->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); + QLineEdit *traceHeightLineEdit = new QLineEdit(); + traceHeightLineEdit->setText(""); + traceHeightLineEdit->setVisible(true); + traceHeightLineEdit->setDisabled(true); + traceHeightLineEdit->setAlignment(Qt::AlignCenter); + traceHeightLineEdit->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); + + QComboBox *currentChannelTriggerComboBox = new QComboBox(); + currentChannelTriggerComboBox->addItem("-"); + for (int i = 1; i < ui->triggerComboBox->count(); ++i) { + currentChannelTriggerComboBox->addItem(ui->triggerComboBox->itemIcon(i), + ui->triggerComboBox->itemText(i)); + } + currentChannelMenuLayout->addWidget(nameLineEdit); + currentChannelMenuLayout->addWidget(traceHeightLineEdit); + currentChannelMenuLayout->addWidget(currentChannelTriggerComboBox); + currentChannelMenuLayout->addLayout(decoderSettingsLayout); currentChannelMenu->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); @@ -645,17 +690,97 @@ std::vector LogicAnalyzer::enableMixedSignalView(CapturePlot *osc, in stackDecoderLayout->insertSpacerItem(0, new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Expanding)); stackDecoderLayout->insertWidget(1, stackDecoderComboBox); - currentChannelMenuLayout->insertItem(-1, new QSpacerItem(0, 0, QSizePolicy::Minimum, QSizePolicy::Expanding)); + /* Setup external trigger menu */ + QWidget *externalTrigger = new QWidget(currentChannelMenu); + QVBoxLayout *externalTriggerLayout = new QVBoxLayout(externalTrigger); + externalTriggerLayout->setContentsMargins(0, 0, 0, 0); + externalTrigger->setLayout(externalTriggerLayout); + + QHBoxLayout *externalSubTitle = new QHBoxLayout(); + auto label = new QLabel("EXTERNAL TRIGGER "); + + externalSubTitle->addWidget(label); + externalSubTitle->setContentsMargins(0, 0, 0, 0); + externalSubTitle->setSpacing(0); + + QFrame *line = new QFrame(externalTrigger); + line->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); + line->setMaximumSize(QSize(16777215, 1)); + line->setStyleSheet(QString::fromUtf8("border: 1px solid rgba(255, 255, 255, 70);")); + line->setFrameShape(QFrame::HLine); + line->setFrameShadow(QFrame::Sunken); + + externalSubTitle->addWidget(line); + externalTriggerLayout->addLayout(externalSubTitle); + + QGridLayout *externalGridLayout = new QGridLayout(); + auto externalOnOff = new adiscope::CustomSwitch(); + externalGridLayout->addWidget(externalOnOff, 0, 0); + auto labelCondition = new QLabel("Condition"); + externalGridLayout->addWidget(labelCondition, 1, 0); + + QFile file(":stylesheets/stylesheets/customSwitch.qss"); + file.open(QFile::ReadOnly); + QString styleSheet = QString::fromLatin1(file.readAll()); + externalOnOff->setStyleSheet(styleSheet); + + auto comboBoxCondition = new QComboBox(); + externalGridLayout->addWidget(comboBoxCondition, 1, 1); + + comboBoxCondition->setDisabled(true); + + connect(externalOnOff, &CustomSwitch::toggled, [=](bool on){ + if (on) { + comboBoxCondition->setEnabled(true); + m_m2kDigital->getTrigger()->setDigitalSource(SRC_TRIGGER_IN); + const int condition = comboBoxCondition->currentIndex(); + m_m2kDigital->getTrigger()->setDigitalExternalCondition( + static_cast((condition + 5) % 6)); + } else { + comboBoxCondition->setCurrentIndex(0); + comboBoxCondition->setDisabled(true); + m_m2kDigital->getTrigger()->setDigitalSource(SRC_NONE); + } + }); + comboBoxCondition->addItem("-"); + for (int i = 1; i < ui->triggerComboBox->count(); ++i) { + comboBoxCondition->addItem(ui->triggerComboBox->itemIcon(i), + ui->triggerComboBox->itemText(i)); + } + + connect(comboBoxCondition, QOverload::of(&QComboBox::currentIndexChanged), [=](int index){ + m_m2kDigital->getTrigger()->setDigitalExternalCondition( + static_cast((index + 5) % 6)); + }); + + externalTriggerLayout->addLayout(externalGridLayout); + + layout->addWidget(externalTrigger); + + currentChannelMenuLayout->insertItem(-1, new QSpacerItem(0, 0, QSizePolicy::Minimum, QSizePolicy::Expanding)); tabWidget->addTab(channelEnumerator, "General"); const int channelMenuTabId = tabWidget->addTab(currentChannelMenuScrollArea, "Channel"); - connect(m_oscPlot, &CapturePlot::channelSelected, [=](int chIdx, bool selected){ + m_oscChannelSelectedConnection = connect(m_oscPlot, &CapturePlot::channelSelected, [=](int chIdx, bool selected){ chIdx -= m_oscAnalogChannels; if (m_oscChannelSelected != chIdx && selected) { m_oscChannelSelected = chIdx; nameLineEdit->setEnabled(true); nameLineEdit->setText(m_oscPlotCurves[chIdx]->getName()); + traceHeightLineEdit->setEnabled(true); + traceHeightLineEdit->setText(QString::number(m_oscPlotCurves[chIdx]->getTraceHeight())); + + if (m_oscChannelSelected < m_nbChannels) { + currentChannelTriggerComboBox->setEnabled(true); + QComboBox *triggerBox = qobject_cast(chEnumeratorLayout->itemAtPosition(m_oscChannelSelected % 8, + m_oscChannelSelected / 8)->layout()->itemAt(1)->widget()); + currentChannelTriggerComboBox->setCurrentIndex(triggerBox->currentIndex()); + } else { + currentChannelTriggerComboBox->setDisabled(true); + QSignalBlocker sb(currentChannelTriggerComboBox); + currentChannelTriggerComboBox->setCurrentIndex(0); + } tabWidget->setCurrentIndex(channelMenuTabId); @@ -680,6 +805,10 @@ std::vector LogicAnalyzer::enableMixedSignalView(CapturePlot *osc, in m_oscChannelSelected = -1; nameLineEdit->setDisabled(true); nameLineEdit->setText("No channel selected!"); + traceHeightLineEdit->setDisabled(true); + traceHeightLineEdit->setText(""); + currentChannelTriggerComboBox->setDisabled(true); + currentChannelTriggerComboBox->setCurrentIndex(0); if (m_oscDecoderMenu) { decoderSettingsLayout->removeWidget(m_oscDecoderMenu); @@ -691,6 +820,32 @@ std::vector LogicAnalyzer::enableMixedSignalView(CapturePlot *osc, in updateButtonStackedDecoder(); }); + connect(traceHeightLineEdit, &QLineEdit::editingFinished, [=](){ + int value = traceHeightLineEdit->text().toInt(); + m_oscPlotCurves[m_oscChannelSelected]->setTraceHeight(value); + m_oscPlot->replot(); + m_oscPlot->positionInGroupChanged(m_oscChannelSelected, 0, 0); + }); + + connect(currentChannelTriggerComboBox, QOverload::of(&QComboBox::currentIndexChanged), [=](int index) { + if (m_oscChannelSelected != -1 && m_oscChannelSelected < m_nbChannels) { + QComboBox *triggerBox = qobject_cast(chEnumeratorLayout->itemAtPosition(m_oscChannelSelected % 8, + m_oscChannelSelected / 8)->layout()->itemAt(1)->widget()); + triggerBox->setCurrentIndex(index); + } + }); + + connect(tabWidget, &QTabWidget::currentChanged, [=](int index){ + if (index == tabWidget->indexOf(currentChannelMenuScrollArea)) { + if (m_oscChannelSelected != -1 && m_oscChannelSelected < m_nbChannels) { + currentChannelTriggerComboBox->setEnabled(true); + QComboBox *triggerBox = qobject_cast(chEnumeratorLayout->itemAtPosition(m_oscChannelSelected % 8, + m_oscChannelSelected / 8)->layout()->itemAt(1)->widget()); + currentChannelTriggerComboBox->setCurrentIndex(triggerBox->currentIndex()); + } + } + }); + connect(stackDecoderComboBox, &QComboBox::currentTextChanged, [=](const QString &text) { if (m_oscChannelSelected < m_nbChannels) { return; @@ -735,11 +890,12 @@ std::vector LogicAnalyzer::enableMixedSignalView(CapturePlot *osc, in }); currentChannelMenuScrollArea->setWidget(currentChannelMenu); + generalScrollArea->setWidget(channelEnumerator); - tabWidget->addTab(channelEnumerator, "General"); + tabWidget->addTab(generalScrollArea, "General"); tabWidget->addTab(currentChannelMenuScrollArea, "Channel"); - return {tabWidget}; + return {tabWidget, generalScrollArea}; } void LogicAnalyzer::disableMixedSignalView() @@ -758,6 +914,10 @@ void LogicAnalyzer::disableMixedSignalView() curve = m_oscPlot->getDigitalPlotCurve(0); } + m_oscPlotCurves.clear(); + m_oscChannelSelected = -1; + + disconnect(m_oscChannelSelectedConnection); m_oscPlot = nullptr; } @@ -855,6 +1015,11 @@ void LogicAnalyzer::onTimeTriggerValueChanged(double value) return; } + const bool wasRunning = m_started; + if (wasRunning) { + startStop(false); + } + m_plot.cancelZoom(); m_plot.zoomBaseUpdate(); @@ -870,16 +1035,25 @@ void LogicAnalyzer::onTimeTriggerValueChanged(double value) m_m2kDigital->getTrigger()->setDigitalDelay(value); updateBufferPreviewer(0, m_lastCapturedSample); + + if (wasRunning) { + startStop(true); + } } void LogicAnalyzer::onSampleRateValueChanged(double value) { + const bool wasRunning = m_started; + if (wasRunning) { + startStop(false); + } + qDebug() << "Sample rate: " << value; m_sampleRate = value; if (ui->btnStreamOneShot->isChecked()) { // oneshot m_plot.cancelZoom(); - m_timePositionButton->setValue(m_timeTriggerOffset); +// m_timePositionButton->setValue(m_timeTriggerOffset * m_sampleRate); m_plot.setHorizOffset(1.0 / m_sampleRate * m_bufferSize / 2.0 + m_timeTriggerOffset); m_horizOffset = 1.0 / m_sampleRate * m_bufferSize / 2.0 + m_timeTriggerOffset; m_plot.replot(); @@ -905,15 +1079,24 @@ void LogicAnalyzer::onSampleRateValueChanged(double value) double maxT = (1 << 13) * (1.0 / m_sampleRate) - 1.0 / m_sampleRate * m_bufferSize / 2.0; // 8192 * time between samples double minT = -((1 << 13) - 1) * (1.0 / m_sampleRate) - 1.0 / m_sampleRate * m_bufferSize / 2.0; // (2 << 13) - 1 max hdl fifo depth m_plot.setTimeTriggerInterval(minT, maxT); + + if (wasRunning) { + startStop(true); + } } void LogicAnalyzer::onBufferSizeChanged(double value) { + const bool wasRunning = m_started; + if (wasRunning) { + startStop(false); + } + m_bufferSize = value; if (ui->btnStreamOneShot->isChecked()) { // oneshot m_plot.cancelZoom(); - m_timePositionButton->setValue(m_timeTriggerOffset); +// m_timePositionButton->setValue(m_timeTriggerOffset); m_plot.setHorizOffset(1.0 / m_sampleRate * m_bufferSize / 2.0 + m_timeTriggerOffset); m_horizOffset = 1.0 / m_sampleRate * m_bufferSize / 2.0 + m_timeTriggerOffset; m_plot.replot(); @@ -938,22 +1121,29 @@ void LogicAnalyzer::onBufferSizeChanged(double value) double maxT = (1 << 13) * (1.0 / m_sampleRate) - 1.0 / m_sampleRate * m_bufferSize / 2.0; // 8192 * time between samples double minT = -((1 << 13) - 1) * (1.0 / m_sampleRate) - 1.0 / m_sampleRate * m_bufferSize / 2.0; // (2 << 13) - 1 max hdl fifo depth m_plot.setTimeTriggerInterval(minT, maxT); + + if (wasRunning) { + startStop(true); + } } void LogicAnalyzer::on_btnStreamOneShot_toggled(bool toggled) { - qDebug() << "Btn stream one shot toggled !!!!!: " << toggled; + const bool wasRunning = m_started; + if (wasRunning) { + startStop(false); + } m_plot.enableTimeTrigger(toggled); - m_timePositionButton->setVisible(toggled); + m_timePositionButton->setEnabled(toggled); m_m2kDigital->getTrigger()->setDigitalStreamingFlag(toggled); if (toggled) { // oneshot m_plot.cancelZoom(); - m_timePositionButton->setValue(m_timeTriggerOffset); - m_plot.setHorizOffset(1.0 / m_sampleRate * m_bufferSize / 2.0 - m_timeTriggerOffset); - m_horizOffset = 1.0 / m_sampleRate * m_bufferSize / 2.0 - m_timeTriggerOffset; + m_timePositionButton->setValue(m_timeTriggerOffset * m_sampleRate); + m_plot.setHorizOffset(1.0 / m_sampleRate * m_bufferSize / 2.0 + m_timeTriggerOffset); + m_horizOffset = 1.0 / m_sampleRate * m_bufferSize / 2.0 + m_timeTriggerOffset; m_plot.replot(); m_plot.zoomBaseUpdate(); } else { // streaming @@ -968,6 +1158,10 @@ void LogicAnalyzer::on_btnStreamOneShot_toggled(bool toggled) m_bufferSizeButton->setMaxValue(toggled ? MAX_BUFFER_SIZE_ONESHOT : MAX_BUFFER_SIZE_STREAM); m_bufferPreviewer->setCursorVisible(toggled); + + if (wasRunning) { + startStop(true); + } } void LogicAnalyzer::on_btnGroupChannels_toggled(bool checked) @@ -998,6 +1192,13 @@ void LogicAnalyzer::channelSelectedChanged(int chIdx, bool selected) qDebug() << "Selected channel: " << chIdx; m_selectedChannel = chIdx; + + if (m_selectedChannel < m_nbChannels) { + ui->hardwareName->setText("DIO " + QString::number(m_selectedChannel)); + } else { + ui->hardwareName->setText(""); + } + ui->nameLineEdit->setEnabled(true); ui->nameLineEdit->setText(m_plotCurves[m_selectedChannel]->getName()); ui->traceHeightLineEdit->setEnabled(true); @@ -1040,6 +1241,7 @@ void LogicAnalyzer::channelSelectedChanged(int chIdx, bool selected) } } else if (m_selectedChannel == chIdx && !selected) { m_selectedChannel = -1; + ui->hardwareName->setText(""); ui->nameLineEdit->setDisabled(true); ui->nameLineEdit->setText(""); ui->traceHeightLineEdit->setDisabled(true); @@ -1065,7 +1267,7 @@ void LogicAnalyzer::setupUi() ui->setupUi(this); // Hide the run button - ui->runSingleWidget->enableRunButton(false); +// ui->runSingleWidget->enableRunButton(false); int gsettings_panel = ui->stackedWidget->indexOf(ui->generalSettings); ui->btnGeneralSettings->setProperty("id", QVariant(-gsettings_panel)); @@ -1127,8 +1329,6 @@ void LogicAnalyzer::setupUi() ui->vLayoutBufferSlot->addWidget(m_bufferPreviewer); - m_plot.canvas()->setStyleSheet("background-color: #272730"); - // Setup sweep settings menu @@ -1272,18 +1472,6 @@ void LogicAnalyzer::connectSignalsAndSlots() connect(ui->nameLineEdit, &QLineEdit::textChanged, [=](const QString &text){ m_plot.setChannelName(text, m_selectedChannel); m_plotCurves[m_selectedChannel]->setName(text); - if (m_selectedChannel < m_nbChannels) { - QLayout *widgetInLayout = ui->channelEnumeratorLayout->itemAtPosition(m_selectedChannel % 8, - m_selectedChannel / 8)->layout(); - auto channelBox = dynamic_cast(widgetInLayout->itemAt(0)->widget()); - channelBox->setText(text); - } else { - const int selectedDecoder = m_selectedChannel - m_nbChannels; - QLayout *widgetInLayout = ui->decoderEnumeratorLayout->itemAtPosition(selectedDecoder / 2, - selectedDecoder % 2)->widget()->layout(); - auto decoderBox = dynamic_cast(widgetInLayout->itemAt(0)->widget()); - decoderBox->setText(text); - } }); connect(ui->traceHeightLineEdit, &QLineEdit::textChanged, [=](const QString &text){ @@ -1427,10 +1615,10 @@ void LogicAnalyzer::updateBufferPreviewer(int64_t min, int64_t max) long long totalSamples = m_bufferSize; if (totalSamples > 0) { - const int offset = ui->btnStreamOneShot->isChecked() ? m_timePositionButton->value() * (1.0 / m_sampleRate) + const int offset = ui->btnStreamOneShot->isChecked() ? m_timePositionButton->value() : 0; - dataInterval.setMinValue(-((min / m_sampleRate) + offset)); - dataInterval.setMaxValue((max / m_sampleRate) - offset); + dataInterval.setMinValue(offset / m_sampleRate); + dataInterval.setMaxValue((offset + max) / m_sampleRate); } // Use the two intervals to determine the width and position of the @@ -1487,11 +1675,11 @@ void LogicAnalyzer::initBufferScrolling() }); connect(m_bufferPreviewer, &BufferPreviewer::bufferResetPosition, [=](){ m_plot.setHorizOffset(1.0 / m_sampleRate * m_bufferSize / 2.0 + - (ui->btnStreamOneShot ? 0 : m_timeTriggerOffset)); + (ui->btnStreamOneShot ? 0 : m_timeTriggerOffset / m_sampleRate)); m_plot.replot(); updateBufferPreviewer(0, m_lastCapturedSample); m_horizOffset = 1.0 / m_sampleRate * m_bufferSize / 2.0 + - (ui->btnStreamOneShot ? 0 : m_timeTriggerOffset); + (ui->btnStreamOneShot ? 0 : m_timeTriggerOffset / m_sampleRate); }); } @@ -1503,6 +1691,7 @@ void LogicAnalyzer::startStop(bool start) m_started = start; + m_triggerUpdater->setEnabled(start); if (start) { if (m_captureThread) { m_stopRequested = true; @@ -1511,6 +1700,10 @@ void LogicAnalyzer::startStop(bool start) m_captureThread = nullptr; } + m_plot.setSampleRatelabelValue(m_sampleRate); + m_plot.setBufferSizeLabelValue(m_bufferSize); + m_plot.setTimeBaseLabelValue(m_bufferSize / m_sampleRate / m_plot.xAxisNumDiv()); + m_stopRequested = false; m_m2kDigital->stopAcquisition(); @@ -1527,7 +1720,7 @@ void LogicAnalyzer::startStop(bool start) const double delay = oneShotOrStream ? m_timeTriggerOffset * m_sampleRate : 0; - const double setSampleRate = m_m2kDigital->setSampleRateIn((sampleRate+1)); + const double setSampleRate = m_m2kDigital->setSampleRateIn((sampleRate + 1)); m_sampleRateButton->setValue(setSampleRate); m_m2kDigital->getTrigger()->setDigitalStreamingFlag(!oneShotOrStream); @@ -1544,26 +1737,6 @@ void LogicAnalyzer::startStop(bool start) m_lastCapturedSample = 0; - if (m_autoMode) { - - m_plot.setTriggerState(CapturePlot::Auto); - - double oneBufferTimeOut = m_timerTimeout; - - if (!oneShotOrStream) { - uint64_t chunks = 4; - while ((bufferSizeAdjusted >> chunks) > (1 << 19)) { - chunks++; // select a small size for the chunks - // example: 2^19 samples in each chunk - } - const uint64_t chunk_size = (bufferSizeAdjusted >> chunks) > 0 ? (bufferSizeAdjusted >> chunks) : 4 ; - const uint64_t buffersCount = bufferSizeAdjusted / chunk_size; - oneBufferTimeOut /= buffersCount; - } - - m_timer->start(oneBufferTimeOut); - } - m_captureThread = new std::thread([=](){ if (m_buffer) { @@ -1571,95 +1744,201 @@ void LogicAnalyzer::startStop(bool start) m_buffer = nullptr; } - m_buffer = new uint16_t[bufferSize]; + m_buffer = new uint16_t[bufferSizeAdjusted]; QMetaObject::invokeMethod(this, [=](){ m_exportSettings->enableExportButton(true); }, Qt::DirectConnection); - QMetaObject::invokeMethod(this, [=](){ - m_plot.setTriggerState(CapturePlot::Waiting); - }, Qt::QueuedConnection); + uint64_t totalSamples = bufferSizeAdjusted; + uint64_t chunk_size = 0; - if (ui->btnStreamOneShot->isChecked()) { - try { - const uint16_t * const temp = m_m2kDigital->getSamplesP(bufferSize); - memcpy(m_buffer, temp, bufferSizeAdjusted * sizeof(uint16_t)); + double oneBufferTimeout = m_timerTimeout; + + // clear any warning + m_plot.setMaxBufferSizeErrorLabel(false); + + if (oneShotOrStream) { // oneshot + do { + try { + m_m2kDigital->setKernelBuffersCountIn(1); + break; + } catch (libm2k::m2k_exception &e) { + qDebug() << e.what(); + } + } while (true); - QMetaObject::invokeMethod(this, [=](){ - m_plot.setTriggerState(CapturePlot::Triggered); - }, Qt::QueuedConnection); + chunk_size = bufferSizeAdjusted; - m_lastCapturedSample = bufferSize; - Q_EMIT dataAvailable(0, bufferSize); - updateBufferPreviewer(0, m_lastCapturedSample); + } else { // streaming + const int minKernelBuffers = 4; + const int oneBufferMaxSize = 2 * 1024 * 1024; // 2M - } catch (libm2k::m2k_exception &e) { - HANDLE_EXCEPTION(e) - qDebug() << e.what(); + m_currentKernelBuffers = minKernelBuffers; + + /* ensure we have the minimum amount of kernel buffers to fit the buffer + * ex: we want to capture a 40M buffer, we will use (at least) 10 kernel buffers + * */ + while (bufferSizeAdjusted > (m_currentKernelBuffers * oneBufferMaxSize) + && m_currentKernelBuffers < MAX_KERNEL_BUFFERS) { + m_currentKernelBuffers++; } - } else { - uint64_t chunks = 4; - while ((bufferSizeAdjusted >> chunks) > (1 << 19)) { - chunks++; // select a small size for the chunks - // example: 2^19 samples in each chunk + + /* ensure we don't spend more than 100ms on a acquiring a buffer if we can + * further divide it into smaller buffers (kernel buffers still available) + * */ + const double maxCaptureDuration = 0.1; // 100ms + while (((static_cast(bufferSizeAdjusted) / setSampleRate) + / static_cast(m_currentKernelBuffers)) > maxCaptureDuration + && m_currentKernelBuffers < MAX_KERNEL_BUFFERS) { + m_currentKernelBuffers++; + } + + // buffer size per kernel buffer + chunk_size = bufferSizeAdjusted / m_currentKernelBuffers; + + uint64_t chunkSizeBeforeAdjust = chunk_size; + + // buffer size must be divisible by 4 + chunk_size = 4 * (chunk_size / 4); + + /* If the chunk_size was not disible by 4 in the first place we would get a smaller + * value for it. Let's check if we can increase the chunk_size to the next divisible by 4 + * number otherwise we need to add another kernel buffer if this is possible + * */ + if (chunk_size + 4 <= oneBufferMaxSize && chunkSizeBeforeAdjust != chunk_size) { + chunk_size += 4; + } + + // If the buffer size is > 64 * 4M we need to cap the chunk_size to 4M + if (chunk_size > oneBufferMaxSize) { + chunk_size = oneBufferMaxSize; + } + + if (bufferSizeAdjusted >= MAX_KERNEL_BUFFERS * oneBufferMaxSize) { + /* in this case if the sample rate is greater than 5M samples / s + * warn that data might not be continuos + * */ + if (setSampleRate > MAX_SR_STREAM) { + m_plot.setMaxBufferSizeErrorLabel(true, "Data might not be continuous, lower sample rate or buffer size"); + } } - const uint64_t chunk_size = (bufferSizeAdjusted >> chunks) > 0 ? (bufferSizeAdjusted >> chunks) : 4 ; - uint64_t totalSamples = bufferSizeAdjusted; - m_m2kDigital->setKernelBuffersCountIn(64); - uint64_t absIndex = 0; do { - const uint64_t captureSize = std::min(chunk_size, totalSamples); try { - const uint16_t * const temp = m_m2kDigital->getSamplesP(captureSize); - memcpy(m_buffer + absIndex, temp, sizeof(uint16_t) * captureSize); - absIndex += captureSize; - totalSamples -= captureSize; + m_m2kDigital->setKernelBuffersCountIn(m_currentKernelBuffers); + break; + } catch (libm2k::m2k_exception &e) { + qDebug() << e.what(); + } + } while (true); + + // time for one kernel buffer + 100ms for the transfer + oneBufferTimeout = ((oneBufferTimeout - 100) / m_currentKernelBuffers) + 100; + } + + uint64_t absIndex = 0; + // notify that the acquisition started one waiting for it + // to start, in order to correctly stop it + { + std::unique_lock lock(m_acquisitionStartedMutex); + m_m2kDigital->startAcquisition(chunk_size); + m_acquisitionStarted = true; + } + m_acquisitionStartedCv.notify_one(); + + do { + const uint64_t captureSize = std::min(chunk_size, totalSamples); + + try { + if (m_autoMode) { QMetaObject::invokeMethod(this, [=](){ - m_plot.setTriggerState(CapturePlot::Triggered); - }, Qt::QueuedConnection); + m_timer->start(oneBufferTimeout); + }); + } - } catch (libm2k::m2k_exception &e) { - HANDLE_EXCEPTION(e) - qDebug() << e.what(); - break; + const uint16_t * const temp = m_m2kDigital->getSamplesP(chunk_size); + memcpy(m_buffer + absIndex, temp, sizeof(uint16_t) * captureSize); + + absIndex += captureSize; + totalSamples -= captureSize; + + if (m_autoMode) { + QMetaObject::invokeMethod(this, [=](){ + m_timer->stop(); + }); } - if (m_stopRequested) { - break; + if (m_triggerState.empty()) { + QMetaObject::invokeMethod(this, [=](){ + m_triggerUpdater->setInput(CapturePlot::Triggered); + }, Qt::QueuedConnection); + } else { + QMetaObject::invokeMethod(this, [=](){ + m_triggerUpdater->setInput(CapturePlot::Auto); + }, Qt::QueuedConnection); } - Q_EMIT dataAvailable(absIndex - captureSize, absIndex); + } catch (libm2k::m2k_exception &e) { +// HANDLE_EXCEPTION(e) + qDebug() << e.what() << " code: " << e.iioCode(); + break; + } - QMetaObject::invokeMethod(&m_plot, // trigger replot on Main Thread - "replot", - Qt::QueuedConnection); - m_lastCapturedSample = absIndex; - updateBufferPreviewer(0, m_lastCapturedSample); + if (m_stopRequested) { + break; + } - } while (totalSamples); - } + Q_EMIT dataAvailable(absIndex - captureSize, absIndex); - m_started = false; + QMetaObject::invokeMethod(&m_plot, // trigger replot on Main Thread + "replot", + Qt::QueuedConnection); + m_lastCapturedSample = absIndex; + updateBufferPreviewer(0, m_lastCapturedSample); - QMetaObject::invokeMethod(this, - "restoreTriggerState", - Qt::DirectConnection); + QMetaObject::invokeMethod(this, + "restoreTriggerState", + Qt::QueuedConnection); - // - QMetaObject::invokeMethod(ui->runSingleWidget, - "toggle", - Qt::QueuedConnection, - Q_ARG(bool, false)); + if (!totalSamples && ui->runSingleWidget->runButtonChecked()) { + m_m2kDigital->stopAcquisition(); + { + std::unique_lock lock(m_acquisitionStartedMutex); + m_acquisitionStarted = false; + } + m_m2kDigital->getTrigger()->setDigitalStreamingFlag(!oneShotOrStream); + + // notify that the acquisition started one waiting for it + // to start, in order to correctly stop it + { + std::unique_lock lock(m_acquisitionStartedMutex); + m_m2kDigital->startAcquisition(chunk_size); + m_acquisitionStarted = true; + } + m_acquisitionStartedCv.notify_one(); + + totalSamples = bufferSizeAdjusted; + absIndex = 0; + + std::this_thread::sleep_for(std::chrono::milliseconds(100)); + } + } while (totalSamples && !m_stopRequested); + + m_started = false; + + if (ui->runSingleWidget->singleButtonChecked()) { + QMetaObject::invokeMethod(ui->runSingleWidget, + "toggle", + Qt::QueuedConnection, + Q_ARG(bool, false)); + m_triggerUpdater->setEnabled(false); + } + m_m2kDigital->stopAcquisition(); QMetaObject::invokeMethod(&m_plot, "replot"); - QMetaObject::invokeMethod(this, [=](){ - m_plot.setTriggerState(CapturePlot::Stop); - }, Qt::QueuedConnection); - QMetaObject::invokeMethod(this, [=](){ m_exportSettings->enableExportButton(true); }, Qt::DirectConnection); @@ -1668,6 +1947,14 @@ void LogicAnalyzer::startStop(bool start) } else { if (m_captureThread) { + // a stop request might be triggered before getting to getSamplesP, + // thus cancelAcquisition in this case will be a no-op. In order to avoid + // this issue we wait for acquisition to be started + { + std::unique_lock lock(m_acquisitionStartedMutex); + m_acquisitionStartedCv.wait(lock, [=]{ return m_acquisitionStarted; }); + } + m_stopRequested = true; try { m_m2kDigital->cancelAcquisition(); // cancelBufferIn @@ -1676,15 +1963,13 @@ void LogicAnalyzer::startStop(bool start) } m_captureThread->join(); + m_acquisitionStarted = false; + delete m_captureThread; m_captureThread = nullptr; restoreTriggerState(); } - - m_plot.setTriggerState(CapturePlot::Stop); - } - } void LogicAnalyzer::setupDecoders() @@ -1980,20 +2265,12 @@ void LogicAnalyzer::setupTriggerMenu() { connect(ui->btnTriggerMode, &CustomSwitch::toggled, [=](bool toggled){ m_autoMode = toggled; - if (m_autoMode && m_started) { double oneBufferTimeOut = m_timerTimeout; if (!ui->btnStreamOneShot->isChecked()) { - uint64_t chunks = 4; - while ((m_bufferSize >> chunks) > (1 << 19)) { - chunks++; // select a small size for the chunks - // example: 2^19 samples in each chunk - } - const uint64_t chunk_size = (m_bufferSize >> chunks) > 0 ? (m_bufferSize >> chunks) : 4 ; - const uint64_t buffersCount = m_bufferSize / chunk_size; - oneBufferTimeOut /= buffersCount; + oneBufferTimeOut /= m_currentKernelBuffers; } m_timer->start(oneBufferTimeOut); @@ -2001,6 +2278,18 @@ void LogicAnalyzer::setupTriggerMenu() qDebug() << "auto mode: " << m_autoMode << " with timeout: " << oneBufferTimeOut << " when logic is started: " << m_started; } + + if (toggled) { + m_triggerUpdater->setIdleState(CapturePlot::Auto); + m_triggerUpdater->setInput(CapturePlot::Auto); + } else { + m_triggerUpdater->setIdleState(CapturePlot::Waiting); + m_triggerUpdater->setInput(CapturePlot::Waiting); + } + + if (!m_autoMode) { + m_timer->stop(); + } }); ui->triggerLogicComboBox->addItem("OR"); @@ -2064,18 +2353,19 @@ void LogicAnalyzer::setupTriggerMenu() ui->lblWarningFw->setVisible(true); } - m_timer->setSingleShot(true); connect(m_timer, &QTimer::timeout, this, &LogicAnalyzer::saveTriggerState); - - m_plot.setTriggerState(CapturePlot::Stop); - } void LogicAnalyzer::saveTriggerState() { // save trigger state and set to no trigger each channel - if (m_started) { + if (m_started && !m_triggerState.size()) { + const bool streaming = !ui->btnStreamOneShot->isChecked(); + if (streaming) { + m_m2kDigital->getTrigger()->setDigitalStreamingFlag(false); + } + for (int i = 0; i < m_nbChannels; ++i) { m_triggerState.push_back(m_m2kDigital->getTrigger()->getDigitalCondition(i)); m_m2kDigital->getTrigger()->setDigitalCondition(i, M2K_TRIGGER_CONDITION_DIGITAL::NO_TRIGGER_DIGITAL); @@ -2084,13 +2374,22 @@ void LogicAnalyzer::saveTriggerState() auto externalTriggerCondition = m_m2kDigital->getTrigger()->getDigitalExternalCondition(); m_triggerState.push_back(externalTriggerCondition); m_m2kDigital->getTrigger()->setDigitalExternalCondition(M2K_TRIGGER_CONDITION_DIGITAL::NO_TRIGGER_DIGITAL); + + if (streaming) { + m_m2kDigital->getTrigger()->setDigitalStreamingFlag(true); + } } } void LogicAnalyzer::restoreTriggerState() { // restored saved trigger state - if (!m_started && m_triggerState.size()) { + if (m_triggerState.size()) { + const bool streaming = !ui->btnStreamOneShot->isChecked(); + if (streaming) { + m_m2kDigital->getTrigger()->setDigitalStreamingFlag(false); + } + for (int i = 0; i < m_nbChannels; ++i) { m_triggerState.push_back(m_m2kDigital->getTrigger()->getDigitalCondition(i)); m_m2kDigital->getTrigger()->setDigitalCondition(i, m_triggerState[i]); @@ -2098,6 +2397,10 @@ void LogicAnalyzer::restoreTriggerState() m_m2kDigital->getTrigger()->setDigitalExternalCondition(m_triggerState.back()); + if (streaming) { + m_m2kDigital->getTrigger()->setDigitalStreamingFlag(true); + } + m_triggerState.clear(); } } diff --git a/src/logicanalyzer/logic_analyzer.h b/src/logicanalyzer/logic_analyzer.h index bf3ebd1524..2f9ac9722b 100644 --- a/src/logicanalyzer/logic_analyzer.h +++ b/src/logicanalyzer/logic_analyzer.h @@ -61,6 +61,7 @@ class Filter; class BaseMenu; class LogicAnalyzer_API; class ExportSettings; +class StateUpdater; namespace logic { @@ -176,9 +177,10 @@ private Q_SLOTS: // capture std::thread *m_captureThread; std::atomic m_stopRequested; + bool m_acquisitionStarted; // prob not needed - std::mutex m_captureMutex; - std::condition_variable m_captureCv; + std::mutex m_acquisitionStartedMutex; + std::condition_variable m_acquisitionStartedCv; bool m_started; @@ -206,6 +208,11 @@ private Q_SLOTS: int m_oscChannelSelected; QVector m_oscPlotCurves; QWidget *m_oscDecoderMenu; + QMetaObject::Connection m_oscChannelSelectedConnection; + + int m_currentKernelBuffers; + + StateUpdater *m_triggerUpdater; }; diff --git a/src/logicanalyzer/logicanalyzer_api.h b/src/logicanalyzer/logicanalyzer_api.h index 036835cd2a..fcef82e67c 100644 --- a/src/logicanalyzer/logicanalyzer_api.h +++ b/src/logicanalyzer/logicanalyzer_api.h @@ -32,9 +32,9 @@ class LogicAnalyzer_API : public ApiObject Q_OBJECT /* sweep settings */ + Q_PROPERTY(bool streamOneShot READ getStreamOrOneShot WRITE setStreamOrOneShot) Q_PROPERTY(double sampleRate READ getSampleRate WRITE setSampleRate) Q_PROPERTY(int bufferSize READ getBufferSize WRITE setBufferSize) - Q_PROPERTY(bool streamOneShot READ getStreamOrOneShot WRITE setStreamOrOneShot) Q_PROPERTY(int delay READ getDelay WRITE setDelay) /* channel settings */ diff --git a/src/logicanalyzer/logicdatacurve.cpp b/src/logicanalyzer/logicdatacurve.cpp index 4450a34bb9..8e94da8b00 100644 --- a/src/logicanalyzer/logicdatacurve.cpp +++ b/src/logicanalyzer/logicdatacurve.cpp @@ -38,7 +38,7 @@ static const QColor LowColor(0xC0, 0x00, 0x00); static const QColor SamplingPointColor(0x77, 0x77, 0x77); LogicDataCurve::LogicDataCurve(uint16_t *data, uint8_t bit, adiscope::logic::LogicTool *logic) : - GenericLogicPlotCurve(QString("Dio " + QString::number(bit)), QString("Dio " + QString::number(bit))), + GenericLogicPlotCurve(QString(QString::number(bit)), QString(QString::number(bit))), m_logic(logic), m_startSample(0), m_endSample(0), @@ -69,10 +69,8 @@ void LogicDataCurve::dataAvailable(uint64_t from, uint64_t to) // Take into account the last pushed edge from the previous chunk of // available data uint64_t currentSample = from; - if (m_edges.size()) { - if (m_edges.back().first + 1 < currentSample) { - currentSample = m_edges.back().first + 1; - } + if (from > 0) { + currentSample--; } if (from == to) { @@ -170,7 +168,9 @@ void LogicDataCurve::drawLines(QPainter *painter, const QwtScaleMap &xMap, displayedData += QPointF(fromSampleToTime(m_endSample - 1), (!edges.back().second) * heightInPoints + m_pixelOffset); } - displayedData += QPointF(plot()->axisInterval(QwtAxis::xBottom).maxValue(), displayedData.back().y()); + if (edges.back().first + 1 == m_endSample - 1) { + displayedData += QPointF(plot()->axisInterval(QwtAxis::xBottom).maxValue(), displayedData.back().y()); + } painter->save(); painter->setPen(QColor(74, 100, 255)); //4a64ff @@ -227,101 +227,75 @@ void LogicDataCurve::getSubsampledEdges(std::vector> & - double dist = xMap.transform(fromSampleToTime(1)) - xMap.transform(fromSampleToTime(0)); - - QwtInterval interval = plot()->axisInterval(QwtAxis::xBottom); -// qDebug() << "from plot, left: " << interval.minValue() << " right: " << interval.maxValue(); - uint64_t firstEdge = edgeAtX(fromTimeToSample(interval.minValue()), m_edges); - uint64_t lastEdge = edgeAtX(fromTimeToSample(interval.maxValue()), m_edges); - -// qDebug() << "First edge is: " << firstEdge; -// qDebug() << "Last edge is: " << lastEdge; - -// qDebug() << "first edge: " << firstEdge; -// qDebug() << "last edge: " << lastEdge; - - if (m_edges.size() == 0) { -// qDebug() << "first edge: " << firstEdge << " last edge: " << lastEdge; - } + double dist = xMap.transform(fromSampleToTime(1)) - xMap.transform(fromSampleToTime(0)); - if (firstEdge > 0) { - firstEdge--; - } + QwtInterval interval = plot()->axisInterval(QwtAxis::xBottom); + uint64_t firstEdge = edgeAtX(fromTimeToSample(interval.minValue()), m_edges); + uint64_t lastEdge = edgeAtX(fromTimeToSample(interval.maxValue()), m_edges); - if (lastEdge < m_edges.size() - 1) { -// qDebug() << "lastEdge: " << lastEdge << " < " << "m_edges.size() - 1: " << m_edges.size() - 1; - lastEdge++; - } - - if (m_edges.size() == 1) { // corner case - edges.emplace_back(m_edges.front()); - return; - } + if (firstEdge > 0) { + firstEdge--; + } - // If plot is zoomed in / not so many edges close together - // draw them all - if (dist > 0.10) { + if (lastEdge < m_edges.size() - 1) { + lastEdge++; + } - if (lastEdge == m_edges.size() - 1) { - lastEdge = m_edges.size(); + if (m_edges.size() == 1) { // corner case + edges.emplace_back(m_edges.front()); + return; } - for (; firstEdge < lastEdge; ++firstEdge) { - edges.emplace_back(m_edges[firstEdge]); - } - } else { - - const uint64_t pointsPerPixel = 1.0 / dist; - - // Save last transition (high, low) - bool reachedEnd = false; - bool lastTransition = m_edges[firstEdge].second; - for (; firstEdge < lastEdge && !reachedEnd; ) { - const int64_t lastSample = m_edges[firstEdge].first; - edges.emplace_back(m_edges[firstEdge]); - - // Find the next edge that is at least "pointsPerPixel" away - // from the current one - auto next = std::upper_bound(m_edges.begin(), m_edges.end(), - std::make_pair(edges.back().first + pointsPerPixel - 1, false), - [=](const std::pair &lhs, const std::pair &rhs) -> bool { - return lhs.first < rhs.first; - }); - - if (next == m_edges.end()) { - next = m_edges.end() - 1; - reachedEnd = true; + // If plot is zoomed in / not so many edges close together + // draw them all + if (dist > 0.10) { + if (lastEdge == m_edges.size() - 1) { + lastEdge = m_edges.size(); } - auto previous = next; - std::advance(previous, -1); - - const int64_t a1 = (*next).first; - const int64_t a2 = (*previous).first; - - // If the distance between next found edge and it's predecessor is greater - // than the nr of samples/1px draw both edges as there will be a visible gap - // between the blocks and we want to make sure we display the correct logic level - if (std::abs(a1 - a2) > pointsPerPixel) { - edges.emplace_back(m_edges[std::distance(m_edges.begin(), previous)]); -// qDebug() << "gap emplace!!!!!!!"; - } else { - const int64_t currentSample = (*next).first; - if ((*next).second == lastTransition) { - edges.emplace_back((lastSample + currentSample) / 2, !lastTransition); -// qDebug() << "HACK!!!!!!"; - } - } - - firstEdge = std::distance(m_edges.begin(), next); + for (; firstEdge < lastEdge; ++firstEdge) { + edges.emplace_back(m_edges[firstEdge]); + } + } else { - lastTransition = (*next).second; + const uint64_t pointsPerPixel = 1.0 / dist; - if (reachedEnd) { + // always add the first edge edges.emplace_back(m_edges[firstEdge]); - } - } - } + + for (; firstEdge < lastEdge; ) { + // Find the next edge that is at least "pointsPerPixel" away + // from the current one + auto next = std::upper_bound(m_edges.begin(), m_edges.end(), + std::make_pair(edges.back().first + pointsPerPixel - 1, false), + [=](const std::pair &lhs, const std::pair &rhs) -> bool { + return lhs.first < rhs.first; + }); + + bool didReachEnd = false; + if (next == m_edges.end()) { + next = m_edges.end() - 1; + didReachEnd = true; + } + + if (next->second == edges.back().second) { + std::advance(next, -1); + if (didReachEnd) { + // If the end is reached (next == last edge) and it has the same transition as the last + // edge in the "edges" vector we have to add "next - 1" and "next" to the "edges" array + // in order to have valid transition, and also plot the last edge. + edges.emplace_back(*next); + std::advance(next, 1); + edges.emplace_back(*next); + break; + } + } + + edges.emplace_back(*next); + + firstEdge = std::distance(m_edges.begin(), next); + } + } } uint64_t LogicDataCurve::edgeAtX(int x, const std::vector> &edges) const { diff --git a/src/logicanalyzer/logicgroupitem.cpp b/src/logicanalyzer/logicgroupitem.cpp index fcf316317e..fd74fff99e 100644 --- a/src/logicanalyzer/logicgroupitem.cpp +++ b/src/logicanalyzer/logicgroupitem.cpp @@ -79,10 +79,16 @@ void LogicGroupItem::buildUi() dragWidget->setMinimumSize(QSize(16, 16)); // add 3 lines one on top of the other like ||| but flipped vertically + QString color = ""; + if (QIcon::themeName() == "scopy-default") { + color +="border: 2px solid rgba(20, 20, 22, 70);"; + } else { + color +="border: 2px solid rgb(197, 197, 197);"; + } for (int i = 0; i < 3; ++i) { QFrame *frame = new QFrame(dragWidget); frame->setMaximumSize(QSize(16, 2)); - frame->setStyleSheet(QString::fromUtf8("border: 2px solid rgba(255, 255, 255, 70)")); + frame->setStyleSheet(color); frame->setFrameShadow(QFrame::Plain); frame->setLineWidth(2); frame->setFrameShape(QFrame::HLine); diff --git a/src/main.cpp b/src/main.cpp index 92e00355a1..977452b3f0 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -32,6 +32,13 @@ #include "tool_launcher.hpp" #include "scopyApplication.hpp" #include +#ifdef LIBM2K_ENABLE_LOG +#include +#endif + +//#include "coloreditor.h" +#include "scopy_color_editor.h" +#include "application_restarter.h" using namespace adiscope; @@ -39,6 +46,12 @@ using namespace adiscope; int main(int argc, char **argv) { ScopyApplication app(argc, argv); +#ifdef LIBM2K_ENABLE_LOG + enableLogging(true); + google::InitGoogleLogging(argv[0]); + FLAGS_logbuflevel = -1; +#endif + #if BREAKPAD_HANDLER #ifdef Q_OS_LINUX google_breakpad::MinidumpDescriptor descriptor("/tmp"); @@ -62,13 +75,7 @@ int main(int argc, char **argv) QFont font("Open Sans"); app.setFont(font); - if (app.styleSheet().isEmpty()) { - QFile file(":/stylesheets/stylesheets/global.qss"); - file.open(QFile::ReadOnly); - - QString stylesheet = QString::fromLatin1(file.readAll()); - app.setStyleSheet(stylesheet); - } + ApplicationRestarter restarter(QString::fromLocal8Bit(argv[0])); #ifdef WIN32 auto pythonpath = qgetenv("SCOPY_PYTHONPATH"); @@ -111,6 +118,8 @@ int main(int argc, char **argv) parser.process(app); + restarter.setArguments(parser.positionalArguments()); + QTranslator myappTranslator; // TODO: Use Preferences_API to get language key - cannot be done right now @@ -140,6 +149,20 @@ int main(int argc, char **argv) ToolLauncher launcher(prevCrashDump); + ScopyColorEditor *colorEditor = new ScopyColorEditor(&app); + colorEditor->setVisible(false); + + QString currentStylesheet = pref.value(QString("Preferences/currentStylesheet")).toString(); + QStringList userStylesheets = pref.value(QString("Preferences/userStylesheets")).toStringList(); + colorEditor->setUserStylesheets(userStylesheets); + colorEditor->setCurrentStylesheet(currentStylesheet); + + if (app.styleSheet().isEmpty()) { + app.setStyleSheet(colorEditor->getStyleSheet()); + } + + launcher.getPrefPanel()->setColorEditor(colorEditor); + bool nogui = parser.isSet("nogui"); bool nodecoders = parser.isSet("nodecoders"); if (nodecoders) { @@ -181,6 +204,6 @@ int main(int argc, char **argv) Q_ARG(QString, contents), Q_ARG(QString, script)); } - return app.exec(); + return restarter.restart(app.exec()); } diff --git a/src/manualcalibration.cpp b/src/manualcalibration.cpp index 425bcca38e..fceafbae42 100644 --- a/src/manualcalibration.cpp +++ b/src/manualcalibration.cpp @@ -242,7 +242,7 @@ void ManualCalibration::positivePowerSupplyParam(const int step) /*adc offset calibration*/ try { - value = m_m2k_powersupply->readChannel(0); + value = m_m2k_powersupply->readChannel(0, false); } catch (libm2k::m2k_exception &e) { HANDLE_EXCEPTION(e) qDebug(CAT_CALIBRATION_MANUAL) << "Can't read value: " << e.what(); @@ -276,7 +276,7 @@ void ManualCalibration::positivePowerSupplyParam(const int step) /*adc gain calibration*/ try { - value = m_m2k_powersupply->readChannel(0); + value = m_m2k_powersupply->readChannel(0, false); } catch (libm2k::m2k_exception &e) { HANDLE_EXCEPTION(e) qDebug(CAT_CALIBRATION_MANUAL) << "Can't read value: " << e.what(); @@ -319,7 +319,7 @@ void ManualCalibration::setEnablePositiveSuppply(bool enabled) void ManualCalibration::setPositiveValue(double value) { try { - m_m2k_powersupply->pushChannel(0, value); + m_m2k_powersupply->pushChannel(0, value, false); } catch (libm2k::m2k_exception &e) { HANDLE_EXCEPTION(e) qDebug(CAT_CALIBRATION_MANUAL) << "Can't write value: " << e.what(); @@ -363,7 +363,7 @@ void ManualCalibration::negativePowerSupplyParam(const int step) /*adc offset calibration*/ try { - value = m_m2k_powersupply->readChannel(1); + value = m_m2k_powersupply->readChannel(1, false); } catch (libm2k::m2k_exception &e) { HANDLE_EXCEPTION(e) qDebug(CAT_CALIBRATION_MANUAL) << "Can't read value: " << e.what(); @@ -396,7 +396,7 @@ void ManualCalibration::negativePowerSupplyParam(const int step) /*adc gain calibration*/ try { - value = m_m2k_powersupply->readChannel(1); + value = m_m2k_powersupply->readChannel(1, false); } catch (libm2k::m2k_exception &e) { HANDLE_EXCEPTION(e) qDebug(CAT_CALIBRATION_MANUAL) << "Can't read value: " << e.what(); @@ -438,7 +438,7 @@ void ManualCalibration::setEnableNegativeSuppply(bool enabled) void ManualCalibration::setNegativeValue(double value) { try { - m_m2k_powersupply->pushChannel(1, value); + m_m2k_powersupply->pushChannel(1, value, false); } catch (libm2k::m2k_exception &e) { HANDLE_EXCEPTION(e) qDebug(CAT_CALIBRATION_MANUAL) << "Can't write value: " << e.what(); @@ -548,10 +548,12 @@ void ManualCalibration::on_loadButton_clicked() void ManualCalibration::on_saveButton_clicked() { QString fileName; + QString selectedFilter; + if (calibrationFilePath == "") { - fileName = QFileDialog::getOpenFileName(this, tr("Save File"), - "/home", - tr("ini (*.ini)")); + fileName = QFileDialog::getSaveFileName(this, + tr("Save file"), "", tr("Ini files (*.ini)"), + &selectedFilter, (m_useNativeDialogs ? QFileDialog::Options() : QFileDialog::DontUseNativeDialog)); } else { fileName = calibrationFilePath; } @@ -559,13 +561,13 @@ void ManualCalibration::on_saveButton_clicked() QFile file(fileName); QString temp_ad9963, temp_fpga; if (m_dmm_ad9963) { - temp_ad9963 = m_dmm_ad9963->readChannel("temp0").value; + temp_ad9963 = QString::number(m_dmm_ad9963->readChannel("temp0").value); } if (m_dmm_xadc) { - temp_fpga = m_dmm_xadc->readChannel("temp0").value; + temp_fpga = QString::number(m_dmm_xadc->readChannel("temp0").value); } - if (file.open(QFile::WriteOnly | QFile::Truncate)) { + if (file.open(QIODevice::WriteOnly)) { QTextStream stream(&file); stream << "#Calibration time: " << QDate::currentDate().toString() << ", " diff --git a/src/network_analyzer.cpp b/src/network_analyzer.cpp index 7c7363794c..933aa00390 100644 --- a/src/network_analyzer.cpp +++ b/src/network_analyzer.cpp @@ -165,6 +165,8 @@ void NetworkAnalyzer::_configureAdcFlowgraph(size_t buffer_size) // Build the flowgraph only once m_initFlowgraph = false; + + ui->btnHelp->setUrl("https://wiki.analog.com/university/tools/m2k/scopy/networkanalyzer"); } NetworkAnalyzer::NetworkAnalyzer(struct iio_context *ctx, Filter *filt, @@ -616,7 +618,6 @@ NetworkAnalyzer::NetworkAnalyzer(struct iio_context *ctx, Filter *filt, } painter.end(); - img.invertPixels(QImage::InvertRgb); img.save(fileName, 0, -1); }); @@ -1667,7 +1668,15 @@ void NetworkAnalyzer::startStop(bool pressed) m_dBgraph.sweepDone(); m_phaseGraph.sweepDone(); ui->statusLabel->setText(tr("Stopped")); - m_m2k_analogin->setKernelBuffersCount(KERNEL_BUFFERS_DEFAULT); + do { + try { + m_m2k_analogin->setKernelBuffersCount(KERNEL_BUFFERS_DEFAULT); + break; + } catch (libm2k::m2k_exception &e) { + qDebug() << e.what(); + } + + } while (true); } } diff --git a/src/oscilloscope.cpp b/src/oscilloscope.cpp index 37bdf0da78..53e7708b97 100644 --- a/src/oscilloscope.cpp +++ b/src/oscilloscope.cpp @@ -392,7 +392,7 @@ Oscilloscope::Oscilloscope(struct iio_context *ctx, Filter *filt, for (uint i = 0; i < nb_channels; i++) xy_plot.setYaxisMouseGesturesEnabled(i, false); - xy_plot.setLineColor(0, QColor("#F8E71C")); + xy_plot.setLineColor(0, QColor("#4a64ff")); ui->hlayout_fft->addWidget(&fft_plot); ui->container_fft_plot->hide(); @@ -827,12 +827,13 @@ Oscilloscope::Oscilloscope(struct iio_context *ctx, Filter *filt, connect(this, &Tool::detachedState, this, &Oscilloscope::toolDetached); - min_detached_width = this->minimumWidth(); toolDetached(false); connect(&plot,SIGNAL(leftGateChanged(double)),SLOT(onLeftGateChanged(double))); connect(&plot,SIGNAL(rightGateChanged(double)),SLOT(onRightGateChanged(double))); + ui->btnHelp->setUrl("https://wiki.analog.com/university/tools/m2k/scopy/oscilloscope"); + } int Oscilloscope::binSearchPointOnXaxis(double time) @@ -1285,13 +1286,18 @@ void Oscilloscope::setFilteringEnabled(bool set) setSampleRate(active_sample_rate); } -void Oscilloscope::enableMixedSignalView() +void Oscilloscope::enableMixedSignalView(ChannelWidget *cw) { const bool iioStarted = isIioManagerStarted(); if (iioStarted) { iio->lock(); } + const bool hasLabels = plot.labelsEnabled(); + if (hasLabels) { + enableLabels(false); + } + m_mixedSignalViewEnabled = true; m_mixedSignalViewMenu = m_logicAnalyzer->enableMixedSignalView(&plot, nb_channels + @@ -1299,6 +1305,13 @@ void Oscilloscope::enableMixedSignalView() ui->logicSettingsLayout->addWidget(m_mixedSignalViewMenu[0]); + QTabWidget *tb = qobject_cast(m_mixedSignalViewMenu[0]); + showLogicAnalyzerTriggerConnection = connect(&trigger_settings, &TriggerSettings::showLogicAnalyzerTriggerSettings, + this, [=](){ + cw->menuButton()->setChecked(true); + tb->setCurrentIndex(tb->indexOf(m_mixedSignalViewMenu[1])); + }); + mixed_sink = mixed_signal_sink::make(m_logicAnalyzer, &this->plot, active_sample_count); mixed_source = gr::m2k::mixed_signal_source::make_from(m_m2k_context, active_sample_count); @@ -1327,6 +1340,10 @@ void Oscilloscope::enableMixedSignalView() onHorizScaleValueChanged(timeBase->value()); onTimePositionChanged(timePosition->value()); + + if (hasLabels) { + enableLabels(true); + } } void Oscilloscope::disableMixedSignalView() @@ -1339,6 +1356,8 @@ void Oscilloscope::disableMixedSignalView() m_mixedSignalViewEnabled = false; + disconnect(showLogicAnalyzerTriggerConnection); + // disable mixed signal from logic ui->logicSettingsLayout->removeWidget(m_mixedSignalViewMenu[0]); m_logicAnalyzer->disableMixedSignalView(); @@ -1858,7 +1877,7 @@ void Oscilloscope::toggleCursorsMode(bool toggled) void Oscilloscope::toolDetached(bool detached) { if (detached) { - this->setMinimumWidth(min_detached_width); + this->setMinimumSize(910, 490); this->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); } else { @@ -1978,7 +1997,6 @@ void Oscilloscope::create_add_channel_panel() sizePolicy.setVerticalStretch(0); sizePolicy.setHeightForWidth(labelWarningMixedSignal->sizePolicy().hasHeightForWidth()); labelWarningMixedSignal->setSizePolicy(sizePolicy); - labelWarningMixedSignal->setStyleSheet(QString::fromUtf8("color: white;")); labelWarningMixedSignal->setWordWrap(true); labelWarningMixedSignal->setVisible(false); @@ -1987,13 +2005,11 @@ void Oscilloscope::create_add_channel_panel() layout_logic->insertWidget(1, labelWarningMixedSignal); QLabel *infoLabel = new QLabel(tr("* When the Mixed Signal View is enabled the LogicAnalyzer tool will be disabled!\n" - "** The trigger can be disabled or set only on the Digital channels or Analog channels, not on both at the same time!")); - infoLabel->setStyleSheet(QString::fromUtf8("color: white;")); + "** The trigger can be disabled or set only on the Digital channels or Analog channels, not on both at the same time!"), panel); + layout_logic->insertWidget(2, infoLabel); infoLabel->setWordWrap(true); infoLabel->setVisible(true); - layout_logic->insertWidget(2, infoLabel); - QPushButton *btn = math_ui.btnAddChannel; Math *math = new Math(nullptr, nb_channels); @@ -2077,6 +2093,22 @@ void Oscilloscope::create_add_channel_panel() tabWidget->addTab(logic, tr("Logic")); + connect(ui->mixedSignalBtn, &QPushButton::clicked, [=](){ + if (!m_mixedSignalViewEnabled) { + ui->btnAddMath->click(); + tabWidget->setCurrentIndex(tabWidget->indexOf(logic)); + } else { + for (int i = 0; i < ui->channelsList->count(); ++i) { + ChannelWidget *cw = qobject_cast( + ui->channelsList->itemAt(i)->widget()); + if (cw && cw->fullName() == "Logic Analyzer") { + cw->deleteButton()->click(); + break; + } + } + } + }); + connect(btnOpenFile, &QPushButton::clicked, this, &Oscilloscope::import); connect(tabWidget, &QTabWidget::currentChanged, [=](int index) { @@ -2106,6 +2138,7 @@ void Oscilloscope::create_add_channel_panel() if (tabWidget->currentIndex() == 2) { qDebug() << "Enable mixed signal view!"; + ui->mixedSignalBtn->setText("Disable Mixed\nSignal View"); ChannelWidget *logicAnalyzerChannelWidget = new ChannelWidget(-1, true, false, QColor(Qt::yellow), this); @@ -2145,13 +2178,14 @@ void Oscilloscope::create_add_channel_panel() logicAnalyzerChannelWidget->deleteLater(); tabWidget->setTabEnabled(logicTab, true); + ui->mixedSignalBtn->setText("Enable Mixed\nSignal View"); disableMixedSignalView(); }); logicAnalyzerChannelWidget->menuButton()->setChecked(true); - enableMixedSignalView(); + enableMixedSignalView(logicAnalyzerChannelWidget); return; } @@ -4314,11 +4348,11 @@ void Oscilloscope::measure_panel_init() cursor_readouts_ui->setupUi(cursorReadouts); cursor_readouts_ui->TimeCursors->setStyleSheet("QWidget {" - "background-color: transparent;" - "color: white;}"); + "background-color: transparent;}" + ); cursor_readouts_ui->VoltageCursors->setStyleSheet("QWidget {" - "background-color: transparent;" - "color: white;}"); + "background-color: transparent;}" + ); // Avoid labels jumping around to left or right by imposing a min width QLabel *label = new QLabel(this); diff --git a/src/oscilloscope.hpp b/src/oscilloscope.hpp index c933120bbd..a12c9ea2fa 100644 --- a/src/oscilloscope.hpp +++ b/src/oscilloscope.hpp @@ -243,7 +243,7 @@ namespace adiscope { void toolDetached(bool); void setFilteringEnabled(bool set); - void enableMixedSignalView(); + void enableMixedSignalView(ChannelWidget *cw); void disableMixedSignalView(); void setDigitalPlotCurvesParams(); @@ -490,6 +490,7 @@ namespace adiscope { gr::m2k::mixed_signal_source::sptr mixed_source; mixed_signal_sink::sptr mixed_sink; + QMetaObject::Connection showLogicAnalyzerTriggerConnection; }; } #endif /* M2K_OSCILLOSCOPE_H */ diff --git a/src/oscilloscope_plot.cpp b/src/oscilloscope_plot.cpp index 08c356a0e8..abce26dc2b 100644 --- a/src/oscilloscope_plot.cpp +++ b/src/oscilloscope_plot.cpp @@ -83,10 +83,11 @@ CapturePlot::CapturePlot(QWidget *parent, d_startedGrouping(false), d_bottomHandlesArea(nullptr), d_xAxisInterval{0.0, 0.0}, - d_currentHandleInitPx(1) + d_currentHandleInitPx(30), + d_maxBufferError(nullptr) { - setMinimumHeight(250); - setMinimumWidth(500); + setMinimumHeight(200); + setMinimumWidth(450); /* Initial colors scheme */ d_trigAactiveLinePen = QPen(QColor(255, 255, 255), 2, Qt::SolidLine); @@ -150,16 +151,17 @@ CapturePlot::CapturePlot(QWidget *parent, // Sample Rate and Buffer Size d_sampleRateLabel = new QLabel("", this); - d_sampleRateLabel->setStyleSheet("QLabel {" - "color: #ffffff;" - "}"); // Trigger State d_triggerStateLabel = new QLabel(this); - d_triggerStateLabel->setStyleSheet("QLabel {" - "color: #ffffff;" + + d_maxBufferError = new QLabel(this); + d_maxBufferError->setStyleSheet("QLabel {" + "color: #ff0000;" "}"); + d_maxBufferError->setWordWrap(true); + // Top area layout QHBoxLayout *topWidgetLayout = new QHBoxLayout(d_topWidget); topWidgetLayout->setContentsMargins(d_leftHandlesArea->minimumWidth(), @@ -171,7 +173,9 @@ CapturePlot::CapturePlot(QWidget *parent, Qt::AlignBottom); topWidgetLayout->insertWidget(1, d_sampleRateLabel, 0, Qt::AlignLeft | Qt::AlignBottom); - topWidgetLayout->insertWidget(2, d_triggerStateLabel, 0, Qt::AlignRight | + topWidgetLayout->insertWidget(2, d_maxBufferError, 0, Qt::AlignRight | + Qt::AlignBottom); + topWidgetLayout->insertWidget(3, d_triggerStateLabel, 0, Qt::AlignRight | Qt::AlignBottom); QSpacerItem *spacerItem = new QSpacerItem(0, 0, QSizePolicy::Expanding, @@ -1047,6 +1051,11 @@ void CapturePlot::printWithNoBackground(const QString& toolName, bool editScaleD DisplayPlot::printWithNoBackground(toolName, editScaleDraw); } +int CapturePlot::getAnalogChannels() const +{ + return d_ydata.size() + d_ref_ydata.size(); +} + void CapturePlot::setHorizCursorsLocked(bool value) { horizCursorsLocked = value; @@ -1439,37 +1448,8 @@ void CapturePlot::removeDigitalPlotCurve(QwtPlotCurve *curve) { for (int i = 0; i < d_offsetHandles.size(); ++i) { if (curve == getDigitalPlotCurve(i)) { - -// auto hdl = d_offsetHandles.at(i); -// qDebug() << "Removed id: " << i; -// for (auto &group : d_groupHandles) { -// group.removeOne(hdl); -// if (!group.isEmpty()) { -// group.first()->triggerMove(); -// } -// } - // remove digital plot curves - // TODO: always keep digital stuff at the end ch1 ch2 ref1 ref2 d1 d2 ... - // add ref3 -> ch1 ch2 ref1 ref2 ref3 d1 d2 ... removeOffsetWidgets(d_ydata.size() + d_ref_ydata.size() + i); - -// int groupIndx = -1; -// for (int i = 0; i < d_groupHandles.size(); ++i) { -// if (d_groupHandles[i].size() < 2) { -// groupIndx = i; -// } -// } - -// if (groupIndx != -1) { -// d_groupHandles.removeAt(groupIndx); -// } - -// if (d_groupMarkers.size() > d_groupHandles.size()){ -// auto marker = d_groupMarkers.takeLast(); -// marker->detach(); -// delete marker; -// } - + removeLeftVertAxis(d_ydata.size() + d_ref_ydata.size() + i); break; } } @@ -1501,7 +1481,6 @@ void CapturePlot::addToGroup(int currentGroup, int toAdd) void CapturePlot::onDigitalChannelAdded(int chnIdx) { - qDebug() << "Digital Channel Added!"; setLeftVertAxesCount(d_ydata.size() + d_ref_ydata.size() + chnIdx + 1); setAxisScale( QwtAxisId(QwtPlot::yLeft, d_ydata.size() + d_ref_ydata.size() + chnIdx), -5, 5); replot(); @@ -1886,6 +1865,16 @@ void CapturePlot::positionInGroupChanged(int chnIdx, int from, int to) void CapturePlot::setGroups(const QVector > &groups) { + auto selectedHandleIt = std::find_if(d_offsetHandles.begin(), d_offsetHandles.end(), + [](RoundedHandleV *handle){ + return handle->isSelected(); + }); + + if (selectedHandleIt != d_offsetHandles.end()) { + (*selectedHandleIt)->setSelected(false); + (*selectedHandleIt)->selected(false); + } + for (const auto &grp : groups) { if (grp.size() < 2) { continue; } beginGroupSelection(); @@ -1899,6 +1888,11 @@ void CapturePlot::setGroups(const QVector > &groups) d_groupHandles.back().front()->setPosition(d_groupHandles.back().front()->position()); } + if (selectedHandleIt != d_offsetHandles.end()) { + (*selectedHandleIt)->setSelected(true); + (*selectedHandleIt)->selected(true); + } + replot(); } @@ -2015,9 +2009,24 @@ void CapturePlot::handleInGroupChangedPosition(int position) replot(); } +void adiscope::CapturePlot::pushBackNewOffsetWidgets(RoundedHandleV *chOffsetHdl, HorizBar *chOffsetBar) +{ + int indexOfNewChannel = d_ydata.size() - 1; + d_offsetBars.insert(indexOfNewChannel, chOffsetBar); + d_offsetHandles.insert(indexOfNewChannel, chOffsetHdl); + + for (int i = 0; i < d_offsetBars.size(); ++i) { + d_offsetBars[i]->setMobileAxis(QwtAxisId(QwtPlot::yLeft, i)); + } + + for (int i = 0; i < d_logic_curves.size(); ++i) { + d_logic_curves[i]->setAxes(QwtPlot::xBottom, QwtAxisId(QwtPlot::yLeft, d_ydata.size() + d_ref_ydata.size() + i)); + } +} + void CapturePlot::onChannelAdded(int chnIdx) { - setLeftVertAxesCount(chnIdx + 1); + setLeftVertAxesCount(d_offsetHandles.size() + 1); QColor chnColor = getLineColor(chnIdx); /* Channel offset widget */ @@ -2026,7 +2035,6 @@ void CapturePlot::onChannelAdded(int chnIdx) chOffsetBar->setCanLeavePlot(true); chOffsetBar->setVisible(false); chOffsetBar->setMobileAxis(QwtAxisId(QwtPlot::yLeft, chnIdx)); - d_offsetBars.push_back(chOffsetBar); RoundedHandleV *chOffsetHdl = new RoundedHandleV( QPixmap(":/icons/handle_right_arrow.svg"), @@ -2036,7 +2044,7 @@ void CapturePlot::onChannelAdded(int chnIdx) chOffsetHdl->setRoundRectColor(chnColor); chOffsetHdl->setPen(QPen(chnColor, 2, Qt::SolidLine)); chOffsetHdl->setVisible(true); - d_offsetHandles.push_back(chOffsetHdl); + pushBackNewOffsetWidgets(chOffsetHdl, chOffsetBar); connect(chOffsetHdl, &RoundedHandleV::positionChanged, [=](int pos) { @@ -2359,6 +2367,15 @@ void CapturePlot::setTriggerState(int triggerState) d_triggerStateLabel->show(); } +void CapturePlot::setMaxBufferSizeErrorLabel(bool reached, const QString &customWarning) +{ + QString errorMessage = "Maximum buffer size reached"; + if (customWarning.length()) { + errorMessage = customWarning; + } + d_maxBufferError->setText(reached ? errorMessage : ""); +} + void CapturePlot::setCursorReadoutsTransparency(int value) { d_cursorReadouts->setTransparency(value); @@ -2372,8 +2389,10 @@ void CapturePlot::moveCursorReadouts(CustomPlotPositionButton::ReadoutsPosition void CapturePlot::updateBufferSizeSampleRateLabel(int nsamples, double sr) { QString txtSampleRate = d_cursorMetricFormatter.format(sr, "sps", 0); - QString txtSamplingPeriod = d_cursorTimeFormatter.format(1 / sr, "", 0); - QString text = QString("%1 Samples at ").arg(nsamples) + txtSampleRate; + d_cursorMetricFormatter.setTrimZeroes(true); + QString txtSamples = d_cursorMetricFormatter.format(nsamples, "", 3); + d_cursorMetricFormatter.setTrimZeroes(false); + QString text = QString("%1 Samples at ").arg(txtSamples) + txtSampleRate; d_sampleRateLabel->setText(text); } diff --git a/src/oscilloscope_plot.hpp b/src/oscilloscope_plot.hpp index 5e84c6e179..38ca368614 100644 --- a/src/oscilloscope_plot.hpp +++ b/src/oscilloscope_plot.hpp @@ -168,16 +168,23 @@ namespace adiscope { void setBufferSizeLabelValue(int numSamples); void setSampleRatelabelValue(double sampleRate); void setTriggerState(int triggerState); + void setMaxBufferSizeErrorLabel(bool reached, const QString &customWarning = ""); void setCursorReadoutsTransparency(int value); void moveCursorReadouts(CustomPlotPositionButton::ReadoutsPosition position); void setHorizCursorsLocked(bool value); void setVertCursorsLocked(bool value); void showEvent(QShowEvent *event); void printWithNoBackground(const QString& toolName = "", bool editScaleDraw = true); + + int getAnalogChannels() const; + + /* digital channels */ void onDigitalChannelAdded(int chnIdx); void setChannelSelectable(int chnIdx, bool selectable); void removeDigitalPlotCurve(QwtPlotCurve *curve); void setOffsetHandleVisible(int chIdx, bool visible); + + /* channel group */ void addToGroup(int currentGroup, int toAdd); void beginGroupSelection(); bool endGroupSelection(bool moveAnnotationCurvesLast = false); // TODO: toggle group selection @@ -249,6 +256,7 @@ namespace adiscope { QLabel *d_timeBaseLabel; QLabel *d_sampleRateLabel; QLabel *d_triggerStateLabel; + QLabel *d_maxBufferError; int d_bufferSizeLabelVal; double d_sampleRateLabelVal; @@ -325,6 +333,7 @@ namespace adiscope { QPair d_xAxisInterval; int d_currentHandleInitPx; + void pushBackNewOffsetWidgets(RoundedHandleV *chOffsetHdl, HorizBar *chOffsetBar); }; } diff --git a/src/patterngenerator/pattern_generator.cpp b/src/patterngenerator/pattern_generator.cpp index e14b711676..90260e32ef 100644 --- a/src/patterngenerator/pattern_generator.cpp +++ b/src/patterngenerator/pattern_generator.cpp @@ -118,6 +118,11 @@ PatternGenerator::PatternGenerator(struct iio_context *ctx, Filter *filt, m_plot.replot(); checkEnabledChannels(); + + if (m_isRunning) { + startStop(false); + startStop(true); + } }); channelBox->setChecked(false); } @@ -144,6 +149,8 @@ PatternGenerator::PatternGenerator(struct iio_context *ctx, Filter *filt, TOOL_PATTERN_GENERATOR))); api->load(*settings); api->js_register(engine); + + m_ui->btnHelp->setUrl("https://wiki.analog.com/university/tools/m2k/scopy/pattgen"); } void PatternGenerator::readPreferences() @@ -237,8 +244,6 @@ void PatternGenerator::setupUi() m_ui->gridLayoutPlot->addWidget(m_plot.bottomHandlesArea(), 3, 0, 1, 4); m_ui->gridLayoutPlot->addItem(plotSpacer, 4, 0, 1, 4); - // TODO: investigate why the plot's canvas background color is weird - m_plot.canvas()->setStyleSheet("background-color: #272730"); m_plot.enableAxis(QwtPlot::yLeft, false); m_plot.enableAxis(QwtPlot::xBottom, false); @@ -697,8 +702,8 @@ void PatternGenerator::startStop(bool start) lockMask = lockMask | enabled << i; if (enabled) { m_m2kDigital->setDirection(i, DIO_OUTPUT); - m_m2kDigital->enableChannel(i, true); } + m_m2kDigital->enableChannel(i, enabled); } m_diom->setMode(m_outputMode); @@ -751,10 +756,17 @@ void PatternGenerator::generateBuffer() m_sampleRate = sr; const uint64_t bufferSize = computeBufferSize(sr); + m_plot.setMaxBufferSizeErrorLabel(bufferSize == MAX_BUFFER_SIZE); qDebug() << "Buffer size is: " << bufferSize; m_bufferSize = bufferSize; + m_plot.setSampleRatelabelValue(m_sampleRate); + m_plot.setBufferSizeLabelValue(m_bufferSize); + m_plot.setTimeBaseLabelValue(static_cast(m_bufferSize) / + static_cast(m_sampleRate) / + m_plot.xAxisNumDiv()); + if (m_buffer) { delete[] m_buffer; } diff --git a/src/patterngenerator/patterns/patterns.cpp b/src/patterngenerator/patterns/patterns.cpp index 131a5d23d5..471d9a2578 100644 --- a/src/patterngenerator/patterns/patterns.cpp +++ b/src/patterngenerator/patterns/patterns.cpp @@ -34,6 +34,7 @@ #include "../pattern_generator.h" #include "../../logicanalyzer/annotationcurve.h" #include "../../logicanalyzer/annotationdecoder.h" +#include "dynamicWidget.hpp" #include @@ -149,7 +150,7 @@ void Pattern::setNrOfChannels(int channels) uint32_t Pattern::get_min_sampling_freq() { - return 1; // minimum 1 hertz if not specified otherwise + return 1000; // minimum 1 kHz if not specified otherwise } uint32_t Pattern::get_required_nr_of_samples(uint32_t sample_rate, @@ -778,9 +779,11 @@ void NumberPatternUI::parse_ui() max = (1 << pattern->nrOfChannels()) - 1; if (val <= max && ok) { - ui->numberLineEdit->setStyleSheet("color:white"); + setDynamicProperty(ui->numberLineEdit, "valid", true); + setDynamicProperty(ui->numberLineEdit, "invalid", false); } else { - ui->numberLineEdit->setStyleSheet("color:red"); + setDynamicProperty(ui->numberLineEdit, "invalid", true); + setDynamicProperty(ui->numberLineEdit, "valid", false); } pattern->set_nr(val); @@ -1443,12 +1446,12 @@ uint8_t UARTPattern::generate_pattern(uint32_t sample_rate, memset(buffer, 0xff, (number_of_samples)*sizeof(short)); short *buf_ptr = buffer; + short *buf_ptr_end = buffer + number_of_samples; const char *str_ptr = str.c_str(); int i; - for (i=0; iLE_toSend->setStyleSheet("color:red"); + setDynamicProperty(ui->LE_toSend, "invalid", true); + setDynamicProperty(ui->LE_toSend, "valid", false); } else { - ui->LE_toSend->setStyleSheet("color:white"); + setDynamicProperty(ui->LE_toSend, "valid", true); + setDynamicProperty(ui->LE_toSend, "invalid", false); } @@ -2125,6 +2130,7 @@ uint8_t SPIPattern::generate_pattern(uint32_t sample_rate, } short *buf_ptr = buffer; + short *buf_ptr_end = buffer + number_of_samples; auto samples_per_bit = 2 * (sample_rate/clkFrequency); buf_ptr += waitClocks * samples_per_bit; @@ -2139,7 +2145,7 @@ uint8_t SPIPattern::generate_pattern(uint32_t sample_rate, if(CPHA && start_new_frame) { - for (auto i=samples_per_bit/2; i> 1; } - for (auto i=0; iLE_toSend->setStyleSheet("color:red"); + setDynamicProperty(ui->LE_toSend, "invalid", true); + setDynamicProperty(ui->LE_toSend, "valid", false); } else { - ui->LE_toSend->setStyleSheet("color:white"); + setDynamicProperty(ui->LE_toSend, "valid", true); + setDynamicProperty(ui->LE_toSend, "invalid", false); } diff --git a/src/patterngenerator/patterns/patterns.hpp b/src/patterngenerator/patterns/patterns.hpp index fb48ade04a..88717c9947 100644 --- a/src/patterngenerator/patterns/patterns.hpp +++ b/src/patterngenerator/patterns/patterns.hpp @@ -458,6 +458,7 @@ class I2CPattern: virtual public Pattern uint8_t bytesPerFrame; short *buf_ptr; + short *buf_ptr_end; const int SDA = 1; const int SCL = 0; diff --git a/src/phonehome.cpp b/src/phonehome.cpp new file mode 100644 index 0000000000..d7668eee6d --- /dev/null +++ b/src/phonehome.cpp @@ -0,0 +1,121 @@ +/* + * Copyright (c) 2020 Analog Devices Inc. + * + * This file is part of Scopy + * (see http://www.github.com/analogdevicesinc/scopy). + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + + +#include "phonehome.h" +#include +#include + +using namespace adiscope; + +bool PhoneHome::getDone() const +{ + return done; +} + +PhoneHome::PhoneHome(QSettings *settings, Preferences *pref) : + ApiObject(), m_timestamp(0), m_versionsJson(""), + preferences(pref), settings(settings), done(false) +{ + setObjectName("phonehome"); + load(*settings); +} + +PhoneHome::~PhoneHome() { + save(*settings); +} + +void PhoneHome::setPreferences(Preferences* preferences) +{ + PhoneHome::preferences = preferences; +} + +void PhoneHome::versionsRequest(bool force) +{ + const qint64 now = QDateTime::currentMSecsSinceEpoch(); + const qint64 timeout = 24 * 60 * 60 * 1000; // 24 hours + //qint64 timeout = 5 * 1000; // 5 seconds for testing + + if(m_timestamp + timeout < now || force) { + // from swdownloads + QNetworkAccessManager* manager = new QNetworkAccessManager(this); + connect(manager, &QNetworkAccessManager::finished, this, &PhoneHome::onVersionsRequestFinished); + connect(manager, &QNetworkAccessManager::finished, manager, &QNetworkAccessManager::deleteLater); + + manager->get(QNetworkRequest(QUrl(preferences->getCheck_updates_url()))); + Q_EMIT scopyVersionCheckRequested(); + } else { + // from cache + if(!m_versionsJson.isEmpty()) { + const QJsonDocument doc = QJsonDocument::fromJson(m_versionsJson.toUtf8()); + extractVersionStringsFromJson(doc); + } + Q_EMIT checkUpdatesFinished(m_timestamp); + } +} + +void PhoneHome::extractVersionStringsFromJson(const QJsonDocument &doc) +{ + auto content = doc.object().toVariantMap(); + m_scopyVersion = content["scopy"].toMap()["version"].toString(); + m_m2kVersion = content["m2k-fw"].toMap()["version"].toString(); + m_scopyLink = content["scopy"].toMap()["link"].toString(); + m_m2kLink = content["m2k-fw"].toMap()["link"].toString(); + done = true; + Q_EMIT scopyVersionChanged(); + Q_EMIT m2kVersionChanged(); + +} + +void PhoneHome::onVersionsRequestFinished(QNetworkReply* reply) +{ + const auto err = reply->error(); + if (err == QNetworkReply::NoError) { + const auto data = reply->readAll().trimmed(); + const auto doc = QJsonDocument::fromJson(data); + extractVersionStringsFromJson(doc); + m_versionsJson = QString(data.trimmed()); + m_timestamp = QDateTime::currentMSecsSinceEpoch(); + Q_EMIT checkUpdatesFinished(m_timestamp); + + } else { + qDebug() << "Wasn't able to access versions database!\n"; + Q_EMIT checkUpdatesFinished(0); + } +} + +QString PhoneHome::getTimestamp() const +{ + return QString::number(m_timestamp); +} +void PhoneHome::setTimestamp(QString val) +{ + m_timestamp = val.toLongLong(); +} +QString PhoneHome::getVersionsJson() const +{ + return m_versionsJson; +} +void PhoneHome::setVersionsJson(const QString &val) +{ + m_versionsJson = val; + +} + diff --git a/src/phonehome.h b/src/phonehome.h new file mode 100644 index 0000000000..909b9da1f5 --- /dev/null +++ b/src/phonehome.h @@ -0,0 +1,78 @@ +/* + * Copyright (c) 2020 Analog Devices Inc. + * + * This file is part of Scopy + * (see http://www.github.com/analogdevicesinc/scopy). + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + + +#ifndef PHONEHOME_H +#define PHONEHOME_H +#include "preferences.h" +#include +#include +#include +#include +#include + +namespace adiscope { +class PhoneHome : public ApiObject +{ + Q_OBJECT +private: + QString m_lastRequestContent; + QString m_scopyVersion; + QString m_m2kVersion; + QString m_scopyLink; + QString m_m2kLink; + qint64 m_timestamp; + QString m_versionsJson; + PhoneHome* instance; + Preferences* preferences; + QSettings *settings; + bool done; + + + Q_PROPERTY(QString timestamp READ getTimestamp WRITE setTimestamp) + Q_PROPERTY(QString versionsJson READ getVersionsJson WRITE setVersionsJson) + +public: + PhoneHome(QSettings *settings, Preferences *preferences); + ~PhoneHome(); + void versionsRequest(bool force = false); + void extractVersionStringsFromJson(const QJsonDocument &doc); + QString getScopyVersion() const { return m_scopyVersion; } + QString getM2kVersion() { return m_m2kVersion; } + QString getScopyLink() { return m_scopyLink; } + QString getM2kLink() { return m_m2kLink; } + void setPreferences(Preferences* preferences); + QString getTimestamp() const; + void setTimestamp(QString); + QString getVersionsJson() const; + void setVersionsJson(const QString &val); + bool getDone() const; + +Q_SIGNALS: + void scopyVersionCheckRequested(); + void scopyVersionChanged(); + void m2kVersionChanged(); + void checkUpdatesFinished(qint64); + +public Q_SLOTS: + void onVersionsRequestFinished(QNetworkReply*); +}; +} +#endif // PHONEHOME_H diff --git a/src/plot_line_handle.cpp b/src/plot_line_handle.cpp index a0bf5fd1ec..1fa9887563 100644 --- a/src/plot_line_handle.cpp +++ b/src/plot_line_handle.cpp @@ -23,6 +23,7 @@ #include #include +#include #include @@ -662,14 +663,14 @@ void FreePlotLineHandleV::paintEvent(QPaintEvent *) setToolTip(""); } - const double textHeight = QFontMetrics(QFont(fontFamily, fontSize)).height(); - - QPointF textPos(0.0, m_height / 2.0 + textHeight / 4.0); + const QSizeF size = QFontMetricsF(QFont(fontFamily, fontSize)).size(Qt::TextSingleLine, m_name); + QRectF textRect(QPointF(0.0, 0.0), size); + textRect.moveCenter(QPointF(m_image.width() / 2.0, m_height / 2.0)); p.save(); p.setPen(QPen(QBrush(Qt::white), 20)); p.setFont(QFont(fontFamily, fontSize)); - p.drawText(textPos, m_name); + p.drawText(textRect, m_name); p.restore(); } else { p.drawPixmap(imageTopLeft, m_image); @@ -734,7 +735,11 @@ void RoundedHandleV::paintEvent(QPaintEvent *pv) QRect rect(0, 0, m_image.width() - 1, m_image.height() - 1); if (m_selected && m_selectable) { - p.setPen(QPen(Qt::white, 2, Qt::SolidLine)); + if (QIcon::themeName() == "scopy-default") { + p.setPen(QPen(Qt::white, 2, Qt::SolidLine)); + } else { + p.setPen(QPen(Qt::black, 2, Qt::SolidLine)); + } } else { p.setPen(QPen(m_roundRectColor, 1, Qt::SolidLine)); } diff --git a/src/plot_utils.cpp b/src/plot_utils.cpp index b94fec18a6..36233ebc70 100644 --- a/src/plot_utils.cpp +++ b/src/plot_utils.cpp @@ -54,6 +54,17 @@ bool PrefixFormatter::getTwoDecimalMode() QString PrefixFormatter::buildString(double value, QString prefix, QString unitType, int precision) const { + + if (m_trimZeroes) { + for (auto i = 0; i < precision; i++) { + const double singlePrecision = value * pow(10,i); + if (singlePrecision == round(singlePrecision)) { + precision = i; + break; + } + } + } + return QLocale().toString(value, 'f', precision) + " " + prefix + unitType; } @@ -75,6 +86,16 @@ int PrefixFormatter::findPrefixIndex(double value) const return index; } +bool PrefixFormatter::getTrimZeroes() const +{ + return m_trimZeroes; +} + +void PrefixFormatter::setTrimZeroes(bool trimZeroes) +{ + m_trimZeroes = trimZeroes; +} + QString PrefixFormatter::format(double value, QString unitType = "", int precision = 0) const { int index = findPrefixIndex(value); diff --git a/src/plot_utils.hpp b/src/plot_utils.hpp index f4520d3ebb..8dd6e0697a 100644 --- a/src/plot_utils.hpp +++ b/src/plot_utils.hpp @@ -35,6 +35,9 @@ namespace adiscope { virtual QString format(double value, QString unitType, int precision) const; void getFormatAttributes(double value, QString& prefix, double& scale) const; + bool getTrimZeroes() const; + void setTrimZeroes(bool trimZeroes); + protected: virtual QString buildString(double value, QString prefix, QString unitType, int precision) const; int findPrefixIndex(double value) const; @@ -43,6 +46,7 @@ namespace adiscope { std::vector> m_prefixes; int m_defaultPrefixIndex; bool m_twoDecimalMode; + bool m_trimZeroes; }; class MetricPrefixFormatter: public PrefixFormatter diff --git a/src/power_controller.cpp b/src/power_controller.cpp index c055bf771c..10a069bf58 100644 --- a/src/power_controller.cpp +++ b/src/power_controller.cpp @@ -104,6 +104,13 @@ PowerController::PowerController(struct iio_context *ctx, connect(ui->dac1, &QPushButton::toggled, this, &PowerController::toggleRunButton); connect(ui->dac2, &QPushButton::toggled, this, &PowerController::toggleRunButton); + std::vector scales {ui->scale_dac1, ui->scale_dac2}; + for (auto scale : scales) { + scale->setOrientation(Qt::Horizontal); + scale->setScalePosition(QwtThermo::LeadingScale); + scale->setOriginMode(QwtThermo::OriginCustom); + } + api->setObjectName(QString::fromStdString(Filter::tool_name( TOOL_POWER_CONTROLLER))); api->load(*settings); @@ -111,6 +118,8 @@ PowerController::PowerController(struct iio_context *ctx, readPreferences(); + ui->btnHelp->setUrl("https://wiki.analog.com/university/tools/m2k/scopy/power-supply"); + } PowerController::~PowerController() diff --git a/src/preferences.cpp b/src/preferences.cpp index f408f55af4..c94e1f0f94 100644 --- a/src/preferences.cpp +++ b/src/preferences.cpp @@ -30,6 +30,7 @@ #include #include #include +#include "application_restarter.h" using namespace adiscope; @@ -64,7 +65,12 @@ Preferences::Preferences(QWidget *parent) : m_instrument_notes_active(false), m_debug_messages_active(false), m_attemptTempLutCalib(false), - m_skipCalIfCalibrated(true) + m_skipCalIfCalibrated(true), + automatical_version_checking_enabled(false), + first_application_run(true), + check_updates_url("https://swdownloads.analog.com/cse/sw_versions.json"), + m_colorEditor(nullptr), + m_logging_enabled(false) { ui->setupUi(this); @@ -143,6 +149,11 @@ Preferences::Preferences(QWidget *parent) : Q_EMIT notify(); }); + connect(ui->enableLoggingCheckBox, &QCheckBox::stateChanged, [=](int state) { + m_logging_enabled = !!state; + Q_EMIT notify(); + }); + connect(ui->enableAnimCheckBox, &QCheckBox::stateChanged, [=](int state) { animations_enabled = (!state ? false : true); Q_EMIT notify(); @@ -177,6 +188,13 @@ Preferences::Preferences(QWidget *parent) : info.exec(); } }); + connect(ui->autoUpdatesCheckBox, &QCheckBox::stateChanged, [=](int state) { + automatical_version_checking_enabled = (!state ? false : true); + if(automatical_version_checking_enabled) { + Q_EMIT requestUpdateCheck(); + } + Q_EMIT notify(); + }); connect(ui->instrumentNotesCheckbox, &QCheckBox::stateChanged, [=](int state) { m_instrument_notes_active = (!state ? false : true); @@ -194,13 +212,6 @@ Preferences::Preferences(QWidget *parent) : pref_api->setObjectName(QString("Preferences")); pref_api->load(settings); - ui->label_restart->setVisible(false); - ////////////////////// - // TEMPORARY UNTIL ACTUAL IMPLEMENTATION - ui->tempLutCalibCheckbox->setVisible(false); - ui->label_28->setVisible(false); - ////////////////////////// - ui->languageCombo->addItems(getOptionsList()); @@ -212,7 +223,7 @@ Preferences::Preferences(QWidget *parent) : ui->languageCombo->addItem(language); ui->languageCombo->setCurrentText(language); if (m_initialized) { - ui->label_restart->setVisible(true); + requestRestart(); } } else { if(!getLanguageList().contains(language)){ @@ -220,12 +231,11 @@ Preferences::Preferences(QWidget *parent) : language = info.fileName().remove(".qm"); } ui->languageCombo->setCurrentText(language); - ui->label_restart->setVisible(false); } } else { language = lang; if (m_initialized) { - ui->label_restart->setVisible(true); + requestRestart(); } Q_EMIT notify(); @@ -236,6 +246,59 @@ Preferences::Preferences(QWidget *parent) : m_displaySamplingPoints = (!state ? false : true); Q_EMIT notify(); }); + + ui->comboBoxTheme->addItem("default"); + ui->comboBoxTheme->addItem("light"); + ui->comboBoxTheme->addItem("browse"); + connect(ui->comboBoxTheme, &QComboBox::currentTextChanged, [=](const QString &stylesheet) { + if (stylesheet == "browse") { + QString filePath = QFileDialog::getOpenFileName(this, + tr("Load Theme"), "", tr("Stylesheet files (*.qss)"), + nullptr, (m_useNativeDialogs ? QFileDialog::Options() : QFileDialog::DontUseNativeDialog)); + + if (filePath.isEmpty()) { + QSignalBlocker blocker(ui->comboBoxTheme); + ui->comboBoxTheme->setCurrentText(m_colorEditor->getCurrentStylesheet()); + return; + } + + m_colorEditor->setUserStylesheets({filePath}); + m_colorEditor->setCurrentStylesheet(filePath); + + requestRestart(); + + + } else { + m_colorEditor->setCurrentStylesheet(stylesheet); + + // force saving of the ini file as the new Scopy process + // when restarted will start before scopy closes. A race condition + // will appear on who gets to read/write to the .ini file first + QString preference_ini_file = getPreferenceIniFile(); + QSettings settings(preference_ini_file, QSettings::IniFormat); + pref_api->save(settings); + + requestRestart(); + } + }); +} + +void Preferences::requestRestart() +{ + QMessageBox msgBox; + msgBox.setText(tr("An application restart is required for these settings to take effect .. ")); + msgBox.setInformativeText(tr("Do you want to restart now ?")); + msgBox.setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel); + auto buttonOk = msgBox.button(QMessageBox::Ok); + auto buttonCancel = msgBox.button(QMessageBox::Cancel); + buttonOk->setText("Now"); + buttonCancel->setText("Later"); + int ret = msgBox.exec(); + + if (ret == QMessageBox::Ok) { + // restart: + adiscope::ApplicationRestarter::triggerRestart(); + } } QStringList Preferences::getOptionsList() @@ -325,6 +388,16 @@ void Preferences::showEvent(QShowEvent *event) ui->skipCalCheckbox->setChecked(m_skipCalIfCalibrated); // by this point the preferences menu is initialized m_initialized = true; + ui->autoUpdatesCheckBox->setChecked(automatical_version_checking_enabled); +#ifdef LIBM2K_ENABLE_LOG + ui->enableLoggingCheckBox->setChecked(m_logging_enabled); + ui->loggingUnavailableLabel->setVisible(false); +#else + ui->enableLoggingCheckBox->setChecked(false); + ui->enableLoggingCheckBox->setCheckable(false); + ui->loggingUnavailableLabel->setVisible(true); + m_logging_enabled = false; +#endif QWidget::showEvent(event); } @@ -334,7 +407,6 @@ QString Preferences::getPreferenceIniFile() QSettings settings; QFileInfo fileInfo(settings.fileName()); QString preference_ini_file = fileInfo.absolutePath() + "/Preferences.ini"; - return preference_ini_file; } @@ -571,6 +643,57 @@ void Preferences::setSkipCalIfCalibrated(bool val) { m_skipCalIfCalibrated = val; } +bool Preferences::getAutomatical_version_checking_enabled() const +{ + return automatical_version_checking_enabled; +} + +void Preferences::setAutomatical_version_checking_enabled(bool value) +{ + automatical_version_checking_enabled = value; +} + +QString Preferences::getCheck_updates_url() const +{ + return check_updates_url; +} + +void Preferences::setCheck_update_url(const QString& link) +{ + check_updates_url = link; +} + +bool Preferences::getFirst_application_run() const +{ + return first_application_run; +} + +void Preferences::setFirst_application_run(bool value) +{ + first_application_run = value; +} + + +void Preferences::setColorEditor(ScopyColorEditor *colorEditor) +{ + m_colorEditor = colorEditor; + QSignalBlocker blocker(ui->comboBoxTheme); + if (m_colorEditor->getUserStylesheets().size()) { + ui->comboBoxTheme->insertItem(2, m_colorEditor->getUserStylesheets().back()); + } + ui->comboBoxTheme->setCurrentText(m_colorEditor->getCurrentStylesheet()); + QIcon::setThemeName("scopy-" + m_colorEditor->getCurrentStylesheet()); +} + +bool Preferences::getLogging_enabled() const +{ + return m_logging_enabled; +} + +void Preferences::setLogging_enabled(bool value) +{ + m_logging_enabled = value; +} bool Preferences_API::getAnimationsEnabled() const { @@ -758,6 +881,34 @@ void Preferences_API::setSkipCalIfCalibrated(bool val) preferencePanel->m_skipCalIfCalibrated = val; } +QString Preferences_API::getCurrentStylesheet() const +{ + if (!preferencePanel->m_colorEditor) { + return ""; + } + + return preferencePanel->m_colorEditor->getCurrentStylesheet(); +} + +void Preferences_API::setCurrentStylesheet(const QString ¤tStylesheet) +{ +// preferencePanel->m_colorEditor->setCurrentStylesheet(currentStylesheet); +} + +QStringList Preferences_API::getUserStylesheets() const +{ + if (!preferencePanel->m_colorEditor) { + return QStringList(); + } + + return preferencePanel->m_colorEditor->getUserStylesheets(); +} + +void Preferences_API::setUserStylesheets(const QStringList &userStylesheets) +{ +// preferencePanel->m_colorEditor->setUserStylesheets(userStylesheets); +} + bool Preferences::hasNativeDialogs() const { return m_useNativeDialogs; @@ -807,3 +958,32 @@ void Preferences_API::setDebugMessagesActive(bool val) { preferencePanel->setDebugMessagesActive(val); } +bool Preferences_API::getAutomaticalVersionCheckingEnabled() const +{ + return preferencePanel->automatical_version_checking_enabled; +} + +void Preferences_API::setAutomaticalVersionCheckingEnabled(const bool &enabled) +{ + preferencePanel->automatical_version_checking_enabled = enabled; +} + +QString Preferences_API::getCheckUpdatesUrl() const +{ + return preferencePanel->check_updates_url; +} + +void Preferences_API::setCheckUpdatesUrl(const QString &link) +{ + preferencePanel->check_updates_url = link; +} + +bool Preferences_API::getFirstApplicationRun() const +{ + return preferencePanel->first_application_run; +} + +void Preferences_API::setFirstApplicationRun(const bool &first) +{ + preferencePanel->first_application_run = first; +} diff --git a/src/preferences.h b/src/preferences.h index 75422dfcc8..eedfda6d80 100644 --- a/src/preferences.h +++ b/src/preferences.h @@ -26,6 +26,8 @@ #include #include "apiObject.hpp" +//#include "coloreditor.h" +#include "scopy_color_editor.h" namespace Ui { @@ -100,6 +102,7 @@ class Preferences : public QWidget bool getDigital_decoders_enabled() const; void setDigital_decoders_enabled(bool value); + bool getShowADCFilters() const ; void setShowADCFilters(bool value); @@ -123,10 +126,26 @@ class Preferences : public QWidget bool getSkipCalIfCalibrated() const; void setSkipCalIfCalibrated(bool val); + bool getAutomatical_version_checking_enabled() const; + void setAutomatical_version_checking_enabled(bool value); + + QString getCheck_updates_url() const; + void setCheck_update_url(const QString &link); + + bool getFirst_application_run() const; + void setFirst_application_run(bool value); + + void requestRestart(); + void setColorEditor(ScopyColorEditor *colorEditor); + + bool getLogging_enabled() const; + void setLogging_enabled(bool value); + Q_SIGNALS: void notify(); void reset(); + void requestUpdateCheck(); public Q_SLOTS: @@ -159,6 +178,9 @@ private Q_SLOTS: bool show_ADC_digital_filters; bool mini_hist_enabled; bool digital_decoders_enabled; + bool automatical_version_checking_enabled; + QString check_updates_url; + bool first_application_run; bool m_initialized; bool m_useNativeDialogs; QString language; @@ -167,8 +189,11 @@ private Q_SLOTS: bool m_debug_messages_active; bool m_attemptTempLutCalib; bool m_skipCalIfCalibrated; + bool m_logging_enabled; Preferences_API *pref_api; + + ScopyColorEditor *m_colorEditor; }; class Preferences_API : public ApiObject @@ -198,6 +223,11 @@ class Preferences_API : public ApiObject Q_PROPERTY(bool debug_messages_active READ getDebugMessagesActive WRITE setDebugMessagesActive) Q_PROPERTY(bool attemptTempLutCalib READ getAttemptTempLutCalib WRITE setAttemptTempLutCalib) Q_PROPERTY(bool skipCalIfCalibrated READ getSkipCalIfCalibrated WRITE setSkipCalIfCalibrated) + Q_PROPERTY(bool automatical_version_checking_enabled READ getAutomaticalVersionCheckingEnabled WRITE setAutomaticalVersionCheckingEnabled) + Q_PROPERTY(QString check_updates_url READ getCheckUpdatesUrl WRITE setCheckUpdatesUrl) + Q_PROPERTY(bool first_application_run READ getFirstApplicationRun WRITE setFirstApplicationRun) + Q_PROPERTY(QString currentStylesheet READ getCurrentStylesheet WRITE setCurrentStylesheet) + Q_PROPERTY(QStringList userStylesheets READ getUserStylesheets WRITE setUserStylesheets) public: @@ -272,6 +302,21 @@ class Preferences_API : public ApiObject bool getSkipCalIfCalibrated() const; void setSkipCalIfCalibrated(bool val); + bool getAutomaticalVersionCheckingEnabled() const; + void setAutomaticalVersionCheckingEnabled(const bool& enabled); + + QString getCheckUpdatesUrl() const; + void setCheckUpdatesUrl(const QString& link); + + bool getFirstApplicationRun() const; + void setFirstApplicationRun(const bool& first); + + QString getCurrentStylesheet() const; + void setCurrentStylesheet(const QString ¤tStylesheet); + + QStringList getUserStylesheets() const; + void setUserStylesheets(const QStringList &userStylesheets); + private: Preferences *preferencePanel; diff --git a/src/qtgui_util.cc b/src/qtgui_util.cc index dc069c8a4e..78c7507838 100644 --- a/src/qtgui_util.cc +++ b/src/qtgui_util.cc @@ -40,6 +40,9 @@ */ #include "utils.h" +#include +#include +#include #include #include @@ -124,11 +127,46 @@ void Util::setWidgetNrOfChars(QWidget *w, } } -void Util::loadStylesheetFromFile(QString path, QWidget *widget) +QString Util::loadStylesheetFromFile(const QString &path) { QFile file(path); file.open(QFile::ReadOnly); QString stylesheet = QString::fromLatin1(file.readAll()); - widget->setStyleSheet(stylesheet); + return stylesheet; +} + +bool Util::compareNatural(const std::string& a, const std::string& b) { + if (a == b) { + return (a < b); + } else if (a.empty()) { + return true; + } else if (b.empty()) { + return false; + } else if (std::isdigit(a[0]) && !std::isdigit(b[0])) { + return true; + } else if (!std::isdigit(a[0]) && std::isdigit(b[0])) { + return false; + } else if (!std::isdigit(a[0]) && !std::isdigit(b[0])) { + if (a[0] == b[0]) { + return compareNatural(a.substr(1), b.substr(1)); + } + return (a < b); + } + + std::istringstream string_stream_a(a); + std::istringstream string_stream_b(b); + + int int_a, int_b; + std::string a_new, b_new; + + string_stream_a >> int_a; + string_stream_b >> int_b; + if (int_a != int_b) { + return (int_a < int_b); + } + + std::getline(string_stream_a, a_new); + std::getline(string_stream_b, b_new); + return (compareNatural(a_new, b_new)); } diff --git a/src/saverestoretoolsettings.h b/src/saverestoretoolsettings.h index 03ee570ef9..ce7374949e 100644 --- a/src/saverestoretoolsettings.h +++ b/src/saverestoretoolsettings.h @@ -9,7 +9,11 @@ namespace adiscope { class SaveRestoreToolSettings { - Q_DISABLE_COPY_MOVE(SaveRestoreToolSettings) + SaveRestoreToolSettings(const SaveRestoreToolSettings &) = delete; + SaveRestoreToolSettings &operator=(const SaveRestoreToolSettings &) = delete; + + SaveRestoreToolSettings(SaveRestoreToolSettings &&) = delete; + SaveRestoreToolSettings &operator=(SaveRestoreToolSettings &&) = delete; public: SaveRestoreToolSettings(Tool *tool); ~SaveRestoreToolSettings(); diff --git a/src/scopyExceptionHandler.h b/src/scopyExceptionHandler.h index c334a0f01b..67a4f404d1 100644 --- a/src/scopyExceptionHandler.h +++ b/src/scopyExceptionHandler.h @@ -6,25 +6,33 @@ #include #include #include +#include using namespace adiscope; #define HANDLE_EXCEPTION(e) \ - if(GetScopyApplicationInstance()->getDebugMode()) { \ +if (GetScopyApplicationInstance()->getDebugMode()) { \ + auto me = dynamic_cast(&e); \ + auto handleLambda = [me, e](){ \ QMessageBox msg; \ QString str; \ - auto me = dynamic_cast(&e);\ - if(me) { \ + if (me) { \ str = QString("Exception %1\ne.type() - %2\ne.what() - %3\ne.iioCode() - %4\nthrown from %5:%6\ncaught in %7:%8\nScopy git tag %9\n") \ .arg("m2k_exception").arg(me->type()).arg(me->what()).arg(me->iioCode()).arg(QString::fromStdString(me->file())).arg(QString::number(me->line())).arg(__FILE__).arg(__LINE__).arg(SCOPY_VERSION_GIT); \ } else { \ str = QString("Exception %1\ncaught in %2:%3\nScopy git tag %4\n").arg(e.what()).arg(__FILE__).arg(__LINE__).arg(SCOPY_VERSION_GIT); \ } \ - if(WriteScopyMinidump()) { \ + if (WriteScopyMinidump()) { \ str = str + "Created minidump."; \ - }\ - msg.setText(str);\ - msg.exec();\ + } \ + msg.setText(str); \ + msg.exec(); \ + }; \ + if (GetScopyApplicationInstance()->thread() != QThread::currentThread()) { \ + QMetaObject::invokeMethod(GetScopyApplicationInstance(), handleLambda, Qt::BlockingQueuedConnection); \ + } else { \ + handleLambda(); \ } \ +} \ #endif // SCOPYEXCEPTIONHANDLER_H diff --git a/src/scopy_color_editor.cpp b/src/scopy_color_editor.cpp new file mode 100644 index 0000000000..c642d41e91 --- /dev/null +++ b/src/scopy_color_editor.cpp @@ -0,0 +1,556 @@ +/* + * Copyright (c) 2021 Analog Devices Inc. + * + * This file is part of Scopy + * (see http://www.github.com/analogdevicesinc/scopy). + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "scopy_color_editor.h" +#include "ui_scopy_color_editor.h" + +#include +#include +#include +#include +#include +#include + +#include +#include "application_restarter.h" + +void ScopyColorEditor::parseAndBuildMap(QString toParse) +{ + QStringList print = toParse.split("{").join("").split("}"); + + QString textEditText = ""; + + for (auto token : print) { + // TODO: skip empty parts is only available in qt >= 5.14 +// QStringList ttoken = token.split("\n", Qt::SkipEmptyParts); + QStringList ttoken; + if (ttoken.size()) { + for (auto t : ttoken) { + if (t.startsWith("/*")) continue; //ignore comments + textEditText += t; + textEditText += '\n'; + break; + } + + int i = 0; + QString mapKey = ""; + for (; i < ttoken.size(); ++i) { + if (ttoken[i].startsWith("/*")) continue; // ignore comments + mapKey = ttoken[i]; + break; + } + + if (mapKey == "") { + break; + } + + m_entityStylesheetMap[mapKey] = QStringList(); + + i++; // advance so we skip the key + + for (; i < ttoken.size(); ++i) { + m_entityStylesheetMap[mapKey].push_back(ttoken[i]); + } + } + } +} + +ScopyColorEditor::ScopyColorEditor(QApplication *app, QWidget *parent) + : QWidget(parent) + , m_ui(new Ui::ScopyColorEditor) + , m_app(app) + , m_currentStylesheet("default") + , m_sh(nullptr) +{ + m_ui->setupUi(this); + + m_ui->searchLineEdit->setAttribute(Qt::WA_MacShowFocusRect, false); + + QDir themes(":/stylesheets/themes/"); + QStringList stylesheets = themes.entryList(); + + for (const QString &entry : stylesheets) { + m_ui->stylesheetsCmbBox->addItem(entry); + } + + connect(m_ui->copyBtn, &QPushButton::clicked, + this, &ScopyColorEditor::copy); + connect(m_ui->removeBtn, &QPushButton::clicked, + this, &ScopyColorEditor::remove); + connect(m_ui->stylesheetsCmbBox, &QComboBox::currentTextChanged, + this, &ScopyColorEditor::stylesheetSelected); + connect(m_ui->searchLineEdit, &QLineEdit::textChanged, + this, &ScopyColorEditor::search); + connect(m_ui->tabWidget, &QTabWidget::currentChanged, + this, &ScopyColorEditor::tabChanged); + connect(m_ui->nextMatchBtn, &QPushButton::clicked, + this, &ScopyColorEditor::nextMatch); + connect(m_ui->prevMatchBtn, &QPushButton::clicked, + this, &ScopyColorEditor::prevMatch); + connect(m_ui->saveBtn, &QPushButton::clicked, + this, &ScopyColorEditor::advancedEditorChanged); + connect(m_ui->advancedEditorTextEdit, &QTextEdit::textChanged, [=](){ + m_ui->saveBtn->setEnabled(true); + }); + connect(m_ui->restartBtn, &QPushButton::clicked, [=](){ + adiscope::ApplicationRestarter::triggerRestart(); + }); + + m_sh = new SearchHighlight(m_ui->advancedEditorTextEdit->document()); + + QFile file(":/stylesheets/themes/global.qss"); + file.open(QFile::ReadOnly); + QString toParse = QString::fromLatin1(file.readAll()); + +// disable color editor for now +// parseAndBuildMap(toParse); +// m_ui->advancedEditorTextEdit->setText(toParse); +// buildMenuForMap(); +} + +ScopyColorEditor::~ScopyColorEditor() +{ + delete m_ui; +} + +QString ScopyColorEditor::getStyleSheet() const +{ + QString source = m_currentStylesheet; + if (!m_userStylesheets.contains(source)) { + source = ":/stylesheets/" + source +".qss"; + } + + QFile file(source); + file.open(QFile::ReadOnly); + + return QString::fromLatin1(file.readAll()); +} + +QString ScopyColorEditor::getCurrentStylesheet() const +{ + return m_currentStylesheet; +} + +void ScopyColorEditor::setCurrentStylesheet(const QString ¤tStylesheet) +{ + if (currentStylesheet.length()) { + m_currentStylesheet = currentStylesheet; + } + +// m_app->setStyleSheet(getStyleSheet()); + +// m_ui->stylesheetsCmbBox->setCurrentText(m_currentStylesheet); + +// const bool isUserStylesheet = m_userStylesheets.contains(m_currentStylesheet); + +// m_ui->removeBtn->setEnabled(isUserStylesheet); +// m_ui->tabWidget->setVisible(isUserStylesheet); +// m_ui->searchLineEdit->setVisible(isUserStylesheet); +// m_ui->nextMatchBtn->setVisible(isUserStylesheet); +// m_ui->prevMatchBtn->setVisible(isUserStylesheet); +} + +QStringList ScopyColorEditor::getUserStylesheets() const +{ + return m_userStylesheets; +} + +void ScopyColorEditor::setUserStylesheets(const QStringList &userStylesheets) +{ + m_userStylesheets = userStylesheets; +// for (const QString &entry : m_userStylesheets) { +// QFile entryFile(entry); +// if (!entryFile.exists()) { continue; } +// m_ui->stylesheetsCmbBox->addItem(entry); +// } +} + +void ScopyColorEditor::buildMenuForMap() +{ + for (auto it = m_entityStylesheetMap.begin(); it != m_entityStylesheetMap.end(); ++it) { +// m_scrollArea->widget()->layout()->addWidget(new QPushButton(it.key())); + auto layout = m_ui->scrollArea->widget()->layout(); + QWidget *colorEditor = new QWidget(); + colorEditor->setObjectName("colorEditor"); + QVBoxLayout *vBox = new QVBoxLayout(); + colorEditor->setLayout(vBox); + vBox->addWidget(new QLabel(it.key())); + colorEditor->setStyleSheet("QWidget#colorEditor{background-color: rgba(0, 0, 0, 60);}"); + +// std::cout << it.key().toStdString() << std::endl; + + bool toAdd = false; + + for (auto line : it.value()) { + std::vector controls; + int index = 0; + while ((index = line.indexOf("rgba(", index)) != -1) { +// std::cout << "Found rgba( on line: " << line.toStdString() << " at index: " << index << std::endl; + auto btn = new QPushButton(line.split(":")[0].replace(" ", "")); + btn->setProperty("key", QVariant(it.key())); + btn->setProperty("line", QVariant(line)); + btn->setProperty("index", QVariant(index)); + + controls.push_back(btn); + ++index; + } + + index = 0; + while ((index = line.indexOf("#", index)) != -1) { +// std::cout << "Found # on line: " << line.toStdString() << " at index: " << index << std::endl; + auto btn = new QPushButton(line.split(":")[0].replace(" ", "")); + btn->setProperty("key", QVariant(it.key())); + btn->setProperty("line", QVariant(line)); + btn->setProperty("index", QVariant(index)); + + controls.push_back(btn); + ++index; + } + + QHBoxLayout *btnLayout = nullptr; + if (controls.size()) { + btnLayout = new QHBoxLayout(); + } + for (auto b : controls) { + connect(b, &QPushButton::clicked, + this, &ScopyColorEditor::changeColor); + btnLayout->addWidget(b); + toAdd = true; + } + if (btnLayout) { + btnLayout->addSpacerItem(new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Expanding)); + vBox->addLayout(btnLayout); + vBox->addSpacerItem(new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Expanding)); + } + } + + if (toAdd) { + m_colorEditors.append(colorEditor); + layout->addWidget(colorEditor); + } + } +} + +bool ScopyColorEditor::handleRgbaColor(const QString &key, const QString &line, int index, QPushButton *btn) +{ + int endIndex = -1; + for (int i = index; i < line.size(); ++i) { + if (line[i] == ")") { + endIndex = i; + } + } + + std::cout << line[index].toLatin1() << " " << line[endIndex].toLatin1() << std::endl; + + QString colorString = ""; + for (int i = index; i <= endIndex; ++i) { + colorString += line.at(i); + } + + std::cout << colorString.toStdString() << std::endl; + + QStringList values = colorString.split("(")[1].split(")")[0].replace(" ", "").split(","); + int r = 0, g = 0, b = 0, a = 0; + + r = values[0].toInt(); + g = values[1].toInt(); + b = values[2].toInt(); + if (values.size() == 4) { + a = values[3].toInt(); + } + + std::cout << r << " " << g << " " << b << " " << a << std::endl; + QColor oldColor = QColor(); + oldColor.setRed(r); + oldColor.setGreen(g); + oldColor.setBlue(b); + oldColor.setAlpha(a); + + QColor newColor = QColorDialog::getColor(oldColor); + if (!newColor.isValid()) { + return false; + } + + QString newColorString = "rgba(" + QString::number(newColor.red()) + + ", " + QString::number(newColor.green()) + + ", " + QString::number(newColor.blue()) + + ", " + QString::number(newColor.alpha()) + + ")"; + + std::cout << newColorString.toStdString() << std::endl; + + QStringList value = m_entityStylesheetMap[key]; + for (int i = 0; i < value.size(); ++i) { + if (value[i] == line) { + value[i].replace(index, endIndex - index + 1, newColorString); + btn->setProperty("line", QVariant(value[i])); + } + } + m_entityStylesheetMap[key] = value; + + return true; +} + +bool ScopyColorEditor::handleHexColor(const QString &key, const QString &line, int index, QPushButton *btn) +{ + int endIndex = -1; + for (int i = index; i < line.size(); ++i) { + if (line[i] == " " || line[i] == ";") { + endIndex = i; + } + } + + QString colorString = ""; + for (int i = index; i < endIndex; ++i) { + colorString += line.at(i); + } + + QColor oldColor(colorString); + + QColor newColor = QColorDialog::getColor(oldColor); + if (!newColor.isValid()) { + return false; + } + + QString newColorString = newColor.name(); + + QStringList value = m_entityStylesheetMap[key]; + for (int i = 0; i < value.size(); ++i) { + if (value[i] == line) { + value[i].replace(index, endIndex - index, newColorString); + btn->setProperty("line", QVariant(value[i])); + } + } + m_entityStylesheetMap[key] = value; + + return true; +} + +void ScopyColorEditor::writeNewStylesheetToFile(QString stylesheet) +{ + QString source = m_currentStylesheet; + if (!m_userStylesheets.contains(source)) { + source = ":/stylesheets/themes/" + source; + } + QFile file(source); + file.open(QFile::ReadWrite | QFile::Truncate | QFile::Text); + QTextStream in(&file); + in << stylesheet; +} + +void ScopyColorEditor::rebuildAndApplyStylesheet() +{ + QString stylesheet = ""; + for (auto it = m_entityStylesheetMap.begin(); it != m_entityStylesheetMap.end(); ++it) { + stylesheet += it.key() + " {\n"; + + for (auto line : it.value()) { + stylesheet += line + "\n"; + } + + stylesheet += "}\n\n"; + } + + m_app->setStyleSheet(stylesheet); + + m_ui->advancedEditorTextEdit->setText(stylesheet); + + writeNewStylesheetToFile(stylesheet); +} + +void ScopyColorEditor::createNewFile() +{ + +} + +void ScopyColorEditor::loadFile() +{ + +} + +void ScopyColorEditor::changeColor() +{ + QPushButton *btn = qobject_cast(QObject::sender()); + + QString key = btn->property("key").toString(); + QString line = btn->property("line").toString(); + int index = btn->property("index").toInt(); + + bool changed = false; + if (line[index] == "r") { + changed = handleRgbaColor(key, line, index, btn); + } else if (line[index] == "#") { + changed = handleHexColor(key, line, index, btn); + } + + if (changed) { + rebuildAndApplyStylesheet(); + } +} + +void ScopyColorEditor::copy() +{ + QStringList filter; + filter += QString(tr("Qt stylesheet (*.qss)")); + + QString selectedFilter = filter[0]; + + QString fileName = QFileDialog::getSaveFileName(this, + tr("Copy"), "", filter.join(";;"), + &selectedFilter, QFileDialog::Options()); + + if (!fileName.length()) { + return; + } + + if (fileName.split(".").size() <= 1) { + // file name w/o extension. Let's append it + fileName += ".qss"; + } + + QString source = m_ui->stylesheetsCmbBox->currentText(); + if (!m_userStylesheets.contains(source)) { + source = ":/stylesheets/themes/" + source; + } + qDebug() << QFile::copy(source, fileName); + + m_userStylesheets.append(fileName); + m_ui->stylesheetsCmbBox->addItem(fileName); +} + +void ScopyColorEditor::remove() +{ + QString file = m_ui->stylesheetsCmbBox->currentText(); + if (m_userStylesheets.contains(file)) { + m_userStylesheets.removeOne(file); + m_ui->stylesheetsCmbBox->removeItem(m_ui->stylesheetsCmbBox->currentIndex()); + } +} + +QString ScopyColorEditor::clearAndRebuildEditor(const QString &stylesheet) +{ + m_entityStylesheetMap.clear(); + auto layout = m_ui->scrollArea->widget()->layout(); + for (QWidget *widget : m_colorEditors) { + layout->removeWidget(widget); + widget->deleteLater(); + } + + m_colorEditors.clear(); + + QString source = stylesheet; + if (!m_userStylesheets.contains(source)) { + source = ":/stylesheets/themes/" + source; + } + QFile file(source); + file.open(QFile::ReadOnly); + QString toParse = QString::fromLatin1(file.readAll()); + parseAndBuildMap(toParse); + buildMenuForMap(); + + return source; +} + +void ScopyColorEditor::stylesheetSelected(const QString &stylesheet) +{ + const bool isUserStylesheet = m_userStylesheets.contains(stylesheet); + + m_ui->removeBtn->setEnabled(isUserStylesheet); + m_ui->tabWidget->setVisible(isUserStylesheet); + m_ui->searchLineEdit->setVisible(isUserStylesheet); + m_ui->nextMatchBtn->setVisible(isUserStylesheet); + m_ui->prevMatchBtn->setVisible(isUserStylesheet); + + QString source = clearAndRebuildEditor(stylesheet); + QFile file(source); + file.open(QFile::ReadOnly); + QString toParse = QString::fromLatin1(file.readAll()); + m_ui->advancedEditorTextEdit->setText(toParse); + + rebuildAndApplyStylesheet(); + + m_currentStylesheet = stylesheet; +} + +void ScopyColorEditor::search(const QString &searchText) +{ + for (QWidget *w : m_colorEditors) { + QLabel *label = qobject_cast(w->layout()->itemAt(0)->widget()); + bool hasSearchedWords = label->text().contains(searchText); + w->setVisible(hasSearchedWords); + } + + m_sh->searchText(searchText); +} + +void ScopyColorEditor::tabChanged(int index) +{ + if (m_ui->tabWidget->widget(index) != m_ui->advancedEditorWidget) { + m_ui->nextMatchBtn->setDisabled(true); + m_ui->prevMatchBtn->setDisabled(true); + } else { + m_ui->nextMatchBtn->setEnabled(true); + m_ui->prevMatchBtn->setEnabled(true); + } +} + +void ScopyColorEditor::nextMatch() +{ + m_ui->advancedEditorTextEdit->find(m_ui->searchLineEdit->text(), QTextDocument::FindCaseSensitively); + m_ui->advancedEditorTextEdit->ensureCursorVisible(); + m_sh->rehighlight(); +} + +void ScopyColorEditor::prevMatch() +{ + m_ui->advancedEditorTextEdit->find(m_ui->searchLineEdit->text(), QTextDocument::FindCaseSensitively | QTextDocument::FindBackward); + m_ui->advancedEditorTextEdit->ensureCursorVisible(); + m_sh->rehighlight(); +} + +void ScopyColorEditor::advancedEditorChanged() +{ + writeNewStylesheetToFile(m_ui->advancedEditorTextEdit->toPlainText()); + clearAndRebuildEditor(m_currentStylesheet); + rebuildAndApplyStylesheet(); + m_ui->saveBtn->setDisabled(true); +} + +SearchHighlight::SearchHighlight(QTextDocument *parent) + : QSyntaxHighlighter(parent) +{ + m_format.setBackground(Qt::green); +} + +void SearchHighlight::searchText(const QString &text) +{ + m_pattern = QRegularExpression(text); + rehighlight();; +} + +void SearchHighlight::highlightBlock(const QString &text) +{ + QRegularExpressionMatchIterator matchIterator = m_pattern.globalMatch(text); + while (matchIterator.hasNext()) { + QRegularExpressionMatch match = matchIterator.next(); +// qDebug() << "Match at: " << match.capturedStart(); + setFormat(match.capturedStart(), match.capturedLength(), m_format); + } +} diff --git a/src/scopy_color_editor.h b/src/scopy_color_editor.h new file mode 100644 index 0000000000..4ad4255913 --- /dev/null +++ b/src/scopy_color_editor.h @@ -0,0 +1,111 @@ +/* + * Copyright (c) 2021 Analog Devices Inc. + * + * This file is part of Scopy + * (see http://www.github.com/analogdevicesinc/scopy). + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef SCOPY_COLOR_EDITOR_H +#define SCOPY_COLOR_EDITOR_H + +#include +#include +#include +#include + +#include +#include +#include +#include + +namespace Ui { +class ScopyColorEditor; +} + +class SearchHighlight : public QSyntaxHighlighter +{ + Q_OBJECT +public: + explicit SearchHighlight(QTextDocument *parent = nullptr); + + void searchText(const QString &text); + +protected: + virtual void highlightBlock(const QString &text) override; + +private: + QRegularExpression m_pattern; + QTextCharFormat m_format; +}; + +class ScopyColorEditor : public QWidget +{ + Q_OBJECT + +public: + explicit ScopyColorEditor(QApplication *app, QWidget *parent = nullptr); + ~ScopyColorEditor(); + + QString getStyleSheet() const; + + QString getCurrentStylesheet() const; + void setCurrentStylesheet(const QString ¤tStylesheet); + + QStringList getUserStylesheets() const; + void setUserStylesheets(const QStringList &userStylesheets); + +private: + void buildMenuForMap(); + bool handleRgbaColor(const QString &key, const QString &line, int index, + QPushButton *btn); + bool handleHexColor(const QString &key, const QString &line, int index, + QPushButton *btn); + + void rebuildAndApplyStylesheet(); + + void createNewFile(); + void loadFile(); + void parseAndBuildMap(QString toParse); + void writeNewStylesheetToFile(QString stylesheet); + +private Q_SLOTS: + void changeColor(); + void copy(); + void remove(); + void stylesheetSelected(const QString &stylesheet); + void search(const QString &searchText); + void tabChanged(int index); + void nextMatch(); + void prevMatch(); + void advancedEditorChanged(); + +private: + Ui::ScopyColorEditor *m_ui; + + QVector m_colorEditors; + QMap m_entityStylesheetMap; + QScrollArea *m_scrollArea{nullptr}; + QTextEdit *m_textEdit{nullptr}; + QApplication *m_app; + + QString m_currentStylesheet; + QStringList m_userStylesheets; + + SearchHighlight *m_sh; + QString clearAndRebuildEditor(const QString &stylesheet); +}; + +#endif // SCOPY_COLOR_EDITOR_H diff --git a/src/scopyaboutdialog.cpp b/src/scopyaboutdialog.cpp new file mode 100644 index 0000000000..34733b918d --- /dev/null +++ b/src/scopyaboutdialog.cpp @@ -0,0 +1,56 @@ +#include "scopyaboutdialog.hpp" +#include "ui_scopyaboutdialog.h" +#include +#include +#include +#include +#include +#include +#include + +using namespace adiscope; + + +ScopyAboutDialog::ScopyAboutDialog(QWidget *parent) : + QDialog(parent), + ui(new Ui::ScopyAboutDialog), + landingPage(QUrl("qrc:/about.html")) +{ + ui->setupUi(this); + ui->centeredUnderLogo->setText("Released under GPLv3"); + + QString stylesheet = Util::loadStylesheetFromFile(":stylesheets/stylesheets/browserStylesheet.qss"); + ui->aboutTextBrowser->document()->setDefaultStyleSheet(stylesheet); + + ui->aboutTextBrowser->setWordWrapMode(QTextOption::WordWrap); + ui->aboutTextBrowser->setSource(landingPage); + ui->checkForUpdatesLbl->setText(""); + + connect(ui->backButton,SIGNAL(clicked()),ui->aboutTextBrowser,SLOT(backward())); + connect(ui->okButton,SIGNAL(clicked()),this,SLOT(accept())); + connect(this,SIGNAL(finished(int)),this,SLOT(dismiss(int))); + connect(ui->checkForUpdatesBtn, &QPushButton::clicked, [=](int state) { + ui->checkForUpdatesLbl->setText(tr("Checking server for updates ... ")); + Q_EMIT forceCheckForUpdates(); + }); +} + +void ScopyAboutDialog::dismiss(int) +{ + ui->aboutTextBrowser->clearHistory(); + ui->aboutTextBrowser->setSource(landingPage); +} + +ScopyAboutDialog::~ScopyAboutDialog() +{ + delete ui; +} + +void ScopyAboutDialog::updateCheckUpdateLabel(qint64 timestamp) +{ + if(timestamp) { + ui->checkForUpdatesLbl->setText(tr("Last checked for updates at ") + QDateTime::fromMSecsSinceEpoch(timestamp).toString("dddd d MMMM yyyy hh:mm:ss")); + } else { + ui->checkForUpdatesLbl->setText(tr("Check for updates failed ... ")); + } +} diff --git a/src/scopyaboutdialog.hpp b/src/scopyaboutdialog.hpp new file mode 100644 index 0000000000..2c5dbd510e --- /dev/null +++ b/src/scopyaboutdialog.hpp @@ -0,0 +1,32 @@ +#ifndef SCOPYABOUTDIALOG_HPP +#define SCOPYABOUTDIALOG_HPP + +#include +#include + +namespace Ui { +class ScopyAboutDialog; +} + +namespace adiscope { +class ScopyAboutDialog : public QDialog +{ + Q_OBJECT + +public: + explicit ScopyAboutDialog(QWidget *parent = nullptr); + ~ScopyAboutDialog(); + +Q_SIGNALS: + void forceCheckForUpdates(); + +public Q_SLOTS: + void dismiss(int); + void updateCheckUpdateLabel(qint64); + +private: + Ui::ScopyAboutDialog *ui; + QUrl landingPage; +}; +} +#endif // SCOPYABOUTDIALOG_HPP diff --git a/src/session_info.cpp b/src/session_info.cpp new file mode 100644 index 0000000000..7e98c0e75c --- /dev/null +++ b/src/session_info.cpp @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2021 Analog Devices Inc. + * + * This file is part of Scopy + * (see http://www.github.com/analogdevicesinc/scopy). + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "session_info.h" + +#include "config.h" + +#include + +using namespace adiscope; + +SessionInfo::SessionInfo() + : ApiObject() + , m_lastConnectedFirmware{} + , m_lastConnectedSerialNumber{} + +{ + setObjectName("SessionInfo"); +} + +QString SessionInfo::getOperatingSystem() const { return QSysInfo::prettyProductName(); } + +QString SessionInfo::getGitTag() const { return SCOPY_VERSION_GIT; } + +QString SessionInfo::getLastConnectedFirmware() const { return m_lastConnectedFirmware; } + +void SessionInfo::setLastConnectedFirmware(const QString& firmware) { m_lastConnectedFirmware = firmware; } + +QString SessionInfo::getLastConnectedSerialNumber() const { return m_lastConnectedSerialNumber; } + +void SessionInfo::setLastConnectedSerialNumber(const QString& serial) { m_lastConnectedSerialNumber = serial; } diff --git a/src/session_info.h b/src/session_info.h new file mode 100644 index 0000000000..c88110d1b2 --- /dev/null +++ b/src/session_info.h @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2021 Analog Devices Inc. + * + * This file is part of Scopy + * (see http://www.github.com/analogdevicesinc/scopy). + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef SESSIONINFO_H +#define SESSIONINFO_H + +#include "apiObject.hpp" + +#include +#include + +namespace adiscope { +class SessionInfo : public ApiObject +{ + Q_OBJECT + Q_PROPERTY(QString os READ getOperatingSystem WRITE setOperatingSystem) + Q_PROPERTY(QString gitTag READ getGitTag WRITE setGitTag) + Q_PROPERTY(QString firmware READ getLastConnectedFirmware WRITE setLastConnectedFirmware) + Q_PROPERTY(QString serialNumber READ getLastConnectedSerialNumber WRITE setLastConnectedSerialNumber) +public: + explicit SessionInfo(); + + // write functions had to be written for all the properties + // otherwise none of them would've been saved + QString getOperatingSystem() const; + void setOperatingSystem(const QString& /*os*/) {} + + QString getGitTag() const; + void setGitTag(const QString& /*tag*/) {} + + QString getLastConnectedFirmware() const; + void setLastConnectedFirmware(const QString& firmware); + + QString getLastConnectedSerialNumber() const; + void setLastConnectedSerialNumber(const QString& serial); + +private: + QString m_lastConnectedFirmware; + QString m_lastConnectedSerialNumber; +}; +} // namespace adiscope +#endif // SESSIONINFO_H diff --git a/src/signal_generator.cpp b/src/signal_generator.cpp index 1cfc92233e..87d01cb479 100644 --- a/src/signal_generator.cpp +++ b/src/signal_generator.cpp @@ -378,7 +378,7 @@ SignalGenerator::SignalGenerator(struct iio_context *_ctx, Filter *filt, connect(ui->btnNoiseCollapse,&QPushButton::clicked, [=](bool check) { - ui->wNoise->setVisible(!check); + ui->wNoise->setVisible(check); }); unsigned int nb_channels = m_m2k_analogout->getNbChannels(); @@ -491,7 +491,10 @@ SignalGenerator::SignalGenerator(struct iio_context *_ctx, Filter *filt, ui->plot->insertWidget(0,plot, 0, 0); connect(ui->btnAppearanceCollapse, SIGNAL(toggled(bool)),ui->wAppearance, SLOT(setVisible(bool))); - ui->wAppearance->hide(); + + connect(ui->btnSigGenAutoscale, &QPushButton::toggled, [=](bool checked){ + plot->setAutoScale(checked); + }); fileManager = new FileManager("Signal Generator"); @@ -500,7 +503,6 @@ SignalGenerator::SignalGenerator(struct iio_context *_ctx, Filter *filt, api->load(*settings); api->js_register(engine); - renameConfigPanel(); connect(ui->rightMenu, SIGNAL(finished(bool)), this, SLOT(rightMenuFinished(bool))); @@ -593,6 +595,8 @@ SignalGenerator::SignalGenerator(struct iio_context *_ctx, Filter *filt, // Reduce the extent of the yLeft axis because it is not needed plot->axisWidget(QwtPlot::yLeft)->scaleDraw()->setMinimumExtent(65); + + ui->btnHelp->setUrl("https://wiki.analog.com/university/tools/m2k/scopy/siggen"); } SignalGenerator::~SignalGenerator() @@ -1083,8 +1087,8 @@ void SignalGenerator::tabChanged(int index) void SignalGenerator::updatePreview() { - static const float MAX_PREVIEW_RANGE = (float)(SHRT_MAX); - static const float MIN_PREVIEW_RANGE = (float)(SHRT_MIN); + static const float MAX_PREVIEW_RANGE = AMPLITUDE_VOLTS; + static const float MIN_PREVIEW_RANGE = -AMPLITUDE_VOLTS; const int nb_points_correction = 16; // generate slightly more points to avoid incomplete scope_sink_f buffer gr::top_block_sptr top = make_top_block("Signal Generator Update"); @@ -1938,18 +1942,6 @@ void adiscope::SignalGenerator::channelWidgetMenuToggled(bool checked) triggerRightMenuToggle(cw->id(), checked); } -void adiscope::SignalGenerator::renameConfigPanel() -{ - /*ui->config_panel->setTitle(QString("Configuration for %1").arg( - channels[currentChannel]->fullName()));*/ - QString stylesheet = "QTabBar::tab:selected {\ - color: white;\ - margin-top: 0px;\ - border-bottom: 2px solid " - + channels[currentChannel]->color().name() + "}"; - ui->tabWidget->setStyleSheet(stylesheet); -} - int SignalGenerator::sg_waveform_to_idx(enum sg_waveform wave) { switch (wave) { @@ -2051,7 +2043,6 @@ void SignalGenerator::updateRightMenuForChn(int chIdx) ui->type->setCurrentIndex(sg_waveform_to_idx(ptr->waveform)); waveformUpdateUi(ptr->waveform); - renameConfigPanel(); ui->tabWidget->setCurrentIndex((int) ptr->type); resizeTabWidget((int)ptr->type); } diff --git a/src/signal_generator.hpp b/src/signal_generator.hpp index b6fe9a28ca..fff07a6ebd 100644 --- a/src/signal_generator.hpp +++ b/src/signal_generator.hpp @@ -180,7 +180,6 @@ class SignalGenerator : public Tool QSharedPointer getData(QWidget *obj); QSharedPointer getCurrentData(); - void renameConfigPanel(); void start(); void resetZoom(); diff --git a/src/signal_generator_api.cpp b/src/signal_generator_api.cpp index 6b797a64ab..7a8b403681 100644 --- a/src/signal_generator_api.cpp +++ b/src/signal_generator_api.cpp @@ -838,7 +838,17 @@ void SignalGenerator_API::setLineThickness(const QList& list) } } int index = (int)(gen->getCurrentData()->lineThickness / 0.5) - 1; - gen->ui->cbLineThickness->setCurrentIndex(index); + gen->ui->cbLineThickness->setCurrentIndex(index); +} + +bool SignalGenerator_API::getAutoscale() const +{ + return gen->ui->btnSigGenAutoscale->isChecked(); +} + +void SignalGenerator_API::setAutoscale(bool checked) +{ + gen->ui->btnSigGenAutoscale->setChecked(checked); } } diff --git a/src/signal_generator_api.hpp b/src/signal_generator_api.hpp index 3224dc7113..70944548cc 100644 --- a/src/signal_generator_api.hpp +++ b/src/signal_generator_api.hpp @@ -93,6 +93,8 @@ class SignalGenerator_API : public ApiObject Q_PROPERTY(QList line_thickness READ getLineThickness WRITE setLineThickness) + Q_PROPERTY(bool autoscale READ getAutoscale WRITE setAutoscale); + public: bool running() const; @@ -171,6 +173,10 @@ class SignalGenerator_API : public ApiObject QList getLineThickness() const; void setLineThickness(const QList& list); + bool getAutoscale() const; + void setAutoscale(bool checked); + + Q_INVOKABLE void show(); diff --git a/src/singletone_wrapper.h b/src/singletone_wrapper.h new file mode 100644 index 0000000000..cae947c963 --- /dev/null +++ b/src/singletone_wrapper.h @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2020 Analog Devices Inc. + * + * This file is part of Scopy + * (see http://www.github.com/analogdevicesinc/scopy). + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef SINGLETONE_WRAPPER_H +#define SINGLETONE_WRAPPER_H + +namespace adiscope { +template +class SingleToneWrapper { +public: + SingleToneWrapper() = default; + + SingleToneWrapper(const SingleToneWrapper&) = delete; + SingleToneWrapper& operator=(const SingleToneWrapper &) = delete; +public: + static SingleToneWrapper& getInstance() { + static SingleToneWrapper instance; + return instance; + } + + void setWrapped(T wrapped) { + m_wrapped = wrapped; + } + + T getWrapped() { + return m_wrapped; + } + +private: + T m_wrapped; +}; + +} // namespace adiscope + +#endif // SINGLETONE_WRAPPER_H diff --git a/src/spectrum_analyzer.cpp b/src/spectrum_analyzer.cpp index 1f7dbd539a..0b699b110e 100644 --- a/src/spectrum_analyzer.cpp +++ b/src/spectrum_analyzer.cpp @@ -206,8 +206,6 @@ SpectrumAnalyzer::SpectrumAnalyzer(struct iio_context *ctx, Filter *filt, settings_group->setExclusive(true); fft_plot = new FftDisplayPlot(m_adc_nb_channels, this); - fft_plot->canvas()->setStyleSheet(QString("QwtPlotCanvas { " - "background-color: #141416; }")); fft_plot->disableLegend(); // Disable mouse interactions with the axes until they are in a working state fft_plot->setXaxisMouseGesturesEnabled(false); @@ -605,6 +603,8 @@ SpectrumAnalyzer::SpectrumAnalyzer(struct iio_context *ctx, Filter *filt, connect(ui->btnExport, &QPushButton::clicked, this, &SpectrumAnalyzer::btnExportClicked); readPreferences(); + + ui->btnHelp->setUrl("https://wiki.analog.com/university/tools/m2k/scopy/spectrumanalyzer"); } SpectrumAnalyzer::~SpectrumAnalyzer() @@ -2124,8 +2124,8 @@ void SpectrumAnalyzer::on_cmb_units_currentIndexChanged(const QString& unit) switch (magType) { case FftDisplayPlot::VPEAK: case FftDisplayPlot::VRMS: - unit_per_div->setValue(1); - bottom->setValue(-100); + unit_per_div->setValue(2); + bottom->setValue(-10); fft_plot->setAxisScale(QwtPlot::yLeft, bottom->value(), top->value()); break; case FftDisplayPlot::VROOTHZ: @@ -2134,7 +2134,7 @@ void SpectrumAnalyzer::on_cmb_units_currentIndexChanged(const QString& unit) fft_plot->setAxisScale(QwtPlot::yLeft, bottom_scale->value(), top_scale->value()); break; default: - unit_per_div->setValue(1); + unit_per_div->setValue(20); bottom->setValue(-200); fft_plot->setAxisScale(QwtPlot::yLeft, bottom->value(), top->value()); break; diff --git a/src/spinbox_a.cpp b/src/spinbox_a.cpp index 08a32285a7..cc3c709780 100644 --- a/src/spinbox_a.cpp +++ b/src/spinbox_a.cpp @@ -21,6 +21,7 @@ #include "spinbox_a.hpp" #include "completion_circle.h" #include "apiobjectmanager.h" +#include "singletone_wrapper.h" #include "ui_spinbox_a.h" @@ -56,13 +57,6 @@ SpinBoxA::SpinBoxA(QWidget *parent) : QWidget(parent), ui->setupUi(this); ui->SBA_LineEdit->setValidator(m_validator); - QFile file(":stylesheets/stylesheets/spinbox_type_a.qss"); - file.open(QFile::ReadOnly); - QString styleSheet = QString::fromLatin1(file.readAll()); - - const QString& currentStylesheet = this->styleSheet(); - this->setStyleSheet(currentStylesheet + styleSheet); - ui->SBA_LineEdit->installEventFilter(this); ui->SBA_CompletionCircle->installEventFilter(this); @@ -119,7 +113,7 @@ SpinBoxA::SpinBoxA(vector >units, const QString& name, QSettings oldSettings; QFile tempFile(oldSettings.fileName() + ".bak"); - m_settings = new QSettings(tempFile.fileName(), QSettings::IniFormat); + m_settings = SingleToneWrapper::getInstance().getWrapped(); m_sba_api->load(*m_settings); m_is_step_down = false; @@ -130,8 +124,8 @@ SpinBoxA::~SpinBoxA() current_id--; m_sba_api->save(*m_settings); + delete m_sba_api; - delete m_settings; delete ui; } diff --git a/src/tool_launcher.cpp b/src/tool_launcher.cpp index b3780640e3..b1222a8dd1 100644 --- a/src/tool_launcher.cpp +++ b/src/tool_launcher.cpp @@ -35,6 +35,8 @@ #include "user_notes.hpp" #include "external_script_api.hpp" #include "animationmanager.h" +#include "singletone_wrapper.h" +#include "phonehome.h" #include "ui_device.h" #include "ui_tool_launcher.h" @@ -102,7 +104,8 @@ ToolLauncher::ToolLauncher(QString prevCrashDump, QWidget *parent) : initialCalibrationFlag(true), skip_calibration_if_already_calibrated(true), m_adc_tools_failed(false), - m_dac_tools_failed(false) + m_dac_tools_failed(false), + about(nullptr) { if (!isatty(STDIN_FILENO)) notifier.setEnabled(false); @@ -128,13 +131,19 @@ ToolLauncher::ToolLauncher(QString prevCrashDump, QWidget *parent) : connect(ui->btnNotes, &QPushButton::clicked, [=](){ swapMenu(static_cast(notesPanel)); }); + about = new ScopyAboutDialog(this); + connect(ui->btnAbout, &QPushButton::clicked, [=](){ + if(!about) + about = new ScopyAboutDialog(this); + about->setModal(false); + about->show(); + about->raise(); + about->activateWindow(); + }); connect(prefPanel, &Preferences::reset, this, &ToolLauncher::resetSession); connect(prefPanel, &Preferences::notify, this, &ToolLauncher::readPreferences); - const QVector& uris = searchDevices(); - for (const QString& each : uris) - addContext(each); current = ui->homeWidget; @@ -192,6 +201,7 @@ ToolLauncher::ToolLauncher(QString prevCrashDump, QWidget *parent) : scopy.copy(tempFile.fileName()); settings = new QSettings(tempFile.fileName(), QSettings::IniFormat); + SingleToneWrapper::getInstance().setWrapped(settings); tl_api->ApiObject::load(*settings); @@ -207,19 +217,49 @@ ToolLauncher::ToolLauncher(QString prevCrashDump, QWidget *parent) : ui->saveLbl->setVisible(opened); ui->loadLbl->setVisible(opened); ui->prefBtn->setText(opened ? tr("Preferences") : ""); + menu->hideMenuText(!opened); }); connect(ui->stackedWidget, SIGNAL(moved(int)), this, SLOT(pageMoved(int))); + m_phoneHome = new PhoneHome(settings, prefPanel); + if (prefPanel->getFirst_application_run()) { + QMessageBox* msgBox = new QMessageBox(this); + + QSize mSize = msgBox->sizeHint(); // here's what you want, not m.width()/height() + QRect screenRect = QDesktopWidget().screenGeometry(); + + msgBox->setText("Do you want to automatically check for newer Scopy and m2k-firmware versions?"); + msgBox->setInformativeText("You can change this anytime from the Preferences menu."); + msgBox->setStandardButtons(msgBox->Yes | msgBox->No); + msgBox->setModal(false); + msgBox->show(); + msgBox->activateWindow(); + msgBox->move( QPoint( screenRect.x() + screenRect.width()/2 - mSize.width()/2, + screenRect.y() + screenRect.height()/2 - mSize.height()/2 ) ); + connect(msgBox->button(QMessageBox::Yes), &QAbstractButton::pressed, [&] () { + prefPanel->setAutomatical_version_checking_enabled(true); + prefPanel->setFirst_application_run(false); + }); + connect(msgBox->button(QMessageBox::No), &QAbstractButton::pressed, [&] () { + prefPanel->setFirst_application_run(false); + }); + } + connect(prefPanel, &Preferences::requestUpdateCheck, [=]() { m_phoneHome->versionsRequest(true);}); + connect(about, &ScopyAboutDialog::forceCheckForUpdates,[=](){ + m_phoneHome->versionsRequest(true); + }); + connect(m_phoneHome, SIGNAL(checkUpdatesFinished(qint64)), about, SLOT(updateCheckUpdateLabel(qint64))); + + setupHomepage(); ui->stackedWidget->setCurrentIndex(0); setupAddPage(); readPreferences(); - ui->stackedWidget->setStyleSheet("background-color:black;"); this->installEventFilter(this); - ui->btnConnect->hide(); + ui->btnConnect->hide(); _setupToolMenu(); @@ -233,13 +273,29 @@ ToolLauncher::ToolLauncher(QString prevCrashDump, QWidget *parent) : menu->getToolMenuItemFor(TOOL_SPECTRUM_ANALYZER)->setCalibrating(false); menu->getToolMenuItemFor(TOOL_NETWORK_ANALYZER)->setCalibrating(false); - if (okc.second) { - selectedDev->infoPage()->setCalibrationStatusLabel(tr("Calibration skipped because already calibrated.")); - } else if (okc.first) { + if (!okc.second && okc.first) { selectedDev->infoPage()->setCalibrationStatusLabel(tr("Calibrated")); } + }); + + const QVector& uris = searchDevices(); + for (const QString& each : uris) + addContext(each); + + if (prefPanel->getAutomatical_version_checking_enabled()) { + m_phoneHome->versionsRequest(); + } else { + + } + + // TO DO: Remove temporary spaces + // set home icon + ui->btnHome->setText(" Home"); + ui->btnHome->setIcon(QIcon::fromTheme("house")); + ui->btnHome->setIconSize(QSize(32,32)); + } void ToolLauncher::_setupToolMenu() @@ -319,6 +375,7 @@ void ToolLauncher::_toolSelected(enum tool tool) void ToolLauncher::readPreferences() { + m_logging_enable = prefPanel->getLogging_enabled(); m_use_decoders = prefPanel->getDigital_decoders_enabled(); debugger_enabled = prefPanel->getDebugger_enabled(); skip_calibration_if_already_calibrated = prefPanel->getSkipCalIfCalibrated(); @@ -631,10 +688,13 @@ ToolLauncher::~ToolLauncher() delete alive_timer; delete infoWidget; - + delete m_phoneHome; tl_api->ApiObject::save(*settings); + m_sessionInfo.save(*settings); + + delete settings; + SingleToneWrapper::getInstance().setWrapped(nullptr); - delete settings; delete tl_api; delete ui; @@ -806,6 +866,29 @@ void ToolLauncher::setupHomepage() QWidget *homepage = new QWidget(ui->stackedWidget); QVBoxLayout *layout = new QVBoxLayout(homepage); + QLabel* versionLabel = new QLabel(this); + + versionLabel->setText(tr("Auto update checks not enabled. Check preferences menu.")); + connect(m_phoneHome, &PhoneHome::scopyVersionChanged, this, [=] () { + if (m_phoneHome->getScopyVersion().isEmpty()) { + //versionLabel->setText(tr("Unable to check update server!")); + } else if (m_phoneHome->getScopyVersion() != QString("v" + QString(PROJECT_VERSION))) { + versionLabel->setText(tr("Version ") + m_phoneHome->getScopyVersion() + " of Scopy was released. " + + "getScopyLink() + + tr("\">Click to update ")); + versionLabel->setTextFormat(Qt::RichText); + versionLabel->setTextInteractionFlags(Qt::TextBrowserInteraction); + versionLabel->setOpenExternalLinks(true); + } else { + versionLabel->setText(tr("Scopy is up to date!")); + } + versionLabel->setVisible(true); + }); + + connect(m_phoneHome, &PhoneHome::scopyVersionCheckRequested, this ,[=]() { + versionLabel->setText(tr("Checking server for updates ... ")); + }); + welcome = new QTextBrowser(homepage); welcome->setFrameShape(QFrame::NoFrame); welcome->setOpenExternalLinks(true); @@ -831,26 +914,7 @@ void ToolLauncher::setupHomepage() layout->addWidget(reportRegion); connect(reportBtn, &QPushButton::clicked, [=](){ - std::string os = QSysInfo::prettyProductName().toStdString(); - std::string gittag = SCOPY_VERSION_GIT; - std::string fw = ""; - if (ctx) { - fw = std::string(iio_context_get_attr_value(ctx, "fw_version")); - } - QSettings settings; - QFileInfo info(settings.fileName()); - std::string head = "https://github.com/analogdevicesinc/scopy/issues/new?title=%3CInstrument%3E:%20%3CShort%20description%20of%20the%20bug%3E&body="; - std::string os_version_urlstring = "OS%20Version: " + os; - std::string fw_version_urlstring = "%0AFW%20Version: " + fw; - std::string gittag_urlstring = "%0ASW%20Version: " + gittag; - std::string description_urlstring = "%0A%0ADescription%20of%20the%20bug:%3Cdescription%3E%0ASteps%20to%20reproduce:" - "%0A-%0A-%0A%0AThe%20ini%20files%20might%20be%20useful%20to%20reproduce%20the%20error."; - std::string ini_file_urlstring = "%0AThe%20ini%20file%20is%20located%20at: " + info.absoluteFilePath().toStdString(); - std::string finalpart = "%0APlease%20consider%20attaching%20it.&labels=bug,reported-from-scopy"; - QUrl url(QString::fromStdString(head + os_version_urlstring + - fw_version_urlstring + gittag_urlstring + - description_urlstring + ini_file_urlstring + - finalpart)); + const QUrl url("https://wiki.analog.com/university/tools/m2k/scopy/report"); QDesktopServices::openUrl(url); }); @@ -864,6 +928,10 @@ void ToolLauncher::setupHomepage() index = new QTextBrowser(ui->stackedWidget); index->setFrameShape(QFrame::NoFrame); + layout->addWidget(versionLabel); + versionLabel->raise(); + versionLabel->setVisible(true); + if (indexFile == "") { return; } @@ -1048,9 +1116,12 @@ void adiscope::ToolLauncher::disconnect() destroyContext(); loadToolTips(false); resetStylesheets(); + auto infoPg = selectedDev->infoPage(); + if (infoPg) { + infoPg->setConnectionStatusLabel("Not connected"); + infoPg->setCalibrationStatusLabel(""); + } search_timer->start(TIMER_TIMEOUT_MS); - selectedDev->infoPage()->setConnectionStatusLabel("Not connected"); - selectedDev->infoPage()->setCalibrationStatusLabel(""); } /* Update the list of devices now */ @@ -1100,8 +1171,30 @@ void adiscope::ToolLauncher::connectBtn_clicked(bool pressed) if (connectedDev != selectedDev) { /* Connect to the selected device, if any */ if (selectedDev) { +#ifdef LIBM2K_ENABLE_LOG + QString path = QFileInfo(settings->fileName()).absolutePath(); + path.append("/ScopyLog-"); + if (m_logging_enable) { + // logging enabled + google::SetLogDestination(google::GLOG_INFO, ""); + google::SetLogDestination(google::GLOG_INFO, path.toStdString().c_str()); + // do not create a symlink + google::SetLogSymlink(google::GLOG_INFO, ""); + // log build info + QFile fileBuildInfo(":/buildinfo.html"); + fileBuildInfo.open(QIODevice::ReadOnly | QIODevice::Text); + auto buildInfo = QString(fileBuildInfo.readAll()); + fileBuildInfo.close(); + buildInfo = buildInfo.remove(QRegExp("<(/?)(body|pre)>")); + LOG(INFO) << buildInfo.toLocal8Bit().toStdString(); + } else { + // logging disabled + google::SetLogDestination(google::GLOG_INFO, ""); + } +#endif QString uri = selectedDev->uri(); selectedDev->infoPage()->identifyDevice(false); + search_timer->stop(); bool success = switchContext(uri); if (success) { selectedDev->setConnected(true, false, ctx); @@ -1110,14 +1203,13 @@ void adiscope::ToolLauncher::connectBtn_clicked(bool pressed) selectedDev->infoPage()->identifyDevice(true); setDynamicProperty(ui->btnConnect, "connected", true); - search_timer->stop(); - + alive_timer->start(ALIVE_TIMER_TIMEOUT_MS); ui->saveBtn->parentWidget()->setEnabled(true); - } else { setDynamicProperty(ui->btnConnect, "failed", true); selectedDev->setConnected(false, true); selectedDev->connectButton()->setEnabled(true); + disconnect(); } Q_EMIT connectionDone(success); @@ -1348,14 +1440,19 @@ QPair adiscope::ToolLauncher::calibrate() bool skipCalib = false; if (calib->isInitialized()) { - if (prefPanel->getAttemptTempLutCalib()) { - //calib->calibrateFromTemperature(); - //selectedDev->infoPage()->setCalibrationStatusLabel(tr("Calibrated from temperature @ ") + "50G"); + if (prefPanel->getAttemptTempLutCalib() && calib->hasContextCalibration()) { + float calibTemperature = calib->calibrateFromContext(); + selectedDev->infoPage()->setCalibrationStatusLabel(tr("Calibrated from look-up table @ ") + QString::number(calibTemperature) + " deg. Celsius" ); + skipCalib = true; ok = true; + } else { + // always calibrate if initial flag is set + // if it's calibrated and skip_calibration_if_calibrated - do not calibrate if (!(initialCalibrationFlag && skip_calibration_if_already_calibrated && calib->isCalibrated() )) { ok = calib->calibrateAll(); } else { + selectedDev->infoPage()->setCalibrationStatusLabel(tr("Calibration skipped because already calibrated.")); skipCalib = true; ok = true; } @@ -1477,6 +1574,9 @@ void adiscope::ToolLauncher::enableDacBasedTools() if (m_adc_tools_failed || m_dac_tools_failed) { disconnect(); + } else { + m_sessionInfo.setLastConnectedFirmware(selectedDev->infoPage()->getFirmwareVersion()); + m_sessionInfo.setLastConnectedSerialNumber(selectedDev->infoPage()->getSerialNumber()); } } @@ -1500,78 +1600,84 @@ bool adiscope::ToolLauncher::switchContext(const QString& uri) } m_m2k = m2kOpen(ctx, ""); - - alive_timer->start(ALIVE_TIMER_TIMEOUT_MS); +#ifdef LIBM2K_ENABLE_LOG + m_m2k->logAllAttributes(); +#endif filter = new Filter(ctx); calib = new Calibration(ctx, &js_engine); calib->initialize(); - if (filter->compatible(TOOL_PATTERN_GENERATOR) - || filter->compatible(TOOL_DIGITALIO)) { - dioManager = new DIOManager(ctx, filter); - } + try { + if (filter->compatible(TOOL_PATTERN_GENERATOR) + || filter->compatible(TOOL_DIGITALIO)) { + dioManager = new DIOManager(ctx, filter); + } - if (filter->compatible(TOOL_LOGIC_ANALYZER) - || filter->compatible(TOOL_PATTERN_GENERATOR)) { + if (filter->compatible(TOOL_LOGIC_ANALYZER) + || filter->compatible(TOOL_PATTERN_GENERATOR)) { - if (!m_use_decoders) { - search_timer->stop(); + if (!m_use_decoders) { + search_timer->stop(); - QMessageBox info(this); - info.setText(tr("Digital decoders support is disabled. Some features may be missing")); - info.exec(); - } else { - bool success = loadDecoders(QCoreApplication::applicationDirPath() + - "/decoders"); + QMessageBox info(this); + info.setText(tr("Digital decoders support is disabled. Some features may be missing")); + info.exec(); + } else { + bool success = loadDecoders(QCoreApplication::applicationDirPath() + + "/decoders"); - if (!success) { - search_timer->stop(); + if (!success) { + search_timer->stop(); - QMessageBox error(this); - error.setText(tr("There was a problem initializing libsigrokdecode. Some features may be missing")); - error.exec(); + QMessageBox error(this); + error.setText(tr("There was a problem initializing libsigrokdecode. Some features may be missing")); + error.exec(); + } } } - } - if (filter->compatible(TOOL_DIGITALIO)) { - dio = new DigitalIO(nullptr, filter, menu->getToolMenuItemFor(TOOL_DIGITALIO), - dioManager, &js_engine, this); - toolList.push_back(dio); - connect(dio, &DigitalIO::showTool, [=]() { - menu->getToolMenuItemFor(TOOL_DIGITALIO)->getToolBtn()->click(); - }); - } + if (filter->compatible(TOOL_DIGITALIO)) { + dio = new DigitalIO(nullptr, filter, menu->getToolMenuItemFor(TOOL_DIGITALIO), + dioManager, &js_engine, this); + toolList.push_back(dio); + connect(dio, &DigitalIO::showTool, [=]() { + menu->getToolMenuItemFor(TOOL_DIGITALIO)->getToolBtn()->click(); + }); + } - if (filter->compatible(TOOL_POWER_CONTROLLER)) { - power_control = new PowerController(ctx, menu->getToolMenuItemFor(TOOL_POWER_CONTROLLER), - &js_engine, this); - toolList.push_back(power_control); - connect(power_control, &PowerController::showTool, [=]() { - menu->getToolMenuItemFor(TOOL_POWER_CONTROLLER)->getToolBtn()->click(); - }); - } + if (filter->compatible(TOOL_POWER_CONTROLLER)) { + power_control = new PowerController(ctx, menu->getToolMenuItemFor(TOOL_POWER_CONTROLLER), + &js_engine, this); + toolList.push_back(power_control); + connect(power_control, &PowerController::showTool, [=]() { + menu->getToolMenuItemFor(TOOL_POWER_CONTROLLER)->getToolBtn()->click(); + }); + } - if (filter->compatible(TOOL_LOGIC_ANALYZER)) { - logic_analyzer = new logic::LogicAnalyzer(ctx, filter, menu->getToolMenuItemFor(TOOL_LOGIC_ANALYZER), - &js_engine, this); - toolList.push_back(logic_analyzer); - connect(logic_analyzer, &logic::LogicAnalyzer::showTool, [=]() { - menu->getToolMenuItemFor(TOOL_LOGIC_ANALYZER)->getToolBtn()->click(); - }); - } + if (filter->compatible(TOOL_LOGIC_ANALYZER)) { + logic_analyzer = new logic::LogicAnalyzer(ctx, filter, menu->getToolMenuItemFor(TOOL_LOGIC_ANALYZER), + &js_engine, this); + toolList.push_back(logic_analyzer); + connect(logic_analyzer, &logic::LogicAnalyzer::showTool, [=]() { + menu->getToolMenuItemFor(TOOL_LOGIC_ANALYZER)->getToolBtn()->click(); + }); + } - if (filter->compatible((TOOL_PATTERN_GENERATOR))) { - pattern_generator = new logic::PatternGenerator(ctx, filter, - menu->getToolMenuItemFor(TOOL_PATTERN_GENERATOR), &js_engine, dioManager, this); - toolList.push_back(pattern_generator); - connect(pattern_generator, &logic::PatternGenerator::showTool, [=]() { - menu->getToolMenuItemFor(TOOL_PATTERN_GENERATOR)->getToolBtn()->click(); - }); + if (filter->compatible((TOOL_PATTERN_GENERATOR))) { + pattern_generator = new logic::PatternGenerator(ctx, filter, + menu->getToolMenuItemFor(TOOL_PATTERN_GENERATOR), &js_engine, dioManager, this); + toolList.push_back(pattern_generator); + connect(pattern_generator, &logic::PatternGenerator::showTool, [=]() { + menu->getToolMenuItemFor(TOOL_PATTERN_GENERATOR)->getToolBtn()->click(); + }); + } + } + catch (libm2k::m2k_exception &e) { + return false; } connect(menu->getToolMenuItemFor(TOOL_NETWORK_ANALYZER)->getToolStopBtn(), @@ -1708,6 +1814,8 @@ void ToolLauncher::toolDetached(bool detached) } tool->setVisible(detached); + + tool->setMinimumSize(910, 490); } void ToolLauncher::closeEvent(QCloseEvent *event) @@ -1740,6 +1848,11 @@ Calibration *ToolLauncher::getCalibration() const return calib; } +PhoneHome *ToolLauncher::getPhoneHome() const +{ + return m_phoneHome; +} + bool ToolLauncher::eventFilter(QObject *watched, QEvent *event) { if (event->type() == QEvent::MouseButtonRelease) { diff --git a/src/tool_launcher.hpp b/src/tool_launcher.hpp index 4ebafea9f0..6e98b7f65f 100644 --- a/src/tool_launcher.hpp +++ b/src/tool_launcher.hpp @@ -41,6 +41,7 @@ #include "oscilloscope.hpp" #include "power_controller.hpp" #include "signal_generator.hpp" +#include "scopyaboutdialog.hpp" #include "logicanalyzer/logic_analyzer.h" #include "patterngenerator/pattern_generator.h" @@ -53,6 +54,7 @@ #include "device_widget.hpp" #include "connectDialog.hpp" #include "toolmenu.h" +#include "session_info.h" extern "C" { struct iio_context; @@ -93,6 +95,8 @@ class ToolLauncher : public QMainWindow bool hasNativeDialogs() const; void setNativeDialogs(bool nativeDialogs); + PhoneHome *getPhoneHome() const; + Q_SIGNALS: void connectionDone(bool success); void adcCalibrationDone(); @@ -190,6 +194,7 @@ private Q_SLOTS: Ui::ToolLauncher *ui; struct iio_context *ctx; libm2k::context::M2k *m_m2k; + ScopyAboutDialog *about; ToolMenu *menu; @@ -257,6 +262,7 @@ private Q_SLOTS: DeviceWidget* selectedDev; bool m_use_decoders; + bool m_logging_enable; bool m_useNativeDialogs; @@ -265,6 +271,10 @@ private Q_SLOTS: void _setupToolMenu(); void saveRunningToolsBeforeCalibration(); void stopToolsBeforeCalibration(); + + PhoneHome* m_phoneHome; + + SessionInfo m_sessionInfo; }; } #endif // M2K_TOOL_LAUNCHER_H diff --git a/src/tool_launcher_api.cpp b/src/tool_launcher_api.cpp index bd494686e5..1917f980f7 100644 --- a/src/tool_launcher_api.cpp +++ b/src/tool_launcher_api.cpp @@ -249,6 +249,7 @@ void ToolLauncher_API::save(const QString& file) QSettings settings(file, QSettings::IniFormat); this->ApiObject::save(settings); + this->tl->m_sessionInfo.save(settings); if (tl->notesPanel) tl->notesPanel->api()->save(settings); diff --git a/src/toolmenu.cpp b/src/toolmenu.cpp index 725b490485..d57b7f33d9 100644 --- a/src/toolmenu.cpp +++ b/src/toolmenu.cpp @@ -36,17 +36,17 @@ ToolMenu::ToolMenu(Preferences *preferences, QWidget *parent): << tr("Digital IO") << tr("Voltmeter") << tr("Power Supply") << tr("Debugger") << tr("Calibration"); - d_availableIcons = QStringList() << ":/menu/oscilloscope.png" - << ":/menu/spectrum_analyzer.png" - << ":/menu/network_analyzer.png" - << ":/menu/signal_generator.png" - << ":/menu/logic_analyzer.png" - << ":/menu/pattern_generator.png" - << ":/menu/io.png" - << ":/menu/voltmeter.png" - << ":/menu/power_supply.png" - << ":/menu/debugger.png" - << ":/menu/calibration.png"; + d_availableIcons = QStringList() << "oscilloscope" + << "spectrum_analyzer" + << "network_analyzer" + << "signal_generator" + << "logic_analyzer" + << "pattern_generator" + << "io" + << "voltmeter" + << "power_supply" + << "debugger" + << "calibration"; _loadState(); d_buttonGroup = new QButtonGroup(this); @@ -117,6 +117,13 @@ QButtonGroup *ToolMenu::getButtonGroup() return d_buttonGroup; } +void ToolMenu::hideMenuText(bool hidden) +{ + for (int i = 0; i < d_tools.size(); ++i) { + static_cast(d_tools[i].first)->hideText(hidden); + } +} + void ToolMenu::_updateToolList(short from, short to) { if (d_items == d_tools.size()) { diff --git a/src/toolmenu.h b/src/toolmenu.h index e29bad90c7..5f8e82d98c 100644 --- a/src/toolmenu.h +++ b/src/toolmenu.h @@ -43,6 +43,8 @@ class ToolMenu : public BaseMenu QButtonGroup *getButtonGroup(); + void hideMenuText(bool hidden); + Q_SIGNALS: void toolSelected(tool); void enableInfoWidget(bool); diff --git a/src/toolmenuitem.cpp b/src/toolmenuitem.cpp index 9c8ef9f208..063b3eb77d 100644 --- a/src/toolmenuitem.cpp +++ b/src/toolmenuitem.cpp @@ -26,7 +26,7 @@ #include #include #include - +#include "dynamicWidget.hpp" #include "dynamicWidget.hpp" #include "utils.h" @@ -44,8 +44,7 @@ ToolMenuItem::ToolMenuItem(QString name, QString iconPath, QWidget *parent): _buildUI(); // Load stylesheets - Util::loadStylesheetFromFile(":stylesheets/stylesheets/toolMenuItem.qss", this); - Util::loadStylesheetFromFile(":stylesheets/stylesheets/stopButton.qss", d_toolStopBtn); + this->setStyleSheet(Util::loadStylesheetFromFile(":stylesheets/stylesheets/toolMenuItem.qss")); setDynamicProperty(this, "allowHover", true); @@ -130,6 +129,15 @@ void ToolMenuItem::setCalibrating(bool calibrating) } } +void ToolMenuItem::hideText(bool hidden) +{ + if(hidden) { + d_toolBtn->setText(""); + } else { + d_toolBtn->setText(d_name); + } +} + void ToolMenuItem::setDisabled(bool disabled) { BaseMenuItem::setDisabled(disabled); @@ -183,10 +191,11 @@ void ToolMenuItem::_buildUI() layout->addWidget(d_toolBtn); layout->addWidget(d_toolStopBtn); + setDynamicProperty(d_toolStopBtn, "stopButton", true); d_toolStopBtn->setMaximumSize(32, 32); d_toolBtn->setMinimumHeight(42); - d_toolBtn->setIcon(QIcon(d_iconPath)); + d_toolBtn->setIcon(QIcon::fromTheme(d_iconPath)); d_toolBtn->setCheckable(true); d_toolBtn->setIconSize(QSize(32, 32)); diff --git a/src/toolmenuitem.h b/src/toolmenuitem.h index 14d1e2ce79..44776a57b7 100644 --- a/src/toolmenuitem.h +++ b/src/toolmenuitem.h @@ -46,6 +46,8 @@ class ToolMenuItem : public BaseMenuItem void setCalibrating(bool calibrating); + void hideText(bool hidden); + Q_SIGNALS: void detach(); void toggleButtonGroup(bool); diff --git a/src/trigger_settings.cpp b/src/trigger_settings.cpp index da63fd0fcc..ff4f152c3c 100644 --- a/src/trigger_settings.cpp +++ b/src/trigger_settings.cpp @@ -74,7 +74,8 @@ TriggerSettings::TriggerSettings(M2kAnalogIn* libm2k_adc, trigger_raw_delay(0), daisyChainCompensation(0), m_trigger_in(false), - m_has_external_trigger_out(false) + m_has_external_trigger_out(false), + digital_trigger_was_on(false) { initInstrumentStrings(); ui->setupUi(this); @@ -169,6 +170,10 @@ TriggerSettings::TriggerSettings(M2kAnalogIn* libm2k_adc, wheelEventGuard->installEventRecursively(this); ui->mixedSignalLbl->setVisible(false); + ui->btnLogicAnalyzerTriggers->setVisible(false); + + connect(ui->btnLogicAnalyzerTriggers, &QPushButton::clicked, + this, &TriggerSettings::showLogicAnalyzerTriggerSettings); } TriggerSettings::~TriggerSettings() @@ -253,6 +258,12 @@ void TriggerSettings::enableMixedSignalView() ui->extern_en->setDisabled(true); ui->extern_to_en->setDisabled(true); ui->mixedSignalLbl->setVisible(true); + ui->btnLogicAnalyzerTriggers->setVisible(true); + ui->btnLogicAnalyzerTriggers->setEnabled(true); + digital_trigger_was_on = ui->digital_controls->isEnabled(); + if (digital_trigger_was_on) { + ui->digital_controls->setDisabled(true); + } } void TriggerSettings::disableMixedSignalView() @@ -260,6 +271,11 @@ void TriggerSettings::disableMixedSignalView() ui->extern_en->setEnabled(true); ui->extern_to_en->setEnabled(true); ui->mixedSignalLbl->setVisible(false); + ui->btnLogicAnalyzerTriggers->setVisible(false); + ui->btnLogicAnalyzerTriggers->setDisabled(true); + if (digital_trigger_was_on) { + ui->digital_controls->setEnabled(true); + } } void TriggerSettings::setDcLevelCoupled(double value) diff --git a/src/trigger_settings.hpp b/src/trigger_settings.hpp index cfb395e410..5e98953b16 100644 --- a/src/trigger_settings.hpp +++ b/src/trigger_settings.hpp @@ -84,6 +84,7 @@ namespace adiscope { void levelChanged(double); void analogTriggerEnabled(bool); void triggerModeChanged(int); + void showLogicAnalyzerTriggerSettings(); public Q_SLOTS: void setTriggerDelay(long long); @@ -145,6 +146,8 @@ namespace adiscope { libm2k::M2kHardwareTrigger* m_trigger; bool m_trigger_in; + bool digital_trigger_was_on; + std::vector> externalTriggerOutMapping; QList trigg_configs; diff --git a/src/user_notes.cpp b/src/user_notes.cpp index 9e9d52cb09..97713420e3 100644 --- a/src/user_notes.cpp +++ b/src/user_notes.cpp @@ -61,8 +61,7 @@ UserNotes::UserNotes(QWidget *parent) : QFile tempFile(oldSettings.fileName() + ".bak"); QSettings settings(tempFile.fileName(), QSettings::IniFormat); - notes_api->load(settings); - ui->stackedWidget->setStyleSheet("background-color: black;"); + notes_api->load(settings); ui->stackedWidget->set_controls_enabled(false); } @@ -104,17 +103,13 @@ void UserNotes::browse_btn_clicked(bool clicked) setDynamicProperty(ui->pathLineEdit, "invalid", false); ui->pathWarning->setText(""); - QString pathToFile = ""; - auto export_dialog( new QFileDialog( this ) ); - export_dialog->setWindowModality( Qt::WindowModal ); - export_dialog->setFileMode( QFileDialog::AnyFile ); - export_dialog->setAcceptMode( QFileDialog::AcceptOpen ); - export_dialog->setNameFilters({"(*.html)"}); - if (export_dialog->exec()){ - QFile f(export_dialog->selectedFiles().at(0)); - pathToFile = f.fileName(); - ui->pathLineEdit->setText(pathToFile); - ui->pathLineEdit->setStyleSheet(""); + QString fileName = QFileDialog::getOpenFileName(this, + tr("Import"), "", tr("Html (*.html);;"), + nullptr); + + if (fileName.length()) { + ui->pathLineEdit->setText(fileName); + ui->pathLineEdit->setStyleSheet(""); } } diff --git a/src/utils.h b/src/utils.h index 7227b06120..405189f961 100644 --- a/src/utils.h +++ b/src/utils.h @@ -60,7 +60,8 @@ class Util public: static void retainWidgetSizeWhenHidden(QWidget *w, bool retain = true); static void setWidgetNrOfChars(QWidget *w, int minNrOfChars, int maxNrOfChars=0); - static void loadStylesheetFromFile(QString path, QWidget* widget); + static QString loadStylesheetFromFile(const QString &path); + static bool compareNatural(const std::string &a, const std::string &b); }; #endif /* M2K_UTILS_H */ diff --git a/tools/README b/tools/README new file mode 100644 index 0000000000..18d0dab137 --- /dev/null +++ b/tools/README @@ -0,0 +1,11 @@ +The script assumes that the flatpak is uncompressed/opened like this (on linux) + +ostree init --repo=repo --mode=bare-user +ostree static-delta apply-offline --repo=repo scopy.flatpak +ostree checkout --repo=repo -U $(basename $(echo repo/objects/*/*.commit | cut -d/ -f3- --output-delimiter= ) .commit) outdir + +then run the attached shell script (table.sh) which pokes ubuntu/debian sites to find the home pages of projects. +This will create the attached html file in a couple minutes (5 or so)… +(then you only need to fix things that are missing from upstream). + + diff --git a/tools/flatpak-licenses.html b/tools/flatpak-licenses.html new file mode 100644 index 0000000000..8d7ef64d8b --- /dev/null +++ b/tools/flatpak-licenses.html @@ -0,0 +1,65 @@ +
+fail with _dbus_bindings.so + +fail with _dbus_glib_bindings.so + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +fail with libgnuradio-iio.so + +fail with libgnuradio-m2k.so + + + +fail with libgnuradio-scopy.so + + + + +fail with libm2k.so + + + + + +fail with libqwtpolar.so + + + + + + + + +
_dbus_bindings.sonot unstream
_dbus_glib_bindings.sonot unstream
libad9361.so.0Homepage [github.com]
libavahi-client.so.3.2.9Homepage [avahi.org]
libavahi-common.so.3.5.3Homepage [avahi.org]
libavahi-core.so.7.0.2Homepage [avahi.org]
libavahi-glib.so.1.0.2Homepage [avahi.org]
libavahi-gobject.so.0.0Homepage [avahi.org]
libboost_atomic.so.1Homepage [www.boost.org]
libboost_chrono.so.1Homepage [www.boost.org]
libboost_date_time.so.1Homepage [www.boost.org]
libboost_filesystem.so.1Homepage [boost.org]
libboost_prg_exec_monitor.so.1Homepage [www.boost.org]
libboost_program_options.so.1Homepage [www.boost.org]
libboost_regex.so.1Homepage [www.boost.org]
libboost_system.so.1Homepage [www.boost.org]
libboost_thread.so.1Homepage [www.boost.org]
libboost_timer.so.1Homepage [www.boost.org]
libboost_unit_test_framework.so.1Homepage [www.boost.org]
libdbus-glib-1.so.2.3Homepage [www.freedesktop.org]
libdns_sd.so.1.0.0Homepage [avahi.org]
libfftw3f.so.3Homepage [fftw.org]
libfftw3f_threads.so.3Homepage [fftw.org]
libgio-2.0.so.0Homepage [www.gtk.org]
libgiomm-2.4.so.1.3.0Homepage [www.gtkmm.org]
libglib-2.0.so.0Homepage [www.gtk.org]
libglibmm-2.4.so.1.3.0Homepage [www.gtkmm.org]
libglibmm_generate_extra_defs-2.4.so.1.3.0Homepage [www.gtkmm.org]
libgmodule-2.0.so.0Homepage [www.gtk.org]
libgmp.so.10Homepage [gmplib.org]
libgmpxx.so.4Homepage [gmplib.org]
libgnuradio-analog.so.3Homepage [gnuradio.org]
libgnuradio-blocks.so.3Homepage [gnuradio.org]
libgnuradio-fft.so.3Homepage [gnuradio.org]
libgnuradio-filter.so.3Homepage [gnuradio.org]
libgnuradio-iio.sonot unstream
libgnuradio-m2k.sonot unstream
libgnuradio-pmt.so.3Homepage [gnuradio.org]
libgnuradio-runtime.so.3Homepage [gnuradio.org]
libgnuradio-scopy.sonot unstream
libgobject-2.0.so.0Homepage [www.gtk.org]
libiio.so.0Homepage [github.com]
liblog4cpp.so.5.0Homepage [log4cpp.sourceforge.net]
libm2k.sonot unstream
libmatio.soHomepage [sourceforge.net]
liborc-0.4.so.0Homepage [code.entropywave.com]
liborc-test-0.4.so.0Homepage [code.entropywave.com]
libqwtmathml.so.6Homepage [qwt.sourceforge.net]
libqwtpolar.sonot unstream
libqwt.so.6Homepage [qwt.sourceforge.net]
libsigc-2.0.so.0.0.0unknown
libsigrokdecode.soHomepage [sigrok.org]
libusb-1.0.so.0.1.0Homepage [www.libusb.info]
libvolk.soHomepage [libvolk.org]
libxml2.so.2.9Homepage [xmlsoft.org]
libzip.so.4.0.0Homepage [www.nih.at]
diff --git a/tools/flatpak_deps_licenses.sh b/tools/flatpak_deps_licenses.sh new file mode 100644 index 0000000000..cd7154f167 --- /dev/null +++ b/tools/flatpak_deps_licenses.sh @@ -0,0 +1,51 @@ +#!/bin/sh +#set -x + +echo "" +for f in $(find ./outdir -name "*.so*" -type f | awk -F/ '{print $NF}' | sed -e 's/\.debug//g' | sort | uniq) ; do + name=$(basename $f) + loop=1 + while [ ${loop} -eq 1 ] ; do +# echo looking for $name + attempt=1 + while [ ${attempt} -le 5 ] ; do + wget -o test.url -O test "https://packages.ubuntu.com/search?suite=xenial&arch=amd64&mode=filename&searchon=contents&keywords=${name}" + if [ $(cat test | wc -l) -ne 0 ] ; then + break + fi + sleep 1 + attempt=$(expr $attempt + 1) + done + url=$(sed '/<\/table>/Q' test | sed -n '/
/,$p' | \ + sed '/^[[:space:]]*$/d' | grep -v \ | \ + grep href | sort | uniq -c | head -1 | \ + sed -e 's/^.*href=\"//' -e 's/\".*$//') +# echo found $url + if [ $(echo -n $url | wc -c) -eq 0 ] ; then +# echo trying again + if [ "${name}" = "$(echo ${name} | sed -e 's/\.[0-9]*$//')" ] ; then + echo fail with ${name} + break + else + name=$(echo $name | sed -e 's/\.[0-9]*$//') + fi + else +# echo found + break + fi + done + + if [ $(echo -n $url | wc -c) -eq 0 ] ; then + home="not unstream" + else + wget -o /dev/null -O test "https://packages.ubuntu.com/${url}" + home=$(grep Homepage test | grep \ | sed -e 's:
  • ::' -e 's:<\/li>::') + fi + if [ $(echo -n $home | wc -c) -eq 0 ] ; then + home="unknown" + fi + + echo "
  • " +done + +echo "
    $name$home
    " diff --git a/ui/basemenu.ui b/ui/basemenu.ui index 705a00c18c..cccceb5ecf 100644 --- a/ui/basemenu.ui +++ b/ui/basemenu.ui @@ -76,15 +76,15 @@ 1 - - color: rgba(255,255,255,50); - QFrame::Plain Qt::Horizontal + + true + diff --git a/ui/basemenuitem.ui b/ui/basemenuitem.ui index 959ceca1c2..9287f02043 100644 --- a/ui/basemenuitem.ui +++ b/ui/basemenuitem.ui @@ -38,7 +38,7 @@ - color: rgba(255,255,255,50); + QFrame::HLine @@ -46,6 +46,9 @@ QFrame::Plain + + true + @@ -80,15 +83,15 @@ 1 - - color: rgba(255,255,255,50); - QFrame::HLine QFrame::Plain + + true + diff --git a/ui/channel.ui b/ui/channel.ui index e0b4a30eb9..9ed812c8a1 100644 --- a/ui/channel.ui +++ b/ui/channel.ui @@ -32,88 +32,7 @@ Form - QWidget { - color: rgba(255, 255, 255, 153); - - border-width: 0px; - border-radius: 6px; -} - -/* Widget containing box, name, btn */ -QWidget#widget { - background-color: transparent; - border-radius: 4px; -} -QWidget#widget[selected=true] { - background-color: rbga(20, 20, 22, 153); -} - -/* Round check box */ -QCheckBox#box{ - spacing: 0px; - background-color: none; - font-size: 14px; - font-weight: bold; -} -QCheckBox#box::indicator { - width: 14px; - height: 14px; - border: 2px solid #000000; /* Will be overwritted in the ChannelWidget constructor */ - border-radius: 9px; -} -QCheckBox#box::indicator:unchecked { - background-color: transparent; -} -QCheckBox#box::indicator:checked { - background-color: #000000; /* Will be overwritted in the ChannelWidget constructor */ -} - -/* Name */ -QPushButton#name { - font-size: 14px; - font-weight: bold; - background-color: none; -} - -/* Delete Button */ -QPushButton#delBtn { - width: 24px; - height: 24px; - background-color: transparent; - background-position: center center; - background-repeat: no-repeat; - background-image: url(:/icons/redX.svg); -} -QPushButton#delBtn::hover { - background-image: url(:/icons/redX.svg); -} - -/* Menu button */ -QPushButton#btn { - width: 40px; - height: 20px; - background-color: transparent; -} -QPushButton#btn:pressed { - border-image: url(:/icons/setup_btn_checked.svg) -} -QPushButton#btn:!pressed { - border-image: url(:/icons/setup_btn_unchecked.svg) -} -QPushButton#btn:hover:!pressed:!checked { - border-image: url(:/icons/setup_btn_hover.svg) -} -QPushButton#btn:checked { - border-image: url(:/icons/setup_btn_checked.svg) -} - -/* Underline */ -QFrame#line { - border: 2px solid transparent; -} -QFrame#line[selected=true] { - border: 2px solid #000000; /* Will be overwritted in the ChannelWidget constructor */ -} + @@ -268,6 +187,9 @@ QFrame#line[selected=true] { Qt::Horizontal + + true + diff --git a/ui/channel_settings.ui b/ui/channel_settings.ui index 57540954a8..071b2dcbdd 100644 --- a/ui/channel_settings.ui +++ b/ui/channel_settings.ui @@ -34,15 +34,12 @@ 0 - - color: white; -font-size: 14px; -font-weight: normal; - - Channel + + true + @@ -76,7 +73,7 @@ font-weight: normal; - border: 2px solid #ff7200 + border: 2px solid #ff7200; Qt::Horizontal @@ -198,12 +195,12 @@ font-weight: normal; 1 - - border: 1px solid rgba(255, 255, 255, 70); - Qt::Horizontal + + true + @@ -214,15 +211,12 @@ font-weight: normal; 0 - - QLabel { - font-size: 12px; -color: rgba(255, 255, 255, 70); -} - MATH + + true + @@ -273,11 +267,7 @@ color: rgba(255, 255, 255, 70); - QLabel { - color: white; - font: bold ; - font-size: 16px; -} + @@ -314,31 +304,13 @@ color: rgba(255, 255, 255, 70); - QPushButton { + QPushButton{ min-height: 30px; max-height: 30px; min-width: 240px; max-width: 240px; border: 0px; - border-radius: 4px; - - background-color: #4a64ff; - color: #ffffff; - - font-size: 14px; -} - -QPushButton:pressed { - background-color: #2a44df; -} - -QPushButton:disabled { - background-color: #727273; -} - -QPushButton:hover { - background-color: #4a34ff; } @@ -347,6 +319,9 @@ QPushButton:hover { true + + true + @@ -403,15 +378,12 @@ QPushButton:hover { 0 - - QLabel { - font-size: 12px; -color: rgba(255, 255, 255, 70); -} - HORIZONTAL + + true + @@ -428,12 +400,12 @@ color: rgba(255, 255, 255, 70); 1 - - border: 1px solid rgba(255, 255, 255, 70); - Qt::Horizontal + + true + @@ -495,12 +467,12 @@ color: rgba(255, 255, 255, 70); 1 - - border: 1px solid rgba(255, 255, 255, 70); - Qt::Horizontal + + true + @@ -511,15 +483,12 @@ color: rgba(255, 255, 255, 70); 0 - - QLabel { - font-size: 12px; -color: rgba(255, 255, 255, 70); -} - VERTICAL + + true + @@ -604,15 +573,12 @@ color: rgba(255, 255, 255, 70); 0 - - QLabel { - font-size: 12px; -color: rgba(255, 255, 255, 70); -} - SETTINGS + + true + @@ -629,12 +595,12 @@ color: rgba(255, 255, 255, 70); 1 - - border: 1px solid rgba(255, 255, 255, 70); - Qt::Horizontal + + true + @@ -684,9 +650,6 @@ color: rgba(255, 255, 255, 70); - - font-size: 13px; - CH Thickness @@ -764,9 +727,6 @@ color: rgba(255, 255, 255, 70); - - font-size: 13px; - Memory depth @@ -787,9 +747,6 @@ color: rgba(255, 255, 255, 70); - - font-size: 13px; - Curve Style @@ -857,9 +814,6 @@ color: rgba(255, 255, 255, 70); - - font-size: 13px; - Probe Attenuation @@ -926,9 +880,6 @@ Attenuation - - font-size: 13px; - Software AC Coupling @@ -954,22 +905,7 @@ AC Coupling - QCheckBox::indicator { - border: 2px solid rgb(74, 100, 255); - border-radius: 4px; - width: 16px; - height: 16px; - subcontrol-position: left; -} - -QCheckBox::indicator:checked { - background-color: rgb(74, 100, 255); -} - -QCheckBox{ -text-align: center; - -} + @@ -998,12 +934,12 @@ text-align: center; 1 - - border: 1px solid rgba(255, 255, 255, 70); - Qt::Horizontal + + true + @@ -1113,6 +1049,9 @@ text-align: center; + + + 0 @@ -1143,33 +1082,18 @@ text-align: center; 1 - - border: 1px solid rgba(255, 255, 255, 70); - Qt::Horizontal + + true + - QCheckBox::indicator { - border: 2px solid rgb(74, 100, 255); - border-radius: 4px; - width: 16px; - height: 16px; - subcontrol-position: left; -} - -QCheckBox::indicator:checked { - background-color: rgb(74, 100, 255); -} - -QCheckBox{ -text-align: center; - -} + Filter 2 - Enabled @@ -1288,12 +1212,12 @@ text-align: center; 1 - - border: 1px solid rgba(255, 255, 255, 70); - Qt::Horizontal + + true + @@ -1324,33 +1248,18 @@ text-align: center; QPushButton{ width: 175px; height: 30px; - border-radius: 4px; - background-color: #4a64ff; - - font-size: 14px; + font-weight: normal; font-style: normal; text-align: center; - color: #ffffff; -} - - -QPushButton:disabled { - background-color: grey; - color:white; -} - -QPushButton:pressed { - background-color: #2a44df; -} - -QPushButton:hover { - background-color: #4a34ff; } Autoset + + true + @@ -1375,33 +1284,18 @@ QPushButton:hover { QPushButton{ width: 175px; height: 30px; - border-radius: 4px; - background-color: #4a64ff; - - font-size: 14px; + font-weight: normal; font-style: normal; text-align: center; - color: #ffffff; -} - - -QPushButton:disabled { - background-color: grey; - color:white; -} - -QPushButton:pressed { - background-color: #2a44df; -} - -QPushButton:hover { - background-color: #4a34ff; } Snapshot + + true + diff --git a/ui/connect.ui b/ui/connect.ui index 8b08d96eb9..a69b299142 100644 --- a/ui/connect.ui +++ b/ui/connect.ui @@ -13,9 +13,6 @@ Form - - background-color: transparent; - 20 @@ -69,12 +66,7 @@ - QLineEdit { -border-color: grey; -color: white; -} - -QLineEdit[invalid=true] { + QLineEdit[invalid=true] { border-color: red; color: red; } @@ -117,37 +109,71 @@ color: green; min-height: 30px; max-height: 30px; border: 0px; - border-radius: 4px; - background-color: #4a64ff; - color: #ffffff; - font-size: 14px; -} - -QPushButton:disabled { -background-color: grey; -} - -QPushButton:pressed { - background-color: #2a44df; -} - -QPushButton:hover { - background-color: #4a34ff; -} - +} Connect + + true + + + + + + + + 0 + 0 + + + + + 240 + 30 + + + + + + + + + 0 + 0 + + + + + 0 + 30 + + + + + 240 + 30 + + + + QPushButton { + min-height: 30px; + max-height: 30px; + border: 0px; +} + + + Enable Demo + + + true + - - color:white - diff --git a/ui/cursor_readouts.ui b/ui/cursor_readouts.ui index 056f8c21cc..3e713fbb3e 100644 --- a/ui/cursor_readouts.ui +++ b/ui/cursor_readouts.ui @@ -25,6 +25,9 @@ Form + + + 0 @@ -62,11 +65,7 @@ - QWidget { - background-color: rgb(20, 20, 22); - color: white; -} - + @@ -156,9 +155,6 @@ 0 - - color: rgba(255, 255, 255, 153); - Δt = @@ -188,9 +184,6 @@ 0 - - color: rgba(255, 255, 255, 153); - CurT2 = @@ -207,9 +200,6 @@ 0 - - color: rgba(255, 255, 255, 153); - 1/Δt = @@ -265,9 +255,6 @@ 0 - - color: rgba(255, 255, 255, 153); - CurT1 = @@ -300,10 +287,7 @@ - QWidget { - background-color: rgb(20, 20, 22); - color: white; -} + @@ -329,9 +313,6 @@ 0 - - color: rgba(255, 255, 255, 153); - CurV2 @@ -348,9 +329,6 @@ 0 - - color: rgba(255, 255, 255, 153); - ΔV @@ -367,9 +345,6 @@ 0 - - color: rgba(255, 255, 255, 153); - CurV1 @@ -499,9 +474,6 @@ - - color: rgba(255, 255, 255, 153); - = @@ -509,9 +481,6 @@ - - color: rgba(255, 255, 255, 153); - = @@ -519,9 +488,6 @@ - - color: rgba(255, 255, 255, 153); - = diff --git a/ui/cursors_settings.ui b/ui/cursors_settings.ui index c40b9e92aa..d2a8d845d6 100644 --- a/ui/cursors_settings.ui +++ b/ui/cursors_settings.ui @@ -6,8 +6,8 @@ 0 0 - 278 - 537 + 314 + 603 @@ -30,109 +30,134 @@ 0 - + - + 0 0 - - color: white; - font-size: 14px; - font-weight: normal; + + Qt::ScrollBarAsNeeded - - Cursors + + Qt::ScrollBarAlwaysOff - - - - - - Qt::Vertical - - - QSizePolicy::Fixed + + true - - - 0 - 15 - - - - - - - - - 240 - 2 - - - - - 240 - 2 - - - - border: 2px solid rgb(74, 100, 255); - - - Qt::Horizontal - - - - - - - 0 - - - QLayout::SetDefaultConstraint - - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 10 - 25 - - - - - - - - 0 - + + + + 0 + 0 + 276 + 601 + + + - - - true - + - + 0 0 + + Cursors + + + true + + + + + - 238 - 30 + 240 + 2 + + + + + 240 + 2 + + + + Qt::Horizontal + + + true + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 0 + 15 - - QPushButton { + + + + + + 0 + + + QLayout::SetDefaultConstraint + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 10 + 25 + + + + + + + + 0 + + + + + true + + + + 0 + 0 + + + + + 238 + 30 + + + + QPushButton { min-height: 30px; max-height: 30px; min-width: 238px; @@ -194,551 +219,527 @@ QLabel#off:disabled { color: rgba(255,255,255,51); } + + + + + + true + + + true + + + false + + + Normal + + + Track + + + 0 + + + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 15 + + + + + + + + 10 + + + + + + 0 + 0 + + + + HORIZONTAL + + + true + + + + + + + + 0 + 1 + + + + + 16777215 + 1 + + + + Qt::Horizontal + + + true + + + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 0 + 15 + + + + + + + + + + 6 + + + + + 0 + + + + + true + + + true + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + QPushButton[use_icon=true] + + + + + + true + + + + + + + + + + + 0 + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 0 + 25 + + + + + + + + + 0 + 1 + + + + + 16777215 + 1 + + + + Qt::Horizontal + + + true + + + + + + + + 0 + 0 + + + + VERTICAL + + + true + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 0 + 15 + + + + + + + + + + 10 + + + + + 0 + + + + + true + + + true + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + QPushButton[use_icon=true] + + + + + + true + + + + + + + + + + + 0 - - - - - true - - - true - - - false - - - Normal - - - Track + + 0 - - 0 + + 0 - + - - - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 20 - 15 - - - - - - - - 10 - - + - + 0 0 - - QLabel { - font-size: 12px; - color: rgba(255, 255, 255, 70); - } - - - HORIZONTAL - - - - - 0 - 1 - - - - - 16777215 - 1 + 50 - - border: 1px solid rgba(255, 255, 255, 70); - - - Qt::Horizontal - - - - - - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 0 - 15 - - - - - - - - - - 6 - - - - - 0 - - - - - true - - - true - + + + 10 + + + QLayout::SetMinimumSize + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 0 + 0 + + + + + + + + 0 + + + 0 + + + + + + 0 + 1 + + + + + 16777215 + 1 + + + + false + + + QFrame::Sunken + + + 1 + + + 0 + + + Qt::Horizontal + + + true + + + + + + + + 0 + 0 + + + + CURSOR READOUTS + + + true + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 0 + 10 + + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 0 + 25 + + + + + + + + + + Transparency 0% + + + + + + + + + + Qt::Horizontal + + + + + + + Position + + + + + + + 0 + + + 0 + + + + + + 0 + 0 + + + + + 80 + 80 + + + + + + + - + - Qt::Horizontal + Qt::Vertical - - - 40 - 20 - - - - - - - - QPushButton[use_icon=true] - - - - - - true - - - - - - - - - - - 0 - - - - - - 0 - 0 - - - - QLabel { - font-size: 12px; - color: rgba(255, 255, 255, 70); - } - - - VERTICAL - - - - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 0 - 25 - - - - - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 0 - 15 - - - - - - - - - 0 - 1 - - - - - 16777215 - 1 - - - - border: 1px solid rgba(255, 255, 255, 70); - - - Qt::Horizontal - - - - - - - - - 10 - - - - - 0 - - - - - true - - - true - - - - - - - Qt::Horizontal + + QSizePolicy::Expanding - 40 - 20 + 20 + 40 - - - - QPushButton[use_icon=true] - - - - - - true - - - - - - - - - - 0 - - - 0 - - - 0 - - - - - - - - 0 - 20 - - - - - 10 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 0 - 0 - - - - - - - - 0 - - - 0 - - - - - - 0 - 1 - - - - - 16777215 - 1 - - - - false - - - border: 1px solid rgba(255, 255, 255, 70); - - - QFrame::Sunken - - - 1 - - - 0 - - - Qt::Horizontal - - - - - - - - 0 - 0 - - - - QLabel { - font-size: 12px; - color: rgba(255, 255, 255, 70); - } - - - CURSOR READOUTS - - - - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 0 - 10 - - - - - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 0 - 25 - - - - - - - - - - font-size: 13px; - - - Transparency 0% - - - - - - - QSlider::groove { - border: 1px solid #444444; - height: 2px; /* the groove expands to the size of the slider by default. by giving it a height, it has a fixed size */ - background: #999999; - margin: 2px 0; - border-radius: 2px; -} - -QSlider::handle { - background: rgb(73, 99, 255); - border: 0px solid; - width: 18px; - margin: -8px 0; /* handle is placed by default on the contents rect of the groove. Expand outside the groove */ - border-radius: 8px; -} - -QSlider::handle:disabled { - background: #444444; -} - -QSlider::sub-page:horizontal { - background: #4A64FF; -} - - - Qt::Horizontal - - - - - - - font-size: 13px; - - - Position - - - - - - - 0 - - - 0 - - - - - - 0 - 0 - - - - - 80 - 80 - - - - - - - + - - - - Qt::Vertical - - - QSizePolicy::Expanding - - - - 20 - 40 - - - - - adiscope::SmallOnOffSwitch + adiscope::CustomSwitch QPushButton -
    smallOnOffSwitch.hpp
    +
    customSwitch.hpp
    - adiscope::CustomSwitch + adiscope::SmallOnOffSwitch QPushButton -
    customSwitch.hpp
    +
    smallOnOffSwitch.hpp
    diff --git a/ui/customplotpositionbutton.ui b/ui/customplotpositionbutton.ui index 7a0bb351af..14edbc80df 100644 --- a/ui/customplotpositionbutton.ui +++ b/ui/customplotpositionbutton.ui @@ -6,7 +6,7 @@ 0 0 - 80 + 88 80 @@ -24,7 +24,10 @@ border-radius: 4px; border: 2px solid rgba(0, 0, 0, 60); background-color: none; -} +} + +QPushButton[selected=true] { background-color: #4A64FF;} +QPushButton[selected=false] { background-color: rgba(0, 0, 0, 60); } @@ -56,10 +59,6 @@ 20 - - QPushButton[selected=true] { background-color: #4A64FF;} -QPushButton[selected=false] { background-color: rgba(0, 0, 0, 60); } - @@ -85,10 +84,6 @@ QPushButton[selected=false] { background-color: rgba(0, 0, 0, 60); } 20 - - QPushButton[selected=true] { background-color: #4A64FF;} -QPushButton[selected=false] { background-color: rgba(0, 0, 0, 60); } - @@ -115,8 +110,7 @@ QPushButton[selected=false] { background-color: rgba(0, 0, 0, 60); } - QPushButton[selected=true] { background-color: #4A64FF;} -QPushButton[selected=false] { background-color: rgba(0, 0, 0, 60); } + @@ -143,11 +137,6 @@ QPushButton[selected=false] { background-color: rgba(0, 0, 0, 60); } 20 - - QPushButton[selected=true] { background-color: #4A64FF;} -QPushButton[selected=false] { background-color: rgba(0, 0, 0, 60); } - - diff --git a/ui/db_click_buttons.ui b/ui/db_click_buttons.ui index f87fea9c94..65a2c68a36 100644 --- a/ui/db_click_buttons.ui +++ b/ui/db_click_buttons.ui @@ -20,6 +20,10 @@ height: 26px; border-radius: 4px; background-color: none; +} + +QPushButton[is_selected=true] { + border: 4px solid white; } @@ -50,12 +54,7 @@ QPushButton[is_checked=true] { background-color: #F44336; -} - -QPushButton[is_selected=true] { - border: 4px solid white; -} - +} 1 @@ -83,12 +82,7 @@ QPushButton[is_selected=true] { QPushButton[is_checked=true] { background-color: #2096F3; -} - -QPushButton[is_selected=true] { - border: 4px solid white; -} - +} 2 @@ -116,12 +110,7 @@ QPushButton[is_selected=true] { QPushButton[is_checked=true] { background-color: #8BC34A; -} - -QPushButton[is_selected=true] { - border: 4px solid white; -} - +} 3 @@ -149,12 +138,7 @@ QPushButton[is_selected=true] { QPushButton[is_checked=true] { background-color: #FF5721; -} - -QPushButton[is_selected=true] { - border: 4px solid white; -} - +} 4 @@ -183,10 +167,6 @@ QPushButton[is_selected=true] { QPushButton[is_checked=true] { background-color: #607D8B; } - -QPushButton[is_selected=true] { - border: 4px solid white; -} diff --git a/ui/debugger.ui b/ui/debugger.ui index 270a166608..9cd85849e5 100644 --- a/ui/debugger.ui +++ b/ui/debugger.ui @@ -32,11 +32,7 @@ 1.000000000000000 - QWidget#dragContainer{ -background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0.1, y2:0, stop:0 rgba(0, 0, 0, 40), stop:1 transparent); -} - -QPushButton + QPushButton { width: 175px; height: 30px; @@ -45,63 +41,15 @@ QPushButton min-width: 240px; max-width: 240px; - background-color: #4a64ff; - border-radius: 4px; - - font-size: 14px; font-weight: normal; font-style: normal; text-align: center; - color: #ffffff; - -} - -QPushButton:hover -{ - background-color: #4a34ff; -} - -QCheckBox::indicator { - border: 2px solid rgb(74, 100, 255); - border-radius: 4px; - width: 16px; - height: 16px; - subcontrol-position: left; -} - -QCheckBox::indicator:checked { - background-color: rgb(74, 100, 255); -} - -QCheckBox{ -text-align: center; } QLabel { background-color: transparent; -} - -QScrollBar:horizontal { - background: #262628; -} - -QScrollBar::handle:horizontal { - background: #4a4a4b; - border: 0; - border-radius: 3px; -} - -QScrollBar::add-page:horizontal, QScrollBar::sub-page:horizontal { - background: none; -} - -QScrollBar::add-line:horizontal, QScrollBar::sub-line:horizontal { - border: none; - background: none; -} - - +} @@ -147,15 +95,12 @@ QScrollBar::add-line:horizontal, QScrollBar::sub-line:horizontal { 0 - - QLabel { - font-size: 12px; - color: rgba(255, 255, 255, 70); - } - SCRIPTING ENGINE + + true + @@ -172,12 +117,12 @@ QScrollBar::add-line:horizontal, QScrollBar::sub-line:horizontal { 1 - - border: 1px solid rgba(255, 255, 255, 70); - Qt::Horizontal + + true + @@ -215,6 +160,9 @@ QScrollBar::add-line:horizontal, QScrollBar::sub-line:horizontal { Load Script + + true +
    @@ -225,6 +173,9 @@ QScrollBar::add-line:horizontal, QScrollBar::sub-line:horizontal { Run + + true + @@ -384,6 +335,9 @@ QScrollBar::add-line:horizontal, QScrollBar::sub-line:horizontal { Read + + true + @@ -410,6 +364,9 @@ QScrollBar::add-line:horizontal, QScrollBar::sub-line:horizontal { New Window + + true + @@ -417,6 +374,9 @@ QScrollBar::add-line:horizontal, QScrollBar::sub-line:horizontal { Write + + true + @@ -498,18 +458,15 @@ QScrollBar::add-line:horizontal, QScrollBar::sub-line:horizontal { 0 - - QLabel { - font-size: 12px; - color: rgba(255, 255, 255, 70); - } - DEVICE SELECTION Qt::AlignCenter + + true + @@ -526,12 +483,12 @@ QScrollBar::add-line:horizontal, QScrollBar::sub-line:horizontal { 1 - - border: 1px solid rgba(255, 255, 255, 70); - Qt::Horizontal + + true + @@ -600,9 +557,6 @@ QScrollBar::add-line:horizontal, QScrollBar::sub-line:horizontal { 0 - - color: rgb(238, 238, 236); - Address: @@ -686,6 +640,9 @@ QScrollBar::add-line:horizontal, QScrollBar::sub-line:horizontal { Read + + true + @@ -741,6 +698,9 @@ QScrollBar::add-line:horizontal, QScrollBar::sub-line:horizontal { Write + + true + @@ -751,9 +711,6 @@ QScrollBar::add-line:horizontal, QScrollBar::sub-line:horizontal { 0 - - color: rgb(238, 238, 236); - Value: @@ -829,18 +786,15 @@ QScrollBar::add-line:horizontal, QScrollBar::sub-line:horizontal { 0 - - QLabel { - font-size: 12px; - color: rgba(255, 255, 255, 70); - } - REGISTER MAP SETTINGS Qt::AlignCenter + + true + @@ -857,12 +811,12 @@ QScrollBar::add-line:horizontal, QScrollBar::sub-line:horizontal { 1 - - border: 1px solid rgba(255, 255, 255, 70); - Qt::Horizontal + + true + diff --git a/ui/detachdragzone.ui b/ui/detachdragzone.ui index a932458e41..7277248815 100644 --- a/ui/detachdragzone.ui +++ b/ui/detachdragzone.ui @@ -23,12 +23,7 @@ false - QWidget { -background-color : black; -} -QWidget#DetachDragZone[hover=true] { -border: 1px solid white; - } + @@ -50,7 +45,6 @@ border: 1px solid white; - -1 @@ -59,7 +53,6 @@ border: 1px solid white; font-size: 30px; -color: white; diff --git a/ui/device.ui b/ui/device.ui index 5cb8555ef6..8e369630ca 100644 --- a/ui/device.ui +++ b/ui/device.ui @@ -71,19 +71,16 @@ - [selected=true] { - opacity: 0.6; - border-radius: 4px; - background-color: #141416; -} - -[selected=false] { - background-color: transparent; + QLabel { +qproperty-alignment: AlignCenter; } false + + true + 3 @@ -109,11 +106,7 @@ - QLabel { -qproperty-alignment: AlignCenter; -color: white; - -} + @@ -135,27 +128,7 @@ color: white; - /*QPushButton { -color: white; - -font-weight: bold; -height: 30px; -border-width: 0px; -border-radius: 3px; -min-width: 6em; -} -QPushButton:hover { -background-color: orange; -} -QPushButton:checked { -background-color: #F45000; -} -QPushButton[connected=true] { -background-color: green; -} -QPushButton[failed=true] { -background-color: red; -}*/ + @@ -186,12 +159,6 @@ background-color: red; 0 - - QLabel { -color: white; -qproperty-alignment: AlignCenter; -} - diff --git a/ui/digitalIoChannel.ui b/ui/digitalIoChannel.ui index 58665aac89..88c8ffb8d8 100644 --- a/ui/digitalIoChannel.ui +++ b/ui/digitalIoChannel.ui @@ -73,7 +73,6 @@ border:1px solid red; background:transparent; height: 28px; width: 14px; -color: #FFFFFF; font-size: 24px; line-height: 28px; diff --git a/ui/digitalIoElement.ui b/ui/digitalIoElement.ui index c7257e3728..12ff028793 100644 --- a/ui/digitalIoElement.ui +++ b/ui/digitalIoElement.ui @@ -68,11 +68,12 @@ - height: 55px; width: 195px; color: rgba(255,255,255,255); - - font-size: 18px; - font-weight: normal; - font-style: normal; + height: 55px; + width: 195px; + + font-size: 18px; + font-weight: normal; + font-style: normal; 0 - 7 @@ -87,6 +88,9 @@ 0 + + QComboBox QAbstractItemView { min-width: 130px; } + Individual @@ -138,12 +142,10 @@ { height: 190px; width: 1310px; -border-radius: 12px; -background-color: rgba(0, 0, 0, 80); } - 0 + 1 @@ -215,8 +217,6 @@ background-color: rgba(0, 0, 0, 80); { height: 190px; width: 1310px; -border-radius: 12px; -background-color: #141416; } QWidget#stackedWidgetPage1[locked=true] @@ -317,27 +317,19 @@ background:transparent; } QSlider::groove:horizontal { - background-color: rgba(255,255,255,50); height:20px; } QSlider::handle:horizontal:enabled { border-image:url(":/icons/time_trigger_handle.svg"); - height: 30px; width: 40px; border-radius: 4px; + height: 30px; + width: 40px; + border-radius: 4px; margin: -5 -20px; border-bot:2px; border-left:2px; border-backgroundcolor:black; -} - -QSlider::handle:horizontal:!enabled { - -} - -QSlider::sub-page:horizontal { - background: #4A64FF; -} - +} 255 diff --git a/ui/digital_trigger_settings.ui b/ui/digital_trigger_settings.ui index 9f5a1eecb6..2382f2f3bd 100644 --- a/ui/digital_trigger_settings.ui +++ b/ui/digital_trigger_settings.ui @@ -35,56 +35,6 @@ QWidget { color: rgb(190, 190, 190); -} - -/* QComboBoxes*/ -QComboBox -{ - height: 24px; - border: 0px; - color: white; - font-size: 14px; - border-bottom: 1px solid rgba(255, 255, 255, 102); - padding-bottom: 4px; -} -QComboBox::drop-down -{ - subcontrol-position: center right; - width: 10px; - height: 6px; - border-image: url(:/icons/sba_cmb_box_arrow.svg); -} -QComboBox QAbstractItemView { - border: 0px; - color: white; - selection-background-color: rgba(25, 25, 25); - outline: 0px; -} -QComboBox:disabled -{ - color: rgb(85, 85, 85); -} - -/* QLabels -QLabel:disabled -{ - color: rgb(85, 85, 85); -}*/ - -QRadioButton { -color: white; -spacing: 12px; -background-color: transparent; -} -QRadioButton::indicator { -width: 14px; -height: 14px; -border: 2px solid; -border-radius: 9px; -border-color: rgb(73, 99, 255); -} -QRadioButton::indicator:checked { -background-color: rgb(73, 99, 255); } @@ -105,14 +55,12 @@ background-color: rgb(73, 99, 255); - - color: white; -font-size: 14px; -font-weight: normal; - Trigger Settings + + true + @@ -133,9 +81,6 @@ font-weight: normal; - - color: #4A64FF; - QFrame::Plain @@ -145,6 +90,9 @@ font-weight: normal; Qt::Horizontal + + true + @@ -188,9 +136,6 @@ font-weight: normal; 0 - - font-size: 13px; - Trigger mode @@ -278,9 +223,6 @@ font-weight: normal; 0 - - font-size: 13px; - Trigger Logic @@ -335,15 +277,12 @@ font-weight: normal; 16777215 - - QLabel { - font-size: 12px; - color: rgba(255, 255, 255, 70); -} - EXTERNAL TRIGGER + + true + @@ -360,12 +299,12 @@ font-weight: normal; 1 - - border: 1px solid rgba(255, 255, 255, 70); - Qt::Horizontal + + true + @@ -510,9 +449,6 @@ font-weight: normal; 0 - - font-size: 13px; - Condition @@ -532,9 +468,9 @@ font-weight: normal; - 255 - 255 - 255 + 190 + 190 + 190 @@ -550,18 +486,18 @@ font-weight: normal; - 255 - 255 - 255 + 190 + 190 + 190 - 255 - 255 - 255 + 190 + 190 + 190 @@ -583,14 +519,23 @@ font-weight: normal; + + + + 190 + 190 + 190 + + + - 255 - 255 - 255 + 190 + 190 + 190 @@ -606,18 +551,18 @@ font-weight: normal; - 255 - 255 - 255 + 190 + 190 + 190 - 255 - 255 - 255 + 190 + 190 + 190 @@ -639,14 +584,23 @@ font-weight: normal; + + + + 190 + 190 + 190 + + + - 85 - 85 - 85 + 190 + 190 + 190 @@ -662,18 +616,18 @@ font-weight: normal; - 85 - 85 - 85 + 190 + 190 + 190 - 85 - 85 - 85 + 190 + 190 + 190 @@ -695,77 +649,18 @@ font-weight: normal; + + + + 190 + 190 + 190 + + + - - QComboBox -{ - height: 19px; - - border: 0px; - border-bottom: 1px solid rgba(255, 255, 255, 102); - - font-size: 16px; - font-weight: normal; - font-style: normal; - text-align: left; - color: #ffffff; -/*background-color:green;*/ - -} -QComboBox::drop-down -{ - subcontrol-position: center right; - width: 10px; - height: 6px; - border-image: url(:/icons/sba_cmb_box_arrow.svg); - - font-size: 16px; - font-weight: normal; - font-style: normal; - text-align: left; - color: #e0e0e0; -} -QComboBox QAbstractItemView { - border: 0px; - selection-background-color: rgba(25, 25, 25); - outline: 0px; -} - -QComboBox QAbstractItemView::item { -width:30px; -hieght:20px; -margin-top: 0px; -border:0px; -padding:0px; -} - -QComboBox:disabled -{ - color: rgb(85, 85, 85); -} - -/* Color of the selected list item. */ -QComboBox::item:selected { - - font-size: 16px; - font-weight: normal; - font-style: normal; - text-align: left; - color: #ffffff; - border-bottom: 1px solid rgba(255, 255, 255, 102); - -} -/* Indicator will shine through the label text if you don't make it hidden. */ -QComboBox::indicator{ - background-color:transparent; - selection-background-color:transparent; - color:transparent; - selection-color:transparent; -} - - QComboBox::AdjustToMinimumContentsLengthWithIcon @@ -909,15 +804,12 @@ QComboBox::indicator{ - - QLabel { - font-size: 12px; - color: rgba(255, 255, 255, 70); - } - EXTERNAL TRIGGER OUT + + true + @@ -934,12 +826,12 @@ QComboBox::indicator{ 1 - - border: 1px solid rgba(255, 255, 255, 70); - Qt::Horizontal + + true + diff --git a/ui/digitalio.ui b/ui/digitalio.ui index f17cf996d8..2b31a9361c 100644 --- a/ui/digitalio.ui +++ b/ui/digitalio.ui @@ -11,7 +11,7 @@ - + 0 0 @@ -49,11 +49,6 @@ 50 - - #widget { -background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0.1, y2:0, stop:0 rgba(0, 0, 0, 40), stop:1 transparent); -} - 0 @@ -76,8 +71,27 @@ background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0.1, y2:0, stop:0 r 0 - 20 + 15 + + + + Qt::Horizontal + + + QSizePolicy::Preferred + + + + 40 + 20 + + + + + + + @@ -147,7 +161,7 @@ background-color: grey; - 30 + 50 0 @@ -255,9 +269,15 @@ background-color: grey;
    instrumentnotes.h
    1 + + adiscope::LinkedButton + QPushButton +
    linked_button.hpp
    +
    + diff --git a/ui/digitaliomenu.ui b/ui/digitaliomenu.ui index ede0119f83..f2d694b798 100644 --- a/ui/digitaliomenu.ui +++ b/ui/digitaliomenu.ui @@ -16,20 +16,11 @@ QLineEdit { - font-size: 18px; line-height: 21px; - color: #FFFFFF; - border: 0px; border-bottom: 1px solid rgba(255,255,255,100); } -QLineEdit:disabled -{ - color: rgb(85, 85, 85); -} - - diff --git a/ui/dmm.ui b/ui/dmm.ui index 6a9e2ea9d7..fba8128fc3 100644 --- a/ui/dmm.ui +++ b/ui/dmm.ui @@ -7,7 +7,7 @@ 0 0 900 - 818 + 830 @@ -16,7 +16,7 @@ 0 - + 0 @@ -33,1397 +33,1699 @@ 0 - - - QWidget#leftPanel { background-color: rgba(0, 0, 0, 40); } -QLabel { color: rgba(255, 255, 255, 90); font-size: 51px; font-weight: bold; qproperty-alignment: 'AlignBottom | AlignLeft'; } - - + + + + 40 + - 32 + 0 - 32 + 15 - 16 + 50 - 32 + 15 - - - 20 + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 40 + 10 + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + 0 + 0 + + + + Qt::RightToLeft + + + QPushButton { + width: 80px; + height: 40px; + border-radius: 4px; + background-color: #27b34f; + color: white; + + font-weight: bold; + + text-align: left; + padding-left: 20px; + padding-right: 20px; +} + +QPushButton[running=true] { + background-color: #F45000; +} + +QPushButton:disabled { + background-color: grey; +} + + + Run + + + + :/icons/ico-play.svg + :/icons/ico-stop.svg:/icons/ico-play.svg + + + + 8 + 10 + + + + true + + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + QLabel { + font-size: 51px; + font-weight: bold; + qproperty-alignment: 'AlignBottom | AlignLeft'; + } + + + + 32 + + + 32 + + + 16 + + + 32 - - - Qt::Vertical - - - QSizePolicy::Maximum - - - - 0 - 0 - - - - - - + - 12 + 20 - - - - 0 - 0 - + + + Qt::Vertical - - QFrame::NoFrame + + QSizePolicy::Maximum + + + + 0 + 0 + - +
    - + - 0 + 12 - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - 0 - 0 - - - - - 200 - 0 - - - - QLCDNumber { color: #ff7200; } - - - QFrame::NoFrame - - - 7 - - - QLCDNumber::Flat - - - - - - - - 0 - 0 - - - - - 200 - 0 - - - - QLCDNumber { color: #ff7200; } - - - QFrame::NoFrame - - - 7 - - - QLCDNumber::Flat - - - - - - - - 0 - 0 - - - - - 130 - 0 - - - - MAX - - - - - - - - 0 - 0 - - - - - 130 - 0 - - - - MIN - - - - - - - Qt::Horizontal - - - - 20 - 0 - - - - - - - - Qt::Vertical - - - - 0 - 40 - - - - - - - - - + + + 0 + - 40 + 0 - - - Qt::Horizontal - - - QSizePolicy::Expanding - - - - 0 - 0 - - - - - - + - + 0 0 - - - 345 - 105 - - - - QLCDNumber { color: #ff7200; } - QFrame::NoFrame - - 7 - - - QLCDNumber::Flat - - - - - 0 - 0 - - - - - 130 - 105 - - - - QLabel[ac=false] { qproperty-text: "VDC"; } -QLabel[ac=true] { qproperty-text: "VRMS"; } - - - VDC + + + 0 - + + + + font-size: 13px; + + + Low Gain + + + + + + + font-size: 13px; +color: red; + + + + + + + - - - -0.100000000000000 - - - 0.100000000000000 - - - 5 - - - 5 - - - Qt::Horizontal - - - QwtThermo::LeadingScale - - - QwtThermo::OriginCustom - - + + 0 - - -
    -
    - - - - - - Qt::Vertical - - - QSizePolicy::Maximum - - - - 0 - 40 - - - - - - - - 12 - - - - - - 0 - 0 - - - - QFrame::NoFrame - - - - - - - 0 - - - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - 0 - 0 - - - - - 130 - 0 - - - - MIN - - - - - - - - 0 - 0 - - - - - 200 - 0 - - - - QLCDNumber { color: #9013fe; } - - - QFrame::NoFrame - - - 7 - - - QLCDNumber::Flat - - - - - - - Qt::Horizontal - - - - 40 - 0 - - - - - - - - - 0 - 0 - - - - - 200 - 0 - - - - QLCDNumber { color: #9013fe; } - - - QFrame::NoFrame - - - 7 - - - QLCDNumber::Flat - - - - - - - - 0 - 0 - + + + + + 0 - - - 130 - 0 - + + 0 - - MAX + + 0 - - - - - - Qt::Vertical + + 0 - - - 0 - 40 - + + 0 - - - - - - - - - 40 - + + + + + 0 + 0 + + + + + 200 + 0 + + + + QLCDNumber { color: #ff7200; } + + + QFrame::NoFrame + + + 7 + + + QLCDNumber::Flat + + + + + + + + 0 + 0 + + + + + 200 + 0 + + + + QLCDNumber { color: #ff7200; } + + + QFrame::NoFrame + + + 7 + + + QLCDNumber::Flat + + + + + + + + 0 + 0 + + + + + 130 + 0 + + + + MAX + + + + + + + + 0 + 0 + + + + + 130 + 0 + + + + MIN + + + + + + + Qt::Horizontal + + + + 20 + 0 + + + + + + + + Qt::Vertical + + + + 0 + 40 + + + + + + + - - - Qt::Horizontal - - - QSizePolicy::Expanding - - - - 0 - 0 - + + + 40 - + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 0 + 0 + + + + + + + + + 0 + 0 + + + + + 345 + 105 + + + + QLCDNumber { color: #ff7200; } + + + QFrame::NoFrame + + + 7 + + + QLCDNumber::Flat + + + + + + + + 0 + 0 + + + + + 130 + 105 + + + + QLabel[ac=false] { qproperty-text: "VDC"; } +QLabel[ac=true] { qproperty-text: "VRMS"; } + + + VDC + + + + - - - - 0 - 0 - - - - - 340 - 105 - + + + -0.100000000000000 - - QLCDNumber { color: #9013fe; } + + 0.100000000000000 - - QFrame::NoFrame + + 5 - - 7 + + 5 - - QLCDNumber::Flat + + 0 + + + + + + + + Qt::Vertical + + + QSizePolicy::Maximum + + + + 0 + 40 + + + + + + + + 12 + + + + + 0 + + + 0 + - + - + 0 0 - - - 130 - 105 - - - - QLabel[ac=false] { qproperty-text: "VDC"; } -QLabel[ac=true] { qproperty-text: "VRMS"; } - - - VDC + + QFrame::NoFrame + + + + 0 + + + + + font-size: 13px; + + + Low Gain + + + + + + + font-size: 13px; +color: red; + + + + + + + + - - - -0.100000000000000 - - - 0.100000000000000 - - - 5 - - - 5 - - - 0 - - - Qt::Horizontal - - - QwtThermo::LeadingScale - - - QwtThermo::OriginCustom - - + + 0 - + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + 0 + + + + + 130 + 0 + + + + MIN + + + + + + + + 0 + 0 + + + + + 200 + 0 + + + + QLCDNumber { color: #9013fe; } + + + QFrame::NoFrame + + + 7 + + + QLCDNumber::Flat + + + + + + + Qt::Horizontal + + + + 40 + 0 + + + + + + + + + 0 + 0 + + + + + 200 + 0 + + + + QLCDNumber { color: #9013fe; } + + + QFrame::NoFrame + + + 7 + + + QLCDNumber::Flat + + + + + + + + 0 + 0 + + + + + 130 + 0 + + + + MAX + + + + + + + Qt::Vertical + + + + 0 + 40 + + + + + + + + + + + 40 + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 0 + 0 + + + + + + + + + 0 + 0 + + + + + 340 + 105 + + + + QLCDNumber { color: #9013fe; } + + + QFrame::NoFrame + + + 7 + + + QLCDNumber::Flat + + + + + + + + 0 + 0 + + + + + 130 + 105 + + + + QLabel[ac=false] { qproperty-text: "VDC"; } +QLabel[ac=true] { qproperty-text: "VRMS"; } + + + VDC + + + + + + + + + -0.100000000000000 + + + 0.100000000000000 + + + 5 + + + 5 + + + 0 + + + + + + + + + + + Qt::Vertical + + + QSizePolicy::Maximum + + + + 0 + 0 + + + + + + + + + + + + 0 + 0 + + + + + 0 + + + 25 + + + 20 + + + 5 + + + 0 + - - - - - - Qt::Vertical + + + true - - QSizePolicy::Maximum + + + 0 + 0 + - + - 0 + 200 0 - - - - - - - - - - - - 0 - 0 - - - - - 0 - - - 25 - - - 20 - - - 5 - - - 0 - - - - - - 0 - 0 - - - - Qt::RightToLeft - - - QPushButton { - width: 80px; - height: 40px; - border-radius: 4px; - background-color: #27b34f; - color: white; - - font-weight: bold; - - text-align: left; - padding-left: 20px; - padding-right: 20px; -} - -QPushButton[running=true] { - background-color: #F45000; -} - -QPushButton:disabled { - background-color: grey; -} - - - Run - - - - :/icons/ico-play.svg - :/icons/ico-stop.svg:/icons/ico-play.svg - - - - 8 - 10 - - - - true - - - - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 0 - 24 - - - - - - - - true - - - - 0 - 0 - - - - - 200 - 0 - - - - QFrame::NoFrame - - - Qt::ScrollBarAlwaysOff - - - true - - - - - 0 - 0 - 186 - 914 - - - - - 0 - 0 - - - - - 15 - - - 0 + + QFrame::NoFrame - - 0 + + Qt::ScrollBarAlwaysOff - - 10 + + true - - 20 - - - - - - 0 - 0 - - - - QLabel { - color: white; - font-size:14px; - font-weight:normal; -} - - - Channel 1 - - - - - - - - 0 - 0 - + + + + 0 + 0 + 186 + 1102 + + + + + 0 + 0 + + + + + 15 - - QFrame { color: #ff7200; } + + 0 - - QFrame::Plain + + 0 - - 2 + + 10 - - Qt::Horizontal + + 20 - - - - - - - DC (Direct Current) + + + + 0 + 0 + + + + Channel 1 + + + true + + + + + + + + 0 + 0 + + + + QFrame { color: #ff7200; } + + + QFrame::Plain + + + 2 + + + Qt::Horizontal + + + + + + + + + DC (Direct Current) + + + true + + + buttonGroup + + + + + + + AC (20 Hz - 40 kHz) + + + buttonGroup + + + + + + + + + 0 + + + + + Gain + + + + + + + + Auto + + + + + Low + + + + + High + + + + + + + + + + 5 + + + + + + 0 + 0 + + + + + 80 + 0 + + + + 1 + + + + 1s + + + + + 10s + + + + + 60s + + + + + + + + 10 + + + 0 + + + + + History + + + + + + + true + + + true + + + + + + + + + + + 0 + + + 0 + + + + + 0 + + + 0 + + + 0 + + + + + Line thickness + + + + + + + + + + 0 + 0 + + + + 1 + + + + 0.5 + + + + + 1 + + + + + 1.5 + + + + + 2 + + + + + 2.5 + + + + + 3 + + + + + 3.5 + + + + + 4 + + + + + 4.5 + + + + + 5 + + + + + + + + + + Qt::Vertical - - true + + QSizePolicy::Fixed - - buttonGroup - - + + + 0 + 24 + + + - + + + + 0 + 0 + + + + false + - AC (20 Hz - 40 kHz) + Channel 2 + + + true - - buttonGroup - - - - - - - 5 - - - + + - + 0 0 - - - 80 - 0 - + + QFrame { color: #9013fe; } + + + QFrame::Plain - - 1 + + 2 + + Qt::Horizontal + + + + + - - 1s - - - - - 10s - + + + DC (Direct Current) + + + true + + + buttonGroup_2 + + - - 60s - + + + AC (20 Hz - 40 kHz) + + + buttonGroup_2 + + - + - - - - 10 - + + 0 - - + + - History + Gain - - - - true + + + + + Auto + + + + + Low + + + + + High + + + + + + + + + + 5 + + + + + + 0 + 0 + - - true + + + 80 + 0 + + + 1 + + + + 1s + + + + + 10s + + + + + 60s + + + + + + 10 + + + 0 + + + + + History + + + + + + + true + + + true + + + + + - - - - - - 0 - - - 0 - - + 0 - - 0 - 0 - - - - font-size: 13px; - - - Line thickness - - - - - - - - - - 0 - 0 - - - - 1 - - - - 0.5 - - - - - 1 - - - - - 1.5 - - - - - 2 - - - - - 2.5 - - - - - 3 - - - - - 3.5 - - - - - 4 - - - - - 4.5 - - - - - 5 - - - - - - - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 0 - 24 - - - - - - - - - 0 - 0 - - - - false - - - QLabel { - color: white; - font-size:14px; - font-weight:normal; -} - - - Channel 2 - - - - - - - - 0 - 0 - - - - QFrame { color: #9013fe; } - - - QFrame::Plain - - - 2 - - - Qt::Horizontal - - - - - - - - - DC (Direct Current) - - - true - - - buttonGroup_2 - - + + + + 0 + + + 0 + + + 0 + + + + + Line thickness + + + + + + + + + + 0 + 0 + + + + 1 + + + + 0.5 + + + + + 1 + + + + + 1.5 + + + + + 2 + + + + + 2.5 + + + + + 3 + + + + + 3.5 + + + + + 4 + + + + + 4.5 + + + + + 5 + + + + + - - - AC (20 Hz - 40 kHz) + + + Qt::Vertical - - buttonGroup_2 - - - - - - - - - 5 - - - - - - 0 - 0 - + + QSizePolicy::Fixed - + - 80 - 0 + 0 + 20 - - 1 - - - - 1s - - - - - 10s - - - - - 60s - - - + - - + + - 10 + 0 0 - + - History + - - - - true - + true - - - - - - 5 - - 0 - - - 0 - - - - - 0 - - - 0 - - - 0 - - - - font-size: 13px; + + + + 0 + 0 + - Line thickness + PEAK HOLD + + + true + + + + + + + + 0 + 1 + + + + + 16777215 + 1 + + + + QFrame::Plain + + + 1 + + + Qt::Horizontal + + + true - - + + + Qt::Vertical + + + QSizePolicy::Fixed + + 0 - 0 + 5 - - 1 - - - - 0.5 - - - - - 1 - - - - - 1.5 - - - - - 2 - - - - - 2.5 - - - - - 3 - - - - - 3.5 + + + + + + + 0 - - - - 4 + + 0 - - - - 4.5 + + 0 - - - - 5 + + 0 - + + + + 0 + + + 0 + + + 0 + + + + + + + + true + + + true + + + + + + + + 0 + 30 + + + + QPushButton{ +height:25px; + +font-size: 12px; +line-height: 14px; +} + + + Reset + + + true + + + + + + - - - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 0 - 20 - - - - - - - - 0 - - - 0 - - - - QPushButton { - max-height: 6px; - max-width: 10px; - border-image: url(:/icons/sba_cmb_box_arrow.svg); -} - -QPushButton:checked -{ - max-height: 10px; - max-width: 6px; -border-image: url(:/icons/sba_cmb_box_arrow_right.svg); -} - - - - + + + Qt::Vertical - - + + QSizePolicy::Fixed - - true + + + 20 + 20 + - + - - - - 0 - 0 - - - - QLabel { - font-size: 12px; - color: rgba(255, 255, 255, 70); -} + + + 0 - - PEAK HOLD + + 0 - + + + + + + + true + + + true + + + + + + + + 0 + 0 + + + + DATA LOGGING + + + true + + + + + + + + 0 + 1 + + + + + 16777215 + 1 + + + + QFrame::Plain + + + 1 + + + Qt::Horizontal + + + true + + + + - - + + + Qt::Vertical + + + QSizePolicy::Fixed + + - 0 - 1 + 20 + 5 - + + + + + - 16777215 - 1 + 0 + 0 - - border: 1px solid rgba(255, 255, 255, 70); - - - QFrame::Plain - - - 1 - - - Qt::Horizontal - - - - - - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 0 - 5 - - - - - - - - - 0 - - - 0 - - - 0 - - - 0 - - - + 0 @@ -1433,390 +1735,201 @@ border-image: url(:/icons/sba_cmb_box_arrow_right.svg); 0 - - + + 30 + + + 0 + + + true - - true - - - - - - - - 0 - 30 - - - - QPushButton{ -height:25px; -background-color: #4A64FF; -border-radius: 4px; - - -font-size: 12px; -line-height: 14px; -color: #FFFFFF; -} -QPushButton:hover -{ - background-color: #4a34ff; -} - - - Reset - - - - - - - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 20 - 20 - - - - - - - - 0 - - - 0 - - - - - QPushButton { - max-height: 6px; - max-width: 10px; - border-image: url(:/icons/sba_cmb_box_arrow.svg); -} - -QPushButton:checked -{ - max-height: 10px; - max-width: 6px; -border-image: url(:/icons/sba_cmb_box_arrow_right.svg); -} - - - - - - - - - - true - - - - - - - - 0 - 0 - - - - QLabel { - font-size: 12px; - color: rgba(255, 255, 255, 70); -} - - - DATA LOGGING - - - - - - - - 0 - 1 - - - - - 16777215 - 1 - - - - border: 1px solid rgba(255, 255, 255, 70); - - - QFrame::Plain - - - 1 - - - Qt::Horizontal - - - - - - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 20 - 5 - - - - - - - - - 0 - 0 - - - - - 0 - - - 0 - - - 0 - - - 30 - - - 0 - - - - - - - - true - - - - - - - - 0 - - - 0 - - - 0 - - - 0 - - - - - 10 + + + + + 0 0 - - - - - - 3 + + 0 - + 0 - - - - + + + + 10 + + + 0 + + + + + + + 3 + + + 0 + + + + + QLineEdit[invalid=true] { border-color: red } QLineEdit[invalid=false] { border-color: grey; } - - - true - - + + + true + + + + + + + + 0 + 0 + + + + + 20 + 25 + + + + Qt::LeftToRight + + + QPushButton{ +height:25px; + +font-size: 12px; +line-height: 14px; +} + + + Browse + + + + 20 + 20 + + + + true + + + + - - - - - 0 - 0 - + + + + Qt::Vertical - + + QSizePolicy::Fixed + + 20 - 25 + 10 - - Qt::LeftToRight + + + + + + Append + + + + - QPushButton{ -height:25px; -background-color: #4A64FF; -border-radius: 4px; - - -font-size: 12px; -line-height: 14px; -color: #FFFFFF; -} -QPushButton:hover -{ - background-color: #4a34ff; -} - -QPushButton:disabled { - background-color: grey; -} + - Browse + Choose a file + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed - + 20 - 20 + 10 + + + + + + Overwrite + + + true + - - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 20 - 10 - - - - - - - - Append - - - - - - - - - - Choose a file - - - - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 20 - 10 - - - - - - - - Overwrite - - - true - - - - - - - - - - - - - Qt::Vertical - - - QSizePolicy::MinimumExpanding - - - - 0 - 2 - - - - - - - - - - + + + + + + + + + Qt::Vertical + + + QSizePolicy::MinimumExpanding + + + + 0 + 2 + + + + + + + + + + + + @@ -1827,17 +1940,22 @@ QPushButton:disabled {
    detachdragzone.h
    1 - - adiscope::CustomSwitch - QPushButton -
    customSwitch.hpp
    -
    adiscope::InstrumentNotes QWidget
    instrumentnotes.h
    1
    + + adiscope::LinkedButton + QPushButton +
    linked_button.hpp
    +
    + + adiscope::CustomSwitch + QPushButton +
    customSwitch.hpp
    +
    QwtThermo QWidget @@ -1862,6 +1980,7 @@ QPushButton:disabled { + diff --git a/ui/info_page.ui b/ui/info_page.ui index ef5bb3ea8c..d310523553 100644 --- a/ui/info_page.ui +++ b/ui/info_page.ui @@ -6,7 +6,7 @@ 0 0 - 789 + 948 394 @@ -14,28 +14,38 @@ Form - /*background-color:black;*/ -QCheckBox { - spacing: 8px; - background-color: transparent; - font-size: 14px; - font-weight: bold; + + + + + + + + 180 + 30 + + + + QPushButton { + min-height: 30px; + max-height: 30px; - color: rgba(255, 255, 255, 153); -} + border: 0px; -QCheckBox::indicator { - width: 14px; - height: 14px; - border: 2px solid rgb(74,100,255); - border-radius: 4px; + font-size: 14px; } -QCheckBox::indicator:unchecked { background-color: transparent; } -QCheckBox::indicator:checked { background-color: rgb(74,100,255); } - - - - + + + + Calibrate + + + true + + + + + 0 @@ -60,33 +70,20 @@ QCheckBox::indicator:checked { background-color: rgb(74,100,255); } max-height: 30px; border: 0px; - border-radius: 4px; - - background-color: #4a64ff; - color: #ffffff; font-size: 14px; -} - -QPushButton:pressed { - background-color: #2a44df; -} - -QPushButton:hover { - background-color: #4a34ff; -} - -QPushButton:disabled { - background-color: #727273; } - Forget device + Identify + + + true - - + + 0 @@ -111,28 +108,15 @@ QPushButton:disabled { max-height: 30px; border: 0px; - border-radius: 4px; - - background-color: #4a64ff; - color: #ffffff; font-size: 14px; -} - -QPushButton:pressed { - background-color: #2a44df; -} - -QPushButton:hover { - background-color: #4a34ff; -} - -QPushButton:disabled { - background-color: #727273; } - Identify + Forget device + + + true @@ -159,46 +143,19 @@ QPushButton:disabled { QPushButton { border: 0px; - border-radius: 4px; - background-color: #4a64ff; - color: #ffffff; font-size: 14px; } - -QPushButton:hover -{ -background-color: #4a34ff; -} - -QPushButton:disabled { -background-color: gray; -color:white; -} - -QPushButton:disabled { - background-color: #727273; -} Connect - - - - - - Qt::Horizontal - - - - 0 - 0 - + + true - + - + QFrame::NoFrame @@ -211,8 +168,8 @@ QPushButton:disabled { 0 0 - 771 - 255 + 930 + 242 @@ -231,22 +188,9 @@ QPushButton:disabled { 0 - - - - - 0 - 0 - - - - - 0 - 0 - - - - + + 0 + @@ -271,7 +215,7 @@ QPushButton:disabled { 0 - + @@ -281,7 +225,23 @@ QPushButton:disabled { - + + + + + 0 + 0 + + + + + 0 + 0 + + + + + @@ -301,9 +261,6 @@ QPushButton:disabled { 0 - - background-color: transparent; - QFrame::NoFrame @@ -321,7 +278,7 @@ QPushButton:disabled { - + Qt::Vertical @@ -341,8 +298,21 @@ QPushButton:disabled { - - + + + + Qt::Horizontal + + + + 0 + 0 + + + + + + 180 @@ -355,32 +325,20 @@ QPushButton:disabled { max-height: 30px; border: 0px; - border-radius: 4px; - - background-color: #4a64ff; - color: #ffffff; font-size: 14px; } - -QPushButton:pressed { - background-color: #2a44df; -} - -QPushButton:hover { - background-color: #4a34ff; -} - -QPushButton:disabled { - background-color: #727273; -} + - Calibrate + Register + + + true - + 0 @@ -388,8 +346,21 @@ QPushButton:disabled { 0 + + + + font-size: 13px; + + + + + + + + font-size: 13px; + @@ -418,6 +389,9 @@ QPushButton:disabled { 20 + + font-size: 13px; + @@ -447,9 +421,7 @@ QPushButton:disabled { - QLabel { - color: red; -} + font-size: 13px; @@ -479,6 +451,9 @@ QPushButton:disabled { 20 + + font-size: 13px; + diff --git a/ui/instrumentnotes.ui b/ui/instrumentnotes.ui index 120fb3bee2..4456e4b2e7 100644 --- a/ui/instrumentnotes.ui +++ b/ui/instrumentnotes.ui @@ -31,19 +31,6 @@ Form - - Line -{ -color: rgb(255, 190, 190); -border: 1px solid rgba(255, 255, 255, 70); -} - -QLabel { - font-size: 12px; - color: rgba(255, 255, 255, 70); -} - - 0 @@ -79,6 +66,9 @@ QLabel { Notes + + true + @@ -113,6 +103,9 @@ QLabel { Qt::Horizontal + + true + diff --git a/ui/la_channel_group.ui b/ui/la_channel_group.ui index 41f1ecedfa..5409155082 100644 --- a/ui/la_channel_group.ui +++ b/ui/la_channel_group.ui @@ -70,14 +70,14 @@ QWidget[highlight=true] { background-color: #1b1b21; } + QWidget[hover-property=true] { border:1px solid #4a64ff; } + QLabel { -color: white; font-size: 16px; font-weight: normal; font-style: normal; -} -QLabel:disabled { color: #555555; } +} @@ -341,6 +341,15 @@ border-image: url(:/icons/sba_cmb_box_arrow_right.svg); + + + + 255 + 255 + 255 + + + @@ -397,6 +406,15 @@ border-image: url(:/icons/sba_cmb_box_arrow_right.svg); + + + + 255 + 255 + 255 + + + @@ -453,6 +471,15 @@ border-image: url(:/icons/sba_cmb_box_arrow_right.svg); + + + + 255 + 255 + 255 + + + @@ -1072,6 +1099,15 @@ QPushButton:!checked { + + + + 0 + 0 + 0 + + + @@ -1209,6 +1245,15 @@ QPushButton:!checked { + + + + 0 + 0 + 0 + + + @@ -1346,26 +1391,20 @@ QPushButton:!checked { + + + + 0 + 0 + 0 + + + - QCheckBox -{ - spacing: 0px; -} -QCheckBox:indicator -{ -height: 16px; -width: 16px; -border-radius:4px; -border: 2px solid #4a64ff; -} - -QCheckBox:indicator:checked -{ -background:#4a64ff; -} + diff --git a/ui/la_channel_manager.ui b/ui/la_channel_manager.ui index 722abcf752..3474334ed7 100644 --- a/ui/la_channel_manager.ui +++ b/ui/la_channel_manager.ui @@ -20,9 +20,7 @@ Form - #LAChannelManager { -background-color: qlineargradient(spread:pad, x1:0, y1:0.9, x2:0, y2:0, stop:0 rgba(0, 0, 0, 40), stop:1 transparent); -} + @@ -76,7 +74,12 @@ background-color: qlineargradient(spread:pad, x1:0, y1:0.9, x2:0, y2:0, stop:0 r - QLabel{\n\n \n font-size: 16px;\n font-weight: normal;\n font-style: normal;\n text-align: left;\n color: rgba(255,255,255,140)\n} + QLabel{ +font-size: 16px; + font-weight: normal; +font-style: normal; +text-align: left; +} @@ -101,16 +104,15 @@ background-color: qlineargradient(spread:pad, x1:0, y1:0.9, x2:0, y2:0, stop:0 r - - color: rgba(255,255,255,60); - - QFrame::Plain Qt::Horizontal + + true + @@ -159,7 +161,7 @@ background-color: qlineargradient(spread:pad, x1:0, y1:0.9, x2:0, y2:0, stop:0 r 0 0 16 - 314 + 321 @@ -205,7 +207,7 @@ background-color: qlineargradient(spread:pad, x1:0, y1:0.9, x2:0, y2:0, stop:0 r 0 0 - 85 + 68 335 diff --git a/ui/la_decoder_reqChannel.ui b/ui/la_decoder_reqChannel.ui index 4076fe01bc..68c718805c 100644 --- a/ui/la_decoder_reqChannel.ui +++ b/ui/la_decoder_reqChannel.ui @@ -68,7 +68,7 @@ - 0 + 1 @@ -95,9 +95,6 @@ 0 - - font-size: 13px; - Settings @@ -156,9 +153,6 @@ 0 - - font-size: 13px; - Role @@ -182,9 +176,6 @@ - - font-size: 13px; - Role diff --git a/ui/la_manager_header.ui b/ui/la_manager_header.ui index 11291f6e86..152ba5def7 100644 --- a/ui/la_manager_header.ui +++ b/ui/la_manager_header.ui @@ -47,14 +47,7 @@ font-weight: normal; font-style: normal; text-align: left; - color: #ffffff; -} - -QLabel:disabled -{ - color:rgb(85,85,85); -} - +} @@ -104,22 +97,12 @@ QLabel:disabled QLabel -{ - +{ font-size: 16px; - font-weight: normal; - font-style: normal; - text-align: left; - color: #ffffff; border: 0px solid red; margin:0px; padding:0px; } - -QLabel:disabled -{ - color:rgb(85,85,85); -} diff --git a/ui/la_settings.ui b/ui/la_settings.ui index a27f32e7fa..6e29f7c5f4 100644 --- a/ui/la_settings.ui +++ b/ui/la_settings.ui @@ -7,7 +7,7 @@ 0 0 334 - 266 + 277 @@ -47,8 +47,6 @@ QPushButton{ width: 40px; height: 30px; - border-radius: 4px; - background-color: #4a64ff; } @@ -83,14 +81,12 @@ 0 - - color: white; -font-size: 14px; -font-weight: normal; - + + true + @@ -128,6 +124,9 @@ font-weight: normal; 30 + + true + @@ -152,15 +151,15 @@ font-weight: normal; 30 + + true + - - color: #4A64FF; - QFrame::Plain @@ -170,6 +169,9 @@ font-weight: normal; Qt::Horizontal + + true + @@ -230,15 +232,15 @@ font-weight: normal; 1 - - border: 1px solid rgba(255, 255, 255, 70); - QFrame::Sunken Qt::Horizontal + + true + @@ -249,15 +251,12 @@ font-weight: normal; 0 - - QLabel { - font-size: 12px; - color: rgba(255, 255, 255, 70); - } - REQUIRED + + true + @@ -340,15 +339,12 @@ font-weight: normal; 0 - - QLabel { - font-size: 12px; - color: rgba(255, 255, 255, 70); - } - OPTIONAL + + true + @@ -365,15 +361,15 @@ font-weight: normal; 1 - - border: 1px solid rgba(255, 255, 255, 70); - QFrame::Sunken Qt::Horizontal + + true + @@ -465,15 +461,15 @@ font-weight: normal; 1 - - border: 1px solid rgba(255, 255, 255, 70); - QFrame::Sunken Qt::Horizontal + + true + @@ -484,15 +480,12 @@ font-weight: normal; 0 - - QLabel { - font-size: 12px; - color: rgba(255, 255, 255, 70); - } - OPTIONS + + true + diff --git a/ui/logic_analyzer.ui b/ui/logic_analyzer.ui index 24c62653bb..efb8871aa0 100644 --- a/ui/logic_analyzer.ui +++ b/ui/logic_analyzer.ui @@ -46,11 +46,6 @@ - - #mainWidget { -background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0.1, y2:0, stop:0 rgba(0, 0, 0, 40), stop:1 transparent); -} - 0 @@ -97,34 +92,23 @@ background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0.1, y2:0, stop:0 r + + + Qt::RightToLeft - -QPushButton { -width: 80px; + QPushButton{ + width: 80px; height: 40px; -text-align: left; + text-align: left; font-weight: bold; padding-left: 15px; padding-right: 15px; -border-radius: 4px; - -background-color: #4a64ff; - color: #ffffff; - -} - -QPushButton:pressed { -background-color: #2a44df; -} - -QPushButton:hover { -background-color: #4a34ff; } @@ -140,34 +124,25 @@ background-color: #4a34ff; 10 + + true + + + true + - -QPushButton { -width: 80px; + QPushButton{ + width: 80px; height: 40px; -text-align: left; + text-align: left; font-weight: bold; padding-left: 15px; padding-right: 15px; - -border-radius: 4px; - -background-color: #4a64ff; - color: #ffffff; - -} - -QPushButton:pressed { -background-color: #2a44df; -} - -QPushButton:hover { -background-color: #4a34ff; } @@ -176,6 +151,12 @@ background-color: #4a34ff; true + + true + + + true + @@ -212,31 +193,6 @@ background-color: #4a34ff; 0 - - QPushButton { - min-height: 40px; - max-height: 40px; - min-width: 60px; - max-width: 60px; - padding-top:5px -} - -QPushButton:checked { -border-top: 1px solid rgba(255,255,255,150); -} - -QPushButton:!checked { -border-top: 1px solid rgba(255,255,255,0); -} - -QPushButton:!checked:hover { -border-top: 1px solid rgba(255,255,255,0); -} - -QPushButton:checked:hover { -border-top: 1px solid rgba(255,255,255,200); -} - 0 @@ -255,30 +211,18 @@ border-top: 1px solid rgba(255,255,255,200); - - QPushButton:checked { - image: url(:/icons/gear_wheel_pressed.svg); -} - -QPushButton:!checked { -image: url(:/icons/gear_wheel.svg); -} - - -QPushButton:!checked:hover { -image: url(:/icons/gear_wheel_hover.svg); -} - -QPushButton:checked:hover { -image: url(:/icons/gear_wheel_pressed.svg); -} - true + + true + + + true + settings_group @@ -286,29 +230,18 @@ image: url(:/icons/gear_wheel_pressed.svg); - - QPushButton:checked { - image: url(:/icons/setup3_checked_hover.svg); -} - -QPushButton:!checked { -image: url(:/icons/setup3_unchecked.svg); -} - -QPushButton:!checked:hover { -image: url(:/icons/setup3_unchecked_hover.svg); -} - -QPushButton:checked:hover { -image: url(:/icons/setup3_checked_hover.svg); -} - true + + true + + + true + @@ -328,162 +261,161 @@ image: url(:/icons/setup3_checked_hover.svg); 0 - - - - - background-color:black; - - - - 0 - - - 20 - - - 0 - - - 20 - - - 0 - - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 20 - 20 - - - - - - - - Qt::Horizontal - - - - 10 - 10 - - - - - - - - 0 - - - - - - - Qt::Horizontal - - - - 10 - 10 - - - - - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 20 - 20 - - - - - - - - - - - false - - - background-color: black; - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 + + + true + + + + + + + 0 + + + 20 + + + 0 + + + 20 + + + 0 + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 20 + 20 + + + + + + + + Qt::Horizontal + + + + 10 + 10 + + + + + + + + 0 + + + + + + + Qt::Horizontal + + + + 10 + 10 + + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 20 + 20 + + + + + + + + + + + false - - - - 0 - - - 0 - - - 0 - - - 0 - - - - - 25 - - - 0 - - - 25 - - - 0 - - - 0 - - - - - - - - - - - - + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + 25 + + + 0 + + + 25 + + + 0 + + + 0 + + + + + + + + + + + + + @@ -504,9 +436,6 @@ image: url(:/icons/setup3_checked_hover.svg); 0 - - QWidget {border:none;} - 0 @@ -568,6 +497,9 @@ image: url(:/icons/setup3_checked_hover.svg); 0 + + QFrame::NoFrame + Qt::ScrollBarAlwaysOff @@ -583,7 +515,7 @@ image: url(:/icons/setup3_checked_hover.svg); 0 0 200 - 272 + 329 @@ -628,15 +560,19 @@ image: url(:/icons/setup3_checked_hover.svg); 0 - - color: white; -font-size: 14px; -font-weight: normal; - - Channel Settings + + true + + + + + + + + @@ -647,9 +583,6 @@ font-weight: normal; 1 - - border: 2px solid #4a64ff - QFrame::Plain @@ -659,6 +592,9 @@ font-weight: normal; Qt::Horizontal + + true + @@ -691,51 +627,27 @@ font-weight: normal; - - - - - :/icons/trigger_rising_enabled.svg:/icons/trigger_rising_enabled.svg + Rising Edge - - - - - :/icons/trigger_falling_enabled.svg - + Falling Edge - - - - - :/icons/trigger_low_enabled.svg - + Low - - - - - :/icons/trigger_high_enabled.svg - + High - - - - - :/icons/trigger_any_enabled.svg - + Any Edge @@ -835,16 +747,12 @@ border-color: grey; 0 - - QLabel { - font-size: 12px; -color: rgba(255, 255, 255, 70); -font-weight: normal; -} - GROUP + + true + @@ -855,12 +763,12 @@ font-weight: normal; 1 - - border: 1px solid rgba(255, 255, 255, 70); - Qt::Horizontal + + true + @@ -1013,31 +921,43 @@ font-weight: normal; 0 - - color: white; -font-size: 14px; -font-weight: normal; - - Trigger Settings + + true + + + + 0 + 0 + + 16777215 1 - - border: 2px solid #4a64ff + + false + + + 1 + + + 0 Qt::Horizontal + + true + @@ -1214,16 +1134,12 @@ color: rgba(255,255,255,51); 0 - - QLabel { - font-size: 12px; -color: rgba(255, 255, 255, 70); -font-weight: normal; -} - EXTERNAL TRIGGER + + true + @@ -1240,12 +1156,12 @@ font-weight: normal; 1 - - border: 1px solid rgba(255, 255, 255, 70); - Qt::Horizontal + + true + @@ -1276,9 +1192,6 @@ font-weight: normal; 0 - - color: white; - "Warning: This feature is not supported on the current firmware version!" @@ -1341,6 +1254,9 @@ font-weight: normal; false + + 26 + @@ -1355,52 +1271,27 @@ font-weight: normal; - - - - - :/icons/trigger_rising_enabled.svg - + Rising Edge - - - - - :/icons/trigger_falling_enabled.svg - + Falling Edge - - - - - :/icons/trigger_low_enabled.svg - + Low - - - - - :/icons/trigger_high_enabled.svg - + High - - - - - :/icons/trigger_any_enabled.svg - + Any Edge @@ -1459,6 +1350,9 @@ font-weight: normal; + + QFrame::NoFrame + Qt::ScrollBarAlwaysOff @@ -1470,8 +1364,8 @@ font-weight: normal; 0 0 - 315 - 469 + 420 + 474 @@ -1498,15 +1392,12 @@ font-weight: normal; - - color: white; -font-size: 14px; -font-weight: normal; - - General Settings + + true + @@ -1517,9 +1408,6 @@ font-weight: normal; 1 - - border: 2px solid #4a64ff - QFrame::Plain @@ -1529,6 +1417,9 @@ font-weight: normal; Qt::Horizontal + + true + @@ -1540,12 +1431,27 @@ font-weight: normal; + + + 0 + 0 + + + + + 400 + 30 + + + + Qt::LeftToRight + QPushButton { min-height: 30px; max-height: 30px; -min-width: 280px; -max-width: 280px; +min-width: 400px; +max-width: 400px; background-color: black; border-radius: 4px; } @@ -1557,8 +1463,8 @@ background-color: qlineargradient(spread:pad, x1:0.5, y1:0, x2:0.501, y2:0, stop QWidget#handle { min-height: 30px; max-height: 30px; -min-width: 142px; -max-width: 142px; +min-width: 200px; +max-width: 200px; background-color: #4a64ff; border-radius: 2px; } @@ -1577,8 +1483,8 @@ QLabel#on { margin-top: 0px; min-height:30px; max-height:30px; -min-width:140px; -max-width:140px; +min-width:200px; +max-width:200px; qproperty-alignment: AlignCenter AlignCenter; margin-left: 0px; color: white; @@ -1592,9 +1498,9 @@ QLabel#off { margin-top: 0px; min-height:30px; max-height:30px; -min-width:140px; -max-width:140px; -margin-left: 140px; +min-width:200px; +max-width:200px; +margin-left: 200px; color: white; qproperty-alignment: AlignCenter AlignCenter; } @@ -1624,6 +1530,22 @@ color: rgba(255,255,255,51); + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 400 + 20 + + + + @@ -1634,16 +1556,12 @@ color: rgba(255,255,255,51); - - QLabel { - font-size: 12px; -color: rgba(255, 255, 255, 70); -font-weight: normal; -} - AVAILABLE CHANNELS + + true + @@ -1660,12 +1578,12 @@ font-weight: normal; 1 - - border: 1px solid rgba(255, 255, 255, 70); - Qt::Horizontal + + true + @@ -1673,40 +1591,7 @@ font-weight: normal; - QCheckBox { - spacing: 8px; - background-color: transparent; - font-size: 14px; - font-weight: bold; - -color: rgba(255, 255, 255, 153); -} - -QCheckBox::indicator { -width: 14px; - height: 14px; - border: 2px solid rgb(74,100,255); - border-radius: 4px; -} -QCheckBox::indicator:unchecked { background-color: transparent; } -QCheckBox::indicator:checked { background-color: rgb(74,100,255); } - -QPushButton { -width: 40px; - height: 20px; - background-color: transparent; -} -QPushButton:pressed { border-image: url(:/icons/setup_btn_checked.svg); } -QPushButton:!pressed { border-image: url(:/icons/setup_btn_unchecked.svg); } -QPushButton:hover:!pressed:!checked { border-image: url(:/icons/setup_btn_hover.svg); } -QPushButton:checked { border-image: url(:/icons/setup_btn_checked.svg); } - -QLabel { -font-size: 14px; - font-weight: bold; - -color: rgba(255, 255, 255, 153); -} + @@ -1753,16 +1638,12 @@ color: rgba(255, 255, 255, 153); 0 - - QLabel { - font-size: 12px; -color: rgba(255, 255, 255, 70); -font-weight: normal; -} - DECODERS + + true + @@ -1779,12 +1660,12 @@ font-weight: normal; 1 - - border: 1px solid rgba(255, 255, 255, 70); - Qt::Horizontal + + true + @@ -1798,42 +1679,6 @@ font-weight: normal; - - QCheckBox { - spacing: 8px; - background-color: transparent; - font-size: 14px; - font-weight: bold; - -color: rgba(255, 255, 255, 153); -} - -QCheckBox::indicator { -width: 14px; - height: 14px; - border: 2px solid rgb(74,100,255); - border-radius: 4px; -} -QCheckBox::indicator:unchecked { background-color: transparent; } -QCheckBox::indicator:checked { background-color: rgb(74,100,255); } - -QPushButton { -width: 40px; - height: 20px; - background-color: transparent; -} -QPushButton:pressed { border-image: url(:/icons/setup_btn_checked.svg); } -QPushButton:!pressed { border-image: url(:/icons/setup_btn_unchecked.svg); } -QPushButton:hover:!pressed:!checked { border-image: url(:/icons/setup_btn_hover.svg); } -QPushButton:checked { border-image: url(:/icons/setup_btn_checked.svg); } - -QLabel { -font-size: 14px; - font-weight: bold; - -color: rgba(255, 255, 255, 153); -} - 0 @@ -1924,25 +1769,7 @@ color: rgba(255, 255, 255, 153); - QCheckBox { - spacing: 8px; - background-color: transparent; - font-size: 14px; - font-weight: bold; - -color: rgba(255, 255, 255, 153); -} - -QCheckBox::indicator { -width: 14px; - height: 14px; - border: 2px solid rgb(74,100,255); - border-radius: 4px; -} -QCheckBox::indicator:unchecked { background-color: transparent; } -QCheckBox::indicator:checked { background-color: rgb(74,100,255); } - -QPushButton { + QPushButton { width: 40px; height: 20px; background-color: transparent; @@ -1950,14 +1777,7 @@ width: 40px; QPushButton:pressed { border-image: url(:/icons/setup_btn_checked.svg); } QPushButton:!pressed { border-image: url(:/icons/setup_btn_unchecked.svg); } QPushButton:hover:!pressed:!checked { border-image: url(:/icons/setup_btn_hover.svg); } -QPushButton:checked { border-image: url(:/icons/setup_btn_checked.svg); } - -QLabel { -font-size: 14px; - font-weight: bold; - -color: rgba(255, 255, 255, 153); -} +QPushButton:checked { border-image: url(:/icons/setup_btn_checked.svg); } @@ -1990,6 +1810,9 @@ color: rgba(255, 255, 255, 153); Channel Settings + + true + @@ -2034,9 +1857,19 @@ color: rgba(255, 255, 255, 153); + + + + + + + Cursors + + true + @@ -2085,6 +1918,9 @@ color: rgba(255, 255, 255, 153); Trigger + + true + @@ -2133,6 +1969,12 @@ color: rgba(255, 255, 255, 153); QPushButton
    customPushButton.hpp
    + + adiscope::InstrumentNotes + QWidget +
    instrumentnotes.h
    + 1 +
    adiscope::RunSingleWidget QWidget @@ -2145,14 +1987,14 @@ color: rgba(255, 255, 255, 153);
    customSwitch.hpp
    - adiscope::InstrumentNotes - QWidget -
    instrumentnotes.h
    - 1 + adiscope::LinkedButton + QPushButton +
    linked_button.hpp
    + diff --git a/ui/logic_channel_settings.ui b/ui/logic_channel_settings.ui index a57695a305..1d058a6d8f 100644 --- a/ui/logic_channel_settings.ui +++ b/ui/logic_channel_settings.ui @@ -19,13 +19,6 @@ Form - - QLabel:disabled -{ - color: rgb(85, 85, 85); -} - - 0 @@ -82,9 +75,6 @@ 0 - - font-size: 13px; - BG Color @@ -98,9 +88,6 @@ 0 - - font-size: 13px; - Edge Color @@ -184,9 +171,6 @@ 0 - - font-size: 13px; - Low Color @@ -200,9 +184,6 @@ 0 - - font-size: 13px; - High Color @@ -310,15 +291,15 @@ 1 - - border: 1px solid rgba(255, 255, 255, 70); - QFrame::Plain Qt::Horizontal + + true + @@ -329,15 +310,12 @@ 0 - - QLabel { - font-size: 12px; - color: rgba(255, 255, 255, 70); - } - SETTINGS + + true + @@ -398,28 +376,10 @@ - 10 - 6 + 16777215 + 16777215 - - QPushButton { - max-height: 6px; - max-width: 10px; - border-image: url(:/icons/sba_cmb_box_arrow.svg); -} - -QPushButton:checked -{ - max-height: 10px; - max-width: 6px; -border-image: url(:/icons/sba_cmb_box_arrow_right.svg); -} - - - - - @@ -429,6 +389,9 @@ border-image: url(:/icons/sba_cmb_box_arrow_right.svg); false + + true + @@ -439,15 +402,12 @@ border-image: url(:/icons/sba_cmb_box_arrow_right.svg); 0 - - QLabel { - font-size: 12px; - color: rgba(255, 255, 255, 70); - } - COLOR SETTINGS + + true + @@ -464,15 +424,15 @@ border-image: url(:/icons/sba_cmb_box_arrow_right.svg); 1 - - border: 1px solid rgba(255, 255, 255, 70); - QFrame::Plain Qt::Horizontal + + true + @@ -517,9 +477,6 @@ border-image: url(:/icons/sba_cmb_box_arrow_right.svg); 0 - - font-size: 13px; - Name @@ -533,9 +490,6 @@ border-image: url(:/icons/sba_cmb_box_arrow_right.svg); 0 - - font-size: 13px; - Thickness diff --git a/ui/manualcalibration.ui b/ui/manualcalibration.ui index 92a15f0be7..1f01ff5ec2 100644 --- a/ui/manualcalibration.ui +++ b/ui/manualcalibration.ui @@ -14,12 +14,7 @@ Form - QWidget#TopWidget{ -background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0.1, y2:0, stop:0 rgba(0, 0, 0, 40), stop:1 transparent); -} - -QLabel { - color: rgba(255, 255, 255, 150); + QLabel { text-align: left; font-size: 18px; } @@ -28,18 +23,8 @@ QPushButton { width: 175px; height: 30px; - background-color: #4a64ff; - border-radius: 4px; text-align: center; - color: #ffffff; - -} - - -QPushButton:hover -{ - background-color: #4a34ff; } QTabWidget::pane { @@ -233,6 +218,9 @@ QListWidget{ Load Calibration + + false + @@ -246,6 +234,9 @@ QListWidget{ Save Calibration + + false + @@ -283,6 +274,9 @@ QListWidget{ Run automatic + + true + diff --git a/ui/marker_table.ui b/ui/marker_table.ui index e1f2a37df5..0566e518e0 100644 --- a/ui/marker_table.ui +++ b/ui/marker_table.ui @@ -14,13 +14,7 @@ Form - QHeaderView::section { - background-color: transparent; -} - -QHeaderView::section:checked { - background-color: transparent; -} + diff --git a/ui/math.ui b/ui/math.ui index 55da906e85..ffc3ae3a05 100644 --- a/ui/math.ui +++ b/ui/math.ui @@ -29,8 +29,6 @@ QPushButton:pressed { background-color: #F45000; } QLabel { -color: white; - font-weight: bold; } QMenu { diff --git a/ui/math_panel.ui b/ui/math_panel.ui index da0fba542b..2e218203f4 100644 --- a/ui/math_panel.ui +++ b/ui/math_panel.ui @@ -24,23 +24,11 @@ QPushButton { -color: white; -background-color: #4a64ff; - font-weight: bold; height: 30px; border-width: 0px; border-radius: 3px; min-width: 6em; -} -QPushButton:disabled { -background-color: gray; -color:white; - -} -QPushButton:hover -{ - background-color: #4a34ff; } @@ -49,6 +37,9 @@ QPushButton:hover true + + true + diff --git a/ui/measure_panel.ui b/ui/measure_panel.ui index a46773241d..2292f4a1c8 100644 --- a/ui/measure_panel.ui +++ b/ui/measure_panel.ui @@ -220,12 +220,12 @@ 1 - - border: 1px solid rgba(255, 255, 255, 33); - Qt::Horizontal + + true + diff --git a/ui/measure_settings.ui b/ui/measure_settings.ui index 692263aec7..f0a465b591 100644 --- a/ui/measure_settings.ui +++ b/ui/measure_settings.ui @@ -47,14 +47,12 @@ - - color: white; -font-size: 14px; -font-weight: normal; - Measure + + true + @@ -72,14 +70,12 @@ font-weight: normal; - - color: white; -font-size: 14px; -font-weight: normal; - Channel + + true + @@ -143,9 +139,9 @@ font-weight: normal; 0 - -10 + 0 252 - 545 + 563 @@ -183,15 +179,12 @@ font-weight: normal; 0 - - QLabel { - font-size: 12px; - color: rgba(255, 255, 255, 70); - } - MEASUREMENTS + + true + @@ -202,12 +195,12 @@ font-weight: normal; 1 - - border: 1px solid rgba(255, 255, 255, 70); - Qt::Horizontal + + true + @@ -260,9 +253,6 @@ font-weight: normal; - - font-size: 13px; - Counter @@ -270,9 +260,6 @@ font-weight: normal; - - font-size: 13px; - Display All @@ -305,24 +292,6 @@ font-weight: normal; max-width: 240px; border: 0px; - border-radius: 4px; - - background-color: #4a64ff; - color: #ffffff; - - font-size: 14px; -} - -QPushButton:pressed { - background-color: #2a44df; -} - -QPushButton:disabled { - background-color: #727273; -} - -QPushButton:hover { - background-color: #4a34ff; } @@ -331,6 +300,9 @@ QPushButton:hover { true + + true + @@ -360,15 +332,12 @@ QPushButton:hover { 0 - - QLabel { - font-size: 12px; - color: rgba(255, 255, 255, 70); - } - STATISTICS + + true + @@ -385,12 +354,12 @@ QPushButton:hover { 0 - - border: 1px solid rgba(255, 255, 255, 70); - Qt::Horizontal + + true + @@ -458,20 +427,8 @@ QPushButton:hover { max-width: 100px; border: 0px; - border-radius: 4px; - - background-color: #4a64ff; - color: #ffffff; font-size: 14px; -} - -QPushButton:pressed { - background-color: #2a44df; -} - -QPushButton:hover { - background-color: #4a34ff; } @@ -480,6 +437,9 @@ QPushButton:hover { false + + true + @@ -492,24 +452,6 @@ QPushButton:hover { max-width: 240px; border: 0px; - border-radius: 4px; - - background-color: #4a64ff; - color: #ffffff; - - font-size: 14px; -} - -QPushButton:pressed { - background-color: #2a44df; -} - -QPushButton:disabled { - background-color: #727273; -} - -QPushButton:hover { - background-color: #4a34ff; } @@ -518,6 +460,9 @@ QPushButton:hover { true + + true + @@ -541,18 +486,15 @@ QPushButton:hover { 0 - - QLabel { - font-size: 12px; - color: rgba(255, 255, 255, 70); - } - QFrame::Sunken CUSTOM SELECTION + + true + @@ -569,12 +511,12 @@ QPushButton:hover { 1 - - border: 1px solid rgba(255, 255, 255, 70); - Qt::Horizontal + + true + @@ -650,19 +592,16 @@ QPushButton:hover { 1 - - border: 1px solid rgba(255, 255, 255, 70); - Qt::Horizontal + + true + - - font-size: 13px; - Enable @@ -670,15 +609,12 @@ QPushButton:hover { - - QLabel { - font-size: 12px; - color: rgba(255, 255, 255, 70); - } - GATING SETTINGS + + true + diff --git a/ui/network_analyzer.ui b/ui/network_analyzer.ui index 646c8e2eaf..7a5249ff5a 100644 --- a/ui/network_analyzer.ui +++ b/ui/network_analyzer.ui @@ -26,7 +26,7 @@ - #mainWidget { background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0.1, y2:0, stop:0 rgba(0, 0, 0, 40), stop:1 transparent); } + @@ -74,14 +74,16 @@ + + + Qt::RightToLeft - -QPushButton { + QPushButton{ width: 80px; height: 40px; @@ -89,21 +91,7 @@ QPushButton { font-weight: bold; padding-left: 15px; padding-right: 15px; - border-radius: 4px; - - background-color: #4a64ff; - color: #ffffff; - -} - -QPushButton:pressed { - background-color: #2a44df; -} - -QPushButton:hover { - background-color: #4a34ff; -} - +} Print @@ -118,6 +106,12 @@ QPushButton:hover { 10 + + true + + + true + @@ -144,31 +138,6 @@ QPushButton:hover { 0 - - QPushButton { - min-height: 40px; - max-height: 40px; - min-width: 60px; - max-width: 60px; - padding-top:5px -} - -QPushButton:checked { - border-top: 1px solid rgba(255,255,255,150); -} - -QPushButton:!checked { - border-top: 1px solid rgba(255,255,255,0); -} - -QPushButton:!checked:hover { - border-top: 1px solid rgba(255,255,255,0); -} - -QPushButton:checked:hover { - border-top: 1px solid rgba(255,255,255,200); -} - 0 @@ -189,40 +158,28 @@ QPushButton:checked:hover { - 62 - 47 + 0 + 0 - 62 - 47 + 16777215 + 16777215 - - QPushButton:checked { - image: url(:/icons/gear_wheel_pressed.svg); -} - -QPushButton:!checked { - image: url(:/icons/gear_wheel.svg); -} - - -QPushButton:!checked:hover { - image: url(:/icons/gear_wheel_hover.svg); -} - -QPushButton:checked:hover { - image: url(:/icons/gear_wheel_pressed.svg); -} - true + + true + + + true + buttonGroup @@ -232,37 +189,25 @@ QPushButton:checked:hover { - 62 - 47 + 0 + 0 - 62 - 47 + 16777215 + 16777215 - - -QPushButton:checked { - image: url(:/icons/setup3_checked_hover.svg); -} - -QPushButton:!checked { - image: url(:/icons/setup3_unchecked.svg); -} - -QPushButton:!checked:hover { - image: url(:/icons/setup3_unchecked_hover.svg); -} - -QPushButton:checked:hover { - image: url(:/icons/setup3_checked_hover.svg); -} - true + + true + + + true + buttonGroup @@ -310,6 +255,9 @@ QPushButton:checked:hover { + + true + 0 @@ -346,57 +294,8 @@ QPushButton:checked:hover { 0 - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - color:white; - - - - - - - - - - - 0 - 0 - - - - color:white; - - - Current Frequency: - - - - - - - color:white; - - - - - - - - + + 0 @@ -407,7 +306,7 @@ QPushButton:checked:hover { color:white; - Sample: + Average: @@ -428,16 +327,6 @@ color: red; - - - - color:white; - - - - - - @@ -454,6 +343,22 @@ color: red; + + + + + 0 + 0 + + + + color:white; + + + Sample: + + + @@ -470,8 +375,41 @@ color: red; - - + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + color:white; + + + + + + + + + + color:white; + + + + + + + + 0 @@ -482,7 +420,17 @@ color: red; color:white; - Average: + Current Frequency: + + + + + + + color:white; + + + @@ -817,9 +765,6 @@ border: 5px solid white; 0 - - font-size: 13px; - 0 @@ -851,7 +796,7 @@ border: 5px solid white; - 1 + 0 @@ -894,11 +839,23 @@ border: 5px solid white; 0 - 0 - 322 - 867 + -465 + 340 + 1036 + + + 0 + 0 + + + + + 0 + 0 + + 20 @@ -914,14 +871,12 @@ border: 5px solid white; - - color: white; - font-size: 14px; - font-weight: normal; - Settings + + true + @@ -942,9 +897,6 @@ border: 5px solid white; - - color: #4A64FF; - QFrame::Plain @@ -954,6 +906,9 @@ border: 5px solid white; Qt::Horizontal + + true + @@ -975,16 +930,12 @@ border: 5px solid white; 0 - - QLabel { - font-size: 12px; - color: rgba(255, 255, 255, 70) - } - - REFERENCE + + true + @@ -1001,15 +952,15 @@ border: 5px solid white; 1 - - border: 1px solid rgba(255, 255, 255, 70); - QFrame::Sunken Qt::Horizontal + + true + @@ -1100,6 +1051,22 @@ color: rgba(255,255,255,51); + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 300 + 20 + + + + @@ -1157,9 +1124,6 @@ color: rgba(255,255,255,51); - - font-size: 13px; - Gain Mode @@ -1205,16 +1169,12 @@ color: rgba(255,255,255,51); 0 - - QLabel { - font-size: 12px; - color: rgba(255, 255, 255, 70) - } - - RESPONSE + + true + @@ -1225,12 +1185,12 @@ color: rgba(255,255,255,51); 1 - - border: 1px solid rgba(255, 255, 255, 70); - Qt::Horizontal + + true + @@ -1242,9 +1202,6 @@ color: rgba(255,255,255,51); - - font-size: 13px; - DC Filtering @@ -1324,15 +1281,12 @@ color: rgba(255,255,255,51); 0 - - QLabel { - font-size: 12px; - color: rgba(255, 255, 255, 70) -} - SWEEP + + true + @@ -1349,9 +1303,6 @@ color: rgba(255,255,255,51); 1 - - border: 1px solid rgba(255, 255, 255, 70); - QFrame::Sunken @@ -1361,6 +1312,9 @@ color: rgba(255,255,255,51); Qt::Horizontal + + true + @@ -1532,11 +1486,10 @@ color: rgba(255,255,255,51); - font-size: 14px; + QSpinBox{ +font-size: 14px; height:24px; -color: white; -border: 0px; -border-bottom: 1px solid rgba(255,255,255,100); +} QSpinBox[invalid=true] { @@ -1580,34 +1533,24 @@ border-color: green; QPushButton { -color: white; -background-color: #4a64ff; -font-family: 14pt; border-width: 0px; border-radius: 3px; min-width: 64px; } -QPushButton:disabled { -background-color: grey; -} -QPushButton:pressed { -background-color: #F45000; -} +/* QPushButton:enabled:!pressed { background-color: #4a64ff; } QPushButton[valid=true]:enabled:!pressed { background-color: #4a64ff; } QPushButton[invalid=true]:enabled:!pressed { background-color: #4a64ff; } -QPushButton:pressed { -background-color: #4a64ff; -} -QPushButton:hover -{ - background-color: #4a34ff; -} +*/ + Apply + + true + @@ -1633,13 +1576,10 @@ QPushButton:hover - font-size: 14px; + QSpinBox{ +font-size: 14px; height:24px; -color: white; -border: 0px; -border-bottom: 1px solid rgba(255,255,255,100); - - +} QSpinBox[invalid=true] { border-color: red; } @@ -1674,34 +1614,23 @@ border-color: green; QPushButton { -color: white; -background-color: #4a64ff; -font-family: 14pt; border-width: 0px; border-radius: 3px; min-width: 64px; } -QPushButton:disabled { -background-color: grey; -} -QPushButton:pressed { -background-color: #F45000; -} +/* QPushButton:enabled:!pressed { background-color: #4a64ff; } QPushButton[valid=true]:enabled:!pressed { background-color: #4a64ff; } QPushButton[invalid=true]:enabled:!pressed { background-color: #4a64ff; } -QPushButton:pressed { -background-color: #4a64ff; -} -QPushButton:hover -{ - background-color: #4a34ff; -} +*/ Apply + + true + @@ -1727,16 +1656,12 @@ QPushButton:hover 0 - - QLabel { - font-size: 12px; - color: rgba(255, 255, 255, 70) - } - - DISPLAY + + true + @@ -1753,10 +1678,6 @@ QPushButton:hover 1 - - border: 1px solid rgba(255, 255, 255, 70); - - QFrame::Sunken @@ -1766,6 +1687,9 @@ QPushButton:hover Qt::Horizontal + + true + @@ -1786,9 +1710,6 @@ QPushButton:hover - - font-size: 13px; - @@ -1811,9 +1732,6 @@ QPushButton:hover 0 - - font-size: 13px; - Delta Label @@ -1853,16 +1771,12 @@ QPushButton:hover 0 - - QLabel { - font-size: 12px; - color: rgba(255, 255, 255, 70) - } - - BUFFER PREVIEWER + + true + @@ -1873,15 +1787,15 @@ QPushButton:hover 1 - - border: 1px solid rgba(255, 255, 255, 70); - QFrame::Plain Qt::Horizontal + + true + @@ -1974,28 +1888,14 @@ QPushButton:hover max-height: 30px; border: 0px; - border-radius: 4px; - - background-color: #4a64ff; - color: #ffffff; - - font-size: 14px; -} - -QPushButton:pressed { - background-color: #2a44df; -} - -QPushButton:hover { - background-color: #4a34ff; -} -QPushButton:disabled { -background-color: #727273; } ViewInOsc + + true + @@ -2022,23 +1922,7 @@ background-color: #727273; max-height: 30px; border: 0px; - border-radius: 4px; - - background-color: #4a64ff; - color: #ffffff; - - font-size: 14px; -} - -QPushButton:pressed { - background-color: #2a44df; -} -QPushButton:hover { - background-color: #4a34ff; -} -QPushButton:disabled { -background-color: #727273; } @@ -2054,6 +1938,9 @@ background-color: #727273; 12 + + true + @@ -2089,25 +1976,9 @@ background-color: #727273; max-height: 30px; border: 0px; - border-radius: 4px; - background-color: #4a64ff; - color: #ffffff; - - font-size: 14px; text-align: right; padding-left: 20px; -} - -QPushButton:pressed { - background-color: #2a44df; -} - -QPushButton:hover { - background-color: #4a34ff; -} -QPushButton:disabled { -background-color: #727273; } @@ -2123,6 +1994,9 @@ background-color: #727273; 12 + + true + @@ -2166,666 +2040,621 @@ background-color: #727273; 20 - - - color: white; - font-size: 14px; - font-weight: normal; - - - General Settings - - - - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 20 - 15 - - - - - - - - - 0 - 0 - - - - color: #4A64FF; - - - QFrame::Plain - - - 2 - - - Qt::Horizontal - - - - - - - 0 - - - 25 + + + Qt::ScrollBarAlwaysOff - - 0 + + true - - - - 0 - - - 0 - + + + + 0 + 0 + 298 + 529 + + + - - - - 0 - 0 - - - - QLabel { - font-size: 12px; - color: rgba(255, 255, 255, 70); - } - + - PLOT + General Settings + + + true - + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 15 + + + + + + - + 0 0 - - - 0 - 1 - - - - - 16777215 - 1 - + + QFrame::Plain - - border: 1px solid rgba(255, 255, 255, 70); + + 2 Qt::Horizontal - - - - - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 20 - 15 - - - - - - - - 0 - - - 0 - - - - - font-size: 13px; - - - Type - - - - - - - - 141 - 0 - + + true - - - Bode - - - - - Nyquist - - - - - Nichols - - - - - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 20 - 15 - - - - - - - - 0 - - - 0 - - + 0 - - 0 + + 25 0 - - - font-size: 13px; + + + 0 - - Line thickness + + 0 - - - - - - - - - 141 - 0 - - - - 1 - - - - 0.5 - - - - - 1 - - - - - 1.5 - - - - - 2 - + + + + + 0 + 0 + + + + PLOT + + + true + + + + + + + + 0 + 0 + + + + + 0 + 1 + + + + + 16777215 + 1 + + + + Qt::Horizontal + + + true + + + + - - 2.5 - + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 15 + + + - - 3 - + + + 0 + + + 0 + + + + + Type + + + + + + + + 141 + 0 + + + + + Bode + + + + + Nyquist + + + + + Nichols + + + + + - - 3.5 - + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 15 + + + - - 4 - + + + 0 + + + 0 + + + + + 0 + + + 0 + + + 0 + + + + + Line thickness + + + + + + + + + + 141 + 0 + + + + 1 + + + + 0.5 + + + + + 1 + + + + + 1.5 + + + + + 2 + + + + + 2.5 + + + + + 3 + + + + + 3.5 + + + + + 4 + + + + + 4.5 + + + + + 5 + + + + + - - 4.5 - + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 25 + + + - - 5 - + + + 0 + + + 0 + + + + + + 0 + 0 + + + + EXPORT + + + true + + + + + + + + 16777215 + 1 + + + + Qt::Horizontal + + + true + + + + - - - - - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 20 - 25 - - - - - - - - 0 - - - 0 - - - - - - 0 - 0 - - - - QLabel { - font-size: 12px; - color: rgba(255, 255, 255, 70); - } - - - EXPORT - - - - - - - - 16777215 - 1 - - - - border: 1px solid rgba(255, 255, 255, 70); - - - Qt::Horizontal - - - - - - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 20 - 15 - - - - - - - - QPushButton { + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 15 + + + + + + + + QPushButton { min-height: 30px; max-height: 30px; border: 0px; - border-radius: 4px; - - background-color: #4a64ff; - color: #ffffff; - font-size: 14px; -} - -QPushButton:pressed { - background-color: #2a44df; -} - -QPushButton:hover { - background-color: #4a34ff; } - - - Export - - - - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 20 - 25 - - - - - - - - - - 0 - - - 20 - - - - - 0 - - - 0 - - - - - - 0 - 0 - - - - QLabel { - font-size: 12px; - color: rgba(255, 255, 255, 70); - } - - - REFERENCE - - - - - - - - 16777215 - 1 - - - - border: 1px solid rgba(255, 255, 255, 70); - - - QFrame::Plain - - - Qt::Horizontal - - - - - - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 20 - 15 - - - - - - - - false - - - - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 20 - 15 - - - - - - - - QPushButton { + + + Export + + + true + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 25 + + + + + + + + 0 + + + 20 + + + + + 0 + + + 0 + + + + + + 0 + 0 + + + + REFERENCE + + + true + + + + + + + + 16777215 + 1 + + + + QFrame::Plain + + + Qt::Horizontal + + + true + + + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 15 + + + + + + + + false + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 15 + + + + + + + + QPushButton { min-height: 30px; max-height: 30px; - border: 0px; - border-radius: 4px; - - background-color: #4a64ff; - color: #ffffff; + border: 0px;f; font-size: 14px; -} - -QPushButton:pressed { - background-color: #2a44df; -} - -QPushButton:hover { - background-color: #4a34ff; -} - -QPushButton:disabled { -background-color: #727273; } - - - Import - - - - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 20 - 15 - - - - - - - - QPushButton { + + + Import + + + true + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 15 + + + + + + + + QPushButton { min-height: 30px; max-height: 30px; border: 0px; - border-radius: 4px; - - background-color: #4a64ff; - color: #ffffff; font-size: 14px; -} - -QPushButton:pressed { - background-color: #2a44df; -} - -QPushButton:hover { - background-color: #4a34ff; -} - -QPushButton:disabled { -background-color: #727273; } - - - Snapshot - - - - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 20 - 15 - - - - - - - - false - - - QPushButton { + + + Snapshot + + + true + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 15 + + + + + + + + false + + + QPushButton { min-height: 30px; max-height: 30px; border: 0px; - border-radius: 4px; - - background-color: #4a64ff; - color: #ffffff; - font-size: 14px; -} - -QPushButton:pressed { - background-color: #2a44df; -} - -QPushButton:hover { - background-color: #4a34ff; -} - -QPushButton:disabled { -background-color: #727273; } - - - Remove Reference - - - false - - - - - - - - - Qt::Vertical - - - - 20 - 40 - - - + + + Remove Reference + + + false + + + true + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + @@ -2839,14 +2668,12 @@ background-color: #727273; - - color: white; - font-size: 14px; - font-weight: normal; - Cursors + + true + @@ -2885,12 +2712,12 @@ background-color: #727273; 2 - - border: 2px solid rgb(74, 100, 255); - Qt::Horizontal + + true + @@ -2921,15 +2748,12 @@ background-color: #727273; - - QLabel { - font-size: 12px; - color: rgba(255, 255, 255, 70); - } - CURSOR READOUTS + + true + @@ -2952,12 +2776,12 @@ background-color: #727273; 1 - - border: 1px solid rgba(255, 255, 255, 70); - Qt::Horizontal + + true + @@ -2989,31 +2813,6 @@ background-color: #727273; - - QSlider::groove { - border: 1px solid #444444; - height: 2px; /* the groove expands to the size of the slider by default. by giving it a height, it has a fixed size */ - background: #999999; - margin: 2px 0; - border-radius: 2px; -} - -QSlider::handle { - background: rgb(73, 99, 255); - border: 0px solid; - width: 18px; - margin: -8px 0; /* handle is placed by default on the contents rect of the groove. Expand outside the groove */ - border-radius: 8px; -} - -QSlider::handle:disabled { - background: #444444; -} - -QSlider::sub-page:horizontal { - background: #4A64FF; -} - 100 @@ -3136,29 +2935,9 @@ QSlider::sub-page:horizontal { - QCheckBox { - spacing: 8px; - background-color: transparent; - font-size: 14px; - font-weight: bold; - - color: rgba(255, 255, 255, 153); -} - -QCheckBox::indicator { - width: 14px; - height: 14px; - border: 2px solid rgb(74,100,255); - border-radius: 4px; -} -QCheckBox::indicator:unchecked { background-color: transparent; } -QCheckBox::indicator:checked { background-color: rgb(74,100,255); } - -QLabel { + QLabel { font-size: 14px; font-weight: bold; - - color: rgba(255, 255, 255, 153); } @@ -3185,8 +2964,6 @@ QPushButton:checked { border-image: url(:/icons/setup_btn_checked.svg); } QLabel { font-size: 14px; font-weight: bold; - - color: rgba(255, 255, 255, 153); } @@ -3217,21 +2994,15 @@ QLabel { 1 - adiscope::MenuAnim + adiscope::InstrumentNotes QWidget -
    menu_anim.hpp
    +
    instrumentnotes.h
    1
    - adiscope::CustomPushButton + adiscope::LinkedButton QPushButton -
    customPushButton.hpp
    -
    - - adiscope::RunSingleWidget - QWidget -
    runsinglewidget.h
    - 1 +
    linked_button.hpp
    adiscope::CustomSwitch @@ -3239,11 +3010,22 @@ QLabel {
    customSwitch.hpp
    - adiscope::InstrumentNotes + adiscope::MenuAnim QWidget -
    instrumentnotes.h
    +
    menu_anim.hpp
    + 1 +
    + + adiscope::RunSingleWidget + QWidget +
    runsinglewidget.h
    1
    + + adiscope::CustomPushButton + QPushButton +
    customPushButton.hpp
    +
    adiscope::dBgraph QFrame @@ -3265,6 +3047,7 @@ QLabel { + diff --git a/ui/note.ui b/ui/note.ui index 0e43d7a856..05b411bb41 100644 --- a/ui/note.ui +++ b/ui/note.ui @@ -53,19 +53,14 @@
    - [selected=true] { - opacity: 0.6; - border-radius: 4px; - background-color: #141416; -} - -[selected=false] { - background-color: transparent; -} + false + + true + 10 @@ -91,8 +86,7 @@ - qproperty-alignment: AlignCenter; -color: white; + qproperty-alignment: AlignCenter; TextLabel @@ -124,11 +118,6 @@ background-color: transparent; - - - :/icons/ic_note_unchecked.svg - :/icons/ic_note_checked.svg:/icons/ic_note_unchecked.svg - 40 @@ -141,6 +130,9 @@ background-color: transparent; false + + true +
    @@ -148,8 +140,6 @@ background-color: transparent;
    - - - + diff --git a/ui/osc_export_settings.ui b/ui/osc_export_settings.ui index 74c838ff07..2268971dec 100644 --- a/ui/osc_export_settings.ui +++ b/ui/osc_export_settings.ui @@ -19,14 +19,6 @@ Form - - QWidget { - background-color: transparent; - color: #bebebe; - font-weight: normal; - font-size: 13px; -} - 0 @@ -99,15 +91,12 @@ 0 - - QLabel { - font-size: 12px; - color: rgba(255, 255, 255, 70); -} - EXPORT + + true + @@ -124,12 +113,12 @@ 1 - - border: 1px solid rgba(255, 255, 255, 70); - Qt::Horizontal + + true + @@ -264,25 +253,14 @@ max-height: 30px; border: 0px; - border-radius: 4px; - - background-color: #4a64ff; - color: #ffffff; - - font-size: 14px; -} - -QPushButton:pressed { - background-color: #2a44df; -} - -QPushButton:hover { - background-color: #4a34ff; } Export + + true + diff --git a/ui/osc_general_settings.ui b/ui/osc_general_settings.ui index 0d380645ef..c3daf86530 100644 --- a/ui/osc_general_settings.ui +++ b/ui/osc_general_settings.ui @@ -6,40 +6,21 @@ 0 0 - 280 - 444 + 303 + 475 + + + 0 + 0 + + GeneralSettings - QWidget -{ - background-color: rgb(39, 39, 48); - color: rgb(190, 190, 190); - font: 10pt; - font-style: normal; - font-weight: normal; - -} - -QCheckBox { - spacing: 8px; - background-color: transparent; - font-size: 14px; - font-weight: bold; - color: rgba(255, 255, 255, 153); -} - -QCheckBox::indicator { - width: 14px; - height: 14px; - border: 2px solid rgb(74,100,255); - border-radius: 4px; -} -QCheckBox::indicator:unchecked { background-color: transparent; } -QCheckBox::indicator:checked { background-color: rgb(74,100,255); } + @@ -58,445 +39,461 @@ QCheckBox::indicator:checked { background-color: rgb(74,100,255); } 0 - - - 0 + + + + 0 + 0 + - - 0 + + Qt::ScrollBarAsNeeded - - - - 15 - - - 0 - - - 0 - - - - - - 0 - 0 - - - - color: white; - font-size: 14px; - font-weight: normal; - - - - General settings - - - + + Qt::ScrollBarAlwaysOff + + + QAbstractScrollArea::AdjustIgnored + + + true + + + + + 0 + 0 + 265 + 473 + + + + + 0 + 0 + + + - - - - 240 - 2 - - - - - 240 - 2 - - - - border: 2px solid rgb(74, 100, 255); - - - Qt::Horizontal - - - - - - - - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 0 - 15 - - - - - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 0 - 25 - - - - - - - - - 0 - 0 - - - - QLabel { - font-size: 12px; - color: rgba(255, 255, 255, 70); - } - - - VIEWS - - - - - - - - 0 - 1 - - - - - 16777215 - 1 - + + + 0 - - border: 1px solid rgba(255, 255, 255, 70); + + 0 - - Qt::Horizontal - - - - - - - - - 0 - - - 0 - - - 15 - - - 15 - - - - - font-size: 13px; - - - FFT - - - - - - - font-size: 13px; - - - Histogram - - - - - - - - - - - - - - - - - - - - - font-size: 13px; - - - X-Y - - - - - - - - - - - - - - - - 0 - - - - - - - - 0 - 0 - - - - - 15 - - - 0 - - - 5 - - - 0 - - - 20 - - - - - 0 - - - 0 - - - - - - 0 - 0 - - - - QLabel { - font-size: 12px; - color: rgba(255, 255, 255, 70); - } - - - X-Y - - - - - - - - 0 - 1 - - - - - 16777215 - 1 - - - - border: 1px solid rgba(255, 255, 255, 70); - - - Qt::Horizontal - - - - - - - - - 0 - - - 25 - - - 5 - - - - - font-size: 13px; - - - Y-Axis - - - - - - - - - - font-size: 13px; - - - X-Axis - - - - - - - - - - - - - - - true - - - true - - - dots - - - lines - - - 0 - - - - - - - 0 - - - - - X-Y Line thickness - - - - - - - 0 - - + + + + 15 + + + 0 + + + 0 + + + + + + 0 + 0 + + - 1 + General settings + + + true + + + + + + + + 240 + 2 + + + + + 240 + 2 + + + + Qt::Horizontal + + + true + + + + + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 0 + 25 + + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 0 + 15 + + + + + + + + + 0 + 0 + - - - 2 + VIEWS - - + + true + + + + + + + + 0 + 1 + + + + + 16777215 + 1 + + + + Qt::Horizontal + + + true + + + + + + + + + 0 + + + 0 + + + 15 + + + 15 + + + - 3 + FFT - - + + + + - 4 + Histogram - - + + + + - 5 + - - + + + + - 6 + - - + + + + - 7 + X-Y - - + + + + - 8 + + + + + + + + + 0 + + + + + + + + 0 + 0 + + + + + 15 + + + 0 + + + 5 + + + 0 + + + 20 + + + + + 0 + + + 0 + + + + + + 0 + 0 + + + + X-Y + + + true + + + + + + + + 0 + 1 + + + + + 16777215 + 1 + + + + Qt::Horizontal + + + true + + + + - - 9 - + + + 0 + + + 25 + + + 5 + + + + + Y-Axis + + + + + + + + + + X-Axis + + + + + + + - - 10 - + + + + + + true + + + true + + + dots + + + lines + + + 0 + + + + + + + 0 + + + + + X-Y Line thickness + + + + + + + 0 + + + + 1 + + + + + 2 + + + + + 3 + + + + + 4 + + + + + 5 + + + + + 6 + + + + + 7 + + + + + 8 + + + + + 9 + + + + + 10 + + + + + - - - - - - - - - - - Qt::Vertical - - - QSizePolicy::Expanding - - - - 0 - 0 - - - - - + + + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 0 + 0 + + + + + + + + + diff --git a/ui/oscilloscope.ui b/ui/oscilloscope.ui index 0368cf98db..e08ae438c0 100644 --- a/ui/oscilloscope.ui +++ b/ui/oscilloscope.ui @@ -43,11 +43,6 @@ - - #mainWidget { -background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0.1, y2:0, stop:0 rgba(0, 0, 0, 40), stop:1 transparent); -} - 0 @@ -94,14 +89,20 @@ background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0.1, y2:0, stop:0 r + + + + + + + Qt::RightToLeft - -QPushButton { + QPushButton{ width: 80px; height: 40px; @@ -109,19 +110,6 @@ QPushButton { font-weight: bold; padding-left: 15px; padding-right: 15px; - border-radius: 4px; - - background-color: #4a64ff; - color: #ffffff; - -} - -QPushButton:pressed { - background-color: #2a44df; -} - -QPushButton:hover { - background-color: #4a34ff; } @@ -137,6 +125,32 @@ QPushButton:hover { 10 + + true + + + + + + + QPushButton{ + width: 80px; + height: 40px; + + font-size: 12px; + text-align: left; + font-weight: bold; + padding-left: 15px; + padding-right: 15px; +} + + + Enable Mixed +Signal View + + + true + @@ -166,31 +180,6 @@ QPushButton:hover { 0 - - QPushButton { - min-height: 40px; - max-height: 40px; - min-width: 60px; - max-width: 60px; - padding-top:5px -} - -QPushButton:checked { - border-top: 1px solid rgba(255,255,255,150); -} - -QPushButton:!checked { - border-top: 1px solid rgba(255,255,255,0); -} - -QPushButton:!checked:hover { - border-top: 1px solid rgba(255,255,255,0); -} - -QPushButton:checked:hover { - border-top: 1px solid rgba(255,255,255,200); -} - 0 @@ -210,22 +199,7 @@ QPushButton:checked:hover { - QPushButton:checked { - image: url(:/icons/gear_wheel_pressed.svg); -} - -QPushButton:!checked { - image: url(:/icons/gear_wheel.svg); -} - - -QPushButton:!checked:hover { - image: url(:/icons/gear_wheel_hover.svg); -} - -QPushButton:checked:hover { - image: url(:/icons/gear_wheel_pressed.svg); -} + @@ -233,6 +207,12 @@ QPushButton:checked:hover { true + + true + + + true + settings_group @@ -241,21 +221,7 @@ QPushButton:checked:hover { - QPushButton:checked { - image: url(:/icons/setup3_checked_hover.svg); -} - -QPushButton:!checked { - image: url(:/icons/setup3_unchecked.svg); -} - -QPushButton:!checked:hover { - image: url(:/icons/setup3_unchecked_hover.svg); -} - -QPushButton:checked:hover { - image: url(:/icons/setup3_checked_hover.svg); -} + @@ -263,6 +229,12 @@ QPushButton:checked:hover { true + + true + + + true + @@ -282,217 +254,106 @@ QPushButton:checked:hover { 0 - - - - - background-color:black; - - - - 0 - - - - - Qt::Horizontal - - - - 10 - 10 - - - - - - - - 0 - - - - - - - Qt::Horizontal - - - - 10 - 10 - - - - - - - - - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - 0 - - - 0 - - - 0 - - - 0 - - - - - 25 - - - 0 - - - 25 - - - 0 - - - 0 - - - - - - - 0 - - - 0 - - - 0 - - - 3 - - - - - 15 - - - 10 - - - - - - - Qt::Horizontal - - - - 0 - 15 - - - - - - - - - - - - - 20 + + + true + + + + + + + 0 + + + + + Qt::Horizontal - + + + 10 + 10 + + + + + + + 0 - + + + + + + Qt::Horizontal + + + + 10 + 10 + + + + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + 0 - + 0 - - 2 + + 0 - + 0 - - + + + + 25 + + + 0 + + + 25 + + + 0 + 0 - - - - - - - 0 - - - 20 - - - 20 - - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 20 - 20 - - - - - - - - - 0 - 0 - - - - - 20 - 0 - - - + + 0 @@ -502,40 +363,153 @@ QPushButton:checked:hover { 0 - - 0 - - 0 + 3 + + + + 15 + + + 10 + + + + + + + Qt::Horizontal + + + + 0 + 15 + + + + - - - - - - Qt::Horizontal + + + + + + + + 20 + + + 0 - - QSizePolicy::Fixed + + 0 - - - 20 - 20 - + + 0 - - - - - - - - - - - + + 2 + + + 0 + + + + + 0 + + + + + + + + + + 0 + + + 20 + + + 20 + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 20 + 20 + + + + + + + + + 0 + 0 + + + + + 20 + 0 + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 20 + 20 + + + + + + + + + + + + + + @@ -545,6 +519,9 @@ QPushButton:checked:hover { 0 + + true + 0 @@ -581,9 +558,6 @@ QPushButton:checked:hover { 58 - - background-color: black; - 0 @@ -662,9 +636,6 @@ QPushButton:checked:hover { 45 - - background-color: black; - 0 @@ -787,40 +758,7 @@ QPushButton:checked:hover { - QCheckBox { - spacing: 8px; - background-color: transparent; - font-size: 14px; - font-weight: bold; - -color: rgba(255, 255, 255, 153); -} - -QCheckBox::indicator { -width: 14px; - height: 14px; - border: 2px solid rgb(74,100,255); - border-radius: 4px; -} -QCheckBox::indicator:unchecked { background-color: transparent; } -QCheckBox::indicator:checked { background-color: rgb(74,100,255); } - -QPushButton { -width: 40px; - height: 20px; - background-color: transparent; -} -QPushButton:pressed { border-image: url(:/icons/setup_btn_checked.svg); } -QPushButton:!pressed { border-image: url(:/icons/setup_btn_unchecked.svg); } -QPushButton:hover:!pressed:!checked { border-image: url(:/icons/setup_btn_hover.svg); } -QPushButton:checked { border-image: url(:/icons/setup_btn_checked.svg); } - -QLabel { -font-size: 14px; - font-weight: bold; - -color: rgba(255, 255, 255, 153); -} + @@ -918,25 +856,7 @@ color: rgba(255, 255, 255, 153); - QCheckBox { - spacing: 8px; - background-color: transparent; - font-size: 14px; - font-weight: bold; - - color: rgba(255, 255, 255, 153); -} - -QCheckBox::indicator { - width: 14px; - height: 14px; - border: 2px solid rgb(74,100,255); - border-radius: 4px; -} -QCheckBox::indicator:unchecked { background-color: transparent; } -QCheckBox::indicator:checked { background-color: rgb(74,100,255); } - -QPushButton { + QPushButton { width: 40px; height: 20px; background-color: transparent; @@ -944,14 +864,7 @@ QPushButton { QPushButton:pressed { border-image: url(:/icons/setup_btn_checked.svg); } QPushButton:!pressed { border-image: url(:/icons/setup_btn_unchecked.svg); } QPushButton:hover:!pressed:!checked { border-image: url(:/icons/setup_btn_hover.svg); } -QPushButton:checked { border-image: url(:/icons/setup_btn_checked.svg); } - -QLabel { - font-size: 14px; - font-weight: bold; - - color: rgba(255, 255, 255, 153); -} +QPushButton:checked { border-image: url(:/icons/setup_btn_checked.svg); } @@ -1037,6 +950,9 @@ QLabel { Trigger + + true + @@ -1086,20 +1002,26 @@ QLabel {
    customPushButton.hpp
    - adiscope::RunSingleWidget + adiscope::InstrumentNotes QWidget -
    runsinglewidget.h
    +
    instrumentnotes.h
    1
    - adiscope::InstrumentNotes + adiscope::RunSingleWidget QWidget -
    instrumentnotes.h
    +
    runsinglewidget.h
    1
    + + adiscope::LinkedButton + QPushButton +
    linked_button.hpp
    +
    + diff --git a/ui/pattern_generator.ui b/ui/pattern_generator.ui index 147276f424..c616a8acd6 100644 --- a/ui/pattern_generator.ui +++ b/ui/pattern_generator.ui @@ -46,11 +46,6 @@ - - #mainWidget { -background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0.1, y2:0, stop:0 rgba(0, 0, 0, 40), stop:1 transparent); -} - 0 @@ -97,34 +92,23 @@ background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0.1, y2:0, stop:0 r + + + Qt::RightToLeft - -QPushButton { -width: 80px; + QPushButton{ + width: 80px; height: 40px; -text-align: left; + text-align: left; font-weight: bold; padding-left: 15px; padding-right: 15px; -border-radius: 4px; - -background-color: #4a64ff; - color: #ffffff; - -} - -QPushButton:pressed { -background-color: #2a44df; -} - -QPushButton:hover { -background-color: #4a34ff; } @@ -140,34 +124,22 @@ background-color: #4a34ff; 10 + + true + - -QPushButton { -width: 80px; + QPushButton{ + width: 80px; height: 40px; -text-align: left; + text-align: left; font-weight: bold; padding-left: 15px; padding-right: 15px; - -border-radius: 4px; - -background-color: #4a64ff; - color: #ffffff; - -} - -QPushButton:pressed { -background-color: #2a44df; -} - -QPushButton:hover { -background-color: #4a34ff; } @@ -176,6 +148,9 @@ background-color: #4a34ff; true + + true + @@ -212,31 +187,6 @@ background-color: #4a34ff; 0 - - QPushButton { - min-height: 40px; - max-height: 40px; - min-width: 60px; - max-width: 60px; - padding-top:5px -} - -QPushButton:checked { -border-top: 1px solid rgba(255,255,255,150); -} - -QPushButton:!checked { -border-top: 1px solid rgba(255,255,255,0); -} - -QPushButton:!checked:hover { -border-top: 1px solid rgba(255,255,255,0); -} - -QPushButton:checked:hover { -border-top: 1px solid rgba(255,255,255,200); -} - 0 @@ -255,30 +205,18 @@ border-top: 1px solid rgba(255,255,255,200); - - QPushButton:checked { - image: url(:/icons/gear_wheel_pressed.svg); -} - -QPushButton:!checked { -image: url(:/icons/gear_wheel.svg); -} - - -QPushButton:!checked:hover { -image: url(:/icons/gear_wheel_hover.svg); -} - -QPushButton:checked:hover { -image: url(:/icons/gear_wheel_pressed.svg); -} - true + + true + + + true + settings_group @@ -286,29 +224,18 @@ image: url(:/icons/gear_wheel_pressed.svg); - - QPushButton:checked { - image: url(:/icons/setup3_checked_hover.svg); -} - -QPushButton:!checked { -image: url(:/icons/setup3_unchecked.svg); -} - -QPushButton:!checked:hover { -image: url(:/icons/setup3_unchecked_hover.svg); -} - -QPushButton:checked:hover { -image: url(:/icons/setup3_checked_hover.svg); -} - true + + true + + + true + @@ -331,8 +258,8 @@ image: url(:/icons/setup3_checked_hover.svg); - - background-color:black; + + true @@ -423,8 +350,8 @@ image: url(:/icons/setup3_checked_hover.svg); false - - background-color: black; + + true @@ -542,7 +469,7 @@ image: url(:/icons/setup3_checked_hover.svg); - 0 + 3 @@ -592,8 +519,8 @@ image: url(:/icons/setup3_checked_hover.svg); 0 0 - 300 - 469 + 200 + 300 @@ -638,15 +565,12 @@ image: url(:/icons/setup3_checked_hover.svg); 0 - - color: white; -font-size: 14px; -font-weight: normal; - - Channel Settings + + true + @@ -657,9 +581,6 @@ font-weight: normal; 1 - - border: 2px solid #4a64ff - QFrame::Plain @@ -669,6 +590,9 @@ font-weight: normal; Qt::Horizontal + + true + @@ -866,16 +790,12 @@ color: rgba(255,255,255,51); 0 - - QLabel { - font-size: 12px; -color: rgba(255, 255, 255, 70); -font-weight: normal; -} - GROUP + + true + @@ -886,12 +806,12 @@ font-weight: normal; 1 - - border: 1px solid rgba(255, 255, 255, 70); - Qt::Horizontal + + true + @@ -1048,15 +968,12 @@ font-weight: normal; 0 - - color: white; -font-size: 14px; -font-weight: normal; - - Trigger Settings + + true + @@ -1067,12 +984,12 @@ font-weight: normal; 1 - - border: 2px solid #4a64ff - Qt::Horizontal + + true + @@ -1249,16 +1166,12 @@ color: rgba(255,255,255,51); 0 - - QLabel { - font-size: 12px; -color: rgba(255, 255, 255, 70); -font-weight: normal; -} - EXTERNAL TRIGGER + + true + @@ -1275,12 +1188,12 @@ font-weight: normal; 1 - - border: 1px solid rgba(255, 255, 255, 70); - Qt::Horizontal + + true + @@ -1469,7 +1382,7 @@ font-weight: normal; 0 0 280 - 469 + 474 @@ -1496,19 +1409,22 @@ font-weight: normal; - - color: white; -font-size: 14px; -font-weight: normal; - - General Settings + + true + + + + 0 + 1 + + 16777215 @@ -1516,7 +1432,7 @@ font-weight: normal; - border: 2px solid #4a64ff + QFrame::Plain @@ -1527,6 +1443,9 @@ font-weight: normal; Qt::Horizontal + + true + @@ -1539,16 +1458,12 @@ font-weight: normal; - - QLabel { - font-size: 12px; -color: rgba(255, 255, 255, 70); -font-weight: normal; -} - AVAILABLE CHANNELS + + true + @@ -1565,12 +1480,12 @@ font-weight: normal; 1 - - border: 1px solid rgba(255, 255, 255, 70); - Qt::Horizontal + + true + @@ -1594,25 +1509,7 @@ font-weight: normal; - QCheckBox { - spacing: 8px; - background-color: transparent; - font-size: 14px; - font-weight: bold; - -color: rgba(255, 255, 255, 153); -} - -QCheckBox::indicator { -width: 14px; - height: 14px; - border: 2px solid rgb(74,100,255); - border-radius: 4px; -} -QCheckBox::indicator:unchecked { background-color: transparent; } -QCheckBox::indicator:checked { background-color: rgb(74,100,255); } - -QPushButton { + QPushButton { width: 40px; height: 20px; background-color: transparent; @@ -1620,14 +1517,7 @@ width: 40px; QPushButton:pressed { border-image: url(:/icons/setup_btn_checked.svg); } QPushButton:!pressed { border-image: url(:/icons/setup_btn_unchecked.svg); } QPushButton:hover:!pressed:!checked { border-image: url(:/icons/setup_btn_hover.svg); } -QPushButton:checked { border-image: url(:/icons/setup_btn_checked.svg); } - -QLabel { -font-size: 14px; - font-weight: bold; - -color: rgba(255, 255, 255, 153); -} +QPushButton:checked { border-image: url(:/icons/setup_btn_checked.svg); } @@ -1742,14 +1632,7 @@ width: 40px; QPushButton:pressed { border-image: url(:/icons/setup_btn_checked.svg); } QPushButton:!pressed { border-image: url(:/icons/setup_btn_unchecked.svg); } QPushButton:hover:!pressed:!checked { border-image: url(:/icons/setup_btn_hover.svg); } -QPushButton:checked { border-image: url(:/icons/setup_btn_checked.svg); } - -QLabel { -font-size: 14px; - font-weight: bold; - -color: rgba(255, 255, 255, 153); -} +QPushButton:checked { border-image: url(:/icons/setup_btn_checked.svg); } @@ -1782,6 +1665,9 @@ color: rgba(255, 255, 255, 153); Channel Settings + + true + @@ -1854,6 +1740,9 @@ color: rgba(255, 255, 255, 153); + + true + @@ -1877,6 +1766,9 @@ color: rgba(255, 255, 255, 153); Trigger + + true + @@ -1925,6 +1817,12 @@ color: rgba(255, 255, 255, 153); QPushButton
    customPushButton.hpp
    + + adiscope::InstrumentNotes + QWidget +
    instrumentnotes.h
    + 1 +
    adiscope::RunSingleWidget QWidget @@ -1937,14 +1835,14 @@ color: rgba(255, 255, 255, 153);
    customSwitch.hpp
    - adiscope::InstrumentNotes - QWidget -
    instrumentnotes.h
    - 1 + adiscope::LinkedButton + QPushButton +
    linked_button.hpp
    + diff --git a/ui/patterns/binarycounterpatternui.ui b/ui/patterns/binarycounterpatternui.ui index 3c30a98f9a..5794e9c553 100644 --- a/ui/patterns/binarycounterpatternui.ui +++ b/ui/patterns/binarycounterpatternui.ui @@ -7,7 +7,7 @@ 0 0 258 - 284 + 290 @@ -58,9 +58,6 @@ false - - font-size: 13px; - Init Value @@ -88,9 +85,6 @@ - - font-size: 13px; - Frequency @@ -118,9 +112,6 @@ false - - font-size: 13px; - Start counter @@ -157,9 +148,6 @@ false - - font-size: 13px; - End counter @@ -193,9 +181,6 @@ false - - font-size: 13px; - Increment diff --git a/ui/patterns/constantpattern.ui b/ui/patterns/constantpattern.ui index 2b7128023a..29e6b84fdd 100644 --- a/ui/patterns/constantpattern.ui +++ b/ui/patterns/constantpattern.ui @@ -34,9 +34,6 @@ - - font-size: 13px; - Constant diff --git a/ui/patterns/frequencypattern.ui b/ui/patterns/frequencypattern.ui index e7533ec76a..4653eadb24 100644 --- a/ui/patterns/frequencypattern.ui +++ b/ui/patterns/frequencypattern.ui @@ -7,7 +7,7 @@ 0 0 240 - 43 + 51 @@ -31,9 +31,6 @@ - - font-size: 13px; - Frequency diff --git a/ui/patterns/i2cpatternui.ui b/ui/patterns/i2cpatternui.ui index f9621825b6..df60fefddc 100644 --- a/ui/patterns/i2cpatternui.ui +++ b/ui/patterns/i2cpatternui.ui @@ -67,9 +67,6 @@ - - font-size: 13px; - Read/Write @@ -93,9 +90,6 @@ false - - font-size: 13px; - MSB First @@ -113,9 +107,6 @@ - - font-size: 13px; - Address @@ -136,9 +127,6 @@ - - font-size: 13px; - Inter frame space @@ -159,9 +147,6 @@ - - font-size: 13px; - Data diff --git a/ui/patterns/numberpattern.ui b/ui/patterns/numberpattern.ui index 22b2960f87..0185a76a5b 100644 --- a/ui/patterns/numberpattern.ui +++ b/ui/patterns/numberpattern.ui @@ -31,9 +31,6 @@ - - font-size: 13px; - Number diff --git a/ui/patterns/spipatternui.ui b/ui/patterns/spipatternui.ui index 69a3d1bc8b..40ea4441b5 100644 --- a/ui/patterns/spipatternui.ui +++ b/ui/patterns/spipatternui.ui @@ -69,9 +69,6 @@ - - font-size: 13px; - MSB First @@ -111,9 +108,6 @@ - - font-size: 13px; - CLK Phase @@ -156,9 +150,6 @@ - - font-size: 13px; - CS Polarity @@ -204,9 +195,6 @@ - - font-size: 13px; - CLK Polarity @@ -226,9 +214,6 @@ - - font-size: 13px; - Bytes per frame @@ -249,9 +234,6 @@ - - font-size: 13px; - Inter frame space @@ -272,9 +254,6 @@ - - font-size: 13px; - Data diff --git a/ui/patterns/uartpatternui.ui b/ui/patterns/uartpatternui.ui index 539caed579..379856148a 100644 --- a/ui/patterns/uartpatternui.ui +++ b/ui/patterns/uartpatternui.ui @@ -55,9 +55,6 @@ - - font-size: 13px; - Stop @@ -94,9 +91,6 @@ - - font-size: 13px; - Baud @@ -182,9 +176,6 @@ - - font-size: 13px; - Parity @@ -231,9 +222,6 @@ - - font-size: 13px; - Parameters @@ -258,9 +246,6 @@ - - font-size: 13px; - Data to Send diff --git a/ui/patterns/walkingpattern.ui b/ui/patterns/walkingpattern.ui index 5f620447ab..a5fc7807cf 100644 --- a/ui/patterns/walkingpattern.ui +++ b/ui/patterns/walkingpattern.ui @@ -39,9 +39,6 @@ - - font-size: 13px; - Walking level @@ -73,9 +70,6 @@ - - font-size: 13px; - Frequency @@ -100,9 +94,6 @@ - - font-size: 13px; - Direction @@ -134,9 +125,6 @@ - - font-size: 13px; - Length diff --git a/ui/pg_cg_settings.ui b/ui/pg_cg_settings.ui index 3731ef55ea..dca3417cc2 100644 --- a/ui/pg_cg_settings.ui +++ b/ui/pg_cg_settings.ui @@ -6,7 +6,7 @@ 0 0 - 294 + 298 690 @@ -23,8 +23,6 @@ #PBLeft, #PBRight { width: 40px; height: 30px; - border-radius: 4px; - background-color: #4a64ff; } @@ -87,15 +85,16 @@ QLabel { -font-size: 14px; font-weight: bold; line-height: 16px; -color: #FFFFFF; } TextLabel + + true + @@ -139,6 +138,9 @@ color: #FFFFFF; 30 + + true + @@ -157,6 +159,9 @@ color: #FFFFFF; 30 + + true + @@ -171,12 +176,14 @@ color: #FFFFFF; width: 240px; -height: 2px; -background-color: #4A64FF; +height: 2px; Qt::Horizontal + + true + @@ -213,8 +220,8 @@ background-color: #4A64FF; 0 0 - 250 - 616 + 254 + 610 @@ -263,9 +270,6 @@ background-color: #4A64FF; 0 - - font-size: 13px; - Pattern @@ -308,9 +312,6 @@ background-color: #4A64FF; 0 - - font-size: 13px; - Output @@ -350,19 +351,12 @@ background-color: #4A64FF; - - QLabel -{ -height: 15px; - -font-size: 12px; -line-height: 14px; -color: rgba(255,255,255,50); -} - CLOCK + + true + @@ -401,15 +395,15 @@ color: rgba(255,255,255,50); 1 - - border: 1px solid rgba(255, 255, 255, 70); - QFrame::Plain Qt::Horizontal + + true + @@ -513,43 +507,25 @@ color: rgba(255,255,255,50); - - QPushButton { - max-height: 6px; - max-width: 10px; - border-image: url(:/icons/sba_cmb_box_arrow.svg); -} - -QPushButton:checked -{ - max-height: 10px; - max-width: 6px; -border-image: url(:/icons/sba_cmb_box_arrow_right.svg); -} - - - - - true + + true + - - QLabel { -font-size: 12px; -color: rgba(255, 255, 255, 70); -} - SETTINGS + + true + @@ -566,15 +542,15 @@ color: rgba(255, 255, 255, 70); 1 - - border: 1px solid rgba(255, 255, 255, 70); - QFrame::Plain Qt::Horizontal + + true + @@ -787,47 +763,29 @@ color: rgba(255, 255, 255, 70); - 10 - 6 + 16777215 + 16777215 - - QPushButton { - max-height: 6px; - max-width: 10px; - border-image: url(:/icons/sba_cmb_box_arrow.svg); -} - -QPushButton:checked -{ - max-height: 10px; - max-width: 6px; -border-image: url(:/icons/sba_cmb_box_arrow_right.svg); -} - - - - - true + + true + - - QLabel { -font-size: 12px; -color: rgba(255, 255, 255, 70); -} - COLOR SETTINGS + + true + @@ -844,15 +802,15 @@ color: rgba(255, 255, 255, 70); 1 - - border: 1px solid rgba(255, 255, 255, 70); - QFrame::Plain Qt::Horizontal + + true + diff --git a/ui/pg_channel_group.ui b/ui/pg_channel_group.ui index a977ed6e26..28bb542527 100644 --- a/ui/pg_channel_group.ui +++ b/ui/pg_channel_group.ui @@ -122,26 +122,18 @@ border:1px solid #4a64ff; - - -QLabel + QLabel { font-size: 16px; font-weight: normal; font-style: normal; text-align: left; - color: #ffffff; -/* background-color:green;*/ + border: 0px solid red; margin:0px; padding:0px; } - -QLabel:disabled -{ - color:rgb(85,85,85); -} diff --git a/ui/pg_channel_header.ui b/ui/pg_channel_header.ui index f5768ebde7..16ac52725f 100644 --- a/ui/pg_channel_header.ui +++ b/ui/pg_channel_header.ui @@ -20,14 +20,11 @@ Form - /* background-color: rgb(170, 0, 0);*/ -QLabel{ - + QLabel{ font-size: 16px; font-weight: normal; font-style: normal; text-align: left; - color: rgba(255,255,255,140) } @@ -71,15 +68,11 @@ QLabel{ - QLabel{ -/* background-color: rgb(170, 0, 0);*/ - - + QLabel{ font-size: 16px; font-weight: normal; font-style: normal; text-align: left; - color: rgba(255,255,255,140) } diff --git a/ui/pg_channel_manager.ui b/ui/pg_channel_manager.ui index 9aedd185e0..a834670611 100644 --- a/ui/pg_channel_manager.ui +++ b/ui/pg_channel_manager.ui @@ -59,15 +59,10 @@ QLabel{ - -/* background-color: rgb(170, 0, 0);*/ - - font-size: 16px; font-weight: normal; font-style: normal; text-align: left; - color: rgba(255,255,255,140) } @@ -93,9 +88,6 @@ - - color: rgba(255,255,255,60); - QFrame::Plain @@ -105,6 +97,9 @@ Qt::Horizontal + + true + diff --git a/ui/pg_settings.ui b/ui/pg_settings.ui index fbf703b4b1..96f0f9409e 100644 --- a/ui/pg_settings.ui +++ b/ui/pg_settings.ui @@ -67,6 +67,15 @@ + + + + 255 + 255 + 255 + + + @@ -96,6 +105,15 @@ + + + + 255 + 255 + 255 + + + @@ -125,17 +143,24 @@ + + + + 255 + 255 + 255 + + + QLabel { - font-size: 14px; font-weight: bold; line-height: 16px; -color: #FFFFFF; } @@ -159,9 +184,6 @@ color: #FFFFFF; - - QFrame { color: rgb(73, 99, 255); } - QFrame::Plain @@ -171,6 +193,9 @@ color: #FFFFFF; Qt::Horizontal + + true + @@ -273,18 +298,16 @@ color: #FFFFFF; height:40px; -background-color: #4A64FF; -border-radius: 4px; - -font-size: 14px; font-weight: bold; -line-height: 16px; -color: #FFFFFF; +line-height: 16px; Reset Instrument + + true + diff --git a/ui/powercontrol.ui b/ui/powercontrol.ui index d5270faf3e..372cf8395f 100644 --- a/ui/powercontrol.ui +++ b/ui/powercontrol.ui @@ -6,7 +6,7 @@ 0 0 - 1059 + 1087 582 @@ -19,7 +19,7 @@ Scopy Power Control - + 0 @@ -36,556 +36,622 @@ 0 - - - - 0 - 0 - - - - QWidget#leftPanel { background-color: rgba(0, 0, 0, 40); } -QLabel { color: #444444; } - - + + + + 40 + - 100 + 0 - 64 + 15 - 100 + 50 - 64 + 15 - - - - - - 0 - 0 - - - - - 220 - 0 - - - - - 220 - 16777215 - - - - - 30 - 75 - true - - - - QLabel { color: #444444; qproperty-alignment: 'AlignBottom | AlignLeft'; font-size: 30pt; font-weight: bold; } - - - Set - - - - - - - Qt::Horizontal - - - - 42 - 20 - - - - - - - - - 0 - 0 - - - - - 220 - 0 - - - - - 220 - 16777215 - - - - - 30 - 75 - true - - - - QLabel { color: #444444; qproperty-alignment: 'AlignBottom | AlignLeft'; font-size: 30pt; font-weight: bold; } - - - Measure - - - - - - - QLabel { color: #444444; qproperty-alignment: 'AlignBottom | AlignLeft'; font-size: 30pt; font-weight: bold; } - - - VDC - - - - - - - - 0 - 0 - - - - - 210 - 80 - - - - QLCDNumber { -background-color: transparent; -color: #ff7200; -} - - - QFrame::NoFrame - - - QLCDNumber::Flat - - - - - - - - 0 - 0 - - - - - 210 - 80 - - - - QLCDNumber { -background-color: transparent; -color: #ff7200; -} - - - QFrame::NoFrame - - - 5 - - - QLCDNumber::Flat - - - - - - - QLabel { color: #444444; qproperty-alignment: 'AlignBottom | AlignLeft'; font-size: 30pt; font-weight: bold; } - - - VDC - - - - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 20 - 20 - - - - - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 20 - 20 - - - - - - - - - - 5.000000000000000 - - - 10 - - + + Qt::Horizontal - - QwtThermo::LeadingScale + + QSizePolicy::Fixed - - 0 + + + 40 + 10 + + + + + + + + - - - 7 + + + Qt::Horizontal - - - - - 0 - 0 - - - - - 220 - 0 - - - - - 220 - 16777215 - - - - - 30 - 75 - true - - - - QLabel { color: #444444; qproperty-alignment: 'AlignBottom | AlignLeft'; font-size: 30pt; font-weight: bold; } - - - Measure - - - - - - - - 0 - 0 - - - - - 252 - 80 - - - - QLCDNumber { + + + 40 + 20 + + + + + + + + + + + 0 + + + + + + 0 + 0 + + + + + + + + 100 + + + 64 + + + 100 + + + 64 + + + + + + + + 0 + 0 + + + + + 220 + 0 + + + + + 220 + 16777215 + + + + + 30 + 75 + true + + + + QLabel { color: #444444; qproperty-alignment: 'AlignBottom | AlignLeft'; font-size: 30pt; font-weight: bold; } + + + Set + + + + + + + Qt::Horizontal + + + + 42 + 20 + + + + + + + + + 0 + 0 + + + + + 220 + 0 + + + + + 220 + 16777215 + + + + + 30 + 75 + true + + + + QLabel { color: #444444; qproperty-alignment: 'AlignBottom | AlignLeft'; font-size: 30pt; font-weight: bold; } + + + Measure + + + + + + + QLabel { color: #444444; qproperty-alignment: 'AlignBottom | AlignLeft'; font-size: 30pt; font-weight: bold; } + + + VDC + + + + + + + + 0 + 0 + + + + + 210 + 80 + + + + QLCDNumber { background-color: transparent; -color: #9013fe; +color: #ff7200; } - - - QFrame::NoFrame - - - 6 - - - QLCDNumber::Flat - - + + + QFrame::NoFrame + + + QLCDNumber::Flat + + + + + + + + 0 + 0 + + + + + 210 + 80 + + + + QLCDNumber { +background-color: transparent; +color: #ff7200; +} + + + QFrame::NoFrame + + + 5 + + + QLCDNumber::Flat + + + + + + + QLabel { color: #444444; qproperty-alignment: 'AlignBottom | AlignLeft'; font-size: 30pt; font-weight: bold; } + + + VDC + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 20 + 20 + + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 20 + 20 + + + + + - - - - - 0 - 0 - - - - - 220 - 0 - - - - - 220 - 16777215 - - - - - 30 - 75 - true - + + + + 5.000000000000000 - - QLabel { color: #444444; qproperty-alignment: 'AlignBottom | AlignLeft'; font-size: 30pt; font-weight: bold; } + + 10 - - Set + + 0 - - - - Qt::Horizontal - - - - 0 - 20 - - - - - - - - - 0 - 0 - - - - - 252 - 80 - - - - QLCDNumber { + + + + 7 + + + + + + 0 + 0 + + + + + 220 + 0 + + + + + 220 + 16777215 + + + + + 30 + 75 + true + + + + QLabel { color: #444444; qproperty-alignment: 'AlignBottom | AlignLeft'; font-size: 30pt; font-weight: bold; } + + + Measure + + + + + + + + 0 + 0 + + + + + 252 + 80 + + + + QLCDNumber { background-color: transparent; color: #9013fe; } - - - QFrame::NoFrame - - - 6 - - - QLCDNumber::Flat - - + + + QFrame::NoFrame + + + 6 + + + QLCDNumber::Flat + + + + + + + + 0 + 0 + + + + + 220 + 0 + + + + + 220 + 16777215 + + + + + 30 + 75 + true + + + + QLabel { color: #444444; qproperty-alignment: 'AlignBottom | AlignLeft'; font-size: 30pt; font-weight: bold; } + + + Set + + + + + + + Qt::Horizontal + + + + 0 + 20 + + + + + + + + + 0 + 0 + + + + + 252 + 80 + + + + QLCDNumber { +background-color: transparent; +color: #9013fe; +} + + + QFrame::NoFrame + + + 6 + + + QLCDNumber::Flat + + + + + + + QLabel { color: #444444; qproperty-alignment: 'AlignBottom | AlignLeft'; font-size: 30pt; font-weight: bold; } + + + VDC + + + + + + + QLabel { color: #444444; qproperty-alignment: 'AlignBottom | AlignLeft'; font-size: 30pt; font-weight: bold; } + + + VDC + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 20 + 20 + + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 20 + 20 + + + + + - - - - QLabel { color: #444444; qproperty-alignment: 'AlignBottom | AlignLeft'; font-size: 30pt; font-weight: bold; } + + + + -5.000000000000000 - - VDC + + 0.000000000000000 - - - - - - QLabel { color: #444444; qproperty-alignment: 'AlignBottom | AlignLeft'; font-size: 30pt; font-weight: bold; } + + 10 - - VDC + + 0 - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 20 - 20 - - - - - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 20 - 20 - - - + + - - - - - -5.000000000000000 - - - 0.000000000000000 - - + + + + + + + 0 + 0 + + + + 10 - - Qt::Horizontal - - - QwtThermo::LeadingScale - - - QwtThermo::OriginMaximum - - - 0 - - - - - - - - - - - - - - 0 - 0 - - - - - 10 - - - 26 - - - 26 - - - 26 - - - 26 - - - - - QLabel { - color: white; - font-size:14px; - font-weight:normal; -} - - - Tracking ratio control - - - - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 20 - 5 - - - - - - - - color: #4a64ff; + + 26 - - QFrame::Plain + + 26 - - 2 + + 26 - - Qt::Horizontal + + 26 - - - - - - QPushButton { + + + + + 0 + 0 + + + + Qt::ScrollBarAlwaysOff + + + true + + + + + 0 + 0 + 218 + 471 + + + + + + + Tracking ratio control + + + true + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 5 + + + + + + + + QFrame::Plain + + + 2 + + + Qt::Horizontal + + + true + + + + + + + QPushButton { min-height: 30px; max-height: 30px; min-width: 200px; @@ -646,33 +712,33 @@ QLabel#off:disabled { color: rgba(255,255,255,51); } - - - - - - Independent - - - Tracking - - - 0 - - - - - - - 1 - - - - - false - - - QSlider::groove { + + + + + + Independent + + + Tracking + + + 0 + + + + + + + 1 + + + + + false + + + QSlider::groove { border: 1px solid #444444; height: 2px; /* the groove expands to the size of the slider by default. by giving it a height, it has a fixed size */ background: #999999; @@ -695,154 +761,144 @@ QSlider::handle:disabled { QSlider::sub-page:horizontal { background: #4A64FF; } - - - 0 - - - 100 - - - 100 - - - Qt::Horizontal - - - - - - - - 0 - 0 - - - - - 25 - 0 - - - - QLabel { color: white; } - - - 100 - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 0 - 0 - - - - QLabel { color: white; } - - - % - - - - - - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 20 - 15 - - - - - - - - - 0 - 0 - - - - QLabel { - color: white; - font-size:14px; - font-weight:normal; -} - - - Positive output - - - - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 20 - 5 - - - - - - - - - 0 - 0 - - - - QFrame { color: #ff7200; } - - - QFrame::Plain - - - 2 - - - Qt::Horizontal - - - - - - - - - - - 0 - 0 - - - - Qt::RightToLeft - - - QPushButton { + + + 0 + + + 100 + + + 100 + + + Qt::Horizontal + + + + + + + + 0 + 0 + + + + + 25 + 0 + + + + 100 + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + % + + + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 15 + + + + + + + + + 0 + 0 + + + + Positive output + + + true + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 5 + + + + + + + + + 0 + 0 + + + + QFrame { color: #ff7200; } + + + QFrame::Plain + + + 2 + + + Qt::Horizontal + + + + + + + + + + + 0 + 0 + + + + Qt::RightToLeft + + + QPushButton { width: 80px; height: 40px; border-radius: 4px; @@ -862,116 +918,112 @@ QPushButton[running=true] { QPushButton:disabled { background-color: grey; } - - - Enable - - - - :/icons/ico-play.svg - :/icons/ico-stop.svg:/icons/ico-play.svg - - - - 8 - 10 - - - - true - - - - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 0 - 15 - - - - - - - - - 0 - 0 - - - - QLabel { - color: white; - font-size:14px; - font-weight:normal; -} - - - Negative output - - - - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 20 - 5 - - - - - - - - - 0 - 0 - - - - QFrame { color: #9013fe; } - - - QFrame::Plain - - - 2 - - - Qt::Horizontal - - - - - - - - - - - 0 - 0 - - - - Qt::RightToLeft - - - QPushButton { + + + Enable + + + + :/icons/ico-play.svg + :/icons/ico-stop.svg:/icons/ico-play.svg + + + + 8 + 10 + + + + true + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 0 + 15 + + + + + + + + + 0 + 0 + + + + Negative output + + + true + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 5 + + + + + + + + + 0 + 0 + + + + QFrame { color: #9013fe; } + + + QFrame::Plain + + + 2 + + + Qt::Horizontal + + + + + + + + + + + 0 + 0 + + + + Qt::RightToLeft + + + QPushButton { width: 80px; height: 40px; border-radius: 4px; @@ -991,41 +1043,47 @@ QPushButton[running=true] { QPushButton:disabled { background-color: grey; } - - - Enable - - - - :/icons/ico-play.svg - :/icons/ico-stop.svg:/icons/ico-play.svg - - - - 8 - 10 - - - - true - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - + + + Enable + + + + :/icons/ico-play.svg + :/icons/ico-stop.svg:/icons/ico-play.svg + + + + 8 + 10 + + + + true + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + + @@ -1036,17 +1094,22 @@ QPushButton:disabled {
    detachdragzone.h
    1 - - adiscope::CustomSwitch - QPushButton -
    customSwitch.hpp
    -
    adiscope::InstrumentNotes QWidget
    instrumentnotes.h
    1
    + + adiscope::LinkedButton + QPushButton +
    linked_button.hpp
    +
    + + adiscope::CustomSwitch + QPushButton +
    customSwitch.hpp
    +
    QwtThermo QWidget @@ -1060,40 +1123,9 @@ QPushButton:disabled { + - - valuePos - valueChanged(double) - lcd1_set - display(double) - - - 917 - 233 - - - 281 - 105 - - - - - valueNeg - valueChanged(double) - lcd2_set - display(double) - - - 917 - 380 - - - 260 - 335 - - - btnSync toggled(bool) diff --git a/ui/preferences.ui b/ui/preferences.ui index 5e2560bbdb..96f1aed21f 100644 --- a/ui/preferences.ui +++ b/ui/preferences.ui @@ -7,30 +7,23 @@ 0 0 1082 - 777 + 818 + + Qt::DefaultContextMenu + Form - QCheckBox { - spacing: 8px; - background-color: transparent; - font-size: 14px; - font-weight: bold; - - color: rgba(255, 255, 255, 153); -} - -QCheckBox::indicator { - width: 14px; - height: 14px; - border: 2px solid rgb(74,100,255); - border-radius: 4px; -} -QCheckBox::indicator:unchecked { background-color: transparent; } -QCheckBox::indicator:checked { background-color: rgb(74,100,255); } + QPushButton +{ + height: 30px; + font-weight: normal; + font-style: normal; + text-align: center; +} @@ -49,504 +42,131 @@ QCheckBox::indicator:checked { background-color: rgb(74,100,255); } 0 - - - - 0 - - - 0 - - - 0 - - - 0 - - - 40 + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 66 + + + + + + + + QFrame::NoFrame + + + Qt::ScrollBarAlwaysOff + + + true + + + + + 0 + 0 + 1068 + 760 + - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 20 - 66 - - - - - - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - 0 - - - 40 - - - 0 - - - 40 - - - - - - 0 - 0 - - - - QLabel { - font-size: 12px; -color: rgba(255, 255, 255, 70); -} - - - GENERAL - - - - - - - - 0 - 0 - - - - - 0 - 1 - - - - - 16777215 - 1 - - - - border: 1px solid rgba(255, 255, 255, 70); + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 - - Qt::Horizontal + + 0 - - - - - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 20 - 15 - - - - - - - - 40 - - - 0 - - - 40 - - - 0 - - - 40 - - - 10 - - - - - - 6 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - 6 - - - 0 - - - - - - 0 - 0 - - - - QLabel { - font-size: 12px; -color: rgba(255, 255, 255, 70); -} - - - NETWORK ANALYZER - - - - - - - - 200 - 1 - - - - - 16777215 - 1 - - - - border: 1px solid rgba(255, 255, 255, 70); - - - Qt::Horizontal - - - - - - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 20 - 15 - - - - - - - - - - - 16777215 - 16777215 - - - - QCheckBox { - spacing: 8px; - background-color: transparent; - font-size: 14px; - font-weight: bold; - - color: rgba(255, 255, 255, 153); -} - -QCheckBox::indicator { - width: 14px; - height: 14px; - border: 2px solid rgb(74,100,255); - border-radius: 4px; -} -QCheckBox::indicator:unchecked { background-color: transparent; } -QCheckBox::indicator:checked { background-color: rgb(74,100,255); } - - - - - - - - - - - 0 - 0 - - - - Always display 0db value on graph - - - 0 - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 20 - 5 - - - - - - - - - 0 - - - - - - - - - 0 - 0 - - - - - - - true - - - - - - - Save session when closing Scopy - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - - - - - true - - - - - - - Enable digital decoders - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - 0 - 0 - - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - - - - - - - - - Run external scripts (Experimental) - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - - - 6 - - + 0 0 - + - 6 + 0 + + + 40 0 + + 40 + - + 0 0 - - QLabel { - font-size: 12px; -color: rgba(255, 255, 255, 70); -} - - SPECTRUM ANALYZER + GENERAL + + + true - + + + + 0 + 0 + + 0 @@ -559,1334 +179,1677 @@ color: rgba(255, 255, 255, 70); 1 - - border: 1px solid rgba(255, 255, 255, 70); - Qt::Horizontal + + true + - - - - - QCheckBox { - spacing: 8px; - background-color: transparent; - font-size: 14px; - font-weight: bold; - - color: rgba(255, 255, 255, 153); -} - -QCheckBox::indicator { - width: 14px; - height: 14px; - border: 2px solid rgb(74,100,255); - border-radius: 4px; -} -QCheckBox::indicator:unchecked { background-color: transparent; } -QCheckBox::indicator:checked { background-color: rgb(74,100,255); } - - - - - - true - - - - - - - - 0 - 0 - + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 15 + + + + + + + + 40 + + + 0 + + + 40 + + + 0 + + + 40 + + + 10 + + + + + 6 - - Only search marker peaks in visible domain + + 0 - + 0 - + + + + 0 + + + + + + 0 + 0 + + + + LOGIC ANALYZER + + + true + + + + + + + + 16777215 + 1 + + + + Qt::Horizontal + + + true + + + + + + + + + + + + + + + + + + Display sampling points when zoomed + + + 0 + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 20 + 15 + + + + + - - + + - Qt::Horizontal + Qt::Vertical + + + QSizePolicy::Fixed - 40 - 20 + 20 + 15 - - - -
    - - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - 10 - - - - - - - QCheckBox { - spacing: 8px; - background-color: transparent; - font-size: 14px; - font-weight: bold; - - color: rgba(255, 255, 255, 153); -} - -QCheckBox::indicator { - width: 14px; - height: 14px; - border: 2px solid rgb(74,100,255); - border-radius: 4px; -} -QCheckBox::indicator:unchecked { background-color: transparent; } -QCheckBox::indicator:checked { background-color: rgb(74,100,255); } + + + + + + + 0 + 0 + + + + + + + true + + + + + + + Save session when closing Scopy + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + 0 - - + + 0 - - - - - - Enable graticule + + 0 - - - - - - Qt::Horizontal + + 0 - - - 40 - 20 - + + 0 - - - - - - - - - - QCheckBox { - spacing: 8px; - background-color: transparent; - font-size: 14px; - font-weight: bold; - - color: rgba(255, 255, 255, 153); -} - -QCheckBox::indicator { - width: 14px; - height: 14px; - border: 2px solid rgb(74,100,255); - border-radius: 4px; -} -QCheckBox::indicator:unchecked { background-color: transparent; } -QCheckBox::indicator:checked { background-color: rgb(74,100,255); } + + + + + + + + + + + + + Scriptable manual calibration + + + 0 + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 15 + + + + + + + + + + + + + true + + + + + + + Enable digital decoders + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + 6 + + + 0 + + + 0 + + + + + 6 + + + 0 + + + + + + 0 + 0 + + + + SPECTRUM ANALYZER + + + true + + + + + + + + 0 + 1 + + + + + 16777215 + 1 + + + + Qt::Horizontal + + + true + + + + + + + + + + + + + + true + + + + + + + + 0 + 0 + + + + Only search marker peaks in visible domain + + + 0 + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + 0 + + + + + + + + + + + + Enable automatic update checking + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + + + + + + + Enable all instrument notes + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + + + + + + + Show advanced device information + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + + + + + + + Enable user notes in main page + + + 0 + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + 0 - - - - - - Enable sample rate filters + + 0 - - - - - - Qt::Horizontal + + 0 - - - 40 - 20 - + + 0 - - - -
    - - - - - - QCheckBox { - spacing: 8px; - background-color: transparent; - font-size: 14px; - font-weight: bold; - - color: rgba(255, 255, 255, 153); -} - -QCheckBox::indicator { - width: 14px; - height: 14px; - border: 2px solid rgb(74,100,255); - border-radius: 4px; -} -QCheckBox::indicator:unchecked { background-color: transparent; } -QCheckBox::indicator:checked { background-color: rgb(74,100,255); } + + 0 - - + + 10 + + + + + + + + + + + + + + Enable graticule + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + + + Enable sample rate filters + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + + + + + + + Enable mini histogram + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + Qt::Vertical + + + + 0 + 0 + + + + + + + + + + + + + Show ADC digital filter config + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + 0 + 0 + + + + + + + + + + + + + + Enable labels on the plot + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + 0 + + + 0 + + + + + + 0 + 0 + + + + OSCILLOSCOPE + + + true + + + + + + + + 0 + 1 + + + + + 16777215 + 1 + + + + Qt::Horizontal + + + true + + + + + + +
    +
    + + + + + 0 + 0 + + + + + 0 - - - - - - Enable mini histogram + + 0 - - - - - - Qt::Horizontal + + 0 - - - 40 - 20 - + + 0 - - - -
    - - - - Qt::Vertical - - - - 0 - 0 - - - - - - - - - - QCheckBox { - spacing: 8px; - background-color: transparent; - font-size: 14px; - font-weight: bold; - - color: rgba(255, 255, 255, 153); -} - -QCheckBox::indicator { - width: 14px; - height: 14px; - border: 2px solid rgb(74,100,255); - border-radius: 4px; -} -QCheckBox::indicator:unchecked { background-color: transparent; } -QCheckBox::indicator:checked { background-color: rgb(74,100,255); } + + 0 - - - - - - Show ADC digital filter config + + + + + + + + + + + + + Run external scripts (Experimental) + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + +
    +
    + + + + + + + + + + + + + Double click to detach a tool + + + 0 + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + 0 + + + + + + + + + + + + Skip calibration if already calibrated (needs FW >= 0.26) + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + 6 - - - - - - Qt::Horizontal + + 0 - - - 40 - 20 - + + 0 - - - -
    - - - - - - - 0 - 0 - + + 0 - - QCheckBox { - spacing: 8px; - background-color: transparent; - font-size: 14px; - font-weight: bold; - - color: rgba(255, 255, 255, 153); -} - -QCheckBox::indicator { - width: 14px; - height: 14px; - border: 2px solid rgb(74,100,255); - border-radius: 4px; -} -QCheckBox::indicator:unchecked { background-color: transparent; } -QCheckBox::indicator:checked { background-color: rgb(74,100,255); } + + 0 - - + + + + 6 + + + 0 + + + + + + 0 + 0 + + + + NETWORK ANALYZER + + + true + + + + + + + + 200 + 1 + + + + + 16777215 + 1 + + + + Qt::Horizontal + + + true + + + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 15 + + + + + + + + + + + 16777215 + 16777215 + + + + + + + + + + + + 0 + 0 + + + + Always display 0db value on graph + + + 0 + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 5 + + + + + +
    +
    + + + + 0 + + + + + + + + + + + + true + + + + + + + Enable animations + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + 6 - - - - - - Enable labels on the plot + + 0 - - - - - - Qt::Horizontal + + 0 - - - 40 - 20 - + + 0 - - - -
    - - - - 0 - - - 0 - - - - - - 0 - 0 - + + 0 - - QLabel { - font-size: 12px; -color: rgba(255, 255, 255, 70); + + + + 6 + + + 0 + + + + + + 0 + 0 + + + + SIGNAL GENERATOR + + + true + + + + + + + + 0 + 1 + + + + + 16777215 + 1 + + + + Qt::Horizontal + + + true + + + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 5 + + + + + + + + + + Number of displayed periods + + + + + + + + 0 + 0 + + + + +QLineEdit[invalid=true] { +border-color: red; +color: red; +} +QLineEdit[valid=true] { +border-color: grey; +color: white; } + + + 1 + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 0 + 0 + + + + + + + + + + + + + + + + + + + + Attempt temperature-based calibration (EXPERIMENTAL) + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + 0 - - OSCILLOSCOPE - - - - - - - - 0 - 1 - - - - - 16777215 - 1 - - - - border: 1px solid rgba(255, 255, 255, 70); - - - Qt::Horizontal - - - - -
    - - -
    - - - - - 6 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - 6 - - - 0 - - - - - - 0 - 0 - - - - QLabel { - font-size: 12px; -color: rgba(255, 255, 255, 70); -} - - - SIGNAL GENERATOR - - - - - - - - 0 - 1 - - - - - 16777215 - 1 - - - - border: 1px solid rgba(255, 255, 255, 70); - - - Qt::Horizontal - - - - - - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 20 - 5 - - - - - - - - - - Number of displayed periods - - - - - - - - 0 - 0 - - - - -QLineEdit[invalid=true] { -border-color: red; -color: red; -} -QLineEdit[valid=true] { -border-color: grey; -color: white; -} + + 0 - - 1 + + 0 - - - - - - Qt::Horizontal + + 0 - - - 40 - 20 - + + 0 - - - - - - - - Qt::Vertical - - - QSizePolicy::Expanding - - - - 0 - 0 - - - - - - - - - - - 6 - - - 0 - - - 0 - - - - - 0 - - - - - - 0 - 0 - - - - QLabel { - font-size: 12px; -color: rgba(255, 255, 255, 70); -} - - - LOGIC ANALYZER - + + + + 0 + + + 10 + + + 10 + + + + + Language (requires app restart) + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 40 + 20 + + + + + + + + + 0 + 0 + + + + + + + - - - - - 16777215 - 1 - - - - border: 1px solid rgba(255, 255, 255, 70); - - - Qt::Horizontal - - + + + + + + Theme + + + + + + + - - - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 20 - 15 - - - - - - - - - - QCheckBox { - spacing: 8px; - background-color: transparent; - font-size: 14px; - font-weight: bold; - - color: rgba(255, 255, 255, 153); -} - -QCheckBox::indicator { - width: 14px; - height: 14px; - border: 2px solid rgb(74,100,255); - border-radius: 4px; -} -QCheckBox::indicator:unchecked { background-color: transparent; } -QCheckBox::indicator:checked { background-color: rgb(74,100,255); } - - - + + + + 10 - - - - - - Display sampling points when zoomed - - + 0 - - - - - - Qt::Horizontal - - - - 40 - 20 - + + 0 - + + + + + + + 0 + 0 + + + + DEBUG + + + true + + + + + + + + 0 + 1 + + + + + 16777215 + 1 + + + + Qt::Horizontal + + + true + + + + + + + + + 0 + + + + + + + + + + + + Enable Debug Messages (Only for Debugging, Bugreporting) + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + + + + + + + + + Enable Session Logging (Only for Debugging, Bugreporting) + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + color:red + + + Currently unavailable: libm2k logging system is disabled + + + + + + + + + 0 + + + + + + + + + + + + Enable IIO Debug Instrument (Requires Scopy restart) + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + - - - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - - - - - - - - - Scriptable manual calibration - - - 0 - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 20 - 15 - - - - - - - - - - - - - - - - - Enable all instrument notes - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - 0 - - - 10 - - - 10 - - - - - Language (requires app restart) - - - - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 40 - 20 - - - - - - - - - 0 - 0 - - - - - - - - - - color:red - - - Restart the application for changes to take effect - - - - - - - - - - - - - - - - - - - Show advanced device information - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - - - - - - - - - Double click to detach a tool - - - 0 - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 20 - 15 - - - - - - - - - - - - - - - - - Attempt temperature-based calibration (EXPERIMENTAL) - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - - - - - true - - - - - - - Enable animations - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - + + + + + - 10 + 0 + + + 0 0 - + 0 - - - - - - - 0 - 0 - - - - QLabel { - font-size: 12px; -color: rgba(255, 255, 255, 70); -} - - - DEBUG - - - - - - - - 0 - 1 - - - - - 16777215 - 1 - - - - border: 1px solid rgba(255, 255, 255, 70); - - - Qt::Horizontal - - - - - - - - - 0 - - - - - - - - - - - - Enable Debug Messages (Only for Debugging, Bugreporting) - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - 0 - - - - - - - - - - - - Enable IIO Debug Instrument (Requires Scopy restart) - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - - - - - - - - - - - Enable user notes in main page - - - 0 - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - + 0 - - - - - - - - - - - Skip calibration if already calibrated (needs FW >= 0.26) - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - 40 - - - 0 - - - 40 - - - 0 - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - 100 - 0 - - - - - 100 - 16777215 - - - - QPushButton -{ - color:#ffffff; - height: 30px; - border-radius: 4px; - background-color: #4a64ff; - font-size: 14px; - font-weight: normal; - font-style: normal; - text-align: center; -} - -QPushButton:hover -{ - background-color: #4a34ff; -} - - - Reset Scopy - - - true - - - - - - + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 15 + + + + + + + + 40 + + + 0 + + + 40 + + + 0 + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + 150 + 0 + + + + + 150 + 16777215 + + + + Reset Scopy + + + true + + + true + + + + + + + + + 40 + + + 0 + + + 40 + + + + + + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 20 + 40 + + + + + + + + + - - - adiscope::DetachDragZone - QWidget -
    detachdragzone.h
    - 1 -
    -
    diff --git a/ui/scopy_color_editor.ui b/ui/scopy_color_editor.ui new file mode 100644 index 0000000000..6ea0d16508 --- /dev/null +++ b/ui/scopy_color_editor.ui @@ -0,0 +1,446 @@ + + + ScopyColorEditor + + + + 0 + 0 + 552 + 445 + + + + Form + + + + + + + 6 + + + + + + 0 + 0 + + + + QComboBox::AdjustToContentsOnFirstShow + + + + + + + + + true + + + + 0 + 32 + + + + +QPushButton { + + text-align: left; + font-weight: bold; + padding-left: 15px; + padding-right: 15px; + border-radius: 4px; + + background-color: #4a64ff; + color: #ffffff; + +} + +QPushButton:pressed { + background-color: #2a44df; +} + +QPushButton:hover { + background-color: #4a34ff; +} + + + Copy + + + false + + + + + + + false + + + + 0 + 0 + + + + + 0 + 32 + + + + +QPushButton { + + text-align: left; + font-weight: bold; + padding-left: 15px; + padding-right: 15px; + border-radius: 4px; + + background-color: #4a64ff; + color: #ffffff; + +} + +QPushButton:pressed { + background-color: #2a44df; +} + +QPushButton:hover { + background-color: #4a34ff; +} + +QPushButton:disabled { + background-color: gray; +} + + + Remove + + + + + + + + 0 + 32 + + + + +QPushButton { + + text-align: left; + font-weight: bold; + padding-left: 15px; + padding-right: 15px; + border-radius: 4px; + + background-color: #4a64ff; + color: #ffffff; + +} + +QPushButton:pressed { + background-color: #2a44df; +} + +QPushButton:hover { + background-color: #4a34ff; +} + + + Save + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + 16777215 + 32 + + + + QLineEdit { + border-color: grey; +} + + + + true + + + Search + + + + + + + false + + + + 32 + 32 + + + + + 32 + 32 + + + + + + + + :/icons/time_trigger_left.svg:/icons/time_trigger_left.svg + + + + 32 + 32 + + + + true + + + + + + + false + + + + 32 + 32 + + + + + 32 + 32 + + + + + + + + :/icons/time_trigger_right.svg:/icons/time_trigger_right.svg + + + + 32 + 32 + + + + true + + + + + + + + + 0 + + + true + + + + Item List + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + true + + + + + 0 + 0 + 528 + 247 + + + + + 3 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + + + + Advanced Editor + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Some artefacts may appear if the application is not restarted + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + 0 + 32 + + + + +QPushButton { + text-align: left; + font-weight: bold; + padding-left: 15px; + padding-right: 15px; + border-radius: 4px; + + background-color: #4a64ff; + color: #ffffff; + +} + +QPushButton:pressed { + background-color: #2a44df; +} + +QPushButton:hover { + background-color: #4a34ff; +} + + + restart + + + + + + + + + + + + + diff --git a/ui/scopyaboutdialog.ui b/ui/scopyaboutdialog.ui new file mode 100644 index 0000000000..ffe586d869 --- /dev/null +++ b/ui/scopyaboutdialog.ui @@ -0,0 +1,165 @@ + + + ScopyAboutDialog + + + Qt::ApplicationModal + + + + 0 + 0 + 517 + 514 + + + + About Scopy + + + QPushButton { + width: 80px; + height: 40px; + + font-weight: bold; + padding-left: 15px; + padding-right: 15px; +} + + + false + + + + + + + 0 + 0 + + + + QWidget { +background-repeat: no-repeat; +background-position: center center; +} + + + + + + Qt::AlignCenter + + + true + + + + + + + + 0 + 0 + + + + TextLabel + + + Qt::AlignCenter + + + + + + + + 0 + 0 + + + + QFrame::NoFrame + + + 0 + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html> + + + true + + + + + + + 0 + + + + + Check for + updates + + + true + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Back + + + true + + + + + + + Ok + + + true + + + + + + + + + + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + + + diff --git a/ui/signal_generator.ui b/ui/signal_generator.ui index ab0d729ee8..383eed93a4 100644 --- a/ui/signal_generator.ui +++ b/ui/signal_generator.ui @@ -37,11 +37,6 @@ - - #mainWidget { -background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0.1, y2:0, stop:0 rgba(0, 0, 0, 40), stop:1 transparent); -} - 0 @@ -72,6 +67,25 @@ background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0.1, y2:0, stop:0 r 16 + + + + Qt::Horizontal + + + QSizePolicy::Preferred + + + + 40 + 20 + + + + + + + @@ -104,8 +118,8 @@ background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0.1, y2:0, stop:0 r - - background-color: rgb(0, 0, 0); + + true @@ -197,8 +211,8 @@ background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0.1, y2:0, stop:0 r 0 0 - 380 - 597 + 314 + 604 @@ -238,29 +252,10 @@ background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0.1, y2:0, stop:0 r - /* QTabsWidgets */ -QTabWidget::pane { - border-top: 0px; -} -QTabBar::tab { - min-width: 100px; - min-height: 32px; - padding-bottom: 5px; - font: bold; -} -QTabBar::tab:!selected { - border-bottom: 2px solid rgba(55, 55, 64); - margin-top: 0px; -} -QTabBar::tab:selected { - color: white; - border-bottom: 2px solid rgba(74, 100, 255); - margin-top: 0px; -} - + - 1 + 0 false @@ -447,15 +442,12 @@ QTabBar::tab:selected { 0 - - QLabel { - font-size: 12px; - color: rgba(255, 255, 255, 70); - } - TIMING + + true + @@ -472,10 +464,6 @@ QTabBar::tab:selected { 1 - - border: 1px solid rgba(255, 255, 255, 70); - - Qt::Horizontal @@ -495,6 +483,9 @@ QTabBar::tab:selected { 360.000000000000000 + + true + @@ -566,15 +557,12 @@ QTabBar::tab:selected { 0 - - QLabel { - font-size: 12px; - color: rgba(255, 255, 255, 70); - } - FILE + + true + @@ -591,12 +579,12 @@ QTabBar::tab:selected { 1 - - border: 1px solid rgba(255, 255, 255, 70); - Qt::Horizontal + + true + @@ -765,33 +753,20 @@ QTabBar::tab:selected { QPushButton{ - -/*height: 128px; -width: 128px; -background-image: url(:/icons/floppy.svg);*/ background-position: center center; background-repeat: no-repeat; -background-color: #4a64ff; height: 30px; - border-radius: 4px; - - font-size: 14px; font-weight: normal; font-style: normal; text-align: center; - color: #ffffff; -} - - -QPushButton:hover -{ - background-color: #4a34ff; -} - +} Load file + + true + @@ -805,33 +780,23 @@ QPushButton:hover QPushButton{ -/*height: 128px; -width: 128px;*/ image: url(:/icons/refresh.svg); background-position: center center; background-repeat: no-repeat; -background-color: #4a64ff; height: 30px; - border-radius: 4px; - - font-size: 14px; + font-weight: normal; font-style: normal; text-align: center; - color: #ffffff; -} - - -QPushButton:hover -{ - background-color: #4a34ff; -} - +} + + true + @@ -893,15 +858,12 @@ QPushButton:hover 0 - - QLabel { - font-size: 12px; - color: rgba(255, 255, 255, 70); - } - SCALING + + true + @@ -918,12 +880,12 @@ QPushButton:hover 1 - - border: 1px solid rgba(255, 255, 255, 70); - Qt::Horizontal + + true + @@ -1040,19 +1002,7 @@ QPushButton:hover - QPushButton { - max-height: 6px; - max-width: 10px; - border-image: url(:/icons/sba_cmb_box_arrow.svg); -} - -QPushButton:checked -{ - max-height: 10px; - max-width: 6px; -border-image: url(:/icons/sba_cmb_box_arrow_right.svg); -} - + @@ -1061,7 +1011,10 @@ border-image: url(:/icons/sba_cmb_box_arrow_right.svg); true - false + true + + + true @@ -1073,15 +1026,12 @@ border-image: url(:/icons/sba_cmb_box_arrow_right.svg); 0 - - QLabel { - font-size: 12px; - color: rgba(255, 255, 255, 70); - } - NOISE + + true + @@ -1104,12 +1054,12 @@ border-image: url(:/icons/sba_cmb_box_arrow_right.svg); 1 - - border: 1px solid rgba(255, 255, 255, 70); - Qt::Horizontal + + true + @@ -1205,24 +1155,10 @@ border-image: url(:/icons/sba_cmb_box_arrow_right.svg); - 10 - 6 + 16777215 + 16777215 - - QPushButton { - max-height: 6px; - max-width: 10px; -border-image: url(:/icons/sba_cmb_box_arrow_right.svg); -} - -QPushButton:checked -{ - max-height: 10px; - max-width: 6px; - border-image: url(:/icons/sba_cmb_box_arrow.svg); -} - @@ -1230,21 +1166,21 @@ QPushButton:checked true - false + true + + + true - - QLabel { - font-size: 12px; - color: rgba(255, 255, 255, 70); - } - OTHER + + true + @@ -1267,12 +1203,12 @@ QPushButton:checked 1 - - border: 1px solid rgba(255, 255, 255, 70); - Qt::Horizontal + + true + @@ -1313,9 +1249,6 @@ QPushButton:checked - - font-size: 13px; - Line thickness @@ -1388,6 +1321,40 @@ QPushButton:checked + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + Plot Autoscale + + + + + + + + + + true + + + + + @@ -1460,17 +1427,27 @@ QPushButton:checked 1 - adiscope::RunSingleWidget + adiscope::InstrumentNotes QWidget -
    runsinglewidget.h
    +
    instrumentnotes.h
    1
    - adiscope::InstrumentNotes + adiscope::RunSingleWidget QWidget -
    instrumentnotes.h
    +
    runsinglewidget.h
    1
    + + adiscope::LinkedButton + QPushButton +
    linked_button.hpp
    +
    + + adiscope::CustomSwitch + QPushButton +
    customSwitch.hpp
    +
    adiscope::Math QWidget diff --git a/ui/spectrum_analyzer.ui b/ui/spectrum_analyzer.ui index c7cbfffdb1..101043b0e5 100644 --- a/ui/spectrum_analyzer.ui +++ b/ui/spectrum_analyzer.ui @@ -6,7 +6,7 @@ 0 0 - 969 + 989 661 @@ -40,41 +40,6 @@ 0 - - -QWidget#mainWidget -{ -background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0.1, y2:0, stop:0 rgba(0, 0, 0, 40), stop:1 transparent); -} - -/* QComboBoxes*/ -QComboBox -{ - height: 24px; - border: 0px; - color: white; - font-size: 14px; - border-bottom: 1px solid rgba(255, 255, 255, 102); - padding-bottom: 4px; -} -QComboBox::drop-down -{ - subcontrol-position: center right; - width: 10px; - height: 6px; - border-image: url(:/icons/sba_cmb_box_arrow.svg); -} -QComboBox QAbstractItemView { - border: 0px; - color: white; - selection-background-color: rgba(25, 25, 25); - outline: 0px; -} -QComboBox:disabled -{ - color: rgb(85, 85, 85); -} - 0 @@ -121,14 +86,20 @@ QComboBox:disabled + + + + + + + Qt::RightToLeft - -QPushButton { + QPushButton{ width: 80px; height: 40px; @@ -136,20 +107,7 @@ QPushButton { font-weight: bold; padding-left: 15px; padding-right: 15px; - border-radius: 4px; - background-color: #4a64ff; - color: #ffffff; - -} - -QPushButton:pressed { - background-color: #2a44df; -} - -QPushButton:hover { - background-color: #4a34ff; -} - +} Print @@ -164,6 +122,9 @@ QPushButton:hover { 10 + + true + @@ -218,21 +179,12 @@ QPushButton:hover { QPushButton { -color: white; -background-color: #4A64FF; - font-size: 12px; font-weight: bold; height: 30px; border-width: 0px; border-radius: 3px; min-width: 6em; -} -QPushButton:disabled { -background-color: grey; -} -QPushButton:checked { -background-color: #F45000; } @@ -241,6 +193,9 @@ background-color: #F45000; true + + true + @@ -267,31 +222,6 @@ background-color: #F45000; 0 - - QPushButton { - min-height: 40px; - max-height: 40px; - min-width: 60px; - max-width: 60px; - padding-top:5px -} - -QPushButton:checked { - border-top: 1px solid rgba(255,255,255,150); -} - -QPushButton:!checked { - border-top: 1px solid rgba(255,255,255,0); -} - -QPushButton:!checked:hover { - border-top: 1px solid rgba(255,255,255,0); -} - -QPushButton:checked:hover { - border-top: 1px solid rgba(255,255,255,200); -} - 0 @@ -310,24 +240,6 @@ QPushButton:checked:hover { - - QPushButton:checked { - image: url(:/icons/gear_wheel_pressed.svg); -} - -QPushButton:!checked { - image: url(:/icons/gear_wheel.svg); -} - - -QPushButton:!checked:hover { - image: url(:/icons/gear_wheel_hover.svg); -} - -QPushButton:checked:hover { - image: url(:/icons/gear_wheel_pressed.svg); -} - @@ -337,34 +249,28 @@ QPushButton:checked:hover { false + + true + + + true + - - -QPushButton:checked { - image: url(:/icons/setup3_checked_hover.svg); -} - -QPushButton:!checked { - image: url(:/icons/setup3_unchecked.svg); -} - -QPushButton:!checked:hover { - image: url(:/icons/setup3_unchecked_hover.svg); -} - -QPushButton:checked:hover { - image: url(:/icons/setup3_checked_hover.svg); -} - true + + true + + + true + @@ -385,10 +291,8 @@ QPushButton:checked:hover { 0 - - QWidget { - background-color: black; -} + + true @@ -409,23 +313,6 @@ QPushButton:checked:hover { 10 - - - - 0 - - - - - - - - 200 - 200 - - - - @@ -521,6 +408,23 @@ QPushButton:checked:hover { + + + + + 200 + 200 + + + + + + + + 0 + + + @@ -530,13 +434,7 @@ QPushButton:checked:hover { - QWidget#rightMenu { - background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 rgba(35, 35, 43, 255), stop:0.1 rgba(39, 39, 48, 255), stop: 0.9 rgba(39, 39, 48, 255), stop: 1 rgba(35, 35, 43, 255)); -} - -QWidget { - background-color: rgba(39, 39, 48, 255); -} + @@ -563,7 +461,7 @@ QWidget { - 1 + 2 @@ -584,14 +482,12 @@ QWidget { - - color: white; - font-size: 14px; - font-weight: normal; - Channel + + true + @@ -608,9 +504,6 @@ QWidget { 16777215 - - color: #4A64FF; - QFrame::Plain @@ -620,6 +513,9 @@ QWidget { Qt::Horizontal + + true + @@ -632,9 +528,6 @@ QWidget { - - font-size: 13px; - Type @@ -666,9 +559,6 @@ QWidget { - - font-size: 13px; - Window @@ -709,9 +599,6 @@ QWidget { 0 - - font-size: 13px; - Averaging @@ -722,7 +609,6 @@ QWidget { font-size: 14px; height:24px; -color: white; border: 0px; border-bottom: 1px solid rgba(255,255,255,100); @@ -764,112 +650,92 @@ border-color: green; QPushButton { -color: white; -background-color: #4a64ff; -font-family: 14pt; border-width: 0px; border-radius: 3px; min-width: 64px; -} -QPushButton:disabled { -background-color: grey; -} -QPushButton:pressed { -background-color: #F45000; -} - -QPushButton:enabled:!pressed { background-color: #4a64ff; } -QPushButton[valid=true]:enabled:!pressed { background-color: #4a64ff; } -QPushButton[invalid=true]:enabled:!pressed { background-color: #4a64ff; } -QPushButton:pressed { -background-color: #4a64ff; -} -QPushButton:hover -{ - background-color: #4a34ff; } Apply + + true + + + + + + + + + 5 + + + 0 + + + + + CH Thickness + + + + + + + + 0.5 + + + + + 1 + + + + + 1.5 + + + + + 2 + + + + + 2.5 + + + + + 3 + + + + + 3.5 + + + + + 4 + + + + + 4.5 + + + + + 5 + + - - - - 5 - - - 0 - - - - - font-size: 13px; - - - CH Thickness - - - - - - - - 0.5 - - - - - 1 - - - - - 1.5 - - - - - 2 - - - - - 2.5 - - - - - 3 - - - - - 3.5 - - - - - 4 - - - - - 4.5 - - - - - 5 - - - - - - @@ -934,33 +800,17 @@ QPushButton:hover QPushButton{ width: 175px; height: 30px; - border-radius: 4px; - background-color: #4a64ff; - - font-size: 14px; font-weight: normal; font-style: normal; text-align: center; - color: #ffffff; -} - - -QPushButton:disabled { - background-color: grey; - color:white; -} - -QPushButton:pressed { - background-color: #2a44df; -} - -QPushButton:hover { - background-color: #4a34ff; } Snapshot + + true + @@ -996,23 +846,7 @@ QPushButton:hover { - -QCheckBox { - spacing: 8px; - background-color: transparent; - font-size: 14px; - font-weight: bold; - color: rgba(255, 255, 255, 153); -} - -QCheckBox::indicator { - width: 14px; - height: 14px; - border: 2px solid rgb(74,100,255); - border-radius: 4px; -} -QCheckBox::indicator:unchecked { background-color: transparent; } -QCheckBox::indicator:checked { background-color: rgb(74,100,255); } + @@ -1033,13 +867,14 @@ QCheckBox::indicator:checked { background-color: rgb(74,100,255); } - color: white; - font-size: 14px; - font-weight: normal; + General settings + + true + @@ -1073,7 +908,7 @@ QCheckBox::indicator:checked { background-color: rgb(74,100,255); } - color: #4A64FF; + QFrame::Plain @@ -1084,6 +919,9 @@ QCheckBox::indicator:checked { background-color: rgb(74,100,255); } Qt::Horizontal + + true + @@ -1110,25 +948,14 @@ QCheckBox::indicator:checked { background-color: rgb(74,100,255); } max-height: 30px; border: 0px; - border-radius: 4px; - - background-color: #4a64ff; - color: #ffffff; - - font-size: 14px; -} - -QPushButton:pressed { - background-color: #2a44df; -} - -QPushButton:hover { - background-color: #4a34ff; } Export + + true + @@ -1164,85 +991,107 @@ QPushButton:hover { 0 - - - 14 - - - - - color: white; - font-size: 14px; - font-weight: normal; - - - Sweep - - - - - - - Qt::Horizontal - - - - 0 - 10 - - - - - - - - - - - 0 - 2 - - - - - 16777215 - 2 - - - - color: #4A64FF; - - - QFrame::Plain - - - 2 - - - Qt::Horizontal - - - - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 20 - 25 - - - - - - - - QPushButton { + + + Qt::ScrollBarAlwaysOff + + + true + + + + + 0 + 0 + 298 + 521 + + + + + 0 + 0 + + + + + + + 14 + + + + + Sweep + + + true + + + + + + + Qt::Horizontal + + + + 0 + 10 + + + + + + + + + + + 0 + 2 + + + + + 16777215 + 2 + + + + QFrame::Plain + + + 2 + + + Qt::Horizontal + + + true + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 25 + + + + + + + + QPushButton { min-height: 30px; max-height: 30px; min-width: 280px; @@ -1304,241 +1153,327 @@ QLabel#off:disabled { color: rgba(255,255,255,51); } - - - - - - Logarithmic - - - Linear - - - 0 - - - - - - - 0 - - - 15 - - - - - - 0 - 0 - - - - QLabel { - font-size: 12px; - color: rgba(255, 255, 255, 70) - } - - - FREQUENCY - - - - - - - - 0 - 1 - - - - - 16777215 - 1 - - - - border: 1px solid rgba(255, 255, 255, 70); - - - Qt::Horizontal - - - - - - - - - 0 - - - 15 - - - 0 - - - 25 - - - 15 - - - - - - - 0 - - - - - - 0 - 0 - - - - QLabel { - font-size: 12px; - color: rgba(255, 255, 255, 70) - } - - - AMPLITUDE - - - - - - - - 0 - 1 - - - - - 16777215 - 1 - - - - border: 1px solid rgba(255, 255, 255, 70); - - - Qt::Horizontal - - - - - - - - - 0 - - - 15 - - - 0 - - - 0 - - - 15 - - - - - 2 - - - - - - - - Qt::Vertical - - - 0 - 0 - + + - - - - - - font-size: 13px; + + Logarithmic - - Resolution BW + + Linear + + + 0 - - - - - - - - 2 - - - - - - + + + 0 + + + 15 + + + + + + 0 + 0 + + + + FREQUENCY + + + true + + + + + + + + 0 + 1 + + + + + 16777215 + 1 + + + + Qt::Horizontal + + + true + + + + - - - font-size: 13px; + + + 0 - - Units + + 15 - + + 0 + + + 25 + + + 15 + + - + + + 0 + - - dBFS - + + + + 0 + 0 + + + + AMPLITUDE + + + true + + - + + + + + 0 + 1 + + + + + 16777215 + 1 + + + + Qt::Horizontal + + + true + + + + - - - - - - - - Qt::Vertical - - - QSizePolicy::Expanding - - - - 20 - 411 - - - + + + + 0 + + + 15 + + + 0 + + + 0 + + + 15 + + + + + + 0 + 0 + + + + + 2 + + + + + Units + + + + + + + + 0 + 0 + + + + + dBFS + + + + + + + + + + + + 0 + 0 + + + + + 2 + + + + + Resolution BW + + + + + + + + + + + + + + 0 + 0 + + + + + 1 + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + + + + + + + + 0 + 0 + + + + + 1 + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 0 + 72 + + + + + + + + + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 20 + 411 + + + + + + + @@ -1560,164 +1495,175 @@ color: rgba(255,255,255,51); 0 - - - 14 - - - - - color: white; - font-size: 14px; - font-weight: normal; - - - Markers - - - - - - - Qt::Horizontal - - - - 0 - 10 - - - - - - - - color: white; - font-size: 14px; - font-weight: normal; - - - Settings - - - - - - - - - - 240 - 2 - - - - - 16777215 - 2 - - - - border: 2px solid rgb(74, 100, 255); - - - Qt::Horizontal - - - - - - - 0 - - - 10 - - - - - - - 0 - - - 25 - - - 0 - - - 10 - - - - - - 0 - 0 - - - - QLabel { - font-size: 12px; - color: rgba(255, 255, 255, 70) - } - - - MARKER - - - - - - - - 0 - 0 - - - - - 0 - 1 - - - - - 16777215 - 1 - - - - border: 1px solid rgba(255, 255, 255, 70); - - - Qt::Horizontal - - - - - - - - - 0 - - - 0 - - - 0 - - - 15 - - - - - QPushButton { + + + Qt::ScrollBarAlwaysOff + + + true + + + + + 0 + 0 + 268 + 547 + + + + + + + 14 + + + + + Markers + + + true + + + + + + + Qt::Horizontal + + + + 0 + 10 + + + + + + + + Settings + + + true + + + + + + + + + + 240 + 2 + + + + + 16777215 + 2 + + + + border: 2px solid rgb(74, 100, 255); + + + Qt::Horizontal + + + + + + + 0 + + + 10 + + + + + + + 0 + + + 25 + + + 0 + + + 10 + + + + + + 0 + 0 + + + + MARKER + + + true + + + + + + + + 0 + 0 + + + + + 0 + 1 + + + + + 16777215 + 1 + + + + Qt::Horizontal + + + true + + + + + + + + + 0 + + + 0 + + + 0 + + + 15 + + + + + QPushButton { color: white; -background-color: #4A64FF; +background-color: black; font-size:14px; height: 30px; @@ -1734,451 +1680,348 @@ background-color: #F45000; QPushButton:hover { - background-color: #4a34ff; + background-color: #4a34ff; } - - - Normal - - - - - - - QPushButton { -color: white; -background-color: black; - -font-size:14px; + + + Delta + + + + + + + QPushButton { height: 30px; width: 120px; border-width: 0px; -border-radius: 4px; -} -QPushButton:disabled { -background-color: grey; -} -QPushButton:pressed { -background-color: #F45000; -} - -QPushButton:hover -{ - background-color: #4a34ff; } - - - Delta - - - - - - - - - - - - 0 - - - 0 - - - 0 - - - 0 - - - - - Qt::Horizontal - - - - 2 - 20 - - - - - - - - 20 - - - 0 - - - 15 - - - - - - 0 - 0 - + + + Normal + + + true + + + + + + + + + + + + 0 - - Qt::RightToLeft + + 0 - - QPushButton { -color: white; -background-color: #4A64FF; + + 0 + + + 0 + + + + + Qt::Horizontal + + + + 2 + 20 + + + + + + + + 20 + + + 0 + + + 15 + + + + + + 0 + 0 + + + + Qt::RightToLeft + + + QPushButton { height: 60px; width: 55px; -border-radius: 4px; padding-left: 5px; text-align: left; -} -QPushButton:disabled { -background-color: grey; -} -QPushButton:pressed { -background-color: #F45000; -} -QPushButton:hover -{ - background-color: #4a34ff; } - - - Peak - - - - :/icons/ic arrow right.svg:/icons/ic arrow right.svg - - - - 12 - 12 - - - - - - - - - 0 - 0 - - - - QPushButton { -color: white; -background-color: #4A64FF; + + + Peak + + + + :/icons/ic arrow right.svg:/icons/ic arrow right.svg + + + + 12 + 12 + + + + true + + + + + + + + 0 + 0 + + + + QPushButton { height: 60px; width: 55px; -border-radius: 4px; padding-left: 5px; -} - -QPushButton:disabled { -background-color: grey; -} -QPushButton:pressed { -background-color: #F45000; -} - - -QPushButton:hover -{ - background-color: #4a34ff; } - - - Peak - - - - :/icons/ic arrow left.svg:/icons/ic arrow left.svg - - - - 12 - 12 - - - - - - - - - 0 - 0 - - - - QPushButton { -color: white; -background-color: #4A64FF; + + + Peak + + + + :/icons/ic arrow left.svg:/icons/ic arrow left.svg + + + + 12 + 12 + + + + true + + + + + + + + 0 + 0 + + + + QPushButton { height: 60px; width: 60px; -border-radius: 4px; -} -QPushButton:disabled { -background-color: grey; -} -QPushButton:pressed { -background-color: #F45000; -} - -QPushButton:hover -{ - background-color: #4a34ff; } + + + Ampl + + + + :/icons/ic arrow up.svg:/icons/ic arrow up.svg + + + + 12 + 12 + + + + true + + + + + + + + 0 + 0 + + + + QPushButton { +height: 60px; +width: 60px; +} + + + Ampl + + + + :/icons/ic arrow down.svg:/icons/ic arrow down.svg + + + + 12 + 12 + + + + true + + + + + + + + 0 + 0 + + + + QPushButton { +font-size:16px; +height: 60px; +width: 60px; +border-width: 0px; +} + + + Peak + + + true + + + + + + + + + Qt::Horizontal + + + + 2 + 20 + + + + + + + + + + 0 - - Ampl - - - - :/icons/ic arrow up.svg:/icons/ic arrow up.svg + + 25 - - - 12 - 12 - + + 10 - + + + + + 0 + 0 + + + + GENERAL + + + true + + + + + + + + 0 + 1 + + + + + 16777215 + 1 + + + + Qt::Horizontal + + + true + + + + - - - - - 0 - 0 - - - - QPushButton { -color: white; -background-color: #4A64FF; -height: 60px; -width: 60px; -border-radius: 4px; -} -QPushButton:disabled { -background-color: grey; -} -QPushButton:pressed { -background-color: #F45000; -} - -QPushButton:hover -{ - background-color: #4a34ff; -} + + + + 0 - - Ampl + + 0 - - - :/icons/ic arrow down.svg:/icons/ic arrow down.svg + + 0 - - - 12 - 12 - + + 10 - + + + + Marker Table + + + + + + + + + + + - - - - - 0 - 0 - - - - QPushButton { -color: white; -background-color: #4A64FF; - -font-size:16px; -height: 60px; -width: 60px; -border-radius: 4px; -border-width: 0px; -} - -QPushButton:disabled { -background-color: grey; -} -QPushButton:pressed { -background-color: #F45000; -} - -QPushButton:hover -{ - background-color: #4a34ff; -} + + + + Qt::Vertical - - Peak + + + 10 + 0 + - + - - - - - Qt::Horizontal - - - - 2 - 20 - - - - - - - - - - 0 - - - 25 - - - 10 - - - - - - 0 - 0 - - - - QLabel { - font-size: 12px; - color: rgba(255, 255, 255, 70) - } - - - GENERAL - - - - - - - - 0 - 1 - - - - - 16777215 - 1 - - - - border: 1px solid rgba(255, 255, 255, 70); - - - - Qt::Horizontal - - - - - - - - - 0 - - - 0 - - - 0 - - - 10 - - - - - Marker Table - - - - - - - - - - - - - - - - Qt::Vertical - - - - 10 - 0 - - - - - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 0 - 20 - - - - - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 0 - 15 - - - + + @@ -2200,14 +2043,12 @@ QPushButton:hover - - color: white; - font-size: 14px; - font-weight: normal; - Import Reference Channels + + true + @@ -2234,15 +2075,15 @@ QPushButton:hover 1 - - color: #4A64FF; - QFrame::Plain Qt::Horizontal + + true + @@ -2282,29 +2123,14 @@ QPushButton:hover max-height: 30px; border: 0px; - border-radius: 4px; - - background-color: #4a64ff; - color: #ffffff; - - font-size: 14px; -} - -QPushButton:pressed { - background-color: #2a44df; -} - -QPushButton:hover { - background-color: #4a34ff; -} - -QPushButton:disabled { -background-color: #727273; } Browse + + true + @@ -2325,29 +2151,14 @@ background-color: #727273; max-height: 30px; border: 0px; - border-radius: 4px; - - background-color: #4a64ff; - color: #ffffff; - - font-size: 14px; -} - -QPushButton:pressed { - background-color: #2a44df; -} - -QPushButton:hover { - background-color: #4a34ff; -} - -QPushButton:disabled { -background-color: #727273; } Import + + true + @@ -2444,8 +2255,6 @@ background-color: #727273; background-color: transparent; font-size: 14px; font-weight: bold; - - color: rgba(255, 255, 255, 153); } QCheckBox::indicator { @@ -2465,14 +2274,7 @@ QPushButton { QPushButton:pressed { border-image: url(:/icons/setup_btn_checked.svg); } QPushButton:!pressed { border-image: url(:/icons/setup_btn_unchecked.svg); } QPushButton:hover:!pressed:!checked { border-image: url(:/icons/setup_btn_hover.svg); } -QPushButton:checked { border-image: url(:/icons/setup_btn_checked.svg); } - -QLabel { - font-size: 14px; - font-weight: bold; - - color: rgba(255, 255, 255, 153); -} +QPushButton:checked { border-image: url(:/icons/setup_btn_checked.svg); } @@ -2480,6 +2282,9 @@ QLabel { Sweep + + true + @@ -2513,6 +2318,9 @@ QLabel { Markers + + true + @@ -2543,21 +2351,15 @@ QLabel { 1 - adiscope::MenuAnim + adiscope::InstrumentNotes QWidget -
    menu_anim.hpp
    +
    instrumentnotes.h
    1
    - adiscope::CustomPushButton + adiscope::LinkedButton QPushButton -
    customPushButton.hpp
    -
    - - adiscope::RunSingleWidget - QWidget -
    runsinglewidget.h
    - 1 +
    linked_button.hpp
    adiscope::CustomSwitch @@ -2565,11 +2367,22 @@ QLabel {
    customSwitch.hpp
    - adiscope::InstrumentNotes + adiscope::MenuAnim QWidget -
    instrumentnotes.h
    +
    menu_anim.hpp
    + 1 +
    + + adiscope::RunSingleWidget + QWidget +
    runsinglewidget.h
    1
    + + adiscope::CustomPushButton + QPushButton +
    customPushButton.hpp
    +
    adiscope::MarkerTable QWidget @@ -2585,6 +2398,7 @@ QLabel { + diff --git a/ui/statistic.ui b/ui/statistic.ui index b348c4a894..6262368667 100644 --- a/ui/statistic.ui +++ b/ui/statistic.ui @@ -13,9 +13,6 @@ Form - - background-color: #000000; - 0 @@ -44,8 +41,7 @@ - color: rgba(255, 255, 255, 153); -font-size: 14px; + font-size: 14px; Avg: @@ -61,8 +57,7 @@ font-size: 14px; - color: rgba(255, 255, 255, 153); -font-size: 14px; + font-size: 14px; 0.000 @@ -78,8 +73,7 @@ font-size: 14px; - color: rgba(255, 255, 255, 153); -font-size: 14px; + font-size: 14px; Min: @@ -95,8 +89,7 @@ font-size: 14px; - color: rgba(255, 255, 255, 153); -font-size: 14px; + font-size: 14px; 0.000 @@ -112,8 +105,7 @@ font-size: 14px; - color: rgba(255, 255, 255, 153); -font-size: 14px; + font-size: 14px; Max: @@ -129,8 +121,7 @@ font-size: 14px; - color: rgba(255, 255, 255, 153); -font-size: 14px; + font-size: 14px; 0.000 @@ -145,12 +136,12 @@ font-size: 14px; 16777215 - - border: 1px solid rgba(255, 255, 255, 33); - Qt::Vertical + + true + @@ -169,14 +160,12 @@ font-size: 14px; 0 - - color: #ffffff; -font-size: 14px; -font-weight: bold; - 1 + + true + @@ -203,14 +192,12 @@ font-weight: bold; 0 - - color: #ffffff; -font-size: 14px; -font-weight: bold; - Measurement + + true + diff --git a/ui/statistics_panel.ui b/ui/statistics_panel.ui index 71b8f0c5ee..483c36e71f 100644 --- a/ui/statistics_panel.ui +++ b/ui/statistics_panel.ui @@ -44,19 +44,7 @@ - QScrollBar:horizontal { - background: #262628; - max-height: 6px; - border-radius: 3px; -} - -QScrollBar::handle:horizontal { - background: #4a4a4b; - border: 0; - border-radius: 3px; -} - -QScrollBar::add-page:horizontal, QScrollBar::sub-page:horizontal { + QScrollBar::add-page:horizontal, QScrollBar::sub-page:horizontal { background: none; } @@ -156,12 +144,12 @@ QScrollBar::add-line:horizontal, QScrollBar::sub-line:horizontal { 1 - - border: 1px solid rgba(255, 255, 255, 33); - Qt::Horizontal + + true + diff --git a/ui/tool_launcher.ui b/ui/tool_launcher.ui index 0d7bc8e126..64a7fe0dd4 100644 --- a/ui/tool_launcher.ui +++ b/ui/tool_launcher.ui @@ -51,7 +51,7 @@ - .QWidget[selected=true] { background-color: rgba(0, 0, 0, 60); } + @@ -71,18 +71,8 @@ false - - QPushButton { text-align:left; border: none; background-color: none; } -.QWidget#menuControl:hover { -background-color: rgba(0, 0, 0, 60); -border: 1px solid rgba(0, 0, 0, 30); -border-radius:5px; -} -.QWidget[selected=true] { -background-color: rgba(0, 0, 0, 60); -border: 1px solid rgba(0, 0, 0, 30); -border-radius:5px; -} + + true @@ -114,19 +104,9 @@ border-radius:5px; 64 - - QPushButton { -font: 75 18pt "10 Pitch"; -color: rgb(255, 255, 255); -} - - - - :/menu/menu_button.png:/menu/menu_button.png - 32 @@ -142,6 +122,12 @@ color: rgb(255, 255, 255); true + + true + + + true + @@ -164,12 +150,8 @@ color: rgb(255, 255, 255); 64 - - QWidget { -background-image: url(:/menu/scopy_title.png); -background-repeat: no-repeat; -background-position: left center; -} + + true @@ -194,11 +176,20 @@ background-position: left center; - - color: rgba(255, 255, 255, 16); + + + 0 + 1 + + + + + 16777215 + 1 + - QFrame::Plain + QFrame::Sunken 1 @@ -206,6 +197,9 @@ background-position: left center; Qt::Horizontal + + true + @@ -216,25 +210,15 @@ background-position: left center; 16777215 - - QPushButton { text-align:left; border: none; background-color: none; } -.QWidget:hover { -background-color: rgba(0, 0, 0, 60); -border: 1px solid rgba(0, 0, 0, 30); -border-radius:5px; -} -QWidget[selected=true] { -background-color: rgba(0, 0, 0, 60); -border: 1px solid rgba(0, 0, 0, 30); -border-radius:5px; -} + + true 2 - 0 + 6 0 @@ -256,7 +240,7 @@ border-radius:5px; 32 - 0 + 32 @@ -265,13 +249,6 @@ border-radius:5px; 16777215 - - Home - - - - :/menu/home.png:/menu/home.png - 32 @@ -284,6 +261,9 @@ border-radius:5px; true + + true + buttonGroup_2 @@ -310,15 +290,27 @@ border-radius:5px; - - color: rgba(255, 255, 255, 16); + + + 0 + 1 + + + + + 16777215 + 1 + - QFrame::Plain + QFrame::Sunken Qt::Horizontal + + true + @@ -344,15 +336,27 @@ border-radius:5px; - - color: rgba(255, 255, 255, 16); + + + 0 + 1 + + + + + 16777215 + 1 + - QFrame::Plain + QFrame::Sunken Qt::Horizontal + + true + @@ -417,14 +421,8 @@ border-radius:5px; 16777215 - - QPushButton { text-align:left; border: none; background-color: none; } -.QWidget:hover {background-color: rgba(0, 0, 0, 60); -border: 1px solid rgba(0, 0, 0, 30); -border-radius:5px;} -QWidget[selected=true] { background-color: rgba(0, 0, 0, 60); -border: 1px solid rgba(0, 0, 0, 30); -border-radius:5px;} + + true @@ -481,14 +479,12 @@ border-radius:5px;} - - - :/icons/ic load.svg - :/icons/ic load.svg:/icons/ic load.svg - true + + true + @@ -505,10 +501,6 @@ border-radius:5px;} 16777215 - - background-color: transparent; - color: #bebebe; - Save @@ -544,14 +536,8 @@ border-radius:5px;} 16777215 - - QPushButton { text-align:left; border: none; background-color: none; } -.QWidget:hover {background-color: rgba(0, 0, 0, 60); -border: 1px solid rgba(0, 0, 0, 30); -border-radius:5px;} -QWidget[selected=true] { background-color: rgba(0, 0, 0, 60); -border: 1px solid rgba(0, 0, 0, 30); -border-radius:5px;} + + true @@ -599,10 +585,6 @@ border-radius:5px;} 16777215 - - background-color: transparent; - color: #bebebe; - Load @@ -634,14 +616,12 @@ border-radius:5px;} - - - :/icons/ic save.svg - - true + + true + @@ -671,24 +651,20 @@ border-radius:5px;} + + + 0 + 0 + + 200 16777215 - - QPushButton { text-align:left; border: none; background-color: none; } -.QWidget:hover { -background-color: rgba(0, 0, 0, 60); -border: 1px solid rgba(0, 0, 0, 30); -border-radius:5px; -} -QWidget[selected=true] { -background-color: rgba(0, 0, 0, 60); -border: 1px solid rgba(0, 0, 0, 30); -border-radius:5px; -} + + true @@ -727,7 +703,7 @@ border-radius:5px; - 40 + 25 20 @@ -753,17 +729,6 @@ border-radius:5px; 16777215 - - background-position: left center; - - - Preferences - - - - :/menu/debugger.png - - 64 @@ -776,6 +741,12 @@ border-radius:5px; true + + true + + + true + buttonGroup_2 @@ -791,7 +762,7 @@ border-radius:5px; - 40 + 25 20 @@ -802,6 +773,34 @@ border-radius:5px; + + + + + 200 + 16777215 + + + + true + + + + + + text-align:center + + + About + + + true + + + + + + @@ -816,18 +815,8 @@ border-radius:5px; 16777215 - - QPushButton { text-align:left; border: none; background-color: none; } -.QWidget:hover { -background-color: rgba(0, 0, 0, 60); -border: 1px solid rgba(0, 0, 0, 30); -border-radius:5px; -} -QWidget[selected=true] { -background-color: rgba(0, 0, 0, 60); -border: 1px solid rgba(0, 0, 0, 30); -border-radius:5px; -} + + true @@ -892,6 +881,9 @@ border-radius:5px; true + + true + buttonGroup_2 @@ -943,13 +935,8 @@ border-radius:5px; 30 - - .QWidget:hover { background-color: rgba(0, 0, 0, 60);} -QWidget { -background-image: url(:/menu/adi.png); -background-repeat: no-repeat; -background-position: left center; -} + + true @@ -1051,8 +1038,8 @@ background-position: left center; - 104 - 30 + 0 + 0 @@ -1062,11 +1049,10 @@ background-position: left center; - background-image: url(:/menu/adi.png); -background-repeat: no-repeat; -background-position: left center; -min-width: 104px; -min-height: 30px; + + + + true @@ -1104,35 +1090,26 @@ min-height: 30px; QPushButton { -color: white; -background-color: #4a64ff; height: 30px; border-width: 0px; -border-radius: 3px; min-width: 6em; qproperty-text: "Connect"; } -QPushButton:hover -{ -background-color: #4a34ff; -} - -QPushButton:disabled { -background-color: gray; -color:white; -} - QPushButton[connected=true] { /*background-color: green;*/ qproperty-text: "Disconnect"; } + QPushButton[failed=true] { background-color: red; qproperty-text: "Failed"; } + + true + @@ -1151,12 +1128,12 @@ qproperty-text: "Failed"; 1 - - border: 1px solid rgba(255, 255, 255, 16); - Qt::Horizontal + + true + @@ -1196,8 +1173,7 @@ qproperty-text: "Failed"; - background-color: transparent; -border: 0px; + border: 0px; @@ -1218,6 +1194,115 @@ border: 0px; 0 + + + + Qt::Horizontal + + + + 0 + 0 + + + + + + + + + 0 + 0 + + + + + 0 + 200 + + + + + 16777215 + 200 + + + + QFrame::NoFrame + + + Qt::ScrollBarAlwaysOff + + + true + + + + + 0 + 0 + 261 + 200 + + + + + 0 + 200 + + + + + 16777215 + 200 + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Qt::Horizontal + + + + 0 + 0 + + + + + + + + + + + + Qt::Vertical + + + + 20 + 100 + + + + @@ -1250,15 +1335,7 @@ border: 0px; - [selected=true] { - opacity: 0.6; - border-radius: 4px; - background-color: #141416; -} - -[selected=false] { - background-color: transparent; -} + false @@ -1313,19 +1390,14 @@ border: 0px; - [selected=true] { - opacity: 0.6; - border-radius: 4px; - background-color: #141416; -} - -[selected=false] { - background-color: transparent; -} + false + + true + 10 @@ -1364,16 +1436,6 @@ border: 0px; height: 40px; width: 40px; border-width: 0px; -border-radius: 4px; -background-color: #4A64FF; -} - -QPushButton:hover { -background-color: #4a34ff; -} - -QPushButton:checked { -background-color: #4a34ff; } @@ -1381,12 +1443,15 @@ background-color: #4a34ff; - :/icons/house.png + :/icons/scopy-default/icons/house.png true + + true + @@ -1412,20 +1477,12 @@ background-color: #4a34ff; 60 - - [selected=true] { - opacity: 0.6; - border-radius: 4px; - background-color: #141416; -} - -[selected=false] { - background-color: transparent; -} - false + + true + 0 @@ -1467,16 +1524,6 @@ background-color: #4a34ff; height: 40px; width: 40px; border-width: 0px; -border-radius: 4px; -background-color: #4A64FF; -} - -QPushButton:hover { -background-color: #4a34ff; -} - -QPushButton:checked { -background-color: #4a34ff; } @@ -1501,6 +1548,9 @@ background-color: #4a34ff; false + + true + @@ -1537,115 +1587,6 @@ background-color: #4a34ff; - - - - - 0 - 0 - - - - - 0 - 200 - - - - - 16777215 - 200 - - - - QFrame::NoFrame - - - Qt::ScrollBarAlwaysOff - - - true - - - - - 0 - 0 - 261 - 200 - - - - - 0 - 200 - - - - - 16777215 - 200 - - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - Qt::Horizontal - - - - 0 - 0 - - - - - - - - - - - - Qt::Horizontal - - - - 0 - 0 - - - - - - - - Qt::Vertical - - - - 20 - 100 - - - - @@ -1687,18 +1628,6 @@ background-color: #4a34ff; - - adiscope::StackedHomepage - QStackedWidget -
    stacked_homepage.h
    - 1 -
    - - adiscope::OscCustomScrollArea - QScrollArea -
    osc_custom_scroll.h
    - 1 -
    adiscope::DetachDragZone QWidget @@ -1711,9 +1640,22 @@ background-color: #4a34ff;
    menu_anim.hpp
    1
    + + adiscope::OscCustomScrollArea + QScrollArea +
    osc_custom_scroll.h
    + 1 +
    + + adiscope::StackedHomepage + QStackedWidget +
    stacked_homepage.h
    + 1 +
    + diff --git a/ui/trigger_settings.ui b/ui/trigger_settings.ui index 513514bac2..83445a51cb 100644 --- a/ui/trigger_settings.ui +++ b/ui/trigger_settings.ui @@ -49,15 +49,12 @@ - - color: white; - font-size: 14px; - font-weight: normal; - - Trigger Settings + + true + @@ -90,12 +87,12 @@ 2 - - border: 2px solid rgb(74, 100, 255); - Qt::Horizontal + + true + @@ -113,9 +110,9 @@ 0 - 0 + -18 266 - 887 + 958 @@ -147,9 +144,6 @@ - - font-size: 13px; - Trigger mode @@ -294,14 +288,14 @@ color: rgba(255,255,255,51); - QLabel { - font-size: 12px; - color: rgba(255, 255, 255, 70); - } + INTERNAL (ANALOG) + + true + @@ -319,11 +313,14 @@ color: rgba(255,255,255,51); - border: 1px solid rgba(255, 255, 255, 70); + Qt::Horizontal + + true + @@ -380,9 +377,6 @@ color: rgba(255,255,255,51); 0 - - font-size: 13px; - Source @@ -411,9 +405,6 @@ color: rgba(255,255,255,51); 0 - - font-size: 13px; - Condition @@ -482,19 +473,6 @@ color: rgba(255,255,255,51); - - - - color: white; - - - This feature is not supported while the Mixed Signal View is enabled! - - - true - - - @@ -525,15 +503,12 @@ color: rgba(255,255,255,51); 0 - - QLabel { - font-size: 12px; - color: rgba(255, 255, 255, 70); - } - DIGITAL + + true + @@ -550,16 +525,29 @@ color: rgba(255,255,255,51); 1 - - border: 1px solid rgba(255, 255, 255, 70); - Qt::Horizontal + + true + + + + + This feature is not supported while the Mixed Signal View is enabled! + + + true + + + true + + + @@ -590,9 +578,6 @@ color: rgba(255,255,255,51); - - font-size: 13px; - Source @@ -609,9 +594,6 @@ color: rgba(255,255,255,51); 0 - - font-size: 13px; - Condition @@ -670,6 +652,28 @@ color: rgba(255,255,255,51); + + + + QPushButton { + + height: 40px; + + text-align: left; + font-weight: bold; + padding-left: 15px; + padding-right: 15px; + +} + + + Logic Analyzer trigger settings + + + true + + + @@ -716,15 +720,12 @@ color: rgba(255,255,255,51); 0 - - QLabel { - font-size: 12px; - color: rgba(255, 255, 255, 70); - } - TRIGGER LOGIC + + true + @@ -741,12 +742,12 @@ color: rgba(255,255,255,51); 1 - - border: 1px solid rgba(255, 255, 255, 70); - Qt::Horizontal + + true + @@ -767,9 +768,6 @@ color: rgba(255,255,255,51); 0 - - font-size: 13px; - Analog - Digital @@ -838,15 +836,12 @@ color: rgba(255,255,255,51); - - QLabel { - font-size: 12px; - color: rgba(255, 255, 255, 70); - } - EXTERNAL TRIGGER OUT + + true + @@ -863,15 +858,15 @@ color: rgba(255,255,255,51); 1 - - border: 1px solid rgba(255, 255, 255, 70); - QFrame::Sunken Qt::Horizontal + + true + @@ -937,7 +932,7 @@ color: rgba(255,255,255,51); verticalSpacer_3 trigger_logic_controls - mixedSignalLbl + btnLogicAnalyzerTriggers diff --git a/ui/user_note_page.ui b/ui/user_note_page.ui index d5c5ba2f4d..d9033e7e0b 100644 --- a/ui/user_note_page.ui +++ b/ui/user_note_page.ui @@ -13,9 +13,6 @@ Form - - background-color: black; - 20 @@ -34,13 +31,12 @@ - - color: white; -font-size: 14px; - + + true + @@ -66,30 +62,14 @@ font-size: 14px; QPushButton { border: 0px; - border-radius: 4px; - background-color: #4a64ff; - color: #ffffff; - font-size: 14px; -} - -QPushButton:hover -{ -background-color: #4a34ff; -} - -QPushButton:disabled { -background-color: gray; -color:white; -} - -QPushButton:disabled { - background-color: #727273; -} - +} Remove note + + true + diff --git a/ui/user_notes.ui b/ui/user_notes.ui index d2b47a90fd..6996283c7b 100644 --- a/ui/user_notes.ui +++ b/ui/user_notes.ui @@ -14,7 +14,7 @@ Form - /*background-color: qlineargradient(spread:pad, x1:0, y1:1, x2:0, y2:0, stop:0 rgba(0, 0, 0, 40), stop:1 transparent);*/ + @@ -68,32 +68,74 @@ QPushButton { border: 0px; - border-radius: 4px; - background-color: #4a64ff; - color: #ffffff; - font-size: 14px; -} - -QPushButton:hover -{ -background-color: #4a34ff; -} - -QPushButton:disabled { -background-color: gray; -color:white; -} - -QPushButton:disabled { - background-color: #727273; -} - +} Save + + true + + + + + 5 + + + 0 + + + + + + 0 + 0 + + + + Note name + + + + + + + + 0 + 0 + + + + + 240 + 0 + + + + + 240 + 16777215 + + + + + + + + + + Qt::Vertical + + + + 0 + 0 + + + + @@ -197,26 +239,7 @@ QLineEdit[invalid=true] { QPushButton { border: 0px; - border-radius: 4px; - background-color: #4a64ff; - color: #ffffff; - font-size: 14px; -} - -QPushButton:hover -{ -background-color: #4a34ff; -} - -QPushButton:disabled { -background-color: gray; -color:white; -} - -QPushButton:disabled { - background-color: #727273; -} - +} Browse @@ -224,70 +247,15 @@ QPushButton:disabled { false + + true + - - - - Qt::Vertical - - - - 0 - 0 - - - - - - - - 5 - - - 0 - - - - - - 0 - 0 - - - - Note name - - - - - - - - 0 - 0 - - - - - 240 - 0 - - - - - 240 - 16777215 - - - - - - @@ -371,15 +339,15 @@ QPushButton:disabled { 1 - - border: 1px solid rgba(255, 255, 255, 16); - QFrame::Sunken Qt::Horizontal + + true + @@ -417,19 +385,14 @@ QPushButton:disabled { - [selected=true] { - opacity: 0.6; - border-radius: 4px; - background-color: #141416; -} - -[selected=false] { - background-color: transparent; -} + false + + true + 0 @@ -471,16 +434,6 @@ QPushButton:disabled { height: 40px; width: 40px; border-width: 0px; -border-radius: 4px; -background-color: #4A64FF; -} - -QPushButton:hover { -background-color: #4a34ff; -} - -QPushButton:checked { -background-color: #4a34ff; } @@ -499,6 +452,9 @@ background-color: #4a34ff; true + + true +