00001
00002
00003 #ifndef MAINWIN_H
00004 #define MAINWIN_H
00005
00006 #include <qstring.h>
00007 #include <qfont.h>
00008 #include <qlistbox.h>
00009 #include <qworkspace.h>
00010 #include <qtoolbutton.h>
00011 #include <qsignalmapper.h>
00012 #include <qdragobject.h>
00013 #include <qtimer.h>
00014 #include <kapp.h>
00015 #include <kmainwindow.h>
00016 #include <kparts/mainwindow.h>
00017 #include <kaction.h>
00018 #include <kkeydialog.h>
00019 #include <kstatusbar.h>
00020 #include <kstandarddirs.h>
00021 #include <kmenubar.h>
00022 #include "GraphList.h"
00023 #include "Spreadsheet.h"
00024 #include "Worksheet.h"
00025 #include "Project.h"
00026 #include "History.h"
00027 #include "RInterface.h"
00028
00029 #ifdef HAVE_QSA
00030 #include <qsproject.h>
00031 #include <qsinterpreter.h>
00032 #ifdef HAVE_QSA_IDE
00033 #include <qsworkbench.h>
00034 #endif
00035 #endif
00036
00037
00038 #define PROJECT_VERSION 25
00039
00040 class Worksheet;
00041 class Spreadsheet;
00042 class Plot;
00043 class Plot2DSimple;
00044 class ExplorerDialog;
00045 class LegendDialog;
00046 class TitleDialog;
00047 class AxesDialog;
00048 class PlotSettingsDialog;
00049 class WorksheetDialog;
00050 class ObjectDialog;
00051 class TestsRListDialog;
00052
00053 class MainWin
00054 : public KParts::MainWindow
00055 {
00056 Q_OBJECT
00057 private:
00058 void setupActions();
00059 void readConfig();
00060 void enableAutosave(bool as);
00061 void newDialog(bool d, PType type);
00062 Plot *newPlot(PType type=P2D);
00063 bool warnModified();
00064 KParts::ReadOnlyPart* gvpart;
00065 QPopupMenu *spreadsheetpopup;
00066 QSignalMapper *sm, *smg;
00067 QWorkspace* ws;
00068 KConfig *config;
00069 Project *project;
00070 History *history;
00071 RInterface *rif;
00072 #ifdef HAVE_QSA
00073 QSProject *qsproject;
00074 #ifdef HAVE_QSA_IDE
00075 QSWorkbench *ide;
00076 #endif
00077 #endif
00078 KRecentFilesAction* recent;
00079 KAction *configureAction, *project_action, *explorer_action;
00080 KAction *import_action, *importopj_action, *export_image, *export_svg, *export_pic, *export_ps, *export_eps, *export_pdf;
00081 KAction *export_pstoedit, *export_ImageMagick, *print_action, *save_action, *save_as, *saveLPL_action, *openLPL_action;
00082 KAction *graph_list, *plot_list, *clear_action, *close_action, *worksheet_action, *plot_action, *arrange, *overlay;
00083 KAction *tilesheets, *cascadesheets, *tileworksheets, *cascadeworksheets;
00084 KAction *deleteplot, *qwt3d_plot, *qwt3d_func, *qwt3d_data;
00085 KAction *evaluate, *operations, *imagepro;
00086 KAction *smooth, *prune, *average, *compress, *periodic, *seasonal, *hist, *peak;
00087 KAction *interpolation, *differences, *integration, *capability, *summary, *tests, *regression, *fft, *laplace, *convolution, *wavelet;
00088 KAction *hankel, *fit, *filter, *noise, *correl;
00089 KAction *axes, *title_action, *legend, *objects;
00090 KAction *asx, *asy, *asz, *asall, *maglens, *panzoom, *sl, *sr, *su, *sd, *sxu, *sxd, *syu, *syd, *szu, *szd;
00091 KAction *zoomin, *zoomout, *maskplot;
00092 KAction *baseline, *region, *label, *line, *rect, *ellipse, *image;
00093 KAction *ideAction, *scriptAction, *nextwindow_action, *prevwindow_action, *undo_action, *redo_action;
00094 KToggleAction *menubar, *toolbar, *sidetoolbar, *analysistoolbar, *drawingtoolbar, *statusbar;
00095 KToggleAction *printpreview, *togglespeedmode, *toggledatamode;
00096 bool printpreviewchecked;
00097 QTimer *autosaveTimer;
00098 bool autosave;
00099 long autosaveinterval;
00100 bool modified, is_fullscreen;
00101 bool speedmode, datamode;
00102 int speedmodevalue;
00103 QFont defaultfont;
00104 int nr_w, nr_s;
00105 QColor datamodecolor;
00106 private slots:
00107 void closeWin();
00108 void setWinFocus(int i) { (ws->windowList()).at(i)->setFocus(); }
00109 void SpreadsheetMenu();
00110 void windowActivated();
00111
00112 void configure();
00113 void configureKeys() { KKeyDialog::configure(actionCollection(), this, true); }
00114 void configureToolbars();
00115 void saveSettings();
00116 void autoSave();
00117 void setAutosaveInterval(long interval) { autosaveinterval=interval;}
00118
00119 void openIDE();
00120 void reportBug();
00121 void exampleAxesLabel() { openExample(QString("LabPlot/axeslabel.lml.gz")); }
00122 void exampleAnalysis() { openExample(QString("LabPlot/analysis.lml.gz")); }
00123 void exampleSurface() { openExample(QString("LabPlot/surface.lml.gz")); }
00124 void example3d() { openExample(QString("LabPlot/3d.lml.gz")); }
00125 void exampleRydberg() { openExample(QString("LabPlot/rydberg.lml.gz")); }
00126 void exampleLog() { openExample(QString("LabPlot/log.lml.gz")); }
00127 void exampleFFT() { openExample(QString("LabPlot/fft.lml.gz")); }
00128 void exampleObjects() { openExample(QString("LabPlot/objects.lml.gz")); }
00129 void exampleHist() { openExample(QString("LabPlot/hist.lml.gz")); }
00130 void exampleFit() { openExample(QString("LabPlot/fit.lml.gz")); }
00131 void exampleImage() { openExample(QString("LabPlot/image.lml.gz")); }
00132 void examplePie() { openExample(QString("LabPlot/pie.lml.gz")); }
00133 void exampleExponentialFit() { openExample(QString("LabPlot/exponential_fit.lml.gz")); }
00134 void exampleMultiplot() { openExample(QString("LabPlot/multiplot.lml.gz")); }
00135 void exampleSurface2() { openExample(QString("LabPlot/surface2.lml.gz")); }
00136 void examplePolar() { openExample(QString("LabPlot/polar.lml.gz")); }
00137 void exampleTernary() { openExample(QString("LabPlot/ternary.lml.gz")); }
00138 void exampleAudio() { openExample(QString("LabPlot/audio.lml.gz")); }
00139 void exampleQWT() { openExample(QString("LabPlot/qwt.lml.gz")); }
00140 void exampleBar() { openExample(QString("LabPlot/bar.lml.gz")); }
00141 void exampleLogfit() { openExample(QString("LabPlot/logfit.lml.gz")); }
00142 void exampleMarker() { openExample(QString("LabPlot/marker.lml.gz")); }
00143 void exampleSurfaceStyle() { openExample(QString("LabPlot/surfacestyle.lml.gz")); }
00144 void exampleTeXLabel() { openExample(QString("LabPlot/texlabel.lml.gz")); }
00145 void openExample(QString filename) {
00146 if(warnModified()) return;
00147 openXML(locate("data", filename));
00148 modified=false;
00149
00150 project->setFilename("");
00151 }
00152 public slots:
00153 void New();
00154 void open(QString fn=0);
00155 void saveLPL(QString fn=0);
00156 void openLPL(QString fn=0);
00157 void openXML(QString fn=0);
00158 void saveXML(QString fn=0);
00159 void saveAs(QString fn=0);
00160 void projectInfo();
00161 void projectExplorer();
00162 void importData(QString fn,int filter=0);
00163 void importDialog();
00164 void importOPJ(QString fn=0);
00165 void exportPlot(QString fn=0, QString f=0,int quality=-1);
00166 void exportPS(QString fn=0);
00167 void exportEPS(QString fn=0);
00168 void exportPDF(QString fn=0);
00169 void exportSVG(QString fn=0);
00170 void exportPIC(QString fn=0);
00171 void exportPstoEdit(QString fn=i18n("out.pdf"),int f=4, int s=5, double sc=1.0, double r=0.0);
00174 void exportPstoEditDialog();
00175 void exportImageMagick(QString fn=i18n("out.8bim"), int f=0, int sx=800, int sy=600, double r=0.0);
00178 void exportImageMagickDialog();
00179 void print();
00180 void printPreview();
00181 void graphDialog();
00182 void plotDialog();
00183
00184 void clear();
00185 void deletePlot();
00186 void loadScript(QString fn=0);
00187 void Environment();
00188 void aboutKDE();
00189 void exit() {modified=false; close(); }
00190 void toggleFullScreen();
00191 void toggleMenuBar();
00192 void toggleToolBar();
00193 void toggleSideToolBar();
00194 void toggleAnalysisToolBar();
00195 void toggleDrawingToolBar();
00196 void toggleStatusBar();
00197 bool speedMode() { return speedmode; }
00198 void setSpeedMode(bool s) { speedmode = s; }
00199 void toggleSpeedMode();
00200 int speedModeValue() { return speedmodevalue; }
00201 void setSpeedModeValue(int s) { speedmodevalue=s; }
00202 bool dataMode() { return datamode; }
00203 void setDataMode(bool v) { datamode = v; }
00204 QFont defaultFont() { return defaultfont; }
00205 void setDefaultFont(QFont f) { defaultfont=f; }
00206 void setDataModeColor(QColor c) {datamodecolor=c; }
00207 QColor DataModeColor() { return datamodecolor; }
00208
00209 void newPlot(int type) { newPlot((PType) type); }
00210 Plot2DSimple* new2DPlot() { return (Plot2DSimple *) newPlot(P2D); }
00211 void newSurfacePlot() { newPlot(PSURFACE); }
00212 void new3DPlot() { newPlot(P3D); }
00213 void newPiePlot() { newPlot(PPIE); }
00214 void newPolarPlot() { newPlot(PPOLAR); }
00215 void newTernaryPlot() { newPlot(PTERNARY); }
00216 void newQWT3DPlot() { newPlot(PQWT3D); }
00217
00218 void new2DData() { newDialog(0,P2D); }
00219 void newSData() { newDialog(0,PSURFACE); }
00220 void new3DData() { newDialog(0,P3D); }
00221 void newPieData() { newDialog(0,PPIE); }
00222 void newPolarData() { newDialog(0,PPOLAR); }
00223 void newTernaryData() { newDialog(0,PTERNARY); }
00224 void newQWT3DData() { newDialog(0,PQWT3D); }
00225 void new2DFunction() { newDialog(1,P2D); }
00226 void new3DFunction() {newDialog(1,P3D); }
00227 void newQWT3DFunction() {newDialog(1,PQWT3D); }
00228 void newSFunction() { newDialog(1,PSURFACE); }
00229 void newPolarFunction() {newDialog(1,PPOLAR); }
00230
00231 Style* newStyle() { return new Style(); }
00232 Symbol* newSymbol() { return new Symbol(); }
00233 Style *defaultStyle();
00234 Symbol *defaultSymbol();
00235 void lDebug(QString s) { kdDebug()<<s<<endl; }
00236
00237 void evaluateDialog();
00238 void operationsDialog();
00239 void smoothDialog();
00240 void averageDialog();
00241 void compressDialog();
00242 void pruneDialog();
00243 void periodicDialog();
00244 void seasonalDialog();
00245 void histDialog();
00246 void peakDialog();
00247 void interpolationDialog();
00248 void differencesDialog();
00249 void integrationDialog();
00250 void capabilityDialog();
00251 void summaryDialog();
00252 void testsDialog();
00253 void regressionDialog();
00254 void fftDialog();
00255 void laplaceDialog();
00256 void convolutionDialog();
00257 void waveletDialog();
00258 void hankelDialog();
00259 void fitDialog();
00260 void filterDialog();
00261 void noiseDialog();
00262 void correlDialog();
00263 void imageDialog();
00264
00265 void arrangeDialog();
00266 void overlayDialog();
00267 void worksheetDialog();
00268 void plotSettingsDialog();
00269 void axesDialog();
00270 void titleDialog();
00271 void legendDialog();
00272 void objectDialog();
00273
00274 void autoScaleX();
00275 void autoScaleY();
00276 void autoScaleZ();
00277 void autoScaleAll();
00278 void shiftLeft();
00279 void shiftRight();
00280 void shiftUp();
00281 void shiftDown();
00282 void scaleXUp();
00283 void scaleXDown();
00284 void scaleYUp();
00285 void scaleYDown();
00286 void scaleZUp();
00287 void scaleZDown();
00288 void zoomIn();
00289 void zoomOut();
00290 void toggleDataMode();
00291
00292
00293 void open(const KURL& url);
00294
00295 void magLens();
00296 void panZoom();
00297 void maskPlot();
00298
00299 void defineRegion();
00300 void defineBaseline();
00301 void defineLine();
00302 void defineLabel();
00303 void defineRect();
00304 void defineEllipse();
00305 void defineImage();
00306
00307 void setActiveSheet(int i);
00308 void changeGraph(int i);
00309 void cloneActiveSheet();
00310 void cloneWorksheet(Worksheet *w);
00311 void cloneSpreadsheet(Spreadsheet *s);
00312 Spreadsheet* newSpreadsheet();
00313 Worksheet* newWorksheet();
00314 Worksheet* activeWorksheet();
00315 Spreadsheet* activeSpreadsheet();
00316 Spreadsheet* getSpreadsheet(QString title);
00317 void tileSheets() { if(ws) ws->tile(); }
00318 void cascadeSheets() { if(ws) ws->cascade(); }
00319 void tileWorksheets();
00320 void cascadeWorksheets();
00321 int activeSheetIndex();
00322 void updateGraphList();
00323 void updateSheetList();
00324
00325
00326 void updateExplorerDialog();
00327 void updateLegendDialog();
00328 void updateTitleDialog();
00329 void updateAxesDialog(int i=-1);
00330 void updatePlotSettingsDialog();
00331 void updateWorksheetDialog();
00332 void updateObjectDialog();
00333 void updateTestDialog();
00334
00335 void activateNextWindow() {
00336 #if QT_VERSION > 0x030102
00337 ws->activateNextWindow();
00338 #endif
00339 }
00340 void activatePrevWindow() {
00341 #if QT_VERSION > 0x030102
00342 ws->activatePrevWindow();
00343 #endif
00344 }
00345 void undoAction();
00346 void redoAction();
00347 public:
00348 MainWin(const char *name,const char *filen,bool is_part=false);
00349 ~MainWin();
00350 void replot();
00351 void message(QString msg) {statusBar()->message(msg); }
00352 KConfig* Config() { return config; }
00353 History* getHistory() { return history; }
00354 int defining_region, defining_line, defining_rect, defining_ellipse;
00355 int defining_maglens,defining_panzoom, defining_mask;
00356 bool defining_baseline,defining_label,defining_image;
00357
00358 ExplorerDialog *explorer_dialog;
00359 LegendDialog *legend_dialog;
00360 TitleDialog *title_dialog;
00361 AxesDialog *axes_dialog;
00362 PlotSettingsDialog *plotsettings_dialog;
00363 WorksheetDialog *worksheet_dialog;
00364 ObjectDialog *object_dialog;
00365 TestsRListDialog *test_dialog;
00366
00367 Project *getProject() { return project; }
00368 RInterface *getRInterface() { return rif; }
00369 void setProject(Project *p) { project=p; }
00370 #ifdef HAVE_QSA
00371 QSProject *getQSProject() { return qsproject; }
00372 #endif
00373 void readScript(QString name);
00374 QWorkspace *getWorkspace() { return ws; }
00375 void deleteActiveSheet();
00376 void setModified() {modified = true;}
00377 int NrSpreadsheets() { return nr_s; }
00378 int NrWorksheets() { return nr_w; }
00379 QString Filename() { return project->Filename(); }
00380 Worksheet *addWorksheet(PType type, int sheet);
00381 int addGraph2D(Graph2D *g, int item, PType type=P2D);
00382 int addGraph3D(Graph3D *g, int item, PType type=P3D);
00383 int addGraph4D(Graph4D *g, int item);
00384 int addGraphM(GraphM *g, int item, PType type=PSURFACE);
00385 int addGraphIMAGE(GraphIMAGE *g, int item);
00386 int addGraphL(GraphL *g, int item, PType type=PPIE);
00387 void calculateRanges2D(Point *a, int n, double *xmin, double *xmax,
00388 double *ymin, double *ymax);
00389 void calculateRanges3D(Point3D *a, int n, double *xmin, double *xmax,
00390 double *ymin, double *ymax, double *zmin, double *zmax);
00391 void calculateRanges4D(Point4D *a, int n, double *xmin, double *xmax,
00392 double *ymin, double *ymax, double *zmin, double *zmax, double *tmin, double *tmax);
00393 double formatLabel(QString value,int item);
00394 protected:
00395 void resizeEvent(QResizeEvent *e) { this->resize(e->size()); }
00396 void dragEnterEvent(QDragEnterEvent *e) { e->accept(QTextDrag::canDecode(e)); }
00397 void dropEvent(QDropEvent *e);
00398 void closeEvent(QCloseEvent *e);
00399 void mouseDoubleClickEvent(QMouseEvent *e);
00400
00401 };
00402
00403 #endif // MAINWIN_H