Update mussa to build on ubuntu 10.04 with qt 4.6.2 +boost 1.40.0.1
[mussa.git] / qui / MussaWindow.hpp
index dd55d78baea369a1d81b66049d24276a02489a64..bba3106191748925ffb57bc83c77b2ee7878ff3c 100644 (file)
@@ -2,16 +2,22 @@
 #define _MUSSAWINDOW_H_
 
 #include <list>
+#include <boost/shared_ptr.hpp>
 
+#include <QCloseEvent>
+#include <QDir>
 #include <QMainWindow>
 #include <QPixmap>
+#include <QProgressDialog>
 #include <QSpinBox>
 #include <QToolBar>
+#include <QProcess>
 
 #include "qui/MussaAlignedWindow.hpp"
 #include "qui/motif_editor/MotifEditor.hpp"
 #include "qui/mussa_setup_dialog/MussaSetupDialog.hpp"
 #include "qui/seqbrowser/SequenceBrowserWidget.hpp"
+#include "qui/subanalysis/SubanalysisWindow.hpp"
 #include "qui/ThresholdWidget.hpp"
 #include "qui/ZoomWidget.hpp"
 
@@ -21,17 +27,28 @@ class QLabel;
 class QStringList;
 class Mussa;
 class QAssistantClient;
+class MussaWindow;
+
+typedef boost::shared_ptr<MussaWindow> MussaWindowRef;
 
 class MussaWindow : public QMainWindow
 {
   Q_OBJECT
 
 public: 
-  MussaWindow(Mussa* analysis=0, QWidget *parent=0);
-  ~MussaWindow();
+  MussaWindow(MussaRef analysis, QWidget *parent=0);
+
+public:
+  //! reset any attached window
+  void clear();
 
   //! switch to a new analysis
-  void setAnalysis(Mussa *new_analysis);
+  void setAnalysis(MussaRef new_analysis);
+
+  //! ask the user what to do if we're going to lose data
+  //! returns true if getting rid of this analysis is safe
+  bool isClearingAnalysisSafe();
+
 public slots:
   //! display an about box, contemplating the politics of the author list
   void about();
@@ -42,6 +59,14 @@ public slots:
   void createNewAnalysis();
   //! launch a sub analysis
   void createSubAnalysis();
+  //! save an analysis
+  void saveAnalysis();
+  //! save an analysis after prompting for new name
+  void saveAnalysisAs();
+  //! set the window modified flag
+  void updateAnalysisModified(bool);
+  //! try to conver the mussa analysis_path to a title
+  void updateTitle();
   //\@}
 
   //! \defgroup MotifHandling Handling of motif lists
@@ -59,11 +84,16 @@ public slots:
   void loadSavedAnalysis();
   //! set the soft threshold used by the Nway_Path algorithm
   void setSoftThreshold(int thres);
+  //! update progress bar
+  void updateProgress(const QString& description, int cur, int max);
 
   //! open a new mussa window so one can compare analyses
   void newMussaWindow();
 
   void showMussaToolbar();
+  //! display how many base pairs were copied on the status bar
+  void showBasePairsCopied(size_t);
+
 
   //! open new window showing our alignment
   void viewMussaAlignment();
@@ -75,23 +105,31 @@ public slots:
 
 signals:
   void changedAnnotations();
+  void changedMotifs();
 
 protected:
-  Mussa *analysis;
-  std::list<MussaAlignedWindow *> aligned_windows;
+  //! shared_ptr to our analysis
+  MussaRef analysis;
+  //! the default directory we should loand and save from
+  boost::shared_ptr<QDir> default_dir;
+  std::list<MussaAlignedWindowRef> aligned_windows;
   MotifEditor *motif_editor;
-  MussaSetupDialog setup_analysis_dialog;
+  MussaSetupDialog *setup_analysis_dialog;
+  SubanalysisWindowRef subanalysis_window;
 
   // display our wonderful mussa output
-  SequenceBrowserWidget browser;
-  QToolBar mussaViewTB;
-  ZoomWidget zoom;
-  ThresholdWidget threshold;
+  SequenceBrowserWidget *browser;
+  QToolBar *mussaViewTB;
+  ZoomWidget *zoom;
+  ThresholdWidget *threshold;
+  QProgressDialog *progress_dialog;
 
   QAction *aboutAction;
   QAction *closeAction;
   QAction *createNewAnalysisAction;
   QAction *createSubAnalysisAction;
+  QAction *saveAnalysisAction;
+  QAction *saveAnalysisAsAction;
   QAction *editMotifsAction;
   QAction *loadMotifListAction;
   QAction *loadMupaAction;
@@ -105,12 +143,17 @@ protected:
   QAction *whatsThisAction;
   QAction *viewMussaAlignmentAction;
 
-  QAssistantClient *manualAssistant;
+  //QAssistantClient *manualAssistant;
+  QProcess *assistantProcess;
 
   //! initialze the actions
   void setupActions();
+  //! handle close events (AKA prompt if we should save)
+  void closeEvent(QCloseEvent *event);
   //! initialize this windows menu object
   void setupMainMenu();
+  //! initialize all of our widgets
+  void setupWidgets();
   //! initialize assistant client
   void setupAssistant();
   //! stub function to fill in QActions