summaryrefslogtreecommitdiffabout
authorzautrix <zautrix>2005-03-08 11:48:20 (UTC)
committer zautrix <zautrix>2005-03-08 11:48:20 (UTC)
commitf20f8ca063abd322387a72f3f5a65c480f6a4233 (patch) (unidiff)
tree6136c01f0ac27b0ee869d5fb1169ebe95229faef
parent90f53697a44fdcccec00ef8c53fe5c9c15aca713 (diff)
downloadkdepimpi-f20f8ca063abd322387a72f3f5a65c480f6a4233.zip
kdepimpi-f20f8ca063abd322387a72f3f5a65c480f6a4233.tar.gz
kdepimpi-f20f8ca063abd322387a72f3f5a65c480f6a4233.tar.bz2
list weekview fix
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--korganizer/komonthview.cpp18
1 files changed, 12 insertions, 6 deletions
diff --git a/korganizer/komonthview.cpp b/korganizer/komonthview.cpp
index c125ce9..f983ff9 100644
--- a/korganizer/komonthview.cpp
+++ b/korganizer/komonthview.cpp
@@ -866,799 +866,805 @@ KOMonthView::KOMonthView(Calendar *calendar, QWidget *parent, const char *name)
866 mShowWeekView = KOPrefs::instance()->mMonthViewWeek; 866 mShowWeekView = KOPrefs::instance()->mMonthViewWeek;
867 if ( mShowWeekView ) 867 if ( mShowWeekView )
868 mWeekStartsMonday = true; 868 mWeekStartsMonday = true;
869 updatePossible = false; 869 updatePossible = false;
870 //updatePossible = true; 870 //updatePossible = true;
871 mCells.setAutoDelete( true ); 871 mCells.setAutoDelete( true );
872 mShowSatSunComp = KOPrefs::instance()->mMonthViewSatSunTog ; 872 mShowSatSunComp = KOPrefs::instance()->mMonthViewSatSunTog ;
873 mDayLabels.resize( mDaysPerWeek ); 873 mDayLabels.resize( mDaysPerWeek );
874 mDayLabelsW.resize( mDaysPerWeek ); 874 mDayLabelsW.resize( mDaysPerWeek );
875 QFont bfont = font(); 875 QFont bfont = font();
876 if ( QApplication::desktop()->width() < 650 ) { 876 if ( QApplication::desktop()->width() < 650 ) {
877 bfont.setPointSize( bfont.pointSize() - 2 ); 877 bfont.setPointSize( bfont.pointSize() - 2 );
878 } 878 }
879 bfont.setBold( true ); 879 bfont.setBold( true );
880 int i; 880 int i;
881 881
882 for( i = 0; i < mDaysPerWeek; i++ ) { 882 for( i = 0; i < mDaysPerWeek; i++ ) {
883 QLabel *label = new QLabel( mMonthView ); 883 QLabel *label = new QLabel( mMonthView );
884 label->setFont(bfont); 884 label->setFont(bfont);
885 label->setFrameStyle(QFrame::Panel|QFrame::Raised); 885 label->setFrameStyle(QFrame::Panel|QFrame::Raised);
886 label->setLineWidth(1); 886 label->setLineWidth(1);
887 label->setAlignment(AlignCenter); 887 label->setAlignment(AlignCenter);
888 mDayLabels.insert( i, label ); 888 mDayLabels.insert( i, label );
889 label = new QLabel( mWeekView ); 889 label = new QLabel( mWeekView );
890 label->setFont(bfont); 890 label->setFont(bfont);
891 label->setFrameStyle(QFrame::Panel|QFrame::Raised); 891 label->setFrameStyle(QFrame::Panel|QFrame::Raised);
892 label->setLineWidth(1); 892 label->setLineWidth(1);
893 label->setAlignment(AlignCenter); 893 label->setAlignment(AlignCenter);
894 mDayLabelsW.insert( i, label ); 894 mDayLabelsW.insert( i, label );
895 } 895 }
896 896
897 bfont.setBold( false ); 897 bfont.setBold( false );
898 mWeekLabels.resize( mNumWeeks+1 ); 898 mWeekLabels.resize( mNumWeeks+1 );
899 mWeekLabelsW.resize( 2 ); 899 mWeekLabelsW.resize( 2 );
900 for( i = 0; i < mNumWeeks+1; i++ ) { 900 for( i = 0; i < mNumWeeks+1; i++ ) {
901 KOWeekButton *label = new KOWeekButton( mMonthView ); 901 KOWeekButton *label = new KOWeekButton( mMonthView );
902 label->setFocusPolicy(NoFocus); 902 label->setFocusPolicy(NoFocus);
903 label->setFont(bfont); 903 label->setFont(bfont);
904 connect( label, SIGNAL( selectWeekNum ( int )),this, SLOT( selectInternalWeekNum ( int )) ); 904 connect( label, SIGNAL( selectWeekNum ( int )),this, SLOT( selectInternalWeekNum ( int )) );
905 label->setFlat(true); 905 label->setFlat(true);
906 QWhatsThis::add(label,i18n("Click on the week number to\nshow week zoomed")); 906 QWhatsThis::add(label,i18n("Click on the week number to\nshow week zoomed"));
907 //label->setFrameStyle(QFrame::Panel|QFrame::Raised); 907 //label->setFrameStyle(QFrame::Panel|QFrame::Raised);
908 //label->setLineWidth(1); 908 //label->setLineWidth(1);
909 //label->setAlignment(AlignCenter); 909 //label->setAlignment(AlignCenter);
910 mWeekLabels.insert( i, label ); 910 mWeekLabels.insert( i, label );
911 } 911 }
912 mWeekLabels[mNumWeeks]->setText( i18n("W")); 912 mWeekLabels[mNumWeeks]->setText( i18n("W"));
913 QWhatsThis::add(mWeekLabels[mNumWeeks],i18n("Click on this to\nselect week number")); 913 QWhatsThis::add(mWeekLabels[mNumWeeks],i18n("Click on this to\nselect week number"));
914 914
915 for( i = 0; i < 1+1; i++ ) { 915 for( i = 0; i < 1+1; i++ ) {
916 KOWeekButton *label = new KOWeekButton( mWeekView ); 916 KOWeekButton *label = new KOWeekButton( mWeekView );
917 label->setFocusPolicy(NoFocus); 917 label->setFocusPolicy(NoFocus);
918 label->setFont(bfont); 918 label->setFont(bfont);
919 connect( label, SIGNAL( selectWeekNum ( int )),this, SLOT( selectInternalWeekNum ( int )) ); 919 connect( label, SIGNAL( selectWeekNum ( int )),this, SLOT( selectInternalWeekNum ( int )) );
920 label->setFlat(true); 920 label->setFlat(true);
921 QWhatsThis::add(label,i18n("Click on the week number to\nshow week zoomed")); 921 QWhatsThis::add(label,i18n("Click on the week number to\nshow week zoomed"));
922 //label->setFrameStyle(QFrame::Panel|QFrame::Raised); 922 //label->setFrameStyle(QFrame::Panel|QFrame::Raised);
923 //label->setLineWidth(1); 923 //label->setLineWidth(1);
924 //label->setAlignment(AlignCenter); 924 //label->setAlignment(AlignCenter);
925 mWeekLabelsW.insert( i, label ); 925 mWeekLabelsW.insert( i, label );
926 } 926 }
927 mWeekLabelsW[1]->setText( i18n("W")); 927 mWeekLabelsW[1]->setText( i18n("W"));
928 928
929 929
930 int row, col; 930 int row, col;
931 mCells.resize( mNumCells ); 931 mCells.resize( mNumCells );
932 for( row = 0; row < mNumWeeks; ++row ) { 932 for( row = 0; row < mNumWeeks; ++row ) {
933 for( col = 0; col < mDaysPerWeek; ++col ) { 933 for( col = 0; col < mDaysPerWeek; ++col ) {
934 MonthViewCell *cell = new MonthViewCell( this, mMonthView ); 934 MonthViewCell *cell = new MonthViewCell( this, mMonthView );
935 mCells.insert( row * mDaysPerWeek + col, cell ); 935 mCells.insert( row * mDaysPerWeek + col, cell );
936 936
937 connect( cell, SIGNAL( defaultAction( Incidence * ) ), 937 connect( cell, SIGNAL( defaultAction( Incidence * ) ),
938 SLOT( defaultAction( Incidence * ) ) ); 938 SLOT( defaultAction( Incidence * ) ) );
939 connect( cell, SIGNAL( newEventSignal( QDateTime ) ), 939 connect( cell, SIGNAL( newEventSignal( QDateTime ) ),
940 SIGNAL( newEventSignal( QDateTime ) ) ); 940 SIGNAL( newEventSignal( QDateTime ) ) );
941 connect( cell, SIGNAL( showDaySignal( QDate ) ), 941 connect( cell, SIGNAL( showDaySignal( QDate ) ),
942 SIGNAL( showDaySignal( QDate ) ) ); 942 SIGNAL( showDaySignal( QDate ) ) );
943 } 943 }
944 } 944 }
945 mCellsW.resize( mDaysPerWeek ); 945 mCellsW.resize( mDaysPerWeek );
946 for( col = 0; col < mDaysPerWeek; ++col ) { 946 for( col = 0; col < mDaysPerWeek; ++col ) {
947 MonthViewCell *cell = new MonthViewCell( this, mWeekView ); 947 MonthViewCell *cell = new MonthViewCell( this, mWeekView );
948 mCellsW.insert( col, cell ); 948 mCellsW.insert( col, cell );
949 949
950 connect( cell, SIGNAL( defaultAction( Incidence * ) ), 950 connect( cell, SIGNAL( defaultAction( Incidence * ) ),
951 SLOT( defaultAction( Incidence * ) ) ); 951 SLOT( defaultAction( Incidence * ) ) );
952 connect( cell, SIGNAL( newEventSignal( QDateTime ) ), 952 connect( cell, SIGNAL( newEventSignal( QDateTime ) ),
953 SIGNAL( newEventSignal( QDateTime ) ) ); 953 SIGNAL( newEventSignal( QDateTime ) ) );
954 connect( cell, SIGNAL( showDaySignal( QDate ) ), 954 connect( cell, SIGNAL( showDaySignal( QDate ) ),
955 SIGNAL( showDaySignal( QDate ) ) ); 955 SIGNAL( showDaySignal( QDate ) ) );
956 cell->updateConfig(KOPrefs::instance()->mMonthViewUsesBigFont ); 956 cell->updateConfig(KOPrefs::instance()->mMonthViewUsesBigFont );
957 } 957 }
958 958
959 //connect( mWeekLabels[mNumWeeks], SIGNAL( clicked() ), SLOT( switchView() ) ); 959 //connect( mWeekLabels[mNumWeeks], SIGNAL( clicked() ), SLOT( switchView() ) );
960 mContextMenu = eventPopup(); 960 mContextMenu = eventPopup();
961 // updateConfig(); //useless here... 961 // updateConfig(); //useless here...
962 // ... but we need mWidthLongDayLabel computed 962 // ... but we need mWidthLongDayLabel computed
963 QFontMetrics fontmetric(mDayLabels[0]->font()); 963 QFontMetrics fontmetric(mDayLabels[0]->font());
964 mWidthLongDayLabel = 0; 964 mWidthLongDayLabel = 0;
965 for (int i = 0; i < 7; i++) { 965 for (int i = 0; i < 7; i++) {
966 int width = fontmetric.width(KOGlobals::self()->calendarSystem()->weekDayName(i+1)); 966 int width = fontmetric.width(KOGlobals::self()->calendarSystem()->weekDayName(i+1));
967 if ( width > mWidthLongDayLabel ) mWidthLongDayLabel = width; 967 if ( width > mWidthLongDayLabel ) mWidthLongDayLabel = width;
968 } 968 }
969 969
970 //mWeekLabels[mNumWeeks]->setText( i18n("W")); 970 //mWeekLabels[mNumWeeks]->setText( i18n("W"));
971 971
972#if 0 972#if 0
973 if ( mShowWeekView ) 973 if ( mShowWeekView )
974 mWidStack->raiseWidget( mWeekView ); 974 mWidStack->raiseWidget( mWeekView );
975 else 975 else
976 mWidStack->raiseWidget( mMonthView ); 976 mWidStack->raiseWidget( mMonthView );
977#endif 977#endif
978 978
979 emit incidenceSelected( 0 ); 979 emit incidenceSelected( 0 );
980#ifndef DESKTOP_VERSION 980#ifndef DESKTOP_VERSION
981 resize( QApplication::desktop()->size() ); 981 resize( QApplication::desktop()->size() );
982#else 982#else
983 resize(640, 480 ); 983 resize(640, 480 );
984 updatePossible = true; 984 updatePossible = true;
985#endif 985#endif
986 computeLayout(); 986 computeLayout();
987 987
988 if ( mShowWeekView ) 988 if ( mShowWeekView )
989 mWidStack->raiseWidget( mWeekView ); 989 mWidStack->raiseWidget( mWeekView );
990 else 990 else
991 mWidStack->raiseWidget( mMonthView ); 991 mWidStack->raiseWidget( mMonthView );
992} 992}
993 993
994KOMonthView::~KOMonthView() 994KOMonthView::~KOMonthView()
995{ 995{
996 delete mContextMenu; 996 delete mContextMenu;
997} 997}
998 998
999void KOMonthView::selectInternalWeekNum ( int n ) 999void KOMonthView::selectInternalWeekNum ( int n )
1000{ 1000{
1001 switchView(); 1001 switchView();
1002 if ( !KOPrefs::instance()->mMonthViewWeek ) 1002 if ( !KOPrefs::instance()->mMonthViewWeek )
1003 emit selectMonth (); 1003 emit selectMonth ();
1004 else 1004 else
1005 emit selectWeekNum ( n ); 1005 emit selectWeekNum ( n );
1006} 1006}
1007 1007
1008int KOMonthView::currentWeek() 1008int KOMonthView::currentWeek()
1009{ 1009{
1010 if ( mShowWeekView ) 1010 if ( mShowWeekView )
1011 return mWeekLabelsW[0]->getWeekNum(); 1011 return mWeekLabelsW[0]->getWeekNum();
1012 return mWeekLabels[0]->getWeekNum(); 1012 return mWeekLabels[0]->getWeekNum();
1013} 1013}
1014void KOMonthView::switchView() 1014void KOMonthView::switchView()
1015{ 1015{
1016 if ( selectedCell( ) ) 1016 if ( selectedCell( ) )
1017 selectedCell()->deselect(); 1017 selectedCell()->deselect();
1018 mShowWeekView = !mShowWeekView; 1018 mShowWeekView = !mShowWeekView;
1019 KOPrefs::instance()->mMonthViewWeek = mShowWeekView; 1019 KOPrefs::instance()->mMonthViewWeek = mShowWeekView;
1020 if ( clPending ) { 1020 if ( clPending ) {
1021 computeLayout(); 1021 computeLayout();
1022 updateConfig(); 1022 updateConfig();
1023 } 1023 }
1024 if ( mShowWeekView ) 1024 if ( mShowWeekView )
1025 mWidStack->raiseWidget( mWeekView ); 1025 mWidStack->raiseWidget( mWeekView );
1026 else 1026 else
1027 mWidStack->raiseWidget( mMonthView ); 1027 mWidStack->raiseWidget( mMonthView );
1028 clPending = false; 1028 clPending = false;
1029} 1029}
1030 1030
1031int KOMonthView::maxDatesHint() 1031int KOMonthView::maxDatesHint()
1032{ 1032{
1033 return mNumCells; 1033 return mNumCells;
1034} 1034}
1035 1035
1036int KOMonthView::currentDateCount() 1036int KOMonthView::currentDateCount()
1037{ 1037{
1038 return mNumCells; 1038 return mNumCells;
1039} 1039}
1040 1040
1041QPtrList<Incidence> KOMonthView::selectedIncidences() 1041QPtrList<Incidence> KOMonthView::selectedIncidences()
1042{ 1042{
1043 QPtrList<Incidence> selected; 1043 QPtrList<Incidence> selected;
1044 1044
1045 if ( mSelectedCell ) { 1045 if ( mSelectedCell ) {
1046 Incidence *incidence = mSelectedCell->selectedIncidence(); 1046 Incidence *incidence = mSelectedCell->selectedIncidence();
1047 if ( incidence ) selected.append( incidence ); 1047 if ( incidence ) selected.append( incidence );
1048 } 1048 }
1049 1049
1050 return selected; 1050 return selected;
1051} 1051}
1052 1052
1053DateList KOMonthView::selectedDates() 1053DateList KOMonthView::selectedDates()
1054{ 1054{
1055 DateList selected; 1055 DateList selected;
1056 1056
1057 if ( mSelectedCell ) { 1057 if ( mSelectedCell ) {
1058 QDate qd = mSelectedCell->selectedIncidenceDate(); 1058 QDate qd = mSelectedCell->selectedIncidenceDate();
1059 if ( qd.isValid() ) selected.append( qd ); 1059 if ( qd.isValid() ) selected.append( qd );
1060 } 1060 }
1061 1061
1062 return selected; 1062 return selected;
1063} 1063}
1064 1064
1065void KOMonthView::printPreview(CalPrinter *calPrinter, const QDate &fd, 1065void KOMonthView::printPreview(CalPrinter *calPrinter, const QDate &fd,
1066 const QDate &td) 1066 const QDate &td)
1067{ 1067{
1068#ifndef KORG_NOPRINTER 1068#ifndef KORG_NOPRINTER
1069 calPrinter->preview(CalPrinter::Month, fd, td); 1069 calPrinter->preview(CalPrinter::Month, fd, td);
1070#endif 1070#endif
1071} 1071}
1072 1072
1073void KOMonthView::updateConfig() 1073void KOMonthView::updateConfig()
1074{ 1074{
1075 1075
1076 mWeekStartsMonday = KGlobal::locale()->weekStartsMonday(); 1076 mWeekStartsMonday = KGlobal::locale()->weekStartsMonday();
1077 1077
1078 if ( mShowWeekView ) { 1078 if ( mShowWeekView ) {
1079 mWeekStartsMonday = true; 1079 mWeekStartsMonday = true;
1080 } 1080 }
1081 QFontMetrics fontmetric(mDayLabels[0]->font()); 1081 QFontMetrics fontmetric(mDayLabels[0]->font());
1082 mWidthLongDayLabel = 0; 1082 mWidthLongDayLabel = 0;
1083 1083
1084 for (int i = 0; i < 7; i++) { 1084 for (int i = 0; i < 7; i++) {
1085 int width = fontmetric.width(KOGlobals::self()->calendarSystem()->weekDayName(i+1)); 1085 int width = fontmetric.width(KOGlobals::self()->calendarSystem()->weekDayName(i+1));
1086 if ( width > mWidthLongDayLabel ) mWidthLongDayLabel = width; 1086 if ( width > mWidthLongDayLabel ) mWidthLongDayLabel = width;
1087 } 1087 }
1088 bool temp = mShowSatSunComp ; 1088 bool temp = mShowSatSunComp ;
1089 mShowSatSunComp = KOPrefs::instance()->mMonthViewSatSunTog ; 1089 mShowSatSunComp = KOPrefs::instance()->mMonthViewSatSunTog ;
1090 if ( ! mShowWeekView ) { 1090 if ( ! mShowWeekView ) {
1091 if ( temp != KOPrefs::instance()->mMonthViewSatSunTog ) 1091 if ( temp != KOPrefs::instance()->mMonthViewSatSunTog )
1092 computeLayout(); 1092 computeLayout();
1093 } 1093 }
1094 updateDayLabels(); 1094 updateDayLabels();
1095 //qDebug("KOMonthView::updateConfig() %d %d %d ",height(), mDayLabels[0]->sizeHint().height() ,mNumWeeks); 1095 //qDebug("KOMonthView::updateConfig() %d %d %d ",height(), mDayLabels[0]->sizeHint().height() ,mNumWeeks);
1096 //int cellHeight = (height() - mDayLabels[0]->sizeHint().height()) /mNumWeeks; 1096 //int cellHeight = (height() - mDayLabels[0]->sizeHint().height()) /mNumWeeks;
1097 //resizeEvent( 0 ); 1097 //resizeEvent( 0 );
1098 for (uint i = 0; i < mCells.count(); ++i) { 1098 for (uint i = 0; i < mCells.count(); ++i) {
1099 mCells[i]->updateConfig(); 1099 mCells[i]->updateConfig();
1100 } 1100 }
1101 1101
1102 for (uint i = 0; i < mCellsW.count(); ++i) { 1102 for (uint i = 0; i < mCellsW.count(); ++i) {
1103 mCellsW[i]->updateConfig(KOPrefs::instance()->mMonthViewUsesBigFont); 1103 mCellsW[i]->updateConfig(KOPrefs::instance()->mMonthViewUsesBigFont);
1104 } 1104 }
1105#ifdef DESKTOP_VERSION 1105#ifdef DESKTOP_VERSION
1106 MonthViewCell::toolTipGroup()->setEnabled(KOPrefs::instance()->mEnableToolTips); 1106 MonthViewCell::toolTipGroup()->setEnabled(KOPrefs::instance()->mEnableToolTips);
1107#endif 1107#endif
1108 updateView(); 1108 updateView();
1109} 1109}
1110 1110
1111void KOMonthView::updateDayLabels() 1111void KOMonthView::updateDayLabels()
1112{ 1112{
1113 1113
1114 QPtrVector<QLabel> *mDayLabelsT; 1114 QPtrVector<QLabel> *mDayLabelsT;
1115 1115
1116 mDayLabelsT = &mDayLabelsW; 1116 mDayLabelsT = &mDayLabelsW;
1117 for (int i = 0; i < 7; i++) { 1117 for (int i = 0; i < 7; i++) {
1118 if (mWeekStartsMonday) { 1118 if (mWeekStartsMonday) {
1119 bool show = mShortDayLabelsW; 1119 bool show = mShortDayLabelsW;
1120 if ( i > 4 && mShowSatSunComp && mWidthLongDayLabel > (*mDayLabelsT)[i]->width() ) 1120 if ( i > 4 && mShowSatSunComp && mWidthLongDayLabel > (*mDayLabelsT)[i]->width() )
1121 show = true; 1121 show = true;
1122 (*mDayLabelsT)[i]->setText(KOGlobals::self()->calendarSystem()->weekDayName(i+1,show)); 1122 (*mDayLabelsT)[i]->setText(KOGlobals::self()->calendarSystem()->weekDayName(i+1,show));
1123 } else { 1123 } else {
1124 if (i==0) (*mDayLabelsT)[i]->setText(KOGlobals::self()->calendarSystem()->weekDayName(7,mShortDayLabelsW)); 1124 if (i==0) (*mDayLabelsT)[i]->setText(KOGlobals::self()->calendarSystem()->weekDayName(7,mShortDayLabelsW));
1125 else (*mDayLabelsT)[i]->setText(KOGlobals::self()->calendarSystem()->weekDayName(i,mShortDayLabelsW)); 1125 else (*mDayLabelsT)[i]->setText(KOGlobals::self()->calendarSystem()->weekDayName(i,mShortDayLabelsW));
1126 1126
1127 } 1127 }
1128 } 1128 }
1129 mDayLabelsT = &mDayLabels; 1129 mDayLabelsT = &mDayLabels;
1130 for (int i = 0; i < 7; i++) { 1130 for (int i = 0; i < 7; i++) {
1131 if (mWeekStartsMonday) { 1131 if (mWeekStartsMonday) {
1132 bool show = mShortDayLabelsM; 1132 bool show = mShortDayLabelsM;
1133 if ( i > 4 && mShowSatSunComp && mWidthLongDayLabel > (*mDayLabelsT)[i]->width() ) 1133 if ( i > 4 && mShowSatSunComp && mWidthLongDayLabel > (*mDayLabelsT)[i]->width() )
1134 show = true; 1134 show = true;
1135 (*mDayLabelsT)[i]->setText(KOGlobals::self()->calendarSystem()->weekDayName(i+1,show)); 1135 (*mDayLabelsT)[i]->setText(KOGlobals::self()->calendarSystem()->weekDayName(i+1,show));
1136 } else { 1136 } else {
1137 if (i==0) (*mDayLabelsT)[i]->setText(KOGlobals::self()->calendarSystem()->weekDayName(7,mShortDayLabelsM)); 1137 if (i==0) (*mDayLabelsT)[i]->setText(KOGlobals::self()->calendarSystem()->weekDayName(7,mShortDayLabelsM));
1138 else (*mDayLabelsT)[i]->setText(KOGlobals::self()->calendarSystem()->weekDayName(i,mShortDayLabelsM)); 1138 else (*mDayLabelsT)[i]->setText(KOGlobals::self()->calendarSystem()->weekDayName(i,mShortDayLabelsM));
1139 1139
1140 } 1140 }
1141 } 1141 }
1142 1142
1143} 1143}
1144 1144
1145void KOMonthView::showDates(const QDate &start, const QDate &) 1145void KOMonthView::showDates(const QDate &start, const QDate &)
1146{ 1146{
1147 // kdDebug() << "KOMonthView::showDates(): " << start.toString() << endl; 1147 // kdDebug() << "KOMonthView::showDates(): " << start.toString() << endl;
1148 1148
1149 QPtrVector<MonthViewCell> *cells; 1149 QPtrVector<MonthViewCell> *cells;
1150 QPtrVector<QLabel> *dayLabels; 1150 QPtrVector<QLabel> *dayLabels;
1151 QPtrVector<KOWeekButton> *weekLabels; 1151 QPtrVector<KOWeekButton> *weekLabels;
1152 int weekNum = 6; 1152 int weekNum = 6;
1153 if ( mShowWeekView ) { 1153 if ( mShowWeekView ) {
1154 weekNum = 1; 1154 weekNum = 1;
1155 cells = &mCellsW; 1155 cells = &mCellsW;
1156 dayLabels = &mDayLabelsW; 1156 dayLabels = &mDayLabelsW;
1157 weekLabels = &mWeekLabelsW; 1157 weekLabels = &mWeekLabelsW;
1158 } else { 1158 } else {
1159 cells = &mCells; 1159 cells = &mCells;
1160 dayLabels = &mDayLabels; 1160 dayLabels = &mDayLabels;
1161 weekLabels = &mWeekLabels; 1161 weekLabels = &mWeekLabels;
1162 } 1162 }
1163 1163
1164 mStartDate = start; 1164 mStartDate = start;
1165 1165
1166 int startWeekDay = mWeekStartsMonday ? 1 : 7; 1166 int startWeekDay = mWeekStartsMonday ? 1 : 7;
1167 1167
1168 while( KOGlobals::self()->calendarSystem()->dayOfWeek(mStartDate) != startWeekDay ) { 1168 while( KOGlobals::self()->calendarSystem()->dayOfWeek(mStartDate) != startWeekDay ) {
1169 mStartDate = mStartDate.addDays( -1 ); 1169 mStartDate = mStartDate.addDays( -1 );
1170 } 1170 }
1171 1171
1172 bool primary = false; 1172 bool primary = false;
1173 uint i; 1173 uint i;
1174 for( i = 0; i < (*cells).size(); ++i ) { 1174 for( i = 0; i < (*cells).size(); ++i ) {
1175 QDate date = mStartDate.addDays( i ); 1175 QDate date = mStartDate.addDays( i );
1176 (*cells)[i]->setDate( date ); 1176 (*cells)[i]->setDate( date );
1177 1177
1178#ifndef KORG_NOPLUGINS 1178#ifndef KORG_NOPLUGINS
1179 // add holiday, if present 1179 // add holiday, if present
1180 QString hstring(KOCore::self()->holiday(date)); 1180 QString hstring(KOCore::self()->holiday(date));
1181 (*cells)[i]->setHoliday( hstring ); 1181 (*cells)[i]->setHoliday( hstring );
1182#endif 1182#endif
1183 1183
1184 } 1184 }
1185 QDate date = mStartDate.addDays( mWeekStartsMonday ? 3 : 4 ); 1185 QDate date = mStartDate.addDays( mWeekStartsMonday ? 3 : 4 );
1186 for( i = 0; i < weekNum; ++i ) { 1186 for( i = 0; i < weekNum; ++i ) {
1187 int wno; 1187 int wno;
1188 // remember, according to ISO 8601, the first week of the year is the 1188 // remember, according to ISO 8601, the first week of the year is the
1189 // first week that contains a thursday. Thus we must subtract off 4, 1189 // first week that contains a thursday. Thus we must subtract off 4,
1190 // not just 1. 1190 // not just 1.
1191 int dayOfYear = date.dayOfYear(); 1191 int dayOfYear = date.dayOfYear();
1192 if (dayOfYear % 7 != 0) 1192 if (dayOfYear % 7 != 0)
1193 wno = dayOfYear / 7 + 1; 1193 wno = dayOfYear / 7 + 1;
1194 else 1194 else
1195 wno =dayOfYear / 7; 1195 wno =dayOfYear / 7;
1196 (*weekLabels)[i]->setWeekNum( wno ); 1196 (*weekLabels)[i]->setWeekNum( wno );
1197 date = date.addDays( 7 ); 1197 date = date.addDays( 7 );
1198 } 1198 }
1199 updateView(); 1199 updateView();
1200} 1200}
1201 1201
1202void KOMonthView::showEvents(QPtrList<Event>) 1202void KOMonthView::showEvents(QPtrList<Event>)
1203{ 1203{
1204 qDebug("KOMonthView::selectEvents is not implemented yet. "); 1204 qDebug("KOMonthView::selectEvents is not implemented yet. ");
1205} 1205}
1206 1206
1207void KOMonthView::changeEventDisplay(Event *, int) 1207void KOMonthView::changeEventDisplay(Event *, int)
1208{ 1208{
1209 // this should be re-written to be much more efficient, but this 1209 // this should be re-written to be much more efficient, but this
1210 // quick-and-dirty-hack gets the job done for right now. 1210 // quick-and-dirty-hack gets the job done for right now.
1211 updateView(); 1211 updateView();
1212} 1212}
1213 1213
1214void KOMonthView::updateView() 1214void KOMonthView::updateView()
1215{ 1215{
1216 1216
1217 if ( !updatePossible ) 1217 if ( !updatePossible )
1218 return; 1218 return;
1219 //QTime ti; 1219 //QTime ti;
1220 //ti.start(); 1220 //ti.start();
1221 QPtrVector<MonthViewCell> *cells; 1221 QPtrVector<MonthViewCell> *cells;
1222 if ( mShowWeekView ) { 1222 if ( mShowWeekView ) {
1223 cells = &mCellsW; 1223 cells = &mCellsW;
1224 } else { 1224 } else {
1225 cells = &mCells; 1225 cells = &mCells;
1226 } 1226 }
1227#if 1 1227#if 1
1228 int i; 1228 int i;
1229 int timeSpan = (*cells).size()-1; 1229 int timeSpan = (*cells).size()-1;
1230 if ( KOPrefs::instance()->mMonthViewWeek ) 1230 if ( KOPrefs::instance()->mMonthViewWeek )
1231 timeSpan = 6; 1231 timeSpan = 6;
1232 for( i = 0; i < timeSpan + 1; ++i ) { 1232 for( i = 0; i < timeSpan + 1; ++i ) {
1233 (*cells)[i]->startUpdateCell(); 1233 (*cells)[i]->startUpdateCell();
1234 } 1234 }
1235 1235
1236 QPtrList<Event> events = calendar()->events(); 1236 QPtrList<Event> events = calendar()->events();
1237 Event *event; 1237 Event *event;
1238 QDateTime dt; 1238 QDateTime dt;
1239 bool ok; 1239 bool ok;
1240 QDate endDate = mStartDate.addDays( timeSpan ); 1240 QDate endDate = mStartDate.addDays( timeSpan );
1241 for( event = events.first(); event; event = events.next() ) { // for event 1241 for( event = events.first(); event; event = events.next() ) { // for event
1242 if ( event->doesRecur() ) { 1242 if ( event->doesRecur() ) {
1243 bool last; 1243 bool last;
1244 QDateTime incidenceStart = event->recurrence()->getPreviousDateTime( QDateTime( mStartDate ) , &last ); 1244 QDateTime incidenceStart = event->recurrence()->getPreviousDateTime( QDateTime( mStartDate ) , &last );
1245 QDateTime incidenceEnd; 1245 QDateTime incidenceEnd;
1246 int eventlen = event->dtStart().date().daysTo ( event->dtEnd().date() ); 1246 int eventlen = event->dtStart().date().daysTo ( event->dtEnd().date() );
1247 bool invalid = false; 1247 bool invalid = false;
1248 while( true ) { 1248 while( true ) {
1249 if ( incidenceStart.isValid() ) { 1249 if ( incidenceStart.isValid() ) {
1250 incidenceEnd = incidenceStart.addDays( eventlen ); 1250 incidenceEnd = incidenceStart.addDays( eventlen );
1251 int st = incidenceStart.date().daysTo( endDate ); 1251 int st = incidenceStart.date().daysTo( endDate );
1252 if ( st >= 0 ) { // start before timeend 1252 if ( st >= 0 ) { // start before timeend
1253 int end = mStartDate.daysTo( incidenceEnd.date() ); 1253 int end = mStartDate.daysTo( incidenceEnd.date() );
1254 if ( end >= 0 ) { // end after timestart --- got one! 1254 if ( end >= 0 ) { // end after timestart --- got one!
1255 //normalize 1255 //normalize
1256 st = timeSpan - st; 1256 st = timeSpan - st;
1257 if ( st < 0 ) st = 0; 1257 if ( st < 0 ) st = 0;
1258 if ( end > timeSpan ) end = timeSpan; 1258 if ( end > timeSpan ) end = timeSpan;
1259 int iii; 1259 int iii;
1260 //qDebug("found %s %d %d ",event->summary().latin1(), st, end ); 1260 //qDebug("found %s %d %d ",event->summary().latin1(), st, end );
1261 for ( iii = st;iii<= end;++iii) 1261 for ( iii = st;iii<= end;++iii)
1262 (*cells)[iii]->insertEvent( event ); 1262 (*cells)[iii]->insertEvent( event );
1263 } 1263 }
1264 } 1264 }
1265 } else { 1265 } else {
1266 if ( invalid ) 1266 if ( invalid )
1267 break; 1267 break;
1268 invalid = true; 1268 invalid = true;
1269 //qDebug("invalid %s", event->summary().latin1()); 1269 //qDebug("invalid %s", event->summary().latin1());
1270 incidenceStart = QDateTime( mStartDate ).addSecs( -2 );; 1270 incidenceStart = QDateTime( mStartDate ).addSecs( -2 );;
1271 } 1271 }
1272 if ( last ) 1272 if ( last )
1273 break; 1273 break;
1274 bool ok; 1274 bool ok;
1275 incidenceStart = event->getNextOccurence( incidenceStart.addSecs( 1 ) ,&ok ); 1275 incidenceStart = event->getNextOccurence( incidenceStart.addSecs( 1 ) ,&ok );
1276 if ( ! ok ) 1276 if ( ! ok )
1277 break; 1277 break;
1278 if ( incidenceStart.date() > endDate ) 1278 if ( incidenceStart.date() > endDate )
1279 break; 1279 break;
1280 } 1280 }
1281 } else { // no recur 1281 } else { // no recur
1282 int st = event->dtStart().date().daysTo( endDate ); 1282 int st = event->dtStart().date().daysTo( endDate );
1283 if ( st >= 0 ) { // start before timeend 1283 if ( st >= 0 ) { // start before timeend
1284 int end = mStartDate.daysTo( event->dtEnd().date() ); 1284 int end = mStartDate.daysTo( event->dtEnd().date() );
1285 if ( end >= 0 ) { // end after timestart --- got one! 1285 if ( end >= 0 ) { // end after timestart --- got one!
1286 //normalize 1286 //normalize
1287 st = timeSpan - st; 1287 st = timeSpan - st;
1288 if ( st < 0 ) st = 0; 1288 if ( st < 0 ) st = 0;
1289 if ( end > timeSpan ) end = timeSpan; 1289 if ( end > timeSpan ) end = timeSpan;
1290 int iii; 1290 int iii;
1291 for ( iii = st;iii<= end;++iii) 1291 for ( iii = st;iii<= end;++iii)
1292 (*cells)[iii]->insertEvent( event ); 1292 (*cells)[iii]->insertEvent( event );
1293 } 1293 }
1294 } 1294 }
1295 } 1295 }
1296 } 1296 }
1297 // insert due todos 1297 // insert due todos
1298 QPtrList<Todo> todos = calendar()->todos( ); 1298 QPtrList<Todo> todos = calendar()->todos( );
1299 Todo *todo; 1299 Todo *todo;
1300 for(todo = todos.first(); todo; todo = todos.next()) { 1300 for(todo = todos.first(); todo; todo = todos.next()) {
1301 //insertTodo( todo ); 1301 //insertTodo( todo );
1302 if ( todo->hasDueDate() ) { 1302 if ( todo->hasDueDate() ) {
1303 int day = mStartDate.daysTo( todo->dtDue().date() ); 1303 int day = mStartDate.daysTo( todo->dtDue().date() );
1304 if ( day >= 0 && day < timeSpan + 1) { 1304 if ( day >= 0 && day < timeSpan + 1) {
1305 (*cells)[day]->insertTodo( todo ); 1305 (*cells)[day]->insertTodo( todo );
1306 } 1306 }
1307 } 1307 }
1308 } 1308 }
1309 1309
1310 for( i = 0; i < timeSpan+1; ++i ) { 1310 for( i = 0; i < timeSpan+1; ++i ) {
1311 (*cells)[i]->finishUpdateCell(); 1311 (*cells)[i]->finishUpdateCell();
1312 } 1312 }
1313 processSelectionChange(); 1313 processSelectionChange();
1314 (*cells)[0]->setFocus(); 1314 (*cells)[0]->setFocus();
1315 1315
1316 1316
1317#else 1317#else
1318 // old code 1318 // old code
1319 //qDebug("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ "); 1319 //qDebug("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ");
1320 int i; 1320 int i;
1321 for( i = 0; i < (*cells).count(); ++i ) { 1321 for( i = 0; i < (*cells).count(); ++i ) {
1322 (*cells)[i]->updateCell(); 1322 (*cells)[i]->updateCell();
1323 } 1323 }
1324 1324
1325 //qDebug("KOMonthView::updateView() "); 1325 //qDebug("KOMonthView::updateView() ");
1326 processSelectionChange(); 1326 processSelectionChange();
1327 // qDebug("---------------------------------------------------------------------+ "); 1327 // qDebug("---------------------------------------------------------------------+ ");
1328 (*cells)[0]->setFocus(); 1328 (*cells)[0]->setFocus();
1329#endif 1329#endif
1330 1330
1331 //qDebug("update time %d ", ti.elapsed()); 1331 //qDebug("update time %d ", ti.elapsed());
1332} 1332}
1333 1333
1334void KOMonthView::resizeEvent(QResizeEvent * e) 1334void KOMonthView::resizeEvent(QResizeEvent * e)
1335{ 1335{
1336 //qDebug("KOMonthView::resizeEvent %d %d -- %d %d ", e->size().width(), e->size().height(), e->oldSize().width(), e->oldSize().height()); 1336 //qDebug("KOMonthView::resizeEvent %d %d -- %d %d ", e->size().width(), e->size().height(), e->oldSize().width(), e->oldSize().height());
1337 computeLayout(); 1337 computeLayout();
1338 clPending = true; 1338 clPending = true;
1339 if ( mShowWeekView ) 1339 if ( mShowWeekView )
1340 mCellsW[0]->setFocus(); 1340 mCellsW[0]->setFocus();
1341 else 1341 else
1342 mCells[0]->setFocus(); 1342 mCells[0]->setFocus();
1343} 1343}
1344void KOMonthView::computeLayoutWeek() 1344void KOMonthView::computeLayoutWeek()
1345{ 1345{
1346 static int lastWid = 0; 1346 static int lastWid = 0;
1347 static int lastHei = 0; 1347 static int lastHei = 0;
1348 int daysToShow; 1348 int daysToShow;
1349 bool combinedSatSun = false; 1349 bool combinedSatSun = false;
1350 if (mShowSatSunComp = KOPrefs::instance()->mMonthViewSatSunTog ) { 1350 if (mShowSatSunComp = KOPrefs::instance()->mMonthViewSatSunTog ) {
1351 daysToShow = 6; 1351 daysToShow = 6;
1352 combinedSatSun = true; 1352 combinedSatSun = true;
1353 } 1353 }
1354 int tWid = topLevelWidget()->size().width(); 1354 int tWid = topLevelWidget()->size().width();
1355 int tHei = topLevelWidget()->size().height(); 1355 int tHei = topLevelWidget()->size().height();
1356 1356
1357 int wid = width();//e 1357 int wid = width();//e
1358 int hei = height()-1-mNavigatorBar->height(); 1358 int hei = height()-1-mNavigatorBar->height();
1359 1359
1360 if ( ((wid *3)/2) < tWid && (( hei *3) /2) < tHei ) 1360 if ( ((wid *3)/2) < tWid && (( hei *3) /2) < tHei )
1361 return; 1361 return;
1362 1362
1363 if ( lastWid == width() && lastHei == height() ) 1363 if ( lastWid == width() && lastHei == height() )
1364 return; 1364 return;
1365 lastWid = width(); 1365 lastWid = width();
1366 lastHei = height(); 1366 lastHei = height();
1367 1367
1368 1368
1369 if ( wid < hei ) 1369 if ( wid < hei )
1370 daysToShow = 2; 1370 daysToShow = 2;
1371 else 1371 else
1372 daysToShow = 3; 1372 daysToShow = 3;
1373 mShowSatSunComp = true; 1373 mShowSatSunComp = true;
1374 combinedSatSun = true; 1374 combinedSatSun = true;
1375 1375
1376 //qDebug("KOMonthView::computeLayout() WWW ------------------------------------ "); 1376 //qDebug("KOMonthView::computeLayout() WWW ------------------------------------ ");
1377 QFontMetrics fm ( mWeekLabels[0]->font() ); 1377 QFontMetrics fm ( mWeekLabels[0]->font() );
1378 int weeklabelwid = fm.width( "888" ); 1378 int weeklabelwid = fm.width( "888" );
1379 wid -= weeklabelwid; 1379 wid -= weeklabelwid;
1380 1380
1381 int colWid = wid / daysToShow; 1381 int colWid = wid / daysToShow;
1382 int lastCol = wid - ( colWid*6 ); 1382 int lastCol = wid - ( colWid*6 );
1383 int dayLabelHei = mDayLabelsW[0]->sizeHint().height(); 1383 int dayLabelHei = mDayLabelsW[0]->sizeHint().height();
1384 int cellHei = (hei - (5- daysToShow )*dayLabelHei) /(5- daysToShow ); 1384 int cellHei = (hei - (5- daysToShow )*dayLabelHei) /(5- daysToShow );
1385 int colModulo = wid % daysToShow; 1385 int colModulo = wid % daysToShow;
1386 int rowModulo = (hei- (5- daysToShow )*dayLabelHei) % daysToShow-1; 1386 int rowModulo = (hei- (5- daysToShow )*dayLabelHei) % daysToShow-1;
1387 //qDebug("rowmod %d ", rowModulo); 1387 //qDebug("rowmod %d ", rowModulo);
1388 int i; 1388 int i;
1389 int x,y,w,h; 1389 int x,y,w,h;
1390 x= 0; 1390 x= 0;
1391 y= 0; 1391 y= 0;
1392 w = colWid; 1392 w = colWid;
1393 h = dayLabelHei ; 1393 h = dayLabelHei ;
1394 for ( i = 0; i < 7; i++) { 1394 for ( i = 0; i < 7; i++) {
1395 if ( i && !( i % daysToShow) && i < 6) { 1395 if ( i && !( i % daysToShow) && i < 6) {
1396 y += hei/(5-daysToShow); 1396 y += hei/(5-daysToShow);
1397 x = 0; 1397 x = 0;
1398 w = colWid; 1398 w = colWid;
1399 } 1399 }
1400 if ( ((i) % daysToShow) >= daysToShow-colModulo ) { 1400 if ( ((i) % daysToShow) >= daysToShow-colModulo ) {
1401 ++w; 1401 ++w;
1402 } 1402 }
1403 if ( i >= 5 ) { 1403 if ( i >= 5 ) {
1404 mDayLabelsW[i]->setGeometry( x+weeklabelwid,y,w/2+w%2,h); 1404 mDayLabelsW[i]->setGeometry( x+weeklabelwid,y,w/2+w%2,h);
1405 x -= (w/2 ); 1405 x -= (w/2 );
1406 } 1406 }
1407 else 1407 else
1408 mDayLabelsW[i]->setGeometry( x+weeklabelwid,y,w,h); 1408 mDayLabelsW[i]->setGeometry( x+weeklabelwid,y,w,h);
1409 x += w; 1409 x += w;
1410 } 1410 }
1411 x= 0; 1411 x= 0;
1412 y= dayLabelHei; 1412 y= dayLabelHei;
1413 w = colWid; 1413 w = colWid;
1414 h = cellHei; 1414 h = cellHei;
1415 for ( i = 0; i < mCellsW.count(); ++i) { 1415 for ( i = 0; i < mCellsW.count(); ++i) {
1416 if ( i > 6 ) { 1416 if ( i > 6 ) {
1417 mCellsW[i]->hide(); 1417 mCellsW[i]->hide();
1418 continue; 1418 continue;
1419 } 1419 }
1420 1420
1421 w = colWid; 1421 w = colWid;
1422 if ( ((i) % daysToShow) >= daysToShow-colModulo ) { 1422 if ( ((i) % daysToShow) >= daysToShow-colModulo ) {
1423 ++w; 1423 ++w;
1424 } 1424 }
1425 if ( i == (daysToShow-1-rowModulo)*7) 1425 if ( i == (daysToShow-1-rowModulo)*7)
1426 ++h; 1426 ++h;
1427 1427
1428 if ( i >= 5 ) { 1428 if ( i >= 5 ) {
1429 if ( i ==5 ) { 1429 if ( i ==5 ) {
1430 mCellsW[i]->setGeometry ( x+weeklabelwid,y,w,h/2 ); 1430 mCellsW[i]->setGeometry ( x+weeklabelwid,y,w,h/2 );
1431 x -= w ;y += h/2; 1431 x -= w ;y += h/2;
1432 } else { 1432 } else {
1433 if ( ((i-1) % daysToShow) >= daysToShow-colModulo ) { 1433 if ( ((i-1) % daysToShow) >= daysToShow-colModulo ) {
1434 ++w; 1434 ++w;
1435 } 1435 }
1436 mCellsW[i]->setGeometry ( x+weeklabelwid,y,w,h-h/2 ); 1436 mCellsW[i]->setGeometry ( x+weeklabelwid,y,w,h-h/2 );
1437 y -= h/2; 1437 y -= h/2;
1438 } 1438 }
1439 } else 1439 } else
1440 mCellsW[i]->setGeometry ( x+weeklabelwid,y,w,h ); 1440 mCellsW[i]->setGeometry ( x+weeklabelwid,y,w,h );
1441 1441
1442 1442
1443 x += w; 1443 x += w;
1444 if ( x + w/2 > wid ) { 1444 if ( x + w/2 > wid ) {
1445 x = 0; 1445 x = 0;
1446 y += h+dayLabelHei ; 1446 y += h+dayLabelHei ;
1447 } 1447 }
1448 } 1448 }
1449 y= dayLabelHei; 1449 y= dayLabelHei;
1450 h = cellHei ; 1450 h = cellHei ;
1451 mWeekLabelsW[0]->setGeometry( 0,y,weeklabelwid,hei-dayLabelHei); 1451 mWeekLabelsW[0]->setGeometry( 0,y,weeklabelwid,hei-dayLabelHei);
1452 mWeekLabelsW[1]->setGeometry( 0,0,weeklabelwid,dayLabelHei); 1452 mWeekLabelsW[1]->setGeometry( 0,0,weeklabelwid,dayLabelHei);
1453 // qDebug("RRRRRRRRRRRRR %d %d old %d %d", e->size().width(),e->size().height() , e->oldSize().width(),e->oldSize().height()); 1453 // qDebug("RRRRRRRRRRRRR %d %d old %d %d", e->size().width(),e->size().height() , e->oldSize().width(),e->oldSize().height());
1454 //qDebug("parent %d %d ", topLevelWidget()->size().width(), topLevelWidget()->size().height()); 1454 //qDebug("parent %d %d ", topLevelWidget()->size().width(), topLevelWidget()->size().height());
1455 mShortDayLabelsW = mDayLabelsW[0]->width()-2 < mWidthLongDayLabel ; 1455 mShortDayLabelsW = mDayLabelsW[0]->width()-2 < mWidthLongDayLabel ;
1456 updateDayLabels(); 1456 updateDayLabels();
1457 //bool forceUpdate = !updatePossible; 1457 //bool forceUpdate = !updatePossible;
1458 updatePossible = true; 1458 updatePossible = true;
1459 //mWeekLabels[mNumWeeks]->setText( i18n("M")); 1459 //mWeekLabels[mNumWeeks]->setText( i18n("M"));
1460 //if ( forceUpdate ) 1460 //if ( forceUpdate )
1461 // updateView(); 1461 // updateView();
1462} 1462}
1463void KOMonthView::computeLayout() 1463void KOMonthView::computeLayout()
1464{ 1464{
1465 1465
1466 1466
1467 static int lastWid = 0; 1467 static int lastWid = 0;
1468 static int lastHei = 0; 1468 static int lastHei = 0;
1469 1469
1470 if ( mShowWeekView ){ 1470 if ( mShowWeekView ){
1471 computeLayoutWeek(); 1471 computeLayoutWeek();
1472 return; 1472 return;
1473 } 1473 }
1474 int daysToShow = 7; 1474 int daysToShow = 7;
1475 bool combinedSatSun = false; 1475 bool combinedSatSun = false;
1476 if (mShowSatSunComp = KOPrefs::instance()->mMonthViewSatSunTog ) { 1476 if (mShowSatSunComp = KOPrefs::instance()->mMonthViewSatSunTog ) {
1477 daysToShow = 6; 1477 daysToShow = 6;
1478 combinedSatSun = true; 1478 combinedSatSun = true;
1479 } 1479 }
1480 int tWid = topLevelWidget()->size().width(); 1480 int tWid = topLevelWidget()->size().width();
1481 int tHei = topLevelWidget()->size().height(); 1481 int tHei = topLevelWidget()->size().height();
1482 1482
1483 int wid = width();//e 1483 int wid = width();//e
1484 int hei = height()-1-mNavigatorBar->height(); 1484 int hei = height()-1-mNavigatorBar->height();
1485 1485
1486 if ( ((wid *3)/2) < tWid && (( hei *3) /2) < tHei ) { 1486 if ( ((wid *3)/2) < tWid && (( hei *3) /2) < tHei ) {
1487 return; 1487 return;
1488 } 1488 }
1489 if ( lastWid == width() && lastHei == height() ){ 1489 if ( lastWid == width() && lastHei == height() ){
1490 return; 1490 return;
1491 } 1491 }
1492 1492
1493 lastWid = width(); 1493 lastWid = width();
1494 lastHei = height(); 1494 lastHei = height();
1495 //qDebug("KOMonthView::computeLayout() MMM ------------------------------------ "); 1495 //qDebug("KOMonthView::computeLayout() MMM ------------------------------------ ");
1496 QFontMetrics fm ( mWeekLabels[0]->font() ); 1496 QFontMetrics fm ( mWeekLabels[0]->font() );
1497 int weeklabelwid = fm.width( "888" ); 1497 int weeklabelwid = fm.width( "888" );
1498 wid -= weeklabelwid; 1498 wid -= weeklabelwid;
1499 1499
1500 int colWid = wid / daysToShow; 1500 int colWid = wid / daysToShow;
1501 int lastCol = wid - ( colWid*6 ); 1501 int lastCol = wid - ( colWid*6 );
1502 int dayLabelHei = mDayLabels[0]->sizeHint().height(); 1502 int dayLabelHei = mDayLabels[0]->sizeHint().height();
1503 int cellHei = (hei - dayLabelHei) /6; 1503 int cellHei = (hei - dayLabelHei) /6;
1504 int colModulo = wid % daysToShow; 1504 int colModulo = wid % daysToShow;
1505 int rowModulo = (hei- dayLabelHei) % 6; 1505 int rowModulo = (hei- dayLabelHei) % 6;
1506 //qDebug("rowmod %d ", rowModulo); 1506 //qDebug("rowmod %d ", rowModulo);
1507 int i; 1507 int i;
1508 int x,y,w,h; 1508 int x,y,w,h;
1509 x= 0; 1509 x= 0;
1510 y= 0; 1510 y= 0;
1511 w = colWid; 1511 w = colWid;
1512 h = dayLabelHei ; 1512 h = dayLabelHei ;
1513 for ( i = 0; i < 7; i++) { 1513 for ( i = 0; i < 7; i++) {
1514 if ( i == daysToShow-colModulo ) 1514 if ( i == daysToShow-colModulo )
1515 ++w; 1515 ++w;
1516 if ( combinedSatSun ) { 1516 if ( combinedSatSun ) {
1517 if ( i >= daysToShow-1 ) { 1517 if ( i >= daysToShow-1 ) {
1518 mDayLabels[i]->setGeometry( x+weeklabelwid,y,w/2,h); 1518 mDayLabels[i]->setGeometry( x+weeklabelwid,y,w/2,h);
1519 x -= w/2 ; 1519 x -= w/2 ;
1520 } 1520 }
1521 else 1521 else
1522 mDayLabels[i]->setGeometry( x+weeklabelwid,y,w,h); 1522 mDayLabels[i]->setGeometry( x+weeklabelwid,y,w,h);
1523 } else 1523 } else
1524 mDayLabels[i]->setGeometry( x+weeklabelwid,y,w,h); 1524 mDayLabels[i]->setGeometry( x+weeklabelwid,y,w,h);
1525 x += w; 1525 x += w;
1526 } 1526 }
1527 x= 0; 1527 x= 0;
1528 y= dayLabelHei; 1528 y= dayLabelHei;
1529 w = colWid; 1529 w = colWid;
1530 h = cellHei ; 1530 h = cellHei ;
1531 for ( i = 0; i < mCells.count(); ++i) { 1531 for ( i = 0; i < mCells.count(); ++i) {
1532 //qDebug("iii %d ", i); 1532 //qDebug("iii %d ", i);
1533 w = colWid; 1533 w = colWid;
1534 if ( ((i) % 7) >= 7-colModulo ) { 1534 if ( ((i) % 7) >= 7-colModulo ) {
1535 ++w; 1535 ++w;
1536 } 1536 }
1537 if ( i == (6-rowModulo)*7) 1537 if ( i == (6-rowModulo)*7)
1538 ++h; 1538 ++h;
1539 if ( combinedSatSun ) { 1539 if ( combinedSatSun ) {
1540 if ( (i)%7 >= daysToShow-1 ) { 1540 if ( (i)%7 >= daysToShow-1 ) {
1541 if ( (i)%7 == daysToShow-1 ) { 1541 if ( (i)%7 == daysToShow-1 ) {
1542 mCells[i]->setGeometry ( x+weeklabelwid,y,w,h/2 ); 1542 mCells[i]->setGeometry ( x+weeklabelwid,y,w,h/2 );
1543 x -= w ;y += h/2; 1543 x -= w ;y += h/2;
1544 } else { 1544 } else {
1545 mCells[i]->setGeometry ( x+weeklabelwid,y,w,h-h/2 ); 1545 mCells[i]->setGeometry ( x+weeklabelwid,y,w,h-h/2 );
1546 y -= h/2; 1546 y -= h/2;
1547 } 1547 }
1548 } else 1548 } else
1549 mCells[i]->setGeometry ( x+weeklabelwid,y,w,h ); 1549 mCells[i]->setGeometry ( x+weeklabelwid,y,w,h );
1550 1550
1551 } 1551 }
1552 else 1552 else
1553 mCells[i]->setGeometry ( x+weeklabelwid,y,w,h ); 1553 mCells[i]->setGeometry ( x+weeklabelwid,y,w,h );
1554 x += w; 1554 x += w;
1555 if ( x + w/2 > wid ) { 1555 if ( x + w/2 > wid ) {
1556 x = 0; 1556 x = 0;
1557 y += h; 1557 y += h;
1558 } 1558 }
1559 } 1559 }
1560 y= dayLabelHei; 1560 y= dayLabelHei;
1561 h = cellHei ; 1561 h = cellHei ;
1562 for ( i = 0; i < 6; i++) { 1562 for ( i = 0; i < 6; i++) {
1563 if ( i == (6-rowModulo)) 1563 if ( i == (6-rowModulo))
1564 ++h; 1564 ++h;
1565 mWeekLabels[i]->setGeometry( 0,y,weeklabelwid,h); 1565 mWeekLabels[i]->setGeometry( 0,y,weeklabelwid,h);
1566 y += h; 1566 y += h;
1567 } 1567 }
1568 mWeekLabels[6]->setGeometry( 0,0,weeklabelwid,dayLabelHei); 1568 mWeekLabels[6]->setGeometry( 0,0,weeklabelwid,dayLabelHei);
1569 // qDebug("RRRRRRRRRRRRR %d %d old %d %d", e->size().width(),e->size().height() , e->oldSize().width(),e->oldSize().height()); 1569 // qDebug("RRRRRRRRRRRRR %d %d old %d %d", e->size().width(),e->size().height() , e->oldSize().width(),e->oldSize().height());
1570 //qDebug("parent %d %d ", topLevelWidget()->size().width(), topLevelWidget()->size().height()); 1570 //qDebug("parent %d %d ", topLevelWidget()->size().width(), topLevelWidget()->size().height());
1571 mShortDayLabelsM = mDayLabels[0]->width()-2 < mWidthLongDayLabel ; 1571 mShortDayLabelsM = mDayLabels[0]->width()-2 < mWidthLongDayLabel ;
1572 updateDayLabels(); 1572 updateDayLabels();
1573 //bool forceUpdate = !updatePossible; 1573 //bool forceUpdate = !updatePossible;
1574 updatePossible = true; 1574 updatePossible = true;
1575 //mWeekLabels[mNumWeeks]->setText( i18n("W")); 1575 //mWeekLabels[mNumWeeks]->setText( i18n("W"));
1576} 1576}
1577 1577
1578void KOMonthView::showContextMenu( Incidence *incidence ) 1578void KOMonthView::showContextMenu( Incidence *incidence )
1579{ 1579{
1580 mContextMenu->showIncidencePopup(incidence); 1580 mContextMenu->showIncidencePopup(incidence);
1581 /* 1581 /*
1582 if( incidence && incidence->type() == "Event" ) { 1582 if( incidence && incidence->type() == "Event" ) {
1583 Event *event = static_cast<Event *>(incidence); 1583 Event *event = static_cast<Event *>(incidence);
1584 mContextMenu->showEventPopup(event); 1584 mContextMenu->showEventPopup(event);
1585 } else { 1585 } else {
1586 kdDebug() << "MonthView::showContextMenu(): cast failed." << endl; 1586 kdDebug() << "MonthView::showContextMenu(): cast failed." << endl;
1587 } 1587 }
1588 */ 1588 */
1589} 1589}
1590MonthViewCell * KOMonthView::selectedCell( ) 1590MonthViewCell * KOMonthView::selectedCell( )
1591{ 1591{
1592 return mSelectedCell; 1592 return mSelectedCell;
1593} 1593}
1594void KOMonthView::setSelectedCell( MonthViewCell *cell ) 1594void KOMonthView::setSelectedCell( MonthViewCell *cell )
1595{ 1595{
1596 // qDebug("KOMonthView::setSelectedCell "); 1596 // qDebug("KOMonthView::setSelectedCell ");
1597 if ( mSelectedCell && mSelectedCell != cell ) { 1597 if ( mSelectedCell && mSelectedCell != cell ) {
1598 MonthViewCell * mvc = mSelectedCell; 1598 MonthViewCell * mvc = mSelectedCell;
1599 mSelectedCell = cell; 1599 mSelectedCell = cell;
1600 mvc->deselect(); 1600 mvc->deselect();
1601 } else 1601 } else
1602 mSelectedCell = cell; 1602 mSelectedCell = cell;
1603 // if ( mSelectedCell ) 1603 // if ( mSelectedCell )
1604 // mSelectedCell->select(); 1604 // mSelectedCell->select();
1605 if ( !mSelectedCell ) 1605 if ( !mSelectedCell )
1606 emit incidenceSelected( 0 ); 1606 emit incidenceSelected( 0 );
1607 else 1607 else
1608 emit incidenceSelected( mSelectedCell->selectedIncidence() ); 1608 emit incidenceSelected( mSelectedCell->selectedIncidence() );
1609} 1609}
1610 1610
1611void KOMonthView::processSelectionChange() 1611void KOMonthView::processSelectionChange()
1612{ 1612{
1613 QPtrList<Incidence> incidences = selectedIncidences(); 1613 QPtrList<Incidence> incidences = selectedIncidences();
1614 if (incidences.count() > 0) { 1614 if (incidences.count() > 0) {
1615 emit incidenceSelected( incidences.first() ); 1615 emit incidenceSelected( incidences.first() );
1616 } else { 1616 } else {
1617 emit incidenceSelected( 0 ); 1617 emit incidenceSelected( 0 );
1618 } 1618 }
1619} 1619}
1620 1620
1621void KOMonthView::clearSelection() 1621void KOMonthView::clearSelection()
1622{ 1622{
1623 if ( mSelectedCell ) { 1623 if ( mSelectedCell ) {
1624 mSelectedCell->deselect(); 1624 mSelectedCell->deselect();
1625 mSelectedCell = 0; 1625 mSelectedCell = 0;
1626 } 1626 }
1627} 1627}
1628void KOMonthView::keyPressEvent ( QKeyEvent * e ) 1628void KOMonthView::keyPressEvent ( QKeyEvent * e )
1629{ 1629{
1630 //qDebug("KOMonthView::keyPressEvent "); 1630 //qDebug("KOMonthView::keyPressEvent ");
1631 switch(e->key()) { 1631 switch(e->key()) {
1632 case Key_Up: 1632 case Key_Up:
1633 { 1633 {
1634 emit prevMonth(); 1634 if ( mShowWeekView ) {
1635 if ( mShowWeekView )
1636 mCellsW[0]->setFocus(); 1635 mCellsW[0]->setFocus();
1637 else 1636 emit selectWeekNum ( currentWeek() - 1 );
1637 }
1638 else {
1638 mCells[0]->setFocus(); 1639 mCells[0]->setFocus();
1640 emit prevMonth();
1641 }
1639 } 1642 }
1640 e->accept(); 1643 e->accept();
1641 break; 1644 break;
1642 case Key_Down: 1645 case Key_Down:
1643 { 1646 {
1644 emit nextMonth(); 1647 if ( mShowWeekView ) {
1645 if ( mShowWeekView )
1646 mCellsW[0]->setFocus(); 1648 mCellsW[0]->setFocus();
1647 else 1649 emit selectWeekNum ( currentWeek() +1);
1650 }
1651 else {
1648 mCells[0]->setFocus(); 1652 mCells[0]->setFocus();
1653 emit nextMonth();
1654 }
1649 1655
1650 } 1656 }
1651 e->accept(); 1657 e->accept();
1652 break; 1658 break;
1653 case Key_Return: 1659 case Key_Return:
1654 case Key_Enter: 1660 case Key_Enter:
1655 { 1661 {
1656 selectInternalWeekNum ( currentWeek() ); 1662 selectInternalWeekNum ( currentWeek() );
1657 } 1663 }
1658 e->accept(); 1664 e->accept();
1659 break; 1665 break;
1660 default: 1666 default:
1661 e->ignore(); 1667 e->ignore();
1662 break; 1668 break;
1663 } 1669 }
1664} 1670}