Bläddra i källkod

first draft of backupwidget and updates to icons

First draft of UI for backupwidget

Changes to icons and logos
Felix Turo 4 år sedan
förälder
incheckning
b5624e5326

+ 3 - 0
CMakeLists.txt

@@ -43,6 +43,7 @@ set(PROJECT_SOURCES
     src/gui/dialogues/newpilotdialog.cpp
     src/gui/dialogues/newtaildialog.cpp
     src/gui/widgets/aircraftwidget.cpp
+    src/gui/widgets/backupwidget.cpp
     src/gui/widgets/debugwidget.cpp
     src/gui/widgets/homewidget.cpp
     src/gui/widgets/logbookwidget.cpp
@@ -77,6 +78,7 @@ set(PROJECT_SOURCES
     src/gui/dialogues/newpilotdialog.h
     src/gui/dialogues/newtaildialog.h
     src/gui/widgets/aircraftwidget.h
+    src/gui/widgets/backupwidget.h
     src/gui/widgets/debugwidget.h
     src/gui/widgets/homewidget.h
     src/gui/widgets/logbookwidget.h
@@ -93,6 +95,7 @@ set(PROJECT_SOURCES
     src/gui/dialogues/newpilot.ui
     src/gui/dialogues/newtail.ui
     src/gui/widgets/aircraftwidget.ui
+    src/gui/widgets/backupwidget.ui
     src/gui/widgets/debugwidget.ui
     src/gui/widgets/homewidget.ui
     src/gui/widgets/logbookwidget.ui

+ 6 - 5
assets/icons.qrc

@@ -12,14 +12,9 @@
         <file>ionicon-icons/settings-outline.png</file>
         <file>ionicon-icons/power.png</file>
         <file>ionicon-icons/power-outline.png</file>
-        <file>opl-icons/app/icon_about.png</file>
-        <file>opl-icons/app/icon_about.svg</file>
         <file>opl-icons/app/icon_ios.svg</file>
         <file>opl-icons/app/icon_linux.svg</file>
-        <file>opl-icons/app/icon_linux_light.svg</file>
         <file>opl-icons/app/icon_main.svg</file>
-        <file>opl-icons/app/opl_logo.png</file>
-        <file>opl-icons/app/opl_logo.svg</file>
         <file>opl-icons/toolbar/thick/dark/icon_airplane_dm.svg</file>
         <file>opl-icons/toolbar/thick/dark/icon_backup_dm.svg</file>
         <file>opl-icons/toolbar/thick/dark/icon_exit_dm.svg</file>
@@ -36,5 +31,11 @@
         <file>opl-icons/toolbar/thick/light/icon_new_flight.svg</file>
         <file>opl-icons/toolbar/thick/light/icon_pilot.svg</file>
         <file>opl-icons/toolbar/thick/light/icon_settings.svg</file>
+        <file>opl-icons/app/icon_windows.ico</file>
+        <file>opl-icons/app/icon_windows.svg</file>
+        <file>opl-icons/logos/logo_text.svg</file>
+        <file>opl-icons/logos/logo_text.png</file>
+        <file>opl-icons/app/icon_main.png</file>
+        <file>opl-icons/toolbar/thick/light/icon_backup.png</file>
     </qresource>
 </RCC>

BIN
assets/opl-icons/app/icon_about.png


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
assets/opl-icons/app/icon_about.svg


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
assets/opl-icons/app/icon_ios.svg


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
assets/opl-icons/app/icon_linux.svg


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
assets/opl-icons/app/icon_linux_light.svg


BIN
assets/opl-icons/app/icon_main.png


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
assets/opl-icons/app/icon_main.svg


BIN
assets/opl-icons/app/icon_windows.ico


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
assets/opl-icons/app/icon_windows.svg


BIN
assets/opl-icons/app/opl_logo.png


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
assets/opl-icons/app/opl_logo.svg


BIN
assets/opl-icons/logos/logo_text.png


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
assets/opl-icons/logos/logo_text.svg


+ 1 - 1
assets/opl-icons/toolbar/thick/dark/icon_backup_dm.svg

@@ -1 +1 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 400 400"><defs><style>.cls-1,.cls-2,.cls-3,.cls-4{fill:none;}.cls-1,.cls-2,.cls-3{stroke:#f2f2f2;stroke-linecap:round;stroke-linejoin:round;}.cls-1{stroke-width:23px;}.cls-2{stroke-width:13px;}.cls-3{stroke-width:8px;}</style></defs><g id="Layer_2" data-name="Layer 2"><g id="Layer_12" data-name="Layer 12"><path class="cls-1" d="M241.68,333.94C222,338,198,340.37,172.2,340.37c-66.71,0-120.93-15.87-122.16-35.6a5.48,5.48,0,0,1,0-.7V231.49a5.43,5.43,0,0,0,0,.69c1.23,19.73,55.45,35.6,122.16,35.6A375.39,375.39,0,0,0,226.53,264,58.76,58.76,0,0,0,221,288.89,59.93,59.93,0,0,0,241.68,333.94Z"/><path class="cls-1" d="M294.39,86.3q0,.35,0,.69c-1.25,19.73-55.46,35.6-122.16,35.6S51.28,106.72,50,87q0-.34,0-.69c0-20,54.71-36.3,122.2-36.3S294.39,66.25,294.39,86.3Z"/><path class="cls-1" d="M294.39,87v71.9c0,.24,0,.46,0,.7-1.25,19.72-55.46,35.6-122.16,35.6S51.28,179.31,50,159.59c0-.24,0-.46,0-.7V87h0c1.25,19.73,55.46,35.6,122.17,35.6S293.11,106.72,294.36,87Z"/><path class="cls-1" d="M294.39,158.88v69.31a68.06,68.06,0,0,0-9.1-.61c-26.21,0-48.75,15-58.76,36.42a375.39,375.39,0,0,1-54.33,3.78c-66.71,0-120.93-15.87-122.16-35.6a5.43,5.43,0,0,1,0-.69V158.88a5.53,5.53,0,0,0,0,.71c1.23,19.72,55.45,35.6,122.16,35.6s120.92-15.88,122.15-35.6A5.53,5.53,0,0,0,294.39,158.88Z"/><path class="cls-1" d="M350,288.69c0,33.86-28.78,61.31-64.28,61.31a65.8,65.8,0,0,1-43.62-16.27,59.91,59.91,0,0,1-20.66-45,58.62,58.62,0,0,1,5.52-24.9c10-21.46,32.55-36.42,58.76-36.42a66.4,66.4,0,0,1,9.09.62C326,232.2,350,257.78,350,288.69Z"/><path class="cls-2" d="M303.37,272.17a26.33,26.33,0,0,1,7.43,18.29c0,15-12.74,27.14-28.46,27.14s-28.46-12.15-28.46-27.14a26.5,26.5,0,0,1,8.87-19.69"/><path class="cls-3" d="M296.38,283.58l-.76-17.37-.28-6.44,6.43,3.54L317.56,272"/><rect class="cls-4" width="400" height="400"/></g></g></svg>
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 400 400"><defs><style>.cls-1,.cls-2,.cls-3,.cls-4{fill:none;}.cls-1,.cls-2,.cls-3{stroke:#f2f2f2;stroke-linecap:round;stroke-linejoin:round;}.cls-1{stroke-width:23px;}.cls-2{stroke-width:13px;}.cls-3{stroke-width:8px;}</style></defs><g id="Layer_2" data-name="Layer 2"><g id="light_icons" data-name="light icons"><path class="cls-1" d="M241.18,334.08c-19.72,4.06-43.67,6.43-69.48,6.43-66.71,0-120.93-15.87-122.16-35.59a5.74,5.74,0,0,1,0-.71V231.63a5.43,5.43,0,0,0,0,.69c1.23,19.73,55.45,35.6,122.16,35.6A374,374,0,0,0,226,264.14,58.76,58.76,0,0,0,220.51,289,59.93,59.93,0,0,0,241.18,334.08Z"/><path class="cls-1" d="M294,86.44a5.48,5.48,0,0,1,0,.7c-1.24,19.72-55.46,35.6-122.16,35.6S50.91,106.86,49.67,87.14c0-.24,0-.46,0-.7,0-20,54.7-36.3,122.19-36.3S294,66.39,294,86.44Z"/><path class="cls-1" d="M293.5,87.5v71.89c0,.24,0,.47,0,.7-1.25,19.73-55.37,35.6-122,35.6s-120.72-15.87-122-35.6c0-.23,0-.46,0-.7V87.5h0c1.25,19.73,55.37,35.6,122,35.6s120.72-15.87,122-35.6Z"/><path class="cls-1" d="M293.5,159.11v69.2a67.88,67.88,0,0,0-9.08-.61c-26.17,0-48.68,14.93-58.67,36.36a374.42,374.42,0,0,1-54.25,3.77c-66.6,0-120.73-15.84-122-35.54a5.43,5.43,0,0,1,0-.69V159.11a5.63,5.63,0,0,0,0,.71c1.23,19.69,55.36,35.54,122,35.54s120.73-15.85,122-35.54A5.63,5.63,0,0,0,293.5,159.11Z"/><path class="cls-1" d="M349.64,288.83c0,33.86-28.78,61.31-64.29,61.31a65.77,65.77,0,0,1-43.61-16.26,59.94,59.94,0,0,1-20.67-45.05,58.8,58.8,0,0,1,5.52-24.9c10-21.46,32.55-36.41,58.76-36.41a66.44,66.44,0,0,1,9.1.61C325.65,232.34,349.64,257.92,349.64,288.83Z"/><path class="cls-2" d="M303,272.31a26.39,26.39,0,0,1,7.43,18.29c0,15-12.75,27.15-28.46,27.15s-28.46-12.16-28.46-27.15a26.48,26.48,0,0,1,8.87-19.69"/><path class="cls-3" d="M296,283.72l-.76-17.37-.28-6.44,6.42,3.54,15.79,8.7"/><rect class="cls-4" width="400" height="400"/></g></g></svg>

+ 1 - 1
assets/opl-icons/toolbar/thick/dark/icon_logbook_dm.svg

@@ -1 +1 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 400 400"><defs><style>.cls-1,.cls-2{fill:none;}.cls-2{stroke:#f2f2f2;stroke-linecap:round;stroke-linejoin:round;stroke-width:23px;}</style></defs><g id="Layer_2" data-name="Layer 2"><g id="Layer_12" data-name="Layer 12"><rect class="cls-1" width="400" height="400"/><path class="cls-2" d="M197.08,125.42v161c-3.18-6.9-33.32-12.31-70-12.31s-66.85,5.41-70,12.31v-161l.22-.41a1,1,0,0,1,.12-.17c3.92-5.73,26.46-10.31,55.54-11.45h28.33c29.08,1.14,51.61,5.72,55.52,11.45a.7.7,0,0,1,.13.17A2.65,2.65,0,0,1,197.08,125.42Z"/><path class="cls-2" d="M343,125.42v161c-3.32-6.9-34.69-12.31-72.9-12.31s-69.58,5.41-72.89,12.31v-161a4.1,4.1,0,0,1,.22-.41l.12-.17c4.09-5.73,27.55-10.31,57.8-11.45h29.5c30.26,1.14,53.71,5.72,57.8,11.45l.12.17A4.23,4.23,0,0,1,343,125.42Z"/><path class="cls-2" d="M350,124.84V286.61H50V124.84h7.35a1,1,0,0,0-.12.17l-.22.41v161c3.19-6.9,33.33-12.31,70-12.31s66.85,5.41,70,12.31v-161a2.65,2.65,0,0,0-.21-.41.7.7,0,0,0-.13-.17h.83l-.12.17a4.1,4.1,0,0,0-.22.41v161c3.31-6.9,34.68-12.31,72.89-12.31s69.58,5.41,72.9,12.31v-161a4.23,4.23,0,0,0-.23-.41l-.12-.17Z"/></g></g></svg>
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 400 400"><defs><style>.cls-1,.cls-2{fill:none;}.cls-2{stroke:#f2f2f2;stroke-linecap:round;stroke-linejoin:round;stroke-width:23px;}</style></defs><g id="Layer_2" data-name="Layer 2"><g id="light_icons" data-name="light icons"><rect class="cls-1" width="400" height="400"/><path class="cls-2" d="M197,92.7V324.63c-3.18-9.94-33.3-17.73-70-17.73s-66.82,7.79-70,17.73V92.7c.06-.2.14-.38.21-.59s.08-.17.13-.25C61.26,83.62,83.78,77,112.85,75.37h28.31c29.07,1.64,51.59,8.25,55.5,16.49.05.08.08.16.13.25A5.25,5.25,0,0,1,197,92.7Z"/><path class="cls-2" d="M343,92.7V324.63c-3.32-9.94-34.74-17.73-73-17.73s-69.67,7.79-73,17.73V92.7a5.5,5.5,0,0,1,.23-.59l.12-.25c4.09-8.24,27.58-14.85,57.88-16.49h29.54c30.3,1.64,53.79,8.25,57.88,16.49l.12.25A5.5,5.5,0,0,1,343,92.7Z"/><path class="cls-2" d="M350,91.37v233H50v-233h7.34c-.05.08-.08.17-.13.25s-.15.39-.21.59V324.14c3.18-9.94,33.31-17.73,70-17.73s66.82,7.79,70,17.73V92.21a5.25,5.25,0,0,0-.21-.59c0-.08-.08-.17-.13-.25h.69l-.12.25a5.5,5.5,0,0,0-.23.59V324.14c3.32-9.94,34.74-17.73,73-17.73s69.69,7.79,73,17.73V92.21a5.5,5.5,0,0,0-.23-.59l-.12-.25Z"/></g></g></svg>

BIN
assets/opl-icons/toolbar/thick/light/icon_backup.png


+ 1 - 1
assets/opl-icons/toolbar/thick/light/icon_backup.svg

@@ -1 +1 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 400 400"><defs><style>.cls-1,.cls-2,.cls-3,.cls-4{fill:none;}.cls-1,.cls-2,.cls-3{stroke:#000;stroke-linecap:round;stroke-linejoin:round;}.cls-1{stroke-width:23px;}.cls-2{stroke-width:13px;}.cls-3{stroke-width:8px;}</style></defs><g id="Layer_2" data-name="Layer 2"><g id="Layer_10" data-name="Layer 10"><g id="Layer_11" data-name="Layer 11"><path class="cls-1" d="M241.68,333.94C222,338,198,340.37,172.2,340.37c-66.71,0-120.93-15.87-122.16-35.6a5.48,5.48,0,0,1,0-.7V231.49a5.43,5.43,0,0,0,0,.69c1.23,19.73,55.45,35.6,122.16,35.6A375.39,375.39,0,0,0,226.53,264,58.76,58.76,0,0,0,221,288.89,59.93,59.93,0,0,0,241.68,333.94Z"/><path class="cls-1" d="M294.39,86.3q0,.35,0,.69c-1.25,19.73-55.46,35.6-122.16,35.6S51.28,106.72,50,87q0-.34,0-.69c0-20,54.71-36.3,122.2-36.3S294.39,66.25,294.39,86.3Z"/><path class="cls-1" d="M294.39,87v71.9c0,.24,0,.46,0,.7-1.25,19.72-55.46,35.6-122.16,35.6S51.28,179.31,50,159.59c0-.24,0-.46,0-.7V87h0c1.25,19.73,55.46,35.6,122.17,35.6S293.11,106.72,294.36,87Z"/><path class="cls-1" d="M294.39,158.88v69.31a68.06,68.06,0,0,0-9.1-.61c-26.21,0-48.75,15-58.76,36.42a375.39,375.39,0,0,1-54.33,3.78c-66.71,0-120.93-15.87-122.16-35.6a5.43,5.43,0,0,1,0-.69V158.88a5.53,5.53,0,0,0,0,.71c1.23,19.72,55.45,35.6,122.16,35.6s120.92-15.88,122.15-35.6A5.53,5.53,0,0,0,294.39,158.88Z"/><path class="cls-1" d="M350,288.69c0,33.86-28.78,61.31-64.28,61.31a65.8,65.8,0,0,1-43.62-16.27,59.91,59.91,0,0,1-20.66-45,58.62,58.62,0,0,1,5.52-24.9c10-21.46,32.55-36.42,58.76-36.42a66.4,66.4,0,0,1,9.09.62C326,232.2,350,257.78,350,288.69Z"/><path class="cls-2" d="M303.37,272.17a26.33,26.33,0,0,1,7.43,18.29c0,15-12.74,27.14-28.46,27.14s-28.46-12.15-28.46-27.14a26.5,26.5,0,0,1,8.87-19.69"/><path class="cls-3" d="M296.38,283.58l-.76-17.37-.28-6.44,6.43,3.54L317.56,272"/><rect class="cls-4" width="400" height="400"/></g></g></g></svg>
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 400 400"><defs><style>.cls-1,.cls-2,.cls-3,.cls-4{fill:none;}.cls-1,.cls-2,.cls-3{stroke:#000;stroke-linecap:round;stroke-linejoin:round;}.cls-1{stroke-width:23px;}.cls-2{stroke-width:13px;}.cls-3{stroke-width:8px;}</style></defs><g id="Layer_2" data-name="Layer 2"><g id="black_icons" data-name="black icons"><g id="Layer_11" data-name="Layer 11"><path class="cls-1" d="M242.18,334c-19.72,4.06-43.67,6.43-69.48,6.43-66.71,0-120.93-15.87-122.16-35.59a5.53,5.53,0,0,1,0-.71V231.5a5.69,5.69,0,0,0,0,.7c1.23,19.72,55.45,35.59,122.16,35.59A374,374,0,0,0,227,264a58.76,58.76,0,0,0-5.52,24.89A59.93,59.93,0,0,0,242.18,334Z"/><path class="cls-1" d="M294.6,86.31c0,.24,0,.46,0,.7-1.24,19.72-55.46,35.6-122.16,35.6S51.49,106.73,50.25,87a5.48,5.48,0,0,1,0-.7c0-20,54.71-36.3,122.2-36.3S294.6,66.26,294.6,86.31Z"/><path class="cls-1" d="M294.5,87.5v71.89c0,.24,0,.47,0,.7-1.25,19.73-55.37,35.6-122,35.6s-120.72-15.87-122-35.6c0-.23,0-.46,0-.7V87.5h0c1.25,19.73,55.37,35.6,122,35.6s120.72-15.87,122-35.6Z"/><path class="cls-1" d="M294.5,159v69.2a67.88,67.88,0,0,0-9.08-.61c-26.17,0-48.68,14.93-58.67,36.36a374.42,374.42,0,0,1-54.25,3.77c-66.6,0-120.73-15.84-122-35.53a5.69,5.69,0,0,1,0-.7V159a5.53,5.53,0,0,0,0,.71c1.23,19.69,55.36,35.54,122,35.54s120.73-15.85,122-35.54A5.53,5.53,0,0,0,294.5,159Z"/><path class="cls-1" d="M350.21,288.7c0,33.86-28.78,61.31-64.28,61.31a65.77,65.77,0,0,1-43.61-16.26,59.94,59.94,0,0,1-20.67-45.05,58.8,58.8,0,0,1,5.52-24.9c10-21.46,32.55-36.41,58.76-36.41a66.55,66.55,0,0,1,9.1.61C326.22,232.21,350.21,257.79,350.21,288.7Z"/><path class="cls-2" d="M303.58,272.18A26.37,26.37,0,0,1,311,290.47c0,15-12.74,27.15-28.46,27.15s-28.46-12.16-28.46-27.15A26.51,26.51,0,0,1,263,270.78"/><path class="cls-3" d="M296.59,283.59l-.75-17.37-.29-6.44,6.43,3.54,15.79,8.7"/><rect class="cls-4" width="400" height="400"/></g></g></g></svg>

+ 1 - 1
assets/opl-icons/toolbar/thick/light/icon_logbook.svg

@@ -1 +1 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 400 400"><defs><style>.cls-1,.cls-2{fill:none;}.cls-2{stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:23px;}</style></defs><g id="Layer_2" data-name="Layer 2"><g id="Layer_10" data-name="Layer 10"><g id="Layer_11" data-name="Layer 11"><rect class="cls-1" width="400" height="400"/></g><path class="cls-2" d="M197.08,125.42v161c-3.18-6.9-33.32-12.31-70-12.31s-66.85,5.41-70,12.31v-161l.22-.41a1,1,0,0,1,.12-.17c3.92-5.73,26.46-10.31,55.54-11.45h28.33c29.08,1.14,51.61,5.72,55.52,11.45a.7.7,0,0,1,.13.17A2.65,2.65,0,0,1,197.08,125.42Z"/><path class="cls-2" d="M343,125.42v161c-3.32-6.9-34.69-12.31-72.9-12.31s-69.58,5.41-72.89,12.31v-161a4.1,4.1,0,0,1,.22-.41l.12-.17c4.09-5.73,27.55-10.31,57.8-11.45h29.5c30.26,1.14,53.71,5.72,57.8,11.45l.12.17A4.23,4.23,0,0,1,343,125.42Z"/><path class="cls-2" d="M350,124.84V286.61H50V124.84h7.35a1,1,0,0,0-.12.17l-.22.41v161c3.19-6.9,33.33-12.31,70-12.31s66.85,5.41,70,12.31v-161a2.65,2.65,0,0,0-.21-.41.7.7,0,0,0-.13-.17h.83l-.12.17a4.1,4.1,0,0,0-.22.41v161c3.31-6.9,34.68-12.31,72.89-12.31s69.58,5.41,72.9,12.31v-161a4.23,4.23,0,0,0-.23-.41l-.12-.17Z"/></g></g></svg>
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 400 400"><defs><style>.cls-1,.cls-2{fill:none;}.cls-2{stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:23px;}</style></defs><g id="Layer_2" data-name="Layer 2"><g id="black_icons" data-name="black icons"><g id="Layer_11" data-name="Layer 11"><rect class="cls-1" width="400" height="400"/></g><path class="cls-2" d="M197.5,92.83V324.75c-3.18-9.94-33.3-17.72-70-17.72s-66.82,7.78-70,17.72V92.83c.06-.21.14-.38.21-.59s.08-.18.13-.25c3.92-8.25,26.44-14.85,55.51-16.49h28.31c29.07,1.64,51.59,8.24,55.5,16.49.05.07.08.16.13.25A4.63,4.63,0,0,1,197.5,92.83Z"/><path class="cls-2" d="M343.5,92.83V324.75c-3.32-9.94-34.74-17.72-73-17.72s-69.67,7.78-73,17.72V92.83a4.79,4.79,0,0,1,.23-.59c0-.09.08-.18.12-.25,4.09-8.25,27.58-14.85,57.88-16.49h29.54c30.3,1.64,53.79,8.24,57.88,16.49,0,.07.08.16.12.25A4.79,4.79,0,0,1,343.5,92.83Z"/><path class="cls-2" d="M350.5,91.5v233H50.5V91.5h7.34c-.05.07-.08.16-.13.25s-.15.38-.21.59V324.27c3.18-9.94,33.31-17.73,70-17.73s66.82,7.79,70,17.73V92.34a4.63,4.63,0,0,0-.21-.59c0-.09-.08-.18-.13-.25h.69c0,.07-.08.16-.12.25a4.79,4.79,0,0,0-.23.59V324.27c3.32-9.94,34.74-17.73,73-17.73s69.69,7.79,73,17.73V92.34a4.79,4.79,0,0,0-.23-.59c0-.09-.08-.18-.12-.25Z"/></g></g></svg>

+ 1 - 0
assets/opl-icons/toolbar/thin/dark/new_flight_dm.svg

@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><defs><style>.cls-1,.cls-2{fill:none;}.cls-1{stroke:#f2f2f2;stroke-linecap:round;stroke-linejoin:round;}</style></defs><g id="Layer_2" data-name="Layer 2"><g id="Layer_12" data-name="Layer 12"><path class="cls-1" d="M55.63,21.83h0a27,27,0,0,1-10.76,8.54l-24,10.41-5.39,2.37-1.58-2.76v-.06l-1.1-1.79c-1.21-2.07-2.63-3.93-3.73-6L8,30.85l1.54.58q3.81,1.68,7.66,3l15.74-8.19L19.61,11l2.54-1.11L39.84,22.66,42,21.54l.84-.42A22.84,22.84,0,0,1,54.69,19C55.86,19.08,56.42,20.8,55.63,21.83Z"/><line class="cls-1" x1="13.72" y1="54.07" x2="50.26" y2="54.15"/><rect class="cls-2" width="64" height="64"/></g></g></svg>

+ 1 - 0
assets/opl-icons/toolbar/thin/light/new_flight.svg

@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><defs><style>.cls-1,.cls-2{fill:none;}.cls-1{stroke:#000;stroke-linecap:round;stroke-linejoin:round;}</style></defs><g id="Layer_2" data-name="Layer 2"><g id="simple_line_icons" data-name="simple line icons"><path class="cls-1" d="M55.63,21.83h0a27,27,0,0,1-10.76,8.54l-24,10.41-5.39,2.37-1.58-2.76v-.06l-1.1-1.79c-1.21-2.07-2.63-3.93-3.73-6L8,30.85l1.54.58q3.81,1.68,7.66,3l15.74-8.19L19.61,11l2.54-1.11L39.84,22.66,42,21.54l.84-.42A22.84,22.84,0,0,1,54.69,19C55.86,19.08,56.42,20.8,55.63,21.83Z"/><line class="cls-1" x1="13.72" y1="54.07" x2="50.26" y2="54.15"/><rect class="cls-2" width="64" height="64"/></g></g></svg>

+ 18 - 1
main.cpp

@@ -80,7 +80,24 @@ int main(int argc, char *argv[])
     }
 
     MainWindow w;
-    w.setWindowIcon(QIcon(Opl::Assets::ICON_APPICON));
+
+#ifdef __linux__
+    w.setWindowIcon(QIcon(Opl::Assets::ICON_APPICON_LINUX));
+#elif defined(_WIN32) || defined(_WIN64)
+    w.setWindowIcon(QIcon(Opl::Assets::ICON_APPICON_WIN));
+#elif __APPLE__
+    #include <TargetConditionals.h>
+    #if TARGET_IPHONE_SIMULATOR
+         // iOS Simulator
+    #elif TARGET_OS_IPHONE
+        // iOS device
+    #elif TARGET_OS_MAC
+    w.setWindowIcon(QIcon(Opl::Assets::ICON_APPICON_IOS));
+    #else
+    #   error "Unknown Apple platform"
+    #endif
+#endif
+
     //w.showMaximized();
     w.show();
     return openPilotLog.exec();

+ 68 - 53
mainwindow.cpp

@@ -27,12 +27,18 @@ MainWindow::MainWindow(QWidget *parent)
 {
     ui->setupUi(this);
 
+    // Create a spacer for the toolbar to separate left and right parts
+    auto *spacer = new QWidget();
+    spacer->setMinimumWidth(1);
+    spacer->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Minimum);
     // Set up Toolbar
     ui->actionHome->setIcon(QIcon(Opl::Assets::ICON_TOOLBAR_HOME));
     ui->actionNewFlight->setIcon(QIcon(Opl::Assets::ICON_TOOLBAR_NEW_FLIGHT));
     ui->actionLogbook->setIcon(QIcon(Opl::Assets::ICON_TOOLBAR_LOGBOOK));
     ui->actionAircraft->setIcon(QIcon(Opl::Assets::ICON_TOOLBAR_AIRCRAFT));
     ui->actionPilots->setIcon(QIcon(Opl::Assets::ICON_TOOLBAR_PILOT));
+    ui->toolBar->insertWidget(ui->actionSettings, spacer); // spacer goes here
+    ui->actionBackup->setIcon(QIcon(Opl::Assets::ICON_TOOLBAR_BACKUP));
     ui->actionSettings->setIcon(QIcon(Opl::Assets::ICON_TOOLBAR_SETTINGS));
     ui->actionQuit->setIcon(QIcon(Opl::Assets::ICON_TOOLBAR_QUIT));
     ui->toolBar->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Minimum);
@@ -43,23 +49,20 @@ MainWindow::MainWindow(QWidget *parent)
         button->setMinimumWidth(128);
     }
 
-    // Add spacer in toolbar to separate left and right parts
-    auto *spacer = new QWidget();
-    spacer->setMinimumWidth(1);
-    spacer->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Minimum);
-    ui->toolBar->insertWidget(ui->actionSettings, spacer);
-
     // Construct Widgets
     homeWidget = new HomeWidget(this);
     ui->stackedWidget->addWidget(homeWidget);
-    pilotsWidget = new PilotsWidget(this);
-    ui->stackedWidget->addWidget(pilotsWidget);
     logbookWidget = new LogbookWidget(this);
     ui->stackedWidget->addWidget(logbookWidget);
-    settingsWidget = new SettingsWidget(this);
-    ui->stackedWidget->addWidget(settingsWidget);
     aircraftWidget = new AircraftWidget(this);
     ui->stackedWidget->addWidget(aircraftWidget);
+    pilotsWidget = new PilotsWidget(this);
+    ui->stackedWidget->addWidget(pilotsWidget);
+
+    backupWidget = new BackupWidget(this);
+    ui->stackedWidget->addWidget(backupWidget);
+    settingsWidget = new SettingsWidget(this);
+    ui->stackedWidget->addWidget(settingsWidget);
     debugWidget = new DebugWidget(this);
     ui->stackedWidget->addWidget(debugWidget);
 
@@ -97,18 +100,47 @@ void MainWindow::nope()
     message_box.exec();
 }
 
