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 #ifndef SO_WIN_PRINT_DIALOG_
00027 #define SO_WIN_PRINT_DIALOG_
00028
00029 #ifndef DONT_DOC
00030
00031 #ifdef _WIN32
00032
00033 #else
00034
00035 #include <Xm/Xm.h>
00036
00037 #include <Inventor/SbBasic.h>
00038 #include <Inventor/Win/SoWinComponent.h>
00039 #include <Inventor/misc/SoCallbackList.h>
00040
00041 class SbPList;
00042 class SoNode;
00043 class SoPath;
00044 class SoGLRenderAction;
00045 class SoWinPrintDialog;
00046
00047
00048
00049 typedef void SoWinPrintDialogCB(void *userData, SoWinPrintDialog *dialog);
00050
00052
00053
00054
00056
00057 {
00058 public:
00059
00060 SoWinPrintDialog(
00061 SoWidget parent = NULL,
00062 const char *name = NULL,
00063 SbBool buildInsideParent = TRUE);
00064 SoWinPrintDialog(
00065 SoGLRenderAction *act,
00066 SoWidget parent = NULL,
00067 const char *name = NULL,
00068 SbBool buildInsideParent = TRUE);
00069 ~SoWinPrintDialog();
00070
00071
00072 void setSceneGraph( SoPath *path );
00073 void setSceneGraph( SoNode *root );
00074
00075 SoNode *getSceneGraph() { return rootNode; }
00076 SoPath *getSceneGraphPath() { return rootPath; }
00077
00078 void setGLRenderAction(const SoGLRenderAction *act);
00079 SoGLRenderAction *getGLRenderAction();
00080
00081
00082 void setPrintSize( const SbVec2f &s );
00083 void setPrintSize( const SbVec2s &s );
00084
00085
00086
00087 inline void setBeforePrintCallback(
00088 SoWinPrintDialogCB *f,
00089 void *userData = NULL);
00090 inline void setAfterPrintCallback(
00091 SoWinPrintDialogCB *f,
00092 void *userData = NULL);
00093
00094 private:
00095
00096
00097
00098
00099 SoWinPrintDialog(
00100 SoWidget parent,
00101 const char *name,
00102 SbBool buildInsideParent,
00103 SbBool buildNow);
00104
00105
00106 virtual SbString getDefaultWidgetName() const;
00107 virtual SbString getDefaultTitle() const;
00108 virtual SbString getDefaultIconTitle() const;
00109
00110 SoNode *rootNode;
00111 SoPath *rootPath;
00112 SbBool printDone;
00113 SbBool highQuality;
00114 SbBool portraitFormat;
00115 SbBool printerOutput, postScriptOutput;
00116 SbBool nodeMostRecent;
00117 SbBool WYSIWYGflag;
00118 SoWidget messageWidget, printButton, quitButton;
00119 SoWidget messageLabelWidget, fileFormatWidget;
00120 SoWidget toPrinterWidget, toPostScriptFileWidget, toRGBFileWidget;
00121 SoWidget printerHorizSize, printerVertSize;
00122 SoWidget postScriptHorizSize, postScriptVertSize;
00123 SoWidget rgbHorizSize, rgbVertSize;
00124 SoWidget printerDPIField, postScriptDPIField;
00125 SoWidget rgbFilenameWidget, postScriptFilenameWidget;
00126 SbPList *printers;
00127 char *defaultPrinter;
00128 int whichPrinter;
00129 SbVec2f printSize;
00130 SbVec2s printRes;
00131 SoCallbackList beforeList, afterList;
00132 SbBool alreadyUpdated;
00133
00134 void print();
00135 void getPrinterList();
00136 void printToPostScript( SoNode *, char *, int, int );
00137
00138
00139 void buildToPrinterWidget( SoWidget parent );
00140 void buildToPostScriptFileWidget( SoWidget parent );
00141 void buildToRGBFileWidget( SoWidget parent );
00142 void placeBottomOfDialog( SoWinPrintDialog * );
00143 void buildRadioButton( char *, char *, char *, int, int,
00144 SoWidget, XtCallbackProc );
00145 void buildSizeFields( char *, int, SoWidget, SoWidget &, SoWidget &,
00146 XtCallbackProc, XtCallbackProc );
00147 void buildDPIField( int, SoWidget, SoWidget &, XtCallbackProc );
00148 void updateTextports();
00149
00150
00151
00152
00153 static void qualityCB( SoWidget, SoWinPrintDialog *,
00154 XmAnyCallbackStruct * );
00155 static void pageFormatCB( SoWidget, SoWinPrintDialog *,
00156 XmAnyCallbackStruct * );
00157 static void fileFormatCB( SoWidget, SoWinPrintDialog *,
00158 XmAnyCallbackStruct * );
00159 static void printerHorizSizeCB( SoWidget, SoWinPrintDialog *,
00160 XmAnyCallbackStruct * );
00161 static void printerVertSizeCB( SoWidget, SoWinPrintDialog *,
00162 XmAnyCallbackStruct * );
00163 static void postScriptHorizSizeCB( SoWidget, SoWinPrintDialog *,
00164 XmAnyCallbackStruct * );
00165 static void postScriptVertSizeCB( SoWidget, SoWinPrintDialog *,
00166 XmAnyCallbackStruct * );
00167 static void rgbHorizSizeCB( SoWidget, SoWinPrintDialog *,
00168 XmAnyCallbackStruct * );
00169 static void rgbVertSizeCB( SoWidget, SoWinPrintDialog *,
00170 XmAnyCallbackStruct * );
00171 static void printerDPICB( SoWidget, SoWinPrintDialog *,
00172 XmAnyCallbackStruct * );
00173 static void postScriptDPICB( SoWidget, SoWinPrintDialog *,
00174 XmAnyCallbackStruct * );
00175 static void outputCB( SoWidget, SoWinPrintDialog *,
00176 XmAnyCallbackStruct * );
00177 static void printCB( SoWidget, SoWinPrintDialog *,
00178 XmAnyCallbackStruct * );
00179 static void quitCB( SoWidget, SoWinPrintDialog *,
00180 XmAnyCallbackStruct * );
00181 static void listPick( SoWidget, SoWinPrintDialog *ml,
00182 XmAnyCallbackStruct * );
00183
00184
00185 SoWidget styleButton;
00186 int currentStyle;
00187
00188 private:
00189
00190 SoWidget buildWidget(SoWidget parent);
00191
00192
00193 void constructorCommon(SbBool buildNow);
00194 };
00195
00196
00197 void
00198 SoWinPrintDialog::setBeforePrintCallback(
00199 SoWinPrintDialogCB *f,
00200 void *userData )
00201 {
00202 beforeList.clearCallbacks();
00203 beforeList.addCallback((SoCallbackListCB *) f, userData);
00204 }
00205
00206 void
00207 SoWinPrintDialog::setAfterPrintCallback(
00208 SoWinPrintDialogCB *f,
00209 void *userData )
00210 {
00211 afterList.clearCallbacks();
00212 afterList.addCallback((SoCallbackListCB *) f, userData);
00213 }
00214
00215 #endif //_WIN32
00216
00217 #endif
00218 #endif
00219
00220