#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"
+
class QAction;
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(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();
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
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();
+ //! display mussagl manual
+ void showManual();
+
+ void assistantError(const QString message);
+
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;
- QSpinBox zoomBox;
- ThresholdWidget threshold;
- QLabel zoomLabel;
-
+ 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;
QAction *loadSavedAnalysisAction;
+ QAction *mussaManualAssistantAction;
+ QAction *newMussaWindowAction;
QAction *saveMotifListAction;
QAction *showMussaViewToolbarAction;
QAction *toggleMotifsAction;
QAction *whatsThisAction;
QAction *viewMussaAlignmentAction;
+ //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
void NotImplementedBox();