summaryrefslogtreecommitdiff
path: root/library
authorsandman <sandman>2002-10-06 03:26:59 (UTC)
committer sandman <sandman>2002-10-06 03:26:59 (UTC)
commita1ebad08d462e682554d39a9beabce125a374452 (patch) (unidiff)
tree254d7ddc5b257b278172af4952b2bec27b5df3b5 /library
parent2c16c8767fa5c16c0eeebc7008202a68a61a5308 (diff)
downloadopie-a1ebad08d462e682554d39a9beabce125a374452.zip
opie-a1ebad08d462e682554d39a9beabce125a374452.tar.gz
opie-a1ebad08d462e682554d39a9beabce125a374452.tar.bz2
- support "Rotation" setting in .desktop applnk file
- changed properties dialog to make Rotation editable - fixed a long-standing QPE bug: launcher expects AppLnk::file() to return QString::null for *all real* applnks (as opposed to doclnks) -- but AppLnk itself initializes this field to the name of the dir, where the applnk is stored. This is why qcop "QPE/System" "linkChanged(QString)" xyz.desktop cleared a whole launcher tab I hope I didn't break anything with this change ;)
Diffstat (limited to 'library') (more/less context) (ignore whitespace changes)
-rw-r--r--library/applnk.cpp24
-rw-r--r--library/applnk.h1
-rw-r--r--library/lnkproperties.cpp31
-rw-r--r--library/lnkpropertiesbase_p.ui366
4 files changed, 364 insertions, 58 deletions
diff --git a/library/applnk.cpp b/library/applnk.cpp
index 44f3f58..a56da5d 100644
--- a/library/applnk.cpp
+++ b/library/applnk.cpp
@@ -327,97 +327,100 @@ const QArray<int>& AppLnk::categories() const
327 \sa AppLnkSet::find() 327 \sa AppLnkSet::find()
328*/ 328*/
329 329
330/*! 330/*!
331 \fn bool AppLnk::isValid() const 331 \fn bool AppLnk::isValid() const
332 332
333 Returns TRUE if this AppLnk is valid; otherwise returns FALSE. 333 Returns TRUE if this AppLnk is valid; otherwise returns FALSE.
334*/ 334*/
335 335
336/*! 336/*!
337 Creates an invalid AppLnk. 337 Creates an invalid AppLnk.
338 338
339 \sa isValid() 339 \sa isValid()
340*/ 340*/
341AppLnk::AppLnk() 341AppLnk::AppLnk()
342{ 342{
343 mId = 0; 343 mId = 0;
344 d = new AppLnkPrivate(); 344 d = new AppLnkPrivate();
345} 345}
346 346
347/*! 347/*!
348 Loads \a file (e.g. \e app.desktop) as an AppLnk. 348 Loads \a file (e.g. \e app.desktop) as an AppLnk.
349 349
350 \sa writeLink() 350 \sa writeLink()
351*/ 351*/
352AppLnk::AppLnk( const QString &file ) 352AppLnk::AppLnk( const QString &file )
353{ 353{
354 QStringList sl; 354 QStringList sl;
355 d = new AppLnkPrivate(); 355 d = new AppLnkPrivate();
356 if ( !file.isNull() ) { 356 if ( !file.isNull() ) {
357 Config config( file, Config::File ); 357 Config config( file, Config::File );
358 358
359 if ( config.isValid() ) { 359 if ( config.isValid() ) {
360 config.setGroup( "Desktop Entry" ); 360 config.setGroup( "Desktop Entry" );
361 361
362 mName = config.readEntry( "Name", file ); 362 mName = config.readEntry( "Name", file );
363 mExec = config.readEntry( "Exec" ); 363 mExec = config.readEntry( "Exec" );
364 mType = config.readEntry( "Type", QString::null ); 364 mType = config.readEntry( "Type", QString::null );
365 mIconFile = config.readEntry( "Icon", QString::null ); 365 mIconFile = config.readEntry( "Icon", QString::null );
366 mRotation = config.readEntry( "Rotation", "" ); 366 mRotation = config.readEntry( "Rotation", "" );
367 mComment = config.readEntry( "Comment", QString::null ); 367 mComment = config.readEntry( "Comment", QString::null );
368 // MIME types are case-insensitive. 368 // MIME types are case-insensitive.
369 mMimeTypes = config.readListEntry( "MimeType", ';' ); 369 mMimeTypes = config.readListEntry( "MimeType", ';' );
370 for (QStringList::Iterator it=mMimeTypes.begin(); it!=mMimeTypes.end(); ++it) 370 for (QStringList::Iterator it=mMimeTypes.begin(); it!=mMimeTypes.end(); ++it)
371 *it = (*it).lower(); 371 *it = (*it).lower();
372 mMimeTypeIcons = config.readListEntry( "MimeTypeIcons", ';' ); 372 mMimeTypeIcons = config.readListEntry( "MimeTypeIcons", ';' );
373 mLinkFile = file; 373 mLinkFile = file;
374 mFile = config.readEntry("File", QString::null); 374 mFile = config.readEntry("File", QString::null);
375 if ( mFile[0] != '/' ) { 375 if ( !mExec. isEmpty ( )) {
376 mFile = QString::null;
377 }
378 else if ( mFile[0] != '/' ) {
376 int slash = file.findRev('/'); 379 int slash = file.findRev('/');
377 if ( slash >= 0 ) { 380 if ( slash >= 0 ) {
378 mFile = file.left(slash) + '/' + mFile; 381 mFile = file.left(slash) + '/' + mFile;
379 } 382 }
380 } 383 }
381 d->mCatList = config.readListEntry("Categories", ';'); 384 d->mCatList = config.readListEntry("Categories", ';');
382 if ( d->mCatList[0].toInt() < -1 ) { 385 if ( d->mCatList[0].toInt() < -1 ) {
383 // numeric cats in file! convert to text 386 // numeric cats in file! convert to text
384 Categories cat( 0 ); 387 Categories cat( 0 );
385 cat.load( categoryFileName() ); 388 cat.load( categoryFileName() );
386 d->mCat.resize( d->mCatList.count() ); 389 d->mCat.resize( d->mCatList.count() );
387 int i; 390 int i;
388 QStringList::ConstIterator it; 391 QStringList::ConstIterator it;
389 for ( i = 0, it = d->mCatList.begin(); it != d->mCatList.end(); 392 for ( i = 0, it = d->mCatList.begin(); it != d->mCatList.end();
390 ++it, i++ ) { 393 ++it, i++ ) {
391 bool number; 394 bool number;
392 int id = (*it).toInt( &number ); 395 int id = (*it).toInt( &number );
393 if ( !number ) { 396 if ( !number ) {
394 // convert from text 397 // convert from text
395 id = cat.id( "Document View", *it ); 398 id = cat.id( "Document View", *it );
396 if ( id == 0 ) 399 if ( id == 0 )
397 id = cat.addCategory( "Document View", *it ); 400 id = cat.addCategory( "Document View", *it );
398 } 401 }
399 d->mCat[i] = id; 402 d->mCat[i] = id;
400 } 403 }
401 d->updateCatListFromArray(); 404 d->updateCatListFromArray();
402 } 405 }
403 } 406 }
404 } 407 }
405 mId = 0; 408 mId = 0;
406} 409}
407 410
408AppLnk& AppLnk::operator=(const AppLnk &copy) 411AppLnk& AppLnk::operator=(const AppLnk &copy)
409{ 412{
410 if ( mId ) 413 if ( mId )
411 qWarning("Deleting AppLnk that is in an AppLnkSet"); 414 qWarning("Deleting AppLnk that is in an AppLnkSet");
412 if ( d ) 415 if ( d )
413 delete d; 416 delete d;
414 417
415 418
416 mName = copy.mName; 419 mName = copy.mName;
417 420
418 /* remove for Qtopia 3.0 -zecke */ 421 /* remove for Qtopia 3.0 -zecke */
419 mPixmap = copy.mPixmap; 422 mPixmap = copy.mPixmap;
420 mBigPixmap = copy.mBigPixmap; 423 mBigPixmap = copy.mBigPixmap;
421 424
422 mExec = copy.mExec; 425 mExec = copy.mExec;
423 mType = copy.mType; 426 mType = copy.mType;
@@ -475,105 +478,106 @@ const QPixmap& AppLnk::pixmap( int pos, int size ) const {
475*/ 478*/
476const QPixmap& AppLnk::pixmap() const 479const QPixmap& AppLnk::pixmap() const
477{ 480{
478 if ( d->mPixmaps[0].isNull() ) { 481 if ( d->mPixmaps[0].isNull() ) {
479 return pixmap(AppLnkPrivate::Normal, smallSize ); 482 return pixmap(AppLnkPrivate::Normal, smallSize );
480 } 483 }
481 return d->mPixmaps[0]; 484 return d->mPixmaps[0];
482} 485}
483 486
484/*! 487/*!
485 Returns a large pixmap associated with the application. 488 Returns a large pixmap associated with the application.
486 489
487 \sa pixmap() setIcon() 490 \sa pixmap() setIcon()
488*/ 491*/
489const QPixmap& AppLnk::bigPixmap() const 492const QPixmap& AppLnk::bigPixmap() const
490{ 493{
491 if ( d->mPixmaps[1].isNull() ) { 494 if ( d->mPixmaps[1].isNull() ) {
492 return pixmap( AppLnkPrivate::Big, bigSize ); 495 return pixmap( AppLnkPrivate::Big, bigSize );
493 } 496 }
494 return d->mPixmaps[1]; 497 return d->mPixmaps[1];
495} 498}
496 499
497/*! 500/*!
498 Returns the type of the AppLnk. For applications, games and 501 Returns the type of the AppLnk. For applications, games and
499 settings the type is \c Application; for documents the type is the 502 settings the type is \c Application; for documents the type is the
500 document's MIME type. 503 document's MIME type.
501*/ 504*/
502QString AppLnk::type() const 505QString AppLnk::type() const
503{ 506{
504 if ( mType.isNull() ) { 507 if ( mType.isNull() ) {
505 AppLnk* that = (AppLnk*)this; 508 AppLnk* that = (AppLnk*)this;
506 QString f = file(); 509 QString f = file();
507 if ( !f.isNull() ) { 510 if ( !f.isNull() ) {
508 MimeType mt(f); 511 MimeType mt(f);
509 that->mType = mt.id(); 512 that->mType = mt.id();
510 return that->mType; 513 return that->mType;
511 } 514 }
512 } 515 }
513 return mType; 516 return mType;
514} 517}
515 518
516/*! 519/*!
517 Returns the file associated with the AppLnk. 520 Returns the file associated with the AppLnk.
518 521
519 \sa exec() name() 522 \sa exec() name()
520*/ 523*/
521QString AppLnk::file() const 524QString AppLnk::file() const
522{ 525{
523 if ( mFile.isNull() ) { 526 if ( mExec.isEmpty ( ) && mFile.isNull() ) {
524 AppLnk* that = (AppLnk*)this; 527 AppLnk* that = (AppLnk*)this;
525 QString ext = MimeType(mType).extension(); 528 QString ext = MimeType(mType).extension();
526 if ( !ext.isEmpty() ) 529 if ( !ext.isEmpty() )
527 ext = "." + ext; 530 ext = "." + ext;
528 if ( !mLinkFile.isEmpty() ) { 531 if ( !mLinkFile.isEmpty() ) {
529 that->mFile = 532 that->mFile =
530 mLinkFile.right(8)==".desktop" // 8 = strlen(".desktop") 533 mLinkFile.right(8)==".desktop" // 8 = strlen(".desktop")
531 ? mLinkFile.left(mLinkFile.length()-8) : mLinkFile; 534 ? mLinkFile.left(mLinkFile.length()-8) : mLinkFile;
535 qDebug("mFile now == %s", mFile.latin1());
532 } else if ( mType.contains('/') ) { 536 } else if ( mType.contains('/') ) {
533 that->mFile = 537 that->mFile =
534 QString(getenv("HOME"))+"/Documents/"+mType+"/"+safeFileName(that->mName); 538 QString(getenv("HOME"))+"/Documents/"+mType+"/"+safeFileName(that->mName);
535 /* 539 /*
536 * A file with the same name or a .desktop file already exists 540 * A file with the same name or a .desktop file already exists
537 */ 541 */
538 if ( QFile::exists(that->mFile+ext) || QFile::exists(that->mFile+".desktop") ) { 542 if ( QFile::exists(that->mFile+ext) || QFile::exists(that->mFile+".desktop") ) {
539 int n=1; 543 int n=1;
540 QString nn; 544 QString nn;
541 while (QFile::exists((nn=(that->mFile+"_"+QString::number(n)))+ext) 545 while (QFile::exists((nn=(that->mFile+"_"+QString::number(n)))+ext)
542 || QFile::exists(nn+".desktop")) 546 || QFile::exists(nn+".desktop"))
543 n++; 547 n++;
544 that->mFile = nn; 548 that->mFile = nn;
545 } 549 }
546 that->mLinkFile = that->mFile+".desktop"; 550 that->mLinkFile = that->mFile+".desktop";
547 that->mFile += ext; 551 that->mFile += ext;
548 } 552 }
549 prepareDirectories(that->mFile); 553 prepareDirectories(that->mFile);
550 if ( !that->mFile.isEmpty() ) { 554 if ( !that->mFile.isEmpty() ) {
551 QFile f(that->mFile); 555 QFile f(that->mFile);
552 if ( !f.open(IO_WriteOnly) ) 556 if ( !f.open(IO_WriteOnly) )
553 that->mFile = QString::null; 557 that->mFile = QString::null;
554 return that->mFile; 558 return that->mFile;
555 } 559 }
556 } 560 }
557 return mFile; 561 return mFile;
558} 562}
559 563
560/*! 564/*!
561 Returns the desktop file corresponding to this AppLnk. 565 Returns the desktop file corresponding to this AppLnk.
562 566
563 \sa file() exec() name() 567 \sa file() exec() name()
564*/ 568*/
565QString AppLnk::linkFile() const 569QString AppLnk::linkFile() const
566{ 570{
567 if ( mLinkFile.isNull() ) { 571 if ( mLinkFile.isNull() ) {
568 AppLnk* that = (AppLnk*)this; 572 AppLnk* that = (AppLnk*)this;
569 if ( type().contains('/') ) { 573 if ( type().contains('/') ) {
570 StorageInfo storage; 574 StorageInfo storage;
571 const FileSystem *fs = storage.fileSystemOf( that->mFile ); 575 const FileSystem *fs = storage.fileSystemOf( that->mFile );
572 /* tmpfs + and ramfs are available too but not removable 576 /* tmpfs + and ramfs are available too but not removable
573 * either we fix storage or add this 577 * either we fix storage or add this
574 */ 578 */
575 if ( fs && ( fs->isRemovable() || fs->disk() == "/dev/mtdblock6" || fs->disk() == "tmpfs") ) { 579 if ( fs && ( fs->isRemovable() || fs->disk() == "/dev/mtdblock6" || fs->disk() == "tmpfs") ) {
576 that->mLinkFile = fs->path(); 580 that->mLinkFile = fs->path();
577 } else 581 } else
578 that->mLinkFile = getenv( "HOME" ); 582 that->mLinkFile = getenv( "HOME" );
579 that->mLinkFile += "/Documents/"+type()+"/"+safeFileName(that->mName); 583 that->mLinkFile += "/Documents/"+type()+"/"+safeFileName(that->mName);
@@ -652,96 +656,108 @@ void AppLnk::execute() const
652{ 656{
653 execute(QStringList()); 657 execute(QStringList());
654} 658}
655 659
656/*! 660/*!
657 Executes the application associated with this AppLnk, with 661 Executes the application associated with this AppLnk, with
658 \a args as arguments. 662 \a args as arguments.
659 663
660 \sa exec() 664 \sa exec()
661*/ 665*/
662void AppLnk::execute(const QStringList& args) const 666void AppLnk::execute(const QStringList& args) const
663{ 667{
664#ifdef Q_WS_QWS 668#ifdef Q_WS_QWS
665 if ( !mRotation.isEmpty() ) { 669 if ( !mRotation.isEmpty() ) {
666 // ######## this will only work in the server 670 // ######## this will only work in the server
667 int rot = QPEApplication::defaultRotation(); 671 int rot = QPEApplication::defaultRotation();
668 rot = (rot+mRotation.toInt())%360; 672 rot = (rot+mRotation.toInt())%360;
669 QCString old = getenv("QWS_DISPLAY"); 673 QCString old = getenv("QWS_DISPLAY");
670 setenv("QWS_DISPLAY", QString("Transformed:Rot%1:0").arg(rot), 1); 674 setenv("QWS_DISPLAY", QString("Transformed:Rot%1:0").arg(rot), 1);
671 invoke(args); 675 invoke(args);
672 setenv("QWS_DISPLAY", old.data(), 1); 676 setenv("QWS_DISPLAY", old.data(), 1);
673 } else 677 } else
674#endif 678#endif
675 invoke(args); 679 invoke(args);
676} 680}
677 681
678/*! 682/*!
679 Invokes the application associated with this AppLnk, with 683 Invokes the application associated with this AppLnk, with
680 \a args as arguments. Rotation is not taken into account by 684 \a args as arguments. Rotation is not taken into account by
681 this function, so you should not call it directly. 685 this function, so you should not call it directly.
682 686
683 \sa execute() 687 \sa execute()
684*/ 688*/
685void AppLnk::invoke(const QStringList& args) const 689void AppLnk::invoke(const QStringList& args) const
686{ 690{
687 Global::execute( exec(), args[0] ); 691 Global::execute( exec(), args[0] );
688} 692}
689 693
690/*! 694/*!
691 Sets the Exec property to \a exec. 695 Sets the Exec property to \a exec.
692 696
693 \sa exec() name() 697 \sa exec() name()
694*/ 698*/
695void AppLnk::setExec( const QString& exec ) 699void AppLnk::setExec( const QString& exec )
696{ 700{
697 mExec = exec; 701 mExec = exec;
698} 702}
699 703
704#if 0 // this was inlined for better BC
705/*!
706 Sets the Rotation property to \a rot.
707
708 \sa rotation()
709*/
710void AppLnk::setRotation ( const QString &rot )
711{
712 mRotation = rot;
713}
714#endif
715
700/*! 716/*!
701 Sets the Name property to \a docname. 717 Sets the Name property to \a docname.
702 718
703 \sa name() 719 \sa name()
704*/ 720*/
705void AppLnk::setName( const QString& docname ) 721void AppLnk::setName( const QString& docname )
706{ 722{
707 mName = docname; 723 mName = docname;
708} 724}
709 725
710/*! 726/*!
711 Sets the File property to \a filename. 727 Sets the File property to \a filename.
712 728
713 \sa file() name() 729 \sa file() name()
714*/ 730*/
715void AppLnk::setFile( const QString& filename ) 731void AppLnk::setFile( const QString& filename )
716{ 732{
717 mFile = filename; 733 mFile = filename;
718} 734}
719 735
720/*! 736/*!
721 Sets the LinkFile property to \a filename. 737 Sets the LinkFile property to \a filename.
722 738
723 \sa linkFile() 739 \sa linkFile()
724*/ 740*/
725void AppLnk::setLinkFile( const QString& filename ) 741void AppLnk::setLinkFile( const QString& filename )
726{ 742{
727 mLinkFile = filename; 743 mLinkFile = filename;
728} 744}
729 745
730/*! 746/*!
731 Sets the Comment property to \a comment. 747 Sets the Comment property to \a comment.
732 748
733 This text is displayed in the 'Details Dialog', for example if the 749 This text is displayed in the 'Details Dialog', for example if the
734 user uses the 'press-and-hold' gesture. 750 user uses the 'press-and-hold' gesture.
735 751
736 \sa comment() 752 \sa comment()
737*/ 753*/
738void AppLnk::setComment( const QString& comment ) 754void AppLnk::setComment( const QString& comment )
739{ 755{
740 mComment = comment; 756 mComment = comment;
741} 757}
742 758
743/*! 759/*!
744 Sets the Type property to \a type. 760 Sets the Type property to \a type.
745 761
746 For applications, games and settings the type should be \c 762 For applications, games and settings the type should be \c
747 Application; for documents the type should be the document's MIME 763 Application; for documents the type should be the document's MIME
@@ -790,96 +806,100 @@ void AppLnk::setCategories( const QArray<int>& c )
790} 806}
791 807
792/*! 808/*!
793 \fn QStringList AppLnk::mimeTypeIcons() const 809 \fn QStringList AppLnk::mimeTypeIcons() const
794 810
795 Returns the MimeTypeIcons property of the AppLnk. 811 Returns the MimeTypeIcons property of the AppLnk.
796*/ 812*/
797 813
798/*! 814/*!
799 Attempts to ensure that the link file for this AppLnk exists, 815 Attempts to ensure that the link file for this AppLnk exists,
800 including creating any required directories. Returns TRUE if 816 including creating any required directories. Returns TRUE if
801 successful; otherwise returns FALSE. 817 successful; otherwise returns FALSE.
802 818
803 You should not need to use this function. 819 You should not need to use this function.
804*/ 820*/
805bool AppLnk::ensureLinkExists() const 821bool AppLnk::ensureLinkExists() const
806{ 822{
807 QString lf = linkFile(); 823 QString lf = linkFile();
808 return prepareDirectories(lf); 824 return prepareDirectories(lf);
809} 825}
810 826
811/*! 827/*!
812 Commits the AppLnk to disk. Returns TRUE if the operation succeeded; 828 Commits the AppLnk to disk. Returns TRUE if the operation succeeded;
813 otherwise returns FALSE. 829 otherwise returns FALSE.
814 830
815 In addition, the "linkChanged(QString)" message is sent to the 831 In addition, the "linkChanged(QString)" message is sent to the
816 "QPE/System" \link qcop.html QCop\endlink channel. 832 "QPE/System" \link qcop.html QCop\endlink channel.
817*/ 833*/
818bool AppLnk::writeLink() const 834bool AppLnk::writeLink() const
819{ 835{
820 // Only re-writes settable parts 836 // Only re-writes settable parts
821 QString lf = linkFile(); 837 QString lf = linkFile();
822 if ( !ensureLinkExists() ) 838 if ( !ensureLinkExists() )
823 return FALSE; 839 return FALSE;
824 storeLink(); 840 storeLink();
825 return TRUE; 841 return TRUE;
826} 842}
827 843
828/*! 844/*!
829 \internal 845 \internal
830*/ 846*/
831void AppLnk::storeLink() const 847void AppLnk::storeLink() const
832{ 848{
833 Config config( mLinkFile, Config::File ); 849 Config config( mLinkFile, Config::File );
834 config.setGroup("Desktop Entry"); 850 config.setGroup("Desktop Entry");
835 config.writeEntry("Name",mName); 851 config.writeEntry("Name",mName);
836 if ( !mIconFile.isNull() ) config.writeEntry("Icon",mIconFile); 852 if ( !mIconFile.isNull() ) config.writeEntry("Icon",mIconFile);
837 config.writeEntry("Type",type()); 853 config.writeEntry("Type",type());
854 if(!rotation().isEmpty())
855 config.writeEntry("Rotation",rotation());
856 else
857 config.removeEntry("Rotation");
838 if ( !mComment.isNull() ) config.writeEntry("Comment",mComment); 858 if ( !mComment.isNull() ) config.writeEntry("Comment",mComment);
839 QString f = file(); 859 QString f = file();
840 int i = 0; 860 int i = 0;
841 while ( i < (int)f.length() && i < (int)mLinkFile.length() && f[i] == mLinkFile[i] ) 861 while ( i < (int)f.length() && i < (int)mLinkFile.length() && f[i] == mLinkFile[i] )
842 i++; 862 i++;
843 while ( i && f[i] != '/' ) 863 while ( i && f[i] != '/' )
844 i--; 864 i--;
845 // simple case where in the same directory 865 // simple case where in the same directory
846 if ( mLinkFile.find( '/', i + 1 ) < 0 ) 866 if ( mLinkFile.find( '/', i + 1 ) < 0 )
847 f = f.mid(i+1); 867 f = f.mid(i+1);
848 // ### could do relative ie ../../otherDocs/file.doc 868 // ### could do relative ie ../../otherDocs/file.doc
849 config.writeEntry("File",f); 869 config.writeEntry("File",f);
850 config.writeEntry( "Categories", d->mCatList, ';' ); 870 config.writeEntry( "Categories", d->mCatList, ';' );
851 871
852#ifndef QT_NO_COP 872#ifndef QT_NO_COP
853 QCopEnvelope e("QPE/System", "linkChanged(QString)"); 873 QCopEnvelope e("QPE/System", "linkChanged(QString)");
854 e << mLinkFile; 874 e << mLinkFile;
855#endif 875#endif
856} 876}
857 877
858/*! 878/*!
859 Sets the property named \a key to \a value. 879 Sets the property named \a key to \a value.
860 880
861 \sa property() 881 \sa property()
862*/ 882*/
863void AppLnk::setProperty(const QString& key, const QString& value) 883void AppLnk::setProperty(const QString& key, const QString& value)
864{ 884{
865 if ( ensureLinkExists() ) { 885 if ( ensureLinkExists() ) {
866 Config cfg(linkFile(), Config::File); 886 Config cfg(linkFile(), Config::File);
867 cfg.writeEntry(key,value); 887 cfg.writeEntry(key,value);
868 } 888 }
869} 889}
870 890
871/*! 891/*!
872 Returns the property named \a key. 892 Returns the property named \a key.
873 893
874 \sa setProperty() 894 \sa setProperty()
875*/ 895*/
876QString AppLnk::property(const QString& key) const 896QString AppLnk::property(const QString& key) const
877{ 897{
878 QString lf = linkFile(); 898 QString lf = linkFile();
879 if ( !QFile::exists(lf) ) 899 if ( !QFile::exists(lf) )
880 return QString::null; 900 return QString::null;
881 Config cfg(lf, Config::File); 901 Config cfg(lf, Config::File);
882 return cfg.readEntry(key); 902 return cfg.readEntry(key);
883} 903}
884 904
885bool AppLnk::isPreloaded() const { 905bool AppLnk::isPreloaded() const {
diff --git a/library/applnk.h b/library/applnk.h
index 71b62ef..b92ddba 100644
--- a/library/applnk.h
+++ b/library/applnk.h
@@ -28,96 +28,97 @@
28 28
29class AppLnkSetPrivate; 29class AppLnkSetPrivate;
30class AppLnkPrivate; 30class AppLnkPrivate;
31 31
32class AppLnk 32class AppLnk
33{ 33{
34public: 34public:
35 AppLnk(); 35 AppLnk();
36 AppLnk( const QString &file ); 36 AppLnk( const QString &file );
37 AppLnk( const AppLnk &copy ); // copy constructor 37 AppLnk( const AppLnk &copy ); // copy constructor
38 virtual ~AppLnk(); 38 virtual ~AppLnk();
39 39
40 bool isValid() const { return !mLinkFile.isNull(); } 40 bool isValid() const { return !mLinkFile.isNull(); }
41 41
42 static void setSmallIconSize(int); 42 static void setSmallIconSize(int);
43 static void setBigIconSize(int); 43 static void setBigIconSize(int);
44 static int smallIconSize(); 44 static int smallIconSize();
45 static int bigIconSize(); 45 static int bigIconSize();
46 46
47 QString name() const { return mName; } 47 QString name() const { return mName; }
48 const QPixmap& pixmap() const; 48 const QPixmap& pixmap() const;
49 const QPixmap& bigPixmap() const; 49 const QPixmap& bigPixmap() const;
50 QString icon() const { return mIconFile; } 50 QString icon() const { return mIconFile; }
51 virtual QString exec() const { return mExec; } 51 virtual QString exec() const { return mExec; }
52 QString type() const; 52 QString type() const;
53 QString rotation() const { return mRotation; } 53 QString rotation() const { return mRotation; }
54 QString comment() const { return mComment; } 54 QString comment() const { return mComment; }
55 QString file() const; 55 QString file() const;
56 QString linkFile() const; 56 QString linkFile() const;
57 QStringList mimeTypes() const { return mMimeTypes; } 57 QStringList mimeTypes() const { return mMimeTypes; }
58 QStringList mimeTypeIcons() const { return mMimeTypeIcons; } 58 QStringList mimeTypeIcons() const { return mMimeTypeIcons; }
59 const QArray<int> &categories() const; 59 const QArray<int> &categories() const;
60 int id() const { return mId; } 60 int id() const { return mId; }
61 61
62 bool fileKnown() const { return !mFile.isNull(); } 62 bool fileKnown() const { return !mFile.isNull(); }
63 bool linkFileKnown() const { return !mLinkFile.isNull(); } 63 bool linkFileKnown() const { return !mLinkFile.isNull(); }
64 64
65 void execute() const; 65 void execute() const;
66 void execute(const QStringList& args) const; 66 void execute(const QStringList& args) const;
67 void removeFiles(); 67 void removeFiles();
68 void removeLinkFile(); 68 void removeLinkFile();
69 69
70 void setName( const QString& docname ); 70 void setName( const QString& docname );
71 void setExec( const QString& exec ); 71 void setExec( const QString& exec );
72 void setFile( const QString& filename ); 72 void setFile( const QString& filename );
73 void setLinkFile( const QString& filename ); 73 void setLinkFile( const QString& filename );
74 void setComment( const QString& comment ); 74 void setComment( const QString& comment );
75 void setType( const QString& mimetype ); 75 void setType( const QString& mimetype );
76 inline void setRotation ( const QString &rotation ) { mRotation = rot; } // inline for BC
76 void setIcon( const QString& iconname ); 77 void setIcon( const QString& iconname );
77 void setCategories( const QArray<int> &v ); 78 void setCategories( const QArray<int> &v );
78 bool writeLink() const; 79 bool writeLink() const;
79 80
80 void setProperty(const QString& key, const QString& value); 81 void setProperty(const QString& key, const QString& value);
81 QString property(const QString& key) const; 82 QString property(const QString& key) const;
82 83
83#ifdef QTOPIA_INTERNAL_PRELOADACCESS 84#ifdef QTOPIA_INTERNAL_PRELOADACCESS
84 bool isPreloaded() const; 85 bool isPreloaded() const;
85 void setPreloaded(bool yesNo); 86 void setPreloaded(bool yesNo);
86#endif 87#endif
87 88
88#ifdef QTOPIA_INTERNAL_APPLNKASSIGN 89#ifdef QTOPIA_INTERNAL_APPLNKASSIGN
89 AppLnk &operator=(const AppLnk &other); 90 AppLnk &operator=(const AppLnk &other);
90#endif 91#endif
91 92
92protected: 93protected:
93 QString mName; 94 QString mName;
94 95
95 /* remove for Qtopia 3.0 -zecke */ 96 /* remove for Qtopia 3.0 -zecke */
96 QPixmap mPixmap; 97 QPixmap mPixmap;
97 98
98 /* remove for Qtopia 3.0 -zecke */ 99 /* remove for Qtopia 3.0 -zecke */
99 QPixmap mBigPixmap; 100 QPixmap mBigPixmap;
100 101
101 QString mExec; 102 QString mExec;
102 QString mType; 103 QString mType;
103 QString mRotation; 104 QString mRotation;
104 QString mComment; 105 QString mComment;
105 QString mFile; 106 QString mFile;
106 QString mLinkFile; 107 QString mLinkFile;
107 QString mIconFile; 108 QString mIconFile;
108 QStringList mMimeTypes; 109 QStringList mMimeTypes;
109 QStringList mMimeTypeIcons; 110 QStringList mMimeTypeIcons;
110 int mId; 111 int mId;
111 static int lastId; 112 static int lastId;
112 AppLnkPrivate *d; 113 AppLnkPrivate *d;
113 friend class AppLnkSet; 114 friend class AppLnkSet;
114 115
115 virtual void invoke(const QStringList& args) const; 116 virtual void invoke(const QStringList& args) const;
116 bool ensureLinkExists() const; 117 bool ensureLinkExists() const;
117 void storeLink() const; 118 void storeLink() const;
118 119
119private: 120private:
120 const QPixmap& pixmap(int pos, int size) const; 121 const QPixmap& pixmap(int pos, int size) const;
121}; 122};
122 123
123class DocLnk : public AppLnk 124class DocLnk : public AppLnk
diff --git a/library/lnkproperties.cpp b/library/lnkproperties.cpp
index 983c677..0b30a9a 100644
--- a/library/lnkproperties.cpp
+++ b/library/lnkproperties.cpp
@@ -1,160 +1,171 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. 2** Copyright (C) 2000-2002 Trolltech AS. All rights reserved.
3** 3**
4** This file is part of the Qtopia Environment. 4** This file is part of the Qtopia Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
18** 18**
19**********************************************************************/ 19**********************************************************************/
20 20
21// WARNING: Do *NOT* define this yourself. The SL5xxx from SHARP does NOT 21// WARNING: Do *NOT* define this yourself. The SL5xxx from SHARP does NOT
22// have this class. 22// have this class.
23#define QTOPIA_INTERNAL_FSLP 23#define QTOPIA_INTERNAL_FSLP
24#include "lnkproperties.h" 24#include "lnkproperties.h"
25#include "lnkproperties.h" 25#include "lnkproperties.h"
26#include "lnkpropertiesbase_p.h" 26#include "lnkpropertiesbase_p.h"
27#include "ir.h" 27#include "ir.h"
28 28
29#include <qpe/qpeapplication.h>
29#include <qpe/applnk.h> 30#include <qpe/applnk.h>
30#include <qpe/global.h> 31#include <qpe/global.h>
31#include <qpe/categorywidget.h> 32#include <qpe/categorywidget.h>
32#ifdef QWS 33#ifdef QWS
33#include <qpe/qcopenvelope_qws.h> 34#include <qpe/qcopenvelope_qws.h>
34#endif 35#endif
35#include <qpe/filemanager.h> 36#include <qpe/filemanager.h>
36#include <qpe/config.h> 37#include <qpe/config.h>
37#include <qpe/storage.h> 38#include <qpe/storage.h>
38#include <qpe/qpemessagebox.h> 39#include <qpe/qpemessagebox.h>
39 40
40#include <qlineedit.h> 41#include <qlineedit.h>
41#include <qtoolbutton.h> 42#include <qtoolbutton.h>
42#include <qpushbutton.h> 43#include <qpushbutton.h>
43#include <qgroupbox.h> 44#include <qgroupbox.h>
44#include <qcheckbox.h> 45#include <qcheckbox.h>
45#include <qlabel.h> 46#include <qlabel.h>
46#include <qlayout.h> 47#include <qlayout.h>
47#include <qfile.h> 48#include <qfile.h>
48#include <qfileinfo.h> 49#include <qfileinfo.h>
49#include <qmessagebox.h> 50#include <qmessagebox.h>
50#include <qsize.h> 51#include <qsize.h>
51#include <qcombobox.h> 52#include <qcombobox.h>
52#include <qregexp.h> 53#include <qregexp.h>
54#include <qbuttongroup.h>
53 55
54#include <stdlib.h> 56#include <stdlib.h>
55 57
56LnkProperties::LnkProperties( AppLnk* l, QWidget* parent ) 58LnkProperties::LnkProperties( AppLnk* l, QWidget* parent )
57 : QDialog( parent, 0, TRUE ), lnk(l), fileSize( 0 ) 59 : QDialog( parent, 0, TRUE ), lnk(l), fileSize( 0 )
58{ 60{
59 setCaption( tr("Properties") ); 61 setCaption( tr("Properties") );
60 62
61 QVBoxLayout *vbox = new QVBoxLayout( this ); 63 QVBoxLayout *vbox = new QVBoxLayout( this );
62 d = new LnkPropertiesBase( this ); 64 d = new LnkPropertiesBase( this );
63 vbox->add( d ); 65 vbox->add( d );
64 66
65 d->docname->setText(l->name()); 67 d->docname->setText(l->name());
66 QString inf; 68 QString inf;
67 if ( l->type().isEmpty() ) { 69 if ( l->type().isEmpty() ) {
68 d->type->hide(); 70 d->type->hide();
69 d->typeLabel->hide(); 71 d->typeLabel->hide();
70 } else { 72 } else {
71 d->type->setText( l->type() ); 73 d->type->setText( l->type() );
72 } 74 }
73 75
74 if ( l->comment().isEmpty() ) { 76 if ( l->comment().isEmpty() ) {
75 d->comment->hide(); 77 d->comment->hide();
76 d->commentLabel->hide(); 78 d->commentLabel->hide();
77 } else { 79 } else {
78 d->comment->setText( l->comment() ); 80 d->comment->setText( l->comment() );
79 } 81 }
80 82
81 connect(d->beam,SIGNAL(clicked()),this,SLOT(beamLnk())); 83 connect(d->beam,SIGNAL(clicked()),this,SLOT(beamLnk()));
82 if ( lnk->type().contains('/') ) { // A document? (#### better predicate needed) 84 if ( lnk->type().contains('/') ) { // A document? (#### better predicate needed)
83 connect(d->unlink,SIGNAL(clicked()),this,SLOT(unlinkLnk())); 85 connect(d->unlink,SIGNAL(clicked()),this,SLOT(unlinkLnk()));
84 connect(d->duplicate,SIGNAL(clicked()),this,SLOT(duplicateLnk())); 86 connect(d->duplicate,SIGNAL(clicked()),this,SLOT(duplicateLnk()));
85 87
86 d->docname->setReadOnly( FALSE ); 88 d->docname->setReadOnly( FALSE );
87 d->preload->hide(); 89 d->preload->hide();
88 d->spacer->hide(); 90 d->rotate->hide();
91 d->rotateButtons->hide();
92 d->labelspacer->hide();
89 93
90 // ### THIS MUST GO, FIX WIERD BUG in QLAYOUT 94 // ### THIS MUST GO, FIX WIERD BUG in QLAYOUT
91 d->categoryEdit->kludge(); 95 d->categoryEdit->kludge();
92 96
93 d->categoryEdit->setCategories( lnk->categories(), 97 d->categoryEdit->setCategories( lnk->categories(),
94 "Document View", 98 "Document View",
95 tr("Document View") ); 99 tr("Document View") );
96 setupLocations(); 100 setupLocations();
97 } else { 101 } else {
98 d->unlink->hide(); 102 d->unlink->hide();
99 d->duplicate->hide(); 103 d->duplicate->hide();
100 d->beam->hide(); 104 d->beam->hide();
101 d->hline->hide(); 105 d->hline->hide();
102 d->locationLabel->hide(); 106 d->locationLabel->hide();
103 d->locationCombo->hide(); 107 d->locationCombo->hide();
104 108
105 // Can't edit categories, since the app .desktop files are global, 109 // Can't edit categories, since the app .desktop files are global,
106 // possibly read-only. 110 // possibly read-only.
107 d->categoryEdit->hide(); 111 d->categoryEdit->hide();
108 112
109 d->docname->setReadOnly( TRUE ); 113 d->docname->setReadOnly( TRUE );
110 114
111 if ( l->property("CanFastload") == "0" ) 115 if ( l->property("CanFastload") == "0" )
112 d->preload->hide(); 116 d->preload->hide();
117 if ( !l->property("Rotation"). isEmpty ()) {
118 d->rotate->setChecked ( true );
119 d->rotateButtons->setButton(((QPEApplication::defaultRotation()+l->rotation().toInt())%360)/90);
120 }
121 else {
122 d->rotateButtons->setEnabled(false);
123 }
113 124
114 Config cfg("Launcher"); 125 Config cfg("Launcher");
115 cfg.setGroup("Preload"); 126 cfg.setGroup("Preload");
116 QStringList apps = cfg.readListEntry("Apps",','); 127 QStringList apps = cfg.readListEntry("Apps",',');
117 d->preload->setChecked( apps.contains(l->exec()) ); 128 d->preload->setChecked( apps.contains(l->exec()) );
118 if ( Global::isBuiltinCommand(lnk->exec()) ) 129 if ( Global::isBuiltinCommand(lnk->exec()) )
119 d->preload->hide(); // builtins are always fast 130 d->preload->hide(); // builtins are always fast
120 131
121 currentLocation = 0; // apps not movable (yet) 132 currentLocation = 0; // apps not movable (yet)
122 } 133 }
123} 134}
124 135
125LnkProperties::~LnkProperties() 136LnkProperties::~LnkProperties()
126{ 137{
127} 138}
128 139
129void LnkProperties::unlinkLnk() 140void LnkProperties::unlinkLnk()
130{ 141{
131 if ( QPEMessageBox::confirmDelete( this, tr("Delete"), lnk->name() ) ) { 142 if ( QPEMessageBox::confirmDelete( this, tr("Delete"), lnk->name() ) ) {
132 lnk->removeFiles(); 143 lnk->removeFiles();
133 if ( QFile::exists(lnk->file()) ) { 144 if ( QFile::exists(lnk->file()) ) {
134 QMessageBox::warning( this, tr("Delete"), tr("File deletion failed.") ); 145 QMessageBox::warning( this, tr("Delete"), tr("File deletion failed.") );
135 } else { 146 } else {
136 reject(); 147 reject();
137 } 148 }
138 } 149 }
139} 150}
140 151
141void LnkProperties::setupLocations() 152void LnkProperties::setupLocations()
142{ 153{
143 QFileInfo fi( lnk->file() ); 154 QFileInfo fi( lnk->file() );
144 fileSize = fi.size(); 155 fileSize = fi.size();
145 StorageInfo storage; 156 StorageInfo storage;
146 const QList<FileSystem> &fs = storage.fileSystems(); 157 const QList<FileSystem> &fs = storage.fileSystems();
147 QListIterator<FileSystem> it ( fs ); 158 QListIterator<FileSystem> it ( fs );
148 QString s; 159 QString s;
149 QString homeDir = getenv("HOME"); 160 QString homeDir = getenv("HOME");
150 QString hardDiskHome; 161 QString hardDiskHome;
151 QString hardDiskPath; 162 QString hardDiskPath;
152 int index = 0; 163 int index = 0;
153 currentLocation = -1; 164 currentLocation = -1;
154 for ( ; it.current(); ++it ) { 165 for ( ; it.current(); ++it ) {
155 // we add 10k to the file size so we are sure we can also save the desktop file 166 // we add 10k to the file size so we are sure we can also save the desktop file
156 if ( (ulong)(*it)->availBlocks() * (ulong)(*it)->blockSize() > (ulong)fileSize + 10000 ) { 167 if ( (ulong)(*it)->availBlocks() * (ulong)(*it)->blockSize() > (ulong)fileSize + 10000 ) {
157 if ( (*it)->isRemovable() || 168 if ( (*it)->isRemovable() ||
158 (*it)->disk() == "/dev/mtdblock1" || 169 (*it)->disk() == "/dev/mtdblock1" ||
159 (*it)->disk() == "/dev/mtdblock/1" || 170 (*it)->disk() == "/dev/mtdblock/1" ||
160 (*it)->disk().left(13) == "/dev/mtdblock" || 171 (*it)->disk().left(13) == "/dev/mtdblock" ||
@@ -230,80 +241,96 @@ void LnkProperties::beamLnk()
230 241
231bool LnkProperties::copyFile( DocLnk &newdoc ) 242bool LnkProperties::copyFile( DocLnk &newdoc )
232{ 243{
233 const char *linkExtn = ".desktop"; 244 const char *linkExtn = ".desktop";
234 QString fileExtn; 245 QString fileExtn;
235 int extnPos = lnk->file().findRev( '.' ); 246 int extnPos = lnk->file().findRev( '.' );
236 if ( extnPos > 0 ) 247 if ( extnPos > 0 )
237 fileExtn = lnk->file().mid( extnPos ); 248 fileExtn = lnk->file().mid( extnPos );
238 249
239 QString safename = newdoc.name(); 250 QString safename = newdoc.name();
240 safename.replace(QRegExp("/"),"_"); 251 safename.replace(QRegExp("/"),"_");
241 252
242 QString fn = locations[ d->locationCombo->currentItem() ] 253 QString fn = locations[ d->locationCombo->currentItem() ]
243 + "/Documents/" + newdoc.type() + "/" + safename; 254 + "/Documents/" + newdoc.type() + "/" + safename;
244 if ( QFile::exists(fn + fileExtn) || QFile::exists(fn + linkExtn) ) { 255 if ( QFile::exists(fn + fileExtn) || QFile::exists(fn + linkExtn) ) {
245 int n=1; 256 int n=1;
246 QString nn = fn + "_" + QString::number(n); 257 QString nn = fn + "_" + QString::number(n);
247 while ( QFile::exists(nn+fileExtn) || QFile::exists(nn+linkExtn) ) { 258 while ( QFile::exists(nn+fileExtn) || QFile::exists(nn+linkExtn) ) {
248 n++; 259 n++;
249 nn = fn + "_" + QString::number(n); 260 nn = fn + "_" + QString::number(n);
250 } 261 }
251 fn = nn; 262 fn = nn;
252 } 263 }
253 newdoc.setFile( fn + fileExtn ); 264 newdoc.setFile( fn + fileExtn );
254 newdoc.setLinkFile( fn + linkExtn ); 265 newdoc.setLinkFile( fn + linkExtn );
255 266
256 // Copy file 267 // Copy file
257 FileManager fm; 268 FileManager fm;
258 if ( !fm.copyFile( *lnk, newdoc ) ) 269 if ( !fm.copyFile( *lnk, newdoc ) )
259 return FALSE; 270 return FALSE;
260 return TRUE; 271 return TRUE;
261} 272}
262 273
263void LnkProperties::done(int ok) 274void LnkProperties::done(int ok)
264{ 275{
265 if ( ok ) { 276 if ( ok ) {
266 bool changed=FALSE; 277 bool changed=FALSE;
267 if ( lnk->name() != d->docname->text() ) { 278 if ( lnk->name() != d->docname->text() ) {
268 lnk->setName(d->docname->text()); 279 lnk->setName(d->docname->text());
269 changed=TRUE; 280 changed=TRUE;
270 } 281 }
271 if ( d->categoryEdit->isVisible() ) { 282 if ( d->categoryEdit->isVisible() ) {
272 QArray<int> tmp = d->categoryEdit->newCategories(); 283 QArray<int> tmp = d->categoryEdit->newCategories();
273 if ( lnk->categories() != tmp ) { 284 if ( lnk->categories() != tmp ) {
274 lnk->setCategories( tmp ); 285 lnk->setCategories( tmp );
275 changed = TRUE; 286 changed = TRUE;
276 } 287 }
277 } 288 }
289 if ( !d->rotate->isHidden()) {
290 QString newrot;
291
292 if (d->rotate->isChecked()) {
293 int rot=0;
294 for(; rot<4; rot++) {
295 if (d->rotateButtons->find(rot)->isOn())
296 break;
297 }
298 newrot = QString::number((QPEApplication::defaultRotation()+rot*90)%360);
299 }
300 if (newrot !=lnk->rotation()) {
301 lnk->setRotation(newrot);
302 changed = TRUE;
303 }
304 }
278 if ( d->preload->isHidden() && d->locationCombo->currentItem() != currentLocation ) { 305 if ( d->preload->isHidden() && d->locationCombo->currentItem() != currentLocation ) {
279 moveLnk(); 306 moveLnk();
280 } else if ( changed ) { 307 } else if ( changed ) {
281 lnk->writeLink(); 308 lnk->writeLink();
282 } 309 }
283 310
284 if ( !d->preload->isHidden() ) { 311 if ( !d->preload->isHidden() ) {
285 Config cfg("Launcher"); 312 Config cfg("Launcher");
286 cfg.setGroup("Preload"); 313 cfg.setGroup("Preload");
287 QStringList apps = cfg.readListEntry("Apps",','); 314 QStringList apps = cfg.readListEntry("Apps",',');
288 QString exe = lnk->exec(); 315 QString exe = lnk->exec();
289 if ( apps.contains(exe) != d->preload->isChecked() ) { 316 if ( apps.contains(exe) != d->preload->isChecked() ) {
290 if ( d->preload->isChecked() ) { 317 if ( d->preload->isChecked() ) {
291 apps.append(exe); 318 apps.append(exe);
292#ifndef QT_NO_COP 319#ifndef QT_NO_COP
293 QCopEnvelope e("QPE/Application/"+exe.local8Bit(), 320 QCopEnvelope e("QPE/Application/"+exe.local8Bit(),
294 "enablePreload()"); 321 "enablePreload()");
295#endif 322#endif
296 } else { 323 } else {
297 apps.remove(exe); 324 apps.remove(exe);
298#ifndef QT_NO_COP 325#ifndef QT_NO_COP
299 QCopEnvelope e("QPE/Application/"+exe.local8Bit(), 326 QCopEnvelope e("QPE/Application/"+exe.local8Bit(),
300 "quitIfInvisible()"); 327 "quitIfInvisible()");
301#endif 328#endif
302 } 329 }
303 cfg.writeEntry("Apps",apps,','); 330 cfg.writeEntry("Apps",apps,',');
304 } 331 }
305 } 332 }
306 } 333 }
307 QDialog::done( ok ); 334 QDialog::done( ok );
308} 335}
309 336
diff --git a/library/lnkpropertiesbase_p.ui b/library/lnkpropertiesbase_p.ui
index e7139e7..c2271f1 100644
--- a/library/lnkpropertiesbase_p.ui
+++ b/library/lnkpropertiesbase_p.ui
@@ -1,319 +1,553 @@
1<!DOCTYPE UI><UI> 1<!DOCTYPE UI><UI>
2<class>LnkPropertiesBase</class> 2<class>LnkPropertiesBase</class>
3<widget> 3<widget>
4 <class>QWidget</class> 4 <class>QWidget</class>
5 <property stdset="1"> 5 <property stdset="1">
6 <name>name</name> 6 <name>name</name>
7 <cstring>Form1</cstring> 7 <cstring>Form1</cstring>
8 </property> 8 </property>
9 <property stdset="1"> 9 <property stdset="1">
10 <name>geometry</name> 10 <name>geometry</name>
11 <rect> 11 <rect>
12 <x>0</x> 12 <x>0</x>
13 <y>0</y> 13 <y>0</y>
14 <width>289</width> 14 <width>267</width>
15 <height>449</height> 15 <height>450</height>
16 </rect> 16 </rect>
17 </property> 17 </property>
18 <property stdset="1"> 18 <property stdset="1">
19 <name>sizePolicy</name> 19 <name>sizePolicy</name>
20 <sizepolicy> 20 <sizepolicy>
21 <hsizetype>5</hsizetype> 21 <hsizetype>5</hsizetype>
22 <vsizetype>5</vsizetype> 22 <vsizetype>5</vsizetype>
23 </sizepolicy> 23 </sizepolicy>
24 </property> 24 </property>
25 <property stdset="1"> 25 <property stdset="1">
26 <name>font</name> 26 <name>font</name>
27 <font> 27 <font>
28 </font> 28 </font>
29 </property> 29 </property>
30 <property stdset="1"> 30 <property stdset="1">
31 <name>caption</name> 31 <name>caption</name>
32 <string>Details</string> 32 <string>Details</string>
33 </property> 33 </property>
34 <property stdset="1">
35 <name>icon</name>
36 <pixmap>image0</pixmap>
37 </property>
34 <property> 38 <property>
35 <name>layoutMargin</name> 39 <name>layoutMargin</name>
36 </property> 40 </property>
37 <property> 41 <property>
38 <name>layoutSpacing</name> 42 <name>layoutSpacing</name>
39 </property> 43 </property>
40 <vbox> 44 <vbox>
41 <property stdset="1"> 45 <property stdset="1">
42 <name>margin</name> 46 <name>margin</name>
43 <number>0</number> 47 <number>0</number>
44 </property> 48 </property>
45 <property stdset="1"> 49 <property stdset="1">
46 <name>spacing</name> 50 <name>spacing</name>
47 <number>0</number> 51 <number>0</number>
48 </property> 52 </property>
49 <widget> 53 <widget>
50 <class>QFrame</class> 54 <class>QFrame</class>
51 <property stdset="1"> 55 <property stdset="1">
52 <name>name</name> 56 <name>name</name>
53 <cstring>Frame8</cstring> 57 <cstring>Frame8</cstring>
54 </property> 58 </property>
55 <property stdset="1"> 59 <property stdset="1">
56 <name>focusPolicy</name> 60 <name>focusPolicy</name>
57 <enum>NoFocus</enum> 61 <enum>NoFocus</enum>
58 </property> 62 </property>
59 <property stdset="1"> 63 <property stdset="1">
60 <name>frameShape</name> 64 <name>frameShape</name>
61 <enum>NoFrame</enum> 65 <enum>NoFrame</enum>
62 </property> 66 </property>
63 <property stdset="1"> 67 <property stdset="1">
64 <name>frameShadow</name> 68 <name>frameShadow</name>
65 <enum>Plain</enum> 69 <enum>Plain</enum>
66 </property> 70 </property>
67 <property> 71 <property>
68 <name>layoutMargin</name> 72 <name>layoutMargin</name>
69 </property> 73 </property>
70 <property> 74 <property>
71 <name>layoutSpacing</name> 75 <name>layoutSpacing</name>
72 </property> 76 </property>
73 <grid> 77 <grid>
74 <property stdset="1"> 78 <property stdset="1">
75 <name>margin</name> 79 <name>margin</name>
76 <number>3</number> 80 <number>3</number>
77 </property> 81 </property>
78 <property stdset="1"> 82 <property stdset="1">
79 <name>spacing</name> 83 <name>spacing</name>
80 <number>3</number> 84 <number>3</number>
81 </property> 85 </property>
82 <widget row="6" column="0" rowspan="1" colspan="2" > 86 <widget row="8" column="0" rowspan="1" colspan="2" >
83 <class>CategoryWidget</class> 87 <class>CategoryWidget</class>
84 <property stdset="1"> 88 <property stdset="1">
85 <name>name</name> 89 <name>name</name>
86 <cstring>categoryEdit</cstring> 90 <cstring>categoryEdit</cstring>
87 </property> 91 </property>
88 <property stdset="1"> 92 <property stdset="1">
89 <name>sizePolicy</name> 93 <name>sizePolicy</name>
90 <sizepolicy> 94 <sizepolicy>
91 <hsizetype>1</hsizetype> 95 <hsizetype>1</hsizetype>
92 <vsizetype>7</vsizetype> 96 <vsizetype>7</vsizetype>
93 </sizepolicy> 97 </sizepolicy>
94 </property> 98 </property>
95 </widget> 99 </widget>
96 <widget row="5" column="0" rowspan="1" colspan="2" > 100 <widget row="5" column="0" rowspan="1" colspan="2" >
97 <class>QLabel</class> 101 <class>QCheckBox</class>
98 <property stdset="1"> 102 <property stdset="1">
99 <name>name</name> 103 <name>name</name>
100 <cstring>spacer</cstring> 104 <cstring>rotate</cstring>
101 </property>
102 <property stdset="1">
103 <name>sizePolicy</name>
104 <sizepolicy>
105 <hsizetype>1</hsizetype>
106 <vsizetype>7</vsizetype>
107 </sizepolicy>
108 </property> 105 </property>
109 <property stdset="1"> 106 <property stdset="1">
110 <name>text</name> 107 <name>text</name>
111 <string></string> 108 <string>Use custom rotation</string>
112 </property> 109 </property>
113 </widget> 110 <property>
114 <widget row="3" column="0" > 111 <name>layoutMargin</name>
115 <class>QLabel</class>
116 <property stdset="1">
117 <name>name</name>
118 <cstring>commentLabel</cstring>
119 </property> 112 </property>
120 <property stdset="1"> 113 <property>
121 <name>text</name> 114 <name>layoutSpacing</name>
122 <string>Comment:</string> 115 </property>
116 <property>
117 <name>whatsThis</name>
118 <string>Preload this application so that it is available instantly.</string>
123 </property> 119 </property>
124 </widget> 120 </widget>
125 <widget row="2" column="0" > 121 <widget row="0" column="1" >
126 <class>QLabel</class> 122 <class>QLineEdit</class>
127 <property stdset="1"> 123 <property stdset="1">
128 <name>name</name> 124 <name>name</name>
129 <cstring>typeLabel</cstring> 125 <cstring>docname</cstring>
130 </property> 126 </property>
131 <property stdset="1"> 127 <property stdset="1">
132 <name>focusPolicy</name> 128 <name>sizePolicy</name>
133 <enum>NoFocus</enum> 129 <sizepolicy>
130 <hsizetype>7</hsizetype>
131 <vsizetype>0</vsizetype>
132 </sizepolicy>
134 </property> 133 </property>
135 <property stdset="1"> 134 <property stdset="1">
136 <name>text</name> 135 <name>text</name>
137 <string>Type:</string> 136 <string></string>
138 </property>
139 <property>
140 <name>layoutMargin</name>
141 </property> 137 </property>
142 <property> 138 <property>
143 <name>layoutSpacing</name> 139 <name>whatsThis</name>
140 <string>The name of this document.</string>
144 </property> 141 </property>
145 </widget> 142 </widget>
146 <widget row="1" column="1" > 143 <widget row="1" column="1" >
147 <class>QComboBox</class> 144 <class>QComboBox</class>
148 <property stdset="1"> 145 <property stdset="1">
149 <name>name</name> 146 <name>name</name>
150 <cstring>locationCombo</cstring> 147 <cstring>locationCombo</cstring>
151 </property> 148 </property>
152 <property stdset="1"> 149 <property stdset="1">
153 <name>sizePolicy</name> 150 <name>sizePolicy</name>
154 <sizepolicy> 151 <sizepolicy>
155 <hsizetype>7</hsizetype> 152 <hsizetype>7</hsizetype>
156 <vsizetype>0</vsizetype> 153 <vsizetype>0</vsizetype>
157 </sizepolicy> 154 </sizepolicy>
158 </property> 155 </property>
159 <property> 156 <property>
160 <name>whatsThis</name> 157 <name>whatsThis</name>
161 <string>The media the document resides on.</string> 158 <string>The media the document resides on.</string>
162 </property> 159 </property>
163 </widget> 160 </widget>
164 <widget row="0" column="1" > 161 <widget row="2" column="0" >
165 <class>QLineEdit</class> 162 <class>QLabel</class>
166 <property stdset="1"> 163 <property stdset="1">
167 <name>name</name> 164 <name>name</name>
168 <cstring>docname</cstring> 165 <cstring>typeLabel</cstring>
169 </property> 166 </property>
170 <property stdset="1"> 167 <property stdset="1">
171 <name>sizePolicy</name> 168 <name>focusPolicy</name>
172 <sizepolicy> 169 <enum>NoFocus</enum>
173 <hsizetype>7</hsizetype>
174 <vsizetype>0</vsizetype>
175 </sizepolicy>
176 </property> 170 </property>
177 <property stdset="1"> 171 <property stdset="1">
178 <name>text</name> 172 <name>text</name>
179 <string></string> 173 <string>Type:</string>
180 </property> 174 </property>
181 <property> 175 <property>
182 <name>whatsThis</name> 176 <name>layoutMargin</name>
183 <string>The name of this document.</string> 177 </property>
178 <property>
179 <name>layoutSpacing</name>
184 </property> 180 </property>
185 </widget> 181 </widget>
186 <widget row="0" column="0" > 182 <widget row="2" column="1" >
187 <class>QLabel</class> 183 <class>QLabel</class>
188 <property stdset="1"> 184 <property stdset="1">
189 <name>name</name> 185 <name>name</name>
190 <cstring>TextLabel1</cstring> 186 <cstring>type</cstring>
191 </property>
192 <property stdset="1">
193 <name>frameShadow</name>
194 <enum>MShadow</enum>
195 </property> 187 </property>
196 <property stdset="1"> 188 <property stdset="1">
197 <name>text</name> 189 <name>text</name>
198 <string>Name:</string> 190 <string></string>
199 </property> 191 </property>
200 </widget> 192 </widget>
201 <widget row="1" column="0" > 193 <widget row="1" column="0" >
202 <class>QLabel</class> 194 <class>QLabel</class>
203 <property stdset="1"> 195 <property stdset="1">
204 <name>name</name> 196 <name>name</name>
205 <cstring>locationLabel</cstring> 197 <cstring>locationLabel</cstring>
206 </property> 198 </property>
207 <property stdset="1"> 199 <property stdset="1">
208 <name>sizePolicy</name> 200 <name>sizePolicy</name>
209 <sizepolicy> 201 <sizepolicy>
210 <hsizetype>1</hsizetype> 202 <hsizetype>1</hsizetype>
211 <vsizetype>1</vsizetype> 203 <vsizetype>1</vsizetype>
212 </sizepolicy> 204 </sizepolicy>
213 </property> 205 </property>
214 <property stdset="1"> 206 <property stdset="1">
215 <name>caption</name> 207 <name>caption</name>
216 <string></string> 208 <string></string>
217 </property> 209 </property>
218 <property stdset="1"> 210 <property stdset="1">
219 <name>text</name> 211 <name>text</name>
220 <string>Location:</string> 212 <string>Location:</string>
221 </property> 213 </property>
222 <property> 214 <property>
223 <name>layoutMargin</name> 215 <name>layoutMargin</name>
224 </property> 216 </property>
225 <property> 217 <property>
226 <name>layoutSpacing</name> 218 <name>layoutSpacing</name>
227 </property> 219 </property>
228 </widget> 220 </widget>
229 <widget row="2" column="1" > 221 <widget row="0" column="0" >
230 <class>QLabel</class> 222 <class>QLabel</class>
231 <property stdset="1"> 223 <property stdset="1">
232 <name>name</name> 224 <name>name</name>
233 <cstring>type</cstring> 225 <cstring>TextLabel1</cstring>
226 </property>
227 <property stdset="1">
228 <name>frameShadow</name>
229 <enum>MShadow</enum>
234 </property> 230 </property>
235 <property stdset="1"> 231 <property stdset="1">
236 <name>text</name> 232 <name>text</name>
237 <string></string> 233 <string>Name:</string>
238 </property> 234 </property>
239 </widget> 235 </widget>
240 <widget row="3" column="1" > 236 <widget row="3" column="1" >
241 <class>QLabel</class> 237 <class>QLabel</class>
242 <property stdset="1"> 238 <property stdset="1">
243 <name>name</name> 239 <name>name</name>
244 <cstring>comment</cstring> 240 <cstring>comment</cstring>
245 </property> 241 </property>
246 <property stdset="1"> 242 <property stdset="1">
247 <name>text</name> 243 <name>text</name>
248 <string></string> 244 <string></string>
249 </property> 245 </property>
250 </widget> 246 </widget>
247 <widget row="6" column="0" rowspan="1" colspan="2" >
248 <class>QButtonGroup</class>
249 <property stdset="1">
250 <name>name</name>
251 <cstring>rotateButtons</cstring>
252 </property>
253 <property stdset="1">
254 <name>frameShape</name>
255 <enum>NoFrame</enum>
256 </property>
257 <property stdset="1">
258 <name>title</name>
259 <string></string>
260 </property>
261 <property stdset="1">
262 <name>exclusive</name>
263 <bool>true</bool>
264 </property>
265 <property>
266 <name>layoutMargin</name>
267 </property>
268 <property>
269 <name>layoutSpacing</name>
270 </property>
271 <hbox>
272 <property stdset="1">
273 <name>margin</name>
274 <number>0</number>
275 </property>
276 <property stdset="1">
277 <name>spacing</name>
278 <number>3</number>
279 </property>
280 <spacer>
281 <property>
282 <name>name</name>
283 <cstring>s1</cstring>
284 </property>
285 <property stdset="1">
286 <name>orientation</name>
287 <enum>Horizontal</enum>
288 </property>
289 <property stdset="1">
290 <name>sizeType</name>
291 <enum>Fixed</enum>
292 </property>
293 <property>
294 <name>sizeHint</name>
295 <size>
296 <width>20</width>
297 <height>28</height>
298 </size>
299 </property>
300 </spacer>
301 <widget>
302 <class>QToolButton</class>
303 <property stdset="1">
304 <name>name</name>
305 <cstring>ToolButton1</cstring>
306 </property>
307 <property stdset="1">
308 <name>text</name>
309 <string></string>
310 </property>
311 <property stdset="1">
312 <name>pixmap</name>
313 <pixmap>image0</pixmap>
314 </property>
315 <property stdset="1">
316 <name>toggleButton</name>
317 <bool>true</bool>
318 </property>
319 <property stdset="1">
320 <name>on</name>
321 <bool>false</bool>
322 </property>
323 <property stdset="1">
324 <name>usesBigPixmap</name>
325 <bool>true</bool>
326 </property>
327 <property stdset="1">
328 <name>toggleButton</name>
329 <bool>true</bool>
330 </property>
331 <property stdset="1">
332 <name>on</name>
333 <bool>false</bool>
334 </property>
335 <property stdset="1">
336 <name>buttonGroupId</name>
337 <number>0</number>
338 </property>
339 </widget>
340 <widget>
341 <class>QToolButton</class>
342 <property stdset="1">
343 <name>name</name>
344 <cstring>ToolButton2</cstring>
345 </property>
346 <property stdset="1">
347 <name>text</name>
348 <string></string>
349 </property>
350 <property stdset="1">
351 <name>pixmap</name>
352 <pixmap>image1</pixmap>
353 </property>
354 <property stdset="1">
355 <name>toggleButton</name>
356 <bool>true</bool>
357 </property>
358 <property stdset="1">
359 <name>usesBigPixmap</name>
360 <bool>true</bool>
361 </property>
362 <property stdset="1">
363 <name>toggleButton</name>
364 <bool>true</bool>
365 </property>
366 <property stdset="1">
367 <name>buttonGroupId</name>
368 <number>1</number>
369 </property>
370 </widget>
371 <widget>
372 <class>QToolButton</class>
373 <property stdset="1">
374 <name>name</name>
375 <cstring>ToolButton3</cstring>
376 </property>
377 <property stdset="1">
378 <name>text</name>
379 <string></string>
380 </property>
381 <property stdset="1">
382 <name>pixmap</name>
383 <pixmap>image2</pixmap>
384 </property>
385 <property stdset="1">
386 <name>toggleButton</name>
387 <bool>true</bool>
388 </property>
389 <property stdset="1">
390 <name>usesBigPixmap</name>
391 <bool>true</bool>
392 </property>
393 <property stdset="1">
394 <name>toggleButton</name>
395 <bool>true</bool>
396 </property>
397 <property stdset="1">
398 <name>buttonGroupId</name>
399 <number>2</number>
400 </property>
401 </widget>
402 <widget>
403 <class>QToolButton</class>
404 <property stdset="1">
405 <name>name</name>
406 <cstring>ToolButton4</cstring>
407 </property>
408 <property stdset="1">
409 <name>text</name>
410 <string></string>
411 </property>
412 <property stdset="1">
413 <name>pixmap</name>
414 <pixmap>image3</pixmap>
415 </property>
416 <property stdset="1">
417 <name>toggleButton</name>
418 <bool>true</bool>
419 </property>
420 <property stdset="1">
421 <name>usesBigPixmap</name>
422 <bool>true</bool>
423 </property>
424 <property stdset="1">
425 <name>toggleButton</name>
426 <bool>true</bool>
427 </property>
428 <property stdset="1">
429 <name>buttonGroupId</name>
430 <number>3</number>
431 </property>
432 </widget>
433 <spacer>
434 <property>
435 <name>name</name>
436 <cstring>s4</cstring>
437 </property>
438 <property stdset="1">
439 <name>orientation</name>
440 <enum>Horizontal</enum>
441 </property>
442 <property stdset="1">
443 <name>sizeType</name>
444 <enum>MinimumExpanding</enum>
445 </property>
446 <property>
447 <name>sizeHint</name>
448 <size>
449 <width>20</width>
450 <height>20</height>
451 </size>
452 </property>
453 </spacer>
454 </hbox>
455 </widget>
456 <widget row="7" column="0" rowspan="1" colspan="2" >
457 <class>QLabel</class>
458 <property stdset="1">
459 <name>name</name>
460 <cstring>labelspacer</cstring>
461 </property>
462 <property stdset="1">
463 <name>sizePolicy</name>
464 <sizepolicy>
465 <hsizetype>1</hsizetype>
466 <vsizetype>7</vsizetype>
467 </sizepolicy>
468 </property>
469 <property stdset="1">
470 <name>text</name>
471 <string></string>
472 </property>
473 </widget>
251 <widget row="4" column="0" rowspan="1" colspan="2" > 474 <widget row="4" column="0" rowspan="1" colspan="2" >
252 <class>QCheckBox</class> 475 <class>QCheckBox</class>
253 <property stdset="1"> 476 <property stdset="1">
254 <name>name</name> 477 <name>name</name>
255 <cstring>preload</cstring> 478 <cstring>preload</cstring>
256 </property> 479 </property>
257 <property stdset="1"> 480 <property stdset="1">
258 <name>text</name> 481 <name>text</name>
259 <string>Fast load (consumes memory)</string> 482 <string>Fast load (consumes memory)</string>
260 </property> 483 </property>
261 <property> 484 <property>
262 <name>layoutMargin</name> 485 <name>layoutMargin</name>
263 </property> 486 </property>
264 <property> 487 <property>
265 <name>layoutSpacing</name> 488 <name>layoutSpacing</name>
266 </property> 489 </property>
267 <property> 490 <property>
268 <name>whatsThis</name> 491 <name>whatsThis</name>
269 <string>Preload this application so that it is available instantly.</string> 492 <string>Preload this application so that it is available instantly.</string>
270 </property> 493 </property>
271 </widget> 494 </widget>
495 <widget row="3" column="0" >
496 <class>QLabel</class>
497 <property stdset="1">
498 <name>name</name>
499 <cstring>commentLabel</cstring>
500 </property>
501 <property stdset="1">
502 <name>text</name>
503 <string>Comment:</string>
504 </property>
505 </widget>
272 </grid> 506 </grid>
273 </widget> 507 </widget>
274 <widget> 508 <widget>
275 <class>Line</class> 509 <class>Line</class>
276 <property stdset="1"> 510 <property stdset="1">
277 <name>name</name> 511 <name>name</name>
278 <cstring>hline</cstring> 512 <cstring>hline</cstring>
279 </property> 513 </property>
280 <property stdset="1"> 514 <property stdset="1">
281 <name>frameShadow</name> 515 <name>frameShadow</name>
282 <enum>Sunken</enum> 516 <enum>Sunken</enum>
283 </property> 517 </property>
284 <property stdset="1"> 518 <property stdset="1">
285 <name>orientation</name> 519 <name>orientation</name>
286 <enum>Horizontal</enum> 520 <enum>Horizontal</enum>
287 </property> 521 </property>
288 <property> 522 <property>
289 <name>layoutMargin</name> 523 <name>layoutMargin</name>
290 </property> 524 </property>
291 <property> 525 <property>
292 <name>layoutSpacing</name> 526 <name>layoutSpacing</name>
293 </property> 527 </property>
294 </widget> 528 </widget>
295 <widget> 529 <widget>
296 <class>QFrame</class> 530 <class>QFrame</class>
297 <property stdset="1"> 531 <property stdset="1">
298 <name>name</name> 532 <name>name</name>
299 <cstring>Frame9</cstring> 533 <cstring>Frame9</cstring>
300 </property> 534 </property>
301 <property stdset="1"> 535 <property stdset="1">
302 <name>frameShape</name> 536 <name>frameShape</name>
303 <enum>NoFrame</enum> 537 <enum>NoFrame</enum>
304 </property> 538 </property>
305 <property stdset="1"> 539 <property stdset="1">
306 <name>frameShadow</name> 540 <name>frameShadow</name>
307 <enum>Plain</enum> 541 <enum>Plain</enum>
308 </property> 542 </property>
309 <property> 543 <property>
310 <name>layoutMargin</name> 544 <name>layoutMargin</name>
311 </property> 545 </property>
312 <property> 546 <property>
313 <name>layoutSpacing</name> 547 <name>layoutSpacing</name>
314 </property> 548 </property>
315 <hbox> 549 <hbox>
316 <property stdset="1"> 550 <property stdset="1">
317 <name>margin</name> 551 <name>margin</name>
318 <number>3</number> 552 <number>3</number>
319 </property> 553 </property>
@@ -358,66 +592,90 @@
358 <name>autoDefault</name> 592 <name>autoDefault</name>
359 <bool>false</bool> 593 <bool>false</bool>
360 </property> 594 </property>
361 <property> 595 <property>
362 <name>whatsThis</name> 596 <name>whatsThis</name>
363 <string>Make a copy of this document.</string> 597 <string>Make a copy of this document.</string>
364 </property> 598 </property>
365 </widget> 599 </widget>
366 <widget> 600 <widget>
367 <class>QPushButton</class> 601 <class>QPushButton</class>
368 <property stdset="1"> 602 <property stdset="1">
369 <name>name</name> 603 <name>name</name>
370 <cstring>beam</cstring> 604 <cstring>beam</cstring>
371 </property> 605 </property>
372 <property stdset="1"> 606 <property stdset="1">
373 <name>focusPolicy</name> 607 <name>focusPolicy</name>
374 <enum>TabFocus</enum> 608 <enum>TabFocus</enum>
375 </property> 609 </property>
376 <property stdset="1"> 610 <property stdset="1">
377 <name>text</name> 611 <name>text</name>
378 <string>Beam</string> 612 <string>Beam</string>
379 </property> 613 </property>
380 <property stdset="1"> 614 <property stdset="1">
381 <name>autoDefault</name> 615 <name>autoDefault</name>
382 <bool>false</bool> 616 <bool>false</bool>
383 </property> 617 </property>
384 <property> 618 <property>
385 <name>whatsThis</name> 619 <name>whatsThis</name>
386 <string>Beam this document to another device.</string> 620 <string>Beam this document to another device.</string>
387 </property> 621 </property>
388 </widget> 622 </widget>
389 </hbox> 623 </hbox>
390 </widget> 624 </widget>
391 </vbox> 625 </vbox>
392</widget> 626</widget>
393<customwidgets> 627<customwidgets>
394 <customwidget> 628 <customwidget>
395 <class>CategoryWidget</class> 629 <class>CategoryWidget</class>
396 <header location="global">qpe/categorywidget.h</header> 630 <header location="global">qpe/categorywidget.h</header>
397 <sizehint> 631 <sizehint>
398 <width>-1</width> 632 <width>-1</width>
399 <height>-1</height> 633 <height>-1</height>
400 </sizehint> 634 </sizehint>
401 <container>0</container> 635 <container>0</container>
402 <sizepolicy> 636 <sizepolicy>
403 <hordata>7</hordata> 637 <hordata>7</hordata>
404 <verdata>7</verdata> 638 <verdata>7</verdata>
405 </sizepolicy> 639 </sizepolicy>
406 <pixmap>image0</pixmap> 640 <pixmap>image4</pixmap>
407 </customwidget> 641 </customwidget>
408</customwidgets> 642</customwidgets>
409<images> 643<images>
410 <image> 644 <image>
411 <name>image0</name> 645 <name>image0</name>
646 <data format="XPM.GZ" length="1226">789cd3d7528808f055d0d2e72a2e492cc94c5648ce482c52d04a29cdcdad8c8eb5ade6523236520022230543251d2e253d856405bffcbc54105b19c856360003b014013032d4282b2b13366708a951067908240fa6a00a95612cb01a6528d04362e92158e0a40213830510c4546598dd103570b72098482ea3ae1ac2eec1ef2f6565d4f051c6123e3035f8c1a81a2aa8a9b5e60200f6abd263</data>
647 </image>
648 <image>
649 <name>image1</name>
650 <data format="XPM.GZ" length="1226">789cd3d7528808f055d0d2e72a2e492cc94c5648ce482c52d04a29cdcdad8c8eb5ade6523236520022230543251d2e253d856405bffcbc54105b19c856360003b01416a0ac8c6053a2061960aa019b806c0ca61a65a81a7c764125e9a486b07b40d2cacaf8fd0555a4875f0d0620cf1c22dc33d8c2197fda504605e4ab41b5129f7b3001b630c46317f16a88cb17c814add5d02ecdd75a730100b509d263</data>
651 </image>
652 <image>
653 <name>image2</name>
654 <data format="XPM.GZ" length="1226">789cd3d7528808f055d0d2e72a2e492cc94c5648ce482c52d04a29cdcdad8c8eb5ade6523236520022230543251d2e253d856405bffcbc54105b19c856360003b0140130aa863a6a9495f5f49441002c02664030840d53a3ac0c53a40c67c25950bb60d27a70857a08268a7b20164059082695d510e31e62fc85193e7aa8e1832568a1eaf1c6c5e053a34c500d0a18b66a6aadb9001be4d263</data>
655 </image>
656 <image>
657 <name>image3</name>
658 <data format="XPM.GZ" length="1226">789cd3d7528808f055d0d2e72a2e492cc94c5648ce482c52d04a29cdcdad8c8eb5ade6523236520022230543251d2e253d856405bffcbc54105b19c856360003b014125006013d5480a64659198b22543510697445e86a9029daaad183ba87809bb1788c7435d8019a392872cad8d5a002b2d510e777648ad66a08a70d62d2185169152b1819699ec870c634869cf48c1e7cc4aba9b5e602005d86d263</data>
659 </image>
660 <image>
661 <name>image4</name>
412 <data format="XPM.GZ" length="646">789c6dd2c10ac2300c00d07bbf2234b7229d1be245fc04c5a3201e4615f430059d0711ff5ddb2e6bb236ec90eed134cb5a19d8ef36602af5ecdbfeeac05dda0798d3abebde87e3faa374d3807fa0d633a52d38d8de6f679fe33fc776e196f53cd010188256a3600a292882096246517815ca99884606e18044a3a40d91824820924265a7923a2e8bcd05f33db1173e002913175f2a6be6d3294871a2d95fa00e8a94ee017b69d339d90df1e77c57ea072ede6758</data> 662 <data format="XPM.GZ" length="646">789c6dd2c10ac2300c00d07bbf2234b7229d1be245fc04c5a3201e4615f430059d0711ff5ddb2e6bb236ec90eed134cb5a19d8ef36602af5ecdbfeeac05dda0798d3abebde87e3faa374d3807fa0d633a52d38d8de6f679fe33fc776e196f53cd010188256a3600a292882096246517815ca99884606e18044a3a40d91824820924265a7923a2e8bcd05f33db1173e002913175f2a6be6d3294871a2d95fa00e8a94ee017b69d339d90df1e77c57ea072ede6758</data>
413 </image> 663 </image>
414</images> 664</images>
665<connections>
666 <connection>
667 <sender>rotate</sender>
668 <signal>toggled(bool)</signal>
669 <receiver>rotateButtons</receiver>
670 <slot>setEnabled(bool)</slot>
671 </connection>
672</connections>
415<tabstops> 673<tabstops>
416 <tabstop>docname</tabstop> 674 <tabstop>docname</tabstop>
417 <tabstop>preload</tabstop> 675 <tabstop>preload</tabstop>
418 <tabstop>locationCombo</tabstop> 676 <tabstop>locationCombo</tabstop>
419 <tabstop>unlink</tabstop> 677 <tabstop>unlink</tabstop>
420 <tabstop>duplicate</tabstop> 678 <tabstop>duplicate</tabstop>
421 <tabstop>beam</tabstop> 679 <tabstop>beam</tabstop>
422</tabstops> 680</tabstops>
423</UI> 681</UI>