author | zautrix <zautrix> | 2005-01-29 16:41:15 (UTC) |
---|---|---|
committer | zautrix <zautrix> | 2005-01-29 16:41:15 (UTC) |
commit | 41baa2e15a1ec5e14750297e0a21020c9e53d953 (patch) (unidiff) | |
tree | 2a1a1ae20928d4f2dc3ac73e9be82f04563b3604 /korganizer | |
parent | c6548bb194a5e73b9b72505c2e952ef6346dec46 (diff) | |
download | kdepimpi-41baa2e15a1ec5e14750297e0a21020c9e53d953.zip kdepimpi-41baa2e15a1ec5e14750297e0a21020c9e53d953.tar.gz kdepimpi-41baa2e15a1ec5e14750297e0a21020c9e53d953.tar.bz2 |
fix
-rw-r--r-- | korganizer/calendarview.cpp | 1 | ||||
-rw-r--r-- | korganizer/koagenda.cpp | 59 | ||||
-rw-r--r-- | korganizer/koagenda.h | 1 | ||||
-rw-r--r-- | korganizer/koagendaview.cpp | 3 | ||||
-rw-r--r-- | korganizer/koagendaview.h | 1 | ||||
-rw-r--r-- | korganizer/koviewmanager.cpp | 50 | ||||
-rw-r--r-- | korganizer/koviewmanager.h | 1 |
7 files changed, 87 insertions, 29 deletions
diff --git a/korganizer/calendarview.cpp b/korganizer/calendarview.cpp index 035d630..e7b6755 100644 --- a/korganizer/calendarview.cpp +++ b/korganizer/calendarview.cpp | |||
@@ -1668,2049 +1668,2048 @@ bool CalendarView::openCalendar(QString filename, bool merge) | |||
1668 | mTodoList->setDocumentId( filename ); | 1668 | mTodoList->setDocumentId( filename ); |
1669 | } | 1669 | } |
1670 | 1670 | ||
1671 | //KMessageBox::error(this,i18n("Couldn't load calendar\n '%1'.").arg(filename)); | 1671 | //KMessageBox::error(this,i18n("Couldn't load calendar\n '%1'.").arg(filename)); |
1672 | 1672 | ||
1673 | QTimer::singleShot ( 1, this, SLOT ( showOpenError() ) ); | 1673 | QTimer::singleShot ( 1, this, SLOT ( showOpenError() ) ); |
1674 | globalFlagBlockAgenda = 2; | 1674 | globalFlagBlockAgenda = 2; |
1675 | mCalendar->reInitAlarmSettings(); | 1675 | mCalendar->reInitAlarmSettings(); |
1676 | setSyncEventsReadOnly(); | 1676 | setSyncEventsReadOnly(); |
1677 | updateUnmanagedViews(); | 1677 | updateUnmanagedViews(); |
1678 | updateView(); | 1678 | updateView(); |
1679 | } | 1679 | } |
1680 | return false; | 1680 | return false; |
1681 | } | 1681 | } |
1682 | void CalendarView::showOpenError() | 1682 | void CalendarView::showOpenError() |
1683 | { | 1683 | { |
1684 | KMessageBox::error(this,i18n("Couldn't load calendar\n.")); | 1684 | KMessageBox::error(this,i18n("Couldn't load calendar\n.")); |
1685 | } | 1685 | } |
1686 | void CalendarView::setLoadedFileVersion(QDateTime dt) | 1686 | void CalendarView::setLoadedFileVersion(QDateTime dt) |
1687 | { | 1687 | { |
1688 | loadedFileVersion = dt; | 1688 | loadedFileVersion = dt; |
1689 | } | 1689 | } |
1690 | bool CalendarView::checkFileChanged(QString fn) | 1690 | bool CalendarView::checkFileChanged(QString fn) |
1691 | { | 1691 | { |
1692 | QFileInfo finf ( fn ); | 1692 | QFileInfo finf ( fn ); |
1693 | if ( !finf.exists() ) | 1693 | if ( !finf.exists() ) |
1694 | return true; | 1694 | return true; |
1695 | QDateTime dt = finf.lastModified (); | 1695 | QDateTime dt = finf.lastModified (); |
1696 | if ( dt <= loadedFileVersion ) | 1696 | if ( dt <= loadedFileVersion ) |
1697 | return false; | 1697 | return false; |
1698 | return true; | 1698 | return true; |
1699 | 1699 | ||
1700 | } | 1700 | } |
1701 | void CalendarView::watchSavedFile() | 1701 | void CalendarView::watchSavedFile() |
1702 | { | 1702 | { |
1703 | QFileInfo finf ( MainWindow::defaultFileName()); | 1703 | QFileInfo finf ( MainWindow::defaultFileName()); |
1704 | if ( !finf.exists() ) | 1704 | if ( !finf.exists() ) |
1705 | return; | 1705 | return; |
1706 | QDateTime dt = finf.lastModified (); | 1706 | QDateTime dt = finf.lastModified (); |
1707 | if ( dt < loadedFileVersion ) { | 1707 | if ( dt < loadedFileVersion ) { |
1708 | //qDebug("watch %s %s ", dt.toString().latin1(), loadedFileVersion.toString().latin1()); | 1708 | //qDebug("watch %s %s ", dt.toString().latin1(), loadedFileVersion.toString().latin1()); |
1709 | QTimer::singleShot( 1000 , this, SLOT ( watchSavedFile() ) ); | 1709 | QTimer::singleShot( 1000 , this, SLOT ( watchSavedFile() ) ); |
1710 | return; | 1710 | return; |
1711 | } | 1711 | } |
1712 | loadedFileVersion = dt; | 1712 | loadedFileVersion = dt; |
1713 | } | 1713 | } |
1714 | 1714 | ||
1715 | bool CalendarView::checkFileVersion(QString fn) | 1715 | bool CalendarView::checkFileVersion(QString fn) |
1716 | { | 1716 | { |
1717 | QFileInfo finf ( fn ); | 1717 | QFileInfo finf ( fn ); |
1718 | if ( !finf.exists() ) | 1718 | if ( !finf.exists() ) |
1719 | return true; | 1719 | return true; |
1720 | QDateTime dt = finf.lastModified (); | 1720 | QDateTime dt = finf.lastModified (); |
1721 | //qDebug("loaded file version %s",loadedFileVersion.toString().latin1()); | 1721 | //qDebug("loaded file version %s",loadedFileVersion.toString().latin1()); |
1722 | //qDebug("file on disk version %s",dt.toString().latin1()); | 1722 | //qDebug("file on disk version %s",dt.toString().latin1()); |
1723 | if ( dt <= loadedFileVersion ) | 1723 | if ( dt <= loadedFileVersion ) |
1724 | return true; | 1724 | return true; |
1725 | int km = KMessageBox::warningYesNoCancel(this, i18n("\nThe file on disk has changed!\nFile size: %1 bytes.\nLast modified: %2\nDo you want to:\n\n - Save and overwrite file?\n - Sync with file, then save?\n - Cancel without saving? \n").arg( QString::number( finf.size())).arg( KGlobal::locale()->formatDateTime(finf.lastModified (), true, true)) , | 1725 | int km = KMessageBox::warningYesNoCancel(this, i18n("\nThe file on disk has changed!\nFile size: %1 bytes.\nLast modified: %2\nDo you want to:\n\n - Save and overwrite file?\n - Sync with file, then save?\n - Cancel without saving? \n").arg( QString::number( finf.size())).arg( KGlobal::locale()->formatDateTime(finf.lastModified (), true, true)) , |
1726 | i18n("KO/Pi Warning"),i18n("Overwrite"), | 1726 | i18n("KO/Pi Warning"),i18n("Overwrite"), |
1727 | i18n("Sync+save")); | 1727 | i18n("Sync+save")); |
1728 | 1728 | ||
1729 | if ( km == KMessageBox::Cancel ) | 1729 | if ( km == KMessageBox::Cancel ) |
1730 | return false; | 1730 | return false; |
1731 | if ( km == KMessageBox::Yes ) | 1731 | if ( km == KMessageBox::Yes ) |
1732 | return true; | 1732 | return true; |
1733 | 1733 | ||
1734 | setSyncDevice("deleteaftersync" ); | 1734 | setSyncDevice("deleteaftersync" ); |
1735 | mSyncManager->mAskForPreferences = true; | 1735 | mSyncManager->mAskForPreferences = true; |
1736 | mSyncManager->mSyncAlgoPrefs = 3; | 1736 | mSyncManager->mSyncAlgoPrefs = 3; |
1737 | mSyncManager->mWriteBackFile = false; | 1737 | mSyncManager->mWriteBackFile = false; |
1738 | mSyncManager->mWriteBackExistingOnly = false; | 1738 | mSyncManager->mWriteBackExistingOnly = false; |
1739 | mSyncManager->mShowSyncSummary = false; | 1739 | mSyncManager->mShowSyncSummary = false; |
1740 | syncCalendar( fn, 3 ); | 1740 | syncCalendar( fn, 3 ); |
1741 | Event * e = getLastSyncEvent(); | 1741 | Event * e = getLastSyncEvent(); |
1742 | mCalendar->deleteEvent ( e ); | 1742 | mCalendar->deleteEvent ( e ); |
1743 | updateView(); | 1743 | updateView(); |
1744 | return true; | 1744 | return true; |
1745 | } | 1745 | } |
1746 | 1746 | ||
1747 | bool CalendarView::saveCalendar( QString filename ) | 1747 | bool CalendarView::saveCalendar( QString filename ) |
1748 | { | 1748 | { |
1749 | 1749 | ||
1750 | // Store back all unsaved data into calendar object | 1750 | // Store back all unsaved data into calendar object |
1751 | // qDebug("file %s %d ", filename.latin1() , mViewManager->currentView() ); | 1751 | // qDebug("file %s %d ", filename.latin1() , mViewManager->currentView() ); |
1752 | if ( mViewManager->currentView() ) | 1752 | if ( mViewManager->currentView() ) |
1753 | mViewManager->currentView()->flushView(); | 1753 | mViewManager->currentView()->flushView(); |
1754 | 1754 | ||
1755 | 1755 | ||
1756 | QDateTime lfv = QDateTime::currentDateTime().addSecs( -2); | 1756 | QDateTime lfv = QDateTime::currentDateTime().addSecs( -2); |
1757 | mStorage->setSaveFormat( new ICalFormat() ); | 1757 | mStorage->setSaveFormat( new ICalFormat() ); |
1758 | mStorage->setFileName( filename ); | 1758 | mStorage->setFileName( filename ); |
1759 | bool success; | 1759 | bool success; |
1760 | success = mStorage->save(); | 1760 | success = mStorage->save(); |
1761 | if ( !success ) { | 1761 | if ( !success ) { |
1762 | return false; | 1762 | return false; |
1763 | } | 1763 | } |
1764 | if ( filename == MainWindow::defaultFileName() ) { | 1764 | if ( filename == MainWindow::defaultFileName() ) { |
1765 | setLoadedFileVersion( lfv ); | 1765 | setLoadedFileVersion( lfv ); |
1766 | watchSavedFile(); | 1766 | watchSavedFile(); |
1767 | } | 1767 | } |
1768 | return true; | 1768 | return true; |
1769 | } | 1769 | } |
1770 | 1770 | ||
1771 | void CalendarView::closeCalendar() | 1771 | void CalendarView::closeCalendar() |
1772 | { | 1772 | { |
1773 | 1773 | ||
1774 | // child windows no longer valid | 1774 | // child windows no longer valid |
1775 | emit closingDown(); | 1775 | emit closingDown(); |
1776 | 1776 | ||
1777 | mCalendar->close(); | 1777 | mCalendar->close(); |
1778 | setModified(false); | 1778 | setModified(false); |
1779 | updateView(); | 1779 | updateView(); |
1780 | } | 1780 | } |
1781 | 1781 | ||
1782 | void CalendarView::archiveCalendar() | 1782 | void CalendarView::archiveCalendar() |
1783 | { | 1783 | { |
1784 | mDialogManager->showArchiveDialog(); | 1784 | mDialogManager->showArchiveDialog(); |
1785 | } | 1785 | } |
1786 | 1786 | ||
1787 | 1787 | ||
1788 | void CalendarView::readSettings() | 1788 | void CalendarView::readSettings() |
1789 | { | 1789 | { |
1790 | 1790 | ||
1791 | 1791 | ||
1792 | // mViewManager->showAgendaView(); | 1792 | // mViewManager->showAgendaView(); |
1793 | QString str; | 1793 | QString str; |
1794 | //qDebug("CalendarView::readSettings() "); | 1794 | //qDebug("CalendarView::readSettings() "); |
1795 | // read settings from the KConfig, supplying reasonable | 1795 | // read settings from the KConfig, supplying reasonable |
1796 | // defaults where none are to be found | 1796 | // defaults where none are to be found |
1797 | KConfig *config = KOGlobals::config(); | 1797 | KConfig *config = KOGlobals::config(); |
1798 | #ifndef KORG_NOSPLITTER | 1798 | #ifndef KORG_NOSPLITTER |
1799 | config->setGroup("KOrganizer Geometry"); | 1799 | config->setGroup("KOrganizer Geometry"); |
1800 | 1800 | ||
1801 | QValueList<int> sizes = config->readIntListEntry("Separator1"); | 1801 | QValueList<int> sizes = config->readIntListEntry("Separator1"); |
1802 | if (sizes.count() != 2) { | 1802 | if (sizes.count() != 2) { |
1803 | sizes << mDateNavigator->minimumSizeHint().width(); | 1803 | sizes << mDateNavigator->minimumSizeHint().width(); |
1804 | sizes << 300; | 1804 | sizes << 300; |
1805 | } | 1805 | } |
1806 | mPanner->setSizes(sizes); | 1806 | mPanner->setSizes(sizes); |
1807 | 1807 | ||
1808 | sizes = config->readIntListEntry("Separator2"); | 1808 | sizes = config->readIntListEntry("Separator2"); |
1809 | if ( ( mResourceView && sizes.count() == 4 ) || | 1809 | if ( ( mResourceView && sizes.count() == 4 ) || |
1810 | ( !mResourceView && sizes.count() == 3 ) ) { | 1810 | ( !mResourceView && sizes.count() == 3 ) ) { |
1811 | mLeftSplitter->setSizes(sizes); | 1811 | mLeftSplitter->setSizes(sizes); |
1812 | } | 1812 | } |
1813 | #endif | 1813 | #endif |
1814 | globalFlagBlockAgenda = 1; | 1814 | globalFlagBlockAgenda = 1; |
1815 | mViewManager->showAgendaView(); | 1815 | mViewManager->showAgendaView(); |
1816 | //mViewManager->readSettings( config ); | 1816 | //mViewManager->readSettings( config ); |
1817 | mTodoList->restoreLayout(config,QString("Todo Layout")); | 1817 | mTodoList->restoreLayout(config,QString("Todo Layout")); |
1818 | readFilterSettings(config); | 1818 | readFilterSettings(config); |
1819 | config->setGroup( "Views" ); | 1819 | config->setGroup( "Views" ); |
1820 | int dateCount = config->readNumEntry( "ShownDatesCount", 7 ); | 1820 | int dateCount = config->readNumEntry( "ShownDatesCount", 7 ); |
1821 | if ( dateCount == 5 ) mNavigator->selectWorkWeek(); | 1821 | if ( dateCount == 5 ) mNavigator->selectWorkWeek(); |
1822 | else if ( dateCount == 7 ) mNavigator->selectWeek(); | 1822 | else if ( dateCount == 7 ) mNavigator->selectWeek(); |
1823 | else mNavigator->selectDates( dateCount ); | 1823 | else mNavigator->selectDates( dateCount ); |
1824 | // mViewManager->readSettings( config ); | 1824 | // mViewManager->readSettings( config ); |
1825 | updateConfig(); | 1825 | updateConfig(); |
1826 | globalFlagBlockAgenda = 2; | 1826 | globalFlagBlockAgenda = 2; |
1827 | mViewManager->readSettings( config ); | 1827 | mViewManager->readSettings( config ); |
1828 | #ifdef DESKTOP_VERSION | 1828 | #ifdef DESKTOP_VERSION |
1829 | config->setGroup("WidgetLayout"); | 1829 | config->setGroup("WidgetLayout"); |
1830 | QStringList list; | 1830 | QStringList list; |
1831 | list = config->readListEntry("MainLayout"); | 1831 | list = config->readListEntry("MainLayout"); |
1832 | int x,y,w,h; | 1832 | int x,y,w,h; |
1833 | if ( ! list.isEmpty() ) { | 1833 | if ( ! list.isEmpty() ) { |
1834 | x = list[0].toInt(); | 1834 | x = list[0].toInt(); |
1835 | y = list[1].toInt(); | 1835 | y = list[1].toInt(); |
1836 | w = list[2].toInt(); | 1836 | w = list[2].toInt(); |
1837 | h = list[3].toInt(); | 1837 | h = list[3].toInt(); |
1838 | topLevelWidget()->setGeometry(x,y,w,h); | 1838 | topLevelWidget()->setGeometry(x,y,w,h); |
1839 | 1839 | ||
1840 | } else { | 1840 | } else { |
1841 | topLevelWidget()->setGeometry( 40 ,40 , 640, 440); | 1841 | topLevelWidget()->setGeometry( 40 ,40 , 640, 440); |
1842 | } | 1842 | } |
1843 | list = config->readListEntry("EditEventLayout"); | 1843 | list = config->readListEntry("EditEventLayout"); |
1844 | if ( ! list.isEmpty() ) { | 1844 | if ( ! list.isEmpty() ) { |
1845 | x = list[0].toInt(); | 1845 | x = list[0].toInt(); |
1846 | y = list[1].toInt(); | 1846 | y = list[1].toInt(); |
1847 | w = list[2].toInt(); | 1847 | w = list[2].toInt(); |
1848 | h = list[3].toInt(); | 1848 | h = list[3].toInt(); |
1849 | mEventEditor->setGeometry(x,y,w,h); | 1849 | mEventEditor->setGeometry(x,y,w,h); |
1850 | 1850 | ||
1851 | } | 1851 | } |
1852 | list = config->readListEntry("EditTodoLayout"); | 1852 | list = config->readListEntry("EditTodoLayout"); |
1853 | if ( ! list.isEmpty() ) { | 1853 | if ( ! list.isEmpty() ) { |
1854 | x = list[0].toInt(); | 1854 | x = list[0].toInt(); |
1855 | y = list[1].toInt(); | 1855 | y = list[1].toInt(); |
1856 | w = list[2].toInt(); | 1856 | w = list[2].toInt(); |
1857 | h = list[3].toInt(); | 1857 | h = list[3].toInt(); |
1858 | mTodoEditor->setGeometry(x,y,w,h); | 1858 | mTodoEditor->setGeometry(x,y,w,h); |
1859 | 1859 | ||
1860 | } | 1860 | } |
1861 | list = config->readListEntry("ViewerLayout"); | 1861 | list = config->readListEntry("ViewerLayout"); |
1862 | if ( ! list.isEmpty() ) { | 1862 | if ( ! list.isEmpty() ) { |
1863 | x = list[0].toInt(); | 1863 | x = list[0].toInt(); |
1864 | y = list[1].toInt(); | 1864 | y = list[1].toInt(); |
1865 | w = list[2].toInt(); | 1865 | w = list[2].toInt(); |
1866 | h = list[3].toInt(); | 1866 | h = list[3].toInt(); |
1867 | getEventViewerDialog()->setGeometry(x,y,w,h); | 1867 | getEventViewerDialog()->setGeometry(x,y,w,h); |
1868 | } | 1868 | } |
1869 | #endif | 1869 | #endif |
1870 | 1870 | ||
1871 | } | 1871 | } |
1872 | 1872 | ||
1873 | 1873 | ||
1874 | void CalendarView::writeSettings() | 1874 | void CalendarView::writeSettings() |
1875 | { | 1875 | { |
1876 | // kdDebug() << "CalendarView::writeSettings" << endl; | 1876 | // kdDebug() << "CalendarView::writeSettings" << endl; |
1877 | 1877 | ||
1878 | KConfig *config = KOGlobals::config(); | 1878 | KConfig *config = KOGlobals::config(); |
1879 | 1879 | ||
1880 | #ifndef KORG_NOSPLITTER | 1880 | #ifndef KORG_NOSPLITTER |
1881 | config->setGroup("KOrganizer Geometry"); | 1881 | config->setGroup("KOrganizer Geometry"); |
1882 | 1882 | ||
1883 | QValueList<int> list = mPanner->sizes(); | 1883 | QValueList<int> list = mPanner->sizes(); |
1884 | config->writeEntry("Separator1",list); | 1884 | config->writeEntry("Separator1",list); |
1885 | 1885 | ||
1886 | list = mLeftSplitter->sizes(); | 1886 | list = mLeftSplitter->sizes(); |
1887 | config->writeEntry("Separator2",list); | 1887 | config->writeEntry("Separator2",list); |
1888 | #endif | 1888 | #endif |
1889 | 1889 | ||
1890 | mViewManager->writeSettings( config ); | 1890 | mViewManager->writeSettings( config ); |
1891 | mTodoList->saveLayout(config,QString("Todo Layout")); | 1891 | mTodoList->saveLayout(config,QString("Todo Layout")); |
1892 | mDialogManager->writeSettings( config ); | 1892 | mDialogManager->writeSettings( config ); |
1893 | //KOPrefs::instance()->usrWriteConfig(); | 1893 | //KOPrefs::instance()->usrWriteConfig(); |
1894 | KOPrefs::instance()->writeConfig(); | 1894 | KOPrefs::instance()->writeConfig(); |
1895 | 1895 | ||
1896 | writeFilterSettings(config); | 1896 | writeFilterSettings(config); |
1897 | 1897 | ||
1898 | config->setGroup( "Views" ); | 1898 | config->setGroup( "Views" ); |
1899 | config->writeEntry( "ShownDatesCount", mNavigator->selectedDates().count() ); | 1899 | config->writeEntry( "ShownDatesCount", mNavigator->selectedDates().count() ); |
1900 | 1900 | ||
1901 | #ifdef DESKTOP_VERSION | 1901 | #ifdef DESKTOP_VERSION |
1902 | config->setGroup("WidgetLayout"); | 1902 | config->setGroup("WidgetLayout"); |
1903 | QStringList list ;//= config->readListEntry("MainLayout"); | 1903 | QStringList list ;//= config->readListEntry("MainLayout"); |
1904 | int x,y,w,h; | 1904 | int x,y,w,h; |
1905 | QWidget* wid; | 1905 | QWidget* wid; |
1906 | wid = topLevelWidget(); | 1906 | wid = topLevelWidget(); |
1907 | x = wid->geometry().x(); | 1907 | x = wid->geometry().x(); |
1908 | y = wid->geometry().y(); | 1908 | y = wid->geometry().y(); |
1909 | w = wid->width(); | 1909 | w = wid->width(); |
1910 | h = wid->height(); | 1910 | h = wid->height(); |
1911 | list.clear(); | 1911 | list.clear(); |
1912 | list << QString::number( x ); | 1912 | list << QString::number( x ); |
1913 | list << QString::number( y ); | 1913 | list << QString::number( y ); |
1914 | list << QString::number( w ); | 1914 | list << QString::number( w ); |
1915 | list << QString::number( h ); | 1915 | list << QString::number( h ); |
1916 | config->writeEntry("MainLayout",list ); | 1916 | config->writeEntry("MainLayout",list ); |
1917 | 1917 | ||
1918 | wid = mEventEditor; | 1918 | wid = mEventEditor; |
1919 | x = wid->geometry().x(); | 1919 | x = wid->geometry().x(); |
1920 | y = wid->geometry().y(); | 1920 | y = wid->geometry().y(); |
1921 | w = wid->width(); | 1921 | w = wid->width(); |
1922 | h = wid->height(); | 1922 | h = wid->height(); |
1923 | list.clear(); | 1923 | list.clear(); |
1924 | list << QString::number( x ); | 1924 | list << QString::number( x ); |
1925 | list << QString::number( y ); | 1925 | list << QString::number( y ); |
1926 | list << QString::number( w ); | 1926 | list << QString::number( w ); |
1927 | list << QString::number( h ); | 1927 | list << QString::number( h ); |
1928 | config->writeEntry("EditEventLayout",list ); | 1928 | config->writeEntry("EditEventLayout",list ); |
1929 | 1929 | ||
1930 | wid = mTodoEditor; | 1930 | wid = mTodoEditor; |
1931 | x = wid->geometry().x(); | 1931 | x = wid->geometry().x(); |
1932 | y = wid->geometry().y(); | 1932 | y = wid->geometry().y(); |
1933 | w = wid->width(); | 1933 | w = wid->width(); |
1934 | h = wid->height(); | 1934 | h = wid->height(); |
1935 | list.clear(); | 1935 | list.clear(); |
1936 | list << QString::number( x ); | 1936 | list << QString::number( x ); |
1937 | list << QString::number( y ); | 1937 | list << QString::number( y ); |
1938 | list << QString::number( w ); | 1938 | list << QString::number( w ); |
1939 | list << QString::number( h ); | 1939 | list << QString::number( h ); |
1940 | config->writeEntry("EditTodoLayout",list ); | 1940 | config->writeEntry("EditTodoLayout",list ); |
1941 | wid = getEventViewerDialog(); | 1941 | wid = getEventViewerDialog(); |
1942 | x = wid->geometry().x(); | 1942 | x = wid->geometry().x(); |
1943 | y = wid->geometry().y(); | 1943 | y = wid->geometry().y(); |
1944 | w = wid->width(); | 1944 | w = wid->width(); |
1945 | h = wid->height(); | 1945 | h = wid->height(); |
1946 | list.clear(); | 1946 | list.clear(); |
1947 | list << QString::number( x ); | 1947 | list << QString::number( x ); |
1948 | list << QString::number( y ); | 1948 | list << QString::number( y ); |
1949 | list << QString::number( w ); | 1949 | list << QString::number( w ); |
1950 | list << QString::number( h ); | 1950 | list << QString::number( h ); |
1951 | config->writeEntry("ViewerLayout",list ); | 1951 | config->writeEntry("ViewerLayout",list ); |
1952 | wid = mDialogManager->getSearchDialog(); | 1952 | wid = mDialogManager->getSearchDialog(); |
1953 | if ( wid ) { | 1953 | if ( wid ) { |
1954 | x = wid->geometry().x(); | 1954 | x = wid->geometry().x(); |
1955 | y = wid->geometry().y(); | 1955 | y = wid->geometry().y(); |
1956 | w = wid->width(); | 1956 | w = wid->width(); |
1957 | h = wid->height(); | 1957 | h = wid->height(); |
1958 | list.clear(); | 1958 | list.clear(); |
1959 | list << QString::number( x ); | 1959 | list << QString::number( x ); |
1960 | list << QString::number( y ); | 1960 | list << QString::number( y ); |
1961 | list << QString::number( w ); | 1961 | list << QString::number( w ); |
1962 | list << QString::number( h ); | 1962 | list << QString::number( h ); |
1963 | config->writeEntry("SearchLayout",list ); | 1963 | config->writeEntry("SearchLayout",list ); |
1964 | } | 1964 | } |
1965 | #endif | 1965 | #endif |
1966 | 1966 | ||
1967 | 1967 | ||
1968 | config->sync(); | 1968 | config->sync(); |
1969 | } | 1969 | } |
1970 | 1970 | ||
1971 | void CalendarView::readFilterSettings(KConfig *config) | 1971 | void CalendarView::readFilterSettings(KConfig *config) |
1972 | { | 1972 | { |
1973 | // kdDebug() << "CalendarView::readFilterSettings()" << endl; | 1973 | // kdDebug() << "CalendarView::readFilterSettings()" << endl; |
1974 | 1974 | ||
1975 | mFilters.clear(); | 1975 | mFilters.clear(); |
1976 | 1976 | ||
1977 | config->setGroup("General"); | 1977 | config->setGroup("General"); |
1978 | QStringList filterList = config->readListEntry("CalendarFilters"); | 1978 | QStringList filterList = config->readListEntry("CalendarFilters"); |
1979 | 1979 | ||
1980 | QStringList::ConstIterator it = filterList.begin(); | 1980 | QStringList::ConstIterator it = filterList.begin(); |
1981 | QStringList::ConstIterator end = filterList.end(); | 1981 | QStringList::ConstIterator end = filterList.end(); |
1982 | while(it != end) { | 1982 | while(it != end) { |
1983 | // kdDebug() << " filter: " << (*it) << endl; | 1983 | // kdDebug() << " filter: " << (*it) << endl; |
1984 | 1984 | ||
1985 | CalFilter *filter; | 1985 | CalFilter *filter; |
1986 | filter = new CalFilter(*it); | 1986 | filter = new CalFilter(*it); |
1987 | config->setGroup("Filter_" + (*it)); | 1987 | config->setGroup("Filter_" + (*it)); |
1988 | //qDebug("readFilterSettings %d ",config->readNumEntry("Criteria",0) ); | 1988 | //qDebug("readFilterSettings %d ",config->readNumEntry("Criteria",0) ); |
1989 | filter->setCriteria(config->readNumEntry("Criteria",0)); | 1989 | filter->setCriteria(config->readNumEntry("Criteria",0)); |
1990 | filter->setCategoryList(config->readListEntry("CategoryList")); | 1990 | filter->setCategoryList(config->readListEntry("CategoryList")); |
1991 | mFilters.append(filter); | 1991 | mFilters.append(filter); |
1992 | 1992 | ||
1993 | ++it; | 1993 | ++it; |
1994 | } | 1994 | } |
1995 | 1995 | ||
1996 | if (mFilters.count() == 0) { | 1996 | if (mFilters.count() == 0) { |
1997 | CalFilter *filter = new CalFilter(i18n("Default")); | 1997 | CalFilter *filter = new CalFilter(i18n("Default")); |
1998 | mFilters.append(filter); | 1998 | mFilters.append(filter); |
1999 | } | 1999 | } |
2000 | mFilterView->updateFilters(); | 2000 | mFilterView->updateFilters(); |
2001 | config->setGroup("FilterView"); | 2001 | config->setGroup("FilterView"); |
2002 | 2002 | ||
2003 | mFilterView->blockSignals(true); | 2003 | mFilterView->blockSignals(true); |
2004 | mFilterView->setFiltersEnabled(config->readBoolEntry("FilterEnabled")); | 2004 | mFilterView->setFiltersEnabled(config->readBoolEntry("FilterEnabled")); |
2005 | mFilterView->setSelectedFilter(config->readEntry("Current Filter")); | 2005 | mFilterView->setSelectedFilter(config->readEntry("Current Filter")); |
2006 | mFilterView->blockSignals(false); | 2006 | mFilterView->blockSignals(false); |
2007 | // We do it manually to avoid it being done twice by the above calls | 2007 | // We do it manually to avoid it being done twice by the above calls |
2008 | updateFilter(); | 2008 | updateFilter(); |
2009 | } | 2009 | } |
2010 | 2010 | ||
2011 | void CalendarView::writeFilterSettings(KConfig *config) | 2011 | void CalendarView::writeFilterSettings(KConfig *config) |
2012 | { | 2012 | { |
2013 | // kdDebug() << "CalendarView::writeFilterSettings()" << endl; | 2013 | // kdDebug() << "CalendarView::writeFilterSettings()" << endl; |
2014 | 2014 | ||
2015 | QStringList filterList; | 2015 | QStringList filterList; |
2016 | 2016 | ||
2017 | CalFilter *filter = mFilters.first(); | 2017 | CalFilter *filter = mFilters.first(); |
2018 | while(filter) { | 2018 | while(filter) { |
2019 | // kdDebug() << " fn: " << filter->name() << endl; | 2019 | // kdDebug() << " fn: " << filter->name() << endl; |
2020 | filterList << filter->name(); | 2020 | filterList << filter->name(); |
2021 | config->setGroup("Filter_" + filter->name()); | 2021 | config->setGroup("Filter_" + filter->name()); |
2022 | config->writeEntry("Criteria",filter->criteria()); | 2022 | config->writeEntry("Criteria",filter->criteria()); |
2023 | config->writeEntry("CategoryList",filter->categoryList()); | 2023 | config->writeEntry("CategoryList",filter->categoryList()); |
2024 | filter = mFilters.next(); | 2024 | filter = mFilters.next(); |
2025 | } | 2025 | } |
2026 | config->setGroup("General"); | 2026 | config->setGroup("General"); |
2027 | config->writeEntry("CalendarFilters",filterList); | 2027 | config->writeEntry("CalendarFilters",filterList); |
2028 | 2028 | ||
2029 | config->setGroup("FilterView"); | 2029 | config->setGroup("FilterView"); |
2030 | config->writeEntry("FilterEnabled",mFilterView->filtersEnabled()); | 2030 | config->writeEntry("FilterEnabled",mFilterView->filtersEnabled()); |
2031 | config->writeEntry("Current Filter",mFilterView->selectedFilter()->name()); | 2031 | config->writeEntry("Current Filter",mFilterView->selectedFilter()->name()); |
2032 | } | 2032 | } |
2033 | 2033 | ||
2034 | 2034 | ||
2035 | void CalendarView::goToday() | 2035 | void CalendarView::goToday() |
2036 | { | 2036 | { |
2037 | if ( mViewManager->currentView()->isMonthView() ) | 2037 | if ( mViewManager->currentView()->isMonthView() ) |
2038 | mNavigator->selectTodayMonth(); | 2038 | mNavigator->selectTodayMonth(); |
2039 | else | 2039 | else |
2040 | mNavigator->selectToday(); | 2040 | mNavigator->selectToday(); |
2041 | } | 2041 | } |
2042 | 2042 | ||
2043 | void CalendarView::goNext() | 2043 | void CalendarView::goNext() |
2044 | { | 2044 | { |
2045 | mNavigator->selectNext(); | 2045 | mNavigator->selectNext(); |
2046 | } | 2046 | } |
2047 | 2047 | ||
2048 | void CalendarView::goPrevious() | 2048 | void CalendarView::goPrevious() |
2049 | { | 2049 | { |
2050 | mNavigator->selectPrevious(); | 2050 | mNavigator->selectPrevious(); |
2051 | } | 2051 | } |
2052 | void CalendarView::goNextMonth() | 2052 | void CalendarView::goNextMonth() |
2053 | { | 2053 | { |
2054 | mNavigator->selectNextMonth(); | 2054 | mNavigator->selectNextMonth(); |
2055 | } | 2055 | } |
2056 | 2056 | ||
2057 | void CalendarView::goPreviousMonth() | 2057 | void CalendarView::goPreviousMonth() |
2058 | { | 2058 | { |
2059 | mNavigator->selectPreviousMonth(); | 2059 | mNavigator->selectPreviousMonth(); |
2060 | } | 2060 | } |
2061 | void CalendarView::writeLocale() | 2061 | void CalendarView::writeLocale() |
2062 | { | 2062 | { |
2063 | //KPimGlobalPrefs::instance()->setGlobalConfig(); | 2063 | //KPimGlobalPrefs::instance()->setGlobalConfig(); |
2064 | #if 0 | 2064 | #if 0 |
2065 | KGlobal::locale()->setHore24Format( !KOPrefs::instance()->mPreferredTime ); | 2065 | KGlobal::locale()->setHore24Format( !KOPrefs::instance()->mPreferredTime ); |
2066 | KGlobal::locale()->setWeekStartMonday( !KOPrefs::instance()->mWeekStartsOnSunday ); | 2066 | KGlobal::locale()->setWeekStartMonday( !KOPrefs::instance()->mWeekStartsOnSunday ); |
2067 | KGlobal::locale()->setIntDateFormat( (KLocale::IntDateFormat)KOPrefs::instance()->mPreferredDate ); | 2067 | KGlobal::locale()->setIntDateFormat( (KLocale::IntDateFormat)KOPrefs::instance()->mPreferredDate ); |
2068 | KGlobal::locale()->setLanguage( KOPrefs::instance()->mPreferredLanguage ); | 2068 | KGlobal::locale()->setLanguage( KOPrefs::instance()->mPreferredLanguage ); |
2069 | QString dummy = KOPrefs::instance()->mUserDateFormatLong; | 2069 | QString dummy = KOPrefs::instance()->mUserDateFormatLong; |
2070 | KGlobal::locale()->setDateFormat(dummy.replace( QRegExp("K"), QString(",") )); | 2070 | KGlobal::locale()->setDateFormat(dummy.replace( QRegExp("K"), QString(",") )); |
2071 | dummy = KOPrefs::instance()->mUserDateFormatShort; | 2071 | dummy = KOPrefs::instance()->mUserDateFormatShort; |
2072 | KGlobal::locale()->setDateFormatShort(dummy.replace( QRegExp("K"), QString(",") )); | 2072 | KGlobal::locale()->setDateFormatShort(dummy.replace( QRegExp("K"), QString(",") )); |
2073 | KGlobal::locale()->setDaylightSaving( KOPrefs::instance()->mUseDaylightsaving, | 2073 | KGlobal::locale()->setDaylightSaving( KOPrefs::instance()->mUseDaylightsaving, |
2074 | KOPrefs::instance()->mDaylightsavingStart, | 2074 | KOPrefs::instance()->mDaylightsavingStart, |
2075 | KOPrefs::instance()->mDaylightsavingEnd ); | 2075 | KOPrefs::instance()->mDaylightsavingEnd ); |
2076 | KGlobal::locale()->setTimezone( KPimGlobalPrefs::instance()->mTimeZoneId ); | 2076 | KGlobal::locale()->setTimezone( KPimGlobalPrefs::instance()->mTimeZoneId ); |
2077 | #endif | 2077 | #endif |
2078 | } | 2078 | } |
2079 | void CalendarView::updateConfig() | 2079 | void CalendarView::updateConfig() |
2080 | { | 2080 | { |
2081 | writeLocale(); | 2081 | writeLocale(); |
2082 | if ( KOPrefs::instance()->mUseAppColors ) | 2082 | if ( KOPrefs::instance()->mUseAppColors ) |
2083 | QApplication::setPalette( QPalette (KOPrefs::instance()->mAppColor1, KOPrefs::instance()->mAppColor2), true ); | 2083 | QApplication::setPalette( QPalette (KOPrefs::instance()->mAppColor1, KOPrefs::instance()->mAppColor2), true ); |
2084 | emit configChanged(); | 2084 | emit configChanged(); |
2085 | mTodoList->updateConfig(); | 2085 | mTodoList->updateConfig(); |
2086 | // mDateNavigator->setFont ( KOPrefs::instance()->mDateNavigatorFont); | 2086 | // mDateNavigator->setFont ( KOPrefs::instance()->mDateNavigatorFont); |
2087 | mCalendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); | 2087 | mCalendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); |
2088 | // To make the "fill window" configurations work | 2088 | // To make the "fill window" configurations work |
2089 | //mViewManager->raiseCurrentView(); | 2089 | //mViewManager->raiseCurrentView(); |
2090 | } | 2090 | } |
2091 | 2091 | ||
2092 | 2092 | ||
2093 | void CalendarView::eventChanged(Event *event) | 2093 | void CalendarView::eventChanged(Event *event) |
2094 | { | 2094 | { |
2095 | changeEventDisplay(event,KOGlobals::EVENTEDITED); | 2095 | changeEventDisplay(event,KOGlobals::EVENTEDITED); |
2096 | //updateUnmanagedViews(); | 2096 | //updateUnmanagedViews(); |
2097 | } | 2097 | } |
2098 | 2098 | ||
2099 | void CalendarView::eventAdded(Event *event) | 2099 | void CalendarView::eventAdded(Event *event) |
2100 | { | 2100 | { |
2101 | changeEventDisplay(event,KOGlobals::EVENTADDED); | 2101 | changeEventDisplay(event,KOGlobals::EVENTADDED); |
2102 | } | 2102 | } |
2103 | 2103 | ||
2104 | void CalendarView::eventToBeDeleted(Event *) | 2104 | void CalendarView::eventToBeDeleted(Event *) |
2105 | { | 2105 | { |
2106 | kdDebug() << "CalendarView::eventToBeDeleted(): to be implemented" << endl; | 2106 | kdDebug() << "CalendarView::eventToBeDeleted(): to be implemented" << endl; |
2107 | } | 2107 | } |
2108 | 2108 | ||
2109 | void CalendarView::eventDeleted() | 2109 | void CalendarView::eventDeleted() |
2110 | { | 2110 | { |
2111 | changeEventDisplay(0,KOGlobals::EVENTDELETED); | 2111 | changeEventDisplay(0,KOGlobals::EVENTDELETED); |
2112 | } | 2112 | } |
2113 | void CalendarView::changeTodoDisplay(Todo *which, int action) | 2113 | void CalendarView::changeTodoDisplay(Todo *which, int action) |
2114 | { | 2114 | { |
2115 | changeIncidenceDisplay((Incidence *)which, action); | 2115 | changeIncidenceDisplay((Incidence *)which, action); |
2116 | mDateNavigator->updateView(); //LR | 2116 | mDateNavigator->updateView(); //LR |
2117 | //mDialogManager->updateSearchDialog(); | 2117 | //mDialogManager->updateSearchDialog(); |
2118 | 2118 | ||
2119 | if (which) { | 2119 | if (which) { |
2120 | mViewManager->updateWNview(); | 2120 | mViewManager->updateWNview(); |
2121 | //mTodoList->updateView(); | 2121 | //mTodoList->updateView(); |
2122 | } | 2122 | } |
2123 | 2123 | ||
2124 | } | 2124 | } |
2125 | 2125 | ||
2126 | void CalendarView::changeIncidenceDisplay(Incidence *which, int action) | 2126 | void CalendarView::changeIncidenceDisplay(Incidence *which, int action) |
2127 | { | 2127 | { |
2128 | updateUnmanagedViews(); | 2128 | updateUnmanagedViews(); |
2129 | //qDebug(" CalendarView::changeIncidenceDisplay++++++++++++++++++++++++++ %d %d ",which, action ); | 2129 | //qDebug(" CalendarView::changeIncidenceDisplay++++++++++++++++++++++++++ %d %d ",which, action ); |
2130 | if ( action == KOGlobals::EVENTDELETED ) { //delete | 2130 | if ( action == KOGlobals::EVENTDELETED ) { //delete |
2131 | mCalendar->checkAlarmForIncidence( 0, true ); | 2131 | mCalendar->checkAlarmForIncidence( 0, true ); |
2132 | if ( mEventViewerDialog ) | 2132 | if ( mEventViewerDialog ) |
2133 | mEventViewerDialog->hide(); | 2133 | mEventViewerDialog->hide(); |
2134 | } | 2134 | } |
2135 | else | 2135 | else |
2136 | mCalendar->checkAlarmForIncidence( which , false ); | 2136 | mCalendar->checkAlarmForIncidence( which , false ); |
2137 | } | 2137 | } |
2138 | 2138 | ||
2139 | // most of the changeEventDisplays() right now just call the view's | 2139 | // most of the changeEventDisplays() right now just call the view's |
2140 | // total update mode, but they SHOULD be recoded to be more refresh-efficient. | 2140 | // total update mode, but they SHOULD be recoded to be more refresh-efficient. |
2141 | void CalendarView::changeEventDisplay(Event *which, int action) | 2141 | void CalendarView::changeEventDisplay(Event *which, int action) |
2142 | { | 2142 | { |
2143 | // kdDebug() << "CalendarView::changeEventDisplay" << endl; | 2143 | // kdDebug() << "CalendarView::changeEventDisplay" << endl; |
2144 | changeIncidenceDisplay((Incidence *)which, action); | 2144 | changeIncidenceDisplay((Incidence *)which, action); |
2145 | mDateNavigator->updateView(); | 2145 | mDateNavigator->updateView(); |
2146 | //mDialogManager->updateSearchDialog(); | 2146 | //mDialogManager->updateSearchDialog(); |
2147 | 2147 | ||
2148 | if (which) { | 2148 | if (which) { |
2149 | // If there is an event view visible update the display | 2149 | // If there is an event view visible update the display |
2150 | mViewManager->currentView()->changeEventDisplay(which,action); | 2150 | mViewManager->currentView()->changeEventDisplay(which,action); |
2151 | // TODO: check, if update needed | 2151 | // TODO: check, if update needed |
2152 | // if (which->getTodoStatus()) { | 2152 | // if (which->getTodoStatus()) { |
2153 | mTodoList->updateView(); | 2153 | mTodoList->updateView(); |
2154 | // } | 2154 | // } |
2155 | } else { | 2155 | } else { |
2156 | mViewManager->currentView()->updateView(); | 2156 | mViewManager->currentView()->updateView(); |
2157 | } | 2157 | } |
2158 | } | 2158 | } |
2159 | 2159 | ||
2160 | 2160 | ||
2161 | void CalendarView::updateTodoViews() | 2161 | void CalendarView::updateTodoViews() |
2162 | { | 2162 | { |
2163 | 2163 | ||
2164 | mTodoList->updateView(); | 2164 | mTodoList->updateView(); |
2165 | mViewManager->currentView()->updateView(); | 2165 | mViewManager->currentView()->updateView(); |
2166 | 2166 | ||
2167 | } | 2167 | } |
2168 | 2168 | ||
2169 | 2169 | ||
2170 | void CalendarView::updateView(const QDate &start, const QDate &end) | 2170 | void CalendarView::updateView(const QDate &start, const QDate &end) |
2171 | { | 2171 | { |
2172 | mTodoList->updateView(); | 2172 | mTodoList->updateView(); |
2173 | mViewManager->updateView(start, end); | 2173 | mViewManager->updateView(start, end); |
2174 | //mDateNavigator->updateView(); | 2174 | //mDateNavigator->updateView(); |
2175 | } | 2175 | } |
2176 | 2176 | ||
2177 | void CalendarView::updateView() | 2177 | void CalendarView::updateView() |
2178 | { | 2178 | { |
2179 | DateList tmpList = mNavigator->selectedDates(); | 2179 | DateList tmpList = mNavigator->selectedDates(); |
2180 | 2180 | ||
2181 | if ( KOPrefs::instance()->mHideNonStartedTodos ) | 2181 | if ( KOPrefs::instance()->mHideNonStartedTodos ) |
2182 | mTodoList->updateView(); | 2182 | mTodoList->updateView(); |
2183 | // We assume that the navigator only selects consecutive days. | 2183 | // We assume that the navigator only selects consecutive days. |
2184 | updateView( tmpList.first(), tmpList.last() ); | 2184 | updateView( tmpList.first(), tmpList.last() ); |
2185 | } | 2185 | } |
2186 | 2186 | ||
2187 | void CalendarView::updateUnmanagedViews() | 2187 | void CalendarView::updateUnmanagedViews() |
2188 | { | 2188 | { |
2189 | mDateNavigator->updateDayMatrix(); | 2189 | mDateNavigator->updateDayMatrix(); |
2190 | } | 2190 | } |
2191 | 2191 | ||
2192 | int CalendarView::msgItemDelete(const QString name) | 2192 | int CalendarView::msgItemDelete(const QString name) |
2193 | { | 2193 | { |
2194 | return KMessageBox::warningContinueCancel(this,name +"\n\n"+ | 2194 | return KMessageBox::warningContinueCancel(this,name +"\n\n"+ |
2195 | i18n("This item will be\npermanently deleted."), | 2195 | i18n("This item will be\npermanently deleted."), |
2196 | i18n("KO/Pi Confirmation"),i18n("Delete")); | 2196 | i18n("KO/Pi Confirmation"),i18n("Delete")); |
2197 | } | 2197 | } |
2198 | 2198 | ||
2199 | 2199 | ||
2200 | void CalendarView::edit_cut() | 2200 | void CalendarView::edit_cut() |
2201 | { | 2201 | { |
2202 | Event *anEvent=0; | 2202 | Event *anEvent=0; |
2203 | 2203 | ||
2204 | Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); | 2204 | Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); |
2205 | 2205 | ||
2206 | if (mViewManager->currentView()->isEventView()) { | 2206 | if (mViewManager->currentView()->isEventView()) { |
2207 | if ( incidence && incidence->type() == "Event" ) { | 2207 | if ( incidence && incidence->type() == "Event" ) { |
2208 | anEvent = static_cast<Event *>(incidence); | 2208 | anEvent = static_cast<Event *>(incidence); |
2209 | } | 2209 | } |
2210 | } | 2210 | } |
2211 | 2211 | ||
2212 | if (!anEvent) { | 2212 | if (!anEvent) { |
2213 | KNotifyClient::beep(); | 2213 | KNotifyClient::beep(); |
2214 | return; | 2214 | return; |
2215 | } | 2215 | } |
2216 | DndFactory factory( mCalendar ); | 2216 | DndFactory factory( mCalendar ); |
2217 | factory.cutEvent(anEvent); | 2217 | factory.cutEvent(anEvent); |
2218 | changeEventDisplay(anEvent, KOGlobals::EVENTDELETED); | 2218 | changeEventDisplay(anEvent, KOGlobals::EVENTDELETED); |
2219 | } | 2219 | } |
2220 | 2220 | ||
2221 | void CalendarView::edit_copy() | 2221 | void CalendarView::edit_copy() |
2222 | { | 2222 | { |
2223 | Event *anEvent=0; | 2223 | Event *anEvent=0; |
2224 | 2224 | ||
2225 | Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); | 2225 | Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); |
2226 | 2226 | ||
2227 | if (mViewManager->currentView()->isEventView()) { | 2227 | if (mViewManager->currentView()->isEventView()) { |
2228 | if ( incidence && incidence->type() == "Event" ) { | 2228 | if ( incidence && incidence->type() == "Event" ) { |
2229 | anEvent = static_cast<Event *>(incidence); | 2229 | anEvent = static_cast<Event *>(incidence); |
2230 | } | 2230 | } |
2231 | } | 2231 | } |
2232 | 2232 | ||
2233 | if (!anEvent) { | 2233 | if (!anEvent) { |
2234 | KNotifyClient::beep(); | 2234 | KNotifyClient::beep(); |
2235 | return; | 2235 | return; |
2236 | } | 2236 | } |
2237 | DndFactory factory( mCalendar ); | 2237 | DndFactory factory( mCalendar ); |
2238 | factory.copyEvent(anEvent); | 2238 | factory.copyEvent(anEvent); |
2239 | } | 2239 | } |
2240 | 2240 | ||
2241 | void CalendarView::edit_paste() | 2241 | void CalendarView::edit_paste() |
2242 | { | 2242 | { |
2243 | QDate date = mNavigator->selectedDates().first(); | 2243 | QDate date = mNavigator->selectedDates().first(); |
2244 | 2244 | ||
2245 | DndFactory factory( mCalendar ); | 2245 | DndFactory factory( mCalendar ); |
2246 | Event *pastedEvent = factory.pasteEvent( date ); | 2246 | Event *pastedEvent = factory.pasteEvent( date ); |
2247 | 2247 | ||
2248 | changeEventDisplay( pastedEvent, KOGlobals::EVENTADDED ); | 2248 | changeEventDisplay( pastedEvent, KOGlobals::EVENTADDED ); |
2249 | } | 2249 | } |
2250 | 2250 | ||
2251 | void CalendarView::edit_options() | 2251 | void CalendarView::edit_options() |
2252 | { | 2252 | { |
2253 | mDialogManager->showOptionsDialog(); | 2253 | mDialogManager->showOptionsDialog(); |
2254 | //writeSettings(); | 2254 | //writeSettings(); |
2255 | } | 2255 | } |
2256 | 2256 | ||
2257 | 2257 | ||
2258 | void CalendarView::slotSelectPickerDate( QDate d) | 2258 | void CalendarView::slotSelectPickerDate( QDate d) |
2259 | { | 2259 | { |
2260 | mDateFrame->hide(); | 2260 | mDateFrame->hide(); |
2261 | if ( mDatePickerMode == 1 ) { | 2261 | if ( mDatePickerMode == 1 ) { |
2262 | mNavigator->slotDaySelect( d ); | 2262 | mNavigator->slotDaySelect( d ); |
2263 | } else if ( mDatePickerMode == 2 ) { | 2263 | } else if ( mDatePickerMode == 2 ) { |
2264 | if ( mMoveIncidence->type() == "Todo" ) { | 2264 | if ( mMoveIncidence->type() == "Todo" ) { |
2265 | Todo * to = (Todo *) mMoveIncidence; | 2265 | Todo * to = (Todo *) mMoveIncidence; |
2266 | QTime tim; | 2266 | QTime tim; |
2267 | if ( to->hasDueDate() ) | 2267 | if ( to->hasDueDate() ) |
2268 | tim = to->dtDue().time(); | 2268 | tim = to->dtDue().time(); |
2269 | else { | 2269 | else { |
2270 | tim = QTime ( 0,0,0 ); | 2270 | tim = QTime ( 0,0,0 ); |
2271 | to->setFloats( true ); | 2271 | to->setFloats( true ); |
2272 | to->setHasDueDate( true ); | 2272 | to->setHasDueDate( true ); |
2273 | } | 2273 | } |
2274 | QDateTime dt ( d,tim ); | 2274 | QDateTime dt ( d,tim ); |
2275 | to->setDtDue( dt ); | 2275 | to->setDtDue( dt ); |
2276 | todoChanged( to ); | 2276 | todoChanged( to ); |
2277 | } else { | 2277 | } else { |
2278 | if ( mMoveIncidence->doesRecur() ) { | 2278 | if ( mMoveIncidence->doesRecur() ) { |
2279 | #if 0 | 2279 | #if 0 |
2280 | // PENDING implement this | 2280 | // PENDING implement this |
2281 | Incidence* newInc = mMoveIncidence->recreateCloneException( mMoveIncidenceOldDate ); | 2281 | Incidence* newInc = mMoveIncidence->recreateCloneException( mMoveIncidenceOldDate ); |
2282 | mCalendar()->addIncidence( newInc ); | 2282 | mCalendar()->addIncidence( newInc ); |
2283 | if ( mMoveIncidence->type() == "Todo" ) | 2283 | if ( mMoveIncidence->type() == "Todo" ) |
2284 | emit todoMoved((Todo*)mMoveIncidence, KOGlobals::EVENTEDITED ); | 2284 | emit todoMoved((Todo*)mMoveIncidence, KOGlobals::EVENTEDITED ); |
2285 | else | 2285 | else |
2286 | emit incidenceChanged(mMoveIncidence, KOGlobals::EVENTEDITED); | 2286 | emit incidenceChanged(mMoveIncidence, KOGlobals::EVENTEDITED); |
2287 | mMoveIncidence = newInc; | 2287 | mMoveIncidence = newInc; |
2288 | 2288 | ||
2289 | #endif | 2289 | #endif |
2290 | } | 2290 | } |
2291 | QTime tim = mMoveIncidence->dtStart().time(); | 2291 | QTime tim = mMoveIncidence->dtStart().time(); |
2292 | int secs = mMoveIncidence->dtStart().secsTo( mMoveIncidence->dtEnd()); | 2292 | int secs = mMoveIncidence->dtStart().secsTo( mMoveIncidence->dtEnd()); |
2293 | QDateTime dt ( d,tim ); | 2293 | QDateTime dt ( d,tim ); |
2294 | mMoveIncidence->setDtStart( dt ); | 2294 | mMoveIncidence->setDtStart( dt ); |
2295 | ((Event*)mMoveIncidence)->setDtEnd( dt.addSecs( secs ) ); | 2295 | ((Event*)mMoveIncidence)->setDtEnd( dt.addSecs( secs ) ); |
2296 | changeEventDisplay((Event*)mMoveIncidence, KOGlobals::EVENTEDITED); | 2296 | changeEventDisplay((Event*)mMoveIncidence, KOGlobals::EVENTEDITED); |
2297 | } | 2297 | } |
2298 | 2298 | ||
2299 | mMoveIncidence->setRevision( mMoveIncidence->revision()+1 ); | 2299 | mMoveIncidence->setRevision( mMoveIncidence->revision()+1 ); |
2300 | } | 2300 | } |
2301 | } | 2301 | } |
2302 | 2302 | ||
2303 | void CalendarView::removeCategories() | 2303 | void CalendarView::removeCategories() |
2304 | { | 2304 | { |
2305 | QPtrList<Incidence> incList = mCalendar->rawIncidences(); | 2305 | QPtrList<Incidence> incList = mCalendar->rawIncidences(); |
2306 | QStringList catList = KOPrefs::instance()->mCustomCategories; | 2306 | QStringList catList = KOPrefs::instance()->mCustomCategories; |
2307 | QStringList catIncList; | 2307 | QStringList catIncList; |
2308 | QStringList newCatList; | 2308 | QStringList newCatList; |
2309 | Incidence* inc = incList.first(); | 2309 | Incidence* inc = incList.first(); |
2310 | int i; | 2310 | int i; |
2311 | int count = 0; | 2311 | int count = 0; |
2312 | while ( inc ) { | 2312 | while ( inc ) { |
2313 | newCatList.clear(); | 2313 | newCatList.clear(); |
2314 | catIncList = inc->categories() ; | 2314 | catIncList = inc->categories() ; |
2315 | for( i = 0; i< catIncList.count(); ++i ) { | 2315 | for( i = 0; i< catIncList.count(); ++i ) { |
2316 | if ( catList.contains (catIncList[i])) | 2316 | if ( catList.contains (catIncList[i])) |
2317 | newCatList.append( catIncList[i] ); | 2317 | newCatList.append( catIncList[i] ); |
2318 | } | 2318 | } |
2319 | newCatList.sort(); | 2319 | newCatList.sort(); |
2320 | inc->setCategories( newCatList.join(",") ); | 2320 | inc->setCategories( newCatList.join(",") ); |
2321 | inc = incList.next(); | 2321 | inc = incList.next(); |
2322 | } | 2322 | } |
2323 | } | 2323 | } |
2324 | 2324 | ||
2325 | int CalendarView::addCategories() | 2325 | int CalendarView::addCategories() |
2326 | { | 2326 | { |
2327 | QPtrList<Incidence> incList = mCalendar->rawIncidences(); | 2327 | QPtrList<Incidence> incList = mCalendar->rawIncidences(); |
2328 | QStringList catList = KOPrefs::instance()->mCustomCategories; | 2328 | QStringList catList = KOPrefs::instance()->mCustomCategories; |
2329 | QStringList catIncList; | 2329 | QStringList catIncList; |
2330 | Incidence* inc = incList.first(); | 2330 | Incidence* inc = incList.first(); |
2331 | int i; | 2331 | int i; |
2332 | int count = 0; | 2332 | int count = 0; |
2333 | while ( inc ) { | 2333 | while ( inc ) { |
2334 | catIncList = inc->categories() ; | 2334 | catIncList = inc->categories() ; |
2335 | for( i = 0; i< catIncList.count(); ++i ) { | 2335 | for( i = 0; i< catIncList.count(); ++i ) { |
2336 | if ( !catList.contains (catIncList[i])) { | 2336 | if ( !catList.contains (catIncList[i])) { |
2337 | catList.append( catIncList[i] ); | 2337 | catList.append( catIncList[i] ); |
2338 | //qDebug("add cat %s ", catIncList[i].latin1()); | 2338 | //qDebug("add cat %s ", catIncList[i].latin1()); |
2339 | ++count; | 2339 | ++count; |
2340 | } | 2340 | } |
2341 | } | 2341 | } |
2342 | inc = incList.next(); | 2342 | inc = incList.next(); |
2343 | } | 2343 | } |
2344 | catList.sort(); | 2344 | catList.sort(); |
2345 | KOPrefs::instance()->mCustomCategories = catList; | 2345 | KOPrefs::instance()->mCustomCategories = catList; |
2346 | return count; | 2346 | return count; |
2347 | } | 2347 | } |
2348 | 2348 | ||
2349 | void CalendarView::manageCategories() | 2349 | void CalendarView::manageCategories() |
2350 | { | 2350 | { |
2351 | KOCatPrefs* cp = new KOCatPrefs(); | 2351 | KOCatPrefs* cp = new KOCatPrefs(); |
2352 | cp->show(); | 2352 | cp->show(); |
2353 | int w =cp->sizeHint().width() ; | 2353 | int w =cp->sizeHint().width() ; |
2354 | int h = cp->sizeHint().height() ; | 2354 | int h = cp->sizeHint().height() ; |
2355 | int dw = QApplication::desktop()->width(); | 2355 | int dw = QApplication::desktop()->width(); |
2356 | int dh = QApplication::desktop()->height(); | 2356 | int dh = QApplication::desktop()->height(); |
2357 | cp->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); | 2357 | cp->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); |
2358 | if ( !cp->exec() ) { | 2358 | if ( !cp->exec() ) { |
2359 | delete cp; | 2359 | delete cp; |
2360 | return; | 2360 | return; |
2361 | } | 2361 | } |
2362 | int count = 0; | 2362 | int count = 0; |
2363 | if ( cp->addCat() ) { | 2363 | if ( cp->addCat() ) { |
2364 | count = addCategories(); | 2364 | count = addCategories(); |
2365 | if ( count ) { | 2365 | if ( count ) { |
2366 | topLevelWidget()->setCaption(QString::number( count )+ i18n(" Categories added to list! ")); | 2366 | topLevelWidget()->setCaption(QString::number( count )+ i18n(" Categories added to list! ")); |
2367 | writeSettings(); | 2367 | writeSettings(); |
2368 | } else | 2368 | } else |
2369 | topLevelWidget()->setCaption(QString::number( 0 )+ i18n(" Categories added to list! ")); | 2369 | topLevelWidget()->setCaption(QString::number( 0 )+ i18n(" Categories added to list! ")); |
2370 | } else { | 2370 | } else { |
2371 | removeCategories(); | 2371 | removeCategories(); |
2372 | updateView(); | 2372 | updateView(); |
2373 | } | 2373 | } |
2374 | delete cp; | 2374 | delete cp; |
2375 | } | 2375 | } |
2376 | 2376 | ||
2377 | void CalendarView::beamIncidence(Incidence * Inc) | 2377 | void CalendarView::beamIncidence(Incidence * Inc) |
2378 | { | 2378 | { |
2379 | QPtrList<Incidence> delSel ; | 2379 | QPtrList<Incidence> delSel ; |
2380 | delSel.append(Inc); | 2380 | delSel.append(Inc); |
2381 | beamIncidenceList( delSel ); | 2381 | beamIncidenceList( delSel ); |
2382 | } | 2382 | } |
2383 | void CalendarView::beamCalendar() | 2383 | void CalendarView::beamCalendar() |
2384 | { | 2384 | { |
2385 | QPtrList<Incidence> delSel = mCalendar->rawIncidences(); | 2385 | QPtrList<Incidence> delSel = mCalendar->rawIncidences(); |
2386 | //qDebug("beamCalendar() "); | 2386 | //qDebug("beamCalendar() "); |
2387 | beamIncidenceList( delSel ); | 2387 | beamIncidenceList( delSel ); |
2388 | } | 2388 | } |
2389 | void CalendarView::beamFilteredCalendar() | 2389 | void CalendarView::beamFilteredCalendar() |
2390 | { | 2390 | { |
2391 | QPtrList<Incidence> delSel = mCalendar->incidences(); | 2391 | QPtrList<Incidence> delSel = mCalendar->incidences(); |
2392 | //qDebug("beamFilteredCalendar() "); | 2392 | //qDebug("beamFilteredCalendar() "); |
2393 | beamIncidenceList( delSel ); | 2393 | beamIncidenceList( delSel ); |
2394 | } | 2394 | } |
2395 | void CalendarView::beamIncidenceList(QPtrList<Incidence> delSel ) | 2395 | void CalendarView::beamIncidenceList(QPtrList<Incidence> delSel ) |
2396 | { | 2396 | { |
2397 | if ( beamDialog->exec () == QDialog::Rejected ) | 2397 | if ( beamDialog->exec () == QDialog::Rejected ) |
2398 | return; | 2398 | return; |
2399 | #ifdef DESKTOP_VERSION | 2399 | #ifdef DESKTOP_VERSION |
2400 | QString fn = locateLocal( "tmp", "kopibeamfile" ); | 2400 | QString fn = locateLocal( "tmp", "kopibeamfile" ); |
2401 | #else | 2401 | #else |
2402 | QString fn = "/tmp/kopibeamfile"; | 2402 | QString fn = "/tmp/kopibeamfile"; |
2403 | #endif | 2403 | #endif |
2404 | QString mes; | 2404 | QString mes; |
2405 | bool createbup = true; | 2405 | bool createbup = true; |
2406 | if ( createbup ) { | 2406 | if ( createbup ) { |
2407 | QString description = "\n"; | 2407 | QString description = "\n"; |
2408 | CalendarLocal* cal = new CalendarLocal(); | 2408 | CalendarLocal* cal = new CalendarLocal(); |
2409 | if ( beamDialog->beamLocal() ) | 2409 | if ( beamDialog->beamLocal() ) |
2410 | cal->setLocalTime(); | 2410 | cal->setLocalTime(); |
2411 | else | 2411 | else |
2412 | cal->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); | 2412 | cal->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); |
2413 | Incidence *incidence = delSel.first(); | 2413 | Incidence *incidence = delSel.first(); |
2414 | bool addText = false; | 2414 | bool addText = false; |
2415 | if ( delSel.count() < 10 ) | 2415 | if ( delSel.count() < 10 ) |
2416 | addText = true; | 2416 | addText = true; |
2417 | else { | 2417 | else { |
2418 | description.sprintf(i18n(" %d items?"),delSel.count() ); | 2418 | description.sprintf(i18n(" %d items?"),delSel.count() ); |
2419 | } | 2419 | } |
2420 | while ( incidence ) { | 2420 | while ( incidence ) { |
2421 | Incidence *in = incidence->clone(); | 2421 | Incidence *in = incidence->clone(); |
2422 | if ( ! in->summary().isEmpty() ) { | 2422 | if ( ! in->summary().isEmpty() ) { |
2423 | in->setDescription(""); | 2423 | in->setDescription(""); |
2424 | } else { | 2424 | } else { |
2425 | in->setSummary( in->description().left(20)); | 2425 | in->setSummary( in->description().left(20)); |
2426 | in->setDescription(""); | 2426 | in->setDescription(""); |
2427 | } | 2427 | } |
2428 | if ( addText ) | 2428 | if ( addText ) |
2429 | description += in->summary() + "\n"; | 2429 | description += in->summary() + "\n"; |
2430 | cal->addIncidence( in ); | 2430 | cal->addIncidence( in ); |
2431 | incidence = delSel.next(); | 2431 | incidence = delSel.next(); |
2432 | } | 2432 | } |
2433 | if ( beamDialog->beamVcal() ) { | 2433 | if ( beamDialog->beamVcal() ) { |
2434 | fn += ".vcs"; | 2434 | fn += ".vcs"; |
2435 | FileStorage storage( cal, fn, new VCalFormat ); | 2435 | FileStorage storage( cal, fn, new VCalFormat ); |
2436 | storage.save(); | 2436 | storage.save(); |
2437 | } else { | 2437 | } else { |
2438 | fn += ".ics"; | 2438 | fn += ".ics"; |
2439 | FileStorage storage( cal, fn, new ICalFormat( ) ); | 2439 | FileStorage storage( cal, fn, new ICalFormat( ) ); |
2440 | storage.save(); | 2440 | storage.save(); |
2441 | } | 2441 | } |
2442 | delete cal; | 2442 | delete cal; |
2443 | mes = i18n("KO/Pi: Ready for beaming"); | 2443 | mes = i18n("KO/Pi: Ready for beaming"); |
2444 | topLevelWidget()->setCaption(mes); | 2444 | topLevelWidget()->setCaption(mes); |
2445 | KApplication::convert2latin1( fn ); | 2445 | KApplication::convert2latin1( fn ); |
2446 | #ifndef DESKTOP_VERSION | 2446 | #ifndef DESKTOP_VERSION |
2447 | Ir *ir = new Ir( this ); | 2447 | Ir *ir = new Ir( this ); |
2448 | connect( ir, SIGNAL( done( Ir * ) ), this, SLOT( beamDone( Ir * ) ) ); | 2448 | connect( ir, SIGNAL( done( Ir * ) ), this, SLOT( beamDone( Ir * ) ) ); |
2449 | ir->send( fn, description, "text/x-vCalendar" ); | 2449 | ir->send( fn, description, "text/x-vCalendar" ); |
2450 | #endif | 2450 | #endif |
2451 | } | 2451 | } |
2452 | } | 2452 | } |
2453 | void CalendarView::beamDone( Ir *ir ) | 2453 | void CalendarView::beamDone( Ir *ir ) |
2454 | { | 2454 | { |
2455 | #ifndef DESKTOP_VERSION | 2455 | #ifndef DESKTOP_VERSION |
2456 | delete ir; | 2456 | delete ir; |
2457 | #endif | 2457 | #endif |
2458 | topLevelWidget()->setCaption( i18n("KO/Pi: Beaming done.") ); | 2458 | topLevelWidget()->setCaption( i18n("KO/Pi: Beaming done.") ); |
2459 | topLevelWidget()->raise(); | 2459 | topLevelWidget()->raise(); |
2460 | } | 2460 | } |
2461 | 2461 | ||
2462 | void CalendarView::moveIncidence(Incidence * inc ) | 2462 | void CalendarView::moveIncidence(Incidence * inc ) |
2463 | { | 2463 | { |
2464 | if ( !inc ) return; | 2464 | if ( !inc ) return; |
2465 | // qDebug("showDatePickerForIncidence( ) "); | 2465 | // qDebug("showDatePickerForIncidence( ) "); |
2466 | if ( mDateFrame->isVisible() ) | 2466 | if ( mDateFrame->isVisible() ) |
2467 | mDateFrame->hide(); | 2467 | mDateFrame->hide(); |
2468 | else { | 2468 | else { |
2469 | int w =mDatePicker->sizeHint().width()+2*mDateFrame->lineWidth() ; | 2469 | int w =mDatePicker->sizeHint().width()+2*mDateFrame->lineWidth() ; |
2470 | int h = mDatePicker->sizeHint().height()+2*mDateFrame->lineWidth() ; | 2470 | int h = mDatePicker->sizeHint().height()+2*mDateFrame->lineWidth() ; |
2471 | int dw = QApplication::desktop()->width(); | 2471 | int dw = QApplication::desktop()->width(); |
2472 | int dh = QApplication::desktop()->height(); | 2472 | int dh = QApplication::desktop()->height(); |
2473 | mDateFrame->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); | 2473 | mDateFrame->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); |
2474 | mDateFrame->show(); | 2474 | mDateFrame->show(); |
2475 | } | 2475 | } |
2476 | mDatePickerMode = 2; | 2476 | mDatePickerMode = 2; |
2477 | mMoveIncidence = inc ; | 2477 | mMoveIncidence = inc ; |
2478 | QDate da; | 2478 | QDate da; |
2479 | if ( mMoveIncidence->type() == "Todo" ) { | 2479 | if ( mMoveIncidence->type() == "Todo" ) { |
2480 | Todo * to = (Todo *) mMoveIncidence; | 2480 | Todo * to = (Todo *) mMoveIncidence; |
2481 | if ( to->hasDueDate() ) | 2481 | if ( to->hasDueDate() ) |
2482 | da = to->dtDue().date(); | 2482 | da = to->dtDue().date(); |
2483 | else | 2483 | else |
2484 | da = QDate::currentDate(); | 2484 | da = QDate::currentDate(); |
2485 | } else { | 2485 | } else { |
2486 | da = mMoveIncidence->dtStart().date(); | 2486 | da = mMoveIncidence->dtStart().date(); |
2487 | } | 2487 | } |
2488 | //PENDING set date for recurring incidence to date of recurrence | 2488 | //PENDING set date for recurring incidence to date of recurrence |
2489 | //mMoveIncidenceOldDate; | 2489 | //mMoveIncidenceOldDate; |
2490 | mDatePicker->setDate( da ); | 2490 | mDatePicker->setDate( da ); |
2491 | } | 2491 | } |
2492 | void CalendarView::showDatePicker( ) | 2492 | void CalendarView::showDatePicker( ) |
2493 | { | 2493 | { |
2494 | //qDebug("CalendarView::showDatePicker( ) "); | 2494 | //qDebug("CalendarView::showDatePicker( ) "); |
2495 | if ( mDateFrame->isVisible() ) | 2495 | if ( mDateFrame->isVisible() ) |
2496 | mDateFrame->hide(); | 2496 | mDateFrame->hide(); |
2497 | else { | 2497 | else { |
2498 | int w =mDatePicker->sizeHint().width() ; | 2498 | int w =mDatePicker->sizeHint().width() ; |
2499 | int h = mDatePicker->sizeHint().height() ; | 2499 | int h = mDatePicker->sizeHint().height() ; |
2500 | int dw = QApplication::desktop()->width(); | 2500 | int dw = QApplication::desktop()->width(); |
2501 | int dh = QApplication::desktop()->height(); | 2501 | int dh = QApplication::desktop()->height(); |
2502 | mDateFrame->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); | 2502 | mDateFrame->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); |
2503 | mDateFrame->show(); | 2503 | mDateFrame->show(); |
2504 | } | 2504 | } |
2505 | mDatePickerMode = 1; | 2505 | mDatePickerMode = 1; |
2506 | mDatePicker->setDate( mNavigator->selectedDates().first() ); | 2506 | mDatePicker->setDate( mNavigator->selectedDates().first() ); |
2507 | } | 2507 | } |
2508 | 2508 | ||
2509 | void CalendarView::showEventEditor() | 2509 | void CalendarView::showEventEditor() |
2510 | { | 2510 | { |
2511 | #ifdef DESKTOP_VERSION | 2511 | #ifdef DESKTOP_VERSION |
2512 | mEventEditor->show(); | 2512 | mEventEditor->show(); |
2513 | #else | 2513 | #else |
2514 | if ( mEventEditor->width() < QApplication::desktop()->width() -60 || mEventEditor->width() > QApplication::desktop()->width() ) { | 2514 | if ( mEventEditor->width() < QApplication::desktop()->width() -60 || mEventEditor->width() > QApplication::desktop()->width() ) { |
2515 | topLevelWidget()->setCaption( i18n("Recreating edit dialog. Please wait...") ); | 2515 | topLevelWidget()->setCaption( i18n("Recreating edit dialog. Please wait...") ); |
2516 | qDebug("KO: CalendarView: recreate mEventEditor %d %d", mEventEditor->width(), QApplication::desktop()->width() ); | 2516 | qDebug("KO: CalendarView: recreate mEventEditor %d %d", mEventEditor->width(), QApplication::desktop()->width() ); |
2517 | qApp->processEvents(); | 2517 | qApp->processEvents(); |
2518 | delete mEventEditor; | 2518 | delete mEventEditor; |
2519 | mEventEditor = mDialogManager->getEventEditor(); | 2519 | mEventEditor = mDialogManager->getEventEditor(); |
2520 | topLevelWidget()->setCaption( i18n("") ); | 2520 | topLevelWidget()->setCaption( i18n("") ); |
2521 | } | 2521 | } |
2522 | mEventEditor->showMaximized(); | 2522 | mEventEditor->showMaximized(); |
2523 | #endif | 2523 | #endif |
2524 | } | 2524 | } |
2525 | void CalendarView::showTodoEditor() | 2525 | void CalendarView::showTodoEditor() |
2526 | { | 2526 | { |
2527 | #ifdef DESKTOP_VERSION | 2527 | #ifdef DESKTOP_VERSION |
2528 | mTodoEditor->show(); | 2528 | mTodoEditor->show(); |
2529 | #else | 2529 | #else |
2530 | if ( mTodoEditor->width() < QApplication::desktop()->width() -60|| mTodoEditor->width() > QApplication::desktop()->width() ) { | 2530 | if ( mTodoEditor->width() < QApplication::desktop()->width() -60|| mTodoEditor->width() > QApplication::desktop()->width() ) { |
2531 | topLevelWidget()->setCaption( i18n("Recreating edit dialog. Please wait...") ); | 2531 | topLevelWidget()->setCaption( i18n("Recreating edit dialog. Please wait...") ); |
2532 | qDebug("KO: CalendarView: recreate mTodoEditor %d %d ", mTodoEditor->width() ,QApplication::desktop()->width() ); | 2532 | qDebug("KO: CalendarView: recreate mTodoEditor %d %d ", mTodoEditor->width() ,QApplication::desktop()->width() ); |
2533 | qApp->processEvents(); | 2533 | qApp->processEvents(); |
2534 | delete mTodoEditor; | 2534 | delete mTodoEditor; |
2535 | mTodoEditor = mDialogManager->getTodoEditor(); | 2535 | mTodoEditor = mDialogManager->getTodoEditor(); |
2536 | topLevelWidget()->setCaption( i18n("") ); | 2536 | topLevelWidget()->setCaption( i18n("") ); |
2537 | } | 2537 | } |
2538 | mTodoEditor->showMaximized(); | 2538 | mTodoEditor->showMaximized(); |
2539 | #endif | 2539 | #endif |
2540 | } | 2540 | } |
2541 | 2541 | ||
2542 | void CalendarView::cloneIncidence() | 2542 | void CalendarView::cloneIncidence() |
2543 | { | 2543 | { |
2544 | Incidence *incidence = currentSelection(); | 2544 | Incidence *incidence = currentSelection(); |
2545 | if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); | 2545 | if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); |
2546 | if ( incidence ) { | 2546 | if ( incidence ) { |
2547 | cloneIncidence(incidence); | 2547 | cloneIncidence(incidence); |
2548 | } | 2548 | } |
2549 | } | 2549 | } |
2550 | void CalendarView::moveIncidence() | 2550 | void CalendarView::moveIncidence() |
2551 | { | 2551 | { |
2552 | Incidence *incidence = currentSelection(); | 2552 | Incidence *incidence = currentSelection(); |
2553 | if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); | 2553 | if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); |
2554 | if ( incidence ) { | 2554 | if ( incidence ) { |
2555 | moveIncidence(incidence); | 2555 | moveIncidence(incidence); |
2556 | } | 2556 | } |
2557 | } | 2557 | } |
2558 | void CalendarView::beamIncidence() | 2558 | void CalendarView::beamIncidence() |
2559 | { | 2559 | { |
2560 | Incidence *incidence = currentSelection(); | 2560 | Incidence *incidence = currentSelection(); |
2561 | if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); | 2561 | if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); |
2562 | if ( incidence ) { | 2562 | if ( incidence ) { |
2563 | beamIncidence(incidence); | 2563 | beamIncidence(incidence); |
2564 | } | 2564 | } |
2565 | } | 2565 | } |
2566 | void CalendarView::toggleCancelIncidence() | 2566 | void CalendarView::toggleCancelIncidence() |
2567 | { | 2567 | { |
2568 | Incidence *incidence = currentSelection(); | 2568 | Incidence *incidence = currentSelection(); |
2569 | if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); | 2569 | if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); |
2570 | if ( incidence ) { | 2570 | if ( incidence ) { |
2571 | cancelIncidence(incidence); | 2571 | cancelIncidence(incidence); |
2572 | } | 2572 | } |
2573 | } | 2573 | } |
2574 | 2574 | ||
2575 | 2575 | ||
2576 | void CalendarView::cancelIncidence(Incidence * inc ) | 2576 | void CalendarView::cancelIncidence(Incidence * inc ) |
2577 | { | 2577 | { |
2578 | inc->setCancelled( ! inc->cancelled() ); | 2578 | inc->setCancelled( ! inc->cancelled() ); |
2579 | changeIncidenceDisplay( inc,KOGlobals::EVENTEDITED ); | 2579 | changeIncidenceDisplay( inc,KOGlobals::EVENTEDITED ); |
2580 | updateView(); | 2580 | updateView(); |
2581 | } | 2581 | } |
2582 | void CalendarView::cloneIncidence(Incidence * orgInc ) | 2582 | void CalendarView::cloneIncidence(Incidence * orgInc ) |
2583 | { | 2583 | { |
2584 | Incidence * newInc = orgInc->clone(); | 2584 | Incidence * newInc = orgInc->clone(); |
2585 | newInc->recreate(); | 2585 | newInc->recreate(); |
2586 | 2586 | ||
2587 | if ( newInc->type() == "Todo" ) { | 2587 | if ( newInc->type() == "Todo" ) { |
2588 | Todo* t = (Todo*) newInc; | 2588 | Todo* t = (Todo*) newInc; |
2589 | showTodoEditor(); | 2589 | showTodoEditor(); |
2590 | mTodoEditor->editTodo( t ); | 2590 | mTodoEditor->editTodo( t ); |
2591 | if ( mTodoEditor->exec() ) { | 2591 | if ( mTodoEditor->exec() ) { |
2592 | mCalendar->addTodo( t ); | 2592 | mCalendar->addTodo( t ); |
2593 | updateView(); | 2593 | updateView(); |
2594 | } else { | 2594 | } else { |
2595 | delete t; | 2595 | delete t; |
2596 | } | 2596 | } |
2597 | } | 2597 | } |
2598 | else { | 2598 | else { |
2599 | Event* e = (Event*) newInc; | 2599 | Event* e = (Event*) newInc; |
2600 | showEventEditor(); | 2600 | showEventEditor(); |
2601 | mEventEditor->editEvent( e ); | 2601 | mEventEditor->editEvent( e ); |
2602 | if ( mEventEditor->exec() ) { | 2602 | if ( mEventEditor->exec() ) { |
2603 | mCalendar->addEvent( e ); | 2603 | mCalendar->addEvent( e ); |
2604 | updateView(); | 2604 | updateView(); |
2605 | } else { | 2605 | } else { |
2606 | delete e; | 2606 | delete e; |
2607 | } | 2607 | } |
2608 | } | 2608 | } |
2609 | } | 2609 | } |
2610 | 2610 | ||
2611 | void CalendarView::newEvent() | 2611 | void CalendarView::newEvent() |
2612 | { | 2612 | { |
2613 | // TODO: Replace this code by a common eventDurationHint of KOBaseView. | 2613 | // TODO: Replace this code by a common eventDurationHint of KOBaseView. |
2614 | KOAgendaView *aView = mViewManager->agendaView(); | 2614 | KOAgendaView *aView = mViewManager->agendaView(); |
2615 | if (aView) { | 2615 | if (aView) { |
2616 | if (aView->selectionStart().isValid()) { | 2616 | if (aView->selectionStart().isValid()) { |
2617 | if (aView->selectedIsAllDay()) { | 2617 | if (aView->selectedIsAllDay()) { |
2618 | newEvent(aView->selectionStart(),aView->selectionEnd(),true); | 2618 | newEvent(aView->selectionStart(),aView->selectionEnd(),true); |
2619 | } else { | 2619 | } else { |
2620 | newEvent(aView->selectionStart(),aView->selectionEnd()); | 2620 | newEvent(aView->selectionStart(),aView->selectionEnd()); |
2621 | } | 2621 | } |
2622 | return; | 2622 | return; |
2623 | } | 2623 | } |
2624 | } | 2624 | } |
2625 | 2625 | ||
2626 | QDate date = mNavigator->selectedDates().first(); | 2626 | QDate date = mNavigator->selectedDates().first(); |
2627 | QDateTime current = QDateTime::currentDateTime(); | 2627 | QDateTime current = QDateTime::currentDateTime(); |
2628 | if ( date <= current.date() ) { | 2628 | if ( date <= current.date() ) { |
2629 | int hour = current.time().hour() +1; | 2629 | int hour = current.time().hour() +1; |
2630 | newEvent( QDateTime( current.date(), QTime( hour, 0, 0 ) ), | 2630 | newEvent( QDateTime( current.date(), QTime( hour, 0, 0 ) ), |
2631 | QDateTime( current.date(), QTime( hour+ KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) ); | 2631 | QDateTime( current.date(), QTime( hour+ KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) ); |
2632 | } else | 2632 | } else |
2633 | newEvent( QDateTime( date, QTime( KOPrefs::instance()->mStartTime, 0, 0 ) ), | 2633 | newEvent( QDateTime( date, QTime( KOPrefs::instance()->mStartTime, 0, 0 ) ), |
2634 | QDateTime( date, QTime( KOPrefs::instance()->mStartTime + | 2634 | QDateTime( date, QTime( KOPrefs::instance()->mStartTime + |
2635 | KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) ); | 2635 | KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) ); |
2636 | } | 2636 | } |
2637 | 2637 | ||
2638 | void CalendarView::newEvent(QDateTime fh) | 2638 | void CalendarView::newEvent(QDateTime fh) |
2639 | { | 2639 | { |
2640 | newEvent(fh, | 2640 | newEvent(fh, |
2641 | QDateTime(fh.addSecs(3600*KOPrefs::instance()->mDefaultDuration))); | 2641 | QDateTime(fh.addSecs(3600*KOPrefs::instance()->mDefaultDuration))); |
2642 | } | 2642 | } |
2643 | 2643 | ||
2644 | void CalendarView::newEvent(QDate dt) | 2644 | void CalendarView::newEvent(QDate dt) |
2645 | { | 2645 | { |
2646 | newEvent(QDateTime(dt, QTime(0,0,0)), | 2646 | newEvent(QDateTime(dt, QTime(0,0,0)), |
2647 | QDateTime(dt, QTime(0,0,0)), true); | 2647 | QDateTime(dt, QTime(0,0,0)), true); |
2648 | } | 2648 | } |
2649 | void CalendarView::newEvent(QDateTime fromHint, QDateTime toHint) | 2649 | void CalendarView::newEvent(QDateTime fromHint, QDateTime toHint) |
2650 | { | 2650 | { |
2651 | newEvent(fromHint, toHint, false); | 2651 | newEvent(fromHint, toHint, false); |
2652 | } | 2652 | } |
2653 | void CalendarView::newEvent(QDateTime fromHint, QDateTime toHint, bool allDay) | 2653 | void CalendarView::newEvent(QDateTime fromHint, QDateTime toHint, bool allDay) |
2654 | { | 2654 | { |
2655 | 2655 | ||
2656 | showEventEditor(); | 2656 | showEventEditor(); |
2657 | mEventEditor->newEvent(fromHint,toHint,allDay); | 2657 | mEventEditor->newEvent(fromHint,toHint,allDay); |
2658 | if ( mFilterView->filtersEnabled() ) { | 2658 | if ( mFilterView->filtersEnabled() ) { |
2659 | CalFilter *filter = mFilterView->selectedFilter(); | 2659 | CalFilter *filter = mFilterView->selectedFilter(); |
2660 | if (filter && filter->showCategories()) { | 2660 | if (filter && filter->showCategories()) { |
2661 | mEventEditor->setCategories(filter->categoryList().join(",") ); | 2661 | mEventEditor->setCategories(filter->categoryList().join(",") ); |
2662 | } | 2662 | } |
2663 | if ( filter ) | 2663 | if ( filter ) |
2664 | mEventEditor->setSecrecy( filter->getSecrecy() ); | 2664 | mEventEditor->setSecrecy( filter->getSecrecy() ); |
2665 | } | 2665 | } |
2666 | } | 2666 | } |
2667 | void CalendarView::todoAdded(Todo * t) | 2667 | void CalendarView::todoAdded(Todo * t) |
2668 | { | 2668 | { |
2669 | 2669 | ||
2670 | changeTodoDisplay ( t ,KOGlobals::EVENTADDED); | 2670 | changeTodoDisplay ( t ,KOGlobals::EVENTADDED); |
2671 | updateTodoViews(); | 2671 | updateTodoViews(); |
2672 | } | 2672 | } |
2673 | void CalendarView::todoChanged(Todo * t) | 2673 | void CalendarView::todoChanged(Todo * t) |
2674 | { | 2674 | { |
2675 | emit todoModified( t, 4 ); | 2675 | emit todoModified( t, 4 ); |
2676 | // updateTodoViews(); | 2676 | // updateTodoViews(); |
2677 | } | 2677 | } |
2678 | void CalendarView::todoToBeDeleted(Todo *) | 2678 | void CalendarView::todoToBeDeleted(Todo *) |
2679 | { | 2679 | { |
2680 | //qDebug("todoToBeDeleted(Todo *) "); | 2680 | //qDebug("todoToBeDeleted(Todo *) "); |
2681 | updateTodoViews(); | 2681 | updateTodoViews(); |
2682 | } | 2682 | } |
2683 | void CalendarView::todoDeleted() | 2683 | void CalendarView::todoDeleted() |
2684 | { | 2684 | { |
2685 | //qDebug(" todoDeleted()"); | 2685 | //qDebug(" todoDeleted()"); |
2686 | updateTodoViews(); | 2686 | updateTodoViews(); |
2687 | } | 2687 | } |
2688 | 2688 | ||
2689 | 2689 | ||
2690 | void CalendarView::newTodoDateTime( QDateTime dt, bool allday ) | 2690 | void CalendarView::newTodoDateTime( QDateTime dt, bool allday ) |
2691 | { | 2691 | { |
2692 | qDebug("datetime "); | ||
2693 | showTodoEditor(); | 2692 | showTodoEditor(); |
2694 | mTodoEditor->newTodo(dt,0,allday); | 2693 | mTodoEditor->newTodo(dt,0,allday); |
2695 | if ( mFilterView->filtersEnabled() ) { | 2694 | if ( mFilterView->filtersEnabled() ) { |
2696 | CalFilter *filter = mFilterView->selectedFilter(); | 2695 | CalFilter *filter = mFilterView->selectedFilter(); |
2697 | if (filter && filter->showCategories()) { | 2696 | if (filter && filter->showCategories()) { |
2698 | mTodoEditor->setCategories(filter->categoryList().join(",") ); | 2697 | mTodoEditor->setCategories(filter->categoryList().join(",") ); |
2699 | } | 2698 | } |
2700 | if ( filter ) | 2699 | if ( filter ) |
2701 | mTodoEditor->setSecrecy( filter->getSecrecy() ); | 2700 | mTodoEditor->setSecrecy( filter->getSecrecy() ); |
2702 | } | 2701 | } |
2703 | } | 2702 | } |
2704 | 2703 | ||
2705 | void CalendarView::newTodo() | 2704 | void CalendarView::newTodo() |
2706 | { | 2705 | { |
2707 | newTodoDateTime( QDateTime(),true ); | 2706 | newTodoDateTime( QDateTime(),true ); |
2708 | } | 2707 | } |
2709 | 2708 | ||
2710 | void CalendarView::newSubTodo() | 2709 | void CalendarView::newSubTodo() |
2711 | { | 2710 | { |
2712 | Todo *todo = selectedTodo(); | 2711 | Todo *todo = selectedTodo(); |
2713 | if ( todo ) newSubTodo( todo ); | 2712 | if ( todo ) newSubTodo( todo ); |
2714 | } | 2713 | } |
2715 | 2714 | ||
2716 | void CalendarView::newSubTodo(Todo *parentEvent) | 2715 | void CalendarView::newSubTodo(Todo *parentEvent) |
2717 | { | 2716 | { |
2718 | 2717 | ||
2719 | showTodoEditor(); | 2718 | showTodoEditor(); |
2720 | mTodoEditor->newTodo(QDateTime::currentDateTime().addDays(7),parentEvent,true); | 2719 | mTodoEditor->newTodo(QDateTime::currentDateTime().addDays(7),parentEvent,true); |
2721 | } | 2720 | } |
2722 | 2721 | ||
2723 | void CalendarView::newFloatingEvent() | 2722 | void CalendarView::newFloatingEvent() |
2724 | { | 2723 | { |
2725 | DateList tmpList = mNavigator->selectedDates(); | 2724 | DateList tmpList = mNavigator->selectedDates(); |
2726 | QDate date = tmpList.first(); | 2725 | QDate date = tmpList.first(); |
2727 | 2726 | ||
2728 | newEvent( QDateTime( date, QTime( 12, 0, 0 ) ), | 2727 | newEvent( QDateTime( date, QTime( 12, 0, 0 ) ), |
2729 | QDateTime( date, QTime( 12, 0, 0 ) ), true ); | 2728 | QDateTime( date, QTime( 12, 0, 0 ) ), true ); |
2730 | } | 2729 | } |
2731 | 2730 | ||
2732 | 2731 | ||
2733 | void CalendarView::editEvent( Event *event ) | 2732 | void CalendarView::editEvent( Event *event ) |
2734 | { | 2733 | { |
2735 | 2734 | ||
2736 | if ( !event ) return; | 2735 | if ( !event ) return; |
2737 | if ( event->isReadOnly() ) { | 2736 | if ( event->isReadOnly() ) { |
2738 | showEvent( event ); | 2737 | showEvent( event ); |
2739 | return; | 2738 | return; |
2740 | } | 2739 | } |
2741 | showEventEditor(); | 2740 | showEventEditor(); |
2742 | mEventEditor->editEvent( event , mFlagEditDescription); | 2741 | mEventEditor->editEvent( event , mFlagEditDescription); |
2743 | } | 2742 | } |
2744 | void CalendarView::editJournal( Journal *jour ) | 2743 | void CalendarView::editJournal( Journal *jour ) |
2745 | { | 2744 | { |
2746 | if ( !jour ) return; | 2745 | if ( !jour ) return; |
2747 | mDialogManager->hideSearchDialog(); | 2746 | mDialogManager->hideSearchDialog(); |
2748 | mViewManager->showJournalView(); | 2747 | mViewManager->showJournalView(); |
2749 | mNavigator->slotDaySelect( jour->dtStart().date() ); | 2748 | mNavigator->slotDaySelect( jour->dtStart().date() ); |
2750 | } | 2749 | } |
2751 | void CalendarView::editTodo( Todo *todo ) | 2750 | void CalendarView::editTodo( Todo *todo ) |
2752 | { | 2751 | { |
2753 | if ( !todo ) return; | 2752 | if ( !todo ) return; |
2754 | 2753 | ||
2755 | if ( todo->isReadOnly() ) { | 2754 | if ( todo->isReadOnly() ) { |
2756 | showTodo( todo ); | 2755 | showTodo( todo ); |
2757 | return; | 2756 | return; |
2758 | } | 2757 | } |
2759 | showTodoEditor(); | 2758 | showTodoEditor(); |
2760 | mTodoEditor->editTodo( todo ,mFlagEditDescription); | 2759 | mTodoEditor->editTodo( todo ,mFlagEditDescription); |
2761 | 2760 | ||
2762 | } | 2761 | } |
2763 | 2762 | ||
2764 | KOEventViewerDialog* CalendarView::getEventViewerDialog() | 2763 | KOEventViewerDialog* CalendarView::getEventViewerDialog() |
2765 | { | 2764 | { |
2766 | if ( !mEventViewerDialog ) { | 2765 | if ( !mEventViewerDialog ) { |
2767 | mEventViewerDialog = new KOEventViewerDialog(this); | 2766 | mEventViewerDialog = new KOEventViewerDialog(this); |
2768 | connect( mEventViewerDialog, SIGNAL( editIncidence( Incidence* )), this, SLOT(editIncidence( Incidence* ) ) ); | 2767 | connect( mEventViewerDialog, SIGNAL( editIncidence( Incidence* )), this, SLOT(editIncidence( Incidence* ) ) ); |
2769 | connect( this, SIGNAL(configChanged()), mEventViewerDialog, SLOT(updateConfig())); | 2768 | connect( this, SIGNAL(configChanged()), mEventViewerDialog, SLOT(updateConfig())); |
2770 | connect( mEventViewerDialog, SIGNAL(jumpToTime( const QDate &)), | 2769 | connect( mEventViewerDialog, SIGNAL(jumpToTime( const QDate &)), |
2771 | dateNavigator(), SLOT( selectWeek( const QDate & ) ) ); | 2770 | dateNavigator(), SLOT( selectWeek( const QDate & ) ) ); |
2772 | connect( mEventViewerDialog, SIGNAL(showAgendaView( bool ) ), | 2771 | connect( mEventViewerDialog, SIGNAL(showAgendaView( bool ) ), |
2773 | viewManager(), SLOT( showAgendaView( bool ) ) ); | 2772 | viewManager(), SLOT( showAgendaView( bool ) ) ); |
2774 | connect( mEventViewerDialog, SIGNAL( todoCompleted(Todo *) ), | 2773 | connect( mEventViewerDialog, SIGNAL( todoCompleted(Todo *) ), |
2775 | this, SLOT( todoChanged(Todo *) ) ); | 2774 | this, SLOT( todoChanged(Todo *) ) ); |
2776 | mEventViewerDialog->resize( 640, 480 ); | 2775 | mEventViewerDialog->resize( 640, 480 ); |
2777 | 2776 | ||
2778 | } | 2777 | } |
2779 | return mEventViewerDialog; | 2778 | return mEventViewerDialog; |
2780 | } | 2779 | } |
2781 | void CalendarView::showEvent(Event *event) | 2780 | void CalendarView::showEvent(Event *event) |
2782 | { | 2781 | { |
2783 | getEventViewerDialog()->setEvent(event); | 2782 | getEventViewerDialog()->setEvent(event); |
2784 | getEventViewerDialog()->showMe(); | 2783 | getEventViewerDialog()->showMe(); |
2785 | } | 2784 | } |
2786 | 2785 | ||
2787 | void CalendarView::showTodo(Todo *event) | 2786 | void CalendarView::showTodo(Todo *event) |
2788 | { | 2787 | { |
2789 | getEventViewerDialog()->setTodo(event); | 2788 | getEventViewerDialog()->setTodo(event); |
2790 | getEventViewerDialog()->showMe(); | 2789 | getEventViewerDialog()->showMe(); |
2791 | } | 2790 | } |
2792 | void CalendarView::showJournal( Journal *jour ) | 2791 | void CalendarView::showJournal( Journal *jour ) |
2793 | { | 2792 | { |
2794 | getEventViewerDialog()->setJournal(jour); | 2793 | getEventViewerDialog()->setJournal(jour); |
2795 | getEventViewerDialog()->showMe(); | 2794 | getEventViewerDialog()->showMe(); |
2796 | 2795 | ||
2797 | } | 2796 | } |
2798 | // void CalendarView::todoModified (Todo *event, int changed) | 2797 | // void CalendarView::todoModified (Todo *event, int changed) |
2799 | // { | 2798 | // { |
2800 | // // if (mDialogList.find (event) != mDialogList.end ()) { | 2799 | // // if (mDialogList.find (event) != mDialogList.end ()) { |
2801 | // // kdDebug() << "Todo modified and open" << endl; | 2800 | // // kdDebug() << "Todo modified and open" << endl; |
2802 | // // KOTodoEditor* temp = (KOTodoEditor *) mDialogList[event]; | 2801 | // // KOTodoEditor* temp = (KOTodoEditor *) mDialogList[event]; |
2803 | // // temp->modified (changed); | 2802 | // // temp->modified (changed); |
2804 | 2803 | ||
2805 | // // } | 2804 | // // } |
2806 | 2805 | ||
2807 | // mViewManager->updateView(); | 2806 | // mViewManager->updateView(); |
2808 | // } | 2807 | // } |
2809 | 2808 | ||
2810 | void CalendarView::appointment_show() | 2809 | void CalendarView::appointment_show() |
2811 | { | 2810 | { |
2812 | Event *anEvent = 0; | 2811 | Event *anEvent = 0; |
2813 | 2812 | ||
2814 | Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); | 2813 | Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); |
2815 | 2814 | ||
2816 | if (mViewManager->currentView()->isEventView()) { | 2815 | if (mViewManager->currentView()->isEventView()) { |
2817 | if ( incidence && incidence->type() == "Event" ) { | 2816 | if ( incidence && incidence->type() == "Event" ) { |
2818 | anEvent = static_cast<Event *>(incidence); | 2817 | anEvent = static_cast<Event *>(incidence); |
2819 | } | 2818 | } |
2820 | } | 2819 | } |
2821 | 2820 | ||
2822 | if (!anEvent) { | 2821 | if (!anEvent) { |
2823 | KNotifyClient::beep(); | 2822 | KNotifyClient::beep(); |
2824 | return; | 2823 | return; |
2825 | } | 2824 | } |
2826 | 2825 | ||
2827 | showEvent(anEvent); | 2826 | showEvent(anEvent); |
2828 | } | 2827 | } |
2829 | 2828 | ||
2830 | void CalendarView::appointment_edit() | 2829 | void CalendarView::appointment_edit() |
2831 | { | 2830 | { |
2832 | Event *anEvent = 0; | 2831 | Event *anEvent = 0; |
2833 | 2832 | ||
2834 | Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); | 2833 | Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); |
2835 | 2834 | ||
2836 | if (mViewManager->currentView()->isEventView()) { | 2835 | if (mViewManager->currentView()->isEventView()) { |
2837 | if ( incidence && incidence->type() == "Event" ) { | 2836 | if ( incidence && incidence->type() == "Event" ) { |
2838 | anEvent = static_cast<Event *>(incidence); | 2837 | anEvent = static_cast<Event *>(incidence); |
2839 | } | 2838 | } |
2840 | } | 2839 | } |
2841 | 2840 | ||
2842 | if (!anEvent) { | 2841 | if (!anEvent) { |
2843 | KNotifyClient::beep(); | 2842 | KNotifyClient::beep(); |
2844 | return; | 2843 | return; |
2845 | } | 2844 | } |
2846 | 2845 | ||
2847 | editEvent(anEvent); | 2846 | editEvent(anEvent); |
2848 | } | 2847 | } |
2849 | 2848 | ||
2850 | void CalendarView::appointment_delete() | 2849 | void CalendarView::appointment_delete() |
2851 | { | 2850 | { |
2852 | Event *anEvent = 0; | 2851 | Event *anEvent = 0; |
2853 | 2852 | ||
2854 | Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); | 2853 | Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); |
2855 | 2854 | ||
2856 | if (mViewManager->currentView()->isEventView()) { | 2855 | if (mViewManager->currentView()->isEventView()) { |
2857 | if ( incidence && incidence->type() == "Event" ) { | 2856 | if ( incidence && incidence->type() == "Event" ) { |
2858 | anEvent = static_cast<Event *>(incidence); | 2857 | anEvent = static_cast<Event *>(incidence); |
2859 | } | 2858 | } |
2860 | } | 2859 | } |
2861 | 2860 | ||
2862 | if (!anEvent) { | 2861 | if (!anEvent) { |
2863 | KNotifyClient::beep(); | 2862 | KNotifyClient::beep(); |
2864 | return; | 2863 | return; |
2865 | } | 2864 | } |
2866 | 2865 | ||
2867 | deleteEvent(anEvent); | 2866 | deleteEvent(anEvent); |
2868 | } | 2867 | } |
2869 | 2868 | ||
2870 | void CalendarView::todo_resub( Todo * parent, Todo * sub ) | 2869 | void CalendarView::todo_resub( Todo * parent, Todo * sub ) |
2871 | { | 2870 | { |
2872 | if (!sub) return; | 2871 | if (!sub) return; |
2873 | if (!parent) return; | 2872 | if (!parent) return; |
2874 | if ( sub->relatedTo() ) | 2873 | if ( sub->relatedTo() ) |
2875 | sub->relatedTo()->removeRelation(sub); | 2874 | sub->relatedTo()->removeRelation(sub); |
2876 | sub->setRelatedTo(parent); | 2875 | sub->setRelatedTo(parent); |
2877 | sub->setRelatedToUid(parent->uid()); | 2876 | sub->setRelatedToUid(parent->uid()); |
2878 | parent->addRelation(sub); | 2877 | parent->addRelation(sub); |
2879 | sub->updated(); | 2878 | sub->updated(); |
2880 | parent->updated(); | 2879 | parent->updated(); |
2881 | setModified(true); | 2880 | setModified(true); |
2882 | updateView(); | 2881 | updateView(); |
2883 | } | 2882 | } |
2884 | void CalendarView::todo_unsub(Todo *anTodo ) | 2883 | void CalendarView::todo_unsub(Todo *anTodo ) |
2885 | { | 2884 | { |
2886 | // Todo *anTodo = selectedTodo(); | 2885 | // Todo *anTodo = selectedTodo(); |
2887 | if (!anTodo) return; | 2886 | if (!anTodo) return; |
2888 | if (!anTodo->relatedTo()) return; | 2887 | if (!anTodo->relatedTo()) return; |
2889 | anTodo->relatedTo()->removeRelation(anTodo); | 2888 | anTodo->relatedTo()->removeRelation(anTodo); |
2890 | anTodo->setRelatedTo(0); | 2889 | anTodo->setRelatedTo(0); |
2891 | anTodo->updated(); | 2890 | anTodo->updated(); |
2892 | anTodo->setRelatedToUid(""); | 2891 | anTodo->setRelatedToUid(""); |
2893 | setModified(true); | 2892 | setModified(true); |
2894 | updateView(); | 2893 | updateView(); |
2895 | } | 2894 | } |
2896 | 2895 | ||
2897 | void CalendarView::deleteTodo(Todo *todo) | 2896 | void CalendarView::deleteTodo(Todo *todo) |
2898 | { | 2897 | { |
2899 | if (!todo) { | 2898 | if (!todo) { |
2900 | KNotifyClient::beep(); | 2899 | KNotifyClient::beep(); |
2901 | return; | 2900 | return; |
2902 | } | 2901 | } |
2903 | if (KOPrefs::instance()->mConfirm) { | 2902 | if (KOPrefs::instance()->mConfirm) { |
2904 | QString text = todo->summary().left(20); | 2903 | QString text = todo->summary().left(20); |
2905 | if (!todo->relations().isEmpty()) { | 2904 | if (!todo->relations().isEmpty()) { |
2906 | text += i18n("\nhas sub-todos.\nAll completed sub-todos\nwill be deleted as well!"); | 2905 | text += i18n("\nhas sub-todos.\nAll completed sub-todos\nwill be deleted as well!"); |
2907 | 2906 | ||
2908 | } | 2907 | } |
2909 | switch (msgItemDelete(text)) { | 2908 | switch (msgItemDelete(text)) { |
2910 | case KMessageBox::Continue: // OK | 2909 | case KMessageBox::Continue: // OK |
2911 | bool deleteT = false; | 2910 | bool deleteT = false; |
2912 | if (!todo->relations().isEmpty()) { | 2911 | if (!todo->relations().isEmpty()) { |
2913 | deleteT = removeCompletedSubTodos( todo ); | 2912 | deleteT = removeCompletedSubTodos( todo ); |
2914 | } | 2913 | } |
2915 | // deleteT == true: todo already deleted in removeCompletedSubTodos | 2914 | // deleteT == true: todo already deleted in removeCompletedSubTodos |
2916 | if ( !deleteT ) { | 2915 | if ( !deleteT ) { |
2917 | checkExternalId( todo ); | 2916 | checkExternalId( todo ); |
2918 | calendar()->deleteTodo(todo); | 2917 | calendar()->deleteTodo(todo); |
2919 | changeTodoDisplay( todo,KOGlobals::EVENTDELETED ); | 2918 | changeTodoDisplay( todo,KOGlobals::EVENTDELETED ); |
2920 | updateView(); | 2919 | updateView(); |
2921 | } | 2920 | } |
2922 | break; | 2921 | break; |
2923 | } // switch | 2922 | } // switch |
2924 | } else { | 2923 | } else { |
2925 | checkExternalId( todo ); | 2924 | checkExternalId( todo ); |
2926 | mCalendar->deleteTodo(todo); | 2925 | mCalendar->deleteTodo(todo); |
2927 | changeTodoDisplay( todo,KOGlobals::EVENTDELETED ); | 2926 | changeTodoDisplay( todo,KOGlobals::EVENTDELETED ); |
2928 | updateView(); | 2927 | updateView(); |
2929 | } | 2928 | } |
2930 | 2929 | ||
2931 | emit updateSearchDialog(); | 2930 | emit updateSearchDialog(); |
2932 | } | 2931 | } |
2933 | void CalendarView::deleteJournal(Journal *jour) | 2932 | void CalendarView::deleteJournal(Journal *jour) |
2934 | { | 2933 | { |
2935 | if (!jour) { | 2934 | if (!jour) { |
2936 | KNotifyClient::beep(); | 2935 | KNotifyClient::beep(); |
2937 | return; | 2936 | return; |
2938 | } | 2937 | } |
2939 | if (KOPrefs::instance()->mConfirm) { | 2938 | if (KOPrefs::instance()->mConfirm) { |
2940 | switch (msgItemDelete( jour->description().left(20))) { | 2939 | switch (msgItemDelete( jour->description().left(20))) { |
2941 | case KMessageBox::Continue: // OK | 2940 | case KMessageBox::Continue: // OK |
2942 | calendar()->deleteJournal(jour); | 2941 | calendar()->deleteJournal(jour); |
2943 | updateView(); | 2942 | updateView(); |
2944 | break; | 2943 | break; |
2945 | } // switch | 2944 | } // switch |
2946 | } else { | 2945 | } else { |
2947 | calendar()->deleteJournal(jour);; | 2946 | calendar()->deleteJournal(jour);; |
2948 | updateView(); | 2947 | updateView(); |
2949 | } | 2948 | } |
2950 | emit updateSearchDialog(); | 2949 | emit updateSearchDialog(); |
2951 | } | 2950 | } |
2952 | 2951 | ||
2953 | void CalendarView::deleteEvent(Event *anEvent) | 2952 | void CalendarView::deleteEvent(Event *anEvent) |
2954 | { | 2953 | { |
2955 | if (!anEvent) { | 2954 | if (!anEvent) { |
2956 | KNotifyClient::beep(); | 2955 | KNotifyClient::beep(); |
2957 | return; | 2956 | return; |
2958 | } | 2957 | } |
2959 | 2958 | ||
2960 | if (anEvent->recurrence()->doesRecur()) { | 2959 | if (anEvent->recurrence()->doesRecur()) { |
2961 | QDate itemDate = mViewManager->currentSelectionDate(); | 2960 | QDate itemDate = mViewManager->currentSelectionDate(); |
2962 | int km; | 2961 | int km; |
2963 | if (!itemDate.isValid()) { | 2962 | if (!itemDate.isValid()) { |
2964 | //kdDebug() << "Date Not Valid" << endl; | 2963 | //kdDebug() << "Date Not Valid" << endl; |
2965 | if (KOPrefs::instance()->mConfirm) { | 2964 | if (KOPrefs::instance()->mConfirm) { |
2966 | km = KMessageBox::warningContinueCancel(this,anEvent->summary().left(25) + | 2965 | km = KMessageBox::warningContinueCancel(this,anEvent->summary().left(25) + |
2967 | i18n("\nThis event recurs\nover multiple dates.\nAre you sure you want\nto delete this event\nand all its recurrences?"), | 2966 | i18n("\nThis event recurs\nover multiple dates.\nAre you sure you want\nto delete this event\nand all its recurrences?"), |
2968 | i18n("KO/Pi Confirmation"),i18n("Delete All")); | 2967 | i18n("KO/Pi Confirmation"),i18n("Delete All")); |
2969 | if ( km == KMessageBox::Continue ) | 2968 | if ( km == KMessageBox::Continue ) |
2970 | km = KMessageBox::No; // No = all below | 2969 | km = KMessageBox::No; // No = all below |
2971 | } else | 2970 | } else |
2972 | km = KMessageBox::No; | 2971 | km = KMessageBox::No; |
2973 | } else { | 2972 | } else { |
2974 | km = KMessageBox::warningYesNoCancel(this,anEvent->summary().left(25) + | 2973 | km = KMessageBox::warningYesNoCancel(this,anEvent->summary().left(25) + |
2975 | i18n("\nThis event recurs\nover multiple dates.\nDo you want to delete\nall it's recurrences,\nor only the current one on:\n")+ | 2974 | i18n("\nThis event recurs\nover multiple dates.\nDo you want to delete\nall it's recurrences,\nor only the current one on:\n")+ |
2976 | KGlobal::locale()->formatDate(itemDate)+i18n(" ?\n\nDelete:\n"), | 2975 | KGlobal::locale()->formatDate(itemDate)+i18n(" ?\n\nDelete:\n"), |
2977 | i18n("KO/Pi Confirmation"),i18n("Current"), | 2976 | i18n("KO/Pi Confirmation"),i18n("Current"), |
2978 | i18n("All")); | 2977 | i18n("All")); |
2979 | } | 2978 | } |
2980 | switch(km) { | 2979 | switch(km) { |
2981 | 2980 | ||
2982 | case KMessageBox::No: // Continue // all | 2981 | case KMessageBox::No: // Continue // all |
2983 | //qDebug("KMessageBox::No "); | 2982 | //qDebug("KMessageBox::No "); |
2984 | if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0) | 2983 | if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0) |
2985 | schedule(Scheduler::Cancel,anEvent); | 2984 | schedule(Scheduler::Cancel,anEvent); |
2986 | 2985 | ||
2987 | checkExternalId( anEvent); | 2986 | checkExternalId( anEvent); |
2988 | mCalendar->deleteEvent(anEvent); | 2987 | mCalendar->deleteEvent(anEvent); |
2989 | changeEventDisplay(anEvent,KOGlobals::EVENTDELETED); | 2988 | changeEventDisplay(anEvent,KOGlobals::EVENTDELETED); |
2990 | break; | 2989 | break; |
2991 | 2990 | ||
2992 | // Disabled because it does not work | 2991 | // Disabled because it does not work |
2993 | //#if 0 | 2992 | //#if 0 |
2994 | case KMessageBox::Yes: // just this one | 2993 | case KMessageBox::Yes: // just this one |
2995 | //QDate qd = mNavigator->selectedDates().first(); | 2994 | //QDate qd = mNavigator->selectedDates().first(); |
2996 | //if (!qd.isValid()) { | 2995 | //if (!qd.isValid()) { |
2997 | // kdDebug() << "no date selected, or invalid date" << endl; | 2996 | // kdDebug() << "no date selected, or invalid date" << endl; |
2998 | // KNotifyClient::beep(); | 2997 | // KNotifyClient::beep(); |
2999 | // return; | 2998 | // return; |
3000 | //} | 2999 | //} |
3001 | //while (!anEvent->recursOn(qd)) qd = qd.addDays(1); | 3000 | //while (!anEvent->recursOn(qd)) qd = qd.addDays(1); |
3002 | if (itemDate!=QDate(1,1,1) || itemDate.isValid()) { | 3001 | if (itemDate!=QDate(1,1,1) || itemDate.isValid()) { |
3003 | anEvent->addExDate(itemDate); | 3002 | anEvent->addExDate(itemDate); |
3004 | int duration = anEvent->recurrence()->duration(); | 3003 | int duration = anEvent->recurrence()->duration(); |
3005 | if ( duration > 0 ) { | 3004 | if ( duration > 0 ) { |
3006 | anEvent->recurrence()->setDuration( duration - 1 ); | 3005 | anEvent->recurrence()->setDuration( duration - 1 ); |
3007 | } | 3006 | } |
3008 | changeEventDisplay(anEvent, KOGlobals::EVENTEDITED); | 3007 | changeEventDisplay(anEvent, KOGlobals::EVENTEDITED); |
3009 | } | 3008 | } |
3010 | break; | 3009 | break; |
3011 | //#endif | 3010 | //#endif |
3012 | } // switch | 3011 | } // switch |
3013 | } else { | 3012 | } else { |
3014 | if (KOPrefs::instance()->mConfirm) { | 3013 | if (KOPrefs::instance()->mConfirm) { |
3015 | switch (KMessageBox::warningContinueCancel(this,anEvent->summary().left(25) + | 3014 | switch (KMessageBox::warningContinueCancel(this,anEvent->summary().left(25) + |
3016 | i18n("\nAre you sure you want\nto delete this event?"), | 3015 | i18n("\nAre you sure you want\nto delete this event?"), |
3017 | i18n("KO/Pi Confirmation"),i18n("Delete"))) { | 3016 | i18n("KO/Pi Confirmation"),i18n("Delete"))) { |
3018 | case KMessageBox::Continue: // OK | 3017 | case KMessageBox::Continue: // OK |
3019 | if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0) | 3018 | if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0) |
3020 | schedule(Scheduler::Cancel,anEvent); | 3019 | schedule(Scheduler::Cancel,anEvent); |
3021 | checkExternalId( anEvent); | 3020 | checkExternalId( anEvent); |
3022 | mCalendar->deleteEvent(anEvent); | 3021 | mCalendar->deleteEvent(anEvent); |
3023 | changeEventDisplay(anEvent, KOGlobals::EVENTDELETED); | 3022 | changeEventDisplay(anEvent, KOGlobals::EVENTDELETED); |
3024 | break; | 3023 | break; |
3025 | } // switch | 3024 | } // switch |
3026 | } else { | 3025 | } else { |
3027 | if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0) | 3026 | if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0) |
3028 | schedule(Scheduler::Cancel,anEvent); | 3027 | schedule(Scheduler::Cancel,anEvent); |
3029 | checkExternalId( anEvent); | 3028 | checkExternalId( anEvent); |
3030 | mCalendar->deleteEvent(anEvent); | 3029 | mCalendar->deleteEvent(anEvent); |
3031 | changeEventDisplay(anEvent, KOGlobals::EVENTDELETED); | 3030 | changeEventDisplay(anEvent, KOGlobals::EVENTDELETED); |
3032 | } | 3031 | } |
3033 | } // if-else | 3032 | } // if-else |
3034 | emit updateSearchDialog(); | 3033 | emit updateSearchDialog(); |
3035 | } | 3034 | } |
3036 | 3035 | ||
3037 | bool CalendarView::deleteEvent(const QString &uid) | 3036 | bool CalendarView::deleteEvent(const QString &uid) |
3038 | { | 3037 | { |
3039 | Event *ev = mCalendar->event(uid); | 3038 | Event *ev = mCalendar->event(uid); |
3040 | if (ev) { | 3039 | if (ev) { |
3041 | deleteEvent(ev); | 3040 | deleteEvent(ev); |
3042 | return true; | 3041 | return true; |
3043 | } else { | 3042 | } else { |
3044 | return false; | 3043 | return false; |
3045 | } | 3044 | } |
3046 | } | 3045 | } |
3047 | 3046 | ||
3048 | /*****************************************************************************/ | 3047 | /*****************************************************************************/ |
3049 | 3048 | ||
3050 | void CalendarView::action_mail() | 3049 | void CalendarView::action_mail() |
3051 | { | 3050 | { |
3052 | #ifndef KORG_NOMAIL | 3051 | #ifndef KORG_NOMAIL |
3053 | KOMailClient mailClient; | 3052 | KOMailClient mailClient; |
3054 | 3053 | ||
3055 | Incidence *incidence = currentSelection(); | 3054 | Incidence *incidence = currentSelection(); |
3056 | 3055 | ||
3057 | if (!incidence) { | 3056 | if (!incidence) { |
3058 | KMessageBox::sorry(this,i18n("Can't generate mail:\nNo event selected.")); | 3057 | KMessageBox::sorry(this,i18n("Can't generate mail:\nNo event selected.")); |
3059 | return; | 3058 | return; |
3060 | } | 3059 | } |
3061 | if(incidence->attendeeCount() == 0 ) { | 3060 | if(incidence->attendeeCount() == 0 ) { |
3062 | KMessageBox::sorry(this, | 3061 | KMessageBox::sorry(this, |
3063 | i18n("Can't generate mail:\nNo attendees defined.\n")); | 3062 | i18n("Can't generate mail:\nNo attendees defined.\n")); |
3064 | return; | 3063 | return; |
3065 | } | 3064 | } |
3066 | 3065 | ||
3067 | CalendarLocal cal_tmp; | 3066 | CalendarLocal cal_tmp; |
3068 | Event *event = 0; | 3067 | Event *event = 0; |
3069 | Event *ev = 0; | 3068 | Event *ev = 0; |
3070 | if ( incidence && incidence->type() == "Event" ) { | 3069 | if ( incidence && incidence->type() == "Event" ) { |
3071 | event = static_cast<Event *>(incidence); | 3070 | event = static_cast<Event *>(incidence); |
3072 | ev = new Event(*event); | 3071 | ev = new Event(*event); |
3073 | cal_tmp.addEvent(ev); | 3072 | cal_tmp.addEvent(ev); |
3074 | } | 3073 | } |
3075 | ICalFormat mForm(); | 3074 | ICalFormat mForm(); |
3076 | QString attachment = mForm.toString( &cal_tmp ); | 3075 | QString attachment = mForm.toString( &cal_tmp ); |
3077 | if (ev) delete(ev); | 3076 | if (ev) delete(ev); |
3078 | 3077 | ||
3079 | mailClient.mailAttendees(currentSelection(), attachment); | 3078 | mailClient.mailAttendees(currentSelection(), attachment); |
3080 | 3079 | ||
3081 | #endif | 3080 | #endif |
3082 | 3081 | ||
3083 | #if 0 | 3082 | #if 0 |
3084 | Event *anEvent = 0; | 3083 | Event *anEvent = 0; |
3085 | if (mViewManager->currentView()->isEventView()) { | 3084 | if (mViewManager->currentView()->isEventView()) { |
3086 | anEvent = dynamic_cast<Event *>((mViewManager->currentView()->selectedIncidences()).first()); | 3085 | anEvent = dynamic_cast<Event *>((mViewManager->currentView()->selectedIncidences()).first()); |
3087 | } | 3086 | } |
3088 | 3087 | ||
3089 | if (!anEvent) { | 3088 | if (!anEvent) { |
3090 | KMessageBox::sorry(this,i18n("Can't generate mail:\nNo event selected.")); | 3089 | KMessageBox::sorry(this,i18n("Can't generate mail:\nNo event selected.")); |
3091 | return; | 3090 | return; |
3092 | } | 3091 | } |
3093 | if(anEvent->attendeeCount() == 0 ) { | 3092 | if(anEvent->attendeeCount() == 0 ) { |
3094 | KMessageBox::sorry(this, | 3093 | KMessageBox::sorry(this, |
3095 | i18n("Can't generate mail:\nNo attendees defined.\n")); | 3094 | i18n("Can't generate mail:\nNo attendees defined.\n")); |
3096 | return; | 3095 | return; |
3097 | } | 3096 | } |
3098 | 3097 | ||
3099 | mailobject.emailEvent(anEvent); | 3098 | mailobject.emailEvent(anEvent); |
3100 | #endif | 3099 | #endif |
3101 | } | 3100 | } |
3102 | 3101 | ||
3103 | 3102 | ||
3104 | void CalendarView::schedule_publish(Incidence *incidence) | 3103 | void CalendarView::schedule_publish(Incidence *incidence) |
3105 | { | 3104 | { |
3106 | Event *event = 0; | 3105 | Event *event = 0; |
3107 | Todo *todo = 0; | 3106 | Todo *todo = 0; |
3108 | 3107 | ||
3109 | if (incidence == 0) { | 3108 | if (incidence == 0) { |
3110 | incidence = mViewManager->currentView()->selectedIncidences().first(); | 3109 | incidence = mViewManager->currentView()->selectedIncidences().first(); |
3111 | if (incidence == 0) { | 3110 | if (incidence == 0) { |
3112 | incidence = mTodoList->selectedIncidences().first(); | 3111 | incidence = mTodoList->selectedIncidences().first(); |
3113 | } | 3112 | } |
3114 | } | 3113 | } |
3115 | if ( incidence && incidence->type() == "Event" ) { | 3114 | if ( incidence && incidence->type() == "Event" ) { |
3116 | event = static_cast<Event *>(incidence); | 3115 | event = static_cast<Event *>(incidence); |
3117 | } else { | 3116 | } else { |
3118 | if ( incidence && incidence->type() == "Todo" ) { | 3117 | if ( incidence && incidence->type() == "Todo" ) { |
3119 | todo = static_cast<Todo *>(incidence); | 3118 | todo = static_cast<Todo *>(incidence); |
3120 | } | 3119 | } |
3121 | } | 3120 | } |
3122 | 3121 | ||
3123 | if (!event && !todo) { | 3122 | if (!event && !todo) { |
3124 | KMessageBox::sorry(this,i18n("No event selected.")); | 3123 | KMessageBox::sorry(this,i18n("No event selected.")); |
3125 | return; | 3124 | return; |
3126 | } | 3125 | } |
3127 | 3126 | ||
3128 | PublishDialog *publishdlg = new PublishDialog(); | 3127 | PublishDialog *publishdlg = new PublishDialog(); |
3129 | if (incidence->attendeeCount()>0) { | 3128 | if (incidence->attendeeCount()>0) { |
3130 | QPtrList<Attendee> attendees = incidence->attendees(); | 3129 | QPtrList<Attendee> attendees = incidence->attendees(); |
3131 | attendees.first(); | 3130 | attendees.first(); |
3132 | while ( attendees.current()!=0 ) { | 3131 | while ( attendees.current()!=0 ) { |
3133 | publishdlg->addAttendee(attendees.current()); | 3132 | publishdlg->addAttendee(attendees.current()); |
3134 | attendees.next(); | 3133 | attendees.next(); |
3135 | } | 3134 | } |
3136 | } | 3135 | } |
3137 | bool send = true; | 3136 | bool send = true; |
3138 | if ( KOPrefs::instance()->mMailClient == KOPrefs::MailClientSendmail ) { | 3137 | if ( KOPrefs::instance()->mMailClient == KOPrefs::MailClientSendmail ) { |
3139 | if ( publishdlg->exec() != QDialog::Accepted ) | 3138 | if ( publishdlg->exec() != QDialog::Accepted ) |
3140 | send = false; | 3139 | send = false; |
3141 | } | 3140 | } |
3142 | if ( send ) { | 3141 | if ( send ) { |
3143 | OutgoingDialog *dlg = mDialogManager->outgoingDialog(); | 3142 | OutgoingDialog *dlg = mDialogManager->outgoingDialog(); |
3144 | if ( event ) { | 3143 | if ( event ) { |
3145 | Event *ev = new Event(*event); | 3144 | Event *ev = new Event(*event); |
3146 | ev->registerObserver(0); | 3145 | ev->registerObserver(0); |
3147 | ev->clearAttendees(); | 3146 | ev->clearAttendees(); |
3148 | if (!dlg->addMessage(ev,Scheduler::Publish,publishdlg->addresses())) { | 3147 | if (!dlg->addMessage(ev,Scheduler::Publish,publishdlg->addresses())) { |
3149 | delete(ev); | 3148 | delete(ev); |
3150 | } | 3149 | } |
3151 | } else { | 3150 | } else { |
3152 | if ( todo ) { | 3151 | if ( todo ) { |
3153 | Todo *ev = new Todo(*todo); | 3152 | Todo *ev = new Todo(*todo); |
3154 | ev->registerObserver(0); | 3153 | ev->registerObserver(0); |
3155 | ev->clearAttendees(); | 3154 | ev->clearAttendees(); |
3156 | if (!dlg->addMessage(ev,Scheduler::Publish,publishdlg->addresses())) { | 3155 | if (!dlg->addMessage(ev,Scheduler::Publish,publishdlg->addresses())) { |
3157 | delete(ev); | 3156 | delete(ev); |
3158 | } | 3157 | } |
3159 | } | 3158 | } |
3160 | } | 3159 | } |
3161 | } | 3160 | } |
3162 | delete publishdlg; | 3161 | delete publishdlg; |
3163 | } | 3162 | } |
3164 | 3163 | ||
3165 | void CalendarView::schedule_request(Incidence *incidence) | 3164 | void CalendarView::schedule_request(Incidence *incidence) |
3166 | { | 3165 | { |
3167 | schedule(Scheduler::Request,incidence); | 3166 | schedule(Scheduler::Request,incidence); |
3168 | } | 3167 | } |
3169 | 3168 | ||
3170 | void CalendarView::schedule_refresh(Incidence *incidence) | 3169 | void CalendarView::schedule_refresh(Incidence *incidence) |
3171 | { | 3170 | { |
3172 | schedule(Scheduler::Refresh,incidence); | 3171 | schedule(Scheduler::Refresh,incidence); |
3173 | } | 3172 | } |
3174 | 3173 | ||
3175 | void CalendarView::schedule_cancel(Incidence *incidence) | 3174 | void CalendarView::schedule_cancel(Incidence *incidence) |
3176 | { | 3175 | { |
3177 | schedule(Scheduler::Cancel,incidence); | 3176 | schedule(Scheduler::Cancel,incidence); |
3178 | } | 3177 | } |
3179 | 3178 | ||
3180 | void CalendarView::schedule_add(Incidence *incidence) | 3179 | void CalendarView::schedule_add(Incidence *incidence) |
3181 | { | 3180 | { |
3182 | schedule(Scheduler::Add,incidence); | 3181 | schedule(Scheduler::Add,incidence); |
3183 | } | 3182 | } |
3184 | 3183 | ||
3185 | void CalendarView::schedule_reply(Incidence *incidence) | 3184 | void CalendarView::schedule_reply(Incidence *incidence) |
3186 | { | 3185 | { |
3187 | schedule(Scheduler::Reply,incidence); | 3186 | schedule(Scheduler::Reply,incidence); |
3188 | } | 3187 | } |
3189 | 3188 | ||
3190 | void CalendarView::schedule_counter(Incidence *incidence) | 3189 | void CalendarView::schedule_counter(Incidence *incidence) |
3191 | { | 3190 | { |
3192 | schedule(Scheduler::Counter,incidence); | 3191 | schedule(Scheduler::Counter,incidence); |
3193 | } | 3192 | } |
3194 | 3193 | ||
3195 | void CalendarView::schedule_declinecounter(Incidence *incidence) | 3194 | void CalendarView::schedule_declinecounter(Incidence *incidence) |
3196 | { | 3195 | { |
3197 | schedule(Scheduler::Declinecounter,incidence); | 3196 | schedule(Scheduler::Declinecounter,incidence); |
3198 | } | 3197 | } |
3199 | 3198 | ||
3200 | void CalendarView::schedule_publish_freebusy(int daysToPublish) | 3199 | void CalendarView::schedule_publish_freebusy(int daysToPublish) |
3201 | { | 3200 | { |
3202 | QDateTime start = QDateTime::currentDateTime(); | 3201 | QDateTime start = QDateTime::currentDateTime(); |
3203 | QDateTime end = start.addDays(daysToPublish); | 3202 | QDateTime end = start.addDays(daysToPublish); |
3204 | 3203 | ||
3205 | FreeBusy *freebusy = new FreeBusy(mCalendar, start, end); | 3204 | FreeBusy *freebusy = new FreeBusy(mCalendar, start, end); |
3206 | freebusy->setOrganizer(KOPrefs::instance()->email()); | 3205 | freebusy->setOrganizer(KOPrefs::instance()->email()); |
3207 | 3206 | ||
3208 | 3207 | ||
3209 | PublishDialog *publishdlg = new PublishDialog(); | 3208 | PublishDialog *publishdlg = new PublishDialog(); |
3210 | if ( publishdlg->exec() == QDialog::Accepted ) { | 3209 | if ( publishdlg->exec() == QDialog::Accepted ) { |
3211 | OutgoingDialog *dlg = mDialogManager->outgoingDialog(); | 3210 | OutgoingDialog *dlg = mDialogManager->outgoingDialog(); |
3212 | if (!dlg->addMessage(freebusy,Scheduler::Publish,publishdlg->addresses())) { | 3211 | if (!dlg->addMessage(freebusy,Scheduler::Publish,publishdlg->addresses())) { |
3213 | delete(freebusy); | 3212 | delete(freebusy); |
3214 | } | 3213 | } |
3215 | } | 3214 | } |
3216 | delete publishdlg; | 3215 | delete publishdlg; |
3217 | } | 3216 | } |
3218 | 3217 | ||
3219 | void CalendarView::schedule(Scheduler::Method method, Incidence *incidence) | 3218 | void CalendarView::schedule(Scheduler::Method method, Incidence *incidence) |
3220 | { | 3219 | { |
3221 | Event *event = 0; | 3220 | Event *event = 0; |
3222 | Todo *todo = 0; | 3221 | Todo *todo = 0; |
3223 | 3222 | ||
3224 | if (incidence == 0) { | 3223 | if (incidence == 0) { |
3225 | incidence = mViewManager->currentView()->selectedIncidences().first(); | 3224 | incidence = mViewManager->currentView()->selectedIncidences().first(); |
3226 | if (incidence == 0) { | 3225 | if (incidence == 0) { |
3227 | incidence = mTodoList->selectedIncidences().first(); | 3226 | incidence = mTodoList->selectedIncidences().first(); |
3228 | } | 3227 | } |
3229 | } | 3228 | } |
3230 | if ( incidence && incidence->type() == "Event" ) { | 3229 | if ( incidence && incidence->type() == "Event" ) { |
3231 | event = static_cast<Event *>(incidence); | 3230 | event = static_cast<Event *>(incidence); |
3232 | } | 3231 | } |
3233 | if ( incidence && incidence->type() == "Todo" ) { | 3232 | if ( incidence && incidence->type() == "Todo" ) { |
3234 | todo = static_cast<Todo *>(incidence); | 3233 | todo = static_cast<Todo *>(incidence); |
3235 | } | 3234 | } |
3236 | 3235 | ||
3237 | if (!event && !todo) { | 3236 | if (!event && !todo) { |
3238 | KMessageBox::sorry(this,i18n("No event selected.")); | 3237 | KMessageBox::sorry(this,i18n("No event selected.")); |
3239 | return; | 3238 | return; |
3240 | } | 3239 | } |
3241 | 3240 | ||
3242 | if( incidence->attendeeCount() == 0 && method != Scheduler::Publish ) { | 3241 | if( incidence->attendeeCount() == 0 && method != Scheduler::Publish ) { |
3243 | KMessageBox::sorry(this,i18n("The event has no attendees.")); | 3242 | KMessageBox::sorry(this,i18n("The event has no attendees.")); |
3244 | return; | 3243 | return; |
3245 | } | 3244 | } |
3246 | 3245 | ||
3247 | Event *ev = 0; | 3246 | Event *ev = 0; |
3248 | if (event) ev = new Event(*event); | 3247 | if (event) ev = new Event(*event); |
3249 | Todo *to = 0; | 3248 | Todo *to = 0; |
3250 | if (todo) to = new Todo(*todo); | 3249 | if (todo) to = new Todo(*todo); |
3251 | 3250 | ||
3252 | if (method == Scheduler::Reply || method == Scheduler::Refresh) { | 3251 | if (method == Scheduler::Reply || method == Scheduler::Refresh) { |
3253 | Attendee *me = incidence->attendeeByMails(KOPrefs::instance()->mAdditionalMails,KOPrefs::instance()->email()); | 3252 | Attendee *me = incidence->attendeeByMails(KOPrefs::instance()->mAdditionalMails,KOPrefs::instance()->email()); |
3254 | if (!me) { | 3253 | if (!me) { |
3255 | KMessageBox::sorry(this,i18n("Could not find your attendee entry.\nPlease check the emails.")); | 3254 | KMessageBox::sorry(this,i18n("Could not find your attendee entry.\nPlease check the emails.")); |
3256 | return; | 3255 | return; |
3257 | } | 3256 | } |
3258 | if (me->status()==Attendee::NeedsAction && me->RSVP() && method==Scheduler::Reply) { | 3257 | if (me->status()==Attendee::NeedsAction && me->RSVP() && method==Scheduler::Reply) { |
3259 | StatusDialog *statdlg = new StatusDialog(this); | 3258 | StatusDialog *statdlg = new StatusDialog(this); |
3260 | if (!statdlg->exec()==QDialog::Accepted) return; | 3259 | if (!statdlg->exec()==QDialog::Accepted) return; |
3261 | me->setStatus( statdlg->status() ); | 3260 | me->setStatus( statdlg->status() ); |
3262 | delete(statdlg); | 3261 | delete(statdlg); |
3263 | } | 3262 | } |
3264 | Attendee *menew = new Attendee(*me); | 3263 | Attendee *menew = new Attendee(*me); |
3265 | if (ev) { | 3264 | if (ev) { |
3266 | ev->clearAttendees(); | 3265 | ev->clearAttendees(); |
3267 | ev->addAttendee(menew,false); | 3266 | ev->addAttendee(menew,false); |
3268 | } else { | 3267 | } else { |
3269 | if (to) { | 3268 | if (to) { |
3270 | todo->clearAttendees(); | 3269 | todo->clearAttendees(); |
3271 | todo->addAttendee(menew,false); | 3270 | todo->addAttendee(menew,false); |
3272 | } | 3271 | } |
3273 | } | 3272 | } |
3274 | } | 3273 | } |
3275 | 3274 | ||
3276 | OutgoingDialog *dlg = mDialogManager->outgoingDialog(); | 3275 | OutgoingDialog *dlg = mDialogManager->outgoingDialog(); |
3277 | if (ev) { | 3276 | if (ev) { |
3278 | if ( !dlg->addMessage(ev,method) ) delete(ev); | 3277 | if ( !dlg->addMessage(ev,method) ) delete(ev); |
3279 | } else { | 3278 | } else { |
3280 | if (to) { | 3279 | if (to) { |
3281 | if ( !dlg->addMessage(to,method) ) delete(to); | 3280 | if ( !dlg->addMessage(to,method) ) delete(to); |
3282 | } | 3281 | } |
3283 | } | 3282 | } |
3284 | } | 3283 | } |
3285 | 3284 | ||
3286 | void CalendarView::openAddressbook() | 3285 | void CalendarView::openAddressbook() |
3287 | { | 3286 | { |
3288 | KRun::runCommand("kaddressbook"); | 3287 | KRun::runCommand("kaddressbook"); |
3289 | } | 3288 | } |
3290 | 3289 | ||
3291 | void CalendarView::setModified(bool modified) | 3290 | void CalendarView::setModified(bool modified) |
3292 | { | 3291 | { |
3293 | if ( modified ) | 3292 | if ( modified ) |
3294 | emit signalmodified(); | 3293 | emit signalmodified(); |
3295 | if (mModified != modified) { | 3294 | if (mModified != modified) { |
3296 | mModified = modified; | 3295 | mModified = modified; |
3297 | emit modifiedChanged(mModified); | 3296 | emit modifiedChanged(mModified); |
3298 | } | 3297 | } |
3299 | } | 3298 | } |
3300 | 3299 | ||
3301 | bool CalendarView::isReadOnly() | 3300 | bool CalendarView::isReadOnly() |
3302 | { | 3301 | { |
3303 | return mReadOnly; | 3302 | return mReadOnly; |
3304 | } | 3303 | } |
3305 | 3304 | ||
3306 | void CalendarView::setReadOnly(bool readOnly) | 3305 | void CalendarView::setReadOnly(bool readOnly) |
3307 | { | 3306 | { |
3308 | if (mReadOnly != readOnly) { | 3307 | if (mReadOnly != readOnly) { |
3309 | mReadOnly = readOnly; | 3308 | mReadOnly = readOnly; |
3310 | emit readOnlyChanged(mReadOnly); | 3309 | emit readOnlyChanged(mReadOnly); |
3311 | } | 3310 | } |
3312 | } | 3311 | } |
3313 | 3312 | ||
3314 | bool CalendarView::isModified() | 3313 | bool CalendarView::isModified() |
3315 | { | 3314 | { |
3316 | return mModified; | 3315 | return mModified; |
3317 | } | 3316 | } |
3318 | 3317 | ||
3319 | void CalendarView::printSetup() | 3318 | void CalendarView::printSetup() |
3320 | { | 3319 | { |
3321 | #ifndef KORG_NOPRINTER | 3320 | #ifndef KORG_NOPRINTER |
3322 | createPrinter(); | 3321 | createPrinter(); |
3323 | 3322 | ||
3324 | mCalPrinter->setupPrinter(); | 3323 | mCalPrinter->setupPrinter(); |
3325 | #endif | 3324 | #endif |
3326 | } | 3325 | } |
3327 | 3326 | ||
3328 | void CalendarView::print() | 3327 | void CalendarView::print() |
3329 | { | 3328 | { |
3330 | #ifndef KORG_NOPRINTER | 3329 | #ifndef KORG_NOPRINTER |
3331 | createPrinter(); | 3330 | createPrinter(); |
3332 | 3331 | ||
3333 | DateList tmpDateList = mNavigator->selectedDates(); | 3332 | DateList tmpDateList = mNavigator->selectedDates(); |
3334 | mCalPrinter->print(CalPrinter::Month, | 3333 | mCalPrinter->print(CalPrinter::Month, |
3335 | tmpDateList.first(), tmpDateList.last()); | 3334 | tmpDateList.first(), tmpDateList.last()); |
3336 | #endif | 3335 | #endif |
3337 | } | 3336 | } |
3338 | 3337 | ||
3339 | void CalendarView::printPreview() | 3338 | void CalendarView::printPreview() |
3340 | { | 3339 | { |
3341 | #ifndef KORG_NOPRINTER | 3340 | #ifndef KORG_NOPRINTER |
3342 | kdDebug() << "CalendarView::printPreview()" << endl; | 3341 | kdDebug() << "CalendarView::printPreview()" << endl; |
3343 | 3342 | ||
3344 | createPrinter(); | 3343 | createPrinter(); |
3345 | 3344 | ||
3346 | DateList tmpDateList = mNavigator->selectedDates(); | 3345 | DateList tmpDateList = mNavigator->selectedDates(); |
3347 | 3346 | ||
3348 | mViewManager->currentView()->printPreview(mCalPrinter,tmpDateList.first(), | 3347 | mViewManager->currentView()->printPreview(mCalPrinter,tmpDateList.first(), |
3349 | tmpDateList.last()); | 3348 | tmpDateList.last()); |
3350 | #endif | 3349 | #endif |
3351 | } | 3350 | } |
3352 | 3351 | ||
3353 | void CalendarView::exportICalendar() | 3352 | void CalendarView::exportICalendar() |
3354 | { | 3353 | { |
3355 | QString filename = KFileDialog::getSaveFileName("icalout.ics",i18n("*.ics|ICalendars"),this); | 3354 | QString filename = KFileDialog::getSaveFileName("icalout.ics",i18n("*.ics|ICalendars"),this); |
3356 | 3355 | ||
3357 | // Force correct extension | 3356 | // Force correct extension |
3358 | if (filename.right(4) != ".ics") filename += ".ics"; | 3357 | if (filename.right(4) != ".ics") filename += ".ics"; |
3359 | 3358 | ||
3360 | FileStorage storage( mCalendar, filename, new ICalFormat() ); | 3359 | FileStorage storage( mCalendar, filename, new ICalFormat() ); |
3361 | storage.save(); | 3360 | storage.save(); |
3362 | } | 3361 | } |
3363 | 3362 | ||
3364 | bool CalendarView::exportVCalendar( QString filename ) | 3363 | bool CalendarView::exportVCalendar( QString filename ) |
3365 | { | 3364 | { |
3366 | if (mCalendar->journals().count() > 0) { | 3365 | if (mCalendar->journals().count() > 0) { |
3367 | int result = KMessageBox::warningContinueCancel(this, | 3366 | int result = KMessageBox::warningContinueCancel(this, |
3368 | i18n("The journal entries can not be\nexported to a vCalendar file."), | 3367 | i18n("The journal entries can not be\nexported to a vCalendar file."), |
3369 | i18n("Data Loss Warning"),i18n("Proceed"),i18n("Cancel"), | 3368 | i18n("Data Loss Warning"),i18n("Proceed"),i18n("Cancel"), |
3370 | true); | 3369 | true); |
3371 | if (result != KMessageBox::Continue) return false; | 3370 | if (result != KMessageBox::Continue) return false; |
3372 | } | 3371 | } |
3373 | 3372 | ||
3374 | //QString filename = KFileDialog::getSaveFileName("vcalout.vcs",i18n("*.vcs|VCalendars"),this); | 3373 | //QString filename = KFileDialog::getSaveFileName("vcalout.vcs",i18n("*.vcs|VCalendars"),this); |
3375 | 3374 | ||
3376 | // Force correct extension | 3375 | // Force correct extension |
3377 | if (filename.right(4) != ".vcs") filename += ".vcs"; | 3376 | if (filename.right(4) != ".vcs") filename += ".vcs"; |
3378 | 3377 | ||
3379 | FileStorage storage( mCalendar, filename, new VCalFormat ); | 3378 | FileStorage storage( mCalendar, filename, new VCalFormat ); |
3380 | return storage.save(); | 3379 | return storage.save(); |
3381 | 3380 | ||
3382 | } | 3381 | } |
3383 | 3382 | ||
3384 | void CalendarView::eventUpdated(Incidence *) | 3383 | void CalendarView::eventUpdated(Incidence *) |
3385 | { | 3384 | { |
3386 | setModified(); | 3385 | setModified(); |
3387 | // Don't call updateView here. The code, which has caused the update of the | 3386 | // Don't call updateView here. The code, which has caused the update of the |
3388 | // event is responsible for updating the view. | 3387 | // event is responsible for updating the view. |
3389 | // updateView(); | 3388 | // updateView(); |
3390 | } | 3389 | } |
3391 | 3390 | ||
3392 | void CalendarView::adaptNavigationUnits() | 3391 | void CalendarView::adaptNavigationUnits() |
3393 | { | 3392 | { |
3394 | if (mViewManager->currentView()->isEventView()) { | 3393 | if (mViewManager->currentView()->isEventView()) { |
3395 | int days = mViewManager->currentView()->currentDateCount(); | 3394 | int days = mViewManager->currentView()->currentDateCount(); |
3396 | if (days == 1) { | 3395 | if (days == 1) { |
3397 | emit changeNavStringPrev(i18n("&Previous Day")); | 3396 | emit changeNavStringPrev(i18n("&Previous Day")); |
3398 | emit changeNavStringNext(i18n("&Next Day")); | 3397 | emit changeNavStringNext(i18n("&Next Day")); |
3399 | } else { | 3398 | } else { |
3400 | emit changeNavStringPrev(i18n("&Previous Week")); | 3399 | emit changeNavStringPrev(i18n("&Previous Week")); |
3401 | emit changeNavStringNext(i18n("&Next Week")); | 3400 | emit changeNavStringNext(i18n("&Next Week")); |
3402 | } | 3401 | } |
3403 | } | 3402 | } |
3404 | } | 3403 | } |
3405 | 3404 | ||
3406 | void CalendarView::processMainViewSelection( Incidence *incidence ) | 3405 | void CalendarView::processMainViewSelection( Incidence *incidence ) |
3407 | { | 3406 | { |
3408 | if ( incidence ) mTodoList->clearSelection(); | 3407 | if ( incidence ) mTodoList->clearSelection(); |
3409 | processIncidenceSelection( incidence ); | 3408 | processIncidenceSelection( incidence ); |
3410 | } | 3409 | } |
3411 | 3410 | ||
3412 | void CalendarView::processTodoListSelection( Incidence *incidence ) | 3411 | void CalendarView::processTodoListSelection( Incidence *incidence ) |
3413 | { | 3412 | { |
3414 | if ( incidence && mViewManager->currentView() ) { | 3413 | if ( incidence && mViewManager->currentView() ) { |
3415 | mViewManager->currentView()->clearSelection(); | 3414 | mViewManager->currentView()->clearSelection(); |
3416 | } | 3415 | } |
3417 | processIncidenceSelection( incidence ); | 3416 | processIncidenceSelection( incidence ); |
3418 | } | 3417 | } |
3419 | 3418 | ||
3420 | void CalendarView::processIncidenceSelection( Incidence *incidence ) | 3419 | void CalendarView::processIncidenceSelection( Incidence *incidence ) |
3421 | { | 3420 | { |
3422 | if ( incidence == mSelectedIncidence ) return; | 3421 | if ( incidence == mSelectedIncidence ) return; |
3423 | 3422 | ||
3424 | mSelectedIncidence = incidence; | 3423 | mSelectedIncidence = incidence; |
3425 | 3424 | ||
3426 | emit incidenceSelected( mSelectedIncidence ); | 3425 | emit incidenceSelected( mSelectedIncidence ); |
3427 | 3426 | ||
3428 | if ( incidence && incidence->type() == "Event" ) { | 3427 | if ( incidence && incidence->type() == "Event" ) { |
3429 | Event *event = static_cast<Event *>( incidence ); | 3428 | Event *event = static_cast<Event *>( incidence ); |
3430 | if ( event->organizer() == KOPrefs::instance()->email() ) { | 3429 | if ( event->organizer() == KOPrefs::instance()->email() ) { |
3431 | emit organizerEventsSelected( true ); | 3430 | emit organizerEventsSelected( true ); |
3432 | } else { | 3431 | } else { |
3433 | emit organizerEventsSelected(false); | 3432 | emit organizerEventsSelected(false); |
3434 | } | 3433 | } |
3435 | if (event->attendeeByMails( KOPrefs::instance()->mAdditionalMails, | 3434 | if (event->attendeeByMails( KOPrefs::instance()->mAdditionalMails, |
3436 | KOPrefs::instance()->email() ) ) { | 3435 | KOPrefs::instance()->email() ) ) { |
3437 | emit groupEventsSelected( true ); | 3436 | emit groupEventsSelected( true ); |
3438 | } else { | 3437 | } else { |
3439 | emit groupEventsSelected(false); | 3438 | emit groupEventsSelected(false); |
3440 | } | 3439 | } |
3441 | return; | 3440 | return; |
3442 | } else { | 3441 | } else { |
3443 | if ( incidence && incidence->type() == "Todo" ) { | 3442 | if ( incidence && incidence->type() == "Todo" ) { |
3444 | emit todoSelected( true ); | 3443 | emit todoSelected( true ); |
3445 | Todo *event = static_cast<Todo *>( incidence ); | 3444 | Todo *event = static_cast<Todo *>( incidence ); |
3446 | if ( event->organizer() == KOPrefs::instance()->email() ) { | 3445 | if ( event->organizer() == KOPrefs::instance()->email() ) { |
3447 | emit organizerEventsSelected( true ); | 3446 | emit organizerEventsSelected( true ); |
3448 | } else { | 3447 | } else { |
3449 | emit organizerEventsSelected(false); | 3448 | emit organizerEventsSelected(false); |
3450 | } | 3449 | } |
3451 | if (event->attendeeByMails( KOPrefs::instance()->mAdditionalMails, | 3450 | if (event->attendeeByMails( KOPrefs::instance()->mAdditionalMails, |
3452 | KOPrefs::instance()->email() ) ) { | 3451 | KOPrefs::instance()->email() ) ) { |
3453 | emit groupEventsSelected( true ); | 3452 | emit groupEventsSelected( true ); |
3454 | } else { | 3453 | } else { |
3455 | emit groupEventsSelected(false); | 3454 | emit groupEventsSelected(false); |
3456 | } | 3455 | } |
3457 | return; | 3456 | return; |
3458 | } else { | 3457 | } else { |
3459 | emit todoSelected( false ); | 3458 | emit todoSelected( false ); |
3460 | emit organizerEventsSelected(false); | 3459 | emit organizerEventsSelected(false); |
3461 | emit groupEventsSelected(false); | 3460 | emit groupEventsSelected(false); |
3462 | } | 3461 | } |
3463 | return; | 3462 | return; |
3464 | } | 3463 | } |
3465 | 3464 | ||
3466 | /* if ( incidence && incidence->type() == "Todo" ) { | 3465 | /* if ( incidence && incidence->type() == "Todo" ) { |
3467 | emit todoSelected( true ); | 3466 | emit todoSelected( true ); |
3468 | } else { | 3467 | } else { |
3469 | emit todoSelected( false ); | 3468 | emit todoSelected( false ); |
3470 | }*/ | 3469 | }*/ |
3471 | } | 3470 | } |
3472 | 3471 | ||
3473 | 3472 | ||
3474 | void CalendarView::checkClipboard() | 3473 | void CalendarView::checkClipboard() |
3475 | { | 3474 | { |
3476 | #ifndef KORG_NODND | 3475 | #ifndef KORG_NODND |
3477 | if (ICalDrag::canDecode(QApplication::clipboard()->data())) { | 3476 | if (ICalDrag::canDecode(QApplication::clipboard()->data())) { |
3478 | emit pasteEnabled(true); | 3477 | emit pasteEnabled(true); |
3479 | } else { | 3478 | } else { |
3480 | emit pasteEnabled(false); | 3479 | emit pasteEnabled(false); |
3481 | } | 3480 | } |
3482 | #endif | 3481 | #endif |
3483 | } | 3482 | } |
3484 | 3483 | ||
3485 | void CalendarView::showDates(const DateList &selectedDates) | 3484 | void CalendarView::showDates(const DateList &selectedDates) |
3486 | { | 3485 | { |
3487 | // kdDebug() << "CalendarView::selectDates()" << endl; | 3486 | // kdDebug() << "CalendarView::selectDates()" << endl; |
3488 | 3487 | ||
3489 | 3488 | ||
3490 | if ( !mBlockShowDates ) { | 3489 | if ( !mBlockShowDates ) { |
3491 | if ( mViewManager->currentView() ) { | 3490 | if ( mViewManager->currentView() ) { |
3492 | updateView( selectedDates.first(), selectedDates.last() ); | 3491 | updateView( selectedDates.first(), selectedDates.last() ); |
3493 | } else { | 3492 | } else { |
3494 | mViewManager->showAgendaView(); | 3493 | mViewManager->showAgendaView(); |
3495 | } | 3494 | } |
3496 | } | 3495 | } |
3497 | 3496 | ||
3498 | QString selDates; | 3497 | QString selDates; |
3499 | selDates = KGlobal::locale()->formatDate( selectedDates.first(), true); | 3498 | selDates = KGlobal::locale()->formatDate( selectedDates.first(), true); |
3500 | if (selectedDates.first() < selectedDates.last() ) | 3499 | if (selectedDates.first() < selectedDates.last() ) |
3501 | selDates += " - " + KGlobal::locale()->formatDate( selectedDates.last(),true); | 3500 | selDates += " - " + KGlobal::locale()->formatDate( selectedDates.last(),true); |
3502 | else { | 3501 | else { |
3503 | QString addString; | 3502 | QString addString; |
3504 | if ( selectedDates.first() == QDateTime::currentDateTime().date() ) | 3503 | if ( selectedDates.first() == QDateTime::currentDateTime().date() ) |
3505 | addString = i18n("Today"); | 3504 | addString = i18n("Today"); |
3506 | else if ( selectedDates.first() == QDateTime::currentDateTime().date().addDays(1) ) | 3505 | else if ( selectedDates.first() == QDateTime::currentDateTime().date().addDays(1) ) |
3507 | addString = i18n("Tomorrow"); | 3506 | addString = i18n("Tomorrow"); |
3508 | else if ( selectedDates.first() == QDateTime::currentDateTime().date().addDays(-1) ) | 3507 | else if ( selectedDates.first() == QDateTime::currentDateTime().date().addDays(-1) ) |
3509 | addString = i18n("Yesterday"); | 3508 | addString = i18n("Yesterday"); |
3510 | else if ( selectedDates.first() == QDateTime::currentDateTime().date().addDays(-2) ) | 3509 | else if ( selectedDates.first() == QDateTime::currentDateTime().date().addDays(-2) ) |
3511 | addString = i18n("Day before yesterday"); | 3510 | addString = i18n("Day before yesterday"); |
3512 | else if ( selectedDates.first() == QDateTime::currentDateTime().date().addDays(2) ) | 3511 | else if ( selectedDates.first() == QDateTime::currentDateTime().date().addDays(2) ) |
3513 | addString = i18n("Day after tomorrow"); | 3512 | addString = i18n("Day after tomorrow"); |
3514 | if ( !addString.isEmpty() ) { | 3513 | if ( !addString.isEmpty() ) { |
3515 | topLevelWidget()->setCaption( addString+", " + selDates ); | 3514 | topLevelWidget()->setCaption( addString+", " + selDates ); |
3516 | return; | 3515 | return; |
3517 | } | 3516 | } |
3518 | } | 3517 | } |
3519 | topLevelWidget()->setCaption( i18n("Dates: ") + selDates ); | 3518 | topLevelWidget()->setCaption( i18n("Dates: ") + selDates ); |
3520 | 3519 | ||
3521 | } | 3520 | } |
3522 | 3521 | ||
3523 | QPtrList<CalFilter> CalendarView::filters() | 3522 | QPtrList<CalFilter> CalendarView::filters() |
3524 | { | 3523 | { |
3525 | return mFilters; | 3524 | return mFilters; |
3526 | 3525 | ||
3527 | } | 3526 | } |
3528 | void CalendarView::editFilters() | 3527 | void CalendarView::editFilters() |
3529 | { | 3528 | { |
3530 | // kdDebug() << "CalendarView::editFilters()" << endl; | 3529 | // kdDebug() << "CalendarView::editFilters()" << endl; |
3531 | 3530 | ||
3532 | CalFilter *filter = mFilters.first(); | 3531 | CalFilter *filter = mFilters.first(); |
3533 | while(filter) { | 3532 | while(filter) { |
3534 | kdDebug() << " Filter: " << filter->name() << endl; | 3533 | kdDebug() << " Filter: " << filter->name() << endl; |
3535 | filter = mFilters.next(); | 3534 | filter = mFilters.next(); |
3536 | } | 3535 | } |
3537 | 3536 | ||
3538 | mDialogManager->showFilterEditDialog(&mFilters); | 3537 | mDialogManager->showFilterEditDialog(&mFilters); |
3539 | } | 3538 | } |
3540 | void CalendarView::toggleFilter() | 3539 | void CalendarView::toggleFilter() |
3541 | { | 3540 | { |
3542 | showFilter(! mFilterView->isVisible()); | 3541 | showFilter(! mFilterView->isVisible()); |
3543 | } | 3542 | } |
3544 | 3543 | ||
3545 | KOFilterView *CalendarView::filterView() | 3544 | KOFilterView *CalendarView::filterView() |
3546 | { | 3545 | { |
3547 | return mFilterView; | 3546 | return mFilterView; |
3548 | } | 3547 | } |
3549 | void CalendarView::selectFilter( int fil ) | 3548 | void CalendarView::selectFilter( int fil ) |
3550 | { | 3549 | { |
3551 | mFilterView->setSelectedFilter( fil ); | 3550 | mFilterView->setSelectedFilter( fil ); |
3552 | } | 3551 | } |
3553 | void CalendarView::showFilter(bool visible) | 3552 | void CalendarView::showFilter(bool visible) |
3554 | { | 3553 | { |
3555 | if (visible) mFilterView->show(); | 3554 | if (visible) mFilterView->show(); |
3556 | else mFilterView->hide(); | 3555 | else mFilterView->hide(); |
3557 | } | 3556 | } |
3558 | void CalendarView::toggleFilerEnabled( ) | 3557 | void CalendarView::toggleFilerEnabled( ) |
3559 | { | 3558 | { |
3560 | mFilterView->setFiltersEnabled ( !mFilterView->filtersEnabled() ); | 3559 | mFilterView->setFiltersEnabled ( !mFilterView->filtersEnabled() ); |
3561 | if ( !mFilterView->filtersEnabled() ) | 3560 | if ( !mFilterView->filtersEnabled() ) |
3562 | topLevelWidget()->setCaption( i18n("Filter disabled ") ); | 3561 | topLevelWidget()->setCaption( i18n("Filter disabled ") ); |
3563 | 3562 | ||
3564 | } | 3563 | } |
3565 | void CalendarView::updateFilter() | 3564 | void CalendarView::updateFilter() |
3566 | { | 3565 | { |
3567 | CalFilter *filter = mFilterView->selectedFilter(); | 3566 | CalFilter *filter = mFilterView->selectedFilter(); |
3568 | if (filter) { | 3567 | if (filter) { |
3569 | if (mFilterView->filtersEnabled()) { | 3568 | if (mFilterView->filtersEnabled()) { |
3570 | topLevelWidget()->setCaption( i18n("Filter selected: ")+filter->name() ); | 3569 | topLevelWidget()->setCaption( i18n("Filter selected: ")+filter->name() ); |
3571 | filter->setEnabled(true); | 3570 | filter->setEnabled(true); |
3572 | } | 3571 | } |
3573 | else filter->setEnabled(false); | 3572 | else filter->setEnabled(false); |
3574 | mCalendar->setFilter(filter); | 3573 | mCalendar->setFilter(filter); |
3575 | updateView(); | 3574 | updateView(); |
3576 | } | 3575 | } |
3577 | } | 3576 | } |
3578 | 3577 | ||
3579 | void CalendarView::filterEdited() | 3578 | void CalendarView::filterEdited() |
3580 | { | 3579 | { |
3581 | mFilterView->updateFilters(); | 3580 | mFilterView->updateFilters(); |
3582 | updateFilter(); | 3581 | updateFilter(); |
3583 | writeSettings(); | 3582 | writeSettings(); |
3584 | } | 3583 | } |
3585 | 3584 | ||
3586 | 3585 | ||
3587 | void CalendarView::takeOverEvent() | 3586 | void CalendarView::takeOverEvent() |
3588 | { | 3587 | { |
3589 | Incidence *incidence = currentSelection(); | 3588 | Incidence *incidence = currentSelection(); |
3590 | 3589 | ||
3591 | if (!incidence) return; | 3590 | if (!incidence) return; |
3592 | 3591 | ||
3593 | incidence->setOrganizer(KOPrefs::instance()->email()); | 3592 | incidence->setOrganizer(KOPrefs::instance()->email()); |
3594 | incidence->recreate(); | 3593 | incidence->recreate(); |
3595 | incidence->setReadOnly(false); | 3594 | incidence->setReadOnly(false); |
3596 | 3595 | ||
3597 | updateView(); | 3596 | updateView(); |
3598 | } | 3597 | } |
3599 | 3598 | ||
3600 | void CalendarView::takeOverCalendar() | 3599 | void CalendarView::takeOverCalendar() |
3601 | { | 3600 | { |
3602 | // TODO: Create Calendar::allIncidences() function and use it here | 3601 | // TODO: Create Calendar::allIncidences() function and use it here |
3603 | 3602 | ||
3604 | QPtrList<Event> events = mCalendar->events(); | 3603 | QPtrList<Event> events = mCalendar->events(); |
3605 | for(uint i=0; i<events.count(); ++i) { | 3604 | for(uint i=0; i<events.count(); ++i) { |
3606 | events.at(i)->setOrganizer(KOPrefs::instance()->email()); | 3605 | events.at(i)->setOrganizer(KOPrefs::instance()->email()); |
3607 | events.at(i)->recreate(); | 3606 | events.at(i)->recreate(); |
3608 | events.at(i)->setReadOnly(false); | 3607 | events.at(i)->setReadOnly(false); |
3609 | } | 3608 | } |
3610 | 3609 | ||
3611 | QPtrList<Todo> todos = mCalendar->todos(); | 3610 | QPtrList<Todo> todos = mCalendar->todos(); |
3612 | for(uint i=0; i<todos.count(); ++i) { | 3611 | for(uint i=0; i<todos.count(); ++i) { |
3613 | todos.at(i)->setOrganizer(KOPrefs::instance()->email()); | 3612 | todos.at(i)->setOrganizer(KOPrefs::instance()->email()); |
3614 | todos.at(i)->recreate(); | 3613 | todos.at(i)->recreate(); |
3615 | todos.at(i)->setReadOnly(false); | 3614 | todos.at(i)->setReadOnly(false); |
3616 | } | 3615 | } |
3617 | 3616 | ||
3618 | QPtrList<Journal> journals = mCalendar->journals(); | 3617 | QPtrList<Journal> journals = mCalendar->journals(); |
3619 | for(uint i=0; i<journals.count(); ++i) { | 3618 | for(uint i=0; i<journals.count(); ++i) { |
3620 | journals.at(i)->setOrganizer(KOPrefs::instance()->email()); | 3619 | journals.at(i)->setOrganizer(KOPrefs::instance()->email()); |
3621 | journals.at(i)->recreate(); | 3620 | journals.at(i)->recreate(); |
3622 | journals.at(i)->setReadOnly(false); | 3621 | journals.at(i)->setReadOnly(false); |
3623 | } | 3622 | } |
3624 | 3623 | ||
3625 | updateView(); | 3624 | updateView(); |
3626 | } | 3625 | } |
3627 | 3626 | ||
3628 | void CalendarView::showIntro() | 3627 | void CalendarView::showIntro() |
3629 | { | 3628 | { |
3630 | kdDebug() << "To be implemented." << endl; | 3629 | kdDebug() << "To be implemented." << endl; |
3631 | } | 3630 | } |
3632 | 3631 | ||
3633 | QWidgetStack *CalendarView::viewStack() | 3632 | QWidgetStack *CalendarView::viewStack() |
3634 | { | 3633 | { |
3635 | return mRightFrame; | 3634 | return mRightFrame; |
3636 | } | 3635 | } |
3637 | 3636 | ||
3638 | QWidget *CalendarView::leftFrame() | 3637 | QWidget *CalendarView::leftFrame() |
3639 | { | 3638 | { |
3640 | return mLeftFrame; | 3639 | return mLeftFrame; |
3641 | } | 3640 | } |
3642 | 3641 | ||
3643 | DateNavigator *CalendarView::dateNavigator() | 3642 | DateNavigator *CalendarView::dateNavigator() |
3644 | { | 3643 | { |
3645 | return mNavigator; | 3644 | return mNavigator; |
3646 | } | 3645 | } |
3647 | 3646 | ||
3648 | KDateNavigator* CalendarView::dateNavigatorWidget() | 3647 | KDateNavigator* CalendarView::dateNavigatorWidget() |
3649 | { | 3648 | { |
3650 | return mDateNavigator; | 3649 | return mDateNavigator; |
3651 | } | 3650 | } |
3652 | void CalendarView::toggleDateNavigatorWidget() | 3651 | void CalendarView::toggleDateNavigatorWidget() |
3653 | { | 3652 | { |
3654 | KOPrefs::instance()->mShowDateNavigator = !KOPrefs::instance()->mShowDateNavigator ; | 3653 | KOPrefs::instance()->mShowDateNavigator = !KOPrefs::instance()->mShowDateNavigator ; |
3655 | if (!KOPrefs::instance()->mShowDateNavigator ) | 3654 | if (!KOPrefs::instance()->mShowDateNavigator ) |
3656 | mDateNavigator->hide(); | 3655 | mDateNavigator->hide(); |
3657 | else | 3656 | else |
3658 | mDateNavigator->show(); | 3657 | mDateNavigator->show(); |
3659 | } | 3658 | } |
3660 | void CalendarView::addView(KOrg::BaseView *view) | 3659 | void CalendarView::addView(KOrg::BaseView *view) |
3661 | { | 3660 | { |
3662 | mViewManager->addView(view); | 3661 | mViewManager->addView(view); |
3663 | } | 3662 | } |
3664 | 3663 | ||
3665 | void CalendarView::showView(KOrg::BaseView *view) | 3664 | void CalendarView::showView(KOrg::BaseView *view) |
3666 | { | 3665 | { |
3667 | mViewManager->showView(view, mLeftFrame->isVisible()); | 3666 | mViewManager->showView(view, mLeftFrame->isVisible()); |
3668 | } | 3667 | } |
3669 | 3668 | ||
3670 | Incidence *CalendarView::currentSelection() | 3669 | Incidence *CalendarView::currentSelection() |
3671 | { | 3670 | { |
3672 | return mViewManager->currentSelection(); | 3671 | return mViewManager->currentSelection(); |
3673 | } | 3672 | } |
3674 | void CalendarView::toggleAllDaySize() | 3673 | void CalendarView::toggleAllDaySize() |
3675 | { | 3674 | { |
3676 | /* | 3675 | /* |
3677 | if ( KOPrefs::instance()->mAllDaySize > 47 ) | 3676 | if ( KOPrefs::instance()->mAllDaySize > 47 ) |
3678 | KOPrefs::instance()->mAllDaySize = KOPrefs::instance()->mAllDaySize /2; | 3677 | KOPrefs::instance()->mAllDaySize = KOPrefs::instance()->mAllDaySize /2; |
3679 | else | 3678 | else |
3680 | KOPrefs::instance()->mAllDaySize = KOPrefs::instance()->mAllDaySize *2; | 3679 | KOPrefs::instance()->mAllDaySize = KOPrefs::instance()->mAllDaySize *2; |
3681 | */ | 3680 | */ |
3682 | viewManager()->agendaView()->toggleAllDay(); | 3681 | viewManager()->agendaView()->toggleAllDay(); |
3683 | } | 3682 | } |
3684 | void CalendarView::toggleExpand() | 3683 | void CalendarView::toggleExpand() |
3685 | { | 3684 | { |
3686 | // if ( mLeftFrame->isHidden() ) { | 3685 | // if ( mLeftFrame->isHidden() ) { |
3687 | // mLeftFrame->show(); | 3686 | // mLeftFrame->show(); |
3688 | // emit calendarViewExpanded( false ); | 3687 | // emit calendarViewExpanded( false ); |
3689 | // } else { | 3688 | // } else { |
3690 | // mLeftFrame->hide(); | 3689 | // mLeftFrame->hide(); |
3691 | // emit calendarViewExpanded( true ); | 3690 | // emit calendarViewExpanded( true ); |
3692 | // } | 3691 | // } |
3693 | 3692 | ||
3694 | globalFlagBlockAgenda = 1; | 3693 | globalFlagBlockAgenda = 1; |
3695 | emit calendarViewExpanded( !mLeftFrame->isHidden() ); | 3694 | emit calendarViewExpanded( !mLeftFrame->isHidden() ); |
3696 | globalFlagBlockAgenda = 5; | 3695 | globalFlagBlockAgenda = 5; |
3697 | mViewManager->raiseCurrentView( !mLeftFrame->isHidden() ); | 3696 | mViewManager->raiseCurrentView( !mLeftFrame->isHidden() ); |
3698 | //mViewManager->showView( 0, true ); | 3697 | //mViewManager->showView( 0, true ); |
3699 | } | 3698 | } |
3700 | 3699 | ||
3701 | void CalendarView::calendarModified( bool modified, Calendar * ) | 3700 | void CalendarView::calendarModified( bool modified, Calendar * ) |
3702 | { | 3701 | { |
3703 | setModified( modified ); | 3702 | setModified( modified ); |
3704 | } | 3703 | } |
3705 | 3704 | ||
3706 | Todo *CalendarView::selectedTodo() | 3705 | Todo *CalendarView::selectedTodo() |
3707 | { | 3706 | { |
3708 | Incidence *incidence = currentSelection(); | 3707 | Incidence *incidence = currentSelection(); |
3709 | if ( incidence && incidence->type() == "Todo" ) { | 3708 | if ( incidence && incidence->type() == "Todo" ) { |
3710 | return static_cast<Todo *>( incidence ); | 3709 | return static_cast<Todo *>( incidence ); |
3711 | } | 3710 | } |
3712 | 3711 | ||
3713 | incidence = mTodoList->selectedIncidences().first(); | 3712 | incidence = mTodoList->selectedIncidences().first(); |
3714 | if ( incidence && incidence->type() == "Todo" ) { | 3713 | if ( incidence && incidence->type() == "Todo" ) { |
3715 | return static_cast<Todo *>( incidence ); | 3714 | return static_cast<Todo *>( incidence ); |
3716 | } | 3715 | } |
diff --git a/korganizer/koagenda.cpp b/korganizer/koagenda.cpp index 73ee5cb..0eeacb3 100644 --- a/korganizer/koagenda.cpp +++ b/korganizer/koagenda.cpp | |||
@@ -1,1595 +1,1600 @@ | |||
1 | /* | 1 | /* |
2 | This file is part of KOrganizer. | 2 | This file is part of KOrganizer. |
3 | Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> | 3 | Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> |
4 | 4 | ||
5 | Marcus Bains line. | 5 | Marcus Bains line. |
6 | Copyright (c) 2001 Ali Rahimi | 6 | Copyright (c) 2001 Ali Rahimi |
7 | 7 | ||
8 | This program is free software; you can redistribute it and/or modify | 8 | This program is free software; you can redistribute it and/or modify |
9 | it under the terms of the GNU General Public License as published by | 9 | it under the terms of the GNU General Public License as published by |
10 | the Free Software Foundation; either version 2 of the License, or | 10 | the Free Software Foundation; either version 2 of the License, or |
11 | (at your option) any later version. | 11 | (at your option) any later version. |
12 | 12 | ||
13 | This program is distributed in the hope that it will be useful, | 13 | This program is distributed in the hope that it will be useful, |
14 | but WITHOUT ANY WARRANTY; without even the implied warranty of | 14 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
15 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 15 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
16 | GNU General Public License for more details. | 16 | GNU General Public License for more details. |
17 | 17 | ||
18 | You should have received a copy of the GNU General Public License | 18 | You should have received a copy of the GNU General Public License |
19 | along with this program; if not, write to the Free Software | 19 | along with this program; if not, write to the Free Software |
20 | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | 20 | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
21 | 21 | ||
22 | As a special exception, permission is given to link this program | 22 | As a special exception, permission is given to link this program |
23 | with any edition of Qt, and distribute the resulting executable, | 23 | with any edition of Qt, and distribute the resulting executable, |
24 | without including the source code for Qt in the source distribution. | 24 | without including the source code for Qt in the source distribution. |
25 | */ | 25 | */ |
26 | 26 | ||
27 | #ifndef _WIN32_ | 27 | #ifndef _WIN32_ |
28 | #define protected public | 28 | #define protected public |
29 | #include <qwidget.h> | 29 | #include <qwidget.h> |
30 | #undef protected | 30 | #undef protected |
31 | #endif | 31 | #endif |
32 | #include <qintdict.h> | 32 | #include <qintdict.h> |
33 | #include <qdatetime.h> | 33 | #include <qdatetime.h> |
34 | #include <qapplication.h> | 34 | #include <qapplication.h> |
35 | #include <qpopupmenu.h> | 35 | #include <qpopupmenu.h> |
36 | #include <qcursor.h> | 36 | #include <qcursor.h> |
37 | #include <qpainter.h> | 37 | #include <qpainter.h> |
38 | 38 | ||
39 | #include <kdebug.h> | 39 | #include <kdebug.h> |
40 | #include <klocale.h> | 40 | #include <klocale.h> |
41 | #include <kiconloader.h> | 41 | #include <kiconloader.h> |
42 | #include <kglobal.h> | 42 | #include <kglobal.h> |
43 | 43 | ||
44 | #include "koagendaitem.h" | 44 | #include "koagendaitem.h" |
45 | #include "koprefs.h" | 45 | #include "koprefs.h" |
46 | #include "koglobals.h" | 46 | #include "koglobals.h" |
47 | 47 | ||
48 | #include "koagenda.h" | 48 | #include "koagenda.h" |
49 | 49 | ||
50 | #include <libkcal/event.h> | 50 | #include <libkcal/event.h> |
51 | #include <libkcal/todo.h> | 51 | #include <libkcal/todo.h> |
52 | 52 | ||
53 | #ifndef DESKTOP_VERSION | 53 | #ifndef DESKTOP_VERSION |
54 | #include <qpe/qpeapplication.h> | 54 | #include <qpe/qpeapplication.h> |
55 | #endif | 55 | #endif |
56 | 56 | ||
57 | //extern bool globalFlagBlockPainting; | 57 | //extern bool globalFlagBlockPainting; |
58 | extern int globalFlagBlockAgenda; | 58 | extern int globalFlagBlockAgenda; |
59 | extern int globalFlagBlockAgendaItemPaint; | 59 | extern int globalFlagBlockAgendaItemPaint; |
60 | extern int globalFlagBlockAgendaItemUpdate; | 60 | extern int globalFlagBlockAgendaItemUpdate; |
61 | extern int globalFlagBlockStartup; | 61 | extern int globalFlagBlockStartup; |
62 | 62 | ||
63 | //////////////////////////////////////////////////////////////////////////// | 63 | //////////////////////////////////////////////////////////////////////////// |
64 | MarcusBains::MarcusBains(KOAgenda *_agenda,const char *name) | 64 | MarcusBains::MarcusBains(KOAgenda *_agenda,const char *name) |
65 | : QFrame(_agenda->viewport(),name), agenda(_agenda) | 65 | : QFrame(_agenda->viewport(),name), agenda(_agenda) |
66 | { | 66 | { |
67 | setLineWidth(0); | 67 | setLineWidth(0); |
68 | setMargin(0); | 68 | setMargin(0); |
69 | setBackgroundColor(Qt::red); | 69 | setBackgroundColor(Qt::red); |
70 | minutes = new QTimer(this); | 70 | minutes = new QTimer(this); |
71 | connect(minutes, SIGNAL(timeout()), this, SLOT(updateLoc())); | 71 | connect(minutes, SIGNAL(timeout()), this, SLOT(updateLoc())); |
72 | minutes->start(0, true); | 72 | minutes->start(0, true); |
73 | 73 | ||
74 | mTimeBox = new QLabel(this); | 74 | mTimeBox = new QLabel(this); |
75 | mTimeBox->setAlignment(Qt::AlignRight | Qt::AlignBottom); | 75 | mTimeBox->setAlignment(Qt::AlignRight | Qt::AlignBottom); |
76 | QPalette pal = mTimeBox->palette(); | 76 | QPalette pal = mTimeBox->palette(); |
77 | pal.setColor(QColorGroup::Foreground, Qt::red); | 77 | pal.setColor(QColorGroup::Foreground, Qt::red); |
78 | mTimeBox->setPalette(pal); | 78 | mTimeBox->setPalette(pal); |
79 | //mTimeBox->setAutoMask(true); | 79 | //mTimeBox->setAutoMask(true); |
80 | 80 | ||
81 | agenda->addChild(mTimeBox); | 81 | agenda->addChild(mTimeBox); |
82 | 82 | ||
83 | oldToday = -1; | 83 | oldToday = -1; |
84 | } | 84 | } |
85 | 85 | ||
86 | MarcusBains::~MarcusBains() | 86 | MarcusBains::~MarcusBains() |
87 | { | 87 | { |
88 | delete minutes; | 88 | delete minutes; |
89 | } | 89 | } |
90 | 90 | ||
91 | int MarcusBains::todayColumn() | 91 | int MarcusBains::todayColumn() |
92 | { | 92 | { |
93 | QDate currentDate = QDate::currentDate(); | 93 | QDate currentDate = QDate::currentDate(); |
94 | 94 | ||
95 | DateList dateList = agenda->dateList(); | 95 | DateList dateList = agenda->dateList(); |
96 | DateList::ConstIterator it; | 96 | DateList::ConstIterator it; |
97 | int col = 0; | 97 | int col = 0; |
98 | for(it = dateList.begin(); it != dateList.end(); ++it) { | 98 | for(it = dateList.begin(); it != dateList.end(); ++it) { |
99 | if((*it) == currentDate) | 99 | if((*it) == currentDate) |
100 | return KOGlobals::self()->reverseLayout() ? | 100 | return KOGlobals::self()->reverseLayout() ? |
101 | agenda->columns() - 1 - col : col; | 101 | agenda->columns() - 1 - col : col; |
102 | ++col; | 102 | ++col; |
103 | } | 103 | } |
104 | 104 | ||
105 | return -1; | 105 | return -1; |
106 | } | 106 | } |
107 | void MarcusBains::updateLoc() | 107 | void MarcusBains::updateLoc() |
108 | { | 108 | { |
109 | updateLocation(); | 109 | updateLocation(); |
110 | } | 110 | } |
111 | void MarcusBains::updateLocation(bool recalculate) | 111 | void MarcusBains::updateLocation(bool recalculate) |
112 | { | 112 | { |
113 | 113 | ||
114 | QTime tim = QTime::currentTime(); | 114 | QTime tim = QTime::currentTime(); |
115 | //qDebug(" MarcusBains::updateLocation %s ", tim.toString().latin1()); | 115 | //qDebug(" MarcusBains::updateLocation %s ", tim.toString().latin1()); |
116 | if((tim.hour() == 0) && (oldTime.hour()==23)) | 116 | if((tim.hour() == 0) && (oldTime.hour()==23)) |
117 | recalculate = true; | 117 | recalculate = true; |
118 | 118 | ||
119 | int mins = tim.hour()*60 + tim.minute(); | 119 | int mins = tim.hour()*60 + tim.minute(); |
120 | int minutesPerCell = 24 * 60 / agenda->rows(); | 120 | int minutesPerCell = 24 * 60 / agenda->rows(); |
121 | int y = mins*agenda->gridSpacingY()/minutesPerCell; | 121 | int y = mins*agenda->gridSpacingY()/minutesPerCell; |
122 | int today = recalculate ? todayColumn() : oldToday; | 122 | int today = recalculate ? todayColumn() : oldToday; |
123 | int x = agenda->gridSpacingX()*today; | 123 | int x = agenda->gridSpacingX()*today; |
124 | bool disabled = !(KOPrefs::instance()->mMarcusBainsEnabled); | 124 | bool disabled = !(KOPrefs::instance()->mMarcusBainsEnabled); |
125 | 125 | ||
126 | oldTime = tim; | 126 | oldTime = tim; |
127 | oldToday = today; | 127 | oldToday = today; |
128 | 128 | ||
129 | if(disabled || (today<0)) { | 129 | if(disabled || (today<0)) { |
130 | hide(); mTimeBox->hide(); | 130 | hide(); mTimeBox->hide(); |
131 | return; | 131 | return; |
132 | } else { | 132 | } else { |
133 | show(); mTimeBox->show(); | 133 | show(); mTimeBox->show(); |
134 | } | 134 | } |
135 | 135 | ||
136 | if(recalculate) | 136 | if(recalculate) |
137 | setFixedSize(agenda->gridSpacingX(),1); | 137 | setFixedSize(agenda->gridSpacingX(),1); |
138 | agenda->moveChild(this, x, y); | 138 | agenda->moveChild(this, x, y); |
139 | raise(); | 139 | raise(); |
140 | 140 | ||
141 | if(recalculate) | 141 | if(recalculate) |
142 | //mTimeBox->setFont(QFont("helvetica",10)); | 142 | //mTimeBox->setFont(QFont("helvetica",10)); |
143 | mTimeBox->setFont(KOPrefs::instance()->mMarcusBainsFont); | 143 | mTimeBox->setFont(KOPrefs::instance()->mMarcusBainsFont); |
144 | 144 | ||
145 | mTimeBox->setText(KGlobal::locale()->formatTime(tim, KOPrefs::instance()->mMarcusBainsShowSeconds)); | 145 | mTimeBox->setText(KGlobal::locale()->formatTime(tim, KOPrefs::instance()->mMarcusBainsShowSeconds)); |
146 | mTimeBox->adjustSize(); | 146 | mTimeBox->adjustSize(); |
147 | // the -2 below is there because there is a bug in this program | 147 | // the -2 below is there because there is a bug in this program |
148 | // somewhere, where the last column of this widget is a few pixels | 148 | // somewhere, where the last column of this widget is a few pixels |
149 | // narrower than the other columns. | 149 | // narrower than the other columns. |
150 | int offs = (today==agenda->columns()-1) ? -4 : 0; | 150 | int offs = (today==agenda->columns()-1) ? -4 : 0; |
151 | agenda->moveChild(mTimeBox, | 151 | agenda->moveChild(mTimeBox, |
152 | x+agenda->gridSpacingX()-mTimeBox->width()+offs-1, | 152 | x+agenda->gridSpacingX()-mTimeBox->width()+offs-1, |
153 | y-mTimeBox->height()); | 153 | y-mTimeBox->height()); |
154 | 154 | ||
155 | mTimeBox->raise(); | 155 | mTimeBox->raise(); |
156 | //mTimeBox->setAutoMask(true); | 156 | //mTimeBox->setAutoMask(true); |
157 | minutes->start(5000,true); | 157 | minutes->start(5000,true); |
158 | } | 158 | } |
159 | 159 | ||
160 | 160 | ||
161 | //////////////////////////////////////////////////////////////////////////// | 161 | //////////////////////////////////////////////////////////////////////////// |
162 | 162 | ||
163 | 163 | ||
164 | /* | 164 | /* |
165 | Create an agenda widget with rows rows and columns columns. | 165 | Create an agenda widget with rows rows and columns columns. |
166 | */ | 166 | */ |
167 | KOAgenda::KOAgenda(int columns,int rows,int rowSize,QWidget *parent, | 167 | KOAgenda::KOAgenda(int columns,int rows,int rowSize,QWidget *parent, |
168 | const char *name,WFlags f) : | 168 | const char *name,WFlags f) : |
169 | QScrollView(parent,name,f) | 169 | QScrollView(parent,name,f) |
170 | { | 170 | { |
171 | mNewItemPopup = new QPopupMenu( this ); | 171 | |
172 | connect ( mNewItemPopup, SIGNAL (activated ( int ) ), this, SLOT ( newItem(int)) ); | ||
173 | QString pathString = ""; | ||
174 | if ( !KOPrefs::instance()->mToolBarMiniIcons ) { | ||
175 | if ( QApplication::desktop()->width() < 480 ) | ||
176 | pathString += "icons16/"; | ||
177 | } else | ||
178 | pathString += "iconsmini/"; | ||
179 | |||
180 | mNewItemPopup->insertItem ( SmallIcon( pathString +"newevent" ), i18n("New Event..."), 1 ); | ||
181 | mNewItemPopup->insertItem ( SmallIcon( pathString +"newtodo" ), i18n("New Todo..."),2 ); | ||
182 | 172 | ||
183 | mColumns = columns; | 173 | mColumns = columns; |
184 | mRows = rows; | 174 | mRows = rows; |
185 | mGridSpacingY = rowSize; | 175 | mGridSpacingY = rowSize; |
186 | mAllDayMode = false; | 176 | mAllDayMode = false; |
187 | #ifndef DESKTOP_VERSION | 177 | #ifndef DESKTOP_VERSION |
188 | QPEApplication::setStylusOperation( viewport(), QPEApplication::RightOnHold ); | 178 | QPEApplication::setStylusOperation( viewport(), QPEApplication::RightOnHold ); |
189 | #endif | 179 | #endif |
190 | mHolidayMask = 0; | 180 | mHolidayMask = 0; |
191 | init(); | 181 | init(); |
192 | } | 182 | } |
193 | 183 | ||
194 | /* | 184 | /* |
195 | Create an agenda widget with columns columns and one row. This is used for | 185 | Create an agenda widget with columns columns and one row. This is used for |
196 | all-day events. | 186 | all-day events. |
197 | */ | 187 | */ |
198 | KOAgenda::KOAgenda(int columns,QWidget *parent,const char *name,WFlags f) : | 188 | KOAgenda::KOAgenda(int columns,QWidget *parent,const char *name,WFlags f) : |
199 | QScrollView(parent,name,f) | 189 | QScrollView(parent,name,f) |
200 | { | 190 | { |
201 | mNewItemPopup = new QPopupMenu( this ); | ||
202 | connect ( mNewItemPopup, SIGNAL (activated ( int ) ), this, SLOT ( newItem(int)) ); | ||
203 | QString pathString = ""; | ||
204 | if ( !KOPrefs::instance()->mToolBarMiniIcons ) { | ||
205 | if ( QApplication::desktop()->width() < 480 ) | ||
206 | pathString += "icons16/"; | ||
207 | } else | ||
208 | pathString += "iconsmini/"; | ||
209 | mNewItemPopup->insertItem ( SmallIcon( pathString +"newevent" ), i18n("New Event..."),1 ); | ||
210 | mNewItemPopup->insertItem ( SmallIcon( pathString +"newtodo" ), i18n("New Todo..."),2 ); | ||
211 | blockResize = false; | 191 | blockResize = false; |
212 | mColumns = columns; | 192 | mColumns = columns; |
213 | mRows = 1; | 193 | mRows = 1; |
214 | //qDebug("aaaaaaaaaaaaaaaaaaldays %d ", KOPrefs::instance()->mAllDaySize); | 194 | //qDebug("aaaaaaaaaaaaaaaaaaldays %d ", KOPrefs::instance()->mAllDaySize); |
215 | mGridSpacingY = KOPrefs::instance()->mAllDaySize; | 195 | mGridSpacingY = KOPrefs::instance()->mAllDaySize; |
216 | mAllDayMode = true; | 196 | mAllDayMode = true; |
217 | #ifndef DESKTOP_VERSION | 197 | #ifndef DESKTOP_VERSION |
218 | QPEApplication::setStylusOperation( viewport(), QPEApplication::RightOnHold ); | 198 | QPEApplication::setStylusOperation( viewport(), QPEApplication::RightOnHold ); |
219 | #endif | 199 | #endif |
220 | mHolidayMask = 0; | 200 | mHolidayMask = 0; |
221 | init(); | 201 | init(); |
222 | } | 202 | } |
223 | 203 | ||
224 | 204 | ||
225 | KOAgenda::~KOAgenda() | 205 | KOAgenda::~KOAgenda() |
226 | { | 206 | { |
227 | if(mMarcusBains) delete mMarcusBains; | 207 | if(mMarcusBains) delete mMarcusBains; |
228 | 208 | ||
229 | } | 209 | } |
230 | 210 | ||
231 | Incidence *KOAgenda::selectedIncidence() const | 211 | Incidence *KOAgenda::selectedIncidence() const |
232 | { | 212 | { |
233 | return (mSelectedItem ? mSelectedItem->incidence() : 0); | 213 | return (mSelectedItem ? mSelectedItem->incidence() : 0); |
234 | } | 214 | } |
235 | 215 | ||
236 | 216 | ||
237 | QDate KOAgenda::selectedIncidenceDate() const | 217 | QDate KOAgenda::selectedIncidenceDate() const |
238 | { | 218 | { |
239 | return (mSelectedItem ? mSelectedItem->itemDate() : QDate()); | 219 | return (mSelectedItem ? mSelectedItem->itemDate() : QDate()); |
240 | } | 220 | } |
241 | 221 | ||
242 | 222 | ||
243 | void KOAgenda::init() | 223 | void KOAgenda::init() |
244 | { | 224 | { |
225 | mNewItemPopup = new QPopupMenu( this ); | ||
226 | connect ( mNewItemPopup, SIGNAL (activated ( int ) ), this, SLOT ( newItem(int)) ); | ||
227 | QString pathString = ""; | ||
228 | if ( !KOPrefs::instance()->mToolBarMiniIcons ) { | ||
229 | if ( QApplication::desktop()->width() < 480 ) | ||
230 | pathString += "icons16/"; | ||
231 | } else | ||
232 | pathString += "iconsmini/"; | ||
233 | |||
234 | mNewItemPopup->insertItem ( SmallIcon( pathString +"newevent" ), i18n("New Event..."), 1 ); | ||
235 | mNewItemPopup->insertItem ( SmallIcon( pathString +"newtodo" ), i18n("New Todo..."),2 ); | ||
236 | mNewItemPopup->insertSeparator ( ); | ||
237 | mNewItemPopup->insertItem ( SmallIcon( pathString +"day" ), i18n("Day view"),3 ); | ||
238 | mNewItemPopup->insertItem ( SmallIcon( pathString +"xdays" ), i18n("Next days"),8 ); | ||
239 | mNewItemPopup->insertItem ( SmallIcon( pathString +"week" ), i18n("Next week"),4 ); | ||
240 | mNewItemPopup->insertItem ( SmallIcon( pathString +"week" ), i18n("Next two weeks"),5 ); | ||
241 | mNewItemPopup->insertItem ( SmallIcon( pathString +"month" ), i18n("Next month"),6 ); | ||
242 | mNewItemPopup->insertItem ( SmallIcon( pathString +"journal" ), i18n("Journal view"),7 ); | ||
245 | #ifndef _WIN32_ | 243 | #ifndef _WIN32_ |
246 | int wflags = viewport()-> getWFlags() |WRepaintNoErase;//WResizeNoErase | 244 | int wflags = viewport()-> getWFlags() |WRepaintNoErase;//WResizeNoErase |
247 | viewport()->setWFlags ( wflags); | 245 | viewport()->setWFlags ( wflags); |
248 | #endif | 246 | #endif |
249 | mGridSpacingX = 80; | 247 | mGridSpacingX = 80; |
250 | mResizeBorderWidth = 8; | 248 | mResizeBorderWidth = 8; |
251 | mScrollBorderWidth = 8; | 249 | mScrollBorderWidth = 8; |
252 | mScrollDelay = 30; | 250 | mScrollDelay = 30; |
253 | mScrollOffset = 10; | 251 | mScrollOffset = 10; |
254 | mPaintPixmap.resize( 20,20); | 252 | mPaintPixmap.resize( 20,20); |
255 | //enableClipper(true); | 253 | //enableClipper(true); |
256 | 254 | ||
257 | // Grab key strokes for keyboard navigation of agenda. Seems to have no | 255 | // Grab key strokes for keyboard navigation of agenda. Seems to have no |
258 | // effect. Has to be fixed. | 256 | // effect. Has to be fixed. |
259 | setFocusPolicy(WheelFocus); | 257 | setFocusPolicy(WheelFocus); |
260 | 258 | ||
261 | connect(&mScrollUpTimer,SIGNAL(timeout()),SLOT(scrollUp())); | 259 | connect(&mScrollUpTimer,SIGNAL(timeout()),SLOT(scrollUp())); |
262 | connect(&mScrollDownTimer,SIGNAL(timeout()),SLOT(scrollDown())); | 260 | connect(&mScrollDownTimer,SIGNAL(timeout()),SLOT(scrollDown())); |
263 | connect(&mResizeTimer,SIGNAL(timeout()),SLOT(finishResize())); | 261 | connect(&mResizeTimer,SIGNAL(timeout()),SLOT(finishResize())); |
264 | 262 | ||
265 | mStartCellX = 0; | 263 | mStartCellX = 0; |
266 | mStartCellY = 0; | 264 | mStartCellY = 0; |
267 | mCurrentCellX = 0; | 265 | mCurrentCellX = 0; |
268 | mCurrentCellY = 0; | 266 | mCurrentCellY = 0; |
269 | 267 | ||
270 | mSelectionCellX = 0; | 268 | mSelectionCellX = 0; |
271 | mSelectionYTop = 0; | 269 | mSelectionYTop = 0; |
272 | mSelectionHeight = 0; | 270 | mSelectionHeight = 0; |
273 | 271 | ||
274 | mOldLowerScrollValue = -1; | 272 | mOldLowerScrollValue = -1; |
275 | mOldUpperScrollValue = -1; | 273 | mOldUpperScrollValue = -1; |
276 | 274 | ||
277 | mClickedItem = 0; | 275 | mClickedItem = 0; |
278 | 276 | ||
279 | mActionItem = 0; | 277 | mActionItem = 0; |
280 | mActionType = NOP; | 278 | mActionType = NOP; |
281 | mItemMoved = false; | 279 | mItemMoved = false; |
282 | 280 | ||
283 | mSelectedItem = 0; | 281 | mSelectedItem = 0; |
284 | 282 | ||
285 | // mItems.setAutoDelete(true); | 283 | // mItems.setAutoDelete(true); |
286 | 284 | ||
287 | resizeContents( mGridSpacingX * mColumns + 1 , mGridSpacingY * mRows + 1 ); | 285 | resizeContents( mGridSpacingX * mColumns + 1 , mGridSpacingY * mRows + 1 ); |
288 | 286 | ||
289 | viewport()->update(); | 287 | viewport()->update(); |
290 | 288 | ||
291 | setMinimumSize(30, 1); | 289 | setMinimumSize(30, 1); |
292 | // setMaximumHeight(mGridSpacingY * mRows + 5); | 290 | // setMaximumHeight(mGridSpacingY * mRows + 5); |
293 | 291 | ||
294 | // Disable horizontal scrollbar. This is a hack. The geometry should be | 292 | // Disable horizontal scrollbar. This is a hack. The geometry should be |
295 | // controlled in a way that the contents horizontally always fits. Then it is | 293 | // controlled in a way that the contents horizontally always fits. Then it is |
296 | // not necessary to turn off the scrollbar. | 294 | // not necessary to turn off the scrollbar. |
297 | setHScrollBarMode(AlwaysOff); | 295 | setHScrollBarMode(AlwaysOff); |
298 | if ( ! mAllDayMode ) | 296 | if ( ! mAllDayMode ) |
299 | setVScrollBarMode(AlwaysOn); | 297 | setVScrollBarMode(AlwaysOn); |
300 | else | 298 | else |
301 | setVScrollBarMode(AlwaysOff); | 299 | setVScrollBarMode(AlwaysOff); |
302 | 300 | ||
303 | setStartHour(KOPrefs::instance()->mDayBegins); | 301 | setStartHour(KOPrefs::instance()->mDayBegins); |
304 | 302 | ||
305 | calculateWorkingHours(); | 303 | calculateWorkingHours(); |
306 | 304 | ||
307 | connect(verticalScrollBar(),SIGNAL(valueChanged(int)), | 305 | connect(verticalScrollBar(),SIGNAL(valueChanged(int)), |
308 | SLOT(checkScrollBoundaries(int))); | 306 | SLOT(checkScrollBoundaries(int))); |
309 | 307 | ||
310 | // Create the Marcus Bains line. | 308 | // Create the Marcus Bains line. |
311 | if(mAllDayMode) | 309 | if(mAllDayMode) |
312 | mMarcusBains = 0; | 310 | mMarcusBains = 0; |
313 | else { | 311 | else { |
314 | mMarcusBains = new MarcusBains(this); | 312 | mMarcusBains = new MarcusBains(this); |
315 | addChild(mMarcusBains); | 313 | addChild(mMarcusBains); |
316 | } | 314 | } |
317 | } | 315 | } |
318 | 316 | ||
319 | void KOAgenda::clear() | 317 | void KOAgenda::clear() |
320 | { | 318 | { |
321 | KOAgendaItem *item; | 319 | KOAgendaItem *item; |
322 | for ( item=mItems.first(); item != 0; item=mItems.next() ) { | 320 | for ( item=mItems.first(); item != 0; item=mItems.next() ) { |
323 | mUnusedItems.append( item ); | 321 | mUnusedItems.append( item ); |
324 | //item->hide(); | 322 | //item->hide(); |
325 | } | 323 | } |
326 | mItems.clear(); | 324 | mItems.clear(); |
327 | mSelectedItem = 0; | 325 | mSelectedItem = 0; |
328 | clearSelection(); | 326 | clearSelection(); |
329 | } | 327 | } |
330 | 328 | ||
331 | void KOAgenda::clearSelection() | 329 | void KOAgenda::clearSelection() |
332 | { | 330 | { |
333 | mSelectionCellX = 0; | 331 | mSelectionCellX = 0; |
334 | mSelectionYTop = 0; | 332 | mSelectionYTop = 0; |
335 | mSelectionHeight = 0; | 333 | mSelectionHeight = 0; |
336 | } | 334 | } |
337 | 335 | ||
338 | void KOAgenda::marcus_bains() | 336 | void KOAgenda::marcus_bains() |
339 | { | 337 | { |
340 | if(mMarcusBains) mMarcusBains->updateLocation(true); | 338 | if(mMarcusBains) mMarcusBains->updateLocation(true); |
341 | } | 339 | } |
342 | 340 | ||
343 | 341 | ||
344 | void KOAgenda::changeColumns(int columns) | 342 | void KOAgenda::changeColumns(int columns) |
345 | { | 343 | { |
346 | if (columns == 0) { | 344 | if (columns == 0) { |
347 | kdDebug() << "KOAgenda::changeColumns() called with argument 0" << endl; | 345 | kdDebug() << "KOAgenda::changeColumns() called with argument 0" << endl; |
348 | return; | 346 | return; |
349 | } | 347 | } |
350 | 348 | ||
351 | clear(); | 349 | clear(); |
352 | 350 | ||
353 | mColumns = columns; | 351 | mColumns = columns; |
354 | // setMinimumSize(mColumns * 10, mGridSpacingY + 1); | 352 | // setMinimumSize(mColumns * 10, mGridSpacingY + 1); |
355 | // init(); | 353 | // init(); |
356 | // update(); | 354 | // update(); |
357 | //qDebug("KOAgenda::changeColumns "); | 355 | //qDebug("KOAgenda::changeColumns "); |
358 | computeSizes(); | 356 | computeSizes(); |
359 | // QResizeEvent event( size(), size() ); | 357 | // QResizeEvent event( size(), size() ); |
360 | 358 | ||
361 | //QApplication::sendEvent( this, &event ); | 359 | //QApplication::sendEvent( this, &event ); |
362 | } | 360 | } |
363 | 361 | ||
364 | /* | 362 | /* |
365 | This is the eventFilter function, which gets all events from the KOAgendaItems | 363 | This is the eventFilter function, which gets all events from the KOAgendaItems |
366 | contained in the agenda. It has to handle moving and resizing for all items. | 364 | contained in the agenda. It has to handle moving and resizing for all items. |
367 | */ | 365 | */ |
368 | bool KOAgenda::eventFilter ( QObject *object, QEvent *event ) | 366 | bool KOAgenda::eventFilter ( QObject *object, QEvent *event ) |
369 | { | 367 | { |
370 | // kdDebug() << "KOAgenda::eventFilter" << endl; | 368 | // kdDebug() << "KOAgenda::eventFilter" << endl; |
371 | switch(event->type()) { | 369 | switch(event->type()) { |
372 | case QEvent::MouseButtonPress: | 370 | case QEvent::MouseButtonPress: |
373 | case QEvent::MouseButtonDblClick: | 371 | case QEvent::MouseButtonDblClick: |
374 | case QEvent::MouseButtonRelease: | 372 | case QEvent::MouseButtonRelease: |
375 | case QEvent::MouseMove: | 373 | case QEvent::MouseMove: |
376 | return eventFilter_mouse(object, static_cast<QMouseEvent *>(event)); | 374 | return eventFilter_mouse(object, static_cast<QMouseEvent *>(event)); |
377 | 375 | ||
378 | case (QEvent::Leave): | 376 | case (QEvent::Leave): |
379 | if (!mActionItem) | 377 | if (!mActionItem) |
380 | setCursor(arrowCursor); | 378 | setCursor(arrowCursor); |
381 | return true; | 379 | return true; |
382 | 380 | ||
383 | default: | 381 | default: |
384 | return QScrollView::eventFilter(object,event); | 382 | return QScrollView::eventFilter(object,event); |
385 | } | 383 | } |
386 | } | 384 | } |
387 | 385 | ||
388 | 386 | ||
389 | bool KOAgenda::eventFilter_mouse(QObject *object, QMouseEvent *me) | 387 | bool KOAgenda::eventFilter_mouse(QObject *object, QMouseEvent *me) |
390 | { | 388 | { |
391 | //qDebug("KOAgenda::eventFilter_mous "); | 389 | //qDebug("KOAgenda::eventFilter_mous "); |
392 | QPoint viewportPos; | 390 | QPoint viewportPos; |
393 | if (object != viewport()) { | 391 | if (object != viewport()) { |
394 | viewportPos = ((QWidget *)object)->mapToParent(me->pos()); | 392 | viewportPos = ((QWidget *)object)->mapToParent(me->pos()); |
395 | } else { | 393 | } else { |
396 | viewportPos = me->pos(); | 394 | viewportPos = me->pos(); |
397 | } | 395 | } |
398 | static int startX = 0; | 396 | static int startX = 0; |
399 | static int startY = 0; | 397 | static int startY = 0; |
400 | static bool block = true; | 398 | static bool block = true; |
401 | switch (me->type()) { | 399 | switch (me->type()) { |
402 | case QEvent::MouseButtonPress: | 400 | case QEvent::MouseButtonPress: |
403 | //qDebug("QEvent::MouseButtonPress: "); | 401 | //qDebug("QEvent::MouseButtonPress: "); |
404 | // kdDebug() << "koagenda: filtered button press" << endl; | 402 | // kdDebug() << "koagenda: filtered button press" << endl; |
405 | if (object != viewport()) { | 403 | if (object != viewport()) { |
406 | if (me->button() == RightButton) { | 404 | if (me->button() == RightButton) { |
407 | 405 | ||
408 | mClickedItem = (KOAgendaItem *)object; | 406 | mClickedItem = (KOAgendaItem *)object; |
409 | if (mClickedItem) { | 407 | if (mClickedItem) { |
410 | selectItem(mClickedItem); | 408 | selectItem(mClickedItem); |
411 | // emit showIncidencePopupSignal(mClickedItem->incidence()); | 409 | // emit showIncidencePopupSignal(mClickedItem->incidence()); |
412 | } | 410 | } |
413 | //mItemPopup->popup(QCursor::pos()); | 411 | //mItemPopup->popup(QCursor::pos()); |
414 | } else { | 412 | } else { |
415 | mActionItem = (KOAgendaItem *)object; | 413 | mActionItem = (KOAgendaItem *)object; |
416 | if (mActionItem) { | 414 | if (mActionItem) { |
417 | if ( mSelectionHeight > 0 ) { | 415 | if ( mSelectionHeight > 0 ) { |
418 | int selectionCellX = mSelectionCellX * mGridSpacingX; | 416 | int selectionCellX = mSelectionCellX * mGridSpacingX; |
419 | int selectionYTop = mSelectionYTop; | 417 | int selectionYTop = mSelectionYTop; |
420 | int gridSpacingX = mGridSpacingX; | 418 | int gridSpacingX = mGridSpacingX; |
421 | int selectionHeight = mSelectionHeight; | 419 | int selectionHeight = mSelectionHeight; |
422 | clearSelection(); | 420 | clearSelection(); |
423 | repaintContents( selectionCellX, selectionYTop, | 421 | repaintContents( selectionCellX, selectionYTop, |
424 | gridSpacingX, selectionHeight,false ); | 422 | gridSpacingX, selectionHeight,false ); |
425 | } | 423 | } |
426 | selectItem(mActionItem); | 424 | selectItem(mActionItem); |
427 | Incidence *incidence = mActionItem->incidence(); | 425 | Incidence *incidence = mActionItem->incidence(); |
428 | if ( incidence->isReadOnly() /*|| incidence->recurrence()->doesRecur() */) { | 426 | if ( incidence->isReadOnly() /*|| incidence->recurrence()->doesRecur() */) { |
429 | mActionItem = 0; | 427 | mActionItem = 0; |
430 | } else { | 428 | } else { |
431 | startItemAction(viewportPos); | 429 | startItemAction(viewportPos); |
432 | startX = viewportPos.x(); | 430 | startX = viewportPos.x(); |
433 | startY = viewportPos.y(); | 431 | startY = viewportPos.y(); |
434 | block = true; | 432 | block = true; |
435 | } | 433 | } |
436 | } | 434 | } |
437 | } | 435 | } |
438 | } else { | 436 | } else { |
439 | selectItem(0); | 437 | selectItem(0); |
440 | mActionItem = 0; | 438 | mActionItem = 0; |
441 | if (me->button() == RightButton ) { | 439 | if (me->button() == RightButton ) { |
442 | blockNewEvent = true; | 440 | blockNewEvent = true; |
443 | qDebug("right "); | 441 | qDebug("right "); |
444 | int x,y; | 442 | int x,y; |
445 | viewportToContents(viewportPos.x(),viewportPos.y(),x,y); | 443 | viewportToContents(viewportPos.x(),viewportPos.y(),x,y); |
446 | int gx,gy; | 444 | int gx,gy; |
447 | contentsToGrid(x,y,gx,gy); | 445 | contentsToGrid(x,y,gx,gy); |
448 | mStartCellX = gx; | 446 | mStartCellX = gx; |
449 | mStartCellY = gy; | 447 | mStartCellY = gy; |
450 | mCurrentCellX = gx; | 448 | mCurrentCellX = gx; |
451 | mCurrentCellY = gy; | 449 | mCurrentCellY = gy; |
452 | mNewItemPopup->popup( viewport()->mapToGlobal( me->pos() ) ); | 450 | mNewItemPopup->popup( viewport()->mapToGlobal( me->pos() ) ); |
453 | 451 | ||
454 | } else { | 452 | } else { |
455 | blockNewEvent = false; | 453 | blockNewEvent = false; |
456 | setCursor(arrowCursor); | 454 | setCursor(arrowCursor); |
457 | startSelectAction(viewportPos); | 455 | startSelectAction(viewportPos); |
458 | } | 456 | } |
459 | } | 457 | } |
460 | break; | 458 | break; |
461 | 459 | ||
462 | case QEvent::MouseButtonRelease: | 460 | case QEvent::MouseButtonRelease: |
463 | //qDebug("QEvent::MouseButtonRelease: "); | 461 | //qDebug("QEvent::MouseButtonRelease: "); |
464 | if (me->button() == RightButton && block ) { | 462 | if (me->button() == RightButton && block ) { |
465 | if (object != viewport()) { | 463 | if (object != viewport()) { |
466 | mClickedItem = (KOAgendaItem *)object; | 464 | mClickedItem = (KOAgendaItem *)object; |
467 | if (mActionItem ) { | 465 | if (mActionItem ) { |
468 | endItemAction(); | 466 | endItemAction(); |
469 | } | 467 | } |
470 | if (mClickedItem) { | 468 | if (mClickedItem) { |
471 | selectItem(mClickedItem); | 469 | selectItem(mClickedItem); |
472 | emit showIncidencePopupSignal(mClickedItem->incidence()); | 470 | emit showIncidencePopupSignal(mClickedItem->incidence()); |
473 | } | 471 | } |
474 | } | 472 | } |
475 | break; | 473 | break; |
476 | } | 474 | } |
477 | block = true; | 475 | block = true; |
478 | if (mActionItem) { | 476 | if (mActionItem) { |
479 | QPoint clipperPos = clipper()->mapFromGlobal(viewport()->mapToGlobal(viewportPos)); | 477 | QPoint clipperPos = clipper()->mapFromGlobal(viewport()->mapToGlobal(viewportPos)); |
480 | //qDebug(" %d %d %d ",clipperPos.y(),visibleHeight() , 9 ); | 478 | //qDebug(" %d %d %d ",clipperPos.y(),visibleHeight() , 9 ); |
481 | if ( mActionType == MOVE && (clipperPos.y() > visibleHeight()-2 ||clipperPos.y() < 0 ) ) { | 479 | if ( mActionType == MOVE && (clipperPos.y() > visibleHeight()-2 ||clipperPos.y() < 0 ) ) { |
482 | mScrollUpTimer.stop(); | 480 | mScrollUpTimer.stop(); |
483 | mScrollDownTimer.stop(); | 481 | mScrollDownTimer.stop(); |
484 | mActionItem->resetMove(); | 482 | mActionItem->resetMove(); |
485 | placeSubCells( mActionItem ); | 483 | placeSubCells( mActionItem ); |
486 | // emit startDragSignal( mActionItem->incidence() ); | 484 | // emit startDragSignal( mActionItem->incidence() ); |
487 | setCursor( arrowCursor ); | 485 | setCursor( arrowCursor ); |
488 | mActionItem = 0; | 486 | mActionItem = 0; |
489 | mActionType = NOP; | 487 | mActionType = NOP; |
490 | mItemMoved = 0; | 488 | mItemMoved = 0; |
491 | return true; | 489 | return true; |
492 | } | 490 | } |
493 | endItemAction(); | 491 | endItemAction(); |
494 | } else if ( mActionType == SELECT ) { | 492 | } else if ( mActionType == SELECT ) { |
495 | if (me->button() == RightButton ) { | 493 | if (me->button() == RightButton ) { |
496 | 494 | ||
497 | } else { | 495 | } else { |
498 | endSelectAction( !blockNewEvent ); | 496 | endSelectAction( !blockNewEvent ); |
499 | } | 497 | } |
500 | } | 498 | } |
501 | break; | 499 | break; |
502 | 500 | ||
503 | case QEvent::MouseMove: | 501 | case QEvent::MouseMove: |
504 | if (object != viewport()) { | 502 | if (object != viewport()) { |
505 | KOAgendaItem *moveItem = (KOAgendaItem *)object; | 503 | KOAgendaItem *moveItem = (KOAgendaItem *)object; |
506 | //qDebug("moveItem %d ",moveItem ); | 504 | //qDebug("moveItem %d ",moveItem ); |
507 | if (!moveItem->incidence()->isReadOnly() /*&& | 505 | if (!moveItem->incidence()->isReadOnly() /*&& |
508 | !moveItem->incidence()->recurrence()->doesRecur()*/ ) | 506 | !moveItem->incidence()->recurrence()->doesRecur()*/ ) |
509 | if (!mActionItem) | 507 | if (!mActionItem) |
510 | setNoActionCursor(moveItem,viewportPos); | 508 | setNoActionCursor(moveItem,viewportPos); |
511 | else { | 509 | else { |
512 | if ( block ) { | 510 | if ( block ) { |
513 | int dX, dY; | 511 | int dX, dY; |
514 | dX = startX - viewportPos.x(); | 512 | dX = startX - viewportPos.x(); |
515 | if ( dX < 0 ) | 513 | if ( dX < 0 ) |
516 | dX = -dX; | 514 | dX = -dX; |
517 | dY = viewportPos.y() - startY; | 515 | dY = viewportPos.y() - startY; |
518 | if ( dY < 0 ) | 516 | if ( dY < 0 ) |
519 | dY = -dY; | 517 | dY = -dY; |
520 | int diff = 30; | 518 | int diff = 30; |
521 | if ( QApplication::desktop()->width() < 480 ) | 519 | if ( QApplication::desktop()->width() < 480 ) |
522 | diff = 15; | 520 | diff = 15; |
523 | // qDebug(" %d %d ",dX, dY ); | 521 | // qDebug(" %d %d ",dX, dY ); |
524 | if ( dX > diff || dY > diff ) { | 522 | if ( dX > diff || dY > diff ) { |
525 | block = false; | 523 | block = false; |
526 | } | 524 | } |
527 | } | 525 | } |
528 | if ( !block ) | 526 | if ( !block ) |
529 | performItemAction(viewportPos); | 527 | performItemAction(viewportPos); |
530 | } | 528 | } |
531 | } else { | 529 | } else { |
532 | if ( mActionType == SELECT ) { | 530 | if ( mActionType == SELECT ) { |
533 | performSelectAction( viewportPos ); | 531 | performSelectAction( viewportPos ); |
534 | } | 532 | } |
535 | } | 533 | } |
536 | break; | 534 | break; |
537 | 535 | ||
538 | case QEvent::MouseButtonDblClick: | 536 | case QEvent::MouseButtonDblClick: |
539 | if (object == viewport()) { | 537 | if (object == viewport()) { |
540 | selectItem(0); | 538 | selectItem(0); |
541 | int x,y; | 539 | int x,y; |
542 | viewportToContents(viewportPos.x(),viewportPos.y(),x,y); | 540 | viewportToContents(viewportPos.x(),viewportPos.y(),x,y); |
543 | int gx,gy; | 541 | int gx,gy; |
544 | contentsToGrid(x,y,gx,gy); | 542 | contentsToGrid(x,y,gx,gy); |
545 | emit newEventSignal(gx,gy); | 543 | emit newEventSignal(gx,gy); |
546 | } else { | 544 | } else { |
547 | KOAgendaItem *doubleClickedItem = (KOAgendaItem *)object; | 545 | KOAgendaItem *doubleClickedItem = (KOAgendaItem *)object; |
548 | selectItem(doubleClickedItem); | 546 | selectItem(doubleClickedItem); |
549 | if ( KOPrefs::instance()->mEditOnDoubleClick ) | 547 | if ( KOPrefs::instance()->mEditOnDoubleClick ) |
550 | emit editIncidenceSignal(doubleClickedItem->incidence()); | 548 | emit editIncidenceSignal(doubleClickedItem->incidence()); |
551 | else | 549 | else |
552 | emit showIncidenceSignal(doubleClickedItem->incidence()); | 550 | emit showIncidenceSignal(doubleClickedItem->incidence()); |
553 | } | 551 | } |
554 | break; | 552 | break; |
555 | 553 | ||
556 | default: | 554 | default: |
557 | break; | 555 | break; |
558 | } | 556 | } |
559 | 557 | ||
560 | return true; | 558 | return true; |
561 | } | 559 | } |
562 | 560 | ||
563 | void KOAgenda::newItem( int item ) | 561 | void KOAgenda::newItem( int item ) |
564 | { | 562 | { |
565 | qDebug("new %d ", item); | ||
566 | if ( item == 1 ) { //new event | 563 | if ( item == 1 ) { //new event |
567 | newEventSignal(mStartCellX ,mStartCellY ); | 564 | newEventSignal(mStartCellX ,mStartCellY ); |
568 | } | 565 | } else |
569 | if ( item == 2 ) { //new event | 566 | if ( item == 2 ) { //new event |
570 | newTodoSignal(mStartCellX ,mStartCellY ); | 567 | newTodoSignal(mStartCellX ,mStartCellY ); |
571 | } | 568 | } else |
569 | { | ||
570 | QDate day = mSelectedDates[mStartCellX]; | ||
571 | emit showDateView( item, day ); | ||
572 | // 3Day view | ||
573 | // 4Week view | ||
574 | // 5Month view | ||
575 | // 6Journal view | ||
576 | } | ||
572 | } | 577 | } |
573 | void KOAgenda::startSelectAction(QPoint viewportPos) | 578 | void KOAgenda::startSelectAction(QPoint viewportPos) |
574 | { | 579 | { |
575 | //emit newStartSelectSignal(); | 580 | //emit newStartSelectSignal(); |
576 | 581 | ||
577 | mActionType = SELECT; | 582 | mActionType = SELECT; |
578 | 583 | ||
579 | int x,y; | 584 | int x,y; |
580 | viewportToContents(viewportPos.x(),viewportPos.y(),x,y); | 585 | viewportToContents(viewportPos.x(),viewportPos.y(),x,y); |
581 | int gx,gy; | 586 | int gx,gy; |
582 | contentsToGrid(x,y,gx,gy); | 587 | contentsToGrid(x,y,gx,gy); |
583 | 588 | ||
584 | mStartCellX = gx; | 589 | mStartCellX = gx; |
585 | mStartCellY = gy; | 590 | mStartCellY = gy; |
586 | mCurrentCellX = gx; | 591 | mCurrentCellX = gx; |
587 | mCurrentCellY = gy; | 592 | mCurrentCellY = gy; |
588 | 593 | ||
589 | // Store coordinates of old selection | 594 | // Store coordinates of old selection |
590 | int selectionX = mSelectionCellX * mGridSpacingX; | 595 | int selectionX = mSelectionCellX * mGridSpacingX; |
591 | int selectionYTop = mSelectionYTop; | 596 | int selectionYTop = mSelectionYTop; |
592 | int selectionHeight = mSelectionHeight; | 597 | int selectionHeight = mSelectionHeight; |
593 | 598 | ||
594 | // Store new selection | 599 | // Store new selection |
595 | mSelectionCellX = gx; | 600 | mSelectionCellX = gx; |
596 | mSelectionYTop = gy * mGridSpacingY; | 601 | mSelectionYTop = gy * mGridSpacingY; |
597 | mSelectionHeight = mGridSpacingY; | 602 | mSelectionHeight = mGridSpacingY; |
598 | 603 | ||
599 | // Clear old selection | 604 | // Clear old selection |
600 | repaintContents( selectionX, selectionYTop, | 605 | repaintContents( selectionX, selectionYTop, |
601 | mGridSpacingX, selectionHeight,false ); | 606 | mGridSpacingX, selectionHeight,false ); |
602 | 607 | ||
603 | // Paint new selection | 608 | // Paint new selection |
604 | // repaintContents( mSelectionCellX * mGridSpacingX, mSelectionYTop, | 609 | // repaintContents( mSelectionCellX * mGridSpacingX, mSelectionYTop, |
605 | // mGridSpacingX, mSelectionHeight ); | 610 | // mGridSpacingX, mSelectionHeight ); |
606 | } | 611 | } |
607 | 612 | ||
608 | void KOAgenda::performSelectAction(QPoint viewportPos) | 613 | void KOAgenda::performSelectAction(QPoint viewportPos) |
609 | { | 614 | { |
610 | int x,y; | 615 | int x,y; |
611 | viewportToContents(viewportPos.x(),viewportPos.y(),x,y); | 616 | viewportToContents(viewportPos.x(),viewportPos.y(),x,y); |
612 | int gx,gy; | 617 | int gx,gy; |
613 | contentsToGrid(x,y,gx,gy); | 618 | contentsToGrid(x,y,gx,gy); |
614 | 619 | ||
615 | QPoint clipperPos = clipper()-> | 620 | QPoint clipperPos = clipper()-> |
616 | mapFromGlobal(viewport()->mapToGlobal(viewportPos)); | 621 | mapFromGlobal(viewport()->mapToGlobal(viewportPos)); |
617 | 622 | ||
618 | // Scroll if cursor was moved to upper or lower end of agenda. | 623 | // Scroll if cursor was moved to upper or lower end of agenda. |
619 | if (clipperPos.y() < mScrollBorderWidth) { | 624 | if (clipperPos.y() < mScrollBorderWidth) { |
620 | mScrollUpTimer.start(mScrollDelay); | 625 | mScrollUpTimer.start(mScrollDelay); |
621 | } else if (visibleHeight() - clipperPos.y() < | 626 | } else if (visibleHeight() - clipperPos.y() < |
622 | mScrollBorderWidth) { | 627 | mScrollBorderWidth) { |
623 | mScrollDownTimer.start(mScrollDelay); | 628 | mScrollDownTimer.start(mScrollDelay); |
624 | } else { | 629 | } else { |
625 | mScrollUpTimer.stop(); | 630 | mScrollUpTimer.stop(); |
626 | mScrollDownTimer.stop(); | 631 | mScrollDownTimer.stop(); |
627 | } | 632 | } |
628 | 633 | ||
629 | if ( gy > mCurrentCellY ) { | 634 | if ( gy > mCurrentCellY ) { |
630 | mSelectionHeight = ( gy + 1 ) * mGridSpacingY - mSelectionYTop; | 635 | mSelectionHeight = ( gy + 1 ) * mGridSpacingY - mSelectionYTop; |
631 | 636 | ||
632 | #if 0 | 637 | #if 0 |
633 | // FIXME: Repaint only the newly selected region | 638 | // FIXME: Repaint only the newly selected region |
634 | repaintContents( mSelectionCellX * mGridSpacingX, | 639 | repaintContents( mSelectionCellX * mGridSpacingX, |
635 | mCurrentCellY + mGridSpacingY, | 640 | mCurrentCellY + mGridSpacingY, |
636 | mGridSpacingX, | 641 | mGridSpacingX, |
637 | mSelectionHeight - ( gy - mCurrentCellY - 1 ) * mGridSpacingY ); | 642 | mSelectionHeight - ( gy - mCurrentCellY - 1 ) * mGridSpacingY ); |
638 | #else | 643 | #else |
639 | repaintContents( (KOGlobals::self()->reverseLayout() ? | 644 | repaintContents( (KOGlobals::self()->reverseLayout() ? |
640 | mColumns - 1 - mSelectionCellX : mSelectionCellX) * | 645 | mColumns - 1 - mSelectionCellX : mSelectionCellX) * |
641 | mGridSpacingX, mSelectionYTop, | 646 | mGridSpacingX, mSelectionYTop, |
642 | mGridSpacingX, mSelectionHeight , false); | 647 | mGridSpacingX, mSelectionHeight , false); |
643 | #endif | 648 | #endif |
644 | 649 | ||
645 | mCurrentCellY = gy; | 650 | mCurrentCellY = gy; |
646 | } else if ( gy < mCurrentCellY ) { | 651 | } else if ( gy < mCurrentCellY ) { |
647 | if ( gy >= mStartCellY ) { | 652 | if ( gy >= mStartCellY ) { |
648 | int selectionHeight = mSelectionHeight; | 653 | int selectionHeight = mSelectionHeight; |
649 | mSelectionHeight = ( gy + 1 ) * mGridSpacingY - mSelectionYTop; | 654 | mSelectionHeight = ( gy + 1 ) * mGridSpacingY - mSelectionYTop; |
650 | 655 | ||
651 | repaintContents( (KOGlobals::self()->reverseLayout() ? | 656 | repaintContents( (KOGlobals::self()->reverseLayout() ? |
652 | mColumns - 1 - mSelectionCellX : mSelectionCellX) * | 657 | mColumns - 1 - mSelectionCellX : mSelectionCellX) * |
653 | mGridSpacingX, mSelectionYTop, | 658 | mGridSpacingX, mSelectionYTop, |
654 | mGridSpacingX, selectionHeight,false ); | 659 | mGridSpacingX, selectionHeight,false ); |
655 | 660 | ||
656 | mCurrentCellY = gy; | 661 | mCurrentCellY = gy; |
657 | } else { | 662 | } else { |
658 | } | 663 | } |
659 | } | 664 | } |
660 | } | 665 | } |
661 | 666 | ||
662 | void KOAgenda::endSelectAction( bool emitNewEvent ) | 667 | void KOAgenda::endSelectAction( bool emitNewEvent ) |
663 | { | 668 | { |
664 | mActionType = NOP; | 669 | mActionType = NOP; |
665 | mScrollUpTimer.stop(); | 670 | mScrollUpTimer.stop(); |
666 | mScrollDownTimer.stop(); | 671 | mScrollDownTimer.stop(); |
667 | 672 | ||
668 | emit newTimeSpanSignal(mStartCellX,mStartCellY,mCurrentCellX,mCurrentCellY); | 673 | emit newTimeSpanSignal(mStartCellX,mStartCellY,mCurrentCellX,mCurrentCellY); |
669 | if ( emitNewEvent && mStartCellY < mCurrentCellY ) | 674 | if ( emitNewEvent && mStartCellY < mCurrentCellY ) |
670 | emit newEventSignal(mStartCellX,mStartCellY,mCurrentCellX,mCurrentCellY); | 675 | emit newEventSignal(mStartCellX,mStartCellY,mCurrentCellX,mCurrentCellY); |
671 | } | 676 | } |
672 | 677 | ||
673 | void KOAgenda::startItemAction(QPoint viewportPos) | 678 | void KOAgenda::startItemAction(QPoint viewportPos) |
674 | { | 679 | { |
675 | int x,y; | 680 | int x,y; |
676 | viewportToContents(viewportPos.x(),viewportPos.y(),x,y); | 681 | viewportToContents(viewportPos.x(),viewportPos.y(),x,y); |
677 | int gx,gy; | 682 | int gx,gy; |
678 | contentsToGrid(x,y,gx,gy); | 683 | contentsToGrid(x,y,gx,gy); |
679 | 684 | ||
680 | mStartCellX = gx; | 685 | mStartCellX = gx; |
681 | mStartCellY = gy; | 686 | mStartCellY = gy; |
682 | mCurrentCellX = gx; | 687 | mCurrentCellX = gx; |
683 | mCurrentCellY = gy; | 688 | mCurrentCellY = gy; |
684 | 689 | ||
685 | if (mAllDayMode) { | 690 | if (mAllDayMode) { |
686 | int gridDistanceX = (x - gx * mGridSpacingX); | 691 | int gridDistanceX = (x - gx * mGridSpacingX); |
687 | if (gridDistanceX < mResizeBorderWidth && | 692 | if (gridDistanceX < mResizeBorderWidth && |
688 | mActionItem->cellX() == mCurrentCellX) { | 693 | mActionItem->cellX() == mCurrentCellX) { |
689 | mActionType = RESIZELEFT; | 694 | mActionType = RESIZELEFT; |
690 | setCursor(sizeHorCursor); | 695 | setCursor(sizeHorCursor); |
691 | } else if ((mGridSpacingX - gridDistanceX) < mResizeBorderWidth && | 696 | } else if ((mGridSpacingX - gridDistanceX) < mResizeBorderWidth && |
692 | mActionItem->cellXWidth() == mCurrentCellX) { | 697 | mActionItem->cellXWidth() == mCurrentCellX) { |
693 | mActionType = RESIZERIGHT; | 698 | mActionType = RESIZERIGHT; |
694 | setCursor(sizeHorCursor); | 699 | setCursor(sizeHorCursor); |
695 | } else { | 700 | } else { |
696 | mActionType = MOVE; | 701 | mActionType = MOVE; |
697 | mActionItem->startMove(); | 702 | mActionItem->startMove(); |
698 | setCursor(sizeAllCursor); | 703 | setCursor(sizeAllCursor); |
699 | } | 704 | } |
700 | } else { | 705 | } else { |
701 | int gridDistanceY = (y - gy * mGridSpacingY); | 706 | int gridDistanceY = (y - gy * mGridSpacingY); |
702 | bool allowResize = ( mActionItem->incidence()->type() != "Todo" ); | 707 | bool allowResize = ( mActionItem->incidence()->type() != "Todo" ); |
703 | if (allowResize && gridDistanceY < mResizeBorderWidth && | 708 | if (allowResize && gridDistanceY < mResizeBorderWidth && |
704 | mActionItem->cellYTop() == mCurrentCellY && | 709 | mActionItem->cellYTop() == mCurrentCellY && |
705 | !mActionItem->firstMultiItem()) { | 710 | !mActionItem->firstMultiItem()) { |
706 | mActionType = RESIZETOP; | 711 | mActionType = RESIZETOP; |
707 | setCursor(sizeVerCursor); | 712 | setCursor(sizeVerCursor); |
708 | } else if (allowResize &&(mGridSpacingY - gridDistanceY) < mResizeBorderWidth && | 713 | } else if (allowResize &&(mGridSpacingY - gridDistanceY) < mResizeBorderWidth && |
709 | mActionItem->cellYBottom() == mCurrentCellY && | 714 | mActionItem->cellYBottom() == mCurrentCellY && |
710 | !mActionItem->lastMultiItem()) { | 715 | !mActionItem->lastMultiItem()) { |
711 | mActionType = RESIZEBOTTOM; | 716 | mActionType = RESIZEBOTTOM; |
712 | setCursor(sizeVerCursor); | 717 | setCursor(sizeVerCursor); |
713 | } else { | 718 | } else { |
714 | mActionType = MOVE; | 719 | mActionType = MOVE; |
715 | mActionItem->startMove(); | 720 | mActionItem->startMove(); |
716 | setCursor(sizeAllCursor); | 721 | setCursor(sizeAllCursor); |
717 | } | 722 | } |
718 | } | 723 | } |
719 | } | 724 | } |
720 | 725 | ||
721 | void KOAgenda::performItemAction(QPoint viewportPos) | 726 | void KOAgenda::performItemAction(QPoint viewportPos) |
722 | { | 727 | { |
723 | // kdDebug() << "viewportPos: " << viewportPos.x() << "," << viewportPos.y() << endl; | 728 | // kdDebug() << "viewportPos: " << viewportPos.x() << "," << viewportPos.y() << endl; |
724 | // QPoint point = viewport()->mapToGlobal(viewportPos); | 729 | // QPoint point = viewport()->mapToGlobal(viewportPos); |
725 | // kdDebug() << "Global: " << point.x() << "," << point.y() << endl; | 730 | // kdDebug() << "Global: " << point.x() << "," << point.y() << endl; |
726 | // point = clipper()->mapFromGlobal(point); | 731 | // point = clipper()->mapFromGlobal(point); |
727 | // kdDebug() << "clipper: " << point.x() << "," << point.y() << endl; | 732 | // kdDebug() << "clipper: " << point.x() << "," << point.y() << endl; |
728 | // kdDebug() << "visible height: " << visibleHeight() << endl; | 733 | // kdDebug() << "visible height: " << visibleHeight() << endl; |
729 | int x,y; | 734 | int x,y; |
730 | viewportToContents(viewportPos.x(),viewportPos.y(),x,y); | 735 | viewportToContents(viewportPos.x(),viewportPos.y(),x,y); |
731 | // kdDebug() << "contents: " << x << "," << y << "\n" << endl; | 736 | // kdDebug() << "contents: " << x << "," << y << "\n" << endl; |
732 | int gx,gy; | 737 | int gx,gy; |
733 | contentsToGrid(x,y,gx,gy); | 738 | contentsToGrid(x,y,gx,gy); |
734 | QPoint clipperPos = clipper()-> | 739 | QPoint clipperPos = clipper()-> |
735 | mapFromGlobal(viewport()->mapToGlobal(viewportPos)); | 740 | mapFromGlobal(viewport()->mapToGlobal(viewportPos)); |
736 | 741 | ||
737 | // Cursor left active agenda area. | 742 | // Cursor left active agenda area. |
738 | // This starts a drag. | 743 | // This starts a drag. |
739 | if ( /*clipperPos.y() < 0 || clipperPos.y() > visibleHeight() ||*/ | 744 | if ( /*clipperPos.y() < 0 || clipperPos.y() > visibleHeight() ||*/ |
740 | clipperPos.x() < 0 || clipperPos.x() > visibleWidth() ) { | 745 | clipperPos.x() < 0 || clipperPos.x() > visibleWidth() ) { |
741 | if ( mActionType == MOVE ) { | 746 | if ( mActionType == MOVE ) { |
742 | mScrollUpTimer.stop(); | 747 | mScrollUpTimer.stop(); |
743 | mScrollDownTimer.stop(); | 748 | mScrollDownTimer.stop(); |
744 | mActionItem->resetMove(); | 749 | mActionItem->resetMove(); |
745 | placeSubCells( mActionItem ); | 750 | placeSubCells( mActionItem ); |
746 | // emit startDragSignal( mActionItem->incidence() ); | 751 | // emit startDragSignal( mActionItem->incidence() ); |
747 | setCursor( arrowCursor ); | 752 | setCursor( arrowCursor ); |
748 | mActionItem = 0; | 753 | mActionItem = 0; |
749 | mActionType = NOP; | 754 | mActionType = NOP; |
750 | mItemMoved = 0; | 755 | mItemMoved = 0; |
751 | return; | 756 | return; |
752 | } | 757 | } |
753 | } else { | 758 | } else { |
754 | switch ( mActionType ) { | 759 | switch ( mActionType ) { |
755 | case MOVE: | 760 | case MOVE: |
756 | setCursor( sizeAllCursor ); | 761 | setCursor( sizeAllCursor ); |
757 | break; | 762 | break; |
758 | case RESIZETOP: | 763 | case RESIZETOP: |
759 | case RESIZEBOTTOM: | 764 | case RESIZEBOTTOM: |
760 | setCursor( sizeVerCursor ); | 765 | setCursor( sizeVerCursor ); |
761 | break; | 766 | break; |
762 | case RESIZELEFT: | 767 | case RESIZELEFT: |
763 | case RESIZERIGHT: | 768 | case RESIZERIGHT: |
764 | setCursor( sizeHorCursor ); | 769 | setCursor( sizeHorCursor ); |
765 | break; | 770 | break; |
766 | default: | 771 | default: |
767 | setCursor( arrowCursor ); | 772 | setCursor( arrowCursor ); |
768 | } | 773 | } |
769 | } | 774 | } |
770 | 775 | ||
771 | // Scroll if item was moved to upper or lower end of agenda. | 776 | // Scroll if item was moved to upper or lower end of agenda. |
772 | if (clipperPos.y() < mScrollBorderWidth) { | 777 | if (clipperPos.y() < mScrollBorderWidth) { |
773 | mScrollUpTimer.start(mScrollDelay); | 778 | mScrollUpTimer.start(mScrollDelay); |
774 | } else if (visibleHeight() - clipperPos.y() < | 779 | } else if (visibleHeight() - clipperPos.y() < |
775 | mScrollBorderWidth) { | 780 | mScrollBorderWidth) { |
776 | mScrollDownTimer.start(mScrollDelay); | 781 | mScrollDownTimer.start(mScrollDelay); |
777 | } else { | 782 | } else { |
778 | mScrollUpTimer.stop(); | 783 | mScrollUpTimer.stop(); |
779 | mScrollDownTimer.stop(); | 784 | mScrollDownTimer.stop(); |
780 | } | 785 | } |
781 | 786 | ||
782 | // Move or resize item if necessary | 787 | // Move or resize item if necessary |
783 | if (mCurrentCellX != gx || mCurrentCellY != gy) { | 788 | if (mCurrentCellX != gx || mCurrentCellY != gy) { |
784 | mItemMoved = true; | 789 | mItemMoved = true; |
785 | mActionItem->raise(); | 790 | mActionItem->raise(); |
786 | if (mActionType == MOVE) { | 791 | if (mActionType == MOVE) { |
787 | // Move all items belonging to a multi item | 792 | // Move all items belonging to a multi item |
788 | KOAgendaItem *moveItem = mActionItem->firstMultiItem(); | 793 | KOAgendaItem *moveItem = mActionItem->firstMultiItem(); |
789 | bool isMultiItem = (moveItem || mActionItem->lastMultiItem()); | 794 | bool isMultiItem = (moveItem || mActionItem->lastMultiItem()); |
790 | if (!moveItem) moveItem = mActionItem; | 795 | if (!moveItem) moveItem = mActionItem; |
791 | while (moveItem) { | 796 | while (moveItem) { |
792 | int dy; | 797 | int dy; |
793 | if (isMultiItem) dy = 0; | 798 | if (isMultiItem) dy = 0; |
794 | else dy = gy - mCurrentCellY; | 799 | else dy = gy - mCurrentCellY; |
795 | moveItem->moveRelative(gx - mCurrentCellX,dy); | 800 | moveItem->moveRelative(gx - mCurrentCellX,dy); |
796 | int x,y; | 801 | int x,y; |
797 | gridToContents(moveItem->cellX(),moveItem->cellYTop(),x,y); | 802 | gridToContents(moveItem->cellX(),moveItem->cellYTop(),x,y); |
798 | moveItem->resize(mGridSpacingX * moveItem->cellWidth(), | 803 | moveItem->resize(mGridSpacingX * moveItem->cellWidth(), |
799 | mGridSpacingY * moveItem->cellHeight()); | 804 | mGridSpacingY * moveItem->cellHeight()); |
800 | moveChild(moveItem,x,y); | 805 | moveChild(moveItem,x,y); |
801 | moveItem = moveItem->nextMultiItem(); | 806 | moveItem = moveItem->nextMultiItem(); |
802 | } | 807 | } |
803 | } else if (mActionType == RESIZETOP) { | 808 | } else if (mActionType == RESIZETOP) { |
804 | if (mCurrentCellY <= mActionItem->cellYBottom()) { | 809 | if (mCurrentCellY <= mActionItem->cellYBottom()) { |
805 | mActionItem->expandTop(gy - mCurrentCellY); | 810 | mActionItem->expandTop(gy - mCurrentCellY); |
806 | mActionItem->resize(mActionItem->width(), | 811 | mActionItem->resize(mActionItem->width(), |
807 | mGridSpacingY * mActionItem->cellHeight()); | 812 | mGridSpacingY * mActionItem->cellHeight()); |
808 | int x,y; | 813 | int x,y; |
809 | gridToContents(mCurrentCellX,mActionItem->cellYTop(),x,y); | 814 | gridToContents(mCurrentCellX,mActionItem->cellYTop(),x,y); |
810 | //moveChild(mActionItem,childX(mActionItem),y); | 815 | //moveChild(mActionItem,childX(mActionItem),y); |
811 | QScrollView::moveChild( mActionItem,childX(mActionItem),y ); | 816 | QScrollView::moveChild( mActionItem,childX(mActionItem),y ); |
812 | } | 817 | } |
813 | } else if (mActionType == RESIZEBOTTOM) { | 818 | } else if (mActionType == RESIZEBOTTOM) { |
814 | if (mCurrentCellY >= mActionItem->cellYTop()) { | 819 | if (mCurrentCellY >= mActionItem->cellYTop()) { |
815 | mActionItem->expandBottom(gy - mCurrentCellY); | 820 | mActionItem->expandBottom(gy - mCurrentCellY); |
816 | mActionItem->resize(mActionItem->width(), | 821 | mActionItem->resize(mActionItem->width(), |
817 | mGridSpacingY * mActionItem->cellHeight()); | 822 | mGridSpacingY * mActionItem->cellHeight()); |
818 | } | 823 | } |
819 | } else if (mActionType == RESIZELEFT) { | 824 | } else if (mActionType == RESIZELEFT) { |
820 | if (mCurrentCellX <= mActionItem->cellXWidth()) { | 825 | if (mCurrentCellX <= mActionItem->cellXWidth()) { |
821 | mActionItem->expandLeft(gx - mCurrentCellX); | 826 | mActionItem->expandLeft(gx - mCurrentCellX); |
822 | mActionItem->resize(mGridSpacingX * mActionItem->cellWidth(), | 827 | mActionItem->resize(mGridSpacingX * mActionItem->cellWidth(), |
823 | mActionItem->height()); | 828 | mActionItem->height()); |
824 | int x,y; | 829 | int x,y; |
825 | gridToContents(mActionItem->cellX(),mActionItem->cellYTop(),x,y); | 830 | gridToContents(mActionItem->cellX(),mActionItem->cellYTop(),x,y); |
826 | moveChild(mActionItem,x,childY(mActionItem)); | 831 | moveChild(mActionItem,x,childY(mActionItem)); |
827 | } | 832 | } |
828 | } else if (mActionType == RESIZERIGHT) { | 833 | } else if (mActionType == RESIZERIGHT) { |
829 | if (mCurrentCellX >= mActionItem->cellX()) { | 834 | if (mCurrentCellX >= mActionItem->cellX()) { |
830 | mActionItem->expandRight(gx - mCurrentCellX); | 835 | mActionItem->expandRight(gx - mCurrentCellX); |
831 | mActionItem->resize(mGridSpacingX * mActionItem->cellWidth(), | 836 | mActionItem->resize(mGridSpacingX * mActionItem->cellWidth(), |
832 | mActionItem->height()); | 837 | mActionItem->height()); |
833 | } | 838 | } |
834 | } | 839 | } |
835 | mCurrentCellX = gx; | 840 | mCurrentCellX = gx; |
836 | mCurrentCellY = gy; | 841 | mCurrentCellY = gy; |
837 | } | 842 | } |
838 | } | 843 | } |
839 | 844 | ||
840 | void KOAgenda::endItemAction() | 845 | void KOAgenda::endItemAction() |
841 | { | 846 | { |
842 | 847 | ||
843 | if ( mItemMoved ) { | 848 | if ( mItemMoved ) { |
844 | KOAgendaItem *placeItem = mActionItem->firstMultiItem(); | 849 | KOAgendaItem *placeItem = mActionItem->firstMultiItem(); |
845 | if ( !placeItem ) { | 850 | if ( !placeItem ) { |
846 | placeItem = mActionItem; | 851 | placeItem = mActionItem; |
847 | } | 852 | } |
848 | if ( placeItem->incidence()->recurrence()->doesRecur() ) { | 853 | if ( placeItem->incidence()->recurrence()->doesRecur() ) { |
849 | Incidence* oldInc = placeItem->incidence(); | 854 | Incidence* oldInc = placeItem->incidence(); |
850 | placeItem->recreateIncidence(); | 855 | placeItem->recreateIncidence(); |
851 | emit addToCalSignal(placeItem->incidence(), oldInc ); | 856 | emit addToCalSignal(placeItem->incidence(), oldInc ); |
852 | } | 857 | } |
853 | int type = mActionType; | 858 | int type = mActionType; |
854 | if ( mAllDayMode ) | 859 | if ( mAllDayMode ) |
855 | type = -1; | 860 | type = -1; |
856 | KOAgendaItem *modifiedItem = placeItem; | 861 | KOAgendaItem *modifiedItem = placeItem; |
857 | //emit itemModified( placeItem, mActionType /*KOGlobals::EVENTEDITED */); | 862 | //emit itemModified( placeItem, mActionType /*KOGlobals::EVENTEDITED */); |
858 | QPtrList<KOAgendaItem> oldconflictItems ;//= placeItem->conflictItems(); | 863 | QPtrList<KOAgendaItem> oldconflictItems ;//= placeItem->conflictItems(); |
859 | KOAgendaItem *item; | 864 | KOAgendaItem *item; |
860 | 865 | ||
861 | if ( placeItem->incidence()->type() == "Todo" ) { | 866 | if ( placeItem->incidence()->type() == "Todo" ) { |
862 | mSelectedItem = 0; | 867 | mSelectedItem = 0; |
863 | //qDebug("todo %d %d %d ", mCurrentCellX, modifiedItem->cellX() ,modifiedItem->cellXWidth()); | 868 | //qDebug("todo %d %d %d ", mCurrentCellX, modifiedItem->cellX() ,modifiedItem->cellXWidth()); |
864 | modifiedItem->mLastMoveXPos = mCurrentCellX; | 869 | modifiedItem->mLastMoveXPos = mCurrentCellX; |
865 | emit itemModified( modifiedItem, mActionType ); | 870 | emit itemModified( modifiedItem, mActionType ); |
866 | } | 871 | } |
867 | else { | 872 | else { |
868 | #if 0 | 873 | #if 0 |
869 | for ( item=oldconflictItems.first(); item != 0; | 874 | for ( item=oldconflictItems.first(); item != 0; |
870 | item=oldconflictItems.next() ) { | 875 | item=oldconflictItems.next() ) { |
871 | placeSubCells(item); | 876 | placeSubCells(item); |
872 | } | 877 | } |
873 | while ( placeItem ) { | 878 | while ( placeItem ) { |
874 | //qDebug("placeItem %s ", placeItem->incidence()->summary().latin1()); | 879 | //qDebug("placeItem %s ", placeItem->incidence()->summary().latin1()); |
875 | placeSubCells( placeItem ); | 880 | placeSubCells( placeItem ); |
876 | placeItem = placeItem->nextMultiItem(); | 881 | placeItem = placeItem->nextMultiItem(); |
877 | } | 882 | } |
878 | #endif | 883 | #endif |
879 | 884 | ||
880 | globalFlagBlockAgendaItemPaint = 1; | 885 | globalFlagBlockAgendaItemPaint = 1; |
881 | for ( item=oldconflictItems.first(); item != 0; | 886 | for ( item=oldconflictItems.first(); item != 0; |
882 | item=oldconflictItems.next() ) { | 887 | item=oldconflictItems.next() ) { |
883 | placeSubCells(item); | 888 | placeSubCells(item); |
884 | } | 889 | } |
885 | while ( placeItem ) { | 890 | while ( placeItem ) { |
886 | //qDebug("placeItem %s ", placeItem->incidence()->summary().latin1()); | 891 | //qDebug("placeItem %s ", placeItem->incidence()->summary().latin1()); |
887 | oldconflictItems = placeItem->conflictItems(); | 892 | oldconflictItems = placeItem->conflictItems(); |
888 | for ( item=oldconflictItems.first(); item != 0; | 893 | for ( item=oldconflictItems.first(); item != 0; |
889 | item=oldconflictItems.next() ) { | 894 | item=oldconflictItems.next() ) { |
890 | placeSubCells(item); | 895 | placeSubCells(item); |
891 | } | 896 | } |
892 | placeSubCells( placeItem ); | 897 | placeSubCells( placeItem ); |
893 | placeItem = placeItem->nextMultiItem(); | 898 | placeItem = placeItem->nextMultiItem(); |
894 | } | 899 | } |
895 | globalFlagBlockAgendaItemPaint = 0; | 900 | globalFlagBlockAgendaItemPaint = 0; |
896 | for ( item=oldconflictItems.first(); item != 0; | 901 | for ( item=oldconflictItems.first(); item != 0; |
897 | item=oldconflictItems.next() ) { | 902 | item=oldconflictItems.next() ) { |
898 | globalFlagBlockAgendaItemUpdate = 0; | 903 | globalFlagBlockAgendaItemUpdate = 0; |
899 | item->repaintMe(); | 904 | item->repaintMe(); |
900 | globalFlagBlockAgendaItemUpdate = 1; | 905 | globalFlagBlockAgendaItemUpdate = 1; |
901 | item->repaint( false ); | 906 | item->repaint( false ); |
902 | } | 907 | } |
903 | placeItem = modifiedItem; | 908 | placeItem = modifiedItem; |
904 | 909 | ||
905 | while ( placeItem ) { | 910 | while ( placeItem ) { |
906 | //qDebug("placeItem %s ", placeItem->incidence()->summary().latin1()); | 911 | //qDebug("placeItem %s ", placeItem->incidence()->summary().latin1()); |
907 | globalFlagBlockAgendaItemUpdate = 0; | 912 | globalFlagBlockAgendaItemUpdate = 0; |
908 | placeItem->repaintMe(); | 913 | placeItem->repaintMe(); |
909 | globalFlagBlockAgendaItemUpdate = 1; | 914 | globalFlagBlockAgendaItemUpdate = 1; |
910 | placeItem->repaint(false); | 915 | placeItem->repaint(false); |
911 | placeItem = placeItem->nextMultiItem(); | 916 | placeItem = placeItem->nextMultiItem(); |
912 | } | 917 | } |
913 | emit itemModified( modifiedItem, mActionType ); | 918 | emit itemModified( modifiedItem, mActionType ); |
914 | 919 | ||
915 | 920 | ||
916 | placeItem = modifiedItem; | 921 | placeItem = modifiedItem; |
917 | while ( placeItem ) { | 922 | while ( placeItem ) { |
918 | oldconflictItems = placeItem->conflictItems(); | 923 | oldconflictItems = placeItem->conflictItems(); |
919 | for ( item=oldconflictItems.first(); item != 0; | 924 | for ( item=oldconflictItems.first(); item != 0; |
920 | item=oldconflictItems.next() ) { | 925 | item=oldconflictItems.next() ) { |
921 | placeSubCells(item); | 926 | placeSubCells(item); |
922 | } | 927 | } |
923 | placeSubCells( placeItem ); | 928 | placeSubCells( placeItem ); |
924 | placeItem = placeItem->nextMultiItem(); | 929 | placeItem = placeItem->nextMultiItem(); |
925 | 930 | ||
926 | } | 931 | } |
927 | placeItem = modifiedItem; | 932 | placeItem = modifiedItem; |
928 | while ( placeItem ) { | 933 | while ( placeItem ) { |
929 | oldconflictItems = placeItem->conflictItems(); | 934 | oldconflictItems = placeItem->conflictItems(); |
930 | for ( item=oldconflictItems.first(); item != 0; | 935 | for ( item=oldconflictItems.first(); item != 0; |
931 | item=oldconflictItems.next() ) { | 936 | item=oldconflictItems.next() ) { |
932 | globalFlagBlockAgendaItemUpdate = 0; | 937 | globalFlagBlockAgendaItemUpdate = 0; |
933 | item->repaintMe(); | 938 | item->repaintMe(); |
934 | globalFlagBlockAgendaItemUpdate = 1; | 939 | globalFlagBlockAgendaItemUpdate = 1; |
935 | item->repaint(false); | 940 | item->repaint(false); |
936 | } | 941 | } |
937 | placeItem = placeItem->nextMultiItem(); | 942 | placeItem = placeItem->nextMultiItem(); |
938 | } | 943 | } |
939 | /* | 944 | /* |
940 | 945 | ||
941 | oldconflictItems = modifiedItem->conflictItems(); | 946 | oldconflictItems = modifiedItem->conflictItems(); |
942 | for ( item=oldconflictItems.first(); item != 0; | 947 | for ( item=oldconflictItems.first(); item != 0; |
943 | item=oldconflictItems.next() ) { | 948 | item=oldconflictItems.next() ) { |
944 | globalFlagBlockAgendaItemUpdate = 0; | 949 | globalFlagBlockAgendaItemUpdate = 0; |
945 | item->paintMe(false); | 950 | item->paintMe(false); |
946 | globalFlagBlockAgendaItemUpdate = 1; | 951 | globalFlagBlockAgendaItemUpdate = 1; |
947 | item->repaint(false); | 952 | item->repaint(false); |
948 | } | 953 | } |
949 | */ | 954 | */ |
950 | 955 | ||
951 | 956 | ||
952 | } | 957 | } |
953 | 958 | ||
954 | } | 959 | } |
955 | 960 | ||
956 | mScrollUpTimer.stop(); | 961 | mScrollUpTimer.stop(); |
957 | mScrollDownTimer.stop(); | 962 | mScrollDownTimer.stop(); |
958 | setCursor( arrowCursor ); | 963 | setCursor( arrowCursor ); |
959 | mActionItem = 0; | 964 | mActionItem = 0; |
960 | mActionType = NOP; | 965 | mActionType = NOP; |
961 | mItemMoved = 0; | 966 | mItemMoved = 0; |
962 | 967 | ||
963 | } | 968 | } |
964 | 969 | ||
965 | void KOAgenda::setNoActionCursor(KOAgendaItem *moveItem,QPoint viewportPos) | 970 | void KOAgenda::setNoActionCursor(KOAgendaItem *moveItem,QPoint viewportPos) |
966 | { | 971 | { |
967 | // kdDebug() << "viewportPos: " << viewportPos.x() << "," << viewportPos.y() << endl; | 972 | // kdDebug() << "viewportPos: " << viewportPos.x() << "," << viewportPos.y() << endl; |
968 | // QPoint point = viewport()->mapToGlobal(viewportPos); | 973 | // QPoint point = viewport()->mapToGlobal(viewportPos); |
969 | // kdDebug() << "Global: " << point.x() << "," << point.y() << endl; | 974 | // kdDebug() << "Global: " << point.x() << "," << point.y() << endl; |
970 | // point = clipper()->mapFromGlobal(point); | 975 | // point = clipper()->mapFromGlobal(point); |
971 | // kdDebug() << "clipper: " << point.x() << "," << point.y() << endl; | 976 | // kdDebug() << "clipper: " << point.x() << "," << point.y() << endl; |
972 | 977 | ||
973 | int x,y; | 978 | int x,y; |
974 | viewportToContents(viewportPos.x(),viewportPos.y(),x,y); | 979 | viewportToContents(viewportPos.x(),viewportPos.y(),x,y); |
975 | // kdDebug() << "contents: " << x << "," << y << "\n" << endl; | 980 | // kdDebug() << "contents: " << x << "," << y << "\n" << endl; |
976 | int gx,gy; | 981 | int gx,gy; |
977 | contentsToGrid(x,y,gx,gy); | 982 | contentsToGrid(x,y,gx,gy); |
978 | 983 | ||
979 | // Change cursor to resize cursor if appropriate | 984 | // Change cursor to resize cursor if appropriate |
980 | if (mAllDayMode) { | 985 | if (mAllDayMode) { |
981 | int gridDistanceX = (x - gx * mGridSpacingX); | 986 | int gridDistanceX = (x - gx * mGridSpacingX); |
982 | if (gridDistanceX < mResizeBorderWidth && | 987 | if (gridDistanceX < mResizeBorderWidth && |
983 | moveItem->cellX() == gx) { | 988 | moveItem->cellX() == gx) { |
984 | setCursor(sizeHorCursor); | 989 | setCursor(sizeHorCursor); |
985 | } else if ((mGridSpacingX - gridDistanceX) < mResizeBorderWidth && | 990 | } else if ((mGridSpacingX - gridDistanceX) < mResizeBorderWidth && |
986 | moveItem->cellXWidth() == gx) { | 991 | moveItem->cellXWidth() == gx) { |
987 | setCursor(sizeHorCursor); | 992 | setCursor(sizeHorCursor); |
988 | } else { | 993 | } else { |
989 | setCursor(arrowCursor); | 994 | setCursor(arrowCursor); |
990 | } | 995 | } |
991 | } else { | 996 | } else { |
992 | int gridDistanceY = (y - gy * mGridSpacingY); | 997 | int gridDistanceY = (y - gy * mGridSpacingY); |
993 | if (gridDistanceY < mResizeBorderWidth && | 998 | if (gridDistanceY < mResizeBorderWidth && |
994 | moveItem->cellYTop() == gy && | 999 | moveItem->cellYTop() == gy && |
995 | !moveItem->firstMultiItem()) { | 1000 | !moveItem->firstMultiItem()) { |
996 | setCursor(sizeVerCursor); | 1001 | setCursor(sizeVerCursor); |
997 | } else if ((mGridSpacingY - gridDistanceY) < mResizeBorderWidth && | 1002 | } else if ((mGridSpacingY - gridDistanceY) < mResizeBorderWidth && |
998 | moveItem->cellYBottom() == gy && | 1003 | moveItem->cellYBottom() == gy && |
999 | !moveItem->lastMultiItem()) { | 1004 | !moveItem->lastMultiItem()) { |
1000 | setCursor(sizeVerCursor); | 1005 | setCursor(sizeVerCursor); |
1001 | } else { | 1006 | } else { |
1002 | setCursor(arrowCursor); | 1007 | setCursor(arrowCursor); |
1003 | } | 1008 | } |
1004 | } | 1009 | } |
1005 | } | 1010 | } |
1006 | 1011 | ||
1007 | 1012 | ||
1008 | /* | 1013 | /* |
1009 | Place item in cell and take care that multiple items using the same cell do | 1014 | Place item in cell and take care that multiple items using the same cell do |
1010 | not overlap. This method is not yet optimal. It doesn´t use the maximum space | 1015 | not overlap. This method is not yet optimal. It doesn´t use the maximum space |
1011 | it can get in all cases. | 1016 | it can get in all cases. |
1012 | At the moment the method has a bug: When an item is placed only the sub cell | 1017 | At the moment the method has a bug: When an item is placed only the sub cell |
1013 | widths of the items are changed, which are within the Y region the item to | 1018 | widths of the items are changed, which are within the Y region the item to |
1014 | place spans. When the sub cell width change of one of this items affects a | 1019 | place spans. When the sub cell width change of one of this items affects a |
1015 | cell, where other items are, which do not overlap in Y with the item to place, | 1020 | cell, where other items are, which do not overlap in Y with the item to place, |
1016 | the display gets corrupted, although the corruption looks quite nice. | 1021 | the display gets corrupted, although the corruption looks quite nice. |
1017 | */ | 1022 | */ |
1018 | void KOAgenda::placeSubCells(KOAgendaItem *placeItem) | 1023 | void KOAgenda::placeSubCells(KOAgendaItem *placeItem) |
1019 | { | 1024 | { |
1020 | 1025 | ||
1021 | QPtrList<KOAgendaItem> conflictItems; | 1026 | QPtrList<KOAgendaItem> conflictItems; |
1022 | int maxSubCells = 0; | 1027 | int maxSubCells = 0; |
1023 | QIntDict<KOAgendaItem> subCellDict(5); | 1028 | QIntDict<KOAgendaItem> subCellDict(5); |
1024 | 1029 | ||
1025 | KOAgendaItem *item; | 1030 | KOAgendaItem *item; |
1026 | for ( item=mItems.first(); item != 0; item=mItems.next() ) { | 1031 | for ( item=mItems.first(); item != 0; item=mItems.next() ) { |
1027 | if (item != placeItem) { | 1032 | if (item != placeItem) { |
1028 | if (placeItem->cellX() <= item->cellXWidth() && | 1033 | if (placeItem->cellX() <= item->cellXWidth() && |
1029 | placeItem->cellXWidth() >= item->cellX()) { | 1034 | placeItem->cellXWidth() >= item->cellX()) { |
1030 | if ((placeItem->cellYTop() <= item->cellYBottom()) && | 1035 | if ((placeItem->cellYTop() <= item->cellYBottom()) && |
1031 | (placeItem->cellYBottom() >= item->cellYTop())) { | 1036 | (placeItem->cellYBottom() >= item->cellYTop())) { |
1032 | conflictItems.append(item); | 1037 | conflictItems.append(item); |
1033 | if (item->subCells() > maxSubCells) | 1038 | if (item->subCells() > maxSubCells) |
1034 | maxSubCells = item->subCells(); | 1039 | maxSubCells = item->subCells(); |
1035 | subCellDict.insert(item->subCell(),item); | 1040 | subCellDict.insert(item->subCell(),item); |
1036 | } | 1041 | } |
1037 | } | 1042 | } |
1038 | } | 1043 | } |
1039 | } | 1044 | } |
1040 | 1045 | ||
1041 | if (conflictItems.count() > 0) { | 1046 | if (conflictItems.count() > 0) { |
1042 | // Look for unused sub cell and insert item | 1047 | // Look for unused sub cell and insert item |
1043 | int i; | 1048 | int i; |
1044 | for(i=0;i<maxSubCells;++i) { | 1049 | for(i=0;i<maxSubCells;++i) { |
1045 | if (!subCellDict.find(i)) { | 1050 | if (!subCellDict.find(i)) { |
1046 | placeItem->setSubCell(i); | 1051 | placeItem->setSubCell(i); |
1047 | break; | 1052 | break; |
1048 | } | 1053 | } |
1049 | } | 1054 | } |
1050 | if (i == maxSubCells) { | 1055 | if (i == maxSubCells) { |
1051 | placeItem->setSubCell(maxSubCells); | 1056 | placeItem->setSubCell(maxSubCells); |
1052 | maxSubCells++; // add new item to number of sub cells | 1057 | maxSubCells++; // add new item to number of sub cells |
1053 | } | 1058 | } |
1054 | 1059 | ||
1055 | // Prepare for sub cell geometry adjustment | 1060 | // Prepare for sub cell geometry adjustment |
1056 | int newSubCellWidth; | 1061 | int newSubCellWidth; |
1057 | if (mAllDayMode) newSubCellWidth = mGridSpacingY / maxSubCells; | 1062 | if (mAllDayMode) newSubCellWidth = mGridSpacingY / maxSubCells; |
1058 | else newSubCellWidth = mGridSpacingX / maxSubCells; | 1063 | else newSubCellWidth = mGridSpacingX / maxSubCells; |
1059 | conflictItems.append(placeItem); | 1064 | conflictItems.append(placeItem); |
1060 | 1065 | ||
1061 | 1066 | ||
1062 | // Adjust sub cell geometry of all items | 1067 | // Adjust sub cell geometry of all items |
1063 | for ( item=conflictItems.first(); item != 0; | 1068 | for ( item=conflictItems.first(); item != 0; |
1064 | item=conflictItems.next() ) { | 1069 | item=conflictItems.next() ) { |
1065 | item->setSubCells(maxSubCells); | 1070 | item->setSubCells(maxSubCells); |
1066 | if (mAllDayMode) { | 1071 | if (mAllDayMode) { |
1067 | item->resize(item->cellWidth() * mGridSpacingX, newSubCellWidth); | 1072 | item->resize(item->cellWidth() * mGridSpacingX, newSubCellWidth); |
1068 | } else { | 1073 | } else { |
1069 | item->resize(newSubCellWidth, item->cellHeight() * mGridSpacingY); | 1074 | item->resize(newSubCellWidth, item->cellHeight() * mGridSpacingY); |
1070 | } | 1075 | } |
1071 | int x,y; | 1076 | int x,y; |
1072 | gridToContents(item->cellX(),item->cellYTop(),x,y); | 1077 | gridToContents(item->cellX(),item->cellYTop(),x,y); |
1073 | if (mAllDayMode) { | 1078 | if (mAllDayMode) { |
1074 | y += item->subCell() * newSubCellWidth; | 1079 | y += item->subCell() * newSubCellWidth; |
1075 | } else { | 1080 | } else { |
1076 | x += item->subCell() * newSubCellWidth; | 1081 | x += item->subCell() * newSubCellWidth; |
1077 | } | 1082 | } |
1078 | moveChild(item,x,y); | 1083 | moveChild(item,x,y); |
1079 | // qDebug("moveChild %s %d %d ", item->incidence()->summary().latin1() ,x,y); | 1084 | // qDebug("moveChild %s %d %d ", item->incidence()->summary().latin1() ,x,y); |
1080 | //item->updateItem(); | 1085 | //item->updateItem(); |
1081 | } | 1086 | } |
1082 | 1087 | ||
1083 | } else { | 1088 | } else { |
1084 | placeItem->setSubCell(0); | 1089 | placeItem->setSubCell(0); |
1085 | placeItem->setSubCells(1); | 1090 | placeItem->setSubCells(1); |
1086 | if (mAllDayMode) placeItem->resize(placeItem->width(),mGridSpacingY); | 1091 | if (mAllDayMode) placeItem->resize(placeItem->width(),mGridSpacingY); |
1087 | else placeItem->resize(mGridSpacingX,placeItem->height()); | 1092 | else placeItem->resize(mGridSpacingX,placeItem->height()); |
1088 | int x,y; | 1093 | int x,y; |
1089 | gridToContents(placeItem->cellX(),placeItem->cellYTop(),x,y); | 1094 | gridToContents(placeItem->cellX(),placeItem->cellYTop(),x,y); |
1090 | moveChild(placeItem,x,y); | 1095 | moveChild(placeItem,x,y); |
1091 | } | 1096 | } |
1092 | placeItem->setConflictItems(conflictItems); | 1097 | placeItem->setConflictItems(conflictItems); |
1093 | // for ( item=conflictItems.first(); item != 0; | 1098 | // for ( item=conflictItems.first(); item != 0; |
1094 | // item=conflictItems.next() ) { | 1099 | // item=conflictItems.next() ) { |
1095 | // //item->updateItem(); | 1100 | // //item->updateItem(); |
1096 | // //qDebug("xxx item->updateItem() %s %d %d", item->incidence()->summary().latin1(),item->x(), item->y() ); | 1101 | // //qDebug("xxx item->updateItem() %s %d %d", item->incidence()->summary().latin1(),item->x(), item->y() ); |
1097 | // } | 1102 | // } |
1098 | // placeItem->updateItem(); | 1103 | // placeItem->updateItem(); |
1099 | } | 1104 | } |
1100 | 1105 | ||
1101 | void KOAgenda::drawContents(QPainter* p, int cx, int cy, int cw, int ch) | 1106 | void KOAgenda::drawContents(QPainter* p, int cx, int cy, int cw, int ch) |
1102 | { | 1107 | { |
1103 | if ( globalFlagBlockAgenda ) | 1108 | if ( globalFlagBlockAgenda ) |
1104 | return; | 1109 | return; |
1105 | //qDebug("KOAgenda::drawContents "); | 1110 | //qDebug("KOAgenda::drawContents "); |
1106 | if ( mCurPixWid != contentsWidth() || mCurPixHei != contentsHeight() ) | 1111 | if ( mCurPixWid != contentsWidth() || mCurPixHei != contentsHeight() ) |
1107 | ;//drawContentsToPainter(); | 1112 | ;//drawContentsToPainter(); |
1108 | 1113 | ||
1109 | QPaintDevice* pd = p->device(); | 1114 | QPaintDevice* pd = p->device(); |
1110 | p->end(); | 1115 | p->end(); |
1111 | int vx, vy; | 1116 | int vx, vy; |
1112 | int selectionX = KOGlobals::self()->reverseLayout() ? | 1117 | int selectionX = KOGlobals::self()->reverseLayout() ? |
1113 | (mColumns - 1 - mSelectionCellX) * mGridSpacingX : | 1118 | (mColumns - 1 - mSelectionCellX) * mGridSpacingX : |
1114 | mSelectionCellX * mGridSpacingX; | 1119 | mSelectionCellX * mGridSpacingX; |
1115 | contentsToViewport ( cx, cy, vx,vy); | 1120 | contentsToViewport ( cx, cy, vx,vy); |
1116 | // qDebug(" %d %d %d %d ", cx, cy, cw,ch) ; | 1121 | // qDebug(" %d %d %d %d ", cx, cy, cw,ch) ; |
1117 | if ( !(selectionX == cx && cy == mSelectionYTop && cw ==mGridSpacingX && ch == mSelectionHeight ) ) | 1122 | if ( !(selectionX == cx && cy == mSelectionYTop && cw ==mGridSpacingX && ch == mSelectionHeight ) ) |
1118 | bitBlt ( pd, vx, vy, &mPaintPixmap, cx, cy, cw, ch ,CopyROP); | 1123 | bitBlt ( pd, vx, vy, &mPaintPixmap, cx, cy, cw, ch ,CopyROP); |
1119 | 1124 | ||
1120 | if ( mSelectionHeight > 0 ) { | 1125 | if ( mSelectionHeight > 0 ) { |
1121 | //qDebug("---- %d %d %d %d ", selectionX, mSelectionYTop, mGridSpacingX, mSelectionHeight ); | 1126 | //qDebug("---- %d %d %d %d ", selectionX, mSelectionYTop, mGridSpacingX, mSelectionHeight ); |
1122 | if ( ( cx + cw ) >= selectionX && cx <= ( selectionX + mGridSpacingX ) && | 1127 | if ( ( cx + cw ) >= selectionX && cx <= ( selectionX + mGridSpacingX ) && |
1123 | ( cy + ch ) >= mSelectionYTop && cy <= ( mSelectionYTop + mSelectionHeight ) ) { | 1128 | ( cy + ch ) >= mSelectionYTop && cy <= ( mSelectionYTop + mSelectionHeight ) ) { |
1124 | contentsToViewport ( selectionX, mSelectionYTop, vx,vy); | 1129 | contentsToViewport ( selectionX, mSelectionYTop, vx,vy); |
1125 | bitBlt ( pd, vx+1, vy, &mHighlightPixmap, 0, mSelectionYTop, mGridSpacingX-1, mSelectionHeight ,CopyROP); | 1130 | bitBlt ( pd, vx+1, vy, &mHighlightPixmap, 0, mSelectionYTop, mGridSpacingX-1, mSelectionHeight ,CopyROP); |
1126 | } | 1131 | } |
1127 | } | 1132 | } |
1128 | //qDebug("btbl "); | 1133 | //qDebug("btbl "); |
1129 | p->begin( pd ); | 1134 | p->begin( pd ); |
1130 | //qDebug("end "); | 1135 | //qDebug("end "); |
1131 | } | 1136 | } |
1132 | 1137 | ||
1133 | void KOAgenda::finishUpdate() | 1138 | void KOAgenda::finishUpdate() |
1134 | { | 1139 | { |
1135 | 1140 | ||
1136 | KOAgendaItem *item; | 1141 | KOAgendaItem *item; |
1137 | globalFlagBlockAgendaItemPaint = 1; | 1142 | globalFlagBlockAgendaItemPaint = 1; |
1138 | for ( item=mItems.first(); item != 0; item=mItems.next() ) { | 1143 | for ( item=mItems.first(); item != 0; item=mItems.next() ) { |
1139 | if ( !item->isVisible() ) | 1144 | if ( !item->isVisible() ) |
1140 | item->show(); | 1145 | item->show(); |
1141 | 1146 | ||
1142 | } | 1147 | } |
1143 | globalFlagBlockAgendaItemUpdate = 0; | 1148 | globalFlagBlockAgendaItemUpdate = 0; |
1144 | for ( item=mItems.first(); item != 0; item=mItems.next() ) { | 1149 | for ( item=mItems.first(); item != 0; item=mItems.next() ) { |
1145 | item->repaintMe( ); | 1150 | item->repaintMe( ); |
1146 | } | 1151 | } |
1147 | globalFlagBlockAgendaItemUpdate = 1; | 1152 | globalFlagBlockAgendaItemUpdate = 1; |
1148 | qApp->processEvents(); | 1153 | qApp->processEvents(); |
1149 | globalFlagBlockAgendaItemPaint = 0; | 1154 | globalFlagBlockAgendaItemPaint = 0; |
1150 | for ( item=mItems.first(); item != 0; item=mItems.next() ) { | 1155 | for ( item=mItems.first(); item != 0; item=mItems.next() ) { |
1151 | item->repaint( false ); | 1156 | item->repaint( false ); |
1152 | } | 1157 | } |
1153 | 1158 | ||
1154 | } | 1159 | } |
1155 | 1160 | ||
1156 | /* | 1161 | /* |
1157 | Draw grid in the background of the agenda. | 1162 | Draw grid in the background of the agenda. |
1158 | */ | 1163 | */ |
1159 | void KOAgenda::drawContentsToPainter( QPainter* paint, bool backgroundOnly )// int cx, int cy, int cw, int ch) | 1164 | void KOAgenda::drawContentsToPainter( QPainter* paint, bool backgroundOnly )// int cx, int cy, int cw, int ch) |
1160 | { | 1165 | { |
1161 | 1166 | ||
1162 | 1167 | ||
1163 | if ( ! mGridSpacingX || ! mGridSpacingY ||! mHolidayMask ) | 1168 | if ( ! mGridSpacingX || ! mGridSpacingY ||! mHolidayMask ) |
1164 | return; | 1169 | return; |
1165 | if ( globalFlagBlockAgenda > 1 && globalFlagBlockAgenda < 4 ) | 1170 | if ( globalFlagBlockAgenda > 1 && globalFlagBlockAgenda < 4 ) |
1166 | return; | 1171 | return; |
1167 | int cx = 0, cy = 0, cw = contentsWidth(), ch = contentsHeight(); | 1172 | int cx = 0, cy = 0, cw = contentsWidth(), ch = contentsHeight(); |
1168 | if ( ch < 1 ) | 1173 | if ( ch < 1 ) |
1169 | ch = 1; | 1174 | ch = 1; |
1170 | if ( mPaintPixmap.width() < contentsWidth()+42 || mPaintPixmap.height() < ch ) { | 1175 | if ( mPaintPixmap.width() < contentsWidth()+42 || mPaintPixmap.height() < ch ) { |
1171 | mPaintPixmap.resize( contentsWidth()+42, ch ); | 1176 | mPaintPixmap.resize( contentsWidth()+42, ch ); |
1172 | } | 1177 | } |
1173 | mCurPixWid = contentsWidth(); | 1178 | mCurPixWid = contentsWidth(); |
1174 | mCurPixHei = ch; | 1179 | mCurPixHei = ch; |
1175 | if ( mHighlightPixmap.width() < mGridSpacingX-1 || mHighlightPixmap.height() < ch ) { | 1180 | if ( mHighlightPixmap.width() < mGridSpacingX-1 || mHighlightPixmap.height() < ch ) { |
1176 | mHighlightPixmap.resize( mGridSpacingX-1, ch ); | 1181 | mHighlightPixmap.resize( mGridSpacingX-1, ch ); |
1177 | mHighlightPixmap.fill ( KOPrefs::instance()->mHighlightColor ); | 1182 | mHighlightPixmap.fill ( KOPrefs::instance()->mHighlightColor ); |
1178 | } | 1183 | } |
1179 | mPixPainter.begin( &mPaintPixmap) ; | 1184 | mPixPainter.begin( &mPaintPixmap) ; |
1180 | //qDebug("wid %d hei %d ",mPaintPixmap.width(),mPaintPixmap.height() ); | 1185 | //qDebug("wid %d hei %d ",mPaintPixmap.width(),mPaintPixmap.height() ); |
1181 | QPainter * p ; | 1186 | QPainter * p ; |
1182 | if (paint == 0) { | 1187 | if (paint == 0) { |
1183 | mPaintPixmap.fill(KOPrefs::instance()->mAgendaBgColor); | 1188 | mPaintPixmap.fill(KOPrefs::instance()->mAgendaBgColor); |
1184 | p = &mPixPainter; | 1189 | p = &mPixPainter; |
1185 | } | 1190 | } |
1186 | else | 1191 | else |
1187 | p = paint ; | 1192 | p = paint ; |
1188 | // qDebug("++++++KOAgenda::drawContentsTo Painter %d %d %d %d ", cx, cy, cw, ch); | 1193 | // qDebug("++++++KOAgenda::drawContentsTo Painter %d %d %d %d ", cx, cy, cw, ch); |
1189 | 1194 | ||
1190 | //--cx;++cw; | 1195 | //--cx;++cw; |
1191 | int lGridSpacingY = mGridSpacingY*2; | 1196 | int lGridSpacingY = mGridSpacingY*2; |
1192 | int selDay; | 1197 | int selDay; |
1193 | if ( !backgroundOnly ) | 1198 | if ( !backgroundOnly ) |
1194 | for ( selDay = 0; selDay < mSelectedDates.count(); ++selDay) | 1199 | for ( selDay = 0; selDay < mSelectedDates.count(); ++selDay) |
1195 | { | 1200 | { |
1196 | if ( mSelectedDates[selDay] == QDateTime::currentDateTime ().date() && KOPrefs::instance()->mHighlightCurrentDay) { | 1201 | if ( mSelectedDates[selDay] == QDateTime::currentDateTime ().date() && KOPrefs::instance()->mHighlightCurrentDay) { |
1197 | int x1 = cx; | 1202 | int x1 = cx; |
1198 | int y1 = 0; | 1203 | int y1 = 0; |
1199 | if (y1 < cy) y1 = cy; | 1204 | if (y1 < cy) y1 = cy; |
1200 | int x2 = cx+cw-1; | 1205 | int x2 = cx+cw-1; |
1201 | int y2 = contentsHeight(); | 1206 | int y2 = contentsHeight(); |
1202 | if (y2 > cy+ch-1) y2=cy+ch-1; | 1207 | if (y2 > cy+ch-1) y2=cy+ch-1; |
1203 | if (x2 >= x1 && y2 >= y1) { | 1208 | if (x2 >= x1 && y2 >= y1) { |
1204 | int gxStart = selDay; | 1209 | int gxStart = selDay; |
1205 | int gxEnd = gxStart ; | 1210 | int gxEnd = gxStart ; |
1206 | int xStart = KOGlobals::self()->reverseLayout() ? | 1211 | int xStart = KOGlobals::self()->reverseLayout() ? |
1207 | (mColumns - 1 - gxStart)*mGridSpacingX : | 1212 | (mColumns - 1 - gxStart)*mGridSpacingX : |
1208 | gxStart*mGridSpacingX; | 1213 | gxStart*mGridSpacingX; |
1209 | if (xStart < x1) xStart = x1; | 1214 | if (xStart < x1) xStart = x1; |
1210 | int xEnd = KOGlobals::self()->reverseLayout() ? | 1215 | int xEnd = KOGlobals::self()->reverseLayout() ? |
1211 | (mColumns - gxStart)*mGridSpacingX-1 : | 1216 | (mColumns - gxStart)*mGridSpacingX-1 : |
1212 | (gxStart+1)*mGridSpacingX-1; | 1217 | (gxStart+1)*mGridSpacingX-1; |
1213 | if (xEnd > x2) xEnd = x2; | 1218 | if (xEnd > x2) xEnd = x2; |
1214 | if ( KOPrefs::instance()->mUseHighlightLightColor ) | 1219 | if ( KOPrefs::instance()->mUseHighlightLightColor ) |
1215 | p->fillRect(xStart,y1,xEnd-xStart+1,y2-y1+1, | 1220 | p->fillRect(xStart,y1,xEnd-xStart+1,y2-y1+1, |
1216 | KOPrefs::instance()->mAgendaBgColor.light()); | 1221 | KOPrefs::instance()->mAgendaBgColor.light()); |
1217 | else | 1222 | else |
1218 | p->fillRect(xStart,y1,xEnd-xStart+1,y2-y1+1, | 1223 | p->fillRect(xStart,y1,xEnd-xStart+1,y2-y1+1, |
1219 | KOPrefs::instance()->mAgendaBgColor.dark()); | 1224 | KOPrefs::instance()->mAgendaBgColor.dark()); |
1220 | 1225 | ||
1221 | } | 1226 | } |
1222 | } | 1227 | } |
1223 | } | 1228 | } |
1224 | // Highlight working hours | 1229 | // Highlight working hours |
1225 | 1230 | ||
1226 | if ( !backgroundOnly ) | 1231 | if ( !backgroundOnly ) |
1227 | if (mWorkingHoursEnable) { | 1232 | if (mWorkingHoursEnable) { |
1228 | int x1 = cx; | 1233 | int x1 = cx; |
1229 | int y1 = mWorkingHoursYTop; | 1234 | int y1 = mWorkingHoursYTop; |
1230 | if (y1 < cy) y1 = cy; | 1235 | if (y1 < cy) y1 = cy; |
1231 | int x2 = cx+cw-1; | 1236 | int x2 = cx+cw-1; |
1232 | // int x2 = mGridSpacingX * 5 - 1; | 1237 | // int x2 = mGridSpacingX * 5 - 1; |
1233 | // if (x2 > cx+cw-1) x2 = cx + cw - 1; | 1238 | // if (x2 > cx+cw-1) x2 = cx + cw - 1; |
1234 | int y2 = mWorkingHoursYBottom; | 1239 | int y2 = mWorkingHoursYBottom; |
1235 | if (y2 > cy+ch-1) y2=cy+ch-1; | 1240 | if (y2 > cy+ch-1) y2=cy+ch-1; |
1236 | 1241 | ||
1237 | if (x2 >= x1 && y2 >= y1) { | 1242 | if (x2 >= x1 && y2 >= y1) { |
1238 | // qDebug("x1 %d mGridSpacingX %d ", x1, mGridSpacingX ); | 1243 | // qDebug("x1 %d mGridSpacingX %d ", x1, mGridSpacingX ); |
1239 | int gxStart = x1/mGridSpacingX; | 1244 | int gxStart = x1/mGridSpacingX; |
1240 | int gxEnd = x2/mGridSpacingX; | 1245 | int gxEnd = x2/mGridSpacingX; |
1241 | while(gxStart <= gxEnd) { | 1246 | while(gxStart <= gxEnd) { |
1242 | if (gxStart < int(mHolidayMask->count()) && | 1247 | if (gxStart < int(mHolidayMask->count()) && |
1243 | !mHolidayMask->at(gxStart)) { | 1248 | !mHolidayMask->at(gxStart)) { |
1244 | int xStart = KOGlobals::self()->reverseLayout() ? | 1249 | int xStart = KOGlobals::self()->reverseLayout() ? |
1245 | (mColumns - 1 - gxStart)*mGridSpacingX : | 1250 | (mColumns - 1 - gxStart)*mGridSpacingX : |
1246 | gxStart*mGridSpacingX; | 1251 | gxStart*mGridSpacingX; |
1247 | if (xStart < x1) xStart = x1; | 1252 | if (xStart < x1) xStart = x1; |
1248 | int xEnd = KOGlobals::self()->reverseLayout() ? | 1253 | int xEnd = KOGlobals::self()->reverseLayout() ? |
1249 | (mColumns - gxStart)*mGridSpacingX-1 : | 1254 | (mColumns - gxStart)*mGridSpacingX-1 : |
1250 | (gxStart+1)*mGridSpacingX-1; | 1255 | (gxStart+1)*mGridSpacingX-1; |
1251 | if (xEnd > x2) xEnd = x2; | 1256 | if (xEnd > x2) xEnd = x2; |
1252 | if ( mSelectedDates[gxStart] == QDateTime::currentDateTime ().date()&& KOPrefs::instance()->mHighlightCurrentDay ) { | 1257 | if ( mSelectedDates[gxStart] == QDateTime::currentDateTime ().date()&& KOPrefs::instance()->mHighlightCurrentDay ) { |
1253 | if ( KOPrefs::instance()->mUseHighlightLightColor ) | 1258 | if ( KOPrefs::instance()->mUseHighlightLightColor ) |
1254 | p->fillRect(xStart,y1,xEnd-xStart+1,y2-y1+1, | 1259 | p->fillRect(xStart,y1,xEnd-xStart+1,y2-y1+1, |
1255 | KOPrefs::instance()->mWorkingHoursColor.light()); | 1260 | KOPrefs::instance()->mWorkingHoursColor.light()); |
1256 | else | 1261 | else |
1257 | p->fillRect(xStart,y1,xEnd-xStart+1,y2-y1+1, | 1262 | p->fillRect(xStart,y1,xEnd-xStart+1,y2-y1+1, |
1258 | KOPrefs::instance()->mWorkingHoursColor.dark()); | 1263 | KOPrefs::instance()->mWorkingHoursColor.dark()); |
1259 | } else { | 1264 | } else { |
1260 | p->fillRect(xStart,y1,xEnd-xStart+1,y2-y1+1, | 1265 | p->fillRect(xStart,y1,xEnd-xStart+1,y2-y1+1, |
1261 | KOPrefs::instance()->mWorkingHoursColor); | 1266 | KOPrefs::instance()->mWorkingHoursColor); |
1262 | } | 1267 | } |
1263 | } | 1268 | } |
1264 | ++gxStart; | 1269 | ++gxStart; |
1265 | } | 1270 | } |
1266 | } | 1271 | } |
1267 | } | 1272 | } |
1268 | /* | 1273 | /* |
1269 | int selectionX = KOGlobals::self()->reverseLayout() ? | 1274 | int selectionX = KOGlobals::self()->reverseLayout() ? |
1270 | (mColumns - 1 - mSelectionCellX) * mGridSpacingX : | 1275 | (mColumns - 1 - mSelectionCellX) * mGridSpacingX : |
1271 | mSelectionCellX * mGridSpacingX; | 1276 | mSelectionCellX * mGridSpacingX; |
1272 | 1277 | ||
1273 | // Draw selection | 1278 | // Draw selection |
1274 | if ( ( cx + cw ) >= selectionX && cx <= ( selectionX + mGridSpacingX ) && | 1279 | if ( ( cx + cw ) >= selectionX && cx <= ( selectionX + mGridSpacingX ) && |
1275 | ( cy + ch ) >= mSelectionYTop && cy <= ( mSelectionYTop + mSelectionHeight ) ) { | 1280 | ( cy + ch ) >= mSelectionYTop && cy <= ( mSelectionYTop + mSelectionHeight ) ) { |
1276 | // TODO: paint only part within cx,cy,cw,ch | 1281 | // TODO: paint only part within cx,cy,cw,ch |
1277 | p->fillRect( selectionX, mSelectionYTop, mGridSpacingX, | 1282 | p->fillRect( selectionX, mSelectionYTop, mGridSpacingX, |
1278 | mSelectionHeight, KOPrefs::instance()->mHighlightColor ); | 1283 | mSelectionHeight, KOPrefs::instance()->mHighlightColor ); |
1279 | } | 1284 | } |
1280 | */ | 1285 | */ |
1281 | // Draw vertical lines of grid | 1286 | // Draw vertical lines of grid |
1282 | 1287 | ||
1283 | int x = ((int)(cx/mGridSpacingX))*mGridSpacingX; | 1288 | int x = ((int)(cx/mGridSpacingX))*mGridSpacingX; |
1284 | if ( mGridSpacingX > 0 ) { | 1289 | if ( mGridSpacingX > 0 ) { |
1285 | while (x < cx + cw) { | 1290 | while (x < cx + cw) { |
1286 | p->drawLine(x,cy,x,cy+ch); | 1291 | p->drawLine(x,cy,x,cy+ch); |
1287 | x+=mGridSpacingX; | 1292 | x+=mGridSpacingX; |
1288 | } | 1293 | } |
1289 | } | 1294 | } |
1290 | // Draw horizontal lines of grid | 1295 | // Draw horizontal lines of grid |
1291 | int y = ((int)(cy/lGridSpacingY))*lGridSpacingY; | 1296 | int y = ((int)(cy/lGridSpacingY))*lGridSpacingY; |
1292 | if ( lGridSpacingY > 0 ) { | 1297 | if ( lGridSpacingY > 0 ) { |
1293 | while (y < cy + ch) { | 1298 | while (y < cy + ch) { |
1294 | p->setPen( SolidLine ); | 1299 | p->setPen( SolidLine ); |
1295 | p->drawLine(cx,y,cx+cw,y); | 1300 | p->drawLine(cx,y,cx+cw,y); |
1296 | y+=lGridSpacingY; | 1301 | y+=lGridSpacingY; |
1297 | p->setPen( DotLine ); | 1302 | p->setPen( DotLine ); |
1298 | p->drawLine(cx,y,cx+cw,y); | 1303 | p->drawLine(cx,y,cx+cw,y); |
1299 | y+=lGridSpacingY; | 1304 | y+=lGridSpacingY; |
1300 | } | 1305 | } |
1301 | p->setPen( SolidLine ); | 1306 | p->setPen( SolidLine ); |
1302 | } | 1307 | } |
1303 | mPixPainter.end() ; | 1308 | mPixPainter.end() ; |
1304 | } | 1309 | } |
1305 | 1310 | ||
1306 | /* | 1311 | /* |
1307 | Convert srcollview contents coordinates to agenda grid coordinates. | 1312 | Convert srcollview contents coordinates to agenda grid coordinates. |
1308 | */ | 1313 | */ |
1309 | void KOAgenda::contentsToGrid (int x, int y, int& gx, int& gy) | 1314 | void KOAgenda::contentsToGrid (int x, int y, int& gx, int& gy) |
1310 | { | 1315 | { |
1311 | gx = KOGlobals::self()->reverseLayout() ? mColumns - 1 - x/mGridSpacingX : | 1316 | gx = KOGlobals::self()->reverseLayout() ? mColumns - 1 - x/mGridSpacingX : |
1312 | x/mGridSpacingX; | 1317 | x/mGridSpacingX; |
1313 | gy = y/mGridSpacingY; | 1318 | gy = y/mGridSpacingY; |
1314 | } | 1319 | } |
1315 | 1320 | ||
1316 | /* | 1321 | /* |
1317 | Convert agenda grid coordinates to scrollview contents coordinates. | 1322 | Convert agenda grid coordinates to scrollview contents coordinates. |
1318 | */ | 1323 | */ |
1319 | void KOAgenda::gridToContents (int gx, int gy, int& x, int& y) | 1324 | void KOAgenda::gridToContents (int gx, int gy, int& x, int& y) |
1320 | { | 1325 | { |
1321 | x = KOGlobals::self()->reverseLayout() ? (mColumns - 1 - gx)*mGridSpacingX: | 1326 | x = KOGlobals::self()->reverseLayout() ? (mColumns - 1 - gx)*mGridSpacingX: |
1322 | gx*mGridSpacingX; | 1327 | gx*mGridSpacingX; |
1323 | y = gy*mGridSpacingY; | 1328 | y = gy*mGridSpacingY; |
1324 | } | 1329 | } |
1325 | 1330 | ||
1326 | 1331 | ||
1327 | /* | 1332 | /* |
1328 | Return Y coordinate corresponding to time. Coordinates are rounded to fit into | 1333 | Return Y coordinate corresponding to time. Coordinates are rounded to fit into |
1329 | the grid. | 1334 | the grid. |
1330 | */ | 1335 | */ |
1331 | int KOAgenda::timeToY(const QTime &time) | 1336 | int KOAgenda::timeToY(const QTime &time) |
1332 | { | 1337 | { |
1333 | int minutesPerCell = 24 * 60 / mRows; | 1338 | int minutesPerCell = 24 * 60 / mRows; |
1334 | int timeMinutes = time.hour() * 60 + time.minute(); | 1339 | int timeMinutes = time.hour() * 60 + time.minute(); |
1335 | int Y = (timeMinutes + (minutesPerCell / 2)) / minutesPerCell; | 1340 | int Y = (timeMinutes + (minutesPerCell / 2)) / minutesPerCell; |
1336 | return Y; | 1341 | return Y; |
1337 | } | 1342 | } |
1338 | 1343 | ||
1339 | 1344 | ||
1340 | /* | 1345 | /* |
1341 | Return time corresponding to cell y coordinate. Coordinates are rounded to | 1346 | Return time corresponding to cell y coordinate. Coordinates are rounded to |
1342 | fit into the grid. | 1347 | fit into the grid. |
1343 | */ | 1348 | */ |
1344 | QTime KOAgenda::gyToTime(int gy) | 1349 | QTime KOAgenda::gyToTime(int gy) |
1345 | { | 1350 | { |
1346 | 1351 | ||
1347 | int secondsPerCell = 24 * 60 * 60/ mRows; | 1352 | int secondsPerCell = 24 * 60 * 60/ mRows; |
1348 | 1353 | ||
1349 | int timeSeconds = secondsPerCell * gy; | 1354 | int timeSeconds = secondsPerCell * gy; |
1350 | 1355 | ||
1351 | QTime time( 0, 0, 0 ); | 1356 | QTime time( 0, 0, 0 ); |
1352 | if ( timeSeconds < 24 * 60 * 60 ) { | 1357 | if ( timeSeconds < 24 * 60 * 60 ) { |
1353 | time = time.addSecs(timeSeconds); | 1358 | time = time.addSecs(timeSeconds); |
1354 | } else { | 1359 | } else { |
1355 | time.setHMS( 23, 59, 59 ); | 1360 | time.setHMS( 23, 59, 59 ); |
1356 | } | 1361 | } |
1357 | 1362 | ||
1358 | return time; | 1363 | return time; |
1359 | } | 1364 | } |
1360 | 1365 | ||
1361 | void KOAgenda::setStartHour(int startHour) | 1366 | void KOAgenda::setStartHour(int startHour) |
1362 | { | 1367 | { |
1363 | int startCell = startHour * mRows / 24; | 1368 | int startCell = startHour * mRows / 24; |
1364 | setContentsPos(0,startCell * gridSpacingY()); | 1369 | setContentsPos(0,startCell * gridSpacingY()); |
1365 | } | 1370 | } |
1366 | void KOAgenda::hideUnused() | 1371 | void KOAgenda::hideUnused() |
1367 | { | 1372 | { |
1368 | // experimental only | 1373 | // experimental only |
1369 | // return; | 1374 | // return; |
1370 | KOAgendaItem *item; | 1375 | KOAgendaItem *item; |
1371 | for ( item=mUnusedItems.first(); item != 0; item=mUnusedItems.next() ) { | 1376 | for ( item=mUnusedItems.first(); item != 0; item=mUnusedItems.next() ) { |
1372 | item->hide(); | 1377 | item->hide(); |
1373 | } | 1378 | } |
1374 | } | 1379 | } |
1375 | 1380 | ||
1376 | 1381 | ||
1377 | KOAgendaItem *KOAgenda::getNewItem(Incidence * event,QDate qd, QWidget* view) | 1382 | KOAgendaItem *KOAgenda::getNewItem(Incidence * event,QDate qd, QWidget* view) |
1378 | { | 1383 | { |
1379 | 1384 | ||
1380 | KOAgendaItem *fi; | 1385 | KOAgendaItem *fi; |
1381 | for ( fi=mUnusedItems.first(); fi != 0; fi=mUnusedItems.next() ) { | 1386 | for ( fi=mUnusedItems.first(); fi != 0; fi=mUnusedItems.next() ) { |
1382 | if ( fi->incidence() == event ) { | 1387 | if ( fi->incidence() == event ) { |
1383 | mUnusedItems.remove(); | 1388 | mUnusedItems.remove(); |
1384 | fi->init( event, qd ); | 1389 | fi->init( event, qd ); |
1385 | return fi; | 1390 | return fi; |
1386 | } | 1391 | } |
1387 | } | 1392 | } |
1388 | fi=mUnusedItems.first(); | 1393 | fi=mUnusedItems.first(); |
1389 | if ( fi ) { | 1394 | if ( fi ) { |
1390 | mUnusedItems.remove(); | 1395 | mUnusedItems.remove(); |
1391 | fi->init( event, qd ); | 1396 | fi->init( event, qd ); |
1392 | return fi; | 1397 | return fi; |
1393 | } | 1398 | } |
1394 | // qDebug("new KOAgendaItem "); | 1399 | // qDebug("new KOAgendaItem "); |
1395 | 1400 | ||
1396 | KOAgendaItem* agendaItem = new KOAgendaItem( event, qd, view, mAllDayMode ); | 1401 | KOAgendaItem* agendaItem = new KOAgendaItem( event, qd, view, mAllDayMode ); |
1397 | agendaItem->installEventFilter(this); | 1402 | agendaItem->installEventFilter(this); |
1398 | addChild(agendaItem,0,0); | 1403 | addChild(agendaItem,0,0); |
1399 | return agendaItem; | 1404 | return agendaItem; |
1400 | } | 1405 | } |
1401 | KOAgendaItem * KOAgenda::getItemForTodo ( Todo * todo ) | 1406 | KOAgendaItem * KOAgenda::getItemForTodo ( Todo * todo ) |
1402 | { | 1407 | { |
1403 | KOAgendaItem *item; | 1408 | KOAgendaItem *item; |
1404 | for ( item=mItems.first(); item != 0; item=mItems.next() ) { | 1409 | for ( item=mItems.first(); item != 0; item=mItems.next() ) { |
1405 | if ( item->incidence() == todo ) { | 1410 | if ( item->incidence() == todo ) { |
1406 | mItems.remove(); | 1411 | mItems.remove(); |
1407 | return item; | 1412 | return item; |
1408 | } | 1413 | } |
1409 | } | 1414 | } |
1410 | return 0; | 1415 | return 0; |
1411 | } | 1416 | } |
1412 | 1417 | ||
1413 | 1418 | ||
1414 | void KOAgenda::updateTodo( Todo * todo, int days, bool remove) | 1419 | void KOAgenda::updateTodo( Todo * todo, int days, bool remove) |
1415 | { | 1420 | { |
1416 | 1421 | ||
1417 | KOAgendaItem *item; | 1422 | KOAgendaItem *item; |
1418 | item = getItemForTodo ( todo ); | 1423 | item = getItemForTodo ( todo ); |
1419 | //qDebug("KOAgenda::updateTodo %d %d %d %d", this, todo, days, remove); | 1424 | //qDebug("KOAgenda::updateTodo %d %d %d %d", this, todo, days, remove); |
1420 | if ( item ) { | 1425 | if ( item ) { |
1421 | blockSignals( true ); | 1426 | blockSignals( true ); |
1422 | //qDebug("item found "); | 1427 | //qDebug("item found "); |
1423 | item->hide(); | 1428 | item->hide(); |
1424 | item->setCellX(-2, -1 ); | 1429 | item->setCellX(-2, -1 ); |
1425 | item->select(false); | 1430 | item->select(false); |
1426 | mUnusedItems.append( item ); | 1431 | mUnusedItems.append( item ); |
1427 | mItems.remove( item ); | 1432 | mItems.remove( item ); |
1428 | QPtrList<KOAgendaItem> oldconflictItems = item->conflictItems(); | 1433 | QPtrList<KOAgendaItem> oldconflictItems = item->conflictItems(); |
1429 | KOAgendaItem *itemit; | 1434 | KOAgendaItem *itemit; |
1430 | //globalFlagBlockAgendaItemPaint = 1; | 1435 | //globalFlagBlockAgendaItemPaint = 1; |
1431 | for ( itemit=oldconflictItems.first(); itemit != 0; | 1436 | for ( itemit=oldconflictItems.first(); itemit != 0; |
1432 | itemit=oldconflictItems.next() ) { | 1437 | itemit=oldconflictItems.next() ) { |
1433 | if ( itemit != item ) | 1438 | if ( itemit != item ) |
1434 | placeSubCells(itemit); | 1439 | placeSubCells(itemit); |
1435 | } | 1440 | } |
1436 | qApp->processEvents(); | 1441 | qApp->processEvents(); |
1437 | //globalFlagBlockAgendaItemPaint = 0; | 1442 | //globalFlagBlockAgendaItemPaint = 0; |
1438 | for ( itemit=oldconflictItems.first(); itemit != 0; | 1443 | for ( itemit=oldconflictItems.first(); itemit != 0; |
1439 | itemit=oldconflictItems.next() ) { | 1444 | itemit=oldconflictItems.next() ) { |
1440 | globalFlagBlockAgendaItemUpdate = 0; | 1445 | globalFlagBlockAgendaItemUpdate = 0; |
1441 | if ( itemit != item ) | 1446 | if ( itemit != item ) |
1442 | itemit->repaintMe(); | 1447 | itemit->repaintMe(); |
1443 | globalFlagBlockAgendaItemUpdate = 1; | 1448 | globalFlagBlockAgendaItemUpdate = 1; |
1444 | itemit->repaint(); | 1449 | itemit->repaint(); |
1445 | } | 1450 | } |
1446 | blockSignals( false ); | 1451 | blockSignals( false ); |
1447 | } | 1452 | } |
1448 | if ( remove ) { | 1453 | if ( remove ) { |
1449 | //qDebug("remove****************************************** "); | 1454 | //qDebug("remove****************************************** "); |
1450 | return; | 1455 | return; |
1451 | } | 1456 | } |
1452 | //qDebug("updateTodo+++++++++++++++++++++++++++++++++++++ "); | 1457 | //qDebug("updateTodo+++++++++++++++++++++++++++++++++++++ "); |
1453 | bool overdue = (!todo->isCompleted()) && (todo->dtDue() < QDate::currentDate())&& ( KOPrefs::instance()->mShowTodoInAgenda ); | 1458 | bool overdue = (!todo->isCompleted()) && (todo->dtDue() < QDate::currentDate())&& ( KOPrefs::instance()->mShowTodoInAgenda ); |
1454 | QDate currentDate; | 1459 | QDate currentDate; |
1455 | if ( overdue ) { | 1460 | if ( overdue ) { |
1456 | currentDate = QDate::currentDate(); | 1461 | currentDate = QDate::currentDate(); |
1457 | days += todo->dtDue().date().daysTo( currentDate ); | 1462 | days += todo->dtDue().date().daysTo( currentDate ); |
1458 | } | 1463 | } |
1459 | else | 1464 | else |
1460 | currentDate = todo->dtDue().date(); | 1465 | currentDate = todo->dtDue().date(); |
1461 | 1466 | ||
1462 | if ( todo->doesFloat() || overdue ) { | 1467 | if ( todo->doesFloat() || overdue ) { |
1463 | if ( ! mAllDayMode ) return; | 1468 | if ( ! mAllDayMode ) return; |
1464 | // aldayagenda | 1469 | // aldayagenda |
1465 | globalFlagBlockAgendaItemPaint = 1; | 1470 | globalFlagBlockAgendaItemPaint = 1; |
1466 | item = insertAllDayItem(todo, currentDate,days, days); | 1471 | item = insertAllDayItem(todo, currentDate,days, days); |
1467 | item->show(); | 1472 | item->show(); |
1468 | 1473 | ||
1469 | } | 1474 | } |
1470 | else { | 1475 | else { |
1471 | if ( mAllDayMode ) return; | 1476 | if ( mAllDayMode ) return; |
1472 | // mAgenda | 1477 | // mAgenda |
1473 | globalFlagBlockAgendaItemPaint = 1; | 1478 | globalFlagBlockAgendaItemPaint = 1; |
1474 | int endY = timeToY(todo->dtDue().time()) - 1; | 1479 | int endY = timeToY(todo->dtDue().time()) - 1; |
1475 | int hi = 12/KOPrefs::instance()->mHourSize; | 1480 | int hi = 12/KOPrefs::instance()->mHourSize; |
1476 | int startY = endY - 1-hi; | 1481 | int startY = endY - 1-hi; |
1477 | item = insertItem(todo,currentDate,days,startY,endY); | 1482 | item = insertItem(todo,currentDate,days,startY,endY); |
1478 | item->show(); | 1483 | item->show(); |
1479 | } | 1484 | } |
1480 | qApp->processEvents(); | 1485 | qApp->processEvents(); |
1481 | globalFlagBlockAgendaItemPaint = 0; | 1486 | globalFlagBlockAgendaItemPaint = 0; |
1482 | QPtrList<KOAgendaItem> oldconflictItems = item->conflictItems(); | 1487 | QPtrList<KOAgendaItem> oldconflictItems = item->conflictItems(); |
1483 | KOAgendaItem *itemit; | 1488 | KOAgendaItem *itemit; |
1484 | for ( itemit=oldconflictItems.first(); itemit != 0; | 1489 | for ( itemit=oldconflictItems.first(); itemit != 0; |
1485 | itemit=oldconflictItems.next() ) { | 1490 | itemit=oldconflictItems.next() ) { |
1486 | globalFlagBlockAgendaItemUpdate = 0; | 1491 | globalFlagBlockAgendaItemUpdate = 0; |
1487 | itemit->repaintMe(); | 1492 | itemit->repaintMe(); |
1488 | globalFlagBlockAgendaItemUpdate = 1; | 1493 | globalFlagBlockAgendaItemUpdate = 1; |
1489 | itemit->repaint(); | 1494 | itemit->repaint(); |
1490 | } | 1495 | } |
1491 | globalFlagBlockAgendaItemUpdate = 0; | 1496 | globalFlagBlockAgendaItemUpdate = 0; |
1492 | item->repaintMe(); | 1497 | item->repaintMe(); |
1493 | globalFlagBlockAgendaItemUpdate = 1; | 1498 | globalFlagBlockAgendaItemUpdate = 1; |
1494 | item->repaint(); | 1499 | item->repaint(); |
1495 | } | 1500 | } |
1496 | /* | 1501 | /* |
1497 | Insert KOAgendaItem into agenda. | 1502 | Insert KOAgendaItem into agenda. |
1498 | */ | 1503 | */ |
1499 | KOAgendaItem *KOAgenda::insertItem (Incidence *event,QDate qd,int X,int YTop,int YBottom) | 1504 | KOAgendaItem *KOAgenda::insertItem (Incidence *event,QDate qd,int X,int YTop,int YBottom) |
1500 | { | 1505 | { |
1501 | //kdDebug() << "KOAgenda::insertItem:" << event->summary() << "-" << qd.toString() << " ;top, bottom:" << YTop << "," << YBottom << endl; | 1506 | //kdDebug() << "KOAgenda::insertItem:" << event->summary() << "-" << qd.toString() << " ;top, bottom:" << YTop << "," << YBottom << endl; |
1502 | 1507 | ||
1503 | if (mAllDayMode) { | 1508 | if (mAllDayMode) { |
1504 | kdDebug() << "KOAgenda: calling insertItem in all-day mode is illegal." << endl; | 1509 | kdDebug() << "KOAgenda: calling insertItem in all-day mode is illegal." << endl; |
1505 | return 0; | 1510 | return 0; |
1506 | } | 1511 | } |
1507 | 1512 | ||
1508 | KOAgendaItem *agendaItem = getNewItem(event,qd,viewport()); | 1513 | KOAgendaItem *agendaItem = getNewItem(event,qd,viewport()); |
1509 | //agendaItem->setFrameStyle(WinPanel|Raised); | 1514 | //agendaItem->setFrameStyle(WinPanel|Raised); |
1510 | 1515 | ||
1511 | int YSize = YBottom - YTop + 1; | 1516 | int YSize = YBottom - YTop + 1; |
1512 | if (YSize < 0) { | 1517 | if (YSize < 0) { |
1513 | kdDebug() << "KOAgenda::insertItem(): Text: " << agendaItem->text() << " YSize<0" << endl; | 1518 | kdDebug() << "KOAgenda::insertItem(): Text: " << agendaItem->text() << " YSize<0" << endl; |
1514 | YSize = 1; | 1519 | YSize = 1; |
1515 | } | 1520 | } |
1516 | int iheight = mGridSpacingY * YSize; | 1521 | int iheight = mGridSpacingY * YSize; |
1517 | 1522 | ||
1518 | agendaItem->resize(mGridSpacingX,iheight ); | 1523 | agendaItem->resize(mGridSpacingX,iheight ); |
1519 | agendaItem->setCellXY(X,YTop,YBottom); | 1524 | agendaItem->setCellXY(X,YTop,YBottom); |
1520 | agendaItem->setCellXWidth(X); | 1525 | agendaItem->setCellXWidth(X); |
1521 | 1526 | ||
1522 | //addChild(agendaItem,X*mGridSpacingX,YTop*mGridSpacingY); | 1527 | //addChild(agendaItem,X*mGridSpacingX,YTop*mGridSpacingY); |
1523 | mItems.append(agendaItem); | 1528 | mItems.append(agendaItem); |
1524 | 1529 | ||
1525 | placeSubCells(agendaItem); | 1530 | placeSubCells(agendaItem); |
1526 | 1531 | ||
1527 | //agendaItem->show(); | 1532 | //agendaItem->show(); |
1528 | 1533 | ||
1529 | marcus_bains(); | 1534 | marcus_bains(); |
1530 | 1535 | ||
1531 | return agendaItem; | 1536 | return agendaItem; |
1532 | } | 1537 | } |
1533 | 1538 | ||
1534 | 1539 | ||
1535 | /* | 1540 | /* |
1536 | Insert all-day KOAgendaItem into agenda. | 1541 | Insert all-day KOAgendaItem into agenda. |
1537 | */ | 1542 | */ |
1538 | KOAgendaItem *KOAgenda::insertAllDayItem (Incidence *event,QDate qd,int XBegin,int XEnd) | 1543 | KOAgendaItem *KOAgenda::insertAllDayItem (Incidence *event,QDate qd,int XBegin,int XEnd) |
1539 | { | 1544 | { |
1540 | if (!mAllDayMode) { | 1545 | if (!mAllDayMode) { |
1541 | return 0; | 1546 | return 0; |
1542 | } | 1547 | } |
1543 | 1548 | ||
1544 | KOAgendaItem *agendaItem = getNewItem(event,qd,viewport()); | 1549 | KOAgendaItem *agendaItem = getNewItem(event,qd,viewport()); |
1545 | 1550 | ||
1546 | agendaItem->setCellXY(XBegin,0,0); | 1551 | agendaItem->setCellXY(XBegin,0,0); |
1547 | agendaItem->setCellXWidth(XEnd); | 1552 | agendaItem->setCellXWidth(XEnd); |
1548 | agendaItem->resize(mGridSpacingX * agendaItem->cellWidth(),mGridSpacingY); | 1553 | agendaItem->resize(mGridSpacingX * agendaItem->cellWidth(),mGridSpacingY); |
1549 | 1554 | ||
1550 | //addChild(agendaItem,XBegin*mGridSpacingX,0); | 1555 | //addChild(agendaItem,XBegin*mGridSpacingX,0); |
1551 | mItems.append(agendaItem); | 1556 | mItems.append(agendaItem); |
1552 | 1557 | ||
1553 | placeSubCells(agendaItem); | 1558 | placeSubCells(agendaItem); |
1554 | 1559 | ||
1555 | //agendaItem->show(); | 1560 | //agendaItem->show(); |
1556 | 1561 | ||
1557 | return agendaItem; | 1562 | return agendaItem; |
1558 | } | 1563 | } |
1559 | 1564 | ||
1560 | 1565 | ||
1561 | void KOAgenda::insertMultiItem (Event *event,QDate qd,int XBegin,int XEnd, | 1566 | void KOAgenda::insertMultiItem (Event *event,QDate qd,int XBegin,int XEnd, |
1562 | int YTop,int YBottom) | 1567 | int YTop,int YBottom) |
1563 | { | 1568 | { |
1564 | if (mAllDayMode) { | 1569 | if (mAllDayMode) { |
1565 | ; | 1570 | ; |
1566 | return; | 1571 | return; |
1567 | } | 1572 | } |
1568 | 1573 | ||
1569 | int cellX,cellYTop,cellYBottom; | 1574 | int cellX,cellYTop,cellYBottom; |
1570 | QString newtext; | 1575 | QString newtext; |
1571 | int width = XEnd - XBegin + 1; | 1576 | int width = XEnd - XBegin + 1; |
1572 | int count = 0; | 1577 | int count = 0; |
1573 | KOAgendaItem *current = 0; | 1578 | KOAgendaItem *current = 0; |
1574 | QPtrList<KOAgendaItem> multiItems; | 1579 | QPtrList<KOAgendaItem> multiItems; |
1575 | for (cellX = XBegin;cellX <= XEnd;++cellX) { | 1580 | for (cellX = XBegin;cellX <= XEnd;++cellX) { |
1576 | if (cellX == XBegin) cellYTop = YTop; | 1581 | if (cellX == XBegin) cellYTop = YTop; |
1577 | else cellYTop = 0; | 1582 | else cellYTop = 0; |
1578 | if (cellX == XEnd) cellYBottom = YBottom; | 1583 | if (cellX == XEnd) cellYBottom = YBottom; |
1579 | else cellYBottom = rows() - 1; | 1584 | else cellYBottom = rows() - 1; |
1580 | newtext = QString("(%1/%2): ").arg(++count).arg(width); | 1585 | newtext = QString("(%1/%2): ").arg(++count).arg(width); |
1581 | newtext.append(event->summary()); | 1586 | newtext.append(event->summary()); |
1582 | current = insertItem(event,qd,cellX,cellYTop,cellYBottom); | 1587 | current = insertItem(event,qd,cellX,cellYTop,cellYBottom); |
1583 | current->setText(newtext); | 1588 | current->setText(newtext); |
1584 | multiItems.append(current); | 1589 | multiItems.append(current); |
1585 | } | 1590 | } |
1586 | 1591 | ||
1587 | KOAgendaItem *next = 0; | 1592 | KOAgendaItem *next = 0; |
1588 | KOAgendaItem *last = multiItems.last(); | 1593 | KOAgendaItem *last = multiItems.last(); |
1589 | KOAgendaItem *first = multiItems.first(); | 1594 | KOAgendaItem *first = multiItems.first(); |
1590 | KOAgendaItem *setFirst,*setLast; | 1595 | KOAgendaItem *setFirst,*setLast; |
1591 | current = first; | 1596 | current = first; |
1592 | while (current) { | 1597 | while (current) { |
1593 | next = multiItems.next(); | 1598 | next = multiItems.next(); |
1594 | if (current == first) setFirst = 0; | 1599 | if (current == first) setFirst = 0; |
1595 | else setFirst = first; | 1600 | else setFirst = first; |
diff --git a/korganizer/koagenda.h b/korganizer/koagenda.h index 12943d7..2069b22 100644 --- a/korganizer/koagenda.h +++ b/korganizer/koagenda.h | |||
@@ -1,290 +1,291 @@ | |||
1 | /* | 1 | /* |
2 | This file is part of KOrganizer. | 2 | This file is part of KOrganizer. |
3 | Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> | 3 | Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> |
4 | 4 | ||
5 | This program is free software; you can redistribute it and/or modify | 5 | This program is free software; you can redistribute it and/or modify |
6 | it under the terms of the GNU General Public License as published by | 6 | it under the terms of the GNU General Public License as published by |
7 | the Free Software Foundation; either version 2 of the License, or | 7 | the Free Software Foundation; either version 2 of the License, or |
8 | (at your option) any later version. | 8 | (at your option) any later version. |
9 | 9 | ||
10 | This program is distributed in the hope that it will be useful, | 10 | This program is distributed in the hope that it will be useful, |
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
13 | GNU General Public License for more details. | 13 | GNU General Public License for more details. |
14 | 14 | ||
15 | You should have received a copy of the GNU General Public License | 15 | You should have received a copy of the GNU General Public License |
16 | along with this program; if not, write to the Free Software | 16 | along with this program; if not, write to the Free Software |
17 | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | 17 | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
18 | 18 | ||
19 | As a special exception, permission is given to link this program | 19 | As a special exception, permission is given to link this program |
20 | with any edition of Qt, and distribute the resulting executable, | 20 | with any edition of Qt, and distribute the resulting executable, |
21 | without including the source code for Qt in the source distribution. | 21 | without including the source code for Qt in the source distribution. |
22 | */ | 22 | */ |
23 | #ifndef KOAGENDA_H | 23 | #ifndef KOAGENDA_H |
24 | #define KOAGENDA_H | 24 | #define KOAGENDA_H |
25 | 25 | ||
26 | #include <qscrollview.h> | 26 | #include <qscrollview.h> |
27 | #include <qtimer.h> | 27 | #include <qtimer.h> |
28 | #include <qmemarray.h> | 28 | #include <qmemarray.h> |
29 | #include <qpainter.h> | 29 | #include <qpainter.h> |
30 | #include <qpixmap.h> | 30 | #include <qpixmap.h> |
31 | #include <qguardedptr.h> | 31 | #include <qguardedptr.h> |
32 | 32 | ||
33 | #include "koagendaitem.h" | 33 | #include "koagendaitem.h" |
34 | 34 | ||
35 | class QPopupMenu; | 35 | class QPopupMenu; |
36 | class QTime; | 36 | class QTime; |
37 | class KConfig; | 37 | class KConfig; |
38 | class QFrame; | 38 | class QFrame; |
39 | class KOAgenda; | 39 | class KOAgenda; |
40 | class KCal::Event; | 40 | class KCal::Event; |
41 | class KCal::Todo; | 41 | class KCal::Todo; |
42 | 42 | ||
43 | using namespace KCal; | 43 | using namespace KCal; |
44 | 44 | ||
45 | class MarcusBains : public QFrame { | 45 | class MarcusBains : public QFrame { |
46 | Q_OBJECT | 46 | Q_OBJECT |
47 | public: | 47 | public: |
48 | MarcusBains(KOAgenda *agenda=0,const char *name=0); | 48 | MarcusBains(KOAgenda *agenda=0,const char *name=0); |
49 | virtual ~MarcusBains(); | 49 | virtual ~MarcusBains(); |
50 | 50 | ||
51 | public slots: | 51 | public slots: |
52 | void updateLocation(bool recalculate=false); | 52 | void updateLocation(bool recalculate=false); |
53 | void updateLoc(); | 53 | void updateLoc(); |
54 | 54 | ||
55 | private: | 55 | private: |
56 | int todayColumn(); | 56 | int todayColumn(); |
57 | QTimer *minutes; | 57 | QTimer *minutes; |
58 | QLabel *mTimeBox; | 58 | QLabel *mTimeBox; |
59 | KOAgenda *agenda; | 59 | KOAgenda *agenda; |
60 | QTime oldTime; | 60 | QTime oldTime; |
61 | int oldToday; | 61 | int oldToday; |
62 | }; | 62 | }; |
63 | 63 | ||
64 | 64 | ||
65 | class KOAgenda : public QScrollView | 65 | class KOAgenda : public QScrollView |
66 | { | 66 | { |
67 | Q_OBJECT | 67 | Q_OBJECT |
68 | public: | 68 | public: |
69 | enum MouseActionType { NOP, MOVE, SELECT, | 69 | enum MouseActionType { NOP, MOVE, SELECT, |
70 | RESIZETOP, RESIZEBOTTOM, RESIZELEFT, RESIZERIGHT }; | 70 | RESIZETOP, RESIZEBOTTOM, RESIZELEFT, RESIZERIGHT }; |
71 | 71 | ||
72 | KOAgenda ( int columns, int rows, int columnSize, QWidget * parent=0, | 72 | KOAgenda ( int columns, int rows, int columnSize, QWidget * parent=0, |
73 | const char * name=0, WFlags f=0 ); | 73 | const char * name=0, WFlags f=0 ); |
74 | KOAgenda ( int columns, QWidget * parent=0, | 74 | KOAgenda ( int columns, QWidget * parent=0, |
75 | const char * name=0, WFlags f=0 ); | 75 | const char * name=0, WFlags f=0 ); |
76 | virtual ~KOAgenda(); | 76 | virtual ~KOAgenda(); |
77 | 77 | ||
78 | Incidence *selectedIncidence() const; | 78 | Incidence *selectedIncidence() const; |
79 | QDate selectedIncidenceDate() const; | 79 | QDate selectedIncidenceDate() const; |
80 | 80 | ||
81 | virtual bool eventFilter ( QObject *, QEvent * ); | 81 | virtual bool eventFilter ( QObject *, QEvent * ); |
82 | 82 | ||
83 | void contentsToGrid (int x, int y, int& gx, int& gy); | 83 | void contentsToGrid (int x, int y, int& gx, int& gy); |
84 | void gridToContents (int gx, int gy, int& x, int& y); | 84 | void gridToContents (int gx, int gy, int& x, int& y); |
85 | 85 | ||
86 | int timeToY (const QTime &time); | 86 | int timeToY (const QTime &time); |
87 | QTime gyToTime (int y); | 87 | QTime gyToTime (int y); |
88 | 88 | ||
89 | void setStartHour(int startHour); | 89 | void setStartHour(int startHour); |
90 | 90 | ||
91 | KOAgendaItem *insertItem (Incidence *event,QDate qd,int X,int YTop,int YBottom); | 91 | KOAgendaItem *insertItem (Incidence *event,QDate qd,int X,int YTop,int YBottom); |
92 | KOAgendaItem *insertAllDayItem (Incidence *event,QDate qd,int XBegin,int XEnd); | 92 | KOAgendaItem *insertAllDayItem (Incidence *event,QDate qd,int XBegin,int XEnd); |
93 | void insertMultiItem (Event *event,QDate qd,int XBegin,int XEnd, | 93 | void insertMultiItem (Event *event,QDate qd,int XBegin,int XEnd, |
94 | int YTop,int YBottom); | 94 | int YTop,int YBottom); |
95 | 95 | ||
96 | void changeColumns(int columns); | 96 | void changeColumns(int columns); |
97 | 97 | ||
98 | int columns() { return mColumns; } | 98 | int columns() { return mColumns; } |
99 | int rows() { return mRows; } | 99 | int rows() { return mRows; } |
100 | 100 | ||
101 | int gridSpacingX() const { return mGridSpacingX; } | 101 | int gridSpacingX() const { return mGridSpacingX; } |
102 | int gridSpacingY() const { return mGridSpacingY; } | 102 | int gridSpacingY() const { return mGridSpacingY; } |
103 | 103 | ||
104 | // virtual QSizePolicy sizePolicy() const; | 104 | // virtual QSizePolicy sizePolicy() const; |
105 | 105 | ||
106 | void clear(); | 106 | void clear(); |
107 | 107 | ||
108 | void clearSelection(); | 108 | void clearSelection(); |
109 | void hideUnused(); | 109 | void hideUnused(); |
110 | 110 | ||
111 | /** Calculates the minimum width */ | 111 | /** Calculates the minimum width */ |
112 | virtual int minimumWidth() const; | 112 | virtual int minimumWidth() const; |
113 | /** Update configuration from preference settings */ | 113 | /** Update configuration from preference settings */ |
114 | void updateConfig(); | 114 | void updateConfig(); |
115 | 115 | ||
116 | void checkScrollBoundaries(); | 116 | void checkScrollBoundaries(); |
117 | 117 | ||
118 | void setHolidayMask(QMemArray<bool> *); | 118 | void setHolidayMask(QMemArray<bool> *); |
119 | void setDateList(const DateList &selectedDates); | 119 | void setDateList(const DateList &selectedDates); |
120 | DateList dateList() const; | 120 | DateList dateList() const; |
121 | void drawContentsToPainter( QPainter* paint = 0, bool backgroundOnly = false); | 121 | void drawContentsToPainter( QPainter* paint = 0, bool backgroundOnly = false); |
122 | void finishUpdate(); | 122 | void finishUpdate(); |
123 | void printSelection(); | 123 | void printSelection(); |
124 | void storePosition(); | 124 | void storePosition(); |
125 | void restorePosition(); | 125 | void restorePosition(); |
126 | 126 | ||
127 | 127 | ||
128 | public slots: | 128 | public slots: |
129 | void newItem( int ); | 129 | void newItem( int ); |
130 | void moveChild( QWidget *, int, int ); | 130 | void moveChild( QWidget *, int, int ); |
131 | void scrollUp(); | 131 | void scrollUp(); |
132 | void scrollDown(); | 132 | void scrollDown(); |
133 | void updateTodo( Todo * t, int , bool ); | 133 | void updateTodo( Todo * t, int , bool ); |
134 | void popupAlarm(); | 134 | void popupAlarm(); |
135 | 135 | ||
136 | void checkScrollBoundaries(int); | 136 | void checkScrollBoundaries(int); |
137 | 137 | ||
138 | /** Deselect selected items. This function does not emit any signals. */ | 138 | /** Deselect selected items. This function does not emit any signals. */ |
139 | void deselectItem(); | 139 | void deselectItem(); |
140 | /** Select item. If the argument is 0, the currently selected item gets | 140 | /** Select item. If the argument is 0, the currently selected item gets |
141 | deselected. This function emits the itemSelected(bool) signal to inform | 141 | deselected. This function emits the itemSelected(bool) signal to inform |
142 | about selection/deseelction of events. */ | 142 | about selection/deseelction of events. */ |
143 | void selectItem(KOAgendaItem *); | 143 | void selectItem(KOAgendaItem *); |
144 | void finishResize(); | 144 | void finishResize(); |
145 | 145 | ||
146 | signals: | 146 | signals: |
147 | void showDateView( int, QDate ); | ||
147 | void newEventSignal(); | 148 | void newEventSignal(); |
148 | void newEventSignal(int gx,int gy); | 149 | void newEventSignal(int gx,int gy); |
149 | void newTodoSignal(int gx,int gy); | 150 | void newTodoSignal(int gx,int gy); |
150 | void newEventSignal(int gxStart, int gyStart, int gxEnd, int gyEnd); | 151 | void newEventSignal(int gxStart, int gyStart, int gxEnd, int gyEnd); |
151 | void newTimeSpanSignal(int gxStart, int gyStart, int gxEnd, int gyEnd); | 152 | void newTimeSpanSignal(int gxStart, int gyStart, int gxEnd, int gyEnd); |
152 | void newStartSelectSignal(); | 153 | void newStartSelectSignal(); |
153 | void showIncidenceSignal(Incidence *); | 154 | void showIncidenceSignal(Incidence *); |
154 | void editIncidenceSignal(Incidence *); | 155 | void editIncidenceSignal(Incidence *); |
155 | void deleteIncidenceSignal(Incidence *); | 156 | void deleteIncidenceSignal(Incidence *); |
156 | void showIncidencePopupSignal(Incidence *); | 157 | void showIncidencePopupSignal(Incidence *); |
157 | 158 | ||
158 | void itemModified(KOAgendaItem *item, int ); | 159 | void itemModified(KOAgendaItem *item, int ); |
159 | void incidenceSelected(Incidence *); | 160 | void incidenceSelected(Incidence *); |
160 | 161 | ||
161 | void lowerYChanged(int); | 162 | void lowerYChanged(int); |
162 | void upperYChanged(int); | 163 | void upperYChanged(int); |
163 | 164 | ||
164 | void startDragSignal(Incidence *); | 165 | void startDragSignal(Incidence *); |
165 | void addToCalSignal(Incidence *, Incidence *); | 166 | void addToCalSignal(Incidence *, Incidence *); |
166 | void resizedSignal(); | 167 | void resizedSignal(); |
167 | 168 | ||
168 | protected: | 169 | protected: |
169 | QPainter mPixPainter; | 170 | QPainter mPixPainter; |
170 | QPixmap mPaintPixmap; | 171 | QPixmap mPaintPixmap; |
171 | QPixmap mHighlightPixmap; | 172 | QPixmap mHighlightPixmap; |
172 | void drawContents(QPainter *p,int cx, int cy, int cw, int ch); | 173 | void drawContents(QPainter *p,int cx, int cy, int cw, int ch); |
173 | virtual void resizeEvent ( QResizeEvent * ); | 174 | virtual void resizeEvent ( QResizeEvent * ); |
174 | 175 | ||
175 | /** Handles mouse events. Called from eventFilter */ | 176 | /** Handles mouse events. Called from eventFilter */ |
176 | virtual bool eventFilter_mouse ( QObject *, QMouseEvent * ); | 177 | virtual bool eventFilter_mouse ( QObject *, QMouseEvent * ); |
177 | 178 | ||
178 | /** Start selecting time span. */ | 179 | /** Start selecting time span. */ |
179 | void startSelectAction(QPoint viewportPos); | 180 | void startSelectAction(QPoint viewportPos); |
180 | 181 | ||
181 | /** Select time span. */ | 182 | /** Select time span. */ |
182 | void performSelectAction(QPoint viewportPos); | 183 | void performSelectAction(QPoint viewportPos); |
183 | 184 | ||
184 | /** Emd selecting time span. */ | 185 | /** Emd selecting time span. */ |
185 | void endSelectAction( bool emitNewEvent = false ); | 186 | void endSelectAction( bool emitNewEvent = false ); |
186 | 187 | ||
187 | /** Start moving/resizing agenda item */ | 188 | /** Start moving/resizing agenda item */ |
188 | void startItemAction(QPoint viewportPos); | 189 | void startItemAction(QPoint viewportPos); |
189 | 190 | ||
190 | /** Move/resize agenda item */ | 191 | /** Move/resize agenda item */ |
191 | void performItemAction(QPoint viewportPos); | 192 | void performItemAction(QPoint viewportPos); |
192 | 193 | ||
193 | /** End moving/resizing agenda item */ | 194 | /** End moving/resizing agenda item */ |
194 | void endItemAction(); | 195 | void endItemAction(); |
195 | 196 | ||
196 | /** Set cursor, when no item action is in progress */ | 197 | /** Set cursor, when no item action is in progress */ |
197 | void setNoActionCursor(KOAgendaItem *moveItem,QPoint viewportPos); | 198 | void setNoActionCursor(KOAgendaItem *moveItem,QPoint viewportPos); |
198 | 199 | ||
199 | /** Place agenda item in agenda and adjust other cells if necessary */ | 200 | /** Place agenda item in agenda and adjust other cells if necessary */ |
200 | void placeSubCells(KOAgendaItem *placeItem); | 201 | void placeSubCells(KOAgendaItem *placeItem); |
201 | 202 | ||
202 | /** Process the keyevent, including the ignored keyevents of eventwidgets. | 203 | /** Process the keyevent, including the ignored keyevents of eventwidgets. |
203 | * Implements pgup/pgdn and cursor key navigation in the view. | 204 | * Implements pgup/pgdn and cursor key navigation in the view. |
204 | */ | 205 | */ |
205 | void keyPressEvent( QKeyEvent * ); | 206 | void keyPressEvent( QKeyEvent * ); |
206 | 207 | ||
207 | void calculateWorkingHours(); | 208 | void calculateWorkingHours(); |
208 | 209 | ||
209 | virtual void contentsMousePressEvent ( QMouseEvent * ); | 210 | virtual void contentsMousePressEvent ( QMouseEvent * ); |
210 | 211 | ||
211 | private: | 212 | private: |
212 | bool blockNewEvent; | 213 | bool blockNewEvent; |
213 | void init(); | 214 | void init(); |
214 | void marcus_bains(); | 215 | void marcus_bains(); |
215 | bool mAllDayMode; | 216 | bool mAllDayMode; |
216 | bool blockResize; | 217 | bool blockResize; |
217 | QTimer mResizeTimer; | 218 | QTimer mResizeTimer; |
218 | double mContentPosition; | 219 | double mContentPosition; |
219 | 220 | ||
220 | // Width and height of agenda cells | 221 | // Width and height of agenda cells |
221 | int mGridSpacingX; | 222 | int mGridSpacingX; |
222 | int mGridSpacingY; | 223 | int mGridSpacingY; |
223 | 224 | ||
224 | // size of border, where mouse action will resize the KOAgendaItem | 225 | // size of border, where mouse action will resize the KOAgendaItem |
225 | int mResizeBorderWidth; | 226 | int mResizeBorderWidth; |
226 | 227 | ||
227 | // size of border, where mouse mve will cause a scroll of the agenda | 228 | // size of border, where mouse mve will cause a scroll of the agenda |
228 | int mScrollBorderWidth; | 229 | int mScrollBorderWidth; |
229 | int mScrollDelay; | 230 | int mScrollDelay; |
230 | int mScrollOffset; | 231 | int mScrollOffset; |
231 | 232 | ||
232 | QTimer mScrollUpTimer; | 233 | QTimer mScrollUpTimer; |
233 | QTimer mScrollDownTimer; | 234 | QTimer mScrollDownTimer; |
234 | 235 | ||
235 | // Number of Columns/Rows of agenda grid | 236 | // Number of Columns/Rows of agenda grid |
236 | int mColumns; | 237 | int mColumns; |
237 | int mRows; | 238 | int mRows; |
238 | 239 | ||
239 | // Cells to store Move and Resize coordiantes | 240 | // Cells to store Move and Resize coordiantes |
240 | int mStartCellX; | 241 | int mStartCellX; |
241 | int mStartCellY; | 242 | int mStartCellY; |
242 | int mCurrentCellX; | 243 | int mCurrentCellX; |
243 | int mCurrentCellY; | 244 | int mCurrentCellY; |
244 | 245 | ||
245 | // Working Hour coordiantes | 246 | // Working Hour coordiantes |
246 | bool mWorkingHoursEnable; | 247 | bool mWorkingHoursEnable; |
247 | int mWorkingHoursYTop; | 248 | int mWorkingHoursYTop; |
248 | int mWorkingHoursYBottom; | 249 | int mWorkingHoursYBottom; |
249 | 250 | ||
250 | // Selection | 251 | // Selection |
251 | int mSelectionCellX; | 252 | int mSelectionCellX; |
252 | int mSelectionYTop; | 253 | int mSelectionYTop; |
253 | int mSelectionHeight; | 254 | int mSelectionHeight; |
254 | 255 | ||
255 | // List of dates to be displayed | 256 | // List of dates to be displayed |
256 | DateList mSelectedDates; | 257 | DateList mSelectedDates; |
257 | 258 | ||
258 | // The KOAgendaItem, which has been right-clicked last | 259 | // The KOAgendaItem, which has been right-clicked last |
259 | KOAgendaItem *mClickedItem; | 260 | KOAgendaItem *mClickedItem; |
260 | 261 | ||
261 | // The KOAgendaItem, which is being moved/resized | 262 | // The KOAgendaItem, which is being moved/resized |
262 | QGuardedPtr<KOAgendaItem> mActionItem; | 263 | QGuardedPtr<KOAgendaItem> mActionItem; |
263 | 264 | ||
264 | // Currently selected item | 265 | // Currently selected item |
265 | QGuardedPtr<KOAgendaItem> mSelectedItem; | 266 | QGuardedPtr<KOAgendaItem> mSelectedItem; |
266 | 267 | ||
267 | // The Marcus Bains Line widget. | 268 | // The Marcus Bains Line widget. |
268 | MarcusBains *mMarcusBains; | 269 | MarcusBains *mMarcusBains; |
269 | void computeSizes(); | 270 | void computeSizes(); |
270 | 271 | ||
271 | MouseActionType mActionType; | 272 | MouseActionType mActionType; |
272 | 273 | ||
273 | bool mItemMoved; | 274 | bool mItemMoved; |
274 | 275 | ||
275 | // List of all Items contained in agenda | 276 | // List of all Items contained in agenda |
276 | QPtrList<KOAgendaItem> mItems; | 277 | QPtrList<KOAgendaItem> mItems; |
277 | QPtrList<KOAgendaItem> mUnusedItems; | 278 | QPtrList<KOAgendaItem> mUnusedItems; |
278 | KOAgendaItem* getNewItem(Incidence * event,QDate qd, QWidget* viewport); | 279 | KOAgendaItem* getNewItem(Incidence * event,QDate qd, QWidget* viewport); |
279 | QPopupMenu *mItemPopup; // Right mouse button popup menu for KOAgendaItems | 280 | QPopupMenu *mItemPopup; // Right mouse button popup menu for KOAgendaItems |
280 | QPopupMenu *mNewItemPopup; | 281 | QPopupMenu *mNewItemPopup; |
281 | 282 | ||
282 | int mOldLowerScrollValue; | 283 | int mOldLowerScrollValue; |
283 | int mOldUpperScrollValue; | 284 | int mOldUpperScrollValue; |
284 | KOAgendaItem * getItemForTodo ( Todo * todo ); | 285 | KOAgendaItem * getItemForTodo ( Todo * todo ); |
285 | QMemArray<bool> *mHolidayMask; | 286 | QMemArray<bool> *mHolidayMask; |
286 | int mCurPixWid; | 287 | int mCurPixWid; |
287 | int mCurPixHei; | 288 | int mCurPixHei; |
288 | }; | 289 | }; |
289 | 290 | ||
290 | #endif // KOAGENDA_H | 291 | #endif // KOAGENDA_H |
diff --git a/korganizer/koagendaview.cpp b/korganizer/koagendaview.cpp index 60ae41f..e0a1a21 100644 --- a/korganizer/koagendaview.cpp +++ b/korganizer/koagendaview.cpp | |||
@@ -1,1511 +1,1514 @@ | |||
1 | /* | 1 | /* |
2 | This file is part of KOrganizer. | 2 | This file is part of KOrganizer. |
3 | Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> | 3 | Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> |
4 | 4 | ||
5 | This program is free software; you can redistribute it and/or modify | 5 | This program is free software; you can redistribute it and/or modify |
6 | it under the terms of the GNU General Public License as published by | 6 | it under the terms of the GNU General Public License as published by |
7 | the Free Software Foundation; either version 2 of the License, or | 7 | the Free Software Foundation; either version 2 of the License, or |
8 | (at your option) any later version. | 8 | (at your option) any later version. |
9 | 9 | ||
10 | This program is distributed in the hope that it will be useful, | 10 | This program is distributed in the hope that it will be useful, |
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
13 | GNU General Public License for more details. | 13 | GNU General Public License for more details. |
14 | 14 | ||
15 | You should have received a copy of the GNU General Public License | 15 | You should have received a copy of the GNU General Public License |
16 | along with this program; if not, write to the Free Software | 16 | along with this program; if not, write to the Free Software |
17 | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | 17 | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
18 | 18 | ||
19 | As a special exception, permission is given to link this program | 19 | As a special exception, permission is given to link this program |
20 | with any edition of Qt, and distribute the resulting executable, | 20 | with any edition of Qt, and distribute the resulting executable, |
21 | without including the source code for Qt in the source distribution. | 21 | without including the source code for Qt in the source distribution. |
22 | */ | 22 | */ |
23 | 23 | ||
24 | #include <qhbox.h> | 24 | #include <qhbox.h> |
25 | #include <qvbox.h> | 25 | #include <qvbox.h> |
26 | #include <qlabel.h> | 26 | #include <qlabel.h> |
27 | #include <qframe.h> | 27 | #include <qframe.h> |
28 | #include <qlayout.h> | 28 | #include <qlayout.h> |
29 | #ifndef KORG_NOSPLITTER | 29 | #ifndef KORG_NOSPLITTER |
30 | #include <qsplitter.h> | 30 | #include <qsplitter.h> |
31 | #endif | 31 | #endif |
32 | #include <qfont.h> | 32 | #include <qfont.h> |
33 | #include <qfontmetrics.h> | 33 | #include <qfontmetrics.h> |
34 | #include <qpopupmenu.h> | 34 | #include <qpopupmenu.h> |
35 | #include <qtooltip.h> | 35 | #include <qtooltip.h> |
36 | #include <qpainter.h> | 36 | #include <qpainter.h> |
37 | #include <qpushbutton.h> | 37 | #include <qpushbutton.h> |
38 | #include <qapplication.h> | 38 | #include <qapplication.h> |
39 | 39 | ||
40 | #include <kapplication.h> | 40 | #include <kapplication.h> |
41 | #include <KDGanttMinimizeSplitter.h> | 41 | #include <KDGanttMinimizeSplitter.h> |
42 | #include <kdebug.h> | 42 | #include <kdebug.h> |
43 | #include <kstandarddirs.h> | 43 | #include <kstandarddirs.h> |
44 | #include <kiconloader.h> | 44 | #include <kiconloader.h> |
45 | #include <klocale.h> | 45 | #include <klocale.h> |
46 | #include <kconfig.h> | 46 | #include <kconfig.h> |
47 | #include <kglobal.h> | 47 | #include <kglobal.h> |
48 | #include "calendarview.h" | 48 | #include "calendarview.h" |
49 | #include "koviewmanager.h" | 49 | #include "koviewmanager.h" |
50 | 50 | ||
51 | #include <libkcal/calendar.h> | 51 | #include <libkcal/calendar.h> |
52 | #include <libkcal/icaldrag.h> | 52 | #include <libkcal/icaldrag.h> |
53 | #include <libkcal/dndfactory.h> | 53 | #include <libkcal/dndfactory.h> |
54 | 54 | ||
55 | #include <kcalendarsystem.h> | 55 | #include <kcalendarsystem.h> |
56 | 56 | ||
57 | #include "koglobals.h" | 57 | #include "koglobals.h" |
58 | #ifndef KORG_NOPLUGINS | 58 | #ifndef KORG_NOPLUGINS |
59 | #include "kocore.h" | 59 | #include "kocore.h" |
60 | #endif | 60 | #endif |
61 | #include "koprefs.h" | 61 | #include "koprefs.h" |
62 | #include "koagenda.h" | 62 | #include "koagenda.h" |
63 | #include "koagendaitem.h" | 63 | #include "koagendaitem.h" |
64 | #ifndef KORG_NOPRINTER | 64 | #ifndef KORG_NOPRINTER |
65 | #include "calprinter.h" | 65 | #include "calprinter.h" |
66 | #endif | 66 | #endif |
67 | 67 | ||
68 | #include "koagendaview.h" | 68 | #include "koagendaview.h" |
69 | //#include "koagendaview.moc" | 69 | //#include "koagendaview.moc" |
70 | 70 | ||
71 | //extern bool globalFlagBlockPainting; | 71 | //extern bool globalFlagBlockPainting; |
72 | extern int globalFlagBlockAgenda; | 72 | extern int globalFlagBlockAgenda; |
73 | extern int globalFlagBlockStartup; | 73 | extern int globalFlagBlockStartup; |
74 | extern int globalFlagBlockAgendaItemPaint; | 74 | extern int globalFlagBlockAgendaItemPaint; |
75 | extern int globalFlagBlockAgendaItemUpdate; | 75 | extern int globalFlagBlockAgendaItemUpdate; |
76 | extern int globalFlagBlockLabel; | 76 | extern int globalFlagBlockLabel; |
77 | using namespace KOrg; | 77 | using namespace KOrg; |
78 | 78 | ||
79 | TimeLabels::TimeLabels(int rows,QWidget *parent,const char *name,WFlags f) : | 79 | TimeLabels::TimeLabels(int rows,QWidget *parent,const char *name,WFlags f) : |
80 | QScrollView(parent,name,f) | 80 | QScrollView(parent,name,f) |
81 | { | 81 | { |
82 | mRows = rows; | 82 | mRows = rows; |
83 | 83 | ||
84 | setMinimumHeight( 20 ); | 84 | setMinimumHeight( 20 ); |
85 | mCellHeight = KOPrefs::instance()->mHourSize*4; | 85 | mCellHeight = KOPrefs::instance()->mHourSize*4; |
86 | 86 | ||
87 | enableClipper(true); | 87 | enableClipper(true); |
88 | 88 | ||
89 | setHScrollBarMode(AlwaysOff); | 89 | setHScrollBarMode(AlwaysOff); |
90 | setVScrollBarMode(AlwaysOff); | 90 | setVScrollBarMode(AlwaysOff); |
91 | 91 | ||
92 | resizeContents(50,mRows * mCellHeight); | 92 | resizeContents(50,mRows * mCellHeight); |
93 | 93 | ||
94 | viewport()->setBackgroundMode( PaletteBackground ); | 94 | viewport()->setBackgroundMode( PaletteBackground ); |
95 | } | 95 | } |
96 | 96 | ||
97 | void TimeLabels::setCellHeight(int height) | 97 | void TimeLabels::setCellHeight(int height) |
98 | { | 98 | { |
99 | mCellHeight = height; | 99 | mCellHeight = height; |
100 | } | 100 | } |
101 | 101 | ||
102 | /* | 102 | /* |
103 | Optimization so that only the "dirty" portion of the scroll view | 103 | Optimization so that only the "dirty" portion of the scroll view |
104 | is redrawn. Unfortunately, this is not called by default paintEvent() method. | 104 | is redrawn. Unfortunately, this is not called by default paintEvent() method. |
105 | */ | 105 | */ |
106 | void TimeLabels::drawContents(QPainter *p,int cx, int cy, int cw, int ch) | 106 | void TimeLabels::drawContents(QPainter *p,int cx, int cy, int cw, int ch) |
107 | { | 107 | { |
108 | 108 | ||
109 | // if ( globalFlagBlockAgenda ) | 109 | // if ( globalFlagBlockAgenda ) |
110 | // return; | 110 | // return; |
111 | // bug: the parameters cx, cy, cw, ch are the areas that need to be | 111 | // bug: the parameters cx, cy, cw, ch are the areas that need to be |
112 | // redrawn, not the area of the widget. unfortunately, this | 112 | // redrawn, not the area of the widget. unfortunately, this |
113 | // code assumes the latter... | 113 | // code assumes the latter... |
114 | 114 | ||
115 | // now, for a workaround... | 115 | // now, for a workaround... |
116 | // these two assignments fix the weird redraw bug | 116 | // these two assignments fix the weird redraw bug |
117 | cx = contentsX() + 2; | 117 | cx = contentsX() + 2; |
118 | cw = contentsWidth() - 2; | 118 | cw = contentsWidth() - 2; |
119 | // end of workaround | 119 | // end of workaround |
120 | 120 | ||
121 | int cell = ((int)(cy/mCellHeight)); | 121 | int cell = ((int)(cy/mCellHeight)); |
122 | int y = cell * mCellHeight; | 122 | int y = cell * mCellHeight; |
123 | QFontMetrics fm = fontMetrics(); | 123 | QFontMetrics fm = fontMetrics(); |
124 | QString hour; | 124 | QString hour; |
125 | QString suffix; | 125 | QString suffix; |
126 | QString fullTime; | 126 | QString fullTime; |
127 | int tW = fm.width("24:00i"); | 127 | int tW = fm.width("24:00i"); |
128 | 128 | ||
129 | while (y < cy + ch) { | 129 | while (y < cy + ch) { |
130 | p->drawLine(cx,y,cx+tW,y); | 130 | p->drawLine(cx,y,cx+tW,y); |
131 | hour.setNum(cell); | 131 | hour.setNum(cell); |
132 | suffix = "am"; | 132 | suffix = "am"; |
133 | 133 | ||
134 | // handle 24h and am/pm time formats | 134 | // handle 24h and am/pm time formats |
135 | if (KGlobal::locale()->use12Clock()) { | 135 | if (KGlobal::locale()->use12Clock()) { |
136 | if (cell > 11) suffix = "pm"; | 136 | if (cell > 11) suffix = "pm"; |
137 | if (cell == 0) hour.setNum(12); | 137 | if (cell == 0) hour.setNum(12); |
138 | if (cell > 12) hour.setNum(cell - 12); | 138 | if (cell > 12) hour.setNum(cell - 12); |
139 | } else { | 139 | } else { |
140 | suffix = ":00"; | 140 | suffix = ":00"; |
141 | } | 141 | } |
142 | 142 | ||
143 | // create string in format of "XX:XX" or "XXpm/am" | 143 | // create string in format of "XX:XX" or "XXpm/am" |
144 | fullTime = hour + suffix; | 144 | fullTime = hour + suffix; |
145 | 145 | ||
146 | // center and draw the time label | 146 | // center and draw the time label |
147 | int timeWidth = fm.width(fullTime+"i"); | 147 | int timeWidth = fm.width(fullTime+"i"); |
148 | int offset = this->width() - timeWidth; | 148 | int offset = this->width() - timeWidth; |
149 | int borderWidth = 5; | 149 | int borderWidth = 5; |
150 | int timeHeight = fm.height(); | 150 | int timeHeight = fm.height(); |
151 | timeHeight = timeHeight + 2 - ( timeHeight / 4 ); | 151 | timeHeight = timeHeight + 2 - ( timeHeight / 4 ); |
152 | p->drawText(cx -borderWidth + offset, y+ timeHeight, fullTime); | 152 | p->drawText(cx -borderWidth + offset, y+ timeHeight, fullTime); |
153 | 153 | ||
154 | // increment indices | 154 | // increment indices |
155 | y += mCellHeight; | 155 | y += mCellHeight; |
156 | cell++; | 156 | cell++; |
157 | } | 157 | } |
158 | } | 158 | } |
159 | 159 | ||
160 | /** | 160 | /** |
161 | Calculates the minimum width. | 161 | Calculates the minimum width. |
162 | */ | 162 | */ |
163 | int TimeLabels::minimumWidth() const | 163 | int TimeLabels::minimumWidth() const |
164 | { | 164 | { |
165 | QFontMetrics fm = fontMetrics(); | 165 | QFontMetrics fm = fontMetrics(); |
166 | 166 | ||
167 | //TODO: calculate this value | 167 | //TODO: calculate this value |
168 | int borderWidth = 4; | 168 | int borderWidth = 4; |
169 | 169 | ||
170 | // the maximum width possible | 170 | // the maximum width possible |
171 | int width = fm.width("88:88x") + borderWidth; | 171 | int width = fm.width("88:88x") + borderWidth; |
172 | 172 | ||
173 | return width; | 173 | return width; |
174 | } | 174 | } |
175 | 175 | ||
176 | /** updates widget's internal state */ | 176 | /** updates widget's internal state */ |
177 | void TimeLabels::updateConfig() | 177 | void TimeLabels::updateConfig() |
178 | { | 178 | { |
179 | // set the font | 179 | // set the font |
180 | // config->setGroup("Fonts"); | 180 | // config->setGroup("Fonts"); |
181 | // QFont font = config->readFontEntry("TimeBar Font"); | 181 | // QFont font = config->readFontEntry("TimeBar Font"); |
182 | setFont(KOPrefs::instance()->mTimeBarFont); | 182 | setFont(KOPrefs::instance()->mTimeBarFont); |
183 | 183 | ||
184 | // update geometry restrictions based on new settings | 184 | // update geometry restrictions based on new settings |
185 | setFixedWidth(minimumWidth()); | 185 | setFixedWidth(minimumWidth()); |
186 | 186 | ||
187 | // update HourSize | 187 | // update HourSize |
188 | mCellHeight = KOPrefs::instance()->mHourSize*4; | 188 | mCellHeight = KOPrefs::instance()->mHourSize*4; |
189 | resizeContents(50,mRows * mCellHeight); | 189 | resizeContents(50,mRows * mCellHeight); |
190 | } | 190 | } |
191 | 191 | ||
192 | /** update time label positions */ | 192 | /** update time label positions */ |
193 | void TimeLabels::positionChanged() | 193 | void TimeLabels::positionChanged() |
194 | { | 194 | { |
195 | int adjustment = mAgenda->contentsY(); | 195 | int adjustment = mAgenda->contentsY(); |
196 | setContentsPos(0, adjustment); | 196 | setContentsPos(0, adjustment); |
197 | } | 197 | } |
198 | 198 | ||
199 | /** */ | 199 | /** */ |
200 | void TimeLabels::setAgenda(KOAgenda* agenda) | 200 | void TimeLabels::setAgenda(KOAgenda* agenda) |
201 | { | 201 | { |
202 | mAgenda = agenda; | 202 | mAgenda = agenda; |
203 | } | 203 | } |
204 | 204 | ||
205 | void TimeLabels::contentsMousePressEvent ( QMouseEvent * e) | 205 | void TimeLabels::contentsMousePressEvent ( QMouseEvent * e) |
206 | { | 206 | { |
207 | mMouseDownY = e->pos().y(); | 207 | mMouseDownY = e->pos().y(); |
208 | mOrgCap = topLevelWidget()->caption(); | 208 | mOrgCap = topLevelWidget()->caption(); |
209 | } | 209 | } |
210 | 210 | ||
211 | void TimeLabels::contentsMouseMoveEvent ( QMouseEvent * e ) | 211 | void TimeLabels::contentsMouseMoveEvent ( QMouseEvent * e ) |
212 | { | 212 | { |
213 | int diff = mMouseDownY - e->pos().y(); | 213 | int diff = mMouseDownY - e->pos().y(); |
214 | if ( diff < 10 && diff > -10 ) | 214 | if ( diff < 10 && diff > -10 ) |
215 | return; | 215 | return; |
216 | int tSize = KOPrefs::instance()->mHourSize + (diff/10) ; | 216 | int tSize = KOPrefs::instance()->mHourSize + (diff/10) ; |
217 | if ( tSize < 4 ) | 217 | if ( tSize < 4 ) |
218 | tSize = 4; | 218 | tSize = 4; |
219 | if ( tSize > 22 ) | 219 | if ( tSize > 22 ) |
220 | tSize = 22; | 220 | tSize = 22; |
221 | tSize = (tSize-2)/2; | 221 | tSize = (tSize-2)/2; |
222 | topLevelWidget()->setCaption(i18n("New Agendasize: %1").arg(tSize)); | 222 | topLevelWidget()->setCaption(i18n("New Agendasize: %1").arg(tSize)); |
223 | 223 | ||
224 | } | 224 | } |
225 | void TimeLabels::contentsMouseReleaseEvent ( QMouseEvent * e ) | 225 | void TimeLabels::contentsMouseReleaseEvent ( QMouseEvent * e ) |
226 | { | 226 | { |
227 | topLevelWidget()->setCaption( mOrgCap ); | 227 | topLevelWidget()->setCaption( mOrgCap ); |
228 | int diff = mMouseDownY - e->pos().y(); | 228 | int diff = mMouseDownY - e->pos().y(); |
229 | if ( diff < 10 && diff > -10 ) | 229 | if ( diff < 10 && diff > -10 ) |
230 | return; | 230 | return; |
231 | int tSize = KOPrefs::instance()->mHourSize + (diff/10); | 231 | int tSize = KOPrefs::instance()->mHourSize + (diff/10); |
232 | if ( tSize < 4 ) | 232 | if ( tSize < 4 ) |
233 | tSize = 4; | 233 | tSize = 4; |
234 | if ( tSize > 22 ) | 234 | if ( tSize > 22 ) |
235 | tSize = 22; | 235 | tSize = 22; |
236 | tSize = (tSize/2)*2; | 236 | tSize = (tSize/2)*2; |
237 | if ( tSize == KOPrefs::instance()->mHourSize ) | 237 | if ( tSize == KOPrefs::instance()->mHourSize ) |
238 | return; | 238 | return; |
239 | KOPrefs::instance()->mHourSize = tSize; | 239 | KOPrefs::instance()->mHourSize = tSize; |
240 | emit scaleChanged(); | 240 | emit scaleChanged(); |
241 | } | 241 | } |
242 | 242 | ||
243 | /** This is called in response to repaint() */ | 243 | /** This is called in response to repaint() */ |
244 | void TimeLabels::paintEvent(QPaintEvent*) | 244 | void TimeLabels::paintEvent(QPaintEvent*) |
245 | { | 245 | { |
246 | 246 | ||
247 | // kdDebug() << "paintevent..." << endl; | 247 | // kdDebug() << "paintevent..." << endl; |
248 | // this is another hack! | 248 | // this is another hack! |
249 | // QPainter painter(this); | 249 | // QPainter painter(this); |
250 | //QString c | 250 | //QString c |
251 | repaintContents(contentsX(), contentsY(), visibleWidth(), visibleHeight()); | 251 | repaintContents(contentsX(), contentsY(), visibleWidth(), visibleHeight()); |
252 | } | 252 | } |
253 | 253 | ||
254 | //////////////////////////////////////////////////////////////////////////// | 254 | //////////////////////////////////////////////////////////////////////////// |
255 | 255 | ||
256 | EventIndicator::EventIndicator(Location loc,QWidget *parent,const char *name) | 256 | EventIndicator::EventIndicator(Location loc,QWidget *parent,const char *name) |
257 | : QFrame(parent,name) | 257 | : QFrame(parent,name) |
258 | { | 258 | { |
259 | mColumns = 1; | 259 | mColumns = 1; |
260 | mTopBox = 0; | 260 | mTopBox = 0; |
261 | mLocation = loc; | 261 | mLocation = loc; |
262 | mTopLayout = 0; | 262 | mTopLayout = 0; |
263 | mPaintWidget = 0; | 263 | mPaintWidget = 0; |
264 | mXOffset = 0; | 264 | mXOffset = 0; |
265 | if (mLocation == Top) mPixmap = SmallIcon("1uparrow"); | 265 | if (mLocation == Top) mPixmap = SmallIcon("1uparrow"); |
266 | else mPixmap = SmallIcon("1downarrow"); | 266 | else mPixmap = SmallIcon("1downarrow"); |
267 | mEnabled.resize(mColumns); | 267 | mEnabled.resize(mColumns); |
268 | if (mLocation == Top) | 268 | if (mLocation == Top) |
269 | setMaximumHeight(0); | 269 | setMaximumHeight(0); |
270 | else | 270 | else |
271 | setMinimumHeight(mPixmap.height()); | 271 | setMinimumHeight(mPixmap.height()); |
272 | } | 272 | } |
273 | 273 | ||
274 | EventIndicator::~EventIndicator() | 274 | EventIndicator::~EventIndicator() |
275 | { | 275 | { |
276 | } | 276 | } |
277 | 277 | ||
278 | void EventIndicator::drawContents(QPainter *p) | 278 | void EventIndicator::drawContents(QPainter *p) |
279 | { | 279 | { |
280 | 280 | ||
281 | // kdDebug() << "======== top: " << contentsRect().top() << " bottom " << // contentsRect().bottom() << " left " << contentsRect().left() << " right " << contentsRect().right() << endl; | 281 | // kdDebug() << "======== top: " << contentsRect().top() << " bottom " << // contentsRect().bottom() << " left " << contentsRect().left() << " right " << contentsRect().right() << endl; |
282 | KDGanttSplitterHandle* han = 0; | 282 | KDGanttSplitterHandle* han = 0; |
283 | if ( mPaintWidget ) | 283 | if ( mPaintWidget ) |
284 | han = mPaintWidget->firstHandle(); | 284 | han = mPaintWidget->firstHandle(); |
285 | if ( ! han ) { | 285 | if ( ! han ) { |
286 | int i; | 286 | int i; |
287 | for(i=0;i<mColumns;++i) { | 287 | for(i=0;i<mColumns;++i) { |
288 | if (mEnabled[i]) { | 288 | if (mEnabled[i]) { |
289 | int cellWidth = contentsRect().right()/mColumns; | 289 | int cellWidth = contentsRect().right()/mColumns; |
290 | int xOffset = KOGlobals::self()->reverseLayout() ? | 290 | int xOffset = KOGlobals::self()->reverseLayout() ? |
291 | (mColumns - 1 - i)*cellWidth + cellWidth/2 -mPixmap.width()/2 : | 291 | (mColumns - 1 - i)*cellWidth + cellWidth/2 -mPixmap.width()/2 : |
292 | i*cellWidth + cellWidth/2 -mPixmap.width()/2; | 292 | i*cellWidth + cellWidth/2 -mPixmap.width()/2; |
293 | p->drawPixmap(QPoint(xOffset,0),mPixmap); | 293 | p->drawPixmap(QPoint(xOffset,0),mPixmap); |
294 | } | 294 | } |
295 | } | 295 | } |
296 | } else { | 296 | } else { |
297 | han->repaint(); | 297 | han->repaint(); |
298 | //mPaintWidget->setBackgroundColor( red ); | 298 | //mPaintWidget->setBackgroundColor( red ); |
299 | 299 | ||
300 | QPainter pa( han ); | 300 | QPainter pa( han ); |
301 | int i; | 301 | int i; |
302 | bool setColor = false; | 302 | bool setColor = false; |
303 | for(i=0;i<mColumns;++i) { | 303 | for(i=0;i<mColumns;++i) { |
304 | if (mEnabled[i]) { | 304 | if (mEnabled[i]) { |
305 | setColor = true; | 305 | setColor = true; |
306 | 306 | ||
307 | int cellWidth = contentsRect().right()/mColumns; | 307 | int cellWidth = contentsRect().right()/mColumns; |
308 | int xOffset = KOGlobals::self()->reverseLayout() ? | 308 | int xOffset = KOGlobals::self()->reverseLayout() ? |
309 | (mColumns - 1 - i)*cellWidth + cellWidth/2 -mPixmap.width()/2 : | 309 | (mColumns - 1 - i)*cellWidth + cellWidth/2 -mPixmap.width()/2 : |
310 | i*cellWidth + cellWidth/2 -mPixmap.width()/2; | 310 | i*cellWidth + cellWidth/2 -mPixmap.width()/2; |
311 | pa.drawPixmap(QPoint(mXOffset + xOffset,0),mPixmap); | 311 | pa.drawPixmap(QPoint(mXOffset + xOffset,0),mPixmap); |
312 | //qDebug("222draw pix %d ",xOffset ); | 312 | //qDebug("222draw pix %d ",xOffset ); |
313 | 313 | ||
314 | } | 314 | } |
315 | 315 | ||
316 | } | 316 | } |
317 | pa.end(); | 317 | pa.end(); |
318 | 318 | ||
319 | } | 319 | } |
320 | } | 320 | } |
321 | 321 | ||
322 | void EventIndicator::setXOffset( int x ) | 322 | void EventIndicator::setXOffset( int x ) |
323 | { | 323 | { |
324 | mXOffset = x; | 324 | mXOffset = x; |
325 | } | 325 | } |
326 | void EventIndicator::setPaintWidget( KDGanttMinimizeSplitter * w ) | 326 | void EventIndicator::setPaintWidget( KDGanttMinimizeSplitter * w ) |
327 | { | 327 | { |
328 | mPaintWidget = w; | 328 | mPaintWidget = w; |
329 | } | 329 | } |
330 | void EventIndicator::changeColumns(int columns) | 330 | void EventIndicator::changeColumns(int columns) |
331 | { | 331 | { |
332 | mColumns = columns; | 332 | mColumns = columns; |
333 | mEnabled.resize(mColumns); | 333 | mEnabled.resize(mColumns); |
334 | 334 | ||
335 | update(); | 335 | update(); |
336 | } | 336 | } |
337 | 337 | ||
338 | void EventIndicator::enableColumn(int column, bool enable) | 338 | void EventIndicator::enableColumn(int column, bool enable) |
339 | { | 339 | { |
340 | mEnabled[column] = enable; | 340 | mEnabled[column] = enable; |
341 | } | 341 | } |
342 | 342 | ||
343 | 343 | ||
344 | //////////////////////////////////////////////////////////////////////////// | 344 | //////////////////////////////////////////////////////////////////////////// |
345 | //////////////////////////////////////////////////////////////////////////// | 345 | //////////////////////////////////////////////////////////////////////////// |
346 | //////////////////////////////////////////////////////////////////////////// | 346 | //////////////////////////////////////////////////////////////////////////// |
347 | 347 | ||
348 | KOAgendaView::KOAgendaView(Calendar *cal,QWidget *parent,const char *name) : | 348 | KOAgendaView::KOAgendaView(Calendar *cal,QWidget *parent,const char *name) : |
349 | KOEventView (cal,parent,name) | 349 | KOEventView (cal,parent,name) |
350 | { | 350 | { |
351 | mBlockUpdating = true; | 351 | mBlockUpdating = true; |
352 | mStartHour = 8; | 352 | mStartHour = 8; |
353 | mSelectedDates.append(QDate::currentDate()); | 353 | mSelectedDates.append(QDate::currentDate()); |
354 | 354 | ||
355 | mLayoutDayLabels = 0; | 355 | mLayoutDayLabels = 0; |
356 | mDayLabelsFrame = 0; | 356 | mDayLabelsFrame = 0; |
357 | mDayLabels = 0; | 357 | mDayLabels = 0; |
358 | bool isRTL = KOGlobals::self()->reverseLayout(); | 358 | bool isRTL = KOGlobals::self()->reverseLayout(); |
359 | 359 | ||
360 | if ( KOPrefs::instance()->mVerticalScreen ) { | 360 | if ( KOPrefs::instance()->mVerticalScreen ) { |
361 | mExpandedPixmap = SmallIcon( "1downarrow" ); | 361 | mExpandedPixmap = SmallIcon( "1downarrow" ); |
362 | mNotExpandedPixmap = SmallIcon( "1uparrow" ); | 362 | mNotExpandedPixmap = SmallIcon( "1uparrow" ); |
363 | } else { | 363 | } else { |
364 | mExpandedPixmap = SmallIcon( isRTL ? "1leftarrow" : "1rightarrow" ); | 364 | mExpandedPixmap = SmallIcon( isRTL ? "1leftarrow" : "1rightarrow" ); |
365 | mNotExpandedPixmap = SmallIcon( isRTL ? "1rightarrow" : "1leftarrow" ); | 365 | mNotExpandedPixmap = SmallIcon( isRTL ? "1rightarrow" : "1leftarrow" ); |
366 | } | 366 | } |
367 | 367 | ||
368 | QBoxLayout *topLayout = new QVBoxLayout(this); | 368 | QBoxLayout *topLayout = new QVBoxLayout(this); |
369 | 369 | ||
370 | // Create day name labels for agenda columns | 370 | // Create day name labels for agenda columns |
371 | mDayLabelsFrame = new QHBox(this); | 371 | mDayLabelsFrame = new QHBox(this); |
372 | topLayout->addWidget(mDayLabelsFrame); | 372 | topLayout->addWidget(mDayLabelsFrame); |
373 | mDayLabels = new QFrame (mDayLabelsFrame); | 373 | mDayLabels = new QFrame (mDayLabelsFrame); |
374 | mLayoutDayLabels = new QHBoxLayout(mDayLabels); | 374 | mLayoutDayLabels = new QHBoxLayout(mDayLabels); |
375 | // Create agenda splitter | 375 | // Create agenda splitter |
376 | #ifndef KORG_NOSPLITTER | 376 | #ifndef KORG_NOSPLITTER |
377 | mSplitterAgenda = new QSplitter(Vertical,this); | 377 | mSplitterAgenda = new QSplitter(Vertical,this); |
378 | topLayout->addWidget(mSplitterAgenda); | 378 | topLayout->addWidget(mSplitterAgenda); |
379 | mSplitterAgenda->setOpaqueResize(); | 379 | mSplitterAgenda->setOpaqueResize(); |
380 | 380 | ||
381 | mAllDayFrame = new QHBox(mSplitterAgenda); | 381 | mAllDayFrame = new QHBox(mSplitterAgenda); |
382 | 382 | ||
383 | QWidget *agendaFrame = new QWidget(mSplitterAgenda); | 383 | QWidget *agendaFrame = new QWidget(mSplitterAgenda); |
384 | #else | 384 | #else |
385 | #if 0 | 385 | #if 0 |
386 | QWidget *mainBox = new QWidget( this ); | 386 | QWidget *mainBox = new QWidget( this ); |
387 | topLayout->addWidget( mainBox ); | 387 | topLayout->addWidget( mainBox ); |
388 | QBoxLayout *mainLayout = new QVBoxLayout(mainBox); | 388 | QBoxLayout *mainLayout = new QVBoxLayout(mainBox); |
389 | mAllDayFrame = new QHBox(mainBox); | 389 | mAllDayFrame = new QHBox(mainBox); |
390 | mainLayout->addWidget(mAllDayFrame); | 390 | mainLayout->addWidget(mAllDayFrame); |
391 | mainLayout->setStretchFactor( mAllDayFrame, 0 ); | 391 | mainLayout->setStretchFactor( mAllDayFrame, 0 ); |
392 | mAllDayFrame->setFocusPolicy(NoFocus); | 392 | mAllDayFrame->setFocusPolicy(NoFocus); |
393 | QWidget *agendaFrame = new QWidget(mainBox); | 393 | QWidget *agendaFrame = new QWidget(mainBox); |
394 | mainLayout->addWidget(agendaFrame); | 394 | mainLayout->addWidget(agendaFrame); |
395 | mainLayout->setStretchFactor( agendaFrame, 10 ); | 395 | mainLayout->setStretchFactor( agendaFrame, 10 ); |
396 | 396 | ||
397 | agendaFrame->setFocusPolicy(NoFocus); | 397 | agendaFrame->setFocusPolicy(NoFocus); |
398 | #endif | 398 | #endif |
399 | mSplitterAgenda = new KDGanttMinimizeSplitter( Qt::Vertical, this); | 399 | mSplitterAgenda = new KDGanttMinimizeSplitter( Qt::Vertical, this); |
400 | mSplitterAgenda->setMinimizeDirection ( KDGanttMinimizeSplitter::Up ); | 400 | mSplitterAgenda->setMinimizeDirection ( KDGanttMinimizeSplitter::Up ); |
401 | topLayout->addWidget( mSplitterAgenda ); | 401 | topLayout->addWidget( mSplitterAgenda ); |
402 | mAllDayFrame = new QHBox(mSplitterAgenda); | 402 | mAllDayFrame = new QHBox(mSplitterAgenda); |
403 | mAllDayFrame->setFocusPolicy(NoFocus); | 403 | mAllDayFrame->setFocusPolicy(NoFocus); |
404 | QWidget *agendaFrame = new QWidget(mSplitterAgenda); | 404 | QWidget *agendaFrame = new QWidget(mSplitterAgenda); |
405 | agendaFrame->setFocusPolicy(NoFocus); | 405 | agendaFrame->setFocusPolicy(NoFocus); |
406 | 406 | ||
407 | #endif | 407 | #endif |
408 | 408 | ||
409 | // Create all-day agenda widget | 409 | // Create all-day agenda widget |
410 | mDummyAllDayLeft = new QVBox( mAllDayFrame ); | 410 | mDummyAllDayLeft = new QVBox( mAllDayFrame ); |
411 | 411 | ||
412 | mExpandButton = new QPushButton(mDummyAllDayLeft); | 412 | mExpandButton = new QPushButton(mDummyAllDayLeft); |
413 | mExpandButton->setPixmap( mNotExpandedPixmap ); | 413 | mExpandButton->setPixmap( mNotExpandedPixmap ); |
414 | int widebut = mExpandButton->sizeHint().width(); | 414 | int widebut = mExpandButton->sizeHint().width(); |
415 | if ( QApplication::desktop()->width() < 480 ) | 415 | if ( QApplication::desktop()->width() < 480 ) |
416 | widebut = widebut*2; | 416 | widebut = widebut*2; |
417 | else | 417 | else |
418 | widebut = (widebut*3) / 2; | 418 | widebut = (widebut*3) / 2; |
419 | //mExpandButton->setSizePolicy( QSizePolicy( QSizePolicy::Fixed, | 419 | //mExpandButton->setSizePolicy( QSizePolicy( QSizePolicy::Fixed, |
420 | // QSizePolicy::Fixed ) ); | 420 | // QSizePolicy::Fixed ) ); |
421 | mExpandButton->setFixedSize( widebut, widebut); | 421 | mExpandButton->setFixedSize( widebut, widebut); |
422 | connect( mExpandButton, SIGNAL( clicked() ), SIGNAL( toggleExpand() ) ); | 422 | connect( mExpandButton, SIGNAL( clicked() ), SIGNAL( toggleExpand() ) ); |
423 | mExpandButton->setFocusPolicy(NoFocus); | 423 | mExpandButton->setFocusPolicy(NoFocus); |
424 | mAllDayAgenda = new KOAgenda(1,mAllDayFrame); | 424 | mAllDayAgenda = new KOAgenda(1,mAllDayFrame); |
425 | mAllDayAgenda->setFocusPolicy(NoFocus); | 425 | mAllDayAgenda->setFocusPolicy(NoFocus); |
426 | QWidget *dummyAllDayRight = new QWidget(mAllDayFrame); | 426 | QWidget *dummyAllDayRight = new QWidget(mAllDayFrame); |
427 | 427 | ||
428 | // Create event context menu for all day agenda | 428 | // Create event context menu for all day agenda |
429 | mAllDayAgendaPopup = eventPopup(); | 429 | mAllDayAgendaPopup = eventPopup(); |
430 | connect(mAllDayAgenda,SIGNAL(showIncidencePopupSignal(Incidence *)), | 430 | connect(mAllDayAgenda,SIGNAL(showIncidencePopupSignal(Incidence *)), |
431 | mAllDayAgendaPopup,SLOT(showIncidencePopup(Incidence *))); | 431 | mAllDayAgendaPopup,SLOT(showIncidencePopup(Incidence *))); |
432 | 432 | ||
433 | // Create agenda frame | 433 | // Create agenda frame |
434 | QGridLayout *agendaLayout = new QGridLayout(agendaFrame,3,3); | 434 | QGridLayout *agendaLayout = new QGridLayout(agendaFrame,3,3); |
435 | // QHBox *agendaFrame = new QHBox(splitterAgenda); | 435 | // QHBox *agendaFrame = new QHBox(splitterAgenda); |
436 | 436 | ||
437 | // create event indicator bars | 437 | // create event indicator bars |
438 | mEventIndicatorTop = new EventIndicator(EventIndicator::Top,agendaFrame); | 438 | mEventIndicatorTop = new EventIndicator(EventIndicator::Top,agendaFrame); |
439 | agendaLayout->addWidget(mEventIndicatorTop,0,1); | 439 | agendaLayout->addWidget(mEventIndicatorTop,0,1); |
440 | mEventIndicatorTop->setPaintWidget( mSplitterAgenda ); | 440 | mEventIndicatorTop->setPaintWidget( mSplitterAgenda ); |
441 | mEventIndicatorBottom = new EventIndicator(EventIndicator::Bottom, | 441 | mEventIndicatorBottom = new EventIndicator(EventIndicator::Bottom, |
442 | agendaFrame); | 442 | agendaFrame); |
443 | agendaLayout->addWidget(mEventIndicatorBottom,2,1); | 443 | agendaLayout->addWidget(mEventIndicatorBottom,2,1); |
444 | QWidget *dummyAgendaRight = new QWidget(agendaFrame); | 444 | QWidget *dummyAgendaRight = new QWidget(agendaFrame); |
445 | agendaLayout->addWidget(dummyAgendaRight,0,2); | 445 | agendaLayout->addWidget(dummyAgendaRight,0,2); |
446 | 446 | ||
447 | // Create time labels | 447 | // Create time labels |
448 | mTimeLabels = new TimeLabels(24,agendaFrame); | 448 | mTimeLabels = new TimeLabels(24,agendaFrame); |
449 | agendaLayout->addWidget(mTimeLabels,1,0); | 449 | agendaLayout->addWidget(mTimeLabels,1,0); |
450 | connect(mTimeLabels,SIGNAL( scaleChanged()), | 450 | connect(mTimeLabels,SIGNAL( scaleChanged()), |
451 | this,SLOT(updateConfig())); | 451 | this,SLOT(updateConfig())); |
452 | 452 | ||
453 | // Create agenda | 453 | // Create agenda |
454 | mAgenda = new KOAgenda(1,96,KOPrefs::instance()->mHourSize,agendaFrame); | 454 | mAgenda = new KOAgenda(1,96,KOPrefs::instance()->mHourSize,agendaFrame); |
455 | agendaLayout->addMultiCellWidget(mAgenda,1,1,1,2); | 455 | agendaLayout->addMultiCellWidget(mAgenda,1,1,1,2); |
456 | agendaLayout->setColStretch(1,1); | 456 | agendaLayout->setColStretch(1,1); |
457 | mAgenda->setFocusPolicy(NoFocus); | 457 | mAgenda->setFocusPolicy(NoFocus); |
458 | // Create event context menu for agenda | 458 | // Create event context menu for agenda |
459 | mAgendaPopup = eventPopup(); | 459 | mAgendaPopup = eventPopup(); |
460 | 460 | ||
461 | mAgendaPopup->addAdditionalItem(QIconSet(SmallIcon("bell")), | 461 | mAgendaPopup->addAdditionalItem(QIconSet(SmallIcon("bell")), |
462 | i18n("Toggle Alarm"),mAgenda, | 462 | i18n("Toggle Alarm"),mAgenda, |
463 | SLOT(popupAlarm()),true); | 463 | SLOT(popupAlarm()),true); |
464 | 464 | ||
465 | 465 | ||
466 | connect(mAgenda,SIGNAL(showIncidencePopupSignal(Incidence *)), | 466 | connect(mAgenda,SIGNAL(showIncidencePopupSignal(Incidence *)), |
467 | mAgendaPopup,SLOT(showIncidencePopup(Incidence *))); | 467 | mAgendaPopup,SLOT(showIncidencePopup(Incidence *))); |
468 | 468 | ||
469 | // make connections between dependent widgets | 469 | // make connections between dependent widgets |
470 | mTimeLabels->setAgenda(mAgenda); | 470 | mTimeLabels->setAgenda(mAgenda); |
471 | 471 | ||
472 | // Update widgets to reflect user preferences | 472 | // Update widgets to reflect user preferences |
473 | // updateConfig(); | 473 | // updateConfig(); |
474 | 474 | ||
475 | // createDayLabels(); | 475 | // createDayLabels(); |
476 | 476 | ||
477 | // these blank widgets make the All Day Event box line up with the agenda | 477 | // these blank widgets make the All Day Event box line up with the agenda |
478 | dummyAllDayRight->setFixedWidth(mAgenda->verticalScrollBar()->width()); | 478 | dummyAllDayRight->setFixedWidth(mAgenda->verticalScrollBar()->width()); |
479 | dummyAgendaRight->setFixedWidth(mAgenda->verticalScrollBar()->width()); | 479 | dummyAgendaRight->setFixedWidth(mAgenda->verticalScrollBar()->width()); |
480 | mDummyAllDayLeft->setFixedWidth(mTimeLabels->width()); | 480 | mDummyAllDayLeft->setFixedWidth(mTimeLabels->width()); |
481 | 481 | ||
482 | // Scrolling | 482 | // Scrolling |
483 | connect(mAgenda->verticalScrollBar(),SIGNAL(valueChanged(int)), | 483 | connect(mAgenda->verticalScrollBar(),SIGNAL(valueChanged(int)), |
484 | mTimeLabels, SLOT(positionChanged())); | 484 | mTimeLabels, SLOT(positionChanged())); |
485 | connect(mTimeLabels->verticalScrollBar(),SIGNAL(valueChanged(int)), | 485 | connect(mTimeLabels->verticalScrollBar(),SIGNAL(valueChanged(int)), |
486 | SLOT(setContentsPos(int))); | 486 | SLOT(setContentsPos(int))); |
487 | 487 | ||
488 | connect(mAgenda,SIGNAL(showDateView( int, QDate )),SIGNAL(showDateView( int, QDate ))); | ||
489 | connect(mAllDayAgenda,SIGNAL(showDateView( int, QDate )),SIGNAL(showDateView( int, QDate ))); | ||
490 | |||
488 | // Create/Show/Edit/Delete Event | 491 | // Create/Show/Edit/Delete Event |
489 | connect(mAgenda,SIGNAL(newEventSignal(int,int)), | 492 | connect(mAgenda,SIGNAL(newEventSignal(int,int)), |
490 | SLOT(newEvent(int,int))); | 493 | SLOT(newEvent(int,int))); |
491 | connect(mAgenda,SIGNAL(newTodoSignal(int,int)), | 494 | connect(mAgenda,SIGNAL(newTodoSignal(int,int)), |
492 | SLOT(newTodo(int,int))); | 495 | SLOT(newTodo(int,int))); |
493 | connect(mAgenda,SIGNAL(newEventSignal(int,int,int,int)), | 496 | connect(mAgenda,SIGNAL(newEventSignal(int,int,int,int)), |
494 | SLOT(newEvent(int,int,int,int))); | 497 | SLOT(newEvent(int,int,int,int))); |
495 | connect(mAllDayAgenda,SIGNAL(newEventSignal(int,int)), | 498 | connect(mAllDayAgenda,SIGNAL(newEventSignal(int,int)), |
496 | SLOT(newEventAllDay(int,int))); | 499 | SLOT(newEventAllDay(int,int))); |
497 | connect(mAllDayAgenda,SIGNAL(newTodoSignal(int,int)), | 500 | connect(mAllDayAgenda,SIGNAL(newTodoSignal(int,int)), |
498 | SLOT(newTodoAllDay(int,int))); | 501 | SLOT(newTodoAllDay(int,int))); |
499 | connect(mAllDayAgenda,SIGNAL(newEventSignal(int,int,int,int)), | 502 | connect(mAllDayAgenda,SIGNAL(newEventSignal(int,int,int,int)), |
500 | SLOT(newEventAllDay(int,int))); | 503 | SLOT(newEventAllDay(int,int))); |
501 | connect(mAgenda,SIGNAL(newTimeSpanSignal(int,int,int,int)), | 504 | connect(mAgenda,SIGNAL(newTimeSpanSignal(int,int,int,int)), |
502 | SLOT(newTimeSpanSelected(int,int,int,int))); | 505 | SLOT(newTimeSpanSelected(int,int,int,int))); |
503 | connect(mAllDayAgenda,SIGNAL(newTimeSpanSignal(int,int,int,int)), | 506 | connect(mAllDayAgenda,SIGNAL(newTimeSpanSignal(int,int,int,int)), |
504 | SLOT(newTimeSpanSelectedAllDay(int,int,int,int))); | 507 | SLOT(newTimeSpanSelectedAllDay(int,int,int,int))); |
505 | connect(mAgenda,SIGNAL(newStartSelectSignal()),SLOT(updateView())); | 508 | connect(mAgenda,SIGNAL(newStartSelectSignal()),SLOT(updateView())); |
506 | connect(mAllDayAgenda,SIGNAL(newStartSelectSignal()),SLOT(updateView())); | 509 | connect(mAllDayAgenda,SIGNAL(newStartSelectSignal()),SLOT(updateView())); |
507 | 510 | ||
508 | connect(mAgenda,SIGNAL(editIncidenceSignal(Incidence *)), | 511 | connect(mAgenda,SIGNAL(editIncidenceSignal(Incidence *)), |
509 | SIGNAL(editIncidenceSignal(Incidence *))); | 512 | SIGNAL(editIncidenceSignal(Incidence *))); |
510 | connect(mAllDayAgenda,SIGNAL(editIncidenceSignal(Incidence *)), | 513 | connect(mAllDayAgenda,SIGNAL(editIncidenceSignal(Incidence *)), |
511 | SIGNAL(editIncidenceSignal(Incidence *))); | 514 | SIGNAL(editIncidenceSignal(Incidence *))); |
512 | connect(mAgenda,SIGNAL(showIncidenceSignal(Incidence *)), | 515 | connect(mAgenda,SIGNAL(showIncidenceSignal(Incidence *)), |
513 | SIGNAL(showIncidenceSignal(Incidence *))); | 516 | SIGNAL(showIncidenceSignal(Incidence *))); |
514 | connect(mAllDayAgenda,SIGNAL(showIncidenceSignal(Incidence *)), | 517 | connect(mAllDayAgenda,SIGNAL(showIncidenceSignal(Incidence *)), |
515 | SIGNAL(showIncidenceSignal(Incidence *))); | 518 | SIGNAL(showIncidenceSignal(Incidence *))); |
516 | connect(mAgenda,SIGNAL(deleteIncidenceSignal(Incidence *)), | 519 | connect(mAgenda,SIGNAL(deleteIncidenceSignal(Incidence *)), |
517 | SIGNAL(deleteIncidenceSignal(Incidence *))); | 520 | SIGNAL(deleteIncidenceSignal(Incidence *))); |
518 | connect(mAllDayAgenda,SIGNAL(deleteIncidenceSignal(Incidence *)), | 521 | connect(mAllDayAgenda,SIGNAL(deleteIncidenceSignal(Incidence *)), |
519 | SIGNAL(deleteIncidenceSignal(Incidence *))); | 522 | SIGNAL(deleteIncidenceSignal(Incidence *))); |
520 | 523 | ||
521 | connect(mAgenda,SIGNAL(itemModified(KOAgendaItem *, int )), | 524 | connect(mAgenda,SIGNAL(itemModified(KOAgendaItem *, int )), |
522 | SLOT(updateEventDates(KOAgendaItem *, int ))); | 525 | SLOT(updateEventDates(KOAgendaItem *, int ))); |
523 | connect(mAllDayAgenda,SIGNAL(itemModified(KOAgendaItem *, int )), | 526 | connect(mAllDayAgenda,SIGNAL(itemModified(KOAgendaItem *, int )), |
524 | SLOT(updateEventDates(KOAgendaItem *, int))); | 527 | SLOT(updateEventDates(KOAgendaItem *, int))); |
525 | 528 | ||
526 | // event indicator update | 529 | // event indicator update |
527 | connect(mAgenda,SIGNAL(lowerYChanged(int)), | 530 | connect(mAgenda,SIGNAL(lowerYChanged(int)), |
528 | SLOT(updateEventIndicatorTop(int))); | 531 | SLOT(updateEventIndicatorTop(int))); |
529 | connect(mAgenda,SIGNAL(upperYChanged(int)), | 532 | connect(mAgenda,SIGNAL(upperYChanged(int)), |
530 | SLOT(updateEventIndicatorBottom(int))); | 533 | SLOT(updateEventIndicatorBottom(int))); |
531 | // drag signals | 534 | // drag signals |
532 | /* | 535 | /* |
533 | connect(mAgenda,SIGNAL(startDragSignal(Event *)), | 536 | connect(mAgenda,SIGNAL(startDragSignal(Event *)), |
534 | SLOT(startDrag(Event *))); | 537 | SLOT(startDrag(Event *))); |
535 | connect(mAllDayAgenda,SIGNAL(startDragSignal(Event *)), | 538 | connect(mAllDayAgenda,SIGNAL(startDragSignal(Event *)), |
536 | SLOT(startDrag(Event *))); | 539 | SLOT(startDrag(Event *))); |
537 | */ | 540 | */ |
538 | // synchronize selections | 541 | // synchronize selections |
539 | connect( mAgenda, SIGNAL( incidenceSelected( Incidence * ) ), | 542 | connect( mAgenda, SIGNAL( incidenceSelected( Incidence * ) ), |
540 | mAllDayAgenda, SLOT( deselectItem() ) ); | 543 | mAllDayAgenda, SLOT( deselectItem() ) ); |
541 | connect( mAllDayAgenda, SIGNAL( incidenceSelected( Incidence * ) ), | 544 | connect( mAllDayAgenda, SIGNAL( incidenceSelected( Incidence * ) ), |
542 | mAgenda, SLOT( deselectItem() ) ); | 545 | mAgenda, SLOT( deselectItem() ) ); |
543 | connect( mAgenda, SIGNAL( incidenceSelected( Incidence * ) ), | 546 | connect( mAgenda, SIGNAL( incidenceSelected( Incidence * ) ), |
544 | SIGNAL( incidenceSelected( Incidence * ) ) ); | 547 | SIGNAL( incidenceSelected( Incidence * ) ) ); |
545 | connect( mAllDayAgenda, SIGNAL( incidenceSelected( Incidence * ) ), | 548 | connect( mAllDayAgenda, SIGNAL( incidenceSelected( Incidence * ) ), |
546 | SIGNAL( incidenceSelected( Incidence * ) ) ); | 549 | SIGNAL( incidenceSelected( Incidence * ) ) ); |
547 | connect( mAgenda, SIGNAL( resizedSignal() ), | 550 | connect( mAgenda, SIGNAL( resizedSignal() ), |
548 | SLOT( updateConfig( ) ) ); | 551 | SLOT( updateConfig( ) ) ); |
549 | connect( mAgenda, SIGNAL( addToCalSignal(Incidence *, Incidence *) ), | 552 | connect( mAgenda, SIGNAL( addToCalSignal(Incidence *, Incidence *) ), |
550 | SLOT( addToCalSlot(Incidence *, Incidence * ) ) ); | 553 | SLOT( addToCalSlot(Incidence *, Incidence * ) ) ); |
551 | connect( mAllDayAgenda, SIGNAL( addToCalSignal(Incidence * ,Incidence *) ), | 554 | connect( mAllDayAgenda, SIGNAL( addToCalSignal(Incidence * ,Incidence *) ), |
552 | SLOT( addToCalSlot(Incidence * , Incidence *) ) ); | 555 | SLOT( addToCalSlot(Incidence * , Incidence *) ) ); |
553 | // connect( mAgenda, SIGNAL( cloneIncidenceSignal(Incidence *) ), SIGNAL( cloneIncidenceSignal(Incidence *) ) ); | 556 | // connect( mAgenda, SIGNAL( cloneIncidenceSignal(Incidence *) ), SIGNAL( cloneIncidenceSignal(Incidence *) ) ); |
554 | //connect( mAllDayAgenda, SIGNAL( cloneIncidenceSignal(Incidence *) ), SIGNAL( cloneIncidenceSignal(Incidence *) ) ); | 557 | //connect( mAllDayAgenda, SIGNAL( cloneIncidenceSignal(Incidence *) ), SIGNAL( cloneIncidenceSignal(Incidence *) ) ); |
555 | 558 | ||
556 | 559 | ||
557 | } | 560 | } |
558 | 561 | ||
559 | void KOAgendaView::toggleAllDay() | 562 | void KOAgendaView::toggleAllDay() |
560 | { | 563 | { |
561 | if ( mSplitterAgenda->firstHandle() ) | 564 | if ( mSplitterAgenda->firstHandle() ) |
562 | mSplitterAgenda->firstHandle()->toggle(); | 565 | mSplitterAgenda->firstHandle()->toggle(); |
563 | } | 566 | } |
564 | void KOAgendaView::addToCalSlot(Incidence * inc, Incidence * incOld ) | 567 | void KOAgendaView::addToCalSlot(Incidence * inc, Incidence * incOld ) |
565 | { | 568 | { |
566 | calendar()->addIncidence( inc ); | 569 | calendar()->addIncidence( inc ); |
567 | 570 | ||
568 | if ( incOld ) { | 571 | if ( incOld ) { |
569 | if ( incOld->type() == "Todo" ) | 572 | if ( incOld->type() == "Todo" ) |
570 | emit todoMoved((Todo*)incOld, KOGlobals::EVENTEDITED ); | 573 | emit todoMoved((Todo*)incOld, KOGlobals::EVENTEDITED ); |
571 | else | 574 | else |
572 | emit incidenceChanged(incOld, KOGlobals::EVENTEDITED); | 575 | emit incidenceChanged(incOld, KOGlobals::EVENTEDITED); |
573 | } | 576 | } |
574 | 577 | ||
575 | } | 578 | } |
576 | 579 | ||
577 | KOAgendaView::~KOAgendaView() | 580 | KOAgendaView::~KOAgendaView() |
578 | { | 581 | { |
579 | delete mAgendaPopup; | 582 | delete mAgendaPopup; |
580 | delete mAllDayAgendaPopup; | 583 | delete mAllDayAgendaPopup; |
581 | delete KOAgendaItem::paintPix(); | 584 | delete KOAgendaItem::paintPix(); |
582 | delete KOAgendaItem::paintPixSel(); | 585 | delete KOAgendaItem::paintPixSel(); |
583 | } | 586 | } |
584 | void KOAgendaView::resizeEvent( QResizeEvent* e ) | 587 | void KOAgendaView::resizeEvent( QResizeEvent* e ) |
585 | { | 588 | { |
586 | //qDebug("KOAgendaView::resizeEvent( QResizeEvent* e ) %d ", e->size().width()); | 589 | //qDebug("KOAgendaView::resizeEvent( QResizeEvent* e ) %d ", e->size().width()); |
587 | bool uc = false; | 590 | bool uc = false; |
588 | int ow = e->oldSize().width(); | 591 | int ow = e->oldSize().width(); |
589 | int oh = e->oldSize().height(); | 592 | int oh = e->oldSize().height(); |
590 | int w = e->size().width(); | 593 | int w = e->size().width(); |
591 | int h = e->size().height(); | 594 | int h = e->size().height(); |
592 | if ( (ow > oh && w< h ) || (ow < oh && w > h ) ) { | 595 | if ( (ow > oh && w< h ) || (ow < oh && w > h ) ) { |
593 | if ( ! mBlockUpdating && !globalFlagBlockStartup && !globalFlagBlockAgenda ) | 596 | if ( ! mBlockUpdating && !globalFlagBlockStartup && !globalFlagBlockAgenda ) |
594 | uc = true; | 597 | uc = true; |
595 | //qDebug("view changed %d %d %d %d ", ow, oh , w , h); | 598 | //qDebug("view changed %d %d %d %d ", ow, oh , w , h); |
596 | } | 599 | } |
597 | mUpcomingWidth = e->size().width() ; | 600 | mUpcomingWidth = e->size().width() ; |
598 | if ( mBlockUpdating || uc ) { | 601 | if ( mBlockUpdating || uc ) { |
599 | mBlockUpdating = false; | 602 | mBlockUpdating = false; |
600 | //mAgenda->setMinimumSize(800 , 600 ); | 603 | //mAgenda->setMinimumSize(800 , 600 ); |
601 | //qDebug("mAgenda->resize+++++++++++++++ "); | 604 | //qDebug("mAgenda->resize+++++++++++++++ "); |
602 | updateConfig(); | 605 | updateConfig(); |
603 | //qDebug("KOAgendaView::Updating now possible "); | 606 | //qDebug("KOAgendaView::Updating now possible "); |
604 | } else | 607 | } else |
605 | createDayLabels(); | 608 | createDayLabels(); |
606 | //qDebug("resizeEvent end "); | 609 | //qDebug("resizeEvent end "); |
607 | 610 | ||
608 | } | 611 | } |
609 | void KOAgendaView::createDayLabels() | 612 | void KOAgendaView::createDayLabels() |
610 | { | 613 | { |
611 | 614 | ||
612 | if ( mBlockUpdating || globalFlagBlockLabel == 1) { | 615 | if ( mBlockUpdating || globalFlagBlockLabel == 1) { |
613 | // qDebug(" KOAgendaView::createDayLabels() blocked "); | 616 | // qDebug(" KOAgendaView::createDayLabels() blocked "); |
614 | return; | 617 | return; |
615 | 618 | ||
616 | } | 619 | } |
617 | int newHight; | 620 | int newHight; |
618 | 621 | ||
619 | // ### Before deleting and recreating we could check if mSelectedDates changed... | 622 | // ### Before deleting and recreating we could check if mSelectedDates changed... |
620 | // It would remove some flickering and gain speed (since this is called by | 623 | // It would remove some flickering and gain speed (since this is called by |
621 | // each updateView() call) | 624 | // each updateView() call) |
622 | 625 | ||
623 | int maxWid = mUpcomingWidth - mTimeLabels->width()- mAgenda->verticalScrollBar()->width() - 2; | 626 | int maxWid = mUpcomingWidth - mTimeLabels->width()- mAgenda->verticalScrollBar()->width() - 2; |
624 | mDayLabelsFrame->setMaximumWidth( mUpcomingWidth ); | 627 | mDayLabelsFrame->setMaximumWidth( mUpcomingWidth ); |
625 | if ( maxWid < 0 ) | 628 | if ( maxWid < 0 ) |
626 | maxWid = 20; | 629 | maxWid = 20; |
627 | 630 | ||
628 | QFont dlf = KOPrefs::instance()->mTimeLabelsFont; | 631 | QFont dlf = KOPrefs::instance()->mTimeLabelsFont; |
629 | QFontMetrics fm ( dlf ); | 632 | QFontMetrics fm ( dlf ); |
630 | int selCount = mSelectedDates.count(); | 633 | int selCount = mSelectedDates.count(); |
631 | QString dayTest = "Mon 20"; | 634 | QString dayTest = "Mon 20"; |
632 | int wid = fm.width( dayTest ); | 635 | int wid = fm.width( dayTest ); |
633 | maxWid -= ( selCount * 3 ); | 636 | maxWid -= ( selCount * 3 ); |
634 | if ( maxWid < 0 ) | 637 | if ( maxWid < 0 ) |
635 | maxWid = 20; | 638 | maxWid = 20; |
636 | int needWid = wid * selCount; | 639 | int needWid = wid * selCount; |
637 | //qDebug("++++++++Needed : %d MaxWidth: %d", needWid, maxWid ); | 640 | //qDebug("++++++++Needed : %d MaxWidth: %d", needWid, maxWid ); |
638 | //if ( needWid > maxWid ) | 641 | //if ( needWid > maxWid ) |
639 | // qDebug("DAYLABELS TOOOOOOO BIG "); | 642 | // qDebug("DAYLABELS TOOOOOOO BIG "); |
640 | while ( needWid > maxWid ) { | 643 | while ( needWid > maxWid ) { |
641 | dayTest = dayTest.left( dayTest.length() - 1 ); | 644 | dayTest = dayTest.left( dayTest.length() - 1 ); |
642 | wid = fm.width( dayTest ); | 645 | wid = fm.width( dayTest ); |
643 | needWid = wid * selCount; | 646 | needWid = wid * selCount; |
644 | } | 647 | } |
645 | int maxLen = dayTest.length(); | 648 | int maxLen = dayTest.length(); |
646 | int fontPoint = dlf.pointSize(); | 649 | int fontPoint = dlf.pointSize(); |
647 | if ( maxLen < 2 ) { | 650 | if ( maxLen < 2 ) { |
648 | int fontPoint = dlf.pointSize(); | 651 | int fontPoint = dlf.pointSize(); |
649 | while ( fontPoint > 4 ) { | 652 | while ( fontPoint > 4 ) { |
650 | --fontPoint; | 653 | --fontPoint; |
651 | dlf.setPointSize( fontPoint ); | 654 | dlf.setPointSize( fontPoint ); |
652 | QFontMetrics f( dlf ); | 655 | QFontMetrics f( dlf ); |
653 | wid = f.width( "20" ); | 656 | wid = f.width( "20" ); |
654 | needWid = wid * selCount; | 657 | needWid = wid * selCount; |
655 | if ( needWid < maxWid ) | 658 | if ( needWid < maxWid ) |
656 | break; | 659 | break; |
657 | } | 660 | } |
658 | maxLen = 2; | 661 | maxLen = 2; |
659 | } | 662 | } |
660 | //qDebug("Max len %d ", dayTest.length() ); | 663 | //qDebug("Max len %d ", dayTest.length() ); |
661 | 664 | ||
662 | QFontMetrics tempF( dlf ); | 665 | QFontMetrics tempF( dlf ); |
663 | newHight = tempF.height(); | 666 | newHight = tempF.height(); |
664 | mDayLabels->setFont( dlf ); | 667 | mDayLabels->setFont( dlf ); |
665 | // mLayoutDayLabels = new QHBoxLayout(mDayLabels);; | 668 | // mLayoutDayLabels = new QHBoxLayout(mDayLabels);; |
666 | // mLayoutDayLabels->addSpacing(mTimeLabels->width()); | 669 | // mLayoutDayLabels->addSpacing(mTimeLabels->width()); |
667 | //mLayoutDayLabels->addSpacing( 2 ); | 670 | //mLayoutDayLabels->addSpacing( 2 ); |
668 | // QFont lFont = dlf; | 671 | // QFont lFont = dlf; |
669 | bool appendLabels = false; | 672 | bool appendLabels = false; |
670 | QLabel *dayLabel; | 673 | QLabel *dayLabel; |
671 | dayLabel = mDayLabelsList.first(); | 674 | dayLabel = mDayLabelsList.first(); |
672 | if ( !dayLabel ) { | 675 | if ( !dayLabel ) { |
673 | appendLabels = true; | 676 | appendLabels = true; |
674 | dayLabel = new QLabel(mDayLabels); | 677 | dayLabel = new QLabel(mDayLabels); |
675 | mDayLabelsList.append( dayLabel ); | 678 | mDayLabelsList.append( dayLabel ); |
676 | mLayoutDayLabels->addWidget(dayLabel); | 679 | mLayoutDayLabels->addWidget(dayLabel); |
677 | } | 680 | } |
678 | dayLabel->setFixedWidth( mTimeLabels->width()+2 ); | 681 | dayLabel->setFixedWidth( mTimeLabels->width()+2 ); |
679 | dayLabel->setFont( dlf ); | 682 | dayLabel->setFont( dlf ); |
680 | dayLabel->setAlignment(QLabel::AlignHCenter); | 683 | dayLabel->setAlignment(QLabel::AlignHCenter); |
681 | dayLabel->setText( KOGlobals::self()->calendarSystem()->monthName( mSelectedDates.first(), true ) ); | 684 | dayLabel->setText( KOGlobals::self()->calendarSystem()->monthName( mSelectedDates.first(), true ) ); |
682 | dayLabel->show(); | 685 | dayLabel->show(); |
683 | DateList::ConstIterator dit; | 686 | DateList::ConstIterator dit; |
684 | bool oneday = (mSelectedDates.first() == mSelectedDates.last() ); | 687 | bool oneday = (mSelectedDates.first() == mSelectedDates.last() ); |
685 | for( dit = mSelectedDates.begin(); dit != mSelectedDates.end(); ++dit ) { | 688 | for( dit = mSelectedDates.begin(); dit != mSelectedDates.end(); ++dit ) { |
686 | QDate date = *dit; | 689 | QDate date = *dit; |
687 | // QBoxLayout *dayLayout = new QVBoxLayout(mLayoutDayLabels); | 690 | // QBoxLayout *dayLayout = new QVBoxLayout(mLayoutDayLabels); |
688 | if ( ! appendLabels ) { | 691 | if ( ! appendLabels ) { |
689 | dayLabel = mDayLabelsList.next(); | 692 | dayLabel = mDayLabelsList.next(); |
690 | if ( !dayLabel ) | 693 | if ( !dayLabel ) |
691 | appendLabels = true; | 694 | appendLabels = true; |
692 | } | 695 | } |
693 | if ( appendLabels ) { | 696 | if ( appendLabels ) { |
694 | dayLabel = new QLabel(mDayLabels); | 697 | dayLabel = new QLabel(mDayLabels); |
695 | mDayLabelsList.append( dayLabel ); | 698 | mDayLabelsList.append( dayLabel ); |
696 | mLayoutDayLabels->addWidget(dayLabel); | 699 | mLayoutDayLabels->addWidget(dayLabel); |
697 | } | 700 | } |
698 | dayLabel->setMinimumWidth( 1 ); | 701 | dayLabel->setMinimumWidth( 1 ); |
699 | dayLabel->setMaximumWidth( 2048 ); | 702 | dayLabel->setMaximumWidth( 2048 ); |
700 | dayLabel->setFont( dlf ); | 703 | dayLabel->setFont( dlf ); |
701 | dayLabel->show(); | 704 | dayLabel->show(); |
702 | QString str; | 705 | QString str; |
703 | int dW = KOGlobals::self()->calendarSystem()->dayOfWeek(date); | 706 | int dW = KOGlobals::self()->calendarSystem()->dayOfWeek(date); |
704 | QString dayName = KOGlobals::self()->calendarSystem()->weekDayName( dW, true ); | 707 | QString dayName = KOGlobals::self()->calendarSystem()->weekDayName( dW, true ); |
705 | switch ( maxLen ) { | 708 | switch ( maxLen ) { |
706 | case 2: | 709 | case 2: |
707 | str = QString::number( date.day() ); | 710 | str = QString::number( date.day() ); |
708 | break; | 711 | break; |
709 | 712 | ||
710 | case 3: | 713 | case 3: |
711 | str = dayName.left( 1 ) +QString::number( date.day()); | 714 | str = dayName.left( 1 ) +QString::number( date.day()); |
712 | 715 | ||
713 | break; | 716 | break; |
714 | case 4: | 717 | case 4: |
715 | str = dayName.left( 1 ) + " " +QString::number( date.day()); | 718 | str = dayName.left( 1 ) + " " +QString::number( date.day()); |
716 | 719 | ||
717 | break; | 720 | break; |
718 | case 5: | 721 | case 5: |
719 | str = dayName.left( 2 ) + " " +QString::number( date.day()); | 722 | str = dayName.left( 2 ) + " " +QString::number( date.day()); |
720 | 723 | ||
721 | break; | 724 | break; |
722 | case 6: | 725 | case 6: |
723 | str = dayName.left( 3 ) + " " +QString::number( date.day()); | 726 | str = dayName.left( 3 ) + " " +QString::number( date.day()); |
724 | break; | 727 | break; |
725 | 728 | ||
726 | default: | 729 | default: |
727 | break; | 730 | break; |
728 | } | 731 | } |
729 | if ( oneday ) { | 732 | if ( oneday ) { |
730 | QString addString; | 733 | QString addString; |
731 | if ( mSelectedDates.first() == QDateTime::currentDateTime().date() ) | 734 | if ( mSelectedDates.first() == QDateTime::currentDateTime().date() ) |
732 | addString = i18n("Today"); | 735 | addString = i18n("Today"); |
733 | else if ( mSelectedDates.first() == QDateTime::currentDateTime().date().addDays(1) ) | 736 | else if ( mSelectedDates.first() == QDateTime::currentDateTime().date().addDays(1) ) |
734 | addString = i18n("Tomorrow"); | 737 | addString = i18n("Tomorrow"); |
735 | else if ( mSelectedDates.first() == QDateTime::currentDateTime().date().addDays(-1) ) | 738 | else if ( mSelectedDates.first() == QDateTime::currentDateTime().date().addDays(-1) ) |
736 | addString = i18n("Yesterday"); | 739 | addString = i18n("Yesterday"); |
737 | else if ( mSelectedDates.first() == QDateTime::currentDateTime().date().addDays(-2) ) | 740 | else if ( mSelectedDates.first() == QDateTime::currentDateTime().date().addDays(-2) ) |
738 | addString = i18n("Day before yesterday"); | 741 | addString = i18n("Day before yesterday"); |
739 | else if ( mSelectedDates.first() == QDateTime::currentDateTime().date().addDays(2) ) | 742 | else if ( mSelectedDates.first() == QDateTime::currentDateTime().date().addDays(2) ) |
740 | addString = i18n("Day after tomorrow"); | 743 | addString = i18n("Day after tomorrow"); |
741 | if ( !addString.isEmpty() ) { | 744 | if ( !addString.isEmpty() ) { |
742 | str = addString+", " + str; | 745 | str = addString+", " + str; |
743 | } | 746 | } |
744 | } | 747 | } |
745 | dayLabel->setText(str); | 748 | dayLabel->setText(str); |
746 | dayLabel->setAlignment(QLabel::AlignHCenter); | 749 | dayLabel->setAlignment(QLabel::AlignHCenter); |
747 | if (date == QDate::currentDate()) { | 750 | if (date == QDate::currentDate()) { |
748 | QFont bFont = dlf; | 751 | QFont bFont = dlf; |
749 | bFont.setBold( true ); | 752 | bFont.setBold( true ); |
750 | dayLabel->setFont(bFont); | 753 | dayLabel->setFont(bFont); |
751 | } | 754 | } |
752 | //dayLayout->addWidget(dayLabel); | 755 | //dayLayout->addWidget(dayLabel); |
753 | 756 | ||
754 | #ifndef KORG_NOPLUGINS | 757 | #ifndef KORG_NOPLUGINS |
755 | CalendarDecoration::List cds = KOCore::self()->calendarDecorations(); | 758 | CalendarDecoration::List cds = KOCore::self()->calendarDecorations(); |
756 | CalendarDecoration *it; | 759 | CalendarDecoration *it; |
757 | for(it = cds.first(); it; it = cds.next()) { | 760 | for(it = cds.first(); it; it = cds.next()) { |
758 | QString text = it->shortText( date ); | 761 | QString text = it->shortText( date ); |
759 | if ( !text.isEmpty() ) { | 762 | if ( !text.isEmpty() ) { |
760 | QLabel *label = new QLabel(text,mDayLabels); | 763 | QLabel *label = new QLabel(text,mDayLabels); |
761 | label->setAlignment(AlignCenter); | 764 | label->setAlignment(AlignCenter); |
762 | dayLayout->addWidget(label); | 765 | dayLayout->addWidget(label); |
763 | } | 766 | } |
764 | } | 767 | } |
765 | 768 | ||
766 | for(it = cds.first(); it; it = cds.next()) { | 769 | for(it = cds.first(); it; it = cds.next()) { |
767 | QWidget *wid = it->smallWidget(mDayLabels,date); | 770 | QWidget *wid = it->smallWidget(mDayLabels,date); |
768 | if ( wid ) { | 771 | if ( wid ) { |
769 | // wid->setHeight(20); | 772 | // wid->setHeight(20); |
770 | dayLayout->addWidget(wid); | 773 | dayLayout->addWidget(wid); |
771 | } | 774 | } |
772 | } | 775 | } |
773 | #endif | 776 | #endif |
774 | } | 777 | } |
775 | if ( ! appendLabels ) { | 778 | if ( ! appendLabels ) { |
776 | dayLabel = mDayLabelsList.next(); | 779 | dayLabel = mDayLabelsList.next(); |
777 | if ( !dayLabel ) | 780 | if ( !dayLabel ) |
778 | appendLabels = true; | 781 | appendLabels = true; |
779 | } | 782 | } |
780 | if ( appendLabels ) { | 783 | if ( appendLabels ) { |
781 | dayLabel = new QLabel(mDayLabels); | 784 | dayLabel = new QLabel(mDayLabels); |
782 | mDayLabelsList.append( dayLabel ); | 785 | mDayLabelsList.append( dayLabel ); |
783 | mLayoutDayLabels->addWidget(dayLabel); | 786 | mLayoutDayLabels->addWidget(dayLabel); |
784 | } | 787 | } |
785 | //dayLabel->hide();//test only | 788 | //dayLabel->hide();//test only |
786 | 789 | ||
787 | int offset = (mAgenda->width() - mAgenda->verticalScrollBar()->width()-3 ) % mSelectedDates.count() ; | 790 | int offset = (mAgenda->width() - mAgenda->verticalScrollBar()->width()-3 ) % mSelectedDates.count() ; |
788 | if ( offset < 0 ) offset = 0; | 791 | if ( offset < 0 ) offset = 0; |
789 | //qDebug("mLayoutDayLabels->addSpacing %d ", mAgenda->verticalScrollBar()->width()+offset+2 ); | 792 | //qDebug("mLayoutDayLabels->addSpacing %d ", mAgenda->verticalScrollBar()->width()+offset+2 ); |
790 | dayLabel->setText("");//QString::number ( mSelectedDates.first().month() ) ); | 793 | dayLabel->setText("");//QString::number ( mSelectedDates.first().month() ) ); |
791 | dayLabel->show(); | 794 | dayLabel->show(); |
792 | dayLabel->setFixedWidth( mAgenda->verticalScrollBar()->width()+ offset ); | 795 | dayLabel->setFixedWidth( mAgenda->verticalScrollBar()->width()+ offset ); |
793 | //qDebug("setToFixed %d ", mAgenda->verticalScrollBar()->width()+ offset+2); | 796 | //qDebug("setToFixed %d ", mAgenda->verticalScrollBar()->width()+ offset+2); |
794 | //mLayoutDayLabels->addSpacing(mAgenda->verticalScrollBar()->width()+ offset+2); | 797 | //mLayoutDayLabels->addSpacing(mAgenda->verticalScrollBar()->width()+ offset+2); |
795 | if ( !appendLabels ) { | 798 | if ( !appendLabels ) { |
796 | dayLabel = mDayLabelsList.next(); | 799 | dayLabel = mDayLabelsList.next(); |
797 | while ( dayLabel ) { | 800 | while ( dayLabel ) { |
798 | //qDebug("!dayLabel %d",dayLabel ); | 801 | //qDebug("!dayLabel %d",dayLabel ); |
799 | dayLabel->hide(); | 802 | dayLabel->hide(); |
800 | dayLabel = mDayLabelsList.next(); | 803 | dayLabel = mDayLabelsList.next(); |
801 | } | 804 | } |
802 | } | 805 | } |
803 | //mDayLabelsFrame->show(); | 806 | //mDayLabelsFrame->show(); |
804 | //mDayLabels->show(); | 807 | //mDayLabels->show(); |
805 | //qDebug("heigt %d %d %d ",mDayLabelsFrame->height(), mDayLabelsFrame->sizeHint().height(), newHight); | 808 | //qDebug("heigt %d %d %d ",mDayLabelsFrame->height(), mDayLabelsFrame->sizeHint().height(), newHight); |
806 | //mDayLabelsFrame->resize( mAgenda->visibleWidth(), newHight ); | 809 | //mDayLabelsFrame->resize( mAgenda->visibleWidth(), newHight ); |
807 | mDayLabelsFrame->setFixedHeight( newHight ); | 810 | mDayLabelsFrame->setFixedHeight( newHight ); |
808 | } | 811 | } |
809 | 812 | ||
810 | int KOAgendaView::maxDatesHint() | 813 | int KOAgendaView::maxDatesHint() |
811 | { | 814 | { |
812 | // Not sure about the max number of events, so return 0 for now. | 815 | // Not sure about the max number of events, so return 0 for now. |
813 | return 0; | 816 | return 0; |
814 | } | 817 | } |
815 | 818 | ||
816 | int KOAgendaView::currentDateCount() | 819 | int KOAgendaView::currentDateCount() |
817 | { | 820 | { |
818 | return mSelectedDates.count(); | 821 | return mSelectedDates.count(); |
819 | } | 822 | } |
820 | 823 | ||
821 | QPtrList<Incidence> KOAgendaView::selectedIncidences() | 824 | QPtrList<Incidence> KOAgendaView::selectedIncidences() |
822 | { | 825 | { |
823 | QPtrList<Incidence> selected; | 826 | QPtrList<Incidence> selected; |
824 | Incidence *incidence; | 827 | Incidence *incidence; |
825 | 828 | ||
826 | incidence = mAgenda->selectedIncidence(); | 829 | incidence = mAgenda->selectedIncidence(); |
827 | if (incidence) selected.append(incidence); | 830 | if (incidence) selected.append(incidence); |
828 | 831 | ||
829 | incidence = mAllDayAgenda->selectedIncidence(); | 832 | incidence = mAllDayAgenda->selectedIncidence(); |
830 | if (incidence) selected.append(incidence); | 833 | if (incidence) selected.append(incidence); |
831 | 834 | ||
832 | return selected; | 835 | return selected; |
833 | } | 836 | } |
834 | 837 | ||
835 | DateList KOAgendaView::selectedDates() | 838 | DateList KOAgendaView::selectedDates() |
836 | { | 839 | { |
837 | DateList selected; | 840 | DateList selected; |
838 | QDate qd; | 841 | QDate qd; |
839 | 842 | ||
840 | qd = mAgenda->selectedIncidenceDate(); | 843 | qd = mAgenda->selectedIncidenceDate(); |
841 | if (qd.isValid()) selected.append(qd); | 844 | if (qd.isValid()) selected.append(qd); |
842 | 845 | ||
843 | qd = mAllDayAgenda->selectedIncidenceDate(); | 846 | qd = mAllDayAgenda->selectedIncidenceDate(); |
844 | if (qd.isValid()) selected.append(qd); | 847 | if (qd.isValid()) selected.append(qd); |
845 | 848 | ||
846 | return selected; | 849 | return selected; |
847 | } | 850 | } |
848 | 851 | ||
849 | 852 | ||
850 | void KOAgendaView::updateView() | 853 | void KOAgendaView::updateView() |
851 | { | 854 | { |
852 | if ( mBlockUpdating ) | 855 | if ( mBlockUpdating ) |
853 | return; | 856 | return; |
854 | // kdDebug() << "KOAgendaView::updateView()" << endl; | 857 | // kdDebug() << "KOAgendaView::updateView()" << endl; |
855 | fillAgenda(); | 858 | fillAgenda(); |
856 | 859 | ||
857 | } | 860 | } |
858 | 861 | ||
859 | 862 | ||
860 | /* | 863 | /* |
861 | Update configuration settings for the agenda view. This method is not | 864 | Update configuration settings for the agenda view. This method is not |
862 | complete. | 865 | complete. |
863 | */ | 866 | */ |
864 | void KOAgendaView::updateConfig() | 867 | void KOAgendaView::updateConfig() |
865 | { | 868 | { |
866 | if ( mBlockUpdating ) | 869 | if ( mBlockUpdating ) |
867 | return; | 870 | return; |
868 | // kdDebug() << "KOAgendaView::updateConfig()" << endl; | 871 | // kdDebug() << "KOAgendaView::updateConfig()" << endl; |
869 | 872 | ||
870 | // update config for children | 873 | // update config for children |
871 | mTimeLabels->updateConfig(); | 874 | mTimeLabels->updateConfig(); |
872 | mAgenda->storePosition(); | 875 | mAgenda->storePosition(); |
873 | mAgenda->updateConfig(); | 876 | mAgenda->updateConfig(); |
874 | mAllDayAgenda->updateConfig(); | 877 | mAllDayAgenda->updateConfig(); |
875 | // widget synchronization | 878 | // widget synchronization |
876 | //TODO: find a better way, maybe signal/slot | 879 | //TODO: find a better way, maybe signal/slot |
877 | mTimeLabels->positionChanged(); | 880 | mTimeLabels->positionChanged(); |
878 | 881 | ||
879 | // for some reason, this needs to be called explicitly | 882 | // for some reason, this needs to be called explicitly |
880 | mTimeLabels->repaint(); | 883 | mTimeLabels->repaint(); |
881 | 884 | ||
882 | mDummyAllDayLeft->setFixedWidth(mTimeLabels->width()); | 885 | mDummyAllDayLeft->setFixedWidth(mTimeLabels->width()); |
883 | 886 | ||
884 | // ToolTips displaying summary of events | 887 | // ToolTips displaying summary of events |
885 | KOAgendaItem::toolTipGroup()->setEnabled(KOPrefs::instance() | 888 | KOAgendaItem::toolTipGroup()->setEnabled(KOPrefs::instance() |
886 | ->mEnableToolTips); | 889 | ->mEnableToolTips); |
887 | 890 | ||
888 | //setHolidayMasks(); | 891 | //setHolidayMasks(); |
889 | 892 | ||
890 | //createDayLabels(); called by via updateView(); | 893 | //createDayLabels(); called by via updateView(); |
891 | mEventIndicatorTop->setXOffset(mTimeLabels->width() + mAgenda->frameWidth()); | 894 | mEventIndicatorTop->setXOffset(mTimeLabels->width() + mAgenda->frameWidth()); |
892 | updateView(); | 895 | updateView(); |
893 | mAgenda->restorePosition(); | 896 | mAgenda->restorePosition(); |
894 | } | 897 | } |
895 | 898 | ||
896 | 899 | ||
897 | void KOAgendaView::updateEventDates(KOAgendaItem *item, int type) | 900 | void KOAgendaView::updateEventDates(KOAgendaItem *item, int type) |
898 | { | 901 | { |
899 | // kdDebug() << "KOAgendaView::updateEventDates(): " << item->text() << endl; | 902 | // kdDebug() << "KOAgendaView::updateEventDates(): " << item->text() << endl; |
900 | //qDebug("KOAgendaView::updateEventDates "); | 903 | //qDebug("KOAgendaView::updateEventDates "); |
901 | QDateTime startDt,endDt; | 904 | QDateTime startDt,endDt; |
902 | QDate startDate; | 905 | QDate startDate; |
903 | int lenInSecs; | 906 | int lenInSecs; |
904 | // if ( type == KOAgenda::RESIZETOP ) | 907 | // if ( type == KOAgenda::RESIZETOP ) |
905 | // qDebug("RESIZETOP "); | 908 | // qDebug("RESIZETOP "); |
906 | // if ( type == KOAgenda::RESIZEBOTTOM ) | 909 | // if ( type == KOAgenda::RESIZEBOTTOM ) |
907 | // qDebug("RESIZEBOTTOM "); | 910 | // qDebug("RESIZEBOTTOM "); |
908 | // if ( type == KOAgenda::MOVE ) | 911 | // if ( type == KOAgenda::MOVE ) |
909 | // qDebug("MOVE "); | 912 | // qDebug("MOVE "); |
910 | if ( item->incidence()->type() == "Event" ) { | 913 | if ( item->incidence()->type() == "Event" ) { |
911 | startDt =item->incidence()->dtStart(); | 914 | startDt =item->incidence()->dtStart(); |
912 | endDt = item->incidence()->dtEnd(); | 915 | endDt = item->incidence()->dtEnd(); |
913 | lenInSecs = startDt.secsTo( endDt ); | 916 | lenInSecs = startDt.secsTo( endDt ); |
914 | } | 917 | } |
915 | 918 | ||
916 | // emit incidenceItemChanged( item->incidence(), KOGlobals::EVENTEDITED ); | 919 | // emit incidenceItemChanged( item->incidence(), KOGlobals::EVENTEDITED ); |
917 | 920 | ||
918 | if ( item->incidence()->type()=="Todo" && item->mLastMoveXPos > 0 ) { | 921 | if ( item->incidence()->type()=="Todo" && item->mLastMoveXPos > 0 ) { |
919 | startDate = mSelectedDates[item->mLastMoveXPos]; | 922 | startDate = mSelectedDates[item->mLastMoveXPos]; |
920 | } else { | 923 | } else { |
921 | if (item->cellX() < 0) { | 924 | if (item->cellX() < 0) { |
922 | startDate = (mSelectedDates.first()).addDays(item->cellX()); | 925 | startDate = (mSelectedDates.first()).addDays(item->cellX()); |
923 | } else { | 926 | } else { |
924 | startDate = mSelectedDates[item->cellX()]; | 927 | startDate = mSelectedDates[item->cellX()]; |
925 | } | 928 | } |
926 | } | 929 | } |
927 | startDt.setDate(startDate); | 930 | startDt.setDate(startDate); |
928 | 931 | ||
929 | if (item->incidence()->doesFloat()) { | 932 | if (item->incidence()->doesFloat()) { |
930 | endDt.setDate(startDate.addDays(item->cellWidth() - 1)); | 933 | endDt.setDate(startDate.addDays(item->cellWidth() - 1)); |
931 | } else { | 934 | } else { |
932 | if ( type == KOAgenda::RESIZETOP || type == KOAgenda::MOVE ) | 935 | if ( type == KOAgenda::RESIZETOP || type == KOAgenda::MOVE ) |
933 | startDt.setTime(mAgenda->gyToTime(item->cellYTop())); | 936 | startDt.setTime(mAgenda->gyToTime(item->cellYTop())); |
934 | if ( item->incidence()->type() == "Event" ) { | 937 | if ( item->incidence()->type() == "Event" ) { |
935 | if ( type == KOAgenda::MOVE ) { | 938 | if ( type == KOAgenda::MOVE ) { |
936 | endDt = startDt.addSecs(lenInSecs); | 939 | endDt = startDt.addSecs(lenInSecs); |
937 | 940 | ||
938 | } else if ( type == KOAgenda::RESIZEBOTTOM ) { | 941 | } else if ( type == KOAgenda::RESIZEBOTTOM ) { |
939 | if (item->lastMultiItem()) { | 942 | if (item->lastMultiItem()) { |
940 | endDt.setTime(mAgenda->gyToTime(item->lastMultiItem()->cellYBottom()+1)); | 943 | endDt.setTime(mAgenda->gyToTime(item->lastMultiItem()->cellYBottom()+1)); |
941 | endDt.setDate(startDate. | 944 | endDt.setDate(startDate. |
942 | addDays(item->lastMultiItem()->cellX() - item->cellX())); | 945 | addDays(item->lastMultiItem()->cellX() - item->cellX())); |
943 | } else { | 946 | } else { |
944 | endDt.setTime(mAgenda->gyToTime(item->cellYBottom()+1)); | 947 | endDt.setTime(mAgenda->gyToTime(item->cellYBottom()+1)); |
945 | endDt.setDate(startDate); | 948 | endDt.setDate(startDate); |
946 | } | 949 | } |
947 | } | 950 | } |
948 | } else { | 951 | } else { |
949 | // todo | 952 | // todo |
950 | if (item->lastMultiItem()) { | 953 | if (item->lastMultiItem()) { |
951 | endDt.setTime(mAgenda->gyToTime(item->lastMultiItem()->cellYBottom()+1)); | 954 | endDt.setTime(mAgenda->gyToTime(item->lastMultiItem()->cellYBottom()+1)); |
952 | endDt.setDate(startDate. | 955 | endDt.setDate(startDate. |
953 | addDays(item->lastMultiItem()->cellX() - item->cellX())); | 956 | addDays(item->lastMultiItem()->cellX() - item->cellX())); |
954 | } else { | 957 | } else { |
955 | //qDebug("tem->cellYBottom() %d",item->cellYBottom() ); | 958 | //qDebug("tem->cellYBottom() %d",item->cellYBottom() ); |
956 | if ( item->cellYBottom() > 0 ) | 959 | if ( item->cellYBottom() > 0 ) |
957 | endDt.setTime(mAgenda->gyToTime(item->cellYBottom()+1)); | 960 | endDt.setTime(mAgenda->gyToTime(item->cellYBottom()+1)); |
958 | else | 961 | else |
959 | endDt.setTime((static_cast<Todo*>(item->incidence()))->dtDue().time()); | 962 | endDt.setTime((static_cast<Todo*>(item->incidence()))->dtDue().time()); |
960 | endDt.setDate(startDate); | 963 | endDt.setDate(startDate); |
961 | } | 964 | } |
962 | } | 965 | } |
963 | } | 966 | } |
964 | 967 | ||
965 | 968 | ||
966 | if ( item->incidence()->type() == "Event" ) { | 969 | if ( item->incidence()->type() == "Event" ) { |
967 | item->incidence()->setDtStart(startDt); | 970 | item->incidence()->setDtStart(startDt); |
968 | (static_cast<Event*>(item->incidence()))->setDtEnd(endDt); | 971 | (static_cast<Event*>(item->incidence()))->setDtEnd(endDt); |
969 | } else if ( item->incidence()->type() == "Todo" ) { | 972 | } else if ( item->incidence()->type() == "Todo" ) { |
970 | (static_cast<Todo*>(item->incidence()))->setDtDue(endDt); | 973 | (static_cast<Todo*>(item->incidence()))->setDtDue(endDt); |
971 | } | 974 | } |
972 | //qDebug("KOAgendaView::updateEventDates stsart %s end %s ", startDt.toString().latin1(), endDt.toString().latin1() ); | 975 | //qDebug("KOAgendaView::updateEventDates stsart %s end %s ", startDt.toString().latin1(), endDt.toString().latin1() ); |
973 | item->incidence()->setRevision(item->incidence()->revision()+1); | 976 | item->incidence()->setRevision(item->incidence()->revision()+1); |
974 | item->setItemDate(startDt.date()); | 977 | item->setItemDate(startDt.date()); |
975 | //item->updateItem(); | 978 | //item->updateItem(); |
976 | if ( item->incidence()->type() == "Todo" ) { | 979 | if ( item->incidence()->type() == "Todo" ) { |
977 | emit todoMoved((Todo*)item->incidence(), KOGlobals::EVENTEDITED ); | 980 | emit todoMoved((Todo*)item->incidence(), KOGlobals::EVENTEDITED ); |
978 | 981 | ||
979 | } | 982 | } |
980 | else | 983 | else |
981 | emit incidenceChanged(item->incidence(), KOGlobals::EVENTEDITED); | 984 | emit incidenceChanged(item->incidence(), KOGlobals::EVENTEDITED); |
982 | item->updateItem(); | 985 | item->updateItem(); |
983 | } | 986 | } |
984 | 987 | ||
985 | void KOAgendaView::showDates( const QDate &start, const QDate &end ) | 988 | void KOAgendaView::showDates( const QDate &start, const QDate &end ) |
986 | { | 989 | { |
987 | // kdDebug() << "KOAgendaView::selectDates" << endl; | 990 | // kdDebug() << "KOAgendaView::selectDates" << endl; |
988 | 991 | ||
989 | mSelectedDates.clear(); | 992 | mSelectedDates.clear(); |
990 | // qDebug("KOAgendaView::showDates "); | 993 | // qDebug("KOAgendaView::showDates "); |
991 | QDate d = start; | 994 | QDate d = start; |
992 | while (d <= end) { | 995 | while (d <= end) { |
993 | mSelectedDates.append(d); | 996 | mSelectedDates.append(d); |
994 | d = d.addDays( 1 ); | 997 | d = d.addDays( 1 ); |
995 | } | 998 | } |
996 | 999 | ||
997 | // and update the view | 1000 | // and update the view |
998 | fillAgenda(); | 1001 | fillAgenda(); |
999 | } | 1002 | } |
1000 | 1003 | ||
1001 | 1004 | ||
1002 | void KOAgendaView::showEvents(QPtrList<Event>) | 1005 | void KOAgendaView::showEvents(QPtrList<Event>) |
1003 | { | 1006 | { |
1004 | kdDebug() << "KOAgendaView::showEvents() is not yet implemented" << endl; | 1007 | kdDebug() << "KOAgendaView::showEvents() is not yet implemented" << endl; |
1005 | } | 1008 | } |
1006 | 1009 | ||
1007 | void KOAgendaView::changeEventDisplay(Event *, int) | 1010 | void KOAgendaView::changeEventDisplay(Event *, int) |
1008 | { | 1011 | { |
1009 | // qDebug("KOAgendaView::changeEventDisplay "); | 1012 | // qDebug("KOAgendaView::changeEventDisplay "); |
1010 | // kdDebug() << "KOAgendaView::changeEventDisplay" << endl; | 1013 | // kdDebug() << "KOAgendaView::changeEventDisplay" << endl; |
1011 | // this should be re-written to be MUCH smarter. Right now we | 1014 | // this should be re-written to be MUCH smarter. Right now we |
1012 | // are just playing dumb. | 1015 | // are just playing dumb. |
1013 | fillAgenda(); | 1016 | fillAgenda(); |
1014 | } | 1017 | } |
1015 | 1018 | ||
1016 | void KOAgendaView::fillAgenda(const QDate &) | 1019 | void KOAgendaView::fillAgenda(const QDate &) |
1017 | { | 1020 | { |
1018 | // qDebug("KOAgendaView::fillAgenda "); | 1021 | // qDebug("KOAgendaView::fillAgenda "); |
1019 | fillAgenda(); | 1022 | fillAgenda(); |
1020 | } | 1023 | } |
1021 | 1024 | ||
1022 | void KOAgendaView::fillAgenda() | 1025 | void KOAgendaView::fillAgenda() |
1023 | { | 1026 | { |
1024 | if ( globalFlagBlockStartup ) | 1027 | if ( globalFlagBlockStartup ) |
1025 | return; | 1028 | return; |
1026 | if ( globalFlagBlockAgenda == 1 ) | 1029 | if ( globalFlagBlockAgenda == 1 ) |
1027 | return; | 1030 | return; |
1028 | //if ( globalFlagBlockAgenda == 2 ) | 1031 | //if ( globalFlagBlockAgenda == 2 ) |
1029 | //globalFlagBlockAgenda = 0; | 1032 | //globalFlagBlockAgenda = 0; |
1030 | // globalFlagBlockPainting = false; | 1033 | // globalFlagBlockPainting = false; |
1031 | if ( globalFlagBlockAgenda == 0 ) | 1034 | if ( globalFlagBlockAgenda == 0 ) |
1032 | globalFlagBlockAgenda = 1; | 1035 | globalFlagBlockAgenda = 1; |
1033 | // clearView(); | 1036 | // clearView(); |
1034 | //qDebug("fillAgenda()++++ "); | 1037 | //qDebug("fillAgenda()++++ "); |
1035 | globalFlagBlockAgendaItemPaint = 1; | 1038 | globalFlagBlockAgendaItemPaint = 1; |
1036 | mAllDayAgenda->changeColumns(mSelectedDates.count()); | 1039 | mAllDayAgenda->changeColumns(mSelectedDates.count()); |
1037 | mAgenda->changeColumns(mSelectedDates.count()); | 1040 | mAgenda->changeColumns(mSelectedDates.count()); |
1038 | qApp->processEvents(); | 1041 | qApp->processEvents(); |
1039 | mEventIndicatorTop->changeColumns(mSelectedDates.count()); | 1042 | mEventIndicatorTop->changeColumns(mSelectedDates.count()); |
1040 | mEventIndicatorBottom->changeColumns(mSelectedDates.count()); | 1043 | mEventIndicatorBottom->changeColumns(mSelectedDates.count()); |
1041 | setHolidayMasks(); | 1044 | setHolidayMasks(); |
1042 | 1045 | ||
1043 | //mAgenda->hideUnused(); | 1046 | //mAgenda->hideUnused(); |
1044 | //mAllDayAgenda->hideUnused(); | 1047 | //mAllDayAgenda->hideUnused(); |
1045 | 1048 | ||
1046 | // mAgenda->blockNextRepaint( false ); | 1049 | // mAgenda->blockNextRepaint( false ); |
1047 | // mAgenda->viewport()->repaint(); | 1050 | // mAgenda->viewport()->repaint(); |
1048 | // mAgenda->blockNextRepaint( true ); | 1051 | // mAgenda->blockNextRepaint( true ); |
1049 | mMinY.resize(mSelectedDates.count()); | 1052 | mMinY.resize(mSelectedDates.count()); |
1050 | mMaxY.resize(mSelectedDates.count()); | 1053 | mMaxY.resize(mSelectedDates.count()); |
1051 | 1054 | ||
1052 | QPtrList<Event> dayEvents; | 1055 | QPtrList<Event> dayEvents; |
1053 | 1056 | ||
1054 | // ToDo items shall be displayed for the day they are due, but only showed today if they are already overdue. | 1057 | // ToDo items shall be displayed for the day they are due, but only showed today if they are already overdue. |
1055 | // Therefore, get all of them. | 1058 | // Therefore, get all of them. |
1056 | QPtrList<Todo> todos = calendar()->todos(); | 1059 | QPtrList<Todo> todos = calendar()->todos(); |
1057 | 1060 | ||
1058 | mAgenda->setDateList(mSelectedDates); | 1061 | mAgenda->setDateList(mSelectedDates); |
1059 | 1062 | ||
1060 | QDate today = QDate::currentDate(); | 1063 | QDate today = QDate::currentDate(); |
1061 | 1064 | ||
1062 | DateList::ConstIterator dit; | 1065 | DateList::ConstIterator dit; |
1063 | int curCol = 0; | 1066 | int curCol = 0; |
1064 | for( dit = mSelectedDates.begin(); dit != mSelectedDates.end(); ++dit ) { | 1067 | for( dit = mSelectedDates.begin(); dit != mSelectedDates.end(); ++dit ) { |
1065 | QDate currentDate = *dit; | 1068 | QDate currentDate = *dit; |
1066 | // kdDebug() << "KOAgendaView::fillAgenda(): " << currentDate.toString() | 1069 | // kdDebug() << "KOAgendaView::fillAgenda(): " << currentDate.toString() |
1067 | // << endl; | 1070 | // << endl; |
1068 | 1071 | ||
1069 | dayEvents = calendar()->events(currentDate,true); | 1072 | dayEvents = calendar()->events(currentDate,true); |
1070 | 1073 | ||
1071 | // Default values, which can never be reached | 1074 | // Default values, which can never be reached |
1072 | mMinY[curCol] = mAgenda->timeToY(QTime(23,59)) + 1; | 1075 | mMinY[curCol] = mAgenda->timeToY(QTime(23,59)) + 1; |
1073 | mMaxY[curCol] = mAgenda->timeToY(QTime(0,0)) - 1; | 1076 | mMaxY[curCol] = mAgenda->timeToY(QTime(0,0)) - 1; |
1074 | 1077 | ||
1075 | unsigned int numEvent; | 1078 | unsigned int numEvent; |
1076 | for(numEvent=0;numEvent<dayEvents.count();++numEvent) { | 1079 | for(numEvent=0;numEvent<dayEvents.count();++numEvent) { |
1077 | Event *event = dayEvents.at(numEvent); | 1080 | Event *event = dayEvents.at(numEvent); |
1078 | if ( !KOPrefs::instance()->mShowSyncEvents && event->uid().left(2) == QString("la") ) | 1081 | if ( !KOPrefs::instance()->mShowSyncEvents && event->uid().left(2) == QString("la") ) |
1079 | if ( event->uid().left(15) == QString("last-syncEvent-") ) | 1082 | if ( event->uid().left(15) == QString("last-syncEvent-") ) |
1080 | continue; | 1083 | continue; |
1081 | // kdDebug() << " Event: " << event->summary() << endl; | 1084 | // kdDebug() << " Event: " << event->summary() << endl; |
1082 | 1085 | ||
1083 | int beginX = currentDate.daysTo(event->dtStart().date()) + curCol; | 1086 | int beginX = currentDate.daysTo(event->dtStart().date()) + curCol; |
1084 | int endX = currentDate.daysTo(event->dtEnd().date()) + curCol; | 1087 | int endX = currentDate.daysTo(event->dtEnd().date()) + curCol; |
1085 | 1088 | ||
1086 | // kdDebug() << " beginX: " << beginX << " endX: " << endX << endl; | 1089 | // kdDebug() << " beginX: " << beginX << " endX: " << endX << endl; |
1087 | 1090 | ||
1088 | if (event->doesFloat()) { | 1091 | if (event->doesFloat()) { |
1089 | if (event->recurrence()->doesRecur()) { | 1092 | if (event->recurrence()->doesRecur()) { |
1090 | mAllDayAgenda->insertAllDayItem(event,currentDate,curCol,curCol); | 1093 | mAllDayAgenda->insertAllDayItem(event,currentDate,curCol,curCol); |
1091 | } else { | 1094 | } else { |
1092 | if (beginX <= 0 && curCol == 0) { | 1095 | if (beginX <= 0 && curCol == 0) { |
1093 | mAllDayAgenda->insertAllDayItem(event,currentDate,beginX,endX); | 1096 | mAllDayAgenda->insertAllDayItem(event,currentDate,beginX,endX); |
1094 | } else if (beginX == curCol) { | 1097 | } else if (beginX == curCol) { |
1095 | mAllDayAgenda->insertAllDayItem(event,currentDate,beginX,endX); | 1098 | mAllDayAgenda->insertAllDayItem(event,currentDate,beginX,endX); |
1096 | } | 1099 | } |
1097 | } | 1100 | } |
1098 | } else if (event->isMultiDay()) { | 1101 | } else if (event->isMultiDay()) { |
1099 | if ( event->doesRecur () ) { | 1102 | if ( event->doesRecur () ) { |
1100 | QDate dateit = currentDate; | 1103 | QDate dateit = currentDate; |
1101 | int count = 0; | 1104 | int count = 0; |
1102 | int max = event->dtStart().daysTo( event->dtEnd() ) +2; | 1105 | int max = event->dtStart().daysTo( event->dtEnd() ) +2; |
1103 | while (! event->recursOn( dateit ) && count <= max ) { | 1106 | while (! event->recursOn( dateit ) && count <= max ) { |
1104 | ++count; | 1107 | ++count; |
1105 | dateit = dateit.addDays( -1 ); | 1108 | dateit = dateit.addDays( -1 ); |
1106 | } | 1109 | } |
1107 | bool ok; | 1110 | bool ok; |
1108 | QDateTime nextOcstart = event->getNextOccurence( QDateTime(dateit) ,&ok ); | 1111 | QDateTime nextOcstart = event->getNextOccurence( QDateTime(dateit) ,&ok ); |
1109 | if ( ok ) | 1112 | if ( ok ) |
1110 | { | 1113 | { |
1111 | int secs = event->dtStart().secsTo( event->dtEnd() ); | 1114 | int secs = event->dtStart().secsTo( event->dtEnd() ); |
1112 | QDateTime nextOcend =nextOcstart.addSecs( secs ); ; | 1115 | QDateTime nextOcend =nextOcstart.addSecs( secs ); ; |
1113 | beginX = currentDate.daysTo(nextOcstart.date()) + curCol; | 1116 | beginX = currentDate.daysTo(nextOcstart.date()) + curCol; |
1114 | endX = currentDate.daysTo(nextOcend.date()) + curCol; | 1117 | endX = currentDate.daysTo(nextOcend.date()) + curCol; |
1115 | 1118 | ||
1116 | } | 1119 | } |
1117 | } | 1120 | } |
1118 | int startY = mAgenda->timeToY(event->dtStart().time()); | 1121 | int startY = mAgenda->timeToY(event->dtStart().time()); |
1119 | int endY = mAgenda->timeToY(event->dtEnd().time()) - 1; | 1122 | int endY = mAgenda->timeToY(event->dtEnd().time()) - 1; |
1120 | //qDebug("insert %d %d %d %d %d ",beginX,endX,startY,endY , curCol ); | 1123 | //qDebug("insert %d %d %d %d %d ",beginX,endX,startY,endY , curCol ); |
1121 | if ((beginX <= 0 && curCol == 0) || beginX == curCol) { | 1124 | if ((beginX <= 0 && curCol == 0) || beginX == curCol) { |
1122 | //qDebug("insert!!! "); | 1125 | //qDebug("insert!!! "); |
1123 | mAgenda->insertMultiItem(event,currentDate,beginX,endX,startY,endY); | 1126 | mAgenda->insertMultiItem(event,currentDate,beginX,endX,startY,endY); |
1124 | } | 1127 | } |
1125 | if (beginX == curCol) { | 1128 | if (beginX == curCol) { |
1126 | mMaxY[curCol] = mAgenda->timeToY(QTime(23,59)); | 1129 | mMaxY[curCol] = mAgenda->timeToY(QTime(23,59)); |
1127 | if (startY < mMinY[curCol]) mMinY[curCol] = startY; | 1130 | if (startY < mMinY[curCol]) mMinY[curCol] = startY; |
1128 | } else if (endX == curCol) { | 1131 | } else if (endX == curCol) { |
1129 | mMinY[curCol] = mAgenda->timeToY(QTime(0,0)); | 1132 | mMinY[curCol] = mAgenda->timeToY(QTime(0,0)); |
1130 | if (endY > mMaxY[curCol]) mMaxY[curCol] = endY; | 1133 | if (endY > mMaxY[curCol]) mMaxY[curCol] = endY; |
1131 | } else { | 1134 | } else { |
1132 | mMinY[curCol] = mAgenda->timeToY(QTime(0,0)); | 1135 | mMinY[curCol] = mAgenda->timeToY(QTime(0,0)); |
1133 | mMaxY[curCol] = mAgenda->timeToY(QTime(23,59)); | 1136 | mMaxY[curCol] = mAgenda->timeToY(QTime(23,59)); |
1134 | } | 1137 | } |
1135 | } else { | 1138 | } else { |
1136 | int startY = mAgenda->timeToY(event->dtStart().time()); | 1139 | int startY = mAgenda->timeToY(event->dtStart().time()); |
1137 | int endY = mAgenda->timeToY(event->dtEnd().time()) - 1; | 1140 | int endY = mAgenda->timeToY(event->dtEnd().time()) - 1; |
1138 | if (endY < startY) endY = startY; | 1141 | if (endY < startY) endY = startY; |
1139 | mAgenda->insertItem(event,currentDate,curCol,startY,endY); | 1142 | mAgenda->insertItem(event,currentDate,curCol,startY,endY); |
1140 | if (startY < mMinY[curCol]) mMinY[curCol] = startY; | 1143 | if (startY < mMinY[curCol]) mMinY[curCol] = startY; |
1141 | if (endY > mMaxY[curCol]) mMaxY[curCol] = endY; | 1144 | if (endY > mMaxY[curCol]) mMaxY[curCol] = endY; |
1142 | } | 1145 | } |
1143 | } | 1146 | } |
1144 | // ---------- [display Todos -------------- | 1147 | // ---------- [display Todos -------------- |
1145 | unsigned int numTodo; | 1148 | unsigned int numTodo; |
1146 | for (numTodo = 0; numTodo < todos.count(); ++numTodo) { | 1149 | for (numTodo = 0; numTodo < todos.count(); ++numTodo) { |
1147 | Todo *todo = todos.at(numTodo); | 1150 | Todo *todo = todos.at(numTodo); |
1148 | 1151 | ||
1149 | if ( ! todo->hasDueDate() ) continue; // todo shall not be displayed if it has no date | 1152 | if ( ! todo->hasDueDate() ) continue; // todo shall not be displayed if it has no date |
1150 | 1153 | ||
1151 | // ToDo items shall be displayed for the day they are due, but only showed today if they are already overdue. | 1154 | // ToDo items shall be displayed for the day they are due, but only showed today if they are already overdue. |
1152 | // Already completed items can be displayed on their original due date | 1155 | // Already completed items can be displayed on their original due date |
1153 | //if not KOPrefs::instance()->mShowTodoInAgenda, show overdue in agenda | 1156 | //if not KOPrefs::instance()->mShowTodoInAgenda, show overdue in agenda |
1154 | bool overdue = (!todo->isCompleted()) && (todo->dtDue() < today) && KOPrefs::instance()->mShowTodoInAgenda; | 1157 | bool overdue = (!todo->isCompleted()) && (todo->dtDue() < today) && KOPrefs::instance()->mShowTodoInAgenda; |
1155 | 1158 | ||
1156 | if ( ((todo->dtDue().date() == currentDate) && !overdue) || | 1159 | if ( ((todo->dtDue().date() == currentDate) && !overdue) || |
1157 | ((currentDate == today) && overdue) ) { | 1160 | ((currentDate == today) && overdue) ) { |
1158 | if ( todo->doesFloat() || overdue ) { // Todo has no due-time set or is already overdue | 1161 | if ( todo->doesFloat() || overdue ) { // Todo has no due-time set or is already overdue |
1159 | if ( KOPrefs::instance()->mShowTodoInAgenda ) | 1162 | if ( KOPrefs::instance()->mShowTodoInAgenda ) |
1160 | mAllDayAgenda->insertAllDayItem(todo, currentDate, curCol, curCol); | 1163 | mAllDayAgenda->insertAllDayItem(todo, currentDate, curCol, curCol); |
1161 | } | 1164 | } |
1162 | else { | 1165 | else { |
1163 | 1166 | ||
1164 | int endY = mAgenda->timeToY(todo->dtDue().time()) - 1; | 1167 | int endY = mAgenda->timeToY(todo->dtDue().time()) - 1; |
1165 | int hi = (18/KOPrefs::instance()->mHourSize); | 1168 | int hi = (18/KOPrefs::instance()->mHourSize); |
1166 | //qDebug("hei %d ",KOPrefs::instance()->mHourSize); | 1169 | //qDebug("hei %d ",KOPrefs::instance()->mHourSize); |
1167 | int startY = endY -hi; | 1170 | int startY = endY -hi; |
1168 | 1171 | ||
1169 | mAgenda->insertItem(todo,currentDate,curCol,startY,endY); | 1172 | mAgenda->insertItem(todo,currentDate,curCol,startY,endY); |
1170 | 1173 | ||
1171 | if (startY < mMinY[curCol]) mMinY[curCol] = startY; | 1174 | if (startY < mMinY[curCol]) mMinY[curCol] = startY; |
1172 | if (endY > mMaxY[curCol]) mMaxY[curCol] = endY; | 1175 | if (endY > mMaxY[curCol]) mMaxY[curCol] = endY; |
1173 | } | 1176 | } |
1174 | } | 1177 | } |
1175 | } | 1178 | } |
1176 | // ---------- display Todos] -------------- | 1179 | // ---------- display Todos] -------------- |
1177 | 1180 | ||
1178 | ++curCol; | 1181 | ++curCol; |
1179 | } | 1182 | } |
1180 | mAgenda->hideUnused(); | 1183 | mAgenda->hideUnused(); |
1181 | mAllDayAgenda->hideUnused(); | 1184 | mAllDayAgenda->hideUnused(); |
1182 | mAgenda->checkScrollBoundaries(); | 1185 | mAgenda->checkScrollBoundaries(); |
1183 | 1186 | ||
1184 | deleteSelectedDateTime(); | 1187 | deleteSelectedDateTime(); |
1185 | 1188 | ||
1186 | createDayLabels(); | 1189 | createDayLabels(); |
1187 | emit incidenceSelected( 0 ); | 1190 | emit incidenceSelected( 0 ); |
1188 | 1191 | ||
1189 | if ( globalFlagBlockAgenda == 2 ) { | 1192 | if ( globalFlagBlockAgenda == 2 ) { |
1190 | if ( KOPrefs::instance()->mSetTimeToDayStartAt ) | 1193 | if ( KOPrefs::instance()->mSetTimeToDayStartAt ) |
1191 | setStartHour( KOPrefs::instance()->mDayBegins ); | 1194 | setStartHour( KOPrefs::instance()->mDayBegins ); |
1192 | else if ( KOPrefs::instance()->mCenterOnCurrentTime ) | 1195 | else if ( KOPrefs::instance()->mCenterOnCurrentTime ) |
1193 | setStartHour( QTime::currentTime ().hour() ); | 1196 | setStartHour( QTime::currentTime ().hour() ); |
1194 | // qApp->processEvents(); | 1197 | // qApp->processEvents(); |
1195 | } | 1198 | } |
1196 | qApp->processEvents(); | 1199 | qApp->processEvents(); |
1197 | //qDebug("qApp->processEvents(); END "); | 1200 | //qDebug("qApp->processEvents(); END "); |
1198 | globalFlagBlockAgenda = 0; | 1201 | globalFlagBlockAgenda = 0; |
1199 | 1202 | ||
1200 | // mAgenda->hideUnused(); | 1203 | // mAgenda->hideUnused(); |
1201 | //mAllDayAgenda->hideUnused(); | 1204 | //mAllDayAgenda->hideUnused(); |
1202 | mAllDayAgenda->drawContentsToPainter(); | 1205 | mAllDayAgenda->drawContentsToPainter(); |
1203 | mAgenda->drawContentsToPainter(); | 1206 | mAgenda->drawContentsToPainter(); |
1204 | repaintAgenda(); | 1207 | repaintAgenda(); |
1205 | // mAgenda->finishUpdate(); | 1208 | // mAgenda->finishUpdate(); |
1206 | //mAllDayAgenda->finishUpdate(); | 1209 | //mAllDayAgenda->finishUpdate(); |
1207 | 1210 | ||
1208 | // repaintAgenda(); | 1211 | // repaintAgenda(); |
1209 | //qApp->processEvents(); | 1212 | //qApp->processEvents(); |
1210 | // globalFlagBlockAgenda = 0; | 1213 | // globalFlagBlockAgenda = 0; |
1211 | } | 1214 | } |
1212 | void KOAgendaView::repaintAgenda() | 1215 | void KOAgendaView::repaintAgenda() |
1213 | { | 1216 | { |
1214 | // mAllDayAgenda->drawContentsToPainter(); | 1217 | // mAllDayAgenda->drawContentsToPainter(); |
1215 | // mAllDayAgenda->viewport()->repaint( false ); | 1218 | // mAllDayAgenda->viewport()->repaint( false ); |
1216 | // mAgenda->drawContentsToPainter(); | 1219 | // mAgenda->drawContentsToPainter(); |
1217 | // mAgenda->viewport()->repaint( false ); | 1220 | // mAgenda->viewport()->repaint( false ); |
1218 | // qApp->processEvents(); | 1221 | // qApp->processEvents(); |
1219 | 1222 | ||
1220 | //qDebug("KOAgendaView::repaintAgenda() "); | 1223 | //qDebug("KOAgendaView::repaintAgenda() "); |
1221 | //qApp->processEvents(); | 1224 | //qApp->processEvents(); |
1222 | mAgenda->viewport()->repaint( false ); | 1225 | mAgenda->viewport()->repaint( false ); |
1223 | mAllDayAgenda->viewport()->repaint( false ); | 1226 | mAllDayAgenda->viewport()->repaint( false ); |
1224 | mAgenda->finishUpdate(); | 1227 | mAgenda->finishUpdate(); |
1225 | mAllDayAgenda->finishUpdate(); | 1228 | mAllDayAgenda->finishUpdate(); |
1226 | } | 1229 | } |
1227 | 1230 | ||
1228 | 1231 | ||
1229 | void KOAgendaView::clearView() | 1232 | void KOAgendaView::clearView() |
1230 | { | 1233 | { |
1231 | // kdDebug() << "ClearView" << endl; | 1234 | // kdDebug() << "ClearView" << endl; |
1232 | mAllDayAgenda->clear(); | 1235 | mAllDayAgenda->clear(); |
1233 | mAgenda->clear(); | 1236 | mAgenda->clear(); |
1234 | } | 1237 | } |
1235 | 1238 | ||
1236 | void KOAgendaView::printPreview(CalPrinter *calPrinter, const QDate &fd, | 1239 | void KOAgendaView::printPreview(CalPrinter *calPrinter, const QDate &fd, |
1237 | const QDate &td) | 1240 | const QDate &td) |
1238 | { | 1241 | { |
1239 | #ifndef KORG_NOPRINTER | 1242 | #ifndef KORG_NOPRINTER |
1240 | if (fd == td) | 1243 | if (fd == td) |
1241 | calPrinter->preview(CalPrinter::Day, fd, td); | 1244 | calPrinter->preview(CalPrinter::Day, fd, td); |
1242 | else | 1245 | else |
1243 | calPrinter->preview(CalPrinter::Week, fd, td); | 1246 | calPrinter->preview(CalPrinter::Week, fd, td); |
1244 | #endif | 1247 | #endif |
1245 | } | 1248 | } |
1246 | 1249 | ||
1247 | // void KOAgendaView::updateMovedTodo() | 1250 | // void KOAgendaView::updateMovedTodo() |
1248 | // { | 1251 | // { |
1249 | // // updateConfig(); | 1252 | // // updateConfig(); |
1250 | // // emit updateTodoViews(); | 1253 | // // emit updateTodoViews(); |
1251 | // } | 1254 | // } |
1252 | 1255 | ||
1253 | void KOAgendaView::newEvent(int gx, int gy) | 1256 | void KOAgendaView::newEvent(int gx, int gy) |
1254 | { | 1257 | { |
1255 | if (!mSelectedDates.count()) return; | 1258 | if (!mSelectedDates.count()) return; |
1256 | 1259 | ||
1257 | QDate day = mSelectedDates[gx]; | 1260 | QDate day = mSelectedDates[gx]; |
1258 | 1261 | ||
1259 | QTime time = mAgenda->gyToTime(gy); | 1262 | QTime time = mAgenda->gyToTime(gy); |
1260 | QDateTime dt(day,time); | 1263 | QDateTime dt(day,time); |
1261 | // if ( dt < QDateTime::currentDateTime () ) | 1264 | // if ( dt < QDateTime::currentDateTime () ) |
1262 | // dt = QDateTime::currentDateTime ().addSecs( 3600 ); | 1265 | // dt = QDateTime::currentDateTime ().addSecs( 3600 ); |
1263 | emit newEventSignal(dt); | 1266 | emit newEventSignal(dt); |
1264 | } | 1267 | } |
1265 | 1268 | ||
1266 | void KOAgendaView::newEvent(int gxStart, int gyStart, int gxEnd, int gyEnd) | 1269 | void KOAgendaView::newEvent(int gxStart, int gyStart, int gxEnd, int gyEnd) |
1267 | { | 1270 | { |
1268 | if (!mSelectedDates.count()) return; | 1271 | if (!mSelectedDates.count()) return; |
1269 | 1272 | ||
1270 | QDate dayStart = mSelectedDates[gxStart]; | 1273 | QDate dayStart = mSelectedDates[gxStart]; |
1271 | QDate dayEnd = mSelectedDates[gxEnd]; | 1274 | QDate dayEnd = mSelectedDates[gxEnd]; |
1272 | 1275 | ||
1273 | QTime timeStart = mAgenda->gyToTime(gyStart); | 1276 | QTime timeStart = mAgenda->gyToTime(gyStart); |
1274 | QTime timeEnd = mAgenda->gyToTime( gyEnd + 1 ); | 1277 | QTime timeEnd = mAgenda->gyToTime( gyEnd + 1 ); |
1275 | 1278 | ||
1276 | QDateTime dtStart(dayStart,timeStart); | 1279 | QDateTime dtStart(dayStart,timeStart); |
1277 | QDateTime dtEnd(dayEnd,timeEnd); | 1280 | QDateTime dtEnd(dayEnd,timeEnd); |
1278 | 1281 | ||
1279 | emit newEventSignal(dtStart,dtEnd); | 1282 | emit newEventSignal(dtStart,dtEnd); |
1280 | } | 1283 | } |
1281 | 1284 | ||
1282 | void KOAgendaView::newEventAllDay(int gx, int ) | 1285 | void KOAgendaView::newEventAllDay(int gx, int ) |
1283 | { | 1286 | { |
1284 | if (!mSelectedDates.count()) return; | 1287 | if (!mSelectedDates.count()) return; |
1285 | 1288 | ||
1286 | QDate day = mSelectedDates[gx]; | 1289 | QDate day = mSelectedDates[gx]; |
1287 | 1290 | ||
1288 | emit newEventSignal(day); | 1291 | emit newEventSignal(day); |
1289 | } | 1292 | } |
1290 | void KOAgendaView::newTodoAllDay(int gx, int ) | 1293 | void KOAgendaView::newTodoAllDay(int gx, int ) |
1291 | { | 1294 | { |
1292 | if (!mSelectedDates.count()) return; | 1295 | if (!mSelectedDates.count()) return; |
1293 | 1296 | ||
1294 | QDateTime day (mSelectedDates[gx] ); | 1297 | QDateTime day (mSelectedDates[gx] ); |
1295 | emit newTodoSignal(day, true); | 1298 | emit newTodoSignal(day, true); |
1296 | } | 1299 | } |
1297 | void KOAgendaView::newTodo(int gx, int gy ) | 1300 | void KOAgendaView::newTodo(int gx, int gy ) |
1298 | { | 1301 | { |
1299 | if (!mSelectedDates.count()) return; | 1302 | if (!mSelectedDates.count()) return; |
1300 | QDate dayStart = mSelectedDates[gx]; | 1303 | QDate dayStart = mSelectedDates[gx]; |
1301 | QTime timeStart = mAgenda->gyToTime(gy); | 1304 | QTime timeStart = mAgenda->gyToTime(gy); |
1302 | QDateTime dt (dayStart,timeStart); | 1305 | QDateTime dt (dayStart,timeStart); |
1303 | emit newTodoSignal( dt, false ); | 1306 | emit newTodoSignal( dt, false ); |
1304 | } | 1307 | } |
1305 | 1308 | ||
1306 | void KOAgendaView::updateEventIndicatorTop(int newY) | 1309 | void KOAgendaView::updateEventIndicatorTop(int newY) |
1307 | { | 1310 | { |
1308 | uint i; | 1311 | uint i; |
1309 | for(i=0;i<mMinY.size();++i) { | 1312 | for(i=0;i<mMinY.size();++i) { |
1310 | if (newY >= mMinY.at(i)) mEventIndicatorTop->enableColumn(i,true); | 1313 | if (newY >= mMinY.at(i)) mEventIndicatorTop->enableColumn(i,true); |
1311 | else mEventIndicatorTop->enableColumn(i,false); | 1314 | else mEventIndicatorTop->enableColumn(i,false); |
1312 | } | 1315 | } |
1313 | 1316 | ||
1314 | mEventIndicatorTop->update(); | 1317 | mEventIndicatorTop->update(); |
1315 | } | 1318 | } |
1316 | 1319 | ||
1317 | void KOAgendaView::updateEventIndicatorBottom(int newY) | 1320 | void KOAgendaView::updateEventIndicatorBottom(int newY) |
1318 | { | 1321 | { |
1319 | uint i; | 1322 | uint i; |
1320 | for(i=0;i<mMaxY.size();++i) { | 1323 | for(i=0;i<mMaxY.size();++i) { |
1321 | if (newY <= mMaxY.at(i)) mEventIndicatorBottom->enableColumn(i,true); | 1324 | if (newY <= mMaxY.at(i)) mEventIndicatorBottom->enableColumn(i,true); |
1322 | else mEventIndicatorBottom->enableColumn(i,false); | 1325 | else mEventIndicatorBottom->enableColumn(i,false); |
1323 | } | 1326 | } |
1324 | 1327 | ||
1325 | mEventIndicatorBottom->update(); | 1328 | mEventIndicatorBottom->update(); |
1326 | } | 1329 | } |
1327 | 1330 | ||
1328 | void KOAgendaView::startDrag(Event *event) | 1331 | void KOAgendaView::startDrag(Event *event) |
1329 | { | 1332 | { |
1330 | #ifndef KORG_NODND | 1333 | #ifndef KORG_NODND |
1331 | DndFactory factory( calendar() ); | 1334 | DndFactory factory( calendar() ); |
1332 | ICalDrag *vd = factory.createDrag(event,this); | 1335 | ICalDrag *vd = factory.createDrag(event,this); |
1333 | if (vd->drag()) { | 1336 | if (vd->drag()) { |
1334 | kdDebug() << "KOAgendaView::startDrag(): Delete drag source" << endl; | 1337 | kdDebug() << "KOAgendaView::startDrag(): Delete drag source" << endl; |
1335 | } | 1338 | } |
1336 | #endif | 1339 | #endif |
1337 | } | 1340 | } |
1338 | 1341 | ||
1339 | void KOAgendaView::readSettings() | 1342 | void KOAgendaView::readSettings() |
1340 | { | 1343 | { |
1341 | readSettings(KOGlobals::config()); | 1344 | readSettings(KOGlobals::config()); |
1342 | } | 1345 | } |
1343 | 1346 | ||
1344 | void KOAgendaView::readSettings(KConfig *config) | 1347 | void KOAgendaView::readSettings(KConfig *config) |
1345 | { | 1348 | { |
1346 | // kdDebug() << "KOAgendaView::readSettings()" << endl; | 1349 | // kdDebug() << "KOAgendaView::readSettings()" << endl; |
1347 | 1350 | ||
1348 | config->setGroup("Views"); | 1351 | config->setGroup("Views"); |
1349 | 1352 | ||
1350 | //#ifndef KORG_NOSPLITTER | 1353 | //#ifndef KORG_NOSPLITTER |
1351 | QValueList<int> sizes = config->readIntListEntry("Separator AgendaView"); | 1354 | QValueList<int> sizes = config->readIntListEntry("Separator AgendaView"); |
1352 | if (sizes.count() == 2) { | 1355 | if (sizes.count() == 2) { |
1353 | if ( sizes[0] < 20 ) { | 1356 | if ( sizes[0] < 20 ) { |
1354 | sizes[1] = sizes[1] +20 - sizes[0]; | 1357 | sizes[1] = sizes[1] +20 - sizes[0]; |
1355 | sizes[0] = 20; | 1358 | sizes[0] = 20; |
1356 | } | 1359 | } |
1357 | mSplitterAgenda->setSizes(sizes); | 1360 | mSplitterAgenda->setSizes(sizes); |
1358 | // qDebug("read %d %d ",sizes[0],sizes[1] ); | 1361 | // qDebug("read %d %d ",sizes[0],sizes[1] ); |
1359 | } | 1362 | } |
1360 | //#endif | 1363 | //#endif |
1361 | 1364 | ||
1362 | // updateConfig(); | 1365 | // updateConfig(); |
1363 | } | 1366 | } |
1364 | 1367 | ||
1365 | void KOAgendaView::writeSettings(KConfig *config) | 1368 | void KOAgendaView::writeSettings(KConfig *config) |
1366 | { | 1369 | { |
1367 | // kdDebug() << "KOAgendaView::writeSettings()" << endl; | 1370 | // kdDebug() << "KOAgendaView::writeSettings()" << endl; |
1368 | 1371 | ||
1369 | config->setGroup("Views"); | 1372 | config->setGroup("Views"); |
1370 | 1373 | ||
1371 | //#ifndef KORG_NOSPLITTER | 1374 | //#ifndef KORG_NOSPLITTER |
1372 | QValueList<int> list = mSplitterAgenda->sizes(); | 1375 | QValueList<int> list = mSplitterAgenda->sizes(); |
1373 | config->writeEntry("Separator AgendaView",list); | 1376 | config->writeEntry("Separator AgendaView",list); |
1374 | //qDebug("write %d %d ", list[0],list[1] ); | 1377 | //qDebug("write %d %d ", list[0],list[1] ); |
1375 | //#endif | 1378 | //#endif |
1376 | } | 1379 | } |
1377 | 1380 | ||
1378 | void KOAgendaView::setHolidayMasks() | 1381 | void KOAgendaView::setHolidayMasks() |
1379 | { | 1382 | { |
1380 | mHolidayMask.resize(mSelectedDates.count()); | 1383 | mHolidayMask.resize(mSelectedDates.count()); |
1381 | 1384 | ||
1382 | uint i; | 1385 | uint i; |
1383 | for(i=0;i<mSelectedDates.count();++i) { | 1386 | for(i=0;i<mSelectedDates.count();++i) { |
1384 | QDate date = mSelectedDates[i]; | 1387 | QDate date = mSelectedDates[i]; |
1385 | bool showSaturday = KOPrefs::instance()->mExcludeSaturdays && (date.dayOfWeek() == 6); | 1388 | bool showSaturday = KOPrefs::instance()->mExcludeSaturdays && (date.dayOfWeek() == 6); |
1386 | bool showSunday = KOPrefs::instance()->mExcludeHolidays && (date.dayOfWeek() == 7); | 1389 | bool showSunday = KOPrefs::instance()->mExcludeHolidays && (date.dayOfWeek() == 7); |
1387 | bool showHoliday = false; | 1390 | bool showHoliday = false; |
1388 | if ( KOPrefs::instance()->mExcludeHolidays ) { | 1391 | if ( KOPrefs::instance()->mExcludeHolidays ) { |
1389 | QPtrList<Event> events = calendar()->events( date, true ); | 1392 | QPtrList<Event> events = calendar()->events( date, true ); |
1390 | Event *event; | 1393 | Event *event; |
1391 | for( event = events.first(); event; event = events.next() ) { | 1394 | for( event = events.first(); event; event = events.next() ) { |
1392 | if ( event->categories().contains("Holiday") || | 1395 | if ( event->categories().contains("Holiday") || |
1393 | event->categories().contains(i18n("Holiday"))) { | 1396 | event->categories().contains(i18n("Holiday"))) { |
1394 | showHoliday = true; | 1397 | showHoliday = true; |
1395 | break; | 1398 | break; |
1396 | } | 1399 | } |
1397 | } | 1400 | } |
1398 | 1401 | ||
1399 | } | 1402 | } |
1400 | 1403 | ||
1401 | #ifndef KORG_NOPLUGINS | 1404 | #ifndef KORG_NOPLUGINS |
1402 | bool showHoliday = KOPrefs::instance()->mExcludeHolidays && | 1405 | bool showHoliday = KOPrefs::instance()->mExcludeHolidays && |
1403 | !KOCore::self()->holiday(date).isEmpty(); | 1406 | !KOCore::self()->holiday(date).isEmpty(); |
1404 | #endif | 1407 | #endif |
1405 | bool showDay = showSaturday || showSunday || showHoliday; | 1408 | bool showDay = showSaturday || showSunday || showHoliday; |
1406 | 1409 | ||
1407 | if (showDay) { | 1410 | if (showDay) { |
1408 | mHolidayMask.at(i) = true; | 1411 | mHolidayMask.at(i) = true; |
1409 | } else { | 1412 | } else { |
1410 | mHolidayMask.at(i) = false; | 1413 | mHolidayMask.at(i) = false; |
1411 | } | 1414 | } |
1412 | } | 1415 | } |
1413 | 1416 | ||
1414 | mAgenda->setHolidayMask(&mHolidayMask); | 1417 | mAgenda->setHolidayMask(&mHolidayMask); |
1415 | mAllDayAgenda->setHolidayMask(&mHolidayMask); | 1418 | mAllDayAgenda->setHolidayMask(&mHolidayMask); |
1416 | } | 1419 | } |
1417 | 1420 | ||
1418 | void KOAgendaView::setContentsPos(int y) | 1421 | void KOAgendaView::setContentsPos(int y) |
1419 | { | 1422 | { |
1420 | mAgenda->setContentsPos(0,y); | 1423 | mAgenda->setContentsPos(0,y); |
1421 | } | 1424 | } |
1422 | 1425 | ||
1423 | void KOAgendaView::setExpandedButton( bool expanded ) | 1426 | void KOAgendaView::setExpandedButton( bool expanded ) |
1424 | { | 1427 | { |
1425 | if ( expanded ) { | 1428 | if ( expanded ) { |
1426 | mExpandButton->setPixmap( mExpandedPixmap ); | 1429 | mExpandButton->setPixmap( mExpandedPixmap ); |
1427 | } else { | 1430 | } else { |
1428 | mExpandButton->setPixmap( mNotExpandedPixmap ); | 1431 | mExpandButton->setPixmap( mNotExpandedPixmap ); |
1429 | } | 1432 | } |
1430 | } | 1433 | } |
1431 | 1434 | ||
1432 | void KOAgendaView::clearSelection() | 1435 | void KOAgendaView::clearSelection() |
1433 | { | 1436 | { |
1434 | mAgenda->deselectItem(); | 1437 | mAgenda->deselectItem(); |
1435 | mAllDayAgenda->deselectItem(); | 1438 | mAllDayAgenda->deselectItem(); |
1436 | } | 1439 | } |
1437 | 1440 | ||
1438 | void KOAgendaView::newTimeSpanSelectedAllDay(int gxStart, int gyStart, | 1441 | void KOAgendaView::newTimeSpanSelectedAllDay(int gxStart, int gyStart, |
1439 | int gxEnd, int gyEnd) | 1442 | int gxEnd, int gyEnd) |
1440 | { | 1443 | { |
1441 | mTimeSpanInAllDay = true; | 1444 | mTimeSpanInAllDay = true; |
1442 | newTimeSpanSelected(gxStart,gyStart,gxEnd,gyEnd); | 1445 | newTimeSpanSelected(gxStart,gyStart,gxEnd,gyEnd); |
1443 | } | 1446 | } |
1444 | 1447 | ||
1445 | 1448 | ||
1446 | 1449 | ||
1447 | 1450 | ||
1448 | void KOAgendaView::newTimeSpanSelected(int gxStart, int gyStart, | 1451 | void KOAgendaView::newTimeSpanSelected(int gxStart, int gyStart, |
1449 | int gxEnd, int gyEnd) | 1452 | int gxEnd, int gyEnd) |
1450 | { | 1453 | { |
1451 | if (!mSelectedDates.count()) return; | 1454 | if (!mSelectedDates.count()) return; |
1452 | 1455 | ||
1453 | QDate dayStart = mSelectedDates[gxStart]; | 1456 | QDate dayStart = mSelectedDates[gxStart]; |
1454 | QDate dayEnd = mSelectedDates[gxEnd]; | 1457 | QDate dayEnd = mSelectedDates[gxEnd]; |
1455 | 1458 | ||
1456 | QTime timeStart = mAgenda->gyToTime(gyStart); | 1459 | QTime timeStart = mAgenda->gyToTime(gyStart); |
1457 | QTime timeEnd = mAgenda->gyToTime( gyEnd + 1 ); | 1460 | QTime timeEnd = mAgenda->gyToTime( gyEnd + 1 ); |
1458 | 1461 | ||
1459 | QDateTime dtStart(dayStart,timeStart); | 1462 | QDateTime dtStart(dayStart,timeStart); |
1460 | QDateTime dtEnd(dayEnd,timeEnd); | 1463 | QDateTime dtEnd(dayEnd,timeEnd); |
1461 | 1464 | ||
1462 | mTimeSpanBegin = dtStart; | 1465 | mTimeSpanBegin = dtStart; |
1463 | mTimeSpanEnd = dtEnd; | 1466 | mTimeSpanEnd = dtEnd; |
1464 | 1467 | ||
1465 | } | 1468 | } |
1466 | 1469 | ||
1467 | void KOAgendaView::deleteSelectedDateTime() | 1470 | void KOAgendaView::deleteSelectedDateTime() |
1468 | { | 1471 | { |
1469 | mTimeSpanBegin.setDate(QDate()); | 1472 | mTimeSpanBegin.setDate(QDate()); |
1470 | mTimeSpanEnd.setDate(QDate()); | 1473 | mTimeSpanEnd.setDate(QDate()); |
1471 | mTimeSpanInAllDay = false; | 1474 | mTimeSpanInAllDay = false; |
1472 | } | 1475 | } |
1473 | 1476 | ||
1474 | void KOAgendaView::keyPressEvent ( QKeyEvent * e ) | 1477 | void KOAgendaView::keyPressEvent ( QKeyEvent * e ) |
1475 | { | 1478 | { |
1476 | e->ignore(); | 1479 | e->ignore(); |
1477 | } | 1480 | } |
1478 | 1481 | ||
1479 | void KOAgendaView::scrollOneHourUp() | 1482 | void KOAgendaView::scrollOneHourUp() |
1480 | { | 1483 | { |
1481 | 1484 | ||
1482 | mAgenda->scrollBy ( 0, -mAgenda->contentsHeight () / 24 ); | 1485 | mAgenda->scrollBy ( 0, -mAgenda->contentsHeight () / 24 ); |
1483 | } | 1486 | } |
1484 | void KOAgendaView::scrollOneHourDown() | 1487 | void KOAgendaView::scrollOneHourDown() |
1485 | { | 1488 | { |
1486 | mAgenda->scrollBy ( 0, mAgenda->contentsHeight () / 24 ); | 1489 | mAgenda->scrollBy ( 0, mAgenda->contentsHeight () / 24 ); |
1487 | } | 1490 | } |
1488 | 1491 | ||
1489 | void KOAgendaView::setStartHour( int h ) | 1492 | void KOAgendaView::setStartHour( int h ) |
1490 | { | 1493 | { |
1491 | mAgenda->setStartHour( h ); | 1494 | mAgenda->setStartHour( h ); |
1492 | 1495 | ||
1493 | } | 1496 | } |
1494 | 1497 | ||
1495 | void KOAgendaView::updateTodo( Todo * t, int ) | 1498 | void KOAgendaView::updateTodo( Todo * t, int ) |
1496 | { | 1499 | { |
1497 | 1500 | ||
1498 | bool remove = false; | 1501 | bool remove = false; |
1499 | bool removeAD = false; | 1502 | bool removeAD = false; |
1500 | if ( ! t->hasDueDate() ) { | 1503 | if ( ! t->hasDueDate() ) { |
1501 | remove = true; | 1504 | remove = true; |
1502 | removeAD = true; | 1505 | removeAD = true; |
1503 | } | 1506 | } |
1504 | else { | 1507 | else { |
1505 | bool overdue = (!t->isCompleted()) && (t->dtDue() < QDate::currentDate()) && KOPrefs::instance()->mShowTodoInAgenda ; | 1508 | bool overdue = (!t->isCompleted()) && (t->dtDue() < QDate::currentDate()) && KOPrefs::instance()->mShowTodoInAgenda ; |
1506 | if ( overdue && | 1509 | if ( overdue && |
1507 | QDate::currentDate() >= mSelectedDates.first() && | 1510 | QDate::currentDate() >= mSelectedDates.first() && |
1508 | QDate::currentDate() <= mSelectedDates.last()) { | 1511 | QDate::currentDate() <= mSelectedDates.last()) { |
1509 | removeAD = false; | 1512 | removeAD = false; |
1510 | remove = true; | 1513 | remove = true; |
1511 | } | 1514 | } |
diff --git a/korganizer/koagendaview.h b/korganizer/koagendaview.h index 01d74a1..7774fbe 100644 --- a/korganizer/koagendaview.h +++ b/korganizer/koagendaview.h | |||
@@ -1,261 +1,262 @@ | |||
1 | /* | 1 | /* |
2 | This file is part of KOrganizer. | 2 | This file is part of KOrganizer. |
3 | Copyright (c) 2000,2001 Cornelius Schumacher <schumacher@kde.org> | 3 | Copyright (c) 2000,2001 Cornelius Schumacher <schumacher@kde.org> |
4 | 4 | ||
5 | This program is free software; you can redistribute it and/or modify | 5 | This program is free software; you can redistribute it and/or modify |
6 | it under the terms of the GNU General Public License as published by | 6 | it under the terms of the GNU General Public License as published by |
7 | the Free Software Foundation; either version 2 of the License, or | 7 | the Free Software Foundation; either version 2 of the License, or |
8 | (at your option) any later version. | 8 | (at your option) any later version. |
9 | 9 | ||
10 | This program is distributed in the hope that it will be useful, | 10 | This program is distributed in the hope that it will be useful, |
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
13 | GNU General Public License for more details. | 13 | GNU General Public License for more details. |
14 | 14 | ||
15 | You should have received a copy of the GNU General Public License | 15 | You should have received a copy of the GNU General Public License |
16 | along with this program; if not, write to the Free Software | 16 | along with this program; if not, write to the Free Software |
17 | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | 17 | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
18 | 18 | ||
19 | As a special exception, permission is given to link this program | 19 | As a special exception, permission is given to link this program |
20 | with any edition of Qt, and distribute the resulting executable, | 20 | with any edition of Qt, and distribute the resulting executable, |
21 | without including the source code for Qt in the source distribution. | 21 | without including the source code for Qt in the source distribution. |
22 | */ | 22 | */ |
23 | #ifndef KOAGENDAVIEW_H | 23 | #ifndef KOAGENDAVIEW_H |
24 | #define KOAGENDAVIEW_H | 24 | #define KOAGENDAVIEW_H |
25 | 25 | ||
26 | #include <qscrollview.h> | 26 | #include <qscrollview.h> |
27 | #include <qdatetime.h> | 27 | #include <qdatetime.h> |
28 | #include <qlayout.h> | 28 | #include <qlayout.h> |
29 | #ifndef DESKTOP_VERSION | 29 | #ifndef DESKTOP_VERSION |
30 | #include <qksplitter.h> | 30 | #include <qksplitter.h> |
31 | #else | 31 | #else |
32 | #include <qsplitter.h> | 32 | #include <qsplitter.h> |
33 | #endif | 33 | #endif |
34 | #include <qmemarray.h> | 34 | #include <qmemarray.h> |
35 | 35 | ||
36 | #include "koeventview.h" | 36 | #include "koeventview.h" |
37 | 37 | ||
38 | 38 | ||
39 | class QHBox; | 39 | class QHBox; |
40 | class QFrame; | 40 | class QFrame; |
41 | class QLabel; | 41 | class QLabel; |
42 | class QPushButton; | 42 | class QPushButton; |
43 | class CalendarView; | 43 | class CalendarView; |
44 | class KOAgenda; | 44 | class KOAgenda; |
45 | class KOAgendaItem; | 45 | class KOAgendaItem; |
46 | class KConfig; | 46 | class KConfig; |
47 | class KDGanttMinimizeSplitter; | 47 | class KDGanttMinimizeSplitter; |
48 | class TimeLabels : public QScrollView { | 48 | class TimeLabels : public QScrollView { |
49 | Q_OBJECT | 49 | Q_OBJECT |
50 | public: | 50 | public: |
51 | TimeLabels(int rows,QWidget *parent=0,const char *name=0,WFlags f=0); | 51 | TimeLabels(int rows,QWidget *parent=0,const char *name=0,WFlags f=0); |
52 | 52 | ||
53 | void setCellHeight(int height); | 53 | void setCellHeight(int height); |
54 | 54 | ||
55 | /** Calculates the minimum width */ | 55 | /** Calculates the minimum width */ |
56 | virtual int minimumWidth() const; | 56 | virtual int minimumWidth() const; |
57 | 57 | ||
58 | /** updates widget's internal state */ | 58 | /** updates widget's internal state */ |
59 | void updateConfig(); | 59 | void updateConfig(); |
60 | 60 | ||
61 | /** */ | 61 | /** */ |
62 | void setAgenda(KOAgenda* agenda); | 62 | void setAgenda(KOAgenda* agenda); |
63 | 63 | ||
64 | /** */ | 64 | /** */ |
65 | virtual void paintEvent(QPaintEvent* e); | 65 | virtual void paintEvent(QPaintEvent* e); |
66 | void contentsMousePressEvent ( QMouseEvent * ) ; | 66 | void contentsMousePressEvent ( QMouseEvent * ) ; |
67 | void contentsMouseReleaseEvent ( QMouseEvent * ); | 67 | void contentsMouseReleaseEvent ( QMouseEvent * ); |
68 | void contentsMouseMoveEvent ( QMouseEvent * ); | 68 | void contentsMouseMoveEvent ( QMouseEvent * ); |
69 | 69 | ||
70 | public slots: | 70 | public slots: |
71 | /** update time label positions */ | 71 | /** update time label positions */ |
72 | void positionChanged(); | 72 | void positionChanged(); |
73 | signals: | 73 | signals: |
74 | void scaleChanged(); | 74 | void scaleChanged(); |
75 | protected: | 75 | protected: |
76 | void drawContents(QPainter *p,int cx, int cy, int cw, int ch); | 76 | void drawContents(QPainter *p,int cx, int cy, int cw, int ch); |
77 | 77 | ||
78 | private: | 78 | private: |
79 | int mMouseDownY; | 79 | int mMouseDownY; |
80 | QString mOrgCap; | 80 | QString mOrgCap; |
81 | int mRows; | 81 | int mRows; |
82 | int mCellHeight; | 82 | int mCellHeight; |
83 | 83 | ||
84 | /** */ | 84 | /** */ |
85 | KOAgenda* mAgenda; | 85 | KOAgenda* mAgenda; |
86 | }; | 86 | }; |
87 | 87 | ||
88 | class EventIndicator : public QFrame { | 88 | class EventIndicator : public QFrame { |
89 | Q_OBJECT | 89 | Q_OBJECT |
90 | public: | 90 | public: |
91 | enum Location { Top, Bottom }; | 91 | enum Location { Top, Bottom }; |
92 | EventIndicator(Location loc=Top,QWidget *parent=0,const char *name=0); | 92 | EventIndicator(Location loc=Top,QWidget *parent=0,const char *name=0); |
93 | virtual ~EventIndicator(); | 93 | virtual ~EventIndicator(); |
94 | 94 | ||
95 | void changeColumns(int columns); | 95 | void changeColumns(int columns); |
96 | void setPaintWidget( KDGanttMinimizeSplitter* ); | 96 | void setPaintWidget( KDGanttMinimizeSplitter* ); |
97 | void setXOffset( int ); | 97 | void setXOffset( int ); |
98 | void enableColumn(int column, bool enable); | 98 | void enableColumn(int column, bool enable); |
99 | 99 | ||
100 | protected: | 100 | protected: |
101 | void drawContents(QPainter *); | 101 | void drawContents(QPainter *); |
102 | 102 | ||
103 | private: | 103 | private: |
104 | int mXOffset; | 104 | int mXOffset; |
105 | KDGanttMinimizeSplitter* mPaintWidget; | 105 | KDGanttMinimizeSplitter* mPaintWidget; |
106 | int mColumns; | 106 | int mColumns; |
107 | QHBox *mTopBox; | 107 | QHBox *mTopBox; |
108 | QBoxLayout *mTopLayout; | 108 | QBoxLayout *mTopLayout; |
109 | Location mLocation; | 109 | Location mLocation; |
110 | QPixmap mPixmap; | 110 | QPixmap mPixmap; |
111 | QMemArray<bool> mEnabled; | 111 | QMemArray<bool> mEnabled; |
112 | }; | 112 | }; |
113 | 113 | ||
114 | /** | 114 | /** |
115 | KOAgendaView is the agenda-like view used to display events in an one or | 115 | KOAgendaView is the agenda-like view used to display events in an one or |
116 | multi-day view. | 116 | multi-day view. |
117 | */ | 117 | */ |
118 | class KOAgendaView : public KOEventView { | 118 | class KOAgendaView : public KOEventView { |
119 | Q_OBJECT | 119 | Q_OBJECT |
120 | public: | 120 | public: |
121 | KOAgendaView(Calendar *cal,QWidget *parent = 0,const char *name = 0 ); | 121 | KOAgendaView(Calendar *cal,QWidget *parent = 0,const char *name = 0 ); |
122 | virtual ~KOAgendaView(); | 122 | virtual ~KOAgendaView(); |
123 | void setStartHour( int ); | 123 | void setStartHour( int ); |
124 | void toggleAllDay(); | 124 | void toggleAllDay(); |
125 | 125 | ||
126 | 126 | ||
127 | /** Returns maximum number of days supported by the koagendaview */ | 127 | /** Returns maximum number of days supported by the koagendaview */ |
128 | virtual int maxDatesHint(); | 128 | virtual int maxDatesHint(); |
129 | 129 | ||
130 | /** Returns number of currently shown dates. */ | 130 | /** Returns number of currently shown dates. */ |
131 | virtual int currentDateCount(); | 131 | virtual int currentDateCount(); |
132 | 132 | ||
133 | /** returns the currently selected events */ | 133 | /** returns the currently selected events */ |
134 | virtual QPtrList<Incidence> selectedIncidences(); | 134 | virtual QPtrList<Incidence> selectedIncidences(); |
135 | 135 | ||
136 | /** returns the currently selected events */ | 136 | /** returns the currently selected events */ |
137 | virtual DateList selectedDates(); | 137 | virtual DateList selectedDates(); |
138 | 138 | ||
139 | /** Remove all events from view */ | 139 | /** Remove all events from view */ |
140 | void clearView(); | 140 | void clearView(); |
141 | KOAgenda *agenda() { return mAgenda;} | 141 | KOAgenda *agenda() { return mAgenda;} |
142 | virtual void printPreview(CalPrinter *calPrinter, | 142 | virtual void printPreview(CalPrinter *calPrinter, |
143 | const QDate &, const QDate &); | 143 | const QDate &, const QDate &); |
144 | 144 | ||
145 | /** start-datetime of selection */ | 145 | /** start-datetime of selection */ |
146 | QDateTime selectionStart() {return mTimeSpanBegin;} | 146 | QDateTime selectionStart() {return mTimeSpanBegin;} |
147 | /** end-datetime of selection */ | 147 | /** end-datetime of selection */ |
148 | QDateTime selectionEnd() {return mTimeSpanEnd;} | 148 | QDateTime selectionEnd() {return mTimeSpanEnd;} |
149 | /** returns true if selection is for whole day */ | 149 | /** returns true if selection is for whole day */ |
150 | bool selectedIsAllDay() {return mTimeSpanInAllDay;} | 150 | bool selectedIsAllDay() {return mTimeSpanInAllDay;} |
151 | /** make selected start/end invalid */ | 151 | /** make selected start/end invalid */ |
152 | void deleteSelectedDateTime(); | 152 | void deleteSelectedDateTime(); |
153 | void repaintAgenda(); | 153 | void repaintAgenda(); |
154 | public slots: | 154 | public slots: |
155 | virtual void updateView(); | 155 | virtual void updateView(); |
156 | virtual void updateConfig(); | 156 | virtual void updateConfig(); |
157 | virtual void showDates(const QDate &start, const QDate &end); | 157 | virtual void showDates(const QDate &start, const QDate &end); |
158 | virtual void showEvents(QPtrList<Event> eventList); | 158 | virtual void showEvents(QPtrList<Event> eventList); |
159 | 159 | ||
160 | void updateTodo( Todo *, int ); | 160 | void updateTodo( Todo *, int ); |
161 | void changeEventDisplay(Event *, int); | 161 | void changeEventDisplay(Event *, int); |
162 | 162 | ||
163 | void clearSelection(); | 163 | void clearSelection(); |
164 | 164 | ||
165 | void newTodo(int gx,int gy); | 165 | void newTodo(int gx,int gy); |
166 | void newEvent(int gx,int gy); | 166 | void newEvent(int gx,int gy); |
167 | void newEvent(int gxStart, int gyStart, int gxEnd, int gyEnd); | 167 | void newEvent(int gxStart, int gyStart, int gxEnd, int gyEnd); |
168 | void newEventAllDay(int gx, int gy); | 168 | void newEventAllDay(int gx, int gy); |
169 | void newTodoAllDay(int gx, int gy); | 169 | void newTodoAllDay(int gx, int gy); |
170 | 170 | ||
171 | void startDrag(Event *); | 171 | void startDrag(Event *); |
172 | 172 | ||
173 | void readSettings(); | 173 | void readSettings(); |
174 | void readSettings(KConfig *); | 174 | void readSettings(KConfig *); |
175 | void writeSettings(KConfig *); | 175 | void writeSettings(KConfig *); |
176 | 176 | ||
177 | void setContentsPos(int y); | 177 | void setContentsPos(int y); |
178 | 178 | ||
179 | void setExpandedButton( bool expanded ); | 179 | void setExpandedButton( bool expanded ); |
180 | void scrollOneHourUp(); | 180 | void scrollOneHourUp(); |
181 | void scrollOneHourDown(); | 181 | void scrollOneHourDown(); |
182 | void addToCalSlot(Incidence *, Incidence *); | 182 | void addToCalSlot(Incidence *, Incidence *); |
183 | 183 | ||
184 | signals: | 184 | signals: |
185 | void showDateView( int, QDate ); | ||
185 | void newTodoSignal( QDateTime ,bool ); | 186 | void newTodoSignal( QDateTime ,bool ); |
186 | void toggleExpand(); | 187 | void toggleExpand(); |
187 | void todoMoved( Todo *, int ); | 188 | void todoMoved( Todo *, int ); |
188 | void incidenceChanged(Incidence * , int ); | 189 | void incidenceChanged(Incidence * , int ); |
189 | // void cloneIncidenceSignal(Incidence *); | 190 | // void cloneIncidenceSignal(Incidence *); |
190 | 191 | ||
191 | protected: | 192 | protected: |
192 | bool mBlockUpdating; | 193 | bool mBlockUpdating; |
193 | int mUpcomingWidth; | 194 | int mUpcomingWidth; |
194 | /** Fill agenda beginning with date startDate */ | 195 | /** Fill agenda beginning with date startDate */ |
195 | void fillAgenda(const QDate &startDate); | 196 | void fillAgenda(const QDate &startDate); |
196 | void resizeEvent( QResizeEvent* e ); | 197 | void resizeEvent( QResizeEvent* e ); |
197 | /** Fill agenda using the current set value for the start date */ | 198 | /** Fill agenda using the current set value for the start date */ |
198 | void fillAgenda(); | 199 | void fillAgenda(); |
199 | 200 | ||
200 | /** Create labels for the selected dates. */ | 201 | /** Create labels for the selected dates. */ |
201 | void createDayLabels(); | 202 | void createDayLabels(); |
202 | 203 | ||
203 | /** | 204 | /** |
204 | Set the masks on the agenda widgets indicating, which days are holidays. | 205 | Set the masks on the agenda widgets indicating, which days are holidays. |
205 | */ | 206 | */ |
206 | void setHolidayMasks(); | 207 | void setHolidayMasks(); |
207 | 208 | ||
208 | protected slots: | 209 | protected slots: |
209 | /** Update event belonging to agenda item */ | 210 | /** Update event belonging to agenda item */ |
210 | void updateEventDates(KOAgendaItem *item, int mode = -1); | 211 | void updateEventDates(KOAgendaItem *item, int mode = -1); |
211 | //void updateMovedTodo(); | 212 | //void updateMovedTodo(); |
212 | 213 | ||
213 | void updateEventIndicatorTop(int newY); | 214 | void updateEventIndicatorTop(int newY); |
214 | void updateEventIndicatorBottom(int newY); | 215 | void updateEventIndicatorBottom(int newY); |
215 | 216 | ||
216 | /** Updates data for selected timespan */ | 217 | /** Updates data for selected timespan */ |
217 | void newTimeSpanSelected(int gxStart, int gyStart, int gxEnd, int gyEnd); | 218 | void newTimeSpanSelected(int gxStart, int gyStart, int gxEnd, int gyEnd); |
218 | /** Updates data for selected timespan for all day event*/ | 219 | /** Updates data for selected timespan for all day event*/ |
219 | void newTimeSpanSelectedAllDay(int gxStart, int gyStart, int gxEnd, int gyEnd); | 220 | void newTimeSpanSelectedAllDay(int gxStart, int gyStart, int gxEnd, int gyEnd); |
220 | 221 | ||
221 | private: | 222 | private: |
222 | // view widgets | 223 | // view widgets |
223 | QFrame *mDayLabels; | 224 | QFrame *mDayLabels; |
224 | QHBox *mDayLabelsFrame; | 225 | QHBox *mDayLabelsFrame; |
225 | QBoxLayout *mLayoutDayLabels; | 226 | QBoxLayout *mLayoutDayLabels; |
226 | QFrame *mAllDayFrame; | 227 | QFrame *mAllDayFrame; |
227 | KOAgenda *mAllDayAgenda; | 228 | KOAgenda *mAllDayAgenda; |
228 | KOAgenda *mAgenda; | 229 | KOAgenda *mAgenda; |
229 | TimeLabels *mTimeLabels; | 230 | TimeLabels *mTimeLabels; |
230 | QWidget *mDummyAllDayLeft; | 231 | QWidget *mDummyAllDayLeft; |
231 | 232 | ||
232 | KDGanttMinimizeSplitter* mSplitterAgenda; | 233 | KDGanttMinimizeSplitter* mSplitterAgenda; |
233 | QPushButton *mExpandButton; | 234 | QPushButton *mExpandButton; |
234 | 235 | ||
235 | DateList mSelectedDates; // List of dates to be displayed | 236 | DateList mSelectedDates; // List of dates to be displayed |
236 | int mViewType; | 237 | int mViewType; |
237 | 238 | ||
238 | bool mWeekStartsMonday; | 239 | bool mWeekStartsMonday; |
239 | int mStartHour; | 240 | int mStartHour; |
240 | 241 | ||
241 | KOEventPopupMenu *mAgendaPopup; | 242 | KOEventPopupMenu *mAgendaPopup; |
242 | KOEventPopupMenu *mAllDayAgendaPopup; | 243 | KOEventPopupMenu *mAllDayAgendaPopup; |
243 | 244 | ||
244 | EventIndicator *mEventIndicatorTop; | 245 | EventIndicator *mEventIndicatorTop; |
245 | EventIndicator *mEventIndicatorBottom; | 246 | EventIndicator *mEventIndicatorBottom; |
246 | 247 | ||
247 | QMemArray<int> mMinY; | 248 | QMemArray<int> mMinY; |
248 | QMemArray<int> mMaxY; | 249 | QMemArray<int> mMaxY; |
249 | 250 | ||
250 | QMemArray<bool> mHolidayMask; | 251 | QMemArray<bool> mHolidayMask; |
251 | 252 | ||
252 | QPixmap mExpandedPixmap; | 253 | QPixmap mExpandedPixmap; |
253 | QPixmap mNotExpandedPixmap; | 254 | QPixmap mNotExpandedPixmap; |
254 | QPtrList<QLabel> mDayLabelsList; | 255 | QPtrList<QLabel> mDayLabelsList; |
255 | QDateTime mTimeSpanBegin; | 256 | QDateTime mTimeSpanBegin; |
256 | QDateTime mTimeSpanEnd; | 257 | QDateTime mTimeSpanEnd; |
257 | bool mTimeSpanInAllDay; | 258 | bool mTimeSpanInAllDay; |
258 | void keyPressEvent ( QKeyEvent * e ); | 259 | void keyPressEvent ( QKeyEvent * e ); |
259 | }; | 260 | }; |
260 | 261 | ||
261 | #endif // KOAGENDAVIEW_H | 262 | #endif // KOAGENDAVIEW_H |
diff --git a/korganizer/koviewmanager.cpp b/korganizer/koviewmanager.cpp index a88276e..6da4799 100644 --- a/korganizer/koviewmanager.cpp +++ b/korganizer/koviewmanager.cpp | |||
@@ -1,599 +1,647 @@ | |||
1 | /* | 1 | /* |
2 | This file is part of KOrganizer. | 2 | This file is part of KOrganizer. |
3 | 3 | ||
4 | Copyright (c) 2001 | 4 | Copyright (c) 2001 |
5 | Cornelius Schumacher <schumacher@kde.org> | 5 | Cornelius Schumacher <schumacher@kde.org> |
6 | 6 | ||
7 | This program is free software; you can redistribute it and/or modify | 7 | This program is free software; you can redistribute it and/or modify |
8 | it under the terms of the GNU General Public License as published by | 8 | it under the terms of the GNU General Public License as published by |
9 | the Free Software Foundation; either version 2 of the License, or | 9 | the Free Software Foundation; either version 2 of the License, or |
10 | (at your option) any later version. | 10 | (at your option) any later version. |
11 | 11 | ||
12 | This program is distributed in the hope that it will be useful, | 12 | This program is distributed in the hope that it will be useful, |
13 | but WITHOUT ANY WARRANTY; without even the implied warranty of | 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the | 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the |
15 | GNU General Public License for more details. | 15 | GNU General Public License for more details. |
16 | 16 | ||
17 | You should have received a copy of the GNU General Public License | 17 | You should have received a copy of the GNU General Public License |
18 | along with this program; if not, write to the Free Software | 18 | along with this program; if not, write to the Free Software |
19 | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | 19 | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
20 | 20 | ||
21 | As a special exception, permission is given to link this program | 21 | As a special exception, permission is given to link this program |
22 | with any edition of Qt, and distribute the resulting executable, | 22 | with any edition of Qt, and distribute the resulting executable, |
23 | without including the source code for Qt in the source distribution. | 23 | without including the source code for Qt in the source distribution. |
24 | */ | 24 | */ |
25 | 25 | ||
26 | #include <qwidgetstack.h> | 26 | #include <qwidgetstack.h> |
27 | 27 | ||
28 | #include <kconfig.h> | 28 | #include <kconfig.h> |
29 | #include <kglobal.h> | 29 | #include <kglobal.h> |
30 | #ifndef DESKTOP_VERSION | 30 | #ifndef DESKTOP_VERSION |
31 | #include <qpe/qpeapplication.h> | 31 | #include <qpe/qpeapplication.h> |
32 | #else | 32 | #else |
33 | #include <qapplication.h> | 33 | #include <qapplication.h> |
34 | #endif | 34 | #endif |
35 | #include <qdatetime.h> | 35 | #include <qdatetime.h> |
36 | #include "calendarview.h" | 36 | #include "calendarview.h" |
37 | #include "datenavigator.h" | 37 | #include "datenavigator.h" |
38 | #include "kotodoview.h" | 38 | #include "kotodoview.h" |
39 | #include "koagendaview.h" | 39 | #include "koagendaview.h" |
40 | #include "kodialogmanager.h" | 40 | #include "kodialogmanager.h" |
41 | #include "komonthview.h" | 41 | #include "komonthview.h" |
42 | #include "kolistview.h" | 42 | #include "kolistview.h" |
43 | #include "kowhatsnextview.h" | 43 | #include "kowhatsnextview.h" |
44 | #include "kojournalview.h" | 44 | #include "kojournalview.h" |
45 | #include "kotimespanview.h" | 45 | #include "kotimespanview.h" |
46 | #include "koprefs.h" | 46 | #include "koprefs.h" |
47 | #include "navigatorbar.h" | 47 | #include "navigatorbar.h" |
48 | #include "kdatenavigator.h" | 48 | #include "kdatenavigator.h" |
49 | 49 | ||
50 | #include "koviewmanager.h" | 50 | #include "koviewmanager.h" |
51 | //extern bool externFlagMonthviewBlockPainting; | 51 | //extern bool externFlagMonthviewBlockPainting; |
52 | 52 | ||
53 | //bool globalFlagBlockPainting = false; | 53 | //bool globalFlagBlockPainting = false; |
54 | int globalFlagBlockAgenda = 0; | 54 | int globalFlagBlockAgenda = 0; |
55 | int globalFlagBlockLabel = 0; | 55 | int globalFlagBlockLabel = 0; |
56 | int globalFlagBlockAgendaItemPaint = 1; | 56 | int globalFlagBlockAgendaItemPaint = 1; |
57 | int globalFlagBlockAgendaItemUpdate = 1; | 57 | int globalFlagBlockAgendaItemUpdate = 1; |
58 | 58 | ||
59 | 59 | ||
60 | KOViewManager::KOViewManager( CalendarView *mainView ) : | 60 | KOViewManager::KOViewManager( CalendarView *mainView ) : |
61 | QObject(), mMainView( mainView ) | 61 | QObject(), mMainView( mainView ) |
62 | { | 62 | { |
63 | mCurrentView = 0; | 63 | mCurrentView = 0; |
64 | 64 | ||
65 | mWhatsNextView = 0; | 65 | mWhatsNextView = 0; |
66 | mTodoView = 0; | 66 | mTodoView = 0; |
67 | mAgendaView = 0; | 67 | mAgendaView = 0; |
68 | mMonthView = 0; | 68 | mMonthView = 0; |
69 | mListView = 0; | 69 | mListView = 0; |
70 | mJournalView = 0; | 70 | mJournalView = 0; |
71 | mTimeSpanView = 0; | 71 | mTimeSpanView = 0; |
72 | mCurrentAgendaView = 0 ; | 72 | mCurrentAgendaView = 0 ; |
73 | mFlagShowNextxDays = false; | 73 | mFlagShowNextxDays = false; |
74 | } | 74 | } |
75 | 75 | ||
76 | KOViewManager::~KOViewManager() | 76 | KOViewManager::~KOViewManager() |
77 | { | 77 | { |
78 | } | 78 | } |
79 | 79 | ||
80 | 80 | ||
81 | KOrg::BaseView *KOViewManager::currentView() | 81 | KOrg::BaseView *KOViewManager::currentView() |
82 | { | 82 | { |
83 | return mCurrentView; | 83 | return mCurrentView; |
84 | } | 84 | } |
85 | 85 | ||
86 | void KOViewManager::readSettings(KConfig *config) | 86 | void KOViewManager::readSettings(KConfig *config) |
87 | { | 87 | { |
88 | config->setGroup("General"); | 88 | config->setGroup("General"); |
89 | QString view = config->readEntry("Current View"); | 89 | QString view = config->readEntry("Current View"); |
90 | if (view == "WhatsNext") showWhatsNextView(); | 90 | if (view == "WhatsNext") showWhatsNextView(); |
91 | else if (view == "Month") showMonthView(); | 91 | else if (view == "Month") showMonthView(); |
92 | else if (view == "List") showListView(); | 92 | else if (view == "List") showListView(); |
93 | else if (view == "Journal") showJournalView(); | 93 | else if (view == "Journal") showJournalView(); |
94 | else if (view == "TimeSpan") showTimeSpanView(); | 94 | else if (view == "TimeSpan") showTimeSpanView(); |
95 | else if (view == "Todo") showTodoView(); | 95 | else if (view == "Todo") showTodoView(); |
96 | else { | 96 | else { |
97 | showAgendaView(); | 97 | showAgendaView(); |
98 | } | 98 | } |
99 | } | 99 | } |
100 | 100 | ||
101 | |||
102 | void KOViewManager::showDateView( int view, QDate date) | ||
103 | { | ||
104 | |||
105 | qDebug("date %d %s", view, date.toString().latin1()); | ||
106 | #if 0 | ||
107 | mNewItemPopup->insertItem ( SmallIcon( pathString +"day" ), i18n("Day view"),3 ); | ||
108 | mNewItemPopup->insertItem ( SmallIcon( pathString +"week" ), i18n("Next Week"),4 ); | ||
109 | mNewItemPopup->insertItem ( SmallIcon( pathString +"month" ), i18n("Next Two Weeks"),5 ); | ||
110 | mNewItemPopup->insertItem ( SmallIcon( pathString +"month" ), i18n("Next Month"),6 ); | ||
111 | mNewItemPopup->insertItem ( SmallIcon( pathString +"journal" ), i18n("Journal view"),7 ); | ||
112 | #endif | ||
113 | if ( view == 3 ) { | ||
114 | mMainView->showDay( date ); | ||
115 | } else if (view == 4 ) { | ||
116 | mMainView->dateNavigator()->selectDates( date, 7 ); | ||
117 | } else if (view == 5 ) { | ||
118 | mMainView->dateNavigator()->selectDates( date, 14); | ||
119 | } else if (view == 6 ) { | ||
120 | showMonthView(); | ||
121 | mMainView->dateNavigator()->selectMonthByDate( date ); | ||
122 | mMainView->dateNavigator()->selectDate( date ); | ||
123 | } else if (view == 7 ) { | ||
124 | mMainView->dateNavigator()->selectDate( date ); | ||
125 | showJournalView(); | ||
126 | } else if (view == 8 ) { | ||
127 | globalFlagBlockAgenda = 1; | ||
128 | if ( mCurrentAgendaView != 3 ) | ||
129 | mCurrentAgendaView = -1; | ||
130 | showAgendaView(KOPrefs::instance()->mFullViewMonth); | ||
131 | globalFlagBlockAgenda = 2; | ||
132 | mMainView->dateNavigator()->selectDates( date , | ||
133 | KOPrefs::instance()->mNextXDays ); | ||
134 | mFlagShowNextxDays = true; | ||
135 | mCurrentAgendaView = 3 ; | ||
136 | } | ||
137 | |||
138 | #if 0 | ||
139 | dateNavigator()->blockSignals( true ); | ||
140 | dateNavigator()->selectDate( d ); | ||
141 | dateNavigator()->blockSignals( false ); | ||
142 | mViewManager->showDayView(); | ||
143 | #endif | ||
144 | |||
145 | } | ||
146 | |||
147 | |||
148 | |||
101 | void KOViewManager::writeSettings(KConfig *config) | 149 | void KOViewManager::writeSettings(KConfig *config) |
102 | { | 150 | { |
103 | config->setGroup("General"); | 151 | config->setGroup("General"); |
104 | 152 | ||
105 | QString view; | 153 | QString view; |
106 | if (mCurrentView == mWhatsNextView) view = "WhatsNext"; | 154 | if (mCurrentView == mWhatsNextView) view = "WhatsNext"; |
107 | else if (mCurrentView == mMonthView) view = "Month"; | 155 | else if (mCurrentView == mMonthView) view = "Month"; |
108 | else if (mCurrentView == mListView) view = "List"; | 156 | else if (mCurrentView == mListView) view = "List"; |
109 | else if (mCurrentView == mJournalView) view = "Journal"; | 157 | else if (mCurrentView == mJournalView) view = "Journal"; |
110 | else if (mCurrentView == mTimeSpanView) view = "TimeSpan"; | 158 | else if (mCurrentView == mTimeSpanView) view = "TimeSpan"; |
111 | else if (mCurrentView == mTodoView) view = "Todo"; | 159 | else if (mCurrentView == mTodoView) view = "Todo"; |
112 | else view = "Agenda"; | 160 | else view = "Agenda"; |
113 | 161 | ||
114 | config->writeEntry("Current View",view); | 162 | config->writeEntry("Current View",view); |
115 | 163 | ||
116 | if (mAgendaView) { | 164 | if (mAgendaView) { |
117 | mAgendaView->writeSettings(config); | 165 | mAgendaView->writeSettings(config); |
118 | } | 166 | } |
119 | if (mTimeSpanView) { | 167 | if (mTimeSpanView) { |
120 | mTimeSpanView->writeSettings(config); | 168 | mTimeSpanView->writeSettings(config); |
121 | } | 169 | } |
122 | if (mListView) { | 170 | if (mListView) { |
123 | mListView->writeSettings(config); | 171 | mListView->writeSettings(config); |
124 | } | 172 | } |
125 | if (mTodoView) { | 173 | if (mTodoView) { |
126 | mTodoView->saveLayout(config,"Todo View"); | 174 | mTodoView->saveLayout(config,"Todo View"); |
127 | } | 175 | } |
128 | } | 176 | } |
129 | 177 | ||
130 | void KOViewManager::showView(KOrg::BaseView *view, bool fullScreen ) | 178 | void KOViewManager::showView(KOrg::BaseView *view, bool fullScreen ) |
131 | { | 179 | { |
132 | 180 | ||
133 | //mFlagShowNextxDays = false; | 181 | //mFlagShowNextxDays = false; |
134 | //if(view == mCurrentView) return; | 182 | //if(view == mCurrentView) return; |
135 | if ( view == 0 ) { | 183 | if ( view == 0 ) { |
136 | view = mCurrentView; | 184 | view = mCurrentView; |
137 | if ( view == 0 ) | 185 | if ( view == 0 ) |
138 | return; | 186 | return; |
139 | } | 187 | } |
140 | bool full = fullScreen; | 188 | bool full = fullScreen; |
141 | if(view == mCurrentView && view != mWhatsNextView ) { | 189 | if(view == mCurrentView && view != mWhatsNextView ) { |
142 | if ( mCurrentAgendaView < 0 ) | 190 | if ( mCurrentAgendaView < 0 ) |
143 | return; | 191 | return; |
144 | full = mMainView->leftFrame()->isVisible(); | 192 | full = mMainView->leftFrame()->isVisible(); |
145 | } else { | 193 | } else { |
146 | mCurrentView = view; | 194 | mCurrentView = view; |
147 | 195 | ||
148 | // bool full = fullScreen; | 196 | // bool full = fullScreen; |
149 | bool isFull = !mMainView->leftFrame()->isVisible(); | 197 | bool isFull = !mMainView->leftFrame()->isVisible(); |
150 | if ( isFull && KOPrefs::instance()->mViewChangeHoldFullscreen ) | 198 | if ( isFull && KOPrefs::instance()->mViewChangeHoldFullscreen ) |
151 | full = true; | 199 | full = true; |
152 | if ( !isFull && KOPrefs::instance()->mViewChangeHoldNonFullscreen ) | 200 | if ( !isFull && KOPrefs::instance()->mViewChangeHoldNonFullscreen ) |
153 | full = false; | 201 | full = false; |
154 | } | 202 | } |
155 | if ( mAgendaView ) mAgendaView->deleteSelectedDateTime(); | 203 | if ( mAgendaView ) mAgendaView->deleteSelectedDateTime(); |
156 | //raiseCurrentView( full ); | 204 | //raiseCurrentView( full ); |
157 | mMainView->processIncidenceSelection( 0 ); | 205 | mMainView->processIncidenceSelection( 0 ); |
158 | mMainView->updateView(); | 206 | mMainView->updateView(); |
159 | raiseCurrentView( full ); | 207 | raiseCurrentView( full ); |
160 | mMainView->adaptNavigationUnits(); | 208 | mMainView->adaptNavigationUnits(); |
161 | } | 209 | } |
162 | 210 | ||
163 | void KOViewManager::raiseCurrentView( bool fullScreen ) | 211 | void KOViewManager::raiseCurrentView( bool fullScreen ) |
164 | { | 212 | { |
165 | //qDebug("raiseCurrentView "); | 213 | //qDebug("raiseCurrentView "); |
166 | mCurrentAgendaView = 0; | 214 | mCurrentAgendaView = 0; |
167 | int wid = mMainView->width() ; | 215 | int wid = mMainView->width() ; |
168 | int hei = mMainView->height(); | 216 | int hei = mMainView->height(); |
169 | if ( mCurrentView == mMonthView ) { | 217 | if ( mCurrentView == mMonthView ) { |
170 | mMainView->navigatorBar()->show(); | 218 | mMainView->navigatorBar()->show(); |
171 | hei -= mMainView->navigatorBar()->sizeHint().height(); | 219 | hei -= mMainView->navigatorBar()->sizeHint().height(); |
172 | //mMainView->navigatorBar()->hide(); | 220 | //mMainView->navigatorBar()->hide(); |
173 | } else { | 221 | } else { |
174 | mMainView->navigatorBar()->hide(); | 222 | mMainView->navigatorBar()->hide(); |
175 | } | 223 | } |
176 | if ( fullScreen ) { | 224 | if ( fullScreen ) { |
177 | mMainView->leftFrame()->hide(); | 225 | mMainView->leftFrame()->hide(); |
178 | } else { | 226 | } else { |
179 | mMainView->leftFrame()->show(); | 227 | mMainView->leftFrame()->show(); |
180 | if ( KOPrefs::instance()->mVerticalScreen ) | 228 | if ( KOPrefs::instance()->mVerticalScreen ) |
181 | hei -= mMainView->leftFrame()->height(); | 229 | hei -= mMainView->leftFrame()->height(); |
182 | else | 230 | else |
183 | wid -= mMainView->leftFrame()->width(); | 231 | wid -= mMainView->leftFrame()->width(); |
184 | } | 232 | } |
185 | emit signalFullScreen( !fullScreen ); | 233 | emit signalFullScreen( !fullScreen ); |
186 | if ( globalFlagBlockAgenda == 5 ) { | 234 | if ( globalFlagBlockAgenda == 5 ) { |
187 | globalFlagBlockAgenda = 4; | 235 | globalFlagBlockAgenda = 4; |
188 | globalFlagBlockAgendaItemPaint = 1; | 236 | globalFlagBlockAgendaItemPaint = 1; |
189 | } | 237 | } |
190 | mMainView->viewStack()->raiseWidget(mCurrentView); | 238 | mMainView->viewStack()->raiseWidget(mCurrentView); |
191 | if ( globalFlagBlockAgenda == 4 ) { | 239 | if ( globalFlagBlockAgenda == 4 ) { |
192 | if ( mCurrentView == mAgendaView ) { | 240 | if ( mCurrentView == mAgendaView ) { |
193 | //globalFlagBlockAgenda =1 ; | 241 | //globalFlagBlockAgenda =1 ; |
194 | if ( KOPrefs::instance()->mSetTimeToDayStartAt ) | 242 | if ( KOPrefs::instance()->mSetTimeToDayStartAt ) |
195 | mAgendaView->setStartHour( KOPrefs::instance()->mDayBegins ); | 243 | mAgendaView->setStartHour( KOPrefs::instance()->mDayBegins ); |
196 | else if ( KOPrefs::instance()->mCenterOnCurrentTime ) | 244 | else if ( KOPrefs::instance()->mCenterOnCurrentTime ) |
197 | mAgendaView->setStartHour( QTime::currentTime ().hour() ); | 245 | mAgendaView->setStartHour( QTime::currentTime ().hour() ); |
198 | qApp->processEvents(); | 246 | qApp->processEvents(); |
199 | //qDebug("qApp->processEvents() "); | 247 | //qDebug("qApp->processEvents() "); |
200 | globalFlagBlockAgenda = 0; | 248 | globalFlagBlockAgenda = 0; |
201 | mAgendaView->repaintAgenda(); | 249 | mAgendaView->repaintAgenda(); |
202 | 250 | ||
203 | } | 251 | } |
204 | globalFlagBlockAgenda = 0; | 252 | globalFlagBlockAgenda = 0; |
205 | } | 253 | } |
206 | emit signalAgendaView( mCurrentView == mAgendaView ); | 254 | emit signalAgendaView( mCurrentView == mAgendaView ); |
207 | //qDebug("raiseCurrentView ende "); | 255 | //qDebug("raiseCurrentView ende "); |
208 | 256 | ||
209 | } | 257 | } |
210 | 258 | ||
211 | void KOViewManager::updateView() | 259 | void KOViewManager::updateView() |
212 | { | 260 | { |
213 | // qDebug("KOViewManager::updateView() "); | 261 | // qDebug("KOViewManager::updateView() "); |
214 | // if we are updating mTodoView, we get endless recursion | 262 | // if we are updating mTodoView, we get endless recursion |
215 | if ( mTodoView == mCurrentView ) | 263 | if ( mTodoView == mCurrentView ) |
216 | return; | 264 | return; |
217 | if ( mCurrentView ) mCurrentView->updateView(); | 265 | if ( mCurrentView ) mCurrentView->updateView(); |
218 | 266 | ||
219 | } | 267 | } |
220 | 268 | ||
221 | void KOViewManager::updateView(const QDate &start, const QDate &end) | 269 | void KOViewManager::updateView(const QDate &start, const QDate &end) |
222 | { | 270 | { |
223 | // kdDebug() << "KOViewManager::updateView()" << endl; | 271 | // kdDebug() << "KOViewManager::updateView()" << endl; |
224 | 272 | ||
225 | if (mCurrentView) mCurrentView->showDates(start, end); | 273 | if (mCurrentView) mCurrentView->showDates(start, end); |
226 | 274 | ||
227 | if (mTodoView) mTodoView->updateView(); | 275 | if (mTodoView) mTodoView->updateView(); |
228 | } | 276 | } |
229 | 277 | ||
230 | 278 | ||
231 | void KOViewManager::updateWNview() | 279 | void KOViewManager::updateWNview() |
232 | { | 280 | { |
233 | if ( mCurrentView == mWhatsNextView && mWhatsNextView ) | 281 | if ( mCurrentView == mWhatsNextView && mWhatsNextView ) |
234 | mWhatsNextView->updateView(); | 282 | mWhatsNextView->updateView(); |
235 | 283 | ||
236 | } | 284 | } |
237 | void KOViewManager::showWhatsNextView() | 285 | void KOViewManager::showWhatsNextView() |
238 | { | 286 | { |
239 | if (!mWhatsNextView) { | 287 | if (!mWhatsNextView) { |
240 | mWhatsNextView = new KOWhatsNextView(mMainView->calendar(),mMainView->viewStack(), | 288 | mWhatsNextView = new KOWhatsNextView(mMainView->calendar(),mMainView->viewStack(), |
241 | "KOViewManager::WhatsNextView"); | 289 | "KOViewManager::WhatsNextView"); |
242 | mWhatsNextView->setEventViewer( mMainView->getEventViewerDialog()); | 290 | mWhatsNextView->setEventViewer( mMainView->getEventViewerDialog()); |
243 | connect(mMainView, SIGNAL(configChanged()), mWhatsNextView, SLOT(updateConfig())); | 291 | connect(mMainView, SIGNAL(configChanged()), mWhatsNextView, SLOT(updateConfig())); |
244 | addView(mWhatsNextView); | 292 | addView(mWhatsNextView); |
245 | connect(this, SIGNAL( printWNV() ), | 293 | connect(this, SIGNAL( printWNV() ), |
246 | mWhatsNextView, SLOT( printMe() ) ); | 294 | mWhatsNextView, SLOT( printMe() ) ); |
247 | } | 295 | } |
248 | globalFlagBlockAgenda = 1; | 296 | globalFlagBlockAgenda = 1; |
249 | showView(mWhatsNextView, true ); | 297 | showView(mWhatsNextView, true ); |
250 | //mWhatsNextView->updateView(); | 298 | //mWhatsNextView->updateView(); |
251 | 299 | ||
252 | } | 300 | } |
253 | 301 | ||
254 | void KOViewManager::showListView() | 302 | void KOViewManager::showListView() |
255 | { | 303 | { |
256 | if (!mListView) { | 304 | if (!mListView) { |
257 | mListView = new KOListView(mMainView->calendar(), mMainView->viewStack(), "KOViewManager::ListView"); | 305 | mListView = new KOListView(mMainView->calendar(), mMainView->viewStack(), "KOViewManager::ListView"); |
258 | addView(mListView); | 306 | addView(mListView); |
259 | 307 | ||
260 | connect(mListView, SIGNAL(showIncidenceSignal(Incidence *)), | 308 | connect(mListView, SIGNAL(showIncidenceSignal(Incidence *)), |
261 | mMainView, SLOT(showIncidence(Incidence *))); | 309 | mMainView, SLOT(showIncidence(Incidence *))); |
262 | connect(mListView, SIGNAL(editIncidenceSignal(Incidence *)), | 310 | connect(mListView, SIGNAL(editIncidenceSignal(Incidence *)), |
263 | mMainView, SLOT(editIncidence(Incidence *))); | 311 | mMainView, SLOT(editIncidence(Incidence *))); |
264 | connect(mListView, SIGNAL(deleteIncidenceSignal(Incidence *)), | 312 | connect(mListView, SIGNAL(deleteIncidenceSignal(Incidence *)), |
265 | mMainView, SLOT(deleteIncidence(Incidence *))); | 313 | mMainView, SLOT(deleteIncidence(Incidence *))); |
266 | connect( mListView, SIGNAL( incidenceSelected( Incidence * ) ), | 314 | connect( mListView, SIGNAL( incidenceSelected( Incidence * ) ), |
267 | mMainView, SLOT( processMainViewSelection( Incidence * ) ) ); | 315 | mMainView, SLOT( processMainViewSelection( Incidence * ) ) ); |
268 | connect( mListView, SIGNAL( signalNewEvent() ), | 316 | connect( mListView, SIGNAL( signalNewEvent() ), |
269 | mMainView, SLOT( newEvent() ) ); | 317 | mMainView, SLOT( newEvent() ) ); |
270 | connect(mMainView, SIGNAL(configChanged()), mListView, SLOT(updateConfig())); | 318 | connect(mMainView, SIGNAL(configChanged()), mListView, SLOT(updateConfig())); |
271 | connect( mListView, SIGNAL( cloneIncidenceSignal( Incidence * ) ), | 319 | connect( mListView, SIGNAL( cloneIncidenceSignal( Incidence * ) ), |
272 | mMainView, SLOT ( cloneIncidence( Incidence * ) ) ); | 320 | mMainView, SLOT ( cloneIncidence( Incidence * ) ) ); |
273 | connect( mListView, SIGNAL( cancelIncidenceSignal( Incidence * ) ), | 321 | connect( mListView, SIGNAL( cancelIncidenceSignal( Incidence * ) ), |
274 | mMainView, SLOT ( cancelIncidence( Incidence * ) ) ); | 322 | mMainView, SLOT ( cancelIncidence( Incidence * ) ) ); |
275 | connect( mListView, SIGNAL( moveIncidenceSignal( Incidence * ) ), | 323 | connect( mListView, SIGNAL( moveIncidenceSignal( Incidence * ) ), |
276 | mMainView, SLOT ( moveIncidence( Incidence * ) ) ); | 324 | mMainView, SLOT ( moveIncidence( Incidence * ) ) ); |
277 | connect( mListView, SIGNAL( beamIncidenceSignal( Incidence * ) ), | 325 | connect( mListView, SIGNAL( beamIncidenceSignal( Incidence * ) ), |
278 | mMainView, SLOT ( beamIncidence( Incidence * ) ) ); | 326 | mMainView, SLOT ( beamIncidence( Incidence * ) ) ); |
279 | } | 327 | } |
280 | // bool temp = mFlagShowNextxDays; | 328 | // bool temp = mFlagShowNextxDays; |
281 | //globalFlagBlockPainting = true; | 329 | //globalFlagBlockPainting = true; |
282 | globalFlagBlockAgenda = 1; | 330 | globalFlagBlockAgenda = 1; |
283 | if ( KOPrefs::instance()->mListViewMonthTimespan ) { | 331 | if ( KOPrefs::instance()->mListViewMonthTimespan ) { |
284 | mMainView->setBlockShowDates( true ); | 332 | mMainView->setBlockShowDates( true ); |
285 | mMainView->dateNavigator()->selectMonth(); | 333 | mMainView->dateNavigator()->selectMonth(); |
286 | mMainView->setBlockShowDates( false ); | 334 | mMainView->setBlockShowDates( false ); |
287 | } | 335 | } |
288 | showView(mListView, KOPrefs::instance()->mFullViewTodo); | 336 | showView(mListView, KOPrefs::instance()->mFullViewTodo); |
289 | //mFlagShowNextxDays = temp; | 337 | //mFlagShowNextxDays = temp; |
290 | } | 338 | } |
291 | 339 | ||
292 | void KOViewManager::showAgendaView( bool fullScreen ) | 340 | void KOViewManager::showAgendaView( bool fullScreen ) |
293 | { | 341 | { |
294 | 342 | ||
295 | mMainView->dialogManager()->hideSearchDialog(); | 343 | mMainView->dialogManager()->hideSearchDialog(); |
296 | // qDebug("KOViewManager::showAgendaView "); | 344 | // qDebug("KOViewManager::showAgendaView "); |
297 | bool full; | 345 | bool full; |
298 | full = fullScreen; | 346 | full = fullScreen; |
299 | if (!mAgendaView) { | 347 | if (!mAgendaView) { |
300 | full = false; | 348 | full = false; |
301 | mAgendaView = new KOAgendaView(mMainView->calendar(), mMainView->viewStack(), "KOViewManager::AgendaView"); | 349 | mAgendaView = new KOAgendaView(mMainView->calendar(), mMainView->viewStack(), "KOViewManager::AgendaView"); |
302 | addView(mAgendaView); | 350 | addView(mAgendaView); |
303 | #ifndef DESKTOP_VERSION | 351 | #ifndef DESKTOP_VERSION |
304 | QPEApplication::setStylusOperation( mAgendaView, QPEApplication::RightOnHold ); | 352 | QPEApplication::setStylusOperation( mAgendaView, QPEApplication::RightOnHold ); |
305 | #endif | 353 | #endif |
306 | connect( mAgendaView, SIGNAL( incidenceChanged(Incidence *, int )), | 354 | connect( mAgendaView, SIGNAL( incidenceChanged(Incidence *, int )), |
307 | mMainView, SLOT( changeIncidenceDisplay( Incidence *, int ) )); | 355 | mMainView, SLOT( changeIncidenceDisplay( Incidence *, int ) )); |
308 | 356 | ||
309 | // SIGNALS/SLOTS FOR DAY/WEEK VIEW | 357 | // SIGNALS/SLOTS FOR DAY/WEEK VIEW |
310 | 358 | ||
311 | 359 | connect(mAgendaView,SIGNAL(showDateView( int, QDate )),SLOT(showDateView( int, QDate ))); | |
312 | 360 | ||
313 | connect(mAgendaView,SIGNAL(newTodoSignal(QDateTime,bool)), | 361 | connect(mAgendaView,SIGNAL(newTodoSignal(QDateTime,bool)), |
314 | mMainView, SLOT(newTodoDateTime(QDateTime,bool))); | 362 | mMainView, SLOT(newTodoDateTime(QDateTime,bool))); |
315 | connect(mAgendaView,SIGNAL(newEventSignal(QDateTime)), | 363 | connect(mAgendaView,SIGNAL(newEventSignal(QDateTime)), |
316 | mMainView, SLOT(newEvent(QDateTime))); | 364 | mMainView, SLOT(newEvent(QDateTime))); |
317 | connect(mAgendaView,SIGNAL(newEventSignal(QDateTime,QDateTime)), | 365 | connect(mAgendaView,SIGNAL(newEventSignal(QDateTime,QDateTime)), |
318 | mMainView, SLOT(newEvent(QDateTime,QDateTime))); | 366 | mMainView, SLOT(newEvent(QDateTime,QDateTime))); |
319 | connect(mAgendaView,SIGNAL(newEventSignal(QDate)), | 367 | connect(mAgendaView,SIGNAL(newEventSignal(QDate)), |
320 | mMainView, SLOT(newEvent(QDate))); | 368 | mMainView, SLOT(newEvent(QDate))); |
321 | 369 | ||
322 | connect(mAgendaView, SIGNAL(editIncidenceSignal(Incidence *)), | 370 | connect(mAgendaView, SIGNAL(editIncidenceSignal(Incidence *)), |
323 | mMainView, SLOT(editIncidence(Incidence *))); | 371 | mMainView, SLOT(editIncidence(Incidence *))); |
324 | connect(mAgendaView, SIGNAL(showIncidenceSignal(Incidence *)), | 372 | connect(mAgendaView, SIGNAL(showIncidenceSignal(Incidence *)), |
325 | mMainView, SLOT(showIncidence(Incidence *))); | 373 | mMainView, SLOT(showIncidence(Incidence *))); |
326 | connect(mAgendaView, SIGNAL(deleteIncidenceSignal(Incidence *)), | 374 | connect(mAgendaView, SIGNAL(deleteIncidenceSignal(Incidence *)), |
327 | mMainView, SLOT(deleteIncidence(Incidence *))); | 375 | mMainView, SLOT(deleteIncidence(Incidence *))); |
328 | 376 | ||
329 | connect( mAgendaView, SIGNAL( incidenceSelected( Incidence * ) ), | 377 | connect( mAgendaView, SIGNAL( incidenceSelected( Incidence * ) ), |
330 | mMainView, SLOT( processMainViewSelection( Incidence * ) ) ); | 378 | mMainView, SLOT( processMainViewSelection( Incidence * ) ) ); |
331 | 379 | ||
332 | connect(mAgendaView, SIGNAL( toggleExpand() ), | 380 | connect(mAgendaView, SIGNAL( toggleExpand() ), |
333 | mMainView, SLOT( toggleExpand() ) ); | 381 | mMainView, SLOT( toggleExpand() ) ); |
334 | 382 | ||
335 | connect(mMainView, SIGNAL( calendarViewExpanded( bool ) ), | 383 | connect(mMainView, SIGNAL( calendarViewExpanded( bool ) ), |
336 | mAgendaView, SLOT( setExpandedButton( bool ) ) ); | 384 | mAgendaView, SLOT( setExpandedButton( bool ) ) ); |
337 | connect( mAgendaView, SIGNAL( cloneIncidenceSignal(Incidence *) ), | 385 | connect( mAgendaView, SIGNAL( cloneIncidenceSignal(Incidence *) ), |
338 | mMainView, SLOT(cloneIncidence(Incidence *) ) ) ; | 386 | mMainView, SLOT(cloneIncidence(Incidence *) ) ) ; |
339 | connect( mAgendaView, SIGNAL( cancelIncidenceSignal(Incidence *) ), | 387 | connect( mAgendaView, SIGNAL( cancelIncidenceSignal(Incidence *) ), |
340 | mMainView, SLOT(cancelIncidence(Incidence *) ) ) ; | 388 | mMainView, SLOT(cancelIncidence(Incidence *) ) ) ; |
341 | connect(mMainView, SIGNAL(configChanged()), mAgendaView, SLOT(updateConfig())); | 389 | connect(mMainView, SIGNAL(configChanged()), mAgendaView, SLOT(updateConfig())); |
342 | connect( mMainView, SIGNAL( todoModified( Todo *, int )), mAgendaView, | 390 | connect( mMainView, SIGNAL( todoModified( Todo *, int )), mAgendaView, |
343 | SLOT( updateTodo( Todo *, int ) ) ); | 391 | SLOT( updateTodo( Todo *, int ) ) ); |
344 | connect( mAgendaView,SIGNAL( todoMoved( Todo *, int )), | 392 | connect( mAgendaView,SIGNAL( todoMoved( Todo *, int )), |
345 | mMainView, SIGNAL( todoModified( Todo *, int ))); | 393 | mMainView, SIGNAL( todoModified( Todo *, int ))); |
346 | connect( mAgendaView, SIGNAL( moveIncidenceSignal( Incidence * ) ), | 394 | connect( mAgendaView, SIGNAL( moveIncidenceSignal( Incidence * ) ), |
347 | mMainView, SLOT ( moveIncidence( Incidence * ) ) ); | 395 | mMainView, SLOT ( moveIncidence( Incidence * ) ) ); |
348 | connect( mAgendaView, SIGNAL( beamIncidenceSignal( Incidence * ) ), | 396 | connect( mAgendaView, SIGNAL( beamIncidenceSignal( Incidence * ) ), |
349 | mMainView, SLOT ( beamIncidence( Incidence * ) ) ); | 397 | mMainView, SLOT ( beamIncidence( Incidence * ) ) ); |
350 | mAgendaView->readSettings(); | 398 | mAgendaView->readSettings(); |
351 | mAgendaView->updateConfig(); | 399 | mAgendaView->updateConfig(); |
352 | } | 400 | } |
353 | 401 | ||
354 | showView( mAgendaView, full); | 402 | showView( mAgendaView, full); |
355 | 403 | ||
356 | } | 404 | } |
357 | 405 | ||
358 | void KOViewManager::showDayView() | 406 | void KOViewManager::showDayView() |
359 | { | 407 | { |
360 | mFlagShowNextxDays = false; | 408 | mFlagShowNextxDays = false; |
361 | globalFlagBlockLabel = 1; | 409 | globalFlagBlockLabel = 1; |
362 | globalFlagBlockAgenda = 1; | 410 | globalFlagBlockAgenda = 1; |
363 | if ( mCurrentAgendaView != 1 ) | 411 | if ( mCurrentAgendaView != 1 ) |
364 | mCurrentAgendaView = -1; | 412 | mCurrentAgendaView = -1; |
365 | showAgendaView(); | 413 | showAgendaView(); |
366 | qApp->processEvents(); | 414 | qApp->processEvents(); |
367 | globalFlagBlockAgenda = 2; | 415 | globalFlagBlockAgenda = 2; |
368 | globalFlagBlockLabel = 0; | 416 | globalFlagBlockLabel = 0; |
369 | mMainView->dateNavigator()->selectDates( 1 ); | 417 | mMainView->dateNavigator()->selectDates( 1 ); |
370 | mCurrentAgendaView = 1 ; | 418 | mCurrentAgendaView = 1 ; |
371 | 419 | ||
372 | } | 420 | } |
373 | 421 | ||
374 | void KOViewManager::showWorkWeekView() | 422 | void KOViewManager::showWorkWeekView() |
375 | { | 423 | { |
376 | mFlagShowNextxDays = false; | 424 | mFlagShowNextxDays = false; |
377 | globalFlagBlockAgenda = 1; | 425 | globalFlagBlockAgenda = 1; |
378 | globalFlagBlockLabel = 1; | 426 | globalFlagBlockLabel = 1; |
379 | if ( mCurrentAgendaView != 5 ) | 427 | if ( mCurrentAgendaView != 5 ) |
380 | mCurrentAgendaView = -1; | 428 | mCurrentAgendaView = -1; |
381 | showAgendaView(); | 429 | showAgendaView(); |
382 | qApp->processEvents(); | 430 | qApp->processEvents(); |
383 | globalFlagBlockAgenda = 2; | 431 | globalFlagBlockAgenda = 2; |
384 | globalFlagBlockLabel = 0; | 432 | globalFlagBlockLabel = 0; |
385 | mMainView->dateNavigator()->selectWorkWeek(); | 433 | mMainView->dateNavigator()->selectWorkWeek(); |
386 | mCurrentAgendaView = 5 ; | 434 | mCurrentAgendaView = 5 ; |
387 | 435 | ||
388 | } | 436 | } |
389 | 437 | ||
390 | void KOViewManager::showWeekView() | 438 | void KOViewManager::showWeekView() |
391 | { | 439 | { |
392 | /* | 440 | /* |
393 | globalFlagBlockAgenda = 2; | 441 | globalFlagBlockAgenda = 2; |
394 | qDebug("4globalFlagBlockAgenda = 2; "); | 442 | qDebug("4globalFlagBlockAgenda = 2; "); |
395 | //globalFlagBlockPainting = true; | 443 | //globalFlagBlockPainting = true; |
396 | mMainView->dateNavigator()->selectWeek(); | 444 | mMainView->dateNavigator()->selectWeek(); |
397 | showAgendaView(); | 445 | showAgendaView(); |
398 | */ | 446 | */ |
399 | 447 | ||
400 | 448 | ||
401 | mFlagShowNextxDays = false; | 449 | mFlagShowNextxDays = false; |
402 | globalFlagBlockAgenda = 1; | 450 | globalFlagBlockAgenda = 1; |
403 | globalFlagBlockLabel = 1; | 451 | globalFlagBlockLabel = 1; |
404 | if ( mCurrentAgendaView != 7 ) | 452 | if ( mCurrentAgendaView != 7 ) |
405 | mCurrentAgendaView = -1; | 453 | mCurrentAgendaView = -1; |
406 | showAgendaView(); | 454 | showAgendaView(); |
407 | qApp->processEvents(); | 455 | qApp->processEvents(); |
408 | globalFlagBlockAgenda = 2; | 456 | globalFlagBlockAgenda = 2; |
409 | globalFlagBlockLabel = 0; | 457 | globalFlagBlockLabel = 0; |
410 | mMainView->dateNavigator()->selectWeek(); | 458 | mMainView->dateNavigator()->selectWeek(); |
411 | mCurrentAgendaView = 7 ; | 459 | mCurrentAgendaView = 7 ; |
412 | } | 460 | } |
413 | 461 | ||
414 | void KOViewManager::showNextXView() | 462 | void KOViewManager::showNextXView() |
415 | { | 463 | { |
416 | 464 | ||
417 | globalFlagBlockAgenda = 1; | 465 | globalFlagBlockAgenda = 1; |
418 | if ( mCurrentAgendaView != 3 ) | 466 | if ( mCurrentAgendaView != 3 ) |
419 | mCurrentAgendaView = -1; | 467 | mCurrentAgendaView = -1; |
420 | showAgendaView(KOPrefs::instance()->mFullViewMonth); | 468 | showAgendaView(KOPrefs::instance()->mFullViewMonth); |
421 | globalFlagBlockAgenda = 2; | 469 | globalFlagBlockAgenda = 2; |
422 | mMainView->dateNavigator()->selectDates( QDate::currentDate(), | 470 | mMainView->dateNavigator()->selectDates( QDate::currentDate(), |
423 | KOPrefs::instance()->mNextXDays ); | 471 | KOPrefs::instance()->mNextXDays ); |
424 | mFlagShowNextxDays = true; | 472 | mFlagShowNextxDays = true; |
425 | mCurrentAgendaView = 3 ; | 473 | mCurrentAgendaView = 3 ; |
426 | } | 474 | } |
427 | bool KOViewManager::showsNextDays() | 475 | bool KOViewManager::showsNextDays() |
428 | { | 476 | { |
429 | return mFlagShowNextxDays; | 477 | return mFlagShowNextxDays; |
430 | } | 478 | } |
431 | void KOViewManager::showMonthView() | 479 | void KOViewManager::showMonthView() |
432 | { | 480 | { |
433 | if (!mMonthView) { | 481 | if (!mMonthView) { |
434 | mMonthView = new KOMonthView(mMainView->calendar(), mMainView->viewStack(), "KOViewManager::MonthView"); | 482 | mMonthView = new KOMonthView(mMainView->calendar(), mMainView->viewStack(), "KOViewManager::MonthView"); |
435 | 483 | ||
436 | addView(mMonthView); | 484 | addView(mMonthView); |
437 | // mMonthView->show(); | 485 | // mMonthView->show(); |
438 | // SIGNALS/SLOTS FOR MONTH VIEW | 486 | // SIGNALS/SLOTS FOR MONTH VIEW |
439 | connect(mMonthView, SIGNAL(newEventSignal(QDateTime)), | 487 | connect(mMonthView, SIGNAL(newEventSignal(QDateTime)), |
440 | mMainView, SLOT(newEvent(QDateTime))); | 488 | mMainView, SLOT(newEvent(QDateTime))); |
441 | 489 | ||
442 | connect(mMonthView, SIGNAL(showIncidenceSignal(Incidence *)), | 490 | connect(mMonthView, SIGNAL(showIncidenceSignal(Incidence *)), |
443 | mMainView, SLOT(showIncidence(Incidence *))); | 491 | mMainView, SLOT(showIncidence(Incidence *))); |
444 | connect(mMonthView, SIGNAL(editIncidenceSignal(Incidence *)), | 492 | connect(mMonthView, SIGNAL(editIncidenceSignal(Incidence *)), |
445 | mMainView, SLOT(editIncidence(Incidence *))); | 493 | mMainView, SLOT(editIncidence(Incidence *))); |
446 | connect(mMonthView, SIGNAL(deleteIncidenceSignal(Incidence *)), | 494 | connect(mMonthView, SIGNAL(deleteIncidenceSignal(Incidence *)), |
447 | mMainView, SLOT(deleteIncidence(Incidence *))); | 495 | mMainView, SLOT(deleteIncidence(Incidence *))); |
448 | 496 | ||
449 | connect( mMonthView, SIGNAL( incidenceSelected( Incidence * ) ), | 497 | connect( mMonthView, SIGNAL( incidenceSelected( Incidence * ) ), |
450 | mMainView, SLOT( processMainViewSelection( Incidence * ) ) ); | 498 | mMainView, SLOT( processMainViewSelection( Incidence * ) ) ); |
451 | connect( mMonthView, SIGNAL( cloneIncidenceSignal( Incidence * ) ), | 499 | connect( mMonthView, SIGNAL( cloneIncidenceSignal( Incidence * ) ), |
452 | mMainView, SLOT ( cloneIncidence( Incidence * ) ) ); | 500 | mMainView, SLOT ( cloneIncidence( Incidence * ) ) ); |
453 | connect( mMonthView, SIGNAL( cancelIncidenceSignal( Incidence * ) ), | 501 | connect( mMonthView, SIGNAL( cancelIncidenceSignal( Incidence * ) ), |
454 | mMainView, SLOT ( cancelIncidence( Incidence * ) ) ); | 502 | mMainView, SLOT ( cancelIncidence( Incidence * ) ) ); |
455 | 503 | ||
456 | connect( mMonthView, SIGNAL( moveIncidenceSignal( Incidence * ) ), | 504 | connect( mMonthView, SIGNAL( moveIncidenceSignal( Incidence * ) ), |
457 | mMainView, SLOT ( moveIncidence( Incidence * ) ) ); | 505 | mMainView, SLOT ( moveIncidence( Incidence * ) ) ); |
458 | connect( mMonthView, SIGNAL( beamIncidenceSignal( Incidence * ) ), | 506 | connect( mMonthView, SIGNAL( beamIncidenceSignal( Incidence * ) ), |
459 | mMainView, SLOT ( beamIncidence( Incidence * ) ) ); | 507 | mMainView, SLOT ( beamIncidence( Incidence * ) ) ); |
460 | connect( mMonthView, SIGNAL( selectWeekNum( int ) ), | 508 | connect( mMonthView, SIGNAL( selectWeekNum( int ) ), |
461 | mMainView, SLOT ( selectWeekNum( int ) ) ); | 509 | mMainView, SLOT ( selectWeekNum( int ) ) ); |
462 | connect( mMonthView, SIGNAL( showDaySignal( QDate ) ), | 510 | connect( mMonthView, SIGNAL( showDaySignal( QDate ) ), |
463 | mMainView, SLOT ( showDay( QDate ) ) ); | 511 | mMainView, SLOT ( showDay( QDate ) ) ); |
464 | connect(mMainView, SIGNAL(configChanged()), mMonthView, SLOT(updateConfig())); | 512 | connect(mMainView, SIGNAL(configChanged()), mMonthView, SLOT(updateConfig())); |
465 | connect( mMonthView, SIGNAL(nextMonth() ), | 513 | connect( mMonthView, SIGNAL(nextMonth() ), |
466 | mMainView->navigatorBar(), SIGNAL(goNextMonth() ) ); | 514 | mMainView->navigatorBar(), SIGNAL(goNextMonth() ) ); |
467 | connect( mMonthView, SIGNAL(prevMonth() ), | 515 | connect( mMonthView, SIGNAL(prevMonth() ), |
468 | mMainView->navigatorBar(), SIGNAL(goPrevMonth() ) ); | 516 | mMainView->navigatorBar(), SIGNAL(goPrevMonth() ) ); |
469 | mMonthView->updateConfig(); | 517 | mMonthView->updateConfig(); |
470 | } | 518 | } |
471 | 519 | ||
472 | globalFlagBlockAgenda = 1; | 520 | globalFlagBlockAgenda = 1; |
473 | //mFlagShowNextxDays = false; | 521 | //mFlagShowNextxDays = false; |
474 | // if(mMonthView == mCurrentView) return; | 522 | // if(mMonthView == mCurrentView) return; |
475 | mMainView->dateNavigator()->selectMonth(); | 523 | mMainView->dateNavigator()->selectMonth(); |
476 | // DateList tmpList = mMainView->dateNavigator()->selectedDates( ); | 524 | // DateList tmpList = mMainView->dateNavigator()->selectedDates( ); |
477 | //mMonthView->showDates(tmpList.first(), tmpList.last()); | 525 | //mMonthView->showDates(tmpList.first(), tmpList.last()); |
478 | 526 | ||
479 | showView(mMonthView, true ); | 527 | showView(mMonthView, true ); |
480 | 528 | ||
481 | } | 529 | } |
482 | 530 | ||
483 | void KOViewManager::showTodoView() | 531 | void KOViewManager::showTodoView() |
484 | { | 532 | { |
485 | //mFlagShowNextxDays = false; | 533 | //mFlagShowNextxDays = false; |
486 | if ( !mTodoView ) { | 534 | if ( !mTodoView ) { |
487 | mTodoView = new KOTodoView( mMainView->calendar(), mMainView->viewStack(), | 535 | mTodoView = new KOTodoView( mMainView->calendar(), mMainView->viewStack(), |
488 | "KOViewManager::TodoView" ); | 536 | "KOViewManager::TodoView" ); |
489 | 537 | ||
490 | addView( mTodoView ); | 538 | addView( mTodoView ); |
491 | // QPEApplication::setStylusOperation( mTodoView, QPEApplication::RightOnHold ); | 539 | // QPEApplication::setStylusOperation( mTodoView, QPEApplication::RightOnHold ); |
492 | 540 | ||
493 | // SIGNALS/SLOTS FOR TODO VIEW | 541 | // SIGNALS/SLOTS FOR TODO VIEW |
494 | connect( mTodoView, SIGNAL( newTodoSignal() ), | 542 | connect( mTodoView, SIGNAL( newTodoSignal() ), |
495 | mMainView, SLOT( newTodo() ) ); | 543 | mMainView, SLOT( newTodo() ) ); |
496 | connect( mTodoView, SIGNAL( newSubTodoSignal( Todo * ) ), | 544 | connect( mTodoView, SIGNAL( newSubTodoSignal( Todo * ) ), |
497 | mMainView, SLOT( newSubTodo( Todo *) ) ); | 545 | mMainView, SLOT( newSubTodo( Todo *) ) ); |
498 | connect( mTodoView, SIGNAL( showTodoSignal( Todo *) ), | 546 | connect( mTodoView, SIGNAL( showTodoSignal( Todo *) ), |
499 | mMainView, SLOT( showTodo( Todo * ) ) ); | 547 | mMainView, SLOT( showTodo( Todo * ) ) ); |
500 | connect( mTodoView, SIGNAL( editTodoSignal( Todo * ) ), | 548 | connect( mTodoView, SIGNAL( editTodoSignal( Todo * ) ), |
501 | mMainView, SLOT( editTodo( Todo * ) ) ); | 549 | mMainView, SLOT( editTodo( Todo * ) ) ); |
502 | connect( mTodoView, SIGNAL( deleteTodoSignal( Todo * ) ), | 550 | connect( mTodoView, SIGNAL( deleteTodoSignal( Todo * ) ), |
503 | mMainView, SLOT( deleteTodo( Todo * ) ) ); | 551 | mMainView, SLOT( deleteTodo( Todo * ) ) ); |
504 | connect( mTodoView, SIGNAL( purgeCompletedSignal() ), | 552 | connect( mTodoView, SIGNAL( purgeCompletedSignal() ), |
505 | mMainView, SLOT( purgeCompleted() ) ); | 553 | mMainView, SLOT( purgeCompleted() ) ); |
506 | 554 | ||
507 | connect( mTodoView, SIGNAL( incidenceSelected( Incidence * ) ), | 555 | connect( mTodoView, SIGNAL( incidenceSelected( Incidence * ) ), |
508 | mMainView, SLOT( processMainViewSelection( Incidence * ) ) ); | 556 | mMainView, SLOT( processMainViewSelection( Incidence * ) ) ); |
509 | 557 | ||
510 | connect( mMainView, SIGNAL( configChanged() ), mTodoView, | 558 | connect( mMainView, SIGNAL( configChanged() ), mTodoView, |
511 | SLOT( updateConfig() ) ); | 559 | SLOT( updateConfig() ) ); |
512 | connect( mMainView, SIGNAL( todoModified( Todo *, int )), mTodoView, | 560 | connect( mMainView, SIGNAL( todoModified( Todo *, int )), mTodoView, |
513 | SLOT( updateTodo( Todo *, int ) ) ); | 561 | SLOT( updateTodo( Todo *, int ) ) ); |
514 | connect( mTodoView, SIGNAL( todoModifiedSignal( Todo *, int ) ), | 562 | connect( mTodoView, SIGNAL( todoModifiedSignal( Todo *, int ) ), |
515 | mMainView, SIGNAL ( todoModified( Todo *, int ) ) ); | 563 | mMainView, SIGNAL ( todoModified( Todo *, int ) ) ); |
516 | connect( mTodoView, SIGNAL( cloneTodoSignal( Incidence * ) ), | 564 | connect( mTodoView, SIGNAL( cloneTodoSignal( Incidence * ) ), |
517 | mMainView, SLOT ( cloneIncidence( Incidence * ) ) ); | 565 | mMainView, SLOT ( cloneIncidence( Incidence * ) ) ); |
518 | connect( mTodoView, SIGNAL( cancelTodoSignal( Incidence * ) ), | 566 | connect( mTodoView, SIGNAL( cancelTodoSignal( Incidence * ) ), |
519 | mMainView, SLOT ( cancelIncidence( Incidence * ) ) ); | 567 | mMainView, SLOT ( cancelIncidence( Incidence * ) ) ); |
520 | connect( mTodoView, SIGNAL( unparentTodoSignal( Todo * ) ), | 568 | connect( mTodoView, SIGNAL( unparentTodoSignal( Todo * ) ), |
521 | mMainView, SLOT ( todo_unsub( Todo * ) ) ); | 569 | mMainView, SLOT ( todo_unsub( Todo * ) ) ); |
522 | connect( mTodoView, SIGNAL( reparentTodoSignal( Todo *,Todo * ) ), | 570 | connect( mTodoView, SIGNAL( reparentTodoSignal( Todo *,Todo * ) ), |
523 | mMainView, SLOT ( todo_resub( Todo *, Todo *) ) ); | 571 | mMainView, SLOT ( todo_resub( Todo *, Todo *) ) ); |
524 | connect( mTodoView, SIGNAL( moveTodoSignal( Incidence * ) ), | 572 | connect( mTodoView, SIGNAL( moveTodoSignal( Incidence * ) ), |
525 | mMainView, SLOT ( moveIncidence( Incidence * ) ) ); | 573 | mMainView, SLOT ( moveIncidence( Incidence * ) ) ); |
526 | connect( mTodoView, SIGNAL( beamTodoSignal( Incidence * ) ), | 574 | connect( mTodoView, SIGNAL( beamTodoSignal( Incidence * ) ), |
527 | mMainView, SLOT ( beamIncidence( Incidence * ) ) ); | 575 | mMainView, SLOT ( beamIncidence( Incidence * ) ) ); |
528 | KConfig *config = KOGlobals::config(); | 576 | KConfig *config = KOGlobals::config(); |
529 | mTodoView->restoreLayout(config,"Todo View"); | 577 | mTodoView->restoreLayout(config,"Todo View"); |
530 | mTodoView->setNavigator( mMainView->dateNavigator() ); | 578 | mTodoView->setNavigator( mMainView->dateNavigator() ); |
531 | } | 579 | } |
532 | 580 | ||
533 | globalFlagBlockAgenda = 1; | 581 | globalFlagBlockAgenda = 1; |
534 | showView( mTodoView, true ); | 582 | showView( mTodoView, true ); |
535 | 583 | ||
536 | } | 584 | } |
537 | 585 | ||
538 | void KOViewManager::showJournalView() | 586 | void KOViewManager::showJournalView() |
539 | { | 587 | { |
540 | //mFlagShowNextxDays = false; | 588 | //mFlagShowNextxDays = false; |
541 | if (!mJournalView) { | 589 | if (!mJournalView) { |
542 | mJournalView = new KOJournalView(mMainView->calendar(),mMainView->viewStack(), | 590 | mJournalView = new KOJournalView(mMainView->calendar(),mMainView->viewStack(), |
543 | "KOViewManager::JournalView"); | 591 | "KOViewManager::JournalView"); |
544 | connect( mMainView, SIGNAL( configChanged() ), mJournalView, | 592 | connect( mMainView, SIGNAL( configChanged() ), mJournalView, |
545 | SLOT( updateConfig() ) ); | 593 | SLOT( updateConfig() ) ); |
546 | connect(mJournalView, SIGNAL(deleteJournal(Journal *) ), mMainView,SLOT(deleteJournal(Journal *)) ); | 594 | connect(mJournalView, SIGNAL(deleteJournal(Journal *) ), mMainView,SLOT(deleteJournal(Journal *)) ); |
547 | addView(mJournalView); | 595 | addView(mJournalView); |
548 | } | 596 | } |
549 | 597 | ||
550 | showView(mJournalView); | 598 | showView(mJournalView); |
551 | } | 599 | } |
552 | 600 | ||
553 | void KOViewManager::showTimeSpanView() | 601 | void KOViewManager::showTimeSpanView() |
554 | { | 602 | { |
555 | //mFlagShowNextxDays = false; | 603 | //mFlagShowNextxDays = false; |
556 | if (!mTimeSpanView) { | 604 | if (!mTimeSpanView) { |
557 | mTimeSpanView = new KOTimeSpanView(mMainView->calendar(),mMainView->viewStack(), | 605 | mTimeSpanView = new KOTimeSpanView(mMainView->calendar(),mMainView->viewStack(), |
558 | "KOViewManager::TimeSpanView"); | 606 | "KOViewManager::TimeSpanView"); |
559 | addView(mTimeSpanView); | 607 | addView(mTimeSpanView); |
560 | 608 | ||
561 | mTimeSpanView->readSettings(); | 609 | mTimeSpanView->readSettings(); |
562 | } | 610 | } |
563 | 611 | ||
564 | showView(mTimeSpanView); | 612 | showView(mTimeSpanView); |
565 | } | 613 | } |
566 | 614 | ||
567 | Incidence *KOViewManager::currentSelection() | 615 | Incidence *KOViewManager::currentSelection() |
568 | { | 616 | { |
569 | if (!mCurrentView) return 0; | 617 | if (!mCurrentView) return 0; |
570 | if ( mCurrentView == mListView ) { | 618 | if ( mCurrentView == mListView ) { |
571 | if ( mListView->currentItem() ) | 619 | if ( mListView->currentItem() ) |
572 | return mListView->currentItem(); | 620 | return mListView->currentItem(); |
573 | } | 621 | } |
574 | return mCurrentView->selectedIncidences().first(); | 622 | return mCurrentView->selectedIncidences().first(); |
575 | } | 623 | } |
576 | 624 | ||
577 | QDate KOViewManager::currentSelectionDate() | 625 | QDate KOViewManager::currentSelectionDate() |
578 | { | 626 | { |
579 | QDate qd; | 627 | QDate qd; |
580 | if (mCurrentView) { | 628 | if (mCurrentView) { |
581 | DateList qvl = mCurrentView->selectedDates(); | 629 | DateList qvl = mCurrentView->selectedDates(); |
582 | if (!qvl.isEmpty()) qd = qvl.first(); | 630 | if (!qvl.isEmpty()) qd = qvl.first(); |
583 | } | 631 | } |
584 | return qd; | 632 | return qd; |
585 | } | 633 | } |
586 | 634 | ||
587 | void KOViewManager::addView(KOrg::BaseView *view) | 635 | void KOViewManager::addView(KOrg::BaseView *view) |
588 | { | 636 | { |
589 | #if QT_VERSION >= 0x030000 | 637 | #if QT_VERSION >= 0x030000 |
590 | mMainView->viewStack()->addWidget( view ); | 638 | mMainView->viewStack()->addWidget( view ); |
591 | #else | 639 | #else |
592 | mMainView->viewStack()->addWidget( view, 1 ); | 640 | mMainView->viewStack()->addWidget( view, 1 ); |
593 | #endif | 641 | #endif |
594 | } | 642 | } |
595 | 643 | ||
596 | void KOViewManager::setDocumentId( const QString &id ) | 644 | void KOViewManager::setDocumentId( const QString &id ) |
597 | { | 645 | { |
598 | if (mTodoView) mTodoView->setDocumentId( id ); | 646 | if (mTodoView) mTodoView->setDocumentId( id ); |
599 | } | 647 | } |
diff --git a/korganizer/koviewmanager.h b/korganizer/koviewmanager.h index c8c7a7a..137eb2d 100644 --- a/korganizer/koviewmanager.h +++ b/korganizer/koviewmanager.h | |||
@@ -1,117 +1,118 @@ | |||
1 | /* | 1 | /* |
2 | This file is part of KOrganizer. | 2 | This file is part of KOrganizer. |
3 | Copyright (c) 2001 | 3 | Copyright (c) 2001 |
4 | Cornelius Schumacher <schumacher@kde.org> | 4 | Cornelius Schumacher <schumacher@kde.org> |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify | 6 | This program is free software; you can redistribute it and/or modify |
7 | it under the terms of the GNU General Public License as published by | 7 | it under the terms of the GNU General Public License as published by |
8 | the Free Software Foundation; either version 2 of the License, or | 8 | the Free Software Foundation; either version 2 of the License, or |
9 | (at your option) any later version. | 9 | (at your option) any later version. |
10 | 10 | ||
11 | This program is distributed in the hope that it will be useful, | 11 | This program is distributed in the hope that it will be useful, |
12 | but WITHOUT ANY WARRANTY; without even the implied warranty of | 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the | 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the |
14 | GNU General Public License for more details. | 14 | GNU General Public License for more details. |
15 | 15 | ||
16 | You should have received a copy of the GNU General Public License | 16 | You should have received a copy of the GNU General Public License |
17 | along with this program; if not, write to the Free Software | 17 | along with this program; if not, write to the Free Software |
18 | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | 18 | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
19 | 19 | ||
20 | As a special exception, permission is given to link this program | 20 | As a special exception, permission is given to link this program |
21 | with any edition of Qt, and distribute the resulting executable, | 21 | with any edition of Qt, and distribute the resulting executable, |
22 | without including the source code for Qt in the source distribution. | 22 | without including the source code for Qt in the source distribution. |
23 | */ | 23 | */ |
24 | #ifndef KOVIEWMANAGER_H | 24 | #ifndef KOVIEWMANAGER_H |
25 | #define KOVIEWMANAGER_H | 25 | #define KOVIEWMANAGER_H |
26 | 26 | ||
27 | #include <qobject.h> | 27 | #include <qobject.h> |
28 | 28 | ||
29 | #include <korganizer/baseview.h> | 29 | #include <korganizer/baseview.h> |
30 | 30 | ||
31 | class CalendarView; | 31 | class CalendarView; |
32 | 32 | ||
33 | class KOListView; | 33 | class KOListView; |
34 | class KOAgendaView; | 34 | class KOAgendaView; |
35 | class KOMonthView; | 35 | class KOMonthView; |
36 | class KOTimeSpanView; | 36 | class KOTimeSpanView; |
37 | class KOTodoView; | 37 | class KOTodoView; |
38 | class KOWhatsNextView; | 38 | class KOWhatsNextView; |
39 | class KOJournalView; | 39 | class KOJournalView; |
40 | 40 | ||
41 | using namespace KCal; | 41 | using namespace KCal; |
42 | 42 | ||
43 | /** | 43 | /** |
44 | This class manages the views of the calendar. It owns the objects and handles | 44 | This class manages the views of the calendar. It owns the objects and handles |
45 | creation and selection. | 45 | creation and selection. |
46 | */ | 46 | */ |
47 | class KOViewManager : public QObject | 47 | class KOViewManager : public QObject |
48 | { | 48 | { |
49 | Q_OBJECT | 49 | Q_OBJECT |
50 | public: | 50 | public: |
51 | KOViewManager( CalendarView * ); | 51 | KOViewManager( CalendarView * ); |
52 | virtual ~KOViewManager(); | 52 | virtual ~KOViewManager(); |
53 | 53 | ||
54 | /** changes the view to be the currently selected view */ | 54 | /** changes the view to be the currently selected view */ |
55 | void showView(KOrg::BaseView *, bool fullScreen = false ); | 55 | void showView(KOrg::BaseView *, bool fullScreen = false ); |
56 | void updateWNview(); | 56 | void updateWNview(); |
57 | void readSettings(KConfig *config); | 57 | void readSettings(KConfig *config); |
58 | void writeSettings(KConfig *config); | 58 | void writeSettings(KConfig *config); |
59 | bool showsNextDays(); | 59 | bool showsNextDays(); |
60 | /** Read which view was shown last from config file */ | 60 | /** Read which view was shown last from config file */ |
61 | void readCurrentView(KConfig *); | 61 | void readCurrentView(KConfig *); |
62 | /** Write which view is currently shown to config file */ | 62 | /** Write which view is currently shown to config file */ |
63 | void writeCurrentView(KConfig *); | 63 | void writeCurrentView(KConfig *); |
64 | 64 | ||
65 | KOrg::BaseView *currentView(); | 65 | KOrg::BaseView *currentView(); |
66 | 66 | ||
67 | void setDocumentId( const QString & ); | 67 | void setDocumentId( const QString & ); |
68 | 68 | ||
69 | void updateView( const QDate &start, const QDate &end ); | 69 | void updateView( const QDate &start, const QDate &end ); |
70 | 70 | ||
71 | void raiseCurrentView( bool fullScreen = false ); | 71 | void raiseCurrentView( bool fullScreen = false ); |
72 | 72 | ||
73 | void addView(KOrg::BaseView *); | 73 | void addView(KOrg::BaseView *); |
74 | 74 | ||
75 | Incidence *currentSelection(); | 75 | Incidence *currentSelection(); |
76 | QDate currentSelectionDate(); | 76 | QDate currentSelectionDate(); |
77 | 77 | ||
78 | KOAgendaView *agendaView() const { return mAgendaView; } | 78 | KOAgendaView *agendaView() const { return mAgendaView; } |
79 | 79 | ||
80 | signals: | 80 | signals: |
81 | void printWNV(); | 81 | void printWNV(); |
82 | void signalFullScreen( bool ); | 82 | void signalFullScreen( bool ); |
83 | void signalAgendaView( bool ); | 83 | void signalAgendaView( bool ); |
84 | public slots: | 84 | public slots: |
85 | void showDateView( int, QDate ); | ||
85 | void updateView(); | 86 | void updateView(); |
86 | void showWhatsNextView(); | 87 | void showWhatsNextView(); |
87 | void showListView(); | 88 | void showListView(); |
88 | void showAgendaView( bool fullScreen = false ); | 89 | void showAgendaView( bool fullScreen = false ); |
89 | void showDayView(); | 90 | void showDayView(); |
90 | void showWorkWeekView(); | 91 | void showWorkWeekView(); |
91 | void showWeekView(); | 92 | void showWeekView(); |
92 | void showNextXView(); | 93 | void showNextXView(); |
93 | void showMonthView(); | 94 | void showMonthView(); |
94 | void showTodoView(); | 95 | void showTodoView(); |
95 | void showJournalView(); | 96 | void showJournalView(); |
96 | void showTimeSpanView(); | 97 | void showTimeSpanView(); |
97 | 98 | ||
98 | private: | 99 | private: |
99 | CalendarView *mMainView; | 100 | CalendarView *mMainView; |
100 | 101 | ||
101 | int mCurrentAgendaView; | 102 | int mCurrentAgendaView; |
102 | KOAgendaView *mAgendaView; | 103 | KOAgendaView *mAgendaView; |
103 | KOListView *mListView; | 104 | KOListView *mListView; |
104 | KOMonthView *mMonthView; | 105 | KOMonthView *mMonthView; |
105 | KOTodoView *mTodoView; | 106 | KOTodoView *mTodoView; |
106 | KOWhatsNextView *mWhatsNextView; | 107 | KOWhatsNextView *mWhatsNextView; |
107 | KOJournalView *mJournalView; | 108 | KOJournalView *mJournalView; |
108 | KOTimeSpanView *mTimeSpanView; | 109 | KOTimeSpanView *mTimeSpanView; |
109 | 110 | ||
110 | KOrg::BaseView *mCurrentView; // currently active event view | 111 | KOrg::BaseView *mCurrentView; // currently active event view |
111 | 112 | ||
112 | int mAgendaViewMode; | 113 | int mAgendaViewMode; |
113 | bool mFlagShowNextxDays; | 114 | bool mFlagShowNextxDays; |
114 | 115 | ||
115 | }; | 116 | }; |
116 | 117 | ||
117 | #endif | 118 | #endif |