Initial import of the CDE 2.1.30 sources from the Open Group.
This commit is contained in:
222
cde/examples/dtprint/Main.c
Normal file
222
cde/examples/dtprint/Main.c
Normal file
@@ -0,0 +1,222 @@
|
||||
/* $XConsortium: Main.c /main/6 1996/06/07 12:04:30 daniel $ */
|
||||
#include "PrintDemo.h"
|
||||
|
||||
/*
|
||||
* VideoShell structure definition
|
||||
*/
|
||||
typedef struct _VideoShell
|
||||
{
|
||||
Widget widget;
|
||||
Boolean print_only;
|
||||
String file_name;
|
||||
} VideoShell;
|
||||
|
||||
/*
|
||||
* application-level resources
|
||||
*/
|
||||
static XrmOptionDescRec XrmOptions[] =
|
||||
{
|
||||
{"-print", "printOnly", XrmoptionNoArg, (caddr_t)"True"},
|
||||
{"-fileName", "fileName", XrmoptionSepArg, (caddr_t)NULL},
|
||||
};
|
||||
static XtResource VideoResources[] =
|
||||
{
|
||||
{"printOnly", "PrintOnly", XmRBoolean, sizeof (Boolean),
|
||||
XtOffsetOf (VideoShell, print_only), XmRImmediate, (XtPointer)False,
|
||||
},
|
||||
{"fileName", "FileName", XmRString, sizeof (char *),
|
||||
XtOffsetOf (VideoShell, file_name), XmRImmediate, (XtPointer)NULL,
|
||||
},
|
||||
};
|
||||
|
||||
/*
|
||||
* static function declarations
|
||||
*/
|
||||
static VideoShell* VideoShell_new(Display* display);
|
||||
|
||||
/*
|
||||
* ------------------------------------------------------------------------
|
||||
* Name: VideoShell_new
|
||||
*
|
||||
* Description:
|
||||
*
|
||||
* Allocates a new VideoShell data structure.
|
||||
*
|
||||
* This function creates a top level application shell on the passed
|
||||
* video display.
|
||||
*
|
||||
* Return value:
|
||||
*
|
||||
* A pointer to the new VideoShell structure.
|
||||
*/
|
||||
static VideoShell*
|
||||
VideoShell_new(Display* display)
|
||||
{
|
||||
VideoShell* me = (VideoShell*)XtCalloc(1, sizeof(VideoShell));
|
||||
|
||||
me->widget = XtVaAppCreateShell(NULL, APP_CLASS,
|
||||
applicationShellWidgetClass,
|
||||
display,
|
||||
XmNtitle, "DtPrint Demo",
|
||||
NULL);
|
||||
XtGetApplicationResources(me->widget, me,
|
||||
VideoResources, XtNumber(VideoResources),
|
||||
NULL, 0);
|
||||
return me;
|
||||
}
|
||||
|
||||
/*
|
||||
* ------------------------------------------------------------------------
|
||||
* Name: CloseProgramCB
|
||||
*
|
||||
* Description:
|
||||
*
|
||||
* Exit the program.
|
||||
*
|
||||
* Return value:
|
||||
*
|
||||
* None.
|
||||
*/
|
||||
void
|
||||
CloseProgramCB(
|
||||
Widget w,
|
||||
XtPointer client_data,
|
||||
XtPointer call_data)
|
||||
{
|
||||
AppPrintData * p = (AppPrintData *) client_data ;
|
||||
/* we want to wait for the current job to complete before exiting */
|
||||
|
||||
/* if a job is running, just unmap the windows and install itself
|
||||
as endjob callback, which will be called when printed_lines is
|
||||
back to zero */
|
||||
if (p->printed_lines) {
|
||||
/* put up a dialog saying it's waiting for the job
|
||||
to complete */
|
||||
XtAddCallback(p->print_shell, XmNendJobCallback, CloseProgramCB, p);
|
||||
} else {
|
||||
exit(0);
|
||||
}
|
||||
}
|
||||
|
||||
static String fallbacks[] = {
|
||||
"Dtprint.Print*background:white",
|
||||
"Dtprint.Print*renderTable:-dt-application-bold-r-normal-serif-0-0-0-0-p-0-iso8859-1",
|
||||
"Dtprint.Print*shadowThickness:0",
|
||||
"Dtprint.Print*highlightThickness:0",
|
||||
"Dtprint.Print*pform.marginHeight: 1in",
|
||||
"Dtprint.Print*pform.marginWidth: 1in",
|
||||
"Dtprint.Print*ptext.Attachment:attach_form",
|
||||
NULL
|
||||
};
|
||||
|
||||
/*
|
||||
* ------------------------------------------------------------------------
|
||||
* Name: main
|
||||
*
|
||||
* Description:
|
||||
*
|
||||
* "main" function for the DtPrint demo program.
|
||||
*
|
||||
*
|
||||
*/
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
XtAppContext app_context;
|
||||
VideoShell* video_shell;
|
||||
MainWindow* main_window;
|
||||
Display* video_display;
|
||||
AppPrintData* p;
|
||||
/*
|
||||
* attempt to open the X video display
|
||||
*/
|
||||
XtSetLanguageProc(NULL, (XtLanguageProc)NULL, NULL);
|
||||
XtToolkitInitialize();
|
||||
app_context = XtCreateApplicationContext();
|
||||
video_display = XtOpenDisplay(app_context, NULL, NULL, APP_CLASS,
|
||||
XrmOptions, XtNumber(XrmOptions),
|
||||
&argc, argv);
|
||||
XtAppSetFallbackResources(app_context, fallbacks);
|
||||
if(video_display == (Display*)NULL)
|
||||
{
|
||||
/*
|
||||
* parse command line and determine if "GUI-less" printing is
|
||||
* desired
|
||||
*/
|
||||
|
||||
/*
|
||||
* XXX exit for now
|
||||
*/
|
||||
fprintf(stderr, "unable to open display\n");
|
||||
return 1;
|
||||
}
|
||||
/*
|
||||
* Create the top level video shell
|
||||
*/
|
||||
video_shell = VideoShell_new(video_display);
|
||||
/*
|
||||
* one AppPrintData object per app
|
||||
*/
|
||||
p = AppPrintData_new();
|
||||
p->print_only = video_shell->print_only;
|
||||
/*
|
||||
* check to see if we're running the app, or just printing (e.g. from
|
||||
* within a print action)
|
||||
*/
|
||||
if(video_shell->print_only)
|
||||
{
|
||||
/*
|
||||
* create the application-specific object, and add it to the
|
||||
* AppPrintData structure.
|
||||
*/
|
||||
p->app_object = AppObject_new((Widget)NULL, video_shell->file_name);
|
||||
/*
|
||||
* create the print setup box as the child of the top level shell
|
||||
*/
|
||||
CreatePrintSetup(video_shell->widget, p);
|
||||
/*
|
||||
* set the cancel button to exit the program
|
||||
*/
|
||||
XtAddCallback(p->print_dialog, DtNcancelCallback, CloseProgramCB, p);
|
||||
/*
|
||||
* manage the print setup box
|
||||
*/
|
||||
XtManageChild(p->print_dialog);
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
* create the main window
|
||||
*/
|
||||
main_window = MainWindow_new(video_shell->widget);
|
||||
/*
|
||||
* add callbacks to the main window
|
||||
*/
|
||||
XtAddCallback(main_window->print_menu_button, XmNactivateCallback,
|
||||
PrintMenuCB, p);
|
||||
p->pr_button = main_window->print_menu_button;
|
||||
|
||||
XtAddCallback(main_window->quick_print_button, XmNactivateCallback,
|
||||
QuickPrintCB, p);
|
||||
XtAddCallback(main_window->exit_button, XmNactivateCallback,
|
||||
CloseProgramCB, p);
|
||||
/*
|
||||
* create the application-specific object, and add it to the
|
||||
* AppPrintData structure.
|
||||
*/
|
||||
p->app_object =
|
||||
AppObject_new(main_window->widget, video_shell->file_name);
|
||||
/*
|
||||
* manage the main window
|
||||
*/
|
||||
XtManageChild(main_window->widget);
|
||||
}
|
||||
/*
|
||||
* main loop
|
||||
*/
|
||||
XtRealizeWidget(video_shell->widget);
|
||||
XtAppMainLoop(app_context);
|
||||
/*
|
||||
* we never get here, but this makes the compiler happy
|
||||
*/
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user