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

Files at this revision

API Documentation at this revision

Comitter:
MikamiUitOpen
Date:
Thu Mar 23 02:58:48 2017 +0000
Parent:
16:299cc1052baa
Commit message:
18

Changed in this revision

FileSelectorWav.cpp Show annotated file Show diff for this revision Revisions of this file
FileSelectorWav.hpp Show annotated file Show diff for this revision Revisions of this file
SD_PlayerSkeleton.cpp Show annotated file Show diff for this revision Revisions of this file
SD_PlayerSkeleton.hpp Show annotated file Show diff for this revision Revisions of this file
--- 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;
     }
 }
+
--- a/FileSelectorWav.hpp	Wed Mar 22 09:20:13 2017 +0000
+++ b/FileSelectorWav.hpp	Thu Mar 23 02:58:48 2017 +0000
@@ -2,7 +2,7 @@
 //  FileSelector class ---- Header ----
 //      SD カード内のファイル名の一覧を表示し,ファイルを選択する
 //
-//  2017/03/17, Copyright (c) 2017 MIKAMI, Naoki
+//  2017/03/23, Copyright (c) 2017 MIKAMI, Naoki
 //--------------------------------------------------------------
 
 #ifndef FILE_SELECTOR_HPP
@@ -23,6 +23,7 @@
 
         virtual ~FileSelector();
         
+        // ファイルの一覧表を作る.WAV ファイルが存在しない場合は false を返す
         bool CreateTable();
 
         // ファイルを選択する
@@ -53,6 +54,8 @@
         LCD_DISCO_F746NG &lcd_;
         SD_WavReader &sdReader_;
         int page_;      // 現在のページ,最初のページは 1
+        int nOld_;      // ページ内で以前選択したファイルのインデックス
+        int kOld_;      // 以前選択したファイルのインデックス
         int maxPage_;
         int fileCount_;
 
@@ -65,3 +68,4 @@
     };
 }
 #endif  // FILE_SELECTOR_HPP
+
--- a/SD_PlayerSkeleton.cpp	Wed Mar 22 09:20:13 2017 +0000
+++ b/SD_PlayerSkeleton.cpp	Thu Mar 23 02:58:48 2017 +0000
@@ -1,7 +1,7 @@
 //--------------------------------------------------------------
 //  SD プレーヤー用抽象基底クラス
 //
-//  2017/03/21, Copyright (c) 2017 MIKAMI, Naoki
+//  2017/03/22, Copyright (c) 2017 MIKAMI, Naoki
 //--------------------------------------------------------------
 
 #include "SD_PlayerSkeleton.hpp"
--- a/SD_PlayerSkeleton.hpp	Wed Mar 22 09:20:13 2017 +0000
+++ b/SD_PlayerSkeleton.hpp	Thu Mar 23 02:58:48 2017 +0000
@@ -1,7 +1,7 @@
 //--------------------------------------------------------------
 //  SD プレーヤー用抽象基底クラス(ヘッダ)
 //
-//  2017/03/21, Copyright (c) 2016 MIKAMI, Naoki
+//  2017/03/22, Copyright (c) 2016 MIKAMI, Naoki
 //--------------------------------------------------------------
 
 #ifndef F746_SD_PLAYER_SKELETON_HPP