Library for Skeleton of SD card player. SD カードプレーヤのための骨組みとして使うためのライブラリ.このライブラリを登録した際のプログラム:「F746_SD_Player_Demo」
Dependencies: SDFileSystem_Warning_Fixed
Dependents: F746_SD_Player_Demo F746_SD_VarableFilter F746_SD_GraphicEqualizer F746_MySoundMachine ... more
Diff: FileSelectorWav.cpp
- Revision:
- 17:abfd6af9a236
- Parent:
- 12:f73e11831c1c
--- a/FileSelectorWav.cpp Wed Mar 22 09:20:13 2017 +0000 +++ b/FileSelectorWav.cpp Thu Mar 23 02:58:48 2017 +0000 @@ -2,7 +2,7 @@ // FileSelector class // SD カード内のファイル名の一覧を表示し,ファイルを選択する // -// 2017/03/17, Copyright (c) 2017 MIKAMI, Naoki +// 2017/03/23, Copyright (c) 2017 MIKAMI, Naoki //-------------------------------------------------------------- #include "FileSelectorWav.hpp" @@ -16,7 +16,8 @@ fileNames_(maxFiles), fileNameLabels_(MAX_LIST_PAGE_), next_(50, 238, 64, 36, 2, (string[]){"<", ">"}, 10, 0, 2, -1, Font24), pageLabel_(210, 250, Label::LEFT, Font16), - lcd_(GuiBase::GetLcd()), sdReader_(reader), page_(1) + lcd_(GuiBase::GetLcd()), sdReader_(reader), page_(1), + nOld_(-1), kOld_(-1) { Array<string> nonString(MAX_LIST_PAGE_, ""); rect_ = new ButtonGroup(X_, Y_, W_H_, W_H_, MAX_LIST_PAGE_, @@ -38,6 +39,7 @@ for (int n=0; n<MAX_LIST_PAGE_; n++) delete fileNameLabels_[n]; } + // ファイルの一覧表を作る.WAV ファイルが存在しない場合は false を返す bool FileSelector::CreateTable() { DIR* dp = opendir("/sd"); @@ -63,16 +65,15 @@ } if (fileCount_ >= MAX_FILES_) break; } - closedir(dp); + closedir(dp); } else - return false; - if (fileCount_ == 0) return false; + return false; // SD カードが装着されていない場合 + if (fileCount_ == 0) return false; // 該当する WAV ファイルが存在しない場合 div_t m = div(fileCount_, MAX_LIST_PAGE_); maxPage_ = (m.rem == 0) ? m.quot : m.quot+1; - rect_->EraseAll(); - return true; + return true; // 該当する WAV ファイルが存在する場合 } // ファイルを選択する @@ -84,15 +85,27 @@ if (m==0) page_--; else page_++; DisplayFileList(false); - wait_ms(200); + nOld_ = -1; + wait_ms(300); } int n; if (rect_->GetTouchedNumber(n)) { int k = (page_ - 1)*MAX_LIST_PAGE_ + n; - fileNameLabels_[n]->Draw(GetFileNameNoExt(k), TOUCHED_COLOR_); + fileNameLabels_[n]->Draw(GetFileNameNoExt(k), + TOUCHED_COLOR_); fileName = fileNames_[k]; + // 同じページで以前に選択されているファイル名の色を戻す + if (nOld_ != -1) + fileNameLabels_[nOld_]->Draw(GetFileNameNoExt(kOld_), + BASE_COLOR_); + if (page_ == maxPage_) // 最後のページで余分な四角形を消去 + for (int j=fileCount_ % MAX_LIST_PAGE_ + 1; + j < MAX_LIST_PAGE_; j++) rect_->Erase(j); + nOld_ = n; + kOld_ = k; + wait_ms(300); return true; } else @@ -115,10 +128,9 @@ fileNameLabels_[n]->Draw(GetFileNameNoExt(n+(page_-1)*MAX_LIST_PAGE_)); // 前のページ,次のページの選択ボタンなどを表示する - next_.ActivateAll(); - next_.DrawAll(); - if (page_ == 1) next_.Inactivate(0); - if (page_ == maxPage_) next_.Inactivate(1); + next_.InactivateAll(); + if (page_ > 1) next_.Activate(0); // "<" 有効 + if (page_ < maxPage_) next_.Activate(1); // ">" 有効 char page[6]; sprintf(page, "%d/%d", page_, maxPage_); pageLabel_.Draw(page); @@ -143,3 +155,4 @@ return name; } } +