+/*!
+ * \brief Connect the widgets to signals that are emitted when an update of the widegts' contents,
+ * is required, either because the database has changed (model and view need to be refreshed) or
+ * because a setting that affects the widgets layout has changed.
+ */
+void MainWindow::connectWidgets()
+{
+    QObject::connect(aDB,            &ADatabase::dataBaseUpdated,
+                     homeWidget,     &HomeWidget::refresh);
+    QObject::connect(settingsWidget, &SettingsWidget::settingChanged,
+                     homeWidget,     &HomeWidget::refresh);
+
+    QObject::connect(aDB,            &ADatabase::dataBaseUpdated,
+                     logbookWidget,  &LogbookWidget::refresh);
+    QObject::connect(settingsWidget, &SettingsWidget::settingChanged,
+                     logbookWidget,  &LogbookWidget::onLogbookWidget_viewSelectionChanged);
+
+    QObject::connect(aDB,            &ADatabase::dataBaseUpdated,
+                     aircraftWidget, &AircraftWidget::onAircraftWidget_dataBaseUpdated);
+    QObject::connect(settingsWidget, &SettingsWidget::settingChanged,
+                     aircraftWidget, &AircraftWidget::onAircraftWidget_settingChanged);
+
+    QObject::connect(aDB, &ADatabase::dataBaseUpdated,
+                     pilotsWidget,   &PilotsWidget::onPilotsWidget_databaseUpdated);
+    QObject::connect(settingsWidget, &SettingsWidget::settingChanged,
+                     pilotsWidget,   &PilotsWidget::onPilotsWidget_settingChanged);
+}
+
 /*
  * Slots
  */
 
