31 #include <X11/Shell.h>
32 #include <Xm/AtomMgr.h>
35 #include <Xm/Protocols.h>
36 #include <Xm/RowColumn.h>
37 #include <Xm/DrawingA.h>
39 #include <Xm/Separator.h>
41 #include <Xm/CascadeB.h>
42 #include <Xm/MenuShell.h>
43 #include <Xm/ScrollBar.h>
44 #include <Xm/MwmUtil.h>
66 typedef std::map<CreateWindowCallback, AW_window*> window_map;
68 static window_map window;
69 CreateWindowCallback& maker = *windowMaker;
71 if (window.find(maker) == window.end()) {
83 fputs(
"Bug(?): window factory did not create a window\n", stderr);
95 void AW_window::popper(
AW_window *, CreateWindowCallback *windowMaker) {
99 void AW_window::replacer(
AW_window *caller, CreateWindowCallback *windowMaker) {
106 void AW_window::destroyCreateWindowCallback(CreateWindowCallback *windowMaker) {
119 unsigned short hoffset = 0;
166 switch (scalerType) {
172 if (inverse) res = pow(val, 1/3.0);
173 else res = pow(val, 3.0);
201 float aval = amin + modScaleRel*(amax-amin);
213 awarRel = (awar->
read_float()-amin) / (amax-amin);
217 awarRel = (awar->
read_int()-amin) / (amax-amin);
241 char *old_title =
NULp;
256 #define CHECK_DUPLICATED_MNEMONICS
259 #ifdef CHECK_DUPLICATED_MNEMONICS
261 inline char oppositeCase(
char c) {
262 return isupper(c) ? tolower(c) : toupper(c);
264 static void strcpy_overlapping(
char *dest,
char *src) {
265 int src_len = strlen(src);
266 memmove(dest, src, src_len+1);
268 static const char *possible_mnemonics(
const char *used_mnemonics,
bool top_level,
const char *topic_name) {
270 for (
int fromTopic = 1; fromTopic>=0; --fromTopic) {
271 freedup(unused, fromTopic ? topic_name :
"abcdefghijklmnopqrstuvwxyz");
273 for (
int t = 0; unused[t]; ++t) {
275 if ((top_level && !isalpha(unused[t])) || !isalnum(unused[t])) {
279 char *dup = strchr(unused, unused[t]);
280 if (dup && (dup-unused)<t) {
284 dup = strchr(unused, oppositeCase(unused[t]));
285 if (dup && (dup-unused)<t) {
286 dup[0] = toupper(dup[0]);
292 strcpy_overlapping(unused+t, unused+t+1);
297 for (
int t = 0; used_mnemonics[t]; ++t) {
298 char c = used_mnemonics[t];
299 char *u = strchr(unused, c);
300 if (u) strcpy_overlapping(u, u+1);
301 u = strchr(unused, tolower(c));
302 if (u) strcpy_overlapping(u, u+1);
316 typedef std::map<char,std::string> Char2Topic;
319 MnemonicScope *parent;
323 void print_at_menu(FILE *out) {
325 parent->print_at_menu(out);
328 fputs(name.c_str(), out);
330 void print_at_location(FILE *out,
const char *topic) {
333 fprintf(out,
"|%s)\n", topic);
336 void requestPossibilities(
const char *topic_name) {
338 if (requested.index_of(topic_name) == -1) {
339 requested.put(strdup(topic_name));
343 void showRequestedPossibilities() {
344 unsigned size = accepted.size();
345 char *used =
new char[size+1];
348 for (Char2Topic::iterator a = accepted.begin(); a != accepted.end(); ++a) {
349 used[i++] = a->first;
353 for (i = 0; requested[i]; ++i) {
354 const char *possible = possible_mnemonics(used, !parent, requested[i]);
355 fprintf(stderr,
"Warning: Possible mnemonics for '%s': '%s'\n", requested[i], possible);
361 void warn_mnemonic(
const char *topic_name,
const char *
mnemonic,
const char *
warning) {
362 fprintf(stderr,
"Warning: mnemonic '%s' %s", mnemonic, warning);
363 print_at_location(stderr, topic_name);
368 MnemonicScope(
const char *name_, MnemonicScope *parent_)
374 showRequestedPossibilities();
377 void add(
const char *topic_name,
const char *
mnemonic);
379 MnemonicScope *get_parent() {
return parent; }
382 static MnemonicScope *current_mscope =
NULp;
383 static MnemonicScope *help_mscope =
NULp;
386 if (mnemonic && mnemonic[0] != 0) {
388 warn_mnemonic(topic_name, mnemonic,
"is too long; only 1 character allowed");
393 warn_mnemonic(topic_name, mnemonic,
"is useless for graphical menu entry");
396 else if (!isalpha(mnemonic[0]) && !get_parent()) {
397 warn_mnemonic(topic_name, mnemonic,
"is invalid (allowed: a-z)");
398 requestPossibilities(topic_name);
400 else if (!isalnum(mnemonic[0])) {
401 warn_mnemonic(topic_name, mnemonic,
"is invalid (allowed: a-z and 0-9)");
402 requestPossibilities(topic_name);
406 char HOTKEY = toupper(mnemonic[0]);
408 if (strchr(TOPIC_NAME, HOTKEY)) {
409 Char2Topic::iterator found = accepted.find(HOTKEY);
411 if (found != accepted.end()) {
412 warn_mnemonic(topic_name, mnemonic,
"is used multiple times");
413 requestPossibilities(topic_name);
414 requestPossibilities(found->second.c_str());
417 accepted[HOTKEY] = topic_name;
419 if (!strchr(topic_name, mnemonic[0])) {
421 warn_mnemonic(topic_name, mnemonic, warning);
427 warn_mnemonic(topic_name, mnemonic,
"is useless; does not occur in text");
428 requestPossibilities(topic_name);
435 fputs(
"Warning: mnemonic is missing", stderr);
436 print_at_location(stderr, topic_name);
437 requestPossibilities(topic_name);
442 static void open_test_duplicate_mnemonics(
const char *sub_menu_name,
const char *mnemonic) {
444 current_mscope->add(sub_menu_name, mnemonic);
446 MnemonicScope *prev = current_mscope;
447 current_mscope =
new MnemonicScope(sub_menu_name, prev);
450 static void close_test_duplicate_mnemonics() {
451 MnemonicScope *prev = current_mscope->get_parent();
452 delete current_mscope;
453 current_mscope = prev;
456 static void init_duplicate_mnemonic(
const char *window_name) {
457 if (!current_mscope) {
458 current_mscope =
new MnemonicScope(window_name,
NULp);
459 help_mscope =
new MnemonicScope(
"<HELP>", current_mscope);
462 while (current_mscope->get_parent()) {
463 close_test_duplicate_mnemonics();
468 static void test_duplicate_mnemonics(
const char *topic_name,
const char *mnemonic) {
470 current_mscope->add(topic_name, mnemonic);
473 static void exit_duplicate_mnemonic() {
474 delete help_mscope; help_mscope =
NULp;
475 while (current_mscope) close_test_duplicate_mnemonics();
485 #ifdef CHECK_DUPLICATED_MNEMONICS
486 init_duplicate_mnemonic(window_name);
489 #if defined(DUMP_MENU_LIST)
490 dumpCloseAllSubMenus();
491 #endif // DUMP_MENU_LIST
500 #ifdef CHECK_DUPLICATED_MNEMONICS
501 close_test_duplicate_mnemonics();
503 #if defined(DUMP_MENU_LIST)
505 #endif // DUMP_MENU_LIST
510 void AW_window::all_menus_created()
const {
514 #ifdef CHECK_DUPLICATED_MNEMONICS
515 exit_duplicate_mnemonic();
524 xfig_data->
add_line(x1, y1, x2, y2, width);
537 AW_device_click *click_device =
NULp;
563 if (!aram)
return NULp;
568 size_device->
reset();
579 const char *mnemonic,
const char *helpText,
584 #ifdef CHECK_DUPLICATED_MNEMONICS
585 if (!current_mscope) init_duplicate_mnemonic(window_name);
586 MnemonicScope *tmp = current_mscope;
587 current_mscope = help_mscope;
588 test_duplicate_mnemonics(labeli, mnemonic);
589 current_mscope = tmp;
593 button = XtVaCreateManagedWidget(
"", xmPushButtonWidgetClass,
597 XtAddCallback(button, XmNactivateCallback,
599 (XtPointer)
new AW_cb(
this, cb, helpText));
605 const char *mnemonic,
const char *helpText,
606 AW_active mask,
const WindowCallback& wcb) {
612 #if defined(DUMP_MENU_LIST)
614 #endif // DUMP_MENU_LIST
616 #ifdef CHECK_DUPLICATED_MNEMONICS
617 test_duplicate_mnemonics(labeltext, mnemonic);
620 Label topiclabel(labeltext,
this);
621 if (mnemonic && *mnemonic && strchr(labeltext, mnemonic[0])) {
623 button = XtVaCreateManagedWidget(
"", xmPushButtonWidgetClass,
630 button = XtVaCreateManagedWidget(
"",
631 xmPushButtonWidgetClass,
640 XtAddCallback(button, XmNactivateCallback,
644 #if defined(DEVEL_RALF) // wanted version
646 #else // !defined(DEVEL_RALF)
647 if (!topic_id) topic_id = labeltext;
649 cbs->id = strdup(topic_id);
662 #if defined(DUMP_MENU_LIST)
663 dumpOpenSubMenu(name);
664 #endif // DUMP_MENU_LIST
666 #ifdef CHECK_DUPLICATED_MNEMONICS
667 open_test_duplicate_mnemonics(labeli, mnemonic);
671 shell = XtVaCreatePopupShell(
"menu_shell", xmMenuShellWidgetClass,
675 XmNallowShellResize,
true,
676 XmNoverrideRedirect,
true,
682 xmRowColumnWidgetClass, shell,
683 XmNrowColumnType, XmMENU_PULLDOWN,
684 XmNtearOffModel, XmTEAR_OFF_ENABLED,
688 if (mnemonic && *mnemonic && strchr(labeli, mnemonic[0])) {
690 Label = XtVaCreateManagedWidget(
"menu1_top_b1",
698 Label = XtVaCreateManagedWidget(
"menu1_top_b1",
699 xmCascadeButtonWidgetClass,
724 void AW_window::get_font_size(
int& width,
int& height) {
731 get_font_size(width, height);
733 if (file) xfig_data =
new AW_xfig(file, width, height);
734 else xfig_data =
new AW_xfig(width, height);
739 int xsize = xfig_data->
maxx - xfig_data->
minx;
740 int ysize = xfig_data->
maxy - xfig_data->
miny;
757 static char *last_local_id =
NULp;
759 return last_local_id;
764 XtVaCreateManagedWidget(
"", xmSeparatorWidgetClass,
793 focus_cb =
new AW_cb(
this, wcb,
NULp, focus_cb);
863 top_indent_of_vertical_scrollbar = indent;
868 left_indent_of_horizontal_scrollbar = indent;
878 square->
r -= left_indent_of_horizontal_scrollbar;
879 square->
b -= top_indent_of_vertical_scrollbar;
894 bool use_horizontal_bar =
true;
895 int slider_size_horizontal = scrollArea.
r;
897 if (slider_size_horizontal < 1) slider_size_horizontal = 1;
898 if (slider_size_horizontal > slider_max) {
899 slider_size_horizontal = slider_max;
901 use_horizontal_bar =
false;
905 int position_of_slider;
907 if (position_of_slider > (slider_max-slider_size_horizontal)) {
908 position_of_slider = slider_max-slider_size_horizontal;
909 if (position_of_slider < 0) position_of_slider = 0;
933 bool use_vertical_bar =
true;
934 int slider_size_vertical = scrollArea.
b;
936 if (slider_size_vertical < 1) slider_size_vertical = 1;
937 if (slider_size_vertical > slider_max) {
938 slider_size_vertical = slider_max;
940 use_vertical_bar =
false;
944 int position_of_slider;
946 if (position_of_slider > (slider_max-slider_size_vertical)) {
947 position_of_slider = slider_max-slider_size_vertical;
948 if (position_of_slider < 0) position_of_slider = 0;
977 tmp ?
"tmp/window/%s/%s" :
"window/%s/%s",
999 #if defined(DEBUG) && 0
1000 fprintf(stderr,
"set_vertical_scrollbar_position to %i\n", position);
1008 #if defined(DEBUG) && 0
1009 fprintf(stderr,
"set_horizontal_scrollbar_position to %i\n", position);
1017 XmScrollBarCallbackStruct *sbcbs = (XmScrollBarCallbackStruct *)call_data;
1023 XmScrollBarCallbackStruct *sbcbs = (XmScrollBarCallbackStruct *)call_data;
1025 (cbs->
aw)->slider_pos_horizontal = sbcbs->value;
1030 XmScrollBarCallbackStruct *sbcbs = (XmScrollBarCallbackStruct *)call_data;
1036 XmScrollBarCallbackStruct *sbcbs = (XmScrollBarCallbackStruct *)call_data;
1038 (cbs->
aw)->slider_pos_horizontal = sbcbs->value;
1045 (XtPointer)
new AW_cb(
this, wcb,
""));
1048 (XtPointer)
new AW_cb(
this, wcb,
""));
1051 (XtCallbackProc) drag_scroll_bar_vertical,
1052 (XtPointer)
new AW_cb(
this, wcb,
""));
1054 (XtCallbackProc) drag_scroll_bar_vertical,
1055 (XtPointer)
new AW_cb(
this, wcb,
""));
1061 (XtPointer)
new AW_cb(
this, wcb,
""));
1064 (XtPointer)
new AW_cb(
this, wcb,
""));
1070 void AW_window::set_window_size(
int width,
int height) {
1071 XtVaSetValues(
p_w->
shell, XmNwidth, (
int)width, XmNheight, (
int)height,
NULp);
1080 freedup(window_name, title);
1098 set_window_size(width, height);
1105 expose_callback_added(
false),
1109 left_indent_of_horizontal_scrollbar(0),
1110 top_indent_of_vertical_scrollbar(0),
1111 layout_reset_wanted(
NULp),
1114 color_table_size(0),
1116 number_of_timed_title_changes(0),
1121 window_defaults_name(
NULp),
1122 slider_pos_vertical(0),
1123 slider_pos_horizontal(0),
1124 window_is_shown(
false),
1139 #if defined(DUMP_MENU_LIST)
1141 static char *window_name = 0;
1142 static char *sub_menu = 0;
1144 static void initMenuListing(
const char *win_name) {
1147 freedup(window_name, win_name);
1150 printf(
"---------------------------------------- list of menus for '%s'\n", window_name);
1153 static void dumpMenuEntry(
const char *entry) {
1156 printf(
"'%s/%s/%s'\n", window_name, sub_menu, entry);
1159 printf(
"'%s/%s'\n", window_name, entry);
1163 static void dumpOpenSubMenu(
const char *sub_name) {
1166 dumpMenuEntry(sub_name);
1169 else sub_menu = strdup(sub_name);
1172 static void dumpCloseSubMenu() {
1174 char *lslash = strrchr(sub_menu,
'/');
1178 else freenull(sub_menu);
1181 static void dumpCloseAllSubMenus() {
1185 #endif // DUMP_MENU_LIST
1193 AW_window_simple::AW_window_simple() {}
1194 AW_window_simple::~AW_window_simple() {}
1202 #define LAYOUT_AWAR_ROOT "window/windows"
1219 #define aw_awar_name_posx(aww) aw_size_awar_name((aww), "posx")
1220 #define aw_awar_name_posy(aww) aw_size_awar_name((aww), "posy")
1221 #define aw_awar_name_width(aww) aw_size_awar_name((aww), "width")
1222 #define aw_awar_name_height(aww) aw_size_awar_name((aww), "height")
1223 #define aw_awar_name_reset(aww) aw_size_awar_name((aww), "reset")
1231 if (layout_reset_wanted) {
1234 int cmp = strcmp(last_reset, layout_reset_wanted);
1237 reset_geometry_awars();
1243 void AW_window::store_size_in_awars(
int width,
int height) {
1248 void AW_window::get_size_from_awars(
int& width,
int& height) {
1253 void AW_window::store_pos_in_awars(
int posx,
int posy) {
1258 void AW_window::get_pos_from_awars(
int& posx,
int& posy) {
1263 void AW_window::reset_geometry_awars() {
1275 #undef aw_awar_name_posx
1276 #undef aw_awar_name_posy
1277 #undef aw_awar_name_width
1278 #undef aw_awar_name_height
1279 #undef aw_awar_name_reset
1287 int posx, posy; aww->get_window_content_pos(posx, posy);
1289 bool knows_window_position = posx != 0 || posy != 0;
1291 if (!knows_window_position) {
1295 int oposx, oposy; aww->get_pos_from_awars(oposx, oposy);
1296 aww->set_window_frame_pos(oposx, oposy);
1303 int oposx, oposy; aww->get_pos_from_awars(oposx, oposy);
1306 int left = posx-oposx;
1307 int top = posy-oposy;
1309 if (top == 0 || left == 0) {
1312 #if defined(TRACE_WM_OFFSETS)
1313 fprintf(stderr,
"aw_onExpose_calc_WM_offsets: failed to detect framesize (shift window 1 pixel and retry)\n");
1315 oposx = oposx>10 ? oposx-1 : oposx+1;
1316 oposy = oposy>10 ? oposy-1 : oposy+1;
1318 aww->set_window_frame_pos(oposx, oposy);
1319 aww->store_pos_in_awars(oposx, oposy);
1329 if (top == 0 || left == 0) {
1342 #if defined(TRACE_WM_OFFSETS)
1343 fprintf(stderr,
"WM_top_offset=%i WM_left_offset=%i (pos from awar: %i/%i, content-pos: %i/%i)\n",
1345 oposx, oposy, posx, posy);
1351 : last_widget(
NULp),
1354 toplevel_widget(
NULp),
1357 message_shell(
NULp),
1361 option_menu_list(
NULp),
1362 last_option_menu(
NULp),
1363 current_option_menu(
NULp),
1364 toggle_field_list(
NULp),
1365 last_toggle_field(
NULp),
1366 selection_list(
NULp),
1367 last_selection_list(
NULp),
1374 old_cursor_display(
NULp),
1375 old_cursor_window(0),
1387 XSetWindowAttributes attrs;
1394 attrs.cursor = None;
1397 XChangeWindowAttributes(d, w, CWCursor, &attrs);
1431 XtWindow(
p_aww(cbs->
aw)->shell),
1436 while (XCheckMaskEvent(XtDisplay(
p_global->toplevel_widget),
1437 ButtonPressMask|ButtonReleaseMask|ButtonMotionMask|
1438 KeyPressMask|KeyReleaseMask|PointerMotionMask, &event)) {
1443 XtWindow(
p_aww(cbs->
aw)->shell),
1448 XtWindow(
p_aww(cbs->
aw)->shell),
1454 recalc_pos_at_show = pr;
1458 return recalc_pos_at_show;
1465 recalc_size_at_show = sr;
1479 return focus_cb && focus_cb->
contains(f);
1499 XEvent *ev = call_data->event;
1501 if (ev->xexpose.count == 0) {
1509 XtAddCallback(area, XmNexposeCallback, (XtCallbackProc)
AW_exposeCB,
1512 expose_cb =
new AW_cb(aww, cb,
NULp, expose_cb);
1516 return expose_cb && expose_cb->
contains(f);
1525 XmDrawingAreaCallbackStruct da_struct;
1527 da_struct.reason = XmCR_EXPOSE;
1528 da_struct.event =
NULp;
1529 da_struct.window = XtWindow(
p_w->
shell);
1531 XtCallCallbacks(
p_w->
shell, XmNexposeCallback, (XtPointer) &da_struct);
1539 return resize_cb && resize_cb->
contains(f);
1547 void AW_window::set_window_frame_pos(
int x,
int y) {
1549 XtVaSetValues(
p_w->
shell, XmNx, (
int)x, XmNy, (
int)y,
NULp);
1551 void AW_window::get_window_content_pos(
int& xpos,
int& ypos) {
1553 unsigned short x,
y;
1559 void AW_window::get_screen_size(
int &width,
int &height) {
1560 Screen *screen = XtScreen(
p_w->
shell);
1562 width = WidthOfScreen(screen);
1563 height = HeightOfScreen(screen);
1566 bool AW_window::get_mouse_pos(
int& x,
int&
y) {
1567 Display *d = XtDisplay(
p_w->
shell);
1575 Bool ok = XQueryPointer(d, w1, &w2, &w3, &rx, &ry, &wx, &wy, &mask);
1578 #if defined(DEBUG) && 0
1579 printf(
"get_mouse_pos: rx/ry=%i/%i wx/wy=%i/%i\n", rx, ry, wx, wy);
1589 if (event && (event->type == ResizeRequest || event->type
1590 == ConfigureNotify) && event->xany.display == display) {
1599 XLockDisplay(display);
1606 XPutBackEvent(display, &event);
1608 XUnlockDisplay(display);
1613 aw_message(
"If YOU do not know what to answer, how should ARB know?\nPlease think again and answer the prompt!");
1617 aw_message(
"While recording a macro, you cannot use that [X] to hide this window.");
1628 aw_message(
"While recording a macro, you cannot use that [X] to quit.");
1632 if (!
aw_ask_sure(
"quit_by_X",
"Are you sure to quit?"))
return;
1643 Atom WM_DELETE_WINDOW = XmInternAtom(XtDisplay(shell), (
char*)
"WM_DELETE_WINDOW", False);
1648 XmRemoveWMProtocolCallback(shell, WM_DELETE_WINDOW, (XtCallbackProc)
aw_window_destroy_cb, (caddr_t)aww);
1651 XmAddWMProtocolCallback(shell, WM_DELETE_WINDOW, (XtCallbackProc)aw_window_avoid_destroy_cb, (caddr_t)aww);
1654 AW_root *root = aww->get_root();
1656 XmAddWMProtocolCallback(shell, WM_DELETE_WINDOW, (XtCallbackProc)aw_window_noexit_destroy_cb, (caddr_t)aww);
1659 XmAddWMProtocolCallback(shell, WM_DELETE_WINDOW, (XtCallbackProc)aw_window_destroy_cb, (caddr_t)aww);
1678 unsigned short width, height, borderwidth;
1679 XtVaGetValues(motif->
shell,
1680 XmNborderWidth, &borderwidth,
1691 if (posx<0) posx = 0;
1692 if (posy<0) posy = 0;
1694 aww->store_pos_in_awars(posx, posy);
1696 #if defined(TRACE_WM_OFFSETS)
1698 fprintf(stderr,
"Warning: WM_offsets unknown => did not update awars for window '%s'\n", aww->
get_window_title());
1701 aww->store_size_in_awars(width, height);
1705 bool was_shown =
true;
1707 all_menus_created();
1726 int user_width, user_height; get_size_from_awars(user_width, user_height);
1728 if (user_width <min_width) user_width = min_width;
1729 if (user_height<min_height) user_height = min_height;
1731 set_window_size(user_width, user_height);
1734 height = user_height;
1739 #define LOWEST_SUPPORTED_SCREEN_X 1280 // @@@ this size is wrong when 'window/font' has changed (e.g. to "9x15bold")
1740 #define LOWEST_SUPPORTED_SCREEN_Y 800
1742 if (min_width>LOWEST_SUPPORTED_SCREEN_X || min_height>LOWEST_SUPPORTED_SCREEN_Y) {
1744 "Warning: Window '%s' won't fit on %ix%i (win=%ix%i)\n",
1746 LOWEST_SUPPORTED_SCREEN_X, LOWEST_SUPPORTED_SCREEN_Y,
1747 min_width, min_height);
1748 #if defined(DEVEL_RALF)
1755 store_size_in_awars(width, height);
1764 int swidth, sheight; get_screen_size(swidth, sheight);
1765 bool posIsFrame =
false;
1767 switch (recalc_pos_at_show) {
1773 if (!get_mouse_pos(mx, my))
goto FALLBACK_CENTER;
1781 posx = (swidth-width)/2;
1782 posy = (sheight-height)/4;
1790 get_pos_from_awars(posx, posy);
1791 get_size_from_awars(width, height);
1796 int frameWidth, frameHeight;
1809 posy -= frameHeight;
1815 int maxx = swidth - 2*frameWidth - width;
1816 int maxy = sheight - frameWidth-frameHeight - height;
1818 if (posx>maxx) posx = maxx;
1819 if (posy>maxy) posy = maxy;
1822 if (posx<0) posx = 0;
1823 if (posy<0) posy = 0;
1828 if (posx<frameWidth) posx = frameWidth;
1829 if (posy<frameHeight) posy = frameHeight;
1836 store_pos_in_awars(posx, posy);
1837 set_window_frame_pos(posx, posy);
1844 if (!expose_callback_added) {
1846 expose_callback_added =
true;
1859 if (hide_cb) (*hide_cb)(
this);
1872 hide_cb =
new WindowCallback(call_on_hide);
1888 XtAddCallback(area, XmNresizeCallback,
1891 resize_cb =
new AW_cb(aww, cb,
NULp, resize_cb);
1899 XEvent *ev = call_data->event;
1903 bool run_callback =
false;
1904 bool run_double_click_callback =
false;
1910 if (
p_aww(aww)->areas[i]->get_area() == wgt) {
1911 area =
p_aww(aww)->areas[i];
1917 if (ev->xbutton.type == ButtonPress || ev->xbutton.type == ButtonRelease) {
1920 bool ignore_this_event =
false;
1927 if (!ignore_this_event) {
1929 aww->
event.
x = ev->xbutton.x;
1930 aww->
event.
y = ev->xbutton.y;
1935 if (ev->xbutton.type == ButtonPress) {
1939 run_double_click_callback =
true;
1942 run_callback =
true;
1947 run_callback =
true;
1951 else if (ev->xbutton.type == ButtonRelease) {
1953 run_callback =
true;
1958 else if (ev->xkey.type == KeyPress || ev->xkey.type == KeyRelease) {
1973 if (ev->xkey.type == KeyPress) {
1980 aww->
event.
x = ev->xbutton.x;
1981 aww->
event.
y = ev->xbutton.y;
1989 run_callback =
true;
1993 if (run_double_click_callback) {
2009 XtAddCallback(area, XmNinputCallback,
2011 (XtPointer)
new AW_cb(aww, wcb));
2015 double_click_cb =
new AW_cb(aww, wcb,
NULp, double_click_cb);
2039 XtAddEventHandler(area, ButtonMotionMask, False,
2048 void AW_root::exit_variables() {
2060 if (application_database) {
2061 GBDATA *prop_main = application_database;
2062 application_database =
NULp;
2067 void AW_root::exit_root() {
2100 long new_size = colnum+8;
2108 XColor xcolor_returned, xcolor_exakt;
2114 if (strcmp(colorname,
"white"))
2131 if (XAllocNamedColor(
p_global->display,
p_global->colormap, colorname, &xcolor_returned, &xcolor_exakt) == 0) {
2146 unsigned long background_color;
2180 len = aww->get_at().length_of_buttons - 2;
2181 if (len < 1) len = 1;
2184 memset(label,
'y', len);
2202 if (!display[0]) freeset(display, strdup(
" "));
2219 ((
AW_window*)val)->reset_geometry_awars();
2250 return icon_fullname;
2254 static Pixmap
getIcon(Screen *screen,
const char *iconName, Pixel foreground, Pixel background) {
2256 if (icon_hash.isNull()) {
2262 if (!pixmap && iconName) {
2266 char *ico = strdup(iconFile);
2267 pixmap = XmGetPixmap(screen, ico, foreground, background);
2277 #define CopyFromParent_AsPtr NULp
2284 if (width >aww->get_at().max_x_size) aww->get_at().max_x_size = width;
2285 if (height>aww->get_at().max_y_size) aww->get_at().max_y_size = height;
2287 bool has_user_geometry =
false;
2294 int user_width, user_height; aww->get_size_from_awars(user_width, user_height);
2295 int user_posx, user_posy; aww->get_pos_from_awars(user_posx, user_posy);
2298 if (width != user_width) { width = user_width; has_user_geometry =
true; }
2299 if (height != user_height) { height = user_height; has_user_geometry =
true; }
2304 if (posx != user_posx) { posx = user_posx; has_user_geometry =
true; }
2305 if (posy != user_posy) { posy = user_posy; has_user_geometry =
true; }
2307 if (has_user_geometry) {
2327 Screen *screen = XtScreen(father);
2337 else if (icon_pixmap == XmUNSPECIFIED_PIXMAP) {
2346 args.
add(XmNwidth, width);
2347 args.
add(XmNheight, height);
2348 args.
add(XmNx, posx);
2349 args.
add(XmNy, posy);
2352 args.
add(XmNkeyboardFocusPolicy, focusPolicy);
2353 args.
add(XmNdeleteResponse, XmDO_NOTHING);
2354 args.
add(XtNiconPixmap, icon_pixmap);
2357 shell = XtCreatePopupShell(
"editor", applicationShellWidgetClass, father, args.
list(), args.
size());
2360 shell = XtCreatePopupShell(
"transient", transientShellWidgetClass, father, args.
list(), args.
size());
2369 if (!
p_global->main_aww->is_shown()) {
2380 XtVaGetValues(shell, XmNiconWindow, &icon_window,
NULp);
2382 Display *
dpy = XtDisplay(shell);
2384 XSetWindowAttributes attr;
2385 attr.background_pixmap = icon_pixmap;
2388 unsigned int xsize, ysize, borderwidth, depth;
2391 if (XGetGeometry(dpy, icon_pixmap, &wroot, &xpos, &ypos, &xsize, &ysize, &borderwidth, &depth)) {
2392 icon_window = XCreateWindow(dpy, wroot, 0, 0, xsize, ysize, 0, depth, CopyFromParent,
CopyFromParent_AsPtr, CWBackPixmap, &attr);
2396 XtVaSetValues(shell, XmNiconPixmap, icon_pixmap,
NULp);
2399 XtVaSetValues(shell, XmNiconWindow, icon_window,
NULp);
2400 XSetWindowBackgroundPixmap(dpy, icon_window, icon_pixmap);
2401 XClearWindow(dpy, icon_window);
2419 XtRealizeWidget(
p_aww(aww)->shell);
2430 const char *help_button =
"HELP";
2431 const char *help_mnemonic =
"H";
2433 #if defined(DUMP_MENU_LIST)
2434 initMenuListing(windowname);
2435 #endif // DUMP_MENU_LIST
2437 window_name = strdup(windowname);
2445 main_window = XtVaCreateManagedWidget(
"mainWindow1",
2446 xmMainWindowWidgetClass,
p_w->
shell,
2449 p_w->
menu_bar[0] = XtVaCreateManagedWidget(
"menu1", xmRowColumnWidgetClass,
2451 XmNrowColumnType, XmMENU_BAR,
2455 help_popup = XtVaCreatePopupShell(
"menu_shell", xmMenuShellWidgetClass,
2459 XmNallowShellResize,
true,
2460 XmNoverrideRedirect,
true,
2465 xmRowColumnWidgetClass, help_popup,
2466 XmNrowColumnType, XmMENU_PULLDOWN,
2470 help_label = XtVaCreateManagedWidget(
"menu1_top_b1",
2478 form1 = XtVaCreateManagedWidget(
"form1",
2483 XmNresizePolicy, XmRESIZE_NONE,
2489 xmDrawingAreaWidgetClass,
2491 XmNresizePolicy, XmRESIZE_NONE,
2498 XmNbottomAttachment, XmATTACH_FORM,
2499 XmNleftAttachment, XmATTACH_POSITION,
2500 XmNtopAttachment, XmATTACH_POSITION,
2505 separator = XtVaCreateManagedWidget(
"separator",
2506 xmSeparatorWidgetClass,
2509 XmNshadowThickness, 4,
2510 XmNorientation, XmVERTICAL,
2511 XmNbottomAttachment, XmATTACH_FORM,
2512 XmNtopAttachment, XmATTACH_FORM,
2513 XmNleftAttachment, XmATTACH_NONE,
2514 XmNleftWidget,
NULp,
2515 XmNrightAttachment, XmATTACH_NONE,
2520 form2 = XtVaCreateManagedWidget(
"form2",
2529 XmNrightAttachment, XmATTACH_FORM,
2530 XmNbottomAttachment, XmATTACH_FORM,
2531 XmNleftAttachment, XmATTACH_WIDGET,
2532 XmNleftWidget, separator,
2533 XmNtopAttachment, XmATTACH_POSITION,
2534 XmNresizePolicy, XmRESIZE_NONE,
2540 xmDrawingAreaWidgetClass,
2543 XmNbottomAttachment, XmATTACH_NONE,
2544 XmNtopAttachment, XmATTACH_FORM,
2545 XmNleftAttachment, XmATTACH_FORM,
2546 XmNrightAttachment, XmATTACH_FORM,
2553 xmDrawingAreaWidgetClass,
2556 XmNbottomAttachment, XmATTACH_FORM,
2557 XmNtopAttachment, XmATTACH_NONE,
2558 XmNleftAttachment, XmATTACH_FORM,
2559 XmNrightAttachment, XmATTACH_FORM,
2563 xmScrollBarWidgetClass,
2570 XmNrightAttachment, XmATTACH_FORM,
2571 XmNbottomAttachment, XmATTACH_FORM,
2573 XmNleftAttachment, XmATTACH_FORM,
2574 XmNtopAttachment, XmATTACH_NONE,
2575 XmNorientation, XmHORIZONTAL,
2580 xmScrollBarWidgetClass,
2587 XmNrightAttachment, XmATTACH_FORM,
2588 XmNbottomAttachment, XmATTACH_WIDGET,
2593 XmNleftAttachment, XmATTACH_NONE,
2594 XmNtopAttachment, XmATTACH_WIDGET,
2598 p_w->
frame = XtVaCreateManagedWidget(
"draw_area",
2601 XmNshadowType, XmSHADOW_IN,
2602 XmNshadowThickness, 2,
2607 XmNbottomAttachment, XmATTACH_WIDGET,
2609 XmNtopAttachment, XmATTACH_FORM,
2611 XmNleftAttachment, XmATTACH_FORM,
2612 XmNrightAttachment, XmATTACH_WIDGET,
2618 xmDrawingAreaWidgetClass,
2640 const char *help_button =
"HELP";
2641 const char *help_mnemonic =
"H";
2643 #if defined(DUMP_MENU_LIST)
2644 initMenuListing(windowname);
2645 #endif // DUMP_MENU_LIST
2647 window_name = strdup(windowname);
2655 main_window = XtVaCreateManagedWidget(
"mainWindow1",
2656 xmMainWindowWidgetClass,
p_w->
shell,
2659 p_w->
menu_bar[0] = XtVaCreateManagedWidget(
"menu1", xmRowColumnWidgetClass,
2661 XmNrowColumnType, XmMENU_BAR,
2665 help_popup = XtVaCreatePopupShell(
"menu_shell", xmMenuShellWidgetClass,
2669 XmNallowShellResize,
true,
2670 XmNoverrideRedirect,
true,
2675 xmRowColumnWidgetClass, help_popup,
2676 XmNrowColumnType, XmMENU_PULLDOWN,
2680 help_label = XtVaCreateManagedWidget(
"menu1_top_b1",
2688 form1 = XtVaCreateManagedWidget(
"form1",
2693 XmNresizePolicy, XmRESIZE_NONE,
2699 xmDrawingAreaWidgetClass,
2701 XmNresizePolicy, XmRESIZE_NONE,
2708 XmNbottomAttachment, XmATTACH_FORM,
2709 XmNleftAttachment, XmATTACH_POSITION,
2710 XmNtopAttachment, XmATTACH_POSITION,
2717 form2 = XtVaCreateManagedWidget(
"form2",
2726 XmNrightAttachment, XmATTACH_FORM,
2727 XmNbottomAttachment, XmATTACH_FORM,
2728 XmNleftAttachment, XmATTACH_WIDGET,
2729 XmNleftWidget, separator,
2730 XmNtopAttachment, XmATTACH_POSITION,
2731 XmNresizePolicy, XmRESIZE_NONE,
2737 xmDrawingAreaWidgetClass,
2740 XmNbottomAttachment, XmATTACH_NONE,
2741 XmNtopAttachment, XmATTACH_FORM,
2742 XmNleftAttachment, XmATTACH_FORM,
2743 XmNrightAttachment, XmATTACH_FORM,
2750 xmDrawingAreaWidgetClass,
2753 XmNbottomAttachment, XmATTACH_FORM,
2754 XmNtopAttachment, XmATTACH_NONE,
2755 XmNleftAttachment, XmATTACH_FORM,
2756 XmNrightAttachment, XmATTACH_FORM,
2760 xmScrollBarWidgetClass,
2767 XmNrightAttachment, XmATTACH_FORM,
2768 XmNbottomAttachment, XmATTACH_FORM,
2770 XmNleftAttachment, XmATTACH_FORM,
2771 XmNtopAttachment, XmATTACH_NONE,
2772 XmNorientation, XmHORIZONTAL,
2777 xmScrollBarWidgetClass,
2784 XmNrightAttachment, XmATTACH_FORM,
2785 XmNbottomAttachment, XmATTACH_WIDGET,
2790 XmNleftAttachment, XmATTACH_NONE,
2791 XmNtopAttachment, XmATTACH_WIDGET,
2795 p_w->
frame = XtVaCreateManagedWidget(
"draw_area",
2798 XmNshadowType, XmSHADOW_IN,
2799 XmNshadowThickness, 2,
2804 XmNbottomAttachment, XmATTACH_WIDGET,
2806 XmNtopAttachment, XmATTACH_FORM,
2808 XmNleftAttachment, XmATTACH_FORM,
2809 XmNrightAttachment, XmATTACH_WIDGET,
2815 xmDrawingAreaWidgetClass,
2838 window_name = strdup(windowname);
2841 p_w->shell =
aw_create_shell(
this,
true,
true, width, height, posx, posy);
2846 Widget form1 = XtVaCreateManagedWidget(
"forms", xmFormWidgetClass,
2852 xmDrawingAreaWidgetClass,
2854 XmNbottomAttachment, XmATTACH_FORM,
2855 XmNtopAttachment, XmATTACH_FORM,
2856 XmNleftAttachment, XmATTACH_FORM,
2857 XmNrightAttachment, XmATTACH_FORM,
2869 const char *help_button =
"HELP";
2870 const char *help_mnemonic =
"H";
2871 window_name = strdup(windowname);
2886 main_window = XtVaCreateManagedWidget(
"mainWindow1",
2887 xmMainWindowWidgetClass,
p_w->
shell,
2890 p_w->
menu_bar[0] = XtVaCreateManagedWidget(
"menu1", xmRowColumnWidgetClass,
2892 XmNrowColumnType, XmMENU_BAR,
2896 help_popup = XtVaCreatePopupShell(
"menu_shell", xmMenuShellWidgetClass,
2900 XmNallowShellResize,
true,
2901 XmNoverrideRedirect,
true,
2906 xmRowColumnWidgetClass, help_popup,
2907 XmNrowColumnType, XmMENU_PULLDOWN,
2911 help_label = XtVaCreateManagedWidget(
"menu1_top_b1",
2919 form1 = XtVaCreateManagedWidget(
"form1",
2923 XmNresizePolicy, XmRESIZE_NONE,
2928 xmDrawingAreaWidgetClass,
2930 XmNbottomAttachment, XmATTACH_FORM,
2931 XmNtopAttachment, XmATTACH_FORM,
2932 XmNleftAttachment, XmATTACH_FORM,
2933 XmNrightAttachment, XmATTACH_FORM,
2952 window_name = strdup(windowname);
2959 XtVaSetValues(
p_w->
shell, XmNmwmFunctions, MWM_FUNC_MOVE | MWM_FUNC_CLOSE,
2964 xmDrawingAreaWidgetClass,
2967 XmNbottomAttachment, XmATTACH_NONE,
2968 XmNtopAttachment, XmATTACH_FORM,
2969 XmNleftAttachment, XmATTACH_FORM,
2970 XmNrightAttachment, XmATTACH_FORM,
2977 init(root_in, wid, windowname, allow_close);
2982 int focusPolicy = follow_mouse ? XmPOINTER : XmEXPLICIT;
2983 XtVaSetValues(
p_w->
shell, XmNkeyboardFocusPolicy, focusPolicy,
NULp);
2993 XtVaSetValues(oldwidget, XmNbackground,
p_global->background,
NULp);
2994 XtVaSetValues(widget, XmNbackground,
p_global->foreground,
NULp);
3002 #define MODE_BUTTON_OFFSET 34
3016 button = XtVaCreateManagedWidget(
"", xmPushButtonWidgetClass,
p_w->
mode_area,
3019 XmNlabelType, XmPIXMAP,
3020 XmNshadowThickness, 1,
3024 XtVaGetValues(button, XmNforeground, &
p_global->foreground,
NULp);
3028 XtAddCallback(button, XmNactivateCallback, (XtCallbackProc)
AW_server_callback, (XtPointer)cb2);
3054 if (!device) device =
new AW_device_Xm(common);
3064 if (!print_device) print_device =
new AW_device_print(common);
3065 return print_device;
3069 if (!click_device) click_device =
new AW_device_click(common);
3070 return click_device;
3078 if (iconic == True) {
3087 Display *xdpy = XtDisplay(
p_w->
shell);
3088 Window window = XtWindow(
p_w->
shell);
3089 Atom netactivewindow = XInternAtom(xdpy,
"_NET_ACTIVE_WINDOW", False);
3091 if (netactivewindow) {
3093 XClientMessageEvent ce;
3094 ce.type = ClientMessage;
3097 ce.message_type = netactivewindow;
3100 ce.data.l[1] = None;
3101 ce.data.l[2] = Above;
3108 XSendEvent(xdpy, XDefaultRootWindow(xdpy),
3110 SubstructureRedirectMask | SubstructureNotifyMask,
3114 if (!ret) { fprintf(stderr,
"Failed to send _NET_ACTIVE_WINDOW to WM (XSendEvent returns %i)\n", ret); }
3120 fputs(
"No such atom '_NET_ACTIVE_WINDOW'\n", stderr);
3133 XtAddCallback((
Widget) widget, XmNactivateCallback,
3141 bool colorSet =
false;
3144 XColor unused, color;
3146 if (XAllocNamedColor(
p_global->display,
p_global->colormap, colorname, &color, &unused)
3148 fprintf(stderr,
"XAllocColor failed: %s\n", colorname);
3210 XtVaGetValues(w, XmNbackground, &bg,
NULp);
3214 XQueryColor(XtDisplay(w),
p_global->colormap, &xc);
3216 col[0] = xc.red >> 8;
3217 col[1] = xc.green >> 8;
3218 col[2] = xc.blue >> 8;
3221 int mod = modStrength;
3222 int preferredDir = 0;
3223 bool invertedMod =
false;
3225 if (modStrength>0) {
3226 if (modStrength>255) {
3232 if (modStrength<-255) {
3233 mod = -modStrength-256;
3245 bool incPossible[3];
3246 bool decPossible[3];
3250 for (
int i = 0; i<3; ++i) {
3251 if ((incPossible[i] = ((col[i]+mod) <= 255)))
3253 if ((decPossible[i] = ((col[i]-mod) >= 0)))
3259 switch (preferredDir) {
3262 preferredDir = decs ? -1 : 1;
3264 preferredDir = incs ? 1 : -1;
3276 aw_assert(preferredDir == 1 || preferredDir == -1);
3278 if (preferredDir == 1) {
3279 for (
int i=0; i<3; ++i) col[i] += (incPossible[i] ? mod : 0);
3281 else if (preferredDir == -1) {
3282 for (
int i=0; i<3; ++i) col[i] -= (decPossible[i] ? mod : 0);
3287 sprintf(hex_color,
"#%2.2X%2.2X%2.2X", col[0], col[1], col[2]);
3297 layout_reset_wanted = YYYYMMDD;
3313 if (!(mask &
global_mask)) XtSetSensitive(w, False);
3321 XtSetSensitive(w, active);
3338 bool removed =
false;
3339 if (button_sens_list) {
3344 if (bl->
button == button)
break;
3352 else button_sens_list = bl->
next;
3383 Widget label_widgeti,
int correct) {
3398 scroll_bar_vertical(
NULp),
3399 scroll_bar_horizontal(
NULp),
3401 help_pull_down(
NULp),
3404 modes_f_callbacks(
NULp),
3405 modes_widgets(
NULp),
3411 toggle_field_var_name(
NULp),
3412 toggle_field_var_type(
AW_NONE),
void TuneBackground(Widget w, int modStrength)
void aw_realize_widget(AW_window *aww)
AW_widget_value_pair * first_toggle
static void horizontal_scrollbar_redefinition_cb(AW_root *, AW_window *aw)
bool is_resize_callback(AW_area area, AnyWinCB f)
enum AW_root::@65 color_mode
void set_input_callback(AW_window *aww, const WindowCallback &wcb)
virtual void clear(AW_bitset filteri)
void update_scrollbar_settings_from_awars(AW_orientation orientation)
AW_device_print * get_print_device(AW_area area)
void set_resize_callback(AW_area area, const WindowCallback &wcb)
#define AW_CALC_OFFSET_ON_EXPOSE
AW_cb * get_double_click_cb()
void set_last_widget(Widget w)
void define_remote_command(class AW_cb *cbs)
static void aw_loop_forget_window_geometry(const char *, long val, void *)
AW_pos get_scrolled_picture_height() const
void d_callback(const WindowCallback &cb)
void sens_mask(AW_active mask)
#define aw_awar_name_reset(aww)
AW_device * get_device(AW_area area)
static AW_window * find_or_createAndRegisterWindow(CreateWindowCallback *windowMaker)
GBDATA * GB_child(GBDATA *father)
#define implicated(hypothesis, conclusion)
const AW_screen_area & get_screen() const
static void AW_exposeCB(Widget, XtPointer aw_cb_struct, XmDrawingAreaCallbackStruct *call_data)
long GBS_write_hash(GB_HASH *hs, const char *key, long val)
STATIC_ASSERT_ANNOTATED(CopyFromParent==0,"value of CopyFromParent changed. Check use below")
return string(buffer, length)
bool is_resize_callback(AnyWinCB f)
Widget menu_bar[AW_MAX_MENU_DEEP]
void insert_menu_topic(const char *id, const char *name, const char *mnemonic, const char *help_text_, AW_active mask, const WindowCallback &wcb)
GB_HASH * hash_for_windows
bool remove_button_from_sens_list(Widget button)
void load_xfig(const char *file, bool resize=true)
AW_awar * label_is_awar(const char *label)
const char * get_window_id() const
void set_popup_callback(const WindowCallback &wcb)
void update_label(Widget widget, const char *var_value)
#define ASSERT_NO_ERROR(errorExpr)
static void drag_scroll_bar_horizontal(Widget, XtPointer aw_cb_struct, XtPointer call_data)
const char * GBS_global_string_to_buffer(char *buffer, size_t bufsize, const char *templat,...)
void reset_scrolled_picture_size()
void run_expose_callback()
void on_hide(const WindowCallback &call_on_hide)
void set_vertical_scrollbar_top_indent(int indent)
void _set_activate_callback(void *widget)
#define WIDER_THAN_SCREEN
static void aw_loop_get_window_geometry(const char *, long val, void *)
static long destroy_awar(const char *, long val, void *)
static int WM_max_left_offset
void set_window_title_intern(char *title)
#define aw_awar_name_posx(aww)
AW_window * current_modal_window
AW_VARIABLE_TYPE variable_type
const char * GBS_global_string(const char *templat,...)
void warning(int warning_num, const char *warning_message)
void get_scrollarea_size(AW_screen_area *square)
void GBK_terminatef(const char *templat,...)
void set_background(const char *colorname, Widget w)
void init(AW_root *root_in, const char *wid, const char *windowname, bool allow_close)
void AW_POPDOWN(AW_window *window)
void allow_delete_window(bool allow_close)
AW_area_management(Widget form, Widget widget)
void GBS_free_hash(GB_HASH *hs)
char * GBS_string_2_key(const char *str)
void reset_layout(const char *YYYYMMDD)
#define aw_awar_name_width(aww)
void add_timed_callback(int ms, const TimedCallback &tcb)
int correct_for_at_center_intern
void _get_area_size(AW_area area, AW_screen_area *square)
AW_pos get_scrolled_picture_width() const
void set_offset(const AW::Vector &off)
const AW_bitset AW_ALL_DEVICES
char * window_defaults_name
window title
int slider_pos_horizontal
current position of the vertical slider
static void aw_window_avoid_destroy_cb(Widget, AW_window *, XmAnyCallbackStruct *)
void set_window_title(const char *title)
static Pixmap getIcon(Screen *screen, const char *iconName, Pixel foreground, Pixel background)
bool is_focus_callback(AnyWinCB f)
char buffer[MESSAGE_BUFFERSIZE]
static void AW_xfigCB_info_area(AW_window *aww, AW_xfig *xfig)
void set_motion_callback(AW_area area, const WindowCallback &wcb)
AW_device_size * get_size_device(AW_area area)
AW_common * get_common(AW_area area)
AW_awar * add_callback(const RootCallback &cb)
GB_ERROR GB_delete(GBDATA *&source)
static void AW_inputCB_draw_area(Widget wgt, XtPointer aw_cb_struct, XmDrawingAreaCallbackStruct *call_data)
void create_window_variables()
bool AW_IS_IMAGEREF(const char *label)
const char * window_local_awarname(const char *localname, bool tmp=true)
static void value_changed_scroll_bar_vertical(Widget, XtPointer aw_cb_struct, XtPointer call_data)
const char * read_char_pntr() const
#define SmartCustomPtr(type, deallocator)
GB_HASH * hash_table_for_variables
int create_mode(const char *pixmap, const char *help_text_, AW_active mask, const WindowCallback &cb)
static AW_root * SINGLETON
static unsigned timed_window_title_cb(AW_root *, char *title, AW_window *aw)
WindowCallback makeHelpCallback(const char *helpfile)
char * ARB_strduplen(const char *p, unsigned len)
static int WM_max_top_offset
bool contains(AnyWinCB g)
TYPE * ARB_alloc(size_t nelem)
GB_CSTR GB_read_key_pntr(GBDATA *gbd)
bool is_expose_callback(AW_area area, AnyWinCB f)
Widget scroll_bar_horizontal
static const char * aw_size_awar_name(AW_window *aww, const char *sub_entry)
#define RES_LABEL_CONVERT(label)
void get_event(AW_event *eventi) const
void set_double_click_callback(AW_area area, const WindowCallback &wcb)
void recalc_size_atShow(enum AW_SizeRecalc sr)
AW_default check_properties(AW_default aw_props)
void GBS_hash_do_const_loop(const GB_HASH *hs, gb_hash_const_loop_type func, void *client_data)
void create_devices(AW_window *aww, AW_area ar)
void set_double_click_callback(AW_window *aww, const WindowCallback &wcb)
AW_cb ** modes_f_callbacks
Display * get_display() const
static unsigned aw_calc_WM_offsets_delayed(AW_root *, AW_window *aww)
void calculate_scrollbars()
AW_device_click * get_click_device(AW_area area, int mousex, int mousey, int max_distance)
static void aw_window_destroy_cb(Widget w, AW_window *aww, XmAnyCallbackStruct *)
char * helptext_for_next_button
const char * get_window_title() const
void set_expose_callback(AW_area area, const WindowCallback &wcb)
void create_menu(const char *name, const char *mnemonic, AW_active mask=AWM_ALL)
int number_of_timed_title_changes
int yoffset_for_mode_button(int button_number)
void help_text(const char *id)
static void error(const char *msg)
void set_active(Widget w, bool active)
AW_device_click * get_click_device()
void message(char *title, int ms)
AW_toggle_field_struct * next
bool knows_WM_offset() const
AW_area_management * areas[AW_MAX_AREA]
static void vertical_scrollbar_redefinition_cb(AW_root *, AW_window *aw)
void label(const char *label)
void insert_help_topic(const char *labeli, const char *mnemonic, const char *helpText, AW_active mask, const WindowCallback &cb)
static void value_changed_scroll_bar_horizontal(Widget, XtPointer aw_cb_struct, XtPointer call_data)
char * read_as_string() const
bool window_is_shown
current position of the horizontal slider
void TuneOrSetBackground(Widget w, const char *color, int modStrength)
GB_ERROR reset_to_default()
#define HIGHER_THAN_SCREEN
Widget scroll_bar_vertical
AW_device_Xm * get_screen_device()
Label(const char *labeltext, AW_window *aww)
const awXKeymap * aw_xkey_2_awkey(XKeyEvent *xkeyevent)
static void aw_onExpose_calc_WM_offsets(AW_window *aww)
AW_awar * awar(const char *awar)
const int AW_NUMBER_OF_F_KEYS
void insert_sub_menu(const char *name, const char *mnemonic, AW_active mask=AWM_ALL)
void button_height(int height)
char * ARB_strupper(char *s)
static void AW_motionCB(Widget, XtPointer aw_cb_struct, XEvent *ev, Boolean *)
static void aw_window_noexit_destroy_cb(Widget, AW_window *aww, XmAnyCallbackStruct *)
void create_user_geometry_awars(int posx, int posy, int width, int height)
void GBS_hash_do_loop(GB_HASH *hs, gb_hash_loop_type func, void *client_data)
void set_horizontal_scrollbar_left_indent(int indent)
static const char * existingPixmap(const char *icon_relpath, const char *name)
Widget aw_create_shell(AW_window *aww, bool allow_resize, bool allow_close, int width, int height, int posx, int posy)
WindowCallbackSimple AnyWinCB
#define RES_CONVERT(res_name, res_value)
bool is_expose_callback(AnyWinCB f)
class AW_awar * window_local_awar(const char *localname, bool tmp=true)
void set_click_time(long click_time_)
void tell_scrolled_picture_size(AW_screen_area rectangle)
bool aw_ask_sure(const char *unique_id, const char *msg)
static void set_focus_policy(const char *, long cl_aww, void *)
void set_info_area_height(int height)
AW_widget_value_pair * last_toggle
fputs(TRACE_PREFIX, stderr)
void create_gcs(AW_device *device, int screen_depth)
unsigned long int background_color
void set_bottom_area_height(int height)
AW_awar * awar_int(const char *var_name, long default_value=0, AW_default default_file=AW_ROOT_DEFAULT)
TYPE * ARB_calloc(size_t nelem)
void draw_line(int x1, int y1, int x2, int y2, int width, bool resize)
static void drag_scroll_bar_vertical(Widget, XtPointer aw_cb_struct, XtPointer call_data)
void AW_help_entry_pressed(AW_window *aww)
void set_focus_callback(const WindowCallback &wcb)
void AW_forget_all_window_geometry(AW_window *aww)
AW_device_size * get_size_device()
static float apply_ScalerType(float val, AW_ScalerType scalerType, bool inverse)
void set_resize_callback(AW_window *aww, const WindowCallback &cb)
void run_resize_callback()
void ARB_realloc(TYPE *&tgt, size_t nelem)
void make_sensitive(Widget w, AW_active mask)
void recalc_pos_atShow(AW_PosRecalc pr)
void set_horizontal_scrollbar_position(int position)
char * strdup_getlen(const char *str, int &len)
static ARB_init_perl_interface init
static void AW_resizeCB_draw_area(Widget, XtPointer aw_cb_struct, XtPointer)
AW_device_print * get_print_device()
void aw_message(const char *msg)
void select_mode(int mode)
AW_common_Xm * get_common() const
Display * old_cursor_display
long get_click_time() const
void add_line(int x1, int y1, int x2, int y2, int width)
static int is_resize_event(Display *display, XEvent *event, XPointer)
bool GB_is_regularfile(const char *path)
char * label_for_inputfield
static void aw_mode_callback(AW_window *aww, short mode, AW_cb *cbs)
void AW_help_popup(UNFIXED, const char *help_file)
GB_ERROR write_string(const char *aw_string)
AW_VARIABLE_TYPE variable_type
void run_focus_callback()
void aw_uninstall_xkeys()
void set_vertical_scrollbar_position(int position)
AW_toggle_field_struct(int toggle_field_numberi, const char *variable_namei, AW_VARIABLE_TYPE variable_typei, Widget label_widgeti, int correct)
void AW_label_in_awar_list(AW_window *aww, Widget widget, const char *str)
const char * local_id(const char *id) const
void set_cursor(Display *d, Window w, Cursor c)
#define aw_awar_name_posy(aww)
void AW_server_callback(Widget, XtPointer aw_cb_struct, XtPointer)
GBDATA * GB_nextChild(GBDATA *child)
AW_PosRecalc get_recalc_pos_atShow() const
GB_transaction ta(gb_var)
void callback(const WindowCallback &cb)
void set_horizontal_change_callback(const WindowCallback &wcb)
void set_vertical_change_callback(const WindowCallback &wcb)
static void aw_update_window_geometry_awars(AW_window *aww)
void run_popup_callbacks()
void aw_insert_default_help_entries(AW_window *aww)
AW_awar * awar_string(const char *var_name, const char *default_value="", AW_default default_file=AW_ROOT_DEFAULT)
void print(AW_device *device)
bool GBS_string_matches(const char *str, const char *expr, GB_CASE case_sens)
#define MODE_BUTTON_OFFSET
GBDATA * GB_search(GBDATA *gbd, const char *fieldpath, GB_TYPES create)
void hide_or_notify(const char *error)
void shadow_width(int shadow_thickness)
void set_expose_callback(AW_window *aww, const WindowCallback &cb)
static void aw_set_delete_window_cb(AW_window *aww, Widget shell, bool allow_close)
#define aw_awar_name_height(aww)
int slider_pos_vertical
window id
void add(String name, XtArgVal value)
static void cleanupResizeEvents(Display *display)
void set_motion_callback(AW_window *aww, const WindowCallback &wcb)
#define CopyFromParent_AsPtr
void aw_update_all_window_geometry_awars(AW_root *awr)
static void AW_focusCB(Widget, XtPointer cl_aww, XEvent *, Boolean *)
void set_input_callback(AW_area area, const WindowCallback &wcb)
GB_ERROR write_int(long aw_int)
struct _WidgetRec * Widget
long GBS_read_hash(const GB_HASH *hs, const char *key)
AW_color_idx alloc_named_data_color(int colnum, const char *colorname)
void window_hide(AW_window *aww)
void get_window_size(int &width, int &height)
void aw_message_if(GB_ERROR error)
char * GBS_global_string_copy(const char *templat,...)
void GB_close(GBDATA *gbd)
static char aw_size_awar_name_buffer[BUFSIZE]
void tie_widget(AW_CL cd1, Widget widget, AW_widget_type type, AW_window *aww)
AW_widget_value_pair * default_toggle
void track_action(const char *action_id)
GB_HASH * GBS_create_hash(long estimated_elements, GB_CASE case_sens)