Release 1.01

Dependents:   mbed_escm2000

Revision:
4:7226c43320b5
Parent:
3:8395f7ab6d3e
Child:
5:9f4d4f8ffc00
--- a/DisplayCodesMenu.cpp	Thu Jul 25 00:42:49 2019 +0000
+++ b/DisplayCodesMenu.cpp	Thu Sep 12 11:27:50 2019 +0000
@@ -1,85 +1,235 @@
 #include "mbed.h"
 #include "DisplayCodesMenu.h"
 #include "TimeUtilities.h"
+#include "ESCMControlApp.h"
 
 
-DisplayCodesMenu::DisplayCodesMenu(string id): Menu(id)
+DisplayCodesMenu::DisplayCodesMenu(char* id): Menu(id)
 {
-    
+
+    active_selection = 0;
+    row=0;
+    column=0;
+    update_needed=1;
+    current_index=0;
+    current_line = 1;
+    top = 0;
+
+}
+
+
+
+void DisplayCodesMenu::init()
+{
     active_selection = 0;
     row=0;
     column=0;
     update_needed=1;
-    current_line=0;
-    
+    current_index= 0;
+    current_line = 1;
+    top = 0;
 }
-   
+
+
 void DisplayCodesMenu::display(LCD * lcd)
 {
-   
+    static int lastPos  = 0;
+    static int lastSize = 0;
+    
+    int update_page = 0;
     char buf[40];
+    
+    //displayCurrentTime(lcd);
 
-    if (update_needed)
+    if(escmEventLog.head_ != lastPos ) {
+        
+        current_index = 0;
+        top = current_index;
+        bottom = top + 2;
+        
+        lastPos  = escmEventLog.head_;
+        lastSize = escmEventLog.size();
+        update_needed=1;
+    }
+    
+
+    // paging
+    if (current_index < top )
+    {
+        top    = current_index ;
+        bottom = current_index + 2;
+        update_page = 1;
+        update_needed=1;
+    }
+    else if (current_index > bottom)
+    {
+        top    = current_index - 2;
+        bottom = current_index;
+        update_page = 1;
+        update_needed=1;
+    } 
+    else
     {
         
-        lcd->cls();
-        lcd->writeLine(0,"ID | ## | Time");   
-#if 1      
-        for(int i=0;i<3;i++)
-        {
-            int index = (current_line+i);
-            int line  = (1+i);
-            if (index < escmEventLog.size() )
-            {
-                sprintf(buf,"%02d | %02d | %-16s", 
-                    index + 1,
-                    escmEventLog.events[index].address,
-                    escmEventLog.events[index].timeStr);   
-                      
-            } else {
-                sprintf(buf,"%s | %s | %-16s",
-                    "--",
-                    "--",
-                    "- N/A -");   
-            }  
-            
-            lcd->writeLine(line,buf);     
-        
-        }
-        update_needed=0;
-#endif
     }
     
+
+    if (update_needed) {
+        
+        lock();
+        
+        switch (active_selection ) {
+            case 1:
+                lcd->cls();
+                lcd->locate(1,0);
+                lcd->printf("Are you sure you want to erase");
+                lcd->locate(2,0);
+                lcd->printf("all events (Press Mode)?");
+                update_needed = 0;
+                break;
+            case 2:
+                lcd->cls();
+                lcd->locate(1,0);
+                lcd->printf("Deleting Events...");
+                erase_log     = 0;
+                escmEventLog.reset();
+                escmEventLog.save();
+                update_needed = 1;
+                active_selection = 0;
+                current_index  = 0;
+                break;
+
+            default:
+
+                lcd->cls();
+                lcd->locate(0,0);
+#if 1
+                lcd->printf(" ID | Port | Unit | Time");
+#else
+                lcd->locate(0,0);
+                lcd->printf("size= %d, index=%d, %d, %d %d", escmEventLog.size(), current_index, current_line, top, bottom);
+#endif
+
+                // update display
+                for(int i=0; i<3; i++) {
+
+                    int index = top + i;
+                    int line  = (1+i);
+
+                    int selected = current_index == index;
+
+
+                    ESCM_Event *event = escmEventLog.index (index) ;
+
+                    if (event != NULL && index < escmEventLog.size() ) {
+                        sprintf(buf,"%02d | %02d   | %02d   | %02d:%02d:%02d %02d/%02d/%04d",
+                                index + 1,
+                                event->port,
+                                event->address,
+                                event->hours,
+                                event->mins,
+                                event->secs,
+                                event->month,
+                                event->day,
+                                event->year
+                               );
+
+                    } else {
+                        sprintf(buf,"%-s | %-s   | %-s   | %-s",
+                                "--",
+                                "--",
+                                "--",
+                                "- N/A -");
+                    }
+                    
+                    if(selected) {
+                        lcd->locate(line,0);
+                        lcd->printf(">%-39s",buf);
+                    } else {
+                        lcd->locate(line,0);
+                        lcd->printf(" %-39s",buf);
+                    }
+
+                    //lcd->locate(line,2);
+                    //lcd->printf(buf);
+
+                }
+                update_page = 0;
+                update_needed=0;
+                break;
+        }
+        
+        unlock();
+    }
+}
+
+
+void DisplayCodesMenu::pressSet()
+{
+    switch(active_selection) {
+
+        case 0: { // normal
+        /*
+            ESCM_Event *event = escmEventLog.index(current_index);
+            if (event!=NULL)
+            {
+                ESCMControlApp::say( "%s is open", 
+                    addressMap.getDescription(event->address));
+            }
+        */
+            update_needed = 0;
+            break;
+        }
+        case 1: // press yes
+            active_selection = 2;
+            update_needed = 1;
+            break;
+        default:
+            active_selection = 0;
+            break;
+    }
 }
 
 void DisplayCodesMenu::pressMode()
-{   
+{
 
-}
-        
-void DisplayCodesMenu::pressSet()
-{
-    
+    switch(active_selection) {
+        case 0: // normal
+            active_selection = 1;
+            update_needed = 1;
+            break;
+        default:
+            active_selection = 0;
+            update_needed = 1;
+            break;
+    }
 }
 
 void DisplayCodesMenu::pressDown()
-{    
-    printf("scroll down\n");
-    if (current_line < escmEventLog.size() ) 
-        current_line++;
-    else
-        current_line = escmEventLog.size()-1;
+{
+
+    current_line++;
+    current_index++;
+    
+    if (current_index >= escmEventLog.size() )
+        current_index = 0;
         
+    
+    if (current_line > 3 ) 
+        current_line = 3;
+    
     update_needed=1;
 }
-        
+
 void DisplayCodesMenu::pressUp()
 {
-    printf("scroll up\n");
-    if (current_line > 0) 
-        current_line--;
-    else
-        current_line = 0;
-    
-    update_needed =1;     
+    current_line--;
+    current_index--;
+    if (current_index < 0)
+        current_index = escmEventLog.size()-1;
+            
+    if (current_line < 1 ) 
+        current_line = 1;
+        
+    update_needed =1;
 }