void FileTabManager::revert(unsigned tab) { // Check if modified if (!isModified(tab)) return; // Get absolute path NCEdit *editor = (NCEdit *)QTabWidget::widget(tab); NCFile &file = *editor->getFile(); string filename = file.getAbsolutePath(); if (!SystemUtilities::exists(filename)) return; // Read data QFile qFile(filename.c_str()); qFile.open(QFile::ReadOnly); QString contents = qFile.readAll(); qFile.close(); contents.replace('\t', " "); // Revert editor->setPlainText(contents); // Set unmodified editor->document()->setModified(false); // Notify win->showMessage("Reverted " + file.getRelativePath()); }
void FileTabManager::revert(unsigned tab) { // Check if modified if (!isModified(tab)) return; // Get file NCEdit *editor = (NCEdit *)QTabWidget::widget(tab); Project::File &file = *editor->getFile(); if (!file.exists()) return; // Read data QFile qFile(file.getPath().c_str()); qFile.open(QFile::ReadOnly); QString contents = qFile.readAll(); qFile.close(); contents.replace('\t', " "); // Revert editor->setPlainText(contents); // Set unmodified editor->document()->setModified(false); // Notify win->showMessage("Reverted " + file.getBasename()); }
void FileTabManager::save(unsigned tab, bool saveAs) { validateTabIndex(tab); if (!saveAs && !isModified(tab)) return; // Get absolute path NCEdit *editor = (NCEdit *)QTabWidget::widget(tab); Project::File &file = *editor->getFile(); string path = file.getPath(); // Get type bool tpl = editor->isTPL(); if (saveAs) { path = win->openFile("Save file", tpl ? "TPL (*.tpl)" : "GCode (*.nc *.ngc *.gcode)", path, true); if (path.empty()) return; string ext = SystemUtilities::extension(path); if (ext.empty()) path += tpl ? ".tpl" : ".gcode"; else if (tpl && ext != "tpl") { win->warning("TPL file must have .tpl extension"); return; } else if (!tpl && (ext == "xml" || ext == "tpl")) { win->warning("GCode file cannot have .tpl or .xml extension"); return; } } // Save data QString content = editor->toPlainText(); QFile qFile(QString::fromUtf8(path.c_str())); if (!qFile.open(QFile::WriteOnly | QIODevice::Truncate)) THROW("Could not save '" << path << "'"); qFile.write(content.toUtf8()); qFile.close(); // Update file path path = SystemUtilities::absolute(path); if (path != file.getPath()) { file.setPath(path); // Update tab title QString title(QString::fromUtf8(file.getBasename().c_str())); QTabWidget::setTabText(tab, title); } // Set unmodified editor->document()->setModified(false); // Notify win->showMessage("Saved " + file.getBasename()); }
void FileTabManager::open(const SmartPointer<Project::File> &file, int line, int col) { // Check if we already have this file open in a tab unsigned tab; for (tab = offset; tab < (unsigned)QTabWidget::count(); tab++) if (getFile(tab) == file) break; // Create new tab if ((unsigned)QTabWidget::count() <= tab) { SmartPointer<Highlighter> highlighter; if (file->isTPL()) highlighter = new TPLHighlighter; else highlighter = new GCodeHighlighter; QApplication::setOverrideCursor(Qt::WaitCursor); NCEdit *editor = new NCEdit(file, highlighter, this); QFile qFile(QString::fromUtf8(file->getPath().c_str())); qFile.open(QFile::ReadOnly); QString contents = qFile.readAll(); qFile.close(); contents.replace('\t', " "); editor->loadDarkScheme(); editor->setWordWrapMode(QTextOption::NoWrap); editor->setPlainText(contents); connect(editor, SIGNAL(find()), SIGNAL(find())); connect(editor, SIGNAL(findNext()), SIGNAL(findNext())); connect(editor, SIGNAL(findResult(bool)), SIGNAL(findResult(bool))); QString title = QString::fromUtf8(file->getBasename().c_str()); tab = (unsigned)QTabWidget::addTab(editor, title); QApplication::restoreOverrideCursor(); } // Get editor NCEdit *editor = (NCEdit *)QTabWidget::widget(tab); // Switch to tab QTabWidget::setCurrentIndex(tab); // Select line and column if (0 < line) { QTextCursor c = editor->textCursor(); c.setPosition(0, QTextCursor::MoveAnchor); c.movePosition(QTextCursor::Down, QTextCursor::MoveAnchor, line - 1); if (0 < col) c.movePosition(QTextCursor::NextCharacter, QTextCursor::MoveAnchor, col); c.select(QTextCursor::LineUnderCursor); editor->setTextCursor(c); } // Get input focus editor->setFocus(); }