Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Class Members | File Members

MainWin.h

Go to the documentation of this file.
00001 //LabPlot : MainWin.h
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 // legacy
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;                        // signal mapper for sheets and graphs
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;       // needed for print preview
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(); // called when active window changes
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                 // don't use example filename, when saving this or later projects
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();                                             // TODO : project info dialog
00161         void projectExplorer();                                         // TODO : project explorer
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();                                                                   // TODO : print dialog
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();                                                  // TODO 
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();                                                   // TODO
00266         void overlayDialog();
00267         void worksheetDialog();
00268         void plotSettingsDialog();
00269         void axesDialog();
00270         void titleDialog();                                                     // TODO
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 // no script functions
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);             // called from signal mapper (sheet list)
00308         void changeGraph(int i);                // called from signal mapper (graph list)
00309         void cloneActiveSheet();                // clone active sheet
00310         void cloneWorksheet(Worksheet *w);      // clone worksheet w
00311         void cloneSpreadsheet(Spreadsheet *s);  // clone 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         // dialog update wrapper
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;    // value = 0-not,1-left,2-right line
00355         int defining_maglens,defining_panzoom, defining_mask;                   // dto.
00356         bool defining_baseline,defining_label,defining_image;
00357         // dialogs to update
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);                 // add a new worksheet if needed (function/data dialog)
00381         int addGraph2D(Graph2D *g, int item, PType type=P2D);           // add Graph2D to widget item in workspace
00382         int addGraph3D(Graph3D *g, int item, PType type=P3D);           // add Graph3D to widget item in workspace
00383         int addGraph4D(Graph4D *g, int item);                                           // add Graph4D to widget item in workspace
00384         int addGraphM(GraphM *g, int item, PType type=PSURFACE);        // add GraphM to widget item in workspace
00385         int addGraphIMAGE(GraphIMAGE *g, int item);                             // add GraphIMAGE to widget item in workspace
00386         int addGraphL(GraphL *g, int item, PType type=PPIE);            // add GraphL to widget item in workspace
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

Generated on Sat Oct 13 21:55:01 2007 for LabPlot by  doxygen 1.4.4