Files
cdesktop/cde/programs/dtcm/dtcm/about.c
2012-03-10 18:58:32 +00:00

779 lines
20 KiB
C

/*
* CDE - Common Desktop Environment
*
* Copyright (c) 1993-2012, The Open Group. All rights reserved.
*
* These libraries and programs are free software; you can
* redistribute them and/or modify them under the terms of the GNU
* Lesser General Public License as published by the Free Software
* Foundation; either version 2 of the License, or (at your option)
* any later version.
*
* These libraries and programs are distributed in the hope that
* they will be useful, but WITHOUT ANY WARRANTY; without even the
* implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
* PURPOSE. See the GNU Lesser General Public License for more
* details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with these librararies and programs; if not, write
* to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
* Floor, Boston, MA 02110-1301 USA
*/
/* $TOG: about.c /main/7 1999/02/03 15:35:27 mgreess $ */
/*
* (c) Copyright 1993, 1994 Hewlett-Packard Company
* (c) Copyright 1993, 1994 International Business Machines Corp.
* (c) Copyright 1993, 1994 Novell, Inc.
* (c) Copyright 1993, 1994 Sun Microsystems, Inc.
*/
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <Xm/Frame.h>
#include <Xm/Xm.h>
#include <Xm/Form.h>
#include <Xm/LabelG.h>
#include <Xm/Label.h>
#include <Xm/DialogS.h>
#include <Xm/PushBG.h>
#include <Xm/PushB.h>
#include <Xm/SeparatoG.h>
#include <Dt/Dt.h>
#include <EUSCompat.h>
#include "calendar.h"
#include "props_pu.h"
#include "revision.h"
#include "icon_pixmap_xbm"
#ifdef CREDITS
char *main_credits[] = {
"Mary Hamilton",
"Chris Kasso",
"Martin Knutson",
"Terre Layton",
"Yvonne Tso",
"J.F. Unson",
"Janice Winsor",
NULL
};
char *also_credits[] = {
"Brent Ayers",
"David Curley",
"Betty Deluco",
"Lin-Chuan Lee",
NULL
};
#endif /* CREDITS */
#define GAP 10
#define TOG_GAP 10
#define MAX_LABEL_SPACE 55
#define XmUNSPECIFIED_ICON_SIZE 0
#define DTCM_ABOUT "DtCMa"
extern Dimension ComputeMaxWidth(Widget, Widget, Widget, Widget);
static void close_about(Widget, XtPointer, XtPointer);
static void destroy_about(Widget, XtPointer, XtPointer);
static void do_credits(Widget, XtPointer, XtPointer);
extern String XmGetIconFileName(
Screen *screen,
String imageInstanceName,
String imageClassName,
String hostPrefix,
unsigned int size) ;
/*
* Create is popup the Calendar About dialog.
*/
void
show_about(
Widget w,
XtPointer clientData,
XtPointer cbs)
{
Calendar *c = calendar;
XmString xstr = NULL;
Dimension max_width, form_width;
Pixmap image = 0;
char buf[64],
*image_filename;
XmbTextItem text[1];
Pixel fg, bg;
Widget icon_label, main_form, sub_form, name_label,
version_label, version_date, copyright_label,
hp_label, ibm_label, novell_label, sun_label,
separator, close_button, more_button, dialog,
data_version_label, server_version_label;
Display *dpy = XtDisplay(c->frame);
Screen *screen = XtScreen(c->frame);
struct tm tm;
char *title;
#if DTCM_INTERNAL_REV > 0
char buf2[64];
#endif
if (c->about_dialog) {
XtPopup(c->about_dialog, XtGrabNone);
XMapRaised(dpy, XtWindow(c->about_dialog));
return;
}
title = XtNewString(catgets(c->DT_catd, 1, 922, "About Calendar"));
dialog = XtVaCreatePopupShell("about_dialog",
xmDialogShellWidgetClass,
c->frame,
XmNtitle, title,
XmNdeleteResponse, XmDESTROY,
XmNallowShellResize, True,
NULL);
XtFree(title);
main_form =
XtVaCreateWidget("about_form_mgr",
xmFormWidgetClass,
dialog,
XmNautoUnmanage, False,
XmNtopAttachment, XmATTACH_FORM,
XmNtopOffset, GAP,
XmNleftAttachment, XmATTACH_FORM,
XmNrightAttachment, XmATTACH_FORM,
XmNbottomAttachment, XmATTACH_FORM,
XmNfractionBase, 4,
XmNnoResize, True,
NULL);
XtVaGetValues(main_form,
XmNbackground, &bg,
XmNforeground, &fg,
NULL);
if ((image_filename = XmGetIconFileName(screen, NULL,
DTCM_ABOUT, NULL,
XmUNSPECIFIED_ICON_SIZE))) {
image = XmGetPixmap(screen, image_filename, fg, bg);
free(image_filename);
}
icon_label =
XtVaCreateWidget("icon_label",
xmLabelWidgetClass,
main_form,
XmNtopAttachment, XmATTACH_FORM,
XmNtopOffset, GAP,
XmNleftAttachment, XmATTACH_FORM,
XmNleftOffset, GAP,
NULL);
if (!image || image == XmUNSPECIFIED_PIXMAP) {
xstr = XmStringCreateLocalized(
catgets(c->DT_catd, 1, 917, "Missing\nGraphics"));
XtVaSetValues(icon_label,
XmNlabelType, XmSTRING,
XmNlabelString, xstr,
XmNborderWidth, 1,
NULL);
XmStringFree(xstr);
} else {
XtVaSetValues(icon_label,
XmNlabelType, XmPIXMAP,
XmNlabelPixmap, image,
NULL);
}
sub_form =
XtVaCreateWidget("sub_form",
xmFormWidgetClass,
main_form,
XmNtopAttachment, XmATTACH_FORM,
XmNtopOffset, GAP,
XmNleftAttachment, XmATTACH_WIDGET,
XmNleftWidget, icon_label,
XmNleftAttachment, XmATTACH_WIDGET,
XmNshadowThickness, 0,
XmNshadowType, XmSHADOW_IN,
NULL);
xstr = XmStringCreateLocalized(catgets(c->DT_catd, 1, 340, "Calendar"));
name_label =
XtVaCreateWidget("about_name_label",
xmLabelWidgetClass,
sub_form,
XmNlabelType, XmSTRING,
XmNlabelString, xstr,
XmNalignment, XmALIGNMENT_BEGINNING,
XmNtopAttachment, XmATTACH_FORM,
XmNtopOffset, GAP,
XmNleftAttachment, XmATTACH_FORM,
XmNleftOffset, 0,
XmNrightAttachment, XmATTACH_FORM,
XmNrightOffset, GAP,
NULL);
XmStringFree(xstr);
sprintf(buf, "%s %d.%d.%d",
catgets(c->DT_catd, 1, 671, "Version"),
DtVERSION, DtREVISION, DtUPDATE_LEVEL);
#if DTCM_INTERNAL_REV > 0
strcpy(buf2, buf);
sprintf(buf, "%s (%s %d)",
buf2,
catgets(c->DT_catd, 1, 672, "Revision"),
DTCM_INTERNAL_REV);
#endif
xstr = XmStringCreateLocalized(buf);
version_label =
XtVaCreateWidget("version_label",
xmLabelWidgetClass,
sub_form,
XmNlabelType, XmSTRING,
XmNlabelString, xstr,
XmNalignment, XmALIGNMENT_BEGINNING,
XmNtopAttachment, XmATTACH_WIDGET,
XmNtopOffset, GAP,
XmNtopWidget, name_label,
XmNleftAttachment, XmATTACH_FORM,
XmNleftOffset, 0,
XmNrightAttachment, XmATTACH_FORM,
XmNrightOffset, GAP,
NULL);
XmStringFree(xstr);
sprintf(buf, "%s %d", catgets(c->DT_catd, 1, 967,
"Calendar Server Version"),
get_server_version(c->my_cal_handle));
xstr = XmStringCreateLocalized(buf);
server_version_label =
XtVaCreateWidget("server_version",
xmLabelWidgetClass,
sub_form,
XmNlabelType, XmSTRING,
XmNlabelString, xstr,
XmNalignment, XmALIGNMENT_BEGINNING,
XmNtopAttachment, XmATTACH_WIDGET,
XmNtopOffset, 0,
XmNtopWidget, version_label,
XmNleftAttachment, XmATTACH_FORM,
XmNleftOffset, 0,
XmNrightAttachment, XmATTACH_FORM,
XmNrightOffset, GAP,
NULL);
XmStringFree(xstr);
sprintf(buf, "%s %d", catgets(c->DT_catd, 1, 968,
"Calendar Data Version"),
c->my_cal_version);
xstr = XmStringCreateLocalized(buf);
data_version_label =
XtVaCreateWidget("data_version",
xmLabelWidgetClass,
sub_form,
XmNlabelType, XmSTRING,
XmNlabelString, xstr,
XmNalignment, XmALIGNMENT_BEGINNING,
XmNtopAttachment, XmATTACH_WIDGET,
XmNtopOffset, 0,
XmNtopWidget, server_version_label,
XmNleftAttachment, XmATTACH_FORM,
XmNleftOffset, 0,
XmNrightAttachment, XmATTACH_FORM,
XmNrightOffset, GAP,
NULL);
XmStringFree(xstr);
#if defined(DTCM_SHOW_ABOUT_COPYRIGHT)
tm.tm_sec = 0;
tm.tm_min = 0;
tm.tm_hour = 0;
tm.tm_mday = 1;
tm.tm_mon = DTCM_VERSION_MONTH - 1;
tm.tm_year = DTCM_VERSION_YEAR - 1900;
tm.tm_isdst = -1;
#ifdef _AIX
sprintf( buf, "%s %d", months[tm.tm_mon + 1 ], tm.tm_year + 1900 );
#else /* _AIX */
strftime(buf, 64, "%B %Y", &tm);
#endif /* _AIX */
xstr = XmStringCreateLocalized(buf);
version_date =
XtVaCreateWidget("version_date",
xmLabelWidgetClass,
sub_form,
XmNlabelType, XmSTRING,
XmNlabelString, xstr,
XmNalignment, XmALIGNMENT_BEGINNING,
XmNtopAttachment, XmATTACH_WIDGET,
XmNtopOffset, 0,
XmNtopWidget, data_version_label,
XmNleftAttachment, XmATTACH_FORM,
XmNleftOffset, 0,
XmNrightAttachment, XmATTACH_FORM,
XmNrightOffset, GAP,
NULL);
XmStringFree(xstr);
xstr = XmStringCreateLocalized(catgets(c->DT_catd, 1, 674,
"Copyright (c) 1993, 1994, 1995:"));
copyright_label =
XtVaCreateWidget("copyright_label",
xmLabelWidgetClass,
sub_form,
XmNlabelType, XmSTRING,
XmNlabelString, xstr,
XmNalignment, XmALIGNMENT_BEGINNING,
XmNtopAttachment, XmATTACH_WIDGET,
XmNtopOffset, GAP,
XmNtopWidget, version_date,
XmNleftAttachment, XmATTACH_FORM,
XmNleftOffset, 0,
XmNrightAttachment, XmATTACH_FORM,
XmNrightOffset, GAP,
NULL);
XmStringFree(xstr);
xstr = XmStringCreateLocalized(catgets(c->DT_catd, 1, 675,
"Hewlett-Packard Company"));
hp_label =
XtVaCreateWidget("hp_label",
xmLabelWidgetClass,
sub_form,
XmNlabelType, XmSTRING,
XmNlabelString, xstr,
XmNalignment, XmALIGNMENT_BEGINNING,
XmNtopAttachment, XmATTACH_WIDGET,
XmNtopOffset, GAP,
XmNtopWidget, copyright_label,
XmNleftAttachment, XmATTACH_FORM,
XmNleftOffset, GAP * 2,
XmNrightAttachment, XmATTACH_FORM,
XmNrightOffset, GAP,
NULL);
XmStringFree(xstr);
xstr = XmStringCreateLocalized(catgets(c->DT_catd, 1, 676,
"International Business Machines Corp."));
ibm_label =
XtVaCreateWidget("ibm_label",
xmLabelWidgetClass,
sub_form,
XmNlabelType, XmSTRING,
XmNlabelString, xstr,
XmNalignment, XmALIGNMENT_BEGINNING,
XmNtopAttachment, XmATTACH_WIDGET,
XmNtopOffset, 0,
XmNtopWidget, hp_label,
XmNleftAttachment, XmATTACH_FORM,
XmNleftOffset, GAP * 2,
XmNrightAttachment, XmATTACH_FORM,
XmNrightOffset, GAP,
NULL);
XmStringFree(xstr);
xstr = XmStringCreateLocalized(catgets(c->DT_catd, 1, 677,
"Novell, Inc."));
novell_label =
XtVaCreateWidget("novell_label",
xmLabelWidgetClass,
sub_form,
XmNlabelType, XmSTRING,
XmNlabelString, xstr,
XmNalignment, XmALIGNMENT_BEGINNING,
XmNtopAttachment, XmATTACH_WIDGET,
XmNtopOffset, 0,
XmNtopWidget, ibm_label,
XmNleftAttachment, XmATTACH_FORM,
XmNleftOffset, GAP * 2,
XmNrightAttachment, XmATTACH_FORM,
XmNrightOffset, GAP,
NULL);
XmStringFree(xstr);
xstr = XmStringCreateLocalized(catgets(c->DT_catd, 1, 678,
"Sun Microsystems, Inc."));
sun_label =
XtVaCreateWidget("sun_label",
xmLabelWidgetClass,
sub_form,
XmNlabelType, XmSTRING,
XmNlabelString, xstr,
XmNalignment, XmALIGNMENT_BEGINNING,
XmNtopAttachment, XmATTACH_WIDGET,
XmNtopOffset, 0,
XmNtopWidget, novell_label,
XmNleftAttachment, XmATTACH_FORM,
XmNleftOffset, GAP * 2,
XmNrightAttachment, XmATTACH_FORM,
XmNrightOffset, GAP,
NULL);
XmStringFree(xstr);
#endif
#ifdef CREDITS
xstr = XmStringCreateLocalized(catgets(c->DT_catd, 1, 679, "More..."));
more_button = XtVaCreateWidget("more_button",
xmPushButtonGadgetClass,
main_form,
XmNlabelString, xstr,
XmNmarginWidth, 5,
XmNtopAttachment, XmATTACH_NONE,
XmNleftAttachment, XmATTACH_WIDGET,
XmNleftOffset, GAP,
XmNleftWidget, sub_form,
XmNrightAttachment, XmATTACH_FORM,
XmNrightOffset, GAP,
NULL);
XmStringFree(xstr);
XtAddCallback(more_button, XmNactivateCallback, do_credits,
(XtPointer)image);
#endif /* CREDITS */
separator = XtVaCreateWidget("separator",
xmSeparatorGadgetClass,
main_form,
XmNtopAttachment, XmATTACH_WIDGET,
XmNtopOffset, GAP * 2,
XmNtopWidget, sub_form,
XmNleftAttachment, XmATTACH_FORM,
XmNleftOffset, 0,
XmNrightAttachment, XmATTACH_FORM,
XmNrightOffset, 0,
NULL);
xstr = XmStringCreateLocalized(catgets(c->DT_catd, 1, 680, "Close"));
close_button = XtVaCreateWidget("close_button",
xmPushButtonGadgetClass, main_form,
XmNlabelString, xstr,
XmNmarginWidth, 5,
XmNbottomAttachment, XmATTACH_FORM,
XmNbottomOffset, GAP,
XmNtopAttachment, XmATTACH_WIDGET,
XmNtopWidget, separator,
XmNtopOffset, GAP,
NULL);
#ifdef CREDITS
max_width = ComputeMaxWidth(more_button, close_button, NULL, NULL);
#else
max_width = ComputeMaxWidth(close_button, close_button, NULL, NULL);
#endif /* CREDITS */
XmStringFree(xstr);
XtAddCallback(close_button, XmNactivateCallback, close_about, NULL);
XtAddCallback(close_button, XmNdestroyCallback, destroy_about, NULL);
#ifdef CREDITS
XtVaSetValues(more_button,
XmNwidth, max_width,
XmNbottomAttachment, XmATTACH_WIDGET,
XmNbottomWidget, separator,
XmNbottomOffset, GAP,
NULL);
#endif /* CREDITS */
ManageChildren(sub_form);
ManageChildren(main_form);
XtManageChild(main_form);
XtVaGetValues(main_form,
XmNwidth, &form_width,
NULL);
XtVaSetValues(close_button,
XmNleftAttachment, XmATTACH_FORM,
XmNleftOffset, form_width/2 - max_width/2,
XmNwidth, max_width,
NULL);
XtVaSetValues(main_form,
XmNdefaultButton, close_button,
XmNcancelButton, close_button,
NULL);
XtPopup(dialog, XtGrabNone);
c->about_dialog = dialog;
}
static void
close_about(
Widget w,
XtPointer client_data,
XtPointer callback_struct)
{
XtPopdown(calendar->about_dialog);
XtDestroyWidget(calendar->about_dialog);
calendar->about_dialog = NULL;
}
static void
destroy_about(
Widget w,
XtPointer client_data,
XtPointer callback_struct)
{
calendar->about_dialog = NULL;
}
static void
destroy_credits(
Widget w,
XtPointer client_data,
XtPointer callback_struct)
{
calendar->credits_dialog = NULL;
}
static void
close_credits(
Widget w,
XtPointer client_data,
XtPointer callback_struct)
{
XtPopdown(calendar->credits_dialog);
XtDestroyWidget(calendar->credits_dialog);
calendar->credits_dialog = NULL;
}
#ifdef CREDITS
/*
* Create and popup the Credits dialog.
*/
static void
do_credits(
Widget w,
XtPointer client_data,
XtPointer callback_struct)
{
Calendar *c = calendar;
Pixmap image = (Pixmap)client_data;
Widget dialog, main_form, sub_form, separator, close_button,
icon_label, title_label, label, parent, above_widget;
XmString xstr = NULL;
int i;
Dimension button_width, dialog_width;
char *title;
if (c->credits_dialog) {
XtPopup(c->credits_dialog, XtGrabNone);
return;
}
title = XtNewString(catgets(c->DT_catd, 1, 681, "Calendar Contributors"));
dialog = XtVaCreatePopupShell("contrib_dialog",
xmDialogShellWidgetClass,
c->frame,
XmNtitle, title,
XmNdeleteResponse, XmDESTROY,
XmNallowShellResize, True,
NULL);
XtFree(title);
main_form =
XtVaCreateWidget("credit_main_form",
xmFormWidgetClass,
dialog,
XmNtopAttachment, XmATTACH_FORM,
XmNtopOffset, GAP,
XmNleftAttachment, XmATTACH_FORM,
XmNrightAttachment, XmATTACH_FORM,
XmNbottomAttachment, XmATTACH_FORM,
XmNnoResize, True,
NULL);
icon_label =
XtVaCreateWidget("icon_label",
xmLabelWidgetClass,
main_form,
XmNtopAttachment, XmATTACH_FORM,
XmNtopOffset, GAP,
XmNleftAttachment, XmATTACH_FORM,
XmNleftOffset, GAP,
NULL);
if (!image || image == XmUNSPECIFIED_PIXMAP) {
xstr = XmStringCreateLocalized(
catgets(c->DT_catd, 1, 918, "Missing\nGraphics"));
XtVaSetValues(icon_label,
XmNlabelType, XmSTRING,
XmNlabelString, xstr,
XmNborderWidth, 1,
NULL);
XmStringFree(xstr);
} else {
XtVaSetValues(icon_label,
XmNlabelType, XmPIXMAP,
XmNlabelPixmap, image,
NULL);
}
sub_form =
XtVaCreateWidget("credit_sub_form",
xmFormWidgetClass,
main_form,
XmNtopAttachment, XmATTACH_FORM,
XmNtopOffset, GAP,
XmNleftAttachment, XmATTACH_WIDGET,
XmNleftWidget, icon_label,
XmNrightAttachment, XmATTACH_FORM,
NULL);
xstr = XmStringCreateLocalized(catgets(c->DT_catd, 1, 682,
"This application was brought to you by:"));
title_label =
XtVaCreateWidget("title_label",
xmLabelWidgetClass,
sub_form,
XmNlabelType, XmSTRING,
XmNlabelString, xstr,
XmNalignment, XmALIGNMENT_BEGINNING,
XmNtopAttachment, XmATTACH_FORM,
XmNtopOffset, GAP,
XmNleftAttachment, XmATTACH_FORM,
XmNleftOffset, 0,
XmNrightAttachment, XmATTACH_FORM,
XmNrightOffset, GAP,
NULL);
XmStringFree(xstr);
above_widget = title_label;
for (i = 0; main_credits[i]; i++) {
xstr = XmStringCreateLocalized(main_credits[i]);
label =
XtVaCreateWidget("main_credit_label",
xmLabelWidgetClass,
sub_form,
XmNlabelType, XmSTRING,
XmNlabelString, xstr,
XmNalignment, XmALIGNMENT_BEGINNING,
XmNtopAttachment, XmATTACH_WIDGET,
XmNtopWidget, above_widget,
XmNtopOffset, 0,
XmNleftAttachment, XmATTACH_FORM,
XmNleftOffset, 90,
XmNrightAttachment, XmATTACH_FORM,
XmNrightOffset, GAP,
NULL);
above_widget = label;
XmStringFree(xstr);
}
xstr = XmStringCreateLocalized(catgets(c->DT_catd, 1, 1002,
"Also contributing:"));
title_label =
XtVaCreateWidget("title_label",
xmLabelWidgetClass,
sub_form,
XmNlabelType, XmSTRING,
XmNlabelString, xstr,
XmNalignment, XmALIGNMENT_BEGINNING,
XmNtopAttachment, XmATTACH_WIDGET,
XmNtopWidget, above_widget,
XmNtopOffset, 10,
XmNleftAttachment, XmATTACH_FORM,
XmNleftOffset, 0,
XmNrightAttachment, XmATTACH_FORM,
XmNrightOffset, GAP,
NULL);
XmStringFree(xstr);
above_widget = title_label;
for (i = 0; also_credits[i]; i++) {
xstr = XmStringCreateLocalized(also_credits[i]);
label =
XtVaCreateWidget("credit_label",
xmLabelWidgetClass,
sub_form,
XmNlabelType, XmSTRING,
XmNlabelString, xstr,
XmNalignment, XmALIGNMENT_BEGINNING,
XmNtopAttachment, XmATTACH_WIDGET,
XmNtopWidget, above_widget,
XmNtopOffset, 0,
XmNleftAttachment, XmATTACH_FORM,
XmNleftOffset, 90,
XmNrightAttachment, XmATTACH_FORM,
XmNrightOffset, GAP,
NULL);
above_widget = label;
XmStringFree(xstr);
}
separator = XtVaCreateWidget("separator",
xmSeparatorGadgetClass,
main_form,
XmNtopAttachment, XmATTACH_WIDGET,
XmNtopOffset, GAP * 2,
XmNtopWidget, sub_form,
XmNleftAttachment, XmATTACH_FORM,
XmNleftOffset, 0,
XmNrightAttachment, XmATTACH_FORM,
XmNrightOffset, 0,
NULL);
xstr = XmStringCreateLocalized(catgets(c->DT_catd, 1, 680, "Close"));
close_button = XtVaCreateWidget("close_button",
xmPushButtonGadgetClass, main_form,
XmNlabelString, xstr,
XmNmarginWidth, 5,
XmNbottomAttachment, XmATTACH_FORM,
XmNbottomOffset, GAP,
XmNtopAttachment, XmATTACH_WIDGET,
XmNtopWidget, separator,
XmNtopOffset, GAP,
NULL);
XmStringFree(xstr);
XtAddCallback(close_button, XmNactivateCallback, close_credits, NULL);
XtAddCallback(close_button, XmNdestroyCallback, destroy_credits, NULL);
ManageChildren(sub_form);
ManageChildren(main_form);
XtManageChild(main_form);
XtVaGetValues(dialog,
XmNwidth, &dialog_width,
NULL);
XtVaGetValues(close_button,
XmNwidth, &button_width,
NULL);
XtVaSetValues(close_button,
XmNleftAttachment, XmATTACH_FORM,
XmNleftOffset, dialog_width/2 - button_width/2,
NULL);
XtVaSetValues(main_form, XmNdefaultButton, close_button, NULL);
XtVaSetValues(main_form, XmNcancelButton, close_button, NULL);
XtPopup(dialog, XtGrabNone);
c->credits_dialog = dialog;
}
#endif /* CREDITS */