📄 menu.cpp
字号:
#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 + -