-void MainWindow::on_actionQuit_triggered()
+void MainWindow::on_actionHome_triggered()
 {
-    QApplication::quit();
+    ui->stackedWidget->setCurrentWidget(homeWidget);
 }
 
-void MainWindow::on_actionHome_triggered()
+void MainWindow::on_actionNewFlight_triggered()
 {
-    ui->stackedWidget->setCurrentWidget(homeWidget);
+    NewFlightDialog nf(this);
+    nf.exec();
 }
 
 void MainWindow::on_actionLogbook_triggered()
@@ -116,32 +148,19 @@ void MainWindow::on_actionLogbook_triggered()
     ui->stackedWidget->setCurrentWidget(logbookWidget);
 }
 
-void MainWindow::on_actionDebug_triggered()
+void MainWindow::on_actionAircraft_triggered()
 {
-    ui->stackedWidget->setCurrentWidget(debugWidget);
+    ui->stackedWidget->setCurrentWidget(aircraftWidget);
 }
 
-void MainWindow::connectWidgets()
+void MainWindow::on_actionPilots_triggered()
 {
-    QObject::connect(aDB, &ADatabase::dataBaseUpdated,
-                     logbookWidget, &LogbookWidget::refresh);
-    QObject::connect(settingsWidget, &SettingsWidget::settingChanged,
-                     logbookWidget, &LogbookWidget::onLogbookWidget_viewSelectionChanged);
-
-    QObject::connect(aDB, &ADatabase::dataBaseUpdated,
-                     pilotsWidget, &PilotsWidget::onPilotsWidget_databaseUpdated);
-    QObject::connect(settingsWidget, &SettingsWidget::settingChanged,
-                     pilotsWidget, &PilotsWidget::onPilotsWidget_settingChanged);
-
-    QObject::connect(aDB,            &ADatabase::dataBaseUpdated,
-                     aircraftWidget, &AircraftWidget::onAircraftWidget_dataBaseUpdated);
-    QObject::connect(settingsWidget, &SettingsWidget::settingChanged,
-                     aircraftWidget, &AircraftWidget::onAircraftWidget_settingChanged);
+    ui->stackedWidget->setCurrentWidget(pilotsWidget);
+}
 
