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