ENH: refine display of camera state and add setting
Change-Id: I85f02565e1581fde9a6c161f4fbed0283fda208f
|
@ -5,6 +5,7 @@
|
|||
"func": {
|
||||
"FUNC_LOCAL_TUNNEL": false
|
||||
},
|
||||
"camera_resolution":["720p","1080p"],
|
||||
"model_id": "BL-P002",
|
||||
"printer_type": "3DPrinter-X1"
|
||||
},
|
||||
|
@ -14,6 +15,7 @@
|
|||
"FUNC_LOCAL_TUNNEL": false
|
||||
},
|
||||
"model_id": "BL-P001",
|
||||
"camera_resolution":["720p","1080p"],
|
||||
"printer_type": "3DPrinter-X1-Carbon"
|
||||
}
|
||||
]
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
<svg width="21" height="20" viewBox="0 0 21 20" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M13.5699 18.8136C13.2001 18.8136 12.8521 18.6677 12.6159 18.4154C12.2586 18.0323 11.3947 17.3057 10.6987 17.3057C10.3786 17.3057 9.94978 17.4821 9.4961 17.8013C9.12011 18.0658 8.84666 18.3394 8.79383 18.3941C8.567 18.6343 8.19722 18.7832 7.83055 18.7832C7.67518 18.7832 7.52292 18.7559 7.39241 18.7042L7.36444 18.692L7.29608 18.6586L4.95 17.3635L4.89407 17.3179C4.50254 16.9835 4.36892 16.412 4.5709 15.9559C4.67345 15.7188 4.7791 15.3631 4.7791 15.0682C4.7791 13.7944 3.72259 12.7577 2.4206 12.7577H2.24969L2.17511 12.7425C1.81466 12.6665 1.52878 12.3169 1.42934 11.8275L1.42623 11.8184C1.40759 11.7119 1.23047 10.7513 1.23047 9.98821C1.23047 9.28594 1.37962 8.41647 1.42623 8.16718V8.1611C1.50392 7.75373 1.71833 7.42843 1.99488 7.29163L2.14404 7.21867H2.35845C3.01721 7.21867 3.63247 6.9785 4.08304 6.54376C4.53051 6.11207 4.77599 5.53141 4.77599 4.90211C4.77599 4.55857 4.63305 4.16336 4.57712 4.03871C4.35339 3.54318 4.50254 2.94732 4.93447 2.61898L4.96865 2.59466L5.04012 2.5521L7.51981 1.22053L7.58506 1.19925C7.70004 1.16277 7.82744 1.14453 7.95795 1.14453C8.32462 1.14453 8.68197 1.28742 8.91502 1.52758C9.19779 1.8164 10.0834 2.5673 10.7888 2.5673C11.4879 2.5673 12.386 1.81336 12.6439 1.54887L12.6501 1.54279C12.88 1.31174 13.2467 1.16885 13.6072 1.16885C13.7656 1.16885 13.9148 1.19621 14.0484 1.24789L14.0764 1.25702L14.1354 1.28742L16.525 2.59466L16.5809 2.6433C16.9818 2.98988 17.1185 3.5523 16.9134 4.01439C16.8171 4.23632 16.7052 4.59809 16.7052 4.89906C16.7052 6.17287 17.7617 7.20955 19.0637 7.20955C19.4118 7.20955 19.7163 7.39195 19.8965 7.70812C19.968 7.83277 20.0208 7.97565 20.0519 8.14286L20.055 8.15198C20.1513 8.66272 20.2539 9.41059 20.2539 9.97909C20.2601 10.5537 20.1575 11.2985 20.0612 11.8092C19.9524 12.3838 19.5827 12.7547 19.1134 12.7547C17.7648 12.7547 16.7114 13.7701 16.7114 15.0652C16.7114 15.354 16.814 15.7006 16.9103 15.9347C17.1403 16.4515 16.9662 17.0717 16.5064 17.3818L16.4691 17.4061L16.4318 17.4243L14.0049 18.7346L13.9397 18.7559C13.8247 18.7954 13.7004 18.8136 13.5699 18.8136Z" fill="#00AE42" fill-opacity="0.1" stroke="#00AE42" stroke-width="1.2" stroke-miterlimit="10"/>
|
||||
<path d="M10.7446 12.9742C9.05725 12.9742 7.68378 11.6335 7.68378 9.98272C7.68378 8.33194 9.05725 6.99125 10.7446 6.99125C12.4319 6.99125 13.8022 8.33194 13.8022 9.98272C13.8022 11.6305 12.4319 12.9742 10.7446 12.9742Z" fill="#00AE42" fill-opacity="0.1" stroke="#00AE42" stroke-width="1.2" stroke-miterlimit="10"/>
|
||||
</svg>
|
After Width: | Height: | Size: 2.5 KiB |
|
@ -0,0 +1,4 @@
|
|||
<svg width="22" height="20" viewBox="0 0 22 20" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M13.5699 18.8136C13.2001 18.8136 12.8521 18.6677 12.6159 18.4154C12.2586 18.0323 11.3947 17.3057 10.6987 17.3057C10.3786 17.3057 9.94978 17.4821 9.4961 17.8013C9.12011 18.0658 8.84666 18.3394 8.79383 18.3941C8.567 18.6343 8.19722 18.7832 7.83055 18.7832C7.67518 18.7832 7.52292 18.7559 7.39241 18.7042L7.36444 18.692L7.29608 18.6586L4.95 17.3635L4.89407 17.3179C4.50254 16.9835 4.36892 16.412 4.5709 15.9559C4.67345 15.7188 4.7791 15.3631 4.7791 15.0682C4.7791 13.7944 3.72259 12.7577 2.4206 12.7577H2.24969L2.17511 12.7425C1.81466 12.6665 1.52878 12.3169 1.42934 11.8275L1.42623 11.8184C1.40759 11.7119 1.23047 10.7513 1.23047 9.98821C1.23047 9.28594 1.37962 8.41647 1.42623 8.16718V8.1611C1.50392 7.75373 1.71833 7.42843 1.99488 7.29163L2.14404 7.21867H2.35845C3.01721 7.21867 3.63247 6.9785 4.08304 6.54376C4.53051 6.11207 4.77599 5.53141 4.77599 4.90211C4.77599 4.55857 4.63305 4.16336 4.57712 4.03871C4.35339 3.54318 4.50254 2.94732 4.93447 2.61898L4.96865 2.59466L5.04012 2.5521L7.51981 1.22053L7.58506 1.19925C7.70004 1.16277 7.82744 1.14453 7.95795 1.14453C8.32462 1.14453 8.68197 1.28742 8.91502 1.52758C9.19779 1.8164 10.0834 2.5673 10.7888 2.5673C11.4879 2.5673 12.386 1.81336 12.6439 1.54887L12.6501 1.54279C12.88 1.31174 13.2467 1.16885 13.6072 1.16885C13.7656 1.16885 13.9148 1.19621 14.0484 1.24789L14.0764 1.25702L14.1354 1.28742L16.525 2.59466L16.5809 2.6433C16.9818 2.98988 17.1185 3.5523 16.9134 4.01439C16.8171 4.23632 16.7052 4.59809 16.7052 4.89906C16.7052 6.17287 17.7617 7.20955 19.0637 7.20955C19.4118 7.20955 19.7163 7.39195 19.8965 7.70812C19.968 7.83277 20.0208 7.97565 20.0519 8.14286L20.055 8.15198C20.1513 8.66272 20.2539 9.41059 20.2539 9.97909C20.2601 10.5537 20.1575 11.2985 20.0612 11.8092C19.9524 12.3838 19.5827 12.7547 19.1134 12.7547C17.7648 12.7547 16.7114 13.7701 16.7114 15.0652C16.7114 15.354 16.814 15.7006 16.9103 15.9347C17.1403 16.4515 16.9662 17.0717 16.5064 17.3818L16.4691 17.4061L16.4318 17.4243L14.0049 18.7346L13.9397 18.7559C13.8247 18.7954 13.7004 18.8136 13.5699 18.8136Z" fill="#00AE42" fill-opacity="0.1" stroke="#00AE42" stroke-width="1.5" stroke-miterlimit="10"/>
|
||||
<path d="M10.7446 12.9742C9.05725 12.9742 7.68378 11.6335 7.68378 9.98272C7.68378 8.33194 9.05725 6.99125 10.7446 6.99125C12.4319 6.99125 13.8022 8.33194 13.8022 9.98272C13.8022 11.6305 12.4319 12.9742 10.7446 12.9742Z" fill="#00AE42" fill-opacity="0.1" stroke="#00AE42" stroke-width="1.5" stroke-miterlimit="10"/>
|
||||
</svg>
|
After Width: | Height: | Size: 2.5 KiB |
|
@ -0,0 +1,6 @@
|
|||
<svg width="38" height="23" viewBox="0 0 38 23" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M18.9995 2.93047C15.2464 2.93047 12.2039 5.97297 12.2039 9.72609C12.2039 13.4792 15.2464 16.5217 18.9995 16.5217C22.7527 16.5217 25.7952 13.4792 25.7952 9.72609C25.7952 5.97297 22.7527 2.93047 18.9995 2.93047ZM11.0039 9.72609C11.0039 5.31023 14.5837 1.73047 18.9995 1.73047C23.4154 1.73047 26.9952 5.31023 26.9952 9.72609C26.9952 14.142 23.4154 17.7217 18.9995 17.7217C14.5837 17.7217 11.0039 14.142 11.0039 9.72609Z" fill="#6B6B6B"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M18.9976 8.25469C17.3684 8.25469 16.0477 9.5754 16.0477 11.2046C16.0477 12.8338 17.3684 14.1545 18.9976 14.1545C20.6267 14.1545 21.9475 12.8338 21.9475 11.2046C21.9475 9.5754 20.6267 8.25469 18.9976 8.25469ZM14.8477 11.2046C14.8477 8.91266 16.7056 7.05469 18.9976 7.05469C21.2895 7.05469 23.1475 8.91266 23.1475 11.2046C23.1475 13.4965 21.2895 15.3545 18.9976 15.3545C16.7056 15.3545 14.8477 13.4965 14.8477 11.2046Z" fill="#6B6B6B"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M22.248 15.7734L25.0423 20.6132H12.9531L15.7424 15.782L16.2356 16.0007C17.076 16.3733 18.0066 16.5807 18.9873 16.5807C19.9738 16.5807 20.9098 16.3708 21.7542 15.9939L22.248 15.7734ZM21.7402 17.2939C20.8813 17.6089 19.9538 17.7807 18.9873 17.7807C18.0272 17.7807 17.1056 17.6112 16.2515 17.3002L15.0316 19.4132H22.9638L21.7402 17.2939Z" fill="#6B6B6B"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M12.3789 20.0707C12.3789 19.7393 12.6475 19.4707 12.9789 19.4707L24.7419 19.4707C25.0733 19.4707 25.3419 19.7393 25.3419 20.0707C25.3419 20.4021 25.0733 20.6707 24.7419 20.6707L12.9789 20.6707C12.6475 20.6707 12.3789 20.4021 12.3789 20.0707Z" fill="#6B6B6B"/>
|
||||
</svg>
|
After Width: | Height: | Size: 1.7 KiB |
|
@ -1,6 +0,0 @@
|
|||
<svg width="39" height="22" viewBox="0 0 39 22" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<circle cx="19.1378" cy="9.2257" r="7.39563" stroke="#323A3D" stroke-width="1.5"/>
|
||||
<circle cx="19.1358" cy="10.7042" r="3.5499" stroke="#323A3D" stroke-width="1.5"/>
|
||||
<path d="M22.1393 16.041L22.7888 15.666L22.4508 15.0806L21.8335 15.3562L22.1393 16.041ZM16.1328 16.0484L16.4368 15.3628L15.8204 15.0895L15.4833 15.6734L16.1328 16.0484ZM14.1328 19.5125L13.4833 19.1375L12.8338 20.2625H14.1328V19.5125ZM24.1435 19.5125V20.2625H25.4426L24.793 19.1375L24.1435 19.5125ZM21.8335 15.3562C21.008 15.7247 20.0928 15.9299 19.1277 15.9299V17.4299C20.3076 17.4299 21.4307 17.1786 22.445 16.7259L21.8335 15.3562ZM19.1277 15.9299C18.1684 15.9299 17.2585 15.7271 16.4368 15.3628L15.8288 16.734C16.8382 17.1816 17.955 17.4299 19.1277 17.4299V15.9299ZM14.7823 19.8875L16.7823 16.4234L15.4833 15.6734L13.4833 19.1375L14.7823 19.8875ZM24.1435 18.7625H14.1328V20.2625H24.1435V18.7625ZM21.4897 16.416L23.494 19.8875L24.793 19.1375L22.7888 15.666L21.4897 16.416Z" fill="#323A3D"/>
|
||||
<line x1="13.2695" y1="19.4199" x2="24.7325" y2="19.4199" stroke="#323A3D" stroke-width="1.5" stroke-linecap="round"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 1.2 KiB |
|
@ -1,6 +0,0 @@
|
|||
<svg width="39" height="22" viewBox="0 0 39 22" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<circle cx="19.1378" cy="9.2257" r="7.39563" stroke="#323A3D" stroke-width="1.2"/>
|
||||
<circle cx="19.1358" cy="10.7042" r="3.5499" stroke="#323A3D" stroke-width="1.2"/>
|
||||
<path d="M22.1393 16.041L22.6589 15.741L22.3885 15.2727L21.8947 15.4931L22.1393 16.041ZM16.1328 16.0484L16.376 15.4999L15.8829 15.2813L15.6132 15.7484L16.1328 16.0484ZM14.1328 19.5125L13.6132 19.2125L13.0936 20.1125H14.1328V19.5125ZM24.1435 19.5125V20.1125H25.1827L24.6631 19.2125L24.1435 19.5125ZM21.8947 15.4931C21.0502 15.8701 20.1143 16.0799 19.1277 16.0799V17.2799C20.2861 17.2799 21.3885 17.0332 22.3838 16.5889L21.8947 15.4931ZM19.1277 16.0799C18.1471 16.0799 17.2165 15.8726 16.376 15.4999L15.8896 16.5969C16.8802 17.0362 17.9763 17.2799 19.1277 17.2799V16.0799ZM14.6524 19.8125L16.6524 16.3484L15.6132 15.7484L13.6132 19.2125L14.6524 19.8125ZM24.1435 18.9125H14.1328V20.1125H24.1435V18.9125ZM21.6196 16.341L23.6239 19.8125L24.6631 19.2125L22.6589 15.741L21.6196 16.341Z" fill="#323A3D"/>
|
||||
<line x1="13.1195" y1="19.5699" x2="24.8825" y2="19.5699" stroke="#323A3D" stroke-width="1.2" stroke-linecap="round"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 1.2 KiB |
|
@ -1,6 +0,0 @@
|
|||
<svg width="39" height="22" viewBox="0 0 39 22" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<circle cx="19.1378" cy="9.2257" r="7.39563" stroke="#323A3D" stroke-width="1.5"/>
|
||||
<circle cx="19.1358" cy="10.7042" r="3.5499" fill="#FF6F00" stroke="#323A3D" stroke-width="1.5"/>
|
||||
<path d="M22.1393 16.041L22.7888 15.666L22.4508 15.0806L21.8335 15.3562L22.1393 16.041ZM16.1328 16.0484L16.4368 15.3628L15.8204 15.0895L15.4833 15.6734L16.1328 16.0484ZM14.1328 19.5125L13.4833 19.1375L12.8338 20.2625H14.1328V19.5125ZM24.1435 19.5125V20.2625H25.4426L24.793 19.1375L24.1435 19.5125ZM21.8335 15.3562C21.008 15.7247 20.0928 15.9299 19.1277 15.9299V17.4299C20.3076 17.4299 21.4307 17.1786 22.445 16.7259L21.8335 15.3562ZM19.1277 15.9299C18.1684 15.9299 17.2585 15.7271 16.4368 15.3628L15.8288 16.734C16.8382 17.1816 17.955 17.4299 19.1277 17.4299V15.9299ZM14.7823 19.8875L16.7823 16.4234L15.4833 15.6734L13.4833 19.1375L14.7823 19.8875ZM24.1435 18.7625H14.1328V20.2625H24.1435V18.7625ZM21.4897 16.416L23.494 19.8875L24.793 19.1375L22.7888 15.666L21.4897 16.416Z" fill="#323A3D"/>
|
||||
<line x1="13.2695" y1="19.4199" x2="24.7325" y2="19.4199" stroke="#323A3D" stroke-width="1.5" stroke-linecap="round"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 1.2 KiB |
|
@ -1,6 +0,0 @@
|
|||
<svg width="39" height="22" viewBox="0 0 39 22" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<circle cx="19.1378" cy="9.2257" r="7.39563" stroke="#323A3D" stroke-width="1.2"/>
|
||||
<circle cx="19.1358" cy="10.7042" r="3.5499" fill="#FF6F00" stroke="#323A3D" stroke-width="1.2"/>
|
||||
<path d="M22.1393 16.041L22.6589 15.741L22.3885 15.2727L21.8947 15.4931L22.1393 16.041ZM16.1328 16.0484L16.376 15.4999L15.8829 15.2813L15.6132 15.7484L16.1328 16.0484ZM14.1328 19.5125L13.6132 19.2125L13.0936 20.1125H14.1328V19.5125ZM24.1435 19.5125V20.1125H25.1827L24.6631 19.2125L24.1435 19.5125ZM21.8947 15.4931C21.0502 15.8701 20.1143 16.0799 19.1277 16.0799V17.2799C20.2861 17.2799 21.3885 17.0332 22.3838 16.5889L21.8947 15.4931ZM19.1277 16.0799C18.1471 16.0799 17.2165 15.8726 16.376 15.4999L15.8896 16.5969C16.8802 17.0362 17.9763 17.2799 19.1277 17.2799V16.0799ZM14.6524 19.8125L16.6524 16.3484L15.6132 15.7484L13.6132 19.2125L14.6524 19.8125ZM24.1435 18.9125H14.1328V20.1125H24.1435V18.9125ZM21.6196 16.341L23.6239 19.8125L24.6631 19.2125L22.6589 15.741L21.6196 16.341Z" fill="#323A3D"/>
|
||||
<line x1="13.1195" y1="19.5699" x2="24.8825" y2="19.5699" stroke="#323A3D" stroke-width="1.2" stroke-linecap="round"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 1.2 KiB |
|
@ -0,0 +1,9 @@
|
|||
<svg width="38" height="23" viewBox="0 0 38 23" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M28.0596 18.7559L28.0596 5.16619C28.0596 4.72436 27.7014 4.36619 27.2596 4.36619L14.7007 4.36619C14.5011 4.36619 14.3087 4.44081 14.1613 4.5754L10.1989 8.19324C10.0329 8.34481 9.93828 8.55924 9.93828 8.78403L9.93828 18.7559C9.93828 19.1977 10.2965 19.5559 10.7383 19.5559L27.2596 19.5559C27.7014 19.5559 28.0596 19.1977 28.0596 18.7559ZM29.2596 5.16619L29.2596 18.7559C29.2596 19.8604 28.3641 20.7559 27.2596 20.7559L10.7383 20.7559C9.63371 20.7559 8.73828 19.8604 8.73828 18.7559L8.73828 8.78403C8.73828 8.22205 8.97472 7.68599 9.38974 7.30706L13.3521 3.68922C13.7207 3.35275 14.2017 3.16619 14.7007 3.16619L27.2596 3.16619C28.3641 3.16619 29.2596 4.06162 29.2596 5.16619Z" fill="#ACACAC"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M12.1367 15.5374L12.1367 17.502L15.9236 17.502L15.9236 15.5374L12.1367 15.5374ZM11.1367 17.502C11.1367 18.0542 11.5844 18.502 12.1367 18.502L15.9236 18.502C16.4759 18.502 16.9236 18.0542 16.9236 17.502L16.9236 15.5374C16.9236 14.9851 16.4759 14.5374 15.9236 14.5374L12.1367 14.5374C11.5844 14.5374 11.1367 14.9851 11.1367 15.5374L11.1367 17.502Z" fill="#ACACAC"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M19.407 17.302L25.3243 17.302L25.3243 6.62246L19.407 6.62246L19.407 17.302ZM18.207 17.502C18.207 18.0542 18.6547 18.502 19.207 18.502L25.5243 18.502C26.0766 18.502 26.5243 18.0542 26.5243 17.502L26.5243 6.42246C26.5243 5.87017 26.0766 5.42246 25.5243 5.42246L19.207 5.42246C18.6547 5.42246 18.207 5.87017 18.207 6.42246L18.207 17.502Z" fill="#ACACAC"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M12.1367 10.9818L12.1367 12.9902L15.9236 12.9902L15.9236 10.9818L12.1367 10.9818ZM11.1367 12.9902C11.1367 13.5425 11.5844 13.9902 12.1367 13.9902L15.9236 13.9902C16.4759 13.9902 16.9236 13.5425 16.9236 12.9902L16.9236 10.9818C16.9236 10.4295 16.4759 9.9818 15.9236 9.9818L12.1367 9.9818C11.5844 9.9818 11.1367 10.4295 11.1367 10.9818L11.1367 12.9902Z" fill="#ACACAC"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M14.4883 6.51181L14.4883 8.33789L15.9257 8.33789L15.9257 6.51181L14.4883 6.51181ZM13.4883 8.33789C13.4883 8.89018 13.936 9.33789 14.4883 9.33789L15.9257 9.33789C16.478 9.33789 16.9257 8.89018 16.9257 8.33789L16.9257 6.51181C16.9257 5.95953 16.478 5.51181 15.9257 5.51181L14.4883 5.51181C13.936 5.51181 13.4883 5.95953 13.4883 6.51181L13.4883 8.33789Z" fill="#ACACAC"/>
|
||||
<path d="M24.0938 17.9609C24.0938 15.7518 25.8846 13.9609 28.0938 13.9609V13.9609C30.3029 13.9609 32.0938 15.7518 32.0938 17.9609V17.9609C32.0938 20.1701 30.3029 21.9609 28.0938 21.9609V21.9609C25.8846 21.9609 24.0938 20.1701 24.0938 17.9609V17.9609Z" fill="#FF6F00"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M30.9491 17.9627C30.9492 18.2389 30.7254 18.4628 30.4493 18.4629L25.7385 18.4643C25.4623 18.4644 25.2384 18.2406 25.2383 17.9644C25.2382 17.6883 25.462 17.4644 25.7382 17.4643L30.449 17.4629C30.7251 17.4628 30.9491 17.6866 30.9491 17.9627Z" fill="white"/>
|
||||
</svg>
|
After Width: | Height: | Size: 3.0 KiB |
|
@ -1,10 +0,0 @@
|
|||
<svg width="39" height="22" viewBox="0 0 39 22" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M28.9658 17.7949L28.9658 4.20525C28.9658 3.76343 28.6076 3.40526 28.1658 3.40526L15.6069 3.40526C15.4073 3.40526 15.2149 3.47988 15.0675 3.61447L11.1051 7.23231C10.9391 7.38388 10.8445 7.5983 10.8445 7.82309L10.8445 17.7949C10.8445 18.2368 11.2027 18.5949 11.6445 18.5949L28.1658 18.5949C28.6076 18.5949 28.9658 18.2367 28.9658 17.7949ZM30.1658 4.20525L30.1658 17.7949C30.1658 18.8995 29.2704 19.7949 28.1658 19.7949L11.6445 19.7949C10.54 19.7949 9.64453 18.8995 9.64453 17.7949L9.64453 7.82309C9.64453 7.26111 9.88097 6.72505 10.296 6.34612L14.2584 2.72828C14.6269 2.39181 15.1079 2.20526 15.6069 2.20526L28.1658 2.20525C29.2704 2.20525 30.1658 3.10069 30.1658 4.20525Z" fill="#CECECE"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M13.043 14.5765L13.043 16.541L16.8299 16.541L16.8299 14.5765L13.043 14.5765ZM12.043 16.541C12.043 17.0933 12.4907 17.541 13.043 17.541L16.8299 17.541C17.3821 17.541 17.8299 17.0933 17.8299 16.541L17.8299 14.5765C17.8299 14.0242 17.3821 13.5765 16.8299 13.5765L13.043 13.5765C12.4907 13.5765 12.043 14.0242 12.043 14.5765L12.043 16.541Z" fill="#CECECE"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M20.3133 16.341L26.2305 16.341L26.2305 5.66152L20.3133 5.66152L20.3133 16.341ZM19.1133 16.541C19.1133 17.0933 19.561 17.541 20.1133 17.541L26.4305 17.541C26.9828 17.541 27.4305 17.0933 27.4305 16.541L27.4305 5.46152C27.4305 4.90923 26.9828 4.46152 26.4305 4.46152L20.1133 4.46152C19.561 4.46152 19.1133 4.90924 19.1133 5.46152L19.1133 16.541Z" fill="#CECECE"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M13.043 10.0209L13.043 12.0293L16.8299 12.0293L16.8299 10.0209L13.043 10.0209ZM12.043 12.0293C12.043 12.5816 12.4907 13.0293 13.043 13.0293L16.8299 13.0293C17.3821 13.0293 17.8299 12.5816 17.8299 12.0293L17.8299 10.0209C17.8299 9.46858 17.3821 9.02086 16.8299 9.02086L13.043 9.02086C12.4907 9.02086 12.043 9.46858 12.043 10.0209L12.043 12.0293Z" fill="#CECECE"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M15.3945 5.55088L15.3945 7.37695L16.8319 7.37695L16.8319 5.55088L15.3945 5.55088ZM14.3945 7.37695C14.3945 7.92924 14.8422 8.37695 15.3945 8.37695L16.8319 8.37695C17.3842 8.37695 17.8319 7.92924 17.8319 7.37695L17.8319 5.55088C17.8319 4.99859 17.3842 4.55088 16.8319 4.55088L15.3945 4.55088C14.8422 4.55088 14.3945 4.99859 14.3945 5.55088L14.3945 7.37695Z" fill="#CECECE"/>
|
||||
<path d="M25 17C25 14.7909 26.7909 13 29 13C31.2091 13 33 14.7909 33 17C33 19.2091 31.2091 21 29 21C26.7909 21 25 19.2091 25 17Z" fill="#323A3D"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M26.9823 14.9825C27.1775 14.7872 27.4941 14.7871 27.6894 14.9823L31.0214 18.3124C31.2167 18.5076 31.2168 18.8241 31.0216 19.0195C30.8264 19.2148 30.5098 19.2149 30.3145 19.0197L26.9825 15.6896C26.7872 15.4944 26.7871 15.1778 26.9823 14.9825Z" fill="white"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M31.0175 14.9823C31.2128 15.1775 31.2129 15.4941 31.0177 15.6894L27.6876 19.0214C27.4924 19.2167 27.1759 19.2168 26.9805 19.0216C26.7852 18.8264 26.7851 18.5098 26.9803 18.3145L30.3104 14.9825C30.5056 14.7872 30.8222 14.7871 31.0175 14.9823Z" fill="white"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 3.2 KiB |
|
@ -1,7 +1,7 @@
|
|||
<svg width="39" height="23" viewBox="0 0 39 23" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M28.9658 17.834L28.9658 4.24432C28.9658 3.80249 28.6076 3.44432 28.1658 3.44432L15.6069 3.44432C15.4073 3.44432 15.2149 3.51894 15.0675 3.65353L11.1051 7.27137C10.9391 7.42294 10.8445 7.63736 10.8445 7.86216L10.8445 17.834C10.8445 18.2758 11.2027 18.634 11.6445 18.634L28.1658 18.634C28.6076 18.634 28.9658 18.2758 28.9658 17.834ZM30.1658 4.24432L30.1658 17.834C30.1658 18.9386 29.2704 19.834 28.1658 19.834L11.6445 19.834C10.54 19.834 9.64453 18.9386 9.64453 17.834L9.64453 7.86216C9.64453 7.30017 9.88097 6.76412 10.296 6.38519L14.2584 2.76735C14.6269 2.43087 15.1079 2.24432 15.6069 2.24432L28.1658 2.24432C29.2704 2.24432 30.1658 3.13975 30.1658 4.24432Z" fill="#323A3D"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M13.043 14.6155L13.043 16.5801L16.8299 16.5801L16.8299 14.6156L13.043 14.6155ZM12.043 16.5801C12.043 17.1324 12.4907 17.5801 13.043 17.5801L16.8299 17.5801C17.3821 17.5801 17.8299 17.1324 17.8299 16.5801L17.8299 14.6156C17.8299 14.0633 17.3821 13.6156 16.8299 13.6156L13.043 13.6156C12.4907 13.6156 12.043 14.0633 12.043 14.6155L12.043 16.5801Z" fill="#323A3D"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M20.3133 16.3801L26.2305 16.3801L26.2305 5.70058L20.3133 5.70058L20.3133 16.3801ZM19.1133 16.5801C19.1133 17.1324 19.561 17.5801 20.1133 17.5801L26.4305 17.5801C26.9828 17.5801 27.4305 17.1324 27.4305 16.5801L27.4305 5.50058C27.4305 4.9483 26.9828 4.50058 26.4305 4.50058L20.1133 4.50058C19.561 4.50058 19.1133 4.9483 19.1133 5.50058L19.1133 16.5801Z" fill="#323A3D"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M13.043 10.0599L13.043 12.0684L16.8299 12.0684L16.8299 10.0599L13.043 10.0599ZM12.043 12.0684C12.043 12.6206 12.4907 13.0684 13.043 13.0684L16.8299 13.0684C17.3821 13.0684 17.8299 12.6206 17.8299 12.0684L17.8299 10.0599C17.8299 9.50764 17.3821 9.05993 16.8299 9.05993L13.043 9.05993C12.4907 9.05993 12.043 9.50764 12.043 10.0599L12.043 12.0684Z" fill="#323A3D"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M15.3945 5.58994L15.3945 7.41602L16.8319 7.41602L16.8319 5.58994L15.3945 5.58994ZM14.3945 7.41602C14.3945 7.9683 14.8422 8.41602 15.3945 8.41602L16.8319 8.41602C17.3842 8.41602 17.8319 7.9683 17.8319 7.41602L17.8319 5.58994C17.8319 5.03765 17.3842 4.58994 16.8319 4.58994L15.3945 4.58994C14.8422 4.58994 14.3945 5.03765 14.3945 5.58994L14.3945 7.41602Z" fill="#323A3D"/>
|
||||
<svg width="38" height="22" viewBox="0 0 38 22" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M28.0596 17.7949L28.0596 4.20525C28.0596 3.76343 27.7014 3.40526 27.2596 3.40526L14.7007 3.40526C14.5011 3.40526 14.3087 3.47988 14.1613 3.61447L10.1989 7.23231C10.0329 7.38388 9.93828 7.5983 9.93828 7.82309L9.93828 17.7949C9.93828 18.2368 10.2965 18.5949 10.7383 18.5949L27.2596 18.5949C27.7014 18.5949 28.0596 18.2367 28.0596 17.7949ZM29.2596 4.20525L29.2596 17.7949C29.2596 18.8995 28.3641 19.7949 27.2596 19.7949L10.7383 19.7949C9.63371 19.7949 8.73828 18.8995 8.73828 17.7949L8.73828 7.82309C8.73828 7.26111 8.97472 6.72505 9.38974 6.34612L13.3521 2.72828C13.7207 2.39181 14.2017 2.20526 14.7007 2.20526L27.2596 2.20525C28.3641 2.20525 29.2596 3.10069 29.2596 4.20525Z" fill="#6B6B6B"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M12.1367 14.5765L12.1367 16.541L15.9236 16.541L15.9236 14.5765L12.1367 14.5765ZM11.1367 16.541C11.1367 17.0933 11.5844 17.541 12.1367 17.541L15.9236 17.541C16.4759 17.541 16.9236 17.0933 16.9236 16.541L16.9236 14.5765C16.9236 14.0242 16.4759 13.5765 15.9236 13.5765L12.1367 13.5765C11.5844 13.5765 11.1367 14.0242 11.1367 14.5765L11.1367 16.541Z" fill="#6B6B6B"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M19.407 16.341L25.3243 16.341L25.3243 5.66152L19.407 5.66152L19.407 16.341ZM18.207 16.541C18.207 17.0933 18.6547 17.541 19.207 17.541L25.5243 17.541C26.0766 17.541 26.5243 17.0933 26.5243 16.541L26.5243 5.46152C26.5243 4.90923 26.0766 4.46152 25.5243 4.46152L19.207 4.46152C18.6547 4.46152 18.207 4.90924 18.207 5.46152L18.207 16.541Z" fill="#6B6B6B"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M12.1367 10.0209L12.1367 12.0293L15.9236 12.0293L15.9236 10.0209L12.1367 10.0209ZM11.1367 12.0293C11.1367 12.5816 11.5844 13.0293 12.1367 13.0293L15.9236 13.0293C16.4759 13.0293 16.9236 12.5816 16.9236 12.0293L16.9236 10.0209C16.9236 9.46858 16.4759 9.02086 15.9236 9.02086L12.1367 9.02086C11.5844 9.02086 11.1367 9.46858 11.1367 10.0209L11.1367 12.0293Z" fill="#6B6B6B"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M14.4883 5.55088L14.4883 7.37695L15.9257 7.37695L15.9257 5.55088L14.4883 5.55088ZM13.4883 7.37695C13.4883 7.92924 13.936 8.37695 14.4883 8.37695L15.9257 8.37695C16.478 8.37695 16.9257 7.92924 16.9257 7.37695L16.9257 5.55088C16.9257 4.99859 16.478 4.55088 15.9257 4.55088L14.4883 4.55088C13.936 4.55088 13.4883 4.99859 13.4883 5.55088L13.4883 7.37695Z" fill="#6B6B6B"/>
|
||||
</svg>
|
||||
|
|
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 2.4 KiB |
|
@ -0,0 +1,15 @@
|
|||
<svg width="39" height="23" viewBox="0 0 39 23" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g clip-path="url(#clip0_8660_33052)">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M32.7264 9.17985L29.3767 13.3992L32.7264 17.6193L32.7264 9.17985ZM33.9121 8.62188C33.9121 7.66675 32.7384 7.2271 32.154 7.96329L28.352 12.7523C28.0588 13.1216 28.0616 13.6544 28.3587 14.0287L32.1607 18.8186C32.7496 19.5605 33.9121 19.1504 33.9121 18.2008L33.9121 8.62188Z" fill="#6B6B6B"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M14.9422 7.29766V18.6828H27.0104V7.29766H14.9422ZM14.7422 6.09766C14.1899 6.09766 13.7422 6.54537 13.7422 7.09766V18.8828C13.7422 19.4351 14.1899 19.8828 14.7422 19.8828H27.2104C27.7627 19.8828 28.2104 19.4351 28.2104 18.8828V7.09766C28.2104 6.54537 27.7627 6.09766 27.2104 6.09766H14.7422Z" fill="#6B6B6B"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M18.9113 16.6735C19.9601 16.6735 20.8102 15.8233 20.8102 14.7746C20.8102 13.7259 19.9601 12.8758 18.9113 12.8758C17.8626 12.8758 17.0125 13.7259 17.0125 14.7746C17.0125 15.8233 17.8626 16.6735 18.9113 16.6735ZM18.9113 17.8735C20.6228 17.8735 22.0102 16.4861 22.0102 14.7746C22.0102 13.0632 20.6228 11.6758 18.9113 11.6758C17.1999 11.6758 15.8125 13.0632 15.8125 14.7746C15.8125 16.4861 17.1999 17.8735 18.9113 17.8735Z" fill="#6B6B6B"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M12.0322 2.575C8.20087 2.575 5.09453 5.68134 5.09453 9.51267C5.09453 13.344 8.20087 16.4503 12.0322 16.4503C12.3636 16.4503 12.6322 16.719 12.6322 17.0503C12.6322 17.3817 12.3636 17.6503 12.0322 17.6503C7.53813 17.6503 3.89453 14.0067 3.89453 9.51267C3.89453 5.0186 7.53813 1.375 12.0322 1.375C14.3326 1.375 16.4111 2.33051 17.8905 3.86462C18.1205 4.10316 18.1136 4.48299 17.8751 4.71301C17.6365 4.94303 17.2567 4.93613 17.0267 4.6976C15.764 3.38827 13.9935 2.575 12.0322 2.575Z" fill="#6B6B6B"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M11.4438 4.34961C11.7751 4.34961 12.0438 4.61824 12.0438 4.94961V9.46123H12.6134C12.9447 9.46123 13.2134 9.72986 13.2134 10.0612C13.2134 10.3926 12.9447 10.6612 12.6134 10.6612H11.8268C11.2839 10.6612 10.8438 10.2211 10.8438 9.67823V4.94961C10.8438 4.61824 11.1124 4.34961 11.4438 4.34961Z" fill="#6B6B6B"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M17.7085 1.96289C18.0399 1.96289 18.3085 2.23152 18.3085 2.56289V4.01568C18.3085 4.56881 17.8978 5.03591 17.3492 5.10664L15.6846 5.32127C15.356 5.36365 15.0552 5.13158 15.0128 4.80293C14.9704 4.47428 15.2025 4.1735 15.5311 4.13113L17.1085 3.92774V2.56289C17.1085 2.23152 17.3771 1.96289 17.7085 1.96289Z" fill="#6B6B6B"/>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="clip0_8660_33052">
|
||||
<rect width="38" height="22" fill="white" transform="translate(0.230469 0.5)"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
After Width: | Height: | Size: 2.7 KiB |
|
@ -1,15 +0,0 @@
|
|||
<svg width="39" height="23" viewBox="0 0 39 23" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g clip-path="url(#clip0_7630_31385)">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M32.5667 9.57669L29.8954 12.9415L32.5667 16.3069L32.5667 9.57669ZM34.0488 8.16094C34.0488 7.20581 32.8751 6.76616 32.2907 7.50235L28.4887 12.2914C28.1955 12.6607 28.1983 13.1935 28.4954 13.5678L32.2974 18.3577C32.8863 19.0996 34.0488 18.6895 34.0488 17.7398L34.0488 8.16094Z" fill="#323A3D"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M15.3789 7.13672V17.9218H26.8471V7.13672H15.3789ZM14.8789 5.63672C14.3266 5.63672 13.8789 6.08443 13.8789 6.63672V18.4218C13.8789 18.9741 14.3266 19.4218 14.8789 19.4218H27.3471C27.8994 19.4218 28.3471 18.9741 28.3471 18.4218V6.63672C28.3471 6.08443 27.8994 5.63672 27.3471 5.63672H14.8789Z" fill="#323A3D"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M19.0481 15.9125C19.9311 15.9125 20.6469 15.1967 20.6469 14.3137C20.6469 13.4307 19.9311 12.7148 19.0481 12.7148C18.165 12.7148 17.4492 13.4307 17.4492 14.3137C17.4492 15.1967 18.165 15.9125 19.0481 15.9125ZM19.0481 17.4125C20.7595 17.4125 22.1469 16.0251 22.1469 14.3137C22.1469 12.6022 20.7595 11.2148 19.0481 11.2148C17.3366 11.2148 15.9492 12.6022 15.9492 14.3137C15.9492 16.0251 17.3366 17.4125 19.0481 17.4125Z" fill="#323A3D"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M12.1705 2.26367C8.422 2.26367 5.38281 5.30286 5.38281 9.05134C5.38281 12.7998 8.422 15.839 12.1705 15.839C12.5847 15.839 12.9205 16.1748 12.9205 16.589C12.9205 17.0032 12.5847 17.339 12.1705 17.339C7.59357 17.339 3.88281 13.6282 3.88281 9.05134C3.88281 4.47443 7.59357 0.763672 12.1705 0.763672C14.5133 0.763672 16.6302 1.73696 18.1367 3.29917C18.4242 3.59734 18.4156 4.07213 18.1175 4.35966C17.8193 4.64718 17.3445 4.63856 17.057 4.3404C15.8215 3.05917 14.0894 2.26367 12.1705 2.26367Z" fill="#323A3D"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M11.582 3.73828C11.9962 3.73828 12.332 4.07407 12.332 4.48828V8.8499H12.7516C13.1659 8.8499 13.5016 9.18569 13.5016 9.5999C13.5016 10.0141 13.1659 10.3499 12.7516 10.3499H11.965C11.3393 10.3499 10.832 9.84262 10.832 9.2169V4.48828C10.832 4.07407 11.1678 3.73828 11.582 3.73828Z" fill="#323A3D"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M17.8468 1.35156C18.261 1.35156 18.5968 1.68735 18.5968 2.10156V3.55435C18.5968 4.1829 18.1301 4.7137 17.5067 4.79408L15.8421 5.00871C15.4313 5.06168 15.0553 4.7716 15.0023 4.36078C14.9494 3.94997 15.2395 3.574 15.6503 3.52103L17.0968 3.33451V2.10156C17.0968 1.68735 17.4326 1.35156 17.8468 1.35156Z" fill="#323A3D"/>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="clip0_7630_31385">
|
||||
<rect width="38" height="22" fill="white" transform="translate(0.367188 0.0390625)"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
Before Width: | Height: | Size: 2.7 KiB |
|
@ -1,15 +0,0 @@
|
|||
<svg width="39" height="23" viewBox="0 0 39 23" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g clip-path="url(#clip0_7630_31397)">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M32.8631 8.71892L29.5134 12.9383L32.8631 17.1584L32.8631 8.71892ZM34.0488 8.16094C34.0488 7.20581 32.8751 6.76616 32.2907 7.50235L28.4887 12.2914C28.1955 12.6607 28.1983 13.1935 28.4954 13.5678L32.2974 18.3577C32.8863 19.0996 34.0488 18.6895 34.0488 17.7398L34.0488 8.16094Z" fill="#323A3D"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M15.0789 6.83672V18.2218H27.1471V6.83672H15.0789ZM14.8789 5.63672C14.3266 5.63672 13.8789 6.08443 13.8789 6.63672V18.4218C13.8789 18.9741 14.3266 19.4218 14.8789 19.4218H27.3471C27.8994 19.4218 28.3471 18.9741 28.3471 18.4218V6.63672C28.3471 6.08443 27.8994 5.63672 27.3471 5.63672H14.8789Z" fill="#323A3D"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M19.0481 16.2125C20.0968 16.2125 20.9469 15.3624 20.9469 14.3137C20.9469 13.265 20.0968 12.4148 19.0481 12.4148C17.9994 12.4148 17.1492 13.265 17.1492 14.3137C17.1492 15.3624 17.9994 16.2125 19.0481 16.2125ZM19.0481 17.4125C20.7595 17.4125 22.1469 16.0251 22.1469 14.3137C22.1469 12.6022 20.7595 11.2148 19.0481 11.2148C17.3366 11.2148 15.9492 12.6022 15.9492 14.3137C15.9492 16.0251 17.3366 17.4125 19.0481 17.4125Z" fill="#323A3D"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M12.1689 2.11406C8.33759 2.11406 5.23125 5.22041 5.23125 9.05173C5.23125 12.8831 8.33759 15.9894 12.1689 15.9894C12.5003 15.9894 12.7689 16.258 12.7689 16.5894C12.7689 16.9208 12.5003 17.1894 12.1689 17.1894C7.67485 17.1894 4.03125 13.5458 4.03125 9.05173C4.03125 4.55766 7.67485 0.914062 12.1689 0.914062C14.4694 0.914062 16.5478 1.86957 18.0272 3.40369C18.2572 3.64222 18.2503 4.02205 18.0118 4.25207C17.7732 4.4821 17.3934 4.4752 17.1634 4.23667C15.9008 2.92734 14.1303 2.11406 12.1689 2.11406Z" fill="#323A3D"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M11.5805 3.88867C11.9118 3.88867 12.1805 4.1573 12.1805 4.48867V9.00029H12.7501C13.0814 9.00029 13.3501 9.26892 13.3501 9.60029C13.3501 9.93166 13.0814 10.2003 12.7501 10.2003H11.9635C11.4206 10.2003 10.9805 9.76017 10.9805 9.21729V4.48867C10.9805 4.1573 11.2491 3.88867 11.5805 3.88867Z" fill="#323A3D"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M17.8452 1.50195C18.1766 1.50195 18.4452 1.77058 18.4452 2.10195V3.55474C18.4452 4.10787 18.0345 4.57497 17.4859 4.64571L15.8213 4.86034C15.4927 4.90271 15.1919 4.67064 15.1495 4.34199C15.1071 4.01334 15.3392 3.71256 15.6679 3.67019L17.2452 3.4668V2.10195C17.2452 1.77058 17.5139 1.50195 17.8452 1.50195Z" fill="#323A3D"/>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="clip0_7630_31397">
|
||||
<rect width="38" height="22" fill="white" transform="translate(0.367188 0.0390625)"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
Before Width: | Height: | Size: 2.7 KiB |
|
@ -1,16 +0,0 @@
|
|||
<svg width="39" height="23" viewBox="0 0 39 23" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g clip-path="url(#clip0_7630_31345)">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M32.5667 9.57669L29.8954 12.9415L32.5667 16.3069L32.5667 9.57669ZM34.0488 8.16094C34.0488 7.20581 32.8751 6.76616 32.2907 7.50235L28.4887 12.2914C28.1955 12.6607 28.1983 13.1935 28.4954 13.5678L32.2974 18.3577C32.8863 19.0996 34.0488 18.6895 34.0488 17.7398L34.0488 8.16094Z" fill="#323A3D"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M15.3789 7.13672V17.9218H26.8471V7.13672H15.3789ZM14.8789 5.63672C14.3266 5.63672 13.8789 6.08443 13.8789 6.63672V18.4218C13.8789 18.9741 14.3266 19.4218 14.8789 19.4218H27.3471C27.8994 19.4218 28.3471 18.9741 28.3471 18.4218V6.63672C28.3471 6.08443 27.8994 5.63672 27.3471 5.63672H14.8789Z" fill="#323A3D"/>
|
||||
<path d="M22.1469 14.3137C22.1469 16.0251 20.7595 17.4125 19.0481 17.4125C17.3366 17.4125 15.9492 16.0251 15.9492 14.3137C15.9492 12.6022 17.3366 11.2148 19.0481 11.2148C20.7595 11.2148 22.1469 12.6022 22.1469 14.3137Z" fill="#FF6F00"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M19.0481 15.9125C19.9311 15.9125 20.6469 15.1967 20.6469 14.3137C20.6469 13.4307 19.9311 12.7148 19.0481 12.7148C18.165 12.7148 17.4492 13.4307 17.4492 14.3137C17.4492 15.1967 18.165 15.9125 19.0481 15.9125ZM19.0481 17.4125C20.7595 17.4125 22.1469 16.0251 22.1469 14.3137C22.1469 12.6022 20.7595 11.2148 19.0481 11.2148C17.3366 11.2148 15.9492 12.6022 15.9492 14.3137C15.9492 16.0251 17.3366 17.4125 19.0481 17.4125Z" fill="#323A3D"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M12.1705 2.26367C8.422 2.26367 5.38281 5.30286 5.38281 9.05134C5.38281 12.7998 8.422 15.839 12.1705 15.839C12.5847 15.839 12.9205 16.1748 12.9205 16.589C12.9205 17.0032 12.5847 17.339 12.1705 17.339C7.59357 17.339 3.88281 13.6282 3.88281 9.05134C3.88281 4.47443 7.59357 0.763672 12.1705 0.763672C14.5133 0.763672 16.6302 1.73696 18.1367 3.29917C18.4242 3.59734 18.4156 4.07213 18.1175 4.35966C17.8193 4.64718 17.3445 4.63856 17.057 4.3404C15.8215 3.05917 14.0894 2.26367 12.1705 2.26367Z" fill="#323A3D"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M11.582 3.73828C11.9962 3.73828 12.332 4.07407 12.332 4.48828V8.8499H12.7516C13.1659 8.8499 13.5016 9.18569 13.5016 9.5999C13.5016 10.0141 13.1659 10.3499 12.7516 10.3499H11.965C11.3393 10.3499 10.832 9.84262 10.832 9.2169V4.48828C10.832 4.07407 11.1678 3.73828 11.582 3.73828Z" fill="#323A3D"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M17.8468 1.35156C18.261 1.35156 18.5968 1.68735 18.5968 2.10156V3.55435C18.5968 4.1829 18.1301 4.7137 17.5067 4.79408L15.8421 5.00871C15.4313 5.06168 15.0553 4.7716 15.0023 4.36078C14.9494 3.94997 15.2395 3.574 15.6503 3.52103L17.0968 3.33451V2.10156C17.0968 1.68735 17.4326 1.35156 17.8468 1.35156Z" fill="#323A3D"/>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="clip0_7630_31345">
|
||||
<rect width="38" height="22" fill="white" transform="translate(0.367188 0.0390625)"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
Before Width: | Height: | Size: 2.9 KiB |
|
@ -1,16 +0,0 @@
|
|||
<svg width="39" height="23" viewBox="0 0 39 23" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g clip-path="url(#clip0_7630_31357)">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M32.8631 8.71892L29.5134 12.9383L32.8631 17.1584L32.8631 8.71892ZM34.0488 8.16094C34.0488 7.20581 32.8751 6.76616 32.2907 7.50235L28.4887 12.2914C28.1955 12.6607 28.1983 13.1935 28.4954 13.5678L32.2974 18.3577C32.8863 19.0996 34.0488 18.6895 34.0488 17.7398L34.0488 8.16094Z" fill="#323A3D"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M15.0789 6.83672V18.2218H27.1471V6.83672H15.0789ZM14.8789 5.63672C14.3266 5.63672 13.8789 6.08443 13.8789 6.63672V18.4218C13.8789 18.9741 14.3266 19.4218 14.8789 19.4218H27.3471C27.8994 19.4218 28.3471 18.9741 28.3471 18.4218V6.63672C28.3471 6.08443 27.8994 5.63672 27.3471 5.63672H14.8789Z" fill="#323A3D"/>
|
||||
<path d="M22.1469 14.3137C22.1469 16.0251 20.7595 17.4125 19.0481 17.4125C17.3366 17.4125 15.9492 16.0251 15.9492 14.3137C15.9492 12.6022 17.3366 11.2148 19.0481 11.2148C20.7595 11.2148 22.1469 12.6022 22.1469 14.3137Z" fill="#FF6F00"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M19.0481 16.2125C20.0968 16.2125 20.9469 15.3624 20.9469 14.3137C20.9469 13.265 20.0968 12.4148 19.0481 12.4148C17.9994 12.4148 17.1492 13.265 17.1492 14.3137C17.1492 15.3624 17.9994 16.2125 19.0481 16.2125ZM19.0481 17.4125C20.7595 17.4125 22.1469 16.0251 22.1469 14.3137C22.1469 12.6022 20.7595 11.2148 19.0481 11.2148C17.3366 11.2148 15.9492 12.6022 15.9492 14.3137C15.9492 16.0251 17.3366 17.4125 19.0481 17.4125Z" fill="#323A3D"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M12.1689 2.11406C8.33759 2.11406 5.23125 5.22041 5.23125 9.05173C5.23125 12.8831 8.33759 15.9894 12.1689 15.9894C12.5003 15.9894 12.7689 16.258 12.7689 16.5894C12.7689 16.9208 12.5003 17.1894 12.1689 17.1894C7.67485 17.1894 4.03125 13.5458 4.03125 9.05173C4.03125 4.55766 7.67485 0.914062 12.1689 0.914062C14.4694 0.914062 16.5478 1.86957 18.0272 3.40369C18.2572 3.64222 18.2503 4.02205 18.0118 4.25207C17.7732 4.4821 17.3934 4.4752 17.1634 4.23667C15.9008 2.92734 14.1303 2.11406 12.1689 2.11406Z" fill="#323A3D"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M11.5805 3.88867C11.9118 3.88867 12.1805 4.1573 12.1805 4.48867V9.00029H12.7501C13.0814 9.00029 13.3501 9.26892 13.3501 9.60029C13.3501 9.93166 13.0814 10.2003 12.7501 10.2003H11.9635C11.4206 10.2003 10.9805 9.76017 10.9805 9.21729V4.48867C10.9805 4.1573 11.2491 3.88867 11.5805 3.88867Z" fill="#323A3D"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M17.8452 1.50195C18.1766 1.50195 18.4452 1.77058 18.4452 2.10195V3.55474C18.4452 4.10787 18.0345 4.57497 17.4859 4.64571L15.8213 4.86034C15.4927 4.90271 15.1919 4.67064 15.1495 4.34199C15.1071 4.01334 15.3392 3.71256 15.6679 3.67019L17.2452 3.4668V2.10195C17.2452 1.77058 17.5139 1.50195 17.8452 1.50195Z" fill="#323A3D"/>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="clip0_7630_31357">
|
||||
<rect width="38" height="22" fill="white" transform="translate(0.367188 0.0390625)"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
Before Width: | Height: | Size: 2.9 KiB |
|
@ -0,0 +1,8 @@
|
|||
<svg width="39" height="23" viewBox="0 0 39 23" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<circle cx="19.8644" cy="9.7257" r="7.39563" stroke="#6B6B6B" stroke-width="1.2"/>
|
||||
<path d="M22.8658 16.541L23.3854 16.241L23.115 15.7727L22.6212 15.9931L22.8658 16.541ZM16.8594 16.5484L17.1026 15.9999L16.6095 15.7813L16.3398 16.2484L16.8594 16.5484ZM14.8594 20.0125L14.3398 19.7125L13.8201 20.6125H14.8594V20.0125ZM24.8701 20.0125V20.6125H25.9093L25.3897 19.7125L24.8701 20.0125ZM22.6212 15.9931C21.7768 16.3701 20.8409 16.5799 19.8543 16.5799V17.7799C21.0127 17.7799 22.115 17.5332 23.1104 17.0889L22.6212 15.9931ZM19.8543 16.5799C18.8736 16.5799 17.943 16.3726 17.1026 15.9999L16.6162 17.0969C17.6068 17.5362 18.7029 17.7799 19.8543 17.7799V16.5799ZM15.379 20.3125L17.379 16.8484L16.3398 16.2484L14.3398 19.7125L15.379 20.3125ZM24.8701 19.4125H14.8594V20.6125H24.8701V19.4125ZM22.3462 16.841L24.3505 20.3125L25.3897 19.7125L23.3854 16.241L22.3462 16.841Z" fill="#6B6B6B"/>
|
||||
<line x1="13.8461" y1="20.0699" x2="25.6091" y2="20.0699" stroke="#6B6B6B" stroke-width="1.2" stroke-linecap="round"/>
|
||||
<path d="M15.1641 9.1256C16.3674 7.89471 18.0286 7.13281 19.8633 7.13281C21.698 7.13281 23.3592 7.89471 24.5625 9.1256" stroke="#6B6B6B" stroke-width="1.2" stroke-miterlimit="10" stroke-linecap="round"/>
|
||||
<path d="M17.0469 11.0531C17.7689 10.3136 18.7643 9.85742 19.8661 9.85742C20.9663 9.85742 21.9633 10.3152 22.6853 11.0531" stroke="#6B6B6B" stroke-width="1.2" stroke-miterlimit="10" stroke-linecap="round"/>
|
||||
<path d="M21.0104 12.9143C21.0883 12.8363 21.0889 12.7089 21.003 12.6398C20.6923 12.3896 20.2985 12.2402 19.8686 12.2402C19.4387 12.2402 19.0449 12.3896 18.7342 12.6398C18.6483 12.7089 18.6489 12.8363 18.7268 12.9143L19.727 13.9173C19.8051 13.9956 19.9321 13.9956 20.0102 13.9173L21.0104 12.9143Z" fill="#6B6B6B"/>
|
||||
</svg>
|
After Width: | Height: | Size: 1.8 KiB |
|
@ -1,8 +0,0 @@
|
|||
<svg width="39" height="22" viewBox="0 0 39 22" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<circle cx="19.9073" cy="9.2257" r="7.39563" stroke="#323A3D" stroke-width="1.2"/>
|
||||
<path d="M24.0288 9.09192C23.7729 8.18432 23.2243 7.38668 22.4683 6.82303C21.7123 6.25937 20.7913 5.96127 19.8484 5.97507C18.9055 5.98887 17.9936 6.3138 17.2545 6.89934C16.5153 7.48489 15.9903 8.29824 15.7611 9.21294" stroke="#323A3D" stroke-width="1.2"/>
|
||||
<path d="M21.9439 9.82928C21.7571 9.42705 21.4553 9.08923 21.0766 8.85853C20.6978 8.62784 20.2592 8.51463 19.8161 8.53322C19.3731 8.55182 18.9455 8.70138 18.5874 8.963C18.2293 9.22462 17.9569 9.58655 17.8045 10.003" stroke="#323A3D" stroke-width="1.2"/>
|
||||
<path d="M22.9088 16.041L23.4284 15.741L23.158 15.2727L22.6642 15.4931L22.9088 16.041ZM16.9023 16.0484L17.1456 15.4999L16.6524 15.2813L16.3827 15.7484L16.9023 16.0484ZM14.9023 19.5125L14.3827 19.2125L13.8631 20.1125H14.9023V19.5125ZM24.913 19.5125V20.1125H25.9523L25.4327 19.2125L24.913 19.5125ZM22.6642 15.4931C21.8198 15.8701 20.8838 16.0799 19.8972 16.0799V17.2799C21.0556 17.2799 22.158 17.0332 23.1534 16.5889L22.6642 15.4931ZM19.8972 16.0799C18.9166 16.0799 17.986 15.8726 17.1456 15.4999L16.6591 16.5969C17.6498 17.0362 18.7458 17.2799 19.8972 17.2799V16.0799ZM15.422 19.8125L17.422 16.3484L16.3827 15.7484L14.3827 19.2125L15.422 19.8125ZM24.913 18.9125H14.9023V20.1125H24.913V18.9125ZM22.3892 16.341L24.3934 19.8125L25.4327 19.2125L23.4284 15.741L22.3892 16.341Z" fill="#323A3D"/>
|
||||
<line x1="13.8891" y1="19.5699" x2="25.6521" y2="19.5699" stroke="#323A3D" stroke-width="1.2" stroke-linecap="round"/>
|
||||
<circle cx="19.9102" cy="11.7305" r="1.28516" fill="#323A3D"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 1.6 KiB |
|
@ -1,8 +0,0 @@
|
|||
<svg width="39" height="22" viewBox="0 0 39 22" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<circle cx="19.9073" cy="9.2257" r="7.39563" stroke="#323A3D" stroke-width="1.5"/>
|
||||
<path d="M24.0288 9.09192C23.7729 8.18432 23.2243 7.38668 22.4683 6.82303C21.7123 6.25937 20.7913 5.96127 19.8484 5.97507C18.9055 5.98887 17.9936 6.3138 17.2545 6.89934C16.5153 7.48489 15.9903 8.29824 15.7611 9.21294" stroke="#323A3D" stroke-width="1.5"/>
|
||||
<path d="M21.9439 9.82928C21.7571 9.42705 21.4553 9.08923 21.0766 8.85853C20.6978 8.62784 20.2592 8.51463 19.8161 8.53322C19.3731 8.55182 18.9455 8.70138 18.5874 8.963C18.2293 9.22462 17.9569 9.58655 17.8045 10.003" stroke="#323A3D" stroke-width="1.5"/>
|
||||
<path d="M22.9088 16.041L23.5583 15.666L23.2203 15.0806L22.6031 15.3562L22.9088 16.041ZM16.9023 16.0484L17.2064 15.3628L16.59 15.0895L16.2528 15.6734L16.9023 16.0484ZM14.9023 19.5125L14.2528 19.1375L13.6033 20.2625H14.9023V19.5125ZM24.913 19.5125V20.2625H26.2121L25.5626 19.1375L24.913 19.5125ZM22.6031 15.3562C21.7775 15.7247 20.8623 15.9299 19.8972 15.9299V17.4299C21.0771 17.4299 22.2003 17.1786 23.2145 16.7259L22.6031 15.3562ZM19.8972 15.9299C18.9379 15.9299 18.028 15.7271 17.2064 15.3628L16.5983 16.734C17.6078 17.1816 18.7245 17.4299 19.8972 17.4299V15.9299ZM15.5519 19.8875L17.5519 16.4234L16.2528 15.6734L14.2528 19.1375L15.5519 19.8875ZM24.913 18.7625H14.9023V20.2625H24.913V18.7625ZM22.2593 16.416L24.2635 19.8875L25.5626 19.1375L23.5583 15.666L22.2593 16.416Z" fill="#323A3D"/>
|
||||
<line x1="14.0391" y1="19.4199" x2="25.5021" y2="19.4199" stroke="#323A3D" stroke-width="1.5" stroke-linecap="round"/>
|
||||
<circle cx="19.9102" cy="11.7305" r="1.28516" fill="#323A3D"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 1.6 KiB |
|
@ -1,8 +0,0 @@
|
|||
<svg width="39" height="23" viewBox="0 0 39 23" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<circle cx="19.5714" cy="9.27844" r="7.39563" stroke="#323A3D" stroke-width="1.5"/>
|
||||
<path d="M23.6928 9.14465C23.4369 8.23705 22.8884 7.43942 22.1324 6.87576C21.3764 6.3121 20.4554 6.014 19.5125 6.0278C18.5696 6.0416 17.6577 6.36654 16.9185 6.95208C16.1794 7.53762 15.6544 8.35097 15.4252 9.26567" stroke="#FF6F00" stroke-width="1.5"/>
|
||||
<path d="M21.6079 9.88202C21.4212 9.47979 21.1194 9.14196 20.7406 8.91127C20.3619 8.68057 19.9233 8.56736 19.4802 8.58596C19.0371 8.60455 18.6095 8.75412 18.2514 9.01574C17.8934 9.27735 17.6209 9.63928 17.4685 10.0557" stroke="#FF6F00" stroke-width="1.5"/>
|
||||
<path d="M22.5728 16.0938L23.2224 15.7187L22.8844 15.1334L22.2671 15.4089L22.5728 16.0938ZM16.5664 16.1011L16.8704 15.4155L16.254 15.1422L15.9169 15.7261L16.5664 16.1011ZM14.5664 19.5652L13.9169 19.1902L13.2674 20.3152H14.5664V19.5652ZM24.5771 19.5652V20.3152H25.8762L25.2266 19.1902L24.5771 19.5652ZM22.2671 15.4089C21.4416 15.7774 20.5264 15.9827 19.5613 15.9827V17.4827C20.7412 17.4827 21.8643 17.2313 22.8786 16.7786L22.2671 15.4089ZM19.5613 15.9827C18.602 15.9827 17.6921 15.7799 16.8704 15.4155L16.2624 16.7868C17.2718 17.2344 18.3886 17.4827 19.5613 17.4827V15.9827ZM15.2159 19.9402L17.2159 16.4761L15.9169 15.7261L13.9169 19.1902L15.2159 19.9402ZM24.5771 18.8152H14.5664V20.3152H24.5771V18.8152ZM21.9233 16.4688L23.9276 19.9402L25.2266 19.1902L23.2224 15.7187L21.9233 16.4688Z" fill="#323A3D"/>
|
||||
<line x1="13.7031" y1="19.4727" x2="25.1661" y2="19.4727" stroke="#323A3D" stroke-width="1.5" stroke-linecap="round"/>
|
||||
<circle cx="19.5742" cy="11.7832" r="1.28516" fill="#FF6F00"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 1.6 KiB |
|
@ -1,8 +0,0 @@
|
|||
<svg width="39" height="23" viewBox="0 0 39 23" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<circle cx="19.9073" cy="9.27844" r="7.39563" stroke="#323A3D" stroke-width="1.2"/>
|
||||
<path d="M24.0288 9.14465C23.7729 8.23705 23.2243 7.43942 22.4683 6.87576C21.7123 6.3121 20.7913 6.014 19.8484 6.0278C18.9055 6.0416 17.9936 6.36654 17.2545 6.95208C16.5153 7.53762 15.9903 8.35097 15.7611 9.26567" stroke="#FF6F00" stroke-width="1.2"/>
|
||||
<path d="M21.9439 9.88202C21.7571 9.47979 21.4553 9.14196 21.0766 8.91127C20.6978 8.68057 20.2592 8.56736 19.8161 8.58596C19.3731 8.60455 18.9455 8.75412 18.5874 9.01574C18.2293 9.27735 17.9569 9.63928 17.8045 10.0557" stroke="#FF6F00" stroke-width="1.2"/>
|
||||
<path d="M22.9088 16.0938L23.4284 15.7937L23.158 15.3254L22.6642 15.5459L22.9088 16.0938ZM16.9023 16.1011L17.1456 15.5527L16.6524 15.334L16.3827 15.8011L16.9023 16.1011ZM14.9023 19.5652L14.3827 19.2652L13.8631 20.1652H14.9023V19.5652ZM24.913 19.5652V20.1652H25.9523L25.4327 19.2652L24.913 19.5652ZM22.6642 15.5459C21.8198 15.9228 20.8838 16.1327 19.8972 16.1327V17.3327C21.0556 17.3327 22.158 17.086 23.1534 16.6416L22.6642 15.5459ZM19.8972 16.1327C18.9166 16.1327 17.986 15.9253 17.1456 15.5527L16.6591 16.6496C17.6498 17.0889 18.7458 17.3327 19.8972 17.3327V16.1327ZM15.422 19.8652L17.422 16.4011L16.3827 15.8011L14.3827 19.2652L15.422 19.8652ZM24.913 18.9652H14.9023V20.1652H24.913V18.9652ZM22.3892 16.3938L24.3934 19.8652L25.4327 19.2652L23.4284 15.7937L22.3892 16.3938Z" fill="#323A3D"/>
|
||||
<line x1="13.8891" y1="19.6227" x2="25.6521" y2="19.6227" stroke="#323A3D" stroke-width="1.2" stroke-linecap="round"/>
|
||||
<circle cx="19.9102" cy="11.7832" r="1.28516" fill="#FF6F00"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 1.6 KiB |
|
@ -20,9 +20,10 @@ wxBEGIN_EVENT_TABLE(CameraPopup, wxPopupTransientWindow)
|
|||
EVT_KILL_FOCUS(CameraPopup::OnKillFocus )
|
||||
wxEND_EVENT_TABLE()
|
||||
|
||||
wxDEFINE_EVENT(EVT_VCAMERA_SWITCH, wxMouseEvent);
|
||||
wxDEFINE_EVENT(EVT_SDCARD_ABSENT_HINT, wxCommandEvent);
|
||||
|
||||
static const wxFont TEXT_FONT = Label::Body_14;
|
||||
static wxColour TEXT_COL = wxColour(43, 52, 54);
|
||||
const wxColour TEXT_COL = wxColour(43, 52, 54);
|
||||
|
||||
CameraPopup::CameraPopup(wxWindow *parent, MachineObject* obj)
|
||||
: wxPopupTransientWindow(parent, wxBORDER_NONE | wxPU_CONTAINS_CONTROLS),
|
||||
|
@ -33,34 +34,70 @@ CameraPopup::CameraPopup(wxWindow *parent, MachineObject* obj)
|
|||
#endif
|
||||
m_panel = new wxScrolledWindow(this, wxID_ANY);
|
||||
m_panel->SetBackgroundColour(*wxWHITE);
|
||||
|
||||
m_panel->SetMinSize(wxSize(FromDIP(180),-1));
|
||||
m_panel->Bind(wxEVT_MOTION, &CameraPopup::OnMouse, this);
|
||||
|
||||
wxBoxSizer * main_sizer = new wxBoxSizer(wxHORIZONTAL);
|
||||
wxFlexGridSizer* top_sizer = new wxFlexGridSizer(0, 2, 0, 0);
|
||||
main_sizer = new wxBoxSizer(wxVERTICAL);
|
||||
wxFlexGridSizer* top_sizer = new wxFlexGridSizer(0, 2, 0, FromDIP(50));
|
||||
top_sizer->AddGrowableCol(0);
|
||||
top_sizer->SetFlexibleDirection(wxBOTH);
|
||||
top_sizer->SetNonFlexibleGrowMode(wxFLEX_GROWMODE_SPECIFIED);
|
||||
//timelapse
|
||||
m_text_timelapse = new wxStaticText(m_panel, wxID_ANY, _L("Timelapse"));
|
||||
m_text_timelapse->Wrap(-1);
|
||||
m_text_timelapse->SetFont(TEXT_FONT);
|
||||
m_text_timelapse->SetFont(Label::Head_14);
|
||||
m_text_timelapse->SetForegroundColour(TEXT_COL);
|
||||
m_switch_timelapse = new SwitchButton(m_panel);
|
||||
if (obj)
|
||||
m_switch_timelapse->SetValue(obj->camera_timelapse);
|
||||
|
||||
//recording
|
||||
m_text_recording = new wxStaticText(m_panel, wxID_ANY, _L("Monitoring Recording"));
|
||||
m_text_recording->Wrap(-1);
|
||||
m_text_recording->SetFont(TEXT_FONT);
|
||||
m_text_recording->SetFont(Label::Head_14);
|
||||
m_text_recording->SetForegroundColour(TEXT_COL);
|
||||
m_switch_recording = new SwitchButton(m_panel);
|
||||
if (obj)
|
||||
m_switch_recording->SetValue(obj->camera_recording_when_printing);
|
||||
|
||||
top_sizer->Add(m_text_timelapse, 0, wxALIGN_CENTER_VERTICAL | wxALIGN_RIGHT | wxALL, FromDIP(5));
|
||||
top_sizer->Add(m_switch_timelapse, 0, wxALIGN_CENTER_VERTICAL | wxALIGN_LEFT | wxALL, FromDIP(5));
|
||||
top_sizer->Add(m_text_recording, 0, wxALIGN_CENTER_VERTICAL | wxALIGN_RIGHT | wxALL, FromDIP(5));
|
||||
top_sizer->Add(m_switch_recording, 0, wxALIGN_CENTER_VERTICAL | wxALIGN_LEFT | wxALL, FromDIP(5));
|
||||
//vcamera
|
||||
m_text_vcamera = new wxStaticText(m_panel, wxID_ANY, _L("Virtual Camera"));
|
||||
m_text_vcamera->Wrap(-1);
|
||||
m_text_vcamera->SetFont(Label::Head_14);
|
||||
m_text_vcamera->SetForegroundColour(TEXT_COL);
|
||||
m_switch_vcamera = new SwitchButton(m_panel);
|
||||
|
||||
top_sizer->Add(m_text_timelapse, 0, wxALIGN_CENTER_VERTICAL | wxALIGN_LEFT | wxALL, FromDIP(5));
|
||||
top_sizer->Add(m_switch_timelapse, 0, wxALIGN_CENTER_VERTICAL | wxALIGN_RIGHT | wxALL, FromDIP(5));
|
||||
top_sizer->Add(m_text_recording, 0, wxALIGN_CENTER_VERTICAL | wxALIGN_LEFT | wxALL, FromDIP(5));
|
||||
top_sizer->Add(m_switch_recording, 0, wxALIGN_CENTER_VERTICAL | wxALIGN_RIGHT | wxALL, FromDIP(5));
|
||||
top_sizer->Add(m_text_vcamera, 0, wxALIGN_CENTER_VERTICAL | wxALIGN_LEFT | wxALL, FromDIP(5));
|
||||
top_sizer->Add(m_switch_vcamera, 0, wxALIGN_CENTER_VERTICAL | wxALIGN_RIGHT | wxALL, FromDIP(5));
|
||||
|
||||
//resolution
|
||||
m_text_resolution = new wxStaticText(m_panel, wxID_ANY, _L("Resolution"));
|
||||
m_text_resolution->Wrap(-1);
|
||||
m_text_resolution->SetFont(Label::Head_14);
|
||||
m_text_resolution->SetForegroundColour(TEXT_COL);
|
||||
top_sizer->Add(m_text_resolution, 0, wxALIGN_CENTER_VERTICAL | wxALIGN_LEFT | wxALL, FromDIP(5));
|
||||
top_sizer->Add(0, 0, wxALL, 0);
|
||||
for (int i = 0; i < (int)RESOLUTION_OPTIONS_NUM; ++i)
|
||||
{
|
||||
m_resolution_options[i] = create_item_radiobox(to_resolution_label_string(CameraResolution(i)), m_panel, wxEmptyString, FromDIP(10));
|
||||
top_sizer->Add(m_resolution_options[i], 0, wxALIGN_CENTER_VERTICAL | wxALIGN_LEFT | wxALL, FromDIP(5));
|
||||
top_sizer->Add(0, 0, wxALL, 0);
|
||||
}
|
||||
if (obj)
|
||||
sync_resolution_setting(obj->camera_resolution);
|
||||
|
||||
main_sizer->Add(top_sizer, 0, wxALL, FromDIP(10));
|
||||
|
||||
auto url = wxString::Format(L"https://wiki.bambulab.com/%s/software/bambu-studio/virtual-camera", L"en");
|
||||
vcamera_guide_link = new wxHyperlinkCtrl(m_panel, wxID_ANY, _L("Show 'Streaming Video' guide page."),
|
||||
url, wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE);
|
||||
vcamera_guide_link->Hide();
|
||||
main_sizer->Add(vcamera_guide_link, 0, wxALL, FromDIP(15));
|
||||
|
||||
m_panel->SetSizer(main_sizer);
|
||||
m_panel->Layout();
|
||||
|
||||
|
@ -69,12 +106,32 @@ CameraPopup::CameraPopup(wxWindow *parent, MachineObject* obj)
|
|||
SetClientSize(m_panel->GetSize());
|
||||
m_switch_timelapse->Connect(wxEVT_LEFT_DOWN, wxCommandEventHandler(CameraPopup::on_switch_timelapse), NULL, this);
|
||||
m_switch_recording->Connect(wxEVT_LEFT_DOWN, wxCommandEventHandler(CameraPopup::on_switch_recording), NULL, this);
|
||||
m_switch_vcamera->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent &e) {
|
||||
wxMouseEvent evt(EVT_VCAMERA_SWITCH);
|
||||
evt.SetEventObject(this);
|
||||
GetEventHandler()->ProcessEvent(evt);
|
||||
});
|
||||
#ifdef __APPLE__
|
||||
m_panel->Bind(wxEVT_LEFT_UP, &CameraPopup::OnLeftUp, this);
|
||||
#endif //APPLE
|
||||
|
||||
check_func_supported();
|
||||
}
|
||||
|
||||
void CameraPopup::sdcard_absent_hint()
|
||||
{
|
||||
wxCommandEvent evt(EVT_SDCARD_ABSENT_HINT);
|
||||
evt.SetEventObject(this);
|
||||
GetEventHandler()->ProcessEvent(evt);
|
||||
}
|
||||
|
||||
void CameraPopup::on_switch_timelapse(wxCommandEvent& event)
|
||||
{
|
||||
if (!m_obj) return;
|
||||
|
||||
if (m_obj->sdcard_state != MachineObject::SdcardState::HAS_SDCARD_NORMAL) {
|
||||
sdcard_absent_hint();
|
||||
return;
|
||||
}
|
||||
bool value = m_switch_timelapse->GetValue();
|
||||
m_switch_timelapse->SetValue(!value);
|
||||
m_obj->command_ipcam_timelapse(!value);
|
||||
|
@ -83,12 +140,22 @@ void CameraPopup::on_switch_timelapse(wxCommandEvent& event)
|
|||
void CameraPopup::on_switch_recording(wxCommandEvent& event)
|
||||
{
|
||||
if (!m_obj) return;
|
||||
|
||||
if (m_obj->sdcard_state != MachineObject::SdcardState::HAS_SDCARD_NORMAL) {
|
||||
sdcard_absent_hint();
|
||||
return;
|
||||
}
|
||||
bool value = m_switch_recording->GetValue();
|
||||
m_switch_recording->SetValue(!value);
|
||||
m_obj->command_ipcam_record(!value);
|
||||
}
|
||||
|
||||
void CameraPopup::on_set_resolution()
|
||||
{
|
||||
if (!m_obj) return;
|
||||
|
||||
m_obj->command_ipcam_resolution_set(to_resolution_msg_string(curr_sel_resolution));
|
||||
}
|
||||
|
||||
void CameraPopup::Popup(wxWindow *WXUNUSED(focus))
|
||||
{
|
||||
wxPoint curr_position = this->GetPosition();
|
||||
|
@ -98,6 +165,235 @@ void CameraPopup::Popup(wxWindow *WXUNUSED(focus))
|
|||
wxPopupTransientWindow::Popup();
|
||||
}
|
||||
|
||||
wxWindow* CameraPopup::create_item_radiobox(wxString title, wxWindow* parent, wxString tooltip, int padding_left)
|
||||
{
|
||||
wxWindow *item = new wxWindow(parent, wxID_ANY, wxDefaultPosition, wxSize(-1, FromDIP(20)));
|
||||
item->SetBackgroundColour(*wxWHITE);
|
||||
|
||||
RadioBox *radiobox = new RadioBox(item);
|
||||
radiobox->SetPosition(wxPoint(padding_left, (item->GetSize().GetHeight() - radiobox->GetSize().GetHeight()) / 2));
|
||||
resolution_rbtns.push_back(radiobox);
|
||||
int btn_idx = resolution_rbtns.size() - 1;
|
||||
radiobox->Bind(wxEVT_LEFT_DOWN, [this, btn_idx](wxMouseEvent &e) {
|
||||
if (m_obj && allow_alter_resolution) {
|
||||
select_curr_radiobox(btn_idx, false);
|
||||
on_set_resolution();
|
||||
}
|
||||
});
|
||||
|
||||
wxStaticText *text = new wxStaticText(item, wxID_ANY, title, wxDefaultPosition, wxDefaultSize);
|
||||
resolution_texts.push_back(text);
|
||||
text->SetPosition(wxPoint(padding_left + radiobox->GetSize().GetWidth() + 10, (item->GetSize().GetHeight() - text->GetSize().GetHeight()) / 2));
|
||||
text->SetFont(Label::Body_13);
|
||||
text->SetForegroundColour(0x6B6B6B);
|
||||
text->Bind(wxEVT_LEFT_DOWN, [this, btn_idx](wxMouseEvent &e) {
|
||||
if (m_obj && allow_alter_resolution) {
|
||||
select_curr_radiobox(btn_idx, false);
|
||||
on_set_resolution();
|
||||
}
|
||||
});
|
||||
|
||||
radiobox->SetToolTip(tooltip);
|
||||
text->SetToolTip(tooltip);
|
||||
return item;
|
||||
}
|
||||
|
||||
void CameraPopup::select_curr_radiobox(int btn_idx, bool ui_change)
|
||||
{
|
||||
int len = resolution_rbtns.size();
|
||||
for (int i = 0; i < len; ++i) {
|
||||
if (i == btn_idx) {
|
||||
curr_sel_resolution = CameraResolution(i);
|
||||
if (ui_change)
|
||||
resolution_rbtns[i]->SetValue(true);
|
||||
}
|
||||
else {
|
||||
if (ui_change)
|
||||
resolution_rbtns[i]->SetValue(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CameraPopup::sync_resolution_setting(std::string resolution)
|
||||
{
|
||||
if (resolution == "") {
|
||||
reset_resolution_setting();
|
||||
return;
|
||||
}
|
||||
int res = 0;
|
||||
for (CameraResolution i = RESOLUTION_720P; i < RESOLUTION_OPTIONS_NUM; i = CameraResolution(i+1)){
|
||||
if (resolution == to_resolution_msg_string(i)) {
|
||||
res = int(i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
select_curr_radiobox(res, true);
|
||||
}
|
||||
|
||||
void CameraPopup::reset_resolution_setting()
|
||||
{
|
||||
int len = resolution_rbtns.size();
|
||||
for (int i = 0; i < len; ++i) {
|
||||
resolution_rbtns[i]->SetValue(false);
|
||||
}
|
||||
curr_sel_resolution = RESOLUTION_OPTIONS_NUM;
|
||||
}
|
||||
|
||||
void CameraPopup::sync_vcamera_state(bool show_vcamera)
|
||||
{
|
||||
is_vcamera_show = show_vcamera;
|
||||
if (is_vcamera_show) {
|
||||
m_switch_vcamera->SetValue(true);
|
||||
vcamera_guide_link->Show();
|
||||
}
|
||||
else {
|
||||
m_switch_vcamera->SetValue(false);
|
||||
vcamera_guide_link->Hide();
|
||||
}
|
||||
|
||||
rescale();
|
||||
}
|
||||
|
||||
void CameraPopup::check_func_supported()
|
||||
{
|
||||
// function supported
|
||||
if (m_obj->is_function_supported(PrinterFunction::FUNC_TIMELAPSE) && m_obj->has_ipcam) {
|
||||
m_text_timelapse->Show();
|
||||
m_switch_timelapse->Show();
|
||||
} else {
|
||||
m_text_timelapse->Hide();
|
||||
m_switch_timelapse->Hide();
|
||||
}
|
||||
|
||||
if (m_obj->is_function_supported(PrinterFunction::FUNC_RECORDING) && m_obj->has_ipcam) {
|
||||
m_text_recording->Show();
|
||||
m_switch_recording->Show();
|
||||
} else {
|
||||
m_text_recording->Hide();
|
||||
m_switch_recording->Hide();
|
||||
}
|
||||
|
||||
if (m_obj->is_function_supported(PrinterFunction::FUNC_VIRTUAL_CAMERA) && m_obj->has_ipcam) {
|
||||
m_text_vcamera->Show();
|
||||
m_switch_vcamera->Show();
|
||||
if (is_vcamera_show)
|
||||
vcamera_guide_link->Show();
|
||||
} else {
|
||||
m_text_vcamera->Hide();
|
||||
m_switch_vcamera->Hide();
|
||||
vcamera_guide_link->Hide();
|
||||
}
|
||||
|
||||
allow_alter_resolution = (m_obj->is_function_supported(PrinterFunction::FUNC_ALTER_RESOLUTION) && m_obj->has_ipcam);
|
||||
|
||||
//resolution supported
|
||||
std::vector<std::string> resolution_supported = m_obj->get_resolution_supported();
|
||||
for (int i = 0; i < (int)RESOLUTION_OPTIONS_NUM; ++i){
|
||||
auto curr_res = to_resolution_msg_string(CameraResolution(i));
|
||||
std::vector <std::string> ::iterator it = std::find(resolution_supported.begin(), resolution_supported.end(), curr_res);
|
||||
if (it!= resolution_supported.end())
|
||||
m_resolution_options[i] -> Show();
|
||||
else
|
||||
m_resolution_options[i] -> Hide();
|
||||
}
|
||||
}
|
||||
|
||||
void CameraPopup::update()
|
||||
{
|
||||
if (!m_obj) return;
|
||||
check_func_supported();
|
||||
m_switch_timelapse->SetValue(m_obj->camera_timelapse);
|
||||
m_switch_recording->SetValue(m_obj->camera_recording_when_printing);
|
||||
sync_resolution_setting(m_obj->camera_resolution);
|
||||
|
||||
rescale();
|
||||
}
|
||||
|
||||
wxString CameraPopup::to_resolution_label_string(CameraResolution resolution) {
|
||||
switch (resolution) {
|
||||
case RESOLUTION_720P:
|
||||
return _L("720p");
|
||||
case RESOLUTION_1080P:
|
||||
return _L("1080p");
|
||||
default:
|
||||
return _L("");
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
std::string CameraPopup::to_resolution_msg_string(CameraResolution resolution) {
|
||||
switch (resolution) {
|
||||
case RESOLUTION_720P:
|
||||
return std::string("720p");
|
||||
case RESOLUTION_1080P:
|
||||
return std::string("1080p");
|
||||
default:
|
||||
return "";
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
void CameraPopup::rescale()
|
||||
{
|
||||
m_panel->Layout();
|
||||
main_sizer->Fit(m_panel);
|
||||
SetClientSize(m_panel->GetSize());
|
||||
wxPopupTransientWindow::Update();
|
||||
}
|
||||
|
||||
void CameraPopup::OnLeftUp(wxMouseEvent &event)
|
||||
{
|
||||
auto mouse_pos = ClientToScreen(event.GetPosition());
|
||||
auto wxscroll_win_pos = m_panel->ClientToScreen(wxPoint(0, 0));
|
||||
|
||||
if (mouse_pos.x > wxscroll_win_pos.x && mouse_pos.y > wxscroll_win_pos.y && mouse_pos.x < (wxscroll_win_pos.x + m_panel->GetSize().x) && mouse_pos.y < (wxscroll_win_pos.y + m_panel->GetSize().y)) {
|
||||
//timelapse
|
||||
auto timelapse_rect = m_switch_timelapse->ClientToScreen(wxPoint(0, 0));
|
||||
if (mouse_pos.x > timelapse_rect.x && mouse_pos.y > timelapse_rect.y && mouse_pos.x < (timelapse_rect.x + m_switch_timelapse->GetSize().x) && mouse_pos.y < (timelapse_rect.y + m_switch_timelapse->GetSize().y)) {
|
||||
wxMouseEvent timelapse_evt(wxEVT_LEFT_DOWN);
|
||||
m_switch_timelapse->GetEventHandler()->ProcessEvent(timelapse_evt);
|
||||
return;
|
||||
}
|
||||
//recording
|
||||
auto recording_rect = m_switch_recording->ClientToScreen(wxPoint(0, 0));
|
||||
if (mouse_pos.x > recording_rect.x && mouse_pos.y > recording_rect.y && mouse_pos.x < (recording_rect.x + m_switch_recording->GetSize().x) && mouse_pos.y < (recording_rect.y + m_switch_recording->GetSize().y)) {
|
||||
wxMouseEvent recording_evt(wxEVT_LEFT_DOWN);
|
||||
m_switch_recording->GetEventHandler()->ProcessEvent(recording_evt);
|
||||
return;
|
||||
}
|
||||
//vcamera
|
||||
auto vcamera_rect = m_switch_vcamera->ClientToScreen(wxPoint(0, 0));
|
||||
if (mouse_pos.x > vcamera_rect.x && mouse_pos.y > vcamera_rect.y && mouse_pos.x < (vcamera_rect.x + m_switch_vcamera->GetSize().x) && mouse_pos.y < (vcamera_rect.y + m_switch_vcamera->GetSize().y)) {
|
||||
wxMouseEvent vcamera_evt(wxEVT_LEFT_DOWN);
|
||||
m_switch_vcamera->GetEventHandler()->ProcessEvent(vcamera_evt);
|
||||
return;
|
||||
}
|
||||
//resolution
|
||||
for (int i = 0; i < (int)RESOLUTION_OPTIONS_NUM; ++i){
|
||||
auto resolution_rbtn = resolution_rbtns[i];
|
||||
auto rbtn_rect = resolution_rbtn->ClientToScreen(wxPoint(0, 0));
|
||||
if (mouse_pos.x > rbtn_rect.x && mouse_pos.y > rbtn_rect.y && mouse_pos.x < (rbtn_rect.x + resolution_rbtn->GetSize().x) && mouse_pos.y < (rbtn_rect.y + resolution_rbtn->GetSize().y)) {
|
||||
wxMouseEvent resolution_evt(wxEVT_LEFT_DOWN);
|
||||
resolution_rbtn->GetEventHandler()->ProcessEvent(resolution_evt);
|
||||
return;
|
||||
}
|
||||
auto resolution_txt = resolution_texts[i];
|
||||
auto txt_rect = resolution_txt->ClientToScreen(wxPoint(0, 0));
|
||||
if (mouse_pos.x > txt_rect.x && mouse_pos.y > txt_rect.y && mouse_pos.x < (txt_rect.x + resolution_txt->GetSize().x) && mouse_pos.y < (txt_rect.y + resolution_txt->GetSize().y)) {
|
||||
wxMouseEvent resolution_evt(wxEVT_LEFT_DOWN);
|
||||
resolution_txt->GetEventHandler()->ProcessEvent(resolution_evt);
|
||||
return;
|
||||
}
|
||||
}
|
||||
//hyper link
|
||||
auto h_rect = vcamera_guide_link->ClientToScreen(wxPoint(0, 0));
|
||||
if (mouse_pos.x > h_rect.x && mouse_pos.y > h_rect.y && mouse_pos.x < (h_rect.x + vcamera_guide_link->GetSize().x) && mouse_pos.y < (h_rect.y + vcamera_guide_link->GetSize().y)) {
|
||||
auto url = wxString::Format(L"https://wiki.bambulab.com/%s/software/bambu-studio/virtual-camera", L"en");
|
||||
wxLaunchDefaultBrowser(url);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CameraPopup::OnDismiss() {
|
||||
wxPopupTransientWindow::OnDismiss();
|
||||
}
|
||||
|
@ -106,6 +402,7 @@ bool CameraPopup::ProcessLeftDown(wxMouseEvent &event)
|
|||
{
|
||||
return wxPopupTransientWindow::ProcessLeftDown(event);
|
||||
}
|
||||
|
||||
bool CameraPopup::Show(bool show)
|
||||
{
|
||||
return wxPopupTransientWindow::Show(show);
|
||||
|
@ -131,18 +428,15 @@ void CameraPopup::OnMouse(wxMouseEvent &event)
|
|||
event.Skip();
|
||||
}
|
||||
|
||||
|
||||
CameraItem::CameraItem(wxWindow *parent,std::string off_normal, std::string on_normal, std::string off_hover, std::string on_hover)
|
||||
CameraItem::CameraItem(wxWindow *parent, std::string normal, std::string hover)
|
||||
: wxPanel(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize)
|
||||
{
|
||||
#ifdef __WINDOWS__
|
||||
SetDoubleBuffered(true);
|
||||
#endif //__WINDOWS__
|
||||
|
||||
m_bitmap_on_normal = ScalableBitmap(this, on_normal, 20);
|
||||
m_bitmap_off_normal = ScalableBitmap(this, off_normal, 20);
|
||||
m_bitmap_on_hover = ScalableBitmap(this, on_hover, 20);
|
||||
m_bitmap_off_hover = ScalableBitmap(this, off_hover, 20);
|
||||
m_bitmap_normal = ScalableBitmap(this, normal, 20);
|
||||
m_bitmap_hover = ScalableBitmap(this, hover, 20);
|
||||
|
||||
SetSize(wxSize(FromDIP(20), FromDIP(20)));
|
||||
SetMinSize(wxSize(FromDIP(20), FromDIP(20)));
|
||||
|
@ -156,12 +450,6 @@ CameraItem::~CameraItem() {}
|
|||
|
||||
void CameraItem::msw_rescale() {}
|
||||
|
||||
void CameraItem::set_switch(bool is_on)
|
||||
{
|
||||
m_on = is_on;
|
||||
Refresh();
|
||||
}
|
||||
|
||||
void CameraItem::on_enter_win(wxMouseEvent &evt)
|
||||
{
|
||||
m_hover = true;
|
||||
|
@ -206,20 +494,12 @@ void CameraItem::render(wxDC &dc)
|
|||
|
||||
void CameraItem::doRender(wxDC &dc)
|
||||
{
|
||||
if (m_on) {
|
||||
if (m_hover) {
|
||||
dc.DrawBitmap(m_bitmap_on_hover.bmp(), wxPoint((GetSize().x - m_bitmap_on_hover.GetBmpSize().x) / 2, (GetSize().y - m_bitmap_on_hover.GetBmpSize().y) / 2));
|
||||
} else {
|
||||
dc.DrawBitmap(m_bitmap_on_normal.bmp(), wxPoint((GetSize().x - m_bitmap_on_normal.GetBmpSize().x) / 2, (GetSize().y - m_bitmap_on_normal.GetBmpSize().y) / 2));
|
||||
}
|
||||
|
||||
if (m_hover) {
|
||||
dc.DrawBitmap(m_bitmap_hover.bmp(), wxPoint((GetSize().x - m_bitmap_hover.GetBmpSize().x) / 2, (GetSize().y - m_bitmap_hover.GetBmpSize().y) / 2));
|
||||
} else {
|
||||
if (m_hover) {
|
||||
dc.DrawBitmap(m_bitmap_off_hover.bmp(), wxPoint((GetSize().x - m_bitmap_off_hover.GetBmpSize().x) / 2, (GetSize().y - m_bitmap_off_hover.GetBmpSize().y) / 2));
|
||||
} else {
|
||||
dc.DrawBitmap(m_bitmap_off_normal.bmp(), wxPoint((GetSize().x - m_bitmap_off_normal.GetBmpSize().x) / 2, (GetSize().y - m_bitmap_off_normal.GetBmpSize().y) / 2));
|
||||
}
|
||||
dc.DrawBitmap(m_bitmap_normal.bmp(), wxPoint((GetSize().x - m_bitmap_normal.GetBmpSize().x) / 2, (GetSize().y - m_bitmap_normal.GetBmpSize().y) / 2));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
|
@ -10,11 +10,16 @@
|
|||
#include <wx/sizer.h>
|
||||
#include <wx/gbsizer.h>
|
||||
#include <wx/webrequest.h>
|
||||
#include <wx/hyperlink.h>
|
||||
#include "Widgets/SwitchButton.hpp"
|
||||
#include "Widgets/RadioBox.hpp"
|
||||
|
||||
namespace Slic3r {
|
||||
namespace GUI {
|
||||
|
||||
wxDECLARE_EVENT(EVT_VCAMERA_SWITCH, wxMouseEvent);
|
||||
wxDECLARE_EVENT(EVT_SDCARD_ABSENT_HINT, wxCommandEvent);
|
||||
|
||||
class CameraPopup : public wxPopupTransientWindow
|
||||
{
|
||||
public:
|
||||
|
@ -27,9 +32,31 @@ public:
|
|||
virtual bool ProcessLeftDown(wxMouseEvent &event) wxOVERRIDE;
|
||||
virtual bool Show(bool show = true) wxOVERRIDE;
|
||||
|
||||
void sync_vcamera_state(bool show_vcamera);
|
||||
void check_func_supported();
|
||||
void update();
|
||||
|
||||
enum CameraResolution
|
||||
{
|
||||
RESOLUTION_720P = 0,
|
||||
RESOLUTION_1080P = 1,
|
||||
RESOLUTION_OPTIONS_NUM = 2
|
||||
};
|
||||
|
||||
void rescale();
|
||||
|
||||
protected:
|
||||
void on_switch_timelapse(wxCommandEvent& event);
|
||||
void on_switch_recording(wxCommandEvent& event);
|
||||
void on_set_resolution();
|
||||
void sdcard_absent_hint();
|
||||
|
||||
wxWindow * create_item_radiobox(wxString title, wxWindow *parent, wxString tooltip, int padding_left);
|
||||
void select_curr_radiobox(int btn_idx, bool ui_change);
|
||||
void sync_resolution_setting(std::string resolution);
|
||||
void reset_resolution_setting();
|
||||
wxString to_resolution_label_string(CameraResolution resolution);
|
||||
std::string to_resolution_msg_string(CameraResolution resolution);
|
||||
|
||||
private:
|
||||
MachineObject* m_obj { nullptr };
|
||||
|
@ -37,12 +64,24 @@ private:
|
|||
SwitchButton* m_switch_recording;
|
||||
wxStaticText* m_text_timelapse;
|
||||
SwitchButton* m_switch_timelapse;
|
||||
wxStaticText* m_text_vcamera;
|
||||
SwitchButton* m_switch_vcamera;
|
||||
wxStaticText* m_text_resolution;
|
||||
wxWindow* m_resolution_options[RESOLUTION_OPTIONS_NUM];
|
||||
wxScrolledWindow *m_panel;
|
||||
wxBoxSizer* main_sizer;
|
||||
std::vector<RadioBox*> resolution_rbtns;
|
||||
std::vector<wxStaticText*> resolution_texts;
|
||||
CameraResolution curr_sel_resolution = RESOLUTION_1080P;
|
||||
wxHyperlinkCtrl* vcamera_guide_link { nullptr };
|
||||
bool is_vcamera_show = false;
|
||||
bool allow_alter_resolution = false;
|
||||
|
||||
void OnMouse(wxMouseEvent &event);
|
||||
void OnSize(wxSizeEvent &event);
|
||||
void OnSetFocus(wxFocusEvent &event);
|
||||
void OnKillFocus(wxFocusEvent &event);
|
||||
void OnLeftUp(wxMouseEvent& event);
|
||||
|
||||
private:
|
||||
wxDECLARE_ABSTRACT_CLASS(CameraPopup);
|
||||
|
@ -53,20 +92,15 @@ private:
|
|||
class CameraItem : public wxPanel
|
||||
{
|
||||
public:
|
||||
CameraItem(wxWindow *parent, std::string off_normal, std::string on_normal, std::string off_hover, std::string on_hover);
|
||||
CameraItem(wxWindow *parent, std::string normal, std::string hover);
|
||||
~CameraItem();
|
||||
|
||||
MachineObject *m_obj{nullptr};
|
||||
bool m_on{false};
|
||||
bool m_hover{false};
|
||||
ScalableBitmap m_bitmap_on_normal;
|
||||
ScalableBitmap m_bitmap_on_hover;
|
||||
ScalableBitmap m_bitmap_off_normal;
|
||||
ScalableBitmap m_bitmap_off_hover;
|
||||
ScalableBitmap m_bitmap_normal;
|
||||
ScalableBitmap m_bitmap_hover;
|
||||
|
||||
void msw_rescale();
|
||||
void set_switch(bool is_on);
|
||||
bool get_switch_status() { return m_on; };
|
||||
void on_enter_win(wxMouseEvent &evt);
|
||||
void on_level_win(wxMouseEvent &evt);
|
||||
void paintEvent(wxPaintEvent &evt);
|
||||
|
|
|
@ -1149,8 +1149,9 @@ void MachineObject::parse_status(int flag)
|
|||
else {
|
||||
ams_auto_switch_filament_flag = ((flag >> 10) & 0x1) != 0;
|
||||
}
|
||||
|
||||
sdcard_state = MachineObject::SdcardState((flag >> 8) & 0x11);
|
||||
}
|
||||
|
||||
|
||||
PrintingSpeedLevel MachineObject::_parse_printing_speed_lvl(int lvl)
|
||||
{
|
||||
|
@ -1173,7 +1174,12 @@ bool MachineObject::is_sdcard_printing()
|
|||
|
||||
bool MachineObject::has_sdcard()
|
||||
{
|
||||
return camera_has_sdcard;
|
||||
return (sdcard_state == MachineObject::SdcardState::HAS_SDCARD_NORMAL);
|
||||
}
|
||||
|
||||
MachineObject::SdcardState MachineObject::get_sdcard_state()
|
||||
{
|
||||
return sdcard_state;
|
||||
}
|
||||
|
||||
bool MachineObject::has_timelapse()
|
||||
|
@ -1608,6 +1614,16 @@ int MachineObject::command_ipcam_timelapse(bool on_off)
|
|||
return this->publish_json(j.dump());
|
||||
}
|
||||
|
||||
int MachineObject::command_ipcam_resolution_set(std::string resolution)
|
||||
{
|
||||
json j;
|
||||
j["camera"]["command"] = "ipcam_resolution_set";
|
||||
j["camera"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++);
|
||||
j["camera"]["resolution"] = resolution;
|
||||
BOOST_LOG_TRIVIAL(info) << "command:ipcam_resolution_set" << ", resolution:" << resolution;
|
||||
return this->publish_json(j.dump());
|
||||
}
|
||||
|
||||
int MachineObject::command_xcam_control(std::string module_name, bool on_off, std::string lvl)
|
||||
{
|
||||
json j;
|
||||
|
@ -1620,8 +1636,7 @@ int MachineObject::command_xcam_control(std::string module_name, bool on_off, st
|
|||
if (!lvl.empty()) {
|
||||
j["xcam"]["halt_print_sensitivity"] = lvl;
|
||||
}
|
||||
BOOST_LOG_TRIVIAL(info) << "command:xcam_control_set" << ", sequence_id:" << std::to_string(MachineObject::m_sequence_id)<<
|
||||
", module_name:" << module_name << ", control:" << on_off << ", halt_print_sensitivity:" << lvl;
|
||||
BOOST_LOG_TRIVIAL(info) << "command:xcam_control_set" << ", module_name:" << module_name << ", control:" << on_off << ", halt_print_sensitivity:" << lvl;
|
||||
return this->publish_json(j.dump());
|
||||
}
|
||||
|
||||
|
@ -1753,6 +1768,7 @@ void MachineObject::reset()
|
|||
camera_recording = false;
|
||||
camera_recording_when_printing = false;
|
||||
camera_timelapse = false;
|
||||
camera_resolution = "";
|
||||
printing_speed_mag = 100;
|
||||
gcode_file_prepare_percent = 0;
|
||||
iot_print_status = "";
|
||||
|
@ -1889,12 +1905,20 @@ bool MachineObject::is_function_supported(PrinterFunction func)
|
|||
case FUNC_USE_AMS:
|
||||
func_name = "FUNC_USE_AMS";
|
||||
break;
|
||||
case FUNC_ALTER_RESOLUTION:
|
||||
func_name = "FUNC_ALTER_RESOLUTION";
|
||||
break;
|
||||
default:
|
||||
return true;
|
||||
}
|
||||
return DeviceManager::is_function_supported(printer_type, func_name);
|
||||
}
|
||||
|
||||
std::vector<std::string> MachineObject::get_resolution_supported()
|
||||
{
|
||||
return DeviceManager::get_resolution_supported(printer_type);
|
||||
}
|
||||
|
||||
bool MachineObject::is_support_print_with_timelapse()
|
||||
{
|
||||
//TODO version check, set true by default
|
||||
|
@ -2239,10 +2263,13 @@ int MachineObject::parse_json(std::string payload)
|
|||
// media
|
||||
try {
|
||||
if (jj.contains("sdcard")) {
|
||||
camera_has_sdcard = jj["sdcard"].get<bool>();
|
||||
if (jj["sdcard"].get<bool>())
|
||||
sdcard_state = MachineObject::SdcardState::HAS_SDCARD_NORMAL;
|
||||
else
|
||||
sdcard_state = MachineObject::SdcardState::NO_SDCARD;
|
||||
} else {
|
||||
//do not check sdcard if no sdcard field
|
||||
camera_has_sdcard = false;
|
||||
sdcard_state = MachineObject::SdcardState::NO_SDCARD;
|
||||
}
|
||||
}
|
||||
catch (...) {
|
||||
|
@ -2367,6 +2394,9 @@ int MachineObject::parse_json(std::string payload)
|
|||
has_ipcam = false;
|
||||
}
|
||||
}
|
||||
if (jj["ipcam"].contains("resolution")) {
|
||||
camera_resolution = jj["ipcam"]["resolution"].get<std::string>();
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (...) {
|
||||
|
@ -2831,6 +2861,8 @@ int MachineObject::parse_json(std::string payload)
|
|||
this->camera_recording_when_printing = true;
|
||||
if (j["camera"]["control"].get<std::string>() == "disable")
|
||||
this->camera_recording_when_printing = false;
|
||||
} else if (j["camera"]["command"].get<std::string>() == "ipcam_resolution_set") {
|
||||
this->camera_resolution = j["camera"]["resolution"].get<std::string>();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -3524,6 +3556,22 @@ bool DeviceManager::is_function_supported(std::string type_str, std::string func
|
|||
return true;
|
||||
}
|
||||
|
||||
std::vector<std::string> DeviceManager::get_resolution_supported(std::string type_str)
|
||||
{
|
||||
std::vector<std::string> resolution_supported;
|
||||
if (DeviceManager::function_table.contains("printers")) {
|
||||
for (auto printer : DeviceManager::function_table["printers"]) {
|
||||
if (printer.contains("model_id") && printer["model_id"].get<std::string>() == type_str) {
|
||||
if (printer.contains("camera_resolution")) {
|
||||
for (auto res : printer["camera_resolution"])
|
||||
resolution_supported.emplace_back(res.get<std::string>());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return resolution_supported;
|
||||
}
|
||||
|
||||
bool DeviceManager::load_functional_config(std::string config_file)
|
||||
{
|
||||
std::ifstream json_file(config_file.c_str());
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
#include "libslic3r/ProjectTask.hpp"
|
||||
#include "slic3r/Utils/json_diff.hpp"
|
||||
#include "slic3r/Utils/NetworkAgent.hpp"
|
||||
#include "CameraPopup.hpp"
|
||||
|
||||
#define USE_LOCAL_SOCKET_BIND 0
|
||||
|
||||
|
@ -74,6 +75,7 @@ enum PrinterFunction {
|
|||
FUNC_PRINT_WITHOUT_SD,
|
||||
FUNC_VIRTUAL_CAMERA,
|
||||
FUNC_USE_AMS,
|
||||
FUNC_ALTER_RESOLUTION,
|
||||
FUNC_MAX
|
||||
};
|
||||
|
||||
|
@ -346,6 +348,13 @@ public:
|
|||
std::string sw_new_ver;
|
||||
};
|
||||
|
||||
enum SdcardState {
|
||||
NO_SDCARD = 0,
|
||||
HAS_SDCARD_NORMAL = 1,
|
||||
HAS_SDCARD_ABNORMAL = 2,
|
||||
SDCARD_STATE_NUM = 3
|
||||
};
|
||||
|
||||
/* static members and functions */
|
||||
static inline int m_sequence_id = 20000;
|
||||
static std::string parse_printer_type(std::string type_str);
|
||||
|
@ -530,7 +539,7 @@ public:
|
|||
bool camera_recording { false };
|
||||
bool camera_recording_when_printing { false };
|
||||
bool camera_timelapse { false };
|
||||
bool camera_has_sdcard { false };
|
||||
std::string camera_resolution = "";
|
||||
bool xcam_first_layer_inspector { false };
|
||||
int xcam_first_layer_hold_count = 0;
|
||||
|
||||
|
@ -543,6 +552,10 @@ public:
|
|||
int xcam_auto_recovery_hold_count = 0;
|
||||
int ams_print_option_count = 0;
|
||||
|
||||
/* sdcard */
|
||||
MachineObject::SdcardState sdcard_state { NO_SDCARD };
|
||||
MachineObject::SdcardState get_sdcard_state();
|
||||
|
||||
/* HMS */
|
||||
std::vector<HMSItem> hms_list;
|
||||
|
||||
|
@ -626,6 +639,7 @@ public:
|
|||
// camera control
|
||||
int command_ipcam_record(bool on_off);
|
||||
int command_ipcam_timelapse(bool on_off);
|
||||
int command_ipcam_resolution_set(std::string resolution);
|
||||
int command_xcam_control(std::string module_name, bool on_off, std::string lvl = "");
|
||||
int command_xcam_control_ai_monitoring(bool on_off, std::string lvl);
|
||||
int command_xcam_control_first_layer_inspector(bool on_off, bool print_halt);
|
||||
|
@ -655,6 +669,7 @@ public:
|
|||
bool is_online() { return m_is_online; }
|
||||
bool is_info_ready();
|
||||
bool is_function_supported(PrinterFunction func);
|
||||
std::vector<std::string> get_resolution_supported();
|
||||
bool is_support_print_with_timelapse();
|
||||
|
||||
|
||||
|
@ -724,6 +739,7 @@ public:
|
|||
static std::string parse_printer_type(std::string type_str);
|
||||
static std::string get_printer_display_name(std::string type_str);
|
||||
static bool is_function_supported(std::string type_str, std::string function_name);
|
||||
static std::vector<std::string> get_resolution_supported(std::string type_str);
|
||||
|
||||
static bool load_functional_config(std::string config_file);
|
||||
};
|
||||
|
|
|
@ -273,7 +273,7 @@ void MediaPlayCtrl::ToggleStream()
|
|||
std::string file_ff_cfg = data_dir() + "/cameratools/ffmpeg.cfg";
|
||||
#endif
|
||||
if (!boost::filesystem::exists(file_source) || !boost::filesystem::exists(file_ffmpeg) || !boost::filesystem::exists(file_ff_cfg)) {
|
||||
auto res = MessageDialog(this, _L("Virtual Camera Tools is required for this task!\nDo you want to install them?"), _L("Error"),
|
||||
auto res = MessageDialog(this, _L("Virtual Camera Tools is required for this task!\nDo you want to install them?"), _L("Info"),
|
||||
wxOK | wxCANCEL).ShowModal();
|
||||
if (res == wxID_OK) {
|
||||
// download tools
|
||||
|
@ -345,18 +345,6 @@ void MediaPlayCtrl::ToggleStream()
|
|||
file.write(url2.c_str(), url2.size());
|
||||
file.close();
|
||||
m_streaming = true;
|
||||
if (wxGetApp().app_config->get("not_show_vcamera_wiki") != "1") {
|
||||
MessageDialog dlg(this, _L("Virtual camera is started.\nPress 'OK' to navigate the guide page of 'Streaming video of Bambu Printer'."), _L("Information"),
|
||||
wxOK | wxCANCEL | wxICON_INFORMATION);
|
||||
dlg.show_dsa_button();
|
||||
auto res = dlg.ShowModal();
|
||||
if (dlg.get_checkbox_state())
|
||||
wxGetApp().app_config->set("not_show_vcamera_wiki", "1");
|
||||
if (res == wxID_OK) {
|
||||
auto url = wxString::Format(L"https://wiki.bambulab.com/%s/software/bambu-studio/virtual-camera", L"en");
|
||||
wxLaunchDefaultBrowser(url);
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
|
|
@ -1690,7 +1690,7 @@ bool SelectMachineDialog::has_tips(MachineObject* obj)
|
|||
// must set to a status if return true
|
||||
if (select_timelapse->IsShown() &&
|
||||
m_checkbox_list["timelapse"]->GetValue()) {
|
||||
if (!obj->has_sdcard()) {
|
||||
if (obj->get_sdcard_state() == MachineObject::SdcardState::NO_SDCARD) {
|
||||
show_status(PrintDialogStatus::PrintStatusTimelapseNoSdcard);
|
||||
return true;
|
||||
}
|
||||
|
@ -2518,14 +2518,14 @@ void SelectMachineDialog::update_show_status()
|
|||
show_status(PrintDialogStatus::PrintStatusInPrinting);
|
||||
return;
|
||||
}
|
||||
else if (!obj_->is_function_supported(PrinterFunction::FUNC_PRINT_WITHOUT_SD) && !obj_->has_sdcard()) {
|
||||
else if (!obj_->is_function_supported(PrinterFunction::FUNC_PRINT_WITHOUT_SD) && (obj_->get_sdcard_state() == MachineObject::SdcardState::NO_SDCARD)) {
|
||||
show_status(PrintDialogStatus::PrintStatusNoSdcard);
|
||||
return;
|
||||
}
|
||||
|
||||
// check sdcard when if lan mode printer
|
||||
if (obj_->is_lan_mode_printer()) {
|
||||
if (!obj_->has_sdcard()) {
|
||||
if (obj_->get_sdcard_state() == MachineObject::SdcardState::NO_SDCARD) {
|
||||
show_status(PrintDialogStatus::PrintStatusLanModeNoSdcard);
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -904,7 +904,7 @@ void SendToPrinterDialog::update_show_status()
|
|||
// check sdcard when if lan mode printer
|
||||
/* if (obj_->is_lan_mode_printer()) {
|
||||
}*/
|
||||
if (!obj_->has_sdcard()) {
|
||||
if (obj_->get_sdcard_state() == MachineObject::SdcardState::NO_SDCARD) {
|
||||
show_status(PrintDialogStatus::PrintStatusNoSdcard);
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -186,7 +186,10 @@ void StatusBasePanel::init_bitmaps()
|
|||
m_bitmap_extruder_empty_unload = *cache.load_png("monitor_extruder_empty_unload", FromDIP(28), FromDIP(70), false, false);
|
||||
m_bitmap_extruder_filled_unload = *cache.load_png("monitor_extruder_filled_unload", FromDIP(28), FromDIP(70), false, false);
|
||||
m_bitmap_sdcard_state_on = create_scaled_bitmap("sdcard_state_on", nullptr, 20);
|
||||
m_bitmap_sdcard_state_off = create_scaled_bitmap("sdcard_state_off", nullptr, 20);
|
||||
m_bitmap_sdcard_state_abnormal = create_scaled_bitmap("sdcard_state_abnormal", nullptr, 20);
|
||||
m_bitmap_recording = create_scaled_bitmap("recording", nullptr, 20);
|
||||
m_bitmap_timelapse = create_scaled_bitmap("timelapse", nullptr, 20);
|
||||
m_bitmap_vcamera = create_scaled_bitmap("vcamera", nullptr, 20);
|
||||
}
|
||||
|
||||
wxBoxSizer *StatusBasePanel::create_monitoring_page()
|
||||
|
@ -223,33 +226,42 @@ wxBoxSizer *StatusBasePanel::create_monitoring_page()
|
|||
//m_bitmap_camera_img->SetMinSize(wxSize(FromDIP(32), FromDIP(18)));
|
||||
//bSizer_monitoring_title->Add(m_bitmap_camera_img, 0, wxALIGN_CENTER_VERTICAL | wxALL, FromDIP(5));
|
||||
|
||||
m_bitmap_sdcard_off_img = new wxStaticBitmap(m_panel_monitoring_title, wxID_ANY, m_bitmap_sdcard_state_off, wxDefaultPosition, wxSize(FromDIP(38), FromDIP(24)), 0);
|
||||
m_bitmap_sdcard_off_img->SetMinSize(wxSize(FromDIP(38), FromDIP(24)));
|
||||
m_bitmap_sdcard_abnormal_img = new wxStaticBitmap(m_panel_monitoring_title, wxID_ANY, m_bitmap_sdcard_state_abnormal, wxDefaultPosition, wxSize(FromDIP(38), FromDIP(24)), 0);
|
||||
m_bitmap_sdcard_abnormal_img->SetMinSize(wxSize(FromDIP(38), FromDIP(24)));
|
||||
m_bitmap_sdcard_on_img = new wxStaticBitmap(m_panel_monitoring_title, wxID_ANY, m_bitmap_sdcard_state_on, wxDefaultPosition, wxSize(FromDIP(38), FromDIP(24)), 0);
|
||||
m_bitmap_sdcard_on_img->SetMinSize(wxSize(FromDIP(38), FromDIP(24)));
|
||||
m_bitmap_sdcard_on_img->Hide();
|
||||
m_bitmap_sdcard_abnormal_img->Hide();
|
||||
|
||||
m_timelapse_button = new CameraItem(m_panel_monitoring_title, "timelapse_off_normal", "timelapse_on_normal", "timelapse_off_hover", "timelapse_on_hover");
|
||||
m_timelapse_button->SetMinSize(wxSize(FromDIP(38), FromDIP(24)));
|
||||
m_timelapse_button->SetBackgroundColour(STATUS_TITLE_BG);
|
||||
m_bitmap_timelapse_img = new wxStaticBitmap(m_panel_monitoring_title, wxID_ANY, m_bitmap_timelapse, wxDefaultPosition, wxSize(FromDIP(38), FromDIP(24)), 0);
|
||||
m_bitmap_timelapse_img->SetMinSize(wxSize(FromDIP(38), FromDIP(24)));
|
||||
m_bitmap_timelapse_img->Hide();
|
||||
|
||||
m_recording_button = new CameraItem(m_panel_monitoring_title, "recording_off_normal", "recording_on_normal", "recording_off_hover", "recording_on_hover");
|
||||
m_recording_button->SetMinSize(wxSize(FromDIP(38), FromDIP(24)));
|
||||
m_recording_button->SetBackgroundColour(STATUS_TITLE_BG);
|
||||
m_bitmap_recording_img = new wxStaticBitmap(m_panel_monitoring_title, wxID_ANY, m_bitmap_recording, wxDefaultPosition, wxSize(FromDIP(38), FromDIP(24)), 0);
|
||||
m_bitmap_recording_img->SetMinSize(wxSize(FromDIP(38), FromDIP(24)));
|
||||
m_bitmap_timelapse_img->Hide();
|
||||
|
||||
m_vcamera_button = new CameraItem(m_panel_monitoring_title, "vcamera_off_normal", "vcamera_on_normal", "vcamera_off_hover", "vcamera_on_hover");
|
||||
m_vcamera_button->SetMinSize(wxSize(FromDIP(38), FromDIP(24)));
|
||||
m_vcamera_button->SetBackgroundColour(STATUS_TITLE_BG);
|
||||
m_bitmap_vcamera_img = new wxStaticBitmap(m_panel_monitoring_title, wxID_ANY, m_bitmap_vcamera, wxDefaultPosition, wxSize(FromDIP(38), FromDIP(24)), 0);
|
||||
m_bitmap_vcamera_img->SetMinSize(wxSize(FromDIP(38), FromDIP(24)));
|
||||
m_bitmap_vcamera_img->Hide();
|
||||
|
||||
m_timelapse_button->SetToolTip(_L("Timelapse"));
|
||||
m_recording_button->SetToolTip(_L("Video"));
|
||||
m_vcamera_button->SetToolTip(_L("Virtual Camera"));
|
||||
m_setting_button = new CameraItem(m_panel_monitoring_title, "camera_setting", "camera_setting_hover");
|
||||
m_setting_button->SetMinSize(wxSize(FromDIP(38), FromDIP(24)));
|
||||
m_setting_button->SetBackgroundColour(STATUS_TITLE_BG);
|
||||
|
||||
bSizer_monitoring_title->Add(m_bitmap_sdcard_off_img, 0, wxALIGN_CENTER_VERTICAL | wxALL, FromDIP(5));
|
||||
m_bitmap_sdcard_on_img->SetToolTip(_L("SD Card"));
|
||||
m_bitmap_sdcard_abnormal_img->SetToolTip(_L("SD Card Abnormal"));
|
||||
m_bitmap_timelapse_img->SetToolTip(_L("Timelapse"));
|
||||
m_bitmap_recording_img->SetToolTip(_L("Video"));
|
||||
m_bitmap_vcamera_img->SetToolTip(_L("Virtual Camera"));
|
||||
m_setting_button->SetToolTip(_L("Camera Setting"));
|
||||
|
||||
bSizer_monitoring_title->Add(m_bitmap_sdcard_abnormal_img, 0, wxALIGN_CENTER_VERTICAL | wxALL, FromDIP(5));
|
||||
bSizer_monitoring_title->Add(m_bitmap_sdcard_on_img, 0, wxALIGN_CENTER_VERTICAL | wxALL, FromDIP(5));
|
||||
bSizer_monitoring_title->Add(m_timelapse_button, 0, wxALIGN_CENTER_VERTICAL | wxALL, FromDIP(5));
|
||||
bSizer_monitoring_title->Add(m_recording_button, 0, wxALIGN_CENTER_VERTICAL | wxALL, FromDIP(5));
|
||||
bSizer_monitoring_title->Add(m_vcamera_button, 0, wxALIGN_CENTER_VERTICAL | wxALL, FromDIP(5));
|
||||
bSizer_monitoring_title->Add(m_bitmap_timelapse_img, 0, wxALIGN_CENTER_VERTICAL | wxALL, FromDIP(5));
|
||||
bSizer_monitoring_title->Add(m_bitmap_recording_img, 0, wxALIGN_CENTER_VERTICAL | wxALL, FromDIP(5));
|
||||
bSizer_monitoring_title->Add(m_bitmap_vcamera_img, 0, wxALIGN_CENTER_VERTICAL | wxALL, FromDIP(5));
|
||||
bSizer_monitoring_title->Add(m_setting_button, 0, wxALIGN_CENTER_VERTICAL | wxALL, FromDIP(5));
|
||||
|
||||
bSizer_monitoring_title->Add(FromDIP(13), 0, 0);
|
||||
|
||||
|
@ -1027,39 +1039,46 @@ void StatusBasePanel::show_ams_group(bool show)
|
|||
m_show_ams_group = show;
|
||||
}
|
||||
|
||||
void StatusBasePanel::upodate_camera_state(bool recording, bool timelapse, bool has_sdcard)
|
||||
void StatusPanel::update_img_status(wxStaticBitmap* img, bool on_off)
|
||||
{
|
||||
if (on_off)
|
||||
img->Show();
|
||||
else
|
||||
img->Hide();
|
||||
}
|
||||
|
||||
void StatusPanel::update_camera_state(bool recording, bool timelapse, MachineObject::SdcardState sdcard_state)
|
||||
{
|
||||
//sdcard
|
||||
/* if (has_sdcard && !m_bitmap_sdcard_img->IsShown()) {
|
||||
m_bitmap_sdcard_img->Show();
|
||||
m_panel_monitoring_title->Layout();
|
||||
switch (sdcard_state) {
|
||||
case MachineObject::SdcardState::NO_SDCARD:
|
||||
m_bitmap_sdcard_on_img->Hide();
|
||||
m_bitmap_sdcard_abnormal_img->Hide();
|
||||
break;
|
||||
case MachineObject::SdcardState::HAS_SDCARD_NORMAL:
|
||||
m_bitmap_sdcard_on_img->Show();
|
||||
m_bitmap_sdcard_abnormal_img->Hide();
|
||||
break;
|
||||
case MachineObject::SdcardState::HAS_SDCARD_ABNORMAL:
|
||||
m_bitmap_sdcard_on_img->Hide();
|
||||
m_bitmap_sdcard_abnormal_img->Show();
|
||||
break;
|
||||
default:
|
||||
;
|
||||
}
|
||||
if (!has_sdcard && m_bitmap_sdcard_img->IsShown()) {
|
||||
m_bitmap_sdcard_img->Hide();
|
||||
m_panel_monitoring_title->Layout();
|
||||
}*/
|
||||
|
||||
if (has_sdcard) {
|
||||
if (m_bitmap_sdcard_off_img->IsShown()) {
|
||||
m_bitmap_sdcard_on_img->Show();
|
||||
m_bitmap_sdcard_off_img->Hide();
|
||||
m_panel_monitoring_title->Layout();
|
||||
}
|
||||
} else {
|
||||
if (m_bitmap_sdcard_on_img->IsShown()) {
|
||||
m_bitmap_sdcard_on_img->Hide();
|
||||
m_bitmap_sdcard_off_img->Show();
|
||||
m_panel_monitoring_title->Layout();
|
||||
}
|
||||
}
|
||||
|
||||
//recording
|
||||
m_recording_button->set_switch(recording);
|
||||
m_vcamera_button->set_switch(m_media_play_ctrl->IsStreaming());
|
||||
|
||||
//recording
|
||||
update_img_status(m_bitmap_recording_img, recording);
|
||||
//timelapse
|
||||
m_timelapse_button->set_switch(timelapse);
|
||||
update_img_status(m_bitmap_timelapse_img, timelapse);
|
||||
//vcamera
|
||||
update_img_status(m_bitmap_vcamera_img, m_media_play_ctrl->IsStreaming());
|
||||
show_vcamera = m_media_play_ctrl->IsStreaming();
|
||||
//camera setting
|
||||
if (m_camera_popup) {
|
||||
m_camera_popup->update();
|
||||
m_camera_popup->sync_vcamera_state(show_vcamera);
|
||||
}
|
||||
m_panel_monitoring_title->Layout();
|
||||
}
|
||||
|
||||
StatusPanel::StatusPanel(wxWindow *parent, wxWindowID id, const wxPoint &pos, const wxSize &size, long style, const wxString &name)
|
||||
|
@ -1110,10 +1129,8 @@ StatusPanel::StatusPanel(wxWindow *parent, wxWindowID id, const wxPoint &pos, co
|
|||
// Connect Events
|
||||
//m_bitmap_thumbnail->Connect(wxEVT_ENTER_WINDOW, wxMouseEventHandler(StatusPanel::on_thumbnail_enter), NULL, this);
|
||||
//m_bitmap_thumbnail->Connect(wxEVT_LEAVE_WINDOW, wxMouseEventHandler(StatusPanel::on_thumbnail_leave), NULL, this);
|
||||
m_recording_button->Connect(wxEVT_LEFT_DOWN, wxMouseEventHandler(StatusPanel::on_switch_recording), NULL, this);
|
||||
m_vcamera_button->Connect(wxEVT_LEFT_DOWN, wxMouseEventHandler(StatusPanel::on_switch_vcamera), NULL, this);
|
||||
m_setting_button->Connect(wxEVT_LEFT_DOWN, wxMouseEventHandler(StatusPanel::on_camera_enter), NULL, this);
|
||||
m_project_task_panel->Connect(wxEVT_LEAVE_WINDOW, wxMouseEventHandler(StatusPanel::on_thumbnail_leave), NULL, this);
|
||||
|
||||
m_button_pause_resume->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(StatusPanel::on_subtask_pause_resume), NULL, this);
|
||||
m_button_abort->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(StatusPanel::on_subtask_abort), NULL, this);
|
||||
m_button_clean->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(StatusPanel::on_print_error_clean), NULL, this);
|
||||
|
@ -1151,8 +1168,7 @@ StatusPanel::~StatusPanel()
|
|||
// Disconnect Events
|
||||
//m_bitmap_thumbnail->Disconnect(wxEVT_ENTER_WINDOW, wxMouseEventHandler(StatusPanel::on_thumbnail_enter), NULL, this);
|
||||
//m_bitmap_thumbnail->Disconnect(wxEVT_LEAVE_WINDOW, wxMouseEventHandler(StatusPanel::on_thumbnail_leave), NULL, this);
|
||||
m_recording_button->Disconnect(wxEVT_LEFT_DOWN, wxMouseEventHandler(StatusPanel::on_switch_recording), NULL, this);
|
||||
m_vcamera_button->Disconnect(wxEVT_LEFT_DOWN, wxMouseEventHandler(StatusPanel::on_switch_vcamera), NULL, this);
|
||||
m_setting_button->Disconnect(wxEVT_LEFT_DOWN, wxMouseEventHandler(StatusPanel::on_camera_enter), NULL, this);
|
||||
m_button_pause_resume->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(StatusPanel::on_subtask_pause_resume), NULL, this);
|
||||
m_button_abort->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(StatusPanel::on_subtask_abort), NULL, this);
|
||||
m_button_clean->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(StatusPanel::on_print_error_clean), NULL, this);
|
||||
|
@ -1181,6 +1197,9 @@ StatusPanel::~StatusPanel()
|
|||
|
||||
if (abort_dlg != nullptr)
|
||||
delete abort_dlg;
|
||||
|
||||
if (sdcard_hint_dlg != nullptr)
|
||||
delete sdcard_hint_dlg;
|
||||
}
|
||||
|
||||
void StatusPanel::init_scaled_buttons()
|
||||
|
@ -1388,24 +1407,6 @@ void StatusPanel::update(MachineObject *obj)
|
|||
m_options_btn->Hide();
|
||||
}
|
||||
|
||||
if (obj->is_function_supported(PrinterFunction::FUNC_TIMELAPSE)) {
|
||||
m_timelapse_button->Show();
|
||||
} else {
|
||||
m_timelapse_button->Hide();
|
||||
}
|
||||
|
||||
if (obj->is_function_supported(PrinterFunction::FUNC_RECORDING) || obj->has_ipcam) {
|
||||
m_recording_button->Show();
|
||||
} else {
|
||||
m_recording_button->Hide();
|
||||
}
|
||||
|
||||
if (obj->is_function_supported(PrinterFunction::FUNC_VIRTUAL_CAMERA) && obj->has_ipcam) {
|
||||
m_vcamera_button->Show();
|
||||
} else {
|
||||
m_vcamera_button->Hide();
|
||||
}
|
||||
|
||||
if (obj->is_function_supported(PrinterFunction::FUNC_CHAMBER_TEMP)) {
|
||||
m_tempCtrl_frame->Enable();
|
||||
} else {
|
||||
|
@ -1417,7 +1418,8 @@ void StatusPanel::update(MachineObject *obj)
|
|||
update_error_message();
|
||||
}
|
||||
|
||||
upodate_camera_state(obj->is_recording_enable(), obj->has_timelapse(), obj->has_sdcard());
|
||||
update_camera_state(obj->is_recording_enable(), obj->has_timelapse(), obj->get_sdcard_state());
|
||||
|
||||
m_machine_ctrl_panel->Thaw();
|
||||
}
|
||||
|
||||
|
@ -2552,25 +2554,30 @@ void StatusPanel::on_thumbnail_leave(wxMouseEvent &event)
|
|||
}
|
||||
}
|
||||
|
||||
void StatusPanel::on_switch_recording(wxMouseEvent &event)
|
||||
{
|
||||
if (!obj) return;
|
||||
bool value = m_recording_button->get_switch_status();
|
||||
obj->command_ipcam_record(!value);
|
||||
}
|
||||
|
||||
void StatusPanel::on_switch_vcamera(wxMouseEvent &event)
|
||||
{
|
||||
//if (!obj) return;
|
||||
//bool value = m_recording_button->get_switch_status();
|
||||
//obj->command_ipcam_record(!value);
|
||||
m_media_play_ctrl->ToggleStream();
|
||||
show_vcamera = m_media_play_ctrl->IsStreaming();
|
||||
if (m_camera_popup)
|
||||
m_camera_popup->sync_vcamera_state(show_vcamera);
|
||||
}
|
||||
|
||||
void StatusPanel::on_camera_enter(wxMouseEvent& event)
|
||||
{
|
||||
if (obj) {
|
||||
m_camera_popup = std::make_shared<CameraPopup>(this, obj);
|
||||
m_camera_popup->sync_vcamera_state(show_vcamera);
|
||||
m_camera_popup->Bind(EVT_VCAMERA_SWITCH, &StatusPanel::on_switch_vcamera, this);
|
||||
m_camera_popup->Bind(EVT_SDCARD_ABSENT_HINT, [this](wxCommandEvent &e) {
|
||||
if (sdcard_hint_dlg == nullptr) {
|
||||
sdcard_hint_dlg = new SecondaryCheckDialog(this->GetParent(), wxID_ANY, _L("Warning"), SecondaryCheckDialog::ButtonStyle::ONLY_CONFIRM);
|
||||
sdcard_hint_dlg->update_text(_L("Can't start this without SD card."));
|
||||
}
|
||||
sdcard_hint_dlg->on_show();
|
||||
});
|
||||
wxWindow* ctrl = (wxWindow*)event.GetEventObject();
|
||||
wxPoint pos = ctrl->ClientToScreen(wxPoint(0, 0));
|
||||
wxSize sz = ctrl->GetSize();
|
||||
|
@ -2654,9 +2661,10 @@ void StatusPanel::set_default()
|
|||
m_show_ams_group = false;
|
||||
reset_printing_values();
|
||||
|
||||
m_timelapse_button->Show();
|
||||
m_recording_button->Show();
|
||||
m_vcamera_button->Show();
|
||||
m_bitmap_timelapse_img->Hide();
|
||||
m_bitmap_recording_img->Hide();
|
||||
m_bitmap_vcamera_img->Hide();
|
||||
m_setting_button->Show();
|
||||
m_tempCtrl_frame->Show();
|
||||
m_options_btn->Show();
|
||||
|
||||
|
@ -2730,10 +2738,11 @@ void StatusPanel::msw_rescale()
|
|||
//m_bitmap_camera_img->SetBitmap(m_bitmap_camera);
|
||||
//m_bitmap_camera_img->SetMinSize(wxSize(FromDIP(32), FromDIP(18)));
|
||||
|
||||
m_timelapse_button->SetMinSize(wxSize(38, 24));
|
||||
m_recording_button->SetMinSize(wxSize(38, 24));
|
||||
m_vcamera_button->SetMinSize(wxSize(38, 24));
|
||||
m_bitmap_sdcard_off_img->SetMinSize(wxSize(FromDIP(38), FromDIP(24)));
|
||||
m_bitmap_timelapse_img->SetMinSize(wxSize(38, 24));
|
||||
m_bitmap_recording_img->SetMinSize(wxSize(38, 24));
|
||||
m_bitmap_vcamera_img->SetMinSize(wxSize(38, 24));
|
||||
m_setting_button->SetMinSize(wxSize(38, 24));
|
||||
m_bitmap_sdcard_abnormal_img->SetMinSize(wxSize(FromDIP(38), FromDIP(24)));
|
||||
m_bitmap_sdcard_on_img->SetMinSize(wxSize(FromDIP(38), FromDIP(24)));
|
||||
|
||||
m_bpButton_xy->Rescale();
|
||||
|
|
|
@ -90,13 +90,14 @@ protected:
|
|||
CameraTimelapseStatus m_state_timelapse{CameraTimelapseStatus::TIMELAPSE_NONE};
|
||||
|
||||
|
||||
CameraItem *m_timelapse_button;
|
||||
CameraItem *m_recording_button;
|
||||
CameraItem *m_vcamera_button;
|
||||
CameraItem *m_setting_button;
|
||||
|
||||
wxBitmap m_bitmap_camera;
|
||||
wxBitmap m_bitmap_sdcard_state_on;
|
||||
wxBitmap m_bitmap_sdcard_state_off;
|
||||
wxBitmap m_bitmap_sdcard_state_abnormal;
|
||||
wxBitmap m_bitmap_recording;
|
||||
wxBitmap m_bitmap_timelapse;
|
||||
wxBitmap m_bitmap_vcamera;
|
||||
|
||||
/* title panel */
|
||||
wxPanel * media_ctrl_panel;
|
||||
|
@ -112,8 +113,10 @@ protected:
|
|||
|
||||
wxStaticBitmap *m_bitmap_camera_img;
|
||||
wxStaticBitmap *m_bitmap_recording_img;
|
||||
wxStaticBitmap *m_bitmap_timelapse_img;
|
||||
wxStaticBitmap* m_bitmap_vcamera_img;
|
||||
wxStaticBitmap *m_bitmap_sdcard_on_img;
|
||||
wxStaticBitmap *m_bitmap_sdcard_off_img;
|
||||
wxStaticBitmap *m_bitmap_sdcard_abnormal_img;
|
||||
wxStaticBitmap *m_bitmap_static_use_time;
|
||||
wxStaticBitmap *m_bitmap_static_use_weight;
|
||||
|
||||
|
@ -239,7 +242,6 @@ public:
|
|||
wxBoxSizer *create_settings_group(wxWindow *parent);
|
||||
|
||||
void show_ams_group(bool show = true);
|
||||
void upodate_camera_state(bool recording, bool timelapse, bool has_sdcard);
|
||||
};
|
||||
|
||||
|
||||
|
@ -259,6 +261,7 @@ protected:
|
|||
AMSMaterialsSetting *m_filament_setting_dlg{nullptr};
|
||||
SecondaryCheckDialog* m_print_error_dlg = nullptr;
|
||||
SecondaryCheckDialog* abort_dlg = nullptr;
|
||||
SecondaryCheckDialog* sdcard_hint_dlg = nullptr;
|
||||
|
||||
wxString m_request_url;
|
||||
bool m_start_loading_thumbnail = false;
|
||||
|
@ -323,7 +326,6 @@ protected:
|
|||
void on_nozzle_fan_switch(wxCommandEvent &event);
|
||||
void on_thumbnail_enter(wxMouseEvent &event);
|
||||
void on_thumbnail_leave(wxMouseEvent &event);
|
||||
void on_switch_recording(wxMouseEvent &event);
|
||||
void on_switch_vcamera(wxMouseEvent &event);
|
||||
void on_camera_enter(wxMouseEvent &event);
|
||||
void on_camera_leave(wxMouseEvent& event);
|
||||
|
@ -355,6 +357,11 @@ protected:
|
|||
void on_webrequest_state(wxWebRequestEvent &evt);
|
||||
bool is_task_changed(MachineObject* obj);
|
||||
|
||||
/* camera */
|
||||
void update_camera_state(bool recording, bool timelapse, MachineObject::SdcardState sdcard_state);
|
||||
void update_img_status(wxStaticBitmap* img, bool on_off);
|
||||
bool show_vcamera = false;
|
||||
|
||||
public:
|
||||
StatusPanel(wxWindow * parent,
|
||||
wxWindowID id = wxID_ANY,
|
||||
|
|