summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--noncore/settings/packagemanager/ChangeLog5
-rw-r--r--noncore/settings/packagemanager/mainwindow.cpp5
-rw-r--r--noncore/settings/packagemanager/oipkg.cpp67
-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.cpp84
-rw-r--r--noncore/settings/packagemanager/packageinfodlg.h10
8 files changed, 162 insertions, 37 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 @@
+2004-mm-dd Dan Williams <drw@handhelds.org>
+
+ * Package information dialog implemented
+ * What's This app icon enabled
+
2004-01-23 Dan Williams <drw@handhelds.org>
* 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 @@
#include "entrydlg.h"
#include "packageinfodlg.h"
-MainWindow::MainWindow( QWidget *parent, const char *name, WFlags fl )
- : QMainWindow( parent, name, fl || WStyle_ContextHelp )
+MainWindow::MainWindow( QWidget *parent, const char *name, WFlags /*fl*/ )
+ : QMainWindow( parent, name, WStyle_ContextHelp )
, m_config( "packman" )
, m_packman( &m_config, this )
, m_menuBar( this )
@@ -675,7 +675,6 @@ void MainWindow::slotDisplayPackageInfo( QListViewItem *packageItem )
// Create package manager output widget
PackageInfoDlg *dlg = new PackageInfoDlg( this, &m_packman, packageName );
- connect( dlg, SIGNAL(closeInfoDlg()), this, SLOT(slotCloseDlg()) );
// Display widget
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 @@
#include "oipkg.h"
+#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -46,9 +47,11 @@ const QString IPKG_STATUS_PATH = "usr/lib/ipkg/status"; // Destination status fi
OIpkg *oipkg;
-int fIpkgMessage( ipkg_conf_t */*conf*/, message_level_t /*level*/, char *msg )
+// Ipkg callback functions
+
+int fsignalIpkgMessage( ipkg_conf_t */*conf*/, message_level_t /*level*/, char *msg )
{
- oipkg->ipkgOutput( msg );
+ oipkg->ipkgMessage( msg );
return 0;
}
@@ -57,6 +60,20 @@ char* fIpkgResponse( char */*question*/ )
return 0x0;
}
+int fIpkgStatus( char */*name*/, int /*status*/, char *desc, void */*userdata*/ )
+{
+ oipkg->ipkgStatus( desc );
+ return 0;
+}
+
+int fIpkgFiles( char */*name*/, char *desc, char */*version*/, pkg_state_status_t /*status*/,
+ void */*userdata*/ )
+{
+printf( "*****List*****\n%s\n", desc );
+ oipkg->ipkgList( desc );
+ return 0;
+}
+
OIpkg::OIpkg( Config *config, QObject *parent, const char *name )
: QObject( parent, name )
, m_config( config )
@@ -67,7 +84,7 @@ OIpkg::OIpkg( Config *config, QObject *parent, const char *name )
oipkg = this;
// Initialize libipkg
- if ( ipkg_init( &fIpkgMessage, &fIpkgResponse, &m_ipkgArgs ) )
+ if ( ipkg_init( &fsignalIpkgMessage, &fIpkgResponse, &m_ipkgArgs ) )
QMessageBox::critical( 0, tr( "OIpkg" ), tr( "Error initialing libipkg" ) );
// Default ipkg run-time arguments
@@ -297,23 +314,31 @@ bool OIpkg::executeCommand( OPackage::Command command, QStringList *parameters,
m_ipkgArgs.dest = 0x0;
// Connect output signal to widget
+
if ( rawOutput )
{
- if ( slotOutput )
- connect( this, SIGNAL(execOutput(char *)), receiver, slotOutput );
+// if ( slotOutput )
+// connect( this, SIGNAL(signalIpkgMessage(char *)), receiver, slotOutput );
}
else
{
- // TODO - connect to local slot and parse output before emitting execOutput
+ // TODO - connect to local slot and parse output before emitting signalIpkgMessage
}
switch( command )
{
- case OPackage::Update : ipkg_lists_update( &m_ipkgArgs );
+ case OPackage::Update : {
+ connect( this, SIGNAL(signalIpkgMessage(char *)), receiver, slotOutput );
+ ipkg_lists_update( &m_ipkgArgs );
+ };
break;
- case OPackage::Upgrade : ipkg_packages_upgrade( &m_ipkgArgs );
+ case OPackage::Upgrade : {
+ connect( this, SIGNAL(signalIpkgMessage(char *)), receiver, slotOutput );
+ ipkg_packages_upgrade( &m_ipkgArgs );
+ };
break;
case OPackage::Install : {
+ connect( this, SIGNAL(signalIpkgMessage(char *)), receiver, slotOutput );
for ( QStringList::Iterator it = parameters->begin(); it != parameters->end(); ++it )
{
ipkg_packages_install( &m_ipkgArgs, (*it) );
@@ -321,6 +346,7 @@ bool OIpkg::executeCommand( OPackage::Command command, QStringList *parameters,
};
break;
case OPackage::Remove : {
+ connect( this, SIGNAL(signalIpkgMessage(char *)), receiver, slotOutput );
for ( QStringList::Iterator it = parameters->begin(); it != parameters->end(); ++it )
{
ipkg_packages_remove( &m_ipkgArgs, (*it), true );
@@ -328,21 +354,42 @@ bool OIpkg::executeCommand( OPackage::Command command, QStringList *parameters,
};
break;
case OPackage::Download : {
+ connect( this, SIGNAL(signalIpkgMessage(char *)), receiver, slotOutput );
for ( QStringList::Iterator it = parameters->begin(); it != parameters->end(); ++it )
{
ipkg_packages_download( &m_ipkgArgs, (*it) );
}
};
break;
+ case OPackage::Info : {
+ connect( this, SIGNAL(signalIpkgStatus(char *)), receiver, slotOutput );
+ ipkg_packages_info( &m_ipkgArgs, (*parameters->begin()), &fIpkgStatus, 0x0 );
+ };
+ break;
+ case OPackage::Files : {
+ connect( this, SIGNAL(signalIpkgList(char *)), receiver, slotOutput );
+ ipkg_package_files( &m_ipkgArgs, (*parameters->begin()), &fIpkgFiles, 0x0 );
+ };
+ break;
default : break;
};
return true;
}
-void OIpkg::ipkgOutput( char *msg )
+void OIpkg::ipkgMessage( char *msg )
+{
+ emit signalIpkgMessage( msg );
+}
+
+void OIpkg::ipkgStatus( char *status )
+{
+ emit signalIpkgStatus( status );
+}
+
+void OIpkg::ipkgList( char *filelist )
{
- emit execOutput( msg );
+ emit signalIpkgList( filelist );
}
void 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:
const char *slotOutput = 0x0, bool rawOutput = true );
void abortCommand();
- void ipkgOutput( char *msg );
+ void ipkgMessage( char *msg );
+ void ipkgStatus( char *status );
+ void ipkgList( char *filelist );
private:
Config *m_config; // Pointer to application configuration file
@@ -95,7 +97,9 @@ private:
OConfItemList *filterConfItems( OConfItem::Type typefilter = OConfItem::NotDefined );
signals:
- void execOutput( char *msg );
+ void signalIpkgMessage( char *msg );
+ void signalIpkgStatus( char *status );
+ void signalIpkgList( char *filelist );
};
#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 @@
#include "opackage.h"
OPackage::OPackage( const QString &name, const QString &version, const QString &versionInstalled,
- const QString &source, const QString &destination, const QString &category )
+ const QString &source, const QString &destination, const QString &category,
+ const QString &information, const QString &files )
: m_name( name )
, m_version( version )
, m_versionInstalled( versionInstalled )
, m_source( source )
, m_destination( destination )
, m_category( category )
+ , m_information( information )
+ , m_files( files )
{
}
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
public:
enum Command { Install, Remove, Update, Upgrade, Download, Info, Files, Version, NotDefined };
- OPackage( const QString &name = 0x0,
- const QString &version = 0x0, const QString &versionInstalled = 0x0,
- const QString &source = 0x0, const QString &destination = 0x0,
- const QString &category = "misc" );
+ OPackage( const QString &name= QString::null,
+ const QString &version= QString::null, const QString &versionInstalled= QString::null,
+ const QString &source= QString::null, const QString &destination= QString::null,
+ const QString &category = "misc", const QString &information = QString::null,
+ const QString &files = QString::null );
const QString &name() { return m_name; }
const QString &version() { return m_version; }
@@ -51,6 +52,8 @@ public:
const QString &source() { return m_source; }
const QString &destination() { return m_destination; }
const QString &category() { return m_category; }
+ const QString &information() { return m_information; }
+ const QString &files() { return m_files; }
void setName( const QString &name ) { m_name = name; }
void setVersion( const QString &version ) { m_version = version; }
@@ -58,6 +61,8 @@ public:
void setSource( const QString &source ) { m_source = source; }
void setDestination( const QString &destination ) { m_destination = destination; }
void setCategory( const QString &category ) { m_category = category; }
+ void setInformation( const QString &information ) { m_information = information; }
+ void setFiles( const QString &files ) { m_files = files; }
private:
QString m_name; // Name of item
@@ -66,6 +71,8 @@ private:
QString m_source; // Source feed of available version
QString m_destination; // Location item is installed to, null if not installed
QString m_category; // Item category
+ QString m_information; // Package information
+ QString m_files; // File list information
};
typedef 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 @@
*/
#include "packageinfodlg.h"
+#include "opackage.h"
+#include "opackagemanager.h"
#include <qlayout.h>
#include <qpushbutton.h>
@@ -46,37 +48,93 @@ PackageInfoDlg::PackageInfoDlg( QWidget *parent, OPackageManager *pm, const QStr
if ( parent )
parent->setCaption( package );
- QVBoxLayout *layout = new QVBoxLayout( this, 4, 0 );
+ QVBoxLayout *layout = new QVBoxLayout( this, 4, 2 );
OTabWidget *tabWidget = new OTabWidget( this );
layout->addWidget( tabWidget );
- QPushButton *btn = new QPushButton( Resource::loadPixmap( "enter" ), tr( "Close" ), this );
- layout->addWidget( btn );
- connect( btn, SIGNAL(clicked()), this, SLOT(slotBtnClose()) );
-
// Information tab
m_information.reparent( tabWidget, QPoint( 0, 0 ) );
m_information.setReadOnly( true );
tabWidget->addTab( &m_information, "UtilsIcon", tr( "Information" ) );
- // Files tab
+ // Retrive package information
+ m_package = m_packman->findPackage( package );
+ if ( !m_package )
+ {
+ m_information.setText( tr( "Unable to retrieve package information." ) );
+ return;
+ }
+
+ // Display package information
+ if ( !m_package->information().isNull() )
+ m_information.setText( m_package->information() );
+ else
+ {
+ // Package information is not cached, retrieve it
+ QStringList list( package );
+ m_packman->executeCommand( OPackage::Info, &list, QString::null, this, SLOT(slotInfo(char*)), true );
+ }
+
+ // Files tab (display only if package is installed)
+ if ( !m_package->versionInstalled().isNull() )
+ {
QWidget *filesWidget = new QWidget( tabWidget );
- QVBoxLayout *filesLayout = new QVBoxLayout( filesWidget, 4, 0 );
+ QVBoxLayout *filesLayout = new QVBoxLayout( filesWidget, 2, 2 );
m_files.reparent( filesWidget, QPoint( 0, 0 ) );
m_files.setReadOnly( true );
filesLayout->addWidget( &m_files );
- btn = new QPushButton( Resource::loadPixmap( "packagemanager/apply" ), tr( "Retrieve file list" ),
- filesWidget );
+ QPushButton *btn = new QPushButton( Resource::loadPixmap( "packagemanager/apply" ),
+ tr( "Retrieve file list" ), filesWidget );
filesLayout->addWidget( btn );
-// TODO connect( btn, SIGNAL(clicked()), this, SLOT(slotFileScan()) );
- tabWidget->addTab( filesWidget, "binary", tr( "Files" ) );
+ connect( btn, SIGNAL(clicked()), this, SLOT(slotBtnFileScan()) );
+ tabWidget->addTab( filesWidget, "binary", tr( "File list" ) );
tabWidget->setCurrentTab( tr( "Information" ) );
+
+ // If file list is already cached, display
+ if ( !m_package->files().isNull() )
+ m_files.setText( m_package->files() );
+ }
+ else
+ m_files.hide();
+}
+
+PackageInfoDlg::~PackageInfoDlg()
+{
+ if ( !m_package )
+ return;
+
+ // Cache package information
+ if ( !m_information.text().isNull() )
+ m_package->setInformation( m_information.text() );
+
+ // Cache package file list
+ if ( !m_files.text().isNull() )
+ m_package->setFiles( m_files.text() );
+}
+
+void PackageInfoDlg::slotBtnFileScan()
+{
+ m_files.clear();
+
+ QStringList list( m_package->name() );
+ m_packman->executeCommand( OPackage::Files, &list, QString::null, this, SLOT(slotFiles(char*)), true );
+}
+
+void PackageInfoDlg::slotInfo( char *info )
+{
+ m_information.append( info );
}
-void PackageInfoDlg::slotBtnClose()
+void PackageInfoDlg::slotFiles( char *filelist )
{
- emit closeInfoDlg();
+ QString str = filelist;
+
+ // Skip first line of output ("Package xxx is installed...")
+ if ( str.startsWith( "Package " ) )
+ str = str.right( str.length() - str.find( '\n' ) - 1 );
+
+ m_files.append( str );
}
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 @@
class QPushButton;
+class OPackage;
class OPackageManager;
class PackageInfoDlg : public QWidget
@@ -47,19 +48,20 @@ class PackageInfoDlg : public QWidget
public:
PackageInfoDlg( QWidget *parent = 0x0, OPackageManager *pm = 0x0, const QString &package = QString::null );
+ ~PackageInfoDlg();
private:
OPackageManager *m_packman; // Pointer to application instance of package manager
+ OPackage *m_package; // Pointer to package to display information for
// UI controls
QMultiLineEdit m_information; // Multi-line edit to display package information
QMultiLineEdit m_files; // Multi-line edit to display package file list
private slots:
- void slotBtnClose();
-
-signals:
- void closeInfoDlg();
+ void slotBtnFileScan();
+ void slotInfo( char *info );
+ void slotFiles( char *filelist );
};
#endif