2021-03-25 05:00:19 -07:00
# include "mainwindow.h"
# include "ui_mainwindow.h"
# include "settings.h"
# include "ui_settings.h"
# include "apps.h"
# include "ui_apps.h"
2021-04-05 06:50:58 -07:00
# include "functions.h"
2021-03-25 05:00:19 -07:00
# include <QTime>
# include <QDateTime>
# include <QTimer>
2021-04-22 10:56:29 -07:00
# include <QDebug>
2021-03-25 05:00:19 -07:00
# include <QMessageBox>
# include <QString>
# include <QFile>
# include <string>
# include <iostream>
# include <fstream>
# include <QTextStream>
# include <QPixmap>
# include <QScreen>
2021-03-29 18:47:21 -07:00
# include <QFont>
# include <QFontDatabase>
2021-04-24 06:34:35 -07:00
# include <QPagedPaintDevice>
2021-03-25 05:00:19 -07:00
using namespace std ;
MainWindow : : MainWindow ( QWidget * parent )
: QMainWindow ( parent )
, ui ( new Ui : : MainWindow )
{
ui - > setupUi ( this ) ;
ui - > settingsBtn - > setProperty ( " type " , " borderless " ) ;
ui - > appsBtn - > setProperty ( " type " , " borderless " ) ;
ui - > quitBtn - > setProperty ( " type " , " borderless " ) ;
ui - > searchBtn - > setProperty ( " type " , " borderless " ) ;
ui - > pushButton - > setProperty ( " type " , " borderless " ) ;
2021-03-28 19:18:48 -07:00
ui - > brightnessBtn - > setProperty ( " type " , " borderless " ) ;
2021-04-23 19:23:24 -07:00
ui - > homeBtn - > setProperty ( " type " , " borderless " ) ;
2021-03-25 05:00:19 -07:00
ui - > settingsBtn - > setText ( " " ) ;
ui - > appsBtn - > setText ( " " ) ;
ui - > pushButton - > setText ( " " ) ;
ui - > quitBtn - > setText ( " " ) ;
ui - > searchBtn - > setText ( " " ) ;
2021-03-28 19:18:48 -07:00
ui - > brightnessBtn - > setText ( " " ) ;
2021-04-23 19:23:24 -07:00
ui - > homeBtn - > setText ( " " ) ;
2021-04-24 06:34:35 -07:00
ui - > quoteLabel - > setText ( " " ) ;
ui - > quotePictureLabel - > setText ( " " ) ;
2021-03-25 05:00:19 -07:00
2021-04-23 19:23:24 -07:00
ui - > quoteHeadingLabel - > setStyleSheet ( " padding: 30px " ) ;
2021-04-24 06:34:35 -07:00
ui - > homeBtn - > setStyleSheet ( " padding: 5px " ) ;
2021-04-23 05:47:05 -07:00
2021-05-13 18:40:05 -07:00
// Initializing some variables
2021-04-23 05:47:05 -07:00
global : : battery : : showLowBatteryDialog = true ;
global : : battery : : showCriticalBatteryAlert = true ;
2021-05-09 11:07:05 -07:00
global : : usbms : : showUsbmsDialog = true ;
global : : usbms : : launchUsbms = false ;
2021-05-13 18:40:05 -07:00
global : : usbms : : koboxExportExtensions = false ;
2021-04-24 06:34:35 -07:00
global : : mainwindow : : tabSwitcher : : repaint = true ;
2021-04-23 05:47:05 -07:00
2021-03-25 05:00:19 -07:00
// Getting the screen's size
2021-04-23 19:23:24 -07:00
sW = QGuiApplication : : screens ( ) [ 0 ] - > size ( ) . width ( ) ;
sH = QGuiApplication : : screens ( ) [ 0 ] - > size ( ) . height ( ) ;
2021-03-25 05:00:19 -07:00
2021-04-23 19:23:24 -07:00
// Defining what the default icon size will be
2021-05-16 19:28:08 -07:00
string_checkconfig_ro ( " /opt/inkbox_device " ) ;
2021-03-25 05:00:19 -07:00
if ( checkconfig_str_val = = " n705 \n " ) {
stdIconWidth = sW / 12 ;
stdIconHeight = sH / 12 ;
2021-03-29 05:04:46 -07:00
brightnessIconWidth = sW / 24 ;
brightnessIconHeight = sH / 24 ;
2021-04-23 19:23:24 -07:00
homeIconWidth = sW / 18 ;
homeIconHeight = sW / 18 ;
2021-03-25 05:00:19 -07:00
}
else {
stdIconWidth = sW / 14 ;
stdIconHeight = sH / 14 ;
2021-03-29 05:04:46 -07:00
brightnessIconWidth = sW / 26 ;
brightnessIconHeight = sH / 26 ;
2021-04-23 19:23:24 -07:00
homeIconWidth = sW / 20 ;
homeIconHeight = sW / 20 ;
2021-03-25 05:00:19 -07:00
}
// Setting icons up
ui - > pushButton - > setIcon ( QIcon ( " :/resources/book.png " ) ) ;
ui - > pushButton - > setIconSize ( QSize ( stdIconWidth , stdIconHeight ) ) ;
ui - > searchBtn - > setIcon ( QIcon ( " :/resources/search.png " ) ) ;
ui - > searchBtn - > setIconSize ( QSize ( stdIconWidth , stdIconHeight ) ) ;
ui - > settingsBtn - > setIcon ( QIcon ( " :/resources/settings.png " ) ) ;
ui - > settingsBtn - > setIconSize ( QSize ( stdIconWidth , stdIconHeight ) ) ;
ui - > appsBtn - > setIcon ( QIcon ( " :/resources/apps.png " ) ) ;
ui - > appsBtn - > setIconSize ( QSize ( stdIconWidth , stdIconHeight ) ) ;
ui - > quitBtn - > setIcon ( QIcon ( " :/resources/power.png " ) ) ;
ui - > quitBtn - > setIconSize ( QSize ( stdIconWidth , stdIconHeight ) ) ;
2021-04-23 19:23:24 -07:00
ui - > homeBtn - > setIcon ( QIcon ( " :/resources/home.png " ) ) ;
ui - > homeBtn - > setIconSize ( QSize ( homeIconWidth , homeIconHeight ) ) ;
2021-03-28 19:18:48 -07:00
ui - > brightnessBtn - > setIcon ( QIcon ( " :/resources/frontlight.png " ) ) ;
ui - > brightnessBtn - > setIconSize ( QSize ( brightnessIconWidth , brightnessIconHeight ) ) ;
2021-06-23 08:26:00 -07:00
setBatteryIcon ( ) ;
2021-03-29 05:04:46 -07:00
2021-03-29 18:47:21 -07:00
int id = QFontDatabase : : addApplicationFont ( " :/resources/fonts/CrimsonPro-Regular.ttf " ) ;
QString family = QFontDatabase : : applicationFontFamilies ( id ) . at ( 0 ) ;
QFont crimson ( family ) ;
ui - > book1Btn - > setFont ( QFont ( crimson ) ) ;
ui - > book2Btn - > setFont ( QFont ( crimson ) ) ;
ui - > book3Btn - > setFont ( QFont ( crimson ) ) ;
ui - > book4Btn - > setFont ( QFont ( crimson ) ) ;
2021-03-25 05:00:19 -07:00
ui - > book1Btn - > setStyleSheet ( " font-size: 11pt; padding: 25px " ) ;
ui - > book2Btn - > setStyleSheet ( " font-size: 11pt; padding: 25px " ) ;
ui - > book3Btn - > setStyleSheet ( " font-size: 11pt; padding: 25px " ) ;
ui - > book4Btn - > setStyleSheet ( " font-size: 11pt; padding: 25px " ) ;
2021-03-29 05:04:46 -07:00
ui - > brightnessBtn - > setStyleSheet ( " font-size: 9pt; padding-bottom: 5px; padding-top: 5px; padding-left: 8px; padding-right: 8px; " ) ;
2021-03-30 04:35:58 -07:00
2021-04-09 17:54:20 -07:00
// Checking if we have a Mini or Touch there
2021-03-30 04:35:58 -07:00
string_checkconfig_ro ( " /opt/inkbox_device " ) ;
2021-04-09 17:54:20 -07:00
if ( checkconfig_str_val = = " n705 \n " or checkconfig_str_val = = " n905 \n " ) {
2021-03-30 04:35:58 -07:00
ui - > batteryIcon - > setStyleSheet ( " font-size: 5pt; padding-bottom: 0px; padding-top: 0px; padding-left: 1px; padding-right: 1px; " ) ;
}
else {
ui - > batteryIcon - > setStyleSheet ( " font-size: 5pt; padding-bottom: 0px; padding-top: 0px; padding-left: 8px; padding-right: 8px; " ) ;
}
2021-03-29 05:04:46 -07:00
ui - > line_7 - > setStyleSheet ( " padding: 0px " ) ;
2021-03-28 19:18:48 -07:00
ui - > batteryIcon - > setText ( " " ) ;
2021-03-29 05:04:46 -07:00
ui - > batteryLabel - > setText ( " " ) ;
ui - > timeLabel - > setText ( " " ) ;
ui - > batteryLabel - > setStyleSheet ( " padding-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px " ) ;
2021-03-28 19:18:48 -07:00
2021-03-25 05:00:19 -07:00
ui - > book1Btn - > hide ( ) ;
ui - > book2Btn - > hide ( ) ;
ui - > book3Btn - > hide ( ) ;
ui - > book4Btn - > hide ( ) ;
ui - > recentBooksLabel - > hide ( ) ;
// Stylesheet
QFile stylesheetFile ( " :/resources/eink.qss " ) ;
stylesheetFile . open ( QFile : : ReadOnly ) ;
this - > setStyleSheet ( stylesheetFile . readAll ( ) ) ;
stylesheetFile . close ( ) ;
// Running rootfs changes script if it's there
2021-04-04 18:02:08 -07:00
// Not a big security flaw anymore. InkBox OS verifies the digital signature of the update package and aborts the update if it's not genuine.
2021-03-25 05:00:19 -07:00
if ( checkconfig ( " /opt/inkbox_genuine " ) = = true ) {
if ( checkconfig ( " /external_root/opt/update/inkbox_updated " ) = = true ) {
2021-03-27 12:13:37 -07:00
// Checking if we need to reboot after running the two scripts
if ( checkconfig ( " /mnt/onboard/onboard/.inkbox/reboot " ) = = true ) {
reboot_after_update = true ;
QFile : : remove ( " /mnt/onboard/onboard/.inkbox/reboot " ) ;
}
else {
reboot_after_update = false ;
}
QFile : : copy ( " /mnt/onboard/onboard/.inkbox/rootfs.sh " , " /external_root/tmp/rootfs.sh " ) ;
QFile : : copy ( " /mnt/onboard/onboard/.inkbox/rootfs-internal.sh " , " /tmp/rootfs-internal.sh " ) ;
// First script
QString rootfs_internal_prog ( " sh " ) ;
QStringList rootfs_internal_args ;
rootfs_internal_args < < " /tmp/rootfs-internal.sh " ;
// Removing script
QFile : : remove ( " /mnt/onboard/onboard/.inkbox/rootfs-internal.sh " ) ;
QProcess * rootfs_internal_proc = new QProcess ( ) ;
rootfs_internal_proc - > start ( rootfs_internal_prog , rootfs_internal_args ) ;
rootfs_internal_proc - > waitForFinished ( ) ;
2021-04-01 14:36:42 -07:00
// Second script
QString rootfs_prog ( " chroot " ) ;
QStringList rootfs_args ;
rootfs_args < < " /external_root " < < " /tmp/rootfs.sh " ;
// Removing script
QFile : : remove ( " /mnt/onboard/onboard/.inkbox/rootfs.sh " ) ;
QProcess * rootfs_proc = new QProcess ( ) ;
rootfs_proc - > start ( rootfs_prog , rootfs_args ) ;
rootfs_proc - > waitForFinished ( ) ;
2021-04-25 08:27:51 -07:00
// Removing update directory contents
QDir dir ( " /mnt/onboard/onboard/.inkbox " ) ;
dir . removeRecursively ( ) ;
// Re-creating update directory
QString path ( " /mnt/onboard/onboard/.inkbox " ) ;
dir . mkpath ( path ) ;
2021-03-27 12:13:37 -07:00
// Rebooting if needed
if ( reboot_after_update = = true ) {
2021-04-22 04:38:54 -07:00
reboot ( false ) ;
2021-03-27 12:13:37 -07:00
}
else {
// Update process finished.
;
}
2021-03-25 05:00:19 -07:00
}
}
else {
;
}
// Custom settings
// Reading from the config files and tweaking the program according to the options set
// Safety mesure; /inkbox is a tmpfs
2021-04-23 05:47:05 -07:00
string_writeconfig ( " /tmp/skip_opendialog " , " true " ) ;
2021-04-22 07:10:47 -07:00
global : : reader : : skipOpenDialog = false ;
2021-03-25 05:00:19 -07:00
// Demo setting, changes "Welcome to InkBox" label to "InkBox"
if ( checkconfig ( " .config/01-demo/config " ) = = true ) {
ui - > inkboxLabel - > setText ( " InkBox " ) ;
}
2021-04-23 05:47:05 -07:00
// Dark mode; write to the Kobo Nightmode FIFO
2021-04-05 12:35:25 -07:00
if ( checkconfig ( " .config/10-dark_mode/config " ) = = true ) {
string_writeconfig ( " /tmp/invertScreen " , " y " ) ;
}
else {
string_writeconfig ( " /tmp/invertScreen " , " n " ) ;
2021-03-25 05:00:19 -07:00
}
// Clock setting to show seconds
if ( checkconfig ( " .config/02-clock/config " ) = = true ) {
QTimer * t = new QTimer ( this ) ;
t - > setInterval ( 500 ) ;
connect ( t , & QTimer : : timeout , [ & ] ( ) {
QString time = QTime : : currentTime ( ) . toString ( " hh:mm:ss " ) ;
2021-03-28 19:18:48 -07:00
get_battery_level ( ) ;
2021-03-25 05:00:19 -07:00
ui - > timeLabel - > setText ( time ) ;
2021-03-28 19:18:48 -07:00
ui - > batteryLabel - > setText ( batt_level ) ;
2021-03-25 05:00:19 -07:00
} ) ;
t - > start ( ) ;
}
else {
QTimer * t = new QTimer ( this ) ;
t - > setInterval ( 500 ) ;
connect ( t , & QTimer : : timeout , [ & ] ( ) {
QString time = QTime : : currentTime ( ) . toString ( " hh:mm " ) ;
2021-03-28 19:18:48 -07:00
get_battery_level ( ) ;
2021-03-25 05:00:19 -07:00
ui - > timeLabel - > setText ( time ) ;
2021-03-28 19:18:48 -07:00
ui - > batteryLabel - > setText ( batt_level ) ;
2021-03-25 05:00:19 -07:00
} ) ;
t - > start ( ) ;
}
2021-04-23 16:22:53 -07:00
// Battery watchdog
2021-04-23 05:47:05 -07:00
QTimer * batteryWatchdog = new QTimer ( this ) ;
batteryWatchdog - > setInterval ( 2000 ) ;
connect ( batteryWatchdog , & QTimer : : timeout , [ & ] ( ) {
// Checking if battery level is low
if ( global : : battery : : showCriticalBatteryAlert ! = true ) {
;
}
else {
if ( isBatteryCritical ( ) = = true ) {
qDebug ( ) < < " Warning! Battery is at a critical charge level! " ;
openCriticalBatteryAlertWindow ( ) ;
}
}
if ( global : : battery : : showLowBatteryDialog ! = true ) {
// Do nothing, since a dialog should already have been displayed and (probably) dismissed
;
}
else {
if ( isBatteryLow ( ) = = true ) {
if ( global : : battery : : batteryAlertLock = = true ) {
;
}
else {
qDebug ( ) < < " Warning! Battery is low! " ;
string_checkconfig_ro ( " /sys/devices/platform/pmic_battery.1/power_supply/mc13892_bat/status " ) ;
if ( checkconfig_str_val = = " Charging \n " ) {
;
}
else {
openLowBatteryDialog ( ) ;
}
}
}
}
} ) ;
batteryWatchdog - > start ( ) ;
2021-05-07 22:03:25 -07:00
// USB mass storage prompt
QTimer * usbmsPrompt = new QTimer ( this ) ;
usbmsPrompt - > setInterval ( 2000 ) ;
connect ( usbmsPrompt , & QTimer : : timeout , [ & ] ( ) {
2021-05-09 11:07:05 -07:00
if ( checkconfig ( " /opt/inkbox_genuine " ) = = true ) {
if ( global : : usbms : : showUsbmsDialog ! = true ) {
2021-05-07 22:03:25 -07:00
;
}
else {
2021-05-09 11:07:05 -07:00
string_checkconfig_ro ( " /sys/devices/platform/fsl-usb2-udc/gadget/suspended " ) ;
if ( checkconfig_str_val ! = " 0 \n " ) {
// Loop again...
;
}
else {
// An USB cable is connected!
openUsbmsDialog ( ) ;
}
2021-05-07 22:03:25 -07:00
}
}
2021-05-09 11:07:05 -07:00
else {
// Do nothing, we're running along with Nickel & friends...
;
}
2021-05-07 22:03:25 -07:00
} ) ;
2021-05-09 14:09:16 -07:00
// **** FEATURE WARNING ****
2021-05-13 17:42:50 -07:00
// Due to the fsl-usb2-udc/gadget/suspended file which really only changes after a real plug/unplug of the USB cable, further development on this feature is no longer possible and is abandoned unless a fix is found.
// Problem encontered: it would prompt to connect after a fresh reboot even if no USB cable was plugged in.
2021-06-20 10:31:24 -07:00
//
2021-05-09 14:09:16 -07:00
// usbmsPrompt->start();
2021-06-20 10:31:24 -07:00
//
2021-05-09 14:09:16 -07:00
// **** FEATURE WARNING ****
2021-05-07 22:03:25 -07:00
2021-03-25 05:00:19 -07:00
// We set the brightness level saved in the config file
int brightness_value = brightness_checkconfig ( " .config/03-brightness/config " ) ;
set_brightness ( brightness_value ) ;
// Display quote if requested; otherwise, display recent books
string_checkconfig ( " .config/05-quote/config " ) ;
if ( checkconfig_str_val = = " " ) {
if ( checkconfig ( " /opt/inkbox_genuine " ) = = true ) {
checked_box = true ;
writeconfig ( " .config/05-quote/config " , " DisableQuote= " ) ;
}
else {
checked_box = false ;
writeconfig ( " .config/05-quote/config " , " DisableQuote= " ) ;
}
}
if ( checkconfig ( " .config/05-quote/config " ) = = false ) {
int quote_value = display_quote ( ) ;
if ( quote_value = = 1 ) {
QPixmap pm ( " :/resources/chesterton.jpg " ) ;
ui - > quotePictureLabel - > setPixmap ( pm ) ;
ui - > quotePictureLabel - > setScaledContents ( true ) ;
ui - > quoteLabel - > setText ( " “A good novel tells us the truth about its hero; but a bad novel tells us the truth about its author.” \n ― G.K. Chesterton " ) ;
}
if ( quote_value = = 2 ) {
QPixmap pm ( " :/resources/alcott.jpg " ) ;
ui - > quotePictureLabel - > setPixmap ( pm ) ;
ui - > quotePictureLabel - > setScaledContents ( true ) ;
ui - > quoteLabel - > setText ( " “I've got the key to my castle in the air, but whether I can unlock the door remains to be seen.” \n ― Louisa May Alcott " ) ;
}
if ( quote_value = = 3 ) {
QPixmap pm ( " :/resources/king.jpg " ) ;
ui - > quotePictureLabel - > setPixmap ( pm ) ;
ui - > quotePictureLabel - > setScaledContents ( true ) ;
ui - > quoteLabel - > setText ( " “Quiet people have the loudest minds” \n ― Stephen King " ) ;
}
if ( quote_value = = 4 ) {
QPixmap pm ( " :/resources/davies.jpg " ) ;
ui - > quotePictureLabel - > setPixmap ( pm ) ;
ui - > quotePictureLabel - > setScaledContents ( true ) ;
ui - > quoteLabel - > setText ( " “Authors like cats because they are such quiet, lovable, wise creatures, and cats like authors for the same reasons.” \n ― Robertson Davies " ) ;
}
if ( quote_value = = 5 ) {
QPixmap pm ( " :/resources/christie.png " ) ;
ui - > quotePictureLabel - > setPixmap ( pm ) ;
ui - > quotePictureLabel - > setScaledContents ( true ) ;
ui - > quoteLabel - > setText ( " “One of the saddest things in life, is the things one remembers.” \n ― Agatha Christie " ) ;
}
}
else {
2021-04-24 06:34:35 -07:00
ui - > gridLayout_4 - > deleteLater ( ) ;
ui - > quotePictureLabel - > deleteLater ( ) ;
ui - > quoteLabel - > deleteLater ( ) ;
2021-03-25 05:00:19 -07:00
ui - > quoteHeadingLabel - > setText ( " Books " ) ;
ui - > book1Btn - > show ( ) ;
ui - > book2Btn - > show ( ) ;
ui - > book3Btn - > show ( ) ;
ui - > book4Btn - > show ( ) ;
// Book 1
string_checkconfig ( " .config/08-recent_books/1 " ) ;
if ( checkconfig_str_val = = " " ) {
ui - > book1Btn - > hide ( ) ;
}
else {
relative_path = checkconfig_str_val . split ( " / " ) . last ( ) ;
relative_path . prepend ( " " ) ;
relative_path . append ( " " ) ;
ui - > book1Btn - > setText ( relative_path ) ;
existing_recent_books = true ;
}
// Book 2
string_checkconfig ( " .config/08-recent_books/2 " ) ;
if ( checkconfig_str_val = = " " ) {
ui - > book2Btn - > hide ( ) ;
}
else {
relative_path = checkconfig_str_val . split ( " / " ) . last ( ) ;
relative_path . prepend ( " " ) ;
relative_path . append ( " " ) ;
ui - > book2Btn - > setText ( relative_path ) ;
existing_recent_books = true ;
}
// Book 3
string_checkconfig ( " .config/08-recent_books/3 " ) ;
if ( checkconfig_str_val = = " " ) {
ui - > book3Btn - > hide ( ) ;
}
else {
relative_path = checkconfig_str_val . split ( " / " ) . last ( ) ;
relative_path . prepend ( " " ) ;
relative_path . append ( " " ) ;
ui - > book3Btn - > setText ( relative_path ) ;
existing_recent_books = true ;
}
// Book 4
string_checkconfig ( " .config/08-recent_books/4 " ) ;
if ( checkconfig_str_val = = " " ) {
ui - > book4Btn - > hide ( ) ;
}
else {
relative_path = checkconfig_str_val . split ( " / " ) . last ( ) ;
relative_path . prepend ( " " ) ;
relative_path . append ( " " ) ;
ui - > book4Btn - > setText ( relative_path ) ;
existing_recent_books = true ;
}
// Preventing from having the same label two times
if ( ui - > book2Btn - > text ( ) = = ui - > book1Btn - > text ( ) ) {
ui - > book2Btn - > hide ( ) ;
}
2021-04-30 20:19:54 -07:00
else if ( ui - > book3Btn - > text ( ) = = ui - > book1Btn - > text ( ) ) {
2021-03-25 05:00:19 -07:00
ui - > book3Btn - > hide ( ) ;
}
2021-04-30 20:19:54 -07:00
else if ( ui - > book4Btn - > text ( ) = = ui - > book1Btn - > text ( ) ) {
2021-03-25 05:00:19 -07:00
ui - > book4Btn - > hide ( ) ;
}
2021-04-30 20:19:54 -07:00
else if ( existing_recent_books = = false ) {
2021-03-25 05:00:19 -07:00
ui - > recentBooksLabel - > show ( ) ;
}
else {
ui - > recentBooksLabel - > hide ( ) ;
}
}
2021-04-01 05:58:37 -07:00
// Check for an update and ask if the user wants to install it
if ( checkconfig ( " /mnt/onboard/onboard/.inkbox/can_update " ) = = true ) {
if ( checkconfig ( " /tmp/cancelUpdateDialog " ) = = false ) {
// I'm sorry.
2021-04-22 04:38:54 -07:00
qDebug ( ) < < " An update is available. " ;
2021-04-01 05:58:37 -07:00
QTimer : : singleShot ( 2000 , this , SLOT ( openUpdateDialog ( ) ) ) ;
}
else {
qDebug ( ) < < " Not showing update dialog, user dismissed it... " ;
}
}
2021-03-25 05:00:19 -07:00
// Check if it's the first boot since an update and confirm that it installed successfully
if ( checkconfig ( " /opt/inkbox_genuine " ) = = true ) {
if ( checkconfig ( " /external_root/opt/update/inkbox_updated " ) = = true ) {
string_checkconfig_ro ( " /external_root/opt/isa/version " ) ;
QString updatemsg = " InkBox update to v " ;
updatemsg = updatemsg . append ( checkconfig_str_val ) ;
updatemsg = updatemsg . remove ( QRegExp ( " [ \n ] " ) ) ;
updatemsg = updatemsg . append ( " completed successfully. \n \n Changelog: \n " ) ;
string_checkconfig_ro ( " /external_root/opt/isa/changelog " ) ;
updatemsg = updatemsg . append ( checkconfig_str_val ) ;
QMessageBox : : information ( this , tr ( " Information " ) , updatemsg ) ;
string_writeconfig ( " /external_root/opt/update/inkbox_updated " , " false " ) ;
}
}
2021-05-13 17:42:50 -07:00
// Write current running version to a file for utility purposes
{
string_checkconfig_ro ( " /external_root/opt/isa/version " ) ;
std : : string inkbox_version = checkconfig_str_val . toStdString ( ) ;
string_writeconfig ( " /opt/version " , inkbox_version ) ;
}
2021-03-25 05:00:19 -07:00
}
MainWindow : : ~ MainWindow ( )
{
delete ui ;
}
2021-04-01 05:58:37 -07:00
void MainWindow : : openUpdateDialog ( ) {
2021-04-22 07:10:47 -07:00
global : : mainwindow : : updateDialog = true ;
2021-04-24 09:44:57 -07:00
// Write to a temporary file to show a "Reset" prompt
2021-04-01 05:58:37 -07:00
string_writeconfig ( " /inkbox/updateDialog " , " true " ) ;
2021-04-24 09:44:57 -07:00
// Show the dialog
2021-04-01 05:58:37 -07:00
generalDialogWindow = new generalDialog ( this ) ;
generalDialogWindow - > setAttribute ( Qt : : WA_DeleteOnClose ) ;
generalDialogWindow - > show ( ) ;
QApplication : : processEvents ( ) ;
}
2021-04-22 04:38:54 -07:00
void MainWindow : : openLowBatteryDialog ( ) {
2021-04-22 07:10:47 -07:00
global : : mainwindow : : lowBatteryDialog = true ;
2021-04-23 05:47:05 -07:00
global : : battery : : batteryAlertLock = true ;
2021-04-22 04:38:54 -07:00
generalDialogWindow = new generalDialog ( this ) ;
generalDialogWindow - > setAttribute ( Qt : : WA_DeleteOnClose ) ;
generalDialogWindow - > show ( ) ;
QApplication : : processEvents ( ) ;
}
2021-05-09 11:07:05 -07:00
void MainWindow : : openUsbmsDialog ( ) {
global : : usbms : : showUsbmsDialog = false ;
global : : usbms : : usbmsDialog = true ;
generalDialogWindow = new generalDialog ( this ) ;
generalDialogWindow - > setAttribute ( Qt : : WA_DeleteOnClose ) ;
generalDialogWindow - > show ( ) ;
QApplication : : processEvents ( ) ;
}
2021-04-23 05:47:05 -07:00
void MainWindow : : openCriticalBatteryAlertWindow ( ) {
global : : battery : : showCriticalBatteryAlert = true ;
global : : battery : : showLowBatteryDialog = false ;
alertWindow = new alert ( ) ;
alertWindow - > setAttribute ( Qt : : WA_DeleteOnClose ) ;
alertWindow - > setGeometry ( QRect ( QPoint ( 0 , 0 ) , screen ( ) - > geometry ( ) . size ( ) ) ) ;
alertWindow - > show ( ) ;
}
2021-03-25 05:00:19 -07:00
void MainWindow : : on_settingsBtn_clicked ( )
{
2021-04-24 06:34:35 -07:00
resetWindow ( false ) ;
2021-04-24 09:44:57 -07:00
if ( global : : mainwindow : : tabSwitcher : : settingsChooserWidgetSelected ! = true ) {
2021-04-24 06:34:35 -07:00
ui - > settingsBtn - > setStyleSheet ( " background: black " ) ;
ui - > settingsBtn - > setIcon ( QIcon ( " :/resources/settings-inverted.png " ) ) ;
2021-04-24 09:44:57 -07:00
// Create widget
settingsChooserWindow = new settingsChooser ( ) ;
ui - > stackedWidget - > insertWidget ( 2 , settingsChooserWindow ) ;
global : : mainwindow : : tabSwitcher : : settingsChooserWidgetCreated = true ;
2021-04-24 06:34:35 -07:00
// Switch tab
ui - > stackedWidget - > setCurrentIndex ( 2 ) ;
2021-04-24 09:44:57 -07:00
global : : mainwindow : : tabSwitcher : : settingsChooserWidgetSelected = true ;
2021-04-24 06:34:35 -07:00
// Repaint
this - > repaint ( ) ;
}
else {
;
}
2021-03-25 05:00:19 -07:00
}
void MainWindow : : on_appsBtn_clicked ( )
{
2021-04-24 06:34:35 -07:00
resetWindow ( false ) ;
if ( global : : mainwindow : : tabSwitcher : : appsWidgetSelected ! = true ) {
ui - > appsBtn - > setStyleSheet ( " background: black " ) ;
ui - > appsBtn - > setIcon ( QIcon ( " :/resources/apps-inverted.png " ) ) ;
2021-04-24 09:44:57 -07:00
// Create widget
appsWindow = new apps ( ) ;
ui - > stackedWidget - > insertWidget ( 1 , appsWindow ) ;
global : : mainwindow : : tabSwitcher : : appsWidgetCreated = true ;
2021-04-24 06:34:35 -07:00
// Switch tab
ui - > stackedWidget - > setCurrentIndex ( 1 ) ;
global : : mainwindow : : tabSwitcher : : appsWidgetSelected = true ;
2021-04-23 19:23:24 -07:00
2021-04-24 06:34:35 -07:00
// Repaint
this - > repaint ( ) ;
}
else {
;
}
2021-03-25 05:00:19 -07:00
}
void MainWindow : : on_pushButton_clicked ( )
{
readerWindow = new reader ( ) ;
readerWindow - > setAttribute ( Qt : : WA_DeleteOnClose ) ;
readerWindow - > showFullScreen ( ) ;
}
void MainWindow : : on_searchBtn_clicked ( )
{
2021-04-24 09:44:57 -07:00
// Hopefully this button will do something one day...
2021-06-08 04:49:52 -07:00
/*
global : : text : : textBrowserDialog = true ;
global : : text : : textBrowserContents = " Hullo " ;
generalDialogWindow = new generalDialog ( ) ;
generalDialogWindow - > setAttribute ( Qt : : WA_DeleteOnClose ) ;
generalDialogWindow - > show ( ) ;
*/
2021-03-25 05:00:19 -07:00
}
void MainWindow : : on_quitBtn_clicked ( )
{
quitWindow = new quit ( ) ;
quitWindow - > setAttribute ( Qt : : WA_DeleteOnClose ) ;
quitWindow - > showFullScreen ( ) ;
}
void MainWindow : : on_book1Btn_clicked ( )
{
2021-04-22 07:10:47 -07:00
global : : reader : : skipOpenDialog = true ;
global : : reader : : bookNumber = 1 ;
2021-03-25 05:00:19 -07:00
readerWindow = new reader ( ) ;
readerWindow - > setAttribute ( Qt : : WA_DeleteOnClose ) ;
readerWindow - > showFullScreen ( ) ;
}
void MainWindow : : on_book2Btn_clicked ( )
{
2021-04-22 07:10:47 -07:00
global : : reader : : skipOpenDialog = true ;
global : : reader : : bookNumber = 2 ;
2021-03-25 05:00:19 -07:00
readerWindow = new reader ( ) ;
readerWindow - > setAttribute ( Qt : : WA_DeleteOnClose ) ;
readerWindow - > showFullScreen ( ) ;
}
void MainWindow : : on_book3Btn_clicked ( )
{
2021-04-22 07:10:47 -07:00
global : : reader : : skipOpenDialog = true ;
global : : reader : : bookNumber = 3 ;
2021-03-25 05:00:19 -07:00
readerWindow = new reader ( ) ;
readerWindow - > setAttribute ( Qt : : WA_DeleteOnClose ) ;
readerWindow - > showFullScreen ( ) ;
}
void MainWindow : : on_book4Btn_clicked ( )
{
2021-04-22 07:10:47 -07:00
global : : reader : : skipOpenDialog = true ;
global : : reader : : bookNumber = 4 ;
2021-03-25 05:00:19 -07:00
readerWindow = new reader ( ) ;
readerWindow - > setAttribute ( Qt : : WA_DeleteOnClose ) ;
readerWindow - > showFullScreen ( ) ;
}
2021-03-29 18:47:21 -07:00
void MainWindow : : on_brightnessBtn_clicked ( )
{
brightnessDialogWindow = new brightnessDialog ( ) ;
brightnessDialogWindow - > setAttribute ( Qt : : WA_DeleteOnClose ) ;
brightnessDialogWindow - > show ( ) ;
}
2021-04-23 19:23:24 -07:00
void MainWindow : : on_homeBtn_clicked ( )
{
2021-04-24 06:34:35 -07:00
global : : mainwindow : : tabSwitcher : : repaint = true ;
resetWindow ( true ) ;
2021-04-23 19:23:24 -07:00
}
2021-04-24 06:34:35 -07:00
void MainWindow : : resetWindow ( bool resetStackedWidget ) {
2021-04-23 19:23:24 -07:00
// Reset layout
2021-04-24 06:34:35 -07:00
if ( resetStackedWidget = = true ) {
ui - > stackedWidget - > setCurrentIndex ( 0 ) ;
}
2021-04-24 09:44:57 -07:00
// Destroy widgets
if ( global : : mainwindow : : tabSwitcher : : appsWidgetCreated = = true ) {
appsWindow - > deleteLater ( ) ;
}
if ( global : : mainwindow : : tabSwitcher : : settingsChooserWidgetCreated = = true ) {
settingsChooserWindow - > deleteLater ( ) ;
}
global : : mainwindow : : tabSwitcher : : appsWidgetCreated = false ;
global : : mainwindow : : tabSwitcher : : settingsChooserWidgetCreated = false ;
2021-04-24 06:34:35 -07:00
global : : mainwindow : : tabSwitcher : : appsWidgetSelected = false ;
2021-04-24 09:44:57 -07:00
global : : mainwindow : : tabSwitcher : : settingsChooserWidgetSelected = false ;
2021-04-23 19:23:24 -07:00
resetIcons ( ) ;
2021-06-23 08:26:00 -07:00
setBatteryIcon ( ) ;
2021-04-24 06:34:35 -07:00
if ( global : : mainwindow : : tabSwitcher : : repaint = = true ) {
this - > repaint ( ) ;
}
2021-04-23 19:23:24 -07:00
}
void MainWindow : : resetIcons ( ) {
// Reset icons
ui - > appsBtn - > setStyleSheet ( " background: white " ) ;
ui - > appsBtn - > setIcon ( QIcon ( " :/resources/apps.png " ) ) ;
2021-04-24 06:34:35 -07:00
ui - > settingsBtn - > setStyleSheet ( " background: white " ) ;
ui - > settingsBtn - > setIcon ( QIcon ( " :/resources/settings.png " ) ) ;
2021-04-23 19:23:24 -07:00
}
2021-06-23 08:26:00 -07:00
void MainWindow : : setBatteryIcon ( ) {
// Battery
string_checkconfig_ro ( " /opt/inkbox_device " ) ;
if ( checkconfig_str_val = = " n705 \n " or checkconfig_str_val = = " n905 \n " ) {
// Hide brightness controls; they won't be very useful there anyway...
ui - > brightnessBtn - > hide ( ) ;
ui - > line_7 - > hide ( ) ;
// Setting icons up
stdIconWidth = sW / 16 ;
stdIconHeight = sH / 16 ;
QPixmap chargingPixmap ( " :/resources/battery_charging.png " ) ;
QPixmap scaledChargingPixmap = chargingPixmap . scaled ( stdIconWidth , stdIconHeight , Qt : : KeepAspectRatio ) ;
QPixmap fullPixmap ( " :/resources/battery_full.png " ) ;
QPixmap scaledFullPixmap = fullPixmap . scaled ( stdIconWidth , stdIconHeight , Qt : : KeepAspectRatio ) ;
QPixmap halfPixmap ( " :/resources/battery_half.png " ) ;
QPixmap scaledHalfPixmap = halfPixmap . scaled ( stdIconWidth , stdIconHeight , Qt : : KeepAspectRatio ) ;
QPixmap emptyPixmap ( " :/resources/battery_empty.png " ) ;
QPixmap scaledEmptyPixmap = emptyPixmap . scaled ( stdIconWidth , stdIconHeight , Qt : : KeepAspectRatio ) ;
// Checking battery level and status, then displaying the relevant icon on batteryIconLabel
string_checkconfig_ro ( " /sys/devices/platform/pmic_battery.1/power_supply/mc13892_bat/status " ) ;
if ( checkconfig_str_val = = " Charging \n " ) {
ui - > batteryIcon - > setPixmap ( scaledChargingPixmap ) ;
}
else {
get_battery_level ( ) ;
if ( batt_level_int > = 75 & & batt_level_int < = 100 ) {
ui - > batteryIcon - > setPixmap ( scaledFullPixmap ) ;
}
else if ( batt_level_int > = 25 & & batt_level_int < = 74 ) {
ui - > batteryIcon - > setPixmap ( scaledHalfPixmap ) ;
}
else if ( batt_level_int > = 0 & & batt_level_int < = 24 ) {
ui - > batteryIcon - > setPixmap ( scaledEmptyPixmap ) ;
}
}
}
else {
// Setting icons up
stdIconWidth = sW / 19 ;
stdIconHeight = sH / 19 ;
QPixmap chargingPixmap ( " :/resources/battery_charging.png " ) ;
QPixmap scaledChargingPixmap = chargingPixmap . scaled ( stdIconWidth , stdIconHeight , Qt : : KeepAspectRatio ) ;
QPixmap fullPixmap ( " :/resources/battery_full.png " ) ;
QPixmap scaledFullPixmap = fullPixmap . scaled ( stdIconWidth , stdIconHeight , Qt : : KeepAspectRatio ) ;
QPixmap halfPixmap ( " :/resources/battery_half.png " ) ;
QPixmap scaledHalfPixmap = halfPixmap . scaled ( stdIconWidth , stdIconHeight , Qt : : KeepAspectRatio ) ;
QPixmap emptyPixmap ( " :/resources/battery_empty.png " ) ;
QPixmap scaledEmptyPixmap = emptyPixmap . scaled ( stdIconWidth , stdIconHeight , Qt : : KeepAspectRatio ) ;
// Checking battery level and status, then displaying the relevant icon on batteryIconLabel
string_checkconfig_ro ( " /sys/devices/platform/pmic_battery.1/power_supply/mc13892_bat/status " ) ;
if ( checkconfig_str_val = = " Charging \n " ) {
ui - > batteryIcon - > setPixmap ( scaledChargingPixmap ) ;
}
else {
get_battery_level ( ) ;
if ( batt_level_int > = 75 & & batt_level_int < = 100 ) {
ui - > batteryIcon - > setPixmap ( scaledFullPixmap ) ;
}
else if ( batt_level_int > = 25 & & batt_level_int < = 74 ) {
ui - > batteryIcon - > setPixmap ( scaledHalfPixmap ) ;
}
else if ( batt_level_int > = 0 & & batt_level_int < = 24 ) {
ui - > batteryIcon - > setPixmap ( scaledEmptyPixmap ) ;
}
}
}
}