#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;
return ret;
}
+#define COKE_LABEL "Coke Machine"
+#define NCOKESLOTS 7 // slots 0 -- 6
+#define EPS_LABEL "Electronic Payment System"
+
/**
* \brief Show item \a Index at (\a Col, \a Row)
* \return Dispense index of item
switch(giUIMode)
{
// Standard UI
- // - This assumes that
case UI_MODE_STANDARD:
// Bounds check
// Index = -1, request limit
if( Index == 0 )
{
price = 0;
- name = "Coke Machine";
+ name = COKE_LABEL;
Index = -1; // -1 indicates a label
break;
}
Index --;
// Drinks 0 - 6
- if( Index <= 6 )
+ if( Index < NCOKESLOTS )
{
name = gaItems[Index].Desc;
price = gaItems[Index].Price;
status = gaItems[Index].Status;
break;
}
- Index -= 7;
+ Index -= NCOKESLOTS;
// EPS label
if( Index == 0 )
{
price = 0;
- name = "Electronic Payment System";
+ name = EPS_LABEL;
Index = -1; // -1 indicates a label
break;
}
price = gaItems[Index].Price;
status = gaItems[Index].Status;
break;
+ case UI_MODE_BASIC:
+ case UI_MODE_DRINKSONLY:
+ case UI_MODE_ALL:
default:
return -1;
}
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;
}