Re: Changing text colors of menus

Bob Higgins (higgins@data.assist.com)
Wed, 14 May 1997 10:41:21 -0400

To subscribers of the xforms list from Bob Higgins <higgins@data.assist.com> :

This is a multi-part message in MIME format.

--------------6F97E62172
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

> Bob Higgins wrote:
> I'm trying to change the text color of menu objects which contain
> cascade popup menus. I am using the fl_set_object_lcol() function.
> This works fine if the menu has not been displayed yet. However, after
> the menu has been displayed, the text color does not change. The menus
> without the cascade popups in them change colors as expected. Changing
> the background color of the menus works fine also, but I use the
> fl_set_object_color() function for that.
>
> I am using version .81 of the library on Solaris 2.4. Does anyone know
> why this is and how to fix it?

My original problem was not very clear. I apologize. The problem is
not with changing the text color of the menu object but rather with the
popup object attached to a menu. I have included an example that should
illustrate what I mean.

Thanks,
Bob Higgins

--------------6F97E62172
Content-Type: text/plain; charset=us-ascii; name="main.c"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline; filename="main.c"

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <forms.h>

typedef struct {
FL_FORM *main;
FL_OBJECT *Bg;
FL_OBJECT *Menu_box;
FL_OBJECT *File;
FL_OBJECT *Info;
FL_OBJECT *Change;
void *vdata;
long ldata;
} FD_main;

FD_main * create_form_main(void);

FD_main *Main;

typedef struct {
FL_FORM *change_color;
void *vdata;
long ldata;
} FD_change_color;

FD_change_color *fdui15;

// Set up global color variables
int menu_color, text_color, bg_color;

FL_OBJECT *chg_clr_save, *chg_clr_cancel, *chg_clr_bg_btn,
*chg_clr_menu_btn, *chg_clr_win, *chg_clr_text_btn;

/*****************************************/
void cancel_change_color_cb(FL_OBJECT * ob, long data)
{
(void) fl_hide_form(fdui15->change_color);
}

/*****************************************/
void color_cb(FL_OBJECT * ob, long data)
{
if (data == 1) { // Menu & Push Button Color
menu_color = fl_show_colormap(menu_color);
// Change color on current form
fl_set_object_color(chg_clr_menu_btn, menu_color, 0);
fl_set_object_color(chg_clr_save, menu_color, 0);
fl_set_object_color(chg_clr_cancel, menu_color, 0);
// Change color on main form
fl_set_object_color(Main->Menu_box, menu_color, 0);
fl_set_object_color(Main->File, menu_color, 0);
fl_set_object_color(Main->Info, menu_color, 0);
fl_set_object_color(Main->Change, menu_color, 0);
fl_setpup_color(menu_color, text_color);
}
else if (data == 2) { // Background Color
bg_color = fl_show_colormap(bg_color);
// Change color on current form
fl_set_object_color(chg_clr_bg_btn, bg_color, 0);
fl_set_object_color(chg_clr_win, bg_color, 0);
fl_redraw_form(fdui15->change_color);
// Change color on main form
fl_set_object_color(Main->Bg, bg_color, 0);
fl_redraw_object(Main->Menu_box);
fl_redraw_object(Main->File);
fl_redraw_object(Main->Info);
fl_redraw_object(Main->Change);
}
else if (data == 3) { // Text Color
text_color = fl_show_colormap(text_color);
// Change color on current form
fl_set_object_color(chg_clr_text_btn, text_color, 0);
fl_set_object_lcol(chg_clr_save, text_color);
fl_set_object_lcol(chg_clr_cancel, text_color);
fl_set_object_lcol(chg_clr_menu_btn, text_color);
fl_set_object_lcol(chg_clr_bg_btn, text_color);
fl_set_object_lcol(chg_clr_text_btn, text_color);
// Change color on main form
fl_set_object_lcol(Main->File, text_color);
fl_set_object_lcol(Main->Info, text_color);
fl_set_object_lcol(Main->Change, text_color);
fl_setpup_color(menu_color, text_color);
}
}

