00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050 #ifdef _WIN32
00051 # include <Inventor/Win/SoWinPrintDialog.h>
00052 #else // _WIN32
00053
00054 #ifndef SO_XT_PRINT_DIALOG_
00055 #define SO_XT_PRINT_DIALOG_
00056
00057 #include <X11/Intrinsic.h>
00058 #include <Xm/Xm.h>
00059
00060 #include <Inventor/SbBasic.h>
00061 #include <Inventor/Xt/SoXtComponent.h>
00062 #include <Inventor/misc/SoCallbackList.h>
00063
00064 class SbPList;
00065 class SoNode;
00066 class SoPath;
00067 class SoGLRenderAction;
00068 class SoXtPrintDialog;
00069
00070
00071
00072 typedef void SoXtPrintDialogCB(void *userData, SoXtPrintDialog *dialog);
00073
00075
00076
00077
00079
00139 class SoXtPrintDialog : public SoXtComponent {
00140 public:
00144 SoXtPrintDialog(
00145 SoWidget parent = NULL,
00146 const char *name = NULL,
00147 SbBool buildInsideParent = TRUE);
00151 SoXtPrintDialog(
00152 SoGLRenderAction *act,
00153 SoWidget parent = NULL,
00154 const char *name = NULL,
00155 SbBool buildInsideParent = TRUE);
00159 ~SoXtPrintDialog();
00160
00164 void setSceneGraph( SoPath *path );
00168 void setSceneGraph( SoNode *root );
00169
00173 SoNode *getSceneGraph() { return rootNode; }
00177 SoPath *getSceneGraphPath() { return rootPath; }
00178
00182 void setGLRenderAction(const SoGLRenderAction *act);
00186 SoGLRenderAction *getGLRenderAction();
00187
00192 void setPrintSize( const SbVec2f &inches );
00197 void setPrintSize( const SbVec2s &pixels );
00198
00205 inline void setBeforePrintCallback(
00206 SoXtPrintDialogCB *f,
00207 void *userData = NULL);
00214 inline void setAfterPrintCallback(
00215 SoXtPrintDialogCB *f,
00216 void *userData = NULL);
00217
00218 private:
00219
00220
00221
00222
00223 SoXtPrintDialog(
00224 SoWidget parent,
00225 const char *name,
00226 SbBool buildInsideParent,
00227 SbBool buildNow);
00228
00229
00230 virtual SbString getDefaultWidgetName() const;
00231 virtual SbString getDefaultTitle() const;
00232 virtual SbString getDefaultIconTitle() const;
00233
00234 SoNode *rootNode;
00235 SoPath *rootPath;
00236 SbBool printDone;
00237 SbBool highQuality;
00238 SbBool portraitFormat;
00239 SbBool printerOutput, postScriptOutput;
00240 SbBool nodeMostRecent;
00241 SbBool WYSIWYGflag;
00242 SoWidget messageWidget, printButton, quitButton;
00243 SoWidget messageLabelWidget, fileFormatWidget;
00244 SoWidget toPrinterWidget, toPostScriptFileWidget, toRGBFileWidget;
00245 SoWidget printerHorizSize, printerVertSize;
00246 SoWidget postScriptHorizSize, postScriptVertSize;
00247 SoWidget rgbHorizSize, rgbVertSize;
00248 SoWidget printerDPIField, postScriptDPIField;
00249 SoWidget rgbFilenameWidget, postScriptFilenameWidget;
00250 SbPList *printers;
00251 char *defaultPrinter;
00252 int whichPrinter;
00253 SbVec2f printSize;
00254 SbVec2s printRes;
00255 SoCallbackList beforeList, afterList;
00256 SbBool alreadyUpdated;
00257
00258 void print();
00259 void getPrinterList();
00260 void printToPostScript( SoNode *, char *, int, int );
00261
00262
00263 void buildToPrinterWidget( SoWidget parent );
00264 void buildToPostScriptFileWidget( SoWidget parent );
00265 void buildToRGBFileWidget( SoWidget parent );
00266 void placeBottomOfDialog( SoXtPrintDialog * );
00267 void buildRadioButton( char *, char *, char *, int, int,
00268 SoWidget, XtCallbackProc );
00269 void buildSizeFields( char *, int, SoWidget, SoWidget &, SoWidget &,
00270 XtCallbackProc, XtCallbackProc );
00271 void buildDPIField( int, SoWidget, SoWidget &, XtCallbackProc );
00272 void updateTextports();
00273
00274
00275
00276
00277 static void qualityCB( SoWidget, SoXtPrintDialog *,
00278 XmAnyCallbackStruct * );
00279 static void pageFormatCB( SoWidget, SoXtPrintDialog *,
00280 XmAnyCallbackStruct * );
00281 static void fileFormatCB( SoWidget, SoXtPrintDialog *,
00282 XmAnyCallbackStruct * );
00283 static void printerHorizSizeCB( SoWidget, SoXtPrintDialog *,
00284 XmAnyCallbackStruct * );
00285 static void printerVertSizeCB( SoWidget, SoXtPrintDialog *,
00286 XmAnyCallbackStruct * );
00287 static void postScriptHorizSizeCB( SoWidget, SoXtPrintDialog *,
00288 XmAnyCallbackStruct * );
00289 static void postScriptVertSizeCB( SoWidget, SoXtPrintDialog *,
00290 XmAnyCallbackStruct * );
00291 static void rgbHorizSizeCB( SoWidget, SoXtPrintDialog *,
00292 XmAnyCallbackStruct * );
00293 static void rgbVertSizeCB( SoWidget, SoXtPrintDialog *,
00294 XmAnyCallbackStruct * );
00295 static void printerDPICB( SoWidget, SoXtPrintDialog *,
00296 XmAnyCallbackStruct * );
00297 static void postScriptDPICB( SoWidget, SoXtPrintDialog *,
00298 XmAnyCallbackStruct * );
00299 static void outputCB( SoWidget, SoXtPrintDialog *,
00300 XmAnyCallbackStruct * );
00301 static void printCB( SoWidget, SoXtPrintDialog *,
00302 XmAnyCallbackStruct * );
00303 static void quitCB( SoWidget, SoXtPrintDialog *,
00304 XmAnyCallbackStruct * );
00305 static void listPick( SoWidget, SoXtPrintDialog *ml,
00306 XmAnyCallbackStruct * );
00307
00308
00309 SoWidget styleButton;
00310 int currentStyle;
00311
00312 private:
00313
00314 SoWidget buildWidget(SoWidget parent);
00315
00316
00317 void constructorCommon(SbBool buildNow);
00318
00319
00320 };
00321
00322
00323 void
00324 SoXtPrintDialog::setBeforePrintCallback(
00325 SoXtPrintDialogCB *f,
00326 void *userData )
00327 {
00328 beforeList.clearCallbacks();
00329 beforeList.addCallback((SoCallbackListCB *) f, userData);
00330 }
00331
00332 void
00333 SoXtPrintDialog::setAfterPrintCallback(
00334 SoXtPrintDialogCB *f,
00335 void *userData )
00336 {
00337 afterList.clearCallbacks();
00338 afterList.addCallback((SoCallbackListCB *) f, userData);
00339 }
00340
00341
00342 #endif
00343
00344 #endif // _WIN32
00345
00346
00347