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/