Date: Mon, 27 Jul 2009 16:42:56 GMT From: Jonathan Anderson <jona@FreeBSD.org> To: Perforce Change Reviews <perforce@FreeBSD.org> Subject: PERFORCE change 166633 for review Message-ID: <200907271642.n6RGguqg000228@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=166633 Change 166633 by jona@jona-trustedbsd-belle-vmware on 2009/07/27 16:42:02 Added close action, 'current file' Affected files ... .. //depot/projects/trustedbsd/capabilities/src/tools/cap/sandbox_qt/TextEditor.cpp#3 edit .. //depot/projects/trustedbsd/capabilities/src/tools/cap/sandbox_qt/TextEditor.h#2 edit Differences ... ==== //depot/projects/trustedbsd/capabilities/src/tools/cap/sandbox_qt/TextEditor.cpp#3 (text+ko) ==== @@ -44,27 +44,32 @@ TextEditor::TextEditor() - : QMainWindow() + : QMainWindow(), currentFile(this) { setAttribute(Qt::WA_QuitOnClose); setWindowTitle(tr("Sandboxed Text Editor")); - openFile = new QAction(QIcon(":/images/open.png"), tr("&Open..."), this); + openFile = new QAction(QIcon(":/icons/open.png"), tr("&Open..."), this); openFile->setShortcuts(QKeySequence::Open); openFile->setStatusTip(tr("Open an existing file")); connect(openFile, SIGNAL(triggered()), this, SLOT(open())); - saveFile = new QAction(QIcon(":/images/save.png"), tr("&Save..."), this); + saveFile = new QAction(QIcon(":/icons/save.png"), tr("&Save..."), this); saveFile->setShortcuts(QKeySequence::Save); saveFile->setStatusTip(tr("Save the file")); connect(saveFile, SIGNAL(triggered()), this, SLOT(save())); - openFileRaw = new QAction(QIcon(":/images/open.png"), + openFileRaw = new QAction(QIcon(":/icons/open.png"), tr("&Open via raw syscalls..."), this); openFileRaw->setStatusTip(tr("Open a file via raw system calls")); connect(openFileRaw, SIGNAL(triggered()), this, SLOT(openRaw())); - quitEditor = new QAction(QIcon(":/images/quit.png"), tr("&Quit"), this); + closeFile = new QAction(QIcon(":/icons/close.png"), tr("&Close..."), this); + closeFile->setShortcuts(QKeySequence::Close); + closeFile->setStatusTip(tr("Close the current file")); + connect(closeFile, SIGNAL(triggered()), this, SLOT(close())); + + quitEditor = new QAction(QIcon(":/icons/quit.png"), tr("&Quit"), this); quitEditor->setShortcut(QKeySequence("Ctrl+Q")); quitEditor->setStatusTip(tr("Quit Text Editor")); connect(quitEditor, SIGNAL(triggered()), this, SLOT(quit())); @@ -73,14 +78,16 @@ fileMenu->addAction(openFile); fileMenu->addAction(openFileRaw); fileMenu->addAction(saveFile); + fileMenu->addAction(closeFile); fileMenu->addAction(quitEditor); -/* + fileToolBar = addToolBar("File"); fileToolBar->addAction(openFile); fileToolBar->addAction(openFileRaw); fileToolBar->addAction(saveFile); + fileToolBar->addAction(closeFile); fileToolBar->addAction(quitEditor); -*/ + setCentralWidget(text = new QTextEdit()); resize(640, 480); @@ -88,6 +95,12 @@ } +TextEditor::~TextEditor() +{ + close(); +} + + void TextEditor::open() { struct ua_powerbox_options options; @@ -108,58 +121,56 @@ char *name; if(ua_powerbox(&options, &fd, &name, &fdcount)) + { QMessageBox::critical(this, tr("Powerbox Error"), tr("Error opening User Angel powerbox: ") + strerror(errno)); + return; + } - else - { - QFile file(this); - FILE *fp = fdopen(fd, "r"); - file.open(fp, QFile::ReadOnly); - text->setPlainText(file.readAll()); - file.close(); - fclose(fp); - } + currentFile.open(fdopen(fd, "rw"), QFile::ReadWrite); + text->setPlainText(currentFile.readAll()); } void TextEditor::save() { - struct ua_powerbox_options options; - options.ui = UA_QT; - options.operation = UA_SAVE_FILE; - options.parent_window = this->winId(); - options.start_path = ""; - options.pathlen = 0; - options.start_fd = -1; - options.mult = false; - options.filter = ""; - options.filterlen = 0; - options.flags = O_WRONLY | O_CREAT | O_TRUNC; - options.rights = CAP_FSTAT | CAP_SEEK | CAP_FSYNC | CAP_WRITE | CAP_FTRUNCATE; - options.umask = 0666; + if(!currentFile.isOpen()) + { + struct ua_powerbox_options options; + options.ui = UA_QT; + options.operation = UA_SAVE_FILE; + options.parent_window = this->winId(); + options.start_path = ""; + options.pathlen = 0; + options.start_fd = -1; + options.mult = false; + options.filter = ""; + options.filterlen = 0; + options.flags = O_WRONLY | O_CREAT | O_TRUNC; + options.rights = CAP_FSTAT | CAP_SEEK | CAP_FSYNC | CAP_READ | CAP_WRITE | CAP_FTRUNCATE; + options.umask = 0666; - int fdcount = 1; - int fd; - char *name; + int fdcount = 1; + int fd; + char *name; - if(ua_powerbox(&options, &fd, &name, &fdcount)) - QMessageBox::critical(this, - tr("Powerbox Error"), - tr("Error opening User Angel powerbox: ") - + strerror(errno)); + if(ua_powerbox(&options, &fd, &name, &fdcount)) + { + QMessageBox::critical(this, + tr("Powerbox Error"), + tr("Error opening User Angel powerbox: ") + + strerror(errno)); + return; + } - else - { - QFile file(this); - file.open(fd, QFile::WriteOnly | QFile::Truncate); - int ret = file.write(text->toPlainText().toAscii()); - file.flush(); - file.close(); - ::close(fd); + currentFile.open(fd, QFile::ReadWrite); } + + currentFile.resize(0); + currentFile.write(text->toPlainText().toAscii()); + currentFile.flush(); } @@ -174,8 +185,16 @@ } +void TextEditor::close() +{ + currentFile.close(); + text->setPlainText(""); +} + + void TextEditor::quit() { close(); + QMainWindow::close(); } ==== //depot/projects/trustedbsd/capabilities/src/tools/cap/sandbox_qt/TextEditor.h#2 (text+ko) ==== @@ -31,6 +31,7 @@ * SUCH DAMAGE. */ +#include <QFile> #include <QMainWindow> class QAction; @@ -45,12 +46,14 @@ public: TextEditor(); + ~TextEditor(); public slots: void open(); void save(); void openRaw(); + void close(); void quit(); @@ -63,6 +66,9 @@ QAction *openFile; QAction *saveFile; QAction *openFileRaw; + QAction *closeFile; QAction *quitEditor; + + QFile currentFile; };
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200907271642.n6RGguqg000228>