release 0.6.6
[fapman] / mainwindow.cpp
index 28009c1..6ad7f06 100644 (file)
@@ -33,6 +33,8 @@
 #include <QtMaemo5>
 #endif
 
+#include <sys/vfs.h>
+
 #include "mainwindow.h"
 #include "version.h"
 #include "ui_mainwindow.h"
@@ -88,8 +90,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 +110,7 @@ MainWindow::MainWindow(QWidget *parent) :
                        "border-style: inset;"
                        "background-color: rgba(255,255,255,150);"
                        "}";
+       */
 
        if( ((QApplication*)QApplication::instance())->styleSheet().isEmpty() )
        {
@@ -119,7 +125,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 +148,8 @@ MainWindow::MainWindow(QWidget *parent) :
        iMediaObject = new Phonon::MediaObject(this);
        Phonon::AudioOutput* aout = new Phonon::AudioOutput(Phonon::NotificationCategory, this);
        Phonon::createPath(iMediaObject, aout);
+
+       showFreeSpace();
 }
 
 MainWindow::~MainWindow()
@@ -313,6 +321,10 @@ void MainWindow::operationQueueFinished(QList<AAptInterface::interfaceMode> last
                GdkEventIconThemeReload();
        }
 
+       QWidget* dialogParent = this;
+       if( iWinPackageView->isVisible() )
+               dialogParent = iWinPackageView;
+
        if( iNextOperation == OpOpenPkgView && success )
        {
                iWinPackageView->openWin();
@@ -422,30 +434,30 @@ void MainWindow::operationQueueFinished(QList<AAptInterface::interfaceMode> last
                pkglist += "</font>";
 
                if( mismatch ) {
-                       ConfirmDialog m(false, this);
+                       ConfirmDialog m(false, dialogParent);
                        m.setText("Warning", "There is a version mismatch between your original package selections and some of the packages being installed " \
                                          "from the repositories. This could be due to your application catalogs being out of date.");
                        m.exec();
                }
                if( installing_blacklisted ) {
-                       ConfirmDialog b(false, this);
+                       ConfirmDialog b(false, dialogParent);
                        b.setText("Warning","Blacklisted package(s) will be installed");
                        b.exec();
                }
                if( warn_system_package_remove ) {
-                       ConfirmDialog s(false, this);
+                       ConfirmDialog s(false, dialogParent);
                        s.setText("Warning","You are about to remove a critical system package.");
                        s.exec();
                }
                if( warn_system_package_install ) {
-                       ConfirmDialog s(false, this);
+                       ConfirmDialog s(false, dialogParent);
                        s.setText("Warning","You are trying to perform an install/upgrade operation on a critical system package. Doing a system upgrade with " \
                                          "Faster Application Manager has not been tested and it could result in a horrible failure. You have been warned.");
                        s.exec();
                }
 
                busyDialog(false);
-               ConfirmDialog d(true, this);
+               ConfirmDialog d(true, dialogParent);
                if( inst.count()==0 && remv.count()==0 )
                {
                        pkglist = "None of the packages can be installed";
@@ -491,19 +503,20 @@ void MainWindow::operationQueueFinished(QList<AAptInterface::interfaceMode> last
 
                QRect r = QApplication::desktop()->rect();
                if(r.width() < r.height()) {
-                       ConfirmDialog d(false, this);
+                       ConfirmDialog d(false, dialogParent);
                        d.setText(title,msgs.join("<br>"));
                        d.exec();
                } else {
 #ifdef Q_WS_MAEMO_5
                        QMaemo5InformationBox::information(0, text, QMaemo5InformationBox::NoTimeout);
 #else
-                       ConfirmDialog d(false, this);
+                       ConfirmDialog d(false, dialogParent);
                        d.setText(title,msgs.join("<br>"));
                        d.exec();
 #endif
                }
 
+               showFreeSpace();
        }
 
 }
@@ -571,14 +584,22 @@ void MainWindow::on_actionOptions_triggered()
 
 void MainWindow::notifyDialog(QString title, QString msg)
 {
-       ConfirmDialog d(false, this);
+       QWidget* dialogParent = this;
+       if( iWinPackageView->isVisible() )
+               dialogParent = iWinPackageView;
+
+       ConfirmDialog d(false, dialogParent);
        d.setText(title, msg);
        d.exec();
 }
 
 bool MainWindow::confirmDialog(QString title, QString msg)
 {
-       ConfirmDialog d(true, this);
+       QWidget* dialogParent = this;
+       if( iWinPackageView->isVisible() )
+               dialogParent = iWinPackageView;
+
+       ConfirmDialog d(true, dialogParent);
        d.setText(title, msg);
        return d.exec();
 }
@@ -626,3 +647,76 @@ void MainWindow::on_actionLoad_file_triggered()
                        iAptInterface->loadInstallFiles(installs);
        }
 }
+
+void MainWindow::orientationChanged()
+{
+       //ui->centralWidget->adjustSize();
+       //ui->listWidget->adjustSize();
+}
+
+
+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)
+{
+       if( item->text() == "Manage repositories" ) {
+               on_btnRepos_clicked();
+       }
+       else if( item->text() == "Update catalogs" ) {
+               on_btnUpdate_clicked();
+       }
+       else if( item->text() == "Install applications" ) {
+               on_btnListInstallable_clicked();
+       }
+       else if( item->text() == "Remove applications" ) {
+               on_btnListInstalled_clicked();
+       }
+       else if( item->text() == "Upgrade applications" ) {
+               on_btnUpgrade_clicked();
+       }
+       else {
+               qDebug() << "Warning: Unhandled main menu item";
+       }
+       item->setSelected(false);
+}