From b175c364318673ef5fa6ac040d6144a45938928a Mon Sep 17 00:00:00 2001 From: John Maguire Date: Mon, 16 May 2011 15:08:17 +0000 Subject: [PATCH] Add file type filtering to File view. Fixes issue #361 Thanks to: tyler.s.rhodes@gmail.com --- data/data.qrc | 2 ++ data/icons/22x22/audio-x-disabled.png | Bin 0 -> 3091 bytes data/icons/22x22/audio-x-generic.png | Bin 0 -> 625 bytes src/widgets/fileview.cpp | 24 ++++++++++++++++++++++++ src/widgets/fileview.h | 3 +++ src/widgets/fileview.ui | 19 +++++++++++++++++++ 6 files changed, 48 insertions(+) create mode 100644 data/icons/22x22/audio-x-disabled.png create mode 100644 data/icons/22x22/audio-x-generic.png diff --git a/data/data.qrc b/data/data.qrc index 0560b2967..c80ab6e90 100644 --- a/data/data.qrc +++ b/data/data.qrc @@ -323,5 +323,7 @@ icons/22x22/task-complete.png icons/22x22/task-reject.png schema/schema-34.sql + icons/22x22/audio-x-generic.png + icons/22x22/audio-x-disabled.png diff --git a/data/icons/22x22/audio-x-disabled.png b/data/icons/22x22/audio-x-disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..ba7bed67330b8fdc61eef19412c13cb7ed18e3fd GIT binary patch literal 3091 zcmV+u4D9oXP)EX>4Tx0C?J+Q+HUC_ZB|i_hk=OLfG)Jmu!ImA|tE_ z$Pihg5Rw34gb)%y#f69pRumNxoJdu~g4GI0orvO~D7a@qiilc^Ra`jkAKa(4eR}Wh z?fcjJyyu+f{LXpL4}cL8CXwc%Y5+M>g*-agACFH+#L2yY0u@N$1RxOR%fe>`#Q*^C z19^CUbg)1C0k3ZW0swH;E+i7i;s1lWP$pLZAdvvzA`<5d0gzGv$SzdK6adH=0I*ZD zWC{S3003-xd_p1ssto|_^hrJi0NAOM+!p}Yq8zCR0F40vnJ7mj0zkU}U{!%qECRs7 z0HCZuA}$2Lt^t5qwlYTofV~9(c8*w(4?ti5fSE!p%m5%b0suoE6U_r4Oaq`W(!b!T zUvP!ENC5!A%azTSOVTqGxRuZvck=My;vwR~Y_URN7by^C3FIQ2mzyIKNaq7g&I|wm z8u`(|{y0C7=jP<$=4R(?@ASo@{%i1WB0eGU-~POe0t5gMPS5Y!U*+Z218~Oyuywy{ zsapWrRsd+<`CT*H37}dE(0cicc{uz)9-g64$UGe!3JVMEC1RnyFyo6p|1;rl;ER6t z{6HT5+j{T-ahgDxt-zy${c&M#cCJ#6=gR~_F>d$gBmT#QfBlXr(c(0*Tr3re@mPtt zP$EsodAU-NL?OwQ;u7h9GVvdl{RxwI4FIf$Pry#L2er#=z<%xl0*ek<(slqqe)BDi z8VivC5N9+pdG`PSlfU_oKq~;2Moa!tiTSO z!5zH77Xo1hL_iEAz&sE_2IPPo3ZWR5K^auQI@koYumc*P5t`u;w81er4d>tzT!HIw z7Y1M$p28Tsh6w~g$Osc*Av%Z=Vvg7%&IlKojszlMNHmgwq#)^t6j36@$a16tsX}Uz zT}UJHEpik&ja)$bklV;0GK&0)yhkyVfwEBp)B<%txu_o+ipHRG(R4HqU4WLNYtb6C z9zB4zqNmYI=yh}eeTt4_fYC7yW{lZkT#ScBV2M~7CdU?I?5=ix(HVZgM=}{CnA%mPqZa^68Xe5gFH?u96Et<2CC!@_L(8Nsqt(!wX=iEoXfNq>x(VHb9z~bXm(pwK2kGbO zgYq4YG!XMxcgBqf}$J#u<$v7REAV@mNCEa#jQDENhreVq3EL>`ZnA`x|yI zdrVV9bE;;nW|3x{=5fsd4#u(I@HyF>O3oq94bFQl11&!-vDRv>X03j$H`;pIzS?5# za_tuF>)P*iaGgM%ES>c_Z94aL3A#4AQM!e?+jYlFJ5+D zSzi0S9#6BJCZ5(XZOGfiTj0IRdtf>~J!SgN=>tB-J_4V5pNGDtz9Qc}z9W9tewls; z{GR(e`pf-~_`l(K@)q$<1z-We0p$U`ff|9c18V~x1epY-2Q>wa1-k|>3_cY?3<(Wc zA99m#z!&lx`C~KOXDpi070L*m6G6C?@kiR8rC#65}Qa{}jVnlqf_npBo_W3J`gqPZ95>CVfZcRX1& zS&)1jiOPpx423?lIEROmG(H@JAFg? zXogQlb;dIZPf{y+kr|S?BlAsGMAqJ{&)IR=Ejg5&l$@hd4QZCNE7vf$D7Q~$D=U)? zNn}(WA6du22pZOfRS_cv~1-c(_QtNLti0-)8>m`6CO0 z7JR*suu!$(^sg%jfZm#rNxnmV!m1I@#YM0epR(~oNm0zrItf;Q|utvD%;#W>z z)qM4NZQ9!2O1H}G>qzUQ>u#*~S--DJy=p<#(1!30tsC);y-IHSJr>wyfLop*ExTdYyk=%U1oZtGB+{Cfe4&-FJKQ4uc&PJKpb5^_C@dOYIJXG+^@gCvI%WcHjN%gI&kHi zfN$EH?V5MBa9S!3!a?Q1C*P)gd*e{(q0YnH!_D8Bf4B7r>qvPk(mKC&tSzH$pgp0z z@92!9ogH2sN4~fJe(y2kV|B+hk5`_cohUu=`Q(C=R&z?UQbnZ;IU-!xL-sg{9@Vs#JBKKn3CAUkhJ+3`ResKNaNUvLO>t*-L?N>am zbo5Q@JJIjcfBI^`)pOVQ*DhV3dA;w(>>IakCfyvkCA#(acJ}QTcM9%I++BK)c(44v z+WqPW`VZ=VwEnSWz-{38V8CF{!&wjS4he^z{*?dIhvCvk%tzHDMk9@nogW_?4H~`j zWX_Y}r?RIL&&qyQ|9R_ktLNYS;`>X_Sp3-V3;B!BzpiFsp8kgSs@k67l(MB808Dq2B*;2d* z*uW#D52d2{9$*iNWVlbP<)*sAE)EWobV3|vV_lt#?rp6g!y-8m6YwPA=@}`u>Y$mGvW)X-8tJJ!PuaZd>QS^zUJ#QD#kc#iSkrPx_QQ z!P(8&&LSBR#-S8?TB}!n{vJ=x9g^>Xom9=WASCBz~|x*bt_FCYRXK#)YB4_3w-Mn^UUTRB(PzZAuU# hgn7W&DcX9R~5Ttt%5me~ppcT}#YVz8qjZN~Bym#-rE>U7AYSJ!(2M*lf+|NDd za0M;If%H8MAcT;nWxfi+>ebBCTOYToHCllIu3wwr#Mp?nZ~x#)TR6}5jL&rL2pq8l zQib&F?lqHr$z(jLXLkgaD#Q;YejrKq_eC*`D~B)K9o{yqq$2PofiIDPVqh>8$FQHI zE>6X^*|B1EbyY6Dd0Sn{xq;<4qAL;K8x5nc_fJfpK7M&B(jF{B^0_rrq0bibg?HJd zFJ4Dyx6|F*bJP&xdAaP=+JqILMP_dDMOgAitF_9*+~?)>&HQ>%m}1UU909Oeg|*f{ z&!6U}s=&>9{t_*B{I~HR{)gc$zuUp|{c{LC1LBxz30t61k|5L}8^v0C@S*gB$ym&u zPM;ZOcxXU45sRv?SSyt6#mpKRce6cM8{wTx<0E2MBF5LeM=oE+-S8+?e0t(h5}nSE z(m3D&@=ve;x&iXvDwJyqcf+IT`4l}LAp`)`ijOb|fqtM=&my23VYBIxj`-lHvFsMd z!cY@+Y++djmSNxrJ}d6J&SqWwLiSN{>E%MbTL}a}*a(ZJ2_isO>eP+%kwogYFs&g3 zmewFZYUO{Zth}Ff7aq?8mHH}5fZx1|X1FozdRh&WsfG@N-`wRp((&V8Br+?~00000 LNkvXXu0mjffd?yE literal 0 HcmV?d00001 diff --git a/src/widgets/fileview.cpp b/src/widgets/fileview.cpp index 1f5caaacd..d230607b5 100644 --- a/src/widgets/fileview.cpp +++ b/src/widgets/fileview.cpp @@ -21,6 +21,7 @@ #include "core/filesystemmusicstorage.h" #include "core/mimedata.h" #include "ui/iconloader.h" +#include "ui/mainwindow.h" // for filter information #include "ui/organiseerrordialog.h" #include @@ -43,12 +44,16 @@ FileView::FileView(QWidget* parent) ui_->forward->setIcon(IconLoader::Load("go-next")); ui_->home->setIcon(IconLoader::Load("go-home")); ui_->up->setIcon(IconLoader::Load("go-up")); + QIcon toggle_icon(IconLoader::Load("audio-x-disabled")); + toggle_icon.addPixmap(IconLoader::Load("audio-x-generic").pixmap(22), QIcon::Normal, QIcon::On); + ui_->toggle_filter->setIcon(toggle_icon); connect(ui_->back, SIGNAL(clicked()), undo_stack_, SLOT(undo())); connect(ui_->forward, SIGNAL(clicked()), undo_stack_, SLOT(redo())); connect(ui_->home, SIGNAL(clicked()), SLOT(FileHome())); connect(ui_->up, SIGNAL(clicked()), SLOT(FileUp())); connect(ui_->path, SIGNAL(textChanged(QString)), SLOT(ChangeFilePath(QString))); + connect(ui_->toggle_filter, SIGNAL(clicked()), SLOT(ToggleFilter())); connect(undo_stack_, SIGNAL(canUndoChanged(bool)), ui_->back, SLOT(setEnabled(bool))); connect(undo_stack_, SIGNAL(canRedoChanged(bool)), ui_->forward, SLOT(setEnabled(bool))); @@ -60,6 +65,12 @@ FileView::FileView(QWidget* parent) connect(ui_->list, SIGNAL(MoveToLibrary(QList)), SIGNAL(MoveToLibrary(QList))); connect(ui_->list, SIGNAL(CopyToDevice(QList)), SIGNAL(CopyToDevice(QList))); connect(ui_->list, SIGNAL(Delete(QStringList)), SLOT(Delete(QStringList))); + + QString filter(MainWindow::kMusicFilterSpec); + // filter list strings are formatted as such: 'text (filters separated by spaces)' + filter.replace(QRegExp(".*[(]"), ""); + filter.replace(QRegExp("[)].*"), ""); + filter_list_ = filter.split(" "); } FileView::~FileView() { @@ -99,6 +110,14 @@ void FileView::FileHome() { ChangeFilePath(QDir::homePath()); } +void FileView::ToggleFilter() { + if(ui_->toggle_filter->isChecked()) { + model_->setNameFilters(filter_list_); + } else { + model_->setNameFilters(QStringList("*")); + } +} + void FileView::ChangeFilePath(const QString& new_path_native) { QString new_path = QDir::fromNativeSeparators(new_path_native); @@ -200,6 +219,11 @@ void FileView::showEvent(QShowEvent* e) { return; model_ = new QFileSystemModel(this); + + model_->setNameFilters(QStringList("*")); + // if an item fails the filter, hide it + model_->setNameFilterDisables(false); + ui_->list->setModel(model_); ChangeFilePathWithoutUndo(QDir::homePath()); diff --git a/src/widgets/fileview.h b/src/widgets/fileview.h index 1fb08da43..011857dec 100644 --- a/src/widgets/fileview.h +++ b/src/widgets/fileview.h @@ -59,6 +59,7 @@ class FileView : public QWidget { private slots: void FileUp(); void FileHome(); + void ToggleFilter(); void ChangeFilePath(const QString& new_path); void ItemActivated(const QModelIndex& index); void ItemDoubleClick(const QModelIndex& index); @@ -102,6 +103,8 @@ class FileView : public QWidget { boost::shared_ptr storage_; QString lazy_set_path_; + + QStringList filter_list_; }; #endif // FILEVIEW_H diff --git a/src/widgets/fileview.ui b/src/widgets/fileview.ui index 935a3be9e..bb36ea984 100644 --- a/src/widgets/fileview.ui +++ b/src/widgets/fileview.ui @@ -86,6 +86,25 @@ + + + + true + + + + 16 + 16 + + + + true + + + false + + +