2 * CDE - Common Desktop Environment
4 * Copyright (c) 1993-2012, The Open Group. All rights reserved.
6 * These libraries and programs are free software; you can
7 * redistribute them and/or modify them under the terms of the GNU
8 * Lesser General Public License as published by the Free Software
9 * Foundation; either version 2 of the License, or (at your option)
12 * These libraries and programs are distributed in the hope that
13 * they will be useful, but WITHOUT ANY WARRANTY; without even the
14 * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15 * PURPOSE. See the GNU Lesser General Public License for more
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with these librararies and programs; if not, write
20 * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
21 * Floor, Boston, MA 02110-1301 USA
23 /* $TOG: about.c /main/7 1999/02/03 15:35:27 mgreess $ */
25 * (c) Copyright 1993, 1994 Hewlett-Packard Company
26 * (c) Copyright 1993, 1994 International Business Machines Corp.
27 * (c) Copyright 1993, 1994 Novell, Inc.
28 * (c) Copyright 1993, 1994 Sun Microsystems, Inc.
37 #include <Xm/LabelG.h>
39 #include <Xm/DialogS.h>
40 #include <Xm/PushBG.h>
42 #include <Xm/SeparatoG.h>
44 #include <EUSCompat.h>
49 #include "icon_pixmap_xbm"
52 char *main_credits[] = {
63 char *also_credits[] = {
74 #define MAX_LABEL_SPACE 55
75 #define XmUNSPECIFIED_ICON_SIZE 0
76 #define DTCM_ABOUT "DtCMa"
78 extern Dimension ComputeMaxWidth(Widget, Widget, Widget, Widget);
80 static void close_about(Widget, XtPointer, XtPointer);
81 static void destroy_about(Widget, XtPointer, XtPointer);
82 static void do_credits(Widget, XtPointer, XtPointer);
84 extern String XmGetIconFileName(
86 String imageInstanceName,
87 String imageClassName,
92 * Create is popup the Calendar About dialog.
100 Calendar *c = calendar;
101 XmString xstr = NULL;
102 Dimension max_width, form_width;
108 Widget icon_label, main_form, sub_form, name_label,
109 version_label, version_date, copyright_label,
110 hp_label, ibm_label, novell_label, sun_label,
111 separator, close_button, more_button, dialog,
112 data_version_label, server_version_label;
113 Display *dpy = XtDisplay(c->frame);
114 Screen *screen = XtScreen(c->frame);
117 #if DTCM_INTERNAL_REV > 0
121 if (c->about_dialog) {
122 XtPopup(c->about_dialog, XtGrabNone);
123 XMapRaised(dpy, XtWindow(c->about_dialog));
127 title = XtNewString(catgets(c->DT_catd, 1, 922, "About Calendar"));
128 dialog = XtVaCreatePopupShell("about_dialog",
129 xmDialogShellWidgetClass,
132 XmNdeleteResponse, XmDESTROY,
133 XmNallowShellResize, True,
138 XtVaCreateWidget("about_form_mgr",
141 XmNautoUnmanage, False,
142 XmNtopAttachment, XmATTACH_FORM,
144 XmNleftAttachment, XmATTACH_FORM,
145 XmNrightAttachment, XmATTACH_FORM,
146 XmNbottomAttachment, XmATTACH_FORM,
151 XtVaGetValues(main_form,
156 if ((image_filename = XmGetIconFileName(screen, NULL,
158 XmUNSPECIFIED_ICON_SIZE))) {
159 image = XmGetPixmap(screen, image_filename, fg, bg);
160 free(image_filename);
165 XtVaCreateWidget("icon_label",
168 XmNtopAttachment, XmATTACH_FORM,
170 XmNleftAttachment, XmATTACH_FORM,
174 if (!image || image == XmUNSPECIFIED_PIXMAP) {
175 xstr = XmStringCreateLocalized(
176 catgets(c->DT_catd, 1, 917, "Missing\nGraphics"));
177 XtVaSetValues(icon_label,
178 XmNlabelType, XmSTRING,
179 XmNlabelString, xstr,
184 XtVaSetValues(icon_label,
185 XmNlabelType, XmPIXMAP,
186 XmNlabelPixmap, image,
191 XtVaCreateWidget("sub_form",
194 XmNtopAttachment, XmATTACH_FORM,
196 XmNleftAttachment, XmATTACH_WIDGET,
197 XmNleftWidget, icon_label,
198 XmNleftAttachment, XmATTACH_WIDGET,
199 XmNshadowThickness, 0,
200 XmNshadowType, XmSHADOW_IN,
203 xstr = XmStringCreateLocalized(catgets(c->DT_catd, 1, 340, "Calendar"));
205 XtVaCreateWidget("about_name_label",
208 XmNlabelType, XmSTRING,
209 XmNlabelString, xstr,
210 XmNalignment, XmALIGNMENT_BEGINNING,
211 XmNtopAttachment, XmATTACH_FORM,
213 XmNleftAttachment, XmATTACH_FORM,
215 XmNrightAttachment, XmATTACH_FORM,
221 sprintf(buf, "%s %d.%d.%d",
222 catgets(c->DT_catd, 1, 671, "Version"),
223 DtVERSION, DtREVISION, DtUPDATE_LEVEL);
224 #if DTCM_INTERNAL_REV > 0
226 sprintf(buf, "%s (%s %d)",
228 catgets(c->DT_catd, 1, 672, "Revision"),
232 xstr = XmStringCreateLocalized(buf);
234 XtVaCreateWidget("version_label",
237 XmNlabelType, XmSTRING,
238 XmNlabelString, xstr,
239 XmNalignment, XmALIGNMENT_BEGINNING,
240 XmNtopAttachment, XmATTACH_WIDGET,
242 XmNtopWidget, name_label,
243 XmNleftAttachment, XmATTACH_FORM,
245 XmNrightAttachment, XmATTACH_FORM,
251 sprintf(buf, "%s %d", catgets(c->DT_catd, 1, 967,
252 "Calendar Server Version"),
253 get_server_version(c->my_cal_handle));
255 xstr = XmStringCreateLocalized(buf);
256 server_version_label =
257 XtVaCreateWidget("server_version",
260 XmNlabelType, XmSTRING,
261 XmNlabelString, xstr,
262 XmNalignment, XmALIGNMENT_BEGINNING,
263 XmNtopAttachment, XmATTACH_WIDGET,
265 XmNtopWidget, version_label,
266 XmNleftAttachment, XmATTACH_FORM,
268 XmNrightAttachment, XmATTACH_FORM,
274 sprintf(buf, "%s %d", catgets(c->DT_catd, 1, 968,
275 "Calendar Data Version"),
278 xstr = XmStringCreateLocalized(buf);
280 XtVaCreateWidget("data_version",
283 XmNlabelType, XmSTRING,
284 XmNlabelString, xstr,
285 XmNalignment, XmALIGNMENT_BEGINNING,
286 XmNtopAttachment, XmATTACH_WIDGET,
288 XmNtopWidget, server_version_label,
289 XmNleftAttachment, XmATTACH_FORM,
291 XmNrightAttachment, XmATTACH_FORM,
297 #if defined(DTCM_SHOW_ABOUT_COPYRIGHT)
303 tm.tm_mon = DTCM_VERSION_MONTH - 1;
304 tm.tm_year = DTCM_VERSION_YEAR - 1900;
308 sprintf( buf, "%s %d", months[tm.tm_mon + 1 ], tm.tm_year + 1900 );
310 strftime(buf, 64, "%B %Y", &tm);
313 xstr = XmStringCreateLocalized(buf);
315 XtVaCreateWidget("version_date",
318 XmNlabelType, XmSTRING,
319 XmNlabelString, xstr,
320 XmNalignment, XmALIGNMENT_BEGINNING,
321 XmNtopAttachment, XmATTACH_WIDGET,
323 XmNtopWidget, data_version_label,
324 XmNleftAttachment, XmATTACH_FORM,
326 XmNrightAttachment, XmATTACH_FORM,
331 xstr = XmStringCreateLocalized(catgets(c->DT_catd, 1, 674,
332 "Copyright (c) 1993, 1994, 1995:"));
334 XtVaCreateWidget("copyright_label",
337 XmNlabelType, XmSTRING,
338 XmNlabelString, xstr,
339 XmNalignment, XmALIGNMENT_BEGINNING,
340 XmNtopAttachment, XmATTACH_WIDGET,
342 XmNtopWidget, version_date,
343 XmNleftAttachment, XmATTACH_FORM,
345 XmNrightAttachment, XmATTACH_FORM,
350 xstr = XmStringCreateLocalized(catgets(c->DT_catd, 1, 675,
351 "Hewlett-Packard Company"));
353 XtVaCreateWidget("hp_label",
356 XmNlabelType, XmSTRING,
357 XmNlabelString, xstr,
358 XmNalignment, XmALIGNMENT_BEGINNING,
359 XmNtopAttachment, XmATTACH_WIDGET,
361 XmNtopWidget, copyright_label,
362 XmNleftAttachment, XmATTACH_FORM,
363 XmNleftOffset, GAP * 2,
364 XmNrightAttachment, XmATTACH_FORM,
369 xstr = XmStringCreateLocalized(catgets(c->DT_catd, 1, 676,
370 "International Business Machines Corp."));
372 XtVaCreateWidget("ibm_label",
375 XmNlabelType, XmSTRING,
376 XmNlabelString, xstr,
377 XmNalignment, XmALIGNMENT_BEGINNING,
378 XmNtopAttachment, XmATTACH_WIDGET,
380 XmNtopWidget, hp_label,
381 XmNleftAttachment, XmATTACH_FORM,
382 XmNleftOffset, GAP * 2,
383 XmNrightAttachment, XmATTACH_FORM,
388 xstr = XmStringCreateLocalized(catgets(c->DT_catd, 1, 677,
391 XtVaCreateWidget("novell_label",
394 XmNlabelType, XmSTRING,
395 XmNlabelString, xstr,
396 XmNalignment, XmALIGNMENT_BEGINNING,
397 XmNtopAttachment, XmATTACH_WIDGET,
399 XmNtopWidget, ibm_label,
400 XmNleftAttachment, XmATTACH_FORM,
401 XmNleftOffset, GAP * 2,
402 XmNrightAttachment, XmATTACH_FORM,
407 xstr = XmStringCreateLocalized(catgets(c->DT_catd, 1, 678,
408 "Sun Microsystems, Inc."));
410 XtVaCreateWidget("sun_label",
413 XmNlabelType, XmSTRING,
414 XmNlabelString, xstr,
415 XmNalignment, XmALIGNMENT_BEGINNING,
416 XmNtopAttachment, XmATTACH_WIDGET,
418 XmNtopWidget, novell_label,
419 XmNleftAttachment, XmATTACH_FORM,
420 XmNleftOffset, GAP * 2,
421 XmNrightAttachment, XmATTACH_FORM,
429 xstr = XmStringCreateLocalized(catgets(c->DT_catd, 1, 679, "More..."));
430 more_button = XtVaCreateWidget("more_button",
431 xmPushButtonGadgetClass,
433 XmNlabelString, xstr,
435 XmNtopAttachment, XmATTACH_NONE,
436 XmNleftAttachment, XmATTACH_WIDGET,
438 XmNleftWidget, sub_form,
439 XmNrightAttachment, XmATTACH_FORM,
444 XtAddCallback(more_button, XmNactivateCallback, do_credits,
448 separator = XtVaCreateWidget("separator",
449 xmSeparatorGadgetClass,
451 XmNtopAttachment, XmATTACH_WIDGET,
452 XmNtopOffset, GAP * 2,
453 XmNtopWidget, sub_form,
454 XmNleftAttachment, XmATTACH_FORM,
456 XmNrightAttachment, XmATTACH_FORM,
460 xstr = XmStringCreateLocalized(catgets(c->DT_catd, 1, 680, "Close"));
461 close_button = XtVaCreateWidget("close_button",
462 xmPushButtonGadgetClass, main_form,
463 XmNlabelString, xstr,
465 XmNbottomAttachment, XmATTACH_FORM,
466 XmNbottomOffset, GAP,
467 XmNtopAttachment, XmATTACH_WIDGET,
468 XmNtopWidget, separator,
473 max_width = ComputeMaxWidth(more_button, close_button, NULL, NULL);
475 max_width = ComputeMaxWidth(close_button, close_button, NULL, NULL);
479 XtAddCallback(close_button, XmNactivateCallback, close_about, NULL);
480 XtAddCallback(close_button, XmNdestroyCallback, destroy_about, NULL);
483 XtVaSetValues(more_button,
485 XmNbottomAttachment, XmATTACH_WIDGET,
486 XmNbottomWidget, separator,
487 XmNbottomOffset, GAP,
491 ManageChildren(sub_form);
492 ManageChildren(main_form);
493 XtManageChild(main_form);
495 XtVaGetValues(main_form,
496 XmNwidth, &form_width,
499 XtVaSetValues(close_button,
500 XmNleftAttachment, XmATTACH_FORM,
501 XmNleftOffset, form_width/2 - max_width/2,
505 XtVaSetValues(main_form,
506 XmNdefaultButton, close_button,
507 XmNcancelButton, close_button,
510 XtPopup(dialog, XtGrabNone);
512 c->about_dialog = dialog;
518 XtPointer client_data,
519 XtPointer callback_struct)
521 XtPopdown(calendar->about_dialog);
522 XtDestroyWidget(calendar->about_dialog);
523 calendar->about_dialog = NULL;
529 XtPointer client_data,
530 XtPointer callback_struct)
532 calendar->about_dialog = NULL;
538 XtPointer client_data,
539 XtPointer callback_struct)
541 calendar->credits_dialog = NULL;
547 XtPointer client_data,
548 XtPointer callback_struct)
550 XtPopdown(calendar->credits_dialog);
551 XtDestroyWidget(calendar->credits_dialog);
552 calendar->credits_dialog = NULL;
558 * Create and popup the Credits dialog.
563 XtPointer client_data,
564 XtPointer callback_struct)
566 Calendar *c = calendar;
567 Pixmap image = (Pixmap)client_data;
568 Widget dialog, main_form, sub_form, separator, close_button,
569 icon_label, title_label, label, parent, above_widget;
570 XmString xstr = NULL;
572 Dimension button_width, dialog_width;
575 if (c->credits_dialog) {
576 XtPopup(c->credits_dialog, XtGrabNone);
580 title = XtNewString(catgets(c->DT_catd, 1, 681, "Calendar Contributors"));
581 dialog = XtVaCreatePopupShell("contrib_dialog",
582 xmDialogShellWidgetClass,
585 XmNdeleteResponse, XmDESTROY,
586 XmNallowShellResize, True,
591 XtVaCreateWidget("credit_main_form",
594 XmNtopAttachment, XmATTACH_FORM,
596 XmNleftAttachment, XmATTACH_FORM,
597 XmNrightAttachment, XmATTACH_FORM,
598 XmNbottomAttachment, XmATTACH_FORM,
603 XtVaCreateWidget("icon_label",
606 XmNtopAttachment, XmATTACH_FORM,
608 XmNleftAttachment, XmATTACH_FORM,
612 if (!image || image == XmUNSPECIFIED_PIXMAP) {
613 xstr = XmStringCreateLocalized(
614 catgets(c->DT_catd, 1, 918, "Missing\nGraphics"));
615 XtVaSetValues(icon_label,
616 XmNlabelType, XmSTRING,
617 XmNlabelString, xstr,
622 XtVaSetValues(icon_label,
623 XmNlabelType, XmPIXMAP,
624 XmNlabelPixmap, image,
629 XtVaCreateWidget("credit_sub_form",
632 XmNtopAttachment, XmATTACH_FORM,
634 XmNleftAttachment, XmATTACH_WIDGET,
635 XmNleftWidget, icon_label,
636 XmNrightAttachment, XmATTACH_FORM,
639 xstr = XmStringCreateLocalized(catgets(c->DT_catd, 1, 682,
640 "This application was brought to you by:"));
642 XtVaCreateWidget("title_label",
645 XmNlabelType, XmSTRING,
646 XmNlabelString, xstr,
647 XmNalignment, XmALIGNMENT_BEGINNING,
648 XmNtopAttachment, XmATTACH_FORM,
650 XmNleftAttachment, XmATTACH_FORM,
652 XmNrightAttachment, XmATTACH_FORM,
658 above_widget = title_label;
660 for (i = 0; main_credits[i]; i++) {
661 xstr = XmStringCreateLocalized(main_credits[i]);
663 XtVaCreateWidget("main_credit_label",
666 XmNlabelType, XmSTRING,
667 XmNlabelString, xstr,
668 XmNalignment, XmALIGNMENT_BEGINNING,
669 XmNtopAttachment, XmATTACH_WIDGET,
670 XmNtopWidget, above_widget,
672 XmNleftAttachment, XmATTACH_FORM,
674 XmNrightAttachment, XmATTACH_FORM,
678 above_widget = label;
682 xstr = XmStringCreateLocalized(catgets(c->DT_catd, 1, 1002,
683 "Also contributing:"));
685 XtVaCreateWidget("title_label",
688 XmNlabelType, XmSTRING,
689 XmNlabelString, xstr,
690 XmNalignment, XmALIGNMENT_BEGINNING,
691 XmNtopAttachment, XmATTACH_WIDGET,
692 XmNtopWidget, above_widget,
694 XmNleftAttachment, XmATTACH_FORM,
696 XmNrightAttachment, XmATTACH_FORM,
702 above_widget = title_label;
704 for (i = 0; also_credits[i]; i++) {
705 xstr = XmStringCreateLocalized(also_credits[i]);
707 XtVaCreateWidget("credit_label",
710 XmNlabelType, XmSTRING,
711 XmNlabelString, xstr,
712 XmNalignment, XmALIGNMENT_BEGINNING,
713 XmNtopAttachment, XmATTACH_WIDGET,
714 XmNtopWidget, above_widget,
716 XmNleftAttachment, XmATTACH_FORM,
718 XmNrightAttachment, XmATTACH_FORM,
722 above_widget = label;
726 separator = XtVaCreateWidget("separator",
727 xmSeparatorGadgetClass,
729 XmNtopAttachment, XmATTACH_WIDGET,
730 XmNtopOffset, GAP * 2,
731 XmNtopWidget, sub_form,
732 XmNleftAttachment, XmATTACH_FORM,
734 XmNrightAttachment, XmATTACH_FORM,
738 xstr = XmStringCreateLocalized(catgets(c->DT_catd, 1, 680, "Close"));
739 close_button = XtVaCreateWidget("close_button",
740 xmPushButtonGadgetClass, main_form,
741 XmNlabelString, xstr,
743 XmNbottomAttachment, XmATTACH_FORM,
744 XmNbottomOffset, GAP,
745 XmNtopAttachment, XmATTACH_WIDGET,
746 XmNtopWidget, separator,
751 XtAddCallback(close_button, XmNactivateCallback, close_credits, NULL);
752 XtAddCallback(close_button, XmNdestroyCallback, destroy_credits, NULL);
754 ManageChildren(sub_form);
755 ManageChildren(main_form);
756 XtManageChild(main_form);
758 XtVaGetValues(dialog,
759 XmNwidth, &dialog_width,
761 XtVaGetValues(close_button,
762 XmNwidth, &button_width,
765 XtVaSetValues(close_button,
766 XmNleftAttachment, XmATTACH_FORM,
767 XmNleftOffset, dialog_width/2 - button_width/2,
770 XtVaSetValues(main_form, XmNdefaultButton, close_button, NULL);
771 XtVaSetValues(main_form, XmNcancelButton, close_button, NULL);
773 XtPopup(dialog, XtGrabNone);
775 c->credits_dialog = dialog;