mirror of
https://github.com/Oibaf66/frodo-wii.git
synced 2024-11-25 12:56:59 +01:00
Add server message box support
This commit is contained in:
parent
fa26ae2980
commit
75385f566b
@ -37,7 +37,7 @@ CPP_SRCS=Src/C64_SC.cpp Src/main.cpp Src/Display.cpp Src/Prefs.cpp Src/SID.cpp \
|
|||||||
Src/gui/dialogue_box.cpp Src/gui/widget.cpp \
|
Src/gui/dialogue_box.cpp Src/gui/widget.cpp \
|
||||||
Src/gui/game_info.cpp Src/gui/status_bar.cpp Src/gui/gui.cpp Src/gui/listener.cpp \
|
Src/gui/game_info.cpp Src/gui/status_bar.cpp Src/gui/gui.cpp Src/gui/listener.cpp \
|
||||||
Src/timer.cpp Src/utils.cpp Src/gui/virtual_keyboard.cpp Src/gui/menu.cpp \
|
Src/timer.cpp Src/utils.cpp Src/gui/virtual_keyboard.cpp Src/gui/menu.cpp \
|
||||||
Src/gui/file_browser.cpp Src/data_store.cpp
|
Src/gui/file_browser.cpp Src/data_store.cpp Src/gui/network_server_messages.cpp
|
||||||
|
|
||||||
C_SRCS=Src/d64-read.c Src/gui/menu_messages.c
|
C_SRCS=Src/d64-read.c Src/gui/menu_messages.c
|
||||||
|
|
||||||
|
@ -67,7 +67,7 @@ CPPFILES := Display.cpp main.cpp Prefs.cpp SID.cpp REU.cpp IEC.cpp 1541fs.cpp \
|
|||||||
Network.cpp gui/dialogue_box.cpp gui/widget.cpp utils.cpp \
|
Network.cpp gui/dialogue_box.cpp gui/widget.cpp utils.cpp \
|
||||||
gui/game_info.cpp gui/status_bar.cpp gui/gui.cpp gui/listener.cpp \
|
gui/game_info.cpp gui/status_bar.cpp gui/gui.cpp gui/listener.cpp \
|
||||||
timer.cpp utils.cpp gui/virtual_keyboard.cpp gui/menu.cpp \
|
timer.cpp utils.cpp gui/virtual_keyboard.cpp gui/menu.cpp \
|
||||||
gui/file_browser.cpp data_store.cpp
|
gui/file_browser.cpp data_store.cpp Src/gui/network_server_messages.cpp
|
||||||
|
|
||||||
sFILES :=
|
sFILES :=
|
||||||
SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.S)))
|
SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.S)))
|
||||||
|
@ -30,6 +30,7 @@
|
|||||||
#include "gui/gui.hh"
|
#include "gui/gui.hh"
|
||||||
#include "gui/status_bar.hh"
|
#include "gui/status_bar.hh"
|
||||||
#include "gui/network_user_menu.hh"
|
#include "gui/network_user_menu.hh"
|
||||||
|
#include "gui/network_server_messages.hh"
|
||||||
|
|
||||||
#if defined(GEKKO)
|
#if defined(GEKKO)
|
||||||
# include <wiiuse/wpad.h>
|
# include <wiiuse/wpad.h>
|
||||||
@ -961,6 +962,9 @@ bool Network::DecodeUpdate(C64Display *display, uint8 *js, MOS6581 *dst)
|
|||||||
NetworkUpdateTextMessage *tm = (NetworkUpdateTextMessage*)p->data;
|
NetworkUpdateTextMessage *tm = (NetworkUpdateTextMessage*)p->data;
|
||||||
|
|
||||||
Gui::gui->status_bar->queueMessage((const char*)tm->data);
|
Gui::gui->status_bar->queueMessage((const char*)tm->data);
|
||||||
|
/* Queue up text message */
|
||||||
|
if (tm->flags & NETWORK_UPDATE_TEXT_MESSAGE_BROADCAST)
|
||||||
|
Gui::gui->server_msgs->queueMessage((const char *)tm->data);
|
||||||
} break;
|
} break;
|
||||||
case REGISTER_DATA:
|
case REGISTER_DATA:
|
||||||
{
|
{
|
||||||
|
@ -16,6 +16,8 @@
|
|||||||
#include "sdl_ttf_font.hh"
|
#include "sdl_ttf_font.hh"
|
||||||
#include "virtual_keyboard.hh"
|
#include "virtual_keyboard.hh"
|
||||||
|
|
||||||
|
#include "network_server_messages.hh"
|
||||||
|
|
||||||
extern SDL_Surface *screen;
|
extern SDL_Surface *screen;
|
||||||
|
|
||||||
#define THEME_ROOT_PATH "themes"
|
#define THEME_ROOT_PATH "themes"
|
||||||
@ -135,6 +137,8 @@ Gui::~Gui()
|
|||||||
|
|
||||||
if (this->status_bar)
|
if (this->status_bar)
|
||||||
delete this->status_bar;
|
delete this->status_bar;
|
||||||
|
if (this->server_msgs)
|
||||||
|
delete this->server_msgs;
|
||||||
|
|
||||||
if (this->dlg)
|
if (this->dlg)
|
||||||
delete this->dlg;
|
delete this->dlg;
|
||||||
@ -233,6 +237,7 @@ bool Gui::setTheme(const char *path)
|
|||||||
if (!this->mv)
|
if (!this->mv)
|
||||||
{
|
{
|
||||||
this->status_bar = new StatusBar();
|
this->status_bar = new StatusBar();
|
||||||
|
this->server_msgs = new NetworkServerMessages();
|
||||||
|
|
||||||
this->mv = new MainView();
|
this->mv = new MainView();
|
||||||
this->dv = new DiscView();
|
this->dv = new DiscView();
|
||||||
@ -262,6 +267,7 @@ void Gui::runLogic(void)
|
|||||||
|
|
||||||
if (!this->is_active || !cur_view)
|
if (!this->is_active || !cur_view)
|
||||||
return;
|
return;
|
||||||
|
Gui::gui->server_msgs->runLogic();
|
||||||
if (this->dlg)
|
if (this->dlg)
|
||||||
this->dlg->runLogic();
|
this->dlg->runLogic();
|
||||||
else
|
else
|
||||||
|
@ -15,6 +15,7 @@
|
|||||||
|
|
||||||
class DialogueBox;
|
class DialogueBox;
|
||||||
class StatusBar;
|
class StatusBar;
|
||||||
|
class NetworkServerMessages;
|
||||||
class GameInfo;
|
class GameInfo;
|
||||||
|
|
||||||
class MainView;
|
class MainView;
|
||||||
@ -105,6 +106,7 @@ public:
|
|||||||
VirtualKeyboard *kbd;
|
VirtualKeyboard *kbd;
|
||||||
DialogueBox *dlg;
|
DialogueBox *dlg;
|
||||||
StatusBar *status_bar;
|
StatusBar *status_bar;
|
||||||
|
NetworkServerMessages *server_msgs;
|
||||||
|
|
||||||
MainView *mv;
|
MainView *mv;
|
||||||
DiscView *dv;
|
DiscView *dv;
|
||||||
|
@ -190,11 +190,9 @@ public:
|
|||||||
dst = (SDL_Rect){350,13,0,0};
|
dst = (SDL_Rect){350,13,0,0};
|
||||||
SDL_BlitSurface(Gui::gui->infobox, NULL, where, &dst);
|
SDL_BlitSurface(Gui::gui->infobox, NULL, where, &dst);
|
||||||
|
|
||||||
dst = (SDL_Rect){350,242,0,0};
|
|
||||||
SDL_BlitSurface(Gui::gui->textbox, NULL, where, &dst);
|
|
||||||
|
|
||||||
this->menu->draw(where, 50, 70, 300, 400);
|
this->menu->draw(where, 50, 70, 300, 400);
|
||||||
this->help->draw(where, 354, 24, 264, 210);
|
this->help->draw(where, 354, 24, 264, 210);
|
||||||
|
Gui::gui->server_msgs->draw(where);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
@ -186,11 +186,9 @@ public:
|
|||||||
dst = (SDL_Rect){350,13,0,0};
|
dst = (SDL_Rect){350,13,0,0};
|
||||||
SDL_BlitSurface(Gui::gui->infobox, NULL, where, &dst);
|
SDL_BlitSurface(Gui::gui->infobox, NULL, where, &dst);
|
||||||
|
|
||||||
dst = (SDL_Rect){350,242,0,0};
|
|
||||||
SDL_BlitSurface(Gui::gui->textbox, NULL, where, &dst);
|
|
||||||
|
|
||||||
this->menu->draw(where, 50, 70, 300, 400);
|
this->menu->draw(where, 50, 70, 300, 400);
|
||||||
this->help->draw(where, 354, 24, 264, 210);
|
this->help->draw(where, 354, 24, 264, 210);
|
||||||
|
Gui::gui->server_msgs->draw(where);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
78
Src/gui/network_server_messages.cpp
Normal file
78
Src/gui/network_server_messages.cpp
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
#include "network_server_messages.hh"
|
||||||
|
#include "utils.hh"
|
||||||
|
|
||||||
|
NetworkServerMessages::NetworkServerMessages() : StatusBar()
|
||||||
|
{
|
||||||
|
unsigned i;
|
||||||
|
|
||||||
|
for (i = 0; i < ARRAY_SIZE(this->flowed_messages) - 1; i++)
|
||||||
|
this->flowed_messages[i] = (char *)xmalloc(28);
|
||||||
|
this->flowed_messages[i] = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
NetworkServerMessages::~NetworkServerMessages()
|
||||||
|
{
|
||||||
|
for (unsigned i = 0; i < ARRAY_SIZE(this->flowed_messages) - 1; i++)
|
||||||
|
free(this->flowed_messages[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
void NetworkServerMessages::draw(SDL_Surface *where)
|
||||||
|
{
|
||||||
|
SDL_Rect dst;
|
||||||
|
int x = 350;
|
||||||
|
int y = 242;
|
||||||
|
int w = Gui::gui->textbox->w;
|
||||||
|
int h = Gui::gui->textbox->h;
|
||||||
|
|
||||||
|
dst = (SDL_Rect){x,y,0,0};
|
||||||
|
SDL_BlitSurface(Gui::gui->textbox, NULL, where, &dst);
|
||||||
|
|
||||||
|
Menu::draw(where, x+6, y+8, w-6, h-8);
|
||||||
|
}
|
||||||
|
|
||||||
|
void NetworkServerMessages::timeoutCallback()
|
||||||
|
{
|
||||||
|
const char *cur = this->messages[this->tail];
|
||||||
|
char *cpy = xstrdup(cur);
|
||||||
|
char *msgp;
|
||||||
|
char *p;
|
||||||
|
size_t line_len = 0;
|
||||||
|
size_t line = 0;
|
||||||
|
|
||||||
|
for (unsigned i = 0; i < ARRAY_SIZE(this->flowed_messages) - 1; i++)
|
||||||
|
this->flowed_messages[i][0] = '\0';
|
||||||
|
|
||||||
|
p = strtok_r(cpy, " ", &msgp);
|
||||||
|
while (p)
|
||||||
|
{
|
||||||
|
int word_len = strlen(p);
|
||||||
|
|
||||||
|
if (line_len + word_len > 24)
|
||||||
|
{
|
||||||
|
line++;
|
||||||
|
/* Too long! */
|
||||||
|
if (line >= ARRAY_SIZE(this->flowed_messages))
|
||||||
|
break;
|
||||||
|
line_len = 0;
|
||||||
|
}
|
||||||
|
strcat(this->flowed_messages[line], p);
|
||||||
|
strcat(this->flowed_messages[line], " ");
|
||||||
|
|
||||||
|
line_len += word_len + 1;
|
||||||
|
p = strtok_r(NULL, " ", &msgp);
|
||||||
|
}
|
||||||
|
for (line = line + 1; line < ARRAY_SIZE(this->flowed_messages) - 1; line++)
|
||||||
|
strcpy(this->flowed_messages[line], "#");
|
||||||
|
|
||||||
|
this->setText((const char **)this->flowed_messages);
|
||||||
|
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
this->tail = (this->tail + 1) % N_STATUS_MESSAGES;
|
||||||
|
if (this->messages[this->tail])
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
Gui::gui->timerController->arm(this, 5000);
|
||||||
|
|
||||||
|
free(cpy);
|
||||||
|
}
|
24
Src/gui/network_server_messages.hh
Normal file
24
Src/gui/network_server_messages.hh
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
#ifndef NETWORK_SERVER_MESSAGES_HH
|
||||||
|
#define NETWORK_SERVER_MESSAGES_HH
|
||||||
|
|
||||||
|
#include <SDL.h>
|
||||||
|
|
||||||
|
#include "status_bar.hh"
|
||||||
|
|
||||||
|
class NetworkServerMessages : public StatusBar
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
NetworkServerMessages();
|
||||||
|
|
||||||
|
~NetworkServerMessages();
|
||||||
|
|
||||||
|
virtual void draw(SDL_Surface *where);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void timeoutCallback();
|
||||||
|
|
||||||
|
private:
|
||||||
|
char *flowed_messages[8];
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* NETWORK_SERVER_MESSAGES_HH */
|
@ -13,6 +13,9 @@ StatusBar::StatusBar() : Menu(Gui::gui->small_font), TimeoutHandler()
|
|||||||
|
|
||||||
void StatusBar::queueMessage(const char *message)
|
void StatusBar::queueMessage(const char *message)
|
||||||
{
|
{
|
||||||
|
/* Free the existing message if we are overwriting it */
|
||||||
|
free((void*)this->messages[this->head]);
|
||||||
|
|
||||||
this->messages[this->head] = xstrdup(message);
|
this->messages[this->head] = xstrdup(message);
|
||||||
|
|
||||||
/* If this is the first message, display it as soon as possible */
|
/* If this is the first message, display it as soon as possible */
|
||||||
@ -30,6 +33,7 @@ const char *StatusBar::dequeueMessage()
|
|||||||
|
|
||||||
if (this->head == this->tail)
|
if (this->head == this->tail)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
this->messages[this->tail] = NULL;
|
||||||
this->tail = (this->tail + 1) % N_STATUS_MESSAGES;
|
this->tail = (this->tail + 1) % N_STATUS_MESSAGES;
|
||||||
|
|
||||||
return out;
|
return out;
|
||||||
|
@ -6,9 +6,9 @@
|
|||||||
#include "menu.hh"
|
#include "menu.hh"
|
||||||
#include "gui.hh"
|
#include "gui.hh"
|
||||||
|
|
||||||
#define N_STATUS_MESSAGES 8
|
#define N_STATUS_MESSAGES 10
|
||||||
|
|
||||||
class StatusBar : public Menu, TimeoutHandler
|
class StatusBar : public Menu, public TimeoutHandler
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
StatusBar();
|
StatusBar();
|
||||||
|
Loading…
Reference in New Issue
Block a user