[Add] More list support. More shipyard features. Allow for NULL text in widget.
This commit is contained in:
parent
8b76e4613c
commit
c5280cb4b3
31
src/land.c
31
src/land.c
@ -1,3 +1,4 @@
|
||||
#include "log.h"
|
||||
#include "toolkit.h"
|
||||
#include "player.h"
|
||||
#include "rng.h"
|
||||
@ -41,14 +42,20 @@ static int land_wid = 0; // Primary land window.
|
||||
static int secondary_wid = 0; // For the second opened land window (We can only have 2 max).
|
||||
static Planet* planet = NULL;
|
||||
|
||||
// Commodity excahnge.
|
||||
static void commodity_exchange(void);
|
||||
static void commodity_exchange_close(char* str);
|
||||
// Outfits.
|
||||
static void outfits(void);
|
||||
static void outfits_close(char* str);
|
||||
// Shipyard.
|
||||
static void shipyard(void);
|
||||
static void shipyard_close(char* str);
|
||||
static void shipyard_update(char* str);
|
||||
// Spaceport bar.
|
||||
static void spaceport_bar(void);
|
||||
static void spaceport_bar_close(char* str);
|
||||
// News.
|
||||
static void news(void);
|
||||
static void news_close(char* str);
|
||||
|
||||
@ -93,6 +100,9 @@ static void outfits_close(char* str) {
|
||||
}
|
||||
|
||||
static void shipyard(void) {
|
||||
char** ships;
|
||||
int nships;
|
||||
|
||||
secondary_wid = window_create("Shipyard",
|
||||
SHIPYARD_XPOS, SHIPYARD_YPOS,
|
||||
SHIPYARD_WIDTH, SHIPYARD_HEIGHT);
|
||||
@ -100,6 +110,20 @@ static void shipyard(void) {
|
||||
window_addButton(secondary_wid, -20, 20,
|
||||
BUTTON_WIDTH, BUTTON_HEIGHT, "btnCloseShipyard",
|
||||
"Close", shipyard_close);
|
||||
|
||||
window_addButton(secondary_wid, -40-BUTTON_WIDTH, 20,
|
||||
BUTTON_WIDTH, BUTTON_HEIGHT, "btnBuyShip",
|
||||
"Buy", NULL);
|
||||
|
||||
window_addText(secondary_wid, 20+200+20, -160,
|
||||
SHIPYARD_WIDTH-260, 200, 0, "txtDescription",
|
||||
&gl_defFont, &cConsole, NULL);
|
||||
|
||||
// Setup the ships to buy/sell.
|
||||
ships = ship_getAll(&nships);
|
||||
window_addList(secondary_wid, 20, 40,
|
||||
200, SHIPYARD_HEIGHT-120, "lstShipyard",
|
||||
ships, nships, 0, shipyard_update);
|
||||
}
|
||||
|
||||
static void shipyard_close(char* str) {
|
||||
@ -107,6 +131,13 @@ static void shipyard_close(char* str) {
|
||||
window_destroy(secondary_wid);
|
||||
}
|
||||
|
||||
static void shipyard_update(char* str) {
|
||||
(void)str;
|
||||
char* tship;
|
||||
|
||||
tship = toolkit_getList(secondary_wid, "lstShipyard");
|
||||
}
|
||||
|
||||
// Spaceport bar.
|
||||
static void spaceport_bar(void) {
|
||||
secondary_wid = window_create("SpacePort Bar", -1, -1, BAR_WIDTH, BAR_HEIGHT);
|
||||
|
10
src/ship.c
10
src/ship.c
@ -46,6 +46,16 @@ static char* ship_classes[] = {
|
||||
"NULL", "Civialian Light", "Civilian Medium", "Civilian Heavy"
|
||||
};
|
||||
|
||||
// Return all the ships in text form.
|
||||
char** ship_getAll(int* n) {
|
||||
char** shipnames = malloc(sizeof(Ship*) * ships);
|
||||
|
||||
for((*n)=0; (*n) < ships; (*n)++)
|
||||
shipnames[*n] = strdup(ship_stack[*n].name);
|
||||
|
||||
return shipnames;
|
||||
}
|
||||
|
||||
static char* ship_class(Ship* s) {
|
||||
return ship_classes[s->class];
|
||||
}
|
||||
|
@ -59,6 +59,7 @@ typedef struct Ship_ {
|
||||
|
||||
// Get.
|
||||
Ship* ship_get(const char* name);
|
||||
char** ship_getAll(int* n);
|
||||
|
||||
// Load/quit.
|
||||
int ships_load(void);
|
||||
|
@ -153,7 +153,8 @@ void window_addText(const unsigned int wid, const int x, const int y,
|
||||
else wgt->y = (double) y;
|
||||
wgt->dat.txt.colour = colour;
|
||||
wgt->dat.txt.centered = centered;
|
||||
wgt->dat.txt.text = strdup(string);
|
||||
if(string) wgt->dat.txt.text = strdup(string);
|
||||
else wgt->dat.txt.text = NULL;
|
||||
}
|
||||
|
||||
// Add a graphic to the window.
|
||||
@ -315,15 +316,23 @@ unsigned int window_create(char* name, const int x, const int y, const int w, co
|
||||
|
||||
// Destroy a widget.
|
||||
static void widget_cleanup(Widget* widget) {
|
||||
int i;
|
||||
if(widget->name) free(widget->name);
|
||||
|
||||
switch(widget->type) {
|
||||
case WIDGET_BUTTON:
|
||||
case WIDGET_BUTTON: // Must clear the button display text.
|
||||
if(widget->dat.btn.display) free(widget->dat.btn.display);
|
||||
break;
|
||||
case WIDGET_TEXT:
|
||||
case WIDGET_TEXT: // Must clear the text.
|
||||
if(widget->dat.txt.text) free(widget->dat.txt.text);
|
||||
break;
|
||||
case WIDGET_LIST: // Must clear the list.
|
||||
if(widget->dat.lst.options) {
|
||||
for(i = 0; i < widget->dat.lst.noptions; i++)
|
||||
free(widget->dat.lst.options[i]);
|
||||
free(widget->dat.lst.options);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@ -647,8 +656,10 @@ static void toolkit_renderButton(Widget* btn, double bx, double by) {
|
||||
}
|
||||
|
||||
static void toolkit_renderText(Widget* txt, double bx, double by) {
|
||||
if(txt->dat.txt.text == NULL) return;
|
||||
|
||||
if(txt->dat.txt.centered)
|
||||
gl_printMid(txt->dat.txt.font, txt->w,
|
||||
gl_printMid(txt->dat.txt.font, txt->w,
|
||||
bx + (double)gl_screen.w/2. + txt->x,
|
||||
by + (double)gl_screen.h/2. + txt->y,
|
||||
txt->dat.txt.colour, txt->dat.txt.text);
|
||||
|
Loading…
Reference in New Issue
Block a user