Merge pull request 'Global Toolbar' (#284) from dan/ui:toolbar into master
the build was successful
Details
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0V0z"/><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 3c1.66 0 3 1.34 3 3s-1.34 3-3 3-3-1.34-3-3 1.34-3 3-3zm0 14.2c-2.5 0-4.71-1.28-6-3.22.03-1.99 4-3.08 6-3.08 1.99 0 5.97 1.09 6 3.08-1.29 1.94-3.5 3.22-6 3.22z"/></svg>
|
After Width: | Height: | Size: 367 B |
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zM7.07 18.28c.43-.9 3.05-1.78 4.93-1.78s4.51.88 4.93 1.78C15.57 19.36 13.86 20 12 20s-3.57-.64-4.93-1.72zm11.29-1.45c-1.43-1.74-4.9-2.33-6.36-2.33s-4.93.59-6.36 2.33C4.62 15.49 4 13.82 4 12c0-4.41 3.59-8 8-8s8 3.59 8 8c0 1.82-.62 3.49-1.64 4.83zM12 6c-1.94 0-3.5 1.56-3.5 3.5S10.06 13 12 13s3.5-1.56 3.5-3.5S13.94 6 12 6zm0 5c-.83 0-1.5-.67-1.5-1.5S11.17 8 12 8s1.5.67 1.5 1.5S12.83 11 12 11z"/></svg>
|
After Width: | Height: | Size: 597 B |
|
@ -0,0 +1,20 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Generator: Adobe Illustrator 24.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
|
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
|
viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
|
||||||
|
<style type="text/css">
|
||||||
|
.st0{fill:none;}
|
||||||
|
</style>
|
||||||
|
<path class="st0" d="M0,0h24v24H0V0z"/>
|
||||||
|
<g>
|
||||||
|
<circle class="st0" cx="12" cy="9.5" r="1.5"/>
|
||||||
|
<path class="st0" d="M12,4c-4.4,0-8,3.6-8,8c0,1.8,0.6,3.5,1.6,4.8c1.4-1.7,4.9-2.3,6.4-2.3s4.9,0.6,6.4,2.3c1-1.3,1.6-3,1.6-4.8
|
||||||
|
C20,7.6,16.4,4,12,4z M12,13c-1.9,0-3.5-1.6-3.5-3.5S10.1,6,12,6s3.5,1.6,3.5,3.5S13.9,13,12,13z"/>
|
||||||
|
<path class="st0" d="M12,16.5c-1.9,0-4.5,0.9-4.9,1.8C8.4,19.4,10.1,20,12,20s3.6-0.6,4.9-1.7C16.5,17.4,13.9,16.5,12,16.5z"/>
|
||||||
|
<path d="M12,6c-1.9,0-3.5,1.6-3.5,3.5S10.1,13,12,13s3.5-1.6,3.5-3.5S13.9,6,12,6z M12,11c-0.8,0-1.5-0.7-1.5-1.5S11.2,8,12,8
|
||||||
|
s1.5,0.7,1.5,1.5S12.8,11,12,11z"/>
|
||||||
|
<path d="M12,3.4c-4.7,0-8.6,3.8-8.6,8.6c0,4.7,3.8,8.6,8.6,8.6c4.7,0,8.6-3.8,8.6-8.6C20.6,7.3,16.7,3.4,12,3.4z M12,20
|
||||||
|
c-1.9,0-3.6-0.6-4.9-1.7c0.4-0.9,3-1.8,4.9-1.8s4.5,0.9,4.9,1.8C15.6,19.4,13.9,20,12,20z M12,14.5c-1.5,0-4.9,0.6-6.4,2.3
|
||||||
|
c-1-1.3-1.6-3-1.6-4.8c0-4.4,3.6-8,8-8s8,3.6,8,8c0,1.8-0.6,3.5-1.6,4.8C16.9,15.1,13.5,14.5,12,14.5z"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.3 KiB |
|
@ -0,0 +1,23 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Generator: Adobe Illustrator 24.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
|
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
|
viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
|
||||||
|
<style type="text/css">
|
||||||
|
.st0{fill:none;}
|
||||||
|
.st1{fill:#FF0000;}
|
||||||
|
</style>
|
||||||
|
<g>
|
||||||
|
<path class="st0" d="M5.6,16.8C5.6,16.8,5.6,16.8,5.6,16.8c1.5-1.7,4.9-2.3,6.4-2.3C10.5,14.5,7.1,15.1,5.6,16.8z"/>
|
||||||
|
<circle class="st0" cx="12" cy="9.5" r="1.5"/>
|
||||||
|
<path class="st0" d="M12,16.5c-1.9,0-4.4,0.9-4.9,1.8c1.3,1.1,3,1.7,4.9,1.7s3.5-0.6,4.9-1.7C16.4,17.4,13.9,16.5,12,16.5z"/>
|
||||||
|
<path d="M12,6c-1.9,0-3.5,1.6-3.5,3.5S10.1,13,12,13s3.5-1.6,3.5-3.5S13.9,6,12,6z M12,11c-0.8,0-1.5-0.7-1.5-1.5S11.2,8,12,8
|
||||||
|
s1.5,0.7,1.5,1.5S12.8,11,12,11z"/>
|
||||||
|
<path d="M12,11c0.8,0,1.5-0.7,1.5-1.5C13.5,10.3,12.8,11,12,11z"/>
|
||||||
|
<path d="M10.5,9.5c0,0.8,0.7,1.5,1.5,1.5C11.2,11,10.5,10.3,10.5,9.5z"/>
|
||||||
|
<path d="M12,8c0.8,0,1.5,0.7,1.5,1.5C13.5,8.7,12.8,8,12,8z"/>
|
||||||
|
<path d="M12,8c-0.8,0-1.5,0.7-1.5,1.5C10.5,8.7,11.2,8,12,8z"/>
|
||||||
|
<path d="M5.6,16.8c0.4,0.6,0.9,1.1,1.5,1.5c0.4-0.9,3-1.8,4.9-1.8c1.9,0,4.4,0.9,4.9,1.8c0.6-0.4,1.1-0.9,1.5-1.5
|
||||||
|
c-1.5-1.7-4.9-2.3-6.4-2.3S7.2,15.1,5.6,16.8z"/>
|
||||||
|
<path class="st1" d="M5.6,16.8C5.6,16.8,5.6,16.8,5.6,16.8C5.6,16.8,5.6,16.8,5.6,16.8C5.6,16.8,5.6,16.8,5.6,16.8z"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.4 KiB |
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0V0z"/><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm5 11h-4v4h-2v-4H7v-2h4V7h2v4h4v2z"/></svg>
|
After Width: | Height: | Size: 240 B |
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M16.5 6v11.5c0 2.21-1.79 4-4 4s-4-1.79-4-4V5c0-1.38 1.12-2.5 2.5-2.5s2.5 1.12 2.5 2.5v10.5c0 .55-.45 1-1 1s-1-.45-1-1V6H10v9.5c0 1.38 1.12 2.5 2.5 2.5s2.5-1.12 2.5-2.5V5c0-2.21-1.79-4-4-4S7 2.79 7 5v12.5c0 3.04 2.46 5.5 5.5 5.5s5.5-2.46 5.5-5.5V6h-1.5z"/></svg>
|
After Width: | Height: | Size: 353 B |
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zM4 12c0-4.42 3.58-8 8-8 1.85 0 3.55.63 4.9 1.69L5.69 16.9C4.63 15.55 4 13.85 4 12zm8 8c-1.85 0-3.55-.63-4.9-1.69L18.31 7.1C19.37 8.45 20 10.15 20 12c0 4.42-3.58 8-8 8z"/></svg>
|
After Width: | Height: | Size: 373 B |
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41L9 16.17z"/></svg>
|
After Width: | Height: | Size: 197 B |
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0V0z"/><path d="M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12l4.58-4.59z"/></svg>
|
After Width: | Height: | Size: 195 B |
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z"/></svg>
|
After Width: | Height: | Size: 249 B |
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M6 21h12V7H6v14zM19 4h-3.5l-1-1h-5l-1 1H5v2h14V4z"/></svg>
|
After Width: | Height: | Size: 189 B |
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M9 16.2L4.8 12l-1.4 1.4L9 19 21 7l-1.4-1.4L9 16.2z"/></svg>
|
After Width: | Height: | Size: 190 B |
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M11 18c0 1.1-.9 2-2 2s-2-.9-2-2 .9-2 2-2 2 .9 2 2zm-2-8c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0-6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm6 4c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"/></svg>
|
After Width: | Height: | Size: 431 B |
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0V0z"/><path d="M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25zM21.41 6.34l-3.75-3.75-2.53 2.54 3.75 3.75 2.53-2.54z"/></svg>
|
After Width: | Height: | Size: 240 B |
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0V0z"/><path d="M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z"/></svg>
|
After Width: | Height: | Size: 314 B |
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0V0z"/><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z"/></svg>
|
After Width: | Height: | Size: 236 B |
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="none"><path d="M0 0h24v24H0V0z"/><path opacity=".87" d="M0 0h24v24H0V0z"/></g><path d="M20 8h-3V6.21c0-2.61-1.91-4.94-4.51-5.19C9.51.74 7 3.08 7 6v2H4v14h16V8zm-8 9c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zM9 8V6c0-1.66 1.34-3 3-3s3 1.34 3 3v2H9z"/></svg>
|
After Width: | Height: | Size: 349 B |
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0V0z"/><path d="M20 8h-3V6.21c0-2.61-1.91-4.94-4.51-5.19C9.51.74 7 3.08 7 6h2c0-1.13.6-2.24 1.64-2.7C12.85 2.31 15 3.9 15 6v2H4v14h16V8zm-2 12H6V10h12v10zm-6-3c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2z"/></svg>
|
After Width: | Height: | Size: 327 B |
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M3 18h18v-2H3v2zm0-5h18v-2H3v2zm0-7v2h18V6H3z"/></svg>
|
After Width: | Height: | Size: 185 B |
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0V0z"/><path d="M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8zm3.5-9c.83 0 1.5-.67 1.5-1.5S16.33 8 15.5 8 14 8.67 14 9.5s.67 1.5 1.5 1.5zm-7 0c.83 0 1.5-.67 1.5-1.5S9.33 8 8.5 8 7 8.67 7 9.5 7.67 11 8.5 11zm3.5 6.5c2.33 0 4.31-1.46 5.11-3.5H6.89c.8 2.04 2.78 3.5 5.11 3.5z"/></svg>
|
After Width: | Height: | Size: 493 B |
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M12 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"/></svg>
|
After Width: | Height: | Size: 285 B |
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"/></svg>
|
After Width: | Height: | Size: 374 B |
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0V0z"/><path d="M2.01 21L23 12 2.01 3 2 10l15 2-15 2 .01 7z"/></svg>
|
After Width: | Height: | Size: 183 B |
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0V0z"/><path d="M2 22h20V2L2 22z"/></svg>
|
After Width: | Height: | Size: 156 B |
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0V0z"/><path d="M20 18h2v-8h-2v8zm0 4h2v-2h-2v2zM2 22h16V8h4V2L2 22z"/></svg>
|
After Width: | Height: | Size: 192 B |
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0V0z"/><path d="M21 1l-8.31 8.31 8.31 8.3zM4.91 4.36L3.5 5.77l6.36 6.37L1 21h17.73l2 2 1.41-1.41z"/></svg>
|
After Width: | Height: | Size: 221 B |
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M.01 0h24v24h-24V0z" fill="none"/><path d="M12 4V1L8 5l4 4V6c3.31 0 6 2.69 6 6 0 1.01-.25 1.97-.7 2.8l1.46 1.46C19.54 15.03 20 13.57 20 12c0-4.42-3.58-8-8-8zm0 14c-3.31 0-6-2.69-6-6 0-1.01.25-1.97.7-2.8L5.24 7.74C4.46 8.97 4 10.43 4 12c0 4.42 3.58 8 8 8v3l4-4-4-4v3z"/></svg>
|
After Width: | Height: | Size: 367 B |
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0V0zm0 0h24v24H0V0z" fill="none"/><path d="M10 6.35V4.26c-.66.17-1.29.43-1.88.75l1.5 1.5c.13-.05.25-.11.38-.16zM20 12c0-2.21-.91-4.2-2.36-5.64L20 4h-6v6l2.24-2.24C17.32 8.85 18 10.34 18 12c0 .85-.19 1.65-.51 2.38l1.5 1.5C19.63 14.74 20 13.41 20 12zM4.27 4L2.86 5.41l2.36 2.36C4.45 8.99 4 10.44 4 12c0 2.21.91 4.2 2.36 5.64L4 20h6v-6l-2.24 2.24C6.68 15.15 6 13.66 6 12c0-1 .25-1.94.68-2.77l8.08 8.08c-.25.13-.5.24-.76.34v2.09c.8-.21 1.55-.54 2.23-.96l2.58 2.58 1.41-1.41L4.27 4z"/></svg>
|
After Width: | Height: | Size: 589 B |
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M3 12c0 2.21.91 4.2 2.36 5.64L3 20h6v-6l-2.24 2.24C5.68 15.15 5 13.66 5 12c0-2.61 1.67-4.83 4-5.65V4.26C5.55 5.15 3 8.27 3 12zm8 5h2v-2h-2v2zM21 4h-6v6l2.24-2.24C18.32 8.85 19 10.34 19 12c0 2.61-1.67 4.83-4 5.65v2.09c3.45-.89 6-4.01 6-7.74 0-2.21-.91-4.2-2.36-5.64L21 4zm-10 9h2V7h-2v6z"/></svg>
|
After Width: | Height: | Size: 426 B |
|
@ -0,0 +1 @@
|
||||||
|
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 400 400"><title>syncing</title><path d="M200,64a136,136,0,1,1-96.17,39.83A135.14,135.14,0,0,1,200,64m0-41A177,177,0,1,0,377,200,177,177,0,0,0,200,23Z"/><polygon points="177.25 285.49 95.25 203.5 124.25 174.5 177.25 227.51 275.75 129 304.75 158 177.25 285.49"/></svg>
|
After Width: | Height: | Size: 352 B |
|
@ -0,0 +1 @@
|
||||||
|
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 400 400"><title>syncing</title><path d="M200,377.5c-97.87,0-177.5-79.63-177.5-177.5S102.13,22.5,200,22.5v41C124.73,63.5,63.5,124.73,63.5,200S124.73,336.5,200,336.5Z"/><path d="M217.37,64.59A139.55,139.55,0,0,0,200,63.5v-41a179.92,179.92,0,0,1,22.53,1.42Z"/><path d="M267.58,364.18,252,326.27a136.44,136.44,0,0,0,30.94-17.82L307.83,341A177.32,177.32,0,0,1,267.58,364.18Zm73.11-55.95-32.48-25a136.09,136.09,0,0,0,17.91-30.9L364,268A177.33,177.33,0,0,1,340.69,308.23ZM376,223.14l-40.65-5.3a139,139,0,0,0,0-35.76L376,176.75A180.23,180.23,0,0,1,377.5,200,178.41,178.41,0,0,1,376,223.14Zm-49.91-75.53a136.37,136.37,0,0,0-17.92-30.88l32.47-25A177.54,177.54,0,0,1,364,131.86ZM282.85,91.5a136.72,136.72,0,0,0-31-17.8l15.6-37.92a177.75,177.75,0,0,1,40.27,23.16Z"/><path d="M200,377.5v-41a139.43,139.43,0,0,0,17.37-1.09l5.16,40.67A179.92,179.92,0,0,1,200,377.5Z"/><rect x="177.5" y="112.5" width="45" height="114"/><rect x="177.5" y="253.5" width="45" height="34"/></svg>
|
After Width: | Height: | Size: 1.0 KiB |
|
@ -0,0 +1 @@
|
||||||
|
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 400 400"><title>syncing</title><rect x="179.5" y="112.5" width="41" height="114"/><rect x="179.5" y="253.5" width="41" height="34"/><path d="M200,377.5a179.92,179.92,0,0,1-22.53-1.42l5.16-40.67A139.43,139.43,0,0,0,200,336.5Z"/><path d="M132.52,364.22a177.53,177.53,0,0,1-40.27-23.16l24.91-32.56a136.59,136.59,0,0,0,31,17.8ZM59.36,308.3a177.92,177.92,0,0,1-23.31-40.16l37.86-15.76a136.22,136.22,0,0,0,17.92,30.89ZM24,223.25a179.57,179.57,0,0,1,0-46.4l40.65,5.31a139.05,139.05,0,0,0,0,35.77Zm49.87-75.56L36,132a177.48,177.48,0,0,1,23.3-40.19l32.48,25A135.88,135.88,0,0,0,73.88,147.69ZM117.1,91.55,92.17,59a177.44,177.44,0,0,1,40.25-23.17L148,73.73A136.44,136.44,0,0,0,117.1,91.55Z"/><path d="M182.63,64.59l-5.16-40.67A179.92,179.92,0,0,1,200,22.5v41A139.55,139.55,0,0,0,182.63,64.59Z"/><path d="M217.37,64.59A139.55,139.55,0,0,0,200,63.5v-41a179.92,179.92,0,0,1,22.53,1.42Z"/><path d="M267.58,364.18,252,326.27a136.44,136.44,0,0,0,30.94-17.82L307.83,341A177.32,177.32,0,0,1,267.58,364.18Zm73.11-55.95-32.48-25a136.09,136.09,0,0,0,17.91-30.9L364,268A177.11,177.11,0,0,1,340.69,308.23ZM376,223.14l-40.65-5.3a139,139,0,0,0,0-35.76L376,176.75A180.23,180.23,0,0,1,377.5,200,178.41,178.41,0,0,1,376,223.14Zm-49.91-75.53a136.37,136.37,0,0,0-17.92-30.88l32.47-25A177.54,177.54,0,0,1,364,131.86ZM282.85,91.5a136.72,136.72,0,0,0-31-17.8l15.6-37.92a177.75,177.75,0,0,1,40.27,23.16Z"/><path d="M200,377.5v-41a139.43,139.43,0,0,0,17.37-1.09l5.16,40.67A179.92,179.92,0,0,1,200,377.5Z"/></svg>
|
After Width: | Height: | Size: 1.5 KiB |
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M17 7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h10c2.76 0 5-2.24 5-5s-2.24-5-5-5zm0 8c-1.66 0-3-1.34-3-3s1.34-3 3-3 3 1.34 3 3-1.34 3-3 3z"/></svg>
|
After Width: | Height: | Size: 266 B |
|
@ -46,14 +46,16 @@ func processFile(filename string) {
|
||||||
indentCount := 0
|
indentCount := 0
|
||||||
inMultiLineComment := false
|
inMultiLineComment := false
|
||||||
|
|
||||||
for _, line := range lines {
|
for ln, line := range lines {
|
||||||
|
|
||||||
singleCommentPos := strings.Index(line, "//")
|
singleCommentPos := strings.Index(line, "//")
|
||||||
multiLineCommentStartPos := strings.Index(line, "/*")
|
multiLineCommentStartPos := strings.Index(line, "/*")
|
||||||
multiLineCommentEndPos := strings.Index(line, "*/")
|
multiLineCommentEndPos := strings.Index(line, "*/")
|
||||||
|
|
||||||
|
openPos := strings.Index(line, "{")
|
||||||
closePos := strings.Index(line, "}")
|
closePos := strings.Index(line, "}")
|
||||||
if !inMultiLineComment && closePos > -1 && (singleCommentPos == -1 || closePos < singleCommentPos) &&
|
|
||||||
|
if !inMultiLineComment && closePos > -1 && (openPos == -1 || openPos > closePos) && (singleCommentPos == -1 || closePos < singleCommentPos) &&
|
||||||
(multiLineCommentStartPos == -1 || closePos < multiLineCommentStartPos) &&
|
(multiLineCommentStartPos == -1 || closePos < multiLineCommentStartPos) &&
|
||||||
(multiLineCommentEndPos == -1 || closePos > multiLineCommentEndPos) {
|
(multiLineCommentEndPos == -1 || closePos > multiLineCommentEndPos) {
|
||||||
indentCount--
|
indentCount--
|
||||||
|
@ -63,11 +65,14 @@ func processFile(filename string) {
|
||||||
if trimedLine == "" {
|
if trimedLine == "" {
|
||||||
file.Write([]byte("\n"))
|
file.Write([]byte("\n"))
|
||||||
} else {
|
} else {
|
||||||
|
if indentCount < 0 {
|
||||||
|
log.Fatalf("indent Count negative in %v at line %v\n", filename, ln)
|
||||||
|
}
|
||||||
|
|
||||||
file.Write([]byte(strings.Repeat(indent, indentCount) + trimedLine + "\n"))
|
file.Write([]byte(strings.Repeat(indent, indentCount) + trimedLine + "\n"))
|
||||||
}
|
}
|
||||||
|
|
||||||
openPos := strings.Index(line, "{")
|
if !inMultiLineComment && openPos > -1 && (closePos == -1 || openPos > closePos) && (singleCommentPos == -1 || openPos < singleCommentPos) &&
|
||||||
if !inMultiLineComment && openPos > -1 && (singleCommentPos == -1 || openPos < singleCommentPos) &&
|
|
||||||
(multiLineCommentStartPos == -1 || openPos < multiLineCommentStartPos) &&
|
(multiLineCommentStartPos == -1 || openPos < multiLineCommentStartPos) &&
|
||||||
(multiLineCommentEndPos == -1 || openPos > multiLineCommentEndPos) {
|
(multiLineCommentEndPos == -1 || openPos > multiLineCommentEndPos) {
|
||||||
indentCount++
|
indentCount++
|
||||||
|
|
|
@ -95,7 +95,6 @@ func profilePicRelativize(filename string) string {
|
||||||
|
|
||||||
// getProfilePic returns a string path to an image to display for hte given peer/group id
|
// getProfilePic returns a string path to an image to display for hte given peer/group id
|
||||||
func getProfilePic(id string) string {
|
func getProfilePic(id string) string {
|
||||||
log.Debugf("getProfilePic for %v\n", id)
|
|
||||||
if isGroup(id) {
|
if isGroup(id) {
|
||||||
if picVal, exists := the.Peer.GetGroupAttribute(id, attr.GetLocalScope(constants.Picture)); exists {
|
if picVal, exists := the.Peer.GetGroupAttribute(id, attr.GetLocalScope(constants.Picture)); exists {
|
||||||
pic, err := StringToImage(picVal)
|
pic, err := StringToImage(picVal)
|
||||||
|
|
6
main.go
|
@ -59,9 +59,13 @@ func main() {
|
||||||
if buildVer == "" {
|
if buildVer == "" {
|
||||||
log.SetLevel(log.LevelDebug)
|
log.SetLevel(log.LevelDebug)
|
||||||
}
|
}
|
||||||
//log.ExcludeFromPattern("connection/connection")
|
log.ExcludeFromPattern("connection/connection")
|
||||||
//log.ExcludeFromPattern("outbound/3dhauthchannel")
|
//log.ExcludeFromPattern("outbound/3dhauthchannel")
|
||||||
//log.AddNothingExceptFilter("event/eventmanager")
|
//log.AddNothingExceptFilter("event/eventmanager")
|
||||||
|
log.ExcludeFromPattern("service.go")
|
||||||
|
log.ExcludeFromPattern("tor/BaseOnionService.go")
|
||||||
|
log.ExcludeFromPattern("applications/auth.go")
|
||||||
|
log.ExcludeFromPattern("connections/engine.go")
|
||||||
|
|
||||||
if os.Getenv("CWTCH_FOLDER") != "" {
|
if os.Getenv("CWTCH_FOLDER") != "" {
|
||||||
the.CwtchDir = os.Getenv("CWTCH_FOLDER")
|
the.CwtchDir = os.Getenv("CWTCH_FOLDER")
|
||||||
|
|
1
qml.qrc
|
@ -33,7 +33,6 @@
|
||||||
<file>qml/widgets/ProfileList.qml</file>
|
<file>qml/widgets/ProfileList.qml</file>
|
||||||
<file>qml/widgets/RadioButton.qml</file>
|
<file>qml/widgets/RadioButton.qml</file>
|
||||||
<file>qml/widgets/Button.qml</file>
|
<file>qml/widgets/Button.qml</file>
|
||||||
<file>qml/widgets/StackToolbar.qml</file>
|
|
||||||
<file>qml/widgets/TextField.qml</file>
|
<file>qml/widgets/TextField.qml</file>
|
||||||
<file>qml/widgets/controls/Loader.qml</file>
|
<file>qml/widgets/controls/Loader.qml</file>
|
||||||
<file>qml/widgets/controls/Variables.qml</file>
|
<file>qml/widgets/controls/Variables.qml</file>
|
||||||
|
|
84
qml/main.qml
|
@ -81,10 +81,28 @@ ApplicationWindow {
|
||||||
return px * 72 / (Screen.pixelDensity * 25.4)
|
return px * 72 / (Screen.pixelDensity * 25.4)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Toolbar {
|
||||||
|
id: toolbar
|
||||||
|
onBack: { backFn() }
|
||||||
|
|
||||||
|
onRightMenu: {
|
||||||
|
if (gcd.selectedConversation.length == 32) {
|
||||||
|
theStack.pane = theStack.groupProfilePane
|
||||||
|
gcd.requestGroupSettings(gcd.selectedConversation)
|
||||||
|
} else {
|
||||||
|
theStack.pane = theStack.userProfilePane
|
||||||
|
gcd.requestPeerSettings()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
StackLayout {
|
StackLayout {
|
||||||
id: parentStack
|
id: parentStack
|
||||||
currentIndex: 1
|
currentIndex: 1
|
||||||
anchors.fill: parent
|
anchors.right: parent.right
|
||||||
|
anchors.left: parent.left
|
||||||
|
anchors.bottom: parent.bottom
|
||||||
|
anchors.top: toolbar.bottom
|
||||||
|
|
||||||
readonly property int splashPane: 0
|
readonly property int splashPane: 0
|
||||||
readonly property int managementPane: 1
|
readonly property int managementPane: 1
|
||||||
|
@ -168,13 +186,9 @@ ApplicationWindow {
|
||||||
readonly property int groupProfilePane: 4
|
readonly property int groupProfilePane: 4
|
||||||
readonly property int addGroupPane: 5
|
readonly property int addGroupPane: 5
|
||||||
|
|
||||||
property string title
|
|
||||||
|
|
||||||
|
|
||||||
Item { anchors.fill: parent } // empty
|
Item { anchors.fill: parent } // empty
|
||||||
|
|
||||||
OverlayPane { // messagePane
|
OverlayPane { // messagePane
|
||||||
title: theStack.title
|
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -185,6 +199,15 @@ ApplicationWindow {
|
||||||
GroupSettingsPane{ anchors.fill: parent }
|
GroupSettingsPane{ anchors.fill: parent }
|
||||||
|
|
||||||
AddGroupPane { anchors.fill: parent }
|
AddGroupPane { anchors.fill: parent }
|
||||||
|
|
||||||
|
onCurrentIndexChanged: {
|
||||||
|
if (currentIndex == emptyPane) {
|
||||||
|
toolbar.hideTitle()
|
||||||
|
toolbar.rightMenuVisible = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
onWidthChanged: {toolbar.titleWidth = width}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -193,8 +216,52 @@ ApplicationWindow {
|
||||||
Keys.onPressed: {
|
Keys.onPressed: {
|
||||||
if (event.key == Qt.Key_Back) {
|
if (event.key == Qt.Key_Back) {
|
||||||
event.accepted = true
|
event.accepted = true
|
||||||
if (theStack.currentIndex == theStack.emptyPane) {
|
backFn()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
onCurrentIndexChanged : updateToolbar()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
function updateToolbar() {
|
||||||
|
toolbar.hideTitle()
|
||||||
|
toolbar.rightMenuVisible = false
|
||||||
|
if (currentIndex == splashPane) {
|
||||||
|
toolbar.visible = false
|
||||||
|
} else {
|
||||||
|
toolbar.visible = true
|
||||||
|
if (currentIndex == managementPane) {
|
||||||
|
toolbar.color = Theme.backgroundMainColor
|
||||||
|
toolbar.leftMenuVisible = true
|
||||||
|
toolbar.backVisible = false
|
||||||
|
} else {
|
||||||
|
toolbar.leftMenuVisible = false
|
||||||
|
toolbar.backVisible = true
|
||||||
|
|
||||||
|
if (currentIndex == addEditProfilePane) {
|
||||||
|
toolbar.color = Theme.backgroundPaneColor
|
||||||
|
} else if (currentIndex == profilePane) {
|
||||||
|
toolbar.color = Theme.backgroundPaneColor
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Component.onCompleted: updateToolbar()
|
||||||
|
}
|
||||||
|
|
||||||
|
function backFn() {
|
||||||
|
if (parentStack.currentIndex == parentStack.managementPane) {
|
||||||
androidCwtchActivity.rootHomeButtonHandle()
|
androidCwtchActivity.rootHomeButtonHandle()
|
||||||
|
} else if (parentStack.currentIndex != parentStack.profilePane) {
|
||||||
|
parentStack.currentIndex = parentStack.managementPane
|
||||||
|
} else {
|
||||||
|
if (theStack.currentIndex == theStack.emptyPane) {
|
||||||
|
gcd.selectedProfile = "none"
|
||||||
|
gcd.reloadProfileList()
|
||||||
|
parentStack.pane = parentStack.managementPane
|
||||||
} else if (theStack.currentIndex == theStack.userProfilePane || theStack.currentIndex == theStack.groupProfilePane) {
|
} else if (theStack.currentIndex == theStack.userProfilePane || theStack.currentIndex == theStack.groupProfilePane) {
|
||||||
theStack.currentIndex = theStack.messagePane
|
theStack.currentIndex = theStack.messagePane
|
||||||
} else {
|
} else {
|
||||||
|
@ -202,7 +269,6 @@ ApplicationWindow {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
PropertyAnimation { id: anmPopup; easing.type: Easing.InQuart; duration: 7000; target: popup; property: "opacity"; to: 0; }
|
PropertyAnimation { id: anmPopup; easing.type: Easing.InQuart; duration: 7000; target: popup; property: "opacity"; to: 0; }
|
||||||
|
|
||||||
|
@ -239,10 +305,6 @@ PropertyAnimation { id: anmPopup; easing.type: Easing.InQuart; duration: 7000; t
|
||||||
anmPopup.restart()
|
anmPopup.restart()
|
||||||
}
|
}
|
||||||
|
|
||||||
onSetToolbarTitle: function(str) {
|
|
||||||
theStack.title = str
|
|
||||||
}
|
|
||||||
|
|
||||||
onLoaded: function() {
|
onLoaded: function() {
|
||||||
parentStack.pane = parentStack.managementPane
|
parentStack.pane = parentStack.managementPane
|
||||||
splashPane.running = false
|
splashPane.running = false
|
||||||
|
|
|
@ -13,19 +13,8 @@ ColumnLayout { // settingsPane
|
||||||
id: root
|
id: root
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
|
|
||||||
|
|
||||||
Widgets.StackToolbar {
|
|
||||||
id: stb
|
|
||||||
text: qsTr("create-group-title")
|
|
||||||
aux.visible: false
|
|
||||||
membership.visible: false
|
|
||||||
}
|
|
||||||
|
|
||||||
Flickable {
|
Flickable {
|
||||||
anchors.top: stb.bottom
|
anchors.fill: parent
|
||||||
anchors.left: parent.left
|
|
||||||
anchors.right: parent.right
|
|
||||||
anchors.bottom: parent.bottom
|
|
||||||
boundsBehavior: Flickable.StopAtBounds
|
boundsBehavior: Flickable.StopAtBounds
|
||||||
clip:true
|
clip:true
|
||||||
contentWidth: tehcol.width
|
contentWidth: tehcol.width
|
||||||
|
|
|
@ -16,17 +16,8 @@ ColumnLayout { // groupSettingsPane
|
||||||
property string groupID
|
property string groupID
|
||||||
property variant addrbook
|
property variant addrbook
|
||||||
|
|
||||||
Widgets.StackToolbar {
|
|
||||||
id: toolbar
|
|
||||||
aux.visible: false
|
|
||||||
back.onClicked: theStack.pane = theStack.messagePane
|
|
||||||
}
|
|
||||||
|
|
||||||
Flickable {
|
Flickable {
|
||||||
anchors.top: toolbar.bottom
|
anchors.fill: parent
|
||||||
anchors.left: parent.left
|
|
||||||
anchors.right: parent.right
|
|
||||||
anchors.bottom: parent.bottom
|
|
||||||
boundsBehavior: Flickable.StopAtBounds
|
boundsBehavior: Flickable.StopAtBounds
|
||||||
clip:true
|
clip:true
|
||||||
contentWidth: tehcol.width
|
contentWidth: tehcol.width
|
||||||
|
@ -136,7 +127,6 @@ ColumnLayout { // groupSettingsPane
|
||||||
|
|
||||||
onSupplyGroupSettings: function(gid, name, server, invite, accepted, addrbooknames, addrbookaddrs) {
|
onSupplyGroupSettings: function(gid, name, server, invite, accepted, addrbooknames, addrbookaddrs) {
|
||||||
gsp.groupID = gid
|
gsp.groupID = gid
|
||||||
toolbar.text = name
|
|
||||||
txtGroupName.text = name
|
txtGroupName.text = name
|
||||||
txtServer.text = server
|
txtServer.text = server
|
||||||
txtInvitation.text = invite
|
txtInvitation.text = invite
|
||||||
|
|
|
@ -9,32 +9,11 @@ import "../overlays"
|
||||||
|
|
||||||
ColumnLayout {
|
ColumnLayout {
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
property alias title: toolbar.text
|
|
||||||
id: overlay
|
id: overlay
|
||||||
property string name
|
property string name
|
||||||
property bool accepted
|
property bool accepted
|
||||||
property bool inGroup
|
property bool inGroup
|
||||||
|
|
||||||
|
|
||||||
Widgets.StackToolbar {
|
|
||||||
id: toolbar
|
|
||||||
|
|
||||||
membership.visible: gcd.selectedConversation.length == 32
|
|
||||||
|
|
||||||
membership.onClicked: overlayStack.overlay = overlayStack.membershipOverlay
|
|
||||||
|
|
||||||
aux.onClicked: {
|
|
||||||
if (gcd.selectedConversation.length == 32) {
|
|
||||||
theStack.pane = theStack.groupProfilePane
|
|
||||||
gcd.requestGroupSettings(gcd.selectedConversation)
|
|
||||||
} else {
|
|
||||||
theStack.pane = theStack.userProfilePane
|
|
||||||
gcd.requestPeerSettings()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
back.visible: true
|
|
||||||
}
|
|
||||||
|
|
||||||
RowLayout {
|
RowLayout {
|
||||||
visible:!overlay.accepted && (gcd.selectedConversation.length == 32)
|
visible:!overlay.accepted && (gcd.selectedConversation.length == 32)
|
||||||
|
|
||||||
|
|
|
@ -16,20 +16,8 @@ Column { // peerSettingsPane
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
property bool blocked
|
property bool blocked
|
||||||
|
|
||||||
|
|
||||||
Widgets.StackToolbar {
|
|
||||||
id: toolbar
|
|
||||||
aux.visible: false
|
|
||||||
|
|
||||||
|
|
||||||
back.onClicked: theStack.pane = theStack.messagePane
|
|
||||||
}
|
|
||||||
|
|
||||||
Flickable {
|
Flickable {
|
||||||
anchors.top: toolbar.bottom
|
anchors.fill: parent
|
||||||
anchors.left: parent.left
|
|
||||||
anchors.right: parent.right
|
|
||||||
anchors.bottom: parent.bottom
|
|
||||||
boundsBehavior: Flickable.StopAtBounds
|
boundsBehavior: Flickable.StopAtBounds
|
||||||
clip:true
|
clip:true
|
||||||
contentWidth: tehcol.width
|
contentWidth: tehcol.width
|
||||||
|
@ -152,7 +140,6 @@ Column { // peerSettingsPane
|
||||||
target: gcd
|
target: gcd
|
||||||
|
|
||||||
onSupplyPeerSettings: function(onion, nick, blocked) {
|
onSupplyPeerSettings: function(onion, nick, blocked) {
|
||||||
toolbar.text = nick
|
|
||||||
txtOnion.text = onion
|
txtOnion.text = onion
|
||||||
txtDisplayName.text = nick
|
txtDisplayName.text = nick
|
||||||
root.blocked = blocked
|
root.blocked = blocked
|
||||||
|
|
|
@ -19,14 +19,6 @@ ColumnLayout { // Add Profile Pane
|
||||||
property bool deleting
|
property bool deleting
|
||||||
property bool changingPassword
|
property bool changingPassword
|
||||||
|
|
||||||
Widgets.StackToolbar {
|
|
||||||
id: stb
|
|
||||||
text: mode == "add" ? qsTr("add-profile-title") : qsTr("edit-profile-title")
|
|
||||||
aux.visible: false
|
|
||||||
membership.visible: false
|
|
||||||
stack: "management"
|
|
||||||
}
|
|
||||||
|
|
||||||
function reset() {
|
function reset() {
|
||||||
mode = "add"
|
mode = "add"
|
||||||
txtProfileName.text = qsTr("default-profile-name")
|
txtProfileName.text = qsTr("default-profile-name")
|
||||||
|
@ -64,7 +56,7 @@ ColumnLayout { // Add Profile Pane
|
||||||
|
|
||||||
|
|
||||||
Flickable {
|
Flickable {
|
||||||
anchors.top: stb.bottom
|
anchors.top: parent.top
|
||||||
anchors.left: parent.left
|
anchors.left: parent.left
|
||||||
anchors.right: parent.right
|
anchors.right: parent.right
|
||||||
anchors.bottom: parent.bottom
|
anchors.bottom: parent.bottom
|
||||||
|
|
|
@ -14,20 +14,8 @@ ColumnLayout { // settingsPane
|
||||||
id: root
|
id: root
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
|
|
||||||
|
|
||||||
StackToolbar {
|
|
||||||
id: stb
|
|
||||||
//: Cwtch Settings title
|
|
||||||
text: qsTr("cwtch-settings-title")
|
|
||||||
aux.visible: false
|
|
||||||
membership.visible: false
|
|
||||||
}
|
|
||||||
|
|
||||||
Flickable {
|
Flickable {
|
||||||
anchors.top: stb.bottom
|
anchors.fill: parent
|
||||||
anchors.left: parent.left
|
|
||||||
anchors.right: parent.right
|
|
||||||
anchors.bottom: parent.bottom
|
|
||||||
boundsBehavior: Flickable.StopAtBounds
|
boundsBehavior: Flickable.StopAtBounds
|
||||||
clip:true
|
clip:true
|
||||||
contentWidth: tehcol.width
|
contentWidth: tehcol.width
|
||||||
|
|
|
@ -31,7 +31,10 @@ ThemeType {
|
||||||
portraitContactBadgeTextColor: whitePurple
|
portraitContactBadgeTextColor: whitePurple
|
||||||
portraitProfileBadgeColor: mauvePurple
|
portraitProfileBadgeColor: mauvePurple
|
||||||
dropShadowColor: darkGrayPurple
|
dropShadowColor: darkGrayPurple
|
||||||
|
|
||||||
toggleColor: darkGrayPurple
|
toggleColor: darkGrayPurple
|
||||||
toggleOnColor: whitePurple
|
toggleOnColor: whitePurple
|
||||||
toggleOffColor: mauvePurple
|
toggleOffColor: mauvePurple
|
||||||
|
|
||||||
|
toolbarIconColor: whitePurple
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,4 +35,6 @@ ThemeType {
|
||||||
toggleColor: whitePurple
|
toggleColor: whitePurple
|
||||||
toggleOnColor: hotPink
|
toggleOnColor: hotPink
|
||||||
toggleOffColor: purple
|
toggleOffColor: purple
|
||||||
|
|
||||||
|
toolbarIconColor: darkPurple
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,6 +31,8 @@ Item {
|
||||||
readonly property color toggleOffColor: theme.toggleOffColor
|
readonly property color toggleOffColor: theme.toggleOffColor
|
||||||
readonly property color toggleOnColor: theme.toggleOnColor
|
readonly property color toggleOnColor: theme.toggleOnColor
|
||||||
|
|
||||||
|
readonly property color toolbarIconColor: theme.toolbarIconColor
|
||||||
|
|
||||||
readonly property int headerSize: 50
|
readonly property int headerSize: 50
|
||||||
readonly property int usernameSize: 30
|
readonly property int usernameSize: 30
|
||||||
readonly property int tabSize: 25
|
readonly property int tabSize: 25
|
||||||
|
@ -43,4 +45,5 @@ Item {
|
||||||
readonly property int doublePaneMinSize: 1000
|
readonly property int doublePaneMinSize: 1000
|
||||||
|
|
||||||
property ThemeType theme: CwtchLight { }
|
property ThemeType theme: CwtchLight { }
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,6 +27,7 @@ QtObject {
|
||||||
property color toggleOnColor: "black"
|
property color toggleOnColor: "black"
|
||||||
property color toggleOffColor: "black"
|
property color toggleOffColor: "black"
|
||||||
|
|
||||||
|
property color toolbarIconColor: "red"
|
||||||
|
|
||||||
// ... more to come
|
// ... more to come
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,7 @@ Rectangle {
|
||||||
radius: width/2
|
radius: width/2
|
||||||
anchors.right: parent.right
|
anchors.right: parent.right
|
||||||
anchors.bottom: parent.bottom
|
anchors.bottom: parent.bottom
|
||||||
anchors.margins: parent.width * 0.15
|
anchors.margins: parent.width * 0.09
|
||||||
property alias content: container.children
|
property alias content: container.children
|
||||||
|
|
||||||
Column {
|
Column {
|
||||||
|
|
|
@ -6,8 +6,10 @@ import CustomQmlTypes 1.0
|
||||||
import "../widgets" as Widgets
|
import "../widgets" as Widgets
|
||||||
import "../theme"
|
import "../theme"
|
||||||
|
|
||||||
|
|
||||||
|
// Needs the parent to have an onWidthChanged that calls .textResize()
|
||||||
Item {
|
Item {
|
||||||
//anchors.right: parent.right
|
anchors.right: parent.right
|
||||||
anchors.left: parent.left
|
anchors.left: parent.left
|
||||||
|
|
||||||
property string text
|
property string text
|
||||||
|
@ -17,6 +19,9 @@ Item {
|
||||||
property alias weight: label.font.weight
|
property alias weight: label.font.weight
|
||||||
property alias strikeout: label.font.strikeout
|
property alias strikeout: label.font.strikeout
|
||||||
property alias font: label.font
|
property alias font: label.font
|
||||||
|
property int extraPadding: 0
|
||||||
|
|
||||||
|
property Item container: parent
|
||||||
|
|
||||||
height: textMetric.height
|
height: textMetric.height
|
||||||
width: textMetric.width + 10
|
width: textMetric.width + 10
|
||||||
|
@ -36,19 +41,16 @@ Item {
|
||||||
font: label.font
|
font: label.font
|
||||||
}
|
}
|
||||||
|
|
||||||
/*onWidthChanged: {
|
|
||||||
setTextResize()
|
|
||||||
}*/
|
|
||||||
|
|
||||||
onTextChanged: {
|
onTextChanged: {
|
||||||
setTextResize()
|
textResize()
|
||||||
}
|
}
|
||||||
|
|
||||||
function setTextResize() {
|
function textResize() {
|
||||||
textMetric.text = text
|
textMetric.text = text
|
||||||
var i = 2
|
var i = 2
|
||||||
|
var containerWidth = container != null ? container.width : 50
|
||||||
// - 30 for padding
|
// - 30 for padding
|
||||||
while (textMetric.width > parent.width - (30 * gcd.themeScale) && parent.width > 50) {
|
while (textMetric.width > containerWidth - ((30 + extraPadding) * gcd.themeScale) && containerWidth > 50) {
|
||||||
textMetric.text = text.slice(0, text.length - (i * 3)) + "..."
|
textMetric.text = text.slice(0, text.length - (i * 3)) + "..."
|
||||||
i++
|
i++
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,63 @@
|
||||||
|
import QtGraphicalEffects 1.0
|
||||||
|
import QtQuick 2.7
|
||||||
|
import QtQuick.Controls 2.4
|
||||||
|
import QtQuick.Controls.Material 2.0
|
||||||
|
import QtQuick.Layouts 1.3
|
||||||
|
|
||||||
|
import "../fonts/Twemoji.js" as T
|
||||||
|
import "." as Widgets
|
||||||
|
import "../theme"
|
||||||
|
|
||||||
|
Rectangle {
|
||||||
|
id: root
|
||||||
|
|
||||||
|
property color backgroundColor: parent.color
|
||||||
|
property color hilightBackgroundColor: backgroundColor
|
||||||
|
|
||||||
|
property bool isHover: false
|
||||||
|
|
||||||
|
color: isHover ? backgroundColor : hilightBackgroundColor
|
||||||
|
|
||||||
|
property alias iconColor: iconColorOverlay.color
|
||||||
|
|
||||||
|
property alias source: srcImg.source
|
||||||
|
|
||||||
|
signal clicked()
|
||||||
|
|
||||||
|
Image {
|
||||||
|
id: srcImg
|
||||||
|
anchors.fill: parent
|
||||||
|
antialiasing: true
|
||||||
|
smooth: true
|
||||||
|
visible: false
|
||||||
|
// Apparently qml can now only DOWN-SCALE/SHRINK the SVG, so with this hack it which won't cause blurriness/pixelation
|
||||||
|
sourceSize.width: root.width*2
|
||||||
|
sourceSize.height: root.height*2
|
||||||
|
}
|
||||||
|
|
||||||
|
ColorOverlay{
|
||||||
|
id: iconColorOverlay
|
||||||
|
anchors.fill: srcImg
|
||||||
|
source: srcImg
|
||||||
|
|
||||||
|
antialiasing: true
|
||||||
|
smooth: true
|
||||||
|
}
|
||||||
|
|
||||||
|
MouseArea { // Full row mouse area triggering onClick
|
||||||
|
id: ma
|
||||||
|
anchors.fill: parent
|
||||||
|
hoverEnabled: true
|
||||||
|
|
||||||
|
onClicked: { root.clicked() }
|
||||||
|
|
||||||
|
onEntered: {
|
||||||
|
isHover = true
|
||||||
|
}
|
||||||
|
|
||||||
|
onExited: {
|
||||||
|
isHover = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -40,11 +40,14 @@ onDualPaneChanged: { realignProfile() }
|
||||||
portrait.anchors.left = profile.left
|
portrait.anchors.left = profile.left
|
||||||
portrait.anchors.leftMargin = 25 * logscale
|
portrait.anchors.leftMargin = 25 * logscale
|
||||||
|
|
||||||
nameRect.anchors.horizontalCenter = undefined
|
nameRow.anchors.right = undefined
|
||||||
nameRect.anchors.left = portrait.right
|
nameRow.anchors.left = portrait.right
|
||||||
|
|
||||||
nameRect.anchors.top = undefined
|
nameRow.anchors.top = undefined
|
||||||
nameRect.anchors.verticalCenter = portrait.verticalCenter
|
nameRow.anchors.verticalCenter = portrait.verticalCenter
|
||||||
|
|
||||||
|
nameCenter.anchors.horizontalCenter = undefined
|
||||||
|
nameCenter.anchors.left = nameRow.left
|
||||||
} else {
|
} else {
|
||||||
profile.height = (150 * logscale)
|
profile.height = (150 * logscale)
|
||||||
|
|
||||||
|
@ -55,18 +58,18 @@ onDualPaneChanged: { realignProfile() }
|
||||||
portrait.anchors.leftMargin = undefined
|
portrait.anchors.leftMargin = undefined
|
||||||
portrait.anchors.horizontalCenter = profile.horizontalCenter
|
portrait.anchors.horizontalCenter = profile.horizontalCenter
|
||||||
|
|
||||||
nameRect.anchors.left = undefined
|
nameRow.anchors.left = profile.left
|
||||||
nameRect.anchors.horizontalCenter = profile.horizontalCenter
|
nameRow.anchors.right = profile.right
|
||||||
|
|
||||||
|
nameRow.anchors.verticalCenter = undefined
|
||||||
|
nameRow.anchors.top = portrait.bottom
|
||||||
|
|
||||||
|
nameCenter.anchors.left = undefined
|
||||||
|
nameCenter.anchors.horizontalCenter = nameRow.horizontalCenter
|
||||||
|
|
||||||
nameRect.anchors.verticalCenter = undefined
|
|
||||||
nameRect.anchors.top = portrait.bottom
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Component.onCompleted: { realignProfile() }
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Rectangle {
|
Rectangle {
|
||||||
|
|
||||||
anchors.left: parent.left
|
anchors.left: parent.left
|
||||||
|
@ -93,9 +96,12 @@ Component.onCompleted: { realignProfile() }
|
||||||
}
|
}
|
||||||
|
|
||||||
Rectangle {
|
Rectangle {
|
||||||
id: nameRect
|
id: nameRow
|
||||||
|
|
||||||
height: name.height
|
height: name.height
|
||||||
|
onWidthChanged: { name.textResize() }
|
||||||
|
|
||||||
|
Rectangle {
|
||||||
|
id: nameCenter
|
||||||
width: name.width + addBtn.width
|
width: name.width + addBtn.width
|
||||||
|
|
||||||
EllipsisLabel {
|
EllipsisLabel {
|
||||||
|
@ -108,12 +114,14 @@ Component.onCompleted: { realignProfile() }
|
||||||
pixelSize: Theme.usernameSize * gcd.themeScale
|
pixelSize: Theme.usernameSize * gcd.themeScale
|
||||||
weight: Font.Bold
|
weight: Font.Bold
|
||||||
text: nick
|
text: nick
|
||||||
|
extraPadding: addBtn.width + 30
|
||||||
|
container: nameRow
|
||||||
}
|
}
|
||||||
|
|
||||||
Widgets.Button { // Add Button
|
Widgets.Button { // Add Button
|
||||||
id: addBtn
|
id: addBtn
|
||||||
|
|
||||||
anchors.left: name.right //name.left + name.textWidth
|
anchors.left: name.right
|
||||||
anchors.top: name.top
|
anchors.top: name.top
|
||||||
|
|
||||||
icon: "solid/plus"
|
icon: "solid/plus"
|
||||||
|
@ -126,23 +134,8 @@ Component.onCompleted: { realignProfile() }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO Remove for new global topbar
|
|
||||||
Widgets.Button {// BACK BUTTON
|
|
||||||
id: btnBack
|
|
||||||
icon: "solid/arrow-circle-left"
|
|
||||||
anchors.left: parent.left
|
|
||||||
anchors.leftMargin: 2
|
|
||||||
anchors.top: parent.top
|
|
||||||
anchors.topMargin: 2
|
|
||||||
onClicked: function() {
|
|
||||||
gcd.selectedProfile = "none"
|
|
||||||
gcd.reloadProfileList()
|
|
||||||
parentStack.pane = parentStack.managementPane
|
|
||||||
theStack.pane = theStack.emptyPane
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -173,8 +166,11 @@ Component.onCompleted: { realignProfile() }
|
||||||
onion = _onion
|
onion = _onion
|
||||||
image = _image
|
image = _image
|
||||||
tag = _tag
|
tag = _tag
|
||||||
|
//realignProfile()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
onResetProfile: { realignProfile() }
|
||||||
|
|
||||||
/*onTorStatus: function(code, str) {
|
/*onTorStatus: function(code, str) {
|
||||||
rectTorStatus.code = code
|
rectTorStatus.code = code
|
||||||
rectTorStatus.message = str
|
rectTorStatus.message = str
|
||||||
|
|
|
@ -84,8 +84,8 @@ Item { // LOTS OF NESTING TO DEAL WITH QT WEIRDNESS, SORRY
|
||||||
}
|
}
|
||||||
|
|
||||||
onWidthChanged: {
|
onWidthChanged: {
|
||||||
cn.setTextResize()
|
cn.textResize()
|
||||||
onion.setTextResize()
|
onion.textResize()
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,70 +0,0 @@
|
||||||
import QtGraphicalEffects 1.0
|
|
||||||
import QtQuick 2.7
|
|
||||||
import QtQuick.Controls 2.4
|
|
||||||
import QtQuick.Controls.Material 2.0
|
|
||||||
import QtQuick.Layouts 1.3
|
|
||||||
|
|
||||||
import "../fonts/Twemoji.js" as T
|
|
||||||
import "." as Widgets
|
|
||||||
import "../fonts"
|
|
||||||
|
|
||||||
Rectangle { // OVERHEAD BAR ON STACK PANE
|
|
||||||
id: toolbar
|
|
||||||
anchors.left: parent.left
|
|
||||||
anchors.right: parent.right
|
|
||||||
anchors.top: parent.top
|
|
||||||
height: 20 * gcd.themeScale + 4
|
|
||||||
Layout.minimumHeight: height
|
|
||||||
Layout.maximumHeight: height
|
|
||||||
color: "#EDEDED"
|
|
||||||
|
|
||||||
property alias text: lbl.text
|
|
||||||
property alias aux: btnAux
|
|
||||||
property alias back: btnBack
|
|
||||||
property alias membership: btnMembership
|
|
||||||
property string stack: "profile" // profile(theStack) or management(parentStack)
|
|
||||||
|
|
||||||
|
|
||||||
Widgets.Button {// BACK BUTTON
|
|
||||||
id: btnBack
|
|
||||||
icon: "solid/arrow-circle-left"
|
|
||||||
anchors.left: parent.left
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
anchors.leftMargin: 6
|
|
||||||
onClicked: {
|
|
||||||
if (stack == "profile") {
|
|
||||||
theStack.pane = theStack.emptyPane
|
|
||||||
} else {
|
|
||||||
parentStack.pane = parentStack.managementPane
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ScalingLabel { // TEXT
|
|
||||||
id: lbl
|
|
||||||
text: "open privacy exec"
|
|
||||||
font.family: Fonts.applicationFontRegular.name
|
|
||||||
font.styleName: "ExtraBold"
|
|
||||||
anchors.horizontalCenter: parent.horizontalCenter
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
}
|
|
||||||
|
|
||||||
RowLayout {
|
|
||||||
|
|
||||||
anchors.right: parent.right
|
|
||||||
anchors.rightMargin: 6
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
|
|
||||||
Widgets.Button { // Membership Button
|
|
||||||
id: btnMembership
|
|
||||||
icon: "solid/users"
|
|
||||||
//: View Group Membership
|
|
||||||
tooltip: qsTr("view-group-membership-tooltip")
|
|
||||||
}
|
|
||||||
|
|
||||||
Widgets.Button { // COG BUTTON
|
|
||||||
id: btnAux
|
|
||||||
icon: "solid/cog"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -0,0 +1,123 @@
|
||||||
|
import QtGraphicalEffects 1.0
|
||||||
|
import QtQuick 2.7
|
||||||
|
import QtQuick.Controls 2.4
|
||||||
|
import QtQuick.Controls.Material 2.0
|
||||||
|
import QtQuick.Layouts 1.3
|
||||||
|
|
||||||
|
import "../fonts/Twemoji.js" as T
|
||||||
|
import "." as Widgets
|
||||||
|
import "../theme"
|
||||||
|
|
||||||
|
Rectangle { // Global Toolbar
|
||||||
|
id: toolbar
|
||||||
|
|
||||||
|
anchors.left: parent.left
|
||||||
|
anchors.right: parent.right
|
||||||
|
anchors.top: parent.top
|
||||||
|
height: 35 * gcd.themeScale
|
||||||
|
|
||||||
|
|
||||||
|
Layout.minimumHeight: height
|
||||||
|
Layout.maximumHeight: height
|
||||||
|
color: Theme.backgroundMainColor
|
||||||
|
|
||||||
|
property alias leftMenuVisible: btnLeftMenu.visible
|
||||||
|
property alias backVisible: btnLeftBack.visible
|
||||||
|
property alias rightMenuVisible: btnRightMenu.visible
|
||||||
|
|
||||||
|
property alias titleWidth: paneArea.width
|
||||||
|
|
||||||
|
|
||||||
|
signal leftMenu()
|
||||||
|
signal back()
|
||||||
|
signal rightMenu()
|
||||||
|
|
||||||
|
Icon {
|
||||||
|
id: btnLeftMenu
|
||||||
|
iconColor: Theme.toolbarIconColor
|
||||||
|
source: gcd.assetPath + "core/menu-24px.svg"
|
||||||
|
|
||||||
|
|
||||||
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
|
anchors.left: parent.left
|
||||||
|
width: 30
|
||||||
|
height: 30
|
||||||
|
|
||||||
|
onClicked: { leftMenu() }
|
||||||
|
}
|
||||||
|
|
||||||
|
Icon {
|
||||||
|
id: btnLeftBack
|
||||||
|
iconColor: Theme.toolbarIconColor
|
||||||
|
source: gcd.assetPath + "core/chevron_left-24px.svg"
|
||||||
|
|
||||||
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
|
anchors.left: parent.left
|
||||||
|
width: 30
|
||||||
|
height: 30
|
||||||
|
|
||||||
|
onClicked: { back() }
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Rectangle {
|
||||||
|
id: paneArea
|
||||||
|
anchors.right: parent.right
|
||||||
|
|
||||||
|
EllipsisLabel {
|
||||||
|
id: paneTitle
|
||||||
|
|
||||||
|
visible: true
|
||||||
|
anchors.left: undefined
|
||||||
|
anchors.right: undefined
|
||||||
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
|
|
||||||
|
color: Theme.mainTextColor
|
||||||
|
pixelSize: Theme.tabSize * gcd.themeScale
|
||||||
|
weight: Font.Bold
|
||||||
|
text: "global toolbar"
|
||||||
|
|
||||||
|
//extraPadding: btnRightMenu.width + 10
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
onWidthChanged: { paneTitle.textResize() }
|
||||||
|
}
|
||||||
|
|
||||||
|
Icon {
|
||||||
|
id: btnRightMenu
|
||||||
|
iconColor: Theme.toolbarIconColor
|
||||||
|
source: gcd.assetPath + "core/more_vert-24px.svg"
|
||||||
|
|
||||||
|
visible: false
|
||||||
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
|
anchors.right: parent.right
|
||||||
|
width: 30
|
||||||
|
height: 30
|
||||||
|
|
||||||
|
onClicked: { rightMenu() }
|
||||||
|
}
|
||||||
|
|
||||||
|
function setTitle(text, width) {
|
||||||
|
paneTitle.text = text
|
||||||
|
paneArea.width = width
|
||||||
|
paneTitle.textResize()
|
||||||
|
paneTitle.visible = true
|
||||||
|
}
|
||||||
|
|
||||||
|
function hideTitle() {
|
||||||
|
paneTitle.visible = false
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Connections {
|
||||||
|
target: gcd
|
||||||
|
|
||||||
|
onSetToolbarTitle: function(handle) {
|
||||||
|
setTitle(handle, theStack.width)
|
||||||
|
btnRightMenu.visible = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|