Commit ea3f13d0 authored by DoinLakeFlyer's avatar DoinLakeFlyer

parent 88575cd6
<RCC>
<qresource prefix="/InstrumentValueIcons">
<file alias="clipboard.svg">resources/InstrumentValueIcons/clipboard.svg</file>
<file alias="credit-card.svg">resources/InstrumentValueIcons/credit-card.svg</file>
<file alias="bookmark copy 2.svg">resources/InstrumentValueIcons/bookmark copy 2.svg</file>
<file alias="library.svg">resources/InstrumentValueIcons/library.svg</file>
<file alias="mouse.svg">resources/InstrumentValueIcons/mouse.svg</file>
<file alias="printer.svg">resources/InstrumentValueIcons/printer.svg</file>
<file alias="thumbs-up.svg">resources/InstrumentValueIcons/thumbs-up.svg</file>
<file alias="arrow-thin-up.svg">resources/InstrumentValueIcons/arrow-thin-up.svg</file>
<file alias="pause-outline.svg">resources/InstrumentValueIcons/pause-outline.svg</file>
<file alias="music-artist.svg">resources/InstrumentValueIcons/music-artist.svg</file>
<file alias="location-park.svg">resources/InstrumentValueIcons/location-park.svg</file>
<file alias="pen-tool.svg">resources/InstrumentValueIcons/pen-tool.svg</file>
<file alias="color-palette.svg">resources/InstrumentValueIcons/color-palette.svg</file>
<file alias="announcement.svg">resources/InstrumentValueIcons/announcement.svg</file>
<file alias="inbox-check.svg">resources/InstrumentValueIcons/inbox-check.svg</file>
<file alias="radio.svg">resources/InstrumentValueIcons/radio.svg</file>
<file alias="close-solid.svg">resources/InstrumentValueIcons/close-solid.svg</file>
<file alias="inbox.svg">resources/InstrumentValueIcons/inbox.svg</file>
<file alias="user-add.svg">resources/InstrumentValueIcons/user-add.svg</file>
<file alias="text-box.svg">resources/InstrumentValueIcons/text-box.svg</file>
<file alias="queue.svg">resources/InstrumentValueIcons/queue.svg</file>
<file alias="minus-outline.svg">resources/InstrumentValueIcons/minus-outline.svg</file>
<file alias="user-solid-square.svg">resources/InstrumentValueIcons/user-solid-square.svg</file>
<file alias="list-bullet.svg">resources/InstrumentValueIcons/list-bullet.svg</file>
<file alias="indent-decrease.svg">resources/InstrumentValueIcons/indent-decrease.svg</file>
<file alias="yin-yang.svg">resources/InstrumentValueIcons/yin-yang.svg</file>
<file alias="share-alt.svg">resources/InstrumentValueIcons/share-alt.svg</file>
<file alias="battery-full.svg">resources/InstrumentValueIcons/battery-full.svg</file>
<file alias="folder-outline.svg">resources/InstrumentValueIcons/folder-outline.svg</file>
<file alias="bookmark copy 3.svg">resources/InstrumentValueIcons/bookmark copy 3.svg</file>
<file alias="browser-window-open.svg">resources/InstrumentValueIcons/browser-window-open.svg</file>
<file alias="wallet.svg">resources/InstrumentValueIcons/wallet.svg</file>
<file alias="box.svg">resources/InstrumentValueIcons/box.svg</file>
<file alias="attachment.svg">resources/InstrumentValueIcons/attachment.svg</file>
<file alias="cloud.svg">resources/InstrumentValueIcons/cloud.svg</file>
<file alias="radar copy 2.svg">resources/InstrumentValueIcons/radar copy 2.svg</file>
<file alias="directions.svg">resources/InstrumentValueIcons/directions.svg</file>
<file alias="view-hide.svg">resources/InstrumentValueIcons/view-hide.svg</file>
<file alias="hour-glass.svg">resources/InstrumentValueIcons/hour-glass.svg</file>
<file alias="globe.svg">resources/InstrumentValueIcons/globe.svg</file>
<file alias="volume-off.svg">resources/InstrumentValueIcons/volume-off.svg</file>
<file alias="station.svg">resources/InstrumentValueIcons/station.svg</file>
<file alias="dots-horizontal-triple.svg">resources/InstrumentValueIcons/dots-horizontal-triple.svg</file>
<file alias="save-disk.svg">resources/InstrumentValueIcons/save-disk.svg</file>
<file alias="star-full.svg">resources/InstrumentValueIcons/star-full.svg</file>
<file alias="mood-sad-solid.svg">resources/InstrumentValueIcons/mood-sad-solid.svg</file>
<file alias="chat-bubble-dots.svg">resources/InstrumentValueIcons/chat-bubble-dots.svg</file>
<file alias="window-open.svg">resources/InstrumentValueIcons/window-open.svg</file>
<file alias="timer.svg">resources/InstrumentValueIcons/timer.svg</file>
<file alias="explore.svg">resources/InstrumentValueIcons/explore.svg</file>
<file alias="step-backward.svg">resources/InstrumentValueIcons/step-backward.svg</file>
<file alias="mood-happy-outline.svg">resources/InstrumentValueIcons/mood-happy-outline.svg</file>
<file alias="add-outline.svg">resources/InstrumentValueIcons/add-outline.svg</file>
<file alias="zoom-out.svg">resources/InstrumentValueIcons/zoom-out.svg</file>
<file alias="fast-forward.svg">resources/InstrumentValueIcons/fast-forward.svg</file>
<file alias="network.svg">resources/InstrumentValueIcons/network.svg</file>
<file alias="light-bulb.svg">resources/InstrumentValueIcons/light-bulb.svg</file>
<file alias="text-decoration.svg">resources/InstrumentValueIcons/text-decoration.svg</file>
<file alias="user-group.svg">resources/InstrumentValueIcons/user-group.svg</file>
<file alias="repost.svg">resources/InstrumentValueIcons/repost.svg</file>
<file alias="key.svg">resources/InstrumentValueIcons/key.svg</file>
<file alias="user-solid-circle.svg">resources/InstrumentValueIcons/user-solid-circle.svg</file>
<file alias="target.svg">resources/InstrumentValueIcons/target.svg</file>
<file alias="date-add.svg">resources/InstrumentValueIcons/date-add.svg</file>
<file alias="dial-pad.svg">resources/InstrumentValueIcons/dial-pad.svg</file>
<file alias="stand-by.svg">resources/InstrumentValueIcons/stand-by.svg</file>
<file alias="flashlight.svg">resources/InstrumentValueIcons/flashlight.svg</file>
<file alias="mood-neutral-outline.svg">resources/InstrumentValueIcons/mood-neutral-outline.svg</file>
<file alias="view-column.svg">resources/InstrumentValueIcons/view-column.svg</file>
<file alias="chart.svg">resources/InstrumentValueIcons/chart.svg</file>
<file alias="bluetooth.svg">resources/InstrumentValueIcons/bluetooth.svg</file>
<file alias="window-new.svg">resources/InstrumentValueIcons/window-new.svg</file>
<file alias="location-hotel.svg">resources/InstrumentValueIcons/location-hotel.svg</file>
<file alias="edit-pencil.svg">resources/InstrumentValueIcons/edit-pencil.svg</file>
<file alias="location-gas-station.svg">resources/InstrumentValueIcons/location-gas-station.svg</file>
<file alias="tablet.svg">resources/InstrumentValueIcons/tablet.svg</file>
<file alias="layers.svg">resources/InstrumentValueIcons/layers.svg</file>
<file alias="brightness-up.svg">resources/InstrumentValueIcons/brightness-up.svg</file>
<file alias="cloud-upload.svg">resources/InstrumentValueIcons/cloud-upload.svg</file>
<file alias="cheveron-outline-right.svg">resources/InstrumentValueIcons/cheveron-outline-right.svg</file>
<file alias="information-outline.svg">resources/InstrumentValueIcons/information-outline.svg</file>
<file alias="chart-pie.svg">resources/InstrumentValueIcons/chart-pie.svg</file>
<file alias="screen-full.svg">resources/InstrumentValueIcons/screen-full.svg</file>
<file alias="education.svg">resources/InstrumentValueIcons/education.svg</file>
<file alias="vector.svg">resources/InstrumentValueIcons/vector.svg</file>
<file alias="load-balancer.svg">resources/InstrumentValueIcons/load-balancer.svg</file>
<file alias="paste.svg">resources/InstrumentValueIcons/paste.svg</file>
<file alias="conversation.svg">resources/InstrumentValueIcons/conversation.svg</file>
<file alias="arrow-outline-down.svg">resources/InstrumentValueIcons/arrow-outline-down.svg</file>
<file alias="airplane.svg">resources/InstrumentValueIcons/airplane.svg</file>
<file alias="cheveron-right.svg">resources/InstrumentValueIcons/cheveron-right.svg</file>
<file alias="swap.svg">resources/InstrumentValueIcons/swap.svg</file>
<file alias="border-outer.svg">resources/InstrumentValueIcons/border-outer.svg</file>
<file alias="watch.svg">resources/InstrumentValueIcons/watch.svg</file>
<file alias="notifications.svg">resources/InstrumentValueIcons/notifications.svg</file>
<file alias="refresh.svg">resources/InstrumentValueIcons/refresh.svg</file>
<file alias="border-left.svg">resources/InstrumentValueIcons/border-left.svg</file>
<file alias="border-vertical.svg">resources/InstrumentValueIcons/border-vertical.svg</file>
<file alias="filter.svg">resources/InstrumentValueIcons/filter.svg</file>
<file alias="brightness-down.svg">resources/InstrumentValueIcons/brightness-down.svg</file>
<file alias="mic.svg">resources/InstrumentValueIcons/mic.svg</file>
<file alias="link.svg">resources/InstrumentValueIcons/link.svg</file>
<file alias="format-font-size.svg">resources/InstrumentValueIcons/format-font-size.svg</file>
<file alias="volume-mute.svg">resources/InstrumentValueIcons/volume-mute.svg</file>
<file alias="bug.svg">resources/InstrumentValueIcons/bug.svg</file>
<file alias="indent-increase.svg">resources/InstrumentValueIcons/indent-increase.svg</file>
<file alias="add-solid.svg">resources/InstrumentValueIcons/add-solid.svg</file>
<file alias="code.svg">resources/InstrumentValueIcons/code.svg</file>
<file alias="arrow-down.svg">resources/InstrumentValueIcons/arrow-down.svg</file>
<file alias="pause-solid.svg">resources/InstrumentValueIcons/pause-solid.svg</file>
<file alias="folder.svg">resources/InstrumentValueIcons/folder.svg</file>
<file alias="shopping-cart.svg">resources/InstrumentValueIcons/shopping-cart.svg</file>
<file alias="inbox-download.svg">resources/InstrumentValueIcons/inbox-download.svg</file>
<file alias="bookmark-outline-add.svg">resources/InstrumentValueIcons/bookmark-outline-add.svg</file>
<file alias="play-outline.svg">resources/InstrumentValueIcons/play-outline.svg</file>
<file alias="music-notes.svg">resources/InstrumentValueIcons/music-notes.svg</file>
<file alias="user.svg">resources/InstrumentValueIcons/user.svg</file>
<file alias="computer-desktop.svg">resources/InstrumentValueIcons/computer-desktop.svg</file>
<file alias="step-forward.svg">resources/InstrumentValueIcons/step-forward.svg</file>
<file alias="inbox-full.svg">resources/InstrumentValueIcons/inbox-full.svg</file>
<file alias="border-none.svg">resources/InstrumentValueIcons/border-none.svg</file>
<file alias="map.svg">resources/InstrumentValueIcons/map.svg</file>
<file alias="information-solid.svg">resources/InstrumentValueIcons/information-solid.svg</file>
<file alias="format-text-size.svg">resources/InstrumentValueIcons/format-text-size.svg</file>
<file alias="location.svg">resources/InstrumentValueIcons/location.svg</file>
<file alias="close-outline.svg">resources/InstrumentValueIcons/close-outline.svg</file>
<file alias="dots-horizontal-double.svg">resources/InstrumentValueIcons/dots-horizontal-double.svg</file>
<file alias="servers.svg">resources/InstrumentValueIcons/servers.svg</file>
<file alias="trophy.svg">resources/InstrumentValueIcons/trophy.svg</file>
<file alias="arrow-thick-right.svg">resources/InstrumentValueIcons/arrow-thick-right.svg</file>
<file alias="radar.svg">resources/InstrumentValueIcons/radar.svg</file>
<file alias="fast-rewind.svg">resources/InstrumentValueIcons/fast-rewind.svg</file>
<file alias="hard-drive.svg">resources/InstrumentValueIcons/hard-drive.svg</file>
<file alias="cheveron-outline-down.svg">resources/InstrumentValueIcons/cheveron-outline-down.svg</file>
<file alias="trash.svg">resources/InstrumentValueIcons/trash.svg</file>
<file alias="forward.svg">resources/InstrumentValueIcons/forward.svg</file>
<file alias="backspace.svg">resources/InstrumentValueIcons/backspace.svg</file>
<file alias="location-shopping.svg">resources/InstrumentValueIcons/location-shopping.svg</file>
<file alias="mobile-devices.svg">resources/InstrumentValueIcons/mobile-devices.svg</file>
<file alias="cheveron-left.svg">resources/InstrumentValueIcons/cheveron-left.svg</file>
<file alias="travel-walk.svg">resources/InstrumentValueIcons/travel-walk.svg</file>
<file alias="computer-laptop.svg">resources/InstrumentValueIcons/computer-laptop.svg</file>
<file alias="dashboard.svg">resources/InstrumentValueIcons/dashboard.svg</file>
<file alias="video-camera.svg">resources/InstrumentValueIcons/video-camera.svg</file>
<file alias="thermometer.svg">resources/InstrumentValueIcons/thermometer.svg</file>
<file alias="cog.svg">resources/InstrumentValueIcons/cog.svg</file>
<file alias="location-marina.svg">resources/InstrumentValueIcons/location-marina.svg</file>
<file alias="location-food.svg">resources/InstrumentValueIcons/location-food.svg</file>
<file alias="reply.svg">resources/InstrumentValueIcons/reply.svg</file>
<file alias="arrow-thick-left.svg">resources/InstrumentValueIcons/arrow-thick-left.svg</file>
<file alias="subdirectory-right.svg">resources/InstrumentValueIcons/subdirectory-right.svg</file>
<file alias="backward.svg">resources/InstrumentValueIcons/backward.svg</file>
<file alias="download.svg">resources/InstrumentValueIcons/download.svg</file>
<file alias="coffee.svg">resources/InstrumentValueIcons/coffee.svg</file>
<file alias="keyboard.svg">resources/InstrumentValueIcons/keyboard.svg</file>
<file alias="film.svg">resources/InstrumentValueIcons/film.svg</file>
<file alias="book-reference.svg">resources/InstrumentValueIcons/book-reference.svg</file>
<file alias="php-elephant.svg">resources/InstrumentValueIcons/php-elephant.svg</file>
<file alias="chart-bar.svg">resources/InstrumentValueIcons/chart-bar.svg</file>
<file alias="backward-step.svg">resources/InstrumentValueIcons/backward-step.svg</file>
<file alias="cheveron-outline-up.svg">resources/InstrumentValueIcons/cheveron-outline-up.svg</file>
<file alias="cheveron-outline-left.svg">resources/InstrumentValueIcons/cheveron-outline-left.svg</file>
<file alias="play.svg">resources/InstrumentValueIcons/play.svg</file>
<file alias="border-right.svg">resources/InstrumentValueIcons/border-right.svg</file>
<file alias="portfolio.svg">resources/InstrumentValueIcons/portfolio.svg</file>
<file alias="bookmark.svg">resources/InstrumentValueIcons/bookmark.svg</file>
<file alias="hot.svg">resources/InstrumentValueIcons/hot.svg</file>
<file alias="align-justified.svg">resources/InstrumentValueIcons/align-justified.svg</file>
<file alias="border-horizontal.svg">resources/InstrumentValueIcons/border-horizontal.svg</file>
<file alias="arrow-outline-up.svg">resources/InstrumentValueIcons/arrow-outline-up.svg</file>
<file alias="apparel.svg">resources/InstrumentValueIcons/apparel.svg</file>
<file alias="arrow-thin-down.svg">resources/InstrumentValueIcons/arrow-thin-down.svg</file>
<file alias="mood-happy-solid.svg">resources/InstrumentValueIcons/mood-happy-solid.svg</file>
<file alias="home.svg">resources/InstrumentValueIcons/home.svg</file>
<file alias="mood-sad-outline.svg">resources/InstrumentValueIcons/mood-sad-outline.svg</file>
<file alias="exclamation-solid.svg">resources/InstrumentValueIcons/exclamation-solid.svg</file>
<file alias="translate.svg">resources/InstrumentValueIcons/translate.svg</file>
<file alias="document.svg">resources/InstrumentValueIcons/document.svg</file>
<file alias="share-01.svg">resources/InstrumentValueIcons/share-01.svg</file>
<file alias="gift.svg">resources/InstrumentValueIcons/gift.svg</file>
<file alias="volume-up.svg">resources/InstrumentValueIcons/volume-up.svg</file>
<file alias="travel-bus.svg">resources/InstrumentValueIcons/travel-bus.svg</file>
<file alias="envelope.svg">resources/InstrumentValueIcons/envelope.svg</file>
<file alias="camera.svg">resources/InstrumentValueIcons/camera.svg</file>
<file alias="view-list.svg">resources/InstrumentValueIcons/view-list.svg</file>
<file alias="time.svg">resources/InstrumentValueIcons/time.svg</file>
<file alias="lock-closed.svg">resources/InstrumentValueIcons/lock-closed.svg</file>
<file alias="ticket.svg">resources/InstrumentValueIcons/ticket.svg</file>
<file alias="edit-cut.svg">resources/InstrumentValueIcons/edit-cut.svg</file>
<file alias="music-playlist.svg">resources/InstrumentValueIcons/music-playlist.svg</file>
<file alias="currency-dollar.svg">resources/InstrumentValueIcons/currency-dollar.svg</file>
<file alias="exclamation-outline.svg">resources/InstrumentValueIcons/exclamation-outline.svg</file>
<file alias="anchor.svg">resources/InstrumentValueIcons/anchor.svg</file>
<file alias="edit-copy.svg">resources/InstrumentValueIcons/edit-copy.svg</file>
<file alias="pause.svg">resources/InstrumentValueIcons/pause.svg</file>
<file alias="photo.svg">resources/InstrumentValueIcons/photo.svg</file>
<file alias="arrow-outline-right.svg">resources/InstrumentValueIcons/arrow-outline-right.svg</file>
<file alias="reply-all.svg">resources/InstrumentValueIcons/reply-all.svg</file>
<file alias="volume-down.svg">resources/InstrumentValueIcons/volume-down.svg</file>
<file alias="notification.svg">resources/InstrumentValueIcons/notification.svg</file>
<file alias="playlist.svg">resources/InstrumentValueIcons/playlist.svg</file>
<file alias="factory.svg">resources/InstrumentValueIcons/factory.svg</file>
<file alias="news-paper.svg">resources/InstrumentValueIcons/news-paper.svg</file>
<file alias="tuning.svg">resources/InstrumentValueIcons/tuning.svg</file>
<file alias="music-album.svg">resources/InstrumentValueIcons/music-album.svg</file>
<file alias="arrow-thick-down.svg">resources/InstrumentValueIcons/arrow-thick-down.svg</file>
<file alias="share.svg">resources/InstrumentValueIcons/share.svg</file>
<file alias="location-current.svg">resources/InstrumentValueIcons/location-current.svg</file>
<file alias="window.svg">resources/InstrumentValueIcons/window.svg</file>
<file alias="artist.svg">resources/InstrumentValueIcons/artist.svg</file>
<file alias="forward-step.svg">resources/InstrumentValueIcons/forward-step.svg</file>
<file alias="zoom-in.svg">resources/InstrumentValueIcons/zoom-in.svg</file>
<file alias="subdirectory-left.svg">resources/InstrumentValueIcons/subdirectory-left.svg</file>
<file alias="duplicate.svg">resources/InstrumentValueIcons/duplicate.svg</file>
<file alias="block.svg">resources/InstrumentValueIcons/block.svg</file>
<file alias="heart.svg">resources/InstrumentValueIcons/heart.svg</file>
<file alias="travel-taxi-cab.svg">resources/InstrumentValueIcons/travel-taxi-cab.svg</file>
<file alias="navigation-more.svg">resources/InstrumentValueIcons/navigation-more.svg</file>
<file alias="arrow-outline-left.svg">resources/InstrumentValueIcons/arrow-outline-left.svg</file>
<file alias="border-top.svg">resources/InstrumentValueIcons/border-top.svg</file>
<file alias="tools copy.svg">resources/InstrumentValueIcons/tools copy.svg</file>
<file alias="compose.svg">resources/InstrumentValueIcons/compose.svg</file>
<file alias="bookmark-outline.svg">resources/InstrumentValueIcons/bookmark-outline.svg</file>
<file alias="hand-stop.svg">resources/InstrumentValueIcons/hand-stop.svg</file>
<file alias="tag.svg">resources/InstrumentValueIcons/tag.svg</file>
<file alias="list-add.svg">resources/InstrumentValueIcons/list-add.svg</file>
<file alias="cheveron-up.svg">resources/InstrumentValueIcons/cheveron-up.svg</file>
<file alias="arrow-left.svg">resources/InstrumentValueIcons/arrow-left.svg</file>
<file alias="view-carousel.svg">resources/InstrumentValueIcons/view-carousel.svg</file>
<file alias="question.svg">resources/InstrumentValueIcons/question.svg</file>
<file alias="search.svg">resources/InstrumentValueIcons/search.svg</file>
<file alias="pylon.svg">resources/InstrumentValueIcons/pylon.svg</file>
<file alias="arrow-thin-right.svg">resources/InstrumentValueIcons/arrow-thin-right.svg</file>
<file alias="phone.svg">resources/InstrumentValueIcons/phone.svg</file>
<file alias="reload.svg">resources/InstrumentValueIcons/reload.svg</file>
<file alias="document-add.svg">resources/InstrumentValueIcons/document-add.svg</file>
<file alias="wrench.svg">resources/InstrumentValueIcons/wrench.svg</file>
<file alias="format-bold.svg">resources/InstrumentValueIcons/format-bold.svg</file>
<file alias="checkmark.svg">resources/InstrumentValueIcons/checkmark.svg</file>
<file alias="send.svg">resources/InstrumentValueIcons/send.svg</file>
<file alias="at-symbol.svg">resources/InstrumentValueIcons/at-symbol.svg</file>
<file alias="flag.svg">resources/InstrumentValueIcons/flag.svg</file>
<file alias="format-underline.svg">resources/InstrumentValueIcons/format-underline.svg</file>
<file alias="calendar.svg">resources/InstrumentValueIcons/calendar.svg</file>
<file alias="notifications-outline.svg">resources/InstrumentValueIcons/notifications-outline.svg</file>
<file alias="list.svg">resources/InstrumentValueIcons/list.svg</file>
<file alias="shuffle.svg">resources/InstrumentValueIcons/shuffle.svg</file>
<file alias="align-right.svg">resources/InstrumentValueIcons/align-right.svg</file>
<file alias="beverage.svg">resources/InstrumentValueIcons/beverage.svg</file>
<file alias="show-sidebar.svg">resources/InstrumentValueIcons/show-sidebar.svg</file>
<file alias="view-show.svg">resources/InstrumentValueIcons/view-show.svg</file>
<file alias="copy.svg">resources/InstrumentValueIcons/copy.svg</file>
<file alias="menu.svg">resources/InstrumentValueIcons/menu.svg</file>
<file alias="minus-solid.svg">resources/InstrumentValueIcons/minus-solid.svg</file>
<file alias="travel-case.svg">resources/InstrumentValueIcons/travel-case.svg</file>
<file alias="stethoscope.svg">resources/InstrumentValueIcons/stethoscope.svg</file>
<file alias="headphones.svg">resources/InstrumentValueIcons/headphones.svg</file>
<file alias="format-italic.svg">resources/InstrumentValueIcons/format-italic.svg</file>
<file alias="browser-window-new.svg">resources/InstrumentValueIcons/browser-window-new.svg</file>
<file alias="pin.svg">resources/InstrumentValueIcons/pin.svg</file>
<file alias="border-bottom.svg">resources/InstrumentValueIcons/border-bottom.svg</file>
<file alias="arrow-right.svg">resources/InstrumentValueIcons/arrow-right.svg</file>
<file alias="bolt.svg">resources/InstrumentValueIcons/bolt.svg</file>
<file alias="shield.svg">resources/InstrumentValueIcons/shield.svg</file>
<file alias="align-center.svg">resources/InstrumentValueIcons/align-center.svg</file>
<file alias="travel-train.svg">resources/InstrumentValueIcons/travel-train.svg</file>
<file alias="arrow-up.svg">resources/InstrumentValueIcons/arrow-up.svg</file>
<file alias="badge.svg">resources/InstrumentValueIcons/badge.svg</file>
<file alias="usb.svg">resources/InstrumentValueIcons/usb.svg</file>
<file alias="plugin.svg">resources/InstrumentValueIcons/plugin.svg</file>
<file alias="checkmark-outline.svg">resources/InstrumentValueIcons/checkmark-outline.svg</file>
<file alias="store-front.svg">resources/InstrumentValueIcons/store-front.svg</file>
<file alias="travel.svg">resources/InstrumentValueIcons/travel.svg</file>
<file alias="align-left.svg">resources/InstrumentValueIcons/align-left.svg</file>
<file alias="border-inner.svg">resources/InstrumentValueIcons/border-inner.svg</file>
<file alias="edit-crop.svg">resources/InstrumentValueIcons/edit-crop.svg</file>
<file alias="adjust.svg">resources/InstrumentValueIcons/adjust.svg</file>
<file alias="mood-neutral-solid.svg">resources/InstrumentValueIcons/mood-neutral-solid.svg</file>
<file alias="arrow-thick-up.svg">resources/InstrumentValueIcons/arrow-thick-up.svg</file>
<file alias="battery-half.svg">resources/InstrumentValueIcons/battery-half.svg</file>
<file alias="location-restroom.svg">resources/InstrumentValueIcons/location-restroom.svg</file>
<file alias="travel-car.svg">resources/InstrumentValueIcons/travel-car.svg</file>
<file alias="border-all.svg">resources/InstrumentValueIcons/border-all.svg</file>
<file alias="browser-window.svg">resources/InstrumentValueIcons/browser-window.svg</file>
<file alias="lock-open.svg">resources/InstrumentValueIcons/lock-open.svg</file>
<file alias="battery-low.svg">resources/InstrumentValueIcons/battery-low.svg</file>
<file alias="folder-outline-add.svg">resources/InstrumentValueIcons/folder-outline-add.svg</file>
<file alias="arrow-thin-left.svg">resources/InstrumentValueIcons/arrow-thin-left.svg</file>
<file alias="close.svg">resources/InstrumentValueIcons/close.svg</file>
<file alias="calculator.svg">resources/InstrumentValueIcons/calculator.svg</file>
<file alias="stroke-width.svg">resources/InstrumentValueIcons/stroke-width.svg</file>
<file alias="thumbs-down.svg">resources/InstrumentValueIcons/thumbs-down.svg</file>
<file alias="album.svg">resources/InstrumentValueIcons/album.svg</file>
<file alias="upload.svg">resources/InstrumentValueIcons/upload.svg</file>
<file alias="buoy.svg">resources/InstrumentValueIcons/buoy.svg</file>
<file alias="cheveron-down.svg">resources/InstrumentValueIcons/cheveron-down.svg</file>
<file alias="view-tile.svg">resources/InstrumentValueIcons/view-tile.svg</file>
</qresource>
</RCC>
......@@ -359,7 +359,7 @@ CustomBuild {
$$PWD/qgroundcontrol.qrc \
$$PWD/qgcresources.qrc \
$$PWD/qgcimages.qrc \
$$PWD/InstrumentValueIcons.qrc \
$$PWD/resources/InstrumentValueIcons/InstrumentValueIcons.qrc \
}
# On Qt 5.9 android versions there is the following bug: https://bugreports.qt.io/browse/QTBUG-61424
......@@ -647,8 +647,9 @@ HEADERS += \
src/QmlControls/AppMessages.h \
src/QmlControls/EditPositionDialogController.h \
src/QmlControls/FlightPathSegment.h \
src/QmlControls/HorizontalFactValueGrid.h \
src/QmlControls/InstrumentValueData.h \
src/QmlControls/InstrumentValueArea.h \
src/QmlControls/FactValueGrid.h \
src/QmlControls/ParameterEditorController.h \
src/QmlControls/QGCFileDialogController.h \
src/QmlControls/QGCImageProvider.h \
......@@ -661,6 +662,7 @@ HEADERS += \
src/QmlControls/TerrainProfile.h \
src/QmlControls/ToolStripAction.h \
src/QmlControls/ToolStripActionList.h \
src/QmlControls/VerticalFactValueGrid.h \
src/QtLocationPlugin/QMLControl/QGCMapEngineManager.h \
src/Settings/ADSBVehicleManagerSettings.h \
src/Settings/AppSettings.h \
......@@ -857,8 +859,9 @@ SOURCES += \
src/QmlControls/AppMessages.cc \
src/QmlControls/EditPositionDialogController.cc \
src/QmlControls/FlightPathSegment.cc \
src/QmlControls/HorizontalFactValueGrid.cc \
src/QmlControls/InstrumentValueData.cc \
src/QmlControls/InstrumentValueArea.cc \
src/QmlControls/FactValueGrid.cc \
src/QmlControls/ParameterEditorController.cc \
src/QmlControls/QGCFileDialogController.cc \
src/QmlControls/QGCImageProvider.cc \
......@@ -871,6 +874,7 @@ SOURCES += \
src/QmlControls/TerrainProfile.cc \
src/QmlControls/ToolStripAction.cc \
src/QmlControls/ToolStripActionList.cc \
src/QmlControls/VerticalFactValueGrid.cc \
src/QtLocationPlugin/QMLControl/QGCMapEngineManager.cc \
src/Settings/ADSBVehicleManagerSettings.cc \
src/Settings/AppSettings.cc \
......
......@@ -98,9 +98,10 @@
<file alias="QGroundControl/Controls/FWLandingPatternMapVisual.qml">src/PlanView/FWLandingPatternMapVisual.qml</file>
<file alias="QGroundControl/Controls/GeoFenceEditor.qml">src/PlanView/GeoFenceEditor.qml</file>
<file alias="QGroundControl/Controls/GeoFenceMapVisuals.qml">src/PlanView/GeoFenceMapVisuals.qml</file>
<file alias="QGroundControl/Controls/HorizontalFactValueGrid.qml">src/QmlControls/HorizontalFactValueGrid.qml</file>
<file alias="QGroundControl/Controls/IndicatorButton.qml">src/QmlControls/IndicatorButton.qml</file>
<file alias="QGroundControl/Controls/InstrumentValue.qml">src/QmlControls/InstrumentValue.qml</file>
<file alias="QGroundControl/Controls/InstrumentValueArea.qml">src/QmlControls/InstrumentValueArea.qml</file>
<file alias="QGroundControl/Controls/InstrumentValueLabel.qml">src/QmlControls/InstrumentValueLabel.qml</file>
<file alias="QGroundControl/Controls/InstrumentValueValue.qml">src/QmlControls/InstrumentValueValue.qml</file>
<file alias="QGroundControl/Controls/InstrumentValueEditDialog.qml">src/QmlControls/InstrumentValueEditDialog.qml</file>
<file alias="QGroundControl/Controls/JoystickThumbPad.qml">src/QmlControls/JoystickThumbPad.qml</file>
<file alias="QGroundControl/Controls/KMLOrSHPFileDialog.qml">src/QmlControls/KMLOrSHPFileDialog.qml</file>
......@@ -182,6 +183,7 @@
<file alias="QGroundControl/Controls/TransectStyleComplexItemStats.qml">src/PlanView/TransectStyleComplexItemStats.qml</file>
<file alias="QGroundControl/Controls/VehicleRotationCal.qml">src/QmlControls/VehicleRotationCal.qml</file>
<file alias="QGroundControl/Controls/VehicleSummaryRow.qml">src/QmlControls/VehicleSummaryRow.qml</file>
<file alias="QGroundControl/Controls/VerticalFactValueGrid.qml">src/QmlControls/VerticalFactValueGrid.qml</file>
<file alias="QGroundControl/Controls/ViewWidget.qml">src/ViewWidgets/ViewWidget.qml</file>
<file alias="QGroundControl/FactControls/AltitudeFactTextField.qml">src/FactSystem/FactControls/AltitudeFactTextField.qml</file>
<file alias="QGroundControl/FactControls/FactBitmask.qml">src/FactSystem/FactControls/FactBitmask.qml</file>
......
<RCC>
<qresource prefix="/InstrumentValueIcons">
<file alias="clipboard.svg">clipboard.svg</file>
<file alias="credit-card.svg">credit-card.svg</file>
<file alias="bookmark copy 2.svg">bookmark copy 2.svg</file>
<file alias="library.svg">library.svg</file>
<file alias="mouse.svg">mouse.svg</file>
<file alias="printer.svg">printer.svg</file>
<file alias="thumbs-up.svg">thumbs-up.svg</file>
<file alias="arrow-thin-up.svg">arrow-thin-up.svg</file>
<file alias="pause-outline.svg">pause-outline.svg</file>
<file alias="music-artist.svg">music-artist.svg</file>
<file alias="location-park.svg">location-park.svg</file>
<file alias="pen-tool.svg">pen-tool.svg</file>
<file alias="color-palette.svg">color-palette.svg</file>
<file alias="announcement.svg">announcement.svg</file>
<file alias="inbox-check.svg">inbox-check.svg</file>
<file alias="radio.svg">radio.svg</file>
<file alias="close-solid.svg">close-solid.svg</file>
<file alias="inbox.svg">inbox.svg</file>
<file alias="user-add.svg">user-add.svg</file>
<file alias="text-box.svg">text-box.svg</file>
<file alias="queue.svg">queue.svg</file>
<file alias="minus-outline.svg">minus-outline.svg</file>
<file alias="user-solid-square.svg">user-solid-square.svg</file>
<file alias="list-bullet.svg">list-bullet.svg</file>
<file alias="indent-decrease.svg">indent-decrease.svg</file>
<file alias="yin-yang.svg">yin-yang.svg</file>
<file alias="share-alt.svg">share-alt.svg</file>
<file alias="battery-full.svg">battery-full.svg</file>
<file alias="folder-outline.svg">folder-outline.svg</file>
<file alias="bookmark copy 3.svg">bookmark copy 3.svg</file>
<file alias="browser-window-open.svg">browser-window-open.svg</file>
<file alias="wallet.svg">wallet.svg</file>
<file alias="box.svg">box.svg</file>
<file alias="attachment.svg">attachment.svg</file>
<file alias="cloud.svg">cloud.svg</file>
<file alias="radar copy 2.svg">radar copy 2.svg</file>
<file alias="directions.svg">directions.svg</file>
<file alias="view-hide.svg">view-hide.svg</file>
<file alias="hour-glass.svg">hour-glass.svg</file>
<file alias="globe.svg">globe.svg</file>
<file alias="volume-off.svg">volume-off.svg</file>
<file alias="station.svg">station.svg</file>
<file alias="dots-horizontal-triple.svg">dots-horizontal-triple.svg</file>
<file alias="save-disk.svg">save-disk.svg</file>
<file alias="star-full.svg">star-full.svg</file>
<file alias="mood-sad-solid.svg">mood-sad-solid.svg</file>
<file alias="chat-bubble-dots.svg">chat-bubble-dots.svg</file>
<file alias="window-open.svg">window-open.svg</file>
<file alias="timer.svg">timer.svg</file>
<file alias="explore.svg">explore.svg</file>
<file alias="step-backward.svg">step-backward.svg</file>
<file alias="mood-happy-outline.svg">mood-happy-outline.svg</file>
<file alias="add-outline.svg">add-outline.svg</file>
<file alias="zoom-out.svg">zoom-out.svg</file>
<file alias="fast-forward.svg">fast-forward.svg</file>
<file alias="network.svg">network.svg</file>
<file alias="light-bulb.svg">light-bulb.svg</file>
<file alias="text-decoration.svg">text-decoration.svg</file>
<file alias="user-group.svg">user-group.svg</file>
<file alias="repost.svg">repost.svg</file>
<file alias="key.svg">key.svg</file>
<file alias="user-solid-circle.svg">user-solid-circle.svg</file>
<file alias="target.svg">target.svg</file>
<file alias="date-add.svg">date-add.svg</file>
<file alias="dial-pad.svg">dial-pad.svg</file>
<file alias="stand-by.svg">stand-by.svg</file>
<file alias="flashlight.svg">flashlight.svg</file>
<file alias="mood-neutral-outline.svg">mood-neutral-outline.svg</file>
<file alias="view-column.svg">view-column.svg</file>
<file alias="chart.svg">chart.svg</file>
<file alias="bluetooth.svg">bluetooth.svg</file>
<file alias="window-new.svg">window-new.svg</file>
<file alias="location-hotel.svg">location-hotel.svg</file>
<file alias="edit-pencil.svg">edit-pencil.svg</file>
<file alias="location-gas-station.svg">location-gas-station.svg</file>
<file alias="tablet.svg">tablet.svg</file>
<file alias="layers.svg">layers.svg</file>
<file alias="brightness-up.svg">brightness-up.svg</file>
<file alias="cloud-upload.svg">cloud-upload.svg</file>
<file alias="cheveron-outline-right.svg">cheveron-outline-right.svg</file>
<file alias="information-outline.svg">information-outline.svg</file>
<file alias="chart-pie.svg">chart-pie.svg</file>
<file alias="screen-full.svg">screen-full.svg</file>
<file alias="education.svg">education.svg</file>
<file alias="vector.svg">vector.svg</file>
<file alias="load-balancer.svg">load-balancer.svg</file>
<file alias="paste.svg">paste.svg</file>
<file alias="conversation.svg">conversation.svg</file>
<file alias="arrow-outline-down.svg">arrow-outline-down.svg</file>
<file alias="airplane.svg">airplane.svg</file>
<file alias="cheveron-right.svg">cheveron-right.svg</file>
<file alias="swap.svg">swap.svg</file>
<file alias="border-outer.svg">border-outer.svg</file>
<file alias="watch.svg">watch.svg</file>
<file alias="notifications.svg">notifications.svg</file>
<file alias="refresh.svg">refresh.svg</file>
<file alias="border-left.svg">border-left.svg</file>
<file alias="border-vertical.svg">border-vertical.svg</file>
<file alias="arrow-base-up.svg">arrow-base-up.svg</file>
<file alias="filter.svg">filter.svg</file>
<file alias="brightness-down.svg">brightness-down.svg</file>
<file alias="mic.svg">mic.svg</file>
<file alias="link.svg">link.svg</file>
<file alias="format-font-size.svg">format-font-size.svg</file>
<file alias="volume-mute.svg">volume-mute.svg</file>
<file alias="bug.svg">bug.svg</file>
<file alias="indent-increase.svg">indent-increase.svg</file>
<file alias="add-solid.svg">add-solid.svg</file>
<file alias="code.svg">code.svg</file>
<file alias="pause-solid.svg">pause-solid.svg</file>
<file alias="folder.svg">folder.svg</file>
<file alias="shopping-cart.svg">shopping-cart.svg</file>
<file alias="inbox-download.svg">inbox-download.svg</file>
<file alias="bookmark-outline-add.svg">bookmark-outline-add.svg</file>
<file alias="play-outline.svg">play-outline.svg</file>
<file alias="music-notes.svg">music-notes.svg</file>
<file alias="user.svg">user.svg</file>
<file alias="computer-desktop.svg">computer-desktop.svg</file>
<file alias="step-forward.svg">step-forward.svg</file>
<file alias="inbox-full.svg">inbox-full.svg</file>
<file alias="border-none.svg">border-none.svg</file>
<file alias="map.svg">map.svg</file>
<file alias="information-solid.svg">information-solid.svg</file>
<file alias="format-text-size.svg">format-text-size.svg</file>
<file alias="location.svg">location.svg</file>
<file alias="close-outline.svg">close-outline.svg</file>
<file alias="dots-horizontal-double.svg">dots-horizontal-double.svg</file>
<file alias="servers.svg">servers.svg</file>
<file alias="trophy.svg">trophy.svg</file>
<file alias="arrow-thick-right.svg">arrow-thick-right.svg</file>
<file alias="radar.svg">radar.svg</file>
<file alias="fast-rewind.svg">fast-rewind.svg</file>
<file alias="hard-drive.svg">hard-drive.svg</file>
<file alias="cheveron-outline-down.svg">cheveron-outline-down.svg</file>
<file alias="trash.svg">trash.svg</file>
<file alias="forward.svg">forward.svg</file>
<file alias="backspace.svg">backspace.svg</file>
<file alias="location-shopping.svg">location-shopping.svg</file>
<file alias="mobile-devices.svg">mobile-devices.svg</file>
<file alias="cheveron-left.svg">cheveron-left.svg</file>
<file alias="travel-walk.svg">travel-walk.svg</file>
<file alias="computer-laptop.svg">computer-laptop.svg</file>
<file alias="dashboard.svg">dashboard.svg</file>
<file alias="video-camera.svg">video-camera.svg</file>
<file alias="thermometer.svg">thermometer.svg</file>
<file alias="cog.svg">cog.svg</file>
<file alias="location-marina.svg">location-marina.svg</file>
<file alias="location-food.svg">location-food.svg</file>
<file alias="reply.svg">reply.svg</file>
<file alias="arrow-thick-left.svg">arrow-thick-left.svg</file>
<file alias="subdirectory-right.svg">subdirectory-right.svg</file>
<file alias="backward.svg">backward.svg</file>
<file alias="coffee.svg">coffee.svg</file>
<file alias="keyboard.svg">keyboard.svg</file>
<file alias="film.svg">film.svg</file>
<file alias="book-reference.svg">book-reference.svg</file>
<file alias="php-elephant.svg">php-elephant.svg</file>
<file alias="chart-bar.svg">chart-bar.svg</file>
<file alias="backward-step.svg">backward-step.svg</file>
<file alias="cheveron-outline-up.svg">cheveron-outline-up.svg</file>
<file alias="cheveron-outline-left.svg">cheveron-outline-left.svg</file>
<file alias="play.svg">play.svg</file>
<file alias="border-right.svg">border-right.svg</file>
<file alias="portfolio.svg">portfolio.svg</file>
<file alias="bookmark.svg">bookmark.svg</file>
<file alias="hot.svg">hot.svg</file>
<file alias="align-justified.svg">align-justified.svg</file>
<file alias="border-horizontal.svg">border-horizontal.svg</file>
<file alias="arrow-outline-up.svg">arrow-outline-up.svg</file>
<file alias="apparel.svg">apparel.svg</file>
<file alias="arrow-thin-down.svg">arrow-thin-down.svg</file>
<file alias="mood-happy-solid.svg">mood-happy-solid.svg</file>
<file alias="home.svg">home.svg</file>
<file alias="mood-sad-outline.svg">mood-sad-outline.svg</file>
<file alias="exclamation-solid.svg">exclamation-solid.svg</file>
<file alias="translate.svg">translate.svg</file>
<file alias="document.svg">document.svg</file>
<file alias="share-01.svg">share-01.svg</file>
<file alias="gift.svg">gift.svg</file>
<file alias="volume-up.svg">volume-up.svg</file>
<file alias="travel-bus.svg">travel-bus.svg</file>
<file alias="envelope.svg">envelope.svg</file>
<file alias="camera.svg">camera.svg</file>
<file alias="view-list.svg">view-list.svg</file>
<file alias="time.svg">time.svg</file>
<file alias="lock-closed.svg">lock-closed.svg</file>
<file alias="ticket.svg">ticket.svg</file>
<file alias="edit-cut.svg">edit-cut.svg</file>
<file alias="music-playlist.svg">music-playlist.svg</file>
<file alias="currency-dollar.svg">currency-dollar.svg</file>
<file alias="exclamation-outline.svg">exclamation-outline.svg</file>
<file alias="anchor.svg">anchor.svg</file>
<file alias="edit-copy.svg">edit-copy.svg</file>
<file alias="pause.svg">pause.svg</file>
<file alias="photo.svg">photo.svg</file>
<file alias="arrow-outline-right.svg">arrow-outline-right.svg</file>
<file alias="arrow-simple-right.svg">arrow-simple-right.svg</file>
<file alias="reply-all.svg">reply-all.svg</file>
<file alias="volume-down.svg">volume-down.svg</file>
<file alias="notification.svg">notification.svg</file>
<file alias="playlist.svg">playlist.svg</file>
<file alias="factory.svg">factory.svg</file>
<file alias="arrow-simple-up.svg">arrow-simple-up.svg</file>
<file alias="news-paper.svg">news-paper.svg</file>
<file alias="tuning.svg">tuning.svg</file>
<file alias="music-album.svg">music-album.svg</file>
<file alias="arrow-thick-down.svg">arrow-thick-down.svg</file>
<file alias="share.svg">share.svg</file>
<file alias="location-current.svg">location-current.svg</file>
<file alias="window.svg">window.svg</file>
<file alias="artist.svg">artist.svg</file>
<file alias="forward-step.svg">forward-step.svg</file>
<file alias="zoom-in.svg">zoom-in.svg</file>
<file alias="subdirectory-left.svg">subdirectory-left.svg</file>
<file alias="duplicate.svg">duplicate.svg</file>
<file alias="block.svg">block.svg</file>
<file alias="heart.svg">heart.svg</file>
<file alias="travel-taxi-cab.svg">travel-taxi-cab.svg</file>
<file alias="navigation-more.svg">navigation-more.svg</file>
<file alias="arrow-outline-left.svg">arrow-outline-left.svg</file>
<file alias="border-top.svg">border-top.svg</file>
<file alias="tools copy.svg">tools copy.svg</file>
<file alias="compose.svg">compose.svg</file>
<file alias="bookmark-outline.svg">bookmark-outline.svg</file>
<file alias="hand-stop.svg">hand-stop.svg</file>
<file alias="tag.svg">tag.svg</file>
<file alias="list-add.svg">list-add.svg</file>
<file alias="cheveron-up.svg">cheveron-up.svg</file>
<file alias="view-carousel.svg">view-carousel.svg</file>
<file alias="question.svg">question.svg</file>
<file alias="arrow-simple-left.svg">arrow-simple-left.svg</file>
<file alias="search.svg">search.svg</file>
<file alias="pylon.svg">pylon.svg</file>
<file alias="arrow-thin-right.svg">arrow-thin-right.svg</file>
<file alias="phone.svg">phone.svg</file>
<file alias="reload.svg">reload.svg</file>
<file alias="arrow-simple-down.svg">arrow-simple-down.svg</file>
<file alias="arrow-base-down.svg">arrow-base-down.svg</file>
<file alias="document-add.svg">document-add.svg</file>
<file alias="wrench.svg">wrench.svg</file>
<file alias="format-bold.svg">format-bold.svg</file>
<file alias="checkmark.svg">checkmark.svg</file>
<file alias="send.svg">send.svg</file>
<file alias="at-symbol.svg">at-symbol.svg</file>
<file alias="flag.svg">flag.svg</file>
<file alias="format-underline.svg">format-underline.svg</file>
<file alias="calendar.svg">calendar.svg</file>
<file alias="notifications-outline.svg">notifications-outline.svg</file>
<file alias="list.svg">list.svg</file>
<file alias="shuffle.svg">shuffle.svg</file>
<file alias="align-right.svg">align-right.svg</file>
<file alias="beverage.svg">beverage.svg</file>
<file alias="show-sidebar.svg">show-sidebar.svg</file>
<file alias="view-show.svg">view-show.svg</file>
<file alias="copy.svg">copy.svg</file>
<file alias="menu.svg">menu.svg</file>
<file alias="minus-solid.svg">minus-solid.svg</file>
<file alias="travel-case.svg">travel-case.svg</file>
<file alias="stethoscope.svg">stethoscope.svg</file>
<file alias="headphones.svg">headphones.svg</file>
<file alias="format-italic.svg">format-italic.svg</file>
<file alias="browser-window-new.svg">browser-window-new.svg</file>
<file alias="pin.svg">pin.svg</file>
<file alias="border-bottom.svg">border-bottom.svg</file>
<file alias="bolt.svg">bolt.svg</file>
<file alias="shield.svg">shield.svg</file>
<file alias="align-center.svg">align-center.svg</file>
<file alias="travel-train.svg">travel-train.svg</file>
<file alias="badge.svg">badge.svg</file>
<file alias="usb.svg">usb.svg</file>
<file alias="plugin.svg">plugin.svg</file>
<file alias="checkmark-outline.svg">checkmark-outline.svg</file>
<file alias="store-front.svg">store-front.svg</file>
<file alias="travel.svg">travel.svg</file>
<file alias="align-left.svg">align-left.svg</file>
<file alias="border-inner.svg">border-inner.svg</file>
<file alias="edit-crop.svg">edit-crop.svg</file>
<file alias="adjust.svg">adjust.svg</file>
<file alias="mood-neutral-solid.svg">mood-neutral-solid.svg</file>
<file alias="arrow-thick-up.svg">arrow-thick-up.svg</file>
<file alias="battery-half.svg">battery-half.svg</file>
<file alias="location-restroom.svg">location-restroom.svg</file>
<file alias="travel-car.svg">travel-car.svg</file>
<file alias="border-all.svg">border-all.svg</file>
<file alias="browser-window.svg">browser-window.svg</file>
<file alias="lock-open.svg">lock-open.svg</file>
<file alias="battery-low.svg">battery-low.svg</file>
<file alias="folder-outline-add.svg">folder-outline-add.svg</file>
<file alias="arrow-thin-left.svg">arrow-thin-left.svg</file>
<file alias="close.svg">close.svg</file>
<file alias="calculator.svg">calculator.svg</file>
<file alias="stroke-width.svg">stroke-width.svg</file>
<file alias="thumbs-down.svg">thumbs-down.svg</file>
<file alias="album.svg">album.svg</file>
<file alias="buoy.svg">buoy.svg</file>
<file alias="cheveron-down.svg">cheveron-down.svg</file>
<file alias="view-tile.svg">view-tile.svg</file>
</qresource>
</RCC>
......@@ -10,7 +10,7 @@ def main():
files = os.listdir(".")
for filename in files:
if filename.endswith(".svg"):
qrcFile.write("\t\t<file alias=\"%s\">resources/InstrumentValueIcons/%s</file>\n" % (filename, filename))
qrcFile.write("\t\t<file alias=\"%s\">%s</file>\n" % (filename, filename))
qrcFile.write("\t</qresource>\n")
qrcFile.write("</RCC>\n")
......
......@@ -23,12 +23,11 @@ import QGroundControl.FlightMap 1.0
import QGroundControl 1.0
/// Value page for InstrumentPanel PageView
InstrumentValueArea {
VerticalFactValueGrid {
id: _root
width: pageWidth
userSettingsGroup: valuePageUserSettingsGroup
defaultSettingsGroup: valuePageDefaultSettingsGroup
orientation: InstrumentValueArea.VerticalOrientation
property bool showSettingsIcon: true
property bool showLockIcon: true
......
......@@ -78,7 +78,8 @@
#if defined(QGC_ENABLE_MAVLINK_INSPECTOR)
#include "MAVLinkInspectorController.h"
#endif
#include "InstrumentValueArea.h"
#include "HorizontalFactValueGrid.h"
#include "VerticalFactValueGrid.h"
#include "InstrumentValueData.h"
#include "AppMessages.h"
#include "SimulatedPosition.h"
......@@ -543,7 +544,9 @@ void QGCApplication::_initCommon()
qmlRegisterUncreatableType<QGCGeoBoundingCube> ("QGroundControl.FlightMap", 1, 0, "QGCGeoBoundingCube", kRefOnly);
qmlRegisterUncreatableType<TrajectoryPoints> ("QGroundControl.FlightMap", 1, 0, "TrajectoryPoints", kRefOnly);
qmlRegisterType<InstrumentValueArea> (kQGCTemplates, 1, 0, "InstrumentValueArea");
qmlRegisterUncreatableType<FactValueGrid> (kQGCTemplates, 1, 0, "FactValueGrid", kRefOnly);
qmlRegisterType<HorizontalFactValueGrid> (kQGCTemplates, 1, 0, "HorizontalFactValueGrid");
qmlRegisterType<VerticalFactValueGrid> (kQGCTemplates, 1, 0, "VerticalFactValueGrid");
qmlRegisterType<QGCMapCircle> ("QGroundControl.FlightMap", 1, 0, "QGCMapCircle");
......@@ -551,7 +554,6 @@ void QGCApplication::_initCommon()
qmlRegisterType<ESP8266ComponentController> (kQGCControllers, 1, 0, "ESP8266ComponentController");
qmlRegisterType<ScreenToolsController> (kQGCControllers, 1, 0, "ScreenToolsController");
qmlRegisterType<PlanMasterController> (kQGCControllers, 1, 0, "PlanMasterController");
qmlRegisterType<InstrumentValueArea> (kQGCTemplates, 1, 0, "InstrumentValueArea");
qmlRegisterType<QGCFileDialogController> (kQGCControllers, 1, 0, "QGCFileDialogController");
qmlRegisterType<RCChannelMonitorController> (kQGCControllers, 1, 0, "RCChannelMonitorController");
qmlRegisterType<JoystickConfigController> (kQGCControllers, 1, 0, "JoystickConfigController");
......
/****************************************************************************
*
* (c) 2009-2020 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
*
* QGroundControl is licensed according to the terms in the file
* COPYING.md in the root of the source code directory.
*
****************************************************************************/
#include "FactValueGrid.h"
#include "InstrumentValueData.h"
#include "QGCApplication.h"
#include "QGCCorePlugin.h"
#include <QSettings>
const char* FactValueGrid::_rowsKey = "rows";
const char* FactValueGrid::_columnsKey = "columns";
const char* FactValueGrid::_fontSizeKey = "fontSize";
const char* FactValueGrid::_orientationKey = "orientation";
const char* FactValueGrid::_versionKey = "version";
const char* FactValueGrid::_factGroupNameKey = "groupName";
const char* FactValueGrid::_factNameKey = "factName";
const char* FactValueGrid::_textKey = "text";
const char* FactValueGrid::_showUnitsKey = "showUnits";
const char* FactValueGrid::_iconKey = "icon";
const char* FactValueGrid::_rangeTypeKey = "rangeType";
const char* FactValueGrid::_rangeValuesKey = "rangeValues";
const char* FactValueGrid::_rangeColorsKey = "rangeColors";
const char* FactValueGrid::_rangeIconsKey = "rangeIcons";
const char* FactValueGrid::_rangeOpacitiesKey = "rangeOpacities";
const char* FactValueGrid::_deprecatedGroupKey = "ValuesWidget";
QStringList FactValueGrid::_iconNames;
// Important: The indices of these strings must match the FactValueGrid::FontSize enum
const QStringList FactValueGrid::_fontSizeNames = {
QT_TRANSLATE_NOOP("FactValueGrid", "Default"),
QT_TRANSLATE_NOOP("FactValueGrid", "Small"),
QT_TRANSLATE_NOOP("FactValueGrid", "Medium"),
QT_TRANSLATE_NOOP("FactValueGrid", "Large"),
};
FactValueGrid::FactValueGrid(QQuickItem* parent)
: QQuickItem(parent)
, _rows (new QmlObjectListModel(this))
{
if (_iconNames.isEmpty()) {
QDir iconDir(":/InstrumentValueIcons/");
_iconNames = iconDir.entryList();
}
_connectSignals();
}
FactValueGrid::FactValueGrid(const QString& defaultSettingsGroup)
: QQuickItem (nullptr)
, _defaultSettingsGroup (defaultSettingsGroup)
, _rows (new QmlObjectListModel(this))
{
_connectSignals();
}
void FactValueGrid::_connectSignals(void)
{
connect(this, &FactValueGrid::fontSizeChanged, this, &FactValueGrid::_saveSettings);
}
void FactValueGrid::componentComplete(void)
{
QQuickItem::componentComplete();
// We should know settingsGroup/defaultSettingsGroup now so we can load settings
_loadSettings();
}
void FactValueGrid::resetToDefaults(void)
{
QSettings settings;
settings.remove(_userSettingsGroup);
_loadSettings();
}
QString FactValueGrid::_pascalCase(const QString& text)
{
return text[0].toUpper() + text.right(text.length() - 1);
}
void FactValueGrid::setFontSize(FontSize fontSize)
{
if (fontSize != _fontSize) {
_fontSize = fontSize;
emit fontSizeChanged(fontSize);
}
}
void FactValueGrid::_saveValueData(QSettings& settings, InstrumentValueData* value)
{
settings.setValue(_textKey, value->text());
settings.setValue(_showUnitsKey, value->showUnits());
settings.setValue(_iconKey, value->icon());
settings.setValue(_rangeTypeKey, value->rangeType());
if (value->rangeType() != InstrumentValueData::NoRangeInfo) {
settings.setValue(_rangeValuesKey, value->rangeValues());
}
switch (value->rangeType()) {
case InstrumentValueData::NoRangeInfo:
break;
case InstrumentValueData::ColorRange:
settings.setValue(_rangeColorsKey, value->rangeColors());
break;
case InstrumentValueData::OpacityRange:
settings.setValue(_rangeOpacitiesKey, value->rangeOpacities());
break;
case InstrumentValueData::IconSelectRange:
settings.setValue(_rangeIconsKey, value->rangeIcons());
break;
}
if (value->fact()) {
settings.setValue(_factGroupNameKey, value->factGroupName());
settings.setValue(_factNameKey, value->factName());
} else {
settings.setValue(_factGroupNameKey, "");
settings.setValue(_factNameKey, "");
}
}
void FactValueGrid::_loadValueData(QSettings& settings, InstrumentValueData* value)
{
QString factName = settings.value(_factNameKey).toString();
if (!factName.isEmpty()) {
value->setFact(settings.value(_factGroupNameKey).toString(), factName);
}
value->setText (settings.value(_textKey).toString());
value->setShowUnits (settings.value(_showUnitsKey, true).toBool());
value->setIcon (settings.value(_iconKey).toString());
value->setRangeType (settings.value(_rangeTypeKey, InstrumentValueData::NoRangeInfo).value<InstrumentValueData::RangeType>());
if (value->rangeType() != InstrumentValueData::NoRangeInfo) {
value->setRangeValues(settings.value(_rangeValuesKey).value<QVariantList>());
}
switch (value->rangeType()) {
case InstrumentValueData::NoRangeInfo:
break;
case InstrumentValueData::ColorRange:
value->setRangeColors(settings.value(_rangeColorsKey).value<QVariantList>());
break;
case InstrumentValueData::OpacityRange:
value->setRangeOpacities(settings.value(_rangeOpacitiesKey).value<QVariantList>());
break;
case InstrumentValueData::IconSelectRange:
value->setRangeIcons(settings.value(_rangeIconsKey).value<QVariantList>());
break;
}
}
void FactValueGrid::_connectSaveSignals(InstrumentValueData* value)
{
connect(value, &InstrumentValueData::factNameChanged, this, &FactValueGrid::_saveSettings);
connect(value, &InstrumentValueData::factGroupNameChanged, this, &FactValueGrid::_saveSettings);
connect(value, &InstrumentValueData::textChanged, this, &FactValueGrid::_saveSettings);
connect(value, &InstrumentValueData::showUnitsChanged, this, &FactValueGrid::_saveSettings);
connect(value, &InstrumentValueData::iconChanged, this, &FactValueGrid::_saveSettings);
connect(value, &InstrumentValueData::rangeTypeChanged, this, &FactValueGrid::_saveSettings);
connect(value, &InstrumentValueData::rangeValuesChanged, this, &FactValueGrid::_saveSettings);
connect(value, &InstrumentValueData::rangeColorsChanged, this, &FactValueGrid::_saveSettings);
connect(value, &InstrumentValueData::rangeOpacitiesChanged, this, &FactValueGrid::_saveSettings);
connect(value, &InstrumentValueData::rangeIconsChanged, this, &FactValueGrid::_saveSettings);
}
void FactValueGrid::appendColumn(void)
{
for (int rowIndex=0; rowIndex<_rows->count(); rowIndex++) {
QmlObjectListModel* list = _rows->value<QmlObjectListModel*>(rowIndex);
list->append(_createNewInstrumentValueWorker(list));
}
_columnCount++;
emit columnCountChanged(_columnCount);
_saveSettings();
}
void FactValueGrid::deleteLastColumn(void)
{
if (_columnCount <= 1) {
return;
}
for (int rowIndex=0; rowIndex<_rows->count(); rowIndex++) {
QmlObjectListModel* list = _rows->value<QmlObjectListModel*>(rowIndex);
list->removeAt(list->count() - 1)->deleteLater();
}
_columnCount--;
emit columnCountChanged(_columnCount);
_saveSettings();
}
QmlObjectListModel* FactValueGrid::appendRow(void)
{
QmlObjectListModel* newList = new QmlObjectListModel(_rows);
_rows->append(newList);
// If this is the first row then we automatically add the first column as well
int cColsToAdd = qMax(_columnCount, 1);
for (int i=0; i<cColsToAdd; i++) {
newList->append(_createNewInstrumentValueWorker(newList));
}
if (cColsToAdd != _columnCount) {
_columnCount = cColsToAdd;
emit columnCountChanged(_columnCount);
}
_saveSettings();
return newList;
}
void FactValueGrid::deleteLastRow(void)
{
if (_rows->count() > 1) {
_rows->removeAt(_rows->count() - 1)->deleteLater();
}
}
InstrumentValueData* FactValueGrid::_createNewInstrumentValueWorker(QObject* parent)
{
InstrumentValueData* value = new InstrumentValueData(this, parent);
value->setFact(InstrumentValueData::vehicleFactGroupName, "AltitudeRelative");
value->setText(value->fact()->shortDescription());
_connectSaveSignals(value);
return value;
}
void FactValueGrid::_saveSettings(void)
{
if (_preventSaveSettings) {
return;
}
QSettings settings;
if (_userSettingsGroup.isEmpty()) {
// This means we are setting up default settings
settings.beginGroup(_defaultSettingsGroup);
} else {
// This means we are saving user modifications
settings.remove(_defaultSettingsGroup);
settings.beginGroup(_userSettingsGroup);
}
settings.remove(""); // Remove any previous settings
settings.setValue(_versionKey, 1);
settings.setValue(_fontSizeKey, _fontSize);
settings.setValue(_orientationKey, _orientation);
settings.setValue(_columnsKey, _columnCount);
settings.beginWriteArray(_rowsKey);
for (int rowIndex=0; rowIndex<_rows->count(); rowIndex++) {
QmlObjectListModel* columns = _rows->value<QmlObjectListModel*>(rowIndex);
settings.setArrayIndex(rowIndex);
settings.beginWriteArray(_columnsKey);
for (int colIndex=0; colIndex<columns->count(); colIndex++) {
InstrumentValueData* value = columns->value<InstrumentValueData*>(colIndex);
settings.setArrayIndex(colIndex);
_saveValueData(settings, value);
}
settings.endArray();
}
settings.endArray();
}
void FactValueGrid::_loadSettings(void)
{
_rows->deleteLater();
_rows = new QmlObjectListModel(this);
emit rowsChanged(_rows);
QSettings settings;
if (!settings.childGroups().contains(_userSettingsGroup)) {
qgcApp()->toolbox()->corePlugin()->factValueGridCreateDefaultSettings(_defaultSettingsGroup);
}
_preventSaveSettings = true;
if (settings.childGroups().contains(_defaultSettingsGroup)) {
settings.beginGroup(_defaultSettingsGroup);
} else {
settings.beginGroup(_userSettingsGroup);
}
int version = settings.value(_versionKey, 0).toInt();
if (version != 1) {
qgcApp()->showAppMessage(tr("Settings version %1 for %2 is not supported. Setup will be reset to defaults.").arg(version).arg(_userSettingsGroup), tr("Load Settings"));
settings.remove("");
qgcApp()->toolbox()->corePlugin()->factValueGridCreateDefaultSettings(_defaultSettingsGroup);
}
_fontSize = settings.value(_fontSizeKey, DefaultFontSize).value<FontSize>();
_orientation = settings.value(_orientationKey, VerticalOrientation).value<Orientation>();
// Initial setup of empty items
int cColumns = settings.value(_columnsKey).toInt();
int cModelLists = settings.beginReadArray(_rowsKey);
if (cModelLists && cColumns) {
appendRow();
for (int itemIndex=1; itemIndex<cColumns; itemIndex++) {
appendColumn();
}
for (int rowIndex=1; rowIndex<cModelLists; rowIndex++) {
appendRow();
}
}
// Fill in the items from settings
for (int rowIndex=0; rowIndex<cModelLists; rowIndex++) {
settings.setArrayIndex(rowIndex);
int cItems = settings.beginReadArray(_columnsKey);
for (int itemIndex=0; itemIndex<cItems; itemIndex++) {
QmlObjectListModel* list = _rows->value<QmlObjectListModel*>(rowIndex);
InstrumentValueData* value = list->value<InstrumentValueData*>(itemIndex);
settings.setArrayIndex(itemIndex);
_loadValueData(settings, value);
}
settings.endArray();
}
settings.endArray();
_preventSaveSettings = false;
// Use defaults if nothing there
if (_rows->count() == 0) {
_rows->deleteLater();
emit rowsChanged(_rows);
}
}
......@@ -13,17 +13,18 @@
#include "QmlObjectListModel.h"
#include "QGCApplication.h"
#include <QQuickItem>
#include <QGridLayout>
#include <QSettings>
class InstrumentValueData;
class InstrumentValueArea : public QQuickItem
class FactValueGrid : public QQuickItem
{
Q_OBJECT
public:
InstrumentValueArea(QQuickItem *parent = nullptr);
InstrumentValueArea(const QString& defaultSettingsGroup);
FactValueGrid(QQuickItem *parent = nullptr);
FactValueGrid(const QString& defaultSettingsGroup);
enum Orientation {
HorizontalOrientation=0, // Labels will be to the left of the value
......@@ -39,77 +40,72 @@ public:
};
Q_ENUMS(FontSize)
// valuePageDefaultSettingsGroup:
// defaultSettingsGroup:
// This is the setting group name for default settings which are used when the user has not modified anything from the default setup. These settings will be overwritten
// prior to each use by the call to QGCCorePlugin::instrumentValueAreaCreateDefaultSettings.
// prior to each use by the call to QGCCorePlugin::FactValueGridCreateDefaultSettings.
// valuePageUserSettingsGroup:
// userSettingsGroup:
// This is the settings group name for user modified settings. Settings will be saved to here whenever the user modified anything. Also at that point in time the
// defaults settings group will be removed.
// The combination of the two valuePage*SettingsGroup values allows each InstrumentValueArea to have it's own persistence space.
// The combination of the two valuePage*SettingsGroup values allows each FactValueGrid to have it's own persistence space.
Q_PROPERTY(QString valuePageDefaultSettingsGroup MEMBER valuePageDefaultSettingsGroup CONSTANT)
Q_PROPERTY(QString valuePageUserSettingsGroup MEMBER _valuePageUserSettingsGroup CONSTANT)
Q_PROPERTY(QmlObjectListModel* rows MEMBER _rows NOTIFY rowsChanged)
Q_PROPERTY(int columnCount MEMBER _columnCount NOTIFY columnCountChanged)
Q_PROPERTY(QString userSettingsGroup MEMBER _userSettingsGroup NOTIFY userSettingsGroupChanged)
Q_PROPERTY(QString defaultSettingsGroup MEMBER _defaultSettingsGroup NOTIFY defaultSettingsGroupChanged)
Q_PROPERTY(Orientation orientation MEMBER _orientation NOTIFY orientationChanged)
Q_PROPERTY(Orientation orientation MEMBER _orientation CONSTANT)
Q_PROPERTY(QStringList iconNames READ iconNames CONSTANT)
Q_PROPERTY(FontSize fontSize READ fontSize WRITE setFontSize NOTIFY fontSizeChanged)
Q_PROPERTY(QStringList fontSizeNames MEMBER _fontSizeNames CONSTANT)
Q_PROPERTY(QmlObjectListModel* rowValues MEMBER _rowValues NOTIFY rowValuesChanged)
Q_INVOKABLE InstrumentValueData* appendColumn (int rowIndex);
Q_INVOKABLE void deleteLastColumn (int rowIndex);
Q_INVOKABLE QmlObjectListModel* appendRow (bool addBlanksColumn = true);
Q_INVOKABLE QmlObjectListModel* insertRow (int atIndex, bool addBlanksColumn = true);
Q_INVOKABLE void deleteRow (int rowIndex);
Q_INVOKABLE void resetToDefaults (void);
Q_INVOKABLE void resetToDefaults (void);
Q_INVOKABLE QmlObjectListModel* appendRow (void);
Q_INVOKABLE void deleteLastRow (void);
Q_INVOKABLE void appendColumn (void);
Q_INVOKABLE void deleteLastColumn (void);
FontSize fontSize (void) const { return _fontSize; }
QmlObjectListModel* rowValues (void) { return _rowValues; }
QStringList iconNames (void) const { return _iconNames; }
FontSize fontSize (void) const { return _fontSize; }
QStringList iconNames (void) const { return _iconNames; }
void setFontSize(FontSize fontSize);
// Override from QQmlParserStatus
void componentComplete(void) final;
static const QString valuePageDefaultSettingsGroup;
signals:
void userSettingsGroupChanged (const QString& userSettingsGroup);
void defaultSettingsGroupChanged(const QString& defaultSettingsGroup);
void rowValuesChanged (QmlObjectListModel* rowValues);
void orientationChanged (Orientation orientation);
void fontSizeChanged (FontSize fontSize);
void rowsChanged (QmlObjectListModel* model);
void columnCountChanged (int columnCount);
private slots:
void _saveSettings(void);
private:
void _connectSignals (void);
void _checkForDeprecatedSettings (void);
bool _validRowIndex (int rowIndex);
InstrumentValueData* _createNewInstrumentValueWorker (QmlObjectListModel* rowModel);
void _loadSettings (void);
QString _pascalCase (const QString& text);
protected:
Q_DISABLE_COPY(InstrumentValueArea)
Q_DISABLE_COPY(FactValueGrid)
QString _defaultSettingsGroup; // Settings group to read from if the user has not modified from the default settings
QString _userSettingsGroup; // Settings group to read from for user modified settings
Orientation _orientation = VerticalOrientation;
FontSize _fontSize = DefaultFontSize;
QmlObjectListModel* _rowValues = nullptr;
bool _preventSaveSettings = false;
QmlObjectListModel* _rows = nullptr;
int _columnCount = 0;
private:
InstrumentValueData* _createNewInstrumentValueWorker (QObject* parent);
void _saveSettings (void);
void _loadSettings (void);
void _connectSignals (void);
void _connectSaveSignals (InstrumentValueData* value);
QString _pascalCase (const QString& text);
void _saveValueData (QSettings& settings, InstrumentValueData* value);
void _loadValueData (QSettings& settings, InstrumentValueData* value);
// These are user facing string for the various enums.
static QStringList _iconNames;
static const QStringList _fontSizeNames;
static const QString _valuePageUserSettingsGroup;
static const char* _versionKey;
static const char* _rowsKey;
static const char* _columnsKey;
......@@ -129,7 +125,7 @@ private:
static const char* _deprecatedGroupKey;
};
QML_DECLARE_TYPE(InstrumentValueArea)
QML_DECLARE_TYPE(FactValueGrid)
Q_DECLARE_METATYPE(InstrumentValueArea::FontSize)
Q_DECLARE_METATYPE(InstrumentValueArea::Orientation)
Q_DECLARE_METATYPE(FactValueGrid::FontSize)
Q_DECLARE_METATYPE(FactValueGrid::Orientation)
/****************************************************************************
*
* (c) 2009-2020 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
*
* QGroundControl is licensed according to the terms in the file
* COPYING.md in the root of the source code directory.
*
****************************************************************************/
#include "HorizontalFactValueGrid.h"
#include "InstrumentValueData.h"
#include "QGCApplication.h"
#include "QGCCorePlugin.h"
#include <QSettings>
const QString HorizontalFactValueGrid::_toolbarUserSettingsGroup ("ToolbarUserSettings2");
const QString HorizontalFactValueGrid::toolbarDefaultSettingsGroup ("ToolbarDefaultSettings2");
HorizontalFactValueGrid::HorizontalFactValueGrid(QQuickItem* parent)
: FactValueGrid(parent)
{
_orientation = HorizontalOrientation;
}
HorizontalFactValueGrid::HorizontalFactValueGrid(const QString& defaultSettingsGroup)
: FactValueGrid(defaultSettingsGroup)
{
_orientation = HorizontalOrientation;
}
/****************************************************************************
*
* (c) 2009-2020 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
*
* QGroundControl is licensed according to the terms in the file
* COPYING.md in the root of the source code directory.
*
****************************************************************************/
#pragma once
#include "FactSystem.h"
#include "QmlObjectListModel.h"
#include "QGCApplication.h"
#include "FactValueGrid.h"
class InstrumentValueData;
class HorizontalFactValueGrid : public FactValueGrid
{
Q_OBJECT
public:
HorizontalFactValueGrid(QQuickItem *parent = nullptr);
HorizontalFactValueGrid(const QString& defaultSettingsGroup);
Q_PROPERTY(QString toolbarDefaultSettingsGroup MEMBER toolbarDefaultSettingsGroup CONSTANT)
Q_PROPERTY(QString toolbarUserSettingsGroup MEMBER _toolbarUserSettingsGroup CONSTANT)
static const QString toolbarDefaultSettingsGroup;
private:
Q_DISABLE_COPY(HorizontalFactValueGrid)
static const QString _toolbarUserSettingsGroup;
};
QML_DECLARE_TYPE(HorizontalFactValueGrid)
/****************************************************************************
*
* (c) 2009-2020 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
*
* QGroundControl is licensed according to the terms in the file
* COPYING.md in the root of the source code directory.
*
****************************************************************************/
import QtQuick 2.12
import QtQuick.Layouts 1.2
import QtQuick.Controls 2.5
import QtQml 2.12
import QGroundControl.Templates 1.0 as T
import QGroundControl.Controls 1.0
import QGroundControl.ScreenTools 1.0
import QGroundControl.Controllers 1.0
import QGroundControl.Palette 1.0
import QGroundControl.FlightMap 1.0
import QGroundControl 1.0
// Note: This control will spit out qWarnings like this: "QGridLayoutEngine::addItem: Cell (0, 1) already taken"
// This is due to Qt bug https://bugreports.qt.io/browse/QTBUG-65121
// If this becomes a problem I'll implement our own grid layout control
T.HorizontalFactValueGrid {
id: _root
width: topLevelRowLayout.width
property bool settingsUnlocked: false
property real _margins: ScreenTools.defaultFontPixelWidth / 2
property int _rowMax: 2
property real _rowButtonWidth: ScreenTools.minTouchPixels
property real _rowButtonHeight: ScreenTools.minTouchPixels / 2
property real _editButtonSpacing: 2
QGCPalette { id: qgcPal; colorGroupEnabled: enabled }
RowLayout {
id: topLevelRowLayout
height: parent.height
Item {
id: lockItem
Layout.fillHeight: true
width: ScreenTools.minTouchPixels
visible: settingsUnlocked
enabled: settingsUnlocked
QGCColoredImage {
anchors.centerIn: parent
source: "/res/LockOpen.svg"
mipmap: true
width: parent.width * 0.75
height: width
sourceSize.width: width
color: qgcPal.text
fillMode: Image.PreserveAspectFit
}
QGCMouseArea {
fillItem: parent
onClicked: settingsUnlocked = false
}
}
ColumnLayout {
Layout.fillHeight: true
GridLayout {
id: valueGrid
Layout.preferredHeight: _root.height
rows: _root.rows.count
rowSpacing: 0
Repeater {
model: _root.rows
Repeater {
id: labelRepeater
model: object
property real _index: index
InstrumentValueLabel {
Layout.row: labelRepeater._index
Layout.column: index * 2
Layout.fillHeight: true
Layout.alignment: Qt.AlignRight
instrumentValueData: object
}
}
}
Repeater {
model: _root.rows
Repeater {
id: valueRepeater
model: object
property real _index: index
InstrumentValueValue {
Layout.row: valueRepeater._index
Layout.column: index * 2 + 1
Layout.fillHeight: true
Layout.alignment: Qt.AlignLeft
instrumentValueData: object
}
}
}
}
RowLayout {
id: rowButtons
height: ScreenTools.minTouchPixels / 2
Layout.fillWidth: true
spacing: 1
visible: settingsUnlocked
enabled: settingsUnlocked
QGCButton {
Layout.fillWidth: true
Layout.preferredHeight: parent.height
text: qsTr("+")
onClicked: appendRow()
}
QGCButton {
Layout.fillWidth: true
Layout.preferredHeight: parent.height
text: qsTr("-")
enabled: _root.rows.count > 1
onClicked: deleteLastRow()
}
}
}
ColumnLayout {
Layout.fillHeight: true
Layout.bottomMargin: rowButtons.height
Layout.preferredWidth: ScreenTools.minTouchPixels / 2
spacing: 1
visible: settingsUnlocked
enabled: settingsUnlocked
QGCButton {
Layout.fillHeight: true
Layout.preferredHeight: ScreenTools.minTouchPixels
Layout.preferredWidth: parent.width
text: qsTr("+")
onClicked: appendColumn()
}
QGCButton {
Layout.fillHeight: true
Layout.preferredHeight: ScreenTools.minTouchPixels
Layout.preferredWidth: parent.width
text: qsTr("-")
enabled: _root.columnCount > 1
onClicked: deleteLastColumn()
}
}
}
QGCMouseArea {
x: valueGrid.x + lockItem.width + topLevelRowLayout.spacing
y: valueGrid.y
width: valueGrid.width
height: valueGrid.height
visible: settingsUnlocked
onClicked: {
var item = valueGrid.childAt(mouse.x, mouse.y)
//console.log(item, item ? item.instrumentValueData : "null", item && item.parent ? item.parent.instrumentValueData : "null")
if (item && item.instrumentValueData !== undefined) {
mainWindow.showPopupDialog(valueEditDialog, { instrumentValueData: item.instrumentValueData })
}
}
/*Rectangle {
anchors.fill: parent
border.color: "green"
border.width: 1
color: "transparent"
}*/
}
Component {
id: valueEditDialog
InstrumentValueEditDialog { }
}
}
/****************************************************************************
*
* (c) 2009-2020 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
*
* QGroundControl is licensed according to the terms in the file
* COPYING.md in the root of the source code directory.
*
****************************************************************************/
import QtQuick 2.12
import QtQuick.Layouts 1.2
import QtQuick.Controls 2.5
import QGroundControl 1.0
import QGroundControl.Controls 1.0
import QGroundControl.ScreenTools 1.0
import QGroundControl.Palette 1.0
Item {
id: root
height: value.y + value.height
property var instrumentValueData: null
property bool recalcOk: false
property var _rgFontSizes: [ ScreenTools.defaultFontPointSize, ScreenTools.smallFontPointSize, ScreenTools.mediumFontPointSize, ScreenTools.largeFontPointSize ]
property var _rgFontSizeRatios: [ 1, ScreenTools.smallFontPointRatio, ScreenTools.mediumFontPointRatio, ScreenTools.largeFontPointRatio ]
property real _doubleDescent: ScreenTools.defaultFontDescent * 2
property real _tightDefaultFontHeight: ScreenTools.defaultFontPixelHeight - _doubleDescent
property var _rgFontSizeTightHeights: [ _tightDefaultFontHeight * _rgFontSizeRatios[0] + 2, _tightDefaultFontHeight * _rgFontSizeRatios[1] + 2, _tightDefaultFontHeight * _rgFontSizeRatios[2] + 2, _tightDefaultFontHeight * _rgFontSizeRatios[3] + 2 ]
property real _tightHeight: _rgFontSizeTightHeights[instrumentValueData.instrumentValueArea.fontSize]
property real _fontSize: _rgFontSizes[instrumentValueData.instrumentValueArea.fontSize]
property real _horizontalLabelSpacing: ScreenTools.defaultFontPixelWidth
property real _blankEntryHeight: ScreenTools.defaultFontPixelHeight * 2
property bool _showIcon: instrumentValueData.icon || instrumentValueData.rangeType === InstrumentValueData.IconSelectRange
// After fighting with using layout and/or anchors I gave up and just do a manual recalc to position items which ends up being much simpler
function recalcPositions() {
if (!recalcOk) {
return
}
var smallVerticalSpacing = 2
var halfWidth = width / 2
var halfHorizontalSpacing = _horizontalLabelSpacing / 2
if (_showIcon) {
if (instrumentValueData.instrumentValueArea.orientation === InstrumentValueArea.VerticalOrientation) {
valueIcon.x = (width - valueIcon.width) / 2
valueIcon.y = 0
value.x = (width - value.width) / 2
value.y = valueIcon.height + smallVerticalSpacing
} else {
value.y = 0 // value assumed to be taller
valueIcon.y = (value.height - valueIcon.height) / 2
value.x = halfWidth + halfHorizontalSpacing
valueIcon.x = halfWidth - halfHorizontalSpacing - valueIcon.width
}
label.x = label.y = 0
} else {
if (instrumentValueData.text) {
if (instrumentValueData.instrumentValueArea.orientation === InstrumentValueArea.VerticalOrientation) {
label.x = (width - label.width) / 2
label.y = 0
value.x = (width - value.width) / 2
value.y = label.height + smallVerticalSpacing
} else {
value.y = 0 // value assumed to be taller
label.y = (value.height - label.height) / 2
value.x = halfWidth + halfHorizontalSpacing
label.x = halfWidth - halfHorizontalSpacing - label.width
}
} else {
value.x = (width - value.width) / 2
value.y = (height - value.height) / 2
}
valueIcon.x = valueIcon.y = 0
}
}
onRecalcOkChanged: recalcPositions()
onWidthChanged: recalcPositions()
Connections {
target: instrumentValueData
onIconChanged: recalcPositions()
}
QGCColoredImage {
id: valueIcon
height: _tightHeight
width: height
source: icon
sourceSize.height: height
fillMode: Image.PreserveAspectFit
mipmap: true
smooth: true
color: instrumentValueData.isValidColor(instrumentValueData.currentColor) ? instrumentValueData.currentColor : qgcPal.text
opacity: instrumentValueData.currentOpacity
visible: _showIcon
onWidthChanged: root.recalcPositions()
onHeightChanged: root.recalcPositions()
property string icon
readonly property string iconPrefix: "/InstrumentValueIcons/"
function updateIcon() {
if (instrumentValueData.rangeType === InstrumentValueData.IconSelectRange) {
icon = iconPrefix + instrumentValueData.currentIcon
} else if (instrumentValueData.icon) {
icon = iconPrefix + instrumentValueData.icon
} else {
icon = ""
}
}
Connections {
target: instrumentValueData
onRangeTypeChanged: valueIcon.updateIcon()
onCurrentIconChanged: valueIcon.updateIcon()
onIconChanged: valueIcon.updateIcon()
}
Component.onCompleted: updateIcon();
}
QGCLabel {
id: blank
anchors.horizontalCenter: parent.horizontalCenter
height: _columnButtonsTotalHeight
font.pointSize: ScreenTools.smallFontPointSize
text: _settingsUnlocked ? qsTr("BLANK") : ""
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
visible: !instrumentValueData.fact
onWidthChanged: root.recalcPositions()
onHeightChanged: root.recalcPositions()
}
QGCLabel {
id: label
height: _tightHeight
text: instrumentValueData.text
verticalAlignment: Text.AlignVCenter
visible: !_showIcon
onWidthChanged: root.recalcPositions()
onHeightChanged: root.recalcPositions()
}
QGCLabel {
id: value
font.pointSize: _fontSize
text: visible ? (instrumentValueData.fact.enumOrValueString + (instrumentValueData.showUnits ? instrumentValueData.fact.units : "")) : ""
verticalAlignment: Text.AlignVCenter
visible: instrumentValueData.fact
onWidthChanged: root.recalcPositions()
onHeightChanged: root.recalcPositions()
}
}
/****************************************************************************
*
* (c) 2009-2020 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
*
* QGroundControl is licensed according to the terms in the file
* COPYING.md in the root of the source code directory.
*
****************************************************************************/
#include "InstrumentValueArea.h"
#include "InstrumentValueData.h"
#include "QGCApplication.h"
#include "QGCCorePlugin.h"
#include <QSettings>
const QString InstrumentValueArea::_valuePageUserSettingsGroup ("ValuePage.userSettings");
const QString InstrumentValueArea::valuePageDefaultSettingsGroup ("ValuePage.defaultSettings");
const char* InstrumentValueArea::_rowsKey = "rows";
const char* InstrumentValueArea::_columnsKey = "columns";
const char* InstrumentValueArea::_fontSizeKey = "fontSize";
const char* InstrumentValueArea::_orientationKey = "orientation";
const char* InstrumentValueArea::_versionKey = "version";
const char* InstrumentValueArea::_factGroupNameKey = "groupName";
const char* InstrumentValueArea::_factNameKey = "factName";
const char* InstrumentValueArea::_textKey = "text";
const char* InstrumentValueArea::_showUnitsKey = "showUnits";
const char* InstrumentValueArea::_iconKey = "icon";
const char* InstrumentValueArea::_rangeTypeKey = "rangeType";
const char* InstrumentValueArea::_rangeValuesKey = "rangeValues";
const char* InstrumentValueArea::_rangeColorsKey = "rangeColors";
const char* InstrumentValueArea::_rangeIconsKey = "rangeIcons";
const char* InstrumentValueArea::_rangeOpacitiesKey = "rangeOpacities";
const char* InstrumentValueArea::_deprecatedGroupKey = "ValuesWidget";
QStringList InstrumentValueArea::_iconNames;
// Important: The indices of these strings must match the InstrumentValueArea::FontSize enum
const QStringList InstrumentValueArea::_fontSizeNames = {
QT_TRANSLATE_NOOP("InstrumentValueArea", "Default"),
QT_TRANSLATE_NOOP("InstrumentValueArea", "Small"),
QT_TRANSLATE_NOOP("InstrumentValueArea", "Medium"),
QT_TRANSLATE_NOOP("InstrumentValueArea", "Large"),
};
InstrumentValueArea::InstrumentValueArea(QQuickItem* parent)
: QQuickItem(parent)
, _rowValues(new QmlObjectListModel(this))
{
if (_iconNames.isEmpty()) {
QDir iconDir(":/InstrumentValueIcons/");
_iconNames = iconDir.entryList();
}
_connectSignals();
}
InstrumentValueArea::InstrumentValueArea(const QString& defaultSettingsGroup)
: QQuickItem (nullptr)
, _defaultSettingsGroup (defaultSettingsGroup)
, _rowValues (new QmlObjectListModel(this))
{
_connectSignals();
}
void InstrumentValueArea::_connectSignals(void)
{
connect(this, &InstrumentValueArea::fontSizeChanged, this, &InstrumentValueArea::_saveSettings);
connect(this, &InstrumentValueArea::orientationChanged, this, &InstrumentValueArea::_saveSettings);
}
void InstrumentValueArea::componentComplete(void)
{
QQuickItem::componentComplete();
// We should know settingsGroup/defaultSettingsGroup now so we can load settings
_loadSettings();
}
InstrumentValueData* InstrumentValueArea::_createNewInstrumentValueWorker(QmlObjectListModel* rowModel)
{
InstrumentValueData* value = new InstrumentValueData(this, rowModel);
connect(value, &InstrumentValueData::factNameChanged, this, &InstrumentValueArea::_saveSettings);
connect(value, &InstrumentValueData::factGroupNameChanged, this, &InstrumentValueArea::_saveSettings);
connect(value, &InstrumentValueData::textChanged, this, &InstrumentValueArea::_saveSettings);
connect(value, &InstrumentValueData::showUnitsChanged, this, &InstrumentValueArea::_saveSettings);
connect(value, &InstrumentValueData::iconChanged, this, &InstrumentValueArea::_saveSettings);
connect(value, &InstrumentValueData::rangeTypeChanged, this, &InstrumentValueArea::_saveSettings);
connect(value, &InstrumentValueData::rangeValuesChanged, this, &InstrumentValueArea::_saveSettings);
connect(value, &InstrumentValueData::rangeColorsChanged, this, &InstrumentValueArea::_saveSettings);
connect(value, &InstrumentValueData::rangeOpacitiesChanged, this, &InstrumentValueArea::_saveSettings);
connect(value, &InstrumentValueData::rangeIconsChanged, this, &InstrumentValueArea::_saveSettings);
return value;
}
InstrumentValueData* InstrumentValueArea::appendColumn(int rowIndex)
{
InstrumentValueData* newValue = nullptr;
if (rowIndex >= 0 && rowIndex < _rowValues->count()) {
QmlObjectListModel* row = _rowValues->value<QmlObjectListModel*>(rowIndex);
newValue = _createNewInstrumentValueWorker(row);
row->append(newValue);
}
_saveSettings();
return newValue;
}
void InstrumentValueArea::deleteLastColumn(int rowIndex)
{
if (rowIndex >= 0 && rowIndex < _rowValues->count()) {
QmlObjectListModel* row = _rowValues->value<QmlObjectListModel*>(rowIndex);
if (rowIndex != 0 || row->count() > 1) {
row->removeAt(row->count() - 1);
}
if (row->count() == 0) {
// Last column was deleted, delete the row as well
_rowValues->removeAt(rowIndex);
}
}
_saveSettings();
}
QmlObjectListModel* InstrumentValueArea::appendRow(bool addBlanksColumn)
{
QmlObjectListModel* newRow = new QmlObjectListModel(_rowValues);
_rowValues->append(newRow);
int rowIndex = _rowValues->count() - 1;
if (addBlanksColumn) {
appendColumn(rowIndex);
}
_saveSettings();
return newRow;
}
QmlObjectListModel* InstrumentValueArea::insertRow(int atIndex, bool addBlanksColumn)
{
QmlObjectListModel* newRow = nullptr;
if (atIndex >= 0 && atIndex < _rowValues->count() + 1) {
QmlObjectListModel* newRow = new QmlObjectListModel(_rowValues);
_rowValues->insert(atIndex, newRow);
if (addBlanksColumn) {
appendColumn(atIndex);
}
_saveSettings();
}
return newRow;
}
void InstrumentValueArea::deleteRow(int rowIndex)
{
if (rowIndex >= 0 && rowIndex < _rowValues->count()) {
if (_rowValues->count() > 1) {
_rowValues->removeAt(rowIndex);
}
_saveSettings();
}
}
bool InstrumentValueArea::_validRowIndex(int rowIndex)
{
return rowIndex >= 0 && rowIndex < _rowValues->count();
}
void InstrumentValueArea::_checkForDeprecatedSettings(void)
{
QSettings settings;
if (settings.childGroups().contains(_deprecatedGroupKey)) {
settings.remove(_deprecatedGroupKey);
qgcApp()->showAppMessage(tr("The support for custom instrument value display has changed. The display will be reset to the new default setup. You will need to modify it again to suit your needs."), tr("Instrument Values"));
}
}
void InstrumentValueArea::_saveSettings(void)
{
if (_preventSaveSettings) {
return;
}
QSettings settings;
if (_userSettingsGroup.isEmpty()) {
// This means we are setting up default settings
settings.beginGroup(_defaultSettingsGroup);
} else {
// This means we are saving user modifications
settings.remove(_defaultSettingsGroup);
settings.beginGroup(_userSettingsGroup);
}
settings.remove(""); // Remove any previous settings
settings.setValue(_versionKey, 1);
settings.setValue(_fontSizeKey, _fontSize);
settings.setValue(_orientationKey, _orientation);
settings.beginWriteArray(_rowsKey);
for (int rowIndex=0; rowIndex<_rowValues->count(); rowIndex++) {
QmlObjectListModel* colValues = _rowValues->value<QmlObjectListModel*>(rowIndex);
settings.setArrayIndex(rowIndex);
settings.beginWriteArray(_columnsKey);
for (int colIndex=0; colIndex<colValues->count(); colIndex++) {
InstrumentValueData* value = colValues->value<InstrumentValueData*>(colIndex);
settings.setArrayIndex(colIndex);
settings.setValue(_textKey, value->text());
settings.setValue(_showUnitsKey, value->showUnits());
settings.setValue(_iconKey, value->icon());
settings.setValue(_rangeTypeKey, value->rangeType());
if (value->rangeType() != InstrumentValueData::NoRangeInfo) {
settings.setValue(_rangeValuesKey, value->rangeValues());
}
switch (value->rangeType()) {
case InstrumentValueData::NoRangeInfo:
break;
case InstrumentValueData::ColorRange:
settings.setValue(_rangeColorsKey, value->rangeColors());
break;
case InstrumentValueData::OpacityRange:
settings.setValue(_rangeOpacitiesKey, value->rangeOpacities());
break;
case InstrumentValueData::IconSelectRange:
settings.setValue(_rangeIconsKey, value->rangeIcons());
break;
}
if (value->fact()) {
settings.setValue(_factGroupNameKey, value->factGroupName());
settings.setValue(_factNameKey, value->factName());
} else {
settings.setValue(_factGroupNameKey, "");
settings.setValue(_factNameKey, "");
}
}
settings.endArray();
}
settings.endArray();
}
void InstrumentValueArea::_loadSettings(void)
{
_checkForDeprecatedSettings();
QSettings settings;
_rowValues->deleteLater();
_rowValues = new QmlObjectListModel(this);
emit rowValuesChanged(_rowValues);
if (!settings.childGroups().contains(_userSettingsGroup)) {
qgcApp()->toolbox()->corePlugin()->instrumentValueAreaCreateDefaultSettings(_defaultSettingsGroup);
}
_preventSaveSettings = true;
if (settings.childGroups().contains(_defaultSettingsGroup)) {
settings.beginGroup(_defaultSettingsGroup);
} else {
settings.beginGroup(_userSettingsGroup);
}
int version = settings.value(_versionKey, 0).toInt();
if (version != 1) {
qgcApp()->showAppMessage(tr("Load Settings"), tr("Settings version %1 for %2 is not supported. Setup will be reset to defaults.").arg(version).arg(_userSettingsGroup));
settings.remove("");
qgcApp()->toolbox()->corePlugin()->instrumentValueAreaCreateDefaultSettings(_defaultSettingsGroup);
}
_fontSize = settings.value(_fontSizeKey, DefaultFontSize).value<FontSize>();
_orientation = settings.value(_orientationKey, VerticalOrientation).value<Orientation>();
int cRows = settings.beginReadArray(_rowsKey);
for (int rowIndex=0; rowIndex<cRows; rowIndex++) {
appendRow(false /* addBlankColumns */);
settings.setArrayIndex(rowIndex);
int cCols = settings.beginReadArray(_columnsKey);
for (int colIndex=0; colIndex<cCols; colIndex++) {
settings.setArrayIndex(colIndex);
InstrumentValueData* value = appendColumn(rowIndex);
QString factName = settings.value(_factNameKey).toString();
if (!factName.isEmpty()) {
value->setFact(settings.value(_factGroupNameKey).toString(), factName);
}
value->setText (settings.value(_textKey).toString());
value->setShowUnits (settings.value(_showUnitsKey, true).toBool());
value->setIcon (settings.value(_iconKey).toString());
value->setRangeType (settings.value(_rangeTypeKey, InstrumentValueData::NoRangeInfo).value<InstrumentValueData::RangeType>());
if (value->rangeType() != InstrumentValueData::NoRangeInfo) {
value->setRangeValues(settings.value(_rangeValuesKey).value<QVariantList>());
}
switch (value->rangeType()) {
case InstrumentValueData::NoRangeInfo:
break;
case InstrumentValueData::ColorRange:
value->setRangeColors(settings.value(_rangeColorsKey).value<QVariantList>());
break;
case InstrumentValueData::OpacityRange:
value->setRangeOpacities(settings.value(_rangeOpacitiesKey).value<QVariantList>());
break;
case InstrumentValueData::IconSelectRange:
value->setRangeIcons(settings.value(_rangeIconsKey).value<QVariantList>());
break;
}
}
settings.endArray();
}
settings.endArray();
_preventSaveSettings = false;
// Use defaults if nothing there
if (_rowValues->count() == 0) {
_rowValues->deleteLater();
emit rowValuesChanged(_rowValues);
}
}
void InstrumentValueArea::resetToDefaults(void)
{
QSettings settings;
settings.remove(_userSettingsGroup);
_loadSettings();
}
QString InstrumentValueArea::_pascalCase(const QString& text)
{
return text[0].toUpper() + text.right(text.length() - 1);
}
void InstrumentValueArea::setFontSize(FontSize fontSize)
{
if (fontSize != _fontSize) {
_fontSize = fontSize;
emit fontSizeChanged(fontSize);
}
}
......@@ -8,13 +8,13 @@
****************************************************************************/
#include "InstrumentValueData.h"
#include "InstrumentValueArea.h"
#include "FactValueGrid.h"
#include "QGCApplication.h"
#include "QGCCorePlugin.h"
#include <QSettings>
const char* InstrumentValueData::_vehicleFactGroupName = "Vehicle";
const char* InstrumentValueData::vehicleFactGroupName = "Vehicle";
// Important: The indices of these strings must match the InstrumentValueData::RangeType enum
const QStringList InstrumentValueData::_rangeTypeNames = {
......@@ -24,9 +24,9 @@ const QStringList InstrumentValueData::_rangeTypeNames = {
QT_TRANSLATE_NOOP("InstrumentValue", "Icon"),
};
InstrumentValueData::InstrumentValueData(InstrumentValueArea* instrumentValueArea, QObject *parent)
: QObject (parent)
, _instrumentValueArea (instrumentValueArea)
InstrumentValueData::InstrumentValueData(FactValueGrid* factValueGrid, QObject* parent)
: QObject (parent)
, _factValueGrid(factValueGrid)
{
MultiVehicleManager* multiVehicleManager = qgcApp()->toolbox()->multiVehicleManager();
connect(multiVehicleManager, &MultiVehicleManager::activeVehicleChanged, this, &InstrumentValueData::_activeVehicleChanged);
......@@ -57,14 +57,14 @@ void InstrumentValueData::_activeVehicleChanged(Vehicle* activeVehicle)
for (QString& name: _factGroupNames) {
name[0] = name[0].toUpper();
}
_factGroupNames.prepend(_vehicleFactGroupName);
_factGroupNames.prepend(vehicleFactGroupName);
emit factGroupNamesChanged(_factGroupNames);
if (_fact) {
_fact = nullptr;
FactGroup* factGroup = nullptr;
if (_factGroupName == _vehicleFactGroupName) {
if (_factGroupName == vehicleFactGroupName) {
factGroup = _activeVehicle;
} else {
factGroup = _activeVehicle->getFactGroup(_factGroupName);
......@@ -108,7 +108,7 @@ void InstrumentValueData::setFact(const QString& factGroupName, const QString& f
}
FactGroup* factGroup = nullptr;
if (factGroupName == _vehicleFactGroupName) {
if (factGroupName == vehicleFactGroupName) {
factGroup = _activeVehicle;
} else {
factGroup = _activeVehicle->getFactGroup(factGroupName);
......@@ -225,7 +225,7 @@ void InstrumentValueData::_resetRangeInfo(void)
_rangeOpacities.append(1.0);
break;
case IconSelectRange:
_rangeIcons.append(_instrumentValueArea->iconNames()[0]);
_rangeIcons.append(_factValueGrid->iconNames()[0]);
break;
}
}
......@@ -250,7 +250,7 @@ void InstrumentValueData::addRangeValue(void)
_rangeOpacities.append(1.0);
break;
case IconSelectRange:
_rangeIcons.append(_instrumentValueArea->iconNames()[0]);
_rangeIcons.append(_factValueGrid->iconNames()[0]);
break;
}
......
......@@ -15,7 +15,7 @@
#include <QObject>
class InstrumentValueArea;
class FactValueGrid;
class InstrumentValueData : public QObject
{
......@@ -30,9 +30,9 @@ public:
};
Q_ENUMS(RangeType)
explicit InstrumentValueData(InstrumentValueArea* instrumentValueArea, QObject *parent = nullptr);
explicit InstrumentValueData(FactValueGrid* factValueGrid, QObject* parent);
Q_PROPERTY(InstrumentValueArea* instrumentValueArea MEMBER _instrumentValueArea CONSTANT)
Q_PROPERTY(FactValueGrid* factValueGrid MEMBER _factValueGrid CONSTANT)
Q_PROPERTY(QStringList factGroupNames MEMBER _factGroupNames NOTIFY factGroupNamesChanged)
Q_PROPERTY(QStringList factValueNames MEMBER _factValueNames NOTIFY factValueNamesChanged)
Q_PROPERTY(QString factGroupName READ factGroupName NOTIFY factGroupNameChanged)
......@@ -78,6 +78,9 @@ public:
void setRangeIcons (const QVariantList& rangeIcons);
void setRangeOpacities (const QVariantList& rangeOpacities);
static const char* vehicleFactGroupName;
signals:
void factChanged (Fact* fact);
void factNameChanged (const QString& factName);
......@@ -107,7 +110,7 @@ private:
void _updateIcon (void);
void _updateOpacity (void);
InstrumentValueArea* _instrumentValueArea = nullptr;
FactValueGrid* _factValueGrid = nullptr;
Vehicle* _activeVehicle = nullptr;
QmlObjectListModel* _rowModel = nullptr;
Fact* _fact = nullptr;
......@@ -139,7 +142,6 @@ private:
// These are user facing string for the various enums.
static const QStringList _rangeTypeNames;
static const char* _vehicleFactGroupName;
};
QML_DECLARE_TYPE(InstrumentValueData)
......
......@@ -33,27 +33,13 @@ QGCPopupDialog {
GridLayout {
rowSpacing: _margins
columnSpacing: _margins
columns: 3
QGCCheckBox {
id: valueCheckBox
text: qsTr("Value")
checked: instrumentValueData.fact
onClicked: {
if (checked) {
instrumentValueData.setFact(instrumentValueData.factGroupNames[0], instrumentValueData.factValueNames[0])
} else {
instrumentValueData.clearFact()
}
}
}
columns: 2
QGCComboBox {
id: factGroupCombo
Layout.fillWidth: true
model: instrumentValueData.factGroupNames
sizeToContents: true
enabled: valueCheckBox.checked
Component.onCompleted: currentIndex = find(instrumentValueData.factGroupName)
onActivated: {
instrumentValueData.setFact(currentText, "")
......@@ -71,7 +57,6 @@ QGCPopupDialog {
Layout.fillWidth: true
model: instrumentValueData.factValueNames
sizeToContents: true
enabled: valueCheckBox.checked
Component.onCompleted: currentIndex = find(instrumentValueData.factName)
onActivated: {
instrumentValueData.setFact(instrumentValueData.factGroupName, currentText)
......@@ -90,17 +75,18 @@ QGCPopupDialog {
Component.onCompleted: checked = instrumentValueData.icon != ""
onClicked: {
instrumentValueData.text = ""
instrumentValueData.icon = instrumentValueData.iconNames[0]
instrumentValueData.icon = instrumentValueData.factValueGrid.iconNames[0]
var updateFunction = function(icon){ instrumentValueData.icon = icon }
mainWindow.showPopupDialog(iconPickerDialog, { iconNames: instrumentValueData.instrumentValueArea.iconNames, icon: instrumentValueData.icon, updateIconFunction: updateFunction })
mainWindow.showPopupDialog(iconPickerDialog, { iconNames: instrumentValueData.factValueGrid.iconNames, icon: instrumentValueData.icon, updateIconFunction: updateFunction })
}
}
QGCColoredImage {
id: valueIcon
Layout.alignment: Qt.AlignHCenter
height: ScreenTools.implicitComboBoxHeight
width: height
source: "/InstrumentValueIcons/" + (instrumentValueData.icon ? instrumentValueData.icon : instrumentValueData.instrumentValueArea.iconNames[0])
source: "/InstrumentValueIcons/" + (instrumentValueData.icon ? instrumentValueData.icon : instrumentValueData.factValueGrid.iconNames[0])
sourceSize.height: height
fillMode: Image.PreserveAspectFit
mipmap: true
......@@ -112,12 +98,16 @@ QGCPopupDialog {
anchors.fill: parent
onClicked: {
var updateFunction = function(icon){ instrumentValueData.icon = icon }
mainWindow.showPopupDialog(iconPickerDialog, { iconNames: instrumentValueData.instrumentValueArea.iconNames, icon: instrumentValueData.icon, updateIconFunction: updateFunction })
mainWindow.showPopupDialog(iconPickerDialog, { iconNames: instrumentValueData.factValueGrid.iconNames, icon: instrumentValueData.icon, updateIconFunction: updateFunction })
}
}
}
Item { height: 1; width: 1 }
Rectangle {
anchors.fill: valueIcon
color: qgcPal.text
visible: valueIcon.status === Image.Error
}
}
QGCRadioButton {
id: textRadio
......@@ -132,7 +122,6 @@ QGCPopupDialog {
QGCTextField {
id: labelTextField
Layout.fillWidth: true
Layout.columnSpan: 2
Layout.preferredWidth: ScreenTools.defaultFontPixelWidth * 10
text: instrumentValueData.text
enabled: textRadio.checked
......@@ -144,13 +133,14 @@ QGCPopupDialog {
QGCComboBox {
id: fontSizeCombo
Layout.fillWidth: true
model: instrumentValueData.instrumentValueArea.fontSizeNames
currentIndex: instrumentValueData.instrumentValueArea.fontSize
model: instrumentValueData.factValueGrid.fontSizeNames
currentIndex: instrumentValueData.factValueGrid.fontSize
sizeToContents: true
onActivated: instrumentValueData.instrumentValueArea.fontSize = index
onActivated: instrumentValueData.factValueGrid.fontSize = index
}
QGCCheckBox {
Layout.columnSpan: 2
text: qsTr("Show Units")
checked: instrumentValueData.showUnits
onClicked: instrumentValueData.showUnits = checked
......@@ -160,7 +150,6 @@ QGCPopupDialog {
QGCComboBox {
id: rangeTypeCombo
Layout.columnSpan: 2
Layout.fillWidth: true
model: instrumentValueData.rangeTypeNames
currentIndex: instrumentValueData.rangeType
......@@ -170,7 +159,7 @@ QGCPopupDialog {
Loader {
id: rangeLoader
Layout.columnSpan: 3
Layout.columnSpan: 2
Layout.fillWidth: true
Layout.preferredWidth: item ? item.width : 0
Layout.preferredHeight: item ? item.height : 0
......@@ -403,7 +392,7 @@ QGCPopupDialog {
anchors.fill: parent
onClicked: {
var updateFunction = function(icon){ updateIconValue(index, icon) }
mainWindow.showPopupDialog(iconPickerDialog, { iconNames: instrumentValueData.instrumentValueArea.iconNames, icon: modelData, updateIconFunction: updateFunction })
mainWindow.showPopupDialog(iconPickerDialog, { iconNames: instrumentValueData.factValueGrid.iconNames, icon: modelData, updateIconFunction: updateFunction })
}
}
}
......
/****************************************************************************
*
* (c) 2009-2020 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
*
* QGroundControl is licensed according to the terms in the file
* COPYING.md in the root of the source code directory.
*
****************************************************************************/
import QtQuick 2.12
import QtQuick.Layouts 1.2
import QtQuick.Controls 2.5
import QGroundControl 1.0
import QGroundControl.Controls 1.0
import QGroundControl.Templates 1.0
import QGroundControl.ScreenTools 1.0
import QGroundControl.Palette 1.0
ColumnLayout {
property var instrumentValueData: null
property bool _verticalOrientation: instrumentValueData.factValueGrid.orientation === FactValueGrid.VerticalOrientation
property var _rgFontSizes: [ ScreenTools.defaultFontPointSize, ScreenTools.smallFontPointSize, ScreenTools.mediumFontPointSize, ScreenTools.largeFontPointSize ]
property var _rgFontSizeRatios: [ 1, ScreenTools.smallFontPointRatio, ScreenTools.mediumFontPointRatio, ScreenTools.largeFontPointRatio ]
property real _doubleDescent: ScreenTools.defaultFontDescent * 2
property real _tightDefaultFontHeight: ScreenTools.defaultFontPixelHeight - _doubleDescent
property var _rgFontSizeTightHeights: [ _tightDefaultFontHeight * _rgFontSizeRatios[0] + 2, _tightDefaultFontHeight * _rgFontSizeRatios[1] + 2, _tightDefaultFontHeight * _rgFontSizeRatios[2] + 2, _tightDefaultFontHeight * _rgFontSizeRatios[3] + 2 ]
property real _tightHeight: _rgFontSizeTightHeights[instrumentValueData.factValueGrid.fontSize]
property bool _iconVisible: instrumentValueData.rangeType === InstrumentValueData.IconSelectRange || instrumentValueData.icon
QGCPalette { id: qgcPal; colorGroupEnabled: enabled }
QGCColoredImage {
id: valueIcon
Layout.alignment: _verticalOrientation ? Qt.AlignHCenter : Qt.AlignVCenter
height: _tightHeight * 0.75
width: height
sourceSize.height: height
fillMode: Image.PreserveAspectFit
mipmap: true
smooth: true
color: instrumentValueData.isValidColor(instrumentValueData.currentColor) ? instrumentValueData.currentColor : qgcPal.text
opacity: instrumentValueData.currentOpacity
visible: _iconVisible
readonly property string iconPrefix: "/InstrumentValueIcons/"
function updateIcon() {
if (instrumentValueData.rangeType === InstrumentValueData.IconSelectRange) {
valueIcon.source = iconPrefix + instrumentValueData.currentIcon
} else if (instrumentValueData.icon) {
valueIcon.source = iconPrefix + instrumentValueData.icon
} else {
valueIcon.source = ""
}
}
Connections {
target: instrumentValueData
onRangeTypeChanged: valueIcon.updateIcon()
onCurrentIconChanged: valueIcon.updateIcon()
onIconChanged: valueIcon.updateIcon()
}
Component.onCompleted: updateIcon();
Rectangle {
anchors.fill: valueIcon
color: qgcPal.text
visible: valueIcon.status === Image.Error
}
}
QGCLabel {
Layout.alignment: _verticalOrientation ? Qt.AlignHCenter : Qt.AlignVCenter
height: _tightHeight
font.pointSize: ScreenTools.smallFontPointSize
text: instrumentValueData.text
visible: !_iconVisible
}
}
/****************************************************************************
*
* (c) 2009-2020 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
*
* QGroundControl is licensed according to the terms in the file
* COPYING.md in the root of the source code directory.
*
****************************************************************************/
import QtQuick 2.12
import QtQuick.Layouts 1.2
import QtQuick.Controls 2.5
import QGroundControl 1.0
import QGroundControl.Controls 1.0
import QGroundControl.Templates 1.0
import QGroundControl.Templates 1.0
import QGroundControl.ScreenTools 1.0
import QGroundControl.Palette 1.0
ColumnLayout {
property var instrumentValueData: null
property bool settingsUnlocked: false
property bool _verticalOrientation: instrumentValueData.factValueGrid.orientation === FactValueGrid.VerticalOrientation
property var _rgFontSizes: [ ScreenTools.defaultFontPointSize, ScreenTools.smallFontPointSize, ScreenTools.mediumFontPointSize, ScreenTools.largeFontPointSize ]
property var _rgFontSizeRatios: [ 1, ScreenTools.smallFontPointRatio, ScreenTools.mediumFontPointRatio, ScreenTools.largeFontPointRatio ]
property real _doubleDescent: ScreenTools.defaultFontDescent * 2
property real _tightDefaultFontHeight: ScreenTools.defaultFontPixelHeight - _doubleDescent
property var _rgFontSizeTightHeights: [ _tightDefaultFontHeight * _rgFontSizeRatios[0] + 2, _tightDefaultFontHeight * _rgFontSizeRatios[1] + 2, _tightDefaultFontHeight * _rgFontSizeRatios[2] + 2, _tightDefaultFontHeight * _rgFontSizeRatios[3] + 2 ]
property real _tightHeight: _rgFontSizeTightHeights[instrumentValueData.factValueGrid.fontSize]
property real _fontSize: _rgFontSizes[instrumentValueData.factValueGrid.fontSize]
property real _horizontalLabelSpacing: ScreenTools.defaultFontPixelWidth
property bool _valueVisible: instrumentValueData.fact
property real _width: 0
property real _height: 0
QGCLabel {
Layout.alignment: _verticalOrientation ? Qt.AlignHCenter : Qt.AlignVCenter
font.pointSize: _fontSize
text: instrumentValueData.fact.enumOrValueString + (instrumentValueData.showUnits ? " " + instrumentValueData.fact.units : "")
visible: _valueVisible
QGCPalette { id: qgcPal; colorGroupEnabled: enabled }
}
}
......@@ -9,19 +9,30 @@
import QtQuick 2.12
Item {
property string name: "control"
Rectangle {
id: _root
border.width: borderColor === undefined ? 0 : 1
border.color: borderColor
color: "transparent"
Component.onCompleted: console.log("QGCControlDebug.onCompleted name,x,y,width,height,visible,z,parent", name, x, y, width, height, visible, z, parent)
property string name
property color borderColor
function logEverything() {
console.log(qsTr("%1 x:%2 y:%3 width:%4 height:%5 visible: %6 enabled: %7 z:%8 parent:%9 implicitWidth/Height:%10:%11", "Do not translate").arg(name).arg(parent.x).arg(parent.y).arg(parent.width).arg(parent.height).arg(parent.visible).arg(parent.enabled).arg(parent.z).arg(parent.parent))
}
Component.onCompleted: logEverything()
Connections {
target: parent
onXChanged: console.log(name, "xChanged", parent.x)
onYChanged: console.log(name, "yChanged", parent.y)
onWidthChanged: console.log(name, "widthChanged", parent.width)
onHeightChanged: console.log(name, "heightChanged", parent.height)
onVisibleChanged: console.log(name, "visibleChanged", parent.visible)
onZChanged: console.log(name, "zChanged", parent.z)
onParentChanged: console.log(name, "parentChanged", parent.parent)
onXChanged: { console.log(name, "xChanged", parent.x); logEverything() }
onYChanged: { console.log(name, "yChanged", parent.y); logEverything() }
onWidthChanged: { console.log(name, "widthChanged", parent.width); logEverything() }
onHeightChanged: { console.log(name, "heightChanged", parent.height); logEverything() }
onVisibleChanged: { console.log(name, "visibleChanged", parent.visible); logEverything() }
onZChanged: { console.log(name, "zChanged", parent.z); logEverything() }
onParentChanged: { console.log(name, "parentChanged", parent.parent); logEverything() }
onEnabledChanged: { console.log(name, "enabledChanged", parent.enabled); logEverything() }
}
}
Module QGroundControl.Controls
AnalyzePage 1.0 AnalyzePage.qml
AppMessages 1.0 AppMessages.qml
AxisMonitor 1.0 AxisMonitor.qml
CameraCalcCamera 1.0 CameraCalcCamera.qml
CameraCalcGrid 1.0 CameraCalcGrid.qml
ContentAreaCalc 1.0 ContentAreaCalc.qml
APMSubMotorDisplay 1.0 APMSubMotorDisplay.qml
CameraSection 1.0 CameraSection.qml
ClickableColor 1.0 ClickableColor.qml
DeadMouseArea 1.0 DeadMouseArea.qml
DropButton 1.0 DropButton.qml
DropPanel 1.0 DropPanel.qml
EditPositionDialog 1.0 EditPositionDialog.qml
ExclusiveGroupItem 1.0 ExclusiveGroupItem.qml
FactSliderPanel 1.0 FactSliderPanel.qml
FileButton 1.0 FileButton.qml
FlightModeDropdown 1.0 FlightModeDropdown.qml
FlightModeMenu 1.0 FlightModeMenu.qml
GeoFenceEditor 1.0 GeoFenceEditor.qml
GeoFenceMapVisuals 1.0 GeoFenceMapVisuals.qml
HackFileDialog 1.0 HackFileDialog.qml
HeightIndicator 1.0 HeightIndicator.qml
IndicatorButton 1.0 IndicatorButton.qml
InstrumentValue 1.0 InstrumentValue.qml
InstrumentValueArea 1.0 InstrumentValueArea.qml
InstrumentValueEditDialog 1.0 InstrumentValueEditDialog.qml
JoystickThumbPad 1.0 JoystickThumbPad.qml
KMLOrSHPFileDialog 1.0 KMLOrSHPFileDialog.qml
LogReplayStatusBar 1.0 LogReplayStatusBar.qml
MainWindowSavedState 1.0 MainWindowSavedState.qml
MAVLinkMessageButton 1.0 MAVLinkMessageButton.qml
MissionCommandDialog 1.0 MissionCommandDialog.qml
MissionItemEditor 1.0 MissionItemEditor.qml
MissionItemIndexLabel 1.0 MissionItemIndexLabel.qml
MissionItemMapVisual 1.0 MissionItemMapVisual.qml
MissionItemStatus 1.0 MissionItemStatus.qml
ModeSwitchDisplay 1.0 ModeSwitchDisplay.qml
MultiRotorMotorDisplay 1.0 MultiRotorMotorDisplay.qml
OfflineMapButton 1.0 OfflineMapButton.qml
PageView 1.0 PageView.qml
ParameterEditor 1.0 ParameterEditor.qml
ParameterEditorDialog 1.0 ParameterEditorDialog.qml
PIDTuning 1.0 PIDTuning.qml
PlanEditToolbar 1.0 PlanEditToolbar.qml
PreFlightCheckButton 1.0 PreFlightCheckButton.qml
PreFlightCheckGroup 1.0 PreFlightCheckGroup.qml
PreFlightCheckModel 1.0 PreFlightCheckModel.qml
QGCButton 1.0 QGCButton.qml
QGCCheckBox 1.0 QGCCheckBox.qml
QGCColoredImage 1.0 QGCColoredImage.qml
QGCComboBox 1.0 QGCComboBox.qml
QGCControlDebug 1.0 QGCControlDebug.qml
QGCDynamicObjectManager 1.0 QGCDynamicObjectManager.qml
QGCFileDialog 1.0 QGCFileDialog.qml
QGCFlickable 1.0 QGCFlickable.qml
QGCGroupBox 1.0 QGCGroupBox.qml
QGCLabel 1.0 QGCLabel.qml
QGCListView 1.0 QGCListView.qml
QGCMapCircleVisuals 1.0 QGCMapCircleVisuals.qml
QGCMapLabel 1.0 QGCMapLabel.qml
QGCMapPolygonVisuals 1.0 QGCMapPolygonVisuals.qml
QGCMapPolylineVisuals 1.0 QGCMapPolylineVisuals.qml
QGCMenu 1.0 QGCMenu.qml
QGCMenuItem 1.0 QGCMenuItem.qml
QGCMenuSeparator 1.0 QGCMenuSeparator.qml
QGCMouseArea 1.0 QGCMouseArea.qml
QGCMovableItem 1.0 QGCMovableItem.qml
QGCOptionsComboBox 1.0 QGCOptionsComboBox.qml
QGCPipOverlay 1.0 QGCPipOverlay.qml
QGCPipState 1.0 QGCPipState.qml
QGCPopupDialog 1.0 QGCPopupDialog.qml
QGCPopupDialogContainer 1.0 QGCPopupDialogContainer.qml
QGCRadioButton 1.0 QGCRadioButton.qml
QGCSlider 1.0 QGCSlider.qml
QGCSwitch 1.0 QGCSwitch.qml
QGCTabBar 1.0 QGCTabBar.qml
QGCTabButton 1.0 QGCTabButton.qml
QGCTextField 1.0 QGCTextField.qml
QGCToolBarButton 1.0 QGCToolBarButton.qml
QGCToolInsets 1.0 QGCToolInsets.qml
QGCViewDialog 1.0 QGCViewDialog.qml
QGCViewDialogContainer 1.0 QGCViewDialogContainer.qml
QGCViewMessage 1.0 QGCViewMessage.qml
RallyPointEditorHeader 1.0 RallyPointEditorHeader.qml
RallyPointItemEditor 1.0 RallyPointItemEditor.qml
RallyPointMapVisuals 1.0 RallyPointMapVisuals.qml
RCChannelMonitor 1.0 RCChannelMonitor.qml
RCToParamDialog 1.0 RCToParamDialog.qml
RoundButton 1.0 RoundButton.qml
SectionHeader 1.0 SectionHeader.qml
SetupPage 1.0 SetupPage.qml
SignalStrength 1.0 SignalStrength.qml
SimpleItemMapVisuals 1.0 SimpleItemMapVisuals.qml
SliderSwitch 1.0 SliderSwitch.qml
SubMenuButton 1.0 SubMenuButton.qml
SurveyMapVisuals 1.0 SurveyMapVisuals.qml
TerrainStatus 1.0 TerrainStatus.qml
TransectStyleComplexItemStats 1.0 TransectStyleComplexItemStats.qml
TransectStyleMapVisuals 1.0 TransectStyleMapVisuals.qml
ToolBarBase 1.0 ToolBarBase.qml
ToolStrip 1.0 ToolStrip.qml
VehicleRotationCal 1.0 VehicleRotationCal.qml
VehicleSummaryRow 1.0 VehicleSummaryRow.qml
ViewWidget 1.0 ViewWidget.qml
QGCHoverButton 1.0 QGCHoverButton.qml
MAVLinkChart 1.0 MAVLinkChart.qml
AnalyzePage 1.0 AnalyzePage.qml
AppMessages 1.0 AppMessages.qml
AxisMonitor 1.0 AxisMonitor.qml
CameraCalcCamera 1.0 CameraCalcCamera.qml
CameraCalcGrid 1.0 CameraCalcGrid.qml
ContentAreaCalc 1.0 ContentAreaCalc.qml
APMSubMotorDisplay 1.0 APMSubMotorDisplay.qml
CameraSection 1.0 CameraSection.qml
ClickableColor 1.0 ClickableColor.qml
DeadMouseArea 1.0 DeadMouseArea.qml
DropButton 1.0 DropButton.qml
DropPanel 1.0 DropPanel.qml
EditPositionDialog 1.0 EditPositionDialog.qml
ExclusiveGroupItem 1.0 ExclusiveGroupItem.qml
FactSliderPanel 1.0 FactSliderPanel.qml
FileButton 1.0 FileButton.qml
FlightModeDropdown 1.0 FlightModeDropdown.qml
FlightModeMenu 1.0 FlightModeMenu.qml
GeoFenceEditor 1.0 GeoFenceEditor.qml
GeoFenceMapVisuals 1.0 GeoFenceMapVisuals.qml
HackFileDialog 1.0 HackFileDialog.qml
HeightIndicator 1.0 HeightIndicator.qml
HorizontalFactValueGrid 1.0 HorizontalFactValueGrid.qml
IndicatorButton 1.0 IndicatorButton.qml
InstrumentValueLabel 1.0 InstrumentValueLabel.qml
InstrumentValueValue 1.0 InstrumentValueValue.qml
InstrumentValueEditDialog 1.0 InstrumentValueEditDialog.qml
JoystickThumbPad 1.0 JoystickThumbPad.qml
KMLOrSHPFileDialog 1.0 KMLOrSHPFileDialog.qml
LogReplayStatusBar 1.0 LogReplayStatusBar.qml
MainWindowSavedState 1.0 MainWindowSavedState.qml
MAVLinkMessageButton 1.0 MAVLinkMessageButton.qml
MissionCommandDialog 1.0 MissionCommandDialog.qml
MissionItemEditor 1.0 MissionItemEditor.qml
MissionItemIndexLabel 1.0 MissionItemIndexLabel.qml
MissionItemMapVisual 1.0 MissionItemMapVisual.qml
MissionItemStatus 1.0 MissionItemStatus.qml
ModeSwitchDisplay 1.0 ModeSwitchDisplay.qml
MultiRotorMotorDisplay 1.0 MultiRotorMotorDisplay.qml
OfflineMapButton 1.0 OfflineMapButton.qml
PageView 1.0 PageView.qml
ParameterEditor 1.0 ParameterEditor.qml
ParameterEditorDialog 1.0 ParameterEditorDialog.qml
PIDTuning 1.0 PIDTuning.qml
PlanEditToolbar 1.0 PlanEditToolbar.qml
PreFlightCheckButton 1.0 PreFlightCheckButton.qml
PreFlightCheckGroup 1.0 PreFlightCheckGroup.qml
PreFlightCheckModel 1.0 PreFlightCheckModel.qml
QGCButton 1.0 QGCButton.qml
QGCCheckBox 1.0 QGCCheckBox.qml
QGCColoredImage 1.0 QGCColoredImage.qml
QGCComboBox 1.0 QGCComboBox.qml
QGCControlDebug 1.0 QGCControlDebug.qml
QGCDynamicObjectManager 1.0 QGCDynamicObjectManager.qml
QGCFileDialog 1.0 QGCFileDialog.qml
QGCFlickable 1.0 QGCFlickable.qml
QGCGroupBox 1.0 QGCGroupBox.qml
QGCLabel 1.0 QGCLabel.qml
QGCListView 1.0 QGCListView.qml
QGCMapCircleVisuals 1.0 QGCMapCircleVisuals.qml
QGCMapLabel 1.0 QGCMapLabel.qml
QGCMapPolygonVisuals 1.0 QGCMapPolygonVisuals.qml
QGCMapPolylineVisuals 1.0 QGCMapPolylineVisuals.qml
QGCMenu 1.0 QGCMenu.qml
QGCMenuItem 1.0 QGCMenuItem.qml
QGCMenuSeparator 1.0 QGCMenuSeparator.qml
QGCMouseArea 1.0 QGCMouseArea.qml
QGCMovableItem 1.0 QGCMovableItem.qml
QGCOptionsComboBox 1.0 QGCOptionsComboBox.qml
QGCPipOverlay 1.0 QGCPipOverlay.qml
QGCPipState 1.0 QGCPipState.qml
QGCPopupDialog 1.0 QGCPopupDialog.qml
QGCPopupDialogContainer 1.0 QGCPopupDialogContainer.qml
QGCRadioButton 1.0 QGCRadioButton.qml
QGCSlider 1.0 QGCSlider.qml
QGCSwitch 1.0 QGCSwitch.qml
QGCTabBar 1.0 QGCTabBar.qml
QGCTabButton 1.0 QGCTabButton.qml
QGCTextField 1.0 QGCTextField.qml
QGCToolBarButton 1.0 QGCToolBarButton.qml
QGCToolInsets 1.0 QGCToolInsets.qml
QGCViewDialog 1.0 QGCViewDialog.qml
QGCViewDialogContainer 1.0 QGCViewDialogContainer.qml
QGCViewMessage 1.0 QGCViewMessage.qml
RallyPointEditorHeader 1.0 RallyPointEditorHeader.qml
RallyPointItemEditor 1.0 RallyPointItemEditor.qml
RallyPointMapVisuals 1.0 RallyPointMapVisuals.qml
RCChannelMonitor 1.0 RCChannelMonitor.qml
RCToParamDialog 1.0 RCToParamDialog.qml
RoundButton 1.0 RoundButton.qml
SectionHeader 1.0 SectionHeader.qml
SetupPage 1.0 SetupPage.qml
SignalStrength 1.0 SignalStrength.qml
SimpleItemMapVisuals 1.0 SimpleItemMapVisuals.qml
SliderSwitch 1.0 SliderSwitch.qml
SubMenuButton 1.0 SubMenuButton.qml
SurveyMapVisuals 1.0 SurveyMapVisuals.qml
TerrainStatus 1.0 TerrainStatus.qml
TransectStyleComplexItemStats 1.0 TransectStyleComplexItemStats.qml
TransectStyleMapVisuals 1.0 TransectStyleMapVisuals.qml
ToolBarBase 1.0 ToolBarBase.qml
ToolStrip 1.0 ToolStrip.qml
VehicleRotationCal 1.0 VehicleRotationCal.qml
VehicleSummaryRow 1.0 VehicleSummaryRow.qml
VerticalFactValueGrid 1.0 VerticalFactValueGrid.qml
ViewWidget 1.0 ViewWidget.qml
QGCHoverButton 1.0 QGCHoverButton.qml
MAVLinkChart 1.0 MAVLinkChart.qml
/****************************************************************************
*
* (c) 2009-2020 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
*
* QGroundControl is licensed according to the terms in the file
* COPYING.md in the root of the source code directory.
*
****************************************************************************/
#include "VerticalFactValueGrid.h"
#include "InstrumentValueData.h"
#include "QGCApplication.h"
#include "QGCCorePlugin.h"
#include <QSettings>
const QString VerticalFactValueGrid::_valuePageUserSettingsGroup ("ValuePageUserSettings2");
const QString VerticalFactValueGrid::valuePageDefaultSettingsGroup("ValuePageDefaultSettings2");
VerticalFactValueGrid::VerticalFactValueGrid(QQuickItem* parent)
: FactValueGrid(parent)
{
_orientation = VerticalOrientation;
}
VerticalFactValueGrid::VerticalFactValueGrid(const QString& defaultSettingsGroup)
: FactValueGrid(defaultSettingsGroup)
{
_orientation = VerticalOrientation;
}
/****************************************************************************
*
* (c) 2009-2020 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
*
* QGroundControl is licensed according to the terms in the file
* COPYING.md in the root of the source code directory.
*
****************************************************************************/
#pragma once
#include "FactSystem.h"
#include "QmlObjectListModel.h"
#include "QGCApplication.h"
#include "FactValueGrid.h"
class InstrumentValueData;
class VerticalFactValueGrid : public FactValueGrid
{
Q_OBJECT
public:
VerticalFactValueGrid(QQuickItem *parent = nullptr);
VerticalFactValueGrid(const QString& defaultSettingsGroup);
Q_PROPERTY(QString valuePageDefaultSettingsGroup MEMBER valuePageDefaultSettingsGroup CONSTANT)
Q_PROPERTY(QString valuePageUserSettingsGroup MEMBER _valuePageUserSettingsGroup CONSTANT)
static const QString valuePageDefaultSettingsGroup;
private:
Q_DISABLE_COPY(VerticalFactValueGrid)
static const QString _valuePageUserSettingsGroup;
};
QML_DECLARE_TYPE(VerticalFactValueGrid)
/****************************************************************************
*
* (c) 2009-2020 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
*
* QGroundControl is licensed according to the terms in the file
* COPYING.md in the root of the source code directory.
*
****************************************************************************/
import QtQuick 2.12
import QtQuick.Layouts 1.2
import QtQuick.Controls 2.5
import QtQml 2.12
import QGroundControl.Templates 1.0 as T
import QGroundControl.Controls 1.0
import QGroundControl.ScreenTools 1.0
import QGroundControl.Controllers 1.0
import QGroundControl.Palette 1.0
import QGroundControl.FlightMap 1.0
import QGroundControl 1.0
// Note: This control will spit out qWarnings like this: "QGridLayoutEngine::addItem: Cell (0, 1) already taken"
// This is due to Qt bug https://bugreports.qt.io/browse/QTBUG-65121
// If this becomes a problem I'll implement our own grid layout control
T.VerticalFactValueGrid {
id: _root
height: childrenRect.height
property bool settingsUnlocked: false
QGCPalette { id: qgcPal; colorGroupEnabled: enabled }
RowLayout {
id: topLevelRowLayout
width: parent.width
ColumnLayout {
Layout.fillWidth: true
GridLayout {
id: valueGrid
Layout.preferredWidth: _root.width
rows: _root.rows.count * 2
rowSpacing: 0
Repeater {
model: _root.rows
Repeater {
id: labelRepeater
model: object
property real _index: index
InstrumentValueLabel {
Layout.row: labelRepeater._index * 2
Layout.column: index
Layout.fillWidth: true
Layout.alignment: Qt.AlignHCenter
instrumentValueData: object
}
}
}
Repeater {
model: _root.rows
Repeater {
id: valueRepeater
model: object
property real _index: index
InstrumentValueValue {
Layout.row: valueRepeater._index * 2 + 1
Layout.column: index
Layout.fillWidth: true
Layout.alignment: Qt.AlignHCenter
instrumentValueData: object
}
}
}
}
RowLayout {
id: rowButtons
height: ScreenTools.minTouchPixels / 2
Layout.fillWidth: true
spacing: 1
visible: settingsUnlocked
QGCButton {
Layout.fillWidth: true
Layout.preferredHeight: parent.height
text: qsTr("+")
onClicked: appendRow()
}
QGCButton {
Layout.fillWidth: true
Layout.preferredHeight: parent.height
text: qsTr("-")
enabled: _root.rows.count > 1
onClicked: deleteLastRow()
}
}
}
ColumnLayout {
Layout.fillHeight: true
Layout.bottomMargin: rowButtons.height
width: ScreenTools.minTouchPixels / 2
spacing: 1
visible: settingsUnlocked
QGCButton {
Layout.fillHeight: true
Layout.preferredHeight: ScreenTools.minTouchPixels
Layout.preferredWidth: parent.width
text: qsTr("+")
onClicked: appendColumn()
}
QGCButton {
Layout.fillHeight: true
Layout.preferredHeight: ScreenTools.minTouchPixels
Layout.preferredWidth: parent.width
text: qsTr("-")
enabled: _root.columnCount > 1
onClicked: deleteLastColumn()
}
}
}
QGCMouseArea {
x: valueGrid.x
y: valueGrid.y
width: valueGrid.width
height: valueGrid.height
visible: settingsUnlocked
onClicked: {
var item = valueGrid.childAt(mouse.x, mouse.y)
//console.log(item, item ? item.instrumentValueData : "null", item && item.parent ? item.parent.instrumentValueData : "null")
if (item && item.instrumentValueData !== undefined) {
mainWindow.showPopupDialog(valueEditDialog, { instrumentValueData: item.instrumentValueData })
}
}
/*Rectangle {
anchors.fill: parent
border.color: "green"
border.width: 1
color: "transparent"
}*/
}
Component {
id: valueEditDialog
InstrumentValueEditDialog { }
}
}
......@@ -22,7 +22,8 @@
#endif
#include "QGCLoggingCategory.h"
#include "QGCCameraManager.h"
#include "InstrumentValueArea.h"
#include "HorizontalFactValueGrid.h"
#include "VerticalFactValueGrid.h"
#include "InstrumentValueData.h"
#include <QtQml>
......@@ -220,55 +221,55 @@ QVariantList &QGCCorePlugin::settingsPages()
{
if(!_p->pGeneral) {
_p->pGeneral = new QmlComponentInfo(tr("General"),
QUrl::fromUserInput("qrc:/qml/GeneralSettings.qml"),
QUrl::fromUserInput("qrc:/res/gear-white.svg"));
QUrl::fromUserInput("qrc:/qml/GeneralSettings.qml"),
QUrl::fromUserInput("qrc:/res/gear-white.svg"));
_p->settingsList.append(QVariant::fromValue(reinterpret_cast<QmlComponentInfo*>(_p->pGeneral)));
_p->pCommLinks = new QmlComponentInfo(tr("Comm Links"),
QUrl::fromUserInput("qrc:/qml/LinkSettings.qml"),
QUrl::fromUserInput("qrc:/res/waves.svg"));
QUrl::fromUserInput("qrc:/qml/LinkSettings.qml"),
QUrl::fromUserInput("qrc:/res/waves.svg"));
_p->settingsList.append(QVariant::fromValue(reinterpret_cast<QmlComponentInfo*>(_p->pCommLinks)));
_p->pOfflineMaps = new QmlComponentInfo(tr("Offline Maps"),
QUrl::fromUserInput("qrc:/qml/OfflineMap.qml"),
QUrl::fromUserInput("qrc:/res/waves.svg"));
QUrl::fromUserInput("qrc:/qml/OfflineMap.qml"),
QUrl::fromUserInput("qrc:/res/waves.svg"));
_p->settingsList.append(QVariant::fromValue(reinterpret_cast<QmlComponentInfo*>(_p->pOfflineMaps)));
#if defined(QGC_GST_TAISYNC_ENABLED)
_p->pTaisync = new QmlComponentInfo(tr("Taisync"),
QUrl::fromUserInput("qrc:/qml/TaisyncSettings.qml"),
QUrl::fromUserInput(""));
QUrl::fromUserInput("qrc:/qml/TaisyncSettings.qml"),
QUrl::fromUserInput(""));
_p->settingsList.append(QVariant::fromValue(reinterpret_cast<QmlComponentInfo*>(_p->pTaisync)));
#endif
#if defined(QGC_GST_MICROHARD_ENABLED)
_p->pMicrohard = new QmlComponentInfo(tr("Microhard"),
QUrl::fromUserInput("qrc:/qml/MicrohardSettings.qml"),
QUrl::fromUserInput(""));
QUrl::fromUserInput("qrc:/qml/MicrohardSettings.qml"),
QUrl::fromUserInput(""));
_p->settingsList.append(QVariant::fromValue(reinterpret_cast<QmlComponentInfo*>(_p->pMicrohard)));
#endif
#if defined(QGC_AIRMAP_ENABLED)
_p->pAirmap = new QmlComponentInfo(tr("AirMap"),
QUrl::fromUserInput("qrc:/qml/AirmapSettings.qml"),
QUrl::fromUserInput(""));
QUrl::fromUserInput("qrc:/qml/AirmapSettings.qml"),
QUrl::fromUserInput(""));
_p->settingsList.append(QVariant::fromValue(reinterpret_cast<QmlComponentInfo*>(_p->pAirmap)));
#endif
_p->pMAVLink = new QmlComponentInfo(tr("MAVLink"),
QUrl::fromUserInput("qrc:/qml/MavlinkSettings.qml"),
QUrl::fromUserInput("qrc:/res/waves.svg"));
QUrl::fromUserInput("qrc:/qml/MavlinkSettings.qml"),
QUrl::fromUserInput("qrc:/res/waves.svg"));
_p->settingsList.append(QVariant::fromValue(reinterpret_cast<QmlComponentInfo*>(_p->pMAVLink)));
_p->pConsole = new QmlComponentInfo(tr("Console"),
QUrl::fromUserInput("qrc:/qml/QGroundControl/Controls/AppMessages.qml"));
QUrl::fromUserInput("qrc:/qml/QGroundControl/Controls/AppMessages.qml"));
_p->settingsList.append(QVariant::fromValue(reinterpret_cast<QmlComponentInfo*>(_p->pConsole)));
_p->pHelp = new QmlComponentInfo(tr("Help"),
QUrl::fromUserInput("qrc:/qml/HelpSettings.qml"));
QUrl::fromUserInput("qrc:/qml/HelpSettings.qml"));
_p->settingsList.append(QVariant::fromValue(reinterpret_cast<QmlComponentInfo*>(_p->pHelp)));
#if defined(QT_DEBUG)
//-- These are always present on Debug builds
_p->pMockLink = new QmlComponentInfo(tr("Mock Link"),
QUrl::fromUserInput("qrc:/qml/MockLink.qml"));
QUrl::fromUserInput("qrc:/qml/MockLink.qml"));
_p->settingsList.append(QVariant::fromValue(reinterpret_cast<QmlComponentInfo*>(_p->pMockLink)));
_p->pDebug = new QmlComponentInfo(tr("Debug"),
QUrl::fromUserInput("qrc:/qml/DebugWindow.qml"));
QUrl::fromUserInput("qrc:/qml/DebugWindow.qml"));
_p->settingsList.append(QVariant::fromValue(reinterpret_cast<QmlComponentInfo*>(_p->pDebug)));
_p->pQmlTest = new QmlComponentInfo(tr("Palette Test"),
QUrl::fromUserInput("qrc:/qml/QmlTest.qml"));
QUrl::fromUserInput("qrc:/qml/QmlTest.qml"));
_p->settingsList.append(QVariant::fromValue(reinterpret_cast<QmlComponentInfo*>(_p->pQmlTest)));
#endif
}
......@@ -361,7 +362,7 @@ bool QGCCorePlugin::adjustSettingMetaData(const QString& settingsGroup, FactMeta
#endif
metaData.setRawDefaultValue(outdoorPalette);
return true;
//-- Auto Save Telemetry Logs
//-- Auto Save Telemetry Logs
} else if (metaData.name() == AppSettings::telemetrySaveName) {
#if defined (__mobile__)
metaData.setRawDefaultValue(false);
......@@ -397,10 +398,9 @@ void QGCCorePlugin::setShowAdvancedUI(bool show)
}
}
void QGCCorePlugin::paletteOverride(QString colorName, QGCPalette::PaletteColorInfo_t& colorInfo)
void QGCCorePlugin::paletteOverride(QString /*colorName*/, QGCPalette::PaletteColorInfo_t& /*colorInfo*/)
{
Q_UNUSED(colorName);
Q_UNUSED(colorInfo);
}
QString QGCCorePlugin::showAdvancedUIMessage() const
......@@ -411,30 +411,47 @@ QString QGCCorePlugin::showAdvancedUIMessage() const
"Are you sure you want to enable Advanced Mode?");
}
void QGCCorePlugin::instrumentValueAreaCreateDefaultSettings(const QString& defaultSettingsGroup)
void QGCCorePlugin::factValueGridCreateDefaultSettings(const QString& defaultSettingsGroup)
{
if (defaultSettingsGroup == InstrumentValueArea::valuePageDefaultSettingsGroup) {
InstrumentValueArea instrumentValueArea(defaultSettingsGroup);
if (defaultSettingsGroup == VerticalFactValueGrid::valuePageDefaultSettingsGroup) {
VerticalFactValueGrid factValueGrid(defaultSettingsGroup);
factValueGrid.setFontSize(FactValueGrid::LargeFontSize);
QmlObjectListModel* row = factValueGrid.appendRow();
InstrumentValueData* value = row->value<InstrumentValueData*>(0);
value->setFact("Vehicle", "DistanceToHome");
value->setText(value->fact()->shortDescription());
value->setShowUnits(true);
row = factValueGrid.appendRow();
value = row->value<InstrumentValueData*>(0);
value->setFact("Vehicle", "FlightDistance");
value->setText(value->fact()->shortDescription());
value->setShowUnits(true);
instrumentValueArea.setFontSize(InstrumentValueArea::LargeFontSize);
row = factValueGrid.appendRow();
value = row->value<InstrumentValueData*>(0);
value->setFact("Vehicle", "FlightTime");
value->setText(value->fact()->shortDescription());
value->setShowUnits(false);
} else if (defaultSettingsGroup == HorizontalFactValueGrid::toolbarDefaultSettingsGroup) {
HorizontalFactValueGrid factValueGrid(defaultSettingsGroup);
QmlObjectListModel* columnModel = instrumentValueArea.appendRow();
InstrumentValueData* colValue = columnModel->value<InstrumentValueData*>(0);
colValue->setFact("Vehicle", "AltitudeRelative");
colValue->setText(colValue->fact()->shortDescription());
colValue->setShowUnits(true);
factValueGrid.setFontSize(FactValueGrid::LargeFontSize);
columnModel = instrumentValueArea.appendRow();
colValue = columnModel->value<InstrumentValueData*>(0);
colValue->setFact("Vehicle", "GroundSpeed");
colValue->setText(colValue->fact()->shortDescription());
colValue->setShowUnits(true);
QmlObjectListModel* row = factValueGrid.appendRow();
InstrumentValueData* value = row->value<InstrumentValueData*>(0);
value->setFact("Vehicle", "AltitudeRelative");
value->setIcon("arrow-thick-up.svg");
value->setText(value->fact()->shortDescription());
value->setShowUnits(true);
columnModel = instrumentValueArea.appendRow();
colValue = columnModel->value<InstrumentValueData*>(0);
colValue->setFact("Vehicle", "FlightTime");
colValue->setText(colValue->fact()->shortDescription());
colValue->setShowUnits(false);
row = factValueGrid.appendRow();
value = row->value<InstrumentValueData*>(0);
value->setFact("Vehicle", "GroundSpeed");
value->setIcon("arrow-thick-right.svg");
value->setShowUnits(true);
}
}
......@@ -526,8 +543,8 @@ const QVariantList &QGCCorePlugin::toolBarIndicators(void)
//-- Default list of indicators for all vehicles.
if(_toolBarIndicatorList.size() == 0) {
_toolBarIndicatorList = QVariantList({
QVariant::fromValue(QUrl::fromUserInput("qrc:/toolbar/GPSRTKIndicator.qml")),
});
QVariant::fromValue(QUrl::fromUserInput("qrc:/toolbar/GPSRTKIndicator.qml")),
});
}
return _toolBarIndicatorList;
}
......@@ -108,7 +108,7 @@ public:
/// Allows a plugin to override the specified color name from the palette
virtual void paletteOverride(QString colorName, QGCPalette::PaletteColorInfo_t& colorInfo);
virtual void instrumentValueAreaCreateDefaultSettings(const QString& defaultSettingsGroup);
virtual void factValueGridCreateDefaultSettings(const QString& defaultSettingsGroup);
/// Allows the plugin to override or get access to the QmlApplicationEngine to do things like add import
/// path or stuff things into the context prior to window creation.
......
......@@ -7,7 +7,6 @@
*
****************************************************************************/
import QtQuick 2.11
import QtQuick.Controls 2.4
import QtQuick.Dialogs 1.3
......
......@@ -209,15 +209,31 @@ Item {
id: toolsFlickable
anchors.leftMargin: ScreenTools.defaultFontPixelHeight / 2
anchors.left: separator.right
anchors.right: connectionStatus.visible ? connectionStatus.left : parent.right
anchors.bottomMargin: 1
anchors.top: parent.top
anchors.bottom: parent.bottom
contentWidth: indicatorLoader.width
anchors.right: connectionStatus.visible ? connectionStatus.left : parent.right
contentWidth: indicatorLoader.x + indicatorLoader.width
flickableDirection: Flickable.HorizontalFlick
clip: !valueArea.settingsUnlocked
HorizontalFactValueGrid {
id: valueArea
anchors.top: parent.top
anchors.bottom: parent.bottom
userSettingsGroup: toolbarUserSettingsGroup
defaultSettingsGroup: toolbarDefaultSettingsGroup
QGCMouseArea {
anchors.fill: parent
visible: !parent.settingsUnlocked
onClicked: parent.settingsUnlocked = true
}
}
Loader {
id: indicatorLoader
anchors.left: valueArea.right
anchors.top: parent.top
anchors.bottom: parent.bottom
source: "qrc:/toolbar/MainToolBarIndicators.qml"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment