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
00140 class SoXtPrintDialog : public SoXtComponent {
00141 public:
00145 SoXtPrintDialog(
00146 SoWidget parent = NULL,
00147 const char *name = NULL,
00148 SbBool buildInsideParent = TRUE);
00152 SoXtPrintDialog(
00153 SoGLRenderAction *act,
00154 SoWidget parent = NULL,
00155 const char *name = NULL,
00156 SbBool buildInsideParent = TRUE);
00160 ~SoXtPrintDialog();
00161
00165 void setSceneGraph( SoPath *path );
00169 void setSceneGraph( SoNode *root );
00170
00174 SoNode *getSceneGraph() { return rootNode; }
00178 SoPath *getSceneGraphPath() { return rootPath; }
00179
00183 void setGLRenderAction(const SoGLRenderAction *act);
00187 SoGLRenderAction *getGLRenderAction();
00188
00193 void setPrintSize( const SbVec2f &inches );
00198 void setPrintSize( const SbVec2s &pixels );
00199
00206 inline void setBeforePrintCallback(
00207 SoXtPrintDialogCB *f,
00208 void *userData = NULL);
00215 inline void setAfterPrintCallback(
00216 SoXtPrintDialogCB *f,
00217 void *userData = NULL);
00218
00219 private:
00220
00221
00222
00223
00224 SoXtPrintDialog(
00225 SoWidget parent,
00226 const char *name,
00227 SbBool buildInsideParent,
00228 SbBool buildNow);
00229
00230
00231 virtual SbString getDefaultWidgetName() const;
00232 virtual SbString getDefaultTitle() const;
00233 virtual SbString getDefaultIconTitle() const;
00234
00235 SoNode *rootNode;
00236 SoPath *rootPath;
00237 SbBool printDone;
00238 SbBool highQuality;
00239 SbBool portraitFormat;
00240 SbBool printerOutput, postScriptOutput;
00241 SbBool nodeMostRecent;
00242 SbBool WYSIWYGflag;
00243 SoWidget messageWidget, printButton, quitButton;
00244 SoWidget messageLabelWidget, fileFormatWidget;
00245 SoWidget toPrinterWidget, toPostScriptFileWidget, toRGBFileWidget;
00246 SoWidget printerHorizSize, printerVertSize;
00247 SoWidget postScriptHorizSize, postScriptVertSize;
00248 SoWidget rgbHorizSize, rgbVertSize;
00249 SoWidget printerDPIField, postScriptDPIField;
00250 SoWidget rgbFilenameWidget, postScriptFilenameWidget;
00251 SbPList *printers;
00252 char *defaultPrinter;
00253 int whichPrinter;
00254 SbVec2f printSize;
00255 SbVec2s printRes;
00256 SoCallbackList beforeList, afterList;
00257 SbBool alreadyUpdated;
00258
00259 void print();
00260 void getPrinterList();
00261 void printToPostScript( SoNode *, char *, int, int );
00262
00263
00264 void buildToPrinterWidget( SoWidget parent );
00265 void buildToPostScriptFileWidget( SoWidget parent );
00266 void buildToRGBFileWidget( SoWidget parent );
00267 void placeBottomOfDialog( SoXtPrintDialog * );
00268 void buildRadioButton( char *, char *, char *, int, int,
00269 SoWidget, XtCallbackProc );
00270 void buildSizeFields( char *, int, SoWidget, SoWidget &, SoWidget &,
00271 XtCallbackProc, XtCallbackProc );
00272 void buildDPIField( int, SoWidget, SoWidget &, XtCallbackProc );
00273 void updateTextports();
00274
00275
00276
00277
00278 static void qualityCB( SoWidget, SoXtPrintDialog *,
00279 XmAnyCallbackStruct * );
00280 static void pageFormatCB( SoWidget, SoXtPrintDialog *,
00281 XmAnyCallbackStruct * );
00282 static void fileFormatCB( SoWidget, SoXtPrintDialog *,
00283 XmAnyCallbackStruct * );
00284 static void printerHorizSizeCB( SoWidget, SoXtPrintDialog *,
00285 XmAnyCallbackStruct * );
00286 static void printerVertSizeCB( SoWidget, SoXtPrintDialog *,
00287 XmAnyCallbackStruct * );
00288 static void postScriptHorizSizeCB( SoWidget, SoXtPrintDialog *,
00289 XmAnyCallbackStruct * );
00290 static void postScriptVertSizeCB( SoWidget, SoXtPrintDialog *,
00291 XmAnyCallbackStruct * );
00292 static void rgbHorizSizeCB( SoWidget, SoXtPrintDialog *,
00293 XmAnyCallbackStruct * );
00294 static void rgbVertSizeCB( SoWidget, SoXtPrintDialog *,
00295 XmAnyCallbackStruct * );
00296 static void printerDPICB( SoWidget, SoXtPrintDialog *,
00297 XmAnyCallbackStruct * );
00298 static void postScriptDPICB( SoWidget, SoXtPrintDialog *,
00299 XmAnyCallbackStruct * );
00300 static void outputCB( SoWidget, SoXtPrintDialog *,
00301 XmAnyCallbackStruct * );
00302 static void printCB( SoWidget, SoXtPrintDialog *,
00303 XmAnyCallbackStruct * );
00304 static void quitCB( SoWidget, SoXtPrintDialog *,
00305 XmAnyCallbackStruct * );
00306 static void listPick( SoWidget, SoXtPrintDialog *ml,
00307 XmAnyCallbackStruct * );
00308
00309
00310 SoWidget styleButton;
00311 int currentStyle;
00312
00313 private:
00314
00315 SoWidget buildWidget(SoWidget parent);
00316
00317
00318 void constructorCommon(SbBool buildNow);
00319
00320
00321 };
00322
00323
00324 void
00325 SoXtPrintDialog::setBeforePrintCallback(
00326 SoXtPrintDialogCB *f,
00327 void *userData )
00328 {
00329 beforeList.clearCallbacks();
00330 beforeList.addCallback((SoCallbackListCB *) f, userData);
00331 }
00332
00333 void
00334 SoXtPrintDialog::setAfterPrintCallback(
00335 SoXtPrintDialogCB *f,
00336 void *userData )
00337 {
00338 afterList.clearCallbacks();
00339 afterList.addCallback((SoCallbackListCB *) f, userData);
00340 }
00341
00342
00343 #endif
00344
00345 #endif // _WIN32
00346
00347
00348