summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/settings/packagemanager/ChangeLog5
-rw-r--r--noncore/settings/packagemanager/mainwindow.cpp5
-rw-r--r--noncore/settings/packagemanager/oipkg.cpp69
-rw-r--r--noncore/settings/packagemanager/oipkg.h8
-rw-r--r--noncore/settings/packagemanager/opackage.cpp5
-rw-r--r--noncore/settings/packagemanager/opackage.h15
-rw-r--r--noncore/settings/packagemanager/packageinfodlg.cpp96
-rw-r--r--noncore/settings/packagemanager/packageinfodlg.h10
8 files changed, 169 insertions, 44 deletions
diff --git a/noncore/settings/packagemanager/ChangeLog b/noncore/settings/packagemanager/ChangeLog
index efa75b1..72e6169 100644
--- a/noncore/settings/packagemanager/ChangeLog
+++ b/noncore/settings/packagemanager/ChangeLog
@@ -1,3 +1,8 @@
12004-mm-dd Dan Williams <drw@handhelds.org>
2
3 * Package information dialog implemented
4 * What's This app icon enabled
5
12004-01-23 Dan Williams <drw@handhelds.org> 62004-01-23 Dan Williams <drw@handhelds.org>
2 7
3 * Added package download functionality 8 * Added package download functionality
diff --git a/noncore/settings/packagemanager/mainwindow.cpp b/noncore/settings/packagemanager/mainwindow.cpp
index 05f21bc..8b374ab 100644
--- a/noncore/settings/packagemanager/mainwindow.cpp
+++ b/noncore/settings/packagemanager/mainwindow.cpp
@@ -49,8 +49,8 @@
49#include "entrydlg.h" 49#include "entrydlg.h"
50#include "packageinfodlg.h" 50#include "packageinfodlg.h"
51 51
52MainWindow::MainWindow( QWidget *parent, const char *name, WFlags fl ) 52MainWindow::MainWindow( QWidget *parent, const char *name, WFlags /*fl*/ )
53 : QMainWindow( parent, name, fl || WStyle_ContextHelp ) 53 : QMainWindow( parent, name, WStyle_ContextHelp )
54 , m_config( "packman" ) 54 , m_config( "packman" )
55 , m_packman( &m_config, this ) 55 , m_packman( &m_config, this )
56 , m_menuBar( this ) 56 , m_menuBar( this )
@@ -675,7 +675,6 @@ void MainWindow::slotDisplayPackageInfo( QListViewItem *packageItem )
675 675
676 // Create package manager output widget 676 // Create package manager output widget
677 PackageInfoDlg *dlg = new PackageInfoDlg( this, &m_packman, packageName ); 677 PackageInfoDlg *dlg = new PackageInfoDlg( this, &m_packman, packageName );
678 connect( dlg, SIGNAL(closeInfoDlg()), this, SLOT(slotCloseDlg()) );
679 678
680 // Display widget 679 // Display widget
681 m_widgetStack.addWidget( dlg, 3 ); 680 m_widgetStack.addWidget( dlg, 3 );
diff --git a/noncore/settings/packagemanager/oipkg.cpp b/noncore/settings/packagemanager/oipkg.cpp
index ed9ea10..eb07a61 100644
--- a/noncore/settings/packagemanager/oipkg.cpp
+++ b/noncore/settings/packagemanager/oipkg.cpp
@@ -31,6 +31,7 @@
31 31
32#include "oipkg.h" 32#include "oipkg.h"
33 33
34#include <stdio.h>
34#include <stdlib.h> 35#include <stdlib.h>
35#include <string.h> 36#include <string.h>
36 37
@@ -46,17 +47,33 @@ const QString IPKG_STATUS_PATH = "usr/lib/ipkg/status"; // Destination status fi
46 47
47OIpkg *oipkg; 48OIpkg *oipkg;
48 49
49int fIpkgMessage( ipkg_conf_t */*conf*/, message_level_t /*level*/, char *msg ) 50// Ipkg callback functions
51
52int fsignalIpkgMessage( ipkg_conf_t */*conf*/, message_level_t /*level*/, char *msg )
50{ 53{
51 oipkg->ipkgOutput( msg ); 54 oipkg->ipkgMessage( msg );
52 return 0; 55 return 0;
53} 56}
54 57
55char* fIpkgResponse( char */*question*/ ) 58char *fIpkgResponse( char */*question*/ )
56{ 59{
57 return 0x0; 60 return 0x0;
58} 61}
59 62
63int fIpkgStatus( char */*name*/, int /*status*/, char *desc, void */*userdata*/ )
64{
65 oipkg->ipkgStatus( desc );
66 return 0;
67}
68
69int fIpkgFiles( char */*name*/, char *desc, char */*version*/, pkg_state_status_t /*status*/,
70 void */*userdata*/ )
71{
72printf( "*****List*****\n%s\n", desc );
73 oipkg->ipkgList( desc );
74 return 0;
75}
76
60OIpkg::OIpkg( Config *config, QObject *parent, const char *name ) 77OIpkg::OIpkg( Config *config, QObject *parent, const char *name )
61 : QObject( parent, name ) 78 : QObject( parent, name )
62 , m_config( config ) 79 , m_config( config )
@@ -67,7 +84,7 @@ OIpkg::OIpkg( Config *config, QObject *parent, const char *name )
67 oipkg = this; 84 oipkg = this;
68 85
69 // Initialize libipkg 86 // Initialize libipkg
70 if ( ipkg_init( &fIpkgMessage, &fIpkgResponse, &m_ipkgArgs ) ) 87 if ( ipkg_init( &fsignalIpkgMessage, &fIpkgResponse, &m_ipkgArgs ) )
71 QMessageBox::critical( 0, tr( "OIpkg" ), tr( "Error initialing libipkg" ) ); 88 QMessageBox::critical( 0, tr( "OIpkg" ), tr( "Error initialing libipkg" ) );
72 89
73 // Default ipkg run-time arguments 90 // Default ipkg run-time arguments
@@ -297,23 +314,31 @@ bool OIpkg::executeCommand( OPackage::Command command, QStringList *parameters,
297 m_ipkgArgs.dest = 0x0; 314 m_ipkgArgs.dest = 0x0;
298 315
299 // Connect output signal to widget 316 // Connect output signal to widget
317
300 if ( rawOutput ) 318 if ( rawOutput )
301 { 319 {
302 if ( slotOutput ) 320// if ( slotOutput )
303 connect( this, SIGNAL(execOutput(char *)), receiver, slotOutput ); 321// connect( this, SIGNAL(signalIpkgMessage(char *)), receiver, slotOutput );
304 } 322 }
305 else 323 else
306 { 324 {
307 // TODO - connect to local slot and parse output before emitting execOutput 325 // TODO - connect to local slot and parse output before emitting signalIpkgMessage
308 } 326 }
309 327
310 switch( command ) 328 switch( command )
311 { 329 {
312 case OPackage::Update : ipkg_lists_update( &m_ipkgArgs ); 330 case OPackage::Update : {
331 connect( this, SIGNAL(signalIpkgMessage(char *)), receiver, slotOutput );
332 ipkg_lists_update( &m_ipkgArgs );
333 };
313 break; 334 break;
314 case OPackage::Upgrade : ipkg_packages_upgrade( &m_ipkgArgs ); 335 case OPackage::Upgrade : {
336 connect( this, SIGNAL(signalIpkgMessage(char *)), receiver, slotOutput );
337 ipkg_packages_upgrade( &m_ipkgArgs );
338 };
315 break; 339 break;
316 case OPackage::Install : { 340 case OPackage::Install : {
341 connect( this, SIGNAL(signalIpkgMessage(char *)), receiver, slotOutput );
317 for ( QStringList::Iterator it = parameters->begin(); it != parameters->end(); ++it ) 342 for ( QStringList::Iterator it = parameters->begin(); it != parameters->end(); ++it )
318 { 343 {
319 ipkg_packages_install( &m_ipkgArgs, (*it) ); 344 ipkg_packages_install( &m_ipkgArgs, (*it) );
@@ -321,6 +346,7 @@ bool OIpkg::executeCommand( OPackage::Command command, QStringList *parameters,
321 }; 346 };
322 break; 347 break;
323 case OPackage::Remove : { 348 case OPackage::Remove : {
349 connect( this, SIGNAL(signalIpkgMessage(char *)), receiver, slotOutput );
324 for ( QStringList::Iterator it = parameters->begin(); it != parameters->end(); ++it ) 350 for ( QStringList::Iterator it = parameters->begin(); it != parameters->end(); ++it )
325 { 351 {
326 ipkg_packages_remove( &m_ipkgArgs, (*it), true ); 352 ipkg_packages_remove( &m_ipkgArgs, (*it), true );
@@ -328,21 +354,42 @@ bool OIpkg::executeCommand( OPackage::Command command, QStringList *parameters,
328 }; 354 };
329 break; 355 break;
330 case OPackage::Download : { 356 case OPackage::Download : {
357 connect( this, SIGNAL(signalIpkgMessage(char *)), receiver, slotOutput );
331 for ( QStringList::Iterator it = parameters->begin(); it != parameters->end(); ++it ) 358 for ( QStringList::Iterator it = parameters->begin(); it != parameters->end(); ++it )
332 { 359 {
333 ipkg_packages_download( &m_ipkgArgs, (*it) ); 360 ipkg_packages_download( &m_ipkgArgs, (*it) );
334 } 361 }
335 }; 362 };
336 break; 363 break;
364 case OPackage::Info : {
365 connect( this, SIGNAL(signalIpkgStatus(char *)), receiver, slotOutput );
366 ipkg_packages_info( &m_ipkgArgs, (*parameters->begin()), &fIpkgStatus, 0x0 );
367 };
368 break;
369 case OPackage::Files : {
370 connect( this, SIGNAL(signalIpkgList(char *)), receiver, slotOutput );
371 ipkg_package_files( &m_ipkgArgs, (*parameters->begin()), &fIpkgFiles, 0x0 );
372 };
373 break;
337 default : break; 374 default : break;
338 }; 375 };
339 376
340 return true; 377 return true;
341} 378}
342 379
343void OIpkg::ipkgOutput( char *msg ) 380void OIpkg::ipkgMessage( char *msg )
381{
382 emit signalIpkgMessage( msg );
383}
384
385void OIpkg::ipkgStatus( char *status )
386{
387 emit signalIpkgStatus( status );
388}
389
390void OIpkg::ipkgList( char *filelist )
344{ 391{
345 emit execOutput( msg ); 392 emit signalIpkgList( filelist );
346} 393}
347 394
348void OIpkg::loadConfiguration() 395void OIpkg::loadConfiguration()
diff --git a/noncore/settings/packagemanager/oipkg.h b/noncore/settings/packagemanager/oipkg.h
index 824fa17..ea126cf 100644
--- a/noncore/settings/packagemanager/oipkg.h
+++ b/noncore/settings/packagemanager/oipkg.h
@@ -82,7 +82,9 @@ public:
82 const char *slotOutput = 0x0, bool rawOutput = true ); 82 const char *slotOutput = 0x0, bool rawOutput = true );
83 void abortCommand(); 83 void abortCommand();
84 84
85 void ipkgOutput( char *msg ); 85 void ipkgMessage( char *msg );
86 void ipkgStatus( char *status );
87 void ipkgList( char *filelist );
86 88
87private: 89private:
88 Config *m_config; // Pointer to application configuration file 90 Config *m_config; // Pointer to application configuration file
@@ -95,7 +97,9 @@ private:
95 OConfItemList *filterConfItems( OConfItem::Type typefilter = OConfItem::NotDefined ); 97 OConfItemList *filterConfItems( OConfItem::Type typefilter = OConfItem::NotDefined );
96 98
97signals: 99signals:
98 void execOutput( char *msg ); 100 void signalIpkgMessage( char *msg );
101 void signalIpkgStatus( char *status );
102 void signalIpkgList( char *filelist );
99}; 103};
100 104
101#endif 105#endif
diff --git a/noncore/settings/packagemanager/opackage.cpp b/noncore/settings/packagemanager/opackage.cpp
index 34717e3..37963fa 100644
--- a/noncore/settings/packagemanager/opackage.cpp
+++ b/noncore/settings/packagemanager/opackage.cpp
@@ -32,12 +32,15 @@
32#include "opackage.h" 32#include "opackage.h"
33 33
34OPackage::OPackage( const QString &name, const QString &version, const QString &versionInstalled, 34OPackage::OPackage( const QString &name, const QString &version, const QString &versionInstalled,
35 const QString &source, const QString &destination, const QString &category ) 35 const QString &source, const QString &destination, const QString &category,
36 const QString &information, const QString &files )
36 : m_name( name ) 37 : m_name( name )
37 , m_version( version ) 38 , m_version( version )
38 , m_versionInstalled( versionInstalled ) 39 , m_versionInstalled( versionInstalled )
39 , m_source( source ) 40 , m_source( source )
40 , m_destination( destination ) 41 , m_destination( destination )
41 , m_category( category ) 42 , m_category( category )
43 , m_information( information )
44 , m_files( files )
42{ 45{
43} 46}
diff --git a/noncore/settings/packagemanager/opackage.h b/noncore/settings/packagemanager/opackage.h
index 1e2e49f..fbd9ec0 100644
--- a/noncore/settings/packagemanager/opackage.h
+++ b/noncore/settings/packagemanager/opackage.h
@@ -40,10 +40,11 @@ class OPackage
40public: 40public:
41 enum Command { Install, Remove, Update, Upgrade, Download, Info, Files, Version, NotDefined }; 41 enum Command { Install, Remove, Update, Upgrade, Download, Info, Files, Version, NotDefined };
42 42
43 OPackage( const QString &name = 0x0, 43 OPackage( const QString &name= QString::null,
44 const QString &version = 0x0, const QString &versionInstalled = 0x0, 44 const QString &version= QString::null, const QString &versionInstalled= QString::null,
45 const QString &source = 0x0, const QString &destination = 0x0, 45 const QString &source= QString::null, const QString &destination= QString::null,
46 const QString &category = "misc" ); 46 const QString &category = "misc", const QString &information = QString::null,
47 const QString &files = QString::null );
47 48
48 const QString &name() { return m_name; } 49 const QString &name() { return m_name; }
49 const QString &version() { return m_version; } 50 const QString &version() { return m_version; }
@@ -51,6 +52,8 @@ public:
51 const QString &source() { return m_source; } 52 const QString &source() { return m_source; }
52 const QString &destination() { return m_destination; } 53 const QString &destination() { return m_destination; }
53 const QString &category() { return m_category; } 54 const QString &category() { return m_category; }
55 const QString &information() { return m_information; }
56 const QString &files() { return m_files; }
54 57
55 void setName( const QString &name ) { m_name = name; } 58 void setName( const QString &name ) { m_name = name; }
56 void setVersion( const QString &version ) { m_version = version; } 59 void setVersion( const QString &version ) { m_version = version; }
@@ -58,6 +61,8 @@ public:
58 void setSource( const QString &source ) { m_source = source; } 61 void setSource( const QString &source ) { m_source = source; }
59 void setDestination( const QString &destination ) { m_destination = destination; } 62 void setDestination( const QString &destination ) { m_destination = destination; }
60 void setCategory( const QString &category ) { m_category = category; } 63 void setCategory( const QString &category ) { m_category = category; }
64 void setInformation( const QString &information ) { m_information = information; }
65 void setFiles( const QString &files ) { m_files = files; }
61 66
62private: 67private:
63 QString m_name; // Name of item 68 QString m_name; // Name of item
@@ -66,6 +71,8 @@ private:
66 QString m_source; // Source feed of available version 71 QString m_source; // Source feed of available version
67 QString m_destination; // Location item is installed to, null if not installed 72 QString m_destination; // Location item is installed to, null if not installed
68 QString m_category; // Item category 73 QString m_category; // Item category
74 QString m_information; // Package information
75 QString m_files; // File list information
69}; 76};
70 77
71typedef QList<OPackage> OPackageList; 78typedef QList<OPackage> OPackageList;
diff --git a/noncore/settings/packagemanager/packageinfodlg.cpp b/noncore/settings/packagemanager/packageinfodlg.cpp
index 26356b9..7daf336 100644
--- a/noncore/settings/packagemanager/packageinfodlg.cpp
+++ b/noncore/settings/packagemanager/packageinfodlg.cpp
@@ -28,6 +28,8 @@
28*/ 28*/
29 29
30#include "packageinfodlg.h" 30#include "packageinfodlg.h"
31#include "opackage.h"
32#include "opackagemanager.h"
31 33
32#include <qlayout.h> 34#include <qlayout.h>
33#include <qpushbutton.h> 35#include <qpushbutton.h>
@@ -46,37 +48,93 @@ PackageInfoDlg::PackageInfoDlg( QWidget *parent, OPackageManager *pm, const QStr
46 if ( parent ) 48 if ( parent )
47 parent->setCaption( package ); 49 parent->setCaption( package );
48 50
49 QVBoxLayout *layout = new QVBoxLayout( this, 4, 0 ); 51 QVBoxLayout *layout = new QVBoxLayout( this, 4, 2 );
50 52
51 OTabWidget *tabWidget = new OTabWidget( this ); 53 OTabWidget *tabWidget = new OTabWidget( this );
52 layout->addWidget( tabWidget ); 54 layout->addWidget( tabWidget );
53 55
54 QPushButton *btn = new QPushButton( Resource::loadPixmap( "enter" ), tr( "Close" ), this );
55 layout->addWidget( btn );
56 connect( btn, SIGNAL(clicked()), this, SLOT(slotBtnClose()) );
57
58 // Information tab 56 // Information tab
59 m_information.reparent( tabWidget, QPoint( 0, 0 ) ); 57 m_information.reparent( tabWidget, QPoint( 0, 0 ) );
60 m_information.setReadOnly( true ); 58 m_information.setReadOnly( true );
61 tabWidget->addTab( &m_information, "UtilsIcon", tr( "Information" ) ); 59 tabWidget->addTab( &m_information, "UtilsIcon", tr( "Information" ) );
62 60
63 // Files tab 61 // Retrive package information
64 QWidget *filesWidget = new QWidget( tabWidget ); 62 m_package = m_packman->findPackage( package );
65 QVBoxLayout *filesLayout = new QVBoxLayout( filesWidget, 4, 0 ); 63 if ( !m_package )
66 m_files.reparent( filesWidget, QPoint( 0, 0 ) ); 64 {
67 m_files.setReadOnly( true ); 65 m_information.setText( tr( "Unable to retrieve package information." ) );
68 filesLayout->addWidget( &m_files ); 66 return;
67 }
68
69 // Display package information
70 if ( !m_package->information().isNull() )
71 m_information.setText( m_package->information() );
72 else
73 {
74 // Package information is not cached, retrieve it
75 QStringList list( package );
76 m_packman->executeCommand( OPackage::Info, &list, QString::null, this, SLOT(slotInfo(char*)), true );
77 }
78
79 // Files tab (display only if package is installed)
80 if ( !m_package->versionInstalled().isNull() )
81 {
82 QWidget *filesWidget = new QWidget( tabWidget );
83 QVBoxLayout *filesLayout = new QVBoxLayout( filesWidget, 2, 2 );
84 m_files.reparent( filesWidget, QPoint( 0, 0 ) );
85 m_files.setReadOnly( true );
86 filesLayout->addWidget( &m_files );
87
88 QPushButton *btn = new QPushButton( Resource::loadPixmap( "packagemanager/apply" ),
89 tr( "Retrieve file list" ), filesWidget );
90 filesLayout->addWidget( btn );
91 connect( btn, SIGNAL(clicked()), this, SLOT(slotBtnFileScan()) );
92 tabWidget->addTab( filesWidget, "binary", tr( "File list" ) );
93
94 tabWidget->setCurrentTab( tr( "Information" ) );
95
96 // If file list is already cached, display
97 if ( !m_package->files().isNull() )
98 m_files.setText( m_package->files() );
99 }
100 else
101 m_files.hide();
102}
103
104PackageInfoDlg::~PackageInfoDlg()
105{
106 if ( !m_package )
107 return;
108
109 // Cache package information
110 if ( !m_information.text().isNull() )
111 m_package->setInformation( m_information.text() );
69 112
70 btn = new QPushButton( Resource::loadPixmap( "packagemanager/apply" ), tr( "Retrieve file list" ), 113 // Cache package file list
71 filesWidget ); 114 if ( !m_files.text().isNull() )
72 filesLayout->addWidget( btn ); 115 m_package->setFiles( m_files.text() );
73// TODO connect( btn, SIGNAL(clicked()), this, SLOT(slotFileScan()) ); 116}
74 tabWidget->addTab( filesWidget, "binary", tr( "Files" ) );
75 117
76 tabWidget->setCurrentTab( tr( "Information" ) ); 118void PackageInfoDlg::slotBtnFileScan()
119{
120 m_files.clear();
121
122 QStringList list( m_package->name() );
123 m_packman->executeCommand( OPackage::Files, &list, QString::null, this, SLOT(slotFiles(char*)), true );
77} 124}
78 125
79void PackageInfoDlg::slotBtnClose() 126void PackageInfoDlg::slotInfo( char *info )
80{ 127{
81 emit closeInfoDlg(); 128 m_information.append( info );
129}
130
131void PackageInfoDlg::slotFiles( char *filelist )
132{
133 QString str = filelist;
134
135 // Skip first line of output ("Package xxx is installed...")
136 if ( str.startsWith( "Package " ) )
137 str = str.right( str.length() - str.find( '\n' ) - 1 );
138
139 m_files.append( str );
82} 140}
diff --git a/noncore/settings/packagemanager/packageinfodlg.h b/noncore/settings/packagemanager/packageinfodlg.h
index 09af6f4..13a15e2 100644
--- a/noncore/settings/packagemanager/packageinfodlg.h
+++ b/noncore/settings/packagemanager/packageinfodlg.h
@@ -39,6 +39,7 @@
39 39
40class QPushButton; 40class QPushButton;
41 41
42class OPackage;
42class OPackageManager; 43class OPackageManager;
43 44
44class PackageInfoDlg : public QWidget 45class PackageInfoDlg : public QWidget
@@ -47,19 +48,20 @@ class PackageInfoDlg : public QWidget
47 48
48public: 49public:
49 PackageInfoDlg( QWidget *parent = 0x0, OPackageManager *pm = 0x0, const QString &package = QString::null ); 50 PackageInfoDlg( QWidget *parent = 0x0, OPackageManager *pm = 0x0, const QString &package = QString::null );
51 ~PackageInfoDlg();
50 52
51private: 53private:
52 OPackageManager *m_packman; // Pointer to application instance of package manager 54 OPackageManager *m_packman; // Pointer to application instance of package manager
55 OPackage *m_package; // Pointer to package to display information for
53 56
54 // UI controls 57 // UI controls
55 QMultiLineEdit m_information; // Multi-line edit to display package information 58 QMultiLineEdit m_information; // Multi-line edit to display package information
56 QMultiLineEdit m_files; // Multi-line edit to display package file list 59 QMultiLineEdit m_files; // Multi-line edit to display package file list
57 60
58private slots: 61private slots:
59 void slotBtnClose(); 62 void slotBtnFileScan();
60 63 void slotInfo( char *info );
61signals: 64 void slotFiles( char *filelist );
62 void closeInfoDlg();
63}; 65};
64 66
65#endif 67#endif