⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 menu.cpp

📁 湖北水文黄石试点集中器代码
💻 CPP
📖 第 1 页 / 共 3 页
字号:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "item.h"
#include "menu.h"
#include "lcd_api.h"
#include "keymenu.h"

#include "tcpclnt.h"
#include "gprsproc.h"
#include "macrodef.h"
#include "downcmd.h"
#include "etr232i.h"
#include "gprs.h"

#define  NumMenuItem            24


extern struct  SERVER_ID   Svr_ID;
extern KPState KeyPassState;

extern unsigned char  ManualWLBuff[50];
extern unsigned char  ManualRFBuff[50];
extern int HeartBeat, TalkTime, TaskFlg;
extern char InitWaterLevel[6];

extern  PPPGPRSState  PPPState;

unsigned int RFMultiRatio = 1;
unsigned int WLMultiRatio = 1;

MenuManager MENUManager;
// member functions of Menu class

Menu::Menu( )
{
   X = 1;
   Y = 0;

   XSize = 64;
   TxtColor = 1;		// DARKGRAY;
   BkColor = 0;		// screen background color
   ActTxtColor = 0;	// BLACK; for active item
   ActBkColor = 1;	// for active item

   NumItem = 0;
   for(int i=0; i<MaxMenuItem; i++) pItemTab[i] = NULL;
   ActItemIdx = 0;
   MenuFormat = 0;
   ScreenItem = 8;
   StartItem = 0;

   NewCnt = 0;
   OldCnt = 0;
}

int Menu::ItemX( int ItemIdx )
{
   int i;
   if( MenuFormat==0 )
      {
      i = ItemIdx%8;
      if( i>3 )   return X+64;
      }
   return X;
}

void Menu::SetMenuFormat( int i )
{
   MenuFormat = i;
   if( MenuFormat==0 )     XSize = 64;
   else                    XSize = 128;
}


int Menu::ItemY( int ItemIdx )
{
   int i=ItemIdx%4;

   int Yi = Y + 16*i;
   return Yi;
}

