From 1ef9dc31d287f2d38c8e512d90e10f390e4b2ec3 Mon Sep 17 00:00:00 2001 From: goro Date: Thu, 11 Dec 2008 12:30:38 +0100 Subject: [PATCH 01/21] PathChooser migration for GDB macros page --- src/plugins/debugger/gdboptionpage.h | 1 - src/plugins/debugger/gdbtypemacros.cpp | 17 +-- src/plugins/debugger/gdbtypemacros.ui | 150 ++++++++++++------------- 3 files changed, 78 insertions(+), 90 deletions(-) diff --git a/src/plugins/debugger/gdboptionpage.h b/src/plugins/debugger/gdboptionpage.h index 1d71024bac1..e9ebd23d667 100644 --- a/src/plugins/debugger/gdboptionpage.h +++ b/src/plugins/debugger/gdboptionpage.h @@ -87,7 +87,6 @@ public: void finished(bool accepted); private slots: - void onScriptButton(); void onAddButton(); void onDelButton(); void currentItemChanged(QTreeWidgetItem *item); diff --git a/src/plugins/debugger/gdbtypemacros.cpp b/src/plugins/debugger/gdbtypemacros.cpp index 8610d01e39d..89178af268f 100644 --- a/src/plugins/debugger/gdbtypemacros.cpp +++ b/src/plugins/debugger/gdbtypemacros.cpp @@ -109,6 +109,8 @@ QWidget *TypeMacroPage::createPage(QWidget *parent) m_widget = new QWidget(parent); m_ui.setupUi(m_widget); + m_ui.scriptFile->setPromptDialogTitle(tr("Select Gdb Script")); + m_ui.scriptFile->setExpectedKind(Core::Utils::PathChooser::File); connect(m_ui.addButton, SIGNAL(clicked()), this, SLOT(onAddButton())); @@ -116,8 +118,8 @@ QWidget *TypeMacroPage::createPage(QWidget *parent) connect(m_ui.delButton, SIGNAL(clicked()), this, SLOT(onDelButton())); - connect(m_ui.scriptButton, SIGNAL(clicked()), - this, SLOT(onScriptButton())); + connect(m_ui.scriptFile, SIGNAL(validChanged()), + this, SLOT(updateButtonState())); connect(m_ui.treeWidget, SIGNAL(currentItemChanged(QTreeWidgetItem *, QTreeWidgetItem *)), this, SLOT(currentItemChanged(QTreeWidgetItem *))); @@ -139,7 +141,7 @@ QWidget *TypeMacroPage::createPage(QWidget *parent) ++i; } - m_ui.scriptEdit->setText(m_settings->m_scriptFile); + m_ui.scriptFile->setPath(m_settings->m_scriptFile); updateButtonState(); @@ -152,7 +154,7 @@ void TypeMacroPage::finished(bool accepted) return; m_settings->m_typeMacros.clear(); - m_settings->m_scriptFile = m_ui.scriptEdit->text(); + m_settings->m_scriptFile = m_ui.scriptFile->path(); for (int i = 0; i < m_ui.treeWidget->topLevelItemCount(); ++i) { QTreeWidgetItem *item = m_ui.treeWidget->topLevelItem(i); @@ -172,13 +174,6 @@ void TypeMacroPage::finished(bool accepted) } } -void TypeMacroPage::onScriptButton() -{ - QString fileName = QFileDialog::getOpenFileName(m_widget, tr("Select Gdb Script")); - m_ui.scriptEdit->setText(fileName); - updateButtonState(); -} - void TypeMacroPage::onAddButton() { if (m_ui.typeEdit->text().isEmpty() || m_ui.macroEdit->text().isEmpty()) diff --git a/src/plugins/debugger/gdbtypemacros.ui b/src/plugins/debugger/gdbtypemacros.ui index aa7215577b4..51a2670d84d 100644 --- a/src/plugins/debugger/gdbtypemacros.ui +++ b/src/plugins/debugger/gdbtypemacros.ui @@ -1,146 +1,133 @@ - - - - + + TypeMacroPage - - + + 0 0 519 - 238 + 263 - + Form - - - 9 - - + + 6 + + 9 + - - + + Script File - - - 9 - - + + 6 + + 9 + - - - - - - - 21 - 23 - - - - ... - - + - - + + 0 - + 6 - - - + + + false - + Type - + Macro - - - + + + 21 23 - + + - - :/gdbdebugger/images/newitem.png + + + :/gdbdebugger/images/newitem.png:/gdbdebugger/images/newitem.png - - - + + + Macro Name: - - - + + + Parse as: - - + + - - - + + + 0 - + 0 - - + + 21 23 - + - - - :/gdbdebugger/images/delete.png + + + :/gdbdebugger/images/delete.png:/gdbdebugger/images/delete.png - + Qt::Vertical - + 20 40 @@ -150,25 +137,25 @@ - - + + - - - + + + Type: - - + + - + ASCII (char *) - + Unicode (short) @@ -178,9 +165,16 @@ - + + + Core::Utils::PathChooser + QWidget +
utils/pathchooser.h
+ 1 +
+
- +
From 6adb3f617e5b89ac300df0530cac58ee78d3a466 Mon Sep 17 00:00:00 2001 From: mae Date: Thu, 11 Dec 2008 13:20:59 +0100 Subject: [PATCH 02/21] connect the parenthesis matcher with the ifdefed out information. --- src/plugins/texteditor/basetexteditor.cpp | 33 ++++++++++++++--------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/src/plugins/texteditor/basetexteditor.cpp b/src/plugins/texteditor/basetexteditor.cpp index 8d5bf3ff683..d613db7a294 100644 --- a/src/plugins/texteditor/basetexteditor.cpp +++ b/src/plugins/texteditor/basetexteditor.cpp @@ -734,12 +734,15 @@ void BaseTextEditor::moveLineUpDown(bool up) move.clearSelection(); move.insertText(text); int end = move.position(); - move.endEditBlock(); + if (hasSelection) { move.setPosition(start); move.setPosition(end, QTextCursor::KeepAnchor); } + indent(document(), move, QChar::Null); + move.endEditBlock(); + setTextCursor(move); } @@ -2951,12 +2954,13 @@ void BaseTextEditor::markBlocksAsChanged(QList blockNumbers) { TextBlockUserData::MatchType TextBlockUserData::checkOpenParenthesis(QTextCursor *cursor, QChar c) { - if (!TextEditDocumentLayout::hasParentheses(cursor->block())) + QTextBlock block = cursor->block(); + if (!TextEditDocumentLayout::hasParentheses(block) || TextEditDocumentLayout::ifdefedOut(block)) return NoMatch; - Parentheses parenList = TextEditDocumentLayout::parentheses(cursor->block()); + Parentheses parenList = TextEditDocumentLayout::parentheses(block); Parenthesis openParen, closedParen; - QTextBlock closedParenParag = cursor->block(); + QTextBlock closedParenParag = block; const int cursorPos = cursor->position() - closedParenParag.position(); int i = 0; @@ -2981,7 +2985,8 @@ TextBlockUserData::MatchType TextBlockUserData::checkOpenParenthesis(QTextCursor closedParenParag = closedParenParag.next(); if (!closedParenParag.isValid()) return NoMatch; - if (TextEditDocumentLayout::hasParentheses(closedParenParag)) { + if (TextEditDocumentLayout::hasParentheses(closedParenParag) + && !TextEditDocumentLayout::ifdefedOut(closedParenParag)) { parenList = TextEditDocumentLayout::parentheses(closedParenParag); break; } @@ -3018,12 +3023,13 @@ TextBlockUserData::MatchType TextBlockUserData::checkOpenParenthesis(QTextCursor TextBlockUserData::MatchType TextBlockUserData::checkClosedParenthesis(QTextCursor *cursor, QChar c) { - if (!TextEditDocumentLayout::hasParentheses(cursor->block())) + QTextBlock block = cursor->block(); + if (!TextEditDocumentLayout::hasParentheses(block) || TextEditDocumentLayout::ifdefedOut(block)) return NoMatch; - Parentheses parenList = TextEditDocumentLayout::parentheses(cursor->block()); + Parentheses parenList = TextEditDocumentLayout::parentheses(block); Parenthesis openParen, closedParen; - QTextBlock openParenParag = cursor->block(); + QTextBlock openParenParag = block; const int cursorPos = cursor->position() - openParenParag.position(); int i = parenList.count() - 1; @@ -3049,7 +3055,8 @@ TextBlockUserData::MatchType TextBlockUserData::checkClosedParenthesis(QTextCurs if (!openParenParag.isValid()) return NoMatch; - if (TextEditDocumentLayout::hasParentheses(openParenParag)) { + if (TextEditDocumentLayout::hasParentheses(openParenParag) + && !TextEditDocumentLayout::ifdefedOut(openParenParag)) { parenList = TextEditDocumentLayout::parentheses(openParenParag); break; } @@ -3091,7 +3098,7 @@ bool TextBlockUserData::findPreviousOpenParenthesis(QTextCursor *cursor, bool se int ignore = 0; while (block.isValid()) { Parentheses parenList = TextEditDocumentLayout::parentheses(block); - if (!parenList.isEmpty()) { + if (!parenList.isEmpty() && !TextEditDocumentLayout::ifdefedOut(block)) { for (int i = parenList.count()-1; i >= 0; --i) { Parenthesis paren = parenList.at(i); if (block == cursor->block() && position - block.position() <= paren.pos + 1) @@ -3118,7 +3125,7 @@ bool TextBlockUserData::findNextClosingParenthesis(QTextCursor *cursor, bool sel int ignore = 0; while (block.isValid()) { Parentheses parenList = TextEditDocumentLayout::parentheses(block); - if (!parenList.isEmpty()) { + if (!parenList.isEmpty() && !TextEditDocumentLayout::ifdefedOut(block)) { for (int i = 0; i < parenList.count(); ++i) { Parenthesis paren = parenList.at(i); if (block == cursor->block() && position - block.position() >= paren.pos) @@ -3143,7 +3150,7 @@ TextBlockUserData::MatchType TextBlockUserData::matchCursorBackward(QTextCursor cursor->clearSelection(); const QTextBlock block = cursor->block(); - if (!TextEditDocumentLayout::hasParentheses(block)) + if (!TextEditDocumentLayout::hasParentheses(block) || TextEditDocumentLayout::ifdefedOut(block)) return NoMatch; const int relPos = cursor->position() - block.position(); @@ -3165,7 +3172,7 @@ TextBlockUserData::MatchType TextBlockUserData::matchCursorForward(QTextCursor * cursor->clearSelection(); const QTextBlock block = cursor->block(); - if (!TextEditDocumentLayout::hasParentheses(block)) + if (!TextEditDocumentLayout::hasParentheses(block) || TextEditDocumentLayout::ifdefedOut(block)) return NoMatch; const int relPos = cursor->position() - block.position(); From fff956db026a4d1fbce96477aeb17cccb126fe3d Mon Sep 17 00:00:00 2001 From: hjk Date: Thu, 11 Dec 2008 13:23:03 +0100 Subject: [PATCH 03/21] Add preliminary version of coding convention/style recommnedation. More needed. It was suggested to copy parts from the twiki. --- doc/coding-style.qdoc | 246 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 246 insertions(+) create mode 100644 doc/coding-style.qdoc diff --git a/doc/coding-style.qdoc b/doc/coding-style.qdoc new file mode 100644 index 00000000000..f028e56fe74 --- /dev/null +++ b/doc/coding-style.qdoc @@ -0,0 +1,246 @@ +/*! + +\contentpage{index.html}{Qt Creator} +\page coding-style.html + +\title Qt Creator Coding Rules + +THIS IS PRELIMINARY. + +\section1 Introduction + +The aim of this section is to serve as a guide for the developers, to aid us +to build understandable and maintainable code, to create less confusion and +surprises when working on Qt Creator. + +As usual: Rules are not set in stone. If there's a good reason to break one, +do it, preferably after making sure that there are others agreeing. + +This document is incomplete. + +In general, if you want to contribute to the main source, we expect at least +that you: + +\list 1 +\o The most important rule first: KISS (keep it simple ...): always + use a simple implementation in favor of a more complicated one. + This eases maintenance a lot. +\o Write good C++ code: Readable, well commented when necessary, + and taking advantage of the OO model. Follow the \l{Formatting} guidelines. + There are also certain \l{Code Constructs} that we try to follow. +\o Adapt the code to the structures already existing in Qt Creator, or in + the case that you have better ideas, discuss them with other developers + before writing the code. +\o Take advantage of Qt. Don't re-invent the wheel. Think about what parts + of your code are generic enough that they might be incorporated into + Qt proper. +\o Document interfaces. Right now we use qdoc, but changing to doxygen + is being considered. +\endlist + + + +\section1 Submitting Code + +It is implicitly understood that all patches contributed to The Qt Creator +Project are made under under the Gnu General Public License, version 2 or later +and + +If you have a problem with that, don't contribute code. + +Also please don't just pop up out of the blue with a huge patch (or +small) that changes something substantial in Qt Creator. Always discuss your +ideas with the other developers on mailing list first. + +When you create the patch, please use git or use "diff -up" since we find +that a lot easier to read than the other diff formats. Also please do not +send patches that implements or fixes several different things; several +patches is a much better option. + +We also require you to provide a commit message entry with every patch, +this describes in detail what the patch is doing. + + + +\section1 Code Constructs + +We have several guidelines on code constructs, some of these exist to +make the code faster, others to make the code clearer. Yet others +exist to allow us to take advantage of the strong type checking +in C++. + +\list 1 +\o Declaration of variables should wait as long as possible. The rule + is: "Don't declare it until you need it." In C++ there are a lot of + user defined types, and these can very often be expensive to + initialize. This rule connects to the next rule too. + +\o Make the scope of a variable as small as possible. + +\o Prefer preincrement to postincrement whenever possible. + Preincrement has potential of being faster than postincrement. Just + think about the obvious implementations of pre/post-increment. This + rule applies to decrement too. + +\code + ++T; + --U; + -NOT- + T++; // not used in Qt Creator + U--; // not used in Qt Creator +\endcode + +\o Try to minimize evaluation of the same code over and over. This is + aimed especially at loops. + +\code + + Container::iterator end = large.end(); + for (Container::iterator it = large.begin(); it != end; ++it) { + ...; + } + -NOT- + for (Container::iterator it = large.begin(); + it != large.end(); ++it) { + ...; + } +\endcode + + + +\section1 Formatting + +\section2 Declarations + +Only one declaration on each line. +\code + int a; + int b; + -NOT- + int a, b; // not used in Qt Creator +\endcode + + This is especially important when initialization is done at the same + time. +\code + QString a = "Joe"; + QString b = "Foo"; + -NOT- + QString a = "Joe", b = "Foo"; // not used in Qt Creator +\endcode + [Note that 'QString a = "Joe"' is formally calling a copy constructor + on a temporary constructed from a string literal and therefore has the + potential of being more expensive then direct construction by + 'QString a("joe")'. However the compiler is allowed to elide the copy + (even if it had side effects), and modern compilers typically do so. + Given these equal costs, Qt Creator code favours the '=' idiom as it is in + line with the traditional C-style initialization, _and_ cannot be + mistaken as function declaration, _and_ reduces the level of nested + parantheses in more initializations.] + + +\section2 Pointers and references + +\code + char *p = "flop"; + char &c = *p; + -NOT- + char* p = "flop"; // not used in Qt Creator + char & c = *p; // not used in Qt Creator +\endcode + + This is simply in line with the official Qt guide lines. + + Also note that we will have: +\code + const char *p; + -NOT- + char const * p; // not used in Qt Creator +\endcode + + + Using a plain 0 for Null pointer constants is always correct and least effort + to type. So: +\code + void *p = 0; + -NOT- + void *p = NULL; // not used in Qt Creator + -NOT- + void *p = '\0'; // not used in Qt Creator + -NOT- + void *p = 42 - 7 * 6; // also not used in Qt Creator +\endcode + Note: As an exception, imported third party code as well as code + interfacing the "native" APIs (src/support/os_*) can use NULL. + + +\section2 Operator names and parentheses +\code + operator==(type) + -NOT- + operator == (type) // not used in Qt Creator +\endcode + + The == is part of the function name, separating it makes the + declaration look like an expression. + + +\section2 Function names and parentheses +\code + void mangle() + -NOT- + void mangle () // not used in Qt Creator +\endcode + + + +\section2 Naming rules + + Simply follow the style of Qt proper. As examples: + \list + \o Use descriptive but simple and short names. Do not abbreviate. + + \o Class names are capitalized, and function names lowercased. + Enums are named like Classes, values are in lower-case. +\endlist + + + +\section2 Formatting + + Adapt the formatting of your code to the one used in the + other parts of Qt Creator. In case there is different formatting for + the same construct, use the one used more often. + + +\section2 Declarations + + - Use this order for the access sections of your class: public, + protected, private. The public section is interesting for every + user of the class. The private section is only of interest for the + implementors of the class (you). [Obviously not true since this is + for developers, and we do not want one developer only to be able to + read and understand the implementation of class internals. Lgb] + + - Avoid declaring global objects in the declaration file of the class. + If the same variable is used for all objects, use a static member. + + - Avoid global or static variables. + + +\section2 File headers + + If you create a new file, the top of the file should include a + header comment equal to the one found in other source files of Qt Creator. + +\section2 Documentation + + The documentation is generated from source and header files. + You document for the other developers, not for yourself. + In the header you should document interfaces, i.e. what the function does, + not the implementation. + In the .cpp files you document the implementation if the implementation + in non-obvious. + + +*/ From ddfd46b3224811d0e202e8a44a97150c50856d99 Mon Sep 17 00:00:00 2001 From: mae Date: Thu, 11 Dec 2008 13:35:58 +0100 Subject: [PATCH 04/21] nicer (un)comment selection, avoid C-style selections when you can do C++ style. --- src/plugins/cppeditor/cppeditor.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/plugins/cppeditor/cppeditor.cpp b/src/plugins/cppeditor/cppeditor.cpp index f233c0121f8..8aec6e39203 100644 --- a/src/plugins/cppeditor/cppeditor.cpp +++ b/src/plugins/cppeditor/cppeditor.cpp @@ -744,7 +744,8 @@ void CPPEditor::unCommentSelection() QString endText = endBlock.text(); int endPos = end - endBlock.position(); - bool hasTrailingCharacters = !endText.mid(endPos).trimmed().isEmpty(); + bool hasTrailingCharacters = !endText.left(endPos).remove(QLatin1String("//")).trimmed().isEmpty() + && !endText.mid(endPos).trimmed().isEmpty(); if ((endPos <= endText.length() - 2 && endText.at(endPos) == QLatin1Char('*') && endText.at(endPos+1) == QLatin1Char('/'))) { From a556ddada831c97c43d5c74bd1cb975b3da36fbc Mon Sep 17 00:00:00 2001 From: hjk Date: Thu, 11 Dec 2008 14:01:53 +0100 Subject: [PATCH 05/21] start sanitizing gdb options dialog --- src/plugins/debugger/debugger.pro | 2 - src/plugins/debugger/debuggerplugin.cpp | 8 -- src/plugins/debugger/debuggerplugin.h | 2 - src/plugins/debugger/gdbengine.h | 2 +- src/plugins/debugger/gdboptionpage.cpp | 47 ++++++-- src/plugins/debugger/gdboptionpage.h | 6 +- src/plugins/debugger/gdboptionpage.ui | 51 +++++++-- src/plugins/debugger/gdbtypemacros.ui | 144 +++++++++--------------- src/plugins/git/settingspage.cpp | 2 +- 9 files changed, 140 insertions(+), 124 deletions(-) diff --git a/src/plugins/debugger/debugger.pro b/src/plugins/debugger/debugger.pro index 3d67e19c6aa..7308fb441c2 100644 --- a/src/plugins/debugger/debugger.pro +++ b/src/plugins/debugger/debugger.pro @@ -58,7 +58,6 @@ SOURCES += attachexternaldialog.cpp \ gdbengine.cpp \ gdbmi.cpp \ gdboptionpage.cpp \ - gdbtypemacros.cpp \ gdbengine.h \ moduleshandler.cpp \ moduleswindow.cpp \ @@ -79,7 +78,6 @@ FORMS += attachexternaldialog.ui \ breakcondition.ui \ mode.ui \ gdboptionpage.ui \ - gdbtypemacros.ui \ startexternaldialog.ui \ RESOURCES += debugger.qrc diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp index 37406f70cc1..d9217069c68 100644 --- a/src/plugins/debugger/debuggerplugin.cpp +++ b/src/plugins/debugger/debuggerplugin.cpp @@ -183,7 +183,6 @@ DebuggerPlugin::DebuggerPlugin() { m_pm = 0; m_generalOptionPage = 0; - m_typeMacroPage = 0; m_locationMark = 0; m_manager = 0; } @@ -202,7 +201,6 @@ void DebuggerPlugin::shutdown() //qDebug() << "DebuggerPlugin::~DebuggerPlugin"; removeObject(m_debugMode); removeObject(m_generalOptionPage); - removeObject(m_typeMacroPage); // FIXME: when using the line below, BreakWindow etc gets deleted twice. // so better leak for now... @@ -212,9 +210,6 @@ void DebuggerPlugin::shutdown() delete m_generalOptionPage; m_generalOptionPage = 0; - delete m_typeMacroPage; - m_typeMacroPage = 0; - delete m_locationMark; m_locationMark = 0; @@ -409,13 +404,10 @@ bool DebuggerPlugin::initialize(const QStringList &arguments, QString *error_mes mdebug->addAction(cmd); m_generalOptionPage = 0; - m_typeMacroPage = 0; // FIXME: m_generalOptionPage = new GdbOptionPage(&theGdbSettings()); addObject(m_generalOptionPage); - m_typeMacroPage = new TypeMacroPage(&theGdbSettings()); - addObject(m_typeMacroPage); m_locationMark = 0; diff --git a/src/plugins/debugger/debuggerplugin.h b/src/plugins/debugger/debuggerplugin.h index 91ffe4dbf77..ebf12b5e123 100644 --- a/src/plugins/debugger/debuggerplugin.h +++ b/src/plugins/debugger/debuggerplugin.h @@ -54,7 +54,6 @@ namespace Internal { class DebuggerManager; class DebugMode; class GdbOptionPage; -class TypeMacroPage; class LocationMark; class DebuggerPlugin : public ExtensionSystem::IPlugin @@ -103,7 +102,6 @@ private: ExtensionSystem::PluginManager *m_pm; GdbOptionPage *m_generalOptionPage; - TypeMacroPage *m_typeMacroPage; QString m_previousMode; LocationMark *m_locationMark; diff --git a/src/plugins/debugger/gdbengine.h b/src/plugins/debugger/gdbengine.h index 56106a75244..6b3cbb15fee 100644 --- a/src/plugins/debugger/gdbengine.h +++ b/src/plugins/debugger/gdbengine.h @@ -80,7 +80,7 @@ enum DataDumperState DataDumperUnavailable, }; -// FIXME: Move to extra file? + class GdbSettings { public: diff --git a/src/plugins/debugger/gdboptionpage.cpp b/src/plugins/debugger/gdboptionpage.cpp index e05b811889a..8bf1b22a0fc 100644 --- a/src/plugins/debugger/gdboptionpage.cpp +++ b/src/plugins/debugger/gdboptionpage.cpp @@ -58,7 +58,11 @@ GdbOptionPage::GdbOptionPage(GdbSettings *settings) #if defined(Q_OS_WIN32) defaultCommand.append(".exe"); #endif + QString defaultScript = coreIFace->resourcePath() + + QLatin1String("/gdb/qt4macros"); + m_settings->m_gdbCmd = s->value("Location", defaultCommand).toString(); + m_settings->m_scriptFile= s->value("ScriptFile", defaultScript).toString(); m_settings->m_gdbEnv = s->value("Environment", "").toString(); m_settings->m_autoRun = s->value("AutoRun", true).toBool(); m_settings->m_autoQuit = s->value("AutoQuit", true).toBool(); @@ -72,36 +76,56 @@ QString GdbOptionPage::name() const QString GdbOptionPage::category() const { - return "Debugger|Gdb"; + return "Debugger"; } QString GdbOptionPage::trCategory() const { - return tr("Debugger|Gdb"); + return tr("Debugger"); } QWidget *GdbOptionPage::createPage(QWidget *parent) { QWidget *w = new QWidget(parent); m_ui.setupUi(w); - m_ui.gdbEdit->setText(m_settings->m_gdbCmd); - m_ui.envEdit->setText(m_settings->m_gdbEnv); + m_ui.gdbLocationEdit->setText(m_settings->m_gdbCmd); + m_ui.environmentEdit->setText(m_settings->m_gdbEnv); m_ui.autoStartBox->setChecked(m_settings->m_autoRun); m_ui.autoQuitBox->setChecked(m_settings->m_autoQuit); - connect(m_ui.pushButtonBrowse, SIGNAL(clicked()), - this, SLOT(browse())); + m_ui.gdbStartupScriptEdit->setText(m_settings->m_scriptFile); + + // FIXME + m_ui.autoStartBox->hide(); + m_ui.autoQuitBox->hide(); + m_ui.environmentEdit->hide(); + m_ui.labelEnvironment->hide(); + + connect(m_ui.browseForGdbButton, SIGNAL(clicked()), + this, SLOT(browseForGdb())); + connect(m_ui.browseForScriptButton, SIGNAL(clicked()), + this, SLOT(browseForScript())); return w; } -void GdbOptionPage::browse() +void GdbOptionPage::browseForGdb() { - QString fileName = QFileDialog::getOpenFileName(m_ui.pushButtonBrowse, + QString fileName = QFileDialog::getOpenFileName(m_ui.browseForGdbButton, "Browse for gdb executable"); if (fileName.isEmpty()) return; m_settings->m_gdbCmd = fileName; - m_ui.gdbEdit->setText(fileName); + m_ui.gdbLocationEdit->setText(fileName); +} + +void GdbOptionPage::browseForScript() +{ + QString fileName = QFileDialog::getOpenFileName(m_ui.browseForGdbButton, + "Browse for gdb startup script"); + if (fileName.isEmpty()) + return; + m_settings->m_scriptFile = fileName; + m_ui.gdbStartupScriptEdit->setText(fileName); } void GdbOptionPage::finished(bool accepted) @@ -109,10 +133,11 @@ void GdbOptionPage::finished(bool accepted) if (!accepted) return; - m_settings->m_gdbCmd = m_ui.gdbEdit->text(); - m_settings->m_gdbEnv = m_ui.envEdit->text(); + m_settings->m_gdbCmd = m_ui.gdbLocationEdit->text(); + m_settings->m_gdbEnv = m_ui.environmentEdit->text(); m_settings->m_autoRun = m_ui.autoStartBox->isChecked(); m_settings->m_autoQuit = m_ui.autoQuitBox->isChecked(); + m_settings->m_scriptFile = m_ui.gdbStartupScriptEdit->text(); Core::ICore *coreIFace = m_pm->getObject(); if (!coreIFace || !coreIFace->settings()) diff --git a/src/plugins/debugger/gdboptionpage.h b/src/plugins/debugger/gdboptionpage.h index 1d71024bac1..684bd789771 100644 --- a/src/plugins/debugger/gdboptionpage.h +++ b/src/plugins/debugger/gdboptionpage.h @@ -35,7 +35,6 @@ #define GDBOPTIONPAGE_H #include "ui_gdboptionpage.h" -#include "ui_gdbtypemacros.h" #include @@ -63,7 +62,8 @@ public: void finished(bool accepted); public slots: - void browse(); + void browseForGdb(); + void browseForScript(); private: ExtensionSystem::PluginManager *m_pm; @@ -72,6 +72,7 @@ private: GdbSettings *m_settings; }; +#if 0 class TypeMacroPage : public Core::IOptionsPage { Q_OBJECT @@ -100,6 +101,7 @@ private: GdbSettings *m_settings; QWidget *m_widget; }; +#endif } // namespace Internal } // namespace Debugger diff --git a/src/plugins/debugger/gdboptionpage.ui b/src/plugins/debugger/gdboptionpage.ui index 4b58d5d7140..a7496851188 100644 --- a/src/plugins/debugger/gdboptionpage.ui +++ b/src/plugins/debugger/gdboptionpage.ui @@ -7,7 +7,7 @@ 0 0 433 - 216 + 233 @@ -23,7 +23,7 @@ - Gdb Debug Options + Locations @@ -33,33 +33,36 @@ 6 - + - + - + + + This is either a full abolute path leading to the gdb binary you intend to use or the name of a gdb binary that wiull be searched in your PATH. + Gdb Location: - gdbEdit + gdbLocationEdit - + Environment: - envEdit + environmentEdit - + @@ -72,6 +75,36 @@ + + + + + + + + 21 + 23 + + + + ... + + + + :/qworkbench/images/fileopen.png:/qworkbench/images/fileopen.png + + + + + + + This is either empty or points to a file containing gdb commands that will be executed immediately after gdb starts up. + + + Gdb Startup Script: + + + diff --git a/src/plugins/debugger/gdbtypemacros.ui b/src/plugins/debugger/gdbtypemacros.ui index aa7215577b4..f42514e4e49 100644 --- a/src/plugins/debugger/gdbtypemacros.ui +++ b/src/plugins/debugger/gdbtypemacros.ui @@ -1,146 +1,115 @@ - - - - + + TypeMacroPage - - + + 0 0 519 - 238 + 263 - + Form - - - 9 - - + + 6 + + 9 + - - - Script File - - - - 9 - - - 6 - - - - - - - - - 21 - 23 - - - - ... - - - - - - - - - + + 0 - + 6 - - - + + + false - + Type - + Macro - - - + + + 21 23 - + + - - :/gdbdebugger/images/newitem.png + + + :/gdbdebugger/images/newitem.png:/gdbdebugger/images/newitem.png - - - + + + Macro Name: - - - + + + Parse as: - - + + - - - + + + 0 - + 0 - - + + 21 23 - + - - - :/gdbdebugger/images/delete.png + + + :/gdbdebugger/images/delete.png:/gdbdebugger/images/delete.png - + Qt::Vertical - + 20 40 @@ -150,25 +119,25 @@ - - + + - - - + + + Type: - - + + - + ASCII (char *) - + Unicode (short) @@ -178,9 +147,8 @@ - - + diff --git a/src/plugins/git/settingspage.cpp b/src/plugins/git/settingspage.cpp index e1b14cb9ccc..7f0581fc3c3 100644 --- a/src/plugins/git/settingspage.cpp +++ b/src/plugins/git/settingspage.cpp @@ -77,7 +77,7 @@ QString SettingsPage::name() const return tr("General"); } - QString SettingsPage::category() const +QString SettingsPage::category() const { return QLatin1String("Git"); } From 9890705295a7dda84507b8969953925ade38169f Mon Sep 17 00:00:00 2001 From: mae Date: Thu, 11 Dec 2008 14:11:28 +0100 Subject: [PATCH 06/21] make the home key jump to column 0 if the caret if before the first non-space --- src/plugins/texteditor/basetexteditor.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/plugins/texteditor/basetexteditor.cpp b/src/plugins/texteditor/basetexteditor.cpp index d613db7a294..9b4e4254f59 100644 --- a/src/plugins/texteditor/basetexteditor.cpp +++ b/src/plugins/texteditor/basetexteditor.cpp @@ -2767,6 +2767,8 @@ void BaseTextEditor::handleHomeKey(bool anchor) while (character == tab || character.category() == QChar::Separator_Space) { ++pos; + if (pos == initpos) + break; character = characterAt(pos); } From 9042ff32b05ade9388e552f0a872abe63fd309c8 Mon Sep 17 00:00:00 2001 From: goro Date: Thu, 11 Dec 2008 14:12:58 +0100 Subject: [PATCH 07/21] About dialog cosmetics --- src/plugins/coreplugin/versiondialog.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/coreplugin/versiondialog.cpp b/src/plugins/coreplugin/versiondialog.cpp index 0decae6cf18..e534a0d1eae 100644 --- a/src/plugins/coreplugin/versiondialog.cpp +++ b/src/plugins/coreplugin/versiondialog.cpp @@ -72,7 +72,7 @@ VersionDialog::VersionDialog(QWidget *parent) "
" "Built on " __DATE__ " at " __TIME__ "
" #ifdef IDE_REVISION - "Using revision %5
" + "From revision %5
" #endif "
" "
" From f149c17d17c2fc86654f770550d43ab98721056e Mon Sep 17 00:00:00 2001 From: Roberto Raggi Date: Thu, 11 Dec 2008 14:44:24 +0100 Subject: [PATCH 08/21] Fixed possible crash when merging the evironments. --- src/libs/cplusplus/TypeOfExpression.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/libs/cplusplus/TypeOfExpression.cpp b/src/libs/cplusplus/TypeOfExpression.cpp index 53fa7e78396..68732f78ea0 100644 --- a/src/libs/cplusplus/TypeOfExpression.cpp +++ b/src/libs/cplusplus/TypeOfExpression.cpp @@ -107,6 +107,8 @@ void TypeOfExpression::processEnvironment(QMap documents Document::Ptr doc, Environment *env, QSet *processed) const { + if (! doc) + return; if (processed->contains(doc->fileName())) return; processed->insert(doc->fileName()); From 9da7aef44cbeba9a1869b7ce9df3187c3df3432a Mon Sep 17 00:00:00 2001 From: hjk Date: Thu, 11 Dec 2008 15:01:22 +0100 Subject: [PATCH 09/21] re-organizize gdb location selection again --- src/plugins/debugger/gdboptionpage.cpp | 38 ++++++++--------- src/plugins/debugger/gdboptionpage.h | 4 +- src/plugins/debugger/gdboptionpage.ui | 56 +++++++------------------- 3 files changed, 33 insertions(+), 65 deletions(-) diff --git a/src/plugins/debugger/gdboptionpage.cpp b/src/plugins/debugger/gdboptionpage.cpp index 8bf1b22a0fc..7d6742e9582 100644 --- a/src/plugins/debugger/gdboptionpage.cpp +++ b/src/plugins/debugger/gdboptionpage.cpp @@ -88,11 +88,15 @@ QWidget *GdbOptionPage::createPage(QWidget *parent) { QWidget *w = new QWidget(parent); m_ui.setupUi(w); - m_ui.gdbLocationEdit->setText(m_settings->m_gdbCmd); + m_ui.gdbLocationChooser->setExpectedKind(Core::Utils::PathChooser::Command); + m_ui.gdbLocationChooser->setPromptDialogTitle(tr("Choose Gdb Location")); + m_ui.gdbLocationChooser->setPath(m_settings->m_gdbCmd); + m_ui.scriptFileChooser->setExpectedKind(Core::Utils::PathChooser::File); + m_ui.scriptFileChooser->setPromptDialogTitle(tr("Choose Location of Startup Script File")); + m_ui.scriptFileChooser->setPath(m_settings->m_scriptFile); m_ui.environmentEdit->setText(m_settings->m_gdbEnv); m_ui.autoStartBox->setChecked(m_settings->m_autoRun); m_ui.autoQuitBox->setChecked(m_settings->m_autoQuit); - m_ui.gdbStartupScriptEdit->setText(m_settings->m_scriptFile); // FIXME m_ui.autoStartBox->hide(); @@ -100,32 +104,22 @@ QWidget *GdbOptionPage::createPage(QWidget *parent) m_ui.environmentEdit->hide(); m_ui.labelEnvironment->hide(); - connect(m_ui.browseForGdbButton, SIGNAL(clicked()), - this, SLOT(browseForGdb())); - connect(m_ui.browseForScriptButton, SIGNAL(clicked()), - this, SLOT(browseForScript())); + connect(m_ui.gdbLocationChooser, SIGNAL(changed()), + this, SLOT(onGdbLocationChanged())); + connect(m_ui.scriptFileChooser, SIGNAL(changed()), + this, SLOT(onScriptFileChanged())); return w; } -void GdbOptionPage::browseForGdb() +void GdbOptionPage::onGdbLocationChanged() { - QString fileName = QFileDialog::getOpenFileName(m_ui.browseForGdbButton, - "Browse for gdb executable"); - if (fileName.isEmpty()) - return; - m_settings->m_gdbCmd = fileName; - m_ui.gdbLocationEdit->setText(fileName); + m_settings->m_gdbCmd = m_ui.gdbLocationChooser->path(); } -void GdbOptionPage::browseForScript() +void GdbOptionPage::onScriptFileChanged() { - QString fileName = QFileDialog::getOpenFileName(m_ui.browseForGdbButton, - "Browse for gdb startup script"); - if (fileName.isEmpty()) - return; - m_settings->m_scriptFile = fileName; - m_ui.gdbStartupScriptEdit->setText(fileName); + m_settings->m_scriptFile = m_ui.scriptFileChooser->path(); } void GdbOptionPage::finished(bool accepted) @@ -133,11 +127,11 @@ void GdbOptionPage::finished(bool accepted) if (!accepted) return; - m_settings->m_gdbCmd = m_ui.gdbLocationEdit->text(); + m_settings->m_gdbCmd = m_ui.gdbLocationChooser->path(); m_settings->m_gdbEnv = m_ui.environmentEdit->text(); m_settings->m_autoRun = m_ui.autoStartBox->isChecked(); m_settings->m_autoQuit = m_ui.autoQuitBox->isChecked(); - m_settings->m_scriptFile = m_ui.gdbStartupScriptEdit->text(); + m_settings->m_scriptFile = m_ui.scriptFileChooser->path(); Core::ICore *coreIFace = m_pm->getObject(); if (!coreIFace || !coreIFace->settings()) diff --git a/src/plugins/debugger/gdboptionpage.h b/src/plugins/debugger/gdboptionpage.h index b9da4ea0111..d306e03e20f 100644 --- a/src/plugins/debugger/gdboptionpage.h +++ b/src/plugins/debugger/gdboptionpage.h @@ -62,8 +62,8 @@ public: void finished(bool accepted); public slots: - void browseForGdb(); - void browseForScript(); + void onGdbLocationChanged(); + void onScriptFileChanged(); private: ExtensionSystem::PluginManager *m_pm; diff --git a/src/plugins/debugger/gdboptionpage.ui b/src/plugins/debugger/gdboptionpage.ui index a7496851188..580f13c0d66 100644 --- a/src/plugins/debugger/gdboptionpage.ui +++ b/src/plugins/debugger/gdboptionpage.ui @@ -32,10 +32,7 @@ 6 - - - - + @@ -46,9 +43,6 @@ Gdb Location: - - gdbLocationEdit - @@ -61,40 +55,6 @@ - - - - - - - - :/qworkbench/images/fileopen.png:/qworkbench/images/fileopen.png - - - false - - - - - - - - - - - 21 - 23 - - - - ... - - - - :/qworkbench/images/fileopen.png:/qworkbench/images/fileopen.png - - - @@ -105,6 +65,12 @@ + + + + + + @@ -137,6 +103,14 @@ + + + Core::Utils::PathChooser + QWidget +
utils/pathchooser.h
+ 1 +
+
From 4f370af4fe38afe904f9edb96fad9771da8078ab Mon Sep 17 00:00:00 2001 From: con Date: Thu, 11 Dec 2008 15:07:14 +0100 Subject: [PATCH 10/21] Fixes: - Avoid ugly toolbar by default on mac --- src/plugins/coreplugin/navigationwidget.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/plugins/coreplugin/navigationwidget.cpp b/src/plugins/coreplugin/navigationwidget.cpp index 82ed13a29e8..8e84df39321 100644 --- a/src/plugins/coreplugin/navigationwidget.cpp +++ b/src/plugins/coreplugin/navigationwidget.cpp @@ -334,6 +334,10 @@ NavigationSubWidget::NavigationSubWidget(NavigationWidget *parentWidget) m_navigationComboBox = new NavComboBox(this); m_navigationWidget = 0; +#ifdef Q_OS_MAC + // this is to avoid ugly tool bar behavior + m_navigationComboBox->setMaximumWidth(130); +#endif m_toolbar = new QToolBar(this); m_toolbar->setContentsMargins(0, 0, 0, 0); From c4b222695e30276c6a911eb361721fd3f3ad87ac Mon Sep 17 00:00:00 2001 From: con Date: Thu, 11 Dec 2008 15:11:15 +0100 Subject: [PATCH 11/21] Fixes: - Choose... buttons are push buttons on mac --- src/libs/utils/pathchooser.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/libs/utils/pathchooser.cpp b/src/libs/utils/pathchooser.cpp index 81a2228e669..100fdbe717f 100644 --- a/src/libs/utils/pathchooser.cpp +++ b/src/libs/utils/pathchooser.cpp @@ -46,11 +46,12 @@ #include #include #include +#include namespace Core { namespace Utils { -#ifdef Q_OS_OSX +#ifdef Q_OS_MAC /*static*/ const char * const PathChooser::browseButtonLabel = "Choose..."; #else /*static*/ const char * const PathChooser::browseButtonLabel = "Browse..."; @@ -112,7 +113,11 @@ PathChooser::PathChooser(QWidget *parent) : hLayout->addWidget(m_d->m_lineEdit); hLayout->setSizeConstraint(QLayout::SetMinimumSize); +#ifdef Q_OS_MAC + QPushButton *browseButton = new QPushButton; +#else QToolButton *browseButton = new QToolButton; +#endif browseButton->setText(tr(browseButtonLabel)); connect(browseButton, SIGNAL(clicked()), this, SLOT(slotBrowse())); From 18c8471158f89d7668c8c711c419b3b077d93526 Mon Sep 17 00:00:00 2001 From: mae Date: Thu, 11 Dec 2008 15:50:37 +0100 Subject: [PATCH 12/21] line is blockNumber + 1 --- src/plugins/texteditor/basetexteditor.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/texteditor/basetexteditor.cpp b/src/plugins/texteditor/basetexteditor.cpp index 0772e4f154a..1cff254452c 100644 --- a/src/plugins/texteditor/basetexteditor.cpp +++ b/src/plugins/texteditor/basetexteditor.cpp @@ -2517,7 +2517,7 @@ void BaseTextEditor::extraAreaMouseEvent(QMouseEvent *e) } } else if (e->button() == Qt::RightButton) { QMenu * contextMenu = new QMenu(this); - emit d->m_editable->markContextMenuRequested(editableInterface(), cursor.blockNumber(), contextMenu); + emit d->m_editable->markContextMenuRequested(editableInterface(), cursor.blockNumber() + 1, contextMenu); if (!contextMenu->isEmpty()) contextMenu->exec(e->globalPos()); delete contextMenu; From 5ba9cbc56580782972ea025cf0b0a828d4233d90 Mon Sep 17 00:00:00 2001 From: hjk Date: Thu, 11 Dec 2008 16:10:47 +0100 Subject: [PATCH 13/21] nicer type display for std::map (not including an actual dumper yet) --- src/plugins/debugger/watchhandler.cpp | 15 ++++++++-- tests/manual/gdbdebugger/simple/app.cpp | 39 +++++++++++++++++++++++-- 2 files changed, 50 insertions(+), 4 deletions(-) diff --git a/src/plugins/debugger/watchhandler.cpp b/src/plugins/debugger/watchhandler.cpp index 6f443c92b47..5328a171aea 100644 --- a/src/plugins/debugger/watchhandler.cpp +++ b/src/plugins/debugger/watchhandler.cpp @@ -411,7 +411,7 @@ static QString niceType(QString type) "std::allocator >", "std::wstring"); // std::vector - static QRegExp re1("std::vector<(.*)\\s*,std::allocator<(.*)>\\s*>"); + static QRegExp re1("std::vector<(.*), std::allocator<(.*)>\\s*>"); re1.setMinimal(true); for (int i = 0; i != 10; ++i) { if (re1.indexIn(type) == -1 || re1.cap(1) != re1.cap(2)) @@ -420,7 +420,7 @@ static QString niceType(QString type) } // std::list - static QRegExp re2("std::list<(.*)\\s*,std::allocator<(.*)>\\s*>"); + static QRegExp re2("std::list<(.*), std::allocator<(.*)>\\s*>"); re2.setMinimal(true); for (int i = 0; i != 10; ++i) { if (re2.indexIn(type) == -1 || re2.cap(1) != re2.cap(2)) @@ -428,6 +428,17 @@ static QString niceType(QString type) type.replace(re2.cap(0), "std::list<" + re2.cap(1) + ">"); } + // std::map + static QRegExp re3("std::map<(.*), (.*), std::less<(.*)\\s*>, " + "std::allocator > >"); + re3.setMinimal(true); + for (int i = 0; i != 10; ++i) { + if (re3.indexIn(type) == -1 || re3.cap(1) != re3.cap(3) + || re3.cap(1) != re3.cap(4) || re3.cap(2) != re3.cap(5)) + break; + type.replace(re3.cap(0), "std::map<" + re3.cap(1) + ", " + re3.cap(2) + ">"); + } + type.replace(" >", ">"); } return type; diff --git a/tests/manual/gdbdebugger/simple/app.cpp b/tests/manual/gdbdebugger/simple/app.cpp index dbc7eebcd3c..ab5ee635b5a 100644 --- a/tests/manual/gdbdebugger/simple/app.cpp +++ b/tests/manual/gdbdebugger/simple/app.cpp @@ -53,6 +53,7 @@ #include #include +#include #include #include #include @@ -131,7 +132,6 @@ void testArray() } } - void testQByteArray() { QByteArray ba = "Hello"; @@ -142,7 +142,6 @@ void testQByteArray() ba += 2; } - void testQHash() { QHash hgg0; @@ -412,6 +411,41 @@ void testStdList() vec.push_back(false); } +void testStdMap() +{ + std::map ggl; + ggl[11] = QStringList() << "11"; + ggl[22] = QStringList() << "22"; + + typedef std::map T; + T ggt; + ggt[11] = QStringList() << "11"; + ggt[22] = QStringList() << "22"; + +#if 0 + std::map gg0; + gg0[11] = 11.0; + gg0[22] = 22.0; + + + std::map gg1; + gg1["22.0"] = 22.0; + + std::map gg2; + gg2[22] = "22.0"; + + std::map gg3; + gg3["22.0"] = Foo(22); + gg3["33.0"] = Foo(33); + + QObject ob; + std::map > map; + map.insert("Hallo", QPointer(&ob)); + map.insert("Welt", QPointer(&ob)); + map.insert(".", QPointer(&ob)); +#endif +} + void testStdStack() { std::stack plist1; @@ -795,6 +829,7 @@ int main(int argc, char *argv[]) testArray(); testStdList(); + testStdMap(); testStdStack(); testStdString(); testStdVector(); From 0df94d51918b70249bdaebf3c931cdb45fbb7f79 Mon Sep 17 00:00:00 2001 From: mae Date: Thu, 11 Dec 2008 16:16:56 +0100 Subject: [PATCH 14/21] minimum indent or tab width is 1 --- src/plugins/texteditor/generalsettingspage.ui | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/plugins/texteditor/generalsettingspage.ui b/src/plugins/texteditor/generalsettingspage.ui index 11f6b8b997e..140f94628d6 100644 --- a/src/plugins/texteditor/generalsettingspage.ui +++ b/src/plugins/texteditor/generalsettingspage.ui @@ -66,6 +66,9 @@ 0 + + 1 + 20 @@ -132,6 +135,9 @@ 0 + + 1 + 20 From 0c20f6d9d154e181feabb21218be15e4348cda04 Mon Sep 17 00:00:00 2001 From: goro Date: Thu, 11 Dec 2008 16:19:07 +0100 Subject: [PATCH 15/21] Plural fix --- src/plugins/quickopen/opendocumentsfilter.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/plugins/quickopen/opendocumentsfilter.h b/src/plugins/quickopen/opendocumentsfilter.h index 7b24aeeca02..6957119727e 100644 --- a/src/plugins/quickopen/opendocumentsfilter.h +++ b/src/plugins/quickopen/opendocumentsfilter.h @@ -54,8 +54,8 @@ class OpenDocumentsFilter : public QuickOpen::IQuickOpenFilter public: OpenDocumentsFilter(Core::EditorManager *editorManager); - QString trName() const { return tr("Open document"); } - QString name() const { return "Open document"; } + QString trName() const { return tr("Open documents"); } + QString name() const { return "Open documents"; } QuickOpen::IQuickOpenFilter::Priority priority() const { return QuickOpen::IQuickOpenFilter::Medium; } QList matchesFor(const QString &entry); void accept(QuickOpen::FilterEntry selection) const; From ce66bc3c1e64a8a4eb7f40824a75ec52420340cf Mon Sep 17 00:00:00 2001 From: Roberto Raggi Date: Thu, 11 Dec 2008 16:35:50 +0100 Subject: [PATCH 16/21] Don't do a GC call when updating the project, it can remove useful "yet not parsed" documents. --- src/plugins/qt4projectmanager/qt4project.cpp | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/plugins/qt4projectmanager/qt4project.cpp b/src/plugins/qt4projectmanager/qt4project.cpp index c9263201937..9e47ac404d2 100644 --- a/src/plugins/qt4projectmanager/qt4project.cpp +++ b/src/plugins/qt4projectmanager/qt4project.cpp @@ -498,12 +498,8 @@ void Qt4Project::updateCodeModel() pinfo.sourceFiles = files; modelmanager->updateProjectInfo(pinfo); - - modelmanager->GC(); modelmanager->updateSourceFiles(pinfo.sourceFiles); } - - // update info } From bab60d14b341edc4fd1f81ec12cc460441948c3b Mon Sep 17 00:00:00 2001 From: Roberto Raggi Date: Fri, 12 Dec 2008 10:07:58 +0100 Subject: [PATCH 17/21] Introduced CPlusPlus::Snapshot, it contains a snap shot of the indexer's current state. This change removes a number of wrong usages of the CppModelManager::documents()/document(). --- src/libs/cplusplus/CppDocument.h | 12 ++++++++++- src/libs/cplusplus/LookupContext.cpp | 2 +- src/libs/cplusplus/LookupContext.h | 6 +++--- src/libs/cplusplus/TypeOfExpression.cpp | 12 +++++------ src/libs/cplusplus/TypeOfExpression.h | 8 +++---- src/plugins/cppeditor/cppeditor.cpp | 14 ++++++++----- src/plugins/cpptools/cppcodecompletion.cpp | 8 ++++--- src/plugins/cpptools/cpphoverhandler.cpp | 6 ++++-- src/plugins/cpptools/cppmodelmanager.cpp | 21 ++++++++----------- src/plugins/cpptools/cppmodelmanager.h | 5 ++--- .../cpptools/cppmodelmanagerinterface.h | 8 ++----- src/plugins/cpptools/searchsymbols.h | 1 + src/plugins/designer/workbenchintegration.cpp | 4 ++-- 13 files changed, 59 insertions(+), 48 deletions(-) diff --git a/src/libs/cplusplus/CppDocument.h b/src/libs/cplusplus/CppDocument.h index b31f0d2bc64..54de3c801ea 100644 --- a/src/libs/cplusplus/CppDocument.h +++ b/src/libs/cplusplus/CppDocument.h @@ -40,7 +40,7 @@ #include #include -#include +#include #include #include #include @@ -236,6 +236,16 @@ private: QList _macroUses; }; +class CPLUSPLUS_EXPORT Snapshot: public QMap +{ +public: + Snapshot() + { } + + ~Snapshot() + { } +}; + } // end of namespace CPlusPlus #endif // CPPDOCUMENT_H diff --git a/src/libs/cplusplus/LookupContext.cpp b/src/libs/cplusplus/LookupContext.cpp index 67eb05d7f4a..8b24b59f5ef 100644 --- a/src/libs/cplusplus/LookupContext.cpp +++ b/src/libs/cplusplus/LookupContext.cpp @@ -77,7 +77,7 @@ LookupContext::LookupContext(Control *control) LookupContext::LookupContext(Symbol *symbol, Document::Ptr expressionDocument, Document::Ptr thisDocument, - const QMap &documents) + const Snapshot &documents) : _symbol(symbol), _expressionDocument(expressionDocument), _thisDocument(thisDocument), diff --git a/src/libs/cplusplus/LookupContext.h b/src/libs/cplusplus/LookupContext.h index 36ea6a8298f..18754bf6670 100644 --- a/src/libs/cplusplus/LookupContext.h +++ b/src/libs/cplusplus/LookupContext.h @@ -57,7 +57,7 @@ public: LookupContext(Symbol *symbol, Document::Ptr expressionDocument, Document::Ptr thisDocument, - const QMap &documents); + const Snapshot &documents); LookupContext(Symbol *symbol, const LookupContext &context); @@ -87,7 +87,7 @@ public: QList resolveClassOrNamespace(Name *name) const { return resolveClassOrNamespace(name, visibleScopes()); } - QMap documents() const + Snapshot snapshot() const { return _documents; } enum ResolveMode { @@ -140,7 +140,7 @@ private: Document::Ptr _thisDocument; // All documents. - QMap _documents; + Snapshot _documents; // Visible scopes. QList _visibleScopes; diff --git a/src/libs/cplusplus/TypeOfExpression.cpp b/src/libs/cplusplus/TypeOfExpression.cpp index 68732f78ea0..cb373cce027 100644 --- a/src/libs/cplusplus/TypeOfExpression.cpp +++ b/src/libs/cplusplus/TypeOfExpression.cpp @@ -46,9 +46,9 @@ TypeOfExpression::TypeOfExpression(): { } -void TypeOfExpression::setDocuments(const QMap &documents) +void TypeOfExpression::setSnapshot(const Snapshot &documents) { - m_documents = documents; + m_snapshot = documents; m_lookupContext = LookupContext(); } @@ -59,12 +59,12 @@ QList TypeOfExpression::operator()(const QString &expr { QString code = expression; if (mode == Preprocess) - code = preprocessedExpression(expression, m_documents, document); + code = preprocessedExpression(expression, m_snapshot, document); Document::Ptr expressionDoc = documentForExpression(code); m_ast = extractExpressionAST(expressionDoc); m_lookupContext = LookupContext(lastVisibleSymbol, expressionDoc, - document, m_documents); + document, m_snapshot); ResolveExpression resolveExpression(m_lookupContext); return resolveExpression(m_ast); @@ -103,7 +103,7 @@ Document::Ptr TypeOfExpression::documentForExpression(const QString &expression) return doc; } -void TypeOfExpression::processEnvironment(QMap documents, +void TypeOfExpression::processEnvironment(Snapshot documents, Document::Ptr doc, Environment *env, QSet *processed) const { @@ -122,7 +122,7 @@ void TypeOfExpression::processEnvironment(QMap documents } QString TypeOfExpression::preprocessedExpression(const QString &expression, - QMap documents, + Snapshot documents, Document::Ptr thisDocument) const { Environment env; diff --git a/src/libs/cplusplus/TypeOfExpression.h b/src/libs/cplusplus/TypeOfExpression.h index e6a9a7f4b66..87d4113f30e 100644 --- a/src/libs/cplusplus/TypeOfExpression.h +++ b/src/libs/cplusplus/TypeOfExpression.h @@ -61,7 +61,7 @@ public: * Also clears the lookup context, so can be used to make sure references * to the documents previously used are removed. */ - void setDocuments(const QMap &documents); + void setSnapshot(const Snapshot &documents); enum PreprocessMode { NoPreprocess, @@ -100,15 +100,15 @@ private: ExpressionAST *extractExpressionAST(Document::Ptr doc) const; Document::Ptr documentForExpression(const QString &expression) const; - void processEnvironment(QMap documents, + void processEnvironment(CPlusPlus::Snapshot documents, CPlusPlus::Document::Ptr doc, CPlusPlus::Environment *env, QSet *processed) const; QString preprocessedExpression(const QString &expression, - QMap documents, + CPlusPlus::Snapshot documents, CPlusPlus::Document::Ptr thisDocument) const; - QMap m_documents; + Snapshot m_snapshot; ExpressionAST *m_ast; LookupContext m_lookupContext; }; diff --git a/src/plugins/cppeditor/cppeditor.cpp b/src/plugins/cppeditor/cppeditor.cpp index acf55f6d93f..49b130ebc1c 100644 --- a/src/plugins/cppeditor/cppeditor.cpp +++ b/src/plugins/cppeditor/cppeditor.cpp @@ -427,7 +427,9 @@ void CPPEditor::switchDeclarationDefinition() if (!m_modelManager) return; - Document::Ptr doc = m_modelManager->document(file()->fileName()); + const Snapshot snapshot = m_modelManager->snapshot(); + + Document::Ptr doc = snapshot.value(file()->fileName()); if (!doc) return; Symbol *lastSymbol = doc->findSymbolAt(line, column); @@ -445,7 +447,7 @@ void CPPEditor::switchDeclarationDefinition() if (f) { TypeOfExpression typeOfExpression; - typeOfExpression.setDocuments(m_modelManager->documents()); + typeOfExpression.setSnapshot(m_modelManager->snapshot()); QList resolvedSymbols = typeOfExpression(QString(), doc, lastSymbol); const LookupContext &context = typeOfExpression.lookupContext(); @@ -474,10 +476,12 @@ void CPPEditor::jumpToDefinition() if (!m_modelManager) return; + const Snapshot snapshot = m_modelManager->snapshot(); + // Find the last symbol up to the cursor position int line = 0, column = 0; convertPosition(position(), &line, &column); - Document::Ptr doc = m_modelManager->document(file()->fileName()); + Document::Ptr doc = snapshot.value(file()->fileName()); if (!doc) return; @@ -503,7 +507,7 @@ void CPPEditor::jumpToDefinition() // Evaluate the type of the expression TypeOfExpression typeOfExpression; - typeOfExpression.setDocuments(m_modelManager->documents()); + typeOfExpression.setSnapshot(m_modelManager->snapshot()); QList resolvedSymbols = typeOfExpression(expression, doc, lastSymbol); @@ -572,7 +576,7 @@ Symbol *CPPEditor::findDefinition(Symbol *lastSymbol) QualifiedNameId *q = control.qualifiedNameId(&qualifiedName[0], qualifiedName.size()); LookupContext context(&control); - const QMap documents = m_modelManager->documents(); + const Snapshot documents = m_modelManager->snapshot(); foreach (Document::Ptr doc, documents) { QList visibleScopes; visibleScopes.append(doc->globalSymbols()); diff --git a/src/plugins/cpptools/cppcodecompletion.cpp b/src/plugins/cpptools/cppcodecompletion.cpp index 4606bd948f3..a0fbe82a542 100644 --- a/src/plugins/cpptools/cppcodecompletion.cpp +++ b/src/plugins/cpptools/cppcodecompletion.cpp @@ -434,10 +434,12 @@ int CppCodeCompletion::startCompletion(TextEditor::ITextEditable *editor) //if (! expression.isEmpty()) //qDebug() << "***** expression:" << expression; - if (Document::Ptr thisDocument = m_manager->document(fileName)) { + const Snapshot snapshot = m_manager->snapshot(); + + if (Document::Ptr thisDocument = snapshot.value(fileName)) { Symbol *symbol = thisDocument->findSymbolAt(line, column); - typeOfExpression.setDocuments(m_manager->documents()); + typeOfExpression.setSnapshot(m_manager->snapshot()); QList resolvedTypes = typeOfExpression(expression, thisDocument, symbol, TypeOfExpression::Preprocess); @@ -1034,7 +1036,7 @@ void CppCodeCompletion::cleanup() // Set empty map in order to avoid referencing old versions of the documents // until the next completion - typeOfExpression.setDocuments(QMap()); + typeOfExpression.setSnapshot(Snapshot()); } int CppCodeCompletion::findStartOfName(const TextEditor::ITextEditor *editor) diff --git a/src/plugins/cpptools/cpphoverhandler.cpp b/src/plugins/cpptools/cpphoverhandler.cpp index f3831e5394d..fab0d83b31f 100644 --- a/src/plugins/cpptools/cpphoverhandler.cpp +++ b/src/plugins/cpptools/cpphoverhandler.cpp @@ -165,9 +165,11 @@ void CppHoverHandler::updateHelpIdAndTooltip(TextEditor::ITextEditor *editor, in QTextCursor tc(edit->document()); tc.setPosition(pos); + const Snapshot documents = m_manager->snapshot(); + const int lineNumber = tc.block().blockNumber() + 1; const QString fileName = editor->file()->fileName(); - Document::Ptr doc = m_manager->document(fileName); + Document::Ptr doc = documents.value(fileName); if (doc) { foreach (Document::DiagnosticMessage m, doc->diagnosticMessages()) { if (m.line() == lineNumber) { @@ -212,7 +214,7 @@ void CppHoverHandler::updateHelpIdAndTooltip(TextEditor::ITextEditor *editor, in Symbol *lastSymbol = doc->findSymbolAt(line, column); TypeOfExpression typeOfExpression; - typeOfExpression.setDocuments(m_manager->documents()); + typeOfExpression.setSnapshot(documents); QList types = typeOfExpression(expression, doc, lastSymbol); if (!types.isEmpty()) { diff --git a/src/plugins/cpptools/cppmodelmanager.cpp b/src/plugins/cpptools/cppmodelmanager.cpp index 9adc892713d..a02656ee8c9 100644 --- a/src/plugins/cpptools/cppmodelmanager.cpp +++ b/src/plugins/cpptools/cppmodelmanager.cpp @@ -143,7 +143,7 @@ protected: private: QPointer m_modelManager; - CppModelManager::DocumentTable m_documents; + Snapshot m_snapshot; Environment env; pp m_proc; QStringList m_includePaths; @@ -160,7 +160,7 @@ private: CppPreprocessor::CppPreprocessor(QPointer modelManager) : m_modelManager(modelManager), - m_documents(modelManager->documents()), + m_snapshot(modelManager->snapshot()), m_proc(this, env) { } @@ -340,7 +340,7 @@ void CppPreprocessor::mergeEnvironment(Document::Ptr doc, QSet *process processed->insert(fn); foreach (QString includedFile, doc->includedFiles()) { - mergeEnvironment(m_documents.value(includedFile), processed); + mergeEnvironment(m_snapshot.value(includedFile), processed); } foreach (const Macro macro, doc->definedMacros()) { @@ -386,7 +386,7 @@ void CppPreprocessor::sourceNeeded(QString &fileName, IncludeType type, } if (! contents.isEmpty()) { - Document::Ptr cachedDoc = m_documents.value(fileName); + Document::Ptr cachedDoc = m_snapshot.value(fileName); if (cachedDoc && m_currentDoc) { mergeEnvironment(cachedDoc); } else { @@ -477,11 +477,8 @@ CppModelManager::CppModelManager(QObject *parent) : CppModelManager::~CppModelManager() { } -Document::Ptr CppModelManager::document(const QString &fileName) const -{ return m_documents.value(fileName); } - -CppModelManager::DocumentTable CppModelManager::documents() const -{ return m_documents; } +Snapshot CppModelManager::snapshot() const +{ return m_snapshot; } void CppModelManager::ensureUpdated() { @@ -672,7 +669,7 @@ void CppModelManager::emitDocumentUpdated(Document::Ptr doc) void CppModelManager::onDocumentUpdated(Document::Ptr doc) { const QString fileName = doc->fileName(); - m_documents[fileName] = doc; + m_snapshot[fileName] = doc; QList openedEditors = m_core->editorManager()->openedEditors(); foreach (Core::IEditor *editor, openedEditors) { if (editor->file()->fileName() == fileName) { @@ -837,7 +834,7 @@ void CppModelManager::parse(QFutureInterface &future, void CppModelManager::GC() { - DocumentTable documents = m_documents; + Snapshot documents = m_snapshot; QSet processed; QStringList todo = projectFiles(); @@ -868,7 +865,7 @@ void CppModelManager::GC() } emit aboutToRemoveFiles(removedFiles); - m_documents = documents; + m_snapshot = documents; } diff --git a/src/plugins/cpptools/cppmodelmanager.h b/src/plugins/cpptools/cppmodelmanager.h index 3b2f4e19993..25947056203 100644 --- a/src/plugins/cpptools/cppmodelmanager.h +++ b/src/plugins/cpptools/cppmodelmanager.h @@ -76,8 +76,7 @@ public: virtual ProjectInfo projectInfo(ProjectExplorer::Project *project) const; virtual void updateProjectInfo(const ProjectInfo &pinfo); - virtual CPlusPlus::Document::Ptr document(const QString &fileName) const; - virtual DocumentTable documents() const; + virtual CPlusPlus::Snapshot snapshot() const; virtual void GC(); QFuture refreshSourceFiles(const QStringList &sourceFiles); @@ -146,7 +145,7 @@ private: Core::ICore *m_core; ProjectExplorer::ProjectExplorerPlugin *m_projectExplorer; CppHoverHandler *m_hoverHandler; - DocumentTable m_documents; + CPlusPlus::Snapshot m_snapshot; // cache bool m_dirty; diff --git a/src/plugins/cpptools/cppmodelmanagerinterface.h b/src/plugins/cpptools/cppmodelmanagerinterface.h index e3ad4fe961b..6dc0da67ca0 100644 --- a/src/plugins/cpptools/cppmodelmanagerinterface.h +++ b/src/plugins/cpptools/cppmodelmanagerinterface.h @@ -46,14 +46,11 @@ namespace ProjectExplorer { namespace CppTools { -class CPPTOOLS_EXPORT CppModelManagerInterface - : public QObject +class CPPTOOLS_EXPORT CppModelManagerInterface: public QObject { Q_OBJECT public: - typedef QMap DocumentTable; // ### remove me - class ProjectInfo { public: @@ -89,8 +86,7 @@ public: virtual void GC() = 0; virtual void updateSourceFiles(const QStringList &sourceFiles) = 0; - virtual CPlusPlus::Document::Ptr document(const QString &fileName) const = 0; - virtual DocumentTable documents() const = 0; + virtual CPlusPlus::Snapshot snapshot() const = 0; virtual QList projectInfos() const = 0; virtual ProjectInfo projectInfo(ProjectExplorer::Project *project) const = 0; diff --git a/src/plugins/cpptools/searchsymbols.h b/src/plugins/cpptools/searchsymbols.h index 4997e5cf049..494455f6d85 100644 --- a/src/plugins/cpptools/searchsymbols.h +++ b/src/plugins/cpptools/searchsymbols.h @@ -43,6 +43,7 @@ #include #include #include +#include #include diff --git a/src/plugins/designer/workbenchintegration.cpp b/src/plugins/designer/workbenchintegration.cpp index 4e49218a5c4..273aa2cfb82 100644 --- a/src/plugins/designer/workbenchintegration.cpp +++ b/src/plugins/designer/workbenchintegration.cpp @@ -95,7 +95,7 @@ QList WorkbenchIntegration::findDocuments(const QString &uiFileNa QList docList; // take all docs - CppTools::CppModelManagerInterface::DocumentTable docTable = cppModelManager->documents(); + CPlusPlus::Snapshot docTable = cppModelManager->snapshot(); foreach (Document::Ptr doc, docTable) { // we go through all documents QStringList includes = doc->includedFiles(); foreach (QString include, includes) { @@ -253,7 +253,7 @@ Document::Ptr WorkbenchIntegration::findDefinition(Function *functionDeclaration QualifiedNameId *q = control.qualifiedNameId(&qualifiedName[0], qualifiedName.size()); LookupContext context(&control); - const QMap documents = cppModelManager->documents(); + const Snapshot documents = cppModelManager->snapshot(); foreach (Document::Ptr doc, documents) { QList visibleScopes; visibleScopes.append(doc->globalSymbols()); From aed481dec8e7b666b1ff999639fed9a1632149a0 Mon Sep 17 00:00:00 2001 From: Roberto Raggi Date: Fri, 12 Dec 2008 10:09:47 +0100 Subject: [PATCH 18/21] Don't hardode -O3 optimization level for cpptools. --- src/plugins/cpptools/cpptools.pro | 1 - 1 file changed, 1 deletion(-) diff --git a/src/plugins/cpptools/cpptools.pro b/src/plugins/cpptools/cpptools.pro index 74112379e39..170f62b5bf1 100644 --- a/src/plugins/cpptools/cpptools.pro +++ b/src/plugins/cpptools/cpptools.pro @@ -6,7 +6,6 @@ include(cpptools_dependencies.pri) # DEFINES += QT_NO_CAST_FROM_ASCII DEFINES += QT_NO_CAST_TO_ASCII -unix:QMAKE_CXXFLAGS_DEBUG += -O3 INCLUDEPATH += . DEFINES += CPPTOOLS_LIBRARY CONFIG += help From 0145a3dea966df75afbf5c85c824d37795ad645c Mon Sep 17 00:00:00 2001 From: Roberto Raggi Date: Fri, 12 Dec 2008 10:40:25 +0100 Subject: [PATCH 19/21] Look at the signed/unsigned specifiers when checking function return types. --- src/plugins/cpptools/cppcodecompletion.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/plugins/cpptools/cppcodecompletion.cpp b/src/plugins/cpptools/cppcodecompletion.cpp index a0fbe82a542..addf5301f79 100644 --- a/src/plugins/cpptools/cppcodecompletion.cpp +++ b/src/plugins/cpptools/cppcodecompletion.cpp @@ -966,8 +966,10 @@ void CppCodeCompletion::complete(const TextEditor::CompletionItem &item) if (Function *function = symbol->type()->asFunction()) { // If the member is a function, automatically place the opening parenthesis, // except when it might take template parameters. - if (!function->returnType().isValid() - && (function->identity() && !function->identity()->isDestructorNameId())) { + const bool hasReturnType = function->returnType().isValid() || + function->returnType().isSigned() || + function->returnType().isUnsigned(); + if (! hasReturnType && (function->identity() && !function->identity()->isDestructorNameId())) { // Don't insert any magic, since the user might have just wanted to select the class } else if (function->templateParameterCount() != 0) { From cded30f0b4cf54df20f681696ea11ab9f5b32b38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thorbj=C3=B8rn=20Lindeijer?= Date: Fri, 12 Dec 2008 11:52:04 +0100 Subject: [PATCH 20/21] Hide the "Available Filters" locator Done based on new IQuickOpenFilter property, isHidden. --- src/plugins/quickopen/directoryfilter.cpp | 4 +-- src/plugins/quickopen/filesystemfilter.cpp | 4 +-- src/plugins/quickopen/iquickopenfilter.cpp | 24 ++++++++++---- src/plugins/quickopen/iquickopenfilter.h | 33 +++++++++++-------- .../quickopen/quickopenfiltersfilter.cpp | 6 ++-- src/plugins/quickopen/quickopentoolwindow.cpp | 4 +-- src/plugins/quickopen/settingspage.cpp | 5 ++- 7 files changed, 51 insertions(+), 29 deletions(-) diff --git a/src/plugins/quickopen/directoryfilter.cpp b/src/plugins/quickopen/directoryfilter.cpp index afc22af054e..30f7fc28fae 100644 --- a/src/plugins/quickopen/directoryfilter.cpp +++ b/src/plugins/quickopen/directoryfilter.cpp @@ -62,7 +62,7 @@ QByteArray DirectoryFilter::saveState() const out << m_directories; out << m_filters; out << shortcutString(); - out << defaultActiveState(); + out << isIncludedByDefault(); out << m_files; return value; } @@ -120,7 +120,7 @@ bool DirectoryFilter::openConfigDialog(QWidget *parent, bool &needsRefresh) m_ui.directoryList->addItems(m_directories); m_ui.fileTypeEdit->setText(m_filters.join(tr(","))); m_ui.shortcutEdit->setText(shortcutString()); - m_ui.defaultFlag->setChecked(!defaultActiveState()); + m_ui.defaultFlag->setChecked(!isIncludedByDefault()); updateOptionButtons(); if (dialog.exec() == QDialog::Accepted) { QMutexLocker locker(&m_lock); diff --git a/src/plugins/quickopen/filesystemfilter.cpp b/src/plugins/quickopen/filesystemfilter.cpp index 386523ebc43..4631a8d9347 100644 --- a/src/plugins/quickopen/filesystemfilter.cpp +++ b/src/plugins/quickopen/filesystemfilter.cpp @@ -114,7 +114,7 @@ bool FileSystemFilter::openConfigDialog(QWidget *parent, bool &needsRefresh) ui.setupUi(&dialog); ui.hiddenFilesFlag->setChecked(m_includeHidden); - ui.limitCheck->setChecked(!defaultActiveState()); + ui.limitCheck->setChecked(!isIncludedByDefault()); ui.shortcutEdit->setText(shortcutString()); if (dialog.exec() == QDialog::Accepted) { @@ -132,7 +132,7 @@ QByteArray FileSystemFilter::saveState() const QDataStream out(&value, QIODevice::WriteOnly); out << m_includeHidden; out << shortcutString(); - out << defaultActiveState(); + out << isIncludedByDefault(); return value; } diff --git a/src/plugins/quickopen/iquickopenfilter.cpp b/src/plugins/quickopen/iquickopenfilter.cpp index ad6441ca284..82922e3ba2a 100644 --- a/src/plugins/quickopen/iquickopenfilter.cpp +++ b/src/plugins/quickopen/iquickopenfilter.cpp @@ -43,7 +43,9 @@ using namespace QuickOpen; IQuickOpenFilter::IQuickOpenFilter(QObject *parent): - QObject(parent) + QObject(parent), + m_includedByDefault(false), + m_hidden(false) { } @@ -62,7 +64,7 @@ QByteArray IQuickOpenFilter::saveState() const QByteArray value; QDataStream out(&value, QIODevice::WriteOnly); out << shortcutString(); - out << defaultActiveState(); + out << isIncludedByDefault(); return value; } @@ -91,7 +93,7 @@ bool IQuickOpenFilter::openConfigDialog(QWidget *parent, bool &needsRefresh) QHBoxLayout *hlayout = new QHBoxLayout; QLineEdit *shortcutEdit = new QLineEdit(shortcutString()); QCheckBox *limitCheck = new QCheckBox(tr("Limit to prefix")); - limitCheck->setChecked(!defaultActiveState()); + limitCheck->setChecked(!isIncludedByDefault()); hlayout->addWidget(new QLabel(tr("Prefix:"))); hlayout->addWidget(shortcutEdit); @@ -120,12 +122,22 @@ bool IQuickOpenFilter::isConfigurable() const return true; } -bool IQuickOpenFilter::defaultActiveState() const +bool IQuickOpenFilter::isIncludedByDefault() const { - return m_default; + return m_includedByDefault; } void IQuickOpenFilter::setIncludedByDefault(bool includedByDefault) { - m_default = includedByDefault; + m_includedByDefault = includedByDefault; +} + +bool IQuickOpenFilter::isHidden() const +{ + return m_hidden; +} + +void IQuickOpenFilter::setHidden(bool hidden) +{ + m_hidden = hidden; } diff --git a/src/plugins/quickopen/iquickopenfilter.h b/src/plugins/quickopen/iquickopenfilter.h index 376b0d0fe91..d5591ac940f 100644 --- a/src/plugins/quickopen/iquickopenfilter.h +++ b/src/plugins/quickopen/iquickopenfilter.h @@ -87,26 +87,25 @@ public: IQuickOpenFilter(QObject *parent = 0); virtual ~IQuickOpenFilter() {} - /* visible name */ + /* Visible name. */ virtual QString trName() const = 0; - /* internal name */ + /* Internal name. */ virtual QString name() const = 0; - /* selection list order in case of multiple active filters (high goes on top) */ + /* Selection list order in case of multiple active filters (high goes on top). */ virtual Priority priority() const = 0; - /* string to type to use this filter exclusively */ - virtual QString shortcutString() const; - void setShortcutString(const QString &shortcut); + /* String to type to use this filter exclusively. */ + QString shortcutString() const; - /* list of matches for the given user entry */ + /* List of matches for the given user entry. */ virtual QList matchesFor(const QString &entry) = 0; - /* user has selected the given entry that belongs to this filter */ + /* User has selected the given entry that belongs to this filter. */ virtual void accept(FilterEntry selection) const = 0; - /* implement to update caches on user request, if that's a long operation */ + /* Implement to update caches on user request, if that's a long operation. */ virtual void refresh(QFutureInterface &future) = 0; /* Saved state is used to restore the filter at start up. */ @@ -126,9 +125,11 @@ public: * implementation returns true. */ virtual bool isConfigurable() const; - /* is this filter used also when the shortcutString is not used? */ - virtual bool defaultActiveState() const; - void setIncludedByDefault(bool includedByDefault); + /* Is this filter used also when the shortcutString is not used? */ + bool isIncludedByDefault() const; + + /* Returns whether the filter should be hidden from configuration and menus. */ + bool isHidden() const; static QString trimWildcards(const QString &str) { if (str.isEmpty()) @@ -143,9 +144,15 @@ public: return str.mid(first, last-first+1); } +protected: + void setShortcutString(const QString &shortcut); + void setIncludedByDefault(bool includedByDefault); + void setHidden(bool hidden); + private: QString m_shortcut; - bool m_default; + bool m_includedByDefault; + bool m_hidden; }; } // namespace QuickOpen diff --git a/src/plugins/quickopen/quickopenfiltersfilter.cpp b/src/plugins/quickopen/quickopenfiltersfilter.cpp index e8a487c7d94..519c56daec7 100644 --- a/src/plugins/quickopen/quickopenfiltersfilter.cpp +++ b/src/plugins/quickopen/quickopenfiltersfilter.cpp @@ -49,7 +49,7 @@ QuickOpenFiltersFilter::QuickOpenFiltersFilter(QuickOpenPlugin *plugin, m_icon(QIcon(Core::Constants::ICON_NEXT)) { setIncludedByDefault(true); - setShortcutString(QString()); + setHidden(true); } QString QuickOpenFiltersFilter::trName() const @@ -71,8 +71,8 @@ QList QuickOpenFiltersFilter::matchesFor(const QString &entry) { QList entries; if (entry.isEmpty()) { - foreach (IQuickOpenFilter* filter, m_plugin->filter()) { - if (!filter->shortcutString().isEmpty()) { + foreach (IQuickOpenFilter *filter, m_plugin->filter()) { + if (!filter->shortcutString().isEmpty() && !filter->isHidden()) { FilterEntry entry(this, filter->shortcutString(), QVariant::fromValue(filter), diff --git a/src/plugins/quickopen/quickopentoolwindow.cpp b/src/plugins/quickopen/quickopentoolwindow.cpp index 211947be8d0..9701923515a 100644 --- a/src/plugins/quickopen/quickopentoolwindow.cpp +++ b/src/plugins/quickopen/quickopentoolwindow.cpp @@ -314,7 +314,7 @@ void QuickOpenToolWindow::updateFilterList() { m_filterMenu->clear(); foreach (IQuickOpenFilter *filter, m_quickOpenPlugin->filter()) { - if (!filter->shortcutString().isEmpty()) { + if (!filter->shortcutString().isEmpty() && !filter->isHidden()) { QAction *action = m_filterMenu->addAction(filter->trName(), this, SLOT(filterSelected())); action->setData(qVariantFromValue(filter)); } @@ -396,7 +396,7 @@ QList QuickOpenToolWindow::filtersFor(const QString &text, QS searchText = text; QList activeFilters; foreach (IQuickOpenFilter *filter, filters) - if (filter->defaultActiveState()) + if (filter->isIncludedByDefault()) activeFilters << filter; return activeFilters; } diff --git a/src/plugins/quickopen/settingspage.cpp b/src/plugins/quickopen/settingspage.cpp index 76263c731ba..4b1f81fc867 100644 --- a/src/plugins/quickopen/settingspage.cpp +++ b/src/plugins/quickopen/settingspage.cpp @@ -121,8 +121,11 @@ void SettingsPage::updateFilterList() { m_ui.filterList->clear(); foreach (IQuickOpenFilter *filter, m_filters) { + if (filter->isHidden()) + continue; + QString title; - if (filter->defaultActiveState()) + if (filter->isIncludedByDefault()) title = filter->trName(); else title = tr("%1 (Prefix: %2)").arg(filter->trName()).arg(filter->shortcutString()); From 8e297aceddad7cb9378ac437461e160398e0f206 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thorbj=C3=B8rn=20Lindeijer?= Date: Fri, 12 Dec 2008 11:58:14 +0100 Subject: [PATCH 21/21] Plural fixes --- src/plugins/projectexplorer/allprojectsfilter.h | 4 ++-- src/plugins/projectexplorer/currentprojectfilter.h | 4 ++-- src/plugins/quickopen/filesystemfilter.h | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/plugins/projectexplorer/allprojectsfilter.h b/src/plugins/projectexplorer/allprojectsfilter.h index 3315e7b2de8..448483c7a77 100644 --- a/src/plugins/projectexplorer/allprojectsfilter.h +++ b/src/plugins/projectexplorer/allprojectsfilter.h @@ -55,8 +55,8 @@ class AllProjectsFilter : public QuickOpen::BaseFileFilter public: AllProjectsFilter(ProjectExplorerPlugin *pe, Core::ICore *core); - QString trName() const { return tr("File in any project"); } - QString name() const { return "File in any project"; } + QString trName() const { return tr("Files in any project"); } + QString name() const { return "Files in any project"; } QuickOpen::IQuickOpenFilter::Priority priority() const { return QuickOpen::IQuickOpenFilter::Low; } void refresh(QFutureInterface &future); diff --git a/src/plugins/projectexplorer/currentprojectfilter.h b/src/plugins/projectexplorer/currentprojectfilter.h index bacd3a73ea1..3e5d216632e 100644 --- a/src/plugins/projectexplorer/currentprojectfilter.h +++ b/src/plugins/projectexplorer/currentprojectfilter.h @@ -55,8 +55,8 @@ class CurrentProjectFilter : public QuickOpen::BaseFileFilter public: CurrentProjectFilter(ProjectExplorerPlugin *pe, Core::ICore *core); - QString trName() const { return tr("File in current project"); } - QString name() const { return "File in current project"; } + QString trName() const { return tr("Files in current project"); } + QString name() const { return "Files in current project"; } QuickOpen::IQuickOpenFilter::Priority priority() const { return QuickOpen::IQuickOpenFilter::Low; } void refresh(QFutureInterface &future); diff --git a/src/plugins/quickopen/filesystemfilter.h b/src/plugins/quickopen/filesystemfilter.h index 0e895a45aab..a404da038f0 100644 --- a/src/plugins/quickopen/filesystemfilter.h +++ b/src/plugins/quickopen/filesystemfilter.h @@ -56,8 +56,8 @@ class FileSystemFilter : public QuickOpen::IQuickOpenFilter public: FileSystemFilter(Core::EditorManager *editorManager, QuickOpenToolWindow *toolWindow); - QString trName() const { return tr("File in file system"); } - QString name() const { return "File in file system"; } + QString trName() const { return tr("Files in file system"); } + QString name() const { return "Files in file system"; } QuickOpen::IQuickOpenFilter::Priority priority() const { return QuickOpen::IQuickOpenFilter::Medium; } QList matchesFor(const QString &entry); void accept(QuickOpen::FilterEntry selection) const;