00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 using namespace std;
00019
00020
00021 #include <QApplication>
00022 #include <QEvent>
00023 #include <QList>
00024
00025
00026 #include <mythmiscutil.h>
00027 #include <mythdbcon.h>
00028 #include <mythuibuttonlist.h>
00029 #include <mythcontext.h>
00030 #include <mythlogging.h>
00031 #include <mthread.h>
00032
00033
00034 #include "galleryfilterdlg.h"
00035 #include "galleryfilter.h"
00036
00037 #define LOC QString("GalleryFilterDlg:")
00038
00039 class FilterScanThread : public MThread
00040 {
00041 public:
00042 FilterScanThread(const QString& dir, const GalleryFilter& flt,
00043 int *dirCount, int *imageCount, int *movieCount);
00044 virtual void run();
00045
00046 private:
00047 GalleryFilter m_filter;
00048 QString m_dir;
00049 int *m_dirCount;
00050 int *m_imgCount;
00051 int *m_movCount;
00052 };
00053
00054 FilterScanThread::FilterScanThread(const QString& dir, const GalleryFilter& flt,
00055 int *dirCount, int *imageCount,
00056 int *movieCount) :
00057 MThread("FilterScan"), m_filter(flt), m_dir(dir), m_dirCount(dirCount),
00058 m_imgCount(imageCount), m_movCount(movieCount)
00059 {
00060 }
00061
00062 void FilterScanThread::run()
00063 {
00064 RunProlog();
00065
00066 GalleryFilter::TestFilter(m_dir, m_filter, m_dirCount, m_imgCount,
00067 m_movCount);
00068
00069 RunEpilog();
00070 }
00071
00072 GalleryFilterDialog::GalleryFilterDialog(MythScreenStack *parent, QString name,
00073 GalleryFilter *filter)
00074 : MythScreenType(parent, name),
00075 m_dirFilter(NULL), m_typeFilter(NULL), m_numImagesText(NULL),
00076 m_sortList(NULL), m_checkButton(NULL), m_saveButton(NULL),
00077 m_doneButton(NULL)
00078 {
00079 m_settingsOriginal = filter;
00080 m_settingsOriginal->dumpFilter("GalleryFilterDialog:ctor (original)");
00081 m_settingsTemp = new GalleryFilter();
00082 *m_settingsTemp = *filter;
00083 m_settingsTemp->dumpFilter("GalleryFilterDialog:ctor (temporary)");
00084 m_photoDir = gCoreContext->GetSetting("GalleryDir", "");
00085 m_scanning = false;
00086 }
00087
00088 GalleryFilterDialog::~GalleryFilterDialog()
00089 {
00090 delete m_settingsTemp;
00091 }
00092
00093 bool GalleryFilterDialog::Create()
00094 {
00095 if (!LoadWindowFromXML("gallery-ui.xml", "filter", this))
00096 return false;
00097
00098 bool err = false;
00099
00100 UIUtilE::Assign(this, m_dirFilter, "dirfilter_text", &err);
00101 UIUtilE::Assign(this, m_typeFilter, "typefilter_select", &err);
00102 UIUtilE::Assign(this, m_sortList, "sort_select", &err);
00103 UIUtilE::Assign(this, m_checkButton, "check_button", &err);
00104 UIUtilE::Assign(this, m_doneButton, "done_button", &err);
00105 UIUtilE::Assign(this, m_saveButton, "save_button", &err);
00106 UIUtilE::Assign(this, m_numImagesText, "numimages_text", &err);
00107
00108 if (err)
00109 {
00110 LOG(VB_GENERAL, LOG_ERR, "Cannot load screen 'filter'");
00111 return false;
00112 }
00113
00114 BuildFocusList();
00115
00116 fillWidgets();
00117
00118 connect(m_dirFilter, SIGNAL(valueChanged()), SLOT(setDirFilter()));
00119 connect(m_typeFilter, SIGNAL(itemSelected(MythUIButtonListItem*)),
00120 SLOT(setTypeFilter(MythUIButtonListItem*)));
00121 connect(m_sortList, SIGNAL(itemSelected(MythUIButtonListItem*)),
00122 SLOT(setSort(MythUIButtonListItem*)));
00123 connect(m_checkButton, SIGNAL(Clicked()), SLOT(updateFilter()));
00124 connect(m_saveButton, SIGNAL(Clicked()), SLOT(saveAsDefault()));
00125 connect(m_doneButton, SIGNAL(Clicked()), SLOT(saveAndExit()));
00126
00127 SetFocusWidget(m_dirFilter);
00128
00129 return true;
00130 }
00131
00132 void GalleryFilterDialog::fillWidgets()
00133 {
00134
00135 m_dirFilter->SetText(m_settingsTemp->getDirFilter(), false);
00136
00137
00138 new MythUIButtonListItem(m_typeFilter, QObject::tr("All"),
00139 kTypeFilterAll);
00140 new MythUIButtonListItem(m_typeFilter, QObject::tr("Images only"),
00141 kTypeFilterImagesOnly);
00142 new MythUIButtonListItem(m_typeFilter, QObject::tr("Movies only"),
00143 kTypeFilterMoviesOnly);
00144 m_typeFilter->SetValueByData(m_settingsTemp->getTypeFilter());
00145 m_numImagesText->SetText(tr("Filter result : (unknown)"));
00146
00147
00148 new MythUIButtonListItem(m_sortList, QObject::tr("Unsorted"),
00149 kSortOrderUnsorted);
00150 new MythUIButtonListItem(m_sortList, QObject::tr("Name (A-Z alpha)"),
00151 kSortOrderNameAsc);
00152 new MythUIButtonListItem(m_sortList,
00153 QObject::tr("Reverse Name (Z-A alpha)"),
00154 kSortOrderNameDesc);
00155 new MythUIButtonListItem(m_sortList, QObject::tr("Mod Time (oldest first)"),
00156 kSortOrderModTimeAsc);
00157 new MythUIButtonListItem(m_sortList,
00158 QObject::tr("Reverse Mod Time (newest first)"),
00159 kSortOrderModTimeDesc);
00160 new MythUIButtonListItem(m_sortList, QObject::tr("Extension (A-Z alpha)"),
00161 kSortOrderExtAsc);
00162 new MythUIButtonListItem(m_sortList,
00163 QObject::tr("Reverse Extension (Z-A alpha)"),
00164 kSortOrderExtDesc);
00165 new MythUIButtonListItem(m_sortList,
00166 QObject::tr("Filesize (smallest first)"),
00167 kSortOrderSizeAsc);
00168 new MythUIButtonListItem(m_sortList,
00169 QObject::tr("Reverse Filesize (largest first)"),
00170 kSortOrderSizeDesc);
00171 m_sortList->SetValueByData(m_settingsTemp->getSort());
00172 }
00173
00174 void GalleryFilterDialog::updateFilter()
00175 {
00176 if (m_scanning)
00177 {
00178 m_numImagesText->SetText(tr("-- please be patient --"));
00179 return;
00180 }
00181 else
00182 {
00183 m_scanning = true;
00184 }
00185
00186 int dir_count = 0;
00187 int img_count = 0;
00188 int mov_count = 0;
00189
00190 m_numImagesText->SetText(tr("-- scanning current filter --"));
00191
00192 FilterScanThread fltScan(m_photoDir, *m_settingsTemp, &dir_count,
00193 &img_count, &mov_count);
00194 fltScan.start();
00195
00196 while (!fltScan.isFinished())
00197 {
00198 usleep(500);
00199 qApp->processEvents();
00200 }
00201
00202 m_scanning = false;
00203
00204 if (dir_count + img_count + mov_count == 0)
00205 m_numImagesText->SetText(QString(tr("No files / folders found")));
00206 else if (dir_count > 0)
00207 {
00208 if (img_count + mov_count == 0)
00209 m_numImagesText->SetText(QString(tr(
00210 "Filter result : %1 folder(s) found but no files"))
00211 .arg(dir_count));
00212 else if (img_count == 0)
00213 m_numImagesText->SetText(QString(tr(
00214 "Filter result : %1 folder(s), %2 movie(s) found"))
00215 .arg(dir_count) .arg(mov_count));
00216 else if (mov_count == 0)
00217 m_numImagesText->SetText(QString(tr(
00218 "Filter result : %1 folder(s), %2 image(s) found"))
00219 .arg(dir_count) .arg(img_count));
00220 else
00221 m_numImagesText->SetText(QString(tr(
00222 "Filter result : %1 folder(s), %2 image(s) and %3 movie(s) "
00223 "found")) .arg(dir_count) .arg(img_count) .arg(mov_count));
00224 }
00225 else if (img_count > 0 && mov_count > 0)
00226 m_numImagesText->SetText(QString(tr(
00227 "Filter result : %1 image(s) and %2 movie(s) found"))
00228 .arg(img_count) .arg(mov_count));
00229 else if (mov_count == 0)
00230 m_numImagesText->SetText(QString(tr(
00231 "Filter result : %1 image(s) found")) .arg(img_count));
00232 else
00233 m_numImagesText->SetText(QString(tr(
00234 "Filter result : %1 movie(s) found")) .arg(mov_count));
00235 }
00236
00237 void GalleryFilterDialog::setDirFilter(void)
00238 {
00239 m_settingsTemp->setDirFilter(m_dirFilter->GetText());
00240 }
00241
00242 void GalleryFilterDialog::setTypeFilter(MythUIButtonListItem *item)
00243 {
00244 m_settingsTemp->setTypeFilter(item->GetData().toInt());
00245 }
00246
00247 void GalleryFilterDialog::setSort(MythUIButtonListItem *item)
00248 {
00249 m_settingsTemp->setSort(item->GetData().toInt());
00250 }
00251
00252 void GalleryFilterDialog::saveAsDefault()
00253 {
00254
00255 m_settingsTemp->saveAsDefault();
00256 saveAndExit();
00257 }
00258
00259 void GalleryFilterDialog::saveAndExit()
00260 {
00261 *m_settingsOriginal = *m_settingsTemp;
00262
00263 m_settingsOriginal->dumpFilter("GalleryFilterDialog::saveAndExit()");
00264
00265 if (m_settingsOriginal->getChangedState() > 0)
00266 emit filterChanged();
00267
00268 Close();
00269 }
00270
00271
00272
00273