void Menu::ShowAsActive( int ItemIdx )
{  
	 int  i;
   int  x, y, HL;
   char Str[50], ActStr[20];
   
   char str1[20], str2[20], str3[20]; //add by wuhuan 2006.6.26

   if( ItemIdx<0 || ItemIdx>=NumMenuItem ) return;

   x = ItemX( ItemIdx );
   y = ItemY( ItemIdx );		// start position of string

   HL = pItemTab[ItemIdx]->GetHighLight( );		
   pItemTab[ItemIdx]->GetOutStr( Str );
   
   int l=strlen(Str);
   
   if( HL > 0 )
   {  
   	  if(l>32)
   	  {  	  	  
   	  	 for(i=0; i<16; i++) str1[i] = Str[i];  str1[16] = '\0';
   	  	 for(i=16; i<32; i++)  str2[i-16] = Str[i]; str2[16] = '\0'; 
   	  	 for(i=32; i<l; i++)  str3[i-32] = Str[i]; str3[l-32] = '\0'; 
   	  	 
   	  	 ActStr[0] = Str[HL]; ActStr[1] = '\0';
   	  	 
   	  	 LCD_WriteString( x, y, str1, TxtColor );
   	  	 LCD_WriteString( x, y+16, str2, TxtColor );
   	  	 LCD_WriteString( x, y+32, str3, TxtColor );

   	  	 if(HL>=32) 
   	  	 {
   	  	 	  LCD_WriteString(x+8*(HL-32), y+32, ActStr,  ActTxtColor );
   	  	 }
   	  	 else if(HL>=16&&HL<32) 
   	  	 {
   	  	 	  LCD_WriteString(x+8*(HL-16), y+16, ActStr,  ActTxtColor );
   	  	 }
   	  	 else LCD_WriteString(x+8*HL, y, ActStr,  ActTxtColor );
   	  	 	
   	  	 //printf("lenofstr1=%d\n", strlen(str1));
   	  	 //NB_Delay(2000);
   	  	 	   	  	    	  	  
   	  }
   	  else if(l>16&&l<=32) 
   	  {
   	  	 for(i=0; i<16; i++) str1[i] = Str[i];  str1[16] = '\0';
   	  	 for(i=16; i<l; i++)  str2[i-16] = Str[i]; str2[l-16] = '\0'; 
   	  	 
   	  	 ActStr[0] = Str[HL]; ActStr[1] = '\0';
   	  	 
   	  	 LCD_WriteString( x, y, str1, TxtColor );
   	  	 
   	  	 LCD_WriteString( x, y+16, str2, TxtColor );
   	  	 
   	  	 if(HL>=16) 
   	  	 {
   	  	 	  LCD_WriteString(x+8*(HL-16), y+16, ActStr,  ActTxtColor );
   	  	 }
   	  	 else LCD_WriteString(x+8*HL, y, ActStr,  ActTxtColor );
   	  	 
   	  }
   	  else
   	  {
   	  	   	  	 
         ActStr[0] = Str[HL]; ActStr[1] = '\0';
         //LCD_FillBar( x, y, XSize, y+16, BkColor );
         LCD_WriteString( x, y, Str, TxtColor );
         LCD_WriteString(x+8*HL, y, ActStr,  ActTxtColor );
      }
   }
   else
   {
      //LCD_FillBar( x, y, XSize, y+16, BkColor );
      //LCD_WriteString( x, y, Str, ActTxtColor, 10);  //change by wuhuan 06.06.21
      
      if(l>32)
      {
   	  	 for(i=0; i<16; i++) str1[i] = Str[i];  str1[16] = '\0';
   	  	 for(i=16; i<32; i++)  str2[i-16] = Str[i]; str2[16] = '\0'; 
   	  	 for(i=32; i<l; i++)  str3[i-32] = Str[i]; str3[l-32] = '\0'; 

   	  	 LCD_WriteString( x, y, str1, ActTxtColor, 0);
   	  	 
   	  	 LCD_WriteString( x, y+16, str2, ActTxtColor, 0);
   	  	 
   	  	 LCD_WriteString( x, y+32, str3, ActTxtColor, 0);
   	  	    	  	       	  
      }
      if(l>16&&l<=32)
      {
   	  	 for(i=0; i<16; i++)  str1[i] = Str[i];   str1[16] = '\0';
   	  	 for(i=16; i<l; i++)  str2[i-16] = Str[i];  str2[l-16] = '\0'; 
   	  	 
   	  	 LCD_WriteString( x, y, str1, ActTxtColor, 0);
   	  	 
   	  	 LCD_WriteString( x, y+16, str2, ActTxtColor, 0);     	 
      }
      else LCD_WriteString( x, y, Str, ActTxtColor, 0);
      
   }
}

void Menu::ShowAsNormal( int ItemIdx )
{
   int  x, y;
   char Str[50];    //change 20 to 50

   if( ItemIdx<0 || ItemIdx>=NumMenuItem ) return;
   x = ItemX( ItemIdx );
   y = ItemY( ItemIdx );		// start position of string
   pItemTab[ItemIdx]->GetOutStr( Str );

   //int l=strlen(Str);
   //LCD_WriteString( x, y, Str, TxtColor, 10 );  //change by wuhuan 06.06.21
   
   LCD_WriteString( x, y, Str, TxtColor, 0 );
}


void Menu::PutOnScreen( )
{
   if( MenuFormat==0 )   ScreenItem = 8;
   else                  ScreenItem = 4;
   for( int i=StartItem; i<StartItem+ScreenItem; i++ )
   {
      if( i >=  NumItem  )   break;
      if( i!= ActItemIdx )  ShowAsNormal( i );
      else                  ShowAsActive( i );
   }
}

int Menu::AddItem( Item* NewItemPtr )
{
   if( NewItemPtr == NULL )		// clear display item table
      {
      NumItem = 0;
      ActItemIdx = 0;
      for( int i=0; i<MaxMenuItem; i++ ) pItemTab[i] = NULL;
      return 0;
      }

   if(NumItem>=MaxMenuItem) return -1;	// the table is full

   pItemTab[NumItem] = NewItemPtr;
   NumItem++;
   return NumItem;
}


