Changeset 4b9e67a


Ignore:
Timestamp:
04/23/13 09:18:57 (15 months ago)
Author:
Kris Moore <kris@…>
Branches:
master, 9.1-release, 9.2-release, releng/10.0, releng/10.0.1, releng/10.0.2
Children:
3ab1479
Parents:
3f4caf6
Message:

Get the program compilable, and merge in the meta-pkg manager stuff

Location:
src-qt4/pc-pkgmanager
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • src-qt4/pc-pkgmanager/main.cpp

    r3f4caf6 r4b9e67a  
    44#include <qstylefactory.h> 
    55#include <qdesktopwidget.h> 
    6 #include <qtsingleapplication.h> 
    76#include <QDebug> 
     7#include <pcbsd-ui.h> 
    88#include "mainWin.h" 
    99#include "../config.h" 
  • src-qt4/pc-pkgmanager/mainWin.cpp

    r3f4caf6 r4b9e67a  
    2020#include <QTextStream> 
    2121#include <pcbsd-utils.h> 
     22#include <pcbsd-ui.h> 
    2223#include "mainWin.h" 
    2324#include "../config.h" 
     
    3536  connect(pushClose, SIGNAL(clicked()), this, SLOT(slotCloseClicked())); 
    3637  connect(buttonRescanPkgs, SIGNAL(clicked()), this, SLOT(slotRescanPkgsClicked())); 
     38  connect(pushPkgApply, SIGNAL( clicked() ), this, SLOT( slotApplyClicked() ) ); 
    3739  progressUpdate->setHidden(true); 
    3840 
    3941  QTimer::singleShot(200, this, SLOT(slotRescanPkgsClicked() ) ); 
     42  initMetaWidget(); 
    4043} 
    4144 
     
    4447  // Check for pkg updates 
    4548  checkMPKGUpdates(); 
     49} 
     50 
     51void mainWin::slotApplyClicked() { 
     52 
    4653} 
    4754 
     
    8794  pushUpdatePkgs->setEnabled(haveUpdates); 
    8895  if ( totPkgs > 0 ) { 
    89     if ( listUpdates.isEmpty() ) 
    90       tabUpdates->setCurrentIndex(1); 
    9196    tabUpdates->setTabText(1, tr("Package Updates (%1)").arg(totPkgs)); 
    9297    groupUpdatesPkgs->setTitle(tr("Available updates")); 
     
    96101  } 
    97102  
    98   slotDisplayUpdates(); 
    99103} 
    100104 
     
    111115 
    112116void mainWin::slotUpdatePkgsClicked() { 
    113   // Set our UI elements 
    114   progressUpdate->setHidden(false); 
    115   tabUpdates->setEnabled(false); 
    116  
    117117  dPackages = false; 
    118118  uPackages = false; 
    119119  doingUpdate=true; 
    120   curUpdate = 0; 
    121  
    122   // Setup the upgrade process 
     120 
     121  // Create our runlist of package commands 
     122  pkgCmdList.clear(); 
     123  QStringList pCmds; 
     124 
     125  if ( wDir.isEmpty() ) 
     126    pCmds << "pc-updatemanager" << "pkgupdate"; 
     127  else 
     128    pCmds << "chroot" << wDir << "pc-updatemanager" << "pkgupdate"; 
     129 
     130  // Setup our runList 
     131  pkgCmdList << pCmds; 
     132 
     133  startPkgProcess(); 
     134 
     135  textStatus->setText(tr("Starting package updates...")); 
     136 
     137} 
     138 
     139void mainWin::startPkgProcess() { 
     140 
     141  if ( pkgCmdList.isEmpty() ) 
     142    return; 
     143  if ( pkgCmdList.at(0).at(0).isEmpty() ) 
     144     return;  
     145 
     146  // Get the command name 
     147  QString cmd; 
     148  cmd = pkgCmdList.at(0).at(0); 
     149 
     150  // Get any optional flags 
     151  QStringList flags; 
     152  for (int i = 0; i < pkgCmdList.at(0).size(); ++i) { 
     153     if ( i == 0 ) 
     154       continue; 
     155     flags << pkgCmdList.at(0).at(i); 
     156  }  
     157 
     158  qDebug() << cmd + " " + flags.join(" "); 
     159   
     160  // Setup the first process 
    123161  uProc = new QProcess(); 
    124162  QProcessEnvironment env = QProcessEnvironment::systemEnvironment(); 
     
    128166 
    129167  // Connect the slots 
    130   connect( uProc, SIGNAL(readyReadStandardOutput()), this, SLOT(slotReadPkgUpdateOutput()) ); 
    131   connect( uProc, SIGNAL(finished(int, QProcess::ExitStatus)), this, SLOT(slotUpdatePkgDone()) ); 
    132  
    133   if ( wDir.isEmpty() ) 
    134     uProc->start("pc-updatemanager", QStringList() << "pkgupdate"); 
    135   else 
    136     uProc->start("chroot", QStringList() << wDir << "pc-updatemanager" << "pkgupdate"); 
    137  
    138   textLabel->setText(tr("Starting package updates...")); 
    139  
    140   progressUpdate->setRange(0, listViewUpdatesPkgs->topLevelItemCount() ); 
     168  connect( uProc, SIGNAL(readyReadStandardOutput()), this, SLOT(slotReadPkgOutput()) ); 
     169  connect( uProc, SIGNAL(finished(int, QProcess::ExitStatus)), this, SLOT(slotPkgDone()) ); 
     170 
     171  uProc->start(cmd, flags); 
     172 
     173  stackedTop->setCurrentIndex(1); 
     174 
     175  progressUpdate->setRange(0, 0 ); 
    141176  progressUpdate->setValue(0); 
    142 } 
    143  
    144 void mainWin::slotReadPkgUpdateOutput() { 
     177 
     178} 
     179 
     180void mainWin::slotReadPkgOutput() { 
    145181   QString line, tmp, cur, tot, fname; 
    146182 
     
    151187     tmp.truncate(50); 
    152188     if ( line.indexOf("to be downloaded") != -1 ) { 
    153        textLabel->setText(tr("Downloading packages...")); 
     189       textStatus->setText(tr("Downloading packages...")); 
    154190       curUpdate = 0; 
    155191       progressUpdate->setValue(0); 
     
    157193     } 
    158194     if ( line.indexOf("Checking integrity") == 0 ) { 
    159        textLabel->setText(line); 
     195       textStatus->setText(line); 
    160196       uPackages = true; 
    161197       dPackages = false; 
     
    167203        tmp = line;  
    168204        tmp = tmp.remove(0, tmp.lastIndexOf("/") + 1);  
    169         textLabel->setText(tr("Downloading: %1").arg(tmp));  
     205        textStatus->setText(tr("Downloading: %1").arg(tmp));  
    170206        continue; 
    171207     }  
     
    203239     if ( uPackages ) { 
    204240       if ( line.indexOf("Upgrading") == 0 ) { 
    205          textLabel->setText(line); 
     241         textStatus->setText(line); 
    206242         curUpdate++; 
    207243         progressUpdate->setValue(curUpdate); 
     
    238274     tot = tot.section("}", 0, 0); 
    239275 
    240      textLabel->setText(tr("Downloading %1").arg(fname)); 
     276     textStatus->setText(tr("Downloading %1").arg(fname)); 
    241277     tot.toInt(&ok); 
    242278     cur.toInt(&ok2); 
     
    251287} 
    252288 
    253 void mainWin::slotUpdatePkgDone() { 
    254   progressUpdate->setHidden(true); 
     289void mainWin::slotPkgDone() { 
     290 
     291  // Run the next command on the stack if necessary 
     292  if (  pkgCmdList.size() > 1 ) { 
     293        pkgCmdList.removeAt(0);  
     294        startPkgProcess();       
     295        return; 
     296  } 
     297 
     298  // Nothing left to run! Lets wrap up 
    255299  QFile sysTrig( SYSTRIGGER ); 
    256300  if ( sysTrig.open( QIODevice::WriteOnly ) ) { 
     
    260304 
    261305  if ( uProc->exitCode() != 0 ) 
    262     QMessageBox::warning(this, tr("Failed package update"), tr("The package update failed! If this persists, you may need to manually run: pc-updatemanager pkgupdate")); 
    263  
    264   doingUpdate=false; 
    265   checkMPKGUpdates(); 
    266 } 
     306    QMessageBox::warning(this, tr("Failed pkgng command!"), tr("The package changes failed!")); 
     307 
     308  stackedTop->setCurrentIndex(0); 
     309 
     310} 
     311 
     312/***************************************** 
     313Code for meta-package (Basic Mode) 
     314******************************************/ 
     315 
     316void mainWin::initMetaWidget() 
     317{ 
     318  qDebug() << "Starting metaWidget..."; 
     319 
     320  populateMetaPkgs(); 
     321 
     322  // Connect our slots 
     323  treeMetaPkgs->setContextMenuPolicy(Qt::CustomContextMenu); 
     324  connect(treeMetaPkgs, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(slotMetaRightClick()) ); 
     325 
     326 
     327} 
     328 
     329 
     330// Display found meta-pkg data 
     331void mainWin::populateMetaPkgs() 
     332{ 
     333  pushPkgApply->setEnabled(false); 
     334  treeMetaPkgs->clear(); 
     335  tmpMetaPkgList.clear(); 
     336  new QTreeWidgetItem(treeMetaPkgs, QStringList() << tr("Loading... Please wait...") ); 
     337 
     338  if ( ! metaPkgList.isEmpty() ) 
     339        disconnect(treeMetaPkgs, SIGNAL(itemChanged(QTreeWidgetItem *, int)), 0, 0); 
     340  metaPkgList.clear(); 
     341 
     342  // Start the process to get meta-pkg info 
     343  getMetaProc = new QProcess(); 
     344  qDebug() << "Searching for meta-pkgs..."; 
     345  connect( getMetaProc, SIGNAL(readyReadStandardOutput()), this, SLOT(slotGetPackageDataOutput()) ); 
     346  connect( getMetaProc, SIGNAL(finished(int, QProcess::ExitStatus)), this, SLOT(slotFinishLoadingMetaPkgs()) ); 
     347  getMetaProc->setProcessChannelMode(QProcess::MergedChannels); 
     348  getMetaProc->start(QString("pc-metapkgmanager"), QStringList() << chrootArg1 << chrootArg2 << "list"); 
     349 
     350} 
     351 
     352// Display found meta-pkg data 
     353void mainWin::slotFinishLoadingMetaPkgs() 
     354{ 
     355 
     356  // Populate the metaPkgList 
     357  parseTmpMetaList(); 
     358 
     359  treeMetaPkgs->clear(); 
     360 
     361  addTreeItems(QString());  
     362 
     363  connect(treeMetaPkgs, SIGNAL(itemChanged(QTreeWidgetItem *, int)), this, SLOT(slotDeskPkgsChanged(QTreeWidgetItem *, int))); 
     364} 
     365 
     366void mainWin::addTreeItems(QString parent) 
     367{ 
     368  for (int z=0; z < metaPkgList.count(); ++z) { 
     369    if ( metaPkgList.at(z).at(3) != parent ) 
     370      continue; 
     371 
     372    // Hide the "base-system" package, since we are installing it anyway 
     373    if (metaPkgList.at(z).at(0) == "base-system" ) 
     374      return; 
     375 
     376    QTreeWidgetItem *deskItem = new QTreeWidgetItem(QStringList() << metaPkgList.at(z).at(0) ); 
     377    deskItem->setIcon(0, QIcon(metaPkgList.at(z).at(2))); 
     378    deskItem->setToolTip(0, metaPkgList.at(z).at(1)); 
     379    deskItem->setCheckState(0, Qt::Unchecked); 
     380 
     381    if ( metaPkgList.at(z).at(5) == "YES" ) 
     382      deskItem->setCheckState(0, Qt::Checked); 
     383 
     384    if ( parent.isEmpty() ) { 
     385      treeMetaPkgs->addTopLevelItem(deskItem); 
     386    } else { 
     387      // Locate the parent to attach to 
     388      QTreeWidgetItemIterator it(treeMetaPkgs); 
     389      while (*it) { 
     390        if ((*it)->text(0) == parent ) { 
     391          (*it)->addChild(deskItem); 
     392          if ( metaPkgList.at(z).at(5) == "YES" && (*it)->checkState(0) == Qt::Unchecked) 
     393            (*it)->setCheckState(0, Qt::PartiallyChecked); 
     394          if ( metaPkgList.at(z).at(5) == "NO" && (*it)->checkState(0) == Qt::Checked) 
     395            (*it)->setCheckState(0, Qt::PartiallyChecked); 
     396          break; 
     397        } 
     398        it++; 
     399      } 
     400    } 
     401 
     402    // Now look for any possible children 
     403    addTreeItems(metaPkgList.at(z).at(0));     
     404  } 
     405} 
     406 
     407// Check if a meta-pkg is installed 
     408bool mainWin::isMetaPkgInstalled(QString mPkg) 
     409{ 
     410  QString tmp; 
     411  QProcess pcmp; 
     412  pcmp.start(QString("pc-metapkgmanager"), QStringList() << chrootArg1 << chrootArg2 << "status" << mPkg); 
     413  while ( pcmp.state() != QProcess::NotRunning ) { 
     414     pcmp.waitForFinished(50); 
     415     QCoreApplication::processEvents(); 
     416  } 
     417 
     418  while (pcmp.canReadLine()) { 
     419     tmp = pcmp.readLine().simplified(); 
     420     if ( tmp.indexOf("is installed") != -1 ) 
     421     return true; 
     422  } 
     423 
     424  return false; 
     425} 
     426 
     427// Function which checks for our GUI package schema data 
     428void mainWin::slotGetPackageDataOutput() 
     429{ 
     430  while (getMetaProc->canReadLine()) 
     431        tmpMetaPkgList << getMetaProc->readLine().simplified(); 
     432} 
     433 
     434// Parse the pc-metapkg saved output 
     435void mainWin::parseTmpMetaList() 
     436{ 
     437  QString tmp, mName, mDesc, mIcon, mParent, mDesktop, mInstalled, mPkgFileList; 
     438  QStringList package; 
     439 
     440  for ( int i = 0 ; i < tmpMetaPkgList.size(); i++ ) 
     441  { 
     442        QApplication::processEvents(); 
     443 
     444        tmp = tmpMetaPkgList.at(i); 
     445 
     446        if ( tmp.indexOf("Meta Package: ") == 0) { 
     447                mName = tmp.replace("Meta Package: ", ""); 
     448                continue; 
     449        } 
     450        if ( tmp.indexOf("Description: ") == 0) { 
     451                mDesc = tmp.replace("Description: ", ""); 
     452                continue; 
     453        } 
     454        if ( tmp.indexOf("Icon: ") == 0) { 
     455                mIcon = tmp.replace("Icon: ", ""); 
     456                mPkgFileList = mIcon; 
     457                mPkgFileList.replace("pkg-icon.png", "pkg-list"); 
     458                continue; 
     459        } 
     460        if ( tmp.indexOf("Parent: ") == 0) { 
     461                mParent = tmp.replace("Parent: ", ""); 
     462                continue; 
     463        } 
     464        if ( tmp.indexOf("Desktop: ") == 0) { 
     465                mDesktop = tmp.replace("Desktop: ", ""); 
     466                continue; 
     467        } 
     468 
     469        // This is an empty category 
     470        if ( tmp.indexOf("Category Entry") == 0) { 
     471                // Now add this category to the string list 
     472                package.clear(); 
     473                qDebug() << "Found Package" << mName << mDesc << mIcon << mParent << mDesktop; 
     474                mInstalled = "CATEGORY"; 
     475                package << mName << mDesc << mIcon << mParent << mDesktop << mInstalled; 
     476                metaPkgList.append(package); 
     477                mName=""; mDesc=""; mIcon=""; mParent=""; mDesktop=""; mInstalled=""; mPkgFileList=""; 
     478        } 
     479 
     480        // We have a Meta-Pkg 
     481        if ( tmp.indexOf("Required Packages:") == 0) { 
     482                // Now add this meta-pkg to the string list 
     483                package.clear(); 
     484                qDebug() << "Found Package" << mName << mDesc << mIcon << mParent << mDesktop << mPkgFileList; 
     485 
     486                if ( isMetaPkgInstalled(mName) ) 
     487                        mInstalled = "YES"; 
     488                else 
     489                        mInstalled = "NO"; 
     490 
     491                package << mName << mDesc << mIcon << mParent << mDesktop << mInstalled << mPkgFileList; 
     492                metaPkgList.append(package); 
     493                mName=""; mDesc=""; mIcon=""; mParent=""; mDesktop=""; mInstalled=""; mPkgFileList=""; 
     494        } 
     495 
     496    } 
     497 
     498} 
     499 
     500void mainWin::saveMetaPkgs() 
     501{ 
     502        if ( ! haveMetaPkgChanges() ) 
     503                return; 
     504 
     505        addPkgs = getAddPkgs(); 
     506        delPkgs = getDelPkgs();  
     507 
     508        startMetaChanges(); 
     509 
     510} 
     511 
     512void mainWin::startMetaChanges() 
     513{ 
     514 // Create our runlist of package commands 
     515  pkgCmdList.clear(); 
     516  QStringList pCmds; 
     517 
     518  if ( ! delPkgs.isEmpty() ) { 
     519    if ( wDir.isEmpty() ) 
     520      pCmds << "pc-metapkgmanager" << "del" << delPkgs; 
     521    else   
     522      pCmds << "chroot" << wDir << "pc-metapkgmanager" << "del" << delPkgs; 
     523    pkgCmdList << pCmds; 
     524  } 
     525   
     526  pCmds.clear(); 
     527 
     528  if ( ! addPkgs.isEmpty() ) { 
     529    if ( wDir.isEmpty() ) 
     530      pCmds << "pc-metapkgmanager" << "add" << addPkgs; 
     531    else   
     532      pCmds << "chroot" << wDir << "pc-metapkgmanager" << "add" << addPkgs; 
     533    pkgCmdList << pCmds; 
     534  } 
     535 
     536  // Lets kick it off now 
     537  startPkgProcess(); 
     538} 
     539 
     540bool mainWin::haveAMetaDesktop() 
     541{ 
     542        // If running in a chroot we can skip this check 
     543        if ( ! chrootArg1.isEmpty() ) 
     544          return true; 
     545         
     546        QTreeWidgetItemIterator it(treeMetaPkgs); 
     547        while (*it) { 
     548         if ( ((*it)->checkState(0) == Qt::Checked) || ((*it)->checkState(0) == Qt::PartiallyChecked) ) 
     549           for (int z=0; z < metaPkgList.count(); ++z) 
     550             if ( (*it)->text(0) == metaPkgList.at(z).at(0) && metaPkgList.at(z).at(4) == "YES" ) 
     551                return true; 
     552         ++it; 
     553        } 
     554 
     555        QMessageBox::warning(this, tr("No Desktop"), 
     556          tr("No desktops have been selected! Please choose at least one desktop before saving."), 
     557          QMessageBox::Ok, 
     558          QMessageBox::Ok); 
     559 
     560        return false; 
     561} 
     562 
     563bool mainWin::haveMetaPkgChanges() 
     564{ 
     565        QTreeWidgetItemIterator it(treeMetaPkgs); 
     566        while (*it) { 
     567          for (int z=0; z < metaPkgList.count(); ++z) 
     568            // See if any packages status have changed 
     569            if ( ( (*it)->text(0) == metaPkgList.at(z).at(0) && metaPkgList.at(z).at(5) == "YES" && (*it)->checkState(0) == Qt::Unchecked ) \ 
     570              || ( (*it)->text(0) == metaPkgList.at(z).at(0) && metaPkgList.at(z).at(5) == "YES" && (*it)->checkState(0) == Qt::PartiallyChecked ) \ 
     571              || ( (*it)->text(0) == metaPkgList.at(z).at(0) && metaPkgList.at(z).at(5) == "NO" && (*it)->checkState(0) == Qt::Checked ) ) 
     572                return true; 
     573         ++it; 
     574        } 
     575 
     576        return false; 
     577} 
     578 
     579QString mainWin::getAddPkgs() 
     580{ 
     581        QString tmp; 
     582        QTreeWidgetItemIterator it(treeMetaPkgs); 
     583        while (*it) { 
     584          for (int z=0; z < metaPkgList.count(); ++z) 
     585            // See if any packages status have changed 
     586            if ( ( (*it)->text(0) == metaPkgList.at(z).at(0) && metaPkgList.at(z).at(5) == "NO" && (*it)->checkState(0) == Qt::Checked ) || \ 
     587                 ( (*it)->text(0) == metaPkgList.at(z).at(0) && metaPkgList.at(z).at(5) == "NO" && (*it)->checkState(0) == Qt::PartiallyChecked ) ) 
     588                if ( tmp.isEmpty() ) 
     589                        tmp = (*it)->text(0); 
     590                else 
     591                        tmp = tmp + "," + (*it)->text(0); 
     592         ++it; 
     593        } 
     594 
     595        return tmp; 
     596} 
     597 
     598QString mainWin::getDelPkgs() 
     599{ 
     600        QString tmp; 
     601        QTreeWidgetItemIterator it(treeMetaPkgs); 
     602        while (*it) { 
     603          for (int z=0; z < metaPkgList.count(); ++z) 
     604            // See if any packages status have changed 
     605            if ( (*it)->text(0) == metaPkgList.at(z).at(0) && metaPkgList.at(z).at(5) == "YES" && (*it)->checkState(0) == Qt::Unchecked ) 
     606                if ( tmp.isEmpty() ) 
     607                        tmp = (*it)->text(0); 
     608                else 
     609                        tmp = tmp + "," + (*it)->text(0); 
     610         ++it; 
     611        } 
     612 
     613        return tmp; 
     614} 
     615 
     616 
     617// Time to save meta-pkgs 
     618void mainWin::slotApplyMetaChanges() { 
     619    saveMetaPkgs(); 
     620} 
     621 
     622 
     623 
     624// The User changed the tree widget checked / unchecked stuff sanity check 
     625void mainWin::slotDeskPkgsChanged(QTreeWidgetItem *aItem, int __unused) 
     626{ 
     627        if (!aItem) 
     628          return; 
     629 
     630        disconnect(treeMetaPkgs, SIGNAL(itemChanged(QTreeWidgetItem *, int)), 0, 0); 
     631 
     632        if (aItem->childCount() == 0) { 
     633                if (aItem->checkState(0) == Qt::Checked && aItem->parent() ) 
     634                        if ( allChildrenPkgsChecked(aItem->parent()->text(0))) 
     635                                aItem->parent()->setCheckState(0, Qt::Checked);  
     636                        else 
     637                                aItem->parent()->setCheckState(0, Qt::PartiallyChecked);         
     638                if (aItem->checkState(0) == Qt::Unchecked && aItem->parent() ) 
     639                        if ( ! allChildrenPkgsUnchecked(aItem->parent()->text(0))) 
     640                                aItem->parent()->setCheckState(0, Qt::PartiallyChecked);         
     641 
     642 
     643        } else { 
     644                if (aItem->checkState(0) == Qt::Checked ) 
     645                        checkAllChildrenPkgs(aItem->text(0)); 
     646                else 
     647                        uncheckAllChildrenPkgs(aItem->text(0)); 
     648        } 
     649         
     650 
     651    connect(treeMetaPkgs, SIGNAL(itemChanged(QTreeWidgetItem *, int)), this, SLOT(slotDeskPkgsChanged(QTreeWidgetItem *, int))); 
     652 
     653        if ( haveMetaPkgChanges() ) 
     654                pushPkgApply->setEnabled(true); 
     655        else 
     656                pushPkgApply->setEnabled(false); 
     657} 
     658 
     659// Check the "parent" app to see if all its children are checked or not 
     660bool mainWin::allChildrenPkgsChecked(QString parent) 
     661{ 
     662        QTreeWidgetItemIterator it(treeMetaPkgs); 
     663        while (*it) { 
     664         if ((*it)->text(0) == parent ) { 
     665           if ( (*it)->childCount() <= 0) 
     666             return true; 
     667 
     668           for ( int i = 0; i < (*it)->childCount() ; ++i) { 
     669             if ( ! allChildrenPkgsChecked((*it)->child(i)->text(0))) 
     670               return false; 
     671 
     672             if ((*it)->child(i)->checkState(0) != Qt::Checked )  
     673               return false; 
     674           } 
     675         } 
     676         ++it; 
     677        } 
     678        return true; 
     679} 
     680 
     681// Check the "parent" app to see if all its children are unchecked or not 
     682bool mainWin::allChildrenPkgsUnchecked(QString parent) 
     683{ 
     684        QTreeWidgetItemIterator it(treeMetaPkgs); 
     685        while (*it) { 
     686         if ((*it)->text(0) == parent ) { 
     687           if ( (*it)->childCount() <= 0) 
     688             return true; 
     689 
     690           for ( int i = 0; i < (*it)->childCount() ; ++i) { 
     691             if ( ! allChildrenPkgsUnchecked((*it)->child(i)->text(0))) 
     692               return false; 
     693 
     694             if ((*it)->child(i)->checkState(0) != Qt::Unchecked )  
     695               return false; 
     696           } 
     697         } 
     698         ++it; 
     699        } 
     700        return true; 
     701} 
     702 
     703// Check all children of parent 
     704void mainWin::checkAllChildrenPkgs(QString parent) 
     705{ 
     706        QTreeWidgetItemIterator it(treeMetaPkgs); 
     707        while (*it) { 
     708         if (! (*it)->parent()) { 
     709           ++it; 
     710           continue; 
     711         }  
     712 
     713         // Lets walk the tree see what pops up 
     714         bool pFound=false; 
     715         QTreeWidgetItem *itP = (*it)->parent(); 
     716         do { 
     717           pFound=false; 
     718           if (itP->text(0) == parent) { 
     719             (*it)->setCheckState(0, Qt::Checked); 
     720             break; 
     721           } 
     722           if ( itP->parent() ) { 
     723             itP = itP->parent(); 
     724             pFound=true; 
     725           } 
     726         } while (pFound); 
     727 
     728         ++it; 
     729       } 
     730} 
     731 
     732// UnCheck all children of parent 
     733void mainWin::uncheckAllChildrenPkgs(QString parent) 
     734{ 
     735        QTreeWidgetItemIterator it(treeMetaPkgs); 
     736        while (*it) { 
     737         if (! (*it)->parent()) { 
     738           ++it; 
     739           continue; 
     740         }  
     741 
     742         // Lets walk the tree see what pops up 
     743         bool pFound=false; 
     744         QTreeWidgetItem *itP = (*it)->parent(); 
     745         do { 
     746           pFound=false; 
     747           if (itP->text(0) == parent) { 
     748             (*it)->setCheckState(0, Qt::Unchecked); 
     749             break; 
     750           } 
     751           if ( itP->parent() ) { 
     752             itP = itP->parent(); 
     753             pFound=true; 
     754           } 
     755         } while (pFound); 
     756 
     757         ++it; 
     758       } 
     759} 
     760 
     761void mainWin::slotMetaRightClick() 
     762{ 
     763        QTreeWidgetItemIterator it(treeMetaPkgs); 
     764        while (*it) { 
     765          for (int z=0; z < metaPkgList.count(); ++z) { 
     766            if ( (*it)->isSelected() && (*it)->text(0) == metaPkgList.at(z).at(0) ) { 
     767              if (metaPkgList.at(z).at(5) == "CATEGORY") 
     768                return; 
     769              popup = new QMenu; 
     770              popup->setTitle((*it)->text(0)); 
     771              popup->addAction(tr("View Packages"), this, SLOT(slotMetaViewPkgs())); 
     772              popup->exec( QCursor::pos() ); 
     773            } 
     774          } 
     775         ++it; 
     776        } 
     777} 
     778 
     779void mainWin::slotMetaViewPkgs() 
     780{ 
     781        QStringList packageList; 
     782        QTreeWidgetItemIterator it(treeMetaPkgs); 
     783        while (*it) { 
     784          for (int z=0; z < metaPkgList.count(); ++z) { 
     785            if ( (*it)->isSelected() && (*it)->text(0) == metaPkgList.at(z).at(0) ) { 
     786  
     787                QFile pList(metaPkgList.at(z).at(6)); 
     788                if ( ! pList.exists() ) 
     789                  return; 
     790                 
     791                if ( ! pList.open(QIODevice::ReadOnly | QIODevice::Text)) 
     792                  return; 
     793 
     794                while ( !pList.atEnd() ) 
     795                  packageList << pList.readLine().simplified(); 
     796 
     797                pList.close(); 
     798                packageList.sort(); 
     799                         
     800                dIB = new dialogInfo(); 
     801                dIB->programInit(tr("Package Listing for:") + " " + (*it)->text(0)); 
     802                dIB->setInfoText(packageList.join("\n")); 
     803                dIB->show(); 
     804            } 
     805          } 
     806         ++it; 
     807        } 
     808} 
     809 
     810QString mainWin::getLineFromCommandOutput( QString cmd ) 
     811{ 
     812        FILE *file = popen(cmd.toLatin1(),"r"); 
     813  
     814        char buffer[100]; 
     815  
     816        QString line = ""; 
     817        char firstChar; 
     818 
     819        if ((firstChar = fgetc(file)) != -1){ 
     820                line += firstChar; 
     821                line += fgets(buffer,100,file); 
     822        } 
     823        pclose(file); 
     824        return line.simplified(); 
     825} 
  • src-qt4/pc-pkgmanager/mainWin.h

    r3f4caf6 r4b9e67a  
    1414 
    1515#include <pcbsd-utils.h> 
     16#include <pcbsd-ui.h> 
    1617#include "ui_mainWin.h" 
    1718#include "../config.h" 
     
    3435 
    3536public slots: 
    36     void ProgramInit(QString, QString); 
     37    void ProgramInit(QString); 
    3738    void slotSingleInstance(); 
    3839 
    3940private slots: 
    4041    void slotCloseClicked(); 
     42     
     43    // Generic pkgng handlers 
     44    void slotReadPkgOutput(); 
     45    void slotPkgDone(); 
     46    void slotReadEventPipe(int fd); 
     47 
     48    // Meta-Packages 
     49    void slotFinishLoadingMetaPkgs(); 
     50    void slotGetPackageDataOutput(); 
     51    void slotApplyClicked(); 
    4152 
    4253    // Package updates 
    4354    void slotRescanPkgsClicked(); 
    4455    void slotUpdatePkgsClicked(); 
    45     void slotReadPkgUpdateOutput(); 
    46     void slotUpdatePkgDone(); 
    47     void slotReadEventPipe(int fd); 
     56    void slotApplyMetaChanges(); 
     57    void slotDeskPkgsChanged(QTreeWidgetItem *aItem, int __unused); 
     58    void slotMetaRightClick(); 
     59    void slotMetaViewPkgs(); 
    4860 
    4961private: 
     62    // Generic pkg process handlers 
     63    void startPkgProcess(); 
     64    QList<QStringList> pkgCmdList; 
     65 
     66    // Updates 
    5067    void doUpdates(); 
    5168    bool sanityCheck(); 
    52     void checkMPKGUpdates(); 
     69 
    5370    int curUpdate; 
    5471    int curUpdateIndex; 
     
    6380    QSocketNotifier *eSock; 
    6481 
     82 
     83    // Meta-Packages 
     84    void initMetaWidget(); 
     85    void populateMetaPkgs(); 
     86    void addTreeItems(QString parent); 
     87    bool isMetaPkgInstalled(QString mPkg); 
     88    void checkMPKGUpdates(); 
     89    void parseTmpMetaList(); 
     90    void saveMetaPkgs(); 
     91    void startMetaChanges(); 
     92    bool haveAMetaDesktop(); 
     93    bool haveMetaPkgChanges(); 
     94    QString getAddPkgs(); 
     95    QString getDelPkgs(); 
     96    bool allChildrenPkgsChecked(QString parent); 
     97    bool allChildrenPkgsUnchecked(QString parent); 
     98    void checkAllChildrenPkgs(QString parent); 
     99    void uncheckAllChildrenPkgs(QString parent); 
     100    QString getLineFromCommandOutput( QString cmd ); 
     101 
     102    QList<QStringList> metaPkgList; 
     103    QStringList tmpMetaPkgList; 
     104    QProcess *addMetaProc; 
     105    QProcess *delMetaProc; 
     106    QProcess *getMetaProc; 
     107    QProgressDialog *delprogress; 
     108    QProgressDialog *addprogress; 
     109    QString addPkgs; 
     110    QString delPkgs; 
     111    QString pkgSource; 
     112    QString Arch; 
     113    QString chrootArg1; 
     114    QString chrootArg2; 
     115    bool canceled; 
     116    QMenu *popup; 
     117    dialogInfo *dIB; 
     118 
    65119signals: 
    66120 
  • src-qt4/pc-pkgmanager/mainWin.ui

    r3f4caf6 r4b9e67a  
    1515  </property> 
    1616  <layout class="QGridLayout" name="gridLayout"> 
    17    <item row="2" column="0"> 
    18     <widget class="QTabWidget" name="tabUpdates"> 
     17   <item row="0" column="0"> 
     18    <widget class="QStackedWidget" name="stackedTop"> 
    1919     <property name="currentIndex"> 
    2020      <number>0</number> 
    2121     </property> 
    22      <widget class="QWidget" name="systab"> 
    23       <attribute name="title"> 
    24        <string>Add / Remove Packages</string> 
    25       </attribute> 
    26       <layout class="QGridLayout" name="gridLayout_2"> 
     22     <widget class="QWidget" name="ConfigPage"> 
     23      <layout class="QGridLayout" name="gridLayout_9"> 
    2724       <item row="0" column="0"> 
    28         <widget class="QGroupBox" name="groupUpdates"> 
    29          <property name="title"> 
    30           <string>System Packages</string> 
    31          </property> 
    32          <layout class="QGridLayout" name="gridLayout_3"> 
    33           <item row="0" column="0"> 
    34            <layout class="QHBoxLayout" name="horizontalLayout_6"> 
    35             <item> 
    36              <widget class="QRadioButton" name="radioBasic"> 
    37               <property name="text"> 
    38                <string>Basic</string> 
    39               </property> 
    40               <property name="checked"> 
    41                <bool>true</bool> 
    42               </property> 
    43              </widget> 
    44             </item> 
    45             <item> 
    46              <widget class="QRadioButton" name="radioAdvanced"> 
    47               <property name="text"> 
    48                <string>Advanced</string> 
    49               </property> 
    50              </widget> 
    51             </item> 
    52            </layout> 
    53           </item> 
    54           <item row="2" column="0"> 
    55            <layout class="QHBoxLayout" name="horizontalLayout"> 
    56             <item> 
    57              <spacer name="spacer2"> 
    58               <property name="orientation"> 
    59                <enum>Qt::Horizontal</enum> 
    60               </property> 
    61               <property name="sizeType"> 
    62                <enum>QSizePolicy::Expanding</enum> 
    63               </property> 
    64               <property name="sizeHint" stdset="0"> 
    65                <size> 
    66                 <width>223</width> 
    67                 <height>21</height> 
    68                </size> 
    69               </property> 
    70              </spacer> 
    71             </item> 
    72             <item> 
    73              <widget class="QPushButton" name="pushPkgApply"> 
    74               <property name="text"> 
    75                <string>&amp;Apply</string> 
    76               </property> 
    77              </widget> 
    78             </item> 
    79            </layout> 
    80           </item> 
    81           <item row="1" column="0"> 
    82            <widget class="QStackedWidget" name="stackedWidget"> 
    83             <widget class="QWidget" name="pageBasic"> 
    84              <layout class="QGridLayout" name="gridLayout_6"> 
     25        <widget class="QTabWidget" name="tabUpdates"> 
     26         <property name="currentIndex"> 
     27          <number>0</number> 
     28         </property> 
     29         <widget class="QWidget" name="systab"> 
     30          <attribute name="title"> 
     31           <string>Add / Remove Packages</string> 
     32          </attribute> 
     33          <layout class="QGridLayout" name="gridLayout_2"> 
     34           <item row="0" column="0"> 
     35            <widget class="QGroupBox" name="groupUpdates"> 
     36             <property name="title"> 
     37              <string>System Packages</string> 
     38             </property> 
     39             <layout class="QGridLayout" name="gridLayout_3"> 
    8540              <item row="0" column="0"> 
    86                <widget class="QListWidget" name="listWidgetBasic"/> 
     41               <layout class="QHBoxLayout" name="horizontalLayout_6"> 
     42                <item> 
     43                 <widget class="QRadioButton" name="radioBasic"> 
     44                  <property name="text"> 
     45                   <string>Basic</string> 
     46                  </property> 
     47                  <property name="checked"> 
     48                   <bool>true</bool> 
     49                  </property> 
     50                 </widget> 
     51                </item> 
     52                <item> 
     53                 <widget class="QRadioButton" name="radioAdvanced"> 
     54                  <property name="text"> 
     55                   <string>Advanced</string> 
     56                  </property> 
     57                 </widget> 
     58                </item> 
     59               </layout> 
     60              </item> 
     61              <item row="2" column="0"> 
     62               <layout class="QHBoxLayout" name="horizontalLayout"> 
     63                <item> 
     64                 <spacer name="spacer2"> 
     65                  <property name="orientation"> 
     66                   <enum>Qt::Horizontal</enum> 
     67                  </property> 
     68                  <property name="sizeType"> 
     69                   <enum>QSizePolicy::Expanding</enum> 
     70                  </property> 
     71                  <property name="sizeHint" stdset="0"> 
     72                   <size> 
     73                    <width>223</width> 
     74                    <height>21</height> 
     75                   </size> 
     76                  </property> 
     77                 </spacer> 
     78                </item> 
     79                <item> 
     80                 <widget class="QPushButton" name="pushPkgApply"> 
     81                  <property name="text"> 
     82                   <string>&amp;Apply</string> 
     83                  </property> 
     84                 </widget> 
     85                </item> 
     86               </layout> 
     87              </item> 
     88              <item row="1" column="0"> 
     89               <widget class="QStackedWidget" name="stackedWidget"> 
     90                <property name="currentIndex"> 
     91                 <number>0</number> 
     92                </property> 
     93                <widget class="QWidget" name="pageBasic"> 
     94                 <layout class="QGridLayout" name="gridLayout_6"> 
     95                  <item row="0" column="0"> 
     96                   <widget class="QTreeWidget" name="treeMetaPkgs"> 
     97                    <attribute name="headerVisible"> 
     98                     <bool>false</bool> 
     99                    </attribute> 
     100                   </widget> 
     101                  </item> 
     102                 </layout> 
     103                </widget> 
     104                <widget class="QWidget" name="pageAdv"> 
     105                 <layout class="QGridLayout" name="gridLayout_7"> 
     106                  <item row="0" column="0"> 
     107                   <widget class="QListWidget" name="listWidgetAdv"/> 
     108                  </item> 
     109                 </layout> 
     110                </widget> 
     111               </widget> 
    87112              </item> 
    88113             </layout> 
    89114            </widget> 
    90             <widget class="QWidget" name="pageAdv"> 
    91              <layout class="QGridLayout" name="gridLayout_7"> 
     115           </item> 
     116          </layout> 
     117         </widget> 
     118         <widget class="QWidget" name="pkgtab"> 
     119          <attribute name="title"> 
     120           <string>Package Updates</string> 
     121          </attribute> 
     122          <layout class="QGridLayout" name="gridLayout_5"> 
     123           <item row="0" column="0"> 
     124            <widget class="QGroupBox" name="groupUpdatesPkgs"> 
     125             <property name="title"> 
     126              <string>Available Updates</string> 
     127             </property> 
     128             <layout class="QGridLayout" name="gridLayout_4"> 
    92129              <item row="0" column="0"> 
    93                <widget class="QListWidget" name="listWidgetAdv"/> 
     130               <layout class="QHBoxLayout" name="horizontalLayout_4"> 
     131                <item> 
     132                 <spacer name="horizontalSpacer_3"> 
     133                  <property name="orientation"> 
     134                   <enum>Qt::Horizontal</enum> 
     135                  </property> 
     136                  <property name="sizeHint" stdset="0"> 
     137                   <size> 
     138                    <width>40</width> 
     139                    <height>20</height> 
     140                   </size> 
     141                  </property> 
     142                 </spacer> 
     143                </item> 
     144                <item> 
     145                 <widget class="QPushButton" name="buttonRescanPkgs"> 
     146                  <property name="text"> 
     147                   <string>Re&amp;scan packages</string> 
     148                  </property> 
     149                  <property name="icon"> 
     150                   <iconset resource="pc-pkgmanager.qrc"> 
     151                    <normaloff>:/view-refresh.png</normaloff>:/view-refresh.png</iconset> 
     152                  </property> 
     153                  <property name="flat"> 
     154                   <bool>false</bool> 
     155                  </property> 
     156                 </widget> 
     157                </item> 
     158               </layout> 
     159              </item> 
     160              <item row="2" column="0"> 
     161               <layout class="QHBoxLayout" name="horizontalLayout_5"> 
     162                <item> 
     163                 <spacer name="spacer2_2"> 
     164                  <property name="orientation"> 
     165                   <enum>Qt::Horizontal</enum> 
     166                  </property> 
     167                  <property name="sizeType"> 
     168                   <enum>QSizePolicy::Expanding</enum> 
     169                  </property> 
     170                  <property name="sizeHint" stdset="0"> 
     171                   <size> 
     172                    <width>223</width> 
     173                    <height>21</height> 
     174                   </size> 
     175                  </property> 
     176                 </spacer> 
     177                </item> 
     178                <item> 
     179                 <widget class="QPushButton" name="pushUpdatePkgs"> 
     180                  <property name="enabled"> 
     181                   <bool>false</bool> 
     182                  </property> 
     183                  <property name="text"> 
     184                   <string>&amp;Update packages</string> 
     185                  </property> 
     186                 </widget> 
     187                </item> 
     188               </layout> 
     189              </item> 
     190              <item row="1" column="0"> 
     191               <widget class="QTreeWidget" name="listViewUpdatesPkgs"> 
     192                <property name="indentation"> 
     193                 <number>0</number> 
     194                </property> 
     195                <attribute name="headerCascadingSectionResizes"> 
     196                 <bool>false</bool> 
     197                </attribute> 
     198                <attribute name="headerDefaultSectionSize"> 
     199                 <number>160</number> 
     200                </attribute> 
     201                <column> 
     202                 <property name="text"> 
     203                  <string>Package</string> 
     204                 </property> 
     205                </column> 
     206                <column> 
     207                 <property name="text"> 
     208                  <string>Old Version</string> 
     209                 </property> 
     210                </column> 
     211                <column> 
     212                 <property name="text"> 
     213                  <string>New Version</string> 
     214                 </property> 
     215                </column> 
     216               </widget> 
    94217              </item> 
    95218             </layout> 
    96219            </widget> 
    97            </widget> 
    98           </item> 
    99          </layout> 
     220           </item> 
     221          </layout> 
     222         </widget> 
    100223        </widget> 
    101224       </item> 
    102225      </layout> 
    103226     </widget> 
    104      <widget class="QWidget" name="pkgtab"> 
    105       <attribute name="title"> 
    106        <string>Package Updates</string> 
    107       </attribute> 
    108       <layout class="QGridLayout" name="gridLayout_5"> 
     227     <widget class="QWidget" name="UpPage"> 
     228      <layout class="QGridLayout" name="gridLayout_8"> 
    109229       <item row="0" column="0"> 
    110         <widget class="QGroupBox" name="groupUpdatesPkgs"> 
    111          <property name="title"> 
    112           <string>Available Updates</string> 
    113          </property> 
    114          <layout class="QGridLayout" name="gridLayout_4"> 
    115           <item row="0" column="0"> 
    116            <layout class="QHBoxLayout" name="horizontalLayout_4"> 
    117             <item> 
    118              <spacer name="horizontalSpacer_3"> 
    119               <property name="orientation"> 
    120                <enum>Qt::Horizontal</enum> 
    121               </property> 
    122               <property name="sizeHint" stdset="0"> 
    123                <size> 
    124                 <width>40</width> 
    125                 <height>20</height> 
    126                </size> 
    127               </property> 
    128              </spacer> 
    129             </item> 
    130             <item> 
    131              <widget class="QPushButton" name="buttonRescanPkgs"> 
    132               <property name="text"> 
    133                <string>Re&amp;scan packages</string> 
    134               </property> 
    135               <property name="icon"> 
    136                <iconset resource="pc-pkgmanager.qrc"> 
    137                 <normaloff>:/view-refresh.png</normaloff>:/view-refresh.png</iconset> 
    138               </property> 
    139               <property name="flat"> 
    140                <bool>false</bool> 
    141               </property> 
    142              </widget> 
    143             </item> 
    144            </layout> 
    145           </item> 
    146           <item row="2" column="0"> 
    147            <layout class="QHBoxLayout" name="horizontalLayout_5"> 
    148             <item> 
    149              <spacer name="spacer2_2"> 
    150               <property name="orientation"> 
    151                <enum>Qt::Horizontal</enum> 
    152               </property> 
    153               <property name="sizeType"> 
    154                <enum>QSizePolicy::Expanding</enum> 
    155               </property> 
    156               <property name="sizeHint" stdset="0"> 
    157                <size> 
    158                 <width>223</width> 
    159                 <height>21</height> 
    160                </size> 
    161               </property> 
    162              </spacer> 
    163             </item> 
    164             <item> 
    165              <widget class="QPushButton" name="pushUpdatePkgs"> 
    166               <property name="enabled"> 
    167                <bool>false</bool> 
    168               </property> 
    169               <property name="text"> 
    170                <string>&amp;Update packages</string> 
    171               </property> 
    172              </widget> 
    173             </item> 
    174            </layout> 
    175           </item> 
    176           <item row="1" column="0"> 
    177            <widget class="QTreeWidget" name="listViewUpdatesPkgs"> 
    178             <property name="indentation"> 
    179              <number>0</number> 
    180             </property> 
    181             <attribute name="headerCascadingSectionResizes"> 
    182              <bool>false</bool> 
    183             </attribute> 
    184             <attribute name="headerDefaultSectionSize"> 
    185              <number>160</number> 
    186             </attribute> 
    187             <column> 
    188              <property name="text"> 
    189               <string>Package</string> 
    190              </property> 
    191             </column> 
    192             <column> 
    193              <property name="text"> 
    194               <string>Old Version</string> 
    195              </property> 
    196             </column> 
    197             <column> 
    198              <property name="text"> 
    199               <string>New Version</string> 
    200              </property> 
    201             </column> 
    202            </widget> 
    203           </item> 
    204          </layout> 
     230        <widget class="QLabel" name="textStatus"> 
     231         <property name="sizePolicy"> 
     232          <sizepolicy hsizetype="Preferred" vsizetype="Minimum"> 
     233           <horstretch>0</horstretch> 
     234           <verstretch>0</verstretch> 
     235          </sizepolicy> 
     236         </property> 
     237         <property name="text"> 
     238          <string>Installing updates</string> 
     239         </property> 
     240         <property name="alignment"> 
     241          <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> 
     242         </property> 
     243         <property name="wordWrap"> 
     244          <bool>true</bool> 
     245         </property> 
     246        </widget> 
     247       </item> 
     248       <item row="1" column="0"> 
     249        <widget class="QProgressBar" name="progressUpdate"> 
     250         <property name="value"> 
     251          <number>24</number> 
     252         </property> 
     253        </widget> 
     254       </item> 
     255       <item row="2" column="0"> 
     256        <widget class="QTextEdit" name="textDisplayOut"> 
     257         <property name="readOnly"> 
     258          <bool>true</bool> 
     259         </property> 
     260         <property name="html"> 
     261          <string notr="true">&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt; 
     262&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt; 
     263p, li { white-space: pre-wrap; } 
     264&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt; 
     265&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string> 
     266         </property> 
    205267        </widget> 
    206268       </item> 
     
    209271    </widget> 
    210272   </item> 
    211    <item row="5" column="0"> 
     273   <item row="2" column="0"> 
    212274    <layout class="QHBoxLayout" name="horizontalLayout_3"> 
    213275     <item> 
     
    233295    </layout> 
    234296   </item> 
    235    <item row="4" column="0"> 
    236     <widget class="QProgressBar" name="progressUpdate"> 
    237      <property name="value"> 
    238       <number>24</number> 
    239      </property> 
    240     </widget> 
    241    </item> 
    242    <item row="3" column="0"> 
    243     <widget class="QLabel" name="textStatus"> 
    244      <property name="sizePolicy"> 
    245       <sizepolicy hsizetype="Preferred" vsizetype="Minimum"> 
    246        <horstretch>0</horstretch> 
    247        <verstretch>0</verstretch> 
    248       </sizepolicy> 
    249      </property> 
    250      <property name="text"> 
    251       <string>Installing updates</string> 
    252      </property> 
    253      <property name="alignment"> 
    254       <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> 
    255      </property> 
    256      <property name="wordWrap"> 
    257       <bool>true</bool> 
    258      </property> 
    259     </widget> 
    260    </item> 
    261297  </layout> 
    262298 </widget> 
  • src-qt4/pc-pkgmanager/pc-pkgmanager.pro

    r3f4caf6 r4b9e67a  
    33CONFIG  += qt warn_on release 
    44 
    5 LIBS    += -L../libpcbsd -L/usr/local/lib -lpcbsd-utils -lQtSolutions_SingleApplication-head 
     5LIBS    += -L../libpcbsd -L/usr/local/lib -lpcbsd-ui -lpcbsd-utils -lQtSolutions_SingleApplication-head 
    66 
    7 INCLUDEPATH     += ../libpcbsd/utils /usr/local/include 
     7INCLUDEPATH     += ../libpcbsd/utils ../libpcbsd/ui /usr/local/include 
    88 
    99HEADERS += mainWin.h 
  • src-qt4/pc-pkgmanager/pc-pkgmanager.qrc

    r3f4caf6 r4b9e67a  
    22  <qresource> 
    33    <file>view-refresh.png</file> 
    4     <file>images/warning.png</file> 
    5     <file>images/current-item.png</file> 
    64  </qresource> 
    75</RCC> 
Note: See TracChangeset for help on using the changeset viewer.