📄 keys.c
字号:
/*
* Auth: Eric Harlow
* File: keys.c
* Linux GUI Application development
*/
#include <gdk/gdkkeysyms.h>
#include <ctype.h>#include "jszb.h"#include "gmclient.h"
#include "stockclient.h"
#include "stocksql.h"
/*
* Movement
*/
int keyLeft = 0;
int keyRight = 0;
int keyUp = 0;
int keyDown = 0;
/*
* Firing
*/
int keyFire = TRUE;
/*
* AddKey
*
* Add the key to the keys that are being kept
* track of. We only keep track of a few of the keys
* and we ignore the rest.
*/
void AddKey (GdkEventKey *event)
{
switch (event->keyval) {
/* --- Left arrow --- */
case GDK_Left:
keyLeft = TRUE;
break;
/* --- Right arrow --- */
case GDK_Right:
keyRight = TRUE;
break;
/* --- Up arrow --- */
case GDK_Up:
keyUp = TRUE;
break;
/* --- Down arrow --- */
case GDK_Down:
keyDown = TRUE;
break;
/* --- Space --- */
case ' ':
keyFire = TRUE;
break;
/* --- Ignore the rest --- */
default:
break;
}
}
/*
* RemoveKey
*
* If we're keeping track of a key and the key
* goes up, we flag it as not being pressed.
*/
void RemoveKey (GdkEventKey *event)
{
/* switch (event->keyval) {
case GDK_Left:
keyLeft = FALSE;
break;
case GDK_Right:
keyRight = FALSE;
break;
case GDK_Up:
keyUp = FALSE;
break;
case GDK_Down:
keyDown = FALSE;
break;
case ' ':
keyFire = FALSE;
break;
default:
break;
}
*/}
/*
* HandleKeysPressed
*
* When it comes time to move everyone, this
* routine is called to move/fire based on the
* keys that are currently pressed.
*/
void HandleKeysPressed ()
{
/*
* Try and move in each direction
*/
if (keyLeft) {
if(areastart<=80){ areastart=1; } else{ areastart-=80; } }
if (keyRight) {
if(areastart<stocksum-80){
areastart+=80; } }
if (keyUp) {
if(klinewidth<21) klinewidth+=4;
}
if (keyDown) {
if(klinewidth>1) klinewidth-=4;
}
}
/*
* AddKey
*
* Add the key to the keys that are being kept
* track of. We only keep track of a few of the keys
* and we ignore the rest.
*/
void whatKey (GdkEventKey *event)
{
char code[7]; int paintflag=1; switch (event->keyval) {
/* --- Left arrow --- */
case GDK_Left: if(areastart <=1){ paintflag = 0; break; }
if(areastart<=50){ areastart=1; } else{ areastart-=40; }
break; /* --- Right arrow --- */
case GDK_Right:
if(areastart<stocksum-50){
areastart+=40; } else{ paintflag=0; } break;
/* --- Up arrow --- */
case GDK_Up:
if(klinewidth<21){ klinewidth+=4;
} else{ paintflag = 0; }
break;
/* --- Down arrow --- */
case GDK_Down:
if(klinewidth>1){ klinewidth-=4; } else{ paintflag = 0; }
break;
case GDK_Page_Up: if(strlen(stockcode) == SHCODELEN) strcpy(code,findPreStock(SHBZ)); else strcpy(code,findPreStock(SZBZ)); if(strlen(code) != SZCODELEN && strlen(code) != SHCODELEN){ paintflag = 0; break; } frechStock(code); break;
case GDK_Page_Down: if(strlen(stockcode) == SHCODELEN) strcpy(code,findNextStock(SHBZ)); else strcpy(code,findNextStock(SZBZ)); if(strlen(code) != SZCODELEN && strlen(code) != SHCODELEN){ paintflag = 0; break; } frechStock(code); break;
case GDK_Home: findPreJszb(); break;
case GDK_End: if(!fsflag){ findNextJszb(); } else{ if(!fszbflag){ fszbflag = 1; } else{ fszbflag = 0; } } break; case GDK_KP_Enter: case GDK_Return: strcpy(code,gtk_entry_get_text(GTK_ENTRY(stockentry))); strcpy(code,allTrimStr(code)); gtk_entry_set_text(GTK_ENTRY(stockentry),""); gtk_entry_set_position(GTK_ENTRY(stockentry),1); if(isdigit(code[0])){ if(strlen(code) == 2){ if(!strcmp(code,"02")) goto F2_LABEL; if(!strcmp(code,"03")) goto F3_LABEL; if(!strcmp(code,"04")) goto F4_LABEL; if(!strcmp(code,"05")) goto F5_LABEL; if(!strcmp(code,"10")) goto F10_LABEL; if(!strcmp(code,"61")){ if(stocksql->getSqlGpmxListData(SHBZ,1,200)) fsflag=GPMXLISTFLAG; break; } if(!strcmp(code,"63")){ if(stocksql->getSqlGpmxListData(SZBZ,1,200)) fsflag=GPMXLISTFLAG; break; } } else{ if(strlen(code)!=SZCODELEN && strlen(code)!=SHCODELEN){ paintflag = 0; } else{ if(frechStock(code)==FAIL){ paintflag = 0; } else{ if(fsflag>FSFLAG) fsflag = FSFLAG; stkcli->dealFsline(code); } } } } else{ if(!fsflag){ if(findJszb(code) == FAIL) paintflag = 0; } } break; case GDK_F5:F5_LABEL: if(fsflag){// if(frechStock(stockcode)==FAIL) paintflag = 0; fsflag = 0; } else{// if(frechFsData(stockcode)==FAIL) paintflag = 0; fsflag = 1; } break; case GDK_F3:F3_LABEL: if(frechStock("1A0001")==FAIL) paintflag = 0; fsflag = ZSFSFLAG; break; case GDK_F4:F4_LABEL: if(frechStock("2A01")==FAIL) paintflag = 0; fsflag = ZSFSFLAG; break; case GDK_F10:F10_LABEL: showF10Info(); paintflag=0; break;
case GDK_F2:F2_LABEL: showPrice(); paintflag=0; break;
/* --- Ignore the rest --- */
default:
gtk_widget_grab_focus(stockentry); paintflag=0; break;
}
if(paintflag){ Repaint(); }}
/*
* motion_notify
*
* Called when the user moves the mouse on the screen
*/
gint motion_notify (GtkWidget *widget, GdkEventMotion *event)
{
int x, y;
int paintflag =0; GdkModifierType state;
/* --- If it's a hint... (combining several events) --- */
if (event->is_hint) {
/* --- Get new position --- */
gdk_window_get_pointer (event->window, &x, &y, &state);
} else {
/* --- Get new position --- */
x = (int)event->x;
y = (int)event->y;
state = (GdkModifierType)event->state;
}
if (state & GDK_BUTTON1_MASK) {
if(areatotalstartflag && areatotalstartflag){ if(areatotalendadr >= areatotalstartadr) drawTotalRectangle(areatotalstartadr,areatotalendadr); else drawTotalRectangle(areatotalendadr,areatotalstartadr); if(x>klineareax && x<klineareax+klineareawidth && y>klineareay && y<klineareay+klineareaheight){ areatotalendadr=areastart+(x-klineareax)/(klinewidth+1); if(areatotalendadr >= areatotalstartadr){ drawTotalRectangle(areatotalstartadr,areatotalendadr); showAreaTotalWin(areatotalstartadr,areatotalendadr); } else{ drawTotalRectangle(areatotalendadr,areatotalstartadr); showAreaTotalWin(areatotalendadr,areatotalstartadr); } } else{ areatotalstartflag = 0; } } }
if(cursormouseflag){ drawXcur(mouselinex,mouseliney);
if(x>klineareax && x<klineareax+klineareawidth && y>klineareay && y<klineareay+klineareaheight){ mouselinex=areastart+(x-klineareax)/(klinewidth+1); mouseliney=y; mouselineflag = 1; paintflag =1; showHqWin(); } else{ if(mouselineflag == 1){ paintflag = 1; mouselineflag = 0; } } if(paintflag){ drawJsRecord(mouselinex); drawXcur(mouselinex,mouseliney); } } return TRUE;
}gint button_notify (GtkWidget *widget, GdkEventButton *event)
{
int x, y;
GdkModifierType state;
/* --- Get new position --- */
gdk_window_get_pointer (event->window, &x, &y, &state);
if( event->button == 1 ) { if(cursormouseflag){ if(!hqwinflag) openHqWin(); else closeHqWin(); } if(areatotalflag){ if(x>klineareax && x<klineareax+klineareawidth && y>klineareay && y<klineareay+klineareaheight){ areatotalstartflag = 1; areatotalstartadr=areastart+ (x-klineareax)/(klinewidth+1); areatotalendadr=areatotalstartadr; drawTotalRectangle(areatotalstartadr,areatotalendadr); showAreaTotalWin(areatotalstartadr,areatotalendadr); } } return TRUE; } if( event->button == 3 ) { gtk_menu_popup(GTK_MENU(popmenu), NULL, NULL, NULL, NULL, event->button, event->time ); return TRUE; } return FALSE;
}
gint releasebutton_notify (GtkWidget *widget, GdkEventButton *event)
{
if( event->button == 1 ) { if(areatotalflag){ if(areatotalstartflag){ if(areatotalendadr>=areatotalstartadr) drawTotalRectangle(areatotalstartadr,areatotalendadr); else drawTotalRectangle(areatotalendadr,areatotalstartadr); areatotalstartflag = 0; } } } return FALSE;
}
void printstr(char *str){ int i; for(i=0;i<(int)strlen(str);i++){ printf("%d ",str[i]); } printf("%d\n",strlen(str));}gchar *ltrimStr(char *str){ int i; char *tmp; if(str == NULL) return NULL; tmp=str; for(i=0;i<(int)strlen(tmp);i++){ if(*tmp !=' ' && *tmp !='\r') break; if(*tmp ==' ' || *tmp =='\r') tmp++; }// printstr(tmp); return tmp; }gchar * rtrimStr(char *str){ int i; char *tmp; if(str == NULL) return NULL; tmp=str; for(i=strlen(tmp)-1;i>=0;i--){ if(tmp[i]!=' ' && tmp[i]!='\r') break; if(tmp[i]==' ' || tmp[i]=='\r') tmp[i]='\0'; } return tmp; }gchar * allTrimStr(char *str){ char *tmp; if(str == NULL) return NULL; tmp=str; strcpy(tmp,ltrimStr(tmp)); strcpy(tmp,rtrimStr(tmp)); return tmp;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -