Diffstat (limited to 'noncore/settings/tabmanager/tabmanager.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r-- | noncore/settings/tabmanager/tabmanager.cpp | 247 |
1 files changed, 149 insertions, 98 deletions
diff --git a/noncore/settings/tabmanager/tabmanager.cpp b/noncore/settings/tabmanager/tabmanager.cpp index 13aae81..5f0899c 100644 --- a/noncore/settings/tabmanager/tabmanager.cpp +++ b/noncore/settings/tabmanager/tabmanager.cpp @@ -1,8 +1,8 @@ #include "tabmanager.h" #include "app.h" +#include "wait.h" #include "tabapplnk.h" #include <qpe/applnk.h> -#include <qpe/qpeapplication.h> #include <qdir.h> #include <qfile.h> @@ -10,4 +10,5 @@ #include <qlistview.h> #include <qheader.h> +#include <qcombobox.h> #include <qlineedit.h> #include <qlabel.h> @@ -15,6 +16,9 @@ #include <stdlib.h> #include <qpe/qcopenvelope_qws.h> +#include <qpe/qpeapplication.h> +#include <qpe/resource.h> -#define HOME_APP_DIR QPEApplication::qpeDir()+"/apps" // <-- made this a little more flexible + +#define HOME_APP_DIR QPEApplication::qpeDir()+"/apps" #define HOME_APP_INSTALL_DIR "/usr/lib/ipkg/info" #define NEW_FOLDER "EmptyTab" @@ -27,13 +31,11 @@ * and tabs */ -TabManager::TabManager( QWidget* parent, const char* name):TabManagerBase(parent, name), changed(false){ +TabManager::TabManager( QWidget* parent, const char* name):TabManagerBase(parent, name), changed(false), application(NULL){ rescanFolder(HOME_APP_DIR); // Connect the signals and slots - connect(tabList, SIGNAL(doubleClicked(QListViewItem *)), - this, SLOT(editItem(QListViewItem*))); + connect(tabList, SIGNAL(doubleClicked(QListViewItem *)), this, SLOT(editItem(QListViewItem*))); (tabList->header())->hide(); - connect(tabList, SIGNAL(moveItem(QListViewItem *, QListViewItem *)), - this, SLOT(moveApplication(QListViewItem *, QListViewItem *))); + connect(tabList, SIGNAL(moveItem(QListViewItem *, QListViewItem *)), this, SLOT(moveApplication(QListViewItem *, QListViewItem *))); } @@ -44,8 +46,9 @@ TabManager::TabManager( QWidget* parent, const char* name):TabManagerBase(parent TabManager::~TabManager(){ if(changed){ - //QMessageBox::critical(this, tr("Message"), tr("Please restart Qtopia to see all new changes."),tr("Ok") ); - //filename = fn; + // Prompt. + //int answer = QMessageBox::warning(this, "Message", "Should your desktop be","Yes", "Cancel", 0, 1 ); + //if (answer) + // return; QCopEnvelope e("QPE/System", "linkChanged(QString)"); - //e << description << filename << mimetype; QString link; //we'll just send an empty string e << link; @@ -62,5 +65,5 @@ TabManager::~TabManager(){ void TabManager::rescanFolder(QString directory, QListViewItem* parent){ //qDebug(QString("rescanFolder: ") + directory.latin1()); - + QDir d; d.setPath(directory); @@ -77,19 +80,19 @@ void TabManager::rescanFolder(QString directory, QListViewItem* parent){ if(fi->fileName() != ".." && fi->fileName() != ".") { QListViewItem* newItem; - if(!parent) - newItem = new QListViewItem(tabList, fi->fileName()); - else - newItem = new QListViewItem(parent, fi->fileName()); - itemList.insert(newItem, directory + "/" + fi->fileName() + "/.directory" ); - rescanFolder(directory + "/" + fi->fileName(), newItem); + if(!parent) + newItem = new QListViewItem(tabList, fi->fileName()); + else + newItem = new QListViewItem(parent, fi->fileName()); + itemList.insert(newItem, directory + "/" + fi->fileName() + "/.directory" ); + rescanFolder(directory + "/" + fi->fileName(), newItem); } } else{ // it is a file, if not a .directory add to parent. - + // Change parents name and icon to reflect icon. if(fi->fileName() == ".directory"){ - AppLnk app(directory + "/" + fi->fileName()); - if(parent){ + AppLnk app(directory + "/" + fi->fileName()); + if(parent){ parent->setPixmap(0,app.pixmap()); parent->setText(0, app.name()); @@ -97,8 +100,8 @@ void TabManager::rescanFolder(QString directory, QListViewItem* parent){ } else{ - // Add any desktop files found. + // Add any desktop files found. QListViewItem* newItem; - if(directory != HOME_APP_DIR){ - if(!parent) + if(directory != HOME_APP_DIR){ + if(!parent) newItem = new QListViewItem(tabList, fi->fileName()); else @@ -108,7 +111,7 @@ void TabManager::rescanFolder(QString directory, QListViewItem* parent){ newItem->setPixmap(0,app.pixmap()); newItem->setText(0, app.name()); - itemList.insert(newItem, directory + "/" + fi->fileName()); - } - } + itemList.insert(newItem, directory + "/" + fi->fileName()); + } + } } } @@ -127,9 +130,9 @@ void TabManager::newFolder(){ system((QString("echo [Desktop Entry] | cat >> ") + HOME_APP_DIR + "/" + NEW_FOLDER "/.directory").latin1()); system((QString("echo Name=" NEW_FOLDER " | cat >> ") + HOME_APP_DIR + "/" + NEW_FOLDER "/.directory").latin1()); - + QString homeLocation = QString(HOME_APP_DIR) + "/" + NEW_FOLDER + "/.directory"; QListViewItem *newItem = new QListViewItem(tabList, NEW_FOLDER); itemList.insert(newItem, homeLocation ); - + // We have changed something. changed = true; @@ -146,6 +149,6 @@ void TabManager::newApplication(){ if(!item || item->parent()) return; - - QString parentDir = itemList[item].mid(0,itemList[item].length()-11); + + QString parentDir = itemList[item].mid(0,itemList[item].length()-11); QString homeLocation = parentDir + "/" NEW_APPLICATION APPLICATION_EXTENSION; system((QString("echo [Desktop Entry] | cat >> ") + homeLocation).latin1()); @@ -153,11 +156,11 @@ void TabManager::newApplication(){ int slash = parentDir.findRev('/', -1); QString folderName = parentDir.mid(slash+1, parentDir.length()); - + system((QString("echo Type=") + folderName + " | cat >> " + homeLocation).latin1()); - + // Insert into the tree QListViewItem *newItem = new QListViewItem(item, NEW_APPLICATION); itemList.insert(newItem, homeLocation ); - + // We have changed something. changed = true; @@ -170,5 +173,5 @@ void TabManager::newApplication(){ * Delete physical file (Dir, remove .dir, then dir. File, remove file) * Remove from installer if need too. - */ + */ void TabManager::removeItem(){ // Make sure we can delete @@ -177,15 +180,13 @@ void TabManager::removeItem(){ return; if(item->childCount() > 0){ - QMessageBox::critical(this, tr("Message"), tr("Can't remove with applications\nstill in the group."), - tr("Ok") ); - return; + QMessageBox::critical(this, tr("Message"), tr("Can't remove with applications\nstill in the group."), tr("Ok") ); + return; } - + // Prompt. - int answer = QMessageBox::warning(this, tr("Message"), tr("Are you sure you want to delete?"), - tr("Yes"), tr("Cancel"), 0, 1 ); + int answer = QMessageBox::warning(this, tr("Message"), tr("Are you sure you want to delete?"), tr("Yes"), tr("Cancel"), 0, 1 ); if (answer) return; - + bool removeSuccessfull = true; QString location = itemList[item]; @@ -193,5 +194,5 @@ void TabManager::removeItem(){ if(!QFile::remove(location)) removeSuccessfull = false; - + // Remove directory if(item->parent() == NULL){ @@ -203,18 +204,16 @@ void TabManager::removeItem(){ else removeSuccessfull = true; - } - - // If removing failed. + + // If removing failed. if(!removeSuccessfull){ qDebug((QString("removeItem: ") + location).latin1()); - QMessageBox::critical(this, tr("Message"), tr("Can't remove."), - tr("Ok") ); + QMessageBox::critical(this, tr("Message"), tr("Can't remove."), tr("Ok") ); return; } - + // Remove from the installer so it wont fail. // Don't need to do this sense the current install uses rm -f so no error - + // Remove from the gui list. itemList.remove(item); @@ -222,5 +221,5 @@ void TabManager::removeItem(){ item->parent()->takeItem(item); delete item; - + // We have changed something. changed = true; @@ -237,59 +236,112 @@ void TabManager::editCurrentItem(){ /** * Edit the item that is passed in. - * Show application dialog and if anything changed + * Show application dialog and if anything changed * @param item the item to edit. - */ + */ void TabManager::editItem( QListViewItem * item){ if(!item) return; - + TabAppLnk app(itemList[item]); if(!app.isValid()){ qDebug(QString("editItem: Not a valid applnk file: ") + itemList[item].latin1()); - return; + return; + } + + // Fill with all of the icons + if(!application){ + Wait waitDialog(this, "Wait dialog"); + waitDialog.waitLabel->setText(tr("Gathering icons...")); + waitDialog.show(); + qApp->processEvents(); + application = new AppEdit(this, "Application edit", true); + + QDir d(QPEApplication::qpeDir() + "/pics/"); + d.setFilter( QDir::Files); + + const QFileInfoList *list = d.entryInfoList(); + QFileInfoListIterator it( *list ); // create list iterator + QFileInfo *fi; // pointer for traversing + + while ( (fi=it.current()) ) { // for each file... + QString fileName = fi->fileName(); + if(fileName.right(4) == ".png"){ + fileName = fileName.mid(0,fileName.length()-4); + QPixmap imageOfFile(Resource::loadPixmap(fileName)); + QImage foo = imageOfFile.convertToImage(); + foo = foo.smoothScale(16,16); + imageOfFile.convertFromImage(foo); + application->iconLineEdit->insertItem(imageOfFile,fileName); + } + //qDebug(fi->fileName().latin1()); + ++it; + } + waitDialog.hide(); } - - AppEdit application(this, tr("Application edit"), true); - application.nameLineEdit->setText(app.name()); - application.iconLineEdit->setText(app.pixmapString()); - application.execLineEdit->setText(app.exec()); - application.commentLineEdit->setText(app.comment()); - + int pixmap = -1; + QString pixmapText = app.pixmapString(); + QComboBox *f = application->iconLineEdit; + for(int i = 0; i < application->iconLineEdit->count(); i++){ + if(f->text(i) == pixmapText){ + pixmap = i; + break; + } + } + if(pixmap != -1) + application->iconLineEdit->setCurrentItem(pixmap); + else{ + QPixmap imageOfFile(Resource::loadPixmap(pixmapText)); + QImage foo = imageOfFile.convertToImage(); + foo = foo.smoothScale(16,16); + imageOfFile.convertFromImage(foo); + application->iconLineEdit->insertItem(imageOfFile,pixmapText,0); + application->iconLineEdit->setCurrentItem(0); + } + + application->nameLineEdit->setText(app.name()); + application->execLineEdit->setText(app.exec()); + application->commentLineEdit->setText(app.comment()); + if(item->parent() == NULL){ - application.execLineEdit->setEnabled(false); - application.TextLabel3->setEnabled(false); - application.setCaption(tr("Tab")); + application->execLineEdit->setEnabled(false); + application->TextLabel3->setEnabled(false); + application->setCaption(tr("Tab")); } - + else{ + application->execLineEdit->setEnabled(true); + application->TextLabel3->setEnabled(true); + application->setCaption(tr("Application")); + } + // Only do somthing if they hit OK - if(application.exec() == 0) + application->showMaximized(); + if(application->exec() == 0) return; // If nothing has changed exit (hmmm why did they hit ok?) - if(app.name() == application.nameLineEdit->text() && - app.pixmapString() == application.iconLineEdit->text() && - app.comment() == application.commentLineEdit->text() && - app.exec() == application.execLineEdit->text()) + if(app.name() == application->nameLineEdit->text() && + app.pixmapString() == application->iconLineEdit->currentText() && + app.comment() == application->commentLineEdit->text() && + app.exec() == application->execLineEdit->text()) return; // Change the applnk file QString oldName = app.name(); - app.setName(application.nameLineEdit->text()); - app.setIcon(application.iconLineEdit->text()); - app.setComment(application.commentLineEdit->text()); - app.setExec(application.execLineEdit->text()); + app.setName(application->nameLineEdit->text()); + app.setIcon(application->iconLineEdit->currentText()); + app.setComment(application->commentLineEdit->text()); + app.setExec(application->execLineEdit->text()); if(!app.writeLink()){ - QMessageBox::critical(this, tr("Message"), tr("Can't save."), - tr("Ok") ); + QMessageBox::critical(this, tr("Message"), "Can't save.", tr("Ok") ); return; } - + // Update the gui icon and name item->setText(0,app.name()); item->setPixmap(0,app.pixmap()); - + // We have changed something. changed = true; - + // If we were dealing with a new folder or new application change // the file names. Also change the item location in itemList @@ -317,5 +369,5 @@ void TabManager::editItem( QListViewItem * item){ } } - + /** * Move an application from one directory to another. @@ -323,18 +375,18 @@ void TabManager::editItem( QListViewItem * item){ * @param item the application to move * @pearam newGroup the new parent of this application - */ + */ void TabManager::moveApplication(QListViewItem *item, QListViewItem *newGroup){ // Can we even move it? if(!item || !item->parent() || newGroup->parent()) - return; + return; if(item->parent() == newGroup) return; - // Get the new folder, new file name, + // Get the new folder, new file name, QString newFolder = itemList[newGroup]; newFolder = newFolder.mid(0,newFolder.length()-11); int slash = newFolder.findRev('/', -1); QString folderName = newFolder.mid(slash+1, newFolder.length()); - + QString desktopFile = itemList[item]; slash = desktopFile.findRev('/', -1); @@ -345,16 +397,15 @@ void TabManager::moveApplication(QListViewItem *item, QListViewItem *newGroup){ QDir r; if(!r.rename(itemList[item], newFolder)){ - QMessageBox::critical(this, tr("Message"), tr("Can't move application."), - tr("Ok") ); - return; + QMessageBox::critical(this, tr("Message"), "Can't move application.", tr("Ok") ); + return; } //qDebug((QString("moveApplication: ") + itemList[item]).latin1()); //qDebug((QString("moveApplication: ") + newFolder).latin1()); - + // Move in the gui item->parent()->takeItem(item); newGroup->insertItem(item); newGroup->setOpen(true); - + // Move file in the installer QString installedAppFile; @@ -362,15 +413,15 @@ void TabManager::moveApplication(QListViewItem *item, QListViewItem *newGroup){ swapInstalledLocation(installedAppFile, desktopFile, newFolder); else - qDebug("moveApplication: No installed app found for dekstop file"); - - // Move application type + qDebug("moveApplication: No installed app found for dekstop file"); + + // Move application type AppLnk app(newFolder); app.setType(folderName); app.writeLink(); - + // Move in our internal list itemList.remove(item); itemList.insert(item, newFolder); - + // We have changed something. changed = true; @@ -384,7 +435,7 @@ void TabManager::moveApplication(QListViewItem *item, QListViewItem *newGroup){ * @param installedAppFile - location of the app install list * @return true if successfull, false if file not found. - */ + */ bool TabManager::findInstalledApplication(QString desktopFile, QString &installedAppFile){ - + QDir d; d.setPath(HOME_APP_INSTALL_DIR); @@ -420,5 +471,5 @@ bool TabManager::findInstalledApplication(QString desktopFile, QString &installe * Open a file and replace a file containing the old desktop file with the new. * @param installedAppFile application installed list - * @param desktopFile old .desktop file + * @param desktopFile old .desktop file * @param newLocation new .desktop file */ @@ -429,5 +480,5 @@ void TabManager::swapInstalledLocation( QString installedAppFile, QString deskto return; } - + QTextStream stream( &file ); // use a text stream QString allLines; |