mirror of
https://github.com/HEYAHONG/emu8051.git
synced 2025-05-09 06:11:19 +08:00
Allow to override window geometry on the command line
This commit is contained in:
parent
3e3b891049
commit
9241cbf30e
@ -42,6 +42,7 @@ static const char args_doc[] = "[FILENAME]";
|
|||||||
/* The options we understand. */
|
/* The options we understand. */
|
||||||
static struct argp_option argp_options[] = {
|
static struct argp_option argp_options[] = {
|
||||||
{"debug", 'd', "level", 0, "Produce debugging output", 0},
|
{"debug", 'd', "level", 0, "Produce debugging output", 0},
|
||||||
|
{"geometry", 'g', "pos", 0, "Set geometry", 0},
|
||||||
{"pram", 'p', "size", 0, "Set program memory size", 0},
|
{"pram", 'p', "size", 0, "Set program memory size", 0},
|
||||||
{"xram", 'x', "size", 0,
|
{"xram", 'x', "size", 0,
|
||||||
"Set external ram size (default is 1024)", 0},
|
"Set external ram size (default is 1024)", 0},
|
||||||
@ -121,6 +122,9 @@ parse_opt(int key, char *arg, struct argp_state *state)
|
|||||||
case 'd':
|
case 'd':
|
||||||
decode_debug_option(arg, state);
|
decode_debug_option(arg, state);
|
||||||
break;
|
break;
|
||||||
|
case 'g':
|
||||||
|
options.g = arg;
|
||||||
|
break;
|
||||||
case 'i':
|
case 'i':
|
||||||
decode_memory_size(arg, state, INT_MEM_ID);
|
decode_memory_size(arg, state, INT_MEM_ID);
|
||||||
break;
|
break;
|
||||||
@ -166,6 +170,7 @@ parse_command_line_options(int argc, char *argv[])
|
|||||||
|
|
||||||
/* Setting default values. */
|
/* Setting default values. */
|
||||||
options.filename = NULL;
|
options.filename = NULL;
|
||||||
|
options.g = NULL;
|
||||||
options.pram_size = PGM_MEM_DEFAULT_SIZE;
|
options.pram_size = PGM_MEM_DEFAULT_SIZE;
|
||||||
options.iram_size = INT_MEM_MAX_SIZE;
|
options.iram_size = INT_MEM_MAX_SIZE;
|
||||||
options.xram_size = EXT_MEM_DEFAULT_SIZE;
|
options.xram_size = EXT_MEM_DEFAULT_SIZE;
|
||||||
|
@ -14,6 +14,7 @@
|
|||||||
#define PACKAGE_DESCRIPTION "Emulator for 8051 family microcontrollers"
|
#define PACKAGE_DESCRIPTION "Emulator for 8051 family microcontrollers"
|
||||||
|
|
||||||
struct options_t {
|
struct options_t {
|
||||||
|
char *g;
|
||||||
int pram_size; /* Maximum program memory size. */
|
int pram_size; /* Maximum program memory size. */
|
||||||
int iram_size; /* Maximum internal ram size. */
|
int iram_size; /* Maximum internal ram size. */
|
||||||
int xram_size; /* Maximum external ram size. */
|
int xram_size; /* Maximum external ram size. */
|
||||||
|
@ -403,6 +403,21 @@ emugtk_create_memory_paned(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
emugtk_set_geometry_hints(GtkWidget *window)
|
||||||
|
{
|
||||||
|
GdkGeometry hints;
|
||||||
|
|
||||||
|
hints.min_width = 100;
|
||||||
|
hints.min_height = 100;
|
||||||
|
|
||||||
|
/* Set reference point to top left corner */
|
||||||
|
hints.win_gravity = GDK_GRAVITY_NORTH_WEST;
|
||||||
|
|
||||||
|
gtk_window_set_geometry_hints(GTK_WINDOW(window), window, &hints,
|
||||||
|
GDK_HINT_MIN_SIZE);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* mainwin
|
* mainwin
|
||||||
* +---------------------------------------------------------------------+
|
* +---------------------------------------------------------------------+
|
||||||
@ -467,6 +482,7 @@ emugtk_create_memory_paned(void)
|
|||||||
static void
|
static void
|
||||||
emugtk_window_init(void)
|
emugtk_window_init(void)
|
||||||
{
|
{
|
||||||
|
int geometry_ok = false;
|
||||||
int id;
|
int id;
|
||||||
GtkWidget *vbox;
|
GtkWidget *vbox;
|
||||||
GtkWidget *menu_bar;
|
GtkWidget *menu_bar;
|
||||||
@ -480,8 +496,6 @@ emugtk_window_init(void)
|
|||||||
|
|
||||||
mainwin = gtk_window_new(GTK_WINDOW_TOPLEVEL);
|
mainwin = gtk_window_new(GTK_WINDOW_TOPLEVEL);
|
||||||
gtk_window_set_title(GTK_WINDOW(mainwin), PACKAGE_NAME);
|
gtk_window_set_title(GTK_WINDOW(mainwin), PACKAGE_NAME);
|
||||||
gtk_window_set_default_size(GTK_WINDOW(mainwin),
|
|
||||||
cfg->win_width, cfg->win_height);
|
|
||||||
gtk_container_set_border_width(GTK_CONTAINER(mainwin), 0);
|
gtk_container_set_border_width(GTK_CONTAINER(mainwin), 0);
|
||||||
|
|
||||||
/* Window DESTROY event. */
|
/* Window DESTROY event. */
|
||||||
@ -554,6 +568,32 @@ emugtk_window_init(void)
|
|||||||
|
|
||||||
g_signal_connect(mainwin, "destroy", G_CALLBACK(emugtk_quit_gui), NULL);
|
g_signal_connect(mainwin, "destroy", G_CALLBACK(emugtk_quit_gui), NULL);
|
||||||
|
|
||||||
|
emugtk_set_geometry_hints(mainwin);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If either a size or a position can be extracted from the geometry
|
||||||
|
* string, gtk_window_parse_geometry() returns TRUE and calls
|
||||||
|
* gtk_window_set_default_size() and/or gtk_window_move() to resize/move
|
||||||
|
* the window.
|
||||||
|
*/
|
||||||
|
if (options.g != NULL) {
|
||||||
|
geometry_ok = gtk_window_parse_geometry(GTK_WINDOW(mainwin),
|
||||||
|
options.g);
|
||||||
|
if (!geometry_ok)
|
||||||
|
log_err("Failed to parse geometry argument: %s",
|
||||||
|
options.g);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If geometry was not specified, or was improperly parsed, use
|
||||||
|
* saved window size.
|
||||||
|
*/
|
||||||
|
if (geometry_ok == false) {
|
||||||
|
log_err("Use saved window size");
|
||||||
|
gtk_window_set_default_size(GTK_WINDOW(mainwin),
|
||||||
|
cfg->win_width, cfg->win_height);
|
||||||
|
}
|
||||||
|
|
||||||
gtk_widget_show_all(mainwin);
|
gtk_widget_show_all(mainwin);
|
||||||
|
|
||||||
emugtk_window_init_complete = true;
|
emugtk_window_init_complete = true;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user