summaryrefslogtreecommitdiff
path: root/library
Unidiff
Diffstat (limited to 'library') (more/less context) (ignore whitespace changes)
-rw-r--r--library/backend/categories.h1
-rw-r--r--library/global.cpp49
-rw-r--r--library/global.h6
-rw-r--r--library/library.pro2
-rw-r--r--library/locationcombo.cpp295
-rw-r--r--library/locationcombo.h88
-rw-r--r--library/qlibrary_unix.cpp4
-rw-r--r--library/timestring.cpp255
-rw-r--r--library/timestring.h94
9 files changed, 683 insertions, 111 deletions
diff --git a/library/backend/categories.h b/library/backend/categories.h
index 91c93e7..6be3bc0 100644
--- a/library/backend/categories.h
+++ b/library/backend/categories.h
@@ -1,161 +1,162 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2000 Trolltech AS. All rights reserved. 2** Copyright (C) 2000 Trolltech AS. All rights reserved.
3** 3**
4** This file is part of Qtopia Environment. 4** This file is part of 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 7** GNU General Public License version 2 as published by the Free
8** Software Foundation and appearing in the file LICENSE.GPL included 8** Software Foundation and appearing in the file LICENSE.GPL included
9** in the packaging of this file. 9** in the packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING
12** THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A 12** THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A
13** PARTICULAR PURPOSE. 13** PARTICULAR PURPOSE.
14** 14**
15** See http://www.trolltech.com/gpl/ for GPL licensing information. 15** See http://www.trolltech.com/gpl/ for GPL licensing information.
16** 16**
17** Contact info@trolltech.com if any conditions of this licensing are 17** Contact info@trolltech.com if any conditions of this licensing are
18** not clear to you. 18** not clear to you.
19** 19**
20**********************************************************************/ 20**********************************************************************/
21 21
22#ifndef QTPALMTOP_CATEGORIES_H 22#ifndef QTPALMTOP_CATEGORIES_H
23#define QTPALMTOP_CATEGORIES_H 23#define QTPALMTOP_CATEGORIES_H
24 24
25#include <qstring.h> 25#include <qstring.h>
26#include <qstringlist.h> 26#include <qstringlist.h>
27#include <qmap.h> 27#include <qmap.h>
28#include <qlistview.h> 28#include <qlistview.h>
29#include <qarray.h> 29#include <qarray.h>
30#include "qpcglobal.h" 30#include "qpcglobal.h"
31#include "palmtopuidgen.h" 31#include "palmtopuidgen.h"
32 32
33class CategoryGroup; 33class CategoryGroup;
34QString categoryFileName();
34 35
35#if defined(QPC_TEMPLATEDLL) 36#if defined(QPC_TEMPLATEDLL)
36// MOC_SKIP_BEGIN 37// MOC_SKIP_BEGIN
37template class QPC_EXPORT QMap<int, QString>; 38template class QPC_EXPORT QMap<int, QString>;
38template class QPC_EXPORT QMap<QString, int>; 39template class QPC_EXPORT QMap<QString, int>;
39template class QPC_EXPORT QMap< QString, CategoryGroup >; 40template class QPC_EXPORT QMap< QString, CategoryGroup >;
40// MOC_SKIP_END 41// MOC_SKIP_END
41#endif 42#endif
42 43
43class QPC_EXPORT CategoryGroup 44class QPC_EXPORT CategoryGroup
44{ 45{
45 friend class Categories; 46 friend class Categories;
46public: 47public:
47 CategoryGroup(): mIdLabelMap(), mLabelIdMap() { } 48 CategoryGroup(): mIdLabelMap(), mLabelIdMap() { }
48 CategoryGroup( const CategoryGroup &c ) : 49 CategoryGroup( const CategoryGroup &c ) :
49 mIdLabelMap( c.mIdLabelMap), mLabelIdMap( c.mLabelIdMap ) { } 50 mIdLabelMap( c.mIdLabelMap), mLabelIdMap( c.mLabelIdMap ) { }
50 51
51 void clear() { mIdLabelMap.clear(); mLabelIdMap.clear(); } 52 void clear() { mIdLabelMap.clear(); mLabelIdMap.clear(); }
52 53
53 int add( const QString &label ); 54 int add( const QString &label );
54 bool add( int uid, const QString &label ); 55 bool add( int uid, const QString &label );
55 56
56 bool remove( const QString &label ); 57 bool remove( const QString &label );
57 bool remove( int uid ); 58 bool remove( int uid );
58 59
59 bool rename( int uid, const QString &newLabel ); 60 bool rename( int uid, const QString &newLabel );
60 bool rename( const QString &oldLabel, const QString &newLabel ); 61 bool rename( const QString &oldLabel, const QString &newLabel );
61 62
62 bool contains(int id) const; 63 bool contains(int id) const;
63 bool contains(const QString &label) const; 64 bool contains(const QString &label) const;
64 65
65 /** Returns label associated with the uid or QString::null if 66 /** Returns label associated with the uid or QString::null if
66 * not found 67 * not found
67 */ 68 */
68 const QString &label(int id) const; 69 const QString &label(int id) const;
69 /** Returns the uid associated with label or 0 if not found */ 70 /** Returns the uid associated with label or 0 if not found */
70 int id(const QString &label) const; 71 int id(const QString &label) const;
71 72
72 /** Returns a sorted list of labels */ 73 /** Returns a sorted list of labels */
73 QStringList labels() const; 74 QStringList labels() const;
74 75
75 QStringList labels( const QArray<int> &catids ) const; 76 QStringList labels( const QArray<int> &catids ) const;
76 77
77 const QMap<int, QString> &idMap() const { return mIdLabelMap; } 78 const QMap<int, QString> &idMap() const { return mIdLabelMap; }
78 79
79private: 80private:
80 void insert( int uid, const QString &label ); 81 void insert( int uid, const QString &label );
81 QMap<int, QString> mIdLabelMap; 82 QMap<int, QString> mIdLabelMap;
82 QMap<QString, int> mLabelIdMap; 83 QMap<QString, int> mLabelIdMap;
83 84
84 static Qtopia::UidGen &uidGen() { return sUidGen; } 85 static Qtopia::UidGen &uidGen() { return sUidGen; }
85 static Qtopia::UidGen sUidGen; 86 static Qtopia::UidGen sUidGen;
86}; 87};
87 88
88/* Map from application name to categories */ 89/* Map from application name to categories */
89class QPC_EXPORT Categories : public QObject 90class QPC_EXPORT Categories : public QObject
90{ 91{
91 Q_OBJECT 92 Q_OBJECT
92public: 93public:
93 Categories( QObject *parent=0, const char *name = 0 ) 94 Categories( QObject *parent=0, const char *name = 0 )
94 : QObject( parent, name ), mGlobalCats(), mAppCats() { } 95 : QObject( parent, name ), mGlobalCats(), mAppCats() { }
95 Categories( const Categories &copyFrom ) : QObject( copyFrom.parent() ), 96 Categories( const Categories &copyFrom ) : QObject( copyFrom.parent() ),
96 mGlobalCats( copyFrom.mGlobalCats ), 97 mGlobalCats( copyFrom.mGlobalCats ),
97 mAppCats( copyFrom.mAppCats ) { } 98 mAppCats( copyFrom.mAppCats ) { }
98 virtual ~Categories() { } 99 virtual ~Categories() { }
99 100
100 Categories &operator= ( const Categories &c ) 101 Categories &operator= ( const Categories &c )
101{ mAppCats = c.mAppCats; mGlobalCats = c.mGlobalCats; return *this; } 102{ mAppCats = c.mAppCats; mGlobalCats = c.mGlobalCats; return *this; }
102 103
103 void clear(); 104 void clear();
104 105
105 /** Add the category name as long as it doesn't already exist 106 /** Add the category name as long as it doesn't already exist
106 * locally or globally. Return UID if added, 0 if conflicts 107 * locally or globally. Return UID if added, 0 if conflicts
107 * (error). 108 * (error).
108 */ 109 */
109 int addCategory( const QString &appname, const QString &catname); 110 int addCategory( const QString &appname, const QString &catname);
110 /** Add the category name as long as it doesn't already exist 111 /** Add the category name as long as it doesn't already exist
111 * locally or globally. Return UID if added, 0 if conflicts 112 * locally or globally. Return UID if added, 0 if conflicts
112 * (error). 113 * (error).
113 */ 114 */
114 int addCategory( const QString &appname, const QString &catname, int uid); 115 int addCategory( const QString &appname, const QString &catname, int uid);
115 /** Add the global category just checking that it doesn't 116 /** Add the global category just checking that it doesn't
116 * already exist globally. Return UID if added, 0 if conflicts. 117 * already exist globally. Return UID if added, 0 if conflicts.
117 */ 118 */
118 int addGlobalCategory( const QString &catname ); 119 int addGlobalCategory( const QString &catname );
119 /** Add the global category just checking that it doesn't 120 /** Add the global category just checking that it doesn't
120 * already exist globally. Return UID if added, 0 if conflicts. 121 * already exist globally. Return UID if added, 0 if conflicts.
121 */ 122 */
122 int addGlobalCategory( const QString &catname, int uid ); 123 int addGlobalCategory( const QString &catname, int uid );
123 /** Removes the category from the application; if it is not found 124 /** Removes the category from the application; if it is not found
124 * in the application, then it removes it from the global list 125 * in the application, then it removes it from the global list
125 */ 126 */
126 bool removeCategory( const QString &appName, const QString &catName, 127 bool removeCategory( const QString &appName, const QString &catName,
127 bool checkGlobal = TRUE); 128 bool checkGlobal = TRUE);
128 bool removeCategory( const QString &appName, int uid ); 129 bool removeCategory( const QString &appName, int uid );
129 bool removeGlobalCategory( const QString &catName ); 130 bool removeGlobalCategory( const QString &catName );
130 bool removeGlobalCategory( int uid ); 131 bool removeGlobalCategory( int uid );
131 132
132 QArray<int> ids( const QString &app, const QStringList &labels) const; 133 QArray<int> ids( const QString &app, const QStringList &labels) const;
133 134
134 /** Returns the id associated with the app */ 135 /** Returns the id associated with the app */
135 int id( const QString &app, const QString &cat ) const; 136 int id( const QString &app, const QString &cat ) const;
136 /** Returns the label associated with the id */ 137 /** Returns the label associated with the id */
137 QString label( const QString &app, int id ) const; 138 QString label( const QString &app, int id ) const;
138 139
139 enum ExtraLabels { NoExtra, AllUnfiled, AllLabel, UnfiledLabel }; 140 enum ExtraLabels { NoExtra, AllUnfiled, AllLabel, UnfiledLabel };
140 /** Returns the sorted list of all categories that are 141 /** Returns the sorted list of all categories that are
141 * associated with the app. 142 * associated with the app.
142 * If includeGlobal parameter is TRUE then the returned 143 * If includeGlobal parameter is TRUE then the returned
143 * categories will include the global category items. 144 * categories will include the global category items.
144 * If extra = NoExtra, then 145 * If extra = NoExtra, then
145 * If extra = AllUnfiled, then All and Unfiled will be prepended to 146 * If extra = AllUnfiled, then All and Unfiled will be prepended to
146 * the list 147 * the list
147 * If extra = AllLabel, then All is prepended 148 * If extra = AllLabel, then All is prepended
148 * If extra = UnfiledLabel, then Unfiled is prepended 149 * If extra = UnfiledLabel, then Unfiled is prepended
149 */ 150 */
150 QStringList labels( const QString &app, 151 QStringList labels( const QString &app,
151 bool includeGlobal = TRUE, 152 bool includeGlobal = TRUE,
152 ExtraLabels extra = NoExtra ) const; 153 ExtraLabels extra = NoExtra ) const;
153 154
154 QStringList labels( const QString &app, 155 QStringList labels( const QString &app,
155 const QArray<int> &catids ) const; 156 const QArray<int> &catids ) const;
156 157
157 enum DisplaySingle { ShowMulti, ShowAll, ShowFirst }; 158 enum DisplaySingle { ShowMulti, ShowAll, ShowFirst };
158 159
159 /** Returns a single string associated with the cat ids for display in 160 /** Returns a single string associated with the cat ids for display in
160 * a combobox or any area that requires one string. If catids are empty 161 * a combobox or any area that requires one string. If catids are empty
161 * then "Unfiled" will be returned. If multiple categories are assigned 162 * then "Unfiled" will be returned. If multiple categories are assigned
diff --git a/library/global.cpp b/library/global.cpp
index ec87555..f7a0767 100644
--- a/library/global.cpp
+++ b/library/global.cpp
@@ -683,130 +683,179 @@ void Global::execute( const QString &c, const QString& document )
683QString Global::shellQuote(const QString& s) 683QString Global::shellQuote(const QString& s)
684{ 684{
685 QString r="\""; 685 QString r="\"";
686 for (int i=0; i<(int)s.length(); i++) { 686 for (int i=0; i<(int)s.length(); i++) {
687 char c = s[i].latin1(); 687 char c = s[i].latin1();
688 switch (c) { 688 switch (c) {
689 case '\\': case '"': case '$': 689 case '\\': case '"': case '$':
690 r+="\\"; 690 r+="\\";
691 } 691 }
692 r += s[i]; 692 r += s[i];
693 } 693 }
694 r += "\""; 694 r += "\"";
695 return r; 695 return r;
696} 696}
697 697
698/*! 698/*!
699 Returns the string \a s with the characters '\' and '"' quoted by a 699 Returns the string \a s with the characters '\' and '"' quoted by a
700 preceeding '\'. 700 preceeding '\'.
701 701
702 \sa shellQuote() 702 \sa shellQuote()
703*/ 703*/
704QString Global::stringQuote(const QString& s) 704QString Global::stringQuote(const QString& s)
705{ 705{
706 QString r="\""; 706 QString r="\"";
707 for (int i=0; i<(int)s.length(); i++) { 707 for (int i=0; i<(int)s.length(); i++) {
708 char c = s[i].latin1(); 708 char c = s[i].latin1();
709 switch (c) { 709 switch (c) {
710 case '\\': case '"': 710 case '\\': case '"':
711 r+="\\"; 711 r+="\\";
712 } 712 }
713 r += s[i]; 713 r += s[i];
714 } 714 }
715 r += "\""; 715 r += "\"";
716 return r; 716 return r;
717} 717}
718 718
719/*! 719/*!
720 Finds all documents on the system's document directories which 720 Finds all documents on the system's document directories which
721 match the filter \a mimefilter, and appends the resulting DocLnk 721 match the filter \a mimefilter, and appends the resulting DocLnk
722 objects to \a folder. 722 objects to \a folder.
723*/ 723*/
724void Global::findDocuments(DocLnkSet* folder, const QString &mimefilter) 724void Global::findDocuments(DocLnkSet* folder, const QString &mimefilter)
725{ 725{
726 QString homedocs = QString(getenv("HOME")) + "/Documents"; 726 QString homedocs = QString(getenv("HOME")) + "/Documents";
727 DocLnkSet d(homedocs,mimefilter); 727 DocLnkSet d(homedocs,mimefilter);
728 folder->appendFrom(d); 728 folder->appendFrom(d);
729 /** let's do intellegint way of searching these files 729 /** let's do intellegint way of searching these files
730 * a) the user don't want to check mediums global 730 * a) the user don't want to check mediums global
731 * b) the user wants to check but use the global options for it 731 * b) the user wants to check but use the global options for it
732 * c) the user wants to check it but not this medium 732 * c) the user wants to check it but not this medium
733 * d) the user wants to check and this medium as well 733 * d) the user wants to check and this medium as well
734 * 734 *
735 * In all cases we need to apply a different mimefilter to 735 * In all cases we need to apply a different mimefilter to
736 * the medium. 736 * the medium.
737 * a) mimefilter.isEmpty() we need to apply the responding filter 737 * a) mimefilter.isEmpty() we need to apply the responding filter
738 * either the global or the one on the medium 738 * either the global or the one on the medium
739 * 739 *
740 * b) mimefilter is set to an application we need to find out if the 740 * b) mimefilter is set to an application we need to find out if the
741 * mimetypes are included in the mime mask of the medium 741 * mimetypes are included in the mime mask of the medium
742 */ 742 */
743 StorageInfo storage; 743 StorageInfo storage;
744 const QList<FileSystem> &fs = storage.fileSystems(); 744 const QList<FileSystem> &fs = storage.fileSystems();
745 QListIterator<FileSystem> it ( fs ); 745 QListIterator<FileSystem> it ( fs );
746 for ( ; it.current(); ++it ) { 746 for ( ; it.current(); ++it ) {
747 if ( (*it)->isRemovable() ) { // let's find out if we should search on it 747 if ( (*it)->isRemovable() ) { // let's find out if we should search on it
748 // this is a candidate look at the cf and see if we should search on it 748 // this is a candidate look at the cf and see if we should search on it
749 QString path = (*it)->path(); 749 QString path = (*it)->path();
750 Config conf((*it)->path() + "/.opiestorage.cf", Config::File ); 750 Config conf((*it)->path() + "/.opiestorage.cf", Config::File );
751 conf.setGroup("main"); 751 conf.setGroup("main");
752 if (!conf.readBoolEntry("check",true)) { 752 if (!conf.readBoolEntry("check",true)) {
753 continue; 753 continue;
754 } 754 }
755 conf.setGroup("subdirs"); 755 conf.setGroup("subdirs");
756 if (conf.readBoolEntry("wholemedia",true)) { 756 if (conf.readBoolEntry("wholemedia",true)) {
757 DocLnkSet ide( path,mimefilter); 757 DocLnkSet ide( path,mimefilter);
758 folder->appendFrom(ide); 758 folder->appendFrom(ide);
759 } else { 759 } else {
760 QStringList subDirs = conf.readListEntry("subdirs",':'); 760 QStringList subDirs = conf.readListEntry("subdirs",':');
761 if (subDirs.isEmpty()) { 761 if (subDirs.isEmpty()) {
762 subDirs.append("Documents"); 762 subDirs.append("Documents");
763 } 763 }
764 for (unsigned c = 0; c < subDirs.count();++c) { 764 for (unsigned c = 0; c < subDirs.count();++c) {
765 DocLnkSet ide( path+"/"+subDirs[c], mimefilter ); 765 DocLnkSet ide( path+"/"+subDirs[c], mimefilter );
766 folder->appendFrom(ide); 766 folder->appendFrom(ide);
767 } 767 }
768 } 768 }
769 } else if ( (*it)->disk() == "/dev/mtdblock6" || (*it)->disk() == "tmpfs" ) { 769 } else if ( (*it)->disk() == "/dev/mtdblock6" || (*it)->disk() == "tmpfs" ) {
770 QString path = (*it)->path() + "/Documents"; 770 QString path = (*it)->path() + "/Documents";
771 DocLnkSet ide( path, mimefilter ); 771 DocLnkSet ide( path, mimefilter );
772 folder->appendFrom(ide); 772 folder->appendFrom(ide);
773 } 773 }
774 } 774 }
775} 775}
776 776
777QStringList Global::languageList() 777QStringList Global::languageList()
778{ 778{
779 QString lang = getenv("LANG"); 779 QString lang = getenv("LANG");
780 QStringList langs; 780 QStringList langs;
781 langs.append(lang); 781 langs.append(lang);
782 int i = lang.find("."); 782 int i = lang.find(".");
783 if ( i > 0 ) 783 if ( i > 0 )
784 lang = lang.left( i ); 784 lang = lang.left( i );
785 i = lang.find( "_" ); 785 i = lang.find( "_" );
786 if ( i > 0 ) 786 if ( i > 0 )
787 langs.append(lang.left(i)); 787 langs.append(lang.left(i));
788 return langs; 788 return langs;
789} 789}
790 790
791QStringList Global::helpPath() 791QStringList Global::helpPath()
792{ 792{
793 QString qpeDir = QPEApplication::qpeDir(); 793 QString qpeDir = QPEApplication::qpeDir();
794 QStringList path; 794 QStringList path;
795 QStringList langs = Global::languageList(); 795 QStringList langs = Global::languageList();
796 for (QStringList::ConstIterator it = langs.fromLast(); it!=langs.end(); --it) { 796 for (QStringList::ConstIterator it = langs.fromLast(); it!=langs.end(); --it) {
797 QString lang = *it; 797 QString lang = *it;
798 if ( !lang.isEmpty() ) 798 if ( !lang.isEmpty() )
799 path += qpeDir + "/help/" + lang + "/html"; 799 path += qpeDir + "/help/" + lang + "/html";
800 } 800 }
801 path += qpeDir + "/pics"; 801 path += qpeDir + "/pics";
802 path += qpeDir + "/help/html"; 802 path += qpeDir + "/help/html";
803 /* we even put english into the en dir so try it as fallback as well for opie */ 803 /* we even put english into the en dir so try it as fallback as well for opie */
804 path += qpeDir + "/help/en/html"; 804 path += qpeDir + "/help/en/html";
805 path += qpeDir + "/docs"; 805 path += qpeDir + "/docs";
806 806
807 807
808 return path; 808 return path;
809} 809}
810 810
811/*!
812 \internal
813 Truncate file to size specified
814 \a f must be an open file
815 \a size must be a positive value
816 */
817bool Global::truncateFile(QFile &f, int size){
818 if (!f.isOpen())
819 return FALSE;
820
821 return ::ftruncate(f.handle(), size) != -1;
822}
823
824
825
826
827// #if defined(Q_OS_UNIX) && defined(Q_WS_QWS)
828// extern int qws_display_id;
829// #endif
830
831/*!
832 /internal
833 Returns the default system path for storing temporary files.
834 Note: This does not it ensure that the provided directory exists
835*/
836QString Global::tempDir()
837{
838 QString result;
839#ifdef Q_OS_UNIX
840#ifdef Q_WS_QWS
841 result = QString("/tmp/qtopia-%1/").arg(QString::number(qws_display_id));
842#else
843 result="/tmp/";
844#endif
845#else
846 if (getenv("TEMP"))
847 result = getenv("TEMP");
848 else
849 result = getenv("TMP");
850
851 if (result[(int)result.length() - 1] != QDir::separator())
852 result.append(QDir::separator());
853#endif
854
855 return result;
856}
857
858//#endif
859
811 860
812#include "global.moc" 861#include "global.moc"
diff --git a/library/global.h b/library/global.h
index 1136b12..f32c498 100644
--- a/library/global.h
+++ b/library/global.h
@@ -1,90 +1,94 @@
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#ifndef GLOBAL_H 20#ifndef GLOBAL_H
21#define GLOBAL_H 21#define GLOBAL_H
22 22
23#include <qstringlist.h> 23#include <qstringlist.h>
24#include <qguardedptr.h> 24#include <qguardedptr.h>
25class QDawg; 25class QDawg;
26class QLabel; 26class QLabel;
27class QWidget; 27class QWidget;
28class AppLnk; 28class AppLnk;
29class DocLnkSet; 29class DocLnkSet;
30 30class QFile;
31class Global 31class Global
32{ 32{
33public: 33public:
34 Global(); 34 Global();
35 35
36 // Dictionaries 36 // Dictionaries
37 static const QDawg& fixedDawg(); 37 static const QDawg& fixedDawg();
38 static const QDawg& addedDawg(); 38 static const QDawg& addedDawg();
39 static const QDawg& dawg(const QString& name); 39 static const QDawg& dawg(const QString& name);
40 40
41 static void addWords(const QStringList& word); 41 static void addWords(const QStringList& word);
42 static void addWords(const QString& dictname, const QStringList& word); 42 static void addWords(const QString& dictname, const QStringList& word);
43 // static void removeWords(const QStringList& word); -- if someone wants it 43 // static void removeWords(const QStringList& word); -- if someone wants it
44 44
45 static void createDocDir(); 45 static void createDocDir();
46 46
47 static void findDocuments(DocLnkSet* folder, const QString &mimefilter=QString::null); 47 static void findDocuments(DocLnkSet* folder, const QString &mimefilter=QString::null);
48 48
49 static QString applicationFileName(const QString& appname, const QString& filename); 49 static QString applicationFileName(const QString& appname, const QString& filename);
50 50
51 struct Command { 51 struct Command {
52 const char *file; 52 const char *file;
53 QWidget *(*func)( bool ); 53 QWidget *(*func)( bool );
54 bool maximized; 54 bool maximized;
55 bool documentary; 55 bool documentary;
56 }; 56 };
57 static void setBuiltinCommands( Command* ); 57 static void setBuiltinCommands( Command* );
58 58
59 static void execute( const QString &exec, const QString &document=QString::null ); 59 static void execute( const QString &exec, const QString &document=QString::null );
60 static void setDocument( QWidget* receiver, const QString& document ); 60 static void setDocument( QWidget* receiver, const QString& document );
61 static bool terminateBuiltin( const QString& ); 61 static bool terminateBuiltin( const QString& );
62 static void terminate( const AppLnk* ); 62 static void terminate( const AppLnk* );
63 63
64 static bool isBuiltinCommand( const QString &name ); 64 static bool isBuiltinCommand( const QString &name );
65 65
66 // system messaging 66 // system messaging
67 static void applyStyle(); 67 static void applyStyle();
68 static void statusMessage(const QString&); 68 static void statusMessage(const QString&);
69 static QWidget *shutdown( bool = FALSE ); 69 static QWidget *shutdown( bool = FALSE );
70 static QWidget *restart( bool = FALSE ); 70 static QWidget *restart( bool = FALSE );
71 static void hideInputMethod(); 71 static void hideInputMethod();
72 static void showInputMethod(); 72 static void showInputMethod();
73 73
74 static void writeHWClock(); 74 static void writeHWClock();
75 75
76 static QString shellQuote(const QString& s); 76 static QString shellQuote(const QString& s);
77 static QString stringQuote(const QString& s); 77 static QString stringQuote(const QString& s);
78 78
79#ifdef QTOPIA_INTERNAL_LANGLIST 79#ifdef QTOPIA_INTERNAL_LANGLIST
80 static QStringList languageList(); 80 static QStringList languageList();
81 static QStringList helpPath(); 81 static QStringList helpPath();
82#endif 82#endif
83//#ifdef QTOPIA_INTERNAL_FILEOPERATIONS
84 static bool truncateFile(QFile &f, int size);
85 static QString tempDir( );
86//#endif
83 87
84private: 88private:
85 static void invoke( const QString &exec); 89 static void invoke( const QString &exec);
86 static Command* builtin; 90 static Command* builtin;
87 static QGuardedPtr<QWidget> *running; 91 static QGuardedPtr<QWidget> *running;
88}; 92};
89 93
90#endif 94#endif
diff --git a/library/library.pro b/library/library.pro
index 7143454..4142529 100644
--- a/library/library.pro
+++ b/library/library.pro
@@ -1,141 +1,143 @@
1 TEMPLATE= lib 1 TEMPLATE= lib
2 #CONFIG += qt warn_on release 2 #CONFIG += qt warn_on release
3 CONFIG += qt warn_on debug 3 CONFIG += qt warn_on debug
4 HEADERS= calendar.h \ 4 HEADERS= calendar.h \
5 global.h \ 5 global.h \
6 resource.h \ 6 resource.h \
7 xmlreader.h \ 7 xmlreader.h \
8 mimetype.h \ 8 mimetype.h \
9 menubutton.h \ 9 menubutton.h \
10 network.h \ 10 network.h \
11 networkinterface.h \ 11 networkinterface.h \
12 filemanager.h \ 12 filemanager.h \
13 fontmanager.h \ 13 fontmanager.h \
14 qdawg.h \ 14 qdawg.h \
15 datebookmonth.h \ 15 datebookmonth.h \
16 fileselector.h \ 16 fileselector.h \
17 fileselector_p.h \ 17 fileselector_p.h \
18 imageedit.h \ 18 imageedit.h \
19 qcopenvelope_qws.h \ 19 qcopenvelope_qws.h \
20 qpedecoration_qws.h \ 20 qpedecoration_qws.h \
21 qpeapplication.h \ 21 qpeapplication.h \
22 qpestyle.h \ 22 qpestyle.h \
23 qpedialog.h \ 23 qpedialog.h \
24 lightstyle.h \ 24 lightstyle.h \
25 config.h \ 25 config.h \
26 applnk.h \ 26 applnk.h \
27 sound.h \ 27 sound.h \
28 tzselect.h \ 28 tzselect.h \
29 qmath.h \ 29 qmath.h \
30 datebookdb.h \ 30 datebookdb.h \
31 alarmserver.h \ 31 alarmserver.h \
32 process.h \ 32 process.h \
33 password.h \ 33 password.h \
34 timestring.h \ 34 timestring.h \
35 fontfactoryinterface.h \ 35 fontfactoryinterface.h \
36 fontdatabase.h \ 36 fontdatabase.h \
37 power.h \ 37 power.h \
38 storage.h \ 38 storage.h \
39 qpemessagebox.h \ 39 qpemessagebox.h \
40 timeconversion.h \ 40 timeconversion.h \
41 qpedebug.h \ 41 qpedebug.h \
42 qpemenubar.h \ 42 qpemenubar.h \
43 qpetoolbar.h \ 43 qpetoolbar.h \
44 backend/categories.h \ 44 backend/categories.h \
45 stringutil.h \ 45 stringutil.h \
46 backend/palmtoprecord.h \ 46 backend/palmtoprecord.h \
47 backend/task.h \ 47 backend/task.h \
48 backend/event.h \ 48 backend/event.h \
49 backend/contact.h\ 49 backend/contact.h\
50 categorymenu.h \ 50 categorymenu.h \
51 categoryedit_p.h \ 51 categoryedit_p.h \
52 categoryselect.h \ 52 categoryselect.h \
53 categorywidget.h \ 53 categorywidget.h \
54 ir.h \ 54 ir.h \
55 backend/vobject_p.h \ 55 backend/vobject_p.h \
56 findwidget_p.h \ 56 findwidget_p.h \
57 finddialog.h \ 57 finddialog.h \
58 lnkproperties.h \ 58 lnkproperties.h \
59 windowdecorationinterface.h \ 59 windowdecorationinterface.h \
60 textcodecinterface.h \ 60 textcodecinterface.h \
61 imagecodecinterface.h \ 61 imagecodecinterface.h \
62 locationcombo.h \
62 qpeglobal.h 63 qpeglobal.h
63 64
64 SOURCES= calendar.cpp \ 65 SOURCES= calendar.cpp \
65 global.cpp \ 66 global.cpp \
66 xmlreader.cpp \ 67 xmlreader.cpp \
67 mimetype.cpp \ 68 mimetype.cpp \
68 menubutton.cpp \ 69 menubutton.cpp \
69 network.cpp \ 70 network.cpp \
70 networkinterface.cpp \ 71 networkinterface.cpp \
71 filemanager.cpp \ 72 filemanager.cpp \
72 fontmanager.cpp \ 73 fontmanager.cpp \
73 qdawg.cpp \ 74 qdawg.cpp \
74 datebookmonth.cpp \ 75 datebookmonth.cpp \
75 fileselector.cpp \ 76 fileselector.cpp \
76 imageedit.cpp \ 77 imageedit.cpp \
77 resource.cpp \ 78 resource.cpp \
78 qpedecoration_qws.cpp \ 79 qpedecoration_qws.cpp \
79 qcopenvelope_qws.cpp \ 80 qcopenvelope_qws.cpp \
80 qpeapplication.cpp \ 81 qpeapplication.cpp \
81 qpestyle.cpp \ 82 qpestyle.cpp \
82 qpedialog.cpp \ 83 qpedialog.cpp \
83 lightstyle.cpp \ 84 lightstyle.cpp \
84 config.cpp \ 85 config.cpp \
85 applnk.cpp \ 86 applnk.cpp \
86 sound.cpp \ 87 sound.cpp \
87 tzselect.cpp \ 88 tzselect.cpp \
88 qmath.c \ 89 qmath.c \
89 datebookdb.cpp \ 90 datebookdb.cpp \
90 alarmserver.cpp \ 91 alarmserver.cpp \
91 password.cpp \ 92 password.cpp \
92 process.cpp \ 93 process.cpp \
93 process_unix.cpp \ 94 process_unix.cpp \
94 timestring.cpp \ 95 timestring.cpp \
95 fontdatabase.cpp \ 96 fontdatabase.cpp \
96 power.cpp \ 97 power.cpp \
97 storage.cpp \ 98 storage.cpp \
98 qpemessagebox.cpp \ 99 qpemessagebox.cpp \
99 backend/timeconversion.cpp \ 100 backend/timeconversion.cpp \
100 qpedebug.cpp \ 101 qpedebug.cpp \
101 qpemenubar.cpp \ 102 qpemenubar.cpp \
102 qpetoolbar.cpp \ 103 qpetoolbar.cpp \
103 backend/categories.cpp \ 104 backend/categories.cpp \
104 backend/stringutil.cpp \ 105 backend/stringutil.cpp \
105 backend/palmtoprecord.cpp \ 106 backend/palmtoprecord.cpp \
106 backend/task.cpp \ 107 backend/task.cpp \
107 backend/event.cpp \ 108 backend/event.cpp \
108 backend/contact.cpp \ 109 backend/contact.cpp \
109 categorymenu.cpp \ 110 categorymenu.cpp \
110 categoryedit_p.cpp \ 111 categoryedit_p.cpp \
111 categoryselect.cpp \ 112 categoryselect.cpp \
112 categorywidget.cpp \ 113 categorywidget.cpp \
113 ir.cpp \ 114 ir.cpp \
114 backend/vcc_yacc.cpp \ 115 backend/vcc_yacc.cpp \
115 backend/vobject.cpp \ 116 backend/vobject.cpp \
116 findwidget_p.cpp \ 117 findwidget_p.cpp \
117 finddialog.cpp \ 118 finddialog.cpp \
118 lnkproperties.cpp \ 119 lnkproperties.cpp \
120 locationcombo.cpp \
119 widget_showing.cpp 121 widget_showing.cpp
120 122
121 123
122 124
123# Qt 3 compatibility 125# Qt 3 compatibility
124HEADERS += quuid.h qcom.h qlibrary.h qlibrary_p.h 126HEADERS += quuid.h qcom.h qlibrary.h qlibrary_p.h
125SOURCES += quuid.cpp qlibrary.cpp qlibrary_unix.cpp 127SOURCES += quuid.cpp qlibrary.cpp qlibrary_unix.cpp
126 128
127DEFINES += OPIE_INTERNAL_LIBRARY_BUILD 129DEFINES += OPIE_INTERNAL_LIBRARY_BUILD
128INCLUDEPATH += $(OPIEDIR)/include backend 130INCLUDEPATH += $(OPIEDIR)/include backend
129 LIBS += -ldl -lcrypt -lm 131 LIBS += -ldl -lcrypt -lm
130INTERFACES = passwordbase_p.ui categoryeditbase_p.ui findwidgetbase_p.ui lnkpropertiesbase_p.ui 132INTERFACES = passwordbase_p.ui categoryeditbase_p.ui findwidgetbase_p.ui lnkpropertiesbase_p.ui
131 TARGET = qpe 133 TARGET = qpe
132 DESTDIR = $(OPIEDIR)/lib$(PROJMAK) 134 DESTDIR = $(OPIEDIR)/lib$(PROJMAK)
133 VERSION = 1.5.0.1 135 VERSION = 1.5.0.1
134 136
135include( $(OPIEDIR)/include.pro ) 137include( $(OPIEDIR)/include.pro )
136 138
137contains( CONFIG, LIBQPE_WITHROHFEEDBACK ){ 139contains( CONFIG, LIBQPE_WITHROHFEEDBACK ){
138 DEFINES += OPIE_WITHROHFEEDBACK 140 DEFINES += OPIE_WITHROHFEEDBACK
139 SOURCES += backend/rohfeedback.cpp 141 SOURCES += backend/rohfeedback.cpp
140 HEADERS += backend/rohfeedback.h 142 HEADERS += backend/rohfeedback.h
141} 143}
diff --git a/library/locationcombo.cpp b/library/locationcombo.cpp
new file mode 100644
index 0000000..31429f5
--- a/dev/null
+++ b/library/locationcombo.cpp
@@ -0,0 +1,295 @@
1/**********************************************************************
2** Copyright (C) 2000-2006 Trolltech AS. All rights reserved.
3**
4** This file is part of the Qtopia Environment.
5**
6** This program is free software; you can redistribute it and/or modify it
7** under the terms of the GNU General Public License as published by the
8** Free Software Foundation; either version 2 of the License, or (at your
9** option) any later version.
10**
11** A copy of the GNU GPL license version 2 is included in this package as
12** LICENSE.GPL.
13**
14** This program is distributed in the hope that it will be useful, but
15** WITHOUT ANY WARRANTY; without even the implied warranty of
16** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
17** See the GNU General Public License for more details.
18**
19** In addition, as a special exception Trolltech gives permission to link
20** the code of this program with Qtopia applications copyrighted, developed
21** and distributed by Trolltech under the terms of the Qtopia Personal Use
22** License Agreement. You must comply with the GNU General Public License
23** in all respects for all of the code used other than the applications
24** licensed under the Qtopia Personal Use License Agreement. If you modify
25** this file, you may extend this exception to your version of the file,
26** but you are not obligated to do so. If you do not wish to do so, delete
27** this exception statement from your version.
28**
29** See http://www.trolltech.com/gpl/ for GPL licensing information.
30**
31** Contact info@trolltech.com if any conditions of this licensing are
32** not clear to you.
33**
34**********************************************************************/
35
36#include "locationcombo.h"
37
38#include <qpe/ir.h>
39#include <qpe/applnk.h>
40#include <qpe/global.h>
41#include <qpe/categorywidget.h>
42#include <qpe/categoryselect.h>
43#ifdef QWS
44#include <qpe/qcopenvelope_qws.h>
45#endif
46#include <qpe/filemanager.h>
47#include <qpe/config.h>
48#include <qpe/storage.h>
49#include <qpe/global.h>
50#include <qtopia/qpemessagebox.h>
51
52#include <qlineedit.h>
53#include <qtoolbutton.h>
54#include <qpushbutton.h>
55#include <qgroupbox.h>
56#include <qcheckbox.h>
57#include <qlabel.h>
58#include <qlayout.h>
59#include <qfile.h>
60#include <qdir.h>
61#include <qfileinfo.h>
62#include <qmessagebox.h>
63#include <qsize.h>
64#include <qcombobox.h>
65#include <qregexp.h>
66
67#include <qradiobutton.h>
68#include <qlayout.h>
69
70#include <stdlib.h>
71
72/*!
73 \class LocationCombo locationcombo.h
74 \brief The LocationCombo class displays a list of available storage
75 locations.
76
77 First availability: Qtopia 1.6
78
79 \ingroup qtopiaemb
80 \sa DocPropertiesDialog
81 */
82
83
84class LocationComboPrivate
85{
86public:
87 LocationComboPrivate() : homeLocation(-1), fileSize(0), listEmpty(TRUE) {}
88 QString originalPath;
89 int homeLocation;
90 int fileSize;
91 bool listEmpty;
92};
93
94/*!
95 Constructs a LocationCombo with parent \a parent and name \a name.
96 */
97LocationCombo::LocationCombo( QWidget *parent, const char *name )
98 : QComboBox( FALSE, parent, name )
99{
100 storage = new StorageInfo;
101 d = new LocationComboPrivate;
102 setLocation( 0 );
103 connect( this, SIGNAL(activated(int)), this, SIGNAL(newPath()) );
104 connect( storage, SIGNAL(disksChanged()), this, SLOT(updatePaths()) );
105}
106
107/*!
108 Constructs a LocationCombo with parent \a parent and name \a name.
109 \a lnk is pointer to an existing AppLnk.
110 */
111LocationCombo::LocationCombo( const AppLnk * lnk, QWidget *parent, const char *name )
112 : QComboBox( FALSE, parent, name )
113{
114 storage = new StorageInfo;
115 d = new LocationComboPrivate;
116 setLocation(lnk);
117 connect( this, SIGNAL(activated(int)), this, SIGNAL(newPath()) );
118 connect( storage, SIGNAL(disksChanged()), this, SLOT(updatePaths()) );
119}
120
121/*!
122 Destroys the widget.
123 */
124LocationCombo::~LocationCombo()
125{
126 delete storage;
127 delete d;
128}
129
130/*!
131 Sets the display of the LocationCombo to the location associated with the
132 AppLnk \a lnk.
133 */
134void LocationCombo::setLocation( const AppLnk * lnk )
135{
136 // NB: setLocation(const QString) assumes only lnk->file() is used.
137
138 if ( lnk ) {
139 QFileInfo fi( lnk->file() );
140 d->fileSize = fi.size();
141 const FileSystem *fs = storage->fileSystemOf( lnk->file() );
142 d->originalPath = fs ? fs->path() : QString::null;
143 } else {
144 d->fileSize = 0;
145 d->originalPath = QString::null;
146 }
147
148 setupCombo();
149
150 int currentLocation = -1;
151 if ( lnk ) {
152 int n = locations.count();
153 for ( int i = 0; i < n; i++ ) {
154 if ( lnk->file().contains( locations[i] ) )
155 currentLocation = i;
156 }
157 }
158 if ( currentLocation == -1 )
159 currentLocation = 0; //default to the first one
160
161 setCurrentItem( currentLocation );
162}
163
164/*!
165 \internal
166*/
167void LocationCombo::setupCombo()
168{
169 clear();
170 locations.clear();
171
172 const QList<FileSystem> &fs = storage->fileSystems();
173 QListIterator<FileSystem> it ( fs );
174 QString s;
175 QString homeDir = QDir::homeDirPath();
176 QString homeFs;
177 QString homeFsPath;
178 int index = 0;
179 for ( ; it.current(); ++it ) {
180 // we add 10k to the file size so we are sure we can also save the desktop file
181 if ( !d->fileSize || (*it)->path() == d->originalPath ||
182 (ulong)(*it)->availBlocks() * (ulong)(*it)->blockSize()
183 > (ulong)d->fileSize + 10000 )
184 {
185 if ( (*it)->isRemovable() ) {
186 insertItem( (*it)->name(), index );
187 locations.append( (*it)->path() );
188 index++;
189 } else if ( homeDir.contains( (*it)->path() ) &&
190 (*it)->path().length() > homeFsPath.length() ) {
191 homeFs = (*it)->name();
192 homeFsPath = (*it)->path();
193 }
194 }
195 }
196
197 // $HOME is *somewhere*, but not shown in Storage::fileSystems(),
198 // eg. because it's mounted in some unexpected way.
199 if ( homeFsPath.isEmpty() ) {
200 homeFs = StorageInfo::tr("Internal Storage");
201 homeFsPath = homeDir;
202 }
203
204 if ( !homeFsPath.isEmpty() ) {
205 d->homeLocation = 0;
206 insertItem( homeFs, d->homeLocation );
207 locations.prepend( homeDir );
208 } else {
209 d->homeLocation = -1;
210 }
211
212 d->listEmpty = locations.count() == 0;
213 if ( d->listEmpty ) {
214 insertItem( tr("No FileSystems Available!"), 0 );
215 locations.append( "" );
216 }
217}
218
219/*!
220 \internal
221 */
222void LocationCombo::updatePaths()
223{
224 QString oldPath = locations[currentItem()];
225
226 setupCombo();
227
228 int currentLocation = 0;
229 int n = locations.count();
230 for ( int i = 0; i < n; i++ ) {
231 if ( oldPath == locations[i] ) {
232 currentLocation = i;
233 }
234 }
235 setCurrentItem( currentLocation );
236 if ( locations[currentItem()] != oldPath )
237 emit newPath();
238}
239
240/*!
241 Returns TRUE to indicate that the user has changed the location displayed
242 by the LocationCombo. Most useful when the LocationCombo is part of a
243 dialog; when the dialog is accept()ed, LocationCombo::isChanged() can be
244 examined to check for a change of location.
245 */
246bool LocationCombo::isChanged() const
247{
248 if ( const FileSystem *fs = storage->fileSystemOf(locations[currentItem()]) )
249 return fs->path() != d->originalPath;
250
251 return TRUE;
252}
253
254/*!
255 Returns the default (home) location for the file associated with this
256 LocationCombo.
257 */
258QString LocationCombo::installationPath() const
259{
260 return currentItem() == d->homeLocation ?
261 QString("/") : locations[ currentItem() ]+"/";
262}
263
264/*!
265 Returns the document path associated with this LocationCombo. This
266 will be "\<path\>/Documents".
267 */
268QString LocationCombo::documentPath() const
269{
270 return locations[ currentItem() ]+"/Documents/";
271}
272
273/*!
274 Returns a pointer to FileSystem object, associated with the current
275 selection of the LocationCombo.
276 */
277const FileSystem *LocationCombo::fileSystem() const
278{
279 if ( d->listEmpty )
280 return 0;
281 return storage->fileSystemOf( locations[ currentItem() ] );
282}
283
284/*!
285 \fn LocationCombo::newPath()
286 Emitted when the LocationCombo changes to a new location.
287 */
288
289
290#if 0
291void LocationCombo::apply()
292{
293}
294#endif
295
diff --git a/library/locationcombo.h b/library/locationcombo.h
new file mode 100644
index 0000000..fab3dfc
--- a/dev/null
+++ b/library/locationcombo.h
@@ -0,0 +1,88 @@
1/**********************************************************************
2** Copyright (C) 2000-2006 Trolltech AS. All rights reserved.
3**
4** This file is part of the Qtopia Environment.
5**
6** This program is free software; you can redistribute it and/or modify it
7** under the terms of the GNU General Public License as published by the
8** Free Software Foundation; either version 2 of the License, or (at your
9** option) any later version.
10**
11** A copy of the GNU GPL license version 2 is included in this package as
12** LICENSE.GPL.
13**
14** This program is distributed in the hope that it will be useful, but
15** WITHOUT ANY WARRANTY; without even the implied warranty of
16** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
17** See the GNU General Public License for more details.
18**
19** In addition, as a special exception Trolltech gives permission to link
20** the code of this program with Qtopia applications copyrighted, developed
21** and distributed by Trolltech under the terms of the Qtopia Personal Use
22** License Agreement. You must comply with the GNU General Public License
23** in all respects for all of the code used other than the applications
24** licensed under the Qtopia Personal Use License Agreement. If you modify
25** this file, you may extend this exception to your version of the file,
26** but you are not obligated to do so. If you do not wish to do so, delete
27** this exception statement from your version.
28**
29** See http://www.trolltech.com/gpl/ for GPL licensing information.
30**
31** Contact info@trolltech.com if any conditions of this licensing are
32** not clear to you.
33**
34**********************************************************************/
35
36#ifndef LOCATIONCOMBO_H
37#define LOCATIONCOMBO_H
38
39#include <qpe/qpeglobal.h>
40
41#ifdef Q_WS_QWS
42
43#include <qstringlist.h>
44#include <qcombobox.h>
45
46class AppLnk;
47class QListViewItem;
48class DocLnk;
49class FileSystem;
50class StorageInfo;
51
52
53class LocationComboPrivate;
54
55class LocationCombo : public QComboBox
56{
57 Q_OBJECT
58public:
59 LocationCombo( QWidget *parent, const char *name=0 );
60 LocationCombo( const AppLnk * lnk, QWidget *parent, const char *name=0 );
61
62 ~LocationCombo();
63
64 void setLocation( const QString& path ); // qtopia 2
65 void setLocation( const AppLnk * );
66
67 QString installationPath() const;
68 QString documentPath() const;
69 const FileSystem *fileSystem() const;
70
71 bool isChanged() const;
72
73signals:
74 void newPath();
75
76private slots:
77 void updatePaths();
78
79private:
80 void setupCombo();
81 QStringList locations;
82 StorageInfo *storage;
83 LocationComboPrivate *d;
84};
85
86
87#endif // QWS
88#endif // LNKPROPERTIES_H
diff --git a/library/qlibrary_unix.cpp b/library/qlibrary_unix.cpp
index fee73c2..f4d60cb 100644
--- a/library/qlibrary_unix.cpp
+++ b/library/qlibrary_unix.cpp
@@ -73,171 +73,171 @@ void* QLibraryPrivate::resolveSymbol( const char* symbol )
73#endif 73#endif
74 return 0; 74 return 0;
75 } 75 }
76 return address; 76 return address;
77} 77}
78 78
79#elif defined(_NULL_LIB_) 79#elif defined(_NULL_LIB_)
80 80
81bool QLibraryPrivate::loadLibrary() 81bool QLibraryPrivate::loadLibrary()
82{ 82{
83 //qDebug("QLibraryPrivate::loadLibrary\n"); 83 //qDebug("QLibraryPrivate::loadLibrary\n");
84 return FALSE; 84 return FALSE;
85} 85}
86bool QLibraryPrivate::freeLibrary() 86bool QLibraryPrivate::freeLibrary()
87{ 87{
88 //qDebug("QLibraryPrivate::freeLibrary\n"); 88 //qDebug("QLibraryPrivate::freeLibrary\n");
89 return FALSE; 89 return FALSE;
90} 90}
91void* QLibraryPrivate::resolveSymbol( const char* symbol ) 91void* QLibraryPrivate::resolveSymbol( const char* symbol )
92{ 92{
93 //qDebug("QLibraryPrivate::resolveSymbol\n"); 93 //qDebug("QLibraryPrivate::resolveSymbol\n");
94 return FALSE; 94 return FALSE;
95} 95}
96 96
97#elif defined(Q_OS_MACX) 97#elif defined(Q_OS_MACX)
98 98
99#define ENUM_DYLD_BOOL 99#define ENUM_DYLD_BOOL
100enum DYLD_BOOL { 100enum DYLD_BOOL {
101 DYLD_FALSE, 101 DYLD_FALSE,
102 DYLD_TRUE 102 DYLD_TRUE
103}; 103};
104#include <mach-o/dyld.h> 104#include <mach-o/dyld.h>
105typedef struct { 105typedef struct {
106 NSObjectFileImage img; 106 NSObjectFileImage img;
107 NSModule mod; 107 NSModule mod;
108} DyldLibDesc; 108} DyldLibDesc;
109 109
110bool QLibraryPrivate::loadLibrary() 110bool QLibraryPrivate::loadLibrary()
111{ 111{
112 // qDebug("QLibraryPrivate::loadLibrary\n"); 112 // qDebug("QLibraryPrivate::loadLibrary\n");
113 // return FALSE; 113 // return FALSE;
114 if ( pHnd ) 114 if ( pHnd )
115 return TRUE; 115 return TRUE;
116 116
117 QString filename = library->library(); 117 QString filename = library->library();
118 118
119 NSObjectFileImage img = 0; 119 NSObjectFileImage img = 0;
120 NSModule mod = 0; 120 NSModule mod = 0;
121 NSObjectFileImageReturnCode ret = NSCreateObjectFileImageFromFile( filename.latin1() , &img ); 121 NSObjectFileImageReturnCode ret = NSCreateObjectFileImageFromFile( filename.latin1() , &img );
122 if ( ret != NSObjectFileImageSuccess ) { 122 if ( ret != NSObjectFileImageSuccess ) {
123 qWarning( "Error in NSCreateObjectFileImageFromFile(): %d; Filename: %s", ret, filename.latin1() ); 123 qWarning( "Error in NSCreateObjectFileImageFromFile(): %d; Filename: %s", ret, filename.latin1() );
124 if (ret == NSObjectFileImageAccess) { 124 if (ret == NSObjectFileImageAccess) {
125 qWarning ("(NSObjectFileImageAccess)" ); 125 qWarning ("(NSObjectFileImageAccess)" );
126 } 126 }
127 } else { 127 } else {
128 mod = NSLinkModule(img, filename.latin1(), NSLINKMODULE_OPTION_BINDNOW | 128 mod = NSLinkModule(img, filename.latin1(), NSLINKMODULE_OPTION_BINDNOW |
129 NSLINKMODULE_OPTION_PRIVATE | 129 NSLINKMODULE_OPTION_PRIVATE |
130 NSLINKMODULE_OPTION_RETURN_ON_ERROR); 130 NSLINKMODULE_OPTION_RETURN_ON_ERROR);
131 if (mod == 0) { 131 if (mod == 0) {
132 qWarning( "Error in NSLinkModule()" ); 132 qWarning( "Error in NSLinkModule()" );
133 NSDestroyObjectFileImage(img); 133 NSDestroyObjectFileImage(img);
134 } 134 }
135 } 135 }
136 DyldLibDesc* desc = 0; 136 DyldLibDesc* desc = 0;
137 if (img != 0 && mod != 0) { 137 if (img != 0 && mod != 0) {
138 desc = new DyldLibDesc; 138 desc = new DyldLibDesc;
139 desc->img = img; 139 desc->img = img;
140 desc->mod = mod; 140 desc->mod = mod;
141 } 141 }
142 pHnd = desc; 142 pHnd = desc;
143 return pHnd != 0; 143 return pHnd != 0;
144} 144}
145 145
146bool QLibraryPrivate::freeLibrary() 146bool QLibraryPrivate::freeLibrary()
147{ 147{
148 //qDebug("QLibraryPrivate::freeLibrary\n"); 148 //qDebug("QLibraryPrivate::freeLibrary\n");
149 //return FALSE; 149 //return FALSE;
150 if ( !pHnd ) 150 if ( !pHnd )
151 return TRUE; 151 return TRUE;
152 152
153 DyldLibDesc* desc = (DyldLibDesc*) pHnd; 153 DyldLibDesc* desc = (DyldLibDesc*) pHnd;
154 NSModule mod = desc->mod; 154 NSModule mod = desc->mod;
155 NSObjectFileImage img = desc->img; 155 NSObjectFileImage img = desc->img;
156 bool success = NSUnLinkModule(mod, NSUNLINKMODULE_OPTION_NONE); 156 bool success = NSUnLinkModule(mod, NSUNLINKMODULE_OPTION_NONE);
157 if ( success ) { 157 if ( success ) {
158 NSDestroyObjectFileImage(img); 158 NSDestroyObjectFileImage(img);
159 delete desc; 159 delete desc;
160 pHnd = 0; 160 pHnd = 0;
161 } 161 }
162#if defined(QT_DEBUG) || defined(QT_DEBUG_COMPONENT) 162#if defined(QT_DEBUG) || defined(QT_DEBUG_COMPONENT)
163 else { 163 else {
164 qWarning( "Error in NSUnLinkModule()" ); 164 qWarning( "Error in NSUnLinkModule()" );
165 } 165 }
166#endif 166#endif
167 return pHnd == 0; 167 return pHnd == 0;
168} 168}
169 169
170void* QLibraryPrivate::resolveSymbol( const char* symbol ) 170void* QLibraryPrivate::resolveSymbol( const char* symbol )
171{ 171{
172 //qDebug("QLibraryPrivate::resolveSymbol\n"); 172 //qDebug("QLibraryPrivate::resolveSymbol\n");
173 //return FALSE; 173 //return FALSE;
174 if ( !pHnd ) 174 if ( !pHnd )
175 return 0; 175 return 0;
176 176
177 DyldLibDesc* desc = (DyldLibDesc*) pHnd; 177 DyldLibDesc* desc = (DyldLibDesc*) pHnd;
178 NSSymbol sym = NSLookupSymbolInModule(desc->mod, symbol); 178 NSSymbol sym = NSLookupSymbolInModule(desc->mod, symbol);
179 void* address = 0; 179 void* address = 0;
180 if (sym != 0) { 180 if (sym != 0) {
181 address = NSAddressOfSymbol(sym); 181 address = NSAddressOfSymbol(sym);
182 } 182 }
183#if defined(QT_DEBUG) || defined(QT_DEBUG_COMPONENT) 183#if defined(QT_DEBUG) || defined(QT_DEBUG_COMPONENT)
184 if ( address == 0 ) 184 if ( address == 0 )
185 qWarning( "Cannot find symbol: %s", symbol ); 185 qWarning( "Cannot find symbol: %s", symbol );
186#endif 186#endif
187 return address; 187 return address;
188} 188}
189 189
190#else 190#else
191// Something else, assuming POSIX 191// Something else, assuming POSIX
192#include <dlfcn.h> 192#include <dlfcn.h>
193 193
194bool QLibraryPrivate::loadLibrary() 194bool QLibraryPrivate::loadLibrary()
195{ 195{
196 if ( pHnd ) 196 if ( pHnd )
197 return TRUE; 197 return TRUE;
198 198
199 QString filename = library->library(); 199 QString filename = library->library();
200 200
201 pHnd = dlopen( filename.latin1() , RTLD_LAZY ); 201 pHnd = ::dlopen( filename.latin1() , RTLD_LAZY );
202// #if defined(QT_DEBUG) || defined(QT_DEBUG_COMPONENT) 202// #if defined(QT_DEBUG) || defined(QT_DEBUG_COMPONENT)
203 if ( !pHnd ) 203 if ( !pHnd )
204 qWarning( "%s", dlerror() ); 204 qWarning( "%s", dlerror() );
205// #endif 205// #endif
206 return pHnd != 0; 206 return pHnd != 0;
207} 207}
208 208
209bool QLibraryPrivate::freeLibrary() 209bool QLibraryPrivate::freeLibrary()
210{ 210{
211 if ( !pHnd ) 211 if ( !pHnd )
212 return TRUE; 212 return TRUE;
213 213
214 int ec = dlclose( pHnd ); 214 int ec = ::dlclose( pHnd );
215 if ( !ec ) 215 if ( !ec )
216 pHnd = 0; 216 pHnd = 0;
217#if defined(QT_DEBUG) || defined(QT_DEBUG_COMPONENT) 217#if defined(QT_DEBUG) || defined(QT_DEBUG_COMPONENT)
218 else { 218 else {
219 const char* error = dlerror(); 219 const char* error = dlerror();
220 if ( error ) 220 if ( error )
221 qWarning( "%s", error ); 221 qWarning( "%s", error );
222 } 222 }
223#endif 223#endif
224 return pHnd == 0; 224 return pHnd == 0;
225} 225}
226 226
227void* QLibraryPrivate::resolveSymbol( const char* f ) 227void* QLibraryPrivate::resolveSymbol( const char* f )
228{ 228{
229 if ( !pHnd ) 229 if ( !pHnd )
230 return 0; 230 return 0;
231 231
232 void* address = dlsym( pHnd, f ); 232 void* address = dlsym( pHnd, f );
233#if defined(QT_DEBUG) || defined(QT_DEBUG_COMPONENT) 233#if defined(QT_DEBUG) || defined(QT_DEBUG_COMPONENT)
234 const char* error = dlerror(); 234 const char* error = dlerror();
235 if ( error ) 235 if ( error )
236 qWarning( "%s", error ); 236 qWarning( "%s", error );
237#endif 237#endif
238 return address; 238 return address;
239} 239}
240 240
241#endif // POSIX 241#endif // POSIX
242 242
243#endif // QT_NO_COMPONENT 243#endif // QT_NO_COMPONENT
diff --git a/library/timestring.cpp b/library/timestring.cpp
index 91c29ae..afd162d 100644
--- a/library/timestring.cpp
+++ b/library/timestring.cpp
@@ -1,365 +1,466 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. 2** Copyright (C) 2000-2006 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 program is free software; you can redistribute it and/or modify it
7** GNU General Public License version 2 as published by the Free Software 7** under the terms of the GNU General Public License as published by the
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Free Software Foundation; either version 2 of the License, or (at your
9** packaging of this file. 9** option) any later version.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** A copy of the GNU GPL license version 2 is included in this package as
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** LICENSE.GPL.
13**
14** This program is distributed in the hope that it will be useful, but
15** WITHOUT ANY WARRANTY; without even the implied warranty of
16** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
17** See the GNU General Public License for more details.
18**
19** In addition, as a special exception Trolltech gives permission to link
20** the code of this program with Qtopia applications copyrighted, developed
21** and distributed by Trolltech under the terms of the Qtopia Personal Use
22** License Agreement. You must comply with the GNU General Public License
23** in all respects for all of the code used other than the applications
24** licensed under the Qtopia Personal Use License Agreement. If you modify
25** this file, you may extend this exception to your version of the file,
26** but you are not obligated to do so. If you do not wish to do so, delete
27** this exception statement from your version.
13** 28**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 29** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 30**
16** Contact info@trolltech.com if any conditions of this licensing are 31** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 32** not clear to you.
18** 33**
19**********************************************************************/ 34**********************************************************************/
20 35
21#include "timestring.h" 36#include "timestring.h"
22#include <qobject.h> 37#include <qobject.h>
23#include <qpe/qpeapplication.h> //for qApp 38#include <qdatetime.h>
39#include <qapplication.h>
24#include "config.h" 40#include "config.h"
25 41
42#include <time.h>
43
26 44
27class TimeStringFormatKeeper : public QObject 45class TimeStringFormat : public QObject
28{ 46{
29 Q_OBJECT 47 Q_OBJECT
30public: 48public:
31 static DateFormat currentFormat() 49 static DateFormat currentFormat()
32 { 50 {
33 if ( !self ) 51 if ( !self )
34 self = new TimeStringFormatKeeper; 52 self = new TimeStringFormat;
35 return self->format; 53 return self->format;
36 } 54 }
37private slots: 55private slots:
38 void formatChanged( DateFormat f ) 56 void formatChanged( DateFormat f )
39 { 57 {
40 format = f; 58 format = f;
41 } 59 }
42private: 60private:
43 static TimeStringFormatKeeper *self; 61 static TimeStringFormat *self;
44 DateFormat format; 62 DateFormat format;
45 63
46 TimeStringFormatKeeper() 64 TimeStringFormat()
47 : QObject( qApp ) 65 : QObject( qApp )
48 { 66 {
49 Config config("qpe"); 67 Config config("qpe");
50 config.setGroup( "Date" ); 68 config.setGroup( "Date" );
51 format = DateFormat(QChar(config.readEntry("Separator", "/")[0]), 69 format = ::DateFormat(QChar(config.readEntry("Separator", "/")[0]),
52 (DateFormat::Order)config .readNumEntry("ShortOrder", DateFormat::DayMonthYear), 70 (::DateFormat::Order)config.readNumEntry("ShortOrder", ::DateFormat::DayMonthYear),
53 (DateFormat::Order)config.readNumEntry("LongOrder", DateFormat::DayMonthYear)); 71 (::DateFormat::Order)config.readNumEntry("LongOrder", ::DateFormat::DayMonthYear));
54 72
55 connect( qApp, SIGNAL( dateFormatChanged(DateFormat) ), 73 connect( qApp, SIGNAL( dateFormatChanged(DateFormat) ),
56 this, SLOT( formatChanged(DateFormat) ) ); 74 this, SLOT( formatChanged(DateFormat) ) );
57 } 75 }
58}; 76};
59 77
60TimeStringFormatKeeper *TimeStringFormatKeeper::self = 0; 78TimeStringFormat *TimeStringFormat::self = 0;
61 79
62QString DateFormat::toNumberString() const 80QString DateFormat::toNumberString() const
63{ 81{
64 QString buf = ""; 82 QString buf = "";
65 // for each part of the order 83 // for each part of the order
66 for (int i = 0; i < 3; i++) { 84 for (int i = 0; i < 3; i++) {
67 // switch on the relavent 3 bits. 85 // switch on the relavent 3 bits.
68 switch((_shortOrder >> (i * 3)) & 0x0007) { 86 switch((_shortOrder >> (i * 3)) & 0x0007) {
69 case 0x0001: 87 case 0x0001:
70 buf += QObject::tr( "D" , "Shortcut for Day"); 88 buf += TimeStringFormat::tr( "D", "first letter of the word 'Day'" );
71 break; 89 break;
72 case 0x0002: 90 case 0x0002:
73 buf += QObject::tr( "M", "Shortcur for Month" ); 91 buf += TimeStringFormat::tr( "M" , "first letter of the word 'Month'" );
74 break; 92 break;
75 case 0x0004: 93 case 0x0004:
76 buf += QObject::tr( "Y" ); 94 buf += TimeStringFormat::tr( "Y" , "first letter of the word 'Year'" );
77 break; 95 break;
78 } 96 }
79 if (i < 2) 97 if (i < 2)
80 buf += _shortSeparator; 98 buf += _shortSeparator;
81 } 99 }
82 return buf; 100 return buf;
83} 101}
84 102
85QString DateFormat::toWordString() const 103QString DateFormat::toWordString() const
86{ 104{
87 QString buf = ""; 105 QString buf = "";
88 // for each part of the order 106 // for each part of the order
89 for (int i = 0; i < 3; i++) { 107 for (int i = 0; i < 3; i++) {
90 // switch on the relavent 3 bits. 108 // switch on the relavent 3 bits.
91 switch((_longOrder >> (i * 3)) & 0x0007) { 109 switch((_longOrder >> (i * 3)) & 0x0007) {
92 case 0x0001: 110 case 0x0001:
93 buf += QObject::tr( "day" ); 111 buf += TimeStringFormat::tr( "day", "in month" );
94 if (i < 2) { 112 if (i < 2) {
95 if ((_shortOrder << ((i+1) * 3)) & 0x0007) 113 if ((_shortOrder << ((i+1) * 3)) & 0x0007)
96 buf += ", "; 114 buf += ", ";
97 else 115 else
98 buf += " "; 116 buf += " ";
99 } 117 }
100 break; 118 break;
101 case 0x0002: 119 case 0x0002:
102 buf += QObject::tr( "month" ); 120 buf += TimeStringFormat::tr( "month" );
103 if (i < 2) 121 if (i < 2)
104 buf += " "; 122 buf += " ";
105 break; 123 break;
106 case 0x0004: 124 case 0x0004:
107 buf += QObject::tr( "year" ); 125 buf += TimeStringFormat::tr( "year" );
108 if (i < 2) 126 if (i < 2)
109 buf += ", "; 127 buf += ", ";
110 break; 128 break;
111 } 129 }
112 } 130 }
113 return buf; 131 return buf;
114} 132}
115 133
116QString DateFormat::numberDate(const QDate &d, int v) const 134QString DateFormat::numberDate(const QDate &d, int v) const
117{ 135{
118 QString buf = ""; 136 QString buf = "";
119 137
120 int pad = 2; 138 int pad = 2;
121 139
122 // for each part of the order 140 // for each part of the order
123 for (int i = 0; i < 3; i++) { 141 for (int i = 0; i < 3; i++) {
124 // switch on the relavent 3 bits. 142 // switch on the relavent 3 bits.
125 switch((_shortOrder >> (i * 3)) & 0x0007) { 143 switch((_shortOrder >> (i * 3)) & 0x0007) {
126 case 0x0001: 144 case 0x0001:
127 if (pad==2) buf += QString().sprintf("%02d",d.day()); 145 if (pad==2) buf += QString().sprintf("%02d",d.day());
128 else buf += QString().sprintf("%d",d.day()); 146 else buf += QString().sprintf("%d",d.day());
129 break; 147 break;
130 case 0x0002: 148 case 0x0002:
131 if (i==0) { // no padding with only MM/DD/YY format 149 if (i==0) { // no padding with only MM/DD/YY format
132 pad=0; 150 pad=0;
133 } 151 }
134 if (pad==2) buf += QString().sprintf("%02d",d.month()); 152 if (pad==2) buf += QString().sprintf("%02d",d.month());
135 else buf += QString().sprintf("%d",d.month()); 153 else buf += QString().sprintf("%d",d.month());
136 break; 154 break;
137 case 0x0004: 155 case 0x0004:
138 { 156 {
139 int year = d.year(); 157 int year = d.year();
140 if (!(v & longNumber)) 158 if (!(v & longNumber))
141 year = year % 100; 159 year = year % 100;
142 buf += QString().sprintf("%02d",year); 160 buf += QString().sprintf("%02d",year);
143 } 161 }
144 break; 162 break;
145 } 163 }
146 if (i < 2) 164 if (i < 2)
147 buf += _shortSeparator; 165 buf += _shortSeparator;
148 } 166 }
149 return buf; 167 return buf;
150} 168}
151 169
170static const char* unTranslatedFullMonthNames[] = {
171 QT_TRANSLATE_NOOP( "QDate", "January" ),
172 QT_TRANSLATE_NOOP( "QDate", "February" ),
173 QT_TRANSLATE_NOOP( "QDate", "March" ),
174 QT_TRANSLATE_NOOP( "QDate", "April" ),
175 QT_TRANSLATE_NOOP( "QDate", "May" ),
176 QT_TRANSLATE_NOOP( "QDate", "June" ),
177 QT_TRANSLATE_NOOP( "QDate", "July" ),
178 QT_TRANSLATE_NOOP( "QDate", "August" ),
179 QT_TRANSLATE_NOOP( "QDate", "September" ),
180 QT_TRANSLATE_NOOP( "QDate", "October" ),
181 QT_TRANSLATE_NOOP( "QDate", "November" ),
182 QT_TRANSLATE_NOOP( "QDate", "December" )
183};
184
185static const char* unTranslatedFullDayNames[] = {
186 QT_TRANSLATE_NOOP( "QDate", "Monday" ),
187 QT_TRANSLATE_NOOP( "QDate", "Tuesday" ),
188 QT_TRANSLATE_NOOP( "QDate", "Wednesday" ),
189 QT_TRANSLATE_NOOP( "QDate", "Thursday" ),
190 QT_TRANSLATE_NOOP( "QDate", "Friday" ),
191 QT_TRANSLATE_NOOP( "QDate", "Saturday" ),
192 QT_TRANSLATE_NOOP( "QDate", "Sunday" )
193};
194
195#ifdef QTOPIA_DESKTOP
196//translations in qt.qm
197static const char* unTranslatedMediumDayNames[] = {
198 "Mon" , "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"
199};
200
201static const char* unTranslatedMediumMonthNames[] = {
202 "Jan", "Feb", "Mar", "Apr", "May", "Jun",
203 "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
204};
205#endif
206
207static QString dayname(const QDate& d, bool lng)
208{
209 if (lng && qApp)
210 return qApp->translate("QDate", unTranslatedFullDayNames[d.dayOfWeek()-1]);
211 else {
212#ifdef QTOPIA_DESKTOP
213 if (qApp)
214 return qApp->translate("QDate", unTranslatedMediumDayNames[ d.dayOfWeek()-1]);
215#endif
216 return d.dayName(d.dayOfWeek());
217 }
218}
219
152QString DateFormat::wordDate(const QDate &d, int v) const 220QString DateFormat::wordDate(const QDate &d, int v) const
153{ 221{
154 QString buf = "";
155 // for each part of the order 222 // for each part of the order
156 if (v & showWeekDay) { 223 QString weekDay;
157 QString weekDay = d.dayName(d.dayOfWeek()); 224 if (v & showWeekDay)
158 if (!(v & longWord)) { 225 weekDay = ::dayname(d,(v & longWord));
159 weekDay = weekDay.left(3);
160 }
161 buf += weekDay;
162 if ((_longOrder & 0x0007) == 0x0002)
163 buf += ' ';
164 else
165 buf += ", ";
166 }
167 226
227 QString date="";
228 QString sep="";
168 for (int i = 0; i < 3; i++) { 229 for (int i = 0; i < 3; i++) {
169 // switch on the relavent 3 bits. 230 // switch on the relavent 3 bits.
170 switch((_longOrder >> (i * 3)) & 0x0007) { 231 int field = (_longOrder >> (i * 3)) & 0x0007;
171 case 0x0001: 232 if ( field && !date.isEmpty() )
172 if (i==1) { 233 date += sep;
173 buf += QString().sprintf("%02d, ",d.day()); 234 switch (field) {
174 } else { 235 case 0x0001: // Day
175 buf += QString().sprintf("%2d",d.day()); 236 {
176 if (separator()=='.') // 2002/1/11 237 QString daysuffix = TimeStringFormat::tr("@day", "day suffix - applies to some asian languages (e.g. Japanese and Trad. Chinese). If it doesn't apply to your language it has to be translated to an '@day' " );
177 buf += ". "; 238 if (i==1) {
178 else 239 date += QString().sprintf("%02d",d.day());
179 buf += " "; 240 if (daysuffix != "@day")
180 } 241 date+=daysuffix;
242 sep = TimeStringFormat::tr(",","day-date separator") + " ";
243 } else {
244 date += QString().sprintf("%2d",d.day());
245 if (daysuffix == "@day") {
246 if (separator()=='.') // 2002/1/11
247 sep = ". ";
248 else
249 sep = " ";
250 } else {
251 date += daysuffix+" ";
252 sep = " ";
253 }
254 }
255 }
181 break; 256 break;
182 case 0x0002: 257 case 0x0002: // Month
183 { 258 {
184 QString monthName = d.monthName(d.month()); 259 QString monthName;
185 if (!(v & longWord)) { 260
186 monthName = monthName.left(3); 261 if (v & longWord)
187 } 262 monthName = qApp->translate("QDate", unTranslatedFullMonthNames[d.month()-1] );
188 buf += monthName; 263 else {
264#ifdef QTOPIA_DESKTOP
265 monthName = qApp->translate("QDate", unTranslatedMediumMonthNames[d.month()-1] );
266#else
267 monthName = d.monthName( d.month() );
268#endif
269 }
270 date += monthName;
189 } 271 }
190 if (i < 2) 272 sep = " ";//TimeStringFormat::tr(" ","month-date separator");
191 buf += " ";
192 break; 273 break;
193 case 0x0004: 274 case 0x0004: // Year
194 { 275 {
195 int year = d.year(); 276 int year = d.year();
196 if (!(v & longNumber)) 277 if (!(v & longNumber))
197 year = year % 100; 278 year = year % 100;
198 279
199 if (year < 10) 280 if (year < 10)
200 buf += "0"; 281 date += "0";
282
283 date += QString::number(year);
284 QString yearsuffix = TimeStringFormat::tr("@year", "year suffix - applies to some asian languages (e.g. Japanese and Trad. Chinese). If it doesn't apply to your language it has to be translated to an '@year' " );
285 if (yearsuffix != "@year")
286 date += yearsuffix;
201 287
202 buf += QString::number(year);
203 } 288 }
204 if (i < 2) 289 sep = TimeStringFormat::tr(",","year-date seperator") + " ";
205 buf += ", ";
206 break; 290 break;
207 } 291 }
208 } 292 }
209 return buf; 293
294 QString r = "";
295 if ( weekDay.isEmpty() )
296 r = date;
297 else if ((_longOrder & 0x0007) == 0x0002)
298 r = TimeStringFormat::tr("%1 %2","1=Monday 2=January 12").arg(weekDay).arg(date);
299 else if ( _longOrder )
300 r = TimeStringFormat::tr("%1, %2","1=Monday 2=12 January").arg(weekDay).arg(date);
301 else
302 r = weekDay;
303 return r;
210} 304}
211 305
212#ifndef QT_NO_DATASTREAM 306#ifndef QT_NO_DATASTREAM
213void DateFormat::save(QDataStream &d) const 307void DateFormat::save(QDataStream &d) const
214{ 308{
215 d << _shortSeparator.unicode(); 309 d << _shortSeparator.unicode();
216 uint v= _shortOrder; 310 uint v= _shortOrder;
217 d << v; 311 d << v;
218 v = _longOrder; 312 v = _longOrder;
219 d << v; 313 d << v;
220} 314}
221 315
222void DateFormat::load(QDataStream &d) 316void DateFormat::load(QDataStream &d)
223{ 317{
224 ushort value; 318 ushort value;
225 d >> value; 319 d >> value;
226 _shortSeparator = QChar(value); 320 _shortSeparator = QChar(value);
227 uint v = 0; 321 uint v = 0;
228 d >> v; 322 d >> v;
229 _shortOrder = (Order)v; 323 _shortOrder = (Order)v;
230 v = 0; 324 v = 0;
231 d >> v; 325 d >> v;
232 _longOrder = (Order)v; 326 _longOrder = (Order)v;
233} 327}
234 328
235QDataStream &operator<<(QDataStream &s, const DateFormat&df) 329QDataStream &operator<<(QDataStream &s, const DateFormat&df)
236{ 330{
237 df.save(s); 331 df.save(s);
238 return s; 332 return s;
239} 333}
240QDataStream &operator>>(QDataStream &s, DateFormat&df) 334QDataStream &operator>>(QDataStream &s, DateFormat&df)
241{ 335{
242 df.load(s); 336 df.load(s);
243 return s; 337 return s;
244} 338}
245#endif 339#endif
246 340
247QString TimeString::shortDate( const QDate &d, DateFormat dtf ) 341QString TimeString::shortDate( const QDate &d, DateFormat dtf )
248{ 342{
249 return dtf.wordDate(d); 343 return dtf.wordDate(d);
250} 344}
251 345
252QString TimeString::dateString( const QDate &d, DateFormat dtf ) 346QString TimeString::dateString( const QDate &d, DateFormat dtf )
253{ 347{
254 return QObject::tr( dtf.wordDate(d, DateFormat::longNumber | DateFormat::longWord) ); 348 return dtf.wordDate(d, DateFormat::longNumber);
255} 349}
256 350
257 351
258QString TimeString::longDateString( const QDate &d, DateFormat dtf ) 352QString TimeString::longDateString( const QDate &d, DateFormat dtf )
259{ 353{
260 return QObject::tr( dtf.wordDate(d, DateFormat::showWeekDay | DateFormat::longNumber 354 return dtf.wordDate(d, DateFormat::showWeekDay | DateFormat::longNumber
261 | DateFormat::longWord) ); 355 | DateFormat::longWord);
262} 356}
263 357
264DateFormat TimeString::currentDateFormat() 358DateFormat TimeString::currentDateFormat()
265{ 359{
266 return TimeStringFormatKeeper::currentFormat(); 360 return TimeStringFormat::currentFormat();
267} 361}
268 362
269 363
270QString TimeString::dateString( const QDateTime &dt, bool ampm, bool seconds, DateFormat dtf ) 364QString TimeString::dateString( const QDateTime &dt, bool ampm, bool seconds, DateFormat dtf )
271{ 365{
272 const QDate& d = dt.date(); 366 const QDate& d = dt.date();
273 const QTime& t = dt.time(); 367 const QTime& t = dt.time();
274 368
275 // based on QDateTime::toString() 369 // based on QDateTime::toString()
276 QString buf = timeString(t,ampm,seconds); 370 QString buf = timeString(t,ampm,seconds);
277 buf += " "; 371 buf += " ";
278 buf += longDateString( d, dtf ); 372 buf += longDateString( d, dtf );
279 373
280 return buf; 374 return buf;
281} 375}
282 376
283QString TimeString::timeString( const QTime &t, bool ampm, bool seconds ) 377QString TimeString::timeString( const QTime &t, bool ampm, bool seconds )
284{ 378{
285 if ( !ampm ) { 379 if ( !ampm ) {
286 if ( seconds ) 380 if ( seconds )
287 return t.toString(); 381 return t.toString();
288 QString r = QString::number(t.hour()); 382 QString r = QString::number(t.hour());
289 if ( t.hour() < 10 ) r.prepend( "0" ); 383 if ( t.hour() < 10 ) r.prepend( "0" );
290 r.append( ":" ); 384 r.append( ":" );
291 if ( t.minute() < 10 ) r.append( "0" ); 385 if ( t.minute() < 10 ) r.append( "0" );
292 r.append(QString::number(t.minute())); 386 r.append(QString::number(t.minute()));
293 return r; 387 return r;
294 } 388 }
295 // ### else the hard case that should disappear in Qt 3.0 389 // ### else the hard case that should disappear in Qt 3.0
296 QString argString = seconds ? "%4:%5:%6 %7" : "%4:%5 %7"; 390 QString argString = seconds ? "%4:%5:%6 %7" : "%4:%5 %7";
297 int hour = t.hour(); 391 int hour = t.hour();
298 QString strMin = QString::number( t.minute() ); 392 QString strMin = QString::number( t.minute() );
299 QString strSec = QString::number( t.second() ); 393 QString strSec = QString::number( t.second() );
300 if ( hour > 12 ) 394 if ( hour > 12 )
301 argString = argString.arg( hour - 12, 2 ); 395 argString = argString.arg( hour - 12, 2 );
302 else { 396 else {
303 if ( hour == 0 ) 397 if ( hour == 0 )
304 argString = argString.arg( 12 ); 398 argString = argString.arg( 12 );
305 else 399 else
306 argString = argString.arg( hour, 2 ); 400 argString = argString.arg( hour, 2 );
307 } 401 }
308 if ( t.minute() < 10 ) 402 if ( t.minute() < 10 )
309 strMin.prepend( "0" ); 403 strMin.prepend( "0" );
310 if ( t.second() < 10 ) 404 if ( t.second() < 10 )
311 strSec.prepend( "0" ); 405 strSec.prepend( "0" );
312 argString = argString.arg( strMin ); 406 argString = argString.arg( strMin );
313 if ( seconds ) 407 if ( seconds )
314 argString = argString.arg( strSec ); 408 argString = argString.arg( strSec );
315 if ( hour >= 12 ) 409 if ( hour >= 12 )
316 argString = argString.arg( QObject::tr("PM") ); 410 argString = argString.arg( TimeStringFormat::tr("PM") );
317 else 411 else
318 argString = argString.arg( QObject::tr("AM") ); 412 argString = argString.arg( TimeStringFormat::tr("AM") );
319 return argString; 413 return argString;
320} 414}
321 415
322QString TimeString::shortTime( bool ampm, bool seconds ) 416QString TimeString::shortTime( bool ampm, bool seconds )
323{ 417{
324 static const char* const day[] = {
325 QT_TRANSLATE_NOOP( "QObject", "Mon" ),
326 QT_TRANSLATE_NOOP( "QObject", "Tue" ),
327 QT_TRANSLATE_NOOP( "QObject", "Wed" ),
328 QT_TRANSLATE_NOOP( "QObject", "Thu" ),
329 QT_TRANSLATE_NOOP( "QObject", "Fri" ),
330 QT_TRANSLATE_NOOP( "QObject", "Sat" ),
331 QT_TRANSLATE_NOOP( "QObject", "Sun" )
332 };
333 // just create a shorter time String 418 // just create a shorter time String
334 QDateTime dtTmp = QDateTime::currentDateTime(); 419 QDateTime dtTmp = QDateTime::currentDateTime();
335 QString strTime; 420 QString strTime = TimeStringFormat::tr( "%1 %2", "1=Monday 2=12:45" )
336 strTime = QObject::tr( day[dtTmp.date().dayOfWeek()-1] ) + " " + 421 .arg(::dayname(dtTmp.date(),FALSE))
337 timeString( dtTmp.time(), ampm, seconds ); 422 .arg(timeString( dtTmp.time(), ampm, seconds ));
338 return strTime; 423 return strTime;
339} 424}
340 425
341QString TimeString::dateString( const QDateTime &t, bool ampm ) 426QString TimeString::dateString( const QDateTime &t, bool ampm )
342{ 427{
343 return dateString(t,ampm,FALSE); 428 return dateString(t,ampm,FALSE);
344} 429}
345 430
346QString TimeString::timeString( const QTime &t, bool ampm) 431QString TimeString::timeString( const QTime &t, bool ampm)
347{ 432{
348 return timeString(t,ampm,FALSE); 433 return timeString(t,ampm,FALSE);
349} 434}
350 435
351QString TimeString::shortTime( bool ampm ) 436QString TimeString::shortTime( bool ampm )
352{ 437{
353 return shortTime(ampm,FALSE); 438 return shortTime(ampm,FALSE);
354} 439}
355 440
356QString TimeString::numberDateString( const QDate &d, DateFormat dtf ) 441QString TimeString::numberDateString( const QDate &d, DateFormat dtf )
357{ 442{
358 return dtf.numberDate(d); 443 return dtf.numberDate(d);
359} 444}
360QString TimeString::longNumberDateString( const QDate &d, DateFormat dtf ) 445QString TimeString::longNumberDateString( const QDate &d, DateFormat dtf )
361{ 446{
362 return dtf.numberDate(d,DateFormat::longNumber); 447 return dtf.numberDate(d,DateFormat::longNumber);
363} 448}
449/*!
450 Returns date/time \a dt as a string,
451 showing year, month, date, hours, minutes, and seconds.
452 \a len determines the length of the resulting string.
453
454 The format, including order depends on the user's settings.
455
456 First availability: Qtopia 1.6
457*/
458//QString TimeString::localYMDHMS( const QDateTime &dt, Length len )
459//{
460// const QDate& d = dt.date();
461// const QTime& t = dt.time();
462// return LocalTimeFormat::tr("%1 %2","date,time").arg(localYMD(d,len)).arg(localHMS(t));
463//}
464
364 465
365#include "timestring.moc" 466#include "timestring.moc"
diff --git a/library/timestring.h b/library/timestring.h
index 875c8bf..b8d1aea 100644
--- a/library/timestring.h
+++ b/library/timestring.h
@@ -1,150 +1,182 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. 2** Copyright (C) 2000-2006 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**
6** This program is free software; you can redistribute it and/or modify it
7** under the terms of the GNU General Public License as published by the
8** Free Software Foundation; either version 2 of the License, or (at your
9** option) any later version.
10**
11** A copy of the GNU GPL license version 2 is included in this package as
12** LICENSE.GPL.
5** 13**
6** This file may be distributed and/or modified under the terms of the 14** This program is distributed in the hope that it will be useful, but
7** GNU General Public License version 2 as published by the Free Software 15** WITHOUT ANY WARRANTY; without even the implied warranty of
8** Foundation and appearing in the file LICENSE.GPL included in the 16** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
9** packaging of this file. 17** See the GNU General Public License for more details.
10**
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.
13** 18**
19** In addition, as a special exception Trolltech gives permission to link
20** the code of this program with Qtopia applications copyrighted, developed
21** and distributed by Trolltech under the terms of the Qtopia Personal Use
22** License Agreement. You must comply with the GNU General Public License
23** in all respects for all of the code used other than the applications
24** licensed under the Qtopia Personal Use License Agreement. If you modify
25** this file, you may extend this exception to your version of the file,
26** but you are not obligated to do so. If you do not wish to do so, delete
27** this exception statement from your version.
28**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 29** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 30**
16** Contact info@trolltech.com if any conditions of this licensing are 31** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 32** not clear to you.
18** 33**
19**********************************************************************/ 34**********************************************************************/
20 35
21#ifndef _TIMESTRING_H_ 36#ifndef _TIMESTRING_H_
22#define _TIMESTRING_H_ 37#define _TIMESTRING_H_
23#include <qdatetime.h> 38#include <qdatetime.h>
24#include <qstring.h> 39#include <qstring.h>
40#include <qarray.h>
25 41
26#if (QT_VERSION-0 >= 0x030000) 42#if (QT_VERSION-0 >= 0x030000)
27#define DateFormat QPEDateFormat 43#define DateFormat QPEDateFormat
28#endif 44#endif
29 45
46#include <qtopia/qpeglobal.h>
47
48class QObject;
49
30// return a string with the time based on whether or not you want 50// return a string with the time based on whether or not you want
31// you want it in 12 hour form. if ampm is true, then return 51// you want it in 12 hour form. if ampm is true, then return
32// it in 12 hour (am/pm) form otherwise return it in 24 hour form 52// it in 12 hour (am/pm) form otherwise return it in 24 hour form
33// in theory Qt 3,0 handles this better (hopefully obsoleteing this) 53// in theory Qt 3,0 handles this better (hopefully obsoleteing this)
34class DateFormat 54class DateFormat
35{ 55{
36public: 56public:
37 // date format type 001,010,100 = day month year 57 // date format type 1,2,4 = day,month,year
38 enum Order { 58 enum Order {
39 DayMonthYear = 0x0111, // 0x001 + 0x010(0x2 << 3) + 0x100(0x4 << 3) 59 DayMonthYear = 0421, // right-to-left
40 MonthDayYear = 0x010A, 60 MonthDayYear = 0412,
41 YearMonthDay = 0x0054 61 YearMonthDay = 0124
42 }; 62 };
43 63
44 DateFormat(QChar s = '/', Order so = MonthDayYear) : _shortOrder(so), 64 DateFormat(QChar s = '/', Order so = MonthDayYear) : _shortOrder(so),
45 _longOrder(so), _shortSeparator(s) { } 65 _longOrder(so), _shortSeparator(s) { }
46 DateFormat(QChar s, Order so, Order lo) : _shortOrder(so), 66 DateFormat(QChar s, Order so, Order lo) : _shortOrder(so),
47 _longOrder(lo), _shortSeparator(s) { } 67 _longOrder(lo), _shortSeparator(s) { }
48 DateFormat(const DateFormat &o) : _shortOrder(o._shortOrder), 68 DateFormat(const DateFormat &o) : _shortOrder(o._shortOrder),
49 _longOrder(o._longOrder), _shortSeparator(o._shortSeparator) { } 69 _longOrder(o._longOrder), _shortSeparator(o._shortSeparator) { }
50 70
51 bool operator==(const DateFormat &o) 71 bool operator==(const DateFormat &o)
52 { 72 {
53 if (o._shortOrder == _shortOrder && o._longOrder == _longOrder && 73 if (o._shortOrder == _shortOrder && o._longOrder == _longOrder &&
54 o._shortSeparator == _shortSeparator) 74 o._shortSeparator == _shortSeparator)
55 return TRUE; 75 return TRUE;
56 return FALSE; 76 return FALSE;
57 } 77 }
58 78
59 // verbosity specifiers 79 // verbosity specifiers
60 enum Verbosity { 80 enum Verbosity {
61 shortNumber = 0x01, // default 81 shortNumber = 0x01, // default
62 longNumber = 0x02, 82 longNumber = 0x02,
63 83
64 padNumber = 0x04, 84 padNumber = 0x04,
65 85
66 shortWord = 0x08, // default 86 shortWord = 0x08, // default
67 longWord = 0x10, 87 longWord = 0x10,
68 88
69 showWeekDay = 0x20 89 showWeekDay = 0x20
70 }; 90 };
71 91
72 QString toNumberString() const; // the M/D/Y string. 92 QString toNumberString() const; // the M/D/Y string.
73 QString toWordString() const; // the Month day, year string. 93 QString toWordString() const; // the Month day, year string.
74 94
75 QString numberDate(const QDate &d, int v = 0) const; 95 QString numberDate(const QDate &d, int v = 0) const;
76 QString wordDate(const QDate &d, int v = 0) const; 96 QString wordDate(const QDate &d, int v = 0) const;
77 97
78#ifndef QT_NO_DATASTREAM 98#ifndef QT_NO_DATASTREAM
79 void load(QDataStream&); 99 void load(QDataStream&);
80 void save(QDataStream&) const; 100 void save(QDataStream&) const;
81#endif 101#endif
82 102
83 QChar separator() const { return _shortSeparator; }; 103 QChar separator() const { return _shortSeparator; };
84 Order shortOrder() const { return _shortOrder; }; 104 Order shortOrder() const { return _shortOrder; };
85 Order longOrder() const { return _longOrder; }; 105 Order longOrder() const { return _longOrder; };
86 106
87private: 107private:
88 Order _shortOrder; 108 Order _shortOrder;
89 Order _longOrder; 109 Order _longOrder;
90 QChar _shortSeparator; 110 QChar _shortSeparator;
91}; 111};
92 112
93#ifndef QT_NO_DATASTREAM 113#ifndef QT_NO_DATASTREAM
94QDataStream &operator<<(QDataStream &s, const DateFormat&df); 114QDataStream &operator<<(QDataStream &s, const DateFormat&df);
95QDataStream &operator>>(QDataStream &s, DateFormat&df); 115QDataStream &operator>>(QDataStream &s, DateFormat&df);
96#endif 116#endif
97 117
98class TimeString 118class TimeString
99{ 119{
100public: 120public:
101 121
102 //enum DateFormat { MonthDayYear, DayMonthYear, ISO8601, 122 //enum DateFormat { MonthDayYear, DayMonthYear, ISO8601,
103 //YearMonthDay = ISO8601 }; 123 //YearMonthDay = ISO8601 };
104 124
105/** 125
106 * @name Convience functions which use currentDateFormat 126//private:
107 */ 127 static QString shortDate( const QDate &d )
108//@{
109 static QString shortDate( const QDate &d )
110 { return shortDate( d, currentDateFormat() ); } 128 { return shortDate( d, currentDateFormat() ); }
111 static QString dateString( const QDate &d ) 129 static QString dateString( const QDate &d )
112 { return dateString( d, currentDateFormat() ); } 130 { return dateString( d, currentDateFormat() ); }
113 static QString longDateString( const QDate &d ) 131 static QString longDateString( const QDate &d )
114 { return longDateString( d, currentDateFormat() ); } 132 { return longDateString( d, currentDateFormat() ); }
115//@}
116 static QString dateString( const QDateTime &dt, bool ampm, bool seconds ) 133 static QString dateString( const QDateTime &dt, bool ampm, bool seconds )
117 { return dateString( dt, ampm, seconds, currentDateFormat() ); } 134 { return dateString( dt, ampm, seconds, currentDateFormat() ); }
118 135
136public:
137 enum Length { Short, Medium, Long };
138 static QString localH( int hour );
139 static QString localHM( const QTime & );
140 static QString localHM( const QTime &, Length ); // qtopia 2.1.0
141 static QString localHMS( const QTime & );
142 static QString localHMDayOfWeek( const QDateTime &t );
143 static QString localHMSDayOfWeek( const QDateTime &t );
144 static QString localMD( const QDate &, Length=Medium );
145 static QString localYMD( const QDate &, Length=Medium );
146 static QString localYMDHMS( const QDateTime &, Length=Medium );
147 static QString localDayOfWeek( const QDate&, Length=Medium );
148 static QString localDayOfWeek( int day1to7, Length=Medium );
149
150 static QString hourString( int hour, bool ampm );
151 static bool currentAMPM();
152 static DateFormat currentDateFormat();
153 static QArray<DateFormat> formatOptions(); // qtopia 1.6.0
154
155 static void connectChange(QObject*,const char* member);
156 static void disconnectChange(QObject*,const char* member);
119 157
120 /** @name Do not use as they don't honor system settings for AMPM 158 // Not recommended to call these (they don't honor system ampm)
121 * 159 static QString dateString( const QDateTime &t, bool ampm );
122 */
123 //@{
124 static QString dateString( const QDateTime &t, bool ampm = false );
125 static QString timeString( const QTime &t, bool ampm, bool seconds ); 160 static QString timeString( const QTime &t, bool ampm, bool seconds );
126 static QString timeString( const QTime &t, bool ampm = false ); 161 static QString timeString( const QTime &t, bool ampm );
127 static QString shortTime( bool ampm, bool seconds ); 162 static QString shortTime( bool ampm, bool seconds );
128 static QString shortTime( bool ampm = false ); 163 static QString shortTime( bool ampm );
129 //@}
130 164
131 static QString numberDateString( const QDate &d, DateFormat ); 165 static QString numberDateString( const QDate &d, DateFormat );
132 static QString numberDateString( const QDate &d ) 166 static QString numberDateString( const QDate &d )
133 { return numberDateString( d, currentDateFormat() ); } 167 { return numberDateString( d, currentDateFormat() ); }
134 static QString longNumberDateString( const QDate &d, DateFormat ); 168 static QString longNumberDateString( const QDate &d, DateFormat );
135 static QString longNumberDateString( const QDate &d ) 169 static QString longNumberDateString( const QDate &d )
136 { return longNumberDateString( d, currentDateFormat() ); } 170 { return longNumberDateString( d, currentDateFormat() ); }
137 171
138 static QString shortDate( const QDate &, DateFormat ); 172 static QString shortDate( const QDate &, DateFormat );
139 static QString dateString( const QDate &, DateFormat ); 173 static QString dateString( const QDate &, DateFormat );
140 static QString longDateString( const QDate &, DateFormat ); 174 static QString longDateString( const QDate &, DateFormat );
141 175
142 static DateFormat currentDateFormat();
143
144private: 176private:
145 static QString dateString( const QDateTime &t, bool ampm, bool seconds, DateFormat ); 177 static QString dateString( const QDateTime &t, bool ampm, bool seconds, DateFormat );
146 178
147 179
148}; 180};
149 181
150#endif 182#endif