void Menu::ShowOperInfo( char *StrBuf )
{
   
   int x, y;
   
   LCD_Clearup( );  
   
   x = (128-strlen(StrBuf )*8)/2;
   y = 8;
   
   LCD_WriteString( x, y, StrBuf, 1 );
   
}

void Menu::MenuItemBarUp( )
{
   ShowAsNormal( ActItemIdx );
   for( int i=0; ; i++ )
      {
      ActItemIdx--;
      if( ActItemIdx < 0 ) ActItemIdx = NumItem - 1;
      NewCnt = ActItemIdx/ScreenItem;
      if( pItemTab[ActItemIdx]->OutStrAvailable( ) == 1 ) break;
      if( i >= NumItem ) return;
      }
   if( NewCnt!=OldCnt )              //clrscr
      {
      StartItem = NewCnt*ScreenItem;
      OldCnt = NewCnt;
      LCD_Clearup( );
      PutOnScreen( );
      }
   ShowAsActive( ActItemIdx );
}

void Menu::MenuItemBarDn( )
{
   ShowAsNormal( ActItemIdx );
   for( int i=0; ; i++ )
   {
      ActItemIdx++;
      if( ActItemIdx >= NumItem ) ActItemIdx = 0;
      NewCnt = ActItemIdx/ScreenItem;
      if( pItemTab[ActItemIdx]->OutStrAvailable( ) == 1 ) break;
      if( i >= NumItem ) return;
   }
   if( NewCnt!=OldCnt )              //clrscr
   {
      StartItem = NewCnt*ScreenItem;
      OldCnt = NewCnt;
      LCD_Clearup( );
      PutOnScreen( );
   }

   ShowAsActive( ActItemIdx );
}

void Menu::MenuItemInc( )
{
   pItemTab[ActItemIdx]->ValueInc( );
   ShowAsActive( ActItemIdx );
   //if( !ItemChanged ) { ItemChanged = TRUE; ShowConfirmIcon( ); }
}

void Menu::MenuItemDec( )
{
   pItemTab[ActItemIdx]->ValueDec( );
   ShowAsActive( ActItemIdx );
   //if( !ItemChanged ) { ItemChanged = TRUE; ShowConfirmIcon( ); }
}

void Menu::MenuItemINC( )
{
   pItemTab[ActItemIdx]->ValueINC( );
   ShowAsActive( ActItemIdx );
   //if( !ItemChanged ) { ItemChanged = TRUE; ShowConfirmIcon( ); }
}

void Menu::MenuItemDEC( )
{
   pItemTab[ActItemIdx]->ValueDEC( );
   ShowAsActive( ActItemIdx );
   //if( !ItemChanged ) { ItemChanged = TRUE; ShowConfirmIcon( ); }
}

void Menu::Hide( )
{
   //if( !IsVisible ) return;
   //IsVisible = FALSE;
   //Bar( X-1, Y-1, X+Xsize+1, Y+Ysize+1, SysColorTable.Menu_Bk );
}

void Menu::Show( )
{
   //VarItemInit( );
   PutOnScreen( );
   //IsVisible = TRUE;
}

MainMenu::MainMenu( ) : Menu( )
{
   int   i;
   SetMenuFormat( 1 );  //add by wuhuan 06.06.21
   
   Menu1.SetNameUnit( "1.人工置数" );
   Menu2.SetNameUnit( "2.参数设置" );   
   Menu3.SetNameUnit( "3.保存配置" );
   Menu4.SetNameUnit( "4.本地下载" );
   Menu5.SetNameUnit( "5.网络操作" );
   Menu6.SetNameUnit( "6.程序升级" );
   Menu7.SetNameUnit( "7.修改密码" );
   Menu8.SetNameUnit( "8.退出菜单" );

   AddItem( (Item*)&Menu1 );
   AddItem( (Item*)&Menu2 );
   AddItem( (Item*)&Menu3 );
   AddItem( (Item*)&Menu4 );
   AddItem( (Item*)&Menu5 );
   AddItem( (Item*)&Menu6 );
   AddItem( (Item*)&Menu7 );
   AddItem( (Item*)&Menu8 );
}

