void milxQtPythonConsole::executeLine(bool storeOnly) { QTextCursor textCursor = this->textCursor(); textCursor.movePosition(QTextCursor::End); // Select the text from the command prompt until the end of the block // and get the selected text. textCursor.setPosition(commandPromptPosition()); textCursor.movePosition(QTextCursor::End, QTextCursor::KeepAnchor); QString code = textCursor.selectedText(); // i don't know where this trailing space is coming from, blast it! if (code.endsWith(" ")) { code.truncate(code.length()-1); } if (!code.isEmpty()) { // Update the history _history << code; _historyPosition = _history.count(); _currentMultiLineCode += code + "\n"; if (!storeOnly) { executeCode(_currentMultiLineCode); _currentMultiLineCode = ""; } } // Insert a new command prompt appendCommandPrompt(storeOnly); }
//----------------------------------------------------------------------------- void PythonQtScriptingConsole::handleTabCompletion() { QTextCursor textCursor = this->textCursor(); int pos = textCursor.position(); textCursor.setPosition(commandPromptPosition()); textCursor.movePosition(QTextCursor::End, QTextCursor::KeepAnchor); int startPos = textCursor.selectionStart(); int offset = pos-startPos; QString text = textCursor.selectedText(); QString textToComplete; int cur = offset; while(cur--) { QChar c = text.at(cur); if (c.isLetterOrNumber() || c == '.' || c == '_') { textToComplete.prepend(c); } else { break; } } QString lookup; QString compareText = textToComplete; int dot = compareText.lastIndexOf('.'); if (dot!=-1) { lookup = compareText.mid(0, dot); compareText = compareText.mid(dot+1, offset); } if (!lookup.isEmpty() || !compareText.isEmpty()) { compareText = compareText.toLower(); QStringList found; QStringList l = PythonQt::self()->introspection(_context, lookup, PythonQt::Anything); foreach (QString n, l) { if (n.toLower().startsWith(compareText)) { found << n; } } if (!found.isEmpty()) { _completer->setCompletionPrefix(compareText); _completer->setCompletionMode(QCompleter::PopupCompletion); _completer->setModel(new QStringListModel(found, _completer)); _completer->setCaseSensitivity(Qt::CaseInsensitive); QTextCursor c = this->textCursor(); c.movePosition(QTextCursor::StartOfWord); QRect cr = cursorRect(c); cr.setWidth(_completer->popup()->sizeHintForColumn(0) + _completer->popup()->verticalScrollBar()->sizeHint().width()); cr.translate(0,8); _completer->complete(cr); } else { _completer->popup()->hide(); } } else {