00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include <qptrlist.h>
00023
00024
00025 #include <mythtv/mythcontext.h>
00026 #include <mythtv/lcddevice.h>
00027
00028
00029 #include "imageview.h"
00030 #include "galleryutil.h"
00031
00032 ImageView::ImageView(const ThumbList &itemList,
00033 int pos, int slideShow, int sortorder)
00034 : m_screenSize(640,480),
00035 m_wmult(1.0f),
00036 m_hmult(1.0f),
00037 m_pos(pos),
00038 m_itemList(itemList),
00039 m_movieState(0),
00040 m_zoom(1.0f),
00041
00042
00043 m_info_show(false),
00044 m_info_show_short(false),
00045
00046
00047 m_slideshow_running(false),
00048 m_slideshow_sequencing(slideShow),
00049 m_slideshow_sequencing_inc_order(sortorder),
00050 m_slideshow_sequence(NULL),
00051 m_slideshow_frame_delay(2),
00052 m_slideshow_frame_delay_state(m_slideshow_frame_delay * 1000),
00053 m_slideshow_timer(NULL),
00054
00055
00056 m_effect_running(false),
00057 m_effect_current_frame(0),
00058 m_effect_method(QString::null),
00059 m_effect_random(false)
00060 {
00061
00062 int xbase, ybase, screenwidth, screenheight;
00063 gContext->GetScreenSettings(xbase, screenwidth, m_wmult,
00064 ybase, screenheight, m_hmult);
00065 m_screenSize = QSize(screenwidth, screenheight);
00066
00067
00068
00069 bool recurse = gContext->GetNumSetting("GalleryRecursiveSlideshow", 0);
00070
00071 m_itemList.setAutoDelete(false);
00072
00073 ThumbItem *origItem = NULL;
00074 if ((uint)m_pos < m_itemList.count())
00075 origItem = m_itemList.at(m_pos);
00076
00077
00078 ThumbItem *item = m_itemList.first();
00079 while (item)
00080 {
00081 ThumbItem *next = m_itemList.next();
00082 if (item->IsDir())
00083 {
00084 if (recurse)
00085 GalleryUtil::LoadDirectory(m_itemList, item->GetPath(),
00086 sortorder, recurse, NULL, NULL);
00087 m_itemList.remove(item);
00088 }
00089 item = next;
00090 }
00091
00092
00093
00094
00095 if (origItem)
00096 m_pos = m_itemList.find(origItem);
00097
00098 m_pos = (!origItem || (m_pos == -1)) ? 0 : m_pos;
00099
00100
00101
00102 m_slideshow_frame_delay = gContext->GetNumSetting("SlideshowDelay", 0);
00103 m_slideshow_frame_delay = (!m_slideshow_frame_delay) ?
00104 2 : m_slideshow_frame_delay;
00105 m_slideshow_frame_delay_state = m_slideshow_frame_delay * 1000;
00106
00107
00108
00109 if (slideShow > 1)
00110 {
00111 m_slideshow_sequence = new SequenceShuffle(m_itemList.count());
00112 m_slideshow_mode = "Random Slideshow";
00113 m_pos = 0;
00114 }
00115 else
00116 {
00117 m_slideshow_sequence = new SequenceInc(m_itemList.count());
00118 m_slideshow_mode = "Slideshow";
00119 }
00120
00121 m_pos = m_slideshow_sequence->index(m_pos);
00122 }
00123
00124 ImageView::~ImageView()
00125 {
00126 UpdateLCD(NULL);
00127
00128 if (m_slideshow_sequence)
00129 {
00130 delete m_slideshow_sequence;
00131 m_slideshow_sequence = NULL;
00132 }
00133 }
00134
00135 QString ImageView::GetRandomEffect(void) const
00136 {
00137 QMap<QString,QString> tmpMap = m_effect_map;
00138 tmpMap.remove("none");
00139 QStringList t = tmpMap.keys();
00140 int i = (int) ( (float)(t.count()) * rand() / (RAND_MAX + 1.0f) );
00141 return tmpMap[t[i]];
00142 }
00143
00144 void ImageView::UpdateLCD(const ThumbItem *item)
00145 {
00146 LCD *lcd = LCD::Get();
00147 if (!lcd)
00148 return;
00149
00150 if (!item)
00151 {
00152 lcd->switchToTime();
00153 return;
00154 }
00155
00156 QString name = item->GetName();
00157 QString desc = QString::number(m_pos + 1) + " / " +
00158 QString::number(m_itemList.count());
00159
00160 QPtrList<LCDTextItem> textItems;
00161 textItems.setAutoDelete(true);
00162 textItems.append(new LCDTextItem(
00163 1, ALIGN_CENTERED, name, "Generic", true));
00164 textItems.append(new LCDTextItem(
00165 2, ALIGN_CENTERED, desc, "Generic", false));
00166
00167 lcd->switchToGeneric(&textItems);
00168 }
00169
00170 QString ImageView::GetDescriptionStatus(void) const
00171 {
00172 if (m_slideshow_running)
00173 return " [" + QObject::tr(m_slideshow_mode) + "]";
00174
00175 return "";
00176 }