00001
00002
00003
00004
00005
00006
00007 #include <qdatetime.h>
00008 #include <qstring.h>
00009 #include <qstringlist.h>
00010
00011 #include <kglobal.h>
00012 #include <klocale.h>
00013 #include <kdebug.h>
00014
00015 #include "hconv.h"
00016
00017 #include "kcalendarsystemhijri.h"
00018
00019 KCalendarSystemHijri::KCalendarSystemHijri()
00020 {
00021 kdDebug(5400) << "\nCreated hijri calendar" << endl;
00022 }
00023
00024 KCalendarSystemHijri::~KCalendarSystemHijri()
00025 {
00026 }
00027
00028 QString KCalendarSystemHijri::monthName(const QDate& date, bool shortName)
00029 {
00030 kdDebug(5400) << "Arabic month..." << endl;
00031
00032 SDATE *sd;
00033 sd = hdate(date.year(), date.month(), date.day());
00034 if ( shortName )
00035 return QString(hmnameshort[sd->mon-1]);
00036 else
00037 return QString(hmname[sd->mon-1]);
00038 }
00039
00040 int KCalendarSystemHijri::year(const QDate& date)
00041 {
00042 kdDebug(5400) << "Arabic year..." << endl;
00043
00044 SDATE *sd;
00045 sd = hdate(date.year(), date.month(), date.day());
00046 if (sd->year>0)
00047 return (sd->year);
00048 else
00049 return (-sd->year);
00050 }
00051
00052 QString KCalendarSystemHijri::formatDate(const QDate& date)
00053 {
00054 kdDebug(5400) << "Arabic format date..." << endl;
00055
00056 SDATE *sd;
00057 sd = hdate(date.year(), date.month(), date.day());
00058 return QString::number(sd->day) + QString("/") +
00059 QString::number(sd->mon) + QString("/")+
00060 QString::number(sd->year);
00061 }
00062
00063 void KCalendarSystemHijri::nextMonthDate(QDate& date)
00064 {
00065
00066 SDATE *sd, *gd;
00067 sd = hdate(date.year(), date.month(), date.day());
00068
00069 int day = sd->day;
00070 if(sd->mon==12) {
00071
00072 sd->year+=1;
00073 sd->mon=1;
00074 sd->day=1;
00075 } else {
00076
00077 sd->mon+=1;
00078 }
00079 if(hndays(sd->mon, sd->year) < day) {
00080
00081 sd->day = hndays(sd->mon, sd->year);
00082 } else {
00083
00084 sd->day = day;
00085 }
00086
00087 gd = gdate( sd -> year, sd -> mon, sd -> day);
00088 date.setYMD(gd->year, gd->mon, gd->day);
00089 kdDebug(5400) << "Arabic next month date..." << endl;
00090 }
00091
00092 void KCalendarSystemHijri::previousMonthDate(QDate& date)
00093 {
00094 kdDebug(5400) << "Arabic previous month date..." << endl;
00095
00096 SDATE *sd, *gd;
00097 sd = hdate(date.year(), date.month(), date.day());
00098
00099 int day = sd->day;
00100 if(sd->mon==1) {
00101
00102 sd->year-=1;
00103 sd->mon = 12;
00104 sd->day = 1;
00105 } else {
00106
00107 sd->mon-=1;
00108
00109 }
00110 if(hndays(sd->mon, sd->year)<day) {
00111
00112 sd->day = hndays(sd->mon, sd->year);
00113 } else {
00114
00115 sd->day = day;
00116 }
00117
00118 gd = gdate( sd -> year, sd -> mon, sd -> day);
00119 date.setYMD(gd->year, gd->mon, gd->day);
00120 }
00121
00122 void KCalendarSystemHijri::nextYearDate(QDate& date)
00123 {
00124 kdDebug(5400) << "Arabic next year date..." << endl;
00125
00126 SDATE *sd, *gd;
00127 sd = hdate(date.year(), date.month(), date.day());
00128
00129 int day = sd->day;
00130
00131 sd->year+=1;
00132 sd->day=1;
00133 if(hndays(sd->mon, sd->year)<day) {
00134
00135 } else {
00136
00137 sd->day = day;
00138 }
00139
00140 gd = gdate( sd -> year, sd -> mon, sd -> day);
00141 date.setYMD(gd->year, gd->mon, gd->day);
00142 }
00143
00144 void KCalendarSystemHijri::previousYearDate(QDate& date)
00145 {
00146 kdDebug(5400) << "Arabic previous year date..." << endl;
00147
00148 SDATE *sd, *gd;
00149 sd = hdate(date.year(), date.month(), date.day());
00150
00151 int day = sd->day;
00152
00153 sd->year-=1;
00154 sd->day=1;
00155 if(hndays(sd->mon, sd->year)<day) {
00156
00157 } else {
00158
00159 sd->day = day;
00160 }
00161
00162 gd = gdate( sd -> year, sd -> mon, sd -> day);
00163 date.setYMD(gd->year, gd->mon, gd->day);
00164 }
00165
00166 int KCalendarSystemHijri::monthsInYear( int )
00167 {
00168 kdDebug(5400) << "Arabic monthsInYear" << endl;
00169 return 12;
00170 }
00171
00172 QString KCalendarSystemHijri::monthName(int month)
00173 {
00174 kdDebug(5400) << "Arabic getMonthName " << hmname[month-1] <<endl;
00175
00176 return QString(hmname[month-1]);
00177 }
00178
00179 void KCalendarSystemHijri::constructDateInMonth(QDate& date, int month)
00180 {
00181 kdDebug(5400) << "Arabic constructDateInMonth" << endl;
00182
00183 SDATE *sd, *gd;
00184 sd = hdate(date.year(), date.month(), date.day());
00185
00186 int day;
00187 day = sd->day;
00188
00189
00190 sd->mon = month;
00191 sd->day = 1;
00192
00193 sd->mon = month;
00194 sd->day = QMIN(day, hndays(sd->mon, sd->year));
00195
00196 gd = gdate( sd -> year, sd -> mon, sd -> day);
00197 date.setYMD(gd->year, gd->mon, gd->day);
00198 }
00199
00200 void KCalendarSystemHijri::constructDateInYear(QDate& date, int year)
00201 {
00202 kdDebug(5400) << "Hijri constructDateInYear" << endl;
00203
00204 SDATE *sd, *gd;
00205 sd = hdate(date.year(), date.month(), date.day());
00206
00207 int day;
00208 day = date.day();
00209
00210
00211 sd->year = year;
00212 sd->day =1;
00213
00214 sd->year = year;
00215 sd->day = QMIN(day, hndays(sd->mon, sd->year));
00216
00217 gd = gdate( sd -> year, sd -> mon, sd -> day);
00218 date.setYMD(gd->year, gd->mon, gd->day);
00219 }
00220
00221 QDate KCalendarSystemHijri::parseDate(QString text)
00222 {
00223 kdDebug(5400) << "Hijri parseDate" << endl;
00224
00225 kdDebug(5400) << "parseDate text " << text << endl;
00226 int day, month, year;
00227 QStringList d = QStringList::split("/", text);
00228 QStringList::Iterator it;
00229 QString a;
00230
00231 it = d.at(0);
00232 a = *it;
00233 day = a.toInt();
00234
00235 it = d.at(1);
00236 a = *it;
00237 month = a.toInt();
00238
00239 it = d.at(2);
00240 a = *it;
00241 year = a.toInt();
00242
00243
00244 SDATE *gd;
00245 gd = gdate(year, month, day);
00246 QDate enteredDate;
00247 enteredDate.setYMD(gd->year, gd->mon, gd->day);
00248 kdDebug(5400) << "DEBUG year: " << enteredDate.year() << endl;
00249 return enteredDate;
00250 }
00251
00252 QString KCalendarSystemHijri::weekDayName(int day, bool shortName)
00253 {
00254 if( shortName )
00255 return QString( sdow[day-1] );
00256 else
00257 return QString( dow[day-1] );
00258 }
00259
00260 int KCalendarSystemHijri::dayOfTheWeek(const QDate& date)
00261 {
00262
00263 SDATE *sd;
00264
00265 sd = hdate(date.year(), date.month(), date.day());
00266 if( sd->dw == 0 )
00267 return 7;
00268 else
00269 return (sd->dw);
00270 }
00271
00272 int KCalendarSystemHijri::numberOfDaysInMonth(const QDate& date)
00273 {
00274 kdDebug(5400) << "Hijri daysInMonth" << endl;
00275 SDATE *sd;
00276
00277 sd = hdate(date.year(), date.month(), date.day());
00278 return hndays(sd->mon, sd->year);
00279 }
00280
00281 int KCalendarSystemHijri::hndays(int mon,int year)
00282 {
00283 SDATE fd, ld;
00284 int nd = 666;
00285 fd = *gdate(year, mon, 1);
00286 ld = *gdate(year, mon+1, 1);
00287 ld = *caldate(julianday(ld.year, ld.mon, ld.day, 0.0) -1.0);
00288 if (fd.mon == ld.mon)
00289 nd = ld.day - fd.day +1;
00290 else
00291 nd = ndays(fd.mon,fd.year) - fd.day + ld.day +1;
00292
00293 return nd;
00294 }
00295
00296 int KCalendarSystemHijri::numberOfDaysPrevMonth(const QDate& date)
00297 {
00298 kdDebug(5400) << "Hijri daysinprevmonth" << endl;
00299 SDATE *sd, *gd, *sd1;
00300
00301 sd = hdate(date.year(), date.month(), date.day());
00302
00303 if(sd->mon == 1) {
00304
00305 gd = gdate((sd->year)-1, 12, 1);
00306 } else {
00307
00308 gd = gdate(sd->year, (sd->mon)-1, 1);
00309 }
00310 sd1 = hdate(gd->year, gd->mon, gd->day);
00311 return hndays( sd1->mon, sd1->year);
00312 }
00313
00314
00315 int KCalendarSystemHijri::maxValidYear()
00316 {
00317 QDate date(8000, 1, 1);
00318
00319 SDATE *sd;
00320
00321 sd = hdate(date.year(), date.month(), date.day());
00322
00323 return sd->year;
00324 }
00325
00326 int KCalendarSystemHijri::day(const QDate& date)
00327 {
00328 SDATE *sd;
00329
00330 sd = hdate(date.year(), date.month(), date.day());
00331
00332 return sd->day;
00333 }
00334
00335 int KCalendarSystemHijri::month(const QDate& date)
00336 {
00337 SDATE *sd;
00338
00339 sd = hdate(date.year(), date.month(), date.day());
00340
00341 return sd->mon;
00342 }
00343
00344 int KCalendarSystemHijri::numberOfDayInYear(const QDate& date)
00345 {
00346 SDATE *sd;
00347
00348 sd = hdate(date.year(), date.month(), date.day());
00349
00350 int day = 0;
00351
00352 for(int c = 1; c < sd->mon; c++)
00353 day+=hndays(c, sd->year);
00354 day+=sd->day;
00355
00356 return day;
00357 }
00358
00359 int KCalendarSystemHijri::weekDayOfPray() {
00360 return 5;
00361 }
00362 void KCalendarSystemHijri::printType()
00363 {
00364 kdDebug(5400) << "It's hijri!" << endl;
00365 }