void enter_graphic_menu(uint8_t menu_no, uint8_t submenu_no) { char s[20]; LcdFillLine(1); slide_down(); // animacja LcdClear(); if(menu_no==0 && submenu_no==2) // Menu 1.2 { LcdRectangle(0, 0, 83, 47,TRANSPARENT); // ramka rez=enter_integer(rez,-10,100,2,3, "WART." , "s"); // funkcja obslugi danej pozycji menu } LcdRectangle(0, 0, 83, 47,TRANSPARENT); // przykladowy kod po powrocie z funkcji obslugi menu LcdClearArea(3,2,13); LcdGotoXY(2,3); sprintf(s,"MENU %1u.%1u:%d",menu_no + 1, submenu_no, rez); LcdStr(FONT_1X, FONT_POSITIVE, (unsigned char*)s); delay_ms(1000); LcdFillLine(1); // powrot do menu LcdGotoXY(2,1); slide_up(); // animacja LcdStr(FONT_1X,FONT_NEGATIVE,"MENU"); slide_down(); // animacja show_graphic_menu(menu_item,submenu_item); // pokazanie menu }
void exit_from_graphic_menu() { uint8_t i; slide_up(); // animacja LcdClear(); // powrot do trybu normalnego LcdFillLine(1); LcdGotoXY(1,1); LcdStr(FONT_1X,FONT_NEGATIVE," LCD DEMO "); LcdFillLine(6); LcdGotoXY(1,6); LcdStr(FONT_1X,FONT_NEGATIVE," LCD DEMO "); }
void slide_up(const vertex &v, const T &value) { /* Jesteśmy w korzeniu, nie ma gdzie wyżej jechać. */ if (v == 1) { array[v] = value; return; } /* Jeżeli podstawienie wartości może zaburzyć porządek - rekurencja. */ if (value < array[father(v)]) { array[v] = array[father(v)]; slide_up(father(v), value); } else { array[v] = value; } }
int Read() { VRAM = init_VRAM(); AllClr_VRAM( VRAM ); char * VRAM_A = init_VRAM(); AllClr_VRAM( VRAM_A ); char * VRAM_B = init_VRAM(); AllClr_VRAM( VRAM_B ); int total_page , page = 0 , i ,last_key_pressed=0; char buff[1000] , statue_bar[100]; int auto_down = 0 , _auto = 0 , mark = 1 ; int user_contrast = *p_contrast; long auto_time = 0 ; int msg_utf8 = 0; auto_down = _auto = 0 ; strcpy( txtname , fname ); TXT = fopen( txtname , "rb" ) ; fseek(TXT , 0 , SEEK_END); filesize = ftell( TXT ); total_page = divid(); memset( buff , 0x0 , 1000 ); load_mark( &page , total_page , 1 ); fseek( TXT , pagepos[page] , SEEK_SET ); fread( buff , pagepos[ page+1 ] - pagepos[ page ] , 1 , TXT ); AllFill_VRAM(VRAM_A,cl_bg); PrintChStr( VRAM_A , 0 , 0 , buff , cl_fg , cl_bg ); PutDisp_DDVRAM( VRAM_A ); auto_down = 0 ; while( 1 ) { if(isKeyPressed(KEY_NSPIRE_SCRATCHPAD)) { wait_no_key_pressed(); if(msg_utf8==0) i = show_msgbox_3b( "提示" , "调用API必须保证文本为UTF-8编码,也就是此时用nNovel无法正常阅读,要继续吗?" , "确定" , "取消" ,"确定且不再提示" ); else i = 1; if( i == 3 ) { i = 1; msg_utf8 = 1; } if( i == 1 ) { wait_no_key_pressed(); show_msgbox( "本页内容:" , buff ); } } if(isKeyPressed(KEY_NSPIRE_MULTIPLY)) { if( is_cx && (*p_contrast)< 225) (*p_contrast)++; else if( (!is_cx) && (*p_contrast) < 0xc0 ) (*p_contrast)++; } else if(isKeyPressed(KEY_NSPIRE_DIVIDE)) { if( is_cx && (*p_contrast)> 1 ) (*p_contrast)--; else if( (!is_cx) && (*p_contrast) >50 ) (*p_contrast)--; } else if(isKeyPressed(KEY_NSPIRE_TAB)) { i = num_input(VRAM , 30 , 30 , " ����ҳ��" ); if( i == -1) continue; else if( i == 0 ){ page = 0;} else if( i > total_page){ page = total_page;} else page = i - 1; memset( buff , 0x0 , 1000 ); fseek( TXT , pagepos[page] , SEEK_SET ); fread( buff , pagepos[ page +1 ] - pagepos[ page ] , 1 , TXT ); AllFill_VRAM(VRAM_A,cl_bg); PrintChStr( VRAM_A , 0 , 0 , buff , cl_fg , cl_bg ); PutDisp_DDVRAM( VRAM_A ); wait_no_key_pressed(); } else if(isKeyPressed(KEY_NSPIRE_DOC)) { save_mark( page , total_page , 0 ); wait_no_key_pressed(); } else if(isKeyPressed(KEY_NSPIRE_MENU)) { load_mark( &page , total_page , 0 ); memset( buff , 0x0 , 1000 ); fseek( TXT , pagepos[page] , SEEK_SET ); fread( buff , pagepos[ page +1 ] - pagepos[ page ] , 1 , TXT ); AllFill_VRAM(VRAM_B,cl_bg); PrintChStr( VRAM_A , 0 , 0 , buff , cl_fg , cl_bg ); PutDisp_DDVRAM( VRAM_A ); wait_no_key_pressed(); } else if(isKeyPressed(KEY_NSPIRE_SHIFT)) { if(cl_bg == 15) { cl_fg = 15; cl_bg = 0; } else { cl_fg = 0; cl_bg = 15; } memset( buff , 0x0 , 1000 ); fseek( TXT , pagepos[page] , SEEK_SET ); fread( buff , pagepos[ page +1 ] - pagepos[ page ] , 1 , TXT ); AllFill_VRAM(VRAM_A,cl_bg); PrintChStr( VRAM_A , 0 , 0 , buff , cl_fg , cl_bg ); PutDisp_DDVRAM( VRAM_A ); wait_no_key_pressed(); } if((*p_RTC - auto_time)%(_auto) != 0) mark = 0; if( ( isKeyPressed(KEY_NSPIRE_DOWN ) || isKeyPressed(KEY_NSPIRE_MINUS )|| auto_down == 1 )&& page < total_page ) { auto_down = 0; page++; memset( buff , 0x0 , 1000 ); fseek( TXT , pagepos[page] , SEEK_SET ); fread( buff , pagepos[ page +1 ] - pagepos[ page ] , 1 , TXT ); if( cl_bg != 15 ) AllFill_VRAM(VRAM_B,cl_bg); else AllClr_VRAM(VRAM_B); PrintChStr( VRAM_B , 0 , 0 , buff , cl_fg , cl_bg ); if( config.show_page_slide == 1 ) slide_down(statue_bar , VRAM_A , VRAM_B , 1 ); else { Fill_Rect_VRAM( VRAM_B , 0 , 224 , 320 , 240 , 0 ); PrintChStr( VRAM_B , 0 , 224 , statue_bar , 15 , 0 ); PutDisp_DDVRAM(VRAM_B); for( i=0 ; i<=FIRST_KEY_WAIT ; i++ ) { if((!isKeyPressed(KEY_NSPIRE_DOWN )|| isKeyPressed(KEY_NSPIRE_MINUS ))) break; if(last_key_pressed) break; sleep(1); if( i == FIRST_KEY_WAIT ) last_key_pressed = 1; } } memcpy(VRAM_A,VRAM_B,SCREEN_BYTES_SIZE); } else if( isKeyPressed(KEY_NSPIRE_UP )|| isKeyPressed(KEY_NSPIRE_PLUS ) ) { if( page == 0 ) continue; page --; memset( buff , 0x0 , 1000 ); fseek( TXT , pagepos[page] , SEEK_SET ); fread( buff , pagepos[ page +1 ] - pagepos[ page ], 1 , TXT ); AllFill_VRAM(VRAM_B,cl_bg); PrintChStr( VRAM_B , 0 , 0 , buff , cl_fg , cl_bg ); if( config.show_page_slide == 1 ) slide_up( statue_bar , VRAM_B , VRAM_A , 1 ); else { Fill_Rect_VRAM( VRAM_B , 0 , 224 , 320 , 240 , 0 ); PrintChStr( VRAM_B , 0 , 224 , statue_bar , 15 , 0 ); PutDisp_DDVRAM(VRAM_B); for( i=0 ; i<=FIRST_KEY_WAIT ; i++ ) { if((!isKeyPressed(KEY_NSPIRE_UP )|| isKeyPressed(KEY_NSPIRE_PLUS ))) break; if(last_key_pressed) break; sleep(1); if( i == FIRST_KEY_WAIT ) last_key_pressed = 1; } } memcpy(VRAM_A,VRAM_B,SCREEN_BYTES_SIZE); } else last_key_pressed = 0; memcpy(VRAM,VRAM_A,SCREEN_BYTES_SIZE); Fill_Rect_VRAM( VRAM , 0 , 224 , 320 , 240 , 0 ); if( config.show_time ) { update_time(); if( config.show_second ) sprintf(statue_bar , " %d%d:%d%d:%d%d %5d/%5d %4s", time.hour/10 , time.hour%10 , time.minute/10, time.minute%10 , time.second/10 , time.second%10 , page +1 , total_page +1 , _auto == 0?"":"Auto"); else sprintf(statue_bar , " %d%d:%d%d %5d/%5d %4s", time.hour/10 , time.hour%10 , time.minute/10, time.minute%10 , page +1 , total_page +1 ,_auto == 0?"":"Auto"); } else { sprintf(statue_bar , " %5d/%5d", page +1 , total_page +1 ); } PrintChStr( VRAM , 0 , 224 , statue_bar , 15 , 0 ); // DrawMiniString_VRAM(VRAM , 0 , 228 , statue_bar , 15 , 0 ); PutDisp_DDVRAM(VRAM); if( ! config.show_time ) { if( !(isKeyPressed(KEY_NSPIRE_UP)||isKeyPressed(KEY_NSPIRE_DOWN)) ) wait_key_pressed(); } if( isKeyPressed(KEY_NSPIRE_ESC)) { if(isKeyPressed(KEY_NSPIRE_CTRL)) goto exit; switch(menu(VRAM,10,10," �˵�\nҳ����ת(Tab)\n�Զ���ҳ\n��ȡ��ǩ(menu)\n������ǩ(doc)\n����\nҹ��ģʽ(shift)\n�����ǩ��ҳ���˳�\n����API�鿴��ҳ(��ǩ��)\n�˳�(ctrl+esc)\n","\n������λ����ת������λ��\n����/�ر��Զ���ҳ\n����ǩ�ļ��ж�ȡ����\n����ǩ�ļ���д�����\n�鿴��������\n����ҹ��ģʽ(��ɫ)\n��������ɵ�������ǩ�ͷ�ҳ�Ľ���ļ�\n����MsgBox����ʾ��ҳ����\n�˳�����\n") ) { case 1://ҳ����ת { i = num_input(SCREEN_BASE_ADDRESS , 30 , 30 , " ����ҳ��" ); if( i == -1) break; else if( i == 0 ){ page = 0;} else if( i > total_page){ page = total_page;} else page = i - 1; memset( buff , 0x0 , 1000 ); fseek( TXT , pagepos[page] , SEEK_SET ); fread( buff , pagepos[ page +1 ] - pagepos[ page ] , 1 , TXT ); AllFill_VRAM(VRAM_A,cl_bg); PrintChStr( VRAM_A , 0 , 0 , buff , cl_fg , cl_bg ); PutDisp_DDVRAM( VRAM_A ); break; } case 2://�Զ���ҳ { if( _auto != 0 ) { _auto = 0 ; mark = 1; break; } _auto = num_input( SCREEN_BASE_ADDRESS , 30 , 30 , "��������" ); if(_auto == -1) _auto = 0; auto_time = *p_RTC; break; } case 3: //��ȡ��ǩ { load_mark( &page , total_page , 0 ); memset( buff , 0x0 , 1000 ); fseek( TXT , pagepos[page] , SEEK_SET ); fread( buff , pagepos[ page +1 ] - pagepos[ page ] , 1 , TXT ); AllFill_VRAM(VRAM_B,cl_bg); PrintChStr( VRAM_A , 0 , 0 , buff , cl_fg , cl_bg ); PutDisp_DDVRAM( VRAM_A ); break; } case 4: save_mark( page , total_page , 0 );break;//������ǩ case 5: //���� { setup_config(); memset( buff , 0x0 , 1000 ); fseek( TXT , pagepos[page] , SEEK_SET ); fread( buff , pagepos[ page +1 ] - pagepos[ page ] , 1 , TXT ); AllFill_VRAM(VRAM_A,cl_bg); PrintChStr( VRAM_A , 0 , 0 , buff , cl_fg , cl_bg ); PutDisp_DDVRAM( VRAM_A ); break; } case 6: //��ɫ { if(cl_bg == 15) { cl_fg = 15; cl_bg = 0; } else { cl_fg = 0; cl_bg = 15; } memset( buff , 0x0 , 1000 ); fseek( TXT , pagepos[page] , SEEK_SET ); fread( buff , pagepos[ page +1 ] - pagepos[ page ] , 1 , TXT ); AllFill_VRAM(VRAM_A,cl_bg); PrintChStr( VRAM_A , 0 , 0 , buff , cl_fg , cl_bg ); PutDisp_DDVRAM( VRAM_A ); break; } case 7: //�����ǩ { char path[ 50 ]; for( i = 0 ; i < strlen(txtname) - 8 ; i ++ ) path[i] = txtname[i] ; path[ i ] = 0; strcat( path , ".div" ); remove(path); for( i = 0 ; i < strlen(txtname) - 8 ; i ++ ) path[i] = txtname[i] ; path[ i ] = 0; strcat( path , ".sav" ); remove(path); goto exit2; } case 8://API { wait_no_key_pressed(); if(msg_utf8==0) i = show_msgbox_3b( "提示" , "调用API必须保证文本为UTF-8编码,也就是此时用nNovel无法正常阅读,要继续吗?" , "确定" , "取消" ,"确定且不再提示" ); else i = 1; if( i == 3 ) { i = 1; msg_utf8 = 1; } if( i == 1 ) { wait_no_key_pressed(); show_msgbox( "本页内容:" , buff ); break; } else break; } case 9: goto exit;//�˳� default :wait_no_key_pressed();break; } wait_no_key_pressed(); } if( config.auto_save ) if( page%config.auto_save_time==0 ) save_mark( page , total_page , 1 ); if( (*p_RTC - auto_time)%(_auto) == 0 && mark == 0) { mark = 1 ; auto_down = 1 ; auto_time = *p_RTC; } } exit: save_mark( page , total_page , 1 ); exit2: * p_contrast = user_contrast; fclose( TXT ); close_VRAM( VRAM_A );close_VRAM( VRAM_B ); close_VRAM( VRAM ); return 0; }
/** * Dodaje nowy element do kopca. * * @param element Dodawany element. */ void push(const T &element) { n++; slide_up(n, element); }
void graphic_menu() { Key_t key; uint8_t x_size, y_size, exit; volatile uint8_t i; menu_item=0; submenu_item=0; exit=0; y_size = sizeof(menu_strings)/sizeof(menu_strings[0]); // ilosc podmenu x_size = sizeof(menu_strings[0])/sizeof(menu_strings[0][0]); // ilosc menu LcdFillLine(1); LcdGotoXY(2,1); LcdStr(FONT_1X,FONT_NEGATIVE,"MENU"); slide_down(); // anmacja show_graphic_menu(menu_item, submenu_item); // pokazanie menu do { key=getkey(); if(key==KEY_DN) // menu(submenu) + { if(submenu_item==0) // jezelipoziom glowny menu { if((++menu_item)==x_size) menu_item=0; // menu + } else // jezeli poziom podmenu if((++submenu_item)==y_size) submenu_item=y_size - 1; // submenu max if((menu_strings[submenu_item][menu_item])=="") submenu_item--; // puste submenu show_graphic_menu(menu_item, submenu_item); } else if(key==KEY_UP) // menu(submenu) - { if(submenu_item==0) // jezeli poziom glowny menu { if((--menu_item)<0) menu_item=x_size-1; // menu - } else // jezeli poziom podmenu if((--submenu_item)==0) submenu_item=1; // submenu = 1 show_graphic_menu(menu_item, submenu_item); } else if(key==KEY_OK) // ENTER { if(submenu_item==0) // jezeli poziom glowny menu if(menu_strings[1][menu_item]!="") // jezeli menu poziada jakies podmenu { submenu_item++; // submenu + ( w zasadzie submenu = 1) slide_up(); // animacja slide_down(); // show_graphic_menu(menu_item, submenu_item); } else // jezeli menu nie posiada zadnych podmenu { slide_up(); // animacja enter_graphic_menu(menu_item, submenu_item); // wejscie w obsluge menu } else // jezeli poziom podmenu { slide_up(); // animacja enter_graphic_menu(menu_item, submenu_item); // wejscie w obsluge podmenu } } if(key==KEY_L) // ESC { if(submenu_item>0) // jezeli poziom podmenu submenu_item=0; // wyjscie do poziomu glownego menu else // jezeli poziom glowny menu exit=1; // wyjscie z obslugi menu if(exit==0) { slide_up(); // animacja slide_down(); // show_graphic_menu(menu_item, submenu_item); } } }while(exit==0); // koniec procedury exit_from_graphic_menu(); }