23 #include <QApplication>
27 #include <QGridLayout>
28 #include <QPaintEvent>
30 #include <QResizeEvent>
37 #include <QMessageBox>
38 #include <QDragEnterEvent>
47 #define WIN32_LEAN_AND_MEAN
48 #if ! defined (_WIN32_WINNT) && ! defined (NTDDI_VERSION)
49 #define _WIN32_WINNT 0x0500
52 #include <versionhelpers.h>
62 #define LOGFILENAME "QConsole.log"
64 #define HIDDEN_CONSOLE
67 # pragma warning(disable : 4996)
105 QString esc =
"\x1b";
108 if (ev->key () == Qt::Key_Delete)
110 else if (!ev->text ().isEmpty ())
149 case Qt::Key_PageDown:
197 void log (
const char* fmt, ...);
201 const char* devName);
216 void setCursorColor (
bool useForegroundColor,
const QColor& color);
222 void drawSelection (QPainter&
p,
int cx1,
int cy1,
int cx2,
int cy2,
227 void drawText (QPainter&
p,
int cx1,
int cy1,
int cx2,
int cy2,
274 if (end.y () < begin.y ()
275 || (end.y () == begin.y () && end.x () < begin.x ()))
282 : q (parent), m_command (cmd), m_cursorBlinking (
false),
283 m_hasBlinkingCursor (true), m_cursorType (
BlockCursor),
284 m_beginSelection (0, 0), m_endSelection (0, 0), m_settingSelection (
false),
285 m_process (NULL), m_inWheelEvent (
false)
290 log (
"Detaching from existing console (if any)...\n");
292 log (
"Closing standard IO...\n");
297 #ifdef HIDDEN_CONSOLE
298 HWINSTA hOrigSta, hNewSta;
301 hOrigSta = GetProcessWindowStation ();
302 hNewSta = CreateWindowStation (NULL, 0, GENERIC_ALL, NULL);
303 log (
"Current Windows station: %p.\nNew Windows station: %p.\n", hOrigSta,
305 if (! SetProcessWindowStation (hNewSta))
306 log (
"Failed to switch to new Windows station.\n");
308 if (! AllocConsole ())
309 log (
"Failed to create new console.\n");
310 #ifdef HIDDEN_CONSOLE
311 if (! SetProcessWindowStation (hOrigSta))
312 log (
"Failed to restore original Windows station.\n");
313 if (! CloseWindowStation (hNewSta))
314 log (
"Failed to close new Windows station.\n");
317 log (
"New (hidden) console created.\n");
323 log (
"Standard input/output/error set up.\n");
325 *stdin = *(fdopen (0,
"rb"));
326 *stdout = *(fdopen (1,
"wb"));
327 *stderr = *(fdopen (2,
"wb"));
329 log (
"POSIX standard streams created.\n");
331 setvbuf (stdin, NULL, _IONBF, 0);
332 setvbuf (stdout, NULL, _IONBF, 0);
333 setvbuf (stderr, NULL, _IONBF, 0);
335 log (
"POSIX standard stream buffers adjusted.\n");
337 HANDLE hStdOut = GetStdHandle (STD_OUTPUT_HANDLE);
339 log (
"Console allocated: hStdOut: %p\n", hStdOut);
345 #ifdef HIDDEN_CONSOLE
349 CONSOLE_SCREEN_BUFFER_INFO sbi;
351 GetConsoleScreenBufferInfo (hStdOut, &sbi);
352 m_bufferSize = QSize (sbi.dwSize.X, qMax (sbi.dwSize.Y, (SHORT)500));
354 sbi.srWindow.Right - sbi.srWindow.Left + 1,
355 sbi.srWindow.Bottom - sbi.srWindow.Top + 1);
356 m_cursorPos = QPoint (sbi.dwCursorPosition.X, sbi.dwCursorPosition.Y);
358 log (
"Initial console parameters:\n");
361 log (
" window: (%d, %d) -> (%d, %d) [%d x %d]\n",
366 wchar_t titleBuf[260];
367 GetConsoleTitleW (titleBuf,
sizeof (titleBuf));
368 q->setWindowTitle (QString::fromWCharArray (titleBuf));
370 m_font.setFamily (
"Lucida Console");
372 m_font.setStyleHint (QFont::TypeWriter);
380 QGridLayout* l =
new QGridLayout (parent);
381 l->setContentsMargins (0, 0, 0, 0);
387 if (IsWindows7OrGreater ())
389 SetConsoleCP (65001);
390 SetConsoleOutputCP (65001);
399 SetConsoleTextAttribute (
m_stdOut, 0xF0);
414 parent->setFocusPolicy (Qt::StrongFocus);
468 const char*
name,
const char* devName)
470 log (
"Opening %s...\n", devName);
472 int fd = open (devName, _O_RDWR | _O_BINARY);
478 log (
"Opened %s is not at target file descriptor %d, "
479 "duplicating...\n", name, targetFd);
480 if (
dup2 (fd, targetFd) == -1)
481 log (
"Failed to duplicate file descriptor: errno=%d.\n", errno);
482 if (close (fd) == -1)
483 log (
"Failed to close original file descriptor: errno=%d.\n",
487 log (
"%s opened and assigned to file descriptor %d.\n", devName, fd);
488 if (! SetStdHandle (stdHandleId, (HANDLE) _get_osfhandle (targetFd)))
489 log (
"Failed to re-assign %s: error=%08x.\n", name, GetLastError ());
492 log (
"Failed to open %s: errno=%d.\n", devName, errno);
513 COORD bufSize, bufCoord;
517 nr = end.y () - begin.y () + 1;
526 bufRect.Top = begin.y ();
527 bufRect.Bottom = end.y ();
529 if (ReadConsoleOutput (
m_stdOut, buf, bufSize, bufCoord, &bufRect))
531 int start_pos = begin.x ();
532 int end_pos = (nr - 1) *
m_bufferSize.width () + end.x ();
533 int lastNonSpace = -1;
535 for (
int i = start_pos;
i <= end_pos;
i++)
539 if (lastNonSpace >= 0)
540 selection.truncate (lastNonSpace);
541 selection.append (
'\n');
542 lastNonSpace = selection.length ();
545 QChar
c (buf[
i].Char.UnicodeChar);
547 selection.append (c);
549 lastNonSpace = selection.length ();
552 if (lastNonSpace >= 0)
553 selection.truncate (lastNonSpace);
604 QPalette palette (color);
626 CONSOLE_SCREEN_BUFFER_INFO sbi;
627 GetConsoleScreenBufferInfo (
m_stdOut, &sbi);
635 int cx2,
int cy2,
int cw,
int ch)
639 int ascent = p.fontMetrics ().ascent ();
641 int y = ascent + cy1 * ch;;
643 for (
int j = cy1; j <= cy2; j++, y += ch)
646 bool hasChar =
false;
650 for (
int i = cx1;
i <= cx2;
i++)
654 if ((ci->Attributes & 0x00ff) != attr)
660 if (hasChar || (attr & 0x00f0))
663 p.fillRect (x, y-ascent, len * cw, ch, p.brush ());
671 attr = (ci->Attributes & 0x00ff);
672 p.setBrush (
m_colors[(attr >> 4) & 0x000f]);
677 if (ci->Char.UnicodeChar != L
' ')
681 if (len != 0 && (hasChar || (attr & 0x00f0)))
688 p.fillRect (x, y-ascent, len * cw, ch, p.brush ());
705 QPoint begin = cellpos;
706 QPoint end = cellpos;
714 begin.ry () -= verticalScrollOffset;
715 end.ry () -= verticalScrollOffset;
717 begin.rx () -= horizontalScrollOffset;
718 end.rx () -= horizontalScrollOffset;
721 if (QChar(
m_buffer[begin.y ()*stride + begin.x ()].Char.UnicodeChar).isSpace () ==
false)
724 while(begin.x () > 0 &&
725 QChar(
m_buffer[begin.y ()*stride + begin.x () -1].Char.UnicodeChar).isSpace() ==
false)
731 QChar(
m_buffer[end.y ()*stride + end.x () +1].Char.UnicodeChar).isSpace() ==
false)
738 while(begin.x () > 0 &&
739 QChar(
m_buffer[begin.y ()*stride + begin.x () -1].Char.UnicodeChar).isSpace())
745 QChar(
m_buffer[end.y ()*stride + end.x () +1].Char.UnicodeChar).isSpace ())
752 begin.ry () += verticalScrollOffset;
753 end.ry () += verticalScrollOffset;
755 begin.rx () += horizontalScrollOffset;
756 end.rx () += horizontalScrollOffset;
773 int cx2,
int cy2,
int cw,
int ch)
780 bool haveSelection = (begin != end);
788 begin.ry () -= verticalScrollOffset;
789 end.ry () -= verticalScrollOffset;
791 begin.rx () -= horizontalScrollOffset;
792 end.rx () -= horizontalScrollOffset;
794 int ascent = p.fontMetrics ().ascent ();
797 int y = ascent + cy1 * ch;;
798 for (
int j = cy1; j <= cy2; j++, y += ch)
800 int charsThisLine = 0;
802 bool hasChar =
false;
805 for (
int i = cx1;
i <= cx2;
i++)
809 if ((ci->Attributes & 0x00ff) != attr)
814 charsThisLine += len;
820 attr = (ci->Attributes & 0x00ff);
825 if (ci->Char.UnicodeChar != L
' ')
829 if (len != 0 && (hasChar || (attr & 0x00f0)))
830 charsThisLine += len;
832 if (haveSelection && j >= begin.y () && j <= end.y ())
834 int selectionBegin = j == begin.y () ? begin.x (): 0;
836 int len = ((j == end.y () && end.x () < charsThisLine)
837 ? end.x () - selectionBegin + 1
838 : stride - selectionBegin);
840 p.fillRect (selectionBegin * cw, y-ascent, len * cw, ch,
862 p.fillRect (rect, color);
868 int penWidth = qMax (1, p.pen().width());
870 p.drawRect (rect.adjusted (penWidth/2, penWidth/2,
871 - penWidth/2 - penWidth%2,
872 - penWidth/2 - penWidth%2));
877 p.drawLine (rect.left (), rect.bottom (),
878 rect.right (), rect.bottom ());
882 p.drawLine (rect.left (), rect.top (),
883 rect.left (), rect.bottom ());
891 int cx2,
int cy2,
int cw,
int ch)
899 s.reserve (cx2 - cx1 + 1);
901 int ascent = p.fontMetrics ().ascent ();
904 int y = ascent + cy1 * ch;;
905 for (
int j = cy1; j <= cy2; j++, y += ch)
909 bool hasChar =
false;
913 for (
int i = cx1;
i <= cx2;
i++)
917 if ((ci->Attributes & 0x00ff) != attr)
923 if (hasChar || (attr & 0x00f0))
924 p.drawText (x, y, s);
926 x += (s.length () * cw);
931 attr = (ci->Attributes & 0x00ff);
936 s.append (ci->Char.UnicodeChar);
937 if (ci->Char.UnicodeChar != L
' ')
941 if (! s.isEmpty () && (hasChar || (attr & 0x00f0)))
947 p.drawText (x, y, s);
959 if (close (fd) == -1)
960 log (
"Failed to close file descriptor %d: errno=%d.\n", fd, errno);
961 if (! CloseHandle (GetStdHandle (stdHandleId)))
962 log (
"Failed to close Win32 %s: error=%08x.\n", name, GetLastError ());
969 #ifdef DEBUG_QCONSOLE
976 vfprintf (flog, fmt, l);
998 m_charSize.rwidth () = fm.averageCharWidth ();
1001 m_consoleRect.setWidth (winSize.width () / fm.averageCharWidth ());
1002 m_consoleRect.setHeight (winSize.height () / fm.lineSpacing ());
1033 log (
"Console resized:\n");
1034 log (
" widget size: %d x %d\n", winSize.width (), winSize.height ());
1037 log (
" window: (%d, %d) -> (%d, %d) [%d x %d]\n",
1053 CONSOLE_SCREEN_BUFFER_INFO sbi;
1056 GetConsoleScreenBufferInfo (hStdOut, &sbi);
1061 bs.X = sbi.dwSize.X;
1063 sr.Left = sbi.srWindow.Left;
1064 sr.Right = sbi.srWindow.Right;
1068 if (bs.Y > sbi.dwSize.Y)
1070 SetConsoleScreenBufferSize (hStdOut, bs);
1071 SetConsoleWindowInfo (hStdOut, TRUE, &sr);
1075 SetConsoleWindowInfo (hStdOut, TRUE, &sr);
1076 SetConsoleScreenBufferSize (hStdOut, bs);
1083 if (bs.X > sbi.dwSize.X)
1085 SetConsoleScreenBufferSize (hStdOut, bs);
1086 SetConsoleWindowInfo (hStdOut, TRUE, &sr);
1090 SetConsoleWindowInfo (hStdOut, TRUE, &sr);
1091 SetConsoleScreenBufferSize (hStdOut, bs);
1094 log (
"Sync'ing console parameters:\n");
1095 log (
" buffer size: %d x %d\n", bs.X, bs.Y);
1096 log (
" window: (%d, %d) -> (%d, %d)\n",
1097 sr.Left, sr.Top, sr.Right, sr.Bottom);
1128 qCritical (
"cannot read console output");
1144 log (
"Horizontal scrollbar parameters updated: %d/%d/%d/%d\n",
1162 log (
"Vertical scrollbar parameters updated: %d/%d/%d/%d\n",
1185 log (
"Scrolling window horizontally: (%d, %d) -> (%d, %d) [%d x %d]\n",
1186 r.Left, r.Top, r.Right, r.Bottom,
1187 r.Right - r.Left + 1, r.Bottom - r.Top + 1);
1189 if (SetConsoleWindowInfo (hStdOut, TRUE, &r))
1212 log (
"Scrolling window vertically: (%d, %d) -> (%d, %d) [%d x %d]\n",
1213 r.Left, r.Top, r.Right, r.Bottom,
1214 r.Right - r.Left + 1, r.Bottom - r.Top + 1);
1216 if (SetConsoleWindowInfo (hStdOut, TRUE, &r))
1237 CONSOLE_SCREEN_BUFFER_INFO sbi;
1238 HANDLE hStdOut = GetStdHandle (STD_OUTPUT_HANDLE);
1240 static wchar_t titleBuf[260];
1242 GetConsoleTitleW (titleBuf,
sizeof (titleBuf));
1243 QString title = QString::fromWCharArray (titleBuf);
1247 q->setWindowTitle (title);
1251 if (GetConsoleScreenBufferInfo (hStdOut, &sbi))
1286 sbi.srWindow.Right - sbi.srWindow.Left + 1,
1287 sbi.srWindow.Bottom - sbi.srWindow.Top + 1);
1317 cmd = qgetenv (
"COMSPEC").constData ();
1319 if (! cmd.isEmpty ())
1322 PROCESS_INFORMATION
pi;
1324 ZeroMemory (&si,
sizeof (si));
1325 si.cb =
sizeof (si);
1326 ZeroMemory (&pi,
sizeof (pi));
1328 if (CreateProcessW (NULL,
1329 (LPWSTR)cmd.unicode (),
1339 CloseHandle (pi.hThread);
1355 #define TEXT_CHUNK_SIZE 512
1360 int len = s.length ();
1362 DWORD nEvents = 0, written;
1363 HANDLE hStdIn = GetStdHandle (STD_INPUT_HANDLE);
1365 ZeroMemory (events,
sizeof (events));
1367 for (
int i = 0;
i < len;
i++)
1371 if (c == L
'\r' || c == L
'\n')
1373 if (c == L
'\r' &&
i < (len - 1) && s.at (
i+1) == L
'\n')
1377 events[nEvents].EventType = KEY_EVENT;
1378 events[nEvents].Event.KeyEvent.bKeyDown = TRUE;
1379 events[nEvents].Event.KeyEvent.wRepeatCount = 1;
1380 events[nEvents].Event.KeyEvent.wVirtualKeyCode =
1382 events[nEvents].Event.KeyEvent.wVirtualScanCode = 0;
1383 events[nEvents].Event.KeyEvent.uChar.UnicodeChar = c.unicode ();
1384 events[nEvents].Event.KeyEvent.dwControlKeyState = 0;
1387 WriteConsoleInput (hStdIn, events, nEvents, &written);
1389 ZeroMemory (events,
sizeof (events));
1394 events[nEvents].EventType = KEY_EVENT;
1395 events[nEvents].Event.KeyEvent.bKeyDown = TRUE;
1396 events[nEvents].Event.KeyEvent.wRepeatCount = 1;
1397 events[nEvents].Event.KeyEvent.wVirtualKeyCode =
1398 LOBYTE (VkKeyScan (c.unicode ()));
1399 events[nEvents].Event.KeyEvent.wVirtualScanCode = 0;
1400 events[nEvents].Event.KeyEvent.uChar.UnicodeChar = c.unicode ();
1401 events[nEvents].Event.KeyEvent.dwControlKeyState = 0;
1406 || (nEvents > 0 &&
i == (len - 1)))
1408 WriteConsoleInput (hStdIn, events, nEvents, &written);
1410 ZeroMemory (events,
sizeof (events));
1432 installEventFilter (
this);
1440 parent, SLOT (set_screen_size (
int,
int)));
1442 setAcceptDrops (
true);
1475 else if (event->button () == Qt::LeftButton)
1497 if (event->button () == Qt::LeftButton)
1506 QTimer::singleShot (QApplication::doubleClickInterval (),
this,
1514 if (event->button () == Qt::LeftButton)
1542 QRect updateRect =
event->rect ();
1544 int cx1 = updateRect.left () / cw;
1545 int cy1 = updateRect.top () / ch;
1546 int cx2 = qMin (
d->
m_consoleRect.width () - 1, updateRect.right () / cw);
1547 int cy2 = qMin (
d->
m_consoleRect.height () - 1, updateRect.bottom () / ch);
1556 d->
drawText (p, cx1, cy1, cx2, cy2, cw, ch);
1642 QWidget::focusInEvent (event);
1654 QWidget::focusOutEvent (event);
1661 if (event->type () == QEvent::KeyPress)
1663 QKeyEvent*
k =
static_cast<QKeyEvent*
>(event);
1664 if (k->key () == Qt::Key_Tab)
1687 QWidget::keyPressEvent (event);
1740 const QColor& color)
1764 d->
log (
"emit set_screen_size_signal (%d, %d)\n", columns, lines);
1773 if(!hasFocus())
return;
1775 QClipboard *clipboard = QApplication::clipboard ();
1779 if (selection.isEmpty ())
1786 clipboard->setText (selection);
1795 if(!hasFocus())
return;
1797 QString
text = QApplication::clipboard()->
text (QClipboard::Clipboard);
1799 if (! text.isEmpty ())
1807 if(!hasFocus())
return;
1826 if (event->mimeData ()->hasUrls ())
1828 event->acceptProposedAction();
1838 if (event->mimeData ()->hasUrls ())
1840 foreach (QUrl
url, event->mimeData ()->urls ())
1842 if(dropText.length () > 0)
1844 dropText += url.toLocalFile ();
QScrollBar * m_verticalScrollBar
int dup2(int old_fd, int new_fd)
QConsoleView * m_consoleView
void horizontalScrollValueChanged(int value)
void resizeEvent(QResizeEvent *event)
void setScrollBufferSize(int value)
void setBlinkingCursor(bool blink)
QConsoleThread * m_consoleThread
void updateHorizontalScrollBar(void)
void log(const char *fmt,...)
void focusOutEvent(QFocusEvent *)
friend class QConsoleView
void drawSelection(QPainter &p, int cx1, int cy1, int cx2, int cy2, int cw, int ch)
void setCursorType(CursorType type, bool blinking)
F77_RET_T F77_REAL &F77_RET_T F77_DBLE &F77_RET_T F77_REAL &F77_RET_T F77_DBLE &F77_RET_T F77_REAL &F77_RET_T F77_DBLE &F77_RET_T const F77_REAL const F77_REAL F77_REAL &F77_RET_T const F77_DBLE const F77_DBLE F77_DBLE &F77_RET_T F77_REAL &F77_RET_T F77_DBLE &F77_RET_T F77_DBLE &F77_RET_T F77_REAL &F77_RET_T F77_REAL &F77_RET_T F77_DBLE &F77_RET_T const F77_DBLE F77_DBLE &F77_RET_T const F77_REAL F77_REAL &F77_RET_T F77_REAL F77_REAL &F77_RET_T F77_DBLE F77_DBLE &F77_RET_T const F77_DBLE const F77_DBLE * f
void selectWord(const QPoint &cellPos)
void tripleClickTimeout(void)
void terminal_interrupt(void)
void updateConsoleView(bool grab=true)
QConsolePrivate(QWinTerminalImpl *parent, const QString &cmd=QString())
void set_global_shortcuts_signal(bool)
void titleChanged(const QString &)
void monitorConsole(void)
void syncConsoleParameters(void)
void updateSelection(void)
QColor backgroundColor(void) const
friend class QConsoleThread
void closeStandardIO(int fd, DWORD stdHandleId, const char *name)
F77_RET_T F77_REAL &F77_RET_T F77_DBLE &F77_RET_T F77_REAL &F77_RET_T F77_DBLE &F77_RET_T F77_REAL &F77_RET_T F77_DBLE &F77_RET_T const F77_REAL const F77_REAL F77_REAL &F77_RET_T const F77_DBLE const F77_DBLE F77_DBLE &F77_RET_T F77_REAL &F77_RET_T F77_DBLE &F77_RET_T F77_DBLE &F77_RET_T F77_REAL &F77_RET_T F77_REAL &F77_RET_T F77_DBLE &F77_RET_T const F77_DBLE F77_DBLE &F77_RET_T const F77_REAL F77_REAL &F77_RET_T F77_REAL F77_REAL &F77_RET_T F77_DBLE F77_DBLE &F77_RET_T const F77_DBLE const F77_DBLE F77_DBLE * d
void updateConsoleSize(bool sync=false, bool allow_smaller_width=false)
void monitorConsole(void)
void init_terminal_size(void)
void sendConsoleText(const QString &s)
void grabConsoleBuffer(CHAR_INFO *buf=0)
void setCursorColor(bool useForegoundColor, const QColor &color)
void setSelectionColor(const QColor &color)
QTimer * m_consoleWatcher
void report_status_message(const QString &)
void set_global_shortcuts(bool focus_out)
static const int BLINK_DELAY
text(const graphics_handle &mh, const graphics_handle &p)
void verticalScrollValueChanged(int value)
std::complex< double > w(std::complex< double > z, double relerr=0)
QString getSelection(void)
void clearSelection(void)
QConsoleView(QWinTerminalImpl *parent=0)
void setHorizontalScrollValue(int value)
void setForegroundColor(const QColor &color)
QColor foregroundColor(void) const
void mouseReleaseEvent(QMouseEvent *event)
void keyPressEvent(QKeyEvent *)
static QString translateKey(QKeyEvent *ev)
void setScrollBufferSize(int value)
void sendText(const QString &s)
returns the type of the matrix and caches it for future use Called with more than one the function will not attempt to guess the type if it is still unknown This is useful for debugging purposes The possible matrix types depend on whether the matrix is full or and can be one of the following able sis tem and mark type as unknown tem as the structure of the matrix explicitly gives this(Sparse matrices only) tem code
QColor selectionColor(void) const
void paintEvent(QPaintEvent *event)
void mouseTripleClickEvent(QMouseEvent *event)
the sparsity preserving column transformation such that that defines the pivoting threshold can be given in which case it defines the c
void focusInEvent(QFocusEvent *)
void set_screen_size_signal(int, int)
QPoint posToCell(const QPoint &pt)
void setSize(int columns, int lines)
void setBackgroundColor(const QColor &color)
void setBackgroundColor(const QColor &color)
void has_extra_interrupt(bool)
void setBlinkingCursorState(bool blink)
void viewPaintEvent(QConsoleView *, QPaintEvent *)
=val(i)}if ode{val(i)}occurs in table i
QColor cursorColor(void) const
OCTAVE_EXPORT octave_value_list or N dimensional array whose elements are all equal to the IEEE symbol zero divided by nd tex zero divided by nd ifnottex and any operation involving another NaN value(5+NaN).Note that NaN always compares not equal to NaN(NaN!
void dropEvent(QDropEvent *event)
void drawTextBackground(QPainter &p, int cx1, int cy1, int cx2, int cy2, int cw, int ch)
void setTerminalFont(const QFont &font)
void viewResizeEvent(QConsoleView *, QResizeEvent *)
bool eventFilter(QObject *obj, QEvent *ev)
void setForegroundColor(const QColor &color)
the element is set to zero In other the statement xample y
QWinTerminalImpl(QWidget *parent=0)
void pasteClipboard(void)
void dragEnterEvent(QDragEnterEvent *event)
void mouseMoveEvent(QMouseEvent *event)
void drawText(QPainter &p, int cx1, int cy1, int cx2, int cy2, int cw, int ch)
QConsoleThread(QWinTerminalImpl *console)
void setVerticalScrollValue(int value)
void setSelectionColor(const QColor &color)
void mouseDoubleClickEvent(QMouseEvent *event)
void mousePressEvent(QMouseEvent *event)
static void maybeSwapPoints(QPoint &begin, QPoint &end)
void updateSelection(void)
void wheelEvent(QWheelEvent *)
void updateVerticalScrollBar(void)
KeyboardCursorType m_cursorType
void drawCursor(QPainter &p)
void selectLine(const QPoint &cellPos)
void setCursorColor(bool useForegroundColor, const QColor &color)
void setupStandardIO(DWORD stdHandleId, int fd, const char *name, const char *devName)
F77_RET_T F77_REAL &F77_RET_T F77_DBLE &F77_RET_T F77_REAL &F77_RET_T F77_DBLE &F77_RET_T F77_REAL &F77_RET_T F77_DBLE &F77_RET_T const F77_REAL const F77_REAL F77_REAL &F77_RET_T const F77_DBLE const F77_DBLE F77_DBLE &F77_RET_T F77_REAL &F77_RET_T F77_DBLE &F77_RET_T F77_DBLE &F77_RET_T F77_REAL &F77_RET_T F77_REAL &F77_RET_T F77_DBLE &F77_RET_T const F77_DBLE F77_DBLE &F77_RET_T const F77_REAL F77_REAL &F77_RET_T F77_REAL F77_REAL &F77_RET_T F77_DBLE F77_DBLE &F77_RET_T const F77_DBLE * x
QTimer * m_blinkCursorTimer
QScrollBar * m_horizontalScrollBar
void blinkCursorEvent(void)