summaryrefslogtreecommitdiff
path: root/noncore/settings/aqpkg/networkpkgmgr.cpp
Unidiff
Diffstat (limited to 'noncore/settings/aqpkg/networkpkgmgr.cpp') (more/less context) (show whitespace changes)
-rw-r--r--noncore/settings/aqpkg/networkpkgmgr.cpp870
1 files changed, 0 insertions, 870 deletions
diff --git a/noncore/settings/aqpkg/networkpkgmgr.cpp b/noncore/settings/aqpkg/networkpkgmgr.cpp
deleted file mode 100644
index b4b6475..0000000
--- a/noncore/settings/aqpkg/networkpkgmgr.cpp
+++ b/dev/null
@@ -1,870 +0,0 @@
1/***************************************************************************
2 networkpkgmgr.cpp - description
3 -------------------
4 begin : Mon Aug 26 13:32:30 BST 2002
5 copyright : (C) 2002 by Andy Qua
6 email : andy.qua@blueyonder.co.uk
7 ***************************************************************************/
8
9/***************************************************************************
10 * *
11 * This program is free software; you can redistribute it and/or modify *
12 * it under the terms of the GNU General Public License as published by *
13 * the Free Software Foundation; either version 2 of the License, or *
14 * (at your option) any later version. *
15 * *
16 ***************************************************************************/
17
18#include <unistd.h>
19
20#ifdef QWS
21#include <qpe/qpeapplication.h>
22#include <qpe/qcopenvelope_qws.h>
23#include <qpe/config.h>
24#include <qpe/resource.h>
25#else
26#include <qapplication.h>
27#endif
28#include <qlabel.h>
29#include <qfile.h>
30#include <qmessagebox.h>
31#include <qwhatsthis.h>
32
33#include "datamgr.h"
34#include "networkpkgmgr.h"
35#include "installdlgimpl.h"
36#include "ipkg.h"
37#include "inputdlg.h"
38#include "letterpushbutton.h"
39#include "categoryfilterimpl.h"
40
41#include "global.h"
42
43extern int compareVersions( const char *v1, const char *v2 );
44
45NetworkPackageManager::NetworkPackageManager( QWidget *parent, const char *name )
46 : QWidget(parent, name)
47{
48
49#ifdef QWS
50 // read download directory from config file
51 Config cfg( "aqpkg" );
52 cfg.setGroup( "settings" );
53 currentlySelectedServer = cfg.readEntry( "selectedServer", "local" );
54 showJumpTo = cfg.readBoolEntry( "showJumpTo", "true" );
55
56#endif
57
58 showUninstalledPkgs = false;
59 showInstalledPkgs = false;
60 showUpgradedPkgs = false;
61 categoryFilterEnabled = false;
62
63 initGui();
64}
65
66NetworkPackageManager::~NetworkPackageManager()
67{
68}
69
70void NetworkPackageManager :: setDataManager( DataManager *dm )
71{
72 dataMgr = dm;
73}
74
75void NetworkPackageManager :: updateData()
76{
77 emit progressSetSteps( dataMgr->getServerList().size() );
78
79 serversList->clear();
80 packagesList->clear();
81
82 vector<Server>::iterator it;
83 int activeItem = -1;
84 int i;
85 QString serverName;
86 for ( i = 0, it = dataMgr->getServerList().begin() ; it != dataMgr->getServerList().end() ; ++it, ++i )
87 {
88 serverName = it->getServerName();
89 emit progressSetMessage( tr( "Building server list:\n\t%1" ).arg( serverName ) );
90 emit progressUpdate( i );
91 qApp->processEvents();
92
93// cout << "Adding " << it->getServerName() << " to combobox" << endl;
94 if ( !it->isServerActive() )
95 {
96// cout << serverName << " is not active" << endl;
97 i--;
98 continue;
99 }
100
101 serversList->insertItem( serverName );
102 if ( serverName == currentlySelectedServer )
103 activeItem = i;
104 }
105
106 // set selected server to be active server
107 if ( activeItem != -1 )
108 serversList->setCurrentItem( activeItem );
109 serverSelected( 0, FALSE );
110}
111
112void NetworkPackageManager :: selectLocalPackage( const QString &pkg )
113{
114 // First select local server
115 for ( int i = 0 ; i < serversList->count() ; ++i )
116 {
117 if ( serversList->text( i ) == LOCAL_IPKGS )
118 {
119 serversList->setCurrentItem( i );
120 break;
121 }
122 }
123 serverSelected( 0 );
124
125 // Now set the check box of the selected package
126 for ( QCheckListItem *item = (QCheckListItem *)packagesList->firstChild();
127 item != 0 ;
128 item = (QCheckListItem *)item->nextSibling() )
129 {
130 if ( item->text().startsWith( pkg ) )
131 {
132 item->setOn( true );
133 break;
134 }
135 }
136}
137
138
139void NetworkPackageManager :: initGui()
140{
141 QLabel *l = new QLabel( tr( "Servers" ), this );
142 serversList = new QComboBox( this );
143 connect( serversList, SIGNAL(activated( int )), this, SLOT(serverSelected( int )));
144 QWhatsThis::add( serversList, tr( "Click here to select a package feed." ) );
145
146 installedIcon = Resource::loadPixmap( "aqpkg/installed" );
147 updatedIcon = Resource::loadPixmap( "aqpkg/updated" );
148
149 packagesList = new QListView( this );
150 packagesList->addColumn( tr( "Packages" ), 225 );
151 QWhatsThis::add( packagesList, tr( "This is a listing of all packages for the server feed selected above.\n\nA blue dot next to the package name indicates that the package is currently installed.\n\nA blue dot with a star indicates that a newer version of the package is available from the server feed.\n\nClick inside the box at the left to select a package." ) );
152
153 QVBoxLayout *vbox = new QVBoxLayout( this, 0, -1 );
154 QHBoxLayout *hbox1 = new QHBoxLayout( vbox, -1 );
155 hbox1->addWidget( l );
156 hbox1->addWidget( serversList );
157
158 QHBoxLayout *hbox3 = new QHBoxLayout( vbox, -1 );
159 QHBoxLayout *hbox4 = new QHBoxLayout( vbox, -1 );
160
161
162 if ( showJumpTo )
163 {
164 char text[2];
165 text[1] = '\0';
166 for ( int i = 0 ; i < 26 ; ++i )
167 {
168 text[0] = 'A' + i;
169 LetterPushButton *b = new LetterPushButton( text, this );
170 connect( b, SIGNAL( released( QString ) ), this, SLOT( letterPushed( QString ) ) );
171 if ( i < 13 )
172 hbox3->addWidget( b );
173 else
174 hbox4->addWidget( b );
175 }
176 }
177
178 vbox->addWidget( packagesList );
179
180 downloadEnabled = TRUE;
181}
182
183void NetworkPackageManager :: serverSelected( int index )
184{
185 serverSelected( index, TRUE );
186}
187
188void NetworkPackageManager :: serverSelected( int, bool raiseProgress )
189{
190 QPixmap nullIcon( installedIcon.size() );
191 nullIcon.fill( colorGroup().base() );
192
193 // display packages
194 QString serverName = serversList->currentText();
195 currentlySelectedServer = serverName;
196
197 vector<Server>::iterator s = dataMgr->getServer( serverName );
198
199 vector<Package> &list = s->getPackageList();
200 vector<Package>::iterator it;
201
202 // Display progress widget while loading list
203 bool doProgress = ( list.size() > 200 );
204 if ( doProgress )
205 {
206 if ( raiseProgress )
207 {
208 emit appRaiseProgressWidget();
209 }
210 emit progressSetSteps( list.size() );
211 emit progressSetMessage( tr( "Building package list for:\n\t%1" ).arg( serverName ) );
212 }
213
214 packagesList->clear();
215
216#ifdef QWS
217 // read download directory from config file
218 Config cfg( "aqpkg" );
219 cfg.setGroup( "settings" );
220 cfg.writeEntry( "selectedServer", currentlySelectedServer );
221#endif
222
223 int i = 0;
224 for ( it = list.begin() ; it != list.end() ; ++it )
225 {
226 // Update progress after every 100th package (arbitrary value, seems to give good balance)
227 i++;
228 if ( ( i % 100 ) == 0 )
229 {
230 if ( doProgress )
231 {
232 emit progressUpdate( i );
233 }
234 qApp->processEvents();
235 }
236
237 QString text = "";
238
239 // Apply show only uninstalled packages filter
240 if ( showUninstalledPkgs && it->isInstalled() )
241 continue;
242
243 // Apply show only installed packages filter
244 if ( showInstalledPkgs && !it->isInstalled() )
245 continue;
246
247 // Apply show only new installed packages filter
248 if ( showUpgradedPkgs )
249 {
250 if ( !it->isInstalled() ||
251 compareVersions( it->getInstalledVersion(), it->getVersion() ) != 1 )
252 continue;
253 }
254
255 // Apply the section filter
256 if ( categoryFilterEnabled && categoryFilter != "" )
257 {
258 if ( it->getSection() == "" || categoryFilter.find( it->getSection().lower() ) == -1 )
259 continue;
260 }
261
262 // If the local server, only display installed packages
263 if ( serverName == LOCAL_SERVER && !it->isInstalled() )
264 continue;
265
266
267 QCheckListItem *item = new QCheckListItem( packagesList, it->getPackageName(), QCheckListItem::CheckBox );
268
269 if ( it->isInstalled() )
270 {
271 // If a different version of package is available, show update available icon
272 // Otherwise, show installed icon
273 if ( it->getVersion() != it->getInstalledVersion() &&
274 compareVersions( it->getInstalledVersion(), it->getVersion() ) == 1)
275 {
276
277 item->setPixmap( 0, updatedIcon );
278 }
279 else
280 {
281 item->setPixmap( 0, installedIcon );
282 }
283
284 QString destName = "";
285 if ( it->getLocalPackage() )
286 {
287 if ( it->getLocalPackage()->getInstalledTo() )
288 destName = it->getLocalPackage()->getInstalledTo()->getDestinationName();
289 }
290 else
291 {
292 if ( it->getInstalledTo() )
293 destName = it->getInstalledTo()->getDestinationName();
294 }
295 if ( destName != "" )
296 new QCheckListItem( item, QString( tr( "Installed To - %1" ).arg( destName ) ) );
297 }
298 else
299 {
300 item->setPixmap( 0, nullIcon );
301 }
302
303 if ( !it->isPackageStoredLocally() )
304 {
305 new QCheckListItem( item, QString( tr( "Description - %1" ).arg( it->getDescription() ) ) );
306 new QCheckListItem( item, QString( tr( "Size - %1" ).arg( it->getPackageSize() ) ) );
307 new QCheckListItem( item, QString( tr( "Section - %1" ).arg( it->getSection() ) ) );
308 }
309 else
310 new QCheckListItem( item, QString( tr( "Filename - %1" ).arg( it->getFilename() ) ) );
311
312 if ( serverName == LOCAL_SERVER )
313 {
314 new QCheckListItem( item, QString( tr( "V. Installed - %1" ).arg( it->getVersion() ) ) );
315 }
316 else
317 {
318 new QCheckListItem( item, QString( tr( "V. Available - %1" ).arg( it->getVersion() ) ) );
319 if ( it->getLocalPackage() )
320 {
321 if ( it->isInstalled() )
322 new QCheckListItem( item, QString( tr( "V. Installed - %1" ).arg( it->getInstalledVersion() ) ) );
323 }
324 }
325
326 packagesList->insertItem( item );
327 }
328
329 // If the local server or the local ipkgs server disable the download button
330 if ( serverName == LOCAL_SERVER )
331 {
332 downloadEnabled = TRUE;
333 emit appEnableUpgrade( FALSE );
334 }
335 else if ( serverName == LOCAL_IPKGS )
336 {
337 downloadEnabled = FALSE;
338 emit appEnableUpgrade( FALSE );
339 }
340 else
341 {
342 downloadEnabled = TRUE;
343 emit appEnableUpgrade( TRUE );
344 }
345 emit appEnableDownload( downloadEnabled );
346
347 // Display this widget once everything is done
348 if ( doProgress && raiseProgress )
349 {
350 emit appRaiseMainWidget();
351 }
352}
353
354void NetworkPackageManager :: updateServer()
355{
356 QString serverName = serversList->currentText();
357
358 // Update the current server
359 // Display dialog
360
361 // Disable buttons to stop silly people clicking lots on them :)
362
363 // First, write out ipkg_conf file so that ipkg can use it
364 dataMgr->writeOutIpkgConf();
365
366 Ipkg ipkg;
367 ipkg.setOption( "update" );
368
369 InstallDlgImpl dlg( &ipkg, tr( "Refreshing server package lists" ), this, tr( "Upgrade" ), true );
370 dlg.showDlg();
371
372 // Reload data
373 dataMgr->reloadServerData();
374 serverSelected(-1);
375// delete progDlg;
376}
377
378void NetworkPackageManager :: upgradePackages()
379{
380 // We're gonna do an upgrade of all packages
381 // First warn user that this isn't recommended
382 // TODO - ODevice????
383 QString text = tr( "WARNING: Upgrading while\nOpie/Qtopia is running\nis NOT recommended!\n\nAre you sure?\n" );
384 QMessageBox warn( tr( "Warning" ), text, QMessageBox::Warning,
385 QMessageBox::Yes,
386 QMessageBox::No | QMessageBox::Escape | QMessageBox::Default ,
387 0, this );
388 warn.adjustSize();
389
390 if ( warn.exec() == QMessageBox::Yes )
391 {
392 // First, write out ipkg_conf file so that ipkg can use it
393 dataMgr->writeOutIpkgConf();
394
395 // Now run upgrade
396 Ipkg ipkg;
397 ipkg.setOption( "upgrade" );
398
399 InstallDlgImpl dlg( &ipkg, tr( "Upgrading installed packages" ), this, tr( "Upgrade" ), true );
400 dlg.showDlg();
401
402 // Reload data
403 dataMgr->reloadServerData();
404 serverSelected(-1);
405 }
406}
407
408
409void NetworkPackageManager :: downloadPackage()
410{
411 bool doUpdate = true;
412 if ( downloadEnabled )
413 {
414 // See if any packages are selected
415 bool found = false;
416 if ( serversList->currentText() != LOCAL_SERVER )
417 {
418 for ( QCheckListItem *item = (QCheckListItem *)packagesList->firstChild();
419 item != 0 && !found;
420 item = (QCheckListItem *)item->nextSibling() )
421 {
422 if ( item->isOn() )
423 found = true;
424 }
425 }
426
427 // If user selected some packages then download the and store the locally
428 // otherwise, display dialog asking user what package to download from an http server
429 // and whether to install it
430 if ( found )
431 downloadSelectedPackages();
432 else
433 downloadRemotePackage();
434
435 }
436 else
437 {
438 doUpdate = false;
439 for ( QCheckListItem *item = (QCheckListItem *)packagesList->firstChild();
440 item != 0 ;
441 item = (QCheckListItem *)item->nextSibling() )
442 {
443 if ( item->isOn() )
444 {
445 QString name = item->text();
446 int pos = name.find( "*" );
447 name.truncate( pos );
448
449 // if (there is a (installed), remove it
450 pos = name.find( "(installed)" );
451 if ( pos > 0 )
452 name.truncate( pos - 1 );
453
454 Package *p = dataMgr->getServer( serversList->currentText() )->getPackage( name );
455
456 QString msgtext;
457 msgtext = tr( "Are you sure you wish to delete\n%1?" ).arg( (const char *)p->getPackageName() );
458 if ( QMessageBox::information( this, tr( "Are you sure?" ),
459 msgtext, tr( "No" ), tr( "Yes" ) ) == 1 )
460 {
461 doUpdate = true;
462 QFile f( p->getFilename() );
463 f.remove();
464 }
465 }
466 }
467 }
468
469 if ( doUpdate )
470 {
471 dataMgr->reloadServerData();
472 serverSelected( -1 );
473 }
474}
475
476void NetworkPackageManager :: downloadSelectedPackages()
477{
478 // First, write out ipkg_conf file so that ipkg can use it
479 dataMgr->writeOutIpkgConf();
480
481 // Display dialog to user asking where to download the files to
482 bool ok = FALSE;
483 QString dir = "";
484#ifdef QWS
485 // read download directory from config file
486 Config cfg( "aqpkg" );
487 cfg.setGroup( "settings" );
488 dir = cfg.readEntry( "downloadDir", "/home/root/Documents/application/ipkg" );
489#endif
490
491 QString text = InputDialog::getText( tr( "Download to where" ), tr( "Enter path to download to" ), dir, &ok, this );
492 if ( ok && !text.isEmpty() )
493 dir = text; // user entered something and pressed ok
494 else
495 return; // user entered nothing or pressed cancel
496
497#ifdef QWS
498 // Store download directory in config file
499 cfg.writeEntry( "downloadDir", dir );
500#endif
501
502 // Get starting directory
503 char initDir[PATH_MAX];
504 getcwd( initDir, PATH_MAX );
505
506 // Download each package
507 Ipkg ipkg;
508 connect( &ipkg, SIGNAL(outputText(const QString &)), this, SLOT(displayText(const QString &)));
509
510 ipkg.setOption( "download" );
511 ipkg.setRuntimeDirectory( dir );
512 for ( QCheckListItem *item = (QCheckListItem *)packagesList->firstChild();
513 item != 0 ;
514 item = (QCheckListItem *)item->nextSibling() )
515 {
516 if ( item->isOn() )
517 {
518 ipkg.setPackage( item->text() );
519 ipkg.runIpkg( );
520 }
521 }
522}
523
524void NetworkPackageManager :: downloadRemotePackage()
525{
526 // Display dialog
527 bool ok;
528 QString package = InputDialog::getText( tr( "Install Remote Package" ), tr( "Enter package location" ), "http://", &ok, this );
529 if ( !ok || package.isEmpty() )
530 return;
531// DownloadRemoteDlgImpl dlg( this, "Install", true );
532// if ( dlg.exec() == QDialog::Rejected )
533// return;
534
535 // grab details from dialog
536// QString package = dlg.getPackageLocation();
537
538 InstallData item;
539 item.option = "I";
540 item.packageName = package;
541 vector<InstallData> workingPackages;
542 workingPackages.push_back( item );
543
544 InstallDlgImpl dlg2( workingPackages, dataMgr, this, "Install", true );
545 dlg2.showDlg();
546
547 // Reload data
548 dataMgr->reloadServerData();
549 serverSelected(-1);
550
551#ifdef QWS
552 // Finally let the main system update itself
553 QCopEnvelope e("QPE/System", "linkChanged(QString)");
554 QString lf = QString::null;
555 e << lf;
556#endif
557}
558
559
560void NetworkPackageManager :: applyChanges()
561{
562 stickyOption = "";
563
564 // First, write out ipkg_conf file so that ipkg can use it
565 dataMgr->writeOutIpkgConf();
566
567 // Now for each selected item
568 // deal with it
569
570 vector<InstallData> workingPackages;
571 for ( QCheckListItem *item = (QCheckListItem *)packagesList->firstChild();
572 item != 0 ;
573 item = (QCheckListItem *)item->nextSibling() )
574 {
575 if ( item->isOn() )
576 {
577 InstallData data = dealWithItem( item );
578 workingPackages.push_back( data );
579 }
580 }
581
582 if ( workingPackages.size() == 0 )
583 {
584 // Nothing to do
585 QMessageBox::information( this, tr( "Nothing to do" ),
586 tr( "No packages selected" ), tr( "OK" ) );
587
588 return;
589 }
590
591 // do the stuff
592 InstallDlgImpl dlg( workingPackages, dataMgr, this, "Install", true );
593 dlg.showDlg();
594
595 // Reload data
596 dataMgr->reloadServerData();
597 serverSelected(-1);
598
599#ifdef QWS
600 // Finally let the main system update itself
601 QCopEnvelope e("QPE/System", "linkChanged(QString)");
602 QString lf = QString::null;
603 e << lf;
604#endif
605}
606
607// decide what to do - either remove, upgrade or install
608// Current rules:
609// If not installed - install
610// If installed and different version available - upgrade
611// If installed and version up to date - remove
612InstallData NetworkPackageManager :: dealWithItem( QCheckListItem *item )
613{
614 QString name = item->text();
615
616 // Get package
617 vector<Server>::iterator s = dataMgr->getServer( serversList->currentText() );
618 Package *p = s->getPackage( name );
619
620 // If the package has a filename then it is a local file
621 if ( p->isPackageStoredLocally() )
622 name = p->getFilename();
623
624 QString option;
625 QString dest = "root";
626 if ( !p->isInstalled() )
627 {
628 InstallData item;
629 item.option = "I";
630 item.packageName = name;
631 return item;
632 }
633 else
634 {
635 InstallData item;
636 item.option = "D";
637 if ( !p->isPackageStoredLocally() )
638 item.packageName = p->getInstalledPackageName();
639 else
640 item.packageName = name;
641
642 if ( p->getInstalledTo() )
643 {
644 item.destination = p->getInstalledTo();
645// cout << "dest - " << p->getInstalledTo()->getDestinationName() << endl;
646// cout << "dest - " << p->getInstalledTo()->getDestinationPath() << endl;
647 }
648 else
649 {
650 item.destination = p->getLocalPackage()->getInstalledTo();
651 }
652
653 // Now see if version is newer or not
654 int val = compareVersions( p->getInstalledVersion(), p->getVersion() );
655
656 // If the version requested is older and user selected a local ipk file, then reinstall the file
657 if ( p->isPackageStoredLocally() && val == -1 )
658 val = 0;
659
660 if ( val == -2 )
661 {
662 // Error - should handle
663 }
664 else if ( val == -1 )
665 {
666 // Version available is older - remove only
667 item.option = "D";
668 }
669 else
670 {
671 QString caption;
672 QString text;
673 QString secondButton;
674 QString secondOption;
675 if ( val == 0 )
676 {
677 // Version available is the same - option to remove or reinstall
678 caption = tr( "Do you wish to remove or reinstall\n%1?" );
679 text = tr( "Remove or ReInstall" );
680 secondButton = tr( "ReInstall" );
681 secondOption = tr( "R" );
682 }
683 else if ( val == 1 )
684 {
685 // Version available is newer - option to remove or upgrade
686 caption = tr( "Do you wish to remove or upgrade\n%1?" );
687 text = tr( "Remove or Upgrade" );
688 secondButton = tr( "Upgrade" );
689 secondOption = tr( "U" );
690 }
691
692 // Sticky option not implemented yet, but will eventually allow
693 // the user to say something like 'remove all'
694 if ( stickyOption == "" )
695 {
696 QString msgtext;
697 msgtext = caption.arg( ( const char * )name );
698 switch( QMessageBox::information( this, text,
699 msgtext, tr( "Remove" ), secondButton ) )
700 {
701 case 0: // Try again or Enter
702 // option 0 = Remove
703 item.option = "D";
704 break;
705 case 1: // Quit or Escape
706 item.option = secondOption;
707 break;
708 }
709 }
710 else
711 {
712// item.option = stickyOption;
713 }
714 }
715
716
717 // Check if we are reinstalling the same version
718 if ( item.option != "R" )
719 item.recreateLinks = true;
720 else
721 item.recreateLinks = false;
722
723 // User hit cancel (on dlg - assume remove)
724 return item;
725 }
726}
727
728void NetworkPackageManager :: displayText( const QString &/*t*/ )
729{
730// cout << t << endl;
731}
732
733
734void NetworkPackageManager :: letterPushed( QString t )
735{
736 QCheckListItem *top = (QCheckListItem *)packagesList->firstChild();
737 QCheckListItem *start = (QCheckListItem *)packagesList->currentItem();
738 if ( packagesList->firstChild() == 0 )
739 return;
740
741 QCheckListItem *item;
742 if ( start == 0 )
743 {
744 item = (QCheckListItem *)packagesList->firstChild();
745 start = top;
746 }
747 else
748 item = (QCheckListItem *)start->nextSibling();
749
750 if ( item == 0 )
751 item = (QCheckListItem *)packagesList->firstChild();
752 do
753 {
754 if ( item->text().lower().startsWith( t.lower() ) )
755 {
756 packagesList->setSelected( item, true );
757 packagesList->ensureItemVisible( item );
758 break;
759 }
760
761 item = (QCheckListItem *)item->nextSibling();
762 if ( !item )
763 item = (QCheckListItem *)packagesList->firstChild();
764 } while ( item != start);
765}
766
767
768void NetworkPackageManager :: searchForPackage( const QString &text )
769{
770 if ( !text.isEmpty() )
771 {
772// cout << "searching for " << text << endl;
773 // look through package list for text startng at current position
774 vector<InstallData> workingPackages;
775 QCheckListItem *start = (QCheckListItem *)packagesList->currentItem();
776 if ( start != 0 )
777 start = (QCheckListItem *)start->nextSibling();
778
779 if ( start == 0 )
780 start = (QCheckListItem *)packagesList->firstChild();
781
782 for ( QCheckListItem *item = start; item != 0 ;
783 item = (QCheckListItem *)item->nextSibling() )
784 {
785// cout << "checking " << item->text().lower() << endl;
786 if ( item->text().lower().find( text ) != -1 )
787 {
788// cout << "matched " << item->text() << endl;
789 packagesList->ensureItemVisible( item );
790 packagesList->setCurrentItem( item );
791 break;
792 }
793 }
794 }
795}
796
797void NetworkPackageManager :: showOnlyUninstalledPackages( bool val )
798{
799 showUninstalledPkgs = val;
800 if ( val )
801 {
802 showInstalledPkgs = FALSE;
803 showUpgradedPkgs = FALSE;
804 }
805 serverSelected( -1 );
806}
807
808void NetworkPackageManager :: showOnlyInstalledPackages( bool val )
809{
810 showInstalledPkgs = val;
811 if ( val )
812 {
813 showUninstalledPkgs = FALSE;
814 showUpgradedPkgs = FALSE;
815 }
816 serverSelected( -1 );
817}
818
819void NetworkPackageManager :: showUpgradedPackages( bool val )
820{
821 showUpgradedPkgs = val;
822 if ( val )
823 {
824 showUninstalledPkgs = FALSE;
825 showInstalledPkgs = FALSE;
826 }
827 serverSelected( -1 );
828}
829
830bool NetworkPackageManager :: filterByCategory( bool val )
831{
832 if ( val )
833 {
834 if ( categoryFilter == "" )
835 {
836 if ( !setFilterCategory() )
837 return false;
838 }
839
840 categoryFilterEnabled = true;
841 serverSelected( -1 );
842 return true;
843 }
844 else
845 {
846 // Turn off filter
847 categoryFilterEnabled = false;
848 serverSelected( -1 );
849 return false;
850 }
851}
852
853bool NetworkPackageManager :: setFilterCategory( )
854{
855 // Get categories;
856 CategoryFilterImpl dlg( DataManager::getAvailableCategories(), categoryFilter, this );
857 if ( dlg.exec() == QDialog::Accepted )
858 {
859 categoryFilter = dlg.getSelectedFilter();
860
861 if ( categoryFilter == "" )
862 return false;
863
864 categoryFilterEnabled = true;
865 serverSelected( -1 );
866 return true;
867 }
868
869 return false;
870}