diff --git a/src/CommandStorage.h b/src/CommandStorage.h index dd078f4b..4df22dea 100644 --- a/src/CommandStorage.h +++ b/src/CommandStorage.h @@ -40,6 +40,7 @@ typedef enum { ID_EXIT = 1007, ID_FILE_RELOAD = 1008, ID_FILE_PRINT = 1009, + ID_FILE_PRINT_SELECTED = 1010, // ID_EDIT_CUT = 1101, ID_EDIT_COPY = 1102, diff --git a/src/DocHandler.cpp b/src/DocHandler.cpp index eb474942..2f7691c3 100644 --- a/src/DocHandler.cpp +++ b/src/DocHandler.cpp @@ -482,6 +482,14 @@ void DocHandler::docPrint() { doc->print(); } +void DocHandler::docPrintSelected() { + Juff::Document* doc = currentDoc(); + if (doc->isNull()) + return; + + doc->printSelected(); +} + void DocHandler::docClose() { closeDocument(currentDoc()); diff --git a/src/DocHandler.h b/src/DocHandler.h index 221696a6..4ea71589 100644 --- a/src/DocHandler.h +++ b/src/DocHandler.h @@ -54,6 +54,7 @@ public slots: void docSaveAs(); void docReload(); void docPrint(); + void docPrintSelected(); void docClose(); void docCloseAll(); void processTheCommand(); diff --git a/src/Document.h b/src/Document.h index 51266181..56e0a41b 100644 --- a/src/Document.h +++ b/src/Document.h @@ -74,6 +74,7 @@ Q_OBJECT virtual Document::Status reload() = 0; virtual Document::SaveRequest confirmForClose() = 0; virtual void print() const = 0; + virtual void printSelected() const = 0; virtual void processTheCommand(CommandID) = 0; virtual void applySettings(); diff --git a/src/JuffEd.cpp b/src/JuffEd.cpp index d2d62e80..011dcecd 100644 --- a/src/JuffEd.cpp +++ b/src/JuffEd.cpp @@ -320,6 +320,7 @@ void JuffEd::createCommands() { Command(ID_FILE_SAVE_AS,tr("Save as"), im->icon("fileSaveAs"), QKeySequence("Ctrl+Shift+S"), h, SLOT(docSaveAs())), Command(ID_FILE_RELOAD, tr("Reload"), im->icon("reload"), QKeySequence("F5"), h, SLOT(docReload())), Command(ID_FILE_PRINT, tr("Print"), im->icon("filePrint"), QKeySequence("Ctrl+P"), h, SLOT(docPrint())), + Command(ID_FILE_PRINT_SELECTED, tr("Print selected lines"), im->icon("filePrintSelected"), QKeySequence(), h, SLOT(docPrintSelected())), Command(ID_FILE_CLOSE, tr("Close"), im->icon("fileClose"), QKeySequence("Ctrl+W"), h, SLOT(docClose())), Command(ID_FILE_CLOSE_ALL, tr("Close all"), im->icon("fileCloseAll"), QKeySequence(), h, SLOT(docCloseAll())), Command(ID_EXIT, tr("Exit"), im->icon("exit"), QKeySequence(), this, SLOT(exit())), @@ -379,7 +380,7 @@ void JuffEd::createMenuBar() { menuBar()->clear(); CommandID fileMenu[] = { ID_FILE_NEW, ID_FILE_OPEN, ID_FILE_SAVE, ID_FILE_SAVE_AS, - ID_FILE_RELOAD, ID_FILE_PRINT, ID_FILE_CLOSE, ID_FILE_CLOSE_ALL, ID_SEPARATOR, + ID_FILE_RELOAD, ID_FILE_PRINT, ID_FILE_PRINT_SELECTED, ID_FILE_CLOSE, ID_FILE_CLOSE_ALL, ID_SEPARATOR, ID_SESSION_NEW, ID_SESSION_OPEN, ID_SESSION_SAVE, ID_SESSION_SAVE_AS, ID_SEPARATOR, ID_EXIT, ID_NONE }; diff --git a/src/NullDoc.cpp b/src/NullDoc.cpp index 8a103d24..8514638e 100644 --- a/src/NullDoc.cpp +++ b/src/NullDoc.cpp @@ -44,11 +44,15 @@ Juff::Document::Status NullDoc::reload() { scream(); return StatusUnknownError; } - + void NullDoc::print() const { scream(); } +void NullDoc::printSelected() const { + scream(); +} + Juff::Document::Status NullDoc::open() { scream(); return StatusUnknownError; diff --git a/src/NullDoc.h b/src/NullDoc.h index 8e14b683..a39ffad1 100644 --- a/src/NullDoc.h +++ b/src/NullDoc.h @@ -34,6 +34,7 @@ class NullDoc : public Juff::Document { virtual Juff::Document::Status close(); virtual Juff::Document::SaveRequest confirmForClose(); virtual void print() const; + virtual void printSelected() const; virtual void processTheCommand(CommandID); diff --git a/src/TextDoc.cpp b/src/TextDoc.cpp index 8df8a166..2ed589f7 100644 --- a/src/TextDoc.cpp +++ b/src/TextDoc.cpp @@ -159,6 +159,14 @@ void TextDoc::print() const { tdView->print(); } +void TextDoc::printSelected() const { + TextDocView* tdView = textDocView(); + if (tdView == 0) + return; + + tdView->printSelected(); +} + Document::Status TextDoc::open() { return readContent(fileName()); } diff --git a/src/TextDoc.h b/src/TextDoc.h index 0757e7d8..d63845bc 100644 --- a/src/TextDoc.h +++ b/src/TextDoc.h @@ -37,6 +37,7 @@ Q_OBJECT virtual Juff::Document::Status reload(); virtual Juff::Document::SaveRequest confirmForClose(); virtual void print() const; + virtual void printSelected() const; virtual void processTheCommand(CommandID); virtual void applySettings(); diff --git a/src/TextDocView.cpp b/src/TextDocView.cpp index 78986788..21bb3d88 100644 --- a/src/TextDocView.cpp +++ b/src/TextDocView.cpp @@ -318,6 +318,20 @@ void TextDocView::print() { } } +void TextDocView::printSelected() { + QsciPrinter prn; + QPrintDialog dlg(&prn, this); + if (dlg.exec() == QDialog::Accepted) { + int lineFrom(-1), lineTo(-1), colFrom(-1), colTo(-1); + vInt_->edit_->getSelection(&lineFrom, &colFrom, &lineTo, &colTo); + if (colTo == 0) + --lineTo; + + prn.setWrapMode(isAdjustedByWidth() ? QsciScintilla::WrapWord : QsciScintilla::WrapNone); + prn.printRange(vInt_->edit_, lineFrom, lineTo); + } +} + //////////////////////////////////////////////////////////// // EDIT diff --git a/src/TextDocView.h b/src/TextDocView.h index 6d881837..8f215901 100644 --- a/src/TextDocView.h +++ b/src/TextDocView.h @@ -71,6 +71,7 @@ Q_OBJECT void undo(); void redo(); void print(); + void printSelected(); void find(const QString& str, bool isRegExp, DocFindFlags flags); void replace(const QString& from, bool isRegExp, const QString& to, DocFindFlags flags);