-    QObject::connect(aDB, &ADatabase::dataBaseUpdated,
-                     homeWidget, &HomeWidget::refresh);
-    QObject::connect(settingsWidget, &SettingsWidget::settingChanged,
-                     homeWidget, &HomeWidget::refresh);
+void MainWindow::on_actionBackup_triggered()
+{
+    ui->stackedWidget->setCurrentWidget(backupWidget);
 }
 
 void MainWindow::on_actionSettings_triggered()
@@ -149,23 +168,28 @@ void MainWindow::on_actionSettings_triggered()
     ui->stackedWidget->setCurrentWidget(settingsWidget);
 }
 
-void MainWindow::on_actionPilots_triggered()
+void MainWindow::on_actionQuit_triggered()
 {
-    ui->stackedWidget->setCurrentWidget(pilotsWidget);
+    QApplication::quit();
 }
 
-void MainWindow::on_actionAircraft_triggered()
+void MainWindow::on_actionDebug_triggered()
 {
-    ui->stackedWidget->setCurrentWidget(aircraftWidget);
+    ui->stackedWidget->setCurrentWidget(debugWidget);
 }
 
-void MainWindow::on_actionNewFlight_triggered()
+// Debug
+
+int MainWindow::checkDbVersion()
 {
-    NewFlightDialog nf(this);
-    nf.exec();
+    QSqlQuery query("SELECT COUNT(*) FROM changelog");
+    query.next();
+    return query.value(0).toInt();
 }
 
