void MainWindow::newListTriggerred() { if (this->modified.isModified() && promptForSaving() && promptForFilename() && !save()) { return; } clearList(); }
void MainWindow::closeEvent(QCloseEvent* event) { if (this->modified.isModified() && promptForSaving() && promptForFilename() && !save()) { event->ignore(); return; } event->accept(); }
void WebView::unsupportedContent(QNetworkReply* pReply) { bool closeAfterDownload = false; if (this->page()->history()->count() == 0) { /* This is for the case where a new browser window was launched just to show a PDF or save a file. Otherwise we would have an empty browser window with no history hanging around. */ window()->hide(); closeAfterDownload = true; } DownloadHelper* pDownloadHelper = NULL; QString contentType = pReply->header(QNetworkRequest::ContentTypeHeader).toString(); if (contentType.contains(QRegExp(QString::fromAscii("^\\s*application/pdf($|;)"), Qt::CaseInsensitive))) { core::FilePath dir(options().scratchTempDir()); QTemporaryFile pdfFile(QString::fromUtf8( dir.childPath("rstudio-XXXXXX.pdf").absolutePath().c_str())); pdfFile.open(); pdfFile.close(); // DownloadHelper frees itself when downloading is done pDownloadHelper = new DownloadHelper(pReply, pdfFile.fileName()); connect(pDownloadHelper, SIGNAL(downloadFinished(QString)), this, SLOT(openFile(QString))); } else { QString fileName = promptForFilename(pReply->request(), pReply); if (fileName.isEmpty()) { pReply->abort(); if (closeAfterDownload) window()->close(); } else { // DownloadHelper frees itself when downloading is done pDownloadHelper = new DownloadHelper(pReply, fileName); } } if (closeAfterDownload && pDownloadHelper) { connect(pDownloadHelper, SIGNAL(downloadFinished(QString)), window(), SLOT(close())); } }
void WebView::downloadRequested(const QNetworkRequest& request) { QString fileName = promptForFilename(request); if (fileName.isEmpty()) return; // Ask the network manager to download // the file and connect to the progress // and finished signals. QNetworkRequest newRequest = request; QNetworkAccessManager* pNetworkManager = page()->networkAccessManager(); QNetworkReply* pReply = pNetworkManager->get(newRequest); // DownloadHelper frees itself when downloading is done new DownloadHelper(pReply, fileName); }
void MainWindow::openListTriggerred() { if (this->modified.isModified() && promptForSaving() && promptForFilename() && !save()) { return; } // Get a filename QString filename = QFileDialog::getOpenFileName(this, tr("Open a " SHORT_NAME " file"), this->previousPath, tr(SHORT_NAME " (" LIST_FILTER ")")); if (filename.isEmpty()) { return; } this->previousPath = QFileInfo(filename).absolutePath(); clearList(); openFile(filename); }
MainWindow::MainWindow() : hotkeyID(1) , previousPath(QDir::homePath()) { // Install a native event filter to handle the hotkeys this->nativeEventFilter = new NativeEventFilter; // Create the actions. they will be available in the main toolbar this->actionNewList = new QAction(QIcon(":/icon64/NewList.png"), "", this); this->actionNewList->setToolTip(tr("Create a new empty list")); this->actionOpenList = new QAction(QIcon(":/icon64/OpenList.png"), "", this); this->actionOpenList->setToolTip(tr("Open an existing list")); this->actionSaveList = new QAction(QIcon(":/icon64/SaveList.png"), "", this); this->actionSaveList->setToolTip(tr("Save the current list")); this->actionNewTimer = new QAction(QIcon(":/icon64/NewTimer.png"), "", this); this->actionNewTimer->setToolTip(tr("Create a new Timer for the current list")); this->actionEditTimer = new QAction(QIcon(":/icon64/EditTimer.png"), "", this); this->actionEditTimer->setToolTip(tr("Modify the currently selected Timer")); this->actionRemoveTimer = new QAction(QIcon(":/icon64/RemoveTimer.png"), "", this); this->actionRemoveTimer->setToolTip(tr("Remove the currently selected timer")); this->actionMisc = new QAction(QIcon(":/icon64/Misc.png"), "", this); this->actionMisc->setToolTip(tr("About, Help and Licenses")); QAction* actionSeparator1 = new QAction(this); QAction* actionSeparator2 = new QAction(this); actionSeparator1->setSeparator(true); actionSeparator2->setSeparator(true); // Create the main toolbar and insert the actions QList<QAction*> actionList; actionList << actionNewList << actionOpenList << actionSaveList << actionSeparator1 << actionNewTimer << actionEditTimer << actionRemoveTimer << actionSeparator2 << actionMisc; QSize iconSize(MAIN_TOOLBAR_ICON_WIDTH, MAIN_TOOLBAR_ICON_HEIGHT); QToolBar* toolBar = new QToolBar(this); toolBar->setIconSize(iconSize); toolBar->addActions(actionList); toolBar->setMovable(false); this->addToolBar(toolBar); // Create the main widget, a table which display the timers // The table display three columns: sound name, period and hotkey this->timerTable = new QTableWidget(0, COLUMN_COUNT, this); // Table properties this->timerTable->setShowGrid(true); this->timerTable->setSortingEnabled(false); this->timerTable->setAlternatingRowColors(true); this->timerTable->setEditTriggers(QAbstractItemView::NoEditTriggers); this->timerTable->setSelectionMode(QAbstractItemView::SingleSelection); this->timerTable->setSelectionBehavior(QAbstractItemView::SelectRows); this->timerTable->horizontalHeader()->setStretchLastSection(true); this->timerTable->verticalHeader()->setVisible(false); // Set the columns header and size QStringList labels; labels << tr("Status") << tr("Sound name") << tr("Period") << tr("Hotkey"); this->timerTable->setHorizontalHeaderLabels(labels); this->timerTable->setColumnWidth(COLUMN_STATUS, 60); this->timerTable->setColumnWidth(COLUMN_NAME, 200); this->timerTable->setColumnWidth(COLUMN_PERIOD, 100); this->timerTable->setColumnWidth(COLUMN_HOTKEY, 150); // Finally, install the table in the main window setCentralWidget(this->timerTable); // Main toolbar connections connect(this->actionNewList, &QAction::triggered, this, &MainWindow::newListTriggerred); connect(this->actionOpenList, &QAction::triggered, this, &MainWindow::openListTriggerred); connect(this->actionSaveList, &QAction::triggered, [this] { promptForFilename() && save(); }); connect(this->actionNewTimer, &QAction::triggered, this, &MainWindow::newTimerTriggerred); connect(this->actionEditTimer, &QAction::triggered, this, &MainWindow::editTimerTriggerred); connect(this->actionRemoveTimer, &QAction::triggered, this, &MainWindow::removeTimerTriggerred); connect(this->actionMisc, &QAction::triggered, [this] { DlgMisc::showDlgMisc(this); }); // Table connections connect(this->timerTable, &QTableWidget::itemSelectionChanged, this, &MainWindow::timerSelectionChanged); connect(this->timerTable, &QTableWidget::itemDoubleClicked, this, &MainWindow::editTimerTriggerred); // Interface update connect(&this->modified, &Modified::changed, this, &MainWindow::updateUI); // Trigger some slots to have a consistent interface timerSelectionChanged(); updateUI(); adjustSize(); }
void WebView::keyPressEvent(QKeyEvent* pEv) { // emit close window shortcut signal if appropriate #ifndef _WIN32 if (pEv->key() == 'W') { #ifdef Q_WS_MAC Qt::KeyboardModifier modifier = Qt::MetaModifier; #else Qt::KeyboardModifier modifier = Qt::ControlModifier; #endif // check modifier and emit signal if (pEv->modifiers() & modifier) onCloseWindowShortcut(); } #endif // Work around bugs in QtWebKit that result in numpad key // presses resulting in keyCode=0 in the DOM's keydown events. // This is due to some missing switch cases in the case // where the keypad modifier bit is on, so we turn it off. Qt::KeyboardModifiers modifiers; #ifdef Q_WS_MAC if ((pEv->nativeModifiers() & 0x40101) == 0x40101) { modifiers &= ~Qt::MetaModifier; modifiers |= Qt::ControlModifier; } else if ((pEv->nativeModifiers() & 0x100108) == 0x100108) { modifiers &= ~Qt::ControlModifier; modifiers |= Qt::MetaModifier; } else { #else { #endif modifiers = pEv->modifiers(); } QKeyEvent newEv(pEv->type(), pEv->key(), modifiers & ~Qt::KeypadModifier, pEv->text(), pEv->isAutoRepeat(), pEv->count()); this->QWebView::keyPressEvent(&newEv); } void WebView::downloadRequested(const QNetworkRequest& request) { QString fileName = promptForFilename(request); if (fileName.isEmpty()) return; // Ask the network manager to download // the file and connect to the progress // and finished signals. QNetworkRequest newRequest = request; QNetworkAccessManager* pNetworkManager = page()->networkAccessManager(); QNetworkReply* pReply = pNetworkManager->get(newRequest); // DownloadHelper frees itself when downloading is done new DownloadHelper(pReply, fileName); }