-rw-r--r-- | korganizer/calendarview.cpp | 19 | ||||
-rw-r--r-- | korganizer/koagendaview.cpp | 4 | ||||
-rw-r--r-- | korganizer/koeditorgeneral.cpp | 69 | ||||
-rw-r--r-- | korganizer/kotodoview.cpp | 11 | ||||
-rw-r--r-- | korganizer/kotodoview.h | 1 |
5 files changed, 62 insertions, 42 deletions
diff --git a/korganizer/calendarview.cpp b/korganizer/calendarview.cpp index beb19d9..76cce26 100644 --- a/korganizer/calendarview.cpp +++ b/korganizer/calendarview.cpp | |||
@@ -525,16 +525,21 @@ void CalendarView::suspendAlarm() | |||
525 | { | 525 | { |
526 | //qDebug(" CalendarView::suspendAlarm() "); | 526 | //qDebug(" CalendarView::suspendAlarm() "); |
527 | computeAlarm(mSuspendAlarmNotification ); | 527 | computeAlarm(mSuspendAlarmNotification ); |
528 | 528 | ||
529 | } | 529 | } |
530 | 530 | ||
531 | void CalendarView::startAlarm( QString mess , QString filename) | 531 | void CalendarView::startAlarm( QString mess , QString filename) |
532 | { | 532 | { |
533 | |||
534 | topLevelWidget()->showNormal(); | ||
535 | topLevelWidget()->setActiveWindow(); | ||
536 | topLevelWidget()->raise(); | ||
537 | |||
533 | mAlarmDialog->eventNotification( mess, KOPrefs::instance()->mAlarmPlayBeeps, filename, true,KOPrefs::instance()->mAlarmBeepInterval ,KOPrefs::instance()->mAlarmSuspendCount ); | 538 | mAlarmDialog->eventNotification( mess, KOPrefs::instance()->mAlarmPlayBeeps, filename, true,KOPrefs::instance()->mAlarmBeepInterval ,KOPrefs::instance()->mAlarmSuspendCount ); |
534 | QTimer::singleShot( 3000, this, SLOT( checkNextTimerAlarm() ) ); | 539 | QTimer::singleShot( 3000, this, SLOT( checkNextTimerAlarm() ) ); |
535 | 540 | ||
536 | } | 541 | } |
537 | 542 | ||
538 | void CalendarView::checkNextTimerAlarm() | 543 | void CalendarView::checkNextTimerAlarm() |
539 | { | 544 | { |
540 | mCalendar->checkAlarmForIncidence( 0, true ); | 545 | mCalendar->checkAlarmForIncidence( 0, true ); |
@@ -4089,29 +4094,39 @@ void CalendarView::showNextAlarms() | |||
4089 | QDateTime cur = QDateTime::currentDateTime(); | 4094 | QDateTime cur = QDateTime::currentDateTime(); |
4090 | int secs = cur.secsTo( nextA ); | 4095 | int secs = cur.secsTo( nextA ); |
4091 | int min = secs /60; | 4096 | int min = secs /60; |
4092 | int hours = min /60; | 4097 | int hours = min /60; |
4093 | min = min % 60; | 4098 | min = min % 60; |
4094 | int days = hours /24; | 4099 | int days = hours /24; |
4095 | hours = hours % 24; | 4100 | hours = hours % 24; |
4096 | 4101 | ||
4097 | message = i18n("The next alarm is in:\n"); | 4102 | //message = i18n("The next alarm is in:\n"); |
4098 | if ( days > 1 ) | 4103 | if ( days > 1 ) |
4099 | message += i18n("%1 days\n").arg( days ); | 4104 | message += i18n("%1 days\n").arg( days ); |
4100 | else if ( days == 1 ) | 4105 | else if ( days == 1 ) |
4101 | message += i18n("1 day\n"); | 4106 | message += i18n("1 day\n"); |
4102 | if ( hours > 1 ) | 4107 | if ( hours > 1 ) |
4103 | message += i18n("%1 hours\n").arg( hours ); | 4108 | message += i18n("%1 hours\n").arg( hours ); |
4104 | else if ( hours == 1 ) | 4109 | else if ( hours == 1 ) |
4105 | message += i18n("1 hour\n"); | 4110 | message += i18n("1 hour\n"); |
4106 | if ( min > 1 ) | 4111 | if ( min > 1 ) |
4107 | message += i18n("%1 minutes\n").arg( min ); | 4112 | message += i18n("%1 minutes\n").arg( min ); |
4108 | else if ( min == 1 ) | 4113 | else if ( min == 1 ) |
4109 | message += i18n("1 minute\n"); | 4114 | message += i18n("1 minute\n"); |
4110 | 4115 | if ( message.isEmpty() ) | |
4116 | message = i18n("The next alarm is in\nless than one minute!"); | ||
4117 | else | ||
4118 | message = i18n("The next alarm is in:\n") + message; | ||
4111 | message += i18n("\n(%1)\n\n%2\n(%3)\n").arg( KGlobal::locale()->formatDateTime(nextA , false)).arg(sum ).arg( KGlobal::locale()->formatDateTime(nextAl , false)) ; | 4119 | message += i18n("\n(%1)\n\n%2\n(%3)\n").arg( KGlobal::locale()->formatDateTime(nextA , false)).arg(sum ).arg( KGlobal::locale()->formatDateTime(nextAl , false)) ; |
4112 | } else { | 4120 | } else { |
4113 | message = i18n("There is no next alarm."); | 4121 | message = i18n("There is no next alarm."); |
4114 | 4122 | ||
4115 | } | 4123 | } |
4124 | #ifdef DESKTOP_VERSION | ||
4125 | if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) { | ||
4126 | message += i18n("\nThe internal alarm notification is disabled!\n"); | ||
4127 | message += i18n("Enable it in the settings menu, TAB alarm."); | ||
4128 | } | ||
4129 | |||
4130 | #endif | ||
4116 | KMessageBox::information( this, message); | 4131 | KMessageBox::information( this, message); |
4117 | } | 4132 | } |
diff --git a/korganizer/koagendaview.cpp b/korganizer/koagendaview.cpp index d450a97..6d1e6d5 100644 --- a/korganizer/koagendaview.cpp +++ b/korganizer/koagendaview.cpp | |||
@@ -148,17 +148,17 @@ void TimeLabels::drawContents(QPainter *p,int cx, int cy, int cw, int ch) | |||
148 | int sHei = fmS.ascent() ; | 148 | int sHei = fmS.ascent() ; |
149 | //sHei -= (sHei/4-2); | 149 | //sHei -= (sHei/4-2); |
150 | int startW = mMiniWidth - frameWidth()-2 ; | 150 | int startW = mMiniWidth - frameWidth()-2 ; |
151 | int tw2 = fmS.width(suffix); | 151 | int tw2 = fmS.width(suffix); |
152 | timeHeight = (timeHeight-1) /2 -1; | 152 | timeHeight = (timeHeight-1) /2 -1; |
153 | //testline | 153 | //testline |
154 | //p->drawLine(0,0,0,contentsHeight()); | 154 | //p->drawLine(0,0,0,contentsHeight()); |
155 | while (y < cy + ch+mCellHeight) { | 155 | while (y < cy + ch+mCellHeight) { |
156 | p->drawLine(startW-tw2 ,y,cw+2,y); | 156 | p->drawLine(startW-tw2+1 ,y,cw+2,y); |
157 | hour.setNum(cell); | 157 | hour.setNum(cell); |
158 | // handle 24h and am/pm time formats | 158 | // handle 24h and am/pm time formats |
159 | if (KGlobal::locale()->use12Clock()) { | 159 | if (KGlobal::locale()->use12Clock()) { |
160 | if (cell == 12) suffix = "pm"; | 160 | if (cell == 12) suffix = "pm"; |
161 | if (cell == 0) hour.setNum(12); | 161 | if (cell == 0) hour.setNum(12); |
162 | if (cell > 12) hour.setNum(cell - 12); | 162 | if (cell > 12) hour.setNum(cell - 12); |
163 | } | 163 | } |
164 | 164 | ||
@@ -210,17 +210,17 @@ void TimeLabels::updateConfig() | |||
210 | sFont.setPointSize( sFont.pointSize()/2 ); | 210 | sFont.setPointSize( sFont.pointSize()/2 ); |
211 | QFontMetrics fmS( sFont ); | 211 | QFontMetrics fmS( sFont ); |
212 | mMiniWidth += fmS.width( test ) + frameWidth()*2+4 ; | 212 | mMiniWidth += fmS.width( test ) + frameWidth()*2+4 ; |
213 | // update geometry restrictions based on new settings | 213 | // update geometry restrictions based on new settings |
214 | setFixedWidth( mMiniWidth ); | 214 | setFixedWidth( mMiniWidth ); |
215 | 215 | ||
216 | // update HourSize | 216 | // update HourSize |
217 | mCellHeight = KOPrefs::instance()->mHourSize*4; | 217 | mCellHeight = KOPrefs::instance()->mHourSize*4; |
218 | resizeContents(50,mRows * mCellHeight); | 218 | resizeContents(mMiniWidth,mRows * mCellHeight+1); |
219 | } | 219 | } |
220 | 220 | ||
221 | /** update time label positions */ | 221 | /** update time label positions */ |
222 | void TimeLabels::positionChanged() | 222 | void TimeLabels::positionChanged() |
223 | { | 223 | { |
224 | int adjustment = mAgenda->contentsY(); | 224 | int adjustment = mAgenda->contentsY(); |
225 | setContentsPos(0, adjustment); | 225 | setContentsPos(0, adjustment); |
226 | } | 226 | } |
diff --git a/korganizer/koeditorgeneral.cpp b/korganizer/koeditorgeneral.cpp index b14ca43..abc80d4 100644 --- a/korganizer/koeditorgeneral.cpp +++ b/korganizer/koeditorgeneral.cpp | |||
@@ -222,69 +222,66 @@ void KOEditorGeneral::initAlarm(QWidget *parent,QBoxLayout *topLayout) | |||
222 | // mAlarmProgramButton->hide(); | 222 | // mAlarmProgramButton->hide(); |
223 | // } | 223 | // } |
224 | } | 224 | } |
225 | 225 | ||
226 | void KOEditorGeneral::pickAlarmSound() | 226 | void KOEditorGeneral::pickAlarmSound() |
227 | { | 227 | { |
228 | 228 | ||
229 | qDebug("KOEditorGeneral::pickAlarmSound() %d",mAlarmSoundButton->isOn() ); | 229 | qDebug("KOEditorGeneral::pickAlarmSound() %d",mAlarmSoundButton->isOn() ); |
230 | //QString prefix = mAlarmSound; | 230 | |
231 | if (!mAlarmSoundButton->isOn()) { | 231 | bool oldState = mAlarmSoundButton->isOn(); |
232 | |||
233 | QString fileName(KFileDialog::getOpenFileName(mAlarmSound, | ||
234 | i18n("*.wav|Wav Files"), 0)); | ||
235 | if (!fileName.isEmpty()) { | ||
236 | mAlarmSound = fileName; | ||
237 | QToolTip::remove(mAlarmSoundButton); | ||
238 | QString dispStr = i18n("Playing '%1'").arg(fileName); | ||
239 | QToolTip::add(mAlarmSoundButton, dispStr); | ||
240 | mAlarmProgramButton->setOn(false); | ||
232 | mAlarmSoundButton->setOn(true); | 241 | mAlarmSoundButton->setOn(true); |
233 | ((QWidget*)parent())->topLevelWidget()->setCaption(i18n("Audio Al.: ") + getFittingPath(mAlarmSound) ); | 242 | QToolTip::add(mAlarmProgramButton, i18n("No program set")); |
234 | } else { | 243 | } else { |
235 | QString fileName(KFileDialog::getOpenFileName(mAlarmSound, | 244 | mAlarmProgramButton->setOn(oldState); |
236 | i18n("*.wav|Wav Files"), 0)); | 245 | mAlarmSoundButton->setOn(!oldState); |
237 | if (!fileName.isEmpty()) { | 246 | |
238 | mAlarmSound = fileName; | 247 | |
239 | QToolTip::remove(mAlarmSoundButton); | ||
240 | QString dispStr = i18n("Playing '%1'").arg(fileName); | ||
241 | QToolTip::add(mAlarmSoundButton, dispStr); | ||
242 | mAlarmProgramButton->setOn(false); | ||
243 | mAlarmSoundButton->setOn(true); | ||
244 | } else { | ||
245 | mAlarmProgramButton->setOn(true); | ||
246 | mAlarmSoundButton->setOn(false); | ||
247 | |||
248 | } | ||
249 | } | 248 | } |
250 | #if 0 | 249 | |
251 | if (mAlarmProgramButton->isOn()) | 250 | if (mAlarmProgramButton->isOn()) |
252 | ((QWidget*)parent())->topLevelWidget()->setCaption(i18n("Proc.Al.: ") + getFittingPath(mAlarmProgram) ); | 251 | ((QWidget*)parent())->topLevelWidget()->setCaption(i18n("Proc.Al.: ") + getFittingPath(mAlarmProgram) ); |
253 | if ( mAlarmSoundButton->isOn()) | 252 | if ( mAlarmSoundButton->isOn()) |
254 | ((QWidget*)parent())->topLevelWidget()->setCaption(i18n("Audio Al.: ") + getFittingPath(mAlarmSound) ); | 253 | ((QWidget*)parent())->topLevelWidget()->setCaption(i18n("Audio Al.: ") + getFittingPath(mAlarmSound) ); |
255 | #endif | 254 | |
256 | } | 255 | } |
257 | 256 | ||
258 | void KOEditorGeneral::pickAlarmProgram() | 257 | void KOEditorGeneral::pickAlarmProgram() |
259 | { | 258 | { |
260 | if (!mAlarmProgramButton->isOn()) { | 259 | bool oldState = mAlarmProgramButton->isOn(); |
260 | |||
261 | QString fileName(KFileDialog::getOpenFileName(mAlarmProgram,i18n("Procedure Alarm: ") , 0)); | ||
262 | if (!fileName.isEmpty()) { | ||
263 | mAlarmProgram = fileName; | ||
264 | QToolTip::remove(mAlarmProgramButton); | ||
265 | QString dispStr = i18n("Running '%1'").arg(fileName); | ||
266 | QToolTip::add(mAlarmProgramButton, dispStr); | ||
267 | mAlarmSoundButton->setOn(false); | ||
261 | mAlarmProgramButton->setOn(true); | 268 | mAlarmProgramButton->setOn(true); |
262 | ((QWidget*)parent())->topLevelWidget()->setCaption(i18n("Proc.Al.: ") + getFittingPath(mAlarmProgram) ); | 269 | QToolTip::add(mAlarmSoundButton, i18n("No sound set")); |
263 | } else { | 270 | } else { |
264 | QString fileName(KFileDialog::getOpenFileName(mAlarmProgram,i18n("Procedure Alarm: ") , 0)); | 271 | mAlarmProgramButton->setOn(!oldState); |
265 | if (!fileName.isEmpty()) { | 272 | mAlarmSoundButton->setOn(oldState); |
266 | mAlarmProgram = fileName; | ||
267 | QToolTip::remove(mAlarmProgramButton); | ||
268 | QString dispStr = i18n("Running '%1'").arg(fileName); | ||
269 | QToolTip::add(mAlarmProgramButton, dispStr); | ||
270 | mAlarmSoundButton->setOn(false); | ||
271 | mAlarmProgramButton->setOn(true); | ||
272 | } else { | ||
273 | mAlarmProgramButton->setOn(false); | ||
274 | mAlarmSoundButton->setOn(true); | ||
275 | } | ||
276 | } | 273 | } |
277 | #if 0 | 274 | |
278 | if (mAlarmProgramButton->isOn()) | 275 | if (mAlarmProgramButton->isOn()) |
279 | ((QWidget*)parent())->topLevelWidget()->setCaption(i18n("Proc.Al.: ") + getFittingPath(mAlarmProgram) ); | 276 | ((QWidget*)parent())->topLevelWidget()->setCaption(i18n("Proc.Al.: ") + getFittingPath(mAlarmProgram) ); |
280 | if ( mAlarmSoundButton->isOn()) | 277 | if ( mAlarmSoundButton->isOn()) |
281 | ((QWidget*)parent())->topLevelWidget()->setCaption(i18n("Audio Al.: ") + getFittingPath(mAlarmSound) ); | 278 | ((QWidget*)parent())->topLevelWidget()->setCaption(i18n("Audio Al.: ") + getFittingPath(mAlarmSound) ); |
282 | #endif | 279 | |
283 | } | 280 | } |
284 | 281 | ||
285 | 282 | ||
286 | QString KOEditorGeneral::getFittingPath( const QString s ) | 283 | QString KOEditorGeneral::getFittingPath( const QString s ) |
287 | { | 284 | { |
288 | int maxlen = 50; | 285 | int maxlen = 50; |
289 | if ( QApplication::desktop()->width() < 640 ) { | 286 | if ( QApplication::desktop()->width() < 640 ) { |
290 | if ( QApplication::desktop()->width() < 320 ) | 287 | if ( QApplication::desktop()->width() < 320 ) |
diff --git a/korganizer/kotodoview.cpp b/korganizer/kotodoview.cpp index 01cf0ff..395325c 100644 --- a/korganizer/kotodoview.cpp +++ b/korganizer/kotodoview.cpp | |||
@@ -199,16 +199,20 @@ void KOTodoListView::contentsDropEvent(QDropEvent *e) | |||
199 | } | 199 | } |
200 | else { | 200 | else { |
201 | qDebug("KOTodoListView::contentsDropEvent(): Todo from drop not decodable "); | 201 | qDebug("KOTodoListView::contentsDropEvent(): Todo from drop not decodable "); |
202 | e->ignore(); | 202 | e->ignore(); |
203 | } | 203 | } |
204 | } | 204 | } |
205 | #endif | 205 | #endif |
206 | } | 206 | } |
207 | void KOTodoListView::wheelEvent (QWheelEvent *e) | ||
208 | { | ||
209 | QListView::wheelEvent (e); | ||
210 | } | ||
207 | 211 | ||
208 | void KOTodoListView::contentsMousePressEvent(QMouseEvent* e) | 212 | void KOTodoListView::contentsMousePressEvent(QMouseEvent* e) |
209 | { | 213 | { |
210 | 214 | ||
211 | QPoint p(contentsToViewport(e->pos())); | 215 | QPoint p(contentsToViewport(e->pos())); |
212 | QListViewItem *i = itemAt(p); | 216 | QListViewItem *i = itemAt(p); |
213 | bool rootClicked = true; | 217 | bool rootClicked = true; |
214 | if (i) { | 218 | if (i) { |
@@ -222,19 +226,21 @@ void KOTodoListView::contentsMousePressEvent(QMouseEvent* e) | |||
222 | X < header()->sectionPos(0)) { | 226 | X < header()->sectionPos(0)) { |
223 | rootClicked = false; | 227 | rootClicked = false; |
224 | } | 228 | } |
225 | } else { | 229 | } else { |
226 | rootClicked = false; | 230 | rootClicked = false; |
227 | } | 231 | } |
228 | #ifndef KORG_NODND | 232 | #ifndef KORG_NODND |
229 | mMousePressed = false; | 233 | mMousePressed = false; |
230 | if (! rootClicked ) { | 234 | if (! rootClicked && !( e->button() == RightButton) ) { |
231 | mPressPos = e->pos(); | 235 | mPressPos = e->pos(); |
232 | mMousePressed = true; | 236 | mMousePressed = true; |
237 | } else { | ||
238 | mMousePressed = false; | ||
233 | } | 239 | } |
234 | #endif | 240 | #endif |
235 | //qDebug("KOTodoListView::contentsMousePressEvent %d", rootClicked); | 241 | //qDebug("KOTodoListView::contentsMousePressEvent %d", rootClicked); |
236 | #ifndef DESKTOP_VERSION | 242 | #ifndef DESKTOP_VERSION |
237 | if (!( e->button() == RightButton && rootClicked) ) | 243 | if (!( e->button() == RightButton && rootClicked) ) |
238 | QListView::contentsMousePressEvent(e); | 244 | QListView::contentsMousePressEvent(e); |
239 | #else | 245 | #else |
240 | QListView::contentsMousePressEvent(e); | 246 | QListView::contentsMousePressEvent(e); |
@@ -1077,17 +1083,17 @@ void KOTodoView::itemDoubleClicked(QListViewItem *item) | |||
1077 | } | 1083 | } |
1078 | pendingSubtodo = 0; | 1084 | pendingSubtodo = 0; |
1079 | int row = mTodoListView->header()->sectionAt ( mTodoListView->header()->mapFromGlobal( QCursor::pos()).x() ); | 1085 | int row = mTodoListView->header()->sectionAt ( mTodoListView->header()->mapFromGlobal( QCursor::pos()).x() ); |
1080 | //qDebug("ROW %d ", row); | 1086 | //qDebug("ROW %d ", row); |
1081 | if (!item) { | 1087 | if (!item) { |
1082 | newTodo(); | 1088 | newTodo(); |
1083 | return; | 1089 | return; |
1084 | } else { | 1090 | } else { |
1085 | if ( row == 1 ) { | 1091 | if ( row == 1 || row == 2 ) { |
1086 | mActiveItem = (KOTodoViewItem *) item; | 1092 | mActiveItem = (KOTodoViewItem *) item; |
1087 | newSubTodo(); | 1093 | newSubTodo(); |
1088 | return; | 1094 | return; |
1089 | } | 1095 | } |
1090 | } | 1096 | } |
1091 | if ( KOPrefs::instance()->mEditOnDoubleClick ) | 1097 | if ( KOPrefs::instance()->mEditOnDoubleClick ) |
1092 | editItem( item ); | 1098 | editItem( item ); |
1093 | else | 1099 | else |
@@ -1266,16 +1272,17 @@ void KOTodoView::setAllFlat() | |||
1266 | storeCurrentItem(); | 1272 | storeCurrentItem(); |
1267 | displayAllFlat(); | 1273 | displayAllFlat(); |
1268 | resetCurrentItem(); | 1274 | resetCurrentItem(); |
1269 | } | 1275 | } |
1270 | 1276 | ||
1271 | void KOTodoView::purgeCompleted() | 1277 | void KOTodoView::purgeCompleted() |
1272 | { | 1278 | { |
1273 | emit purgeCompletedSignal(); | 1279 | emit purgeCompletedSignal(); |
1280 | |||
1274 | } | 1281 | } |
1275 | void KOTodoView::toggleQuickTodo() | 1282 | void KOTodoView::toggleQuickTodo() |
1276 | { | 1283 | { |
1277 | if ( mQuickAdd->isVisible() ) { | 1284 | if ( mQuickAdd->isVisible() ) { |
1278 | mQuickAdd->hide(); | 1285 | mQuickAdd->hide(); |
1279 | KOPrefs::instance()->mEnableQuickTodo = false; | 1286 | KOPrefs::instance()->mEnableQuickTodo = false; |
1280 | } | 1287 | } |
1281 | else { | 1288 | else { |
diff --git a/korganizer/kotodoview.h b/korganizer/kotodoview.h index e553d0e..39976cf 100644 --- a/korganizer/kotodoview.h +++ b/korganizer/kotodoview.h | |||
@@ -63,16 +63,17 @@ class KOTodoListView : public KListView | |||
63 | signals: | 63 | signals: |
64 | void paintNeeded(); | 64 | void paintNeeded(); |
65 | void todoDropped(Todo *, int); | 65 | void todoDropped(Todo *, int); |
66 | void double_Clicked(QListViewItem *item); | 66 | void double_Clicked(QListViewItem *item); |
67 | void reparentTodoSignal( Todo *,Todo * ); | 67 | void reparentTodoSignal( Todo *,Todo * ); |
68 | void unparentTodoSignal(Todo *); | 68 | void unparentTodoSignal(Todo *); |
69 | void deleteTodo( Todo * ); | 69 | void deleteTodo( Todo * ); |
70 | protected: | 70 | protected: |
71 | void wheelEvent (QWheelEvent *e); | ||
71 | void contentsDragEnterEvent(QDragEnterEvent *); | 72 | void contentsDragEnterEvent(QDragEnterEvent *); |
72 | void contentsDragMoveEvent(QDragMoveEvent *); | 73 | void contentsDragMoveEvent(QDragMoveEvent *); |
73 | void contentsDragLeaveEvent(QDragLeaveEvent *); | 74 | void contentsDragLeaveEvent(QDragLeaveEvent *); |
74 | void contentsDropEvent(QDropEvent *); | 75 | void contentsDropEvent(QDropEvent *); |
75 | 76 | ||
76 | void contentsMousePressEvent(QMouseEvent *); | 77 | void contentsMousePressEvent(QMouseEvent *); |
77 | void contentsMouseMoveEvent(QMouseEvent *); | 78 | void contentsMouseMoveEvent(QMouseEvent *); |
78 | void contentsMouseReleaseEvent(QMouseEvent *); | 79 | void contentsMouseReleaseEvent(QMouseEvent *); |