/*****************************************/
void save_change_color_cb(FL_OBJECT * ob, long data)
{
FILE *color;

color = fopen("Color.ini", "w");
fprintf(color, "menu_color=%d\n", menu_color);
fprintf(color, "bg_color=%d\n", bg_color);
fprintf(color, "text_color=%d\n", text_color);
fclose(color);

(void) fl_hide_form(fdui15->change_color);
}

/*****************************************/
FD_change_color *create_form_change_color(void)
{
FL_OBJECT *obj;

fdui15 = (FD_change_color *) fl_calloc(1, sizeof(*fdui15));

fdui15->change_color = fl_bgn_form(FL_NO_BOX, 390, 260);

chg_clr_win = obj = fl_add_box(FL_BORDER_BOX, 0, 0, 390, 260, "");
fl_set_object_color(obj, bg_color, 0);

chg_clr_menu_btn = obj = fl_add_button(FL_NORMAL_BUTTON, 20, 20, 40, 30, "Menu Color");
fl_set_object_lalign(obj, FL_ALIGN_RIGHT);
fl_set_object_color(obj, menu_color, 0);
fl_set_object_lcol(obj, text_color);
fl_set_object_callback(obj, color_cb, (long) 1);

chg_clr_bg_btn = obj = fl_add_button(FL_NORMAL_BUTTON, 20, 70, 40, 30, "Backgrouond Color");
fl_set_object_lalign(obj, FL_ALIGN_RIGHT);
fl_set_object_color(obj, bg_color, 0);
fl_set_object_lcol(obj, text_color);
fl_set_object_callback(obj, color_cb, (long) 2);

chg_clr_text_btn = obj = fl_add_button(FL_NORMAL_BUTTON, 20, 120, 40, 30, "Text Color");
fl_set_object_lalign(obj, FL_ALIGN_RIGHT);
fl_set_object_color(obj, text_color, 0);
fl_set_object_lcol(obj, text_color);
fl_set_object_callback(obj, color_cb, (long) 3);

chg_clr_save = obj = fl_add_button(FL_NORMAL_BUTTON, 300, 20, 70, 30, "Save");
fl_set_object_color(obj, menu_color, 0);
fl_set_object_lcol(obj, text_color);
fl_set_object_callback(obj, save_change_color_cb, 0);

chg_clr_cancel = obj = fl_add_button(FL_NORMAL_BUTTON, 300, 70, 70, 30, "Cancel");
fl_set_object_color(obj, menu_color, 0);
fl_set_object_lcol(obj, text_color);
fl_set_object_callback(obj, cancel_change_color_cb, 0);

fl_end_form();

fl_show_form(fdui15->change_color, FL_PLACE_CENTER, FL_TRANSIENT,
"Change Window Colors");

fl_reset_cursor(FL_ObjWin(Main->Info));

return fdui15;
}

/*****************************************/
void file_cb(FL_OBJECT * ob, long data)
{
int item;

item = fl_get_menu(ob);

switch (item) {
case 1:
exit(0);
}
}

/*****************************************/
void change_cb(FL_OBJECT * ob, long data)
{
int item;

item = fl_get_menu(ob);
if (item == 9) {
fl_set_cursor(FL_ObjWin(Main->Bg), XC_watch);
XFlush(fl_get_display());
(void) create_form_change_color();
return;
}
}

/*****************************************/
void nothing_cb(FL_OBJECT * ob, long data)
{
}

