Mercurial > hg > octave-nkf
changeset 16794:1d1f02e0f6b4
GUI: enable clipboard content detection for terminal window context menu
* libgui/qterminal/libqterminal/QTerminal.h, libgui/qterminal/libqterminal/QTerminal.cc
(QTerminal::handleCustomContentMenuRequested): Use clinboard and tem window selection buffer to determine enable state of copy/paste actions.
(QTerminal::QTerminal): save content actions for copy and paste to variables.
* libgui/qterminal/libqterminal/unix/QUnixTerminalImpl.cpp, libgui/qterminal/libqterminal/unix/QUnixTerminalImpl.h
(QUnixTerminalImpl::selectedText): New function.
* libgui/qterminal/libqterminal/unix/TerminalView.cpp, libgui/qterminal/libqterminal/unix/TerminalView.h
(TerminalView::selectedText): New function.
* libgui/qterminal/libqterminal/win32/QWinTerminalImpl.cpp, libgui/qterminal/libqterminal/win32/QWinTerminalImpl.h
(QWinTerminalImpl::selectedText): New function.
author | John Donoghue <john.donoghue@ieee.org> |
---|---|
date | Thu, 20 Jun 2013 22:04:58 -0400 |
parents | cc1657be1ee7 |
children | 38c1a421f082 |
files | libgui/qterminal/libqterminal/QTerminal.h libgui/qterminal/libqterminal/unix/QUnixTerminalImpl.cpp libgui/qterminal/libqterminal/unix/QUnixTerminalImpl.h libgui/qterminal/libqterminal/unix/TerminalView.cpp libgui/qterminal/libqterminal/unix/TerminalView.h libgui/qterminal/libqterminal/win32/QWinTerminalImpl.cpp libgui/qterminal/libqterminal/win32/QWinTerminalImpl.h |
diffstat | 7 files changed, 43 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/libgui/qterminal/libqterminal/QTerminal.h +++ b/libgui/qterminal/libqterminal/QTerminal.h @@ -30,6 +30,8 @@ #include <QColor> #include <QList> #include <QMenu> +#include <QClipboard> +#include <QApplication> class QTerminal : public QWidget { @@ -45,11 +47,13 @@ virtual ~QTerminal (void) { } - virtual void setTerminalFont(const QFont& font) = 0; + virtual void setTerminalFont (const QFont& font) = 0; + + virtual void setSize (int h, int v) = 0; - virtual void setSize(int h, int v) = 0; + virtual void sendText (const QString& text) = 0; - virtual void sendText(const QString& text) = 0; + virtual QString selectedText () = 0; enum CursorType { @@ -88,6 +92,11 @@ virtual void handleCustomContextMenuRequested (const QPoint& at) { + QClipboard * cb = QApplication::clipboard (); + + _paste_action->setEnabled (cb->text().length() > 0); + _copy_action->setEnabled (selectedText().length() > 0); + _contextMenu->move (mapToGlobal (at)); _contextMenu->show (); } @@ -102,10 +111,12 @@ _contextMenu = new QMenu (this); - _contextMenu->addAction (QIcon (":/actions/icons/editcopy.png"), + _copy_action = _contextMenu->addAction ( + QIcon (":/actions/icons/editcopy.png"), tr ("Copy"), this, SLOT (copyClipboard ())); - _contextMenu->addAction (QIcon (":/actions/icons/editpaste.png"), + _paste_action = _contextMenu->addAction ( + QIcon (":/actions/icons/editpaste.png"), tr ("Paste"), this, SLOT (pasteClipboard ())); _contextMenu->addSeparator (); @@ -132,6 +143,8 @@ private: QMenu *_contextMenu; + QAction * _copy_action; + QAction * _paste_action; }; #endif // QTERMINAL_H
--- a/libgui/qterminal/libqterminal/unix/QUnixTerminalImpl.cpp +++ b/libgui/qterminal/libqterminal/unix/QUnixTerminalImpl.cpp @@ -201,3 +201,7 @@ m_terminalView->pasteClipboard(); } +QString QUnixTerminalImpl::selectedText () +{ + return m_terminalView->selectedText (); +}
--- a/libgui/qterminal/libqterminal/unix/QUnixTerminalImpl.h +++ b/libgui/qterminal/libqterminal/unix/QUnixTerminalImpl.h @@ -48,6 +48,8 @@ void setSelectionColor (const QColor& color); void setCursorColor (bool useForegroundColor, const QColor& color); + QString selectedText(); + public slots: void copyClipboard(); void pasteClipboard();
--- a/libgui/qterminal/libqterminal/unix/TerminalView.cpp +++ b/libgui/qterminal/libqterminal/unix/TerminalView.cpp @@ -2698,3 +2698,9 @@ _lineSpacing = i; setVTFont(font()); // Trigger an update. } + +QString TerminalView::selectedText () +{ + QString text = _screenWindow->selectedText (_preserveLineBreaks); + return text; +}
--- a/libgui/qterminal/libqterminal/unix/TerminalView.h +++ b/libgui/qterminal/libqterminal/unix/TerminalView.h @@ -323,6 +323,8 @@ void setSelection(const QString &t); + QString selectedText (); + /** * Reimplemented. Has no effect. Use setVTFont() to change the font * used to draw characters in the display.
--- a/libgui/qterminal/libqterminal/win32/QWinTerminalImpl.cpp +++ b/libgui/qterminal/libqterminal/win32/QWinTerminalImpl.cpp @@ -1461,3 +1461,12 @@ if (! text.isEmpty ()) sendText (text); } + + +////////////////////////////////////////////////////////////////////////////// + +QString QWinTerminalImpl::selectedText () +{ + QString selection = d->getSelection (); + return selection; +}
--- a/libgui/qterminal/libqterminal/win32/QWinTerminalImpl.h +++ b/libgui/qterminal/libqterminal/win32/QWinTerminalImpl.h @@ -60,6 +60,8 @@ void setSelectionColor (const QColor& color); void setCursorColor (bool useForegoundColor, const QColor& color); + QString selectedText (); + public slots: void copyClipboard (void); void pasteClipboard (void);