00001 #ifndef MAINWINDOW_H
00002 #define MAINWINDOW_H
00003
00004 #include <QComboBox>
00005 #include <QMainWindow>
00006 #include <QProgressBar>
00007 #include <QSignalMapper>
00008 #include <QPushButton>
00009 #include <QtHelp>
00010 #include <QDomDocument>
00011 #include "ui_MainWindow.h"
00012 #include "../Calculations/costunitproduct.h"
00013 #include "../Dialogs/helpbrowserdialog.h"
00014 #include "../Data/settings.h"
00015 #include "../Data/datadefinitions.h"
00016 #include "../Models/documentchoosermodel.h"
00017 #include "../Mail/mailerthread.h"
00018 #include "../Updater/updaterthread.h"
00019 #include "../Updater/updatermanifestthread.h"
00020
00021 class AboutData;
00022 class ChildWindow;
00023 class CostTypeChild;
00024 class CostCentreChild;
00025 class CostUnitChild;
00026 class PriceComparisonChild;
00027 class AbstractModel;
00028 class CostTypeModel;
00029 class CostCentreModel;
00030 class CostUnitModel;
00031 class DirectCostModel;
00032 class DirectCostUnitModel;
00033 class DocumentChooserModel;
00034 class ActionsTab;
00035 class CostTypeTab;
00036 class CostCentreTab;
00037 class CostUnitTab;
00038 class PriceComparisonTab;
00039
00040 class MainWindow : public QMainWindow, private Ui::MainWindow
00041 {
00042 Q_OBJECT
00043
00044 public:
00045 MainWindow(QMainWindow *parent = 0);
00046
00047 protected:
00048 void closeEvent(QCloseEvent *event);
00049
00050 public slots:
00051 void openProject(QString path);
00052
00053 void showSettingsDialog();
00054 void showSettingsDialog(int page);
00055
00056 void setWindowTitle();
00057
00058 void restoreLastGemoetry(QByteArray);
00059
00060 private slots:
00061 void newDocumentDialog();
00062 void createNewDocument(WindowType::Type, QString);
00063
00064 void newCostTypeFile(int id, QString name, QDomElement file = QDomElement());
00065 void openCostTypeFile(CostTypeModel *model, QDomElement file = QDomElement());
00066
00067 void newCostCentreFile(int id, QString name, QDomElement file = QDomElement());
00068 void openCostCentreModel(DocumentItem callByValueItem, int id, QString name, QDomElement file);
00069 void openCostCentreFile(CostCentreModel *model, CostTypeModel *costtype = NULL, int id = -1, QString name = "", QDomElement file = QDomElement());
00070 void openCostCentreFromProjectFile(int id, QString name, QDomElement file);
00071
00072 void newCostUnitFile(int id, QString name, QDomElement file = QDomElement());
00073 void openCostUnitFile(CostUnitModel *model, QDomElement file = QDomElement());
00074
00075 void newPriceComparisonFile(int id, QString name, QDomElement file = QDomElement());
00076 void openPriceComparisonFile(AbstractModel *model, QDomElement file = QDomElement());
00077
00078 void openDocument(const QModelIndex &index);
00079 void closeDocumentWindow(const QString name);
00080
00081 DocumentItem* referenceFromItem(DocumentItem item);
00082
00083 void createNewProject();
00084 void openProject();
00085 void openProject(QAction*);
00086 void openNewProject();
00087 void saveProject();
00088 void closeProject();
00089 void importFile();
00090 void manageProject();
00091 void showProjectInformation();
00092
00093 void reportBugs();
00094 void bugReportSent();
00095 void bugReportSendError(QString message);
00096
00097 void about();
00098
00099 void updateMenus();
00100 void updateWindowMenu();
00101
00102 void openHelpBrowser();
00103 void print();
00104 void printPreview();
00105 void checkForUpdates();
00106
00107 CostTypeChild* createCostTypeChild();
00108 CostCentreChild* createCostCentreChild();
00109 CostUnitChild* createCostUnitChild();
00110 PriceComparisonChild* createPriceComparisonChild();
00111
00112 void setActiveSubWindow(QWidget *window);
00113 void changeCurrentDocumentSidebarTab(ChildWindow *child, int type);
00114 void cleanUpSidebar();
00115
00116 void openWorkspaceSettings();
00117
00118 void initUpdateControls();
00119 void manifestParsed();
00120 void mainfestErrorOccured();
00121
00122 private:
00123 QMdiSubWindow* childWindowByName(const QString &name);
00124 QMdiSubWindow* childWindowByModel(AbstractModel *model);
00125 bool modelIsAlreadyOpened(AbstractModel *model);
00126 void switchChildWindowByModel(AbstractModel *model);
00127 void applyApplicationName();
00128
00129 DocumentChooserModel *modelListModel;
00130
00131 void init();
00132 void applyQtHacks();
00133 void createControls();
00134 void createActions();
00135 void createSideBar();
00136 void changeEntryStates(bool);
00137 void setCurrentSidebarTab(int index);
00138 void setEncoding();
00139 void initializePrinter();
00140
00141 void createMdiArea();
00142 ChildWindow *currentWindow();
00143 void windowChanged();
00144 QMdiSubWindow *findChild(const QString &fileName);
00145
00146 QList<QDomElement> documentNodes();
00147 QDomElement categoryNodes();
00148
00149 QProgressBar *updateProgress;
00150 QSignalMapper *windowMapper;
00151 QActionGroup *recentActionGroup;
00152
00153 AboutData *aboutData;
00154
00155 Settings settings;
00156
00157
00158 ActionsTab *actionstab;
00159 CostTypeTab *costtypetab;
00160 CostCentreTab *costcentretab;
00161 CostUnitTab *costunittab;
00162 PriceComparisonTab *pricecomparisontab;
00163
00164
00165
00166
00167
00168
00169
00170 QPrinter *printer;
00171
00172
00173 MailerThread mailerThread;
00174
00175 UpdaterManifestThread updaterManifestThread;
00176 QLabel *updateInfo;
00177 };
00178
00179 #endif