code cleanup
[fapman] / mainwindow.cpp
index 02b325b..a2f6c5c 100644 (file)
 */
 
 #ifdef MYDEF_GTK_EXISTS
-#include <gdk/gdk.h>
-#include <gtk/gtk.h>
+extern "C"
+{
+       #include <gdk/gdk.h>
+       #include <gtk/gtk.h>
+}
 #endif
 
 #include <QtCore>
 #include <QtMaemo5>
 #endif
 
+extern "C"
+{
+       #include <sys/vfs.h>
+}
+
 #include "mainwindow.h"
 #include "version.h"
 #include "ui_mainwindow.h"
@@ -88,8 +96,11 @@ MainWindow::MainWindow(QWidget *parent) :
        iUpgradeAutoUpdate = true;
        iNextOperation = OpNone;
 
+       connect(QApplication::desktop(), SIGNAL(resized(int)), this, SLOT(orientationChanged()));
+
        ui->centralWidget->loadWallpaper();
 
+       /*
        QString stylesheet_mainscreen =
                        "QPushButton {"
                        "border-radius: 16px;"
@@ -105,6 +116,7 @@ MainWindow::MainWindow(QWidget *parent) :
                        "border-style: inset;"
                        "background-color: rgba(255,255,255,150);"
                        "}";
+       */
 
        if( ((QApplication*)QApplication::instance())->styleSheet().isEmpty() )
        {
@@ -119,7 +131,7 @@ MainWindow::MainWindow(QWidget *parent) :
                }
 
                if( stylesheet_file.isEmpty() ) {
-                       ui->centralWidget->setStyleSheet(stylesheet_mainscreen);
+                       //ui->centralWidget->setStyleSheet(stylesheet_mainscreen);
                } else {
                        ((QApplication*)QApplication::instance())->setStyleSheet(stylesheet_file);
                }
@@ -142,6 +154,11 @@ MainWindow::MainWindow(QWidget *parent) :
        iMediaObject = new Phonon::MediaObject(this);
        Phonon::AudioOutput* aout = new Phonon::AudioOutput(Phonon::NotificationCategory, this);
        Phonon::createPath(iMediaObject, aout);
+
+       showFreeSpace();
+
+       show();
+       orientationChanged();
 }
 
 MainWindow::~MainWindow()
@@ -149,13 +166,14 @@ MainWindow::~MainWindow()
        // save "need repo refresh" status
        iSettings->qsettings()->setValue("need_repo_refresh", iAptInterface->needRepoRefresh());
 
-       delete iWinPackageView;
-       delete iWinRepoView;
-       delete iAptInterface;
-       delete iDpkgInterface;
-       delete iDimmer;
-       delete iSettings;
-    delete ui;
+       delete iWinPackageView; iWinPackageView=0;
+       delete iWinRepoView; iWinRepoView=0;
+       delete iAptInterface; iAptInterface=0;
+       delete iDpkgInterface; iDpkgInterface=0;
+       delete iDimmer; iDimmer=0;
+       delete iSettings; iSettings=0;
+       delete ui; ui=0;
+       //iMediaObject and aout automatically deleted by their parent
 }
 
 void MainWindow::changeEvent(QEvent *e)
@@ -508,6 +526,7 @@ void MainWindow::operationQueueFinished(QList<AAptInterface::interfaceMode> last
 #endif
                }
 
+               showFreeSpace();
        }
 
 }
@@ -638,3 +657,80 @@ void MainWindow::on_actionLoad_file_triggered()
                        iAptInterface->loadInstallFiles(installs);
        }
 }
+
+void MainWindow::orientationChanged()
+{
+       if( QApplication::desktop()->width() > QApplication::desktop()->height() )
+               ui->listWidget->setGridSize( QSize((ui->listWidget->width()-12)/5, (ui->listWidget->height()-12)/2) );
+       else
+               ui->listWidget->setGridSize( QSize((ui->listWidget->width()-12)/3, (ui->listWidget->height()-12)/3) );
+}
+
+
+void MainWindow::showFreeSpace()
+{
+       quint64 warn_limit_root = 5120;
+       quint64 warn_limit_opt = 51200;
+       struct statfs root_stat;
+       struct statfs opt_stat;
+       statfs("/",&root_stat);
+       statfs("/opt",&opt_stat);
+       quint64 free_root = root_stat.f_bavail * root_stat.f_bsize / 1024;
+       quint64 free_opt = opt_stat.f_bavail * opt_stat.f_bsize / 1024;
+       quint64 total_root = root_stat.f_blocks * root_stat.f_bsize / 1024;
+       quint64 total_opt = opt_stat.f_blocks * opt_stat.f_bsize / 1024;
+       qDebug() << "rootfs" << free_root << "/" << total_root << "kB free";
+       qDebug() << "opt fs" << free_opt << "/" << total_opt << "kB free";
+
+       QString rootstr = QString("rootfs: %L1 / %L2 MB free").arg(free_root/1024).arg(total_root/1024);
+       QString optstr = QString("opt: %L1 / %L2 MB free").arg(free_opt/1024).arg(total_opt/1024);
+
+       ui->label->setText("<font size=\"-1\">" + rootstr + "<br>" + optstr + "</font>");
+
+       /*
+       ui->progressBarRoot->setFormat(rootstr);
+       ui->progressBarRoot->setMaximum(total_root/1024);
+       ui->progressBarRoot->setValue(free_root/1024);
+       ui->progressBarOpt->setFormat(optstr);
+       ui->progressBarOpt->setMaximum(total_opt/1024);
+       ui->progressBarOpt->setValue(free_opt/1024);
+       */
+
+       if( free_root < warn_limit_root || free_opt < warn_limit_opt )
+       {
+               ConfirmDialog d(false, this);
+               QString t;
+               if( free_root < warn_limit_root )
+                       t += QString("Root filesystem has %L1 kB available<br>").arg(free_root);
+               if( free_opt < warn_limit_opt )
+                       t += QString("Opt (home) filesystem has %L1 kB available<br>").arg(free_opt);
+               t += "<br>You may proceed, but consider freeing up space to prevent problems in the future";
+               d.setText("Warning: Low disk space",t);
+               d.exec();
+       }
+}
+
+void MainWindow::on_listWidget_itemClicked(QListWidgetItem* item)
+{
+       qDebug() << "main menu:" << item->statusTip();
+
+       if( item->statusTip() == "manage_repos" ) {
+               on_btnRepos_clicked();
+       }
+       else if( item->statusTip() == "update_catalogs" ) {
+               on_btnUpdate_clicked();
+       }
+       else if( item->statusTip() == "install_apps" ) {
+               on_btnListInstallable_clicked();
+       }
+       else if( item->statusTip() == "remove_apps" ) {
+               on_btnListInstalled_clicked();
+       }
+       else if( item->statusTip() == "upgrade_apps" ) {
+               on_btnUpgrade_clicked();
+       }
+       else {
+               qDebug() << "Warning: Unhandled main menu item";
+       }
+       item->setSelected(false);
+}