From e71c9807e3b3a00d9cf1d5668f622fb7aa767632 Mon Sep 17 00:00:00 2001 From: hjk Date: Tue, 27 Jan 2009 14:50:36 +0100 Subject: [PATCH 01/19] Fixes: fakevim: use proper QObject parent for handler Details: before that it was the plugin, so there was a lot of inactive handlers left around --- src/plugins/fakevim/fakevimhandler.cpp | 4 ---- src/plugins/fakevim/fakevimplugin.cpp | 2 +- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/src/plugins/fakevim/fakevimhandler.cpp b/src/plugins/fakevim/fakevimhandler.cpp index d8cbeff59e4..c77eb149b7d 100644 --- a/src/plugins/fakevim/fakevimhandler.cpp +++ b/src/plugins/fakevim/fakevimhandler.cpp @@ -2114,10 +2114,6 @@ FakeVimHandler::~FakeVimHandler() bool FakeVimHandler::eventFilter(QObject *ob, QEvent *ev) { - //if (ev->type() == QEvent::KeyPress || ev->type() == QEvent::ShortcutOverride) - // qDebug() << ob << ev->type() << qApp << d->editor() - // << QEvent::KeyPress << QEvent::ShortcutOverride; - if (ev->type() == QEvent::KeyPress && ob == d->editor()) return d->handleEvent(static_cast(ev)); diff --git a/src/plugins/fakevim/fakevimplugin.cpp b/src/plugins/fakevim/fakevimplugin.cpp index d1ab5b40630..329c965318f 100644 --- a/src/plugins/fakevim/fakevimplugin.cpp +++ b/src/plugins/fakevim/fakevimplugin.cpp @@ -187,7 +187,7 @@ void FakeVimPluginPrivate::installHandler(Core::IEditor *editor) { QWidget *widget = editor->widget(); - FakeVimHandler *handler = new FakeVimHandler(widget, this); + FakeVimHandler *handler = new FakeVimHandler(widget, widget); connect(handler, SIGNAL(extraInformationChanged(QString)), this, SLOT(showExtraInformation(QString))); From e33c21934a9a42fdd6938094cdeb8e9882e8847e Mon Sep 17 00:00:00 2001 From: Jens Bache-Wiig Date: Tue, 27 Jan 2009 15:01:25 +0100 Subject: [PATCH 02/19] Fixes: Kill alternate row colors Details: It was worth a try but it seems redundant, so we might as well kill it. --- src/plugins/projectexplorer/projecttreewidget.cpp | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/plugins/projectexplorer/projecttreewidget.cpp b/src/plugins/projectexplorer/projecttreewidget.cpp index 1da33786a2f..859cef01af1 100644 --- a/src/plugins/projectexplorer/projecttreewidget.cpp +++ b/src/plugins/projectexplorer/projecttreewidget.cpp @@ -74,13 +74,6 @@ public: setContextMenuPolicy(Qt::CustomContextMenu); setUniformRowHeights(true); setTextElideMode(Qt::ElideNone); - setAlternatingRowColors(true); - QPalette pal = palette(); - if (pal.base().color() == Qt::white) { // Leave dark themes as they are - pal.setBrush(QPalette::AlternateBase, QColor(239, 239, 239)); - setPalette(pal); - } - setProperty("AlternateEmpty", true); // Let Manhattan to override style default // setExpandsOnDoubleClick(false); } From fd90f88866f8b199d6e0d728015a56b48da59c1d Mon Sep 17 00:00:00 2001 From: hjk Date: Tue, 27 Jan 2009 15:09:56 +0100 Subject: [PATCH 03/19] Fixes: fakevim: disable main cursor in search mode --- src/plugins/fakevim/fakevimhandler.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/plugins/fakevim/fakevimhandler.cpp b/src/plugins/fakevim/fakevimhandler.cpp index c77eb149b7d..6eb7d3e1b01 100644 --- a/src/plugins/fakevim/fakevimhandler.cpp +++ b/src/plugins/fakevim/fakevimhandler.cpp @@ -780,6 +780,7 @@ bool FakeVimHandler::Private::handleCommandMode(int key, int unmodified, m_commandHistoryIndex = m_commandHistory.size() - 1; updateMiniBuffer(); } else if (key == '/' || key == '?') { + enterExMode(); // to get the cursor disabled m_mode = (key == '/') ? SearchForwardMode : SearchBackwardMode; m_commandBuffer.clear(); m_searchHistory.append(QString()); From 5e941eec3758c15f0a93abaed919b5baa12dd227 Mon Sep 17 00:00:00 2001 From: hjk Date: Tue, 27 Jan 2009 15:17:03 +0100 Subject: [PATCH 04/19] Fixes: fakevim: make 'd' use the yank buffer also in visual line mode Details: --- src/plugins/fakevim/fakevimhandler.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/plugins/fakevim/fakevimhandler.cpp b/src/plugins/fakevim/fakevimhandler.cpp index 6eb7d3e1b01..7e24d7d5068 100644 --- a/src/plugins/fakevim/fakevimhandler.cpp +++ b/src/plugins/fakevim/fakevimhandler.cpp @@ -880,13 +880,12 @@ bool FakeVimHandler::Private::handleCommandMode(int key, int unmodified, m_opcount = m_mvcount; m_mvcount.clear(); m_submode = DeleteSubMode; - } else if (key == 'd') { - //setAnchor(); + } else if (key == 'd' && m_visualMode == VisualLineMode) { leaveVisualMode(); int beginLine = lineForPosition(m_marks['<']); int endLine = lineForPosition(m_marks['>']); selectRange(beginLine, endLine); - recordRemoveSelectedText(); + m_registers[m_register] = recordRemoveSelectedText(); } else if (key == 'D') { setAnchor(); recordBeginGroup(); From 5dbcc615c210ad24a9abff4c7340ae64a65b75ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thorbj=C3=B8rn=20Lindeijer?= Date: Tue, 27 Jan 2009 15:12:32 +0100 Subject: [PATCH 05/19] Split up general text editor settings The page had grown too large so now the display settings have been split off onto their own page. --- .../cpptools/completionsettingspage.ui | 61 +++-- .../texteditor/behaviorsettingspage.cpp | 187 ++++++++++++++ ...lsettingspage.h => behaviorsettingspage.h} | 27 +- ...ettingspage.ui => behaviorsettingspage.ui} | 89 +------ .../texteditor/displaysettingspage.cpp | 153 +++++++++++ src/plugins/texteditor/displaysettingspage.h | 87 +++++++ src/plugins/texteditor/displaysettingspage.ui | 116 +++++++++ .../texteditor/generalsettingspage.cpp | 237 ------------------ src/plugins/texteditor/texteditor.pro | 11 +- src/plugins/texteditor/texteditorsettings.cpp | 46 ++-- src/plugins/texteditor/texteditorsettings.h | 8 +- 11 files changed, 637 insertions(+), 385 deletions(-) create mode 100644 src/plugins/texteditor/behaviorsettingspage.cpp rename src/plugins/texteditor/{generalsettingspage.h => behaviorsettingspage.h} (77%) rename src/plugins/texteditor/{generalsettingspage.ui => behaviorsettingspage.ui} (78%) create mode 100644 src/plugins/texteditor/displaysettingspage.cpp create mode 100644 src/plugins/texteditor/displaysettingspage.h create mode 100644 src/plugins/texteditor/displaysettingspage.ui delete mode 100644 src/plugins/texteditor/generalsettingspage.cpp diff --git a/src/plugins/cpptools/completionsettingspage.ui b/src/plugins/cpptools/completionsettingspage.ui index 372c225943f..c71a2abc821 100644 --- a/src/plugins/cpptools/completionsettingspage.ui +++ b/src/plugins/cpptools/completionsettingspage.ui @@ -15,33 +15,42 @@ - - - &Case-sensitive completion - - - true - - - - - - - &Automatically insert braces - - - true - - - - - - - Autocomplete common &prefix - - - true + + + Completion Settings + + + + + &Case-sensitive completion + + + true + + + + + + + &Automatically insert braces + + + true + + + + + + + Autocomplete common &prefix + + + true + + + + diff --git a/src/plugins/texteditor/behaviorsettingspage.cpp b/src/plugins/texteditor/behaviorsettingspage.cpp new file mode 100644 index 00000000000..be3cf2ddf27 --- /dev/null +++ b/src/plugins/texteditor/behaviorsettingspage.cpp @@ -0,0 +1,187 @@ +/*************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Qt Software Information (qt-info@nokia.com) +** +** +** Non-Open Source Usage +** +** Licensees may use this file in accordance with the Qt Beta Version +** License Agreement, Agreement version 2.2 provided with the Software or, +** alternatively, in accordance with the terms contained in a written +** agreement between you and Nokia. +** +** GNU General Public License Usage +** +** Alternatively, this file may be used under the terms of the GNU General +** Public License versions 2.0 or 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the packaging +** of this file. Please review the following information to ensure GNU +** General Public Licensing requirements will be met: +** +** http://www.fsf.org/licensing/licenses/info/GPLv2.html and +** http://www.gnu.org/copyleft/gpl.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt GPL Exception +** version 1.3, included in the file GPL_EXCEPTION.txt in this package. +** +***************************************************************************/ + +#include "behaviorsettingspage.h" +#include "interactionsettings.h" +#include "storagesettings.h" +#include "tabsettings.h" +#include "ui_behaviorsettingspage.h" + +#include + +#include + +using namespace TextEditor; + +struct BehaviorSettingsPage::BehaviorSettingsPagePrivate +{ + explicit BehaviorSettingsPagePrivate(const BehaviorSettingsPageParameters &p); + + const BehaviorSettingsPageParameters m_parameters; + Ui::BehaviorSettingsPage m_page; + TabSettings m_tabSettings; + StorageSettings m_storageSettings; + InteractionSettings m_interactionSettings; +}; + +BehaviorSettingsPage::BehaviorSettingsPagePrivate::BehaviorSettingsPagePrivate + (const BehaviorSettingsPageParameters &p) + : m_parameters(p) +{ + if (const QSettings *s = Core::ICore::instance()->settings()) { + m_tabSettings.fromSettings(m_parameters.settingsPrefix, s); + m_storageSettings.fromSettings(m_parameters.settingsPrefix, s); + m_interactionSettings.fromSettings(m_parameters.settingsPrefix, s); + } +} + +BehaviorSettingsPage::BehaviorSettingsPage(const BehaviorSettingsPageParameters &p, + QObject *parent) + : Core::IOptionsPage(parent), + m_d(new BehaviorSettingsPagePrivate(p)) +{ +} + +BehaviorSettingsPage::~BehaviorSettingsPage() +{ + delete m_d; +} + +QString BehaviorSettingsPage::name() const +{ + return m_d->m_parameters.name; +} + +QString BehaviorSettingsPage::category() const +{ + return m_d->m_parameters.category; +} + +QString BehaviorSettingsPage::trCategory() const +{ + return m_d->m_parameters.trCategory; +} + +QWidget *BehaviorSettingsPage::createPage(QWidget *parent) +{ + QWidget *w = new QWidget(parent); + m_d->m_page.setupUi(w); + settingsToUI(); + return w; +} + +void BehaviorSettingsPage::apply() +{ + TabSettings newTabSettings; + StorageSettings newStorageSettings; + InteractionSettings newInteractionSettings; + + settingsFromUI(newTabSettings, newStorageSettings, newInteractionSettings); + + Core::ICore *core = Core::ICore::instance(); + QSettings *s = core->settings(); + + if (newTabSettings != m_d->m_tabSettings) { + m_d->m_tabSettings = newTabSettings; + if (s) + m_d->m_tabSettings.toSettings(m_d->m_parameters.settingsPrefix, s); + + emit tabSettingsChanged(newTabSettings); + } + + if (newStorageSettings != m_d->m_storageSettings) { + m_d->m_storageSettings = newStorageSettings; + if (s) + m_d->m_storageSettings.toSettings(m_d->m_parameters.settingsPrefix, s); + + emit storageSettingsChanged(newStorageSettings); + } + + if (newInteractionSettings != m_d->m_interactionSettings) { + m_d->m_interactionSettings = newInteractionSettings; + if (s) + m_d->m_interactionSettings.toSettings(m_d->m_parameters.settingsPrefix, s); + } +} + +void BehaviorSettingsPage::settingsFromUI(TabSettings &tabSettings, + StorageSettings &storageSettings, + InteractionSettings &interactionSettings) const +{ + tabSettings.m_spacesForTabs = m_d->m_page.insertSpaces->isChecked(); + tabSettings.m_autoIndent = m_d->m_page.autoIndent->isChecked(); + tabSettings.m_smartBackspace = m_d->m_page.smartBackspace->isChecked(); + tabSettings.m_tabSize = m_d->m_page.tabSize->value(); + tabSettings.m_indentSize = m_d->m_page.indentSize->value(); + + storageSettings.m_cleanWhitespace = m_d->m_page.cleanWhitespace->isChecked(); + storageSettings.m_inEntireDocument = m_d->m_page.inEntireDocument->isChecked(); + storageSettings.m_cleanIndentation = m_d->m_page.cleanIndentation->isChecked(); + storageSettings.m_addFinalNewLine = m_d->m_page.addFinalNewLine->isChecked(); + + interactionSettings.m_useVim = m_d->m_page.useVim->isChecked(); +} + +void BehaviorSettingsPage::settingsToUI() +{ + const TabSettings &tabSettings = m_d->m_tabSettings; + m_d->m_page.insertSpaces->setChecked(tabSettings.m_spacesForTabs); + m_d->m_page.autoIndent->setChecked(tabSettings.m_autoIndent); + m_d->m_page.smartBackspace->setChecked(tabSettings.m_smartBackspace); + m_d->m_page.tabSize->setValue(tabSettings.m_tabSize); + m_d->m_page.indentSize->setValue(tabSettings.m_indentSize); + + const StorageSettings &storageSettings = m_d->m_storageSettings; + m_d->m_page.cleanWhitespace->setChecked(storageSettings.m_cleanWhitespace); + m_d->m_page.inEntireDocument->setChecked(storageSettings.m_inEntireDocument); + m_d->m_page.cleanIndentation->setChecked(storageSettings.m_cleanIndentation); + m_d->m_page.addFinalNewLine->setChecked(storageSettings.m_addFinalNewLine); + + const InteractionSettings &interactionSettings = m_d->m_interactionSettings; + m_d->m_page.useVim->setChecked(interactionSettings.m_useVim); +} + +TabSettings BehaviorSettingsPage::tabSettings() const +{ + return m_d->m_tabSettings; +} + +StorageSettings BehaviorSettingsPage::storageSettings() const +{ + return m_d->m_storageSettings; +} + +InteractionSettings BehaviorSettingsPage::interactionSettings() const +{ + return m_d->m_interactionSettings; +} diff --git a/src/plugins/texteditor/generalsettingspage.h b/src/plugins/texteditor/behaviorsettingspage.h similarity index 77% rename from src/plugins/texteditor/generalsettingspage.h rename to src/plugins/texteditor/behaviorsettingspage.h index 1f70fd6b0b0..68f7b408296 100644 --- a/src/plugins/texteditor/generalsettingspage.h +++ b/src/plugins/texteditor/behaviorsettingspage.h @@ -31,8 +31,8 @@ ** ***************************************************************************/ -#ifndef GENERALSETTINGSPAGE_H -#define GENERALSETTINGSPAGE_H +#ifndef BEHAVIORSETTINGSPAGE_H +#define BEHAVIORSETTINGSPAGE_H #include "texteditor_global.h" @@ -44,10 +44,9 @@ namespace TextEditor { struct TabSettings; struct StorageSettings; -struct DisplaySettings; struct InteractionSettings; -struct TEXTEDITOR_EXPORT GeneralSettingsPageParameters +struct BehaviorSettingsPageParameters { QString name; QString category; @@ -55,13 +54,13 @@ struct TEXTEDITOR_EXPORT GeneralSettingsPageParameters QString settingsPrefix; }; -class TEXTEDITOR_EXPORT GeneralSettingsPage : public Core::IOptionsPage +class BehaviorSettingsPage : public Core::IOptionsPage { Q_OBJECT public: - GeneralSettingsPage(const GeneralSettingsPageParameters &p, QObject *parent); - virtual ~GeneralSettingsPage(); + BehaviorSettingsPage(const BehaviorSettingsPageParameters &p, QObject *parent); + virtual ~BehaviorSettingsPage(); // IOptionsPage QString name() const; @@ -74,27 +73,21 @@ public: TabSettings tabSettings() const; StorageSettings storageSettings() const; - DisplaySettings displaySettings() const; InteractionSettings interactionSettings() const; - void setDisplaySettings(const DisplaySettings &); - signals: void tabSettingsChanged(const TextEditor::TabSettings &); void storageSettingsChanged(const TextEditor::StorageSettings &); - void displaySettingsChanged(const TextEditor::DisplaySettings &); private: void settingsFromUI(TabSettings &rc, StorageSettings &storageSettings, - DisplaySettings &displaySettings, - InteractionSettings &interactionSettings - ) const; + InteractionSettings &interactionSettings) const; void settingsToUI(); - struct GeneralSettingsPagePrivate; - GeneralSettingsPagePrivate *m_d; + struct BehaviorSettingsPagePrivate; + BehaviorSettingsPagePrivate *m_d; }; } // namespace TextEditor -#endif // GENERALSETTINGSPAGE_H +#endif // BEHAVIORSETTINGSPAGE_H diff --git a/src/plugins/texteditor/generalsettingspage.ui b/src/plugins/texteditor/behaviorsettingspage.ui similarity index 78% rename from src/plugins/texteditor/generalsettingspage.ui rename to src/plugins/texteditor/behaviorsettingspage.ui index 301ee8bdf55..a2fb68e5b20 100644 --- a/src/plugins/texteditor/generalsettingspage.ui +++ b/src/plugins/texteditor/behaviorsettingspage.ui @@ -1,13 +1,13 @@ - TextEditor::generalSettingsPage - + TextEditor::BehaviorSettingsPage + 0 0 - 514 - 475 + 484 + 398 @@ -255,71 +255,6 @@ - - - Display Settings - - - - - - - - Display right &margin at column - - - - - - - false - - - 999 - - - - - - - - - Enable text &wrapping - - - - - - - Display line &numbers - - - - - - - &Visualize whitespace - - - - - - - Display &folding markers - - - - - - - Highlight current &line - - - - - - - Interaction Settings @@ -335,7 +270,7 @@ - + Qt::Vertical @@ -373,20 +308,14 @@ toggled(bool) cleanIndentation setEnabled(bool) - - - showWrapColumn - toggled(bool) - wrapColumn - setEnabled(bool) - 399 - 308 + 20 + 20 - 474 - 308 + 20 + 20 diff --git a/src/plugins/texteditor/displaysettingspage.cpp b/src/plugins/texteditor/displaysettingspage.cpp new file mode 100644 index 00000000000..7f47290b3f4 --- /dev/null +++ b/src/plugins/texteditor/displaysettingspage.cpp @@ -0,0 +1,153 @@ +/*************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Qt Software Information (qt-info@nokia.com) +** +** +** Non-Open Source Usage +** +** Licensees may use this file in accordance with the Qt Beta Version +** License Agreement, Agreement version 2.2 provided with the Software or, +** alternatively, in accordance with the terms contained in a written +** agreement between you and Nokia. +** +** GNU General Public License Usage +** +** Alternatively, this file may be used under the terms of the GNU General +** Public License versions 2.0 or 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the packaging +** of this file. Please review the following information to ensure GNU +** General Public Licensing requirements will be met: +** +** http://www.fsf.org/licensing/licenses/info/GPLv2.html and +** http://www.gnu.org/copyleft/gpl.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt GPL Exception +** version 1.3, included in the file GPL_EXCEPTION.txt in this package. +** +***************************************************************************/ + +#include "displaysettingspage.h" +#include "displaysettings.h" +#include "ui_displaysettingspage.h" + +#include + +#include + +using namespace TextEditor; + +struct DisplaySettingsPage::DisplaySettingsPagePrivate +{ + explicit DisplaySettingsPagePrivate(const DisplaySettingsPageParameters &p); + + const DisplaySettingsPageParameters m_parameters; + Ui::DisplaySettingsPage m_page; + DisplaySettings m_displaySettings; +}; + +DisplaySettingsPage::DisplaySettingsPagePrivate::DisplaySettingsPagePrivate + (const DisplaySettingsPageParameters &p) + : m_parameters(p) +{ + if (const QSettings *s = Core::ICore::instance()->settings()) { + m_displaySettings.fromSettings(m_parameters.settingsPrefix, s); + } +} + +DisplaySettingsPage::DisplaySettingsPage(const DisplaySettingsPageParameters &p, + QObject *parent) + : Core::IOptionsPage(parent), + m_d(new DisplaySettingsPagePrivate(p)) +{ +} + +DisplaySettingsPage::~DisplaySettingsPage() +{ + delete m_d; +} + +QString DisplaySettingsPage::name() const +{ + return m_d->m_parameters.name; +} + +QString DisplaySettingsPage::category() const +{ + return m_d->m_parameters.category; +} + +QString DisplaySettingsPage::trCategory() const +{ + return m_d->m_parameters.trCategory; +} + +QWidget *DisplaySettingsPage::createPage(QWidget *parent) +{ + QWidget *w = new QWidget(parent); + m_d->m_page.setupUi(w); + settingsToUI(); + return w; +} + +void DisplaySettingsPage::apply() +{ + DisplaySettings newDisplaySettings; + + settingsFromUI(newDisplaySettings); + + Core::ICore *core = Core::ICore::instance(); + QSettings *s = core->settings(); + + if (newDisplaySettings != m_d->m_displaySettings) { + m_d->m_displaySettings = newDisplaySettings; + if (s) + m_d->m_displaySettings.toSettings(m_d->m_parameters.settingsPrefix, s); + + emit displaySettingsChanged(newDisplaySettings); + } +} + +void DisplaySettingsPage::settingsFromUI(DisplaySettings &displaySettings) const +{ + displaySettings.m_displayLineNumbers = m_d->m_page.displayLineNumbers->isChecked(); + displaySettings.m_textWrapping = m_d->m_page.enableTextWrapping->isChecked(); + displaySettings.m_showWrapColumn = m_d->m_page.showWrapColumn->isChecked(); + displaySettings.m_wrapColumn = m_d->m_page.wrapColumn->value(); + displaySettings.m_visualizeWhitespace = m_d->m_page.visualizeWhitespace->isChecked(); + displaySettings.m_displayFoldingMarkers = m_d->m_page.displayFoldingMarkers->isChecked(); + displaySettings.m_highlightCurrentLine = m_d->m_page.highlightCurrentLine->isChecked(); +} + +void DisplaySettingsPage::settingsToUI() +{ + const DisplaySettings &displaySettings = m_d->m_displaySettings; + m_d->m_page.displayLineNumbers->setChecked(displaySettings.m_displayLineNumbers); + m_d->m_page.enableTextWrapping->setChecked(displaySettings.m_textWrapping); + m_d->m_page.showWrapColumn->setChecked(displaySettings.m_showWrapColumn); + m_d->m_page.wrapColumn->setValue(displaySettings.m_wrapColumn); + m_d->m_page.visualizeWhitespace->setChecked(displaySettings.m_visualizeWhitespace); + m_d->m_page.displayFoldingMarkers->setChecked(displaySettings.m_displayFoldingMarkers); + m_d->m_page.highlightCurrentLine->setChecked(displaySettings.m_highlightCurrentLine); +} + +DisplaySettings DisplaySettingsPage::displaySettings() const +{ + return m_d->m_displaySettings; +} + +void DisplaySettingsPage::setDisplaySettings(const DisplaySettings &newDisplaySettings) +{ + if (newDisplaySettings != m_d->m_displaySettings) { + m_d->m_displaySettings = newDisplaySettings; + Core::ICore *core = Core::ICore::instance(); + if (QSettings *s = core->settings()) + m_d->m_displaySettings.toSettings(m_d->m_parameters.settingsPrefix, s); + + emit displaySettingsChanged(newDisplaySettings); + } +} diff --git a/src/plugins/texteditor/displaysettingspage.h b/src/plugins/texteditor/displaysettingspage.h new file mode 100644 index 00000000000..3337cafa922 --- /dev/null +++ b/src/plugins/texteditor/displaysettingspage.h @@ -0,0 +1,87 @@ +/*************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Qt Software Information (qt-info@nokia.com) +** +** +** Non-Open Source Usage +** +** Licensees may use this file in accordance with the Qt Beta Version +** License Agreement, Agreement version 2.2 provided with the Software or, +** alternatively, in accordance with the terms contained in a written +** agreement between you and Nokia. +** +** GNU General Public License Usage +** +** Alternatively, this file may be used under the terms of the GNU General +** Public License versions 2.0 or 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the packaging +** of this file. Please review the following information to ensure GNU +** General Public Licensing requirements will be met: +** +** http://www.fsf.org/licensing/licenses/info/GPLv2.html and +** http://www.gnu.org/copyleft/gpl.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt GPL Exception +** version 1.3, included in the file GPL_EXCEPTION.txt in this package. +** +***************************************************************************/ + +#ifndef DISPLAYSETTINGSPAGE_H +#define DISPLAYSETTINGSPAGE_H + +#include "texteditor_global.h" + +#include + +#include + +namespace TextEditor { + +struct DisplaySettings; + +struct DisplaySettingsPageParameters +{ + QString name; + QString category; + QString trCategory; + QString settingsPrefix; +}; + +class DisplaySettingsPage : public Core::IOptionsPage +{ + Q_OBJECT + +public: + DisplaySettingsPage(const DisplaySettingsPageParameters &p, QObject *parent); + virtual ~DisplaySettingsPage(); + + // IOptionsPage + QString name() const; + QString category() const; + QString trCategory() const; + + QWidget *createPage(QWidget *parent); + void apply(); + void finish() { } + + DisplaySettings displaySettings() const; + void setDisplaySettings(const DisplaySettings &); + +signals: + void displaySettingsChanged(const TextEditor::DisplaySettings &); + +private: + void settingsFromUI(DisplaySettings &displaySettings) const; + void settingsToUI(); + struct DisplaySettingsPagePrivate; + DisplaySettingsPagePrivate *m_d; +}; + +} // namespace TextEditor + +#endif // DISPLAYSETTINGSPAGE_H diff --git a/src/plugins/texteditor/displaysettingspage.ui b/src/plugins/texteditor/displaysettingspage.ui new file mode 100644 index 00000000000..30fdf5cf93b --- /dev/null +++ b/src/plugins/texteditor/displaysettingspage.ui @@ -0,0 +1,116 @@ + + + TextEditor::DisplaySettingsPage + + + + 0 + 0 + 514 + 194 + + + + Form + + + + + + Display Settings + + + + + + + + Display right &margin at column + + + + + + + false + + + 999 + + + + + + + + + Enable text &wrapping + + + + + + + Display line &numbers + + + + + + + &Visualize whitespace + + + + + + + Display &folding markers + + + + + + + Highlight current &line + + + + + + + + + + Qt::Vertical + + + + 20 + 8 + + + + + + + + + + showWrapColumn + toggled(bool) + wrapColumn + setEnabled(bool) + + + 399 + 308 + + + 474 + 308 + + + + + diff --git a/src/plugins/texteditor/generalsettingspage.cpp b/src/plugins/texteditor/generalsettingspage.cpp deleted file mode 100644 index 28400d10ebf..00000000000 --- a/src/plugins/texteditor/generalsettingspage.cpp +++ /dev/null @@ -1,237 +0,0 @@ -/*************************************************************************** -** -** This file is part of Qt Creator -** -** Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). -** -** Contact: Qt Software Information (qt-info@nokia.com) -** -** -** Non-Open Source Usage -** -** Licensees may use this file in accordance with the Qt Beta Version -** License Agreement, Agreement version 2.2 provided with the Software or, -** alternatively, in accordance with the terms contained in a written -** agreement between you and Nokia. -** -** GNU General Public License Usage -** -** Alternatively, this file may be used under the terms of the GNU General -** Public License versions 2.0 or 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the packaging -** of this file. Please review the following information to ensure GNU -** General Public Licensing requirements will be met: -** -** http://www.fsf.org/licensing/licenses/info/GPLv2.html and -** http://www.gnu.org/copyleft/gpl.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt GPL Exception -** version 1.3, included in the file GPL_EXCEPTION.txt in this package. -** -***************************************************************************/ - -#include "displaysettings.h" -#include "generalsettingspage.h" -#include "interactionsettings.h" -#include "storagesettings.h" -#include "tabsettings.h" -#include "ui_generalsettingspage.h" - -#include - -#include -#include - -using namespace TextEditor; - -struct GeneralSettingsPage::GeneralSettingsPagePrivate -{ - explicit GeneralSettingsPagePrivate(const GeneralSettingsPageParameters &p); - - const GeneralSettingsPageParameters m_parameters; - Ui::generalSettingsPage m_page; - TabSettings m_tabSettings; - StorageSettings m_storageSettings; - DisplaySettings m_displaySettings; - InteractionSettings m_interactionSettings; -}; - -GeneralSettingsPage::GeneralSettingsPagePrivate::GeneralSettingsPagePrivate - (const GeneralSettingsPageParameters &p) - : m_parameters(p) -{ - if (const QSettings *s = Core::ICore::instance()->settings()) { - m_tabSettings.fromSettings(m_parameters.settingsPrefix, s); - m_storageSettings.fromSettings(m_parameters.settingsPrefix, s); - m_displaySettings.fromSettings(m_parameters.settingsPrefix, s); - m_interactionSettings.fromSettings(m_parameters.settingsPrefix, s); - } -} - -GeneralSettingsPage::GeneralSettingsPage(const GeneralSettingsPageParameters &p, - QObject *parent) - : Core::IOptionsPage(parent), - m_d(new GeneralSettingsPagePrivate(p)) -{ -} - -GeneralSettingsPage::~GeneralSettingsPage() -{ - delete m_d; -} - -QString GeneralSettingsPage::name() const -{ - return m_d->m_parameters.name; -} - -QString GeneralSettingsPage::category() const -{ - return m_d->m_parameters.category; -} - -QString GeneralSettingsPage::trCategory() const -{ - return m_d->m_parameters.trCategory; -} - -QWidget *GeneralSettingsPage::createPage(QWidget *parent) -{ - QWidget *w = new QWidget(parent); - m_d->m_page.setupUi(w); - settingsToUI(); - return w; -} - -void GeneralSettingsPage::apply() -{ - TabSettings newTabSettings; - StorageSettings newStorageSettings; - DisplaySettings newDisplaySettings; - InteractionSettings newInteractionSettings; - - settingsFromUI(newTabSettings, newStorageSettings, newDisplaySettings, - newInteractionSettings); - - Core::ICore *core = Core::ICore::instance(); - QSettings *s = core->settings(); - - if (newTabSettings != m_d->m_tabSettings) { - m_d->m_tabSettings = newTabSettings; - if (s) - m_d->m_tabSettings.toSettings(m_d->m_parameters.settingsPrefix, s); - - emit tabSettingsChanged(newTabSettings); - } - - if (newStorageSettings != m_d->m_storageSettings) { - m_d->m_storageSettings = newStorageSettings; - if (s) - m_d->m_storageSettings.toSettings(m_d->m_parameters.settingsPrefix, s); - - emit storageSettingsChanged(newStorageSettings); - } - - if (newDisplaySettings != m_d->m_displaySettings) { - m_d->m_displaySettings = newDisplaySettings; - if (s) - m_d->m_displaySettings.toSettings(m_d->m_parameters.settingsPrefix, s); - - emit displaySettingsChanged(newDisplaySettings); - } - - if (newInteractionSettings != m_d->m_interactionSettings) { - m_d->m_interactionSettings = newInteractionSettings; - if (s) - m_d->m_interactionSettings.toSettings(m_d->m_parameters.settingsPrefix, s); - - } -} - -void GeneralSettingsPage::settingsFromUI(TabSettings &rc, - StorageSettings &storageSettings, - DisplaySettings &displaySettings, - InteractionSettings &interactionSettings) const -{ - rc.m_spacesForTabs = m_d->m_page.insertSpaces->isChecked(); - rc.m_autoIndent = m_d->m_page.autoIndent->isChecked(); - rc.m_smartBackspace = m_d->m_page.smartBackspace->isChecked(); - rc.m_tabSize = m_d->m_page.tabSize->value(); - rc.m_indentSize = m_d->m_page.indentSize->value(); - - storageSettings.m_cleanWhitespace = m_d->m_page.cleanWhitespace->isChecked(); - storageSettings.m_inEntireDocument = m_d->m_page.inEntireDocument->isChecked(); - storageSettings.m_cleanIndentation = m_d->m_page.cleanIndentation->isChecked(); - storageSettings.m_addFinalNewLine = m_d->m_page.addFinalNewLine->isChecked(); - - displaySettings.m_displayLineNumbers = m_d->m_page.displayLineNumbers->isChecked(); - displaySettings.m_textWrapping = m_d->m_page.enableTextWrapping->isChecked(); - displaySettings.m_showWrapColumn = m_d->m_page.showWrapColumn->isChecked(); - displaySettings.m_wrapColumn = m_d->m_page.wrapColumn->value(); - displaySettings.m_visualizeWhitespace = m_d->m_page.visualizeWhitespace->isChecked(); - displaySettings.m_displayFoldingMarkers = m_d->m_page.displayFoldingMarkers->isChecked(); - displaySettings.m_highlightCurrentLine = m_d->m_page.highlightCurrentLine->isChecked(); - - interactionSettings.m_useVim = m_d->m_page.useVim->isChecked(); -} - -void GeneralSettingsPage::settingsToUI() -{ - TabSettings rc = m_d->m_tabSettings; - m_d->m_page.insertSpaces->setChecked(rc.m_spacesForTabs); - m_d->m_page.autoIndent->setChecked(rc.m_autoIndent); - m_d->m_page.smartBackspace->setChecked(rc.m_smartBackspace); - m_d->m_page.tabSize->setValue(rc.m_tabSize); - m_d->m_page.indentSize->setValue(rc.m_indentSize); - - StorageSettings storageSettings = m_d->m_storageSettings; - m_d->m_page.cleanWhitespace->setChecked(storageSettings.m_cleanWhitespace); - m_d->m_page.inEntireDocument->setChecked(storageSettings.m_inEntireDocument); - m_d->m_page.cleanIndentation->setChecked(storageSettings.m_cleanIndentation); - m_d->m_page.addFinalNewLine->setChecked(storageSettings.m_addFinalNewLine); - - DisplaySettings displaySettings = m_d->m_displaySettings; - m_d->m_page.displayLineNumbers->setChecked(displaySettings.m_displayLineNumbers); - m_d->m_page.enableTextWrapping->setChecked(displaySettings.m_textWrapping); - m_d->m_page.showWrapColumn->setChecked(displaySettings.m_showWrapColumn); - m_d->m_page.wrapColumn->setValue(displaySettings.m_wrapColumn); - m_d->m_page.visualizeWhitespace->setChecked(displaySettings.m_visualizeWhitespace); - m_d->m_page.displayFoldingMarkers->setChecked(displaySettings.m_displayFoldingMarkers); - m_d->m_page.highlightCurrentLine->setChecked(displaySettings.m_highlightCurrentLine); - - InteractionSettings interactionSettings = m_d->m_interactionSettings; - m_d->m_page.useVim->setChecked(interactionSettings.m_useVim); -} - -TabSettings GeneralSettingsPage::tabSettings() const -{ - return m_d->m_tabSettings; -} - -StorageSettings GeneralSettingsPage::storageSettings() const -{ - return m_d->m_storageSettings; -} - -DisplaySettings GeneralSettingsPage::displaySettings() const -{ - return m_d->m_displaySettings; -} - -InteractionSettings GeneralSettingsPage::interactionSettings() const -{ - return m_d->m_interactionSettings; -} - -void GeneralSettingsPage::setDisplaySettings(const DisplaySettings &newDisplaySettings) -{ - if (newDisplaySettings != m_d->m_displaySettings) { - m_d->m_displaySettings = newDisplaySettings; - Core::ICore *core = Core::ICore::instance(); - if (QSettings *s = core->settings()) - m_d->m_displaySettings.toSettings(m_d->m_parameters.settingsPrefix, s); - - emit displaySettingsChanged(newDisplaySettings); - } -} diff --git a/src/plugins/texteditor/texteditor.pro b/src/plugins/texteditor/texteditor.pro index 56c39604fb4..0ec180bc06a 100644 --- a/src/plugins/texteditor/texteditor.pro +++ b/src/plugins/texteditor/texteditor.pro @@ -9,6 +9,7 @@ SOURCES += texteditorplugin.cpp \ plaintexteditorfactory.cpp \ basetextdocument.cpp \ basetexteditor.cpp \ + behaviorsettingspage.cpp \ texteditoractionhandler.cpp \ completionsupport.cpp \ completionwidget.cpp \ @@ -17,10 +18,10 @@ SOURCES += texteditorplugin.cpp \ tabsettings.cpp \ storagesettings.cpp \ displaysettings.cpp \ + displaysettingspage.cpp \ fontsettings.cpp \ textblockiterator.cpp \ linenumberfilter.cpp \ - generalsettingspage.cpp \ basetextmark.cpp \ findinfiles.cpp \ basefilefind.cpp \ @@ -32,6 +33,7 @@ HEADERS += texteditorplugin.h \ plaintexteditorfactory.h \ basetexteditor_p.h \ basetextdocument.h \ + behaviorsettingspage.h \ completionsupport.h \ completionwidget.h \ basetexteditor.h \ @@ -43,18 +45,19 @@ HEADERS += texteditorplugin.h \ tabsettings.h \ storagesettings.h \ displaysettings.h \ + displaysettingspage.h \ fontsettings.h \ textblockiterator.h \ itexteditable.h \ itexteditor.h \ linenumberfilter.h \ texteditor_global.h \ - generalsettingspage.h \ basetextmark.h \ findinfiles.h \ basefilefind.h \ texteditorsettings.h \ codecselector.h -FORMS += fontsettingspage.ui \ - generalsettingspage.ui +FORMS += behaviorsettingspage.ui \ + displaysettingspage.ui \ + fontsettingspage.ui RESOURCES += texteditor.qrc diff --git a/src/plugins/texteditor/texteditorsettings.cpp b/src/plugins/texteditor/texteditorsettings.cpp index 999ad0d8ae7..a8f6019597d 100644 --- a/src/plugins/texteditor/texteditorsettings.cpp +++ b/src/plugins/texteditor/texteditorsettings.cpp @@ -33,8 +33,9 @@ #include "texteditorsettings.h" +#include "behaviorsettingspage.h" #include "displaysettings.h" -#include "generalsettingspage.h" +#include "displaysettingspage.h" #include "fontsettingspage.h" #include "storagesettings.h" #include "tabsettings.h" @@ -93,34 +94,43 @@ TextEditorSettings::TextEditorSettings(QObject *parent) m_fontSettingsPage = new FontSettingsPage(formatDescriptions, QLatin1String("TextEditor"), - tr("Text Editor")); + tr("Text Editor"), + this); pm->addObject(m_fontSettingsPage); - // Add the GUI used to configure the tab, storage and display settings - TextEditor::GeneralSettingsPageParameters generalSettingsPageParameters; - generalSettingsPageParameters.name = tr("General"); - generalSettingsPageParameters.category = QLatin1String("TextEditor"); - generalSettingsPageParameters.trCategory = tr("Text Editor"); - generalSettingsPageParameters.settingsPrefix = QLatin1String("text"); - m_generalSettingsPage = new GeneralSettingsPage(generalSettingsPageParameters, this); - pm->addObject(m_generalSettingsPage); + // Add the GUI used to configure the tab, storage and interaction settings + TextEditor::BehaviorSettingsPageParameters behaviorSettingsPageParameters; + behaviorSettingsPageParameters.name = tr("Behavior"); + behaviorSettingsPageParameters.category = QLatin1String("TextEditor"); + behaviorSettingsPageParameters.trCategory = tr("Text Editor"); + behaviorSettingsPageParameters.settingsPrefix = QLatin1String("text"); + m_behaviorSettingsPage = new BehaviorSettingsPage(behaviorSettingsPageParameters, this); + pm->addObject(m_behaviorSettingsPage); + + TextEditor::DisplaySettingsPageParameters displaySettingsPageParameters; + displaySettingsPageParameters.name = tr("Display"); + displaySettingsPageParameters.category = QLatin1String("TextEditor"); + displaySettingsPageParameters.trCategory = tr("Text Editor"); + displaySettingsPageParameters.settingsPrefix = QLatin1String("text"); + m_displaySettingsPage = new DisplaySettingsPage(displaySettingsPageParameters, this); + pm->addObject(m_displaySettingsPage); connect(m_fontSettingsPage, SIGNAL(changed(TextEditor::FontSettings)), this, SIGNAL(fontSettingsChanged(TextEditor::FontSettings))); - connect(m_generalSettingsPage, SIGNAL(tabSettingsChanged(TextEditor::TabSettings)), + connect(m_behaviorSettingsPage, SIGNAL(tabSettingsChanged(TextEditor::TabSettings)), this, SIGNAL(tabSettingsChanged(TextEditor::TabSettings))); - connect(m_generalSettingsPage, SIGNAL(storageSettingsChanged(TextEditor::StorageSettings)), + connect(m_behaviorSettingsPage, SIGNAL(storageSettingsChanged(TextEditor::StorageSettings)), this, SIGNAL(storageSettingsChanged(TextEditor::StorageSettings))); - connect(m_generalSettingsPage, SIGNAL(displaySettingsChanged(TextEditor::DisplaySettings)), + connect(m_displaySettingsPage, SIGNAL(displaySettingsChanged(TextEditor::DisplaySettings)), this, SIGNAL(displaySettingsChanged(TextEditor::DisplaySettings))); } TextEditorSettings::~TextEditorSettings() { ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance(); - pm->removeObject(m_generalSettingsPage); pm->removeObject(m_fontSettingsPage); - delete m_fontSettingsPage; + pm->removeObject(m_behaviorSettingsPage); + pm->removeObject(m_displaySettingsPage); m_instance = 0; } @@ -137,15 +147,15 @@ FontSettings TextEditorSettings::fontSettings() const TabSettings TextEditorSettings::tabSettings() const { - return m_generalSettingsPage->tabSettings(); + return m_behaviorSettingsPage->tabSettings(); } StorageSettings TextEditorSettings::storageSettings() const { - return m_generalSettingsPage->storageSettings(); + return m_behaviorSettingsPage->storageSettings(); } DisplaySettings TextEditorSettings::displaySettings() const { - return m_generalSettingsPage->displaySettings(); + return m_displaySettingsPage->displaySettings(); } diff --git a/src/plugins/texteditor/texteditorsettings.h b/src/plugins/texteditor/texteditorsettings.h index efaec3176b2..f90fa676ee1 100644 --- a/src/plugins/texteditor/texteditorsettings.h +++ b/src/plugins/texteditor/texteditorsettings.h @@ -40,7 +40,8 @@ namespace TextEditor { -class GeneralSettingsPage; +class BehaviorSettingsPage; +class DisplaySettingsPage; class FontSettingsPage; class FontSettings; struct TabSettings; @@ -74,8 +75,9 @@ signals: void displaySettingsChanged(const TextEditor::DisplaySettings &); private: - TextEditor::FontSettingsPage *m_fontSettingsPage; - TextEditor::GeneralSettingsPage *m_generalSettingsPage; + FontSettingsPage *m_fontSettingsPage; + BehaviorSettingsPage *m_behaviorSettingsPage; + DisplaySettingsPage *m_displaySettingsPage; static TextEditorSettings *m_instance; }; From ce2ad5f2591ab6bd98c957f23054e45f941e820a Mon Sep 17 00:00:00 2001 From: Jens Bache-Wiig Date: Tue, 27 Jan 2009 15:30:24 +0100 Subject: [PATCH 06/19] Fixes: Add outline to sidebar icon Details: Just a quick fix so it doesnt look odd in the menu. --- src/plugins/coreplugin/images/sidebaricon.png | Bin 294 -> 436 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/plugins/coreplugin/images/sidebaricon.png b/src/plugins/coreplugin/images/sidebaricon.png index 8aab325d6efbccee7b903a02c70e225cea3aaed7..b7951415874932b2291b06a274ec973633cc0f96 100644 GIT binary patch delta 351 zcmZ3+w1s&>T>VW(X+BvgZ{B6B3=E7Wo-U3d8t11@+?&T_DA1Cg>zu)?2GO!;I zzL>gW<>Uig3`sp7r6QK@5N!Apo}-!i_5#xaVU0^%{SO70<`(8HRc7GG&V9dVb8+8{ zpJgUew%KdT9;X+CSl>Qj#^7#J9qdAc};Xq;a=>9pV>10I+8k9cAOc;*I3g$A%6 zWoTFVRy48sn6n*EhMV|l|ETpjlk#dL)5@6I>K0b8$sG_r@m0dWGhBf&cK-z%MkcR@ z;No;awT7LUR>$QkibO+ysm)=w2%9-C|Lz}w>^9Z)r;WEBzUF!F4(s)w?0aq-aPvO% z7ux<&a9YXD4_eGe8E*5b-JoeNJG Q7#J8lUHx3vIVCg!0Hc^yLjV8( From 75aaeff2c4acbeb47f0ea85f63fd92f794e3365d Mon Sep 17 00:00:00 2001 From: hjk Date: Tue, 27 Jan 2009 15:53:50 +0100 Subject: [PATCH 07/19] Fixes: immediately rebuild view if custom dumpers are selected in optiosn --- src/plugins/debugger/debuggermanager.cpp | 26 +++++++++++++++++++++++- src/plugins/debugger/debuggermanager.h | 12 ++++++----- src/plugins/debugger/debuggerplugin.cpp | 5 +++++ src/plugins/debugger/gdbengine.cpp | 13 ++---------- src/plugins/debugger/gdbengine.h | 6 +++--- src/plugins/debugger/idebuggerengine.h | 2 ++ src/plugins/debugger/scriptengine.h | 3 +++ 7 files changed, 47 insertions(+), 20 deletions(-) diff --git a/src/plugins/debugger/debuggermanager.cpp b/src/plugins/debugger/debuggermanager.cpp index 7b0e6c24273..8180c7cfd10 100644 --- a/src/plugins/debugger/debuggermanager.cpp +++ b/src/plugins/debugger/debuggermanager.cpp @@ -888,7 +888,9 @@ void DebuggerManager::executeDebuggerCommand(const QString &command) void DebuggerManager::sessionLoaded() { - exitDebugger(); + cleanupViews(); + setStatus(DebuggerProcessNotReady); + setBusyCursor(false); loadSessionData(); } @@ -1092,6 +1094,28 @@ bool DebuggerManager::useFastStart() const return 0; // && m_settings.m_useFastStart; } +void DebuggerManager::setUseCustomDumpers(bool on) +{ + m_settings.m_useCustomDumpers = on; + engine()->setUseCustomDumpers(on); +} + +void DebuggerManager::setUseFastStart(bool on) +{ + m_settings.m_useFastStart = on; +} + +void DebuggerManager::setDebugDumpers(bool on) +{ + m_settings.m_debugDumpers = on; + engine()->setDebugDumpers(on); +} + +void DebuggerManager::setSkipKnownFrames(bool on) +{ + m_settings.m_skipKnownFrames = on; +} + void DebuggerManager::queryCurrentTextEditor(QString *fileName, int *lineNumber, QObject **object) { diff --git a/src/plugins/debugger/debuggermanager.h b/src/plugins/debugger/debuggermanager.h index 5d5e7abd0da..493f2e8cb42 100644 --- a/src/plugins/debugger/debuggermanager.h +++ b/src/plugins/debugger/debuggermanager.h @@ -167,8 +167,6 @@ private: virtual WatchHandler *watchHandler() = 0; virtual void showApplicationOutput(const QString &data) = 0; - //virtual QAction *useCustomDumpersAction() const = 0; - //virtual QAction *debugDumpersAction() const = 0; virtual bool skipKnownFrames() const = 0; virtual bool debugDumpers() const = 0; virtual bool useCustomDumpers() const = 0; @@ -283,6 +281,12 @@ public slots: void showStatusMessage(const QString &msg, int timeout = -1); // -1 forever + void setUseCustomDumpers(bool on); + void setUseToolTips(bool on); + void setDebugDumpers(bool on); + void setSkipKnownFrames(bool on); + void setUseFastStart(bool on); + private slots: void showDebuggerOutput(const QString &prefix, const QString &msg); void showDebuggerInput(const QString &prefix, const QString &msg); @@ -312,9 +316,7 @@ private: StackHandler *stackHandler() { return m_stackHandler; } ThreadsHandler *threadsHandler() { return m_threadsHandler; } WatchHandler *watchHandler() { return m_watchHandler; } - //QAction *useCustomDumpersAction() const { return m_useCustomDumpersAction; } - //QAction *useToolTipsAction() const { return m_useToolTipsAction; } - //QAction *debugDumpersAction() const { return m_debugDumpersAction; } + bool skipKnownFrames() const; bool debugDumpers() const; bool useCustomDumpers() const; diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp index 4f7e0b1a897..f8bb4a86b75 100644 --- a/src/plugins/debugger/debuggerplugin.cpp +++ b/src/plugins/debugger/debuggerplugin.cpp @@ -251,6 +251,7 @@ public: void finish() {} // automatically calls "apply" private: + friend class DebuggerPlugin; Ui::GdbOptionPage m_ui; DebuggerSettings m_settings; @@ -300,6 +301,10 @@ QWidget *GdbOptionPage::createPage(QWidget *parent) //m_dumpLogAction = new QAction(this); //m_dumpLogAction->setText(tr("Dump Log File for Debugging Purposes")); + // + connect(m_ui.checkBoxUseCustomDumpers, SIGNAL(clicked(bool)), + m_plugin->m_manager, SLOT(setUseCustomDumpers(bool))); + return w; } diff --git a/src/plugins/debugger/gdbengine.cpp b/src/plugins/debugger/gdbengine.cpp index 4b84c88cb7f..cff7be0df07 100644 --- a/src/plugins/debugger/gdbengine.cpp +++ b/src/plugins/debugger/gdbengine.cpp @@ -1760,14 +1760,6 @@ void GdbEngine::setDebugDumpers(bool on) } } -//QByteArray GdbEngine::dumperChannel() const -//{ -// return m_dumperServer->serverName().toLatin1(); -// //QByteArray ba; -// //ba.setNum(m_dumperServer->serverPort()); -// //return ba; -//} - ////////////////////////////////////////////////////////////////////// // @@ -2889,11 +2881,10 @@ static QString sizeofTypeExpression(const QString &type) return "sizeof(" + gdbQuoteTypes(type) + ")"; } -void GdbEngine::setCustomDumpersWanted(bool on) +void GdbEngine::setUseCustomDumpers(bool on) { Q_UNUSED(on); - // FIXME: a bit too harsh, but otherwise the treeview - // sometimes look funny + // FIXME: a bit too harsh, but otherwise the treeview sometimes look funny //m_expandedINames.clear(); updateLocals(); } diff --git a/src/plugins/debugger/gdbengine.h b/src/plugins/debugger/gdbengine.h index 60493a53e58..a603aee375d 100644 --- a/src/plugins/debugger/gdbengine.h +++ b/src/plugins/debugger/gdbengine.h @@ -134,6 +134,9 @@ private: void loadSymbols(const QString &moduleName); void loadAllSymbols(); + void setDebugDumpers(bool on); + void setUseCustomDumpers(bool on); + // // Own stuff // @@ -167,9 +170,6 @@ private: void updateLocals(); private slots: - void setDebugDumpers(bool on); - void setCustomDumpersWanted(bool on); - void handleResponse(); void gdbProcError(QProcess::ProcessError error); diff --git a/src/plugins/debugger/idebuggerengine.h b/src/plugins/debugger/idebuggerengine.h index 50fbafda559..1558d140ee6 100644 --- a/src/plugins/debugger/idebuggerengine.h +++ b/src/plugins/debugger/idebuggerengine.h @@ -86,6 +86,8 @@ public: virtual void loadAllSymbols() = 0; virtual void reloadRegisters() = 0; + virtual void setDebugDumpers(bool on) = 0; + virtual void setUseCustomDumpers(bool on) = 0; }; } // namespace Internal diff --git a/src/plugins/debugger/scriptengine.h b/src/plugins/debugger/scriptengine.h index 0f7cc47ac1f..b7f37f2cc67 100644 --- a/src/plugins/debugger/scriptengine.h +++ b/src/plugins/debugger/scriptengine.h @@ -101,6 +101,9 @@ private: void loadSessionData() {} void saveSessionData() {} + void setDebugDumpers(bool) {} + void setUseCustomDumpers(bool) {} + void assignValueInDebugger(const QString &expr, const QString &value); void executeDebuggerCommand(const QString & command); From fe4f03caa0f3269797065b1169cdbe76c04a8f36 Mon Sep 17 00:00:00 2001 From: Jens Bache-Wiig Date: Tue, 27 Jan 2009 15:54:18 +0100 Subject: [PATCH 08/19] Fixes: Don't hover disabled buttons Details: Manhattan would incorrectly hover a disabled toolbutton. This fixes it. --- src/plugins/coreplugin/manhattanstyle.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/plugins/coreplugin/manhattanstyle.cpp b/src/plugins/coreplugin/manhattanstyle.cpp index af361aacbb9..72b86d85d7c 100644 --- a/src/plugins/coreplugin/manhattanstyle.cpp +++ b/src/plugins/coreplugin/manhattanstyle.cpp @@ -518,7 +518,8 @@ void ManhattanStyle::drawPrimitive(PrimitiveElement element, const QStyleOption painter->drawLine(rect.bottomLeft(), rect.bottomRight()); } #ifndef Q_WS_MAC - else if (option->state & State_MouseOver) { + else if (option->state & State_Enabled && + option->state & State_MouseOver) { QColor lighter(255, 255, 255, 35); painter->fillRect(rect, lighter); painter->drawLine(rect.topRight(), rect.bottomRight()); From 5044d07e6017ff4cb1f1d5be3aaff8133618886e Mon Sep 17 00:00:00 2001 From: hjk Date: Tue, 27 Jan 2009 16:07:47 +0100 Subject: [PATCH 09/19] Fixes: fakevim: remove '-- PASSING --' message when 'passing' mode is over. --- src/plugins/fakevim/fakevimhandler.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/plugins/fakevim/fakevimhandler.cpp b/src/plugins/fakevim/fakevimhandler.cpp index 7e24d7d5068..261c5f151cf 100644 --- a/src/plugins/fakevim/fakevimhandler.cpp +++ b/src/plugins/fakevim/fakevimhandler.cpp @@ -391,6 +391,7 @@ bool FakeVimHandler::Private::handleEvent(QKeyEvent *ev) return true; } m_mode = CommandMode; + updateMiniBuffer(); return false; } From d8005df09a94783def1597000a20be1574a475be Mon Sep 17 00:00:00 2001 From: hjk Date: Tue, 27 Jan 2009 16:28:42 +0100 Subject: [PATCH 10/19] Fixes: fakevim: put text cut by 'X' into proper register --- src/plugins/fakevim/fakevimhandler.cpp | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/plugins/fakevim/fakevimhandler.cpp b/src/plugins/fakevim/fakevimhandler.cpp index 261c5f151cf..f20c9522db6 100644 --- a/src/plugins/fakevim/fakevimhandler.cpp +++ b/src/plugins/fakevim/fakevimhandler.cpp @@ -1072,10 +1072,6 @@ bool FakeVimHandler::Private::handleCommandMode(int key, int unmodified, m_subsubdata = key; } else if (key == 'u') { undo(); - } else if (key == 'U') { - // FIXME: this is non-vim, but as Ctrl-R is taken globally - // we have a substitute here - redo(); } else if (key == control('u')) { int sline = cursorLineOnScreen(); // FIXME: this should use the "scroll" option, and "count" @@ -1113,7 +1109,7 @@ bool FakeVimHandler::Private::handleCommandMode(int key, int unmodified, if (leftDist() > 0) { setAnchor(); moveLeft(qMin(count(), leftDist())); - recordRemoveSelectedText(); + m_registers[m_register] = recordRemoveSelectedText(); } finishMovement(); } else if (key == 'y' && m_visualMode == NoVisualMode) { From 32881501e1f4415279671cdecb8a1a8075c99997 Mon Sep 17 00:00:00 2001 From: hjk Date: Tue, 27 Jan 2009 16:44:04 +0100 Subject: [PATCH 11/19] Fixes: fakevim: ignore remaining Ctrl combinations in insert mode --- src/plugins/fakevim/fakevimhandler.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/plugins/fakevim/fakevimhandler.cpp b/src/plugins/fakevim/fakevimhandler.cpp index f20c9522db6..26e127b9428 100644 --- a/src/plugins/fakevim/fakevimhandler.cpp +++ b/src/plugins/fakevim/fakevimhandler.cpp @@ -1220,6 +1220,8 @@ bool FakeVimHandler::Private::handleInsertMode(int key, int, const QString &text QString str = QString(m_config[ConfigTabStop].toInt(), ' '); m_lastInsertion.append(str); m_tc.insertText(str); + } else if (key >= control('a') && key <= control('z')) { + // ignore these } else if (!text.isEmpty()) { m_lastInsertion.append(text); if (m_submode == ReplaceSubMode) { From d22f833a9c08c36b075916dc1cd715d80f9c1039 Mon Sep 17 00:00:00 2001 From: con Date: Tue, 27 Jan 2009 16:46:54 +0100 Subject: [PATCH 12/19] Fixes: - Avoid some annoying debug output. Details: - No stupid "true" and "namespace bla already registered" output anymore. --- src/plugins/help/helpplugin.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/plugins/help/helpplugin.cpp b/src/plugins/help/helpplugin.cpp index 9e07f46f69f..3eddaa5e0ec 100644 --- a/src/plugins/help/helpplugin.cpp +++ b/src/plugins/help/helpplugin.cpp @@ -98,7 +98,7 @@ void HelpManager::registerDocumentation(const QStringList &fileNames) } } if (needsSetup) - qDebug() << m_helpEngine->setupData(); + m_helpEngine->setupData(); } HelpPlugin::HelpPlugin() : @@ -450,9 +450,12 @@ void HelpPlugin::extensionsInitialized() #endif QHelpEngineCore hc(fi.absoluteFilePath()); hc.setupData(); - if (!hc.registerDocumentation(qchFileName)) - qDebug() << hc.error(); - needsSetup = true; + QString fileNamespace = QHelpEngineCore::namespaceName(qchFileName); + if (!fileNamespace.isEmpty() && !hc.registeredDocumentations().contains(fileNamespace)) { + if (!hc.registerDocumentation(qchFileName)) + qDebug() << hc.error(); + needsSetup = true; + } } int i = m_helpEngine->customValue( From e3b273bb8f9c3c7897d4e8b08d71cf80484b88c7 Mon Sep 17 00:00:00 2001 From: hjk Date: Tue, 27 Jan 2009 17:11:38 +0100 Subject: [PATCH 13/19] Fixes: compile fix --- src/plugins/debugger/debuggermanager.h | 1 - 1 file changed, 1 deletion(-) diff --git a/src/plugins/debugger/debuggermanager.h b/src/plugins/debugger/debuggermanager.h index 493f2e8cb42..e16941a79f5 100644 --- a/src/plugins/debugger/debuggermanager.h +++ b/src/plugins/debugger/debuggermanager.h @@ -282,7 +282,6 @@ public slots: void showStatusMessage(const QString &msg, int timeout = -1); // -1 forever void setUseCustomDumpers(bool on); - void setUseToolTips(bool on); void setDebugDumpers(bool on); void setSkipKnownFrames(bool on); void setUseFastStart(bool on); From 484356dd3355657a000194468fda4b28dcbde3c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thorbj=C3=B8rn=20Lindeijer?= Date: Tue, 27 Jan 2009 16:44:06 +0100 Subject: [PATCH 14/19] Recognize inl files as C++ In some projects these kind of files are used for completely inlined classes, that can be split up in a header and source file automatically. --- src/plugins/cppeditor/CppEditor.mimetypes.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/src/plugins/cppeditor/CppEditor.mimetypes.xml b/src/plugins/cppeditor/CppEditor.mimetypes.xml index cd79d5f441e..0c58890e9b5 100644 --- a/src/plugins/cppeditor/CppEditor.mimetypes.xml +++ b/src/plugins/cppeditor/CppEditor.mimetypes.xml @@ -133,5 +133,6 @@ + From 9772ab9904da97df72d3cdc029d7381d126e84bc Mon Sep 17 00:00:00 2001 From: hjk Date: Tue, 27 Jan 2009 17:15:51 +0100 Subject: [PATCH 15/19] Fixes: debugger: revert change from " to ' style quoting Details: ' was used interanlly sometimes --- share/qtcreator/gdbmacros/gdbmacros.cpp | 18 +++++++++--------- tests/manual/gdbdebugger/simple/app.cpp | 20 ++++++++++++++++++++ 2 files changed, 29 insertions(+), 9 deletions(-) diff --git a/share/qtcreator/gdbmacros/gdbmacros.cpp b/share/qtcreator/gdbmacros/gdbmacros.cpp index 5b9b36d1282..d89a6672354 100644 --- a/share/qtcreator/gdbmacros/gdbmacros.cpp +++ b/share/qtcreator/gdbmacros/gdbmacros.cpp @@ -109,7 +109,7 @@ int qtGhVersion = QT_VERSION; 'P(d, name, value)' roughly expands to: - d << (name) << "='" << value << "'"; + d << (name) << "=\"" << value << "\""; Useful (i.e. understood by the IDE) names include: @@ -551,7 +551,7 @@ void QDumper::addCommaIfNeeded() if (pos == 0) return; char c = qDumpOutBuffer[pos - 1]; - if (c == '}' || c == '\'' || c == ']') + if (c == '}' || c == '"' || c == ']') put(','); } @@ -630,7 +630,7 @@ void QDumper::endHash() void QDumper::putEllipsis() { addCommaIfNeeded(); - *this << "{name='',value='',type='" << innertype << "'}"; + *this << "{name=\"\",value=\"\",type=\"" << innertype << "\"}"; } // @@ -642,7 +642,7 @@ void QDumper::putEllipsis() #define P(dumper,name,value) \ do { \ dumper.addCommaIfNeeded(); \ - dumper << (name) << "='" << value << "'"; \ + dumper << (name) << "=\"" << value << '"'; \ } while (0) // simple string property @@ -740,7 +740,7 @@ static void qDumpInnerValueHelper(QDumper &d, const char *type, const void *addr return; case 'B': if (isEqual(type, "QByteArray")) { - d << key << "encoded='1',"; + d << key << "encoded=\"1\","; P(d, key, *(QByteArray*)addr); } return; @@ -769,7 +769,7 @@ static void qDumpInnerValueHelper(QDumper &d, const char *type, const void *addr return; case 'S': if (isEqual(type, "QString")) { - d << key << "encoded='1',"; + d << key << "encoded=\"1\","; P(d, key, *(QString*)addr); } return; @@ -2008,7 +2008,7 @@ static void qDumpQVariantHelper(const void *data, QString *value, *numchild = 0; break; case QVariant::String: - *value = QLatin1Char('\'') + v.toString() + QLatin1Char('\''); + *value = QLatin1Char('"') + v.toString() + QLatin1Char('"'); *numchild = 0; break; case QVariant::StringList: @@ -2240,9 +2240,9 @@ static void qDumpStdString(QDumper &d) qCheckAccess(str.c_str() + str.size() - 1); } - d << ",value='"; + d << ",value=\""; d.putBase64Encoded(str.c_str(), str.size()); - d << "'"; + d << "\""; P(d, "valueencoded", "1"); P(d, "type", "std::string"); P(d, "numchild", "0"); diff --git a/tests/manual/gdbdebugger/simple/app.cpp b/tests/manual/gdbdebugger/simple/app.cpp index b719915c479..e5cf4d1a032 100644 --- a/tests/manual/gdbdebugger/simple/app.cpp +++ b/tests/manual/gdbdebugger/simple/app.cpp @@ -145,14 +145,33 @@ void testQByteArray() void testQHash() { +#if 0 QHash hgg0; hgg0[11] = 11.0; hgg0[22] = 22.0; + hgg0[22] = 22.0; + hgg0[22] = 22.0; + hgg0[22] = 22.0; + hgg0[22] = 22.0; + hgg0[22] = 22.0; +#endif + +#if 1 QHash hgg1; hgg1["22.0"] = 22.0; + hgg1["23.0"] = 22.0; + hgg1["24.0"] = 22.0; + hgg1["25.0"] = 22.0; + hgg1["26.0"] = 22.0; + hgg1["27.0"] = 27.0; + hgg1["28.0"] = 28.0; + hgg1["29.0"] = 29.0; +#endif + +#if 0 QHash hgg2; hgg2[22] = "22.0"; @@ -165,6 +184,7 @@ void testQHash() hash.insert("Hallo", QPointer(&ob)); hash.insert("Welt", QPointer(&ob)); hash.insert(".", QPointer(&ob)); +#endif } void testQImage() From 08e17e6e6b9e76eb5b5305b09a2387d0eec33d4b Mon Sep 17 00:00:00 2001 From: hjk Date: Tue, 27 Jan 2009 17:41:31 +0100 Subject: [PATCH 16/19] Fixes: debugger: more quote fixes --- share/qtcreator/gdbmacros/gdbmacros.cpp | 86 ++++++++++++------------ src/plugins/debugger/debuggermanager.cpp | 4 +- src/plugins/debugger/gdbengine.cpp | 7 +- tests/manual/gdbdebugger/simple/app.cpp | 4 +- 4 files changed, 52 insertions(+), 49 deletions(-) diff --git a/share/qtcreator/gdbmacros/gdbmacros.cpp b/share/qtcreator/gdbmacros/gdbmacros.cpp index d89a6672354..6a1385359fb 100644 --- a/share/qtcreator/gdbmacros/gdbmacros.cpp +++ b/share/qtcreator/gdbmacros/gdbmacros.cpp @@ -642,7 +642,7 @@ void QDumper::putEllipsis() #define P(dumper,name,value) \ do { \ dumper.addCommaIfNeeded(); \ - dumper << (name) << "=\"" << value << '"'; \ + dumper << (name) << "=\"" << value << "\""; \ } while (0) // simple string property @@ -2482,54 +2482,54 @@ void qDumpObjectData440( // They are mentioned here nevertheless. For types that not listed // here, dumpers won't be used. d << "dumpers=[" - "'"NS"QByteArray'," - "'"NS"QDateTime'," - "'"NS"QDir'," - "'"NS"QFile'," - "'"NS"QFileInfo'," - "'"NS"QHash'," - "'"NS"QHashNode'," - "'"NS"QImage'," - "'"NS"QLinkedList'," - "'"NS"QList'," - "'"NS"QLocale'," - "'"NS"QMap'," - "'"NS"QMapNode'," - "'"NS"QModelIndex'," + "\""NS"QByteArray\"," + "\""NS"QDateTime\"," + "\""NS"QDir\"," + "\""NS"QFile\"," + "\""NS"QFileInfo\"," + "\""NS"QHash\"," + "\""NS"QHashNode\"," + "\""NS"QImage\"," + "\""NS"QLinkedList\"," + "\""NS"QList\"," + "\""NS"QLocale\"," + "\""NS"QMap\"," + "\""NS"QMapNode\"," + "\""NS"QModelIndex\"," #if QT_VERSION >= 0x040500 - "'"NS"QMultiMap'," + "\""NS"QMultiMap\"," #endif - "'"NS"QObject'," - "'"NS"QObjectMethodList'," // hack to get nested properties display - "'"NS"QObjectPropertyList'," + "\""NS"QObject\"," + "\""NS"QObjectMethodList\"," // hack to get nested properties display + "\""NS"QObjectPropertyList\"," #if PRIVATE_OBJECT_ALLOWED - "'"NS"QObjectSignal'," - "'"NS"QObjectSignalList'," - "'"NS"QObjectSlot'," - "'"NS"QObjectSlotList'," + "\""NS"QObjectSignal\"," + "\""NS"QObjectSignalList\"," + "\""NS"QObjectSlot\"," + "\""NS"QObjectSlotList\"," #endif // PRIVATE_OBJECT_ALLOWED - // << "'"NS"QRegion'," - "'"NS"QSet'," - "'"NS"QString'," - "'"NS"QStringList'," - "'"NS"QTextCodec'," - "'"NS"QVariant'," - "'"NS"QVector'," - "'"NS"QWidget'," - "'string'," - "'wstring'," - "'std::basic_string'," - "'std::list'," - "'std::map'," - "'std::string'," - "'std::vector'," - "'std::wstring'," + // << "\""NS"QRegion\"," + "\""NS"QSet\"," + "\""NS"QString\"," + "\""NS"QStringList\"," + "\""NS"QTextCodec\"," + "\""NS"QVariant\"," + "\""NS"QVector\"," + "\""NS"QWidget\"," + "\"string\"," + "\"wstring\"," + "\"std::basic_string\"," + "\"std::list\"," + "\"std::map\"," + "\"std::string\"," + "\"std::vector\"," + "\"std::wstring\"," "]"; d << ",qtversion=[" - "'" << ((QT_VERSION >> 16) & 255) << "'," - "'" << ((QT_VERSION >> 8) & 255) << "'," - "'" << ((QT_VERSION) & 255) << "']"; - d << ",namespace='"NS"'"; + "\"" << ((QT_VERSION >> 16) & 255) << "\"," + "\"" << ((QT_VERSION >> 8) & 255) << "\"," + "\"" << ((QT_VERSION) & 255) << "\"]"; + d << ",namespace=\""NS"\""; d.disarm(); } diff --git a/src/plugins/debugger/debuggermanager.cpp b/src/plugins/debugger/debuggermanager.cpp index 8180c7cfd10..efa5d1f6333 100644 --- a/src/plugins/debugger/debuggermanager.cpp +++ b/src/plugins/debugger/debuggermanager.cpp @@ -1096,8 +1096,8 @@ bool DebuggerManager::useFastStart() const void DebuggerManager::setUseCustomDumpers(bool on) { - m_settings.m_useCustomDumpers = on; - engine()->setUseCustomDumpers(on); + //m_settings.m_useCustomDumpers = on; + //engine()->setUseCustomDumpers(on); } void DebuggerManager::setUseFastStart(bool on) diff --git a/src/plugins/debugger/gdbengine.cpp b/src/plugins/debugger/gdbengine.cpp index cff7be0df07..a415f47e3cb 100644 --- a/src/plugins/debugger/gdbengine.cpp +++ b/src/plugins/debugger/gdbengine.cpp @@ -2883,6 +2883,7 @@ static QString sizeofTypeExpression(const QString &type) void GdbEngine::setUseCustomDumpers(bool on) { + qDebug() << "SWITCHING ON/OFF DUMPER DEBUGGING:" << on; Q_UNUSED(on); // FIXME: a bit too harsh, but otherwise the treeview sometimes look funny //m_expandedINames.clear(); @@ -3298,7 +3299,8 @@ void GdbEngine::handleQueryDataDumper2(const GdbResultRecord &record) QByteArray out = output.data(); out = out.mid(out.indexOf('"') + 2); // + 1 is success marker out = out.left(out.lastIndexOf('"')); - out = out.replace('\'', '"'); + //out.replace('\'', '"'); + out.replace("\\", ""); out = "dummy={" + out + "}"; //qDebug() << "OUTPUT: " << out; @@ -3488,7 +3490,8 @@ void GdbEngine::handleDumpCustomValue2(const GdbResultRecord &record, QByteArray out = output.data(); out = out.mid(out.indexOf('"') + 2); // + 1 is the 'success marker' out = out.left(out.lastIndexOf('"')); - out = out.replace('\'', '"'); + //out.replace('\'', '"'); + out.replace("\\", ""); out = "dummy={" + out + "}"; //qDebug() << "OUTPUT: " << out; diff --git a/tests/manual/gdbdebugger/simple/app.cpp b/tests/manual/gdbdebugger/simple/app.cpp index e5cf4d1a032..442e0e23d1a 100644 --- a/tests/manual/gdbdebugger/simple/app.cpp +++ b/tests/manual/gdbdebugger/simple/app.cpp @@ -145,7 +145,7 @@ void testQByteArray() void testQHash() { -#if 0 +#if 1 QHash hgg0; hgg0[11] = 11.0; hgg0[22] = 22.0; @@ -171,7 +171,7 @@ void testQHash() #endif -#if 0 +#if 1 QHash hgg2; hgg2[22] = "22.0"; From b06502387bf3a20e1be73fed84c096bac65c54d8 Mon Sep 17 00:00:00 2001 From: hjk Date: Wed, 28 Jan 2009 10:57:23 +0100 Subject: [PATCH 17/19] Fixes: debugger: fix custom dumpers Details: again... --- src/plugins/debugger/debuggermanager.cpp | 4 +- src/plugins/debugger/gdbengine.cpp | 390 +++++++++++------------ 2 files changed, 191 insertions(+), 203 deletions(-) diff --git a/src/plugins/debugger/debuggermanager.cpp b/src/plugins/debugger/debuggermanager.cpp index efa5d1f6333..8180c7cfd10 100644 --- a/src/plugins/debugger/debuggermanager.cpp +++ b/src/plugins/debugger/debuggermanager.cpp @@ -1096,8 +1096,8 @@ bool DebuggerManager::useFastStart() const void DebuggerManager::setUseCustomDumpers(bool on) { - //m_settings.m_useCustomDumpers = on; - //engine()->setUseCustomDumpers(on); + m_settings.m_useCustomDumpers = on; + engine()->setUseCustomDumpers(on); } void DebuggerManager::setUseFastStart(bool on) diff --git a/src/plugins/debugger/gdbengine.cpp b/src/plugins/debugger/gdbengine.cpp index a415f47e3cb..14ad290a195 100644 --- a/src/plugins/debugger/gdbengine.cpp +++ b/src/plugins/debugger/gdbengine.cpp @@ -253,6 +253,7 @@ void GdbEngine::init() m_gdbVersion = 100; m_shared = 0; m_outputCodec = QTextCodec::codecForLocale(); + m_dataDumperState = DataDumperUninitialized; m_oldestAcceptableToken = -1; @@ -733,7 +734,7 @@ void GdbEngine::handleResultRecord(const GdbResultRecord &record) --m_pendingRequests; PENDING_DEBUG(" TYPE " << cmd.type << " DECREMENTS PENDING TO: " << m_pendingRequests << cmd.command); - if (m_pendingRequests == 0) + if (m_pendingRequests <= 0) updateWatchModel2(); } else { PENDING_DEBUG(" UNKNOWN TYPE " << cmd.type << " LEAVES PENDING AT: " @@ -2883,7 +2884,7 @@ static QString sizeofTypeExpression(const QString &type) void GdbEngine::setUseCustomDumpers(bool on) { - qDebug() << "SWITCHING ON/OFF DUMPER DEBUGGING:" << on; + //qDebug() << "SWITCHING ON/OFF DUMPER DEBUGGING:" << on; Q_UNUSED(on); // FIXME: a bit too harsh, but otherwise the treeview sometimes look funny //m_expandedINames.clear(); @@ -3052,15 +3053,15 @@ void GdbEngine::runCustomDumper(const WatchData & data0, bool dumpChildren) //qDebug() << "CMD: " << cmd; - sendSynchronizedCommand(cmd, WatchDumpCustomValue1, QVariant::fromValue(data)); + QVariant var; + var.setValue(data); + sendSynchronizedCommand(cmd, WatchDumpCustomValue1, var); q->showStatusMessage( tr("Retrieving data for watch view (%1 requests pending)...") .arg(m_pendingRequests + 1), 10000); // retrieve response - QVariant var; - var.setValue(data); sendSynchronizedCommand("p (char*)qDumpOutBuffer", WatchDumpCustomValue2, var); } @@ -3268,7 +3269,7 @@ void GdbEngine::updateWatchModel2() return; } - PENDING_DEBUG("REBUILDING MODEL") + PENDING_DEBUG("REBUILDING MODEL"); emit gdbInputAvailable(QString(), "[" + currentTime() + "] "); q->showStatusMessage(tr("Finished retrieving data."), 400); @@ -3454,7 +3455,7 @@ void GdbEngine::handleDumpCustomValue1(const GdbResultRecord &record, } else if (record.resultClass == GdbResultError) { // Record an extra result, as the socket result will be lost // in transmission - --m_pendingRequests; + //--m_pendingRequests; QString msg = record.data.findChild("msg").data(); //qDebug() << "CUSTOM DUMPER ERROR MESSAGE: " << msg; #ifdef QT_DEBUG @@ -3469,12 +3470,12 @@ void GdbEngine::handleDumpCustomValue1(const GdbResultRecord &record, return; } #endif - if (msg.startsWith("The program being debugged was sig")) - msg = strNotInScope; - if (msg.startsWith("The program being debugged stopped while")) - msg = strNotInScope; - data.setError(msg); - insertData(data); + //if (msg.startsWith("The program being debugged was sig")) + // msg = strNotInScope; + //if (msg.startsWith("The program being debugged stopped while")) + // msg = strNotInScope; + //data.setError(msg); + //insertData(data); } } @@ -3485,220 +3486,207 @@ void GdbEngine::handleDumpCustomValue2(const GdbResultRecord &record, QTC_ASSERT(data.isValid(), return); //qDebug() << "CUSTOM VALUE RESULT: " << record.toString(); //qDebug() << "FOR DATA: " << data.toString() << record.resultClass; - if (record.resultClass == GdbResultDone) { - GdbMi output = record.data.findChild("consolestreamoutput"); - QByteArray out = output.data(); - out = out.mid(out.indexOf('"') + 2); // + 1 is the 'success marker' - out = out.left(out.lastIndexOf('"')); - //out.replace('\'', '"'); - out.replace("\\", ""); - out = "dummy={" + out + "}"; - //qDebug() << "OUTPUT: " << out; - - GdbMi contents; - contents.fromString(out); - //qDebug() << "CONTENTS" << contents.toString(true); - - if (!contents.isValid()) { - qDebug() << "INVALID"; - // custom dumper produced no output - if (data.isValueNeeded()) - data.setValue(""); - if (data.isTypeNeeded()) - data.setType(""); - if (data.isChildrenNeeded()) - data.setChildCount(0); - if (data.isChildCountNeeded()) - data.setChildCount(0); - data.setValueToolTip(""); - insertData(data); - } else { - setWatchDataType(data, contents.findChild("type")); - setWatchDataValue(data, contents.findChild("value"), - contents.findChild("valueencoded").data().toInt()); - setWatchDataAddress(data, contents.findChild("addr")); - setWatchDataChildCount(data, contents.findChild("numchild")); - setWatchDataValueToolTip(data, contents.findChild("valuetooltip")); - setWatchDataValueDisabled(data, contents.findChild("valuedisabled")); - setWatchDataEditValue(data, contents.findChild("editvalue")); - if (qq->watchHandler()->isDisplayedIName(data.iname)) { - GdbMi editvalue = contents.findChild("editvalue"); - if (editvalue.isValid()) { - setWatchDataEditValue(data, editvalue); - qq->watchHandler()->showEditValue(data); - } - } - if (!qq->watchHandler()->isExpandedIName(data.iname)) - data.setChildrenUnneeded(); - GdbMi children = contents.findChild("children"); - if (children.isValid() || !qq->watchHandler()->isExpandedIName(data.iname)) - data.setChildrenUnneeded(); - data.setValueUnneeded(); - - // try not to repeat data too often - WatchData childtemplate; - setWatchDataType(childtemplate, contents.findChild("childtype")); - setWatchDataChildCount(childtemplate, contents.findChild("childnumchild")); - //qDebug() << "DATA: " << data.toString(); - insertData(data); - foreach (GdbMi item, children.children()) { - WatchData data1 = childtemplate; - data1.name = item.findChild("name").data(); - data1.iname = data.iname + "." + data1.name; - //qDebug() << "NAMEENCODED: " << item.findChild("nameencoded").data() - // << item.findChild("nameencoded").data()[1]; - if (item.findChild("nameencoded").data()[0] == '1') - data1.name = QByteArray::fromBase64(data1.name.toUtf8()); - QString key = item.findChild("key").data(); - if (!key.isEmpty()) - data1.name += " (" + key + ")"; - setWatchDataType(data1, item.findChild("type")); - setWatchDataExpression(data1, item.findChild("exp")); - setWatchDataChildCount(data1, item.findChild("numchild")); - setWatchDataValue(data1, item.findChild("value"), - item.findChild("valueencoded").data().toInt()); - setWatchDataAddress(data1, item.findChild("addr")); - setWatchDataValueToolTip(data1, item.findChild("valuetooltip")); - setWatchDataValueDisabled(data1, item.findChild("valuedisabled")); - if (!qq->watchHandler()->isExpandedIName(data1.iname)) - data1.setChildrenUnneeded(); - //qDebug() << "HANDLE CUSTOM SUBCONTENTS:" << data1.toString(); - insertData(data1); - } - } - //qDebug() << "HANDLE CUSTOM VALUE CONTENTS: " << data.toString(); - } else if (record.resultClass == GdbResultError) { - // FIXME: Should not happen here, i.e. could be removed - QString msg = record.data.findChild("msg").data(); - //qDebug() << "CUSTOM DUMPER ERROR MESSAGE: " << msg; - if (msg.startsWith("The program being debugged was sig")) - msg = strNotInScope; - if (msg.startsWith("The program being debugged stopped while")) - msg = strNotInScope; - data.setError(msg); - insertData(data); - } else { + if (record.resultClass != GdbResultDone) { qDebug() << "STRANGE CUSTOM DUMPER RESULT DATA: " << data.toString(); + return; + } + + GdbMi output = record.data.findChild("consolestreamoutput"); + QByteArray out = output.data(); + + int markerPos = out.indexOf('"') + 1; // position of 'success marker' + if (markerPos == -1 || out.at(markerPos) == 'f') { // 't' or 'f' + // custom dumper produced no output + data.setError(strNotInScope); + insertData(data); + return; + } + + out = out.mid(markerPos + 1); + out = out.left(out.lastIndexOf('"')); + out.replace("\\", ""); + out = "dummy={" + out + "}"; + + GdbMi contents; + contents.fromString(out); + //qDebug() << "CONTENTS" << contents.toString(true); + if (!contents.isValid()) { + data.setError(strNotInScope); + insertData(data); + return; + } + + setWatchDataType(data, contents.findChild("type")); + setWatchDataValue(data, contents.findChild("value"), + contents.findChild("valueencoded").data().toInt()); + setWatchDataAddress(data, contents.findChild("addr")); + setWatchDataChildCount(data, contents.findChild("numchild")); + setWatchDataValueToolTip(data, contents.findChild("valuetooltip")); + setWatchDataValueDisabled(data, contents.findChild("valuedisabled")); + setWatchDataEditValue(data, contents.findChild("editvalue")); + if (qq->watchHandler()->isDisplayedIName(data.iname)) { + GdbMi editvalue = contents.findChild("editvalue"); + if (editvalue.isValid()) { + setWatchDataEditValue(data, editvalue); + qq->watchHandler()->showEditValue(data); + } + } + if (!qq->watchHandler()->isExpandedIName(data.iname)) + data.setChildrenUnneeded(); + GdbMi children = contents.findChild("children"); + if (children.isValid() || !qq->watchHandler()->isExpandedIName(data.iname)) + data.setChildrenUnneeded(); + data.setValueUnneeded(); + + // try not to repeat data too often + WatchData childtemplate; + setWatchDataType(childtemplate, contents.findChild("childtype")); + setWatchDataChildCount(childtemplate, contents.findChild("childnumchild")); + //qDebug() << "DATA: " << data.toString(); + insertData(data); + foreach (GdbMi item, children.children()) { + WatchData data1 = childtemplate; + data1.name = item.findChild("name").data(); + data1.iname = data.iname + "." + data1.name; + //qDebug() << "NAMEENCODED: " << item.findChild("nameencoded").data() + // << item.findChild("nameencoded").data()[1]; + if (item.findChild("nameencoded").data()[0] == '1') + data1.name = QByteArray::fromBase64(data1.name.toUtf8()); + QString key = item.findChild("key").data(); + if (!key.isEmpty()) + data1.name += " (" + key + ")"; + setWatchDataType(data1, item.findChild("type")); + setWatchDataExpression(data1, item.findChild("exp")); + setWatchDataChildCount(data1, item.findChild("numchild")); + setWatchDataValue(data1, item.findChild("value"), + item.findChild("valueencoded").data().toInt()); + setWatchDataAddress(data1, item.findChild("addr")); + setWatchDataValueToolTip(data1, item.findChild("valuetooltip")); + setWatchDataValueDisabled(data1, item.findChild("valuedisabled")); + if (!qq->watchHandler()->isExpandedIName(data1.iname)) + data1.setChildrenUnneeded(); + //qDebug() << "HANDLE CUSTOM SUBCONTENTS:" << data1.toString(); + insertData(data1); } } void GdbEngine::updateLocals() { - setTokenBarrier(); +setTokenBarrier(); - m_pendingRequests = 0; - PENDING_DEBUG("\nRESET PENDING"); - m_toolTipCache.clear(); - m_toolTipExpression.clear(); - qq->watchHandler()->reinitializeWatchers(); +m_pendingRequests = 0; +PENDING_DEBUG("\nRESET PENDING"); +m_toolTipCache.clear(); +m_toolTipExpression.clear(); +qq->watchHandler()->reinitializeWatchers(); - int level = currentFrame(); - // '2' is 'list with type and value' - QString cmd = QString("-stack-list-arguments 2 %1 %2").arg(level).arg(level); - sendSynchronizedCommand(cmd, StackListArguments); // stage 1/2 - // '2' is 'list with type and value' - sendSynchronizedCommand("-stack-list-locals 2", StackListLocals); // stage 2/2 +int level = currentFrame(); +// '2' is 'list with type and value' +QString cmd = QString("-stack-list-arguments 2 %1 %2").arg(level).arg(level); +sendSynchronizedCommand(cmd, StackListArguments); // stage 1/2 +// '2' is 'list with type and value' +sendSynchronizedCommand("-stack-list-locals 2", StackListLocals); // stage 2/2 } void GdbEngine::handleStackListArguments(const GdbResultRecord &record) { - // stage 1/2 +// stage 1/2 - // Linux: - // 12^done,stack-args= - // [frame={level="0",args=[ - // {name="argc",type="int",value="1"}, - // {name="argv",type="char **",value="(char **) 0x7..."}]}] - // Mac: - // 78^done,stack-args= - // {frame={level="0",args={ - // varobj= - // {exp="this",value="0x38a2fab0",name="var21",numchild="3", - // type="CurrentDocumentFind * const",typecode="PTR", - // dynamic_type="",in_scope="true",block_start_addr="0x3938e946", - // block_end_addr="0x3938eb2d"}, - // varobj= - // {exp="before",value="@0xbfffb9f8: {d = 0x3a7f2a70}", - // name="var22",numchild="1",type="const QString ...} }}} - // - // In both cases, iterating over the children of stack-args/frame/args - // is ok. - m_currentFunctionArgs.clear(); - if (record.resultClass == GdbResultDone) { - const GdbMi list = record.data.findChild("stack-args"); - const GdbMi frame = list.findChild("frame"); - const GdbMi args = frame.findChild("args"); - m_currentFunctionArgs = args.children(); - } else if (record.resultClass == GdbResultError) { - qDebug() << "FIXME: GdbEngine::handleStackListArguments: should not happen"; - } +// Linux: +// 12^done,stack-args= +// [frame={level="0",args=[ +// {name="argc",type="int",value="1"}, +// {name="argv",type="char **",value="(char **) 0x7..."}]}] +// Mac: +// 78^done,stack-args= +// {frame={level="0",args={ +// varobj= +// {exp="this",value="0x38a2fab0",name="var21",numchild="3", +// type="CurrentDocumentFind * const",typecode="PTR", +// dynamic_type="",in_scope="true",block_start_addr="0x3938e946", +// block_end_addr="0x3938eb2d"}, +// varobj= +// {exp="before",value="@0xbfffb9f8: {d = 0x3a7f2a70}", +// name="var22",numchild="1",type="const QString ...} }}} +// +// In both cases, iterating over the children of stack-args/frame/args +// is ok. +m_currentFunctionArgs.clear(); +if (record.resultClass == GdbResultDone) { + const GdbMi list = record.data.findChild("stack-args"); + const GdbMi frame = list.findChild("frame"); + const GdbMi args = frame.findChild("args"); + m_currentFunctionArgs = args.children(); +} else if (record.resultClass == GdbResultError) { + qDebug() << "FIXME: GdbEngine::handleStackListArguments: should not happen"; +} } void GdbEngine::handleStackListLocals(const GdbResultRecord &record) { - // stage 2/2 +// stage 2/2 - // There could be shadowed variables - QList locals = record.data.findChild("locals").children(); - locals += m_currentFunctionArgs; +// There could be shadowed variables +QList locals = record.data.findChild("locals").children(); +locals += m_currentFunctionArgs; - setLocals(locals); +setLocals(locals); } void GdbEngine::setLocals(const QList &locals) { - //qDebug() << m_varToType; - QHash seen; +//qDebug() << m_varToType; +QHash seen; - foreach (const GdbMi &item, locals) { - // Local variables of inlined code are reported as - // 26^done,locals={varobj={exp="this",value="",name="var4",exp="this", - // numchild="1",type="const QtSharedPointer::Basic 1) - continue; - QString name = item.findChild("exp").data(); - #else - QString name = item.findChild("name").data(); - #endif - int n = seen.value(name); - if (n) { - seen[name] = n + 1; - WatchData data; - data.iname = "local." + name + QString::number(n + 1); - data.name = name + QString(" ").arg(n); - //data.setValue(""); +foreach (const GdbMi &item, locals) { + // Local variables of inlined code are reported as + // 26^done,locals={varobj={exp="this",value="",name="var4",exp="this", + // numchild="1",type="const QtSharedPointer::Basic 1) + continue; + QString name = item.findChild("exp").data(); + #else + QString name = item.findChild("name").data(); + #endif + int n = seen.value(name); + if (n) { + seen[name] = n + 1; + WatchData data; + data.iname = "local." + name + QString::number(n + 1); + data.name = name + QString(" ").arg(n); + //data.setValue(""); + setWatchDataValue(data, item.findChild("value")); + data.setType(""); + data.setChildCount(0); + insertData(data); + } else { + seen[name] = 1; + WatchData data; + data.iname = "local." + name; + data.name = name; + data.exp = name; + data.framekey = m_currentFrame + data.name; + setWatchDataType(data, item.findChild("type")); + // set value only directly if it is simple enough, otherwise + // pass through the insertData() machinery + if (isIntOrFloatType(data.type) || isPointerType(data.type)) setWatchDataValue(data, item.findChild("value")); - data.setType(""); - data.setChildCount(0); - insertData(data); - } else { - seen[name] = 1; - WatchData data; - data.iname = "local." + name; - data.name = name; - data.exp = name; - data.framekey = m_currentFrame + data.name; - setWatchDataType(data, item.findChild("type")); - // set value only directly if it is simple enough, otherwise - // pass through the insertData() machinery - if (isIntOrFloatType(data.type) || isPointerType(data.type)) - setWatchDataValue(data, item.findChild("value")); - if (!qq->watchHandler()->isExpandedIName(data.iname)) - data.setChildrenUnneeded(); - if (isPointerType(data.type) || data.name == "this") - data.setChildCount(1); - if (0 && m_varToType.contains(data.framekey)) { - qDebug() << "RE-USING " << m_varToType.value(data.framekey); - data.setType(m_varToType.value(data.framekey)); - } - insertData(data); + if (!qq->watchHandler()->isExpandedIName(data.iname)) + data.setChildrenUnneeded(); + if (isPointerType(data.type) || data.name == "this") + data.setChildCount(1); + if (0 && m_varToType.contains(data.framekey)) { + qDebug() << "RE-USING " << m_varToType.value(data.framekey); + data.setType(m_varToType.value(data.framekey)); } + insertData(data); + } } } From eb021724dfe1653d2f00dc5d3474fa25bb1ee5aa Mon Sep 17 00:00:00 2001 From: hjk Date: Wed, 28 Jan 2009 12:15:40 +0100 Subject: [PATCH 18/19] Fixes: debugger: sort array and list indices numerically --- share/qtcreator/gdbmacros/gdbmacros.cpp | 42 ++++++++++++------------- src/plugins/debugger/debuggerplugin.cpp | 5 +-- src/plugins/debugger/gdbengine.cpp | 2 ++ src/plugins/debugger/watchhandler.cpp | 17 ++-------- src/plugins/fakevim/fakevimhandler.cpp | 1 + tests/manual/gdbdebugger/simple/app.cpp | 3 +- 6 files changed, 29 insertions(+), 41 deletions(-) diff --git a/share/qtcreator/gdbmacros/gdbmacros.cpp b/share/qtcreator/gdbmacros/gdbmacros.cpp index 6a1385359fb..c70e3b75a43 100644 --- a/share/qtcreator/gdbmacros/gdbmacros.cpp +++ b/share/qtcreator/gdbmacros/gdbmacros.cpp @@ -839,7 +839,7 @@ static void qDumpQByteArray(QDumper &d) unsigned char u = (isprint(c) && c != '\'' && c != '"') ? c : '?'; sprintf(buf, "%02x (%u '%c')", c, c, u); d.beginHash(); - P(d, "name", "[" << i << "]"); + P(d, "name", i); P(d, "value", buf); d.endHash(); } @@ -1104,14 +1104,14 @@ static void qDumpQHash(QDumper &d) while (node != end) { d.beginHash(); if (simpleKey) { - P(d, "name", "[" << i << "]"); + P(d, "name", i); qDumpInnerValueHelper(d, keyType, addOffset(node, keyOffset), "key"); if (simpleValue) qDumpInnerValueHelper(d, valueType, addOffset(node, valueOffset)); P(d, "type", valueType); P(d, "addr", addOffset(node, valueOffset)); } else { - P(d, "name", "[" << i << "]"); + P(d, "name", i); //P(d, "exp", "*(char*)" << node); P(d, "exp", "*('"NS"QHashNode<" << keyType << "," << valueType << " >'*)" << node); P(d, "type", "'"NS"QHashNode<" << keyType << "," << valueType << " >'"); @@ -1215,7 +1215,7 @@ static void qDumpQList(QDumper &d) d << ",children=["; for (int i = 0; i != n; ++i) { d.beginHash(); - P(d, "name", "[" << i << "]"); + P(d, "name", i); if (innerTypeIsPointer) { void *p = ldata.d->array + i + pdata->begin; if (p) { @@ -1275,7 +1275,7 @@ static void qDumpQLinkedList(QDumper &d) const void *p = deref(ldata); for (int i = 0; i != n; ++i) { d.beginHash(); - P(d, "name", "[" << i << "]"); + P(d, "name", i); const void *addr = addOffset(p, 2 * sizeof(void*)); qDumpInnerValueOrPointer(d, d.innertype, stripped, addr); p = deref(p); @@ -1414,7 +1414,7 @@ static void qDumpQMap(QDumper &d) while (node != end) { d.beginHash(); - P(d, "name", "[" << i << "]"); + P(d, "name", i); if (simpleKey) { P(d, "type", valueType); qDumpInnerValueHelper(d, keyType, addOffset(node, keyOffset), "key"); @@ -1660,7 +1660,7 @@ static void qDumpQObjectMethodList(QDumper &d) const QMetaMethod & method = mo->method(i); int mt = method.methodType(); d.beginHash(); - P(d, "name", "[" << i << "] " << mo->indexOfMethod(method.signature()) + P(d, "name", i << " " << mo->indexOfMethod(method.signature()) << " " << method.signature()); P(d, "value", (mt == QMetaMethod::Signal ? "" : "") << " (" << mt << ")"); d.endHash(); @@ -1712,11 +1712,11 @@ static void qDumpQObjectSignal(QDumper &d) for (int i = 0; i != connList.size(); ++i) { const QObjectPrivate::Connection &conn = connList.at(i); d.beginHash(); - P(d, "name", "[" << i << "] receiver"); + P(d, "name", i << " receiver"); qDumpInnerValueHelper(d, NS"QObject *", conn.receiver); d.endHash(); d.beginHash(); - P(d, "name", "[" << i << "] slot"); + P(d, "name", i << " slot"); P(d, "type", ""); if (conn.receiver) P(d, "value", conn.receiver->metaObject()->method(conn.method).signature()); @@ -1725,7 +1725,7 @@ static void qDumpQObjectSignal(QDumper &d) P(d, "numchild", "0"); d.endHash(); d.beginHash(); - P(d, "name", "[" << i << "] type"); + P(d, "name", i << " type"); P(d, "type", ""); P(d, "value", "<" << qConnectionTypes[conn.method] << " connection>"); P(d, "numchild", "0"); @@ -1756,7 +1756,7 @@ static void qDumpQObjectSignalList(QDumper &d) int k = mo->indexOfSignal(method.signature()); const QObjectPrivate::ConnectionList &connList = qConnectionList(ob, k); d.beginHash(); - P(d, "name", "[" << k << "]"); + P(d, "name", k); P(d, "value", method.signature()); P(d, "numchild", connList.size()); //P(d, "numchild", "1"); @@ -1796,17 +1796,17 @@ static void qDumpQObjectSlot(QDumper &d) const QMetaMethod & method = sender.sender->metaObject()->method(sender.signal); d.beginHash(); - P(d, "name", "[" << s << "] sender"); + P(d, "name", s << " sender"); qDumpInnerValueHelper(d, NS"QObject *", sender.sender); d.endHash(); d.beginHash(); - P(d, "name", "[" << s << "] signal"); + P(d, "name", s << " signal"); P(d, "type", ""); P(d, "value", method.signature()); P(d, "numchild", "0"); d.endHash(); d.beginHash(); - P(d, "name", "[" << s << "] type"); + P(d, "name", s << " type"); P(d, "type", ""); P(d, "value", "<" << qConnectionTypes[conn.method] << " connection>"); P(d, "numchild", "0"); @@ -1843,7 +1843,7 @@ static void qDumpQObjectSlotList(QDumper &d) if (method.methodType() == QMetaMethod::Slot) { d.beginHash(); int k = mo->indexOfSlot(method.signature()); - P(d, "name", "[" << k << "]"); + P(d, "name", k); P(d, "value", method.signature()); // count senders. expensive... @@ -1911,7 +1911,7 @@ static void qDumpQSet(QDumper &d) for (int bucket = 0; bucket != hd->numBuckets && i <= 10000; ++bucket) { for (node = hd->buckets[bucket]; node->next; node = node->next) { d.beginHash(); - P(d, "name", "[" << i << "]"); + P(d, "name", i); P(d, "type", d.innertype); P(d, "exp", "(('"NS"QHashNode<" << d.innertype << ","NS"QHashDummyValue>'*)" @@ -1970,7 +1970,7 @@ static void qDumpQStringList(QDumper &d) d << ",children=["; for (int i = 0; i != n; ++i) { d.beginHash(); - P(d, "name", "[" << i << "]"); + P(d, "name", i); P(d, "value", list[i]); P(d, "valueencoded", "1"); d.endHash(); @@ -2108,7 +2108,7 @@ static void qDumpQVector(QDumper &d) d << ",children=["; for (int i = 0; i != n; ++i) { d.beginHash(); - P(d, "name", "[" << i << "]"); + P(d, "name", i); qDumpInnerValueOrPointer(d, d.innertype, stripped, addOffset(v, i * innersize + typeddatasize)); d.endHash(); @@ -2156,7 +2156,7 @@ static void qDumpStdList(QDumper &d) it = list.begin(); for (int i = 0; i < 1000 && it != list.end(); ++i, ++it) { d.beginHash(); - P(d, "name", "[" << i << "]"); + P(d, "name", i); qDumpInnerValueOrPointer(d, d.innertype, stripped, it.operator->()); d.endHash(); } @@ -2218,7 +2218,7 @@ static void qDumpStdMap(QDumper &d) d.endHash(); } else { d.beginHash(); - P(d, "name", "[" << i << "]"); + P(d, "name", i); P(d, "addr", it.operator->()); P(d, "type", pairType); d.endHash(); @@ -2305,7 +2305,7 @@ static void qDumpStdVector(QDumper &d) d << ",children=["; for (int i = 0; i != n; ++i) { d.beginHash(); - P(d, "name", "[" << i << "]"); + P(d, "name", i); qDumpInnerValueOrPointer(d, d.innertype, stripped, addOffset(v->start, i * innersize)); d.endHash(); diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp index f8bb4a86b75..3f9cfc6caaa 100644 --- a/src/plugins/debugger/debuggerplugin.cpp +++ b/src/plugins/debugger/debuggerplugin.cpp @@ -565,10 +565,7 @@ bool DebuggerPlugin::initialize(const QStringList &arguments, QString *error_mes connect(resetToSimpleAction, SIGNAL(triggered()), m_manager, SLOT(setSimpleDockWidgetArrangement())); - - m_generalOptionPage = 0; - - // FIXME: + // FIXME: m_generalOptionPage = new GdbOptionPage(this); addObject(m_generalOptionPage); diff --git a/src/plugins/debugger/gdbengine.cpp b/src/plugins/debugger/gdbengine.cpp index 14ad290a195..c559bcb2c1c 100644 --- a/src/plugins/debugger/gdbengine.cpp +++ b/src/plugins/debugger/gdbengine.cpp @@ -3548,6 +3548,8 @@ void GdbEngine::handleDumpCustomValue2(const GdbResultRecord &record, WatchData data1 = childtemplate; data1.name = item.findChild("name").data(); data1.iname = data.iname + "." + data1.name; + if (!data1.name.isEmpty() && data1.name.at(0).isDigit()) + data1.name = '[' + data1.name + ']'; //qDebug() << "NAMEENCODED: " << item.findChild("nameencoded").data() // << item.findChild("nameencoded").data()[1]; if (item.findChild("nameencoded").data()[0] == '1') diff --git a/src/plugins/debugger/watchhandler.cpp b/src/plugins/debugger/watchhandler.cpp index b2c43b28f64..a00b7fad7ce 100644 --- a/src/plugins/debugger/watchhandler.cpp +++ b/src/plugins/debugger/watchhandler.cpp @@ -255,7 +255,6 @@ QString WatchData::toString() const return res; } - static bool iNameSorter(const WatchData &d1, const WatchData &d2) { if (d1.level != d2.level) @@ -265,19 +264,9 @@ static bool iNameSorter(const WatchData &d1, const WatchData &d2) QString name1 = d1.iname.section('.', level, level); QString name2 = d2.iname.section('.', level, level); //MODEL_DEBUG(" SORT: " << name1 << name2 << (name1 < name2)); - - if (name1 != name2) { - // This formerly used inames. in this case 'lastIndexOf' probably - // makes more sense. - if (name1.startsWith('[') && name2.startsWith('[')) { - return name1.mid(1, name1.indexOf(']') - 1).toInt() - < name2.mid(1, name2.indexOf(']') - 1).toInt(); - // numbers should be sorted according to their numerical value - //int pos = d1.name.lastIndexOf('.'); - //if (pos != -1 && pos + 1 != d1.name.size() && d1.name.at(pos + 1).isDigit()) - // return d1.name.size() < d2.name.size(); - // fall through - } + if (name1 != name2 && !name1.isEmpty() && !name2.isEmpty()) { + if (name1.at(0).isDigit() && name2.at(0).isDigit()) + return name1.toInt() < name2.toInt(); return name1 < name2; } } diff --git a/src/plugins/fakevim/fakevimhandler.cpp b/src/plugins/fakevim/fakevimhandler.cpp index 26e127b9428..e23ba991fb0 100644 --- a/src/plugins/fakevim/fakevimhandler.cpp +++ b/src/plugins/fakevim/fakevimhandler.cpp @@ -437,6 +437,7 @@ void FakeVimHandler::Private::setupWidget() m_plaintextedit->setLineWrapMode(QPlainTextEdit::NoWrap); } m_wasReadOnly = EDITOR(isReadOnly()); + //EDITOR(setReadOnly(true)); showBlackMessage("vi emulation mode."); updateMiniBuffer(); } diff --git a/tests/manual/gdbdebugger/simple/app.cpp b/tests/manual/gdbdebugger/simple/app.cpp index 442e0e23d1a..98fa2111dc9 100644 --- a/tests/manual/gdbdebugger/simple/app.cpp +++ b/tests/manual/gdbdebugger/simple/app.cpp @@ -244,7 +244,6 @@ void testQLinkedList() f.append(Foo(1)); f.append(Foo(2)); #endif - QLinkedList v; v.push_back("aa"); v.push_back("bb"); @@ -258,7 +257,7 @@ void testQList() QList li; QList lu; - for (int i = 0; i != 3; ++i) { + for (int i = 0; i != 30; ++i) { li.append(i); } li.append(101); From 3e6cf4e96c74c892d919edf1b97a64c699a704d0 Mon Sep 17 00:00:00 2001 From: hjk Date: Wed, 28 Jan 2009 12:44:46 +0100 Subject: [PATCH 19/19] Fixes: fakevim: code cosmetics --- src/plugins/fakevim/fakevimplugin.cpp | 31 +++++---------------------- 1 file changed, 5 insertions(+), 26 deletions(-) diff --git a/src/plugins/fakevim/fakevimplugin.cpp b/src/plugins/fakevim/fakevimplugin.cpp index 329c965318f..2f0a3894328 100644 --- a/src/plugins/fakevim/fakevimplugin.cpp +++ b/src/plugins/fakevim/fakevimplugin.cpp @@ -126,7 +126,6 @@ private slots: private: FakeVimPlugin *q; QAction *m_installHandlerAction; - Core::ICore *m_core; }; } // namespace Internal @@ -136,7 +135,6 @@ FakeVimPluginPrivate::FakeVimPluginPrivate(FakeVimPlugin *plugin) { q = plugin; m_installHandlerAction = 0; - m_core = 0; } FakeVimPluginPrivate::~FakeVimPluginPrivate() @@ -149,10 +147,7 @@ void FakeVimPluginPrivate::shutdown() bool FakeVimPluginPrivate::initialize() { - m_core = Core::ICore::instance(); - QTC_ASSERT(m_core, return false); - - Core::ActionManager *actionManager = m_core->actionManager(); + Core::ActionManager *actionManager = Core::ICore::instance()->actionManager(); QTC_ASSERT(actionManager, return false); QList globalcontext; @@ -174,7 +169,7 @@ bool FakeVimPluginPrivate::initialize() this, SLOT(installHandlerOnCurrentEditor())); // EditorManager - QObject *editorManager = m_core->editorManager(); + QObject *editorManager = Core::ICore::instance()->editorManager(); connect(editorManager, SIGNAL(editorAboutToClose(Core::IEditor*)), this, SLOT(editorAboutToClose(Core::IEditor*))); connect(editorManager, SIGNAL(editorOpened(Core::IEditor*)), @@ -239,9 +234,9 @@ void FakeVimPluginPrivate::writeFile(bool *handled, if (editor && editor->file()->fileName() == fileName) { // Handle that as a special case for nicer interaction with core Core::IFile *file = editor->file(); - m_core->fileManager()->blockFileChange(file); + Core::ICore::instance()->fileManager()->blockFileChange(file); file->save(fileName); - m_core->fileManager()->unblockFileChange(file); + Core::ICore::instance()->fileManager()->unblockFileChange(file); *handled = true; } } @@ -258,33 +253,17 @@ void FakeVimPluginPrivate::removeHandler() void FakeVimPluginPrivate::editorOpened(Core::IEditor *editor) { - Q_UNUSED(editor); //qDebug() << "OPENING: " << editor << editor->widget(); - //installHandler(editor); - -#if 1 QSettings *s = ICore::instance()->settings(); bool automatic = s->value("textInteractionSettings/UseVim").toBool(); - //qDebug() << "USE VIM: " << automatic; if (automatic) installHandler(editor); -#endif - -#if 0 - QWidget *widget = editor->widget(); - if (BaseTextEditor *bt = qobject_cast(widget)) { - InteractionSettings settings = bt->interactionSettings(); - qDebug() << "USE VIM: " << settings.m_useVim; - if (settings.m_useVim) - installHandler(editor); - } -#endif } void FakeVimPluginPrivate::editorAboutToClose(Core::IEditor *editor) { + //qDebug() << "CLOSING: " << editor << editor->widget(); Q_UNUSED(editor); - //qDebug() << "CLOSING: " << editor; } void FakeVimPluginPrivate::showCommandBuffer(const QString &contents)