#include #include "vmainwindow.h" #include "vdirectorytree.h" #include "vnote.h" #include "vfilelist.h" #include "vtabwidget.h" VMainWindow::VMainWindow(QWidget *parent) : QMainWindow(parent) { setupUI(); initActions(); initToolBar(); vnote = new VNote(); vnote->readGlobalConfig(); updateNotebookComboBox(); } VMainWindow::~VMainWindow() { delete vnote; } void VMainWindow::setupUI() { // Notebook directory browser tree notebookLabel = new QLabel(tr("Notebook")); notebookComboBox = new QComboBox(); directoryTree = new VDirectoryTree(); QHBoxLayout *nbTopLayout = new QHBoxLayout; notebookComboBox->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); notebookComboBox->setSizeAdjustPolicy(QComboBox::AdjustToContents); nbTopLayout->setAlignment(Qt::AlignLeft); nbTopLayout->addWidget(notebookLabel); nbTopLayout->addWidget(notebookComboBox); QVBoxLayout *nbLayout = new QVBoxLayout; nbLayout->addLayout(nbTopLayout); nbLayout->addWidget(directoryTree); QWidget *nbContainer = new QWidget(); nbContainer->setLayout(nbLayout); nbContainer->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Expanding); // File list widget fileList = new VFileList(); fileList->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Expanding); // Editor tab widget tabs = new VTabWidget(VNote::welcomePageUrl); tabs->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); tabs->setTabBarAutoHide(true); // Main Splitter mainSplitter = new QSplitter(); mainSplitter->addWidget(nbContainer); mainSplitter->addWidget(fileList); mainSplitter->addWidget(tabs); mainSplitter->setStretchFactor(0, 1); mainSplitter->setStretchFactor(1, 1); mainSplitter->setStretchFactor(2, 10); // Signals connect(notebookComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(setCurNotebookIndex(int))); connect(this, SIGNAL(curNotebookIndexChanged(const QString&)), directoryTree, SLOT(setTreePath(const QString&))); connect(directoryTree, &VDirectoryTree::currentDirectoryChanged, fileList, &VFileList::setDirectory); connect(fileList, &VFileList::currentFileChanged, tabs, &VTabWidget::openFile); setCentralWidget(mainSplitter); // Create and show the status bar statusBar(); } void VMainWindow::initActions() { editNoteAct = new QAction(tr("&Edit"), this); editNoteAct->setStatusTip(tr("Edit current note")); connect(editNoteAct, &QAction::triggered, tabs, &VTabWidget::editFile); readNoteAct = new QAction(tr("&Read"), this); readNoteAct->setStatusTip(tr("Open current note in read mode")); connect(readNoteAct, &QAction::triggered, tabs, &VTabWidget::readFile); saveNoteAct = new QAction(tr("&Save"), this); saveNoteAct->setStatusTip(tr("Save current note")); connect(saveNoteAct, &QAction::triggered, tabs, &VTabWidget::saveFile); } void VMainWindow::initToolBar() { fileToolBar = addToolBar(tr("Note")); fileToolBar->setMovable(false); fileToolBar->addAction(editNoteAct); fileToolBar->addAction(readNoteAct); fileToolBar->addAction(saveNoteAct); } void VMainWindow::updateNotebookComboBox() { const QVector ¬ebooks = vnote->getNotebooks(); notebookComboBox->clear(); for (int i = 0; i addItem(notebooks[i].getName()); } qDebug() << "update notebook combobox with" << notebookComboBox->count() << "items"; notebookComboBox->setCurrentIndex(vnote->getCurNotebookIndex()); } void VMainWindow::setCurNotebookIndex(int index) { Q_ASSERT(index < vnote->getNotebooks().size()); qDebug() << "set current notebook index:" << index; vnote->setCurNotebookIndex(index); notebookComboBox->setCurrentIndex(index); // Update directoryTree emit curNotebookIndexChanged(vnote->getNotebooks()[index].getPath()); }