Code cleanup and minor improvements, brought back FocusBugWorkaround (still needed in guisan)

This commit is contained in:
Dimitris Panokostas 2017-12-03 12:26:52 +01:00
parent f0f41db48c
commit 59f80f9d9b
13 changed files with 545 additions and 480 deletions

View file

@ -6,11 +6,38 @@
<Directories />
<PathStyle>MinGWUnixSlash</PathStyle>
</CustomSourceDirectories>
<BuildHost>
<Transport>None</Transport>
</BuildHost>
<DeploymentHost>
<HostName>192.168.1.189</HostName>
<Transport>SSH</Transport>
<UserName>pi</UserName>
</DeploymentHost>
<MainSourceTransferCommand>
<SkipWhenRunningCommandList>false</SkipWhenRunningCommandList>
<RemoteHost>
<Transport>None</Transport>
</RemoteHost>
<LocalDirectory>$(ProjectDir)</LocalDirectory>
<RemoteDirectory>/tmp/VisualGDB/$(ProjectDirUnixStyle)</RemoteDirectory>
<FileMasks>
<string>*.cpp</string>
<string>*.h</string>
<string>*.hpp</string>
<string>*.c</string>
<string>*.cc</string>
<string>*.cxx</string>
<string>*.mak</string>
<string>Makefile</string>
<string>*.txt</string>
<string>*.cmake</string>
</FileMasks>
<TransferNewFilesOnly>true</TransferNewFilesOnly>
<IncludeSubdirectories>true</IncludeSubdirectories>
<DeleteDisappearedFiles>false</DeleteDisappearedFiles>
<ApplyGlobalExclusionList>true</ApplyGlobalExclusionList>
</MainSourceTransferCommand>
<AllowChangingHostForMainCommands>false</AllowChangingHostForMainCommands>
<SkipBuildIfNoSourceFilesChanged>false</SkipBuildIfNoSourceFilesChanged>
<IgnoreFileTransferErrors>false</IgnoreFileTransferErrors>

View file