/*****************************************/
void init_menu(void)
{
int info, item2;

fl_setpup_color(menu_color, text_color);

/* set up "Information" menu button */
info = fl_newpup(0);
fl_setpup_bw(info, -2);
fl_setpup_shadow(info, 0);

/* set up "Item2" secondary menu */
item2 = fl_newpup(0);
fl_setpup_shadow(item2, 0);

/* add menu items to "Information" menu */
fl_addtopup(info, "Item 1|Item 2%m|Item 3", item2);

/* add menu items to "Item2" submenu item */
fl_addtopup(item2, "Item 11%x11|Item 12%x12|Item 13%x13");

/* attach pup to menu */
fl_set_menu_popup(Main->Info, info);
}

/*****************************************/
void get_colors(void)
{
FILE *ini;
char *tok, buf1[20];

if ((ini = fopen("Color.ini", "r")) == NULL) {
// Set to defaults
puts("Using default colors.");
menu_color = FL_COL1;
bg_color = FL_COL1;
text_color = FL_BLACK;
return;
}

while (fscanf(ini, "%s", &buf1) != EOF) {
tok = strtok(buf1, "=");

if (!strcmp(tok, "menu_color")) {
if ((tok = strtok(NULL, "\n")) != NULL) {
strcpy(buf1, tok);
menu_color = atoi(buf1);
}
}
else if (!strcmp(tok, "bg_color")) {
if ((tok = strtok(NULL, "\n")) != NULL) {
strcpy(buf1, tok);
bg_color = atoi(buf1);
}
}
else if (!strcmp(tok, "text_color")) {
if ((tok = strtok(NULL, "\n")) != NULL) {
strcpy(buf1, tok);
text_color = atoi(buf1);
}
}
}
fclose(ini);
}
/*****************************************/
main(int argc, char *argv[])
{
// Initilize colors
get_colors();

fl_initialize(&argc, argv, "", 0, 0);
Main = create_form_main();

/* initialize submenu items */
init_menu();

fl_show_form(Main->main, FL_PLACE_CENTER, FL_FULLBORDER, "");

fl_do_forms();
return 0;
}

/*****************************************/
FD_main *create_form_main(void)
{
FL_OBJECT *obj;

FD_main *fdui = (FD_main *) fl_calloc(1, sizeof(*fdui));
fdui->main = fl_bgn_form(FL_NO_BOX, 200, 75);

fdui->Bg = obj = fl_add_box(FL_BORDER_BOX, 0, 0, 200, 75, "");
fl_set_object_color(obj, bg_color, 0);

fdui->Menu_box = obj = fl_add_box(FL_UP_BOX, -5, -5, 210, 35, "");
fl_set_object_color(obj, menu_color, 0);
fl_set_object_callback(obj, nothing_cb, (long) obj);

fdui->File = obj = fl_add_menu(FL_PULLDOWN_MENU, 0, 0, 50, 25, "File");
fl_set_object_lcol(obj, text_color);
fl_set_object_color(obj, menu_color, 0);
fl_set_menu(obj, "Exit");
fl_set_object_callback(obj, file_cb, (long) obj);

fdui->Info = obj = fl_add_menu(FL_PULLDOWN_MENU, 50, 0, 70, 25, "Information");
fl_set_object_lcol(obj, text_color);
fl_set_object_color(obj, menu_color, 0);
fl_set_object_callback(obj, nothing_cb, 0);

fdui->Change = obj = fl_add_menu(FL_PULLDOWN_MENU, 120, 0, 60, 25, "Change");
fl_set_object_lcol(obj, text_color);
fl_set_object_color(obj, menu_color, 0);
fl_set_menu(obj, "Colors...%x9");
fl_set_object_callback(obj, change_cb, (long) obj);

fl_end_form();

return fdui;
}

--------------6F97E62172--

_________________________________________________
To unsubscribe, send the message "unsubscribe" to
xforms-request@bob.usuf2.usuhs.mil or see
http://bob.usuf2.usuhs.mil/mailserv/xforms.html
Xforms Home Page: http://bragg.phys.uwm.edu/xforms
List Archive: http://bob.usuf2.usuhs.mil/mailserv/list-archives/xforms-archive/