📄 codearea.c.bak
字号:
#include "codearea.h"int CodeArea::InitCodeArea(int Y,int X,int Height,int Width,int Color,int FontStyle,int WinType){ int ret=FALSE; if(InitBaseWindow(Y,X,Height,Width,Color,0,FontStyle,WinType,"")==FALSE) return FALSE; field[0] = new_field(Height,Width,0,0,0,0); field[1] = NULL; field_opts_off(field[0], O_AUTOSKIP); field_opts_off(field[0], O_STATIC); set_field_fore(field[0], COLOR_PAIR(Color)); set_field_back(field[0], COLOR_PAIR(Color)); form = new_form(field); set_current_field(form, field[0]); keypad(basewin,TRUE); set_form_win(form, basewin); set_form_sub(form, derwin(basewin, Height, Width,0,0)); box(basewin, 0, 0); curs_set(1); post_form(form); wrefresh(basewin); insertmode=TRUE; currow=curcol=totalrow=totalcol=0; curpage=totalpage=0; return ret;}int CodeArea::CodeAreaDriver(int key){ int ret=0; int tempy,tempx; int nextpage,begin; tempy=tempx=0; switch(key) { case KEY_LEFT: if(curcol>0) { curcol = curcol-1; form_driver(form,REQ_PREV_CHAR); ret = UPDATE_STATUS; } else { if (currow>0) { form_driver(form,REQ_PREV_LINE); form_driver(form,REQ_END_LINE); getyx(basewin,tempy,curcol); currow--; ret = UPDATE_STATUS; } } break; case KEY_RIGHT: form_driver(form,REQ_NEXT_CHAR); curcol++; ret = UPDATE_STATUS; break; case KEY_UP: if(currow>0) { form_driver(form,REQ_PREV_LINE); currow--; curcol=0; ret = UPDATE_STATUS; } break; case KEY_DOWN: if (currow<totalrow) { form_driver(form,REQ_NEXT_LINE); currow++; curcol=0; ret = UPDATE_STATUS; } break; case KEY_HOME: curcol=0; form_driver(form,REQ_BEG_LINE); ret = UPDATE_STATUS; break; case KEY_END: form_driver(form,REQ_END_LINE); getyx(basewin,tempy,curcol); ret = UPDATE_STATUS; break; case 10://KEY_ENTER:INS currow++; totalrow++; curcol=0; form_driver(form,REQ_NEW_LINE); ret = UPDATE_STATUS; break; case KEY_F(2): LostActive(); ret = ACTIVE_TOPMENU; break; case KEY_BACKSPACE: getyx(basewin,tempy,curcol); if(curcol<=0 && totalrow>0 && currow>0) { totalrow--; currow--; } form_driver(form,REQ_DEL_PREV); getyx(basewin,tempy,curcol); ret = UPDATE_STATUS; break; case KEY_DC: if(curcol<=0) form_driver(form,REQ_DEL_LINE); else form_driver(form,REQ_DEL_CHAR); ret = UPDATE_STATUS; break; case KEY_PPAGE: nextpage=((int)(currow/GetHeight())-1)*GetHeight()+1; if (nextpage>0) { getyx(basewin,tempy,tempx); form_driver(form,REQ_SCR_BPAGE); currow-=GetHeight(); if(currow-GetHeight()<=0) { tempy-=currow;// currow=0; while(tempy-->0) form_driver(form,REQ_PREV_LINE); } form_driver(form,REQ_END_LINE); ret = UPDATE_STATUS; } break; case KEY_NPAGE: getyx(basewin,tempy,tempx); nextpage=currow-tempy+GetHeight(); if (nextpage<totalrow) { form_driver(form,REQ_SCR_FPAGE); begin=nextpage - (int)(nextpage/GetHeight())*GetHeight(); currow+=GetHeight(); if (currow>totalrow) { currow-=begin; while(currow>totalrow) { form_driver(form,REQ_PREV_LINE); currow--; } } form_driver(form,REQ_END_LINE); ret = UPDATE_STATUS; } break; case KEY_TAB://TAB for(int i=0;i<TABSIZE;i++) form_driver(form,KEY_SPACE); curcol+=TABSIZE; ret = UPDATE_STATUS; break; case KEY_INSERT: if(insertmode) { form_driver(form,REQ_OVL_MODE); insertmode=FALSE; ret = UPDATE_STATUS_REPLACE; } else { form_driver(form,REQ_INS_MODE); insertmode=TRUE; ret = UPDATE_STATUS_INSERT; } break; default: if (curcol<GetWidth()) { curcol++; form_driver(form, key); ret = UPDATE_STATUS; } else if (curcol<MAX_COLS) { curcol++; form_driver(form, key); ret = UPDATE_STATUS; } break; } return ret;}void CodeArea::DestroyCodeArea(){ unpost_form(form); free_form(form); free_field(field[0]); DestroyBaseWindow();}int CodeArea::Active(int item){ if(active!=TRUE) { active=TRUE; } return active;}int CodeArea::Active(){ if (active!=TRUE) { active=TRUE; } curs_set(1); wmove(basewin,currow,curcol); return active;}int CodeArea::IsActive(){ return active;}int CodeArea::LostActive(){ if(active!=FALSE) { active=FALSE; } curs_set(0); return active;}int CodeArea::GetCurCol(){ return curcol;}int CodeArea::GetCurRow(){ return currow;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -