lib

DateFormatWidget.cpp

00001 #include "timedateformatwidget.h"
00002 #include "DateFormatWidget.h"
00003 #include "DateFormatWidget.moc"
00004 #include <qdatetime.h>
00005 #include <qcombobox.h>
00006 #include <qcheckbox.h>
00007 #include <qlabel.h>
00008 #include <qbuttongroup.h>
00009 #include <qradiobutton.h>
00010 #include <kglobal.h>
00011 #include <klocale.h>
00012 #include <qlineedit.h>
00013 #include <kdebug.h>
00014 #include <knuminput.h>
00015 #include <KoVariable.h>
00016 
00017 /*
00018  *  Constructs a DateFormatWidget which is a child of 'parent', with the
00019  *  name 'name' and widget flags set to 'fl'
00020  */
00021 DateFormatWidget::DateFormatWidget( QWidget* parent,  const char* name, WFlags fl )
00022     : TimeDateFormatWidgetPrototype( parent, name, fl )
00023 {
00024     setCaption( i18n( "DateFormat", "Format of Date Variable" ) );
00025     QStringList listDateFormat = KoVariableDateFormat::staticTranslatedFormatPropsList();
00026     combo1->insertStringList(listDateFormat);
00027 
00028     combo2->insertItem( i18n( "Day"));
00029     combo2->insertItem( i18n( "Day (2 digits)"));
00030     combo2->insertItem( i18n( "Day (abbreviated name)"));
00031     combo2->insertItem( i18n( "Day (long name)"));
00032     combo2->insertItem( i18n( "Month" ) );
00033     combo2->insertItem( i18n( "Month (2 digits)" ) );
00034     combo2->insertItem( i18n( "Month (abbreviated name)" ) );
00035     combo2->insertItem( i18n( "Month (long name)" ) );
00036     combo2->insertItem( i18n( "Month (possessive abbreviated name)" ) );
00037     combo2->insertItem( i18n( "Month (possessive long name)" ) );
00038     combo2->insertItem( i18n( "Year (2 digits)" ) );
00039     combo2->insertItem( i18n( "Year (4 digits)" ) );
00040 
00041     combo2->insertItem( i18n( "Hour" ) );
00042     combo2->insertItem( i18n( "Hour (2 digits)" ) );
00043     combo2->insertItem( i18n( "Minute" ) );
00044     combo2->insertItem( i18n( "Minute (2 digits)" ) );
00045     combo2->insertItem( i18n( "Second" ) );
00046     combo2->insertItem( i18n( "Second (2 digits)" ) );
00047     combo2->insertItem( i18n( "Millisecond (3 digits)" ) );
00048     combo2->insertItem( i18n( "am/pm" ) );
00049     combo2->insertItem( i18n( "AM/PM" ) );
00050 
00051     combo2->setCurrentItem( 0 );
00052 
00053     label_correction->setText(i18n("Correct in Days"));
00054 
00055     connect( CheckBox1, SIGNAL(toggled ( bool )),this,SLOT(slotPersonalizeChanged(bool)));
00056     connect( combo1, SIGNAL(activated ( const QString & )), this, SLOT(slotDefaultValueChanged(const QString &)));
00057     connect( combo1, SIGNAL(textChanged ( const QString & )), this, SLOT(slotDefaultValueChanged(const QString &)));
00058     connect( KIntNumInput1, SIGNAL(valueChanged(int)), this, SLOT( slotOffsetChanged(int)));
00059     slotPersonalizeChanged(false);
00060 }
00061 
00062 /*
00063  *  Destroys the object and frees any allocated resources
00064  */
00065 DateFormatWidget::~DateFormatWidget()
00066 {
00067     // no need to delete child widgets, Qt does it all for us
00068 }
00069 
00070 /*
00071  * public slot
00072  */
00073 void DateFormatWidget::slotDefaultValueChanged(const QString & )
00074 {
00075     updateLabel();
00076 }
00077 
00078 void DateFormatWidget::slotOffsetChanged(int)
00079 {
00080     updateLabel();
00081 }
00082 
00083 void DateFormatWidget::slotPersonalizeChanged(bool b)
00084 {
00085     combo2->setEnabled(b);
00086     TextLabel1->setEnabled(b);
00087     combo1->setEditable(b);
00088     updateLabel();
00089 
00090 }
00091 
00092 void DateFormatWidget::comboActivated()
00093 {
00094     QString string=combo2->currentText();
00095     if(string==i18n( "Day"))
00096         combo1->lineEdit()->insert("d");
00097     else if(string==i18n( "Day (2 digits)"))
00098         combo1->lineEdit()->insert("dd");
00099     else if(string==i18n( "Day (abbreviated name)"))
00100         combo1->lineEdit()->insert("ddd");
00101     else if(string==i18n( "Day (long name)"))
00102         combo1->lineEdit()->insert("dddd");
00103     else if(string==i18n( "Month" ) )
00104         combo1->lineEdit()->insert("M");
00105     else if(string==i18n( "Month (2 digits)" ) )
00106         combo1->lineEdit()->insert("MM");
00107     else if(string==i18n( "Month (abbreviated name)" ) )
00108         combo1->lineEdit()->insert("MMM");
00109     else if(string==i18n( "Month (long name)" ) )
00110         combo1->lineEdit()->insert("MMMM");
00111     else if(string==i18n( "Month (possessive abbreviated name)" ) )
00112         combo1->lineEdit()->insert("PPP");
00113     else if(string==i18n( "Month (possessive long name)" ) )
00114         combo1->lineEdit()->insert("PPPP");
00115     else if(string==i18n( "Year (2 digits)" ) )
00116         combo1->lineEdit()->insert("yy");
00117     else if(string==i18n( "Year (4 digits)" ) )
00118         combo1->lineEdit()->insert("yyyy");
00119 
00120     else if(string==i18n("Hour"))
00121         combo1->lineEdit()->insert("h");
00122     else if(string==i18n("Hour (2 digits)"))
00123         combo1->lineEdit()->insert("hh");
00124     else if(string==i18n("Minute"))
00125         combo1->lineEdit()->insert("m");
00126     else if(string==i18n("Minute (2 digits)"))
00127         combo1->lineEdit()->insert("mm");
00128     else if(string==i18n("Second"))
00129         combo1->lineEdit()->insert("s");
00130     else if(string==i18n("Second (2 digits)"))
00131         combo1->lineEdit()->insert("ss");
00132     else if(string==i18n("Millisecond (3 digits)"))
00133         combo1->lineEdit()->insert("zzz");
00134     else if(string==i18n("AM/PM"))
00135         combo1->lineEdit()->insert("AP");
00136     else if(string==i18n("am/pm"))
00137         combo1->lineEdit()->insert("ap");
00138 
00139     updateLabel();
00140     combo1->setFocus();
00141 }
00142 
00143 /*
00144  * public slot
00145  */
00146 void DateFormatWidget::updateLabel()
00147 {
00148     KoVariableDateFormat format;
00149     format.setFormatProperties( resultString() );
00150     QDateTime ct = QDateTime::currentDateTime().addDays( correctValue() );
00151     label->setText( format.convert( ct ) );
00152 }
00153 
00154 QString DateFormatWidget::resultString()
00155 {
00156     const QString lookup(combo1->currentText());
00157     const QStringList listTranslated( KoVariableDateFormat::staticTranslatedFormatPropsList() );
00158     const int index = listTranslated.findIndex(lookup);
00159     if (index==-1)
00160         return (lookup); // Either costum or non-locale
00161 
00162     // We have now a locale format, so we must "translate" it back;
00163 
00164     // Lookup untranslated format
00165     const QStringList listRaw( KoVariableDateFormat::staticFormatPropsList() );
00166 
00167     QStringList::ConstIterator it( listRaw.at(index) );
00168     Q_ASSERT( it != listRaw.end() );
00169     if ( it != listRaw.end() )
00170         return *it;
00171     kdError(32500) << "Internal error: could not find correcponding date format: " << lookup << endl;
00172     return QString::null; // Something is wrong, give back a default
00173 }
00174 
00175 int DateFormatWidget::correctValue()
00176 {
00177     return KIntNumInput1->value();
00178 }
KDE Home | KDE Accessibility Home | Description of Access Keys