[Kde-imaging] [Bug 135320] calendar year do not match locale

owner at bugs.kde.org owner at bugs.kde.org
Wed Oct 11 09:26:17 CEST 2006


------- You are receiving this mail because: -------
You are the assignee for the bug, or are watching the assignee.
         
http://bugs.kde.org/show_bug.cgi?id=135320         




------- Additional Comments From orgads gmail com  2006-10-11 09:26 -------
(From update of attachment 18086)
diff -pu calendar-bak/calpainter.cpp calendar/calpainter.cpp
--- calendar-bak/calpainter.cpp 2006-10-09 20:25:47.000000000 +0200
+++ calendar/calpainter.cpp	2006-10-09 22:10:52.000000000 +0200
 @ -91,13 +91,14  @ void CalPainter::paint(bool useDeviceMet
     for (int i=0; i<42; i++)
	 days[i] = -1;

-    QDate d(year_, month_, 1);
+    QDate d;
+    KGlobal::locale()->calendar()->setYMD(d, year_, month_, 1);
     int s = d.dayOfWeek();

     if (s+7-startDayOffset >= 7)
	     s=s-7;

-    for (int i=s; i<(s+d.daysInMonth()); i++) {
+    for (int i=s; i<(s+KGlobal::locale()->calendar()->daysInMonth(d)); i++) {
	 days[i + (7-startDayOffset)] = i-s+1;
     }

 @ -317,13 +318,14  @ void paintCalendar(int year, int month, 
     for (int i=0; i<42; i++)
	 days[i] = -1;

-    QDate d(year, month, 1);
+    QDate d;
+    KGlobal::locale()->calendar()->setYMD(d, year, month, 1);
     int s = d.dayOfWeek();

     if (s+7-startDayOffset >= 7)
	     s=s-7;

-    for (int i=s; i<(s+d.daysInMonth()); i++) {
+    for (int i=s; i<(s+KGlobal::locale()->calendar()->daysInMonth(d)); i++) {
	 days[i+(7-startDayOffset)] = i-s+1;
     }

 @ -549,13 +551,14  @ CalBlockPainter::CalBlockPainter(QObject
     for (int i=0; i<42; i++)
	 days[i] = -1;

-    QDate d(year, month, 1);
+    QDate d;
+    KGlobal::locale()->calendar()->setYMD(d, year, month, 1);
     int s = d.dayOfWeek();

     if (s+7-startDayOffset >= 7)
	     s=s-7;

-    for (int i=s; i<(s+d.daysInMonth()); i++) {
+    for (int i=s; i<(s+KGlobal::locale()->calendar()->daysInMonth(d)); i++) {
	 days[i+(7-startDayOffset)] = i-s+1;
     }

diff -pu calendar-bak/calselect.cpp calendar/calselect.cpp
--- calendar-bak/calselect.cpp	2006-10-09 20:25:47.000000000 +0200
+++ calendar/calselect.cpp	2006-10-11 08:54:03.000000000 +0200
 @ -40,13 +40,17  @
 #include "calsettings.h"
 #include "monthwidget.h"

+#define MAX_MONTHS (18)
+
 namespace KIPICalendarPlugin
 {

 CalSelect::CalSelect(KIPI::Interface* interface, QWidget *parent, const char*
name)
	  : QWidget(parent, name)
 {
-    mwVector_ = new QPtrVector<MonthWidget>(12);
+    mwVector_ = new QPtrVector<MonthWidget>(MAX_MONTHS);
+    monthBoxLayout_ = NULL;
+    totalMonths_ = 0;
     setupView( interface );
 }

 @ -88,8 +92,10  @ void CalSelect::setupView( KIPI::Interfa
     yearBox->layout()->addItem(new QSpacerItem(5,5,
						QSizePolicy::Expanding,
						QSizePolicy::Minimum));
-    yearSpin_ = new QSpinBox(1900,3000,1,yearBox);
-    yearSpin_->setValue(QDate::currentDate().year());
+    yearSpin_ = new QSpinBox(KGlobal::locale()->calendar()->minValidYear(),
+			      KGlobal::locale()->calendar()->maxValidYear(),
+			      1,yearBox);
+   
yearSpin_->setValue(KGlobal::locale()->calendar()->year(QDate::currentDate()));
     slotYearChanged(yearSpin_->value());

     connect(yearSpin_, SIGNAL(valueChanged(int)),
 @ -106,8 +112,8  @ void CalSelect::setupView( KIPI::Interfa
     monthBox->layout()->setSpacing( 6 );
     monthBox->layout()->setMargin( 11 );

-    QGridLayout *monthBoxLayout = new QGridLayout(monthBox->layout());
-    monthBoxLayout->setAlignment( Qt::AlignCenter );
+    monthBoxLayout_ = new QGridLayout(monthBox->layout());
+    monthBoxLayout_->setAlignment( Qt::AlignCenter );

     KURL::List urlList;
     KIPI::ImageCollection images = interface->currentSelection();
 @ -115,17 +121,14  @ void CalSelect::setupView( KIPI::Interfa
	 urlList = images.images();

     MonthWidget *w;
-    int index = 0;
-    for (int i=0; i<2; i++) {
-	 for (int j=0; j<6; j++) {
-	     w = new MonthWidget( interface, monthBox,index+1);
-	     if (index < urlList.count())
-		 w->setImage(urlList[index]);
-	     mwVector_->insert(index,w);
-	     monthBoxLayout->addWidget(w, i, j);
-	     index++;
-	 }
+    for (int i=0; i<MAX_MONTHS; i++) {
+	 w = new MonthWidget( interface, monthBox, i+1);
+	 if (i < urlList.count())
+	     w->setImage(urlList[i]);
+	 w->hide(); // the needed months will be shown on updateMonths()
+	 mwVector_->insert(i, w);
     }
+    updateMonths();

     QLabel* tLabel =
	 new QLabel(i18n("Left click on Months to Select Images. "
 @ -133,7 +136,7  @ void CalSelect::setupView( KIPI::Interfa
			 "You can also drag and drop images onto the Months"),
				 monthBox);

-    monthBoxLayout->addMultiCellWidget(tLabel, 2, 2, 0, 5);
+    monthBoxLayout_->addMultiCellWidget(tLabel, 2, 2, 0, 5);

     mainLayout->addWidget(monthBox);

 @ -143,9 +146,38  @ void CalSelect::setupView( KIPI::Interfa
					 QSizePolicy::Expanding));
 }

+void CalSelect::updateMonths()
+{
+    int i;
+    QDate d;
+    KGlobal::locale()->calendar()->setYMD(d,
CalSettings::instance()->getYear(), 1, 1);
+
+    if (totalMonths_ != KGlobal::locale()->calendar()->monthsInYear(d) &&
!mwVector_->isEmpty())
+    {
+	 // hide the last months that are not present on the current year
+	 for (i=KGlobal::locale()->calendar()->monthsInYear(d);
(i<totalMonths_) && (i<mwVector_->count()); i++)
+	     mwVector_->at(i)->hide();
+
+	 // update totalMonths_ to current year's month count
+	 totalMonths_ = KGlobal::locale()->calendar()->monthsInYear(d);
+	 // span the monthWidgets over 2 rows. inRow should usually be 6 or 7
(for 12 or 13 months)
+	 int inRow = (totalMonths_ / 2) + ((totalMonths_ % 2) != 0);
+	 // remove all the monthWidgets, then readd the needed ones
+	 for (i=0; i<mwVector_->count(); i++) {
+	     monthBoxLayout_->remove(mwVector_->at(i));
+	 }
+	 for (i=0; (i<totalMonths_) && (i<mwVector_->count()); i++) {
+	     monthBoxLayout_->addWidget(mwVector_->at(i), i / inRow, i %
inRow);
+	     mwVector_->at(i)->show(); // in case it is hidden
+	     mwVector_->at(i)->repaint();
+	 }
+    }
+}
+
 void CalSelect::slotYearChanged(int year)
 {
     CalSettings::instance()->setYear(year);
+    updateMonths();
 }

 }  // NameSpace KIPICalendarPlugin
diff -pu calendar-bak/calselect.h calendar/calselect.h
--- calendar-bak/calselect.h	2006-10-09 20:25:47.000000000 +0200
+++ calendar/calselect.h	2006-10-11 08:53:32.000000000 +0200
 @ -50,9 +50,12  @ public:
 private:

     void setupView( KIPI::Interface* interface );
+    void updateMonths();

     QPtrVector<MonthWidget> *mwVector_;
     QSpinBox		     *yearSpin_;
+    QGridLayout	     *monthBoxLayout_;
+    int		     totalMonths_;

 private slots:

diff -pu calendar-bak/calwidget.cpp calendar/calwidget.cpp
--- calendar-bak/calwidget.cpp	2006-10-09 20:25:47.000000000 +0200
+++ calendar/calwidget.cpp	2006-10-09 21:30:58.000000000 +0200
 @ -72,10 +72,10  @ void CalWidget::recreate()
     if (!calPainter_)
	 calPainter_ = new CalPainter(pix_);

-    calPainter_->setYearMonth(QDate::currentDate().year(),
-			       QDate::currentDate().month());
+   
calPainter_->setYearMonth(KGlobal::locale()->calendar()->year(QDate::currentDat
e()),
+			      
KGlobal::locale()->calendar()->month(QDate::currentDate()));
     calPainter_->paint();
-    update();	  
+    update();
 }

 }  // NameSpace KIPICalendarPlugin
diff -pu calendar-bak/calwizard.cpp calendar/calwizard.cpp
--- calendar-bak/calwizard.cpp	2006-10-09 20:25:47.000000000 +0200
+++ calendar/calwizard.cpp	2006-10-10 16:37:43.000000000 +0200
 @ -220,9 +220,11  @ void CalWizard::slotPageSelected(const Q
	 KURL image;
	 QString month;
	 QStringList printList;
-	 for (int i=1; i<=12; i++) {
+	 QDate d;
+	 KGlobal::locale()->calendar()->setYMD(d, cSettings_->getYear(), 1, 1);
+	 for (int i=1; i<=KGlobal::locale()->calendar()->monthsInYear(d); i++)
{
 #if KDE_IS_VERSION(3,2,0)
-	     month = KGlobal::locale()->calendar()->monthName(i, false);
+	     month = KGlobal::locale()->calendar()->monthName(i,
cSettings_->getYear(), false);
 #else
	     month = KGlobal::locale()->monthName(i);
 #endif
 @ -238,9 +240,9  @ void CalWizard::slotPageSelected(const Q
	     QString year = QString::number(cSettings_->getYear());

	     QString extra;
-	     if ((QDate::currentDate().month() >= 6 &&
-		  QDate::currentDate().year() == cSettings_->getYear()) ||
-		 QDate::currentDate().year() > cSettings_->getYear())
+	     if ((KGlobal::locale()->calendar()->month(QDate::currentDate()) >=
6 &&
+		  KGlobal::locale()->calendar()->year(QDate::currentDate()) ==
cSettings_->getYear()) ||
+		 KGlobal::locale()->calendar()->year(QDate::currentDate()) >
cSettings_->getYear())
		 extra = "<br><br><b>"+i18n("Please note that you are making a
"
			 "calendar for<br>the current year or a year in the "
			 "past.")+"</b>";
 @ -342,7 +344,7  @ void CalWizard::slotPrintOnePage()

 #if KDE_IS_VERSION(3,2,0)
     wFinishLabel_->setText(i18n("Printing Calendar Page for %1 of %2")
-		     .arg(KGlobal::locale()->calendar()->monthName(month,
false))
+		     .arg(KGlobal::locale()->calendar()->monthName(month,
cSettings_->getYear(), false))
		     .arg(yearName));
 #else
     wFinishLabel_->setText(i18n("Printing Calendar Page for %1 of %2")
diff -pu calendar-bak/monthwidget.cpp calendar/monthwidget.cpp
--- calendar-bak/monthwidget.cpp	2006-10-09 20:25:47.000000000 +0200
+++ calendar/monthwidget.cpp	2006-10-09 22:46:34.000000000 +0200
 @ -86,7 +86,7  @ void MonthWidget::drawContents(QPainter 
 {

 #if KDE_IS_VERSION(3,2,0)
-    QString name = KGlobal::locale()->calendar()->monthName(month_, true);
+    QString name = KGlobal::locale()->calendar()->monthName(month_,
CalSettings::instance()->getYear(), true);
 #else
     QString name = KGlobal::locale()->monthName(month_, true);
 #endif


More information about the Kde-imaging mailing list