@ -45,6 +45,7 @@
<CPPLanguageStandard>GNUPP14</CPPLanguageStandard>
<AdditionalIncludeDirectories>=/usr/local/include/SDL2;=/opt/vc/include;=/opt/vc/include/interface/vcos/pthreads;=/opt/vc/include/interface/vmcs_host/linux;../../src/guisan/include;%(ClCompile.AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>DEBUG=1;_REENTRANT;%(ClCompile.PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalOptions>-march=armv8-a -mfpu=neon-fp-armv8 -mfloat-abi=hard %(AdditionalOptions)</AdditionalOptions>
</ClCompile>
<Link>
<AdditionalLinkerInputs>;%(Link.AdditionalLinkerInputs)</AdditionalLinkerInputs>
@ -58,6 +59,7 @@
<CPPLanguageStandard>GNUPP14</CPPLanguageStandard>
<AdditionalIncludeDirectories>=/usr/local/include/SDL2;=/opt/vc/include;=/opt/vc/include/interface/vcos/pthreads;=/opt/vc/include/interface/vmcs_host/linux;../../src/guisan/include;%(ClCompile.AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>NDEBUG=1;RELEASE=1;_REENTRANT;%(ClCompile.PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalOptions>-march=armv8-a -mfpu=neon-fp-armv8 -mfloat-abi=hard %(AdditionalOptions)</AdditionalOptions>
</ClCompile>
<Link>
<AdditionalLinkerInputs>;%(Link.AdditionalLinkerInputs)</AdditionalLinkerInputs>

View file

@ -8,81 +8,80 @@
#include "options.h"
int my_setcurrentdir (const TCHAR *curdir, TCHAR *oldcur)
int my_setcurrentdir(const TCHAR* curdir, TCHAR* oldcur)
{
int ret = 0;
const int ret = 0;
if (oldcur)
getcwd(oldcur, MAX_DPATH);
if (curdir)
chdir (curdir);
chdir(curdir);
return ret;
}
int my_mkdir (const char*name)
int my_mkdir(const char* name)
{
return mkdir(name, 0777);
return mkdir(name, 0777);
}
int my_rmdir (const char*name)
int my_rmdir(const char* name)
{
return rmdir(name);
return rmdir(name);
}
int my_unlink (const char* name)
int my_unlink(const char* name)
{
return unlink(name);
return unlink(name);
}
int my_rename (const char* oldname, const char* newname)
int my_rename(const char* oldname, const char* newname)
{
return rename(oldname, newname);
return rename(oldname, newname);
}
struct my_opendir_s
{
void *h;
void* h;
};
struct my_opendir_s *my_opendir (const char* name)
struct my_opendir_s* my_opendir(const char* name)
{
struct my_opendir_s *mod;
struct my_opendir_s* mod;
mod = xmalloc (struct my_opendir_s, 1);
if (!mod)
return NULL;
mod->h = opendir(name);
if (mod->h == NULL) {
return nullptr;
mod->h = opendir(name);
if (mod->h == nullptr)
{
xfree (mod);
return NULL;
return nullptr;
}
return mod;
}
void my_closedir (struct my_opendir_s *mod)
void my_closedir(struct my_opendir_s* mod)
{
if (mod)
closedir((DIR *) mod->h);
closedir(static_cast<DIR *>(mod->h));
xfree (mod);
}
int my_readdir (struct my_opendir_s *mod, char* name)
int my_readdir(struct my_opendir_s* mod, char* name)
{
struct dirent *de;
if (!mod)
return 0;
if (!mod)
return 0;
de = readdir((DIR *) mod->h);
if(de == 0)
return 0;
struct dirent * de = readdir(static_cast<DIR *>(mod->h));
if (de == nullptr)
return 0;
strncpy(name, de->d_name, MAX_PATH);
return 1;
}
@ -90,117 +89,118 @@ int my_readdir (struct my_opendir_s *mod, char* name)
struct my_openfile_s
{
void *h;
void* h;
};
void my_close (struct my_openfile_s *mos)
void my_close(struct my_openfile_s* mos)
{
if(mos)
close((int) mos->h);
xfree (mos);
if (mos)
close(int(mos->h));
xfree (mos);
}
uae_s64 int my_lseek (struct my_openfile_s *mos, uae_s64 int offset, int pos)
uae_s64 int my_lseek(struct my_openfile_s* mos,const uae_s64 int offset, const int pos)
{
return lseek((int) mos->h, offset, pos);
return lseek(int(mos->h), offset, pos);
}
uae_s64 int my_fsize (struct my_openfile_s *mos)
uae_s64 int my_fsize(struct my_openfile_s* mos)
{
uae_s64 pos = lseek((int) mos->h, 0, SEEK_CUR);
uae_s64 size = lseek((int) mos->h, 0, SEEK_END);
lseek((int) mos->h, pos, SEEK_SET);
uae_s64 pos = lseek(int(mos->h), 0, SEEK_CUR);
uae_s64 size = lseek(int(mos->h), 0, SEEK_END);
lseek(int(mos->h), pos, SEEK_SET);
return size;
}
unsigned int my_read (struct my_openfile_s *mos, void *b, unsigned int size)
unsigned int my_read(struct my_openfile_s* mos, void* b, unsigned int size)
{
return read((int) mos->h, b, size);
return read(int(mos->h), b, size);
}
unsigned int my_write (struct my_openfile_s *mos, void *b, unsigned int size)
unsigned int my_write(struct my_openfile_s* mos, void* b, unsigned int size)
{
return write((int) mos->h, b, size);
return write(int(mos->h), b, size);
}
int my_existsfile (const char *name)
int my_existsfile(const char* name)
{
struct stat st;
if (lstat (name, &st) == -1) {
if (lstat(name, &st) == -1)
{
return 0;
} else {
if (!S_ISDIR(st.st_mode))
return 1;
}
return 0;
if (!S_ISDIR(st.st_mode))
return 1;
return 0;
}
int my_existsdir(const char *name)
int my_existsdir(const char* name)
{
struct stat st;
struct stat st;
if(lstat(name, &st) == -1) {
return 0;
} else {
if (S_ISDIR(st.st_mode))
return 1;
}
return 0;
if (lstat(name, &st) == -1)
{
return 0;
}
if (S_ISDIR(st.st_mode))
return 1;
return 0;
}
struct my_openfile_s *my_open (const TCHAR *name, int flags)
struct my_openfile_s* my_open(const TCHAR* name, const int flags)
{
struct my_openfile_s *mos;
struct my_openfile_s* mos;
mos = xmalloc (struct my_openfile_s, 1);
if (!mos)
return NULL;
return nullptr;
if (flags & O_CREAT)
mos->h = reinterpret_cast<void *>(open(name, flags, 0660));
else
mos->h = reinterpret_cast<void *>(open(name, flags));
if (!mos->h) {
if (!mos->h)
{
xfree (mos);
mos = NULL;
}
return mos;
mos = nullptr;
}
return mos;
}
int my_truncate (const TCHAR *name, uae_u64 len)
int my_truncate(const TCHAR* name, uae_u64 len)
{
return truncate(name, len);
return truncate(name, len);
}
int my_getvolumeinfo (const char *root)
int my_getvolumeinfo(const char* root)
{
struct stat st;
int ret = 0;
struct stat st;
const int ret = 0;
if (lstat (root, &st) == -1)
return -1;
if (!S_ISDIR(st.st_mode))
return -2;
return ret;
if (lstat(root, &st) == -1)
return -1;
if (!S_ISDIR(st.st_mode))
return -2;
return ret;
}
FILE *my_opentext (const TCHAR *name)
FILE* my_opentext(const TCHAR* name)
{
return fopen (name, "r");
return fopen(name, "r");
}
bool my_issamepath(const TCHAR *path1, const TCHAR *path2)
bool my_issamepath(const TCHAR* path1, const TCHAR* path2)
{
if (!_tcsicmp(path1, path2))
return true;
@ -208,9 +208,9 @@ bool my_issamepath(const TCHAR *path1, const TCHAR *path2)
}
const TCHAR *my_getfilepart(const TCHAR *filename)
const TCHAR* my_getfilepart(const TCHAR* filename)
{
const TCHAR *p;
const TCHAR* p;
p = _tcsrchr(filename, '\\');
if (p)
@ -223,8 +223,9 @@ const TCHAR *my_getfilepart(const TCHAR *filename)
/* Returns 1 if an actual volume-name was found, 2 if no volume-name (so uses some defaults) */
int target_get_volume_name(struct uaedev_mount_info *mtinf, struct uaedev_config_info *ci, bool inserted, bool fullcheck, int cnt)
int target_get_volume_name(struct uaedev_mount_info* mtinf, struct uaedev_config_info* ci, bool inserted,
bool fullcheck, int cnt)
{
sprintf(ci->volname, "DH_%c", ci->rootdir[0]);
return 2;
return 2;
}

View file

@ -27,19 +27,21 @@
#define DIALOG_WIDTH 620
#define DIALOG_HEIGHT 272
static SDL_Joystick *GUIjoy;
static SDL_Joystick* GUIjoy;
extern struct host_input_button host_input_buttons[MAX_INPUT_DEVICES];
static const char* harddisk_filter[] = {".hdf", "\0"};
struct controller_map {
struct controller_map
{
int type;
char display[64];
};
static struct controller_map controller[] = {
{ HD_CONTROLLER_TYPE_UAE, "UAE" },
{ HD_CONTROLLER_TYPE_IDE_FIRST, "A600/A1200/A4000 IDE" },
{ -1 }
{HD_CONTROLLER_TYPE_UAE, "UAE"},
{HD_CONTROLLER_TYPE_IDE_FIRST, "A600/A1200/A4000 IDE"},
{-1}
};
static bool dialogResult = false;
@ -67,13 +69,13 @@ static gcn::Label* lblSectors;
static gcn::TextField* txtSectors;
static gcn::Label* lblBlocksize;
static gcn::TextField* txtBlocksize;
static gcn::Label *lblController;
static gcn::Label* lblController;
static gcn::UaeDropDown* cboController;
static gcn::UaeDropDown* cboUnit;
static void check_rdb(const TCHAR* filename)
{
bool isrdb = hardfile_testrdb(filename);
const bool isrdb = hardfile_testrdb(filename);
if (isrdb)
{
txtSectors->setText("0");
@ -100,13 +102,14 @@ public:
return 2;
}
std::string getElementAt(int i) override
string getElementAt(const int i) override
{
if (i < 0 || i >= 2)
return "---";
return controller[i].display;
}
};
static ControllerListModel controllerListModel;
@ -122,7 +125,7 @@ public:
return 4;
}
std::string getElementAt(int i) override
string getElementAt(int i) override
{
char num[8];
@ -132,6 +135,7 @@ public:
return num;
}
};
static UnitListModel unitListModel;
class FilesysHardfileActionListener : public gcn::ActionListener
@ -153,8 +157,10 @@ public:
wndEditFilesysHardfile->requestModalFocus();
cmdPath->requestFocus();
}
else if (actionEvent.getSource() == cboController) {
switch (controller[cboController->getSelected()].type) {
else if (actionEvent.getSource() == cboController)
{
switch (controller[cboController->getSelected()].type)
{
case HD_CONTROLLER_TYPE_UAE:
cboUnit->setSelected(0);
cboUnit->setEnabled(false);
@ -190,11 +196,15 @@ static FilesysHardfileActionListener* filesysHardfileActionListener;
static void InitEditFilesysHardfile()
{
for (int i = 0; expansionroms[i].name; i++) {
const struct expansionromtype *erc = &expansionroms[i];
if (erc->deviceflags & EXPANSIONTYPE_IDE) {
for (int j = 0; controller[j].type >= 0; ++j) {
if (!strcmp(erc->friendlyname, controller[j].display)) {
for (int i = 0; expansionroms[i].name; i++)
{
const struct expansionromtype* erc = &expansionroms[i];
if (erc->deviceflags & EXPANSIONTYPE_IDE)
{
for (int j = 0; controller[j].type >= 0; ++j)
{
if (!strcmp(erc->friendlyname, controller[j].display))
{
controller[j].type = HD_CONTROLLER_TYPE_IDE_EXPANSION_FIRST + i;
break;
}
@ -213,14 +223,16 @@ static void InitEditFilesysHardfile()
cmdOK = new gcn::Button("Ok");
cmdOK->setSize(BUTTON_WIDTH, BUTTON_HEIGHT);
cmdOK->setPosition(DIALOG_WIDTH - DISTANCE_BORDER - 2 * BUTTON_WIDTH - DISTANCE_NEXT_X, DIALOG_HEIGHT - 2 * DISTANCE_BORDER - BUTTON_HEIGHT - 10);
cmdOK->setPosition(DIALOG_WIDTH - DISTANCE_BORDER - 2 * BUTTON_WIDTH - DISTANCE_NEXT_X,
DIALOG_HEIGHT - 2 * DISTANCE_BORDER - BUTTON_HEIGHT - 10);
cmdOK->setBaseColor(gui_baseCol);
cmdOK->setId("hdfOK");
cmdOK->addActionListener(filesysHardfileActionListener);
cmdCancel = new gcn::Button("Cancel");
cmdCancel->setSize(BUTTON_WIDTH, BUTTON_HEIGHT);
cmdCancel->setPosition(DIALOG_WIDTH - DISTANCE_BORDER - BUTTON_WIDTH, DIALOG_HEIGHT - 2 * DISTANCE_BORDER - BUTTON_HEIGHT - 10);
cmdCancel->setPosition(DIALOG_WIDTH - DISTANCE_BORDER - BUTTON_WIDTH,
DIALOG_HEIGHT - 2 * DISTANCE_BORDER - BUTTON_HEIGHT - 10);
cmdCancel->setBaseColor(gui_baseCol);
cmdCancel->setId("hdfCancel");
cmdCancel->addActionListener(filesysHardfileActionListener);
@ -386,8 +398,8 @@ static void ExitEditFilesysHardfile()
static void EditFilesysHardfileLoop()
{
// TODO: Check if this is needed in Guisan?
//FocusBugWorkaround(wndEditFilesysHardfile);
FocusBugWorkaround(wndEditFilesysHardfile);
GUIjoy = SDL_JoystickOpen(0);
while (!dialogFinished)
@ -433,67 +445,62 @@ static void EditFilesysHardfileLoop()
break;
}
}
else if (event.type == SDL_JOYBUTTONDOWN || event.type == SDL_JOYHATMOTION)
{
gcn::FocusHandler* focusHdl;
gcn::Widget* activeWidget;
else if (event.type == SDL_JOYBUTTONDOWN || event.type == SDL_JOYHATMOTION)
{
gcn::FocusHandler* focusHdl;
gcn::Widget* activeWidget;
int hat = SDL_JoystickGetHat(GUIjoy, 0);
const int hat = SDL_JoystickGetHat(GUIjoy, 0);
if (SDL_JoystickGetButton(GUIjoy,host_input_buttons[0].dpad_up) || (hat & SDL_HAT_UP)) // dpad
{
if(HandleNavigation(DIRECTION_UP))
continue; // Don't change value when enter Slider -> don't send event to control
else
{PushFakeKey(SDLK_UP);}
break;
}
else if (SDL_JoystickGetButton(GUIjoy,host_input_buttons[0].dpad_down) || (hat & SDL_HAT_DOWN)) // dpad
{
if(HandleNavigation(DIRECTION_DOWN))
continue; // Don't change value when enter Slider -> don't send event to control
else
{PushFakeKey(SDLK_DOWN);}
break;
}
else if (SDL_JoystickGetButton(GUIjoy,host_input_buttons[0].dpad_right) || (hat & SDL_HAT_RIGHT)) // dpad
{
if(HandleNavigation(DIRECTION_RIGHT))
continue; // Don't change value when enter Slider -> don't send event to control
else
{PushFakeKey(SDLK_RIGHT);}
break;
}
else if (SDL_JoystickGetButton(GUIjoy,host_input_buttons[0].dpad_left) || (hat & SDL_HAT_LEFT)) // dpad
{
if(HandleNavigation(DIRECTION_LEFT))
continue; // Don't change value when enter Slider -> don't send event to control
else
{PushFakeKey(SDLK_LEFT);}
break;
}
else if (SDL_JoystickGetButton(GUIjoy,host_input_buttons[0].south_button)) // need this to be X button
{
PushFakeKey(SDLK_RETURN);
continue; }
else if (SDL_JoystickGetButton(GUIjoy,host_input_buttons[0].east_button) ||
SDL_JoystickGetButton(GUIjoy,host_input_buttons[0].start_button)) // need this to be START button
{ dialogFinished = true;
break;}
}
//-------------------------------------------------
// Send event to guichan-controls
//-------------------------------------------------
if (SDL_JoystickGetButton(GUIjoy, host_input_buttons[0].dpad_up) || (hat & SDL_HAT_UP)) // dpad
{
if (HandleNavigation(DIRECTION_UP))
continue; // Don't change value when enter Slider -> don't send event to control
PushFakeKey(SDLK_UP);
break;
}
if (SDL_JoystickGetButton(GUIjoy, host_input_buttons[0].dpad_down) || (hat & SDL_HAT_DOWN)) // dpad
{
if (HandleNavigation(DIRECTION_DOWN))
continue; // Don't change value when enter Slider -> don't send event to control
PushFakeKey(SDLK_DOWN);
break;
}
if (SDL_JoystickGetButton(GUIjoy, host_input_buttons[0].dpad_right) || (hat & SDL_HAT_RIGHT)) // dpad
{
if (HandleNavigation(DIRECTION_RIGHT))
continue; // Don't change value when enter Slider -> don't send event to control
PushFakeKey(SDLK_RIGHT);
break;
}
if (SDL_JoystickGetButton(GUIjoy, host_input_buttons[0].dpad_left) || (hat & SDL_HAT_LEFT)) // dpad
{
if (HandleNavigation(DIRECTION_LEFT))
continue; // Don't change value when enter Slider -> don't send event to control
PushFakeKey(SDLK_LEFT);
break;
}
if (SDL_JoystickGetButton(GUIjoy, host_input_buttons[0].south_button)) // need this to be X button
{
PushFakeKey(SDLK_RETURN);
break;
}
if (SDL_JoystickGetButton(GUIjoy, host_input_buttons[0].east_button) ||
SDL_JoystickGetButton(GUIjoy, host_input_buttons[0].start_button)) // need this to be START button
{
dialogFinished = true;
break;
}
}
//-------------------------------------------------
// Send event to guichan-controls
//-------------------------------------------------
#ifdef ANDROIDSDL
androidsdl_event(event, gui_input);
androidsdl_event(event, gui_input);
#else
gui_input->pushInput(event);
gui_input->pushInput(event);
#endif
}
}
// Now we let the Gui object perform its logic.
uae_gui->logic();
@ -506,7 +513,7 @@ static void EditFilesysHardfileLoop()
}
bool EditFilesysHardfile(int unit_no)
bool EditFilesysHardfile(const int unit_no)
{
struct mountedinfo mi;
struct uaedev_config_data* uci;
@ -521,7 +528,7 @@ bool EditFilesysHardfile(int unit_no)
if (unit_no >= 0)
{
uci = &changed_prefs.mountconfig[unit_no];
struct uaedev_config_info * ci = &uci->ci;
struct uaedev_config_info* ci = &uci->ci;
get_filesys_unitconfig(&changed_prefs, unit_no, &mi);
strdevname.assign(ci->devname);
@ -543,7 +550,8 @@ bool EditFilesysHardfile(int unit_no)
snprintf(tmp, sizeof tmp, "%d", ci->blocksize);
txtBlocksize->setText(tmp);
int selIndex = 0;
for (int i = 0; i < 2; ++i) {
for (int i = 0; i < 2; ++i)
{
if (controller[i].type == ci->controller_type)
selIndex = i;
}
@ -575,12 +583,12 @@ bool EditFilesysHardfile(int unit_no)
if (dialogResult)
{
struct uaedev_config_info ci;
int bp = tweakbootpri(atoi(txtBootPri->getText().c_str()), chkAutoboot->isSelected() ? 1 : 0, 0);
const int bp = tweakbootpri(atoi(txtBootPri->getText().c_str()), chkAutoboot->isSelected() ? 1 : 0, 0);
extractPath(const_cast<char *>(txtPath->getText().c_str()), currentDir);
uci_set_defaults(&ci, false);
strncpy(ci.devname, (char *) txtDevice->getText().c_str(), MAX_DPATH);
strncpy(ci.rootdir, (char *) txtPath->getText().c_str(), MAX_DPATH);
strncpy(ci.devname, const_cast<char *>(txtDevice->getText().c_str()), MAX_DPATH);
strncpy(ci.rootdir, const_cast<char *>(txtPath->getText().c_str()), MAX_DPATH);
ci.type = UAEDEV_HDF;
ci.controller_type = controller[cboController->getSelected()].type;
ci.controller_type_unit = 0;
@ -599,7 +607,7 @@ bool EditFilesysHardfile(int unit_no)
uci = add_filesys_config(&changed_prefs, unit_no, &ci);
if (uci)
{
struct hardfiledata *hfd = get_hardfile_data(uci->configoffset);
struct hardfiledata* hfd = get_hardfile_data(uci->configoffset);
if (hfd)
hardfile_media_change(hfd, &ci, true, false);
else

View file

@ -27,10 +27,10 @@
#define DIALOG_WIDTH 520
#define DIALOG_HEIGHT 202
static SDL_Joystick *GUIjoy;
static SDL_Joystick* GUIjoy;
extern struct host_input_button host_input_buttons[MAX_INPUT_DEVICES];
extern std::string volName;
extern string volName;
static bool dialogResult = false;
static bool dialogFinished = false;
@ -106,14 +106,16 @@ static void InitEditFilesysVirtual()
cmdOK = new gcn::Button("Ok");
cmdOK->setSize(BUTTON_WIDTH, BUTTON_HEIGHT);
cmdOK->setPosition(DIALOG_WIDTH - DISTANCE_BORDER - 2 * BUTTON_WIDTH - DISTANCE_NEXT_X, DIALOG_HEIGHT - 2 * DISTANCE_BORDER - BUTTON_HEIGHT - 10);
cmdOK->setPosition(DIALOG_WIDTH - DISTANCE_BORDER - 2 * BUTTON_WIDTH - DISTANCE_NEXT_X,
DIALOG_HEIGHT - 2 * DISTANCE_BORDER - BUTTON_HEIGHT - 10);
cmdOK->setBaseColor(gui_baseCol);
cmdOK->setId("virtOK");
cmdOK->addActionListener(filesysVirtualActionListener);
cmdCancel = new gcn::Button("Cancel");
cmdCancel->setSize(BUTTON_WIDTH, BUTTON_HEIGHT);
cmdCancel->setPosition(DIALOG_WIDTH - DISTANCE_BORDER - BUTTON_WIDTH, DIALOG_HEIGHT - 2 * DISTANCE_BORDER - BUTTON_HEIGHT - 10);
cmdCancel->setPosition(DIALOG_WIDTH - DISTANCE_BORDER - BUTTON_WIDTH,
DIALOG_HEIGHT - 2 * DISTANCE_BORDER - BUTTON_HEIGHT - 10);
cmdCancel->setBaseColor(gui_baseCol);
cmdCancel->setId("virtCancel");
cmdCancel->addActionListener(filesysVirtualActionListener);
@ -221,6 +223,8 @@ static void ExitEditFilesysVirtual()
static void EditFilesysVirtualLoop()
{
FocusBugWorkaround(wndEditFilesysVirtual);
GUIjoy = SDL_JoystickOpen(0);
while (!dialogFinished)
{
@ -265,67 +269,62 @@ static void EditFilesysVirtualLoop()
break;
}
}
else if (event.type == SDL_JOYBUTTONDOWN || event.type == SDL_JOYHATMOTION)
{
gcn::FocusHandler* focusHdl;
gcn::Widget* activeWidget;
else if (event.type == SDL_JOYBUTTONDOWN || event.type == SDL_JOYHATMOTION)
{
gcn::FocusHandler* focusHdl;
gcn::Widget* activeWidget;
int hat = SDL_JoystickGetHat(GUIjoy, 0);
const int hat = SDL_JoystickGetHat(GUIjoy, 0);
if (SDL_JoystickGetButton(GUIjoy,host_input_buttons[0].dpad_up) || (hat & SDL_HAT_UP)) // dpad
{
if(HandleNavigation(DIRECTION_UP))
continue; // Don't change value when enter Slider -> don't send event to control
else
{PushFakeKey(SDLK_UP);}
break;
}
else if (SDL_JoystickGetButton(GUIjoy,host_input_buttons[0].dpad_down) || (hat & SDL_HAT_DOWN)) // dpad
{
if(HandleNavigation(DIRECTION_DOWN))
continue; // Don't change value when enter Slider -> don't send event to control
else
{PushFakeKey(SDLK_DOWN);}
break;
}
else if (SDL_JoystickGetButton(GUIjoy,host_input_buttons[0].dpad_right) || (hat & SDL_HAT_RIGHT)) // dpad
{
if(HandleNavigation(DIRECTION_RIGHT))
continue; // Don't change value when enter Slider -> don't send event to control
else
{PushFakeKey(SDLK_RIGHT);}
break;
}
else if (SDL_JoystickGetButton(GUIjoy,host_input_buttons[0].dpad_left) || (hat & SDL_HAT_LEFT)) // dpad
{
if(HandleNavigation(DIRECTION_LEFT))
continue; // Don't change value when enter Slider -> don't send event to control
else
{PushFakeKey(SDLK_LEFT);}
break;
}
else if (SDL_JoystickGetButton(GUIjoy,host_input_buttons[0].south_button)) // need this to be X button
{
PushFakeKey(SDLK_RETURN);
continue; }
else if (SDL_JoystickGetButton(GUIjoy,host_input_buttons[0].east_button) ||
SDL_JoystickGetButton(GUIjoy,host_input_buttons[0].start_button)) // need this to be START button
{ dialogFinished = true;
break;}
}
//-------------------------------------------------
// Send event to guichan-controls
//-------------------------------------------------
if (SDL_JoystickGetButton(GUIjoy, host_input_buttons[0].dpad_up) || (hat & SDL_HAT_UP)) // dpad
{
if (HandleNavigation(DIRECTION_UP))
continue; // Don't change value when enter Slider -> don't send event to control
PushFakeKey(SDLK_UP);
break;
}
if (SDL_JoystickGetButton(GUIjoy, host_input_buttons[0].dpad_down) || (hat & SDL_HAT_DOWN)) // dpad
{
if (HandleNavigation(DIRECTION_DOWN))
continue; // Don't change value when enter Slider -> don't send event to control
PushFakeKey(SDLK_DOWN);
break;
}
if (SDL_JoystickGetButton(GUIjoy, host_input_buttons[0].dpad_right) || (hat & SDL_HAT_RIGHT)) // dpad
{
if (HandleNavigation(DIRECTION_RIGHT))
continue; // Don't change value when enter Slider -> don't send event to control
PushFakeKey(SDLK_RIGHT);
break;
}
if (SDL_JoystickGetButton(GUIjoy, host_input_buttons[0].dpad_left) || (hat & SDL_HAT_LEFT)) // dpad
{
if (HandleNavigation(DIRECTION_LEFT))
continue; // Don't change value when enter Slider -> don't send event to control
PushFakeKey(SDLK_LEFT);
break;
}
if (SDL_JoystickGetButton(GUIjoy, host_input_buttons[0].south_button)) // need this to be X button
{
PushFakeKey(SDLK_RETURN);
break;
}
if (SDL_JoystickGetButton(GUIjoy, host_input_buttons[0].east_button) ||
SDL_JoystickGetButton(GUIjoy, host_input_buttons[0].start_button)) // need this to be START button
{
dialogFinished = true;
break;
}
}
//-------------------------------------------------
// Send event to guichan-controls
//-------------------------------------------------
#ifdef ANDROIDSDL
androidsdl_event(event, gui_input);
androidsdl_event(event, gui_input);
#else
gui_input->pushInput(event);
gui_input->pushInput(event);
#endif
}
}
// Now we let the Gui object perform its logic.
uae_gui->logic();
@ -338,7 +337,7 @@ static void EditFilesysVirtualLoop()
}
bool EditFilesysVirtual(int unit_no)
bool EditFilesysVirtual(const int unit_no)
{
struct mountedinfo mi;
struct uaedev_config_data* uci;
@ -353,7 +352,7 @@ bool EditFilesysVirtual(int unit_no)
if (unit_no >= 0)
{
uci = &changed_prefs.mountconfig[unit_no];
struct uaedev_config_info * ci = &uci->ci;
struct uaedev_config_info* ci = &uci->ci;
get_filesys_unitconfig(&changed_prefs, unit_no, &mi);
strdevname.assign(ci->devname);
@ -383,13 +382,13 @@ bool EditFilesysVirtual(int unit_no)
if (dialogResult)
{
struct uaedev_config_info ci;
int bp = tweakbootpri(atoi(txtBootPri->getText().c_str()), chkAutoboot->isSelected() ? 1 : 0, 0);
const int bp = tweakbootpri(atoi(txtBootPri->getText().c_str()), chkAutoboot->isSelected() ? 1 : 0, 0);
extractPath(const_cast<char *>(txtPath->getText().c_str()), currentDir);
uci_set_defaults(&ci, true);
strncpy(ci.devname, (char *) txtDevice->getText().c_str(), MAX_DPATH);
strncpy(ci.volname, (char *) txtVolume->getText().c_str(), MAX_DPATH);
strncpy(ci.rootdir, (char *) txtPath->getText().c_str(), MAX_DPATH);
strncpy(ci.devname, const_cast<char *>(txtDevice->getText().c_str()), MAX_DPATH);
strncpy(ci.volname, const_cast<char *>(txtVolume->getText().c_str()), MAX_DPATH);
strncpy(ci.rootdir, const_cast<char *>(txtPath->getText().c_str()), MAX_DPATH);
ci.type = UAEDEV_DIR;
ci.readonly = !chkReadWrite->isSelected();
ci.bootpri = bp;

View file

@ -65,7 +65,7 @@ static gcn::Label* lblCDVolInfo;
static gcn::Slider* sldCDVol;
static int GetHDType(int index)
static int GetHDType(const int index)
{
struct mountedinfo mi;
@ -273,7 +273,7 @@ public:
{
if (actionEvent.getSource() == sldCDVol)
{
int newvol = 100 - (int)sldCDVol->getValue();
const int newvol = 100 - int(sldCDVol->getValue());
if (changed_prefs.sound_volume_cd != newvol)
{
changed_prefs.sound_volume_cd = newvol;
@ -301,7 +301,7 @@ public:
//---------------------------------------
if (!bIgnoreListChange)
{
int idx = cboCDFile->getSelected();
const int idx = cboCDFile->getSelected();
if (idx < 0)
{

View file

@ -28,7 +28,7 @@
#define FILE_SELECT_KEEP_POSITION
#endif
static SDL_Joystick *GUIjoy;
static SDL_Joystick* GUIjoy;
extern struct host_input_button host_input_buttons[MAX_INPUT_DEVICES];
static bool dialogResult = false;
@ -98,14 +98,14 @@ public:
{
if (actionEvent.getSource() == cmdOK)
{
int selected_item = lstFiles->getSelected();
const int selected_item = lstFiles->getSelected();
if (createNew)
{
char tmp[MAX_PATH];
if (txtFilename->getText().length() <= 0)
return;
strncpy(tmp, workingDir, MAX_PATH - 1);
strncat(tmp, "/", MAX_PATH - 1);
strncat(tmp, "/", MAX_PATH - 1);
strncat(tmp, txtFilename->getText().c_str(), MAX_PATH - 1);
if (strstr(tmp, filefilter[0]) == nullptr)
strncat(tmp, filefilter[0], MAX_PATH - 1);
@ -119,7 +119,7 @@ public:
if (fileList->isDir(selected_item))
return; // Directory selected -> Ok not possible
strncat(workingDir, "/", MAX_PATH - 1);
strncat(workingDir, fileList->getElementAt(selected_item).c_str(), MAX_PATH - 1);
strncat(workingDir, fileList->getElementAt(selected_item).c_str(), MAX_PATH - 1);
dialogResult = true;
}
}
@ -138,7 +138,7 @@ static void checkfoldername(char* current)
if ((dir = opendir(current)))
{
fileList->changeDir(current);
char * ptr = realpath(current, actualpath);
char* ptr = realpath(current, actualpath);
strncpy(workingDir, ptr, MAX_PATH);
closedir(dir);
}
@ -170,10 +170,10 @@ public:
{
char foldername[MAX_PATH] = "";
int selected_item = lstFiles->getSelected();
const int selected_item = lstFiles->getSelected();
strncpy(foldername, workingDir, MAX_PATH);
strncat(foldername, "/", MAX_PATH - 1);
strncat(foldername, fileList->getElementAt(selected_item).c_str(), MAX_PATH - 1);
strncat(foldername, "/", MAX_PATH - 1);
strncat(foldername, fileList->getElementAt(selected_item).c_str(), MAX_PATH - 1);
if (fileList->isDir(selected_item))
checkfoldername(foldername);
else if (!createNew)
@ -201,13 +201,15 @@ static void InitSelectFile(const char* title)
cmdOK = new gcn::Button("Ok");
cmdOK->setSize(BUTTON_WIDTH, BUTTON_HEIGHT);
cmdOK->setPosition(DIALOG_WIDTH - DISTANCE_BORDER - 2 * BUTTON_WIDTH - DISTANCE_NEXT_X, DIALOG_HEIGHT - 2 * DISTANCE_BORDER - BUTTON_HEIGHT - 10);
cmdOK->setPosition(DIALOG_WIDTH - DISTANCE_BORDER - 2 * BUTTON_WIDTH - DISTANCE_NEXT_X,
DIALOG_HEIGHT - 2 * DISTANCE_BORDER - BUTTON_HEIGHT - 10);
cmdOK->setBaseColor(gui_baseCol);
cmdOK->addActionListener(fileButtonActionListener);
cmdCancel = new gcn::Button("Cancel");
cmdCancel->setSize(BUTTON_WIDTH, BUTTON_HEIGHT);
cmdCancel->setPosition(DIALOG_WIDTH - DISTANCE_BORDER - BUTTON_WIDTH, DIALOG_HEIGHT - 2 * DISTANCE_BORDER - BUTTON_HEIGHT - 10);
cmdCancel->setPosition(DIALOG_WIDTH - DISTANCE_BORDER - BUTTON_WIDTH,
DIALOG_HEIGHT - 2 * DISTANCE_BORDER - BUTTON_HEIGHT - 10);
cmdCancel->setBaseColor(gui_baseCol);
cmdCancel->addActionListener(fileButtonActionListener);
@ -287,8 +289,8 @@ static void ExitSelectFile()
static void SelectFileLoop()
{
//TODO: is this needed in guisan?
//FocusBugWorkaround(wndSelectFile);
FocusBugWorkaround(wndSelectFile);
GUIjoy = SDL_JoystickOpen(0);
while (!dialogFinished)
@ -319,7 +321,6 @@ static void SelectFileLoop()
lstFiles->requestFocus();
else if (activeWidget == txtFilename)
lstFiles->requestFocus();
continue;
}
break;
@ -338,7 +339,6 @@ static void SelectFileLoop()
lstFiles->requestFocus();
else if (activeWidget == cmdOK)
cmdCancel->requestFocus();
continue;
}
break;
@ -352,74 +352,74 @@ static void SelectFileLoop()
break;
}
}
else if (event.type == SDL_JOYBUTTONDOWN || event.type == SDL_JOYHATMOTION)
{
int hat = SDL_JoystickGetHat(GUIjoy, 0);
else if (event.type == SDL_JOYBUTTONDOWN || event.type == SDL_JOYHATMOTION)
{
const int hat = SDL_JoystickGetHat(GUIjoy, 0);
if (SDL_JoystickGetButton(GUIjoy,host_input_buttons[0].south_button))
{PushFakeKey(SDLK_RETURN);
break;}
else if (SDL_JoystickGetButton(GUIjoy,host_input_buttons[0].east_button) ||
SDL_JoystickGetButton(GUIjoy,host_input_buttons[0].start_button))
{dialogFinished = true;
break;}
else if (SDL_JoystickGetButton(GUIjoy,host_input_buttons[0].dpad_left) || (hat & SDL_HAT_LEFT))
{
gcn::FocusHandler* focusHdl = gui_top->_getFocusHandler();
gcn::Widget* activeWidget = focusHdl->getFocused();
if(activeWidget == lstFiles)
cmdCancel->requestFocus();
else if(activeWidget == cmdCancel)
cmdOK->requestFocus();
else if(activeWidget == cmdOK)
if(createNew)
txtFilename->requestFocus();
else
lstFiles->requestFocus();
else if(activeWidget == txtFilename)
lstFiles->requestFocus();
continue;
}
else if (SDL_JoystickGetButton(GUIjoy,host_input_buttons[0].dpad_right) || (hat & SDL_HAT_RIGHT))
{
gcn::FocusHandler* focusHdl = gui_top->_getFocusHandler();
gcn::Widget* activeWidget = focusHdl->getFocused();
if(activeWidget == lstFiles)
if(createNew)
txtFilename->requestFocus();
else
cmdOK->requestFocus();
else if(activeWidget == txtFilename)
cmdOK->requestFocus();
else if(activeWidget == cmdCancel)
lstFiles->requestFocus();
else if(activeWidget == cmdOK)
cmdCancel->requestFocus();
continue;
}
else if (SDL_JoystickGetButton(GUIjoy,host_input_buttons[0].dpad_up) || (hat & SDL_HAT_UP))
{PushFakeKey(SDLK_UP);
break;}
else if (SDL_JoystickGetButton(GUIjoy,host_input_buttons[0].dpad_down) || (hat & SDL_HAT_DOWN))
{PushFakeKey(SDLK_DOWN);
break;}
}
if (SDL_JoystickGetButton(GUIjoy, host_input_buttons[0].south_button))
{
PushFakeKey(SDLK_RETURN);
break;
}
if (SDL_JoystickGetButton(GUIjoy, host_input_buttons[0].east_button) ||
SDL_JoystickGetButton(GUIjoy, host_input_buttons[0].start_button))
{
dialogFinished = true;
break;
}
if (SDL_JoystickGetButton(GUIjoy, host_input_buttons[0].dpad_left) || (hat & SDL_HAT_LEFT))
{
gcn::FocusHandler* focusHdl = gui_top->_getFocusHandler();
gcn::Widget* activeWidget = focusHdl->getFocused();
if (activeWidget == lstFiles)
cmdCancel->requestFocus();
else if (activeWidget == cmdCancel)
cmdOK->requestFocus();
else if (activeWidget == cmdOK)
if (createNew)
txtFilename->requestFocus();
else
lstFiles->requestFocus();
else if (activeWidget == txtFilename)
lstFiles->requestFocus();
break;
}
if (SDL_JoystickGetButton(GUIjoy, host_input_buttons[0].dpad_right) || (hat & SDL_HAT_RIGHT))
{
gcn::FocusHandler* focusHdl = gui_top->_getFocusHandler();
gcn::Widget* activeWidget = focusHdl->getFocused();
if (activeWidget == lstFiles)
if (createNew)
txtFilename->requestFocus();
else
cmdOK->requestFocus();
else if (activeWidget == txtFilename)
cmdOK->requestFocus();
else if (activeWidget == cmdCancel)
lstFiles->requestFocus();
else if (activeWidget == cmdOK)
cmdCancel->requestFocus();
break;
}
if (SDL_JoystickGetButton(GUIjoy, host_input_buttons[0].dpad_up) || (hat & SDL_HAT_UP))
{
PushFakeKey(SDLK_UP);
break;
}
if (SDL_JoystickGetButton(GUIjoy, host_input_buttons[0].dpad_down) || (hat & SDL_HAT_DOWN))
{
PushFakeKey(SDLK_DOWN);
break;
}
}
//-------------------------------------------------
// Send event to guisan-controls
//-------------------------------------------------
#ifdef ANDROIDSDL
androidsdl_event(event, gui_input);
androidsdl_event(event, gui_input);
#else
gui_input->pushInput(event);
gui_input->pushInput(event);
#endif
}
@ -444,7 +444,7 @@ static void SelectFileLoop()
static int Already_init = 0;
#endif
bool SelectFile(const char* title, char* value, const char* filter[], bool create)
bool SelectFile(const char* title, char* value, const char* filter[], const bool create)
{
dialogResult = false;
dialogFinished = false;

View file

@ -23,12 +23,12 @@
#define DIALOG_WIDTH 520
#define DIALOG_HEIGHT 400
std::string volName;
string volName;
static bool dialogResult = false;
static bool dialogFinished = false;
static char workingDir[MAX_PATH];
static SDL_Joystick *GUIjoy;
static SDL_Joystick* GUIjoy;
extern struct host_input_button host_input_buttons[MAX_INPUT_DEVICES];
static gcn::Window* wndSelectFolder;
static gcn::Button* cmdOK;
@ -95,7 +95,7 @@ static void checkfoldername(char* current)
if ((dir = opendir(current)))
{
dirList = current;
char * ptr = realpath(current, actualpath);
char* ptr = realpath(current, actualpath);
strncpy(workingDir, ptr, MAX_PATH);
closedir(dir);
}
@ -112,7 +112,7 @@ public:
{
char foldername[MAX_PATH] = "";
int selected_item = lstFolders->getSelected();
const int selected_item = lstFolders->getSelected();
strncpy(foldername, workingDir, MAX_PATH - 1);
strncat(foldername, "/", MAX_PATH - 1);
strncat(foldername, dirList.getElementAt(selected_item).c_str(), MAX_PATH - 1);
@ -137,13 +137,15 @@ static void InitSelectFolder(const char* title)
cmdOK = new gcn::Button("Ok");
cmdOK->setSize(BUTTON_WIDTH, BUTTON_HEIGHT);
cmdOK->setPosition(DIALOG_WIDTH - DISTANCE_BORDER - 2 * BUTTON_WIDTH - DISTANCE_NEXT_X, DIALOG_HEIGHT - 2 * DISTANCE_BORDER - BUTTON_HEIGHT - 10);
cmdOK->setPosition(DIALOG_WIDTH - DISTANCE_BORDER - 2 * BUTTON_WIDTH - DISTANCE_NEXT_X,
DIALOG_HEIGHT - 2 * DISTANCE_BORDER - BUTTON_HEIGHT - 10);
cmdOK->setBaseColor(gui_baseCol);
cmdOK->addActionListener(buttonActionListener);
cmdCancel = new gcn::Button("Cancel");
cmdCancel->setSize(BUTTON_WIDTH, BUTTON_HEIGHT);
cmdCancel->setPosition(DIALOG_WIDTH - DISTANCE_BORDER - BUTTON_WIDTH, DIALOG_HEIGHT - 2 * DISTANCE_BORDER - BUTTON_HEIGHT - 10);
cmdCancel->setPosition(DIALOG_WIDTH - DISTANCE_BORDER - BUTTON_WIDTH,
DIALOG_HEIGHT - 2 * DISTANCE_BORDER - BUTTON_HEIGHT - 10);
cmdCancel->setBaseColor(gui_baseCol);
cmdCancel->addActionListener(buttonActionListener);
@ -198,30 +200,32 @@ static void ExitSelectFolder()
}
static void navigate_right(void)
{ gcn::FocusHandler* focusHdl = gui_top->_getFocusHandler();
gcn::Widget* activeWidget = focusHdl->getFocused();
if(activeWidget == lstFolders)
cmdOK->requestFocus();
else if(activeWidget == cmdCancel)
lstFolders->requestFocus();
else if(activeWidget == cmdOK)
cmdCancel->requestFocus();
}
{
gcn::FocusHandler* focusHdl = gui_top->_getFocusHandler();
gcn::Widget* activeWidget = focusHdl->getFocused();
if (activeWidget == lstFolders)
cmdOK->requestFocus();
else if (activeWidget == cmdCancel)
lstFolders->requestFocus();
else if (activeWidget == cmdOK)
cmdCancel->requestFocus();
}
static void navigate_left(void)
{
gcn::FocusHandler* focusHdl = gui_top->_getFocusHandler();
gcn::Widget* activeWidget = focusHdl->getFocused();
if(activeWidget == lstFolders)
cmdCancel->requestFocus();
else if(activeWidget == cmdCancel)
cmdOK->requestFocus();
else if(activeWidget == cmdOK)
lstFolders->requestFocus();
}
{
gcn::FocusHandler* focusHdl = gui_top->_getFocusHandler();
gcn::Widget* activeWidget = focusHdl->getFocused();
if (activeWidget == lstFolders)
cmdCancel->requestFocus();
else if (activeWidget == cmdCancel)
cmdOK->requestFocus();
else if (activeWidget == cmdOK)
lstFolders->requestFocus();
}
static void SelectFolderLoop()
{
//FocusBugWorkaround(wndSelectFolder);
FocusBugWorkaround(wndSelectFolder);
while (!dialogFinished)
{
@ -272,58 +276,69 @@ static void SelectFolderLoop()
break;
}
}
else if (event.type == SDL_JOYBUTTONDOWN || event.type == SDL_JOYHATMOTION)
{
int hat = SDL_JoystickGetHat(GUIjoy, 0);
else if (event.type == SDL_JOYBUTTONDOWN || event.type == SDL_JOYHATMOTION)
{
const int hat = SDL_JoystickGetHat(GUIjoy, 0);
if (SDL_JoystickGetButton(GUIjoy,host_input_buttons[0].south_button))
{PushFakeKey(SDLK_RETURN);
break;}
if (SDL_JoystickGetButton(GUIjoy, host_input_buttons[0].south_button))
{
PushFakeKey(SDLK_RETURN);
break;
}
else if (SDL_JoystickGetButton(GUIjoy,host_input_buttons[0].east_button) ||
SDL_JoystickGetButton(GUIjoy,host_input_buttons[0].start_button))
{dialogFinished = true;
break;}
if (SDL_JoystickGetButton(GUIjoy, host_input_buttons[0].east_button) ||
SDL_JoystickGetButton(GUIjoy, host_input_buttons[0].start_button))
{
dialogFinished = true;
break;
}
else if (SDL_JoystickGetButton(GUIjoy,host_input_buttons[0].dpad_left) || (hat & SDL_HAT_LEFT))
{ gcn::FocusHandler* focusHdl = gui_top->_getFocusHandler();
gcn::Widget* activeWidget = focusHdl->getFocused();
if(activeWidget == lstFolders)
cmdCancel->requestFocus();
else if(activeWidget == cmdCancel)
cmdOK->requestFocus();
else if(activeWidget == cmdOK)
lstFolders->requestFocus();
continue;}
if (SDL_JoystickGetButton(GUIjoy, host_input_buttons[0].dpad_left) || (hat & SDL_HAT_LEFT))
{
gcn::FocusHandler* focusHdl = gui_top->_getFocusHandler();
gcn::Widget* activeWidget = focusHdl->getFocused();
if (activeWidget == lstFolders)
cmdCancel->requestFocus();
else if (activeWidget == cmdCancel)
cmdOK->requestFocus();
else if (activeWidget == cmdOK)
lstFolders->requestFocus();
break;
}
if (SDL_JoystickGetButton(GUIjoy, host_input_buttons[0].dpad_right) || (hat & SDL_HAT_RIGHT))
{
gcn::FocusHandler* focusHdl = gui_top->_getFocusHandler();
gcn::Widget* activeWidget = focusHdl->getFocused();
if (activeWidget == lstFolders)
cmdOK->requestFocus();
else if (activeWidget == cmdCancel)
lstFolders->requestFocus();
else if (activeWidget == cmdOK)
cmdCancel->requestFocus();
break;
}
else if (SDL_JoystickGetButton(GUIjoy,host_input_buttons[0].dpad_right) || (hat & SDL_HAT_RIGHT))
{ gcn::FocusHandler* focusHdl = gui_top->_getFocusHandler();
gcn::Widget* activeWidget = focusHdl->getFocused();
if(activeWidget == lstFolders)
cmdOK->requestFocus();
else if(activeWidget == cmdCancel)
lstFolders->requestFocus();
else if(activeWidget == cmdOK)
cmdCancel->requestFocus();
continue;}
if (SDL_JoystickGetButton(GUIjoy, host_input_buttons[0].dpad_up) || (hat & SDL_HAT_UP))
{
PushFakeKey(SDLK_UP);
break;
}
else if (SDL_JoystickGetButton(GUIjoy,host_input_buttons[0].dpad_up) || (hat & SDL_HAT_UP))
{PushFakeKey(SDLK_UP);
break;}
else if (SDL_JoystickGetButton(GUIjoy,host_input_buttons[0].dpad_down) || (hat & SDL_HAT_DOWN))
{PushFakeKey(SDLK_DOWN);
break;}
}
if (SDL_JoystickGetButton(GUIjoy, host_input_buttons[0].dpad_down) || (hat & SDL_HAT_DOWN))
{
PushFakeKey(SDLK_DOWN);
break;
}
}
//-------------------------------------------------
// Send event to guisan-controls
//-------------------------------------------------
#ifdef ANDROIDSDL
androidsdl_event(event, gui_input);
androidsdl_event(event, gui_input);
#else
gui_input->pushInput(event);
gui_input->pushInput(event);
#endif
}

View file

@ -13,14 +13,14 @@ namespace gcn
active = false;
container = new gcn::Container();
container = new Container();
container->setOpaque(true);
label = new gcn::Label(caption);
label = new Label(caption);
label->setHeight(16);
gcn::Image* img = gcn::Image::load(imagepath);
icon = new gcn::Icon(img);
Image* img = Image::load(imagepath);
icon = new Icon(img);
icon->setSize(16, 16);
container->add(icon, 4, 4);
@ -65,7 +65,7 @@ namespace gcn
}
void SelectorEntry::setActive(bool active)
void SelectorEntry::setActive(const bool active)
{
this->active = active;
if (active)
@ -75,7 +75,7 @@ namespace gcn
}
bool SelectorEntry::getActive()
bool SelectorEntry::getActive() const
{
return active;
}

View file

@ -29,7 +29,7 @@ namespace gcn
void setInactiveColor(const Color& color);
void setActiveColor(const Color& color);
void setActive(bool active);
bool getActive();
bool getActive() const;
void widgetResized(const Event& event) override;

View file

@ -20,7 +20,7 @@
#include "androidsdl_event.h"
#endif
static SDL_Joystick *GUIjoy;
static SDL_Joystick* GUIjoy;
extern struct host_input_button host_input_buttons[MAX_INPUT_DEVICES];
@ -29,7 +29,7 @@ extern struct host_input_button host_input_buttons[MAX_INPUT_DEVICES];
static bool dialogFinished = false;
static gcn::Window *wndShowHelp;
static gcn::Window* wndShowHelp;
static gcn::Button* cmdOK;
static gcn::ListBox* lstHelp;
static gcn::ScrollArea* scrAreaHelp;
@ -37,10 +37,10 @@ static gcn::ScrollArea* scrAreaHelp;
class HelpListModel : public gcn::ListModel
{
std::vector<std::string> lines;
vector<string> lines;
public:
HelpListModel(std::vector<std::string> helptext)
HelpListModel(const vector<string> helptext)
{
lines = helptext;
}
@ -50,14 +50,15 @@ public:
return lines.size();
}
std::string getElementAt(int i) override
string getElementAt(int i) override
{
if (i >= 0 && i < lines.size())
return lines[i];
return "";
}
};
static HelpListModel *helpList;
static HelpListModel* helpList;
class ShowHelpActionListener : public gcn::ActionListener
@ -68,10 +69,11 @@ public:
dialogFinished = true;
}
};
static ShowHelpActionListener* showHelpActionListener;
static void InitShowHelp(const std::vector<std::string>& helptext)
static void InitShowHelp(const vector<string>& helptext)
{
wndShowHelp = new gcn::Window("Help");
wndShowHelp->setSize(DIALOG_WIDTH, DIALOG_HEIGHT);
@ -84,7 +86,8 @@ static void InitShowHelp(const std::vector<std::string>& helptext)
helpList = new HelpListModel(helptext);
lstHelp = new gcn::ListBox(helpList);
lstHelp->setSize(DIALOG_WIDTH - 2 * DISTANCE_BORDER - 4, DIALOG_HEIGHT - 3 * DISTANCE_BORDER - BUTTON_HEIGHT - DISTANCE_NEXT_Y - 10);
lstHelp->setSize(DIALOG_WIDTH - 2 * DISTANCE_BORDER - 4,
DIALOG_HEIGHT - 3 * DISTANCE_BORDER - BUTTON_HEIGHT - DISTANCE_NEXT_Y - 10);
lstHelp->setPosition(DISTANCE_BORDER, DISTANCE_BORDER);
lstHelp->setBaseColor(gui_baseCol + 0x202020);
lstHelp->setBackgroundColor(gui_baseCol);
@ -93,14 +96,16 @@ static void InitShowHelp(const std::vector<std::string>& helptext)
scrAreaHelp = new gcn::ScrollArea(lstHelp);
scrAreaHelp->setBorderSize(1);
scrAreaHelp->setPosition(DISTANCE_BORDER, 10 + TEXTFIELD_HEIGHT + 10);
scrAreaHelp->setSize(DIALOG_WIDTH - 2 * DISTANCE_BORDER - 4, DIALOG_HEIGHT - 3 * DISTANCE_BORDER - BUTTON_HEIGHT - DISTANCE_NEXT_Y - 10);
scrAreaHelp->setSize(DIALOG_WIDTH - 2 * DISTANCE_BORDER - 4,
DIALOG_HEIGHT - 3 * DISTANCE_BORDER - BUTTON_HEIGHT - DISTANCE_NEXT_Y - 10);
scrAreaHelp->setScrollbarWidth(20);
scrAreaHelp->setBaseColor(gui_baseCol + 0x202020);
scrAreaHelp->setBackgroundColor(gui_baseCol);
cmdOK = new gcn::Button("Ok");
cmdOK->setSize(BUTTON_WIDTH, BUTTON_HEIGHT);
cmdOK->setPosition(DIALOG_WIDTH - DISTANCE_BORDER - BUTTON_WIDTH, DIALOG_HEIGHT - 2 * DISTANCE_BORDER - BUTTON_HEIGHT - 10);
cmdOK->setPosition(DIALOG_WIDTH - DISTANCE_BORDER - BUTTON_WIDTH,
DIALOG_HEIGHT - 2 * DISTANCE_BORDER - BUTTON_HEIGHT - 10);
cmdOK->setBaseColor(gui_baseCol);
cmdOK->addActionListener(showHelpActionListener);
@ -132,8 +137,8 @@ static void ExitShowHelp(void)
static void ShowHelpLoop(void)
{
//TODO: Check if this is needed in guisan?
//FocusBugWorkaround(wndShowHelp);
FocusBugWorkaround(wndShowHelp);
GUIjoy = SDL_JoystickOpen(0);
while (!dialogFinished)
@ -154,31 +159,34 @@ static void ShowHelpLoop(void)
case SDL_SCANCODE_RETURN:
event.key.keysym.scancode = SDL_SCANCODE_RETURN;
gui_input->pushInput(event); // Fire key down
event.type = SDL_KEYUP; // and the key up
event.type = SDL_KEYUP; // and the key up
break;
default:
break;
}
}
else if (event.type == SDL_JOYBUTTONDOWN)
{
if (SDL_JoystickGetButton(GUIjoy,host_input_buttons[0].south_button))
{PushFakeKey(SDLK_RETURN);
break;}
else if (SDL_JoystickGetButton(GUIjoy,host_input_buttons[0].east_button) ||
SDL_JoystickGetButton(GUIjoy,host_input_buttons[0].start_button))
{dialogFinished = true;
break;}
}
else if (event.type == SDL_JOYBUTTONDOWN)
{
if (SDL_JoystickGetButton(GUIjoy, host_input_buttons[0].south_button))
{
PushFakeKey(SDLK_RETURN);
break;
}
if (SDL_JoystickGetButton(GUIjoy, host_input_buttons[0].east_button) ||
SDL_JoystickGetButton(GUIjoy, host_input_buttons[0].start_button))
{
dialogFinished = true;
break;
}
}
//-------------------------------------------------
// Send event to guisan-controls
//-------------------------------------------------
#ifdef ANDROIDSDL
androidsdl_event(event, gui_input);
androidsdl_event(event, gui_input);
#else
gui_input->pushInput(event);
gui_input->pushInput(event);
#endif
}
@ -193,7 +201,7 @@ else if (event.type == SDL_JOYBUTTONDOWN)
}
void ShowHelp(const char *title, const std::vector<std::string>& text)
void ShowHelp(const char* title, const vector<string>& text)
{
dialogFinished = false;

View file

@ -25,7 +25,7 @@
static bool dialogResult = false;
static bool dialogFinished = false;
static SDL_Joystick *GUIjoy;
static SDL_Joystick* GUIjoy;
extern struct host_input_button host_input_buttons[MAX_INPUT_DEVICES];
static const char* dialogControlPressed;
static Uint8 dialogButtonPressed;
@ -71,13 +71,15 @@ static void InitShowMessage()
cmdOK = new gcn::Button("Ok");
cmdOK->setSize(BUTTON_WIDTH, BUTTON_HEIGHT);
cmdOK->setPosition(DIALOG_WIDTH - DISTANCE_BORDER - 2 * BUTTON_WIDTH - DISTANCE_NEXT_X, DIALOG_HEIGHT - 2 * DISTANCE_BORDER - BUTTON_HEIGHT - 10);
cmdOK->setPosition(DIALOG_WIDTH - DISTANCE_BORDER - 2 * BUTTON_WIDTH - DISTANCE_NEXT_X,
DIALOG_HEIGHT - 2 * DISTANCE_BORDER - BUTTON_HEIGHT - 10);
cmdOK->setBaseColor(gui_baseCol);
cmdOK->addActionListener(showMessageActionListener);
cmdCancel = new gcn::Button("Cancel");
cmdCancel->setSize(BUTTON_WIDTH, BUTTON_HEIGHT);
cmdCancel->setPosition(DIALOG_WIDTH - DISTANCE_BORDER - BUTTON_WIDTH, DIALOG_HEIGHT - 2 * DISTANCE_BORDER - BUTTON_HEIGHT - 10);
cmdCancel->setPosition(DIALOG_WIDTH - DISTANCE_BORDER - BUTTON_WIDTH,
DIALOG_HEIGHT - 2 * DISTANCE_BORDER - BUTTON_HEIGHT - 10);
cmdCancel->setBaseColor(gui_baseCol);
cmdCancel->addActionListener(showMessageActionListener);
@ -110,7 +112,7 @@ static void ExitShowMessage()
static void ShowMessageWaitInputLoop()
{
//FocusBugWorkaround(wndShowMessage);
FocusBugWorkaround(wndShowMessage);
while (!dialogFinished)
{
@ -157,8 +159,8 @@ static void ShowMessageWaitInputLoop()
static void ShowMessageLoop()
{
//TODO: Check if this is needed in guisan
//FocusBugWorkaround(wndShowMessage);
FocusBugWorkaround(wndShowMessage);
GUIjoy = SDL_JoystickOpen(0);
while (!dialogFinished)
@ -183,7 +185,6 @@ static void ShowMessageLoop()
cmdOK->requestFocus();
else if (activeWidget == cmdOK)
cmdCancel->requestFocus();
continue;
}
break;
@ -198,40 +199,44 @@ static void ShowMessageLoop()
break;
}
}
else if (event.type == SDL_JOYBUTTONDOWN || event.type == SDL_JOYHATMOTION)
{
int hat = SDL_JoystickGetHat(GUIjoy, 0);
else if (event.type == SDL_JOYBUTTONDOWN || event.type == SDL_JOYHATMOTION)
{
const int hat = SDL_JoystickGetHat(GUIjoy, 0);
if (SDL_JoystickGetButton(GUIjoy,host_input_buttons[0].south_button))
{PushFakeKey(SDLK_RETURN);
break;}
if (SDL_JoystickGetButton(GUIjoy, host_input_buttons[0].south_button))
{
PushFakeKey(SDLK_RETURN);
break;
}
if (SDL_JoystickGetButton(GUIjoy, host_input_buttons[0].east_button) ||
SDL_JoystickGetButton(GUIjoy, host_input_buttons[0].start_button))
{
dialogFinished = true;
break;
}
if (SDL_JoystickGetButton(GUIjoy, host_input_buttons[0].dpad_left) ||
SDL_JoystickGetButton(GUIjoy, host_input_buttons[0].dpad_right) ||
(hat & SDL_HAT_LEFT) ||
(hat & SDL_HAT_RIGHT))
else if (SDL_JoystickGetButton(GUIjoy,host_input_buttons[0].east_button) ||
SDL_JoystickGetButton(GUIjoy,host_input_buttons[0].start_button))
{dialogFinished = true;
break;}
else if (SDL_JoystickGetButton(GUIjoy,host_input_buttons[0].dpad_left) ||
SDL_JoystickGetButton(GUIjoy,host_input_buttons[0].dpad_right) ||
(hat & SDL_HAT_LEFT) ||
(hat & SDL_HAT_RIGHT) )
{gcn::FocusHandler* focusHdl = gui_top->_getFocusHandler();
gcn::Widget* activeWidget = focusHdl->getFocused();
if(activeWidget == cmdCancel)
cmdOK->requestFocus();
else if(activeWidget == cmdOK)
cmdCancel->requestFocus();
continue;}
}
{
gcn::FocusHandler* focusHdl = gui_top->_getFocusHandler();
gcn::Widget* activeWidget = focusHdl->getFocused();
if (activeWidget == cmdCancel)
cmdOK->requestFocus();
else if (activeWidget == cmdOK)
cmdCancel->requestFocus();
break;
}
}
//-------------------------------------------------
// Send event to guisan-controls
//-------------------------------------------------
#ifdef ANDROIDSDL
androidsdl_event(event, gui_input);
androidsdl_event(event, gui_input);
#else
gui_input->pushInput(event);
gui_input->pushInput(event);
#endif
}

View file

@ -183,20 +183,20 @@ void RegisterRefreshFunc(void (*func)(void))
refreshFuncAfterDraw = func;
}
//void FocusBugWorkaround(gcn::Window* wnd)
//{
// // When modal dialog opens via mouse, the dialog will not
// // have the focus unless there is a mouse click. We simulate the click...
// SDL_Event event;
// event.type = SDL_MOUSEBUTTONDOWN;
// event.button.button = SDL_BUTTON_LEFT;
// event.button.state = SDL_PRESSED;
// event.button.x = wnd->getX() + 2;
// event.button.y = wnd->getY() + 2;
// gui_input->pushInput(event);
// event.type = SDL_MOUSEBUTTONUP;
// gui_input->pushInput(event);
//}
void FocusBugWorkaround(gcn::Window* wnd)
{
// When modal dialog opens via mouse, the dialog will not
// have the focus unless there is a mouse click. We simulate the click...
SDL_Event event;
event.type = SDL_MOUSEBUTTONDOWN;
event.button.button = SDL_BUTTON_LEFT;
event.button.state = SDL_PRESSED;
event.button.x = wnd->getX() + 2;
event.button.y = wnd->getY() + 2;
gui_input->pushInput(event);
event.type = SDL_MOUSEBUTTONUP;
gui_input->pushInput(event);
}
static void ShowHelpRequested()
{
@ -849,8 +849,8 @@ void DisableResume()
void run_gui()
{
#ifdef ANDROIDSDL
SDL_ANDROID_SetScreenKeyboardShown(0);
SDL_ANDROID_SetSystemMousePointerVisible(1);
SDL_ANDROID_SetScreenKeyboardShown(0);
SDL_ANDROID_SetSystemMousePointerVisible(1);
#endif
gui_running = true;
gui_rtarea_flags_onenter = gui_create_rtarea_flag(&currprefs);
@ -870,13 +870,13 @@ void run_gui()
sdl::gui_run();
widgets::gui_halt();
sdl::gui_halt();
#ifdef ANDROIDSDL
if (currprefs.onScreen!=0)
{
SDL_ANDROID_SetScreenKeyboardShown(1);
SDL_ANDROID_SetSystemMousePointerVisible(0);
}
#endif
#ifdef ANDROIDSDL
if (currprefs.onScreen != 0)
{
SDL_ANDROID_SetScreenKeyboardShown(1);
SDL_ANDROID_SetSystemMousePointerVisible(0);
}
#endif
}
// Catch all guisan exceptions.