Ignore:
Timestamp:
04/23/13 09:18:57 (19 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, releng/10.0.3, releng/10.1
Children:
3ab1479
Parents:
3f4caf6
Message:

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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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} 
Note: See TracChangeset for help on using the changeset viewer.