-void MainWindow::on_actionNewAircraft_triggered()
+// not used at the moment
+
+/*void MainWindow::on_actionNewAircraft_triggered()
 {
     NewTailDialog nt(QString(), this);
     nt.exec();
@@ -175,13 +199,4 @@ void MainWindow::on_actionNewPilot_triggered()
 {
     NewPilotDialog np(this);
     np.exec();
-}
-
-// Debug
-
-int MainWindow::checkDbVersion()
-{
-    QSqlQuery query("SELECT COUNT(*) FROM changelog");
-    query.next();
-    return query.value(0).toInt();
-}
+}*/

+ 15 - 10
mainwindow.h

@@ -32,6 +32,7 @@
 #include "src/gui/widgets/settingswidget.h"
 #include "src/gui/widgets/logbookwidget.h"
 #include "src/gui/widgets/aircraftwidget.h"
+#include "src/gui/widgets/backupwidget.h"
 #include "src/gui/widgets/pilotswidget.h"
 #include "src/gui/widgets/debugwidget.h"
 #include "src/gui/dialogues/newtaildialog.h"
@@ -56,23 +57,25 @@ public:
 
 private slots:
 
-    void on_actionQuit_triggered();
-
     void on_actionHome_triggered();
 
-    void on_actionLogbook_triggered();
-
-    void on_actionSettings_triggered();
-
     void on_actionNewFlight_triggered();
 
