#include <unistd.h> // getuid
#include "common.h"
+// === CONSTANTS ===
+#define COLOURPAIR_DEFAULT 0
+#define COLOURPAIR_CANTBUY 1
+#define COLOURPAIR_SELECTED 2
+
// === PROTOTYPES ===
int ShowItemAt(int Row, int Col, int Width, int Index, int bHilighted);
void PrintAlign(int Row, int Col, int Width, const char *Left, char Pad1, const char *Mid, char Pad2, const char *Right, ...);
// Enter curses mode
initscr();
+ start_color();
+ use_default_colors();
+ init_pair(COLOURPAIR_DEFAULT, -1, -1); // Not avaliable
+ init_pair(COLOURPAIR_CANTBUY, COLOR_BLACK, -1); // Not avaliable
+ init_pair(COLOURPAIR_SELECTED, COLOR_GREEN, -1); // Selected
cbreak(); noecho();
// Get max index
PrintAlign(yBase+height-1, xBase+1, width-2,
username, ' ', balance_str, ' ', gsUserFlags);
PrintAlign(yBase+height, xBase+1, width-2,
- "q: Quit", ' ', "Arrow: Select", ' ', "Enter: Drop");
+ "q: Quit", ' ', "Arrows: Select", ' ', "Enter: Buy");
// Get input
case 'j': _ItemDown(); break;
case 'k': _ItemUp(); break;
case 'l': break;
- case 0x1b: // Escape
case 'q':
ret = -1; // -1: Return with no dispense
break;
switch( status )
{
case 0:
- if( bHilighted )
+ if( bHilighted ) {
+ color_set( COLOURPAIR_SELECTED, NULL );
printw("-> ");
- else
+ }
+ else if( price > giUserBalance ) {
+ attrset(A_BOLD);
+ color_set( COLOURPAIR_CANTBUY, NULL );
+ printw(" ");
+ }
+ else {
+ color_set( 0, NULL );
printw(" ");
+ }
break;
case 1:
+ attrset(A_BOLD);
+ color_set( COLOURPAIR_CANTBUY, NULL );
printw("SLD ");
break;
default:
case -1:
+ color_set( COLOURPAIR_CANTBUY, NULL );
printw("ERR ");
break;
}
printw("%-*.*s", nameWidth, nameWidth, name);
printw(" %4i", price);
+ color_set(0, NULL);
+ attrset(A_NORMAL);
}
else
{
}
// If the item isn't availiable for sale, return -1 (so it's skipped)
- if( status || (price > giUserBalance && gbDisallowSelectWithoutBalance) )
- Index = -1;
+ if( status > 0 || (price > giUserBalance && gbDisallowSelectWithoutBalance) )
+ Index = -2;
return Index;
}