00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include <cmath>
00023
00024
00025 #include <iostream>
00026 using namespace std;
00027
00028
00029 #include <QImage>
00030 #include <QTimer>
00031 #include <QPainter>
00032 #include <QKeyEvent>
00033 #include <QPixmap>
00034 #include <QPaintEvent>
00035
00036
00037 #include <mythuihelper.h>
00038 #include <mythcontext.h>
00039 #include <mythmiscutil.h>
00040
00041
00042 #include "singleview.h"
00043 #include "galleryutil.h"
00044
00045 #define LOC QString("QtView: ")
00046
00047 template<typename T> T sq(T val) { return val * val; }
00048
00049 SingleView::SingleView(
00050 ThumbList itemList, int *pos,
00051 int slideShow, int sortorder,
00052 MythMainWindow *parent,
00053 const char *name)
00054 : MythDialog(parent, name),
00055 ImageView(itemList, pos, slideShow, sortorder),
00056
00057
00058 m_pixmap(NULL),
00059 m_angle(0),
00060 m_source_loc(0,0),
00061 m_scaleMax(kScaleToFit),
00062
00063
00064 m_info_pixmap(NULL),
00065
00066
00067 m_caption_show(0),
00068 m_caption_remove(false),
00069 m_caption_pixmap(NULL),
00070 m_caption_restore_pixmap(NULL),
00071 m_caption_timer(new QTimer(this)),
00072
00073
00074 m_effect_pixmap(NULL),
00075 m_effect_painter(NULL),
00076 m_effect_subtype(0),
00077 m_effect_bounds(0,0,0,0),
00078 m_effect_delta0(0,0),
00079 m_effect_delta1(0,0),
00080 m_effect_i(0),
00081 m_effect_j(0),
00082 m_effect_framerate(0),
00083 m_effect_delta2_x(0.0f),
00084 m_effect_delta2_y(0.0f),
00085 m_effect_alpha(0.0f),
00086
00087
00088 m_effect_spiral_tmp0(0,0),
00089 m_effect_spiral_tmp1(0,0),
00090 m_effect_multi_circle_out_delta_alpha(0.0f),
00091 m_effect_milti_circle_out_points(4),
00092 m_effect_circle_out_points(4)
00093 {
00094 m_scaleMax = (ScaleMax) gCoreContext->GetNumSetting("GalleryScaleMax", 0);
00095
00096 m_slideshow_timer = new QTimer(this);
00097 RegisterEffects();
00098
00099
00100
00101 QString transType = gCoreContext->GetSetting("SlideshowTransition");
00102 if (!transType.isEmpty() && m_effect_map.contains(transType))
00103 m_effect_method = m_effect_map[transType];
00104
00105 if (m_effect_method.isEmpty() || transType == "random")
00106 {
00107 m_effect_method = GetRandomEffect();
00108 m_effect_random = true;
00109 }
00110
00111
00112
00113 m_caption_show = gCoreContext->GetNumSetting("GalleryOverlayCaption", 0);
00114 if (m_caption_show)
00115 {
00116 m_caption_pixmap = CreateBackground(QSize(screenwidth, 100));
00117 m_caption_restore_pixmap = new QPixmap(screenwidth, 100);
00118 }
00119
00120
00121
00122 setNoErase();
00123 QString bgtype = gCoreContext->GetSetting("SlideshowBackground");
00124 if (bgtype != "theme" && !bgtype.isEmpty())
00125 setPalette(QPalette(QColor(bgtype)));
00126
00127
00128
00129 connect(m_slideshow_timer, SIGNAL(timeout()), SLOT(SlideTimeout()));
00130 connect(m_caption_timer, SIGNAL(timeout()), SLOT(CaptionTimeout()));
00131
00132
00133
00134 Load();
00135
00136
00137
00138 if (slideShow)
00139 {
00140 m_slideshow_running = true;
00141 m_slideshow_timer->stop();
00142 m_slideshow_timer->setSingleShot(true);
00143 m_slideshow_timer->start(m_slideshow_frame_delay_state);
00144 GetMythUI()->DisableScreensaver();
00145 }
00146 }
00147
00148 SingleView::~SingleView()
00149 {
00150 if (m_effect_painter)
00151 {
00152 if (m_effect_painter->isActive())
00153 m_effect_painter->end();
00154
00155 delete m_effect_painter;
00156 m_effect_painter = NULL;
00157 }
00158
00159 SetPixmap(NULL);
00160
00161 if (m_effect_pixmap)
00162 {
00163 delete m_effect_pixmap;
00164 m_effect_pixmap = NULL;
00165 }
00166
00167 if (m_info_pixmap)
00168 {
00169 delete m_info_pixmap;
00170 m_info_pixmap = NULL;
00171 }
00172
00173
00174 gCoreContext->SaveSetting("GalleryScaleMax", m_scaleMax);
00175 }
00176
00177 void SingleView::paintEvent(QPaintEvent *)
00178 {
00179 if (1 == m_movieState)
00180 {
00181 m_movieState = 2;
00182
00183 ThumbItem *item = m_itemList.at(m_pos);
00184
00185 if (item)
00186 GalleryUtil::PlayVideo(item->GetPath());
00187
00188 if (!m_slideshow_running && item)
00189 {
00190 QImage image;
00191 GetScreenShot(image, item);
00192 if (image.isNull())
00193 return;
00194
00195 image = image.scaled(800, 600);
00196
00197
00198 QPainter p(&image);
00199 QRect rect = QRect(20, image.height() - 100,
00200 image.width() - 40, 80);
00201 p.fillRect(rect, QBrush(QColor(0,0,0,100)));
00202 p.setFont(QFont("Arial", 25, QFont::Bold));
00203 p.setPen(QColor(255,255,255));
00204 p.drawText(rect, Qt::AlignCenter, tr("Press SELECT to play again"));
00205 p.end();
00206
00207 m_image = image;
00208 SetZoom(1.0);
00209 }
00210 }
00211
00212 if (!m_effect_running)
00213 {
00214 QPixmap pix(screenwidth, screenheight);
00215 pix.fill(this, 0, 0);
00216
00217 if (m_pixmap)
00218 {
00219 if (m_pixmap->width() <= screenwidth &&
00220 m_pixmap->height() <= screenheight)
00221 {
00222 QPainter p(&pix);
00223 p.drawPixmap(QPoint((screenwidth - m_pixmap->width()) >> 1,
00224 (screenheight - m_pixmap->height()) >> 1),
00225 *m_pixmap, QRect(0,0,-1,-1));
00226 }
00227 else
00228 {
00229 QPainter p(&pix);
00230 p.drawPixmap(QPoint(0,0),
00231 *m_pixmap, QRect(m_source_loc, pix.size()));
00232 }
00233
00234 if (m_caption_remove)
00235 {
00236 m_caption_remove = false;
00237 QPainter p(this);
00238 p.drawPixmap(QPoint(0, screenheight - 100),
00239 *m_caption_restore_pixmap, QRect(0,0,-1,-1));
00240 p.end();
00241 }
00242 else if (m_caption_show && !m_caption_timer->isActive())
00243 {
00244 ThumbItem *item = m_itemList.at(m_pos);
00245 if (!item->HasCaption())
00246 item->InitCaption(true);
00247
00248 if (item->HasCaption())
00249 {
00250
00251 QPainter sb(m_caption_restore_pixmap);
00252 sb.drawPixmap(QPoint(0, 0),
00253 pix,
00254 QRect(0, screenheight - 100,
00255 screenwidth, 100));
00256 sb.end();
00257
00258
00259 QPainter pbg(&pix);
00260 pbg.drawPixmap(QPoint(0, screenheight - 100),
00261 *m_caption_pixmap,
00262 QRect(0, 0, screenwidth, 100));
00263 pbg.end();
00264
00265
00266 QPainter p(&pix);
00267 p.initFrom(this);
00268 p.drawText(0, screenheight - 100, screenwidth, 100,
00269 Qt::AlignCenter, item->GetCaption());
00270 p.end();
00271
00272 m_caption_timer->stop();
00273 m_caption_timer->setSingleShot(true);
00274 m_caption_timer->start(m_caption_show * 1000);
00275 }
00276 }
00277
00278 if (m_zoom != 1.0f)
00279 {
00280 QPainter p(&pix);
00281 p.initFrom(this);
00282 p.drawText(screenwidth / 10, screenheight / 10,
00283 QString::number(m_zoom) + "x Zoom");
00284 p.end();
00285 }
00286
00287 if (m_info_show || m_info_show_short)
00288 {
00289 if (!m_info_pixmap)
00290 {
00291 m_info_pixmap = CreateBackground(QSize(
00292 screenwidth - 2 * screenwidth / 10,
00293 screenheight - 2 * screenheight / 10));
00294 }
00295
00296 QPainter ip(&pix);
00297 ip.drawPixmap(QPoint(screenwidth / 10, screenheight / 10),
00298 *m_info_pixmap, QRect(0,0,-1,-1));
00299 ip.end();
00300
00301 QPainter p(&pix);
00302 p.initFrom(this);
00303 ThumbItem *item = m_itemList.at(m_pos);
00304 QString info = QString::null;
00305 if (item)
00306 {
00307 info = item->GetDescription(GetDescriptionStatus(),
00308 m_image.size(), m_angle);
00309 }
00310
00311 if (!info.isEmpty())
00312 {
00313 p.drawText(screenwidth / 10 + (int)(10 * wmult),
00314 screenheight / 10 + (int)(10 * hmult),
00315 m_info_pixmap->width() - 2 * (int)(10 * wmult),
00316 m_info_pixmap->height() - 2 * (int)(10 * hmult),
00317 Qt::AlignLeft, info);
00318 }
00319 p.end();
00320 }
00321
00322 }
00323
00324 QPainter p(this);
00325 p.drawPixmap(QPoint(0,0), pix, QRect(0,0,-1,-1));
00326 p.end();
00327 }
00328 else if (!m_effect_method.isEmpty())
00329 RunEffect(m_effect_method);
00330 }
00331
00332 void SingleView::keyPressEvent(QKeyEvent *e)
00333 {
00334 bool handled = false;
00335
00336 bool wasRunning = m_slideshow_running;
00337 m_slideshow_timer->stop();
00338 m_caption_timer->stop();
00339 m_slideshow_running = false;
00340 GetMythUI()->RestoreScreensaver();
00341 m_effect_running = false;
00342 m_slideshow_frame_delay_state = m_slideshow_frame_delay * 1000;
00343 if (m_effect_painter && m_effect_painter->isActive())
00344 m_effect_painter->end();
00345
00346 bool wasInfo = m_info_show;
00347 m_info_show = false;
00348 bool wasInfoShort = m_info_show_short;
00349 m_info_show_short = false;
00350
00351 QStringList actions;
00352 handled = GetMythMainWindow()->TranslateKeyPress("Gallery", e, actions);
00353
00354 int scrollX = screenwidth / 10;
00355 int scrollY = screenheight / 10;
00356
00357 for (unsigned int i = 0; i < (unsigned int) actions.size() && !handled; i++)
00358 {
00359 QString action = actions[i];
00360 handled = true;
00361
00362 if (action == "LEFT" || action == "UP")
00363 {
00364 m_info_show = wasInfo;
00365 m_slideshow_running = wasRunning;
00366 DisplayPrev(true, true);
00367 }
00368 else if (action == "RIGHT" || action == "DOWN")
00369 {
00370 m_info_show = wasInfo;
00371 m_slideshow_running = wasRunning;
00372 DisplayNext(true, true);
00373 }
00374 else if (action == "ZOOMOUT")
00375 {
00376 if (m_zoom > 0.5f)
00377 {
00378 SetZoom(m_zoom - 0.5f);
00379 if (m_zoom > 1.0)
00380 {
00381 m_source_loc.setY(m_source_loc.y() - (screenheight / 4));
00382 m_source_loc.setX(m_source_loc.x() - (screenwidth / 4));
00383 CheckPosition();
00384 }
00385 else
00386 m_source_loc = QPoint(0, 0);
00387 }
00388 }
00389 else if (action == "ZOOMIN")
00390 {
00391 if (m_zoom < 4.0f)
00392 {
00393 SetZoom(m_zoom + 0.5f);
00394 if (m_zoom > 1.0)
00395 {
00396 m_source_loc.setY(m_source_loc.y() + (screenheight / 4));
00397 m_source_loc.setX(m_source_loc.x() + (screenwidth / 4));
00398 CheckPosition();
00399 }
00400 else
00401 m_source_loc = QPoint(0, 0);
00402 }
00403 }
00404 else if (action == "FULLSIZE")
00405 {
00406 m_source_loc = QPoint(0, 0);
00407 if (m_zoom != 1.0f)
00408 SetZoom(1.0f);
00409 }
00410 else if (action == "SCROLLLEFT")
00411 {
00412 if (m_zoom > 1.0f)
00413 {
00414 m_source_loc.setX(m_source_loc.x() - scrollX);
00415 m_source_loc.setX(
00416 (m_source_loc.x() < 0) ? 0 : m_source_loc.x());
00417 }
00418 }
00419 else if (action == "SCROLLRIGHT")
00420 {
00421 if (m_zoom > 1.0f && m_pixmap)
00422 {
00423 m_source_loc.setX(m_source_loc.x() + scrollX);
00424 m_source_loc.setX(min(m_source_loc.x(),
00425 m_pixmap->width() - screenwidth));
00426 }
00427 }
00428 else if (action == "SCROLLDOWN")
00429 {
00430 if (m_zoom > 1.0f && m_pixmap)
00431 {
00432 m_source_loc.setY(m_source_loc.y() + scrollY);
00433 m_source_loc.setY(min(m_source_loc.y(),
00434 m_pixmap->height() - screenheight));
00435 }
00436 }
00437 else if (action == "SCROLLUP")
00438 {
00439 if (m_zoom > 1.0f)
00440 {
00441 m_source_loc.setY(m_source_loc.y() - scrollY);
00442 m_source_loc.setY(
00443 (m_source_loc.y() < 0) ? 0 : m_source_loc.y());
00444 }
00445 }
00446 else if (action == "RECENTER")
00447 {
00448 if (m_zoom > 1.0f && m_pixmap)
00449 {
00450 m_source_loc = QPoint(
00451 (m_pixmap->width() - screenwidth) >> 1,
00452 (m_pixmap->height() - screenheight) >> 1);
00453 }
00454 }
00455 else if (action == "UPLEFT")
00456 {
00457 if (m_zoom > 1.0f)
00458 {
00459 m_source_loc = QPoint(0,0);
00460 }
00461 }
00462 else if (action == "LOWRIGHT")
00463 {
00464 if (m_zoom > 1.0f && m_pixmap)
00465 {
00466 m_source_loc = QPoint(
00467 m_pixmap->width() - scrollX - screenwidth,
00468 m_pixmap->height() - scrollY - screenheight);
00469 }
00470 }
00471 else if (action == "ROTRIGHT")
00472 {
00473 m_source_loc = QPoint(0, 0);
00474 Rotate(90);
00475 }
00476 else if (action == "ROTLEFT")
00477 {
00478 m_source_loc = QPoint(0, 0);
00479 Rotate(-90);
00480 }
00481 else if (action == "DELETE")
00482 {
00483 ThumbItem *item = m_itemList.at(m_pos);
00484 if (item && GalleryUtil::Delete(item->GetPath()))
00485 {
00486 item->SetPixmap(NULL);
00487 DisplayNext(true, true);
00488 }
00489 m_info_show = wasInfo;
00490 m_slideshow_running = wasRunning;
00491 }
00492 else if (action == "PLAY" || action == "SLIDESHOW" ||
00493 action == "RANDOMSHOW")
00494 {
00495 m_source_loc = QPoint(0, 0);
00496 m_zoom = 1.0f;
00497 m_angle = 0;
00498 m_info_show = wasInfo;
00499 m_info_show_short = true;
00500 m_slideshow_running = !wasRunning;
00501 }
00502 else if (action == "INFO")
00503 {
00504 m_info_show = !wasInfo && !wasInfoShort;
00505 m_slideshow_running = wasRunning;
00506 }
00507 else if (action == "FULLSCREEN")
00508 {
00509 m_scaleMax = (ScaleMax) ((m_scaleMax + 1) % kScaleMaxCount);
00510 m_source_loc = QPoint(0, 0);
00511 SetZoom(1.0f);
00512 }
00513 else
00514 {
00515 handled = false;
00516 }
00517 }
00518
00519 if (m_slideshow_running || m_info_show_short)
00520 {
00521 m_slideshow_timer->stop();
00522 m_slideshow_timer->setSingleShot(true);
00523 m_slideshow_timer->start(m_slideshow_frame_delay_state);
00524 }
00525 if (m_slideshow_running)
00526 {
00527 GetMythUI()->DisableScreensaver();
00528 }
00529
00530 update();
00531
00532 if (!handled)
00533 MythDialog::keyPressEvent(e);
00534 }
00535
00536 void SingleView::CheckPosition(void)
00537 {
00538 m_source_loc.setX((m_source_loc.x() < 0) ? 0 : m_source_loc.x());
00539 m_source_loc.setY((m_source_loc.y() < 0) ? 0 : m_source_loc.y());
00540 m_source_loc.setX(min(m_source_loc.x(), m_pixmap->width() - screenwidth));
00541 m_source_loc.setY(min(m_source_loc.y(), m_pixmap->height() - screenheight));
00542 }
00543
00544 void SingleView::DisplayNext(bool reset, bool loadImage)
00545 {
00546 if (reset)
00547 {
00548 m_angle = 0;
00549 m_zoom = 1.0f;
00550 m_source_loc = QPoint(0, 0);
00551 }
00552
00553
00554
00555 ThumbItem *item;
00556 int oldpos = m_pos;
00557 while (true)
00558 {
00559 m_pos = m_slideshow_sequence->next();
00560 item = m_itemList.at(m_pos);
00561 if (item)
00562 {
00563 if (QFile::exists(item->GetPath()))
00564 {
00565 break;
00566 }
00567 }
00568 if (m_pos == oldpos)
00569 {
00570
00571 reject();
00572 }
00573 }
00574
00575 if (loadImage)
00576 Load();
00577 }
00578
00579 void SingleView::DisplayPrev(bool reset, bool loadImage)
00580 {
00581 if (reset)
00582 {
00583 m_angle = 0;
00584 m_zoom = 1.0f;
00585 m_source_loc = QPoint(0, 0);
00586 }
00587
00588
00589
00590 int oldpos = m_pos;
00591 while (true)
00592 {
00593 m_pos = m_slideshow_sequence->prev();
00594
00595 ThumbItem *item = m_itemList.at(m_pos);
00596 if (item && QFile::exists(item->GetPath()))
00597 break;
00598
00599 if (m_pos == oldpos)
00600 {
00601
00602 reject();
00603 }
00604 }
00605
00606 if (loadImage)
00607 Load();
00608 }
00609
00610 void SingleView::Load(void)
00611 {
00612 m_movieState = 0;
00613
00614 SetPixmap(NULL);
00615
00616 ThumbItem *item = m_itemList.at(m_pos);
00617 if (!item)
00618 {
00619 LOG(VB_GENERAL, LOG_ERR, LOC + QString("No item at %1").arg(m_pos));
00620 return;
00621 }
00622
00623 if (GalleryUtil::IsMovie(item->GetPath()))
00624 {
00625 m_movieState = 1;
00626 return;
00627 }
00628
00629 m_image.load(item->GetPath());
00630 if (m_image.isNull())
00631 return;
00632
00633 m_angle = item->GetRotationAngle();
00634 if (m_angle != 0)
00635 {
00636 QMatrix matrix;
00637 matrix.rotate(m_angle);
00638 m_image = m_image.transformed(matrix, Qt::SmoothTransformation);
00639 }
00640
00641 SetZoom(m_zoom);
00642
00643 UpdateLCD(item);
00644 }
00645
00646 void SingleView::Rotate(int angle)
00647 {
00648 m_angle += angle;
00649
00650 m_angle = (m_angle >= 360) ? m_angle - 360 : m_angle;
00651 m_angle = (m_angle < 0) ? m_angle + 360 : m_angle;
00652
00653 ThumbItem *item = m_itemList.at(m_pos);
00654 if (item)
00655 item->SetRotationAngle(m_angle);
00656
00657 if (m_image.isNull())
00658 return;
00659
00660 QMatrix matrix;
00661 matrix.rotate(angle);
00662 m_image = m_image.transformed(matrix, Qt::SmoothTransformation);
00663
00664 SetZoom(m_zoom);
00665 }
00666
00667 void SingleView::SetZoom(float zoom)
00668 {
00669 m_zoom = zoom;
00670
00671 if (m_image.isNull())
00672 return;
00673
00674 QImage img = m_image;
00675
00676 QSize dest = QSize(
00677 (int)(screenwidth * m_zoom), (int)(screenheight * m_zoom));
00678
00679 QSize sz = GalleryUtil::ScaleToDest(m_image.size(), dest, m_scaleMax);
00680 if ((sz.width() > 0) && (sz.height() > 0))
00681 img = m_image.scaled(sz, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
00682
00683 SetPixmap(new QPixmap(QPixmap::fromImage(img)));
00684 }
00685
00686 void SingleView::SetPixmap(QPixmap *pixmap)
00687 {
00688 if (m_pixmap)
00689 {
00690 delete m_pixmap;
00691 m_pixmap = NULL;
00692 }
00693 m_pixmap = pixmap;
00694 }
00695
00696 QPixmap *SingleView::CreateBackground(const QSize &sz)
00697 {
00698 QImage img(sz.width(), sz.height(), QImage::Format_ARGB32);
00699
00700 for (int y = 0; y < img.height(); y++)
00701 {
00702 for (int x = 0; x < img.width(); x++)
00703 {
00704 uint *p = (uint *)img.scanLine(y) + x;
00705 *p = qRgba(0, 0, 0, 150);
00706 }
00707 }
00708
00709 return new QPixmap(QPixmap::fromImage(img));
00710 }
00711
00712 void SingleView::RegisterEffects(void)
00713 {
00714 m_effect_map.insert("none", "EffectNone");
00715 m_effect_map.insert("chess board", "EffectChessboard");
00716 m_effect_map.insert("melt down", "EffectMeltdown");
00717 m_effect_map.insert("sweep", "EffectSweep");
00718 m_effect_map.insert("noise", "EffectNoise");
00719 m_effect_map.insert("growing", "EffectGrowing");
00720 m_effect_map.insert("incoming edges", "EffectIncomingEdges");
00721 m_effect_map.insert("horizontal lines", "EffectHorizLines");
00722 m_effect_map.insert("vertical lines", "EffectVertLines");
00723 m_effect_map.insert("circle out", "EffectCircleOut");
00724 m_effect_map.insert("multicircle out", "EffectMultiCircleOut");
00725 m_effect_map.insert("spiral in", "EffectSpiralIn");
00726 m_effect_map.insert("blobs", "EffectBlobs");
00727 }
00728
00729 void SingleView::RunEffect(const QString &effect)
00730 {
00731 if (effect == "EffectChessboard")
00732 EffectChessboard();
00733 else if (effect == "EffectMeltdown")
00734 EffectMeltdown();
00735 else if (effect == "EffectSweep")
00736 EffectSweep();
00737 else if (effect == "EffectNoise")
00738 EffectNoise();
00739 else if (effect == "EffectGrowing")
00740 EffectGrowing();
00741 else if (effect == "EffectIncomingEdges")
00742 EffectIncomingEdges();
00743 else if (effect == "EffectHorizLines")
00744 EffectHorizLines();
00745 else if (effect == "EffectVertLines")
00746 EffectVertLines();
00747 else if (effect == "EffectCircleOut")
00748 EffectCircleOut();
00749 else if (effect == "EffectMultiCircleOut")
00750 EffectMultiCircleOut();
00751 else if (effect == "EffectSpiralIn")
00752 EffectSpiralIn();
00753 else if (effect == "EffectBlobs")
00754 EffectBlobs();
00755 else
00756 EffectNone();
00757 }
00758
00759 void SingleView::StartPainter(void)
00760 {
00761 if (!m_effect_painter)
00762 m_effect_painter = new QPainter();
00763
00764 if (m_effect_painter->isActive())
00765 m_effect_painter->end();
00766
00767 QBrush brush;
00768 if (m_effect_pixmap)
00769 brush.setTexture(*m_effect_pixmap);
00770
00771 m_effect_painter->begin(this);
00772 m_effect_painter->setBrush(brush);
00773 m_effect_painter->setPen(Qt::NoPen);
00774 }
00775
00776 void SingleView::CreateEffectPixmap(void)
00777 {
00778 if (!m_effect_pixmap)
00779 m_effect_pixmap = new QPixmap(screenwidth, screenheight);
00780
00781 m_effect_pixmap->fill(this, 0, 0);
00782
00783 if (m_pixmap)
00784 {
00785 QPoint src_loc((m_effect_pixmap->width() - m_pixmap->width() ) >> 1,
00786 (m_effect_pixmap->height() - m_pixmap->height()) >> 1);
00787 QPainter p(m_effect_pixmap);
00788 p.drawPixmap(src_loc, *m_pixmap, QRect(0, 0, -1, -1));
00789 p.end();
00790 }
00791 }
00792
00793 void SingleView::EffectNone(void)
00794 {
00795 m_effect_running = false;
00796 m_slideshow_frame_delay_state = -1;
00797 update();
00798 return;
00799 }
00800
00801 void SingleView::EffectChessboard(void)
00802 {
00803 if (m_effect_current_frame == 0)
00804 {
00805 m_effect_delta0 = QPoint(8, 8);
00806
00807 m_effect_j = (width() + m_effect_delta0.x() - 1) / m_effect_delta0.x();
00808 m_effect_delta1 = QPoint(0, 0);
00809 m_effect_framerate = 800 / m_effect_j;
00810
00811
00812
00813 m_effect_bounds = QRect(
00814 m_effect_j * m_effect_delta0.x(), (m_effect_j & 1) ? 0 : m_effect_delta0.y(),
00815 width(), height());
00816 }
00817
00818 if (m_effect_delta1.x() >= m_effect_bounds.width())
00819 {
00820 m_effect_running = false;
00821 m_slideshow_frame_delay_state = -1;
00822 update();
00823 return;
00824 }
00825
00826 m_effect_delta1 = QPoint(m_effect_delta1.x() + m_effect_delta0.x(),
00827 (m_effect_delta1.y()) ? 0 : m_effect_delta0.y());
00828 QPoint t = QPoint(m_effect_bounds.x() - m_effect_delta0.x(),
00829 (m_effect_bounds.y()) ? 0 : m_effect_delta0.y());
00830 m_effect_bounds = QRect(t, m_effect_bounds.size());
00831
00832 QPainter painter(this);
00833 for (int y = 0; y < m_effect_bounds.width(); y += (m_effect_delta0.y()<<1))
00834 {
00835 QPoint src0(m_effect_delta1.x(), y + m_effect_delta1.y());
00836 QRect dst0(m_effect_delta1.x(), y + m_effect_delta1.y(),
00837 m_effect_delta0.x(), m_effect_delta0.y());
00838 QPoint src1(m_effect_bounds.x(), y + m_effect_bounds.y());
00839 QRect dst1(m_effect_bounds.x(), y + m_effect_bounds.y(),
00840 m_effect_delta0.x(), m_effect_delta0.y());
00841 painter.drawPixmap(src0, *m_effect_pixmap, dst0);
00842 painter.drawPixmap(src1, *m_effect_pixmap, dst0);
00843 }
00844 painter.end();
00845
00846 m_slideshow_frame_delay_state = m_effect_framerate;
00847
00848 m_effect_current_frame = 1;
00849 }
00850
00851 void SingleView::EffectSweep(void)
00852 {
00853 if (m_effect_current_frame == 0)
00854 {
00855 m_effect_subtype = random() % 4;
00856 m_effect_delta0 = QPoint(
00857 (kSweepLeftToRight == m_effect_subtype) ? 16 : -16,
00858 (kSweepTopToBottom == m_effect_subtype) ? 16 : -16);
00859 m_effect_bounds = QRect(
00860 (kSweepLeftToRight == m_effect_subtype) ? 0 : width(),
00861 (kSweepTopToBottom == m_effect_subtype) ? 0 : height(),
00862 width(), height());
00863 }
00864
00865 if (kSweepRightToLeft == m_effect_subtype ||
00866 kSweepLeftToRight == m_effect_subtype)
00867 {
00868
00869 if ((kSweepRightToLeft == m_effect_subtype &&
00870 m_effect_bounds.x() < -64) ||
00871 (kSweepLeftToRight == m_effect_subtype &&
00872 m_effect_bounds.x() > m_effect_bounds.width() + 64))
00873 {
00874 m_slideshow_frame_delay_state = -1;
00875 m_effect_running = false;
00876 update();
00877 return;
00878 }
00879
00880 int w, x, i;
00881 QPainter p(this);
00882 for (w = 2, i = 4, x = m_effect_bounds.x(); i > 0;
00883 i--, w <<= 1, x -= m_effect_delta0.x())
00884 {
00885 p.drawPixmap(QPoint(x, 0), *m_effect_pixmap,
00886 QRect(x, 0, w, m_effect_bounds.height()));
00887 }
00888 p.end();
00889
00890 m_effect_bounds.moveLeft(m_effect_bounds.x() + m_effect_delta0.x());
00891 }
00892 else
00893 {
00894
00895 if ((kSweepBottomToTop == m_effect_subtype &&
00896 m_effect_bounds.y() < -64) ||
00897 (kSweepTopToBottom == m_effect_subtype &&
00898 m_effect_bounds.y() > m_effect_bounds.height() + 64))
00899 {
00900 m_slideshow_frame_delay_state = -1;
00901 m_effect_running = false;
00902 update();
00903 return;
00904 }
00905
00906 int h, y, i;
00907 QPainter p(this);
00908 for (h = 2, i = 4, y = m_effect_bounds.y(); i > 0;
00909 i--, h <<= 1, y -= m_effect_delta0.y())
00910 {
00911 p.drawPixmap(QPoint(0, y), *m_effect_pixmap,
00912 QRect(0, y, m_effect_bounds.width(), h));
00913 }
00914 p.end();
00915
00916 m_effect_bounds.moveTop(m_effect_bounds.y() + m_effect_delta0.y());
00917 }
00918
00919 m_slideshow_frame_delay_state = 20;
00920 m_effect_current_frame = 1;
00921 }
00922
00923 void SingleView::EffectGrowing(void)
00924 {
00925 if (m_effect_current_frame == 0)
00926 {
00927 m_effect_bounds = QRect(width() >> 1, height() >> 1, width(), height());
00928 m_effect_i = 0;
00929 m_effect_delta2_x = m_effect_bounds.x() * 0.01f;
00930 m_effect_delta2_y = m_effect_bounds.y() * 0.01f;
00931 }
00932
00933 m_effect_bounds.moveTopLeft(
00934 QPoint((m_effect_bounds.width() >> 1) - (int)(m_effect_i * m_effect_delta2_x),
00935 (m_effect_bounds.height() >> 1) - (int)(m_effect_i * m_effect_delta2_y)));
00936
00937 m_effect_i++;
00938
00939 if (m_effect_bounds.x() < 0 || m_effect_bounds.y() < 0)
00940 {
00941 m_slideshow_frame_delay_state = -1;
00942 m_effect_running = false;
00943 update();
00944 return;
00945 }
00946
00947 QPainter p(this);
00948 QSize dst_sz(m_effect_bounds.width() - (m_effect_bounds.x() << 1),
00949 m_effect_bounds.height() - (m_effect_bounds.y() << 1));
00950
00951 p.drawPixmap(m_effect_bounds.topLeft(),
00952 *m_effect_pixmap, QRect(m_effect_bounds.topLeft(), dst_sz));
00953 p.end();
00954
00955 m_slideshow_frame_delay_state = 20;
00956 m_effect_current_frame = 1;
00957 }
00958
00959 void SingleView::EffectHorizLines(void)
00960 {
00961 static const int iyPos[] = { 0, 4, 2, 6, 1, 5, 3, 7, -1 };
00962
00963 if (m_effect_current_frame == 0)
00964 {
00965 m_effect_bounds.setSize(size());
00966 m_effect_i = 0;
00967 }
00968
00969 if (iyPos[m_effect_i] < 0)
00970 {
00971 m_slideshow_frame_delay_state = -1;
00972 m_effect_running = false;
00973 update();
00974 return;
00975 }
00976
00977 QPainter p(this);
00978 for (int y = iyPos[m_effect_i]; y < m_effect_bounds.height(); y += 8)
00979 {
00980 p.drawPixmap(QPoint(0, y), *m_effect_pixmap,
00981 QRect(0, y, m_effect_bounds.width(), 1));
00982 }
00983 p.end();
00984
00985 m_effect_i++;
00986
00987 if (iyPos[m_effect_i] >= 0)
00988 {
00989 m_slideshow_frame_delay_state = 160;
00990 m_effect_current_frame = 1;
00991 }
00992 else
00993 {
00994 m_slideshow_frame_delay_state = -1;
00995 m_effect_running = false;
00996 update();
00997 return;
00998 }
00999 }
01000
01001 void SingleView::EffectVertLines(void)
01002 {
01003 static const int ixPos[] = { 0, 4, 2, 6, 1, 5, 3, 7, -1 };
01004
01005 if (m_effect_current_frame == 0)
01006 {
01007 m_effect_bounds.setSize(size());
01008 m_effect_i = 0;
01009 }
01010
01011 if (ixPos[m_effect_i] < 0)
01012 {
01013 m_slideshow_frame_delay_state = -1;
01014 m_effect_running = false;
01015 update();
01016 return;
01017 }
01018
01019 QPainter p(this);
01020 for (int x = ixPos[m_effect_i]; x < m_effect_bounds.width(); x += 8)
01021 {
01022 p.drawPixmap(QPoint(x, 0), *m_effect_pixmap,
01023 QRect(x, 0, 1, m_effect_bounds.height()));
01024 }
01025 p.end();
01026
01027 m_effect_i++;
01028
01029 if (ixPos[m_effect_i] >= 0)
01030 {
01031 m_slideshow_frame_delay_state = 160;
01032 m_effect_current_frame = 1;
01033 }
01034 else
01035 {
01036 m_slideshow_frame_delay_state = -1;
01037 m_effect_running = false;
01038 update();
01039 return;
01040 }
01041 }
01042
01043 void SingleView::EffectMeltdown(void)
01044 {
01045 if (m_effect_current_frame == 0)
01046 {
01047 m_effect_bounds.setSize(size());
01048 m_effect_delta0 = QPoint(4, 16);
01049 m_effect_delta1 = QPoint(m_effect_bounds.width() / m_effect_delta0.x(), 0);
01050 m_effect_meltdown_y_disp.resize(m_effect_delta1.x());
01051 }
01052
01053 int x = 0;
01054 bool done = true;
01055 QPainter p(this);
01056 for (int i = 0; i < m_effect_delta1.x(); i++, x += m_effect_delta0.x())
01057 {
01058 int y = m_effect_meltdown_y_disp[i];
01059 if (y >= m_effect_bounds.height())
01060 continue;
01061
01062 done = false;
01063 if ((random() & 0xF) < 6)
01064 continue;
01065
01066 p.drawPixmap(QPoint(x, y), *m_effect_pixmap,
01067 QRect(x, y, m_effect_delta0.x(), m_effect_delta0.y()));
01068
01069 m_effect_meltdown_y_disp[i] += m_effect_delta0.y();
01070 }
01071 p.end();
01072
01073 if (done)
01074 {
01075 m_slideshow_frame_delay_state = -1;
01076 m_effect_running = false;
01077 update();
01078 return;
01079 }
01080
01081 m_slideshow_frame_delay_state = 15;
01082 m_effect_current_frame = 1;
01083 }
01084
01085 void SingleView::EffectIncomingEdges(void)
01086 {
01087 if (m_effect_current_frame == 0)
01088 {
01089 m_effect_bounds.setSize(size());
01090 m_effect_delta1 = QPoint(m_effect_bounds.width() >> 1, m_effect_bounds.height() >> 1);
01091 m_effect_delta2_x = m_effect_delta1.x() * 0.01f;
01092 m_effect_delta2_y = m_effect_delta1.y() * 0.01f;
01093 m_effect_i = 0;
01094 m_effect_subtype = random() & 1;
01095 }
01096
01097 m_effect_bounds.moveTopLeft(QPoint((int)(m_effect_delta2_x * m_effect_i),
01098 (int)(m_effect_delta2_y * m_effect_i)));
01099
01100 if (m_effect_bounds.x() > m_effect_delta1.x() || m_effect_bounds.y() > m_effect_delta1.y())
01101 {
01102 m_slideshow_frame_delay_state = -1;
01103 m_effect_running = false;
01104 update();
01105 return;
01106 }
01107
01108 int x1 = m_effect_bounds.width() - m_effect_bounds.x();
01109 int y1 = m_effect_bounds.height() - m_effect_bounds.y();
01110 m_effect_i++;
01111
01112 QPainter p(this);
01113 if (kIncomingEdgesMoving == m_effect_subtype)
01114 {
01115
01116 p.drawPixmap(0, 0, *m_effect_pixmap,
01117 m_effect_delta1.x() - m_effect_bounds.x(),
01118 m_effect_delta1.y() - m_effect_bounds.y(),
01119 m_effect_bounds.x(), m_effect_bounds.y()
01120 );
01121 p.drawPixmap(x1, 0, *m_effect_pixmap,
01122 m_effect_delta1.x(), m_effect_delta1.y() - m_effect_bounds.y(),
01123 m_effect_bounds.x(), m_effect_bounds.y()
01124 );
01125 p.drawPixmap(0, y1, *m_effect_pixmap,
01126 m_effect_delta1.x() - m_effect_bounds.x(), m_effect_delta1.y(),
01127 m_effect_bounds.x(), m_effect_bounds.y()
01128 );
01129 p.drawPixmap(x1, y1, *m_effect_pixmap,
01130 m_effect_delta1.x(), m_effect_delta1.y(),
01131 m_effect_bounds.x(), m_effect_bounds.y()
01132 );
01133 }
01134 else
01135 {
01136
01137 p.drawPixmap( 0, 0, *m_effect_pixmap, 0, 0,
01138 m_effect_bounds.x(), m_effect_bounds.y());
01139 p.drawPixmap(x1, 0, *m_effect_pixmap, x1, 0,
01140 m_effect_bounds.x(), m_effect_bounds.y());
01141 p.drawPixmap( 0, y1, *m_effect_pixmap, 0, y1,
01142 m_effect_bounds.x(), m_effect_bounds.y());
01143 p.drawPixmap(x1, y1, *m_effect_pixmap, x1, y1,
01144 m_effect_bounds.x(), m_effect_bounds.y());
01145 }
01146 p.end();
01147
01148 m_slideshow_frame_delay_state = 20;
01149 m_effect_current_frame = 1;
01150 }
01151
01152 void SingleView::EffectMultiCircleOut(void)
01153 {
01154 int x, y, i;
01155 double alpha;
01156
01157 if (m_effect_current_frame == 0)
01158 {
01159 StartPainter();
01160 m_effect_bounds = QRect(width(), height() >> 1,
01161 width(), height());
01162
01163 m_effect_milti_circle_out_points.setPoint(
01164 0, m_effect_bounds.width() >> 1, m_effect_bounds.height() >> 1);
01165 m_effect_milti_circle_out_points.setPoint(
01166 3, m_effect_bounds.width() >> 1, m_effect_bounds.height() >> 1);
01167
01168 m_effect_delta2_y = sqrtf(sq(m_effect_bounds.width()) * 1.0f +
01169 sq(m_effect_bounds.height()) * 0.5f);
01170 m_effect_i = (random() & 0xf) + 2;
01171 m_effect_multi_circle_out_delta_alpha = M_PI * 2 / m_effect_i;
01172 m_effect_alpha = m_effect_multi_circle_out_delta_alpha;
01173 m_effect_framerate = 10 * m_effect_i;
01174 m_effect_delta2_x = M_PI / 32;
01175 }
01176
01177 if (m_effect_alpha < 0)
01178 {
01179 m_effect_painter->end();
01180
01181 m_slideshow_frame_delay_state = -1;
01182 m_effect_running = false;
01183 update();
01184 return;
01185 }
01186
01187 for (alpha = m_effect_alpha, i = m_effect_i; i >= 0;
01188 i--, alpha += m_effect_multi_circle_out_delta_alpha)
01189 {
01190 x = (m_effect_bounds.width() >> 1) + (int)(m_effect_delta2_y * cos(-alpha));
01191 y = (m_effect_bounds.height() >> 1) + (int)(m_effect_delta2_y * sin(-alpha));
01192
01193 m_effect_bounds.moveTopLeft(
01194 QPoint((m_effect_bounds.width() >> 1) +
01195 (int)(m_effect_delta2_y * cos(-alpha + m_effect_delta2_x)),
01196 (m_effect_bounds.height() >> 1) +
01197 (int)(m_effect_delta2_y * sin(-alpha + m_effect_delta2_x))));
01198
01199 m_effect_milti_circle_out_points.setPoint(1, x, y);
01200 m_effect_milti_circle_out_points.setPoint(2, m_effect_bounds.x(), m_effect_bounds.y());
01201
01202 m_effect_painter->drawPolygon(m_effect_milti_circle_out_points);
01203 }
01204
01205 m_effect_alpha -= m_effect_delta2_x;
01206
01207 m_slideshow_frame_delay_state = m_effect_framerate;
01208 m_effect_current_frame = 1;
01209 }
01210
01211 void SingleView::EffectSpiralIn(void)
01212 {
01213 if (m_effect_current_frame == 0)
01214 {
01215 StartPainter();
01216 m_effect_delta0 = QPoint(width() >> 3, 0);
01217 m_effect_delta1 = QPoint(width() >> 3, height() >> 3);
01218 m_effect_i = 0;
01219 m_effect_j = 16 * 16;
01220 m_effect_bounds = QRect(QPoint(0,0), size());
01221 m_effect_spiral_tmp0 = QPoint(0, m_effect_delta1.y());
01222 m_effect_spiral_tmp1 = QPoint(m_effect_bounds.width() - m_effect_delta1.x(),
01223 m_effect_bounds.height() - m_effect_delta1.y());
01224 }
01225
01226 if (m_effect_i == 0 && m_effect_spiral_tmp0.x() >= m_effect_spiral_tmp1.x())
01227 {
01228 m_effect_painter->end();
01229
01230 m_slideshow_frame_delay_state = -1;
01231 m_effect_running = false;
01232 update();
01233 return;
01234 }
01235
01236 if (m_effect_i == 0 && m_effect_bounds.x() >= m_effect_spiral_tmp1.x())
01237 {
01238
01239 m_effect_i = 1;
01240 m_effect_delta0 = QPoint(0, m_effect_delta1.y());
01241 m_effect_spiral_tmp1.setX(m_effect_spiral_tmp1.x() - m_effect_delta1.x());
01242 }
01243 else if (m_effect_i == 1 && m_effect_bounds.y() >= m_effect_spiral_tmp1.y())
01244 {
01245
01246 m_effect_i = 2;
01247 m_effect_delta0 = QPoint(-m_effect_delta1.x(), 0);
01248 m_effect_spiral_tmp1.setY(m_effect_spiral_tmp1.y() - m_effect_delta1.y());
01249 }
01250 else if (m_effect_i == 2 && m_effect_bounds.x() <= m_effect_spiral_tmp0.x())
01251 {
01252
01253 m_effect_i = 3;
01254 m_effect_delta0 = QPoint(0, -m_effect_delta1.y());
01255 m_effect_spiral_tmp0.setX(m_effect_spiral_tmp0.x() + m_effect_delta1.x());
01256 }
01257 else if (m_effect_i == 3 && m_effect_bounds.y() <= m_effect_spiral_tmp0.y())
01258 {
01259
01260 m_effect_i = 0;
01261 m_effect_delta0 = QPoint(m_effect_delta1.x(), 0);
01262 m_effect_spiral_tmp0.setY(m_effect_spiral_tmp0.y() + m_effect_delta1.y());
01263 }
01264
01265 QPainter p(this);
01266 p.drawPixmap(m_effect_bounds.x(), m_effect_bounds.y(), *m_effect_pixmap,
01267 m_effect_bounds.x(), m_effect_bounds.y(),
01268 m_effect_delta1.x(), m_effect_delta1.y());
01269 p.end();
01270
01271 m_effect_bounds.moveTopLeft(m_effect_bounds.topLeft() + m_effect_delta0);
01272 m_effect_j--;
01273
01274 m_slideshow_frame_delay_state = 8;
01275 m_effect_current_frame = 1;
01276 }
01277
01278 void SingleView::EffectCircleOut(void)
01279 {
01280 if (m_effect_current_frame == 0)
01281 {
01282 StartPainter();
01283 m_effect_bounds = QRect(QPoint(width(), height() >> 1), size());
01284 m_effect_alpha = 2 * M_PI;
01285
01286 m_effect_circle_out_points.setPoint(
01287 0, m_effect_bounds.width() >> 1, m_effect_bounds.height() >> 1);
01288 m_effect_circle_out_points.setPoint(
01289 3, m_effect_bounds.width() >> 1, m_effect_bounds.height() >> 1);
01290
01291 m_effect_delta2_x = M_PI / 16;
01292 m_effect_delta2_y = sqrtf(sq(m_effect_bounds.width()) * 1.0f +
01293 sq(m_effect_bounds.height()) * 0.5f);
01294 }
01295
01296 if (m_effect_alpha < 0)
01297 {
01298 m_effect_painter->end();
01299
01300 m_slideshow_frame_delay_state = -1;
01301 m_effect_running = false;
01302 update();
01303 return;
01304 }
01305
01306 QPoint tmp = m_effect_bounds.topLeft();
01307
01308 m_effect_bounds.moveTopLeft(
01309 QPoint((m_effect_bounds.width() >> 1) +
01310 (int)(m_effect_delta2_y * cos(m_effect_alpha)),
01311 (m_effect_bounds.height() >> 1) +
01312 (int)(m_effect_delta2_y * sin(m_effect_alpha))));
01313
01314 m_effect_alpha -= m_effect_delta2_x;
01315
01316 m_effect_circle_out_points.setPoint(1, tmp);
01317 m_effect_circle_out_points.setPoint(2, m_effect_bounds.topLeft());
01318
01319 m_effect_painter->drawPolygon(m_effect_circle_out_points);
01320
01321 m_slideshow_frame_delay_state = 20;
01322 m_effect_current_frame = 1;
01323 }
01324
01325 void SingleView::EffectBlobs(void)
01326 {
01327 int r;
01328
01329 if (m_effect_current_frame == 0)
01330 {
01331 StartPainter();
01332 m_effect_alpha = M_PI * 2;
01333 m_effect_bounds.setSize(size());
01334 m_effect_i = 150;
01335 }
01336
01337 if (m_effect_i <= 0)
01338 {
01339 m_effect_painter->end();
01340
01341 m_slideshow_frame_delay_state = -1;
01342 m_effect_running = false;
01343 update();
01344 return;
01345 }
01346
01347 m_effect_bounds.setTopLeft(QPoint(random() % m_effect_bounds.width(),
01348 random() % m_effect_bounds.height()));
01349
01350 r = (random() % 200) + 50;
01351
01352 m_effect_painter->drawEllipse(m_effect_bounds.x() - r,
01353 m_effect_bounds.y() - r, r, r);
01354 m_effect_i--;
01355
01356 m_slideshow_frame_delay_state = 10;
01357 m_effect_current_frame = 1;
01358 }
01359
01360 void SingleView::EffectNoise(void)
01361 {
01362 int x, y, i, w, h, fact, sz;
01363
01364 fact = (random() % 3) + 1;
01365
01366 w = width() >> fact;
01367 h = height() >> fact;
01368 sz = 1 << fact;
01369
01370 QPainter p(this);
01371 for (i = (w * h) << 1; i > 0; i--)
01372 {
01373 x = (random() % w) << fact;
01374 y = (random() % h) << fact;
01375 p.drawPixmap(QPoint(x, y), *m_effect_pixmap, QRect(x, y, sz, sz));
01376 }
01377 p.end();
01378
01379 m_slideshow_frame_delay_state = -1;
01380 m_effect_running = false;
01381 update();
01382 return;
01383 }
01384
01385 void SingleView::SlideTimeout(void)
01386 {
01387 bool wasMovie = false, isMovie = false;
01388
01389 if (m_caption_timer->isActive())
01390 {
01391 m_caption_timer->stop();
01392 }
01393
01394 if (m_effect_method.isEmpty())
01395 {
01396 LOG(VB_GENERAL, LOG_ERR, LOC + "No transition method");
01397 return;
01398 }
01399
01400 if (!m_effect_running)
01401 {
01402 if (m_slideshow_frame_delay_state == -1)
01403 {
01404
01405
01406 m_slideshow_frame_delay_state = m_slideshow_frame_delay * 1000;
01407 m_effect_current_frame = 0;
01408 }
01409 else
01410 {
01411
01412
01413 if (m_slideshow_running)
01414 {
01415 if (m_effect_random)
01416 m_effect_method = GetRandomEffect();
01417
01418 DisplayNext(false, false);
01419
01420 wasMovie = m_movieState > 0;
01421 Load();
01422 isMovie = m_movieState > 0;
01423
01424
01425 if (wasMovie || isMovie)
01426 {
01427 m_slideshow_frame_delay_state = 1;
01428 }
01429 else
01430 {
01431 CreateEffectPixmap();
01432 m_effect_running = true;
01433 m_slideshow_frame_delay_state = 10;
01434 m_effect_current_frame = 0;
01435 }
01436 }
01437 m_info_show_short = false;
01438 }
01439 }
01440
01441 update();
01442
01443 if (m_slideshow_running)
01444 {
01445 m_slideshow_timer->stop();
01446 m_slideshow_timer->setSingleShot(true);
01447 m_slideshow_timer->start(m_slideshow_frame_delay_state);
01448
01449
01450
01451 if (wasMovie || isMovie)
01452 {
01453 m_slideshow_frame_delay_state = -1;
01454 }
01455 }
01456 }
01457
01458 void SingleView::CaptionTimeout(void)
01459 {
01460 m_caption_timer->stop();
01461 m_caption_remove = true;
01462 update();
01463 }