+    void on_actionLogbook_triggered();
+
     void on_actionAircraft_triggered();
 
-    void on_actionNewAircraft_triggered();
+    //void on_actionNewAircraft_triggered();
 
     void on_actionPilots_triggered();
 
-    void on_actionNewPilot_triggered();
+    //void on_actionNewPilot_triggered();
+
+    void on_actionBackup_triggered();
+
+    void on_actionSettings_triggered();
+
+    void on_actionQuit_triggered();
 
     void on_actionDebug_triggered();
 
@@ -83,12 +86,14 @@ private:
 
     LogbookWidget* logbookWidget;
 
-    SettingsWidget* settingsWidget;
-
     AircraftWidget* aircraftWidget;
 
     PilotsWidget* pilotsWidget;
 
+    BackupWidget* backupWidget;
+
+    SettingsWidget* settingsWidget;
+
     DebugWidget* debugWidget;
 
     void nope();

+ 22 - 1
mainwindow.ui

@@ -73,6 +73,7 @@
    <addaction name="actionLogbook"/>
    <addaction name="actionAircraft"/>
    <addaction name="actionPilots"/>
+   <addaction name="actionBackup"/>
    <addaction name="actionSettings"/>
    <addaction name="actionQuit"/>
   </widget>
@@ -80,6 +81,9 @@
    <property name="text">
     <string>NewFlight</string>
    </property>
+   <property name="toolTip">
+    <string>Add a new flight to the logbook</string>
+   </property>
    <property name="shortcut">
     <string>Ctrl+N</string>
    </property>
@@ -88,6 +92,9 @@
    <property name="text">
     <string>Quit</string>
    </property>
+   <property name="toolTip">
+    <string>Exit the application</string>
+   </property>
    <property name="shortcut">
     <string>Ctrl+Q</string>
    </property>
@@ -104,6 +111,9 @@
    <property name="text">
     <string>Settings</string>
    </property>
+   <property name="toolTip">
+    <string>Change Settings</string>
+   </property>
    <property name="shortcut">
     <string>Ctrl+S</string>
    </property>
@@ -121,7 +131,7 @@
     <string>Aircraft</string>
    </property>
    <property name="toolTip">
-    <string>Show or edit Aircraft</string>
+    <string>Show or edit your aircraft</string>
    </property>
    <property name="shortcut">
     <string>Ctrl+A</string>
@@ -162,6 +172,17 @@
     <string>Ctrl+D</string>
    </property>
   </action>
+  <action name="actionBackup">
+   <property name="text">
+    <string>Backup</string>
+   </property>
+   <property name="toolTip">
+    <string>Create or restore a backup of the database</string>
+   </property>
+   <property name="shortcut">
+    <string>Ctrl+B</string>
+   </property>
+  </action>
  </widget>
  <resources/>
  <connections/>

+ 3 - 0
openPilotLog.pro

@@ -41,6 +41,7 @@ SOURCES += \
     src/gui/dialogues/newpilotdialog.cpp \
     src/gui/dialogues/newtaildialog.cpp \
     src/gui/widgets/aircraftwidget.cpp \
+    src/gui/widgets/backupwidget.cpp \
     src/gui/widgets/debugwidget.cpp \
     src/gui/widgets/homewidget.cpp \
     src/gui/widgets/logbookwidget.cpp \
@@ -76,6 +77,7 @@ HEADERS += \
     src/gui/dialogues/newpilotdialog.h \
     src/gui/dialogues/newtaildialog.h \
     src/gui/widgets/aircraftwidget.h \
+    src/gui/widgets/backupwidget.h \
     src/gui/widgets/debugwidget.h \
     src/gui/widgets/homewidget.h \
     src/gui/widgets/logbookwidget.h \
@@ -93,6 +95,7 @@ FORMS += \
     src/gui/dialogues/newpilot.ui \
     src/gui/dialogues/newtail.ui \
     src/gui/widgets/aircraftwidget.ui \
+    src/gui/widgets/backupwidget.ui \
     src/gui/widgets/debugwidget.ui \
     src/gui/widgets/homewidget.ui \
     src/gui/widgets/logbookwidget.ui \

+ 125 - 0
src/gui/widgets/backupwidget.cpp

@@ -0,0 +1,125 @@
+#include "backupwidget.h"
+#include "ui_backupwidget.h"
+#include "src/classes/astandardpaths.h"
+
+#include <QStandardItemModel>
+#include <QFileIconProvider>
+
+BackupWidget::BackupWidget(QWidget *parent) :
+    QWidget(parent),
+    ui(new Ui::BackupWidget)
+{
+    ui->setupUi(this);
+
+    /* This is just a quick and dirty overview to get something into the view so you have an idea.
+     * The goal is that the view does not just display file names, but a String, for example
+     *
+     * Available Backups
+     * =================
+     * 2020-01-01 - 476 Flights, 23 Aircraft, 12 Pilots, 1580:33 Total Time, Last Flight 2019-12-28
+     * 2020-02-02 - 512 Flights, 25 Aircraft, 13 Pilots, 1640:47 Total Time, Last Flight 2020-01-23
+     * ...
+     *
+     * So instead of QFileSystemModel with QListView, which would be the easiest way, using QAbstractItemModel
+     * and QTableView might be preferable since it allows us to customize the data we display.
+     *
+     * Below is just some sample code to fill the table with data to give you an impression of what
+     * the end result is supposed to be like. If you have another idea of how to get there, that's fine as well!
+     *
+     */
+
+    fillTableWithSampleData();
+}
+
+BackupWidget::~BackupWidget()
+{
+    delete ui;
+}
+
+
+void BackupWidget::on_createLocalPushButton_clicked()
+{
+    // Copy database to backupdir
+}
+
+void BackupWidget::on_restoreLocalPushButton_clicked()
+{
+    // Restore the selected entry from the list
+}
+
+void BackupWidget::on_deleteSelectedPushButton_clicked()
+{
+    // Remove selected backup from list and delete file.
+}
+
+void BackupWidget::on_createExternalPushButton_clicked()
+{
+    // Open something like a QFileDialog and let the user choose where to save the backup
+}
+
+void BackupWidget::on_restoreExternalPushButton_clicked()
+{
+    // Open something like a QFileDialog and let the user choose where to load the backup from
+}
+
+void BackupWidget::on_aboutPushButton_clicked()
+{
+    // Shows a message box explaining a little about local and external backups
+}
+
+
+
+// ===================================================================================
+
+// feel free to delete this as you go along, just here for demonstration purposes
+void BackupWidget::fillTableWithSampleData()
+{
+    // First column in table, would be created by listing the files in backupdir
+    QList<QStandardItem *> filenames{
+    };
+    QStringList filenames_string_list {
+        "logbook_bak_2021_02_12_T_22_03.db",
+        "logbook_bak_2021_01_15_T_18_32.db",
+        "logbook_bak_2020_12_23_T_14_27.db",
+        "logbook_bak_2020_11_21_T_23_43.db",
+        "logbook_bak_2020_10_30_T_17_55.db",
+    };
+    QFileIconProvider provider;
+    for (const auto &string : filenames_string_list) {
+        auto item = new QStandardItem(string);
+        item->setIcon(provider.icon(QFileIconProvider::File));
+        filenames.append(item);
+    }
+
+    // Second column, would be created by reading the details from each file and creating the description string
+    QList<QStandardItem *> descriptions{
+    };
+    QStringList descriptions_string_list {
+        "2020-02-12 - 512 Flights, 25 Aircraft, 44 Pilots, 1640:47 Total Time, Last Flight 2020-01-23",
+        "2020-01-15 - 476 Flights, 24 Aircraft, 42 Pilots, 1490:23 Total Time, Last Flight 2019-12-06",
+        "2020-12-23 - 452 Flights, 19 Aircraft, 39 Pilots, 1460:34 Total Time, Last Flight 2019-11-23",
+        "2020-11-21 - 435 Flights, 17 Aircraft, 33 Pilots, 1373:25 Total Time, Last Flight 2019-10-16",
+        "2020-10-30 - 419 Flights, 15 Aircraft, 12 Pilots, 1337:02 Total Time, Last Flight 2019-09-24",
+    };
+    for (const auto &string : descriptions_string_list) {
+        auto item = new QStandardItem(string);
+        descriptions.append(item);
+    }
+
+    // create and populate the model
+    model = new QStandardItemModel(this);
+    model->insertColumn(0, filenames);
+    model->insertColumn(1, descriptions);
+    model->setHorizontalHeaderLabels(QStringList{"Backup File","Summary"});
+    // prepare and show the view
+    auto view = ui->tableView;
+    view->setModel(model);
+    view->setSelectionBehavior(QAbstractItemView::SelectRows);
+    view->setSelectionMode(QAbstractItemView::SingleSelection);
+    view->setEditTriggers(QAbstractItemView::NoEditTriggers);
+    view->horizontalHeader()->setStretchLastSection(QHeaderView::Stretch);
+    view->verticalHeader()->hide();
+    view->setAlternatingRowColors(true);
+    view->resizeColumnsToContents();
+    view->setColumnWidth(0, ui->tableView->columnWidth(0) + 20);
+}

+ 40 - 0
src/gui/widgets/backupwidget.h

@@ -0,0 +1,40 @@
+#ifndef BACKUPWIDGET_H
+#define BACKUPWIDGET_H
+
+#include <QWidget>
+#include <QStandardItemModel>
+
+namespace Ui {
+class BackupWidget;
+}
+
+class BackupWidget : public QWidget
+{
+    Q_OBJECT
+
+public:
+    explicit BackupWidget(QWidget *parent = nullptr);
+    ~BackupWidget();
+
+private slots:
+    void on_createLocalPushButton_clicked();
+
+    void on_restoreLocalPushButton_clicked();
+
+    void on_deleteSelectedPushButton_clicked();
+
+    void on_createExternalPushButton_clicked();
+
+    void on_restoreExternalPushButton_clicked();
+
+    void on_aboutPushButton_clicked();
+
+private:
+    Ui::BackupWidget *ui;
+
+    QStandardItemModel* model;
+
+    void fillTableWithSampleData();
+};
+
+#endif // BACKUPWIDGET_H

+ 133 - 0
src/gui/widgets/backupwidget.ui

@@ -0,0 +1,133 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>BackupWidget</class>
+ <widget class="QWidget" name="BackupWidget">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>1280</width>
+    <height>720</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Form</string>
+  </property>
+  <layout class="QGridLayout" name="gridLayout">
+   <item row="3" column="0">
+    <widget class="QTableView" name="tableView"/>
+   </item>
+   <item row="5" column="0">
+    <widget class="Line" name="line_2">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+    </widget>
+   </item>
+   <item row="0" column="0">
+    <layout class="QHBoxLayout" name="horizontalLayout_2">
+     <item>
+      <widget class="QLabel" name="aboutSpacerLabel1">
+       <property name="text">
+        <string/>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QLabel" name="aboutSpacerLabel2">
+       <property name="text">
+        <string/>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QLabel" name="aboutSpacerLabel3">
+       <property name="text">
+        <string/>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QPushButton" name="aboutPushButton">
+       <property name="text">
+        <string>About Backups</string>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item row="9" column="0">
+    <widget class="QPushButton" name="createExternalPushButton">
+     <property name="text">
+      <string>Create External Backup</string>
+     </property>
+    </widget>
+   </item>
+   <item row="7" column="0">
+    <widget class="QPushButton" name="restoreLocalPushButton">
+     <property name="text">
+      <string>Restore Local Backup</string>
+     </property>
+    </widget>
+   </item>
+   <item row="6" column="0">
+    <widget class="QPushButton" name="createLocalPushButton">
+     <property name="text">
+      <string>Create Local Backup</string>
+     </property>
+    </widget>
+   </item>
+   <item row="1" column="0">
+    <layout class="QHBoxLayout" name="horizontalLayout">
+     <item>
+      <widget class="QLabel" name="titleSpacerLabel1">
+       <property name="text">
+        <string/>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QLabel" name="availableBackupsLabel">
+       <property name="text">
+        <string>Available Backups</string>
+       </property>
+       <property name="alignment">
+        <set>Qt::AlignCenter</set>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QLabel" name="titleSpacerLabel2">
+       <property name="text">
+        <string/>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item row="2" column="0">
+    <widget class="Line" name="line">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+    </widget>
+   </item>
+   <item row="10" column="0">
+    <widget class="QPushButton" name="restoreExternalPushButton">
+     <property name="text">
+      <string>Restore External Backup</string>
+     </property>
+    </widget>
+   </item>
+   <item row="8" column="0">
+    <widget class="QPushButton" name="deleteSelectedPushButton">
+     <property name="text">
+      <string>Delete Selected Backup</string>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>

+ 2 - 2
src/gui/widgets/settingswidget.cpp

@@ -361,8 +361,8 @@ void SettingsWidget::on_acAllowIncompleteComboBox_currentIndexChanged(int index)
 void SettingsWidget::on_aboutPushButton_clicked()
 {
     QMessageBox message_box(this);
-    QPixmap icon = QPixmap(Opl::Assets::ICON_ABOUT);
-    message_box.setIconPixmap(icon);
+    QPixmap icon = QPixmap(Opl::Assets::ICON_MAIN);
+    message_box.setIconPixmap(icon.scaledToWidth(64, Qt::TransformationMode::SmoothTransformation));
     QString SQLITE_VERSION = aDB->sqliteVersion();
     QString text = QMessageBox::tr(
 

+ 5 - 3
src/oplconstants.h

@@ -176,9 +176,11 @@ static const auto DEFAULT_AIRCRAFT_POSITION = DataPosition(TABLE_AIRCRAFT, 0);
 
 namespace Assets {
 
-static const auto LOGO                          = QLatin1String(":/icons/opl-icons/app/opl_logo.svg");
-static const auto ICON_APPICON                  = QLatin1String(":/icons/opl-icons/app/icon_main.svg");
-static const auto ICON_ABOUT                    = QLatin1String(":/icons/opl-icons/app/icon_about.png");
+static const auto LOGO                          = QLatin1String(":/icons/opl-icons/logos/logo_text.png");
+static const auto ICON_MAIN                     = QLatin1String(":/icons/opl-icons/app/icon_main.png");
+static const auto ICON_APPICON_LINUX            = QLatin1String(":/icons/opl-icons/app/icon_linux.svg");
+static const auto ICON_APPICON_IOS              = QLatin1String(":/icons/opl-icons/app/icon_ios.svg");
+static const auto ICON_APPICON_WIN              = QLatin1String(":/icons/opl-icons/app/icon_windows.ico");
 
 static const auto ICON_TOOLBAR_HOME             = QLatin1String(":/icons/opl-icons/toolbar/thick/light/icon_home.svg");
 static const auto ICON_TOOLBAR_NEW_FLIGHT       = QLatin1String(":/icons/opl-icons/toolbar/thick/light/icon_new_flight.svg");

Vissa filer visades inte eftersom för många filer har ändrats