void MainMenu::VarItemInit( )
{
}

int  MainMenu::ManualPro( )
{ 
	 char StrBuf1[20];
	 
	 
	 	 
   switch( ActItemIdx )
   {
      case 0:    MENUManager.ShowMenu( 1 );   break;
      case 1:    MENUManager.ShowMenu( 4 );   break;
      case 2:    LCD_Clearup( );
      	         SaveAllNewConfigInfo( ); 
      	         strcpy( StrBuf1, "配置保存成功!" );
      	         ShowOperInfo( StrBuf1 ); 
      	         MENUManager.ShowMenu( 0 );
      	         break;      	
      case 3:    SysExitState = LOCALDOWNLOAD;  break;
      case 4:    MENUManager.ShowMenu( 11 );   break;
      case 6:    MENUManager.ShowMenu( 14 );   break;
      case 7:    KeyPassState=LOCK;  LCD_Clearup();  break;  
      	
      default:   break;
   }
   
   return 0;
}

void MainMenu::AbnormalPro( )
{
}


Menu1::Menu1( ) : Menu( )
{
   int   i;
   SetMenuFormat( 1 );  //add by wuhuan 06.06.21
   

   Menu1_1.SetNameUnit( "1.降雨量" );
   Menu1_2.SetNameUnit( "2.水位" );    
      
   AddItem( (Item*)&Menu1_1 );
   AddItem( (Item*)&Menu1_2 );   

}

void Menu1::VarItemInit( )
{
}

int  Menu1::ManualPro( )
{
   switch( ActItemIdx )
   {
      case 0:    MENUManager.ShowMenu( 2 );   break;
      case 1:    MENUManager.ShowMenu( 3 );   break;   	      	
      default:   break;
   }
   return 0;
}

void Menu1::AbnormalPro( )
{
   MENUManager.ShowMenu( 0 );
}

////////////////////////////////////////////////////
Menu1_1::Menu1_1( ) : Menu( )
{
   char str[10];
   
   str[0]='\0';
   
   SetMenuFormat( 1 );  //add by wuhuan 06.07.11
   
   Item1_1.SetNameUnit( "请输入(0.1mm):" );
   
   Item1_1.DefineItem( 30, str );
   
   AddItem( (Item*)&Item1_1 );

}

void Menu1_1::VarItemInit( )
{
}

int  Menu1_1::ManualPro( )
{
	 //int len;
	 
	 char str[50];
	 
	 Item1_1.GetOutInPutStr( str );
	 
	 if(str[12]==' ') strcpy( ManualRFBuff, str );
	 
	 TaskFlg = MANUALDATA;
	 
	 //len = strlen(str);
	 
   //SendDataToCOM( 0, str, len );
   
   Item1_1.ItemInit(  );
   
   MENUManager.ShowMenu( 1 );     

   return 0;
}

void Menu1_1::AbnormalPro( )
{  
	 Item1_1.ItemInit(  );
   MENUManager.ShowMenu( 1 );
}

void Menu1_1::GetInputData( char abyte, char mulkeyflg )
{
	 Item1_1.PutInStr( abyte, mulkeyflg );
	 ShowAsActive( ActItemIdx );
}


void Menu1_1::DeleteInputData( )
{
	 Item1_1.DeleteAByte(  );
	 ShowAsActive( ActItemIdx );
}


////////////////////////////////////////////////////
Menu1_2::Menu1_2( ) : Menu( )
{
   char str[10];
   
   str[0]='\0';
   
   SetMenuFormat( 1 );  //add by wuhuan 06.07.11
   
   Item1_2.SetNameUnit( "请输入(cm):" );
   
   Item1_2.DefineItem( 30, str );
   
   AddItem( (Item*)&Item1_2 );

}

void Menu1_2::VarItemInit( )
{
}

int  Menu1_2::ManualPro( )
{

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -