Commit 0a7d56c3 authored by rswindell's avatar rswindell
Browse files

Eliminated the "Paste Over" option/behavior. Paste (Ctrl-V, F6 or Shift-Insert)

is always the same operation (e.g. Paste-Insert).
MSK_PASTE_OVER and MSK_PASTE_INSERT have been removed (now combined into
MSK_PASTE), so current SCFG code, for example, won't compile.
Introduced a separate WIN_CUT uifc.list mode flag to enable the Cut (e.g.
Ctrl-X) option on the status/help line.
Re-factored the bottomline() routine to re-use the WIN_* mode flags.
parent 10dc0599
......@@ -103,13 +103,12 @@
#define MSK_DEL 0x20000000
#define MSK_COPY 0x30000000
#define MSK_CUT 0x40000000
#define MSK_PASTE_OVER 0x50000000 /* Overwrite selected item with previously copied item */
#define MSK_PASTE_INSERT 0x60000000 /* Insert new item (above) current item with previously copied item */
#define MSK_EDIT 0x70000000
#define MSK_PASTE 0x50000000 /* Overwrite selected item with previously copied item */
#define MSK_EDIT 0x60000000
/* Legacy terms (get/put instead of copy/paste) */
#define MSK_GET MSK_COPY
#define MSK_PUT MSK_PASTE_OVER
#define MSK_PUT MSK_PASTE
/* Don't forget, negative return values are used for extended keys (if WIN_EXTKEYS used)! */
#define MAX_OPLN 75 /* Maximum length of each option per menu call */
......@@ -156,8 +155,9 @@
#define WIN_CHE (1<<14) /* Stay active after escape if changes */
#define WIN_XTR (1<<15) /* Add extra line at end for inserting at end */
#define WIN_DYN (1<<16) /* Dynamic window - return at least every second */
#define WIN_HLP (1<<17) /* Parse 'Help codes' */
#define WIN_PACK (1<<18) /* Pack text in window (No padding) */
#define WIN_CUT (1<<17) /* Allow ^X (cut) a menu item */
#define WIN_HLP (1<<17) /* Parse 'Help codes' - showbuf() and bottomline */
#define WIN_PACK (1<<18) /* Pack text in window (No padding) - showbuf() */
#define WIN_IMM (1<<19) /* Draw window and return immediately */
#define WIN_FAT (1<<20) /* Do not pad outside borders */
#define WIN_REDRAW (1<<21) /* Force redraw on dynamic window */
......@@ -206,13 +206,6 @@
/* And ungets the mouse event. */
#define K_PASSWORD (1L<<16) /* Does not display text while editing */
/* Bottom line elements */
#define BL_INS (1<<0) /* INS key */
#define BL_DEL (1<<1) /* DEL key */
#define BL_COPY (1<<2) /* Copy operation */
#define BL_PASTE (1<<3) /* Paste operation */
#define BL_EDIT (1<<4) /* Edit key */
#define BL_HELP (1<<5) /* Help key */
/* Extra exit flags */
#define UIFC_XF_QUIT (1<<0) /* Returned -1 due to CIO_KEY_QUIT */
......@@ -384,6 +377,7 @@ typedef struct {
/****************************************************************************/
char helpdatfile[MAX_PATH+1];
char helpixbfile[MAX_PATH+1];
BOOL help_available;
/****************************************************************************/
/* Help and exit button locations for current/last window */
/****************************************************************************/
......@@ -489,9 +483,9 @@ typedef struct {
void (*timedisplay)(BOOL force);
/****************************************************************************/
/* Displays the bottom line using the BL_* macros */
/* Displays the bottom line using the WIN_* mode flags */
/****************************************************************************/
void (*bottomline)(int line);
void (*bottomline)(int mode);
/****************************************************************************/
/* String input/exit box at a specified position */
......
......@@ -618,8 +618,7 @@ static void truncspctrl(char *str)
int ulist(int mode, int left, int top, int width, int *cur, int *bar
, char *initial_title, char **option)
{
uchar line[MAX_COLS*2],shade[MAX_LINES*4],*ptr
,bline=0,*win;
uchar line[MAX_COLS*2],shade[MAX_LINES*4],*ptr,*win;
char search[MAX_OPLN];
int height,y;
int i,j,opts=0,s=0; /* s=search index into options */
......@@ -691,16 +690,13 @@ int ulist(int mode, int left, int top, int width, int *cur, int *bar
if(mode&WIN_SAV && api->savnum>=MAX_BUFS-1)
putch(7);
api->help_available = (api->helpbuf!=NULL || api->helpixbfile[0]!=0);
/* Create the status bar/bottom-line */
if(api->helpbuf!=NULL || api->helpixbfile[0]!=0) bline|=BL_HELP;
if(mode&WIN_INS) bline|=BL_INS;
if(mode&WIN_DEL) bline|=BL_DEL;
if(mode&WIN_COPY) bline|=BL_COPY;
if(mode&WIN_PASTE) bline|=BL_PASTE;
if(mode&WIN_EDIT) bline|=BL_EDIT;
int bline = mode;
if (api->bottomline != NULL) {
if ((mode&(WIN_XTR | WIN_PASTEXTR)) == WIN_XTR && (*cur) == opts - 1)
api->bottomline(bline & ~BL_PASTE);
api->bottomline(bline & ~WIN_PASTE);
else
api->bottomline(bline);
}
......@@ -725,7 +721,7 @@ int ulist(int mode, int left, int top, int width, int *cur, int *bar
}
/* Determine minimum widths here to accommodate mouse "icons" in border */
if(!(mode&WIN_NOBRDR) && api->mode&UIFC_MOUSE) {
if(bline&BL_HELP && width<8)
if(api->help_available && width<8)
width=8;
else if(width<5)
width=5;
......@@ -783,7 +779,7 @@ int ulist(int mode, int left, int top, int width, int *cur, int *bar
if(cur==sav[i].cur && bar==sav[i].bar) {
/* Yes, it is... */
for(j=api->savnum-1; j>i; j--) {
/* Retore old screens */
/* Restore old screens */
puttext(sav[j].left,sav[j].top,sav[j].right,sav[j].bot
,sav[j].buf); /* put original window back */
FREE_AND_NULL(sav[j].buf);
......@@ -875,7 +871,7 @@ int ulist(int mode, int left, int top, int width, int *cur, int *bar
*(ptr++)=api->chars->button_right;
*(ptr++)=hclr|(bclr<<4);
i=3;
if(bline&BL_HELP) {
if(api->help_available) {
*(ptr++)=api->chars->button_left;
*(ptr++)=hclr|(bclr<<4);
*(ptr++)=api->chars->help_char;
......@@ -1010,7 +1006,7 @@ int ulist(int mode, int left, int top, int width, int *cur, int *bar
*(ptr++)=hclr|(bclr<<4);
}
*(ptr++)=api->chars->list_bottom_right;
*(ptr)=hclr|(bclr<<4); /* Not incremented to shut ot BCC */
*(ptr)=hclr|(bclr<<4); /* Not incremented to shut up BCC */
}
puttext(s_left+left,s_top+top,s_left+left+width-1
,s_top+top+height-1,tmp_buffer);
......@@ -1108,9 +1104,11 @@ int ulist(int mode, int left, int top, int width, int *cur, int *bar
while(1) {
#if 0 /* debug */
struct text_info txtinfo;
gettextinfo(&txtinfo);
gotoxy(30,1);
cprintf("y=%2d h=%2d c=%2d b=%2d s=%2d o=%2d"
,y,height,*cur,bar ? *bar :0xff,api->savnum,opts);
cprintf("y=%2d h=%2d c=%2d b=%2d s=%2d o=%2d w=%d/%d h=%d/%d"
,y,height,*cur,bar ? *bar :0xff,api->savnum,opts,txtinfo.screenwidth, api->scrn_width, txtinfo.screenheight, api->scrn_len);
#endif
if(api->timedisplay != NULL)
api->timedisplay(/* force? */FALSE);
......@@ -1594,19 +1592,16 @@ int ulist(int mode, int left, int top, int width, int *cur, int *bar
case CIO_KEY_F(5): /* F5 - Copy */
case CIO_KEY_CTRL_IC: /* Ctrl-Insert */
if(mode&WIN_COPY && !(mode&WIN_XTR && (*cur)==opts-1))
return((*cur)|MSK_GET);
return((*cur) | MSK_COPY);
break;
case CIO_KEY_SHIFT_DC: /* Shift-Del: Cut */
if(mode&WIN_COPY && !(mode&WIN_XTR && (*cur) == opts - 1))
if(mode&WIN_CUT && !(mode&WIN_XTR && (*cur) == opts - 1))
return((*cur) | MSK_CUT);
break;
case CIO_KEY_SHIFT_IC: /* Shift-Insert: Paste-Insert */
if(mode&WIN_PASTE)
return((*cur) | MSK_PASTE_INSERT);
break;
case CIO_KEY_F(6): /* F6 - Paste-Over */
case CIO_KEY_SHIFT_IC: /* Shift-Insert: Paste */
case CIO_KEY_F(6): /* F6 - Paste */
if(mode&WIN_PASTE && (mode&WIN_PASTEXTR || !(mode&WIN_XTR && (*cur)==opts-1)))
return((*cur)|MSK_PASTE_OVER);
return((*cur)|MSK_PASTE);
break;
case CIO_KEY_IC: /* insert */
if(mode&WIN_INS) {
......@@ -1825,9 +1820,9 @@ int ulist(int mode, int left, int top, int width, int *cur, int *bar
}
}
/* Update the status bar to reflect the Put/Paste option applicability */
if (bline&BL_PASTE && api->bottomline != NULL) {
if (bline&WIN_PASTE && api->bottomline != NULL) {
if ((mode&(WIN_XTR | WIN_PASTEXTR)) == WIN_XTR && (*cur) == opts - 1)
api->bottomline(bline & ~BL_PASTE);
api->bottomline(bline & ~WIN_PASTE);
else
api->bottomline(bline);
}
......@@ -2410,52 +2405,52 @@ static int uprintf(int x, int y, unsigned attr, char *fmat, ...)
/****************************************************************************/
/* Display bottom line of screen in inverse */
/****************************************************************************/
void bottomline(int line)
void bottomline(int mode)
{
int i=1;
uprintf(i,api->scrn_len+1,api->bclr|(api->cclr<<4)," ");
i+=4;
if(line&BL_HELP) {
uprintf(i,api->scrn_len+1,api->bclr|(api->cclr<<4),"F1 ");
i+=3;
uprintf(i,api->scrn_len+1,BLACK|(api->cclr<<4),"Help ");
i+=6;
i += uprintf(i,api->scrn_len+1,api->bclr|(api->cclr<<4)," ");
if(api->help_available) {
i += uprintf(i,api->scrn_len+1,api->bclr|(api->cclr<<4),"F1 ");
i += uprintf(i,api->scrn_len+1,BLACK|(api->cclr<<4),"Help ");
}
if(line&BL_EDIT) {
uprintf(i,api->scrn_len+1,api->bclr|(api->cclr<<4),"F2 ");
i+=3;
uprintf(i,api->scrn_len+1,BLACK|(api->cclr<<4),"Edit Item ");
i+=11;
if(mode&WIN_EDIT) {
i += uprintf(i,api->scrn_len+1,api->bclr|(api->cclr<<4),"F2 ");
i += uprintf(i,api->scrn_len+1,BLACK|(api->cclr<<4),"Edit Item ");
}
if(line&BL_COPY) {
uprintf(i,api->scrn_len+1,api->bclr|(api->cclr<<4),"F5 ");
i+=3;
uprintf(i,api->scrn_len+1,BLACK|(api->cclr<<4),"Copy Item ");
i+=11;
if(mode&WIN_COPY) {
if(api->mode&UIFC_NOCTRL) {
i += uprintf(i,api->scrn_len+1,api->bclr|(api->cclr<<4),"F5 ");
i += uprintf(i,api->scrn_len+1,BLACK|(api->cclr<<4),"Copy ");
} else {
i += uprintf(i,api->scrn_len+1,api->bclr|(api->cclr<<4),"^C");
i += uprintf(i,api->scrn_len+1,BLACK|(api->cclr<<4),"opy ");
}
}
if(mode&WIN_CUT) {
if(api->mode&UIFC_NOCTRL)
i += uprintf(i,api->scrn_len+1,api->bclr|(api->cclr<<4),"Shift-DEL ");
else
i += uprintf(i,api->scrn_len+1,api->bclr|(api->cclr<<4),"^X ");
i += uprintf(i,api->scrn_len+1,BLACK|(api->cclr<<4),"Cut ");
}
if(line&BL_PASTE) {
uprintf(i,api->scrn_len+1,api->bclr|(api->cclr<<4),"F6 ");
i+=3;
uprintf(i,api->scrn_len+1,BLACK|(api->cclr<<4),"Paste ");
i+=7;
if(mode&WIN_PASTE) {
if(api->mode&UIFC_NOCTRL)
i += uprintf(i,api->scrn_len+1,api->bclr|(api->cclr<<4),"F6 ");
else
i += uprintf(i,api->scrn_len+1,api->bclr|(api->cclr<<4),"^V ");
i += uprintf(i,api->scrn_len+1,BLACK|(api->cclr<<4),"Paste ");
}
if(line&BL_INS) {
uprintf(i,api->scrn_len+1,api->bclr|(api->cclr<<4),"INS ");
i+=4;
uprintf(i,api->scrn_len+1,BLACK|(api->cclr<<4),"Add Item ");
i+=10;
if(mode&WIN_INS) {
i += uprintf(i,api->scrn_len+1,api->bclr|(api->cclr<<4),"INS");
i += uprintf(i,api->scrn_len+1,BLACK|(api->cclr<<4),"ert Item ");
}
if(line&BL_DEL) {
uprintf(i,api->scrn_len+1,api->bclr|(api->cclr<<4),"DEL ");
i+=4;
uprintf(i,api->scrn_len+1,BLACK|(api->cclr<<4),"Delete Item ");
i+=13;
if(mode&WIN_DEL) {
i += uprintf(i,api->scrn_len+1,api->bclr|(api->cclr<<4),"DEL");
i += uprintf(i,api->scrn_len+1,BLACK|(api->cclr<<4),"ete Item ");
}
uprintf(i,api->scrn_len+1,api->bclr|(api->cclr<<4),"ESC "); /* Backspace is no good no way to abort editing */
i+=4;
uprintf(i,api->scrn_len+1,BLACK|(api->cclr<<4),"Exit");
i+=4;
i += uprintf(i,api->scrn_len+1,api->bclr|(api->cclr<<4),"ESC "); /* Backspace is no good no way to abort editing */
i += uprintf(i,api->scrn_len+1,BLACK|(api->cclr<<4),"Exit");
gotoxy(i,api->scrn_len+1);
textattr(BLACK|(api->cclr<<4));
clreol();
......
......@@ -255,9 +255,11 @@ int ulist(int mode, int left, int top, int width, int *cur, int *bar
}
str[0]=0;
if(mode&WIN_COPY)
strcat(str,", Copy, X-Cut");
strcat(str,", Copy");
if(mode&WIN_CUT)
strcat(str,", X-Cut");
if(mode&WIN_PASTE)
strcat(str,", Paste, Insert");
strcat(str,", Paste");
if(mode&WIN_INS)
strcat(str,", Add");
if(mode&WIN_DEL)
......@@ -324,7 +326,7 @@ int ulist(int mode, int left, int top, int width, int *cur, int *bar
return(MSK_COPY);
return(which("Copy",opts)|MSK_COPY);
case 'X': /* Cut */
if(!(mode&WIN_COPY))
if(!(mode&WIN_CUT))
break;
if(!opts)
break;
......@@ -333,26 +335,16 @@ int ulist(int mode, int left, int top, int width, int *cur, int *bar
if(opts==1)
return(MSK_CUT);
return(which("Cut",opts)|MSK_CUT);
case 'P': /* Paste-Over */
if(!(mode&WIN_PASTE))
break;
if(!opts)
break;
if(i>0 && i<=opts)
return((i-1)|MSK_PASTE_OVER);
if(opts==1)
return(MSK_PASTE_OVER);
return(which("Paste over",opts)|MSK_PASTE_OVER);
case 'I': /* Paste-Insert */
case 'P': /* Paste */
if(!(mode&WIN_PASTE))
break;
if(!opts)
break;
if(i>0 && i<=opts+1)
return((i-1)|MSK_PASTE_INSERT);
return((i-1)|MSK_PASTE);
if(opts==1)
return(MSK_PASTE_INSERT);
return(which("Insert pasted item before",opts+1)|MSK_PASTE_INSERT);
return(MSK_PASTE);
return(which("Insert pasted item before",opts+1)|MSK_PASTE);
}
}
}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment