diff --git a/share/qtcreator/qmljsdebugger/jsdebuggeragent.cpp b/share/qtcreator/qmljsdebugger/jsdebuggeragent.cpp index 24c61eead00ddb02a24ac6dbda5d8e2db1c8c926..4258882e10c76dfc75354bcf051ded0bb1b934db 100644 --- a/share/qtcreator/qmljsdebugger/jsdebuggeragent.cpp +++ b/share/qtcreator/qmljsdebugger/jsdebuggeragent.cpp @@ -514,7 +514,6 @@ void JSDebuggerAgent::continueExec() void JSDebuggerAgent::enabledChanged(bool on) { engine()->setAgent(on ? this : 0); - QDeclarativeDebugService::enabledChanged(on); } } // namespace QmlJSDebugger diff --git a/share/qtcreator/templates/wizards/qml-extension/object.cpp b/share/qtcreator/templates/wizards/qml-extension/object.cpp index 8b4f8feef43b3f43976047222bedc30da8448c15..0f9ed3e7bb019146e6eded4e5b9dc0dc2d45a383 100644 --- a/share/qtcreator/templates/wizards/qml-extension/object.cpp +++ b/share/qtcreator/templates/wizards/qml-extension/object.cpp @@ -1,34 +1,17 @@ #include "%ObjectName:l%.%CppHeaderSuffix%" -#include <QtCore/QTime> #include <QtDeclarative/qdeclarative.h> -%ObjectName%::%ObjectName%(QObject *parent): - QObject(parent) +%ObjectName%::%ObjectName%(QDeclarativeItem *parent): + QDeclarativeItem(parent) { - timer = new QTimer(this); - timer->setInterval(750); - connect(timer, SIGNAL(timeout()), this, SLOT(timerFired())); - timer->start(); -} - -QString %ObjectName%::text() const -{ - return theText; -} + // By default, QDeclarativeItem does not draw anything. If you subclass + // QDeclarativeItem to create a visual item, you will need to uncomment the + // following line: -void %ObjectName%::setText(const QString &text) -{ - if (theText != text) { - theText = text; - emit textChanged(theText); - } + // setFlag(ItemHasNoContents, false); } -void %ObjectName%::timerFired() +%ObjectName%::~%ObjectName%() { - QTime t = QTime::currentTime(); - setText(t.toString(QLatin1String("HH:mm:ss"))); } - -QML_DECLARE_TYPE(%ObjectName%); diff --git a/share/qtcreator/templates/wizards/qml-extension/object.h b/share/qtcreator/templates/wizards/qml-extension/object.h index 882464ad0729a7062db5f06327853c5db4fe71ab..054174b20e406f5cf34bd26856c7e8baa3ac010d 100644 --- a/share/qtcreator/templates/wizards/qml-extension/object.h +++ b/share/qtcreator/templates/wizards/qml-extension/object.h @@ -1,33 +1,18 @@ #ifndef %ObjectName:u%_H #define %ObjectName:u%_H -#include <QtCore/QObject> -#include <QtCore/QString> -#include <QtCore/QTimer> +#include <QtDeclarative/QDeclarativeItem> -class %ObjectName% : public QObject +class %ObjectName% : public QDeclarativeItem { Q_OBJECT - - Q_PROPERTY(QString text READ text WRITE setText NOTIFY textChanged) + Q_DISABLE_COPY(%ObjectName%) public: - %ObjectName%(QObject *parent = 0); - - QString text() const; - void setText(const QString &text); - -signals: - void textChanged(const QString &newText); - -private slots: - void timerFired(); - -private: - QString theText; - QTimer *timer; - - Q_DISABLE_COPY(%ObjectName%) + %ObjectName%(QDeclarativeItem *parent = 0); + ~%ObjectName%(); }; +QML_DECLARE_TYPE(%ObjectName%) + #endif // %ObjectName:u%_H diff --git a/share/qtcreator/templates/wizards/qml-extension/plugin.cpp b/share/qtcreator/templates/wizards/qml-extension/plugin.cpp index 0d97d3d2080e21820f2bd6379d53525f705eefd3..5e86f2463a12f9db3138899c315e417f7931d1d2 100644 --- a/share/qtcreator/templates/wizards/qml-extension/plugin.cpp +++ b/share/qtcreator/templates/wizards/qml-extension/plugin.cpp @@ -1,11 +1,11 @@ -#include "%ProjectName:l%.%CppHeaderSuffix%" +#include "%ProjectName:l%_plugin.%CppHeaderSuffix%" #include "%ObjectName:l%.%CppHeaderSuffix%" #include <QtDeclarative/qdeclarative.h> -void %ProjectName%::registerTypes(const char *uri) +void %ProjectName%Plugin::registerTypes(const char *uri) { qmlRegisterType<%ObjectName%>(uri, 1, 0, "%ObjectName%"); } -Q_EXPORT_PLUGIN(%ProjectName%); +Q_EXPORT_PLUGIN2(%ProjectName%, %ProjectName%Plugin) diff --git a/share/qtcreator/templates/wizards/qml-extension/plugin.h b/share/qtcreator/templates/wizards/qml-extension/plugin.h index 1ae9c559ec9314da57bca8fcc671562f0933347e..8600532f3c29ac7d479ff689e04f2beac8a2df54 100644 --- a/share/qtcreator/templates/wizards/qml-extension/plugin.h +++ b/share/qtcreator/templates/wizards/qml-extension/plugin.h @@ -1,9 +1,9 @@ -#ifndef %ProjectName:u%_H -#define %ProjectName:u%_H +#ifndef %ProjectName:u%_PLUGIN_H +#define %ProjectName:u%_PLUGIN_H #include <QtDeclarative/QDeclarativeExtensionPlugin> -class %ProjectName% : public QDeclarativeExtensionPlugin +class %ProjectName%Plugin : public QDeclarativeExtensionPlugin { Q_OBJECT @@ -11,4 +11,4 @@ public: void registerTypes(const char *uri); }; -#endif // %ProjectName:u%_H +#endif // %ProjectName:u%_PLUGIN_H diff --git a/share/qtcreator/templates/wizards/qml-extension/project.pro b/share/qtcreator/templates/wizards/qml-extension/project.pro index 800dbffdf88806c7fef0ac1695789d53eafcd3a2..d4f5293be80b80aa410ba17ee8aef42147e0c5d2 100644 --- a/share/qtcreator/templates/wizards/qml-extension/project.pro +++ b/share/qtcreator/templates/wizards/qml-extension/project.pro @@ -1,5 +1,5 @@ TEMPLATE = lib -TARGET = %ProjectName% +TARGET = %ProjectName% QT += declarative CONFIG += qt plugin @@ -7,11 +7,17 @@ TARGET = $$qtLibraryTarget($$TARGET) # Input SOURCES += \ - %ProjectName:l%.%CppSourceSuffix% \ + %ProjectName:l%_plugin.%CppSourceSuffix% \ %ObjectName:l%.%CppSourceSuffix% -OTHER_FILES=qmldir - HEADERS += \ - %ProjectName:l%.%CppHeaderSuffix% \ + %ProjectName:l%_plugin.%CppHeaderSuffix% \ %ObjectName:l%.%CppHeaderSuffix% + +OTHER_FILES = qmldir + +copy_qmldir.target = $$OUT_PWD/qmldir +copy_qmldir.depends = $$PWD/qmldir +copy_qmldir.commands = $(COPY_FILE) $$copy_qmldir.depends $$copy_qmldir.target +QMAKE_EXTRA_TARGETS += copy_qmldir +PRE_TARGETDEPS += $$copy_qmldir.target diff --git a/share/qtcreator/templates/wizards/qml-extension/wizard.xml b/share/qtcreator/templates/wizards/qml-extension/wizard.xml index 8b37b7efcf0bb8e9c6805ac663984260a4162f44..6f202f9574fb56b343d61b43faec8c9b8135e1d0 100644 --- a/share/qtcreator/templates/wizards/qml-extension/wizard.xml +++ b/share/qtcreator/templates/wizards/qml-extension/wizard.xml @@ -43,8 +43,8 @@ leave room for the Qt 4 target page. <displaycategory>QML Extension Plugin</displaycategory> <files> <file source="qmldir" target="qmldir"/> - <file source="plugin.h" target="%ProjectName:l%.%CppHeaderSuffix%"/> - <file source="plugin.cpp" target="%ProjectName:l%.%CppSourceSuffix%"/> + <file source="plugin.h" target="%ProjectName:l%_plugin.%CppHeaderSuffix%"/> + <file source="plugin.cpp" target="%ProjectName:l%_plugin.%CppSourceSuffix%"/> <file source="object.h" target="%ObjectName:l%.%CppHeaderSuffix%"/> <file source="object.cpp" target="%ObjectName:l%.%CppSourceSuffix%" openeditor="true"/> <file source="project.pro" target="%ProjectName:l%.pro" openproject="true"/> @@ -53,8 +53,13 @@ leave room for the Qt 4 target page. <fieldpagetitle>Custom QML Extension Plugin Parameters</fieldpagetitle> <fields> <field mandatory="false" name="ObjectName"> - <fieldcontrol class="QLineEdit" validator='^[A-Za-z0-9_]+$' defaulttext="ExampleObject"/> - <fielddescription>Example Object Class-name:</fielddescription> + <fieldcontrol class="QLineEdit" validator='^[A-Za-z0-9_]+$' defaulttext="MyItem"/> + <fielddescription>Object Class-name:</fielddescription> </field> </fields> + <validationrules> + <validationrule condition='"%ObjectName%" != "%ProjectName%_plugin"'> + <message>The project name and the object class-name cannot be the same.</message> + </validationrule> + </validationrules> </wizard> diff --git a/share/qtcreator/translations/qtcreator_de.ts b/share/qtcreator/translations/qtcreator_de.ts index 931234bbbc782ca3c8af01b5762705b34380035a..60321e251a2bbb0fbe4a92560e0257862bc590e9 100644 --- a/share/qtcreator/translations/qtcreator_de.ts +++ b/share/qtcreator/translations/qtcreator_de.ts @@ -9791,7 +9791,7 @@ Fehler: %2</translation> <message> <location line="+1"/> <source>Do you really want to delete the build configuration <b>%1</b>?</source> - <translation>Möchten Sie die Build-Konfiguration<b>%1</b> löschen?</translation> + <translation>Möchten Sie die Build-Konfiguration <b>%1</b> löschen?</translation> </message> <message> <location line="+41"/> diff --git a/src/libs/qmleditorwidgets/contextpanewidgetimage.cpp b/src/libs/qmleditorwidgets/contextpanewidgetimage.cpp index bcc79494038601f7854f23aba2623f6700943f9a..80d7b4d3a5b9e6211cb5d0e968f3f4f9c4b117ef 100644 --- a/src/libs/qmleditorwidgets/contextpanewidgetimage.cpp +++ b/src/libs/qmleditorwidgets/contextpanewidgetimage.cpp @@ -465,10 +465,10 @@ void ContextPaneWidgetImage::setPixmap(const QString &fileName) if (QFile(fileName).exists()) { if (fileName.endsWith(QLatin1String("sci"))) { QString pixmapFileName; - int left; - int right; - int top; - int bottom; + int left = -1; + int right = -1; + int top = -1; + int bottom = -1; Qt::TileRule horizontalTileRule; Qt::TileRule verticalTileRule; if (parseSciFile(fileName, pixmapFileName, left, right, top, bottom, horizontalTileRule, verticalTileRule)) { diff --git a/src/plugins/debugger/breakbyfunction.ui b/src/plugins/debugger/breakbyfunction.ui deleted file mode 100644 index d6c045219c3f256eaf4e3e99afc3cc28c3bc1301..0000000000000000000000000000000000000000 --- a/src/plugins/debugger/breakbyfunction.ui +++ /dev/null @@ -1,58 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<ui version="4.0"> - <class>BreakByFunctionDialog</class> - <widget class="QDialog" name="BreakByFunctionDialog"> - <property name="geometry"> - <rect> - <x>0</x> - <y>0</y> - <width>337</width> - <height>101</height> - </rect> - </property> - <property name="windowTitle"> - <string>Set Breakpoint at Function</string> - </property> - <layout class="QVBoxLayout"> - <property name="spacing"> - <number>6</number> - </property> - <property name="margin"> - <number>9</number> - </property> - <item> - <layout class="QHBoxLayout" name="horizontalLayout"> - <item> - <widget class="QLabel" name="functionLabel"> - <property name="text"> - <string>Function to break on:</string> - </property> - </widget> - </item> - <item> - <widget class="QLineEdit" name="functionLineEdit"/> - </item> - </layout> - </item> - <item> - <widget class="Line" name="line"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - </widget> - </item> - <item> - <widget class="QDialogButtonBox" name="buttonBox"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - <property name="standardButtons"> - <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set> - </property> - </widget> - </item> - </layout> - </widget> - <resources/> - <connections/> -</ui> diff --git a/src/plugins/debugger/breakhandler.cpp b/src/plugins/debugger/breakhandler.cpp index f5a14f1bdde385bb3db0c6f878965c26be8df5f6..e0428f8cf5642d1986b7ffe53b4c602bff530d01 100644 --- a/src/plugins/debugger/breakhandler.cpp +++ b/src/plugins/debugger/breakhandler.cpp @@ -285,6 +285,9 @@ QVariant BreakHandler::data(const QModelIndex &mi, int role) const const BreakpointData *data = at(mi.row()); + if (role == BreakpointRole) + return qulonglong(data); + if (role == BreakpointUseFullPathRole) return data->useFullPath; @@ -502,6 +505,15 @@ bool BreakHandler::setData(const QModelIndex &index, const QVariant &value, int return false; } +void BreakHandler::reinsertBreakpoint(BreakpointData *data) +{ + // FIXME: Use some more direct method? + appendBreakpoint(data->clone()); + removeBreakpoint(data); + m_engine->attemptBreakpointSynchronization(); + emit layoutChanged(); +} + void BreakHandler::append(BreakpointData *data) { data->m_handler = this; diff --git a/src/plugins/debugger/breakhandler.h b/src/plugins/debugger/breakhandler.h index 432bf0a27a87f564e8fa2b53c118f18ffd1826e1..9a9aa30289c79e498f5d249e9b5c8fe21756988e 100644 --- a/src/plugins/debugger/breakhandler.h +++ b/src/plugins/debugger/breakhandler.h @@ -66,7 +66,6 @@ public: BreakpointData *at(int index) const; int size() const { return m_bp.size(); } bool hasPendingBreakpoints() const; - void append(BreakpointData *data); void removeAt(int index); // This also deletes the marker. void clear(); // This also deletes all the marker. int indexOf(BreakpointData *data) { return m_bp.indexOf(data); } @@ -99,6 +98,7 @@ public: public slots: void appendBreakpoint(BreakpointData *data); + void reinsertBreakpoint(BreakpointData *data); void toggleBreakpointEnabled(BreakpointData *data); void breakByFunction(const QString &functionName); void removeBreakpoint(int index); @@ -119,6 +119,7 @@ private: void loadBreakpoints(); void saveBreakpoints(); void removeBreakpointHelper(int index); + void append(BreakpointData *data); const QIcon m_breakpointIcon; const QIcon m_disabledBreakpointIcon; diff --git a/src/plugins/debugger/breakpoint.cpp b/src/plugins/debugger/breakpoint.cpp index 3d45c972b59bd607478dd6dd4d4874c649b2d061..f7dc8a848e22987198a80cb9acb15cd4affe0a2d 100644 --- a/src/plugins/debugger/breakpoint.cpp +++ b/src/plugins/debugger/breakpoint.cpp @@ -364,6 +364,12 @@ bool BreakpointData::conditionsMatch() const return s1 == s2; } +void BreakpointData::reinsertBreakpoint() +{ + QTC_ASSERT(m_handler, return); + m_handler->reinsertBreakpoint(this); +} + } // namespace Internal } // namespace Debugger diff --git a/src/plugins/debugger/breakpoint.h b/src/plugins/debugger/breakpoint.h index ffe6a654dd40dcb08a393b0ac5b1f061e0ae0ff2..7e22ffdb918b281027b1d0b6b1e11388894692e2 100644 --- a/src/plugins/debugger/breakpoint.h +++ b/src/plugins/debugger/breakpoint.h @@ -56,6 +56,7 @@ public: void updateMarker(); QString toToolTip() const; BreakHandler *handler() { return m_handler; } + void reinsertBreakpoint(); bool isLocatedAt(const QString &fileName, int lineNumber, bool useMarkerPosition) const; diff --git a/src/plugins/debugger/breakpoint.ui b/src/plugins/debugger/breakpoint.ui index f9e09010ba37b40c636dd18246c8f255914d0516..e8932ce84cf1647c7aa1be1cb3f967352525f89b 100644 --- a/src/plugins/debugger/breakpoint.ui +++ b/src/plugins/debugger/breakpoint.ui @@ -7,7 +7,7 @@ <x>0</x> <y>0</y> <width>382</width> - <height>280</height> + <height>302</height> </rect> </property> <property name="windowTitle"> @@ -46,55 +46,69 @@ <item row="2" column="1"> <widget class="QLineEdit" name="lineEditLineNumber"/> </item> + <item row="3" column="1"> + <widget class="QCheckBox" name="checkBoxUseFullPath"> + <property name="text"> + <string/> + </property> + </widget> + </item> + <item row="3" column="0"> + <widget class="QLabel" name="labelUseFullPath"> + <property name="text"> + <string>Use full path:</string> + </property> + </widget> + </item> <item row="4" column="0"> - <widget class="QLabel" name="labelFunction"> + <widget class="QLabel" name="labelAddress"> <property name="text"> - <string>Function:</string> + <string>Address:</string> </property> </widget> </item> <item row="4" column="1"> - <widget class="QLineEdit" name="lineEditFunction"/> + <widget class="QLineEdit" name="lineEditAddress"/> </item> <item row="5" column="0"> - <widget class="QLabel" name="labelCondition"> + <widget class="QLabel" name="labelFunction"> <property name="text"> - <string>Condition:</string> + <string>Function:</string> </property> </widget> </item> <item row="5" column="1"> - <widget class="QLineEdit" name="lineEditCondition"/> + <widget class="QLineEdit" name="lineEditFunction"/> </item> <item row="6" column="0"> - <widget class="QLabel" name="labelIgnoreCount"> + <widget class="QLabel" name="labelCondition"> <property name="text"> - <string>Ignore count:</string> + <string>Condition:</string> </property> </widget> </item> <item row="6" column="1"> - <widget class="QLineEdit" name="lineEditIgnoreCount"/> + <widget class="QLineEdit" name="lineEditCondition"/> </item> <item row="7" column="0"> - <widget class="QLabel" name="labelThreadSpec"> + <widget class="QLabel" name="labelIgnoreCount"> <property name="text"> - <string>Thread specification:</string> + <string>Ignore count:</string> </property> </widget> </item> <item row="7" column="1"> - <widget class="QLineEdit" name="lineEditThreadSpec"/> + <widget class="QLineEdit" name="lineEditIgnoreCount"/> </item> - <item row="3" column="0"> - <widget class="QLabel" name="labelAddress"> + <item row="8" column="0"> + <widget class="QLabel" name="labelThreadSpec"> <property name="text"> - <string>Address:</string> + <string>Thread specification:</string> </property> </widget> </item> - <item row="3" column="1"> - <widget class="QLineEdit" name="lineEditAddress"/> + <item row="8" column="1"> + <widget class="QLineEdit" name="lineEditThreadSpec"/> </item> </layout> </item> diff --git a/src/plugins/debugger/breakwindow.cpp b/src/plugins/debugger/breakwindow.cpp index 09e885fa622ce92c3aa639004d527cedd3173615..0ff0a255a0d0bdf8299bd286edf5167a0471e908 100644 --- a/src/plugins/debugger/breakwindow.cpp +++ b/src/plugins/debugger/breakwindow.cpp @@ -64,7 +64,7 @@ class BreakpointDialog : public QDialog, public Ui::BreakpointDialog { Q_OBJECT public: - explicit BreakpointDialog(QWidget *parent) + explicit BreakpointDialog(QWidget *parent, BreakpointData *data) : QDialog(parent) { setupUi(this); @@ -72,8 +72,21 @@ public: comboBoxType->insertItem(1, tr("Function Name")); comboBoxType->insertItem(2, tr("Function \"main()\"")); comboBoxType->insertItem(3, tr("Address")); - connect(comboBoxType, SIGNAL(activated(int)), - SLOT(typeChanged(int))); + lineEditFileName->setText(data->fileName); + lineEditLineNumber->setText(QByteArray::number(data->lineNumber)); + lineEditFunction->setText(data->funcName); + lineEditCondition->setText(data->condition); + lineEditIgnoreCount->setText(QByteArray::number(data->ignoreCount)); + checkBoxUseFullPath->setChecked(data->useFullPath); + if (data->address) + lineEditAddress->setText("0x" + QByteArray::number(data->address, 16)); + int initialType = 0; + if (!data->funcName.isEmpty()) + initialType = lineEditFunction->text() == "main" ? 2 : 1; + if (data->address) + initialType = 3; + typeChanged(initialType); + connect(comboBoxType, SIGNAL(activated(int)), SLOT(typeChanged(int))); } public slots: @@ -86,6 +99,8 @@ public slots: lineEditFileName->setEnabled(isLineVisible); labelLineNumber->setEnabled(isLineVisible); lineEditLineNumber->setEnabled(isLineVisible); + labelUseFullPath->setEnabled(isLineVisible); + checkBoxUseFullPath->setEnabled(isLineVisible); labelFunction->setEnabled(isFunctionVisible); lineEditFunction->setEnabled(isFunctionVisible); labelAddress->setEnabled(isAddressVisible); @@ -96,26 +111,6 @@ public slots: }; -/////////////////////////////////////////////////////////////////////// -// -// BreakByFunctionDialog -// -/////////////////////////////////////////////////////////////////////// - -class BreakByFunctionDialog : public QDialog, Ui::BreakByFunctionDialog -{ -public: - explicit BreakByFunctionDialog(QWidget *parent) - : QDialog(parent) - { - setupUi(this); - connect(buttonBox, SIGNAL(accepted()), this, SLOT(accept())); - connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject())); - } - QString functionName() const { return functionLineEdit->text(); } -}; - - /////////////////////////////////////////////////////////////////////// // // BreakWindow @@ -279,16 +274,13 @@ void BreakWindow::contextMenuEvent(QContextMenuEvent *ev) pathAction->setEnabled(si.size() > 0); QAction *addBreakpointAction = - new QAction(tr("Set Breakpoint..."), this); - //QAction *breakAtFunctionAction = - // new QAction(tr("Set Breakpoint at Function..."), this); - //QAction *breakAtMainAction = - // new QAction(tr("Set Breakpoint at Function \"main\""), this); + new QAction(tr("Add Breakpoint..."), this); QAction *breakAtThrowAction = new QAction(tr("Set Breakpoint at \"throw\""), this); QAction *breakAtCatchAction = new QAction(tr("Set Breakpoint at \"catch\""), this); + menu.addAction(addBreakpointAction); menu.addAction(deleteAction); menu.addAction(editBreakpointAction); menu.addAction(associateBreakpointAction); @@ -299,11 +291,8 @@ void BreakWindow::contextMenuEvent(QContextMenuEvent *ev) menu.addAction(deleteByFileAction); menu.addSeparator(); menu.addAction(synchronizeAction); - menu.addSeparator(); - //menu.addAction(breakAtFunctionAction); - //menu.addAction(breakAtMainAction); - menu.addAction(addBreakpointAction); if (engineCapabilities & BreakOnThrowAndCatchCapability) { + menu.addSeparator(); menu.addAction(breakAtThrowAction); menu.addAction(breakAtCatchAction); } @@ -342,15 +331,9 @@ void BreakWindow::contextMenuEvent(QContextMenuEvent *ev) setBreakpointsFullPath(si, !fullpath); else if (act == addBreakpointAction) addBreakpoint(); - //else if (act == breakAtFunctionAction) { - // BreakByFunctionDialog dlg(this); - // if (dlg.exec()) - // setModelData(RequestBreakByFunctionRole, dlg.functionName()); - //} else if (act == breakAtMainAction) - // setModelData(RequestBreakByFunctionMainRole); - else if (act == breakAtThrowAction) + else if (act == breakAtThrowAction) setModelData(RequestBreakByFunctionRole, "__cxa_throw"); - else if (act == breakAtCatchAction) + else if (act == breakAtCatchAction) setModelData(RequestBreakByFunctionRole, "__cxa_begin_catch"); } @@ -392,41 +375,58 @@ void BreakWindow::deleteBreakpoints(QList<int> list) setModelData(RequestSynchronizeBreakpointsRole); } -void BreakWindow::addBreakpoint() +bool BreakWindow::editBreakpoint(BreakpointData *data) { - BreakpointDialog dialog(this); + BreakpointDialog dialog(this, data); if (dialog.exec() == QDialog::Rejected) - return; - BreakpointData *data = new BreakpointData(); - if (!dialog.lineEditAddress->text().isEmpty()) { - bool ok = false; + return false; + bool ok = false; + if (!dialog.lineEditAddress->text().isEmpty()) data->address = dialog.lineEditAddress->text().toULongLong(&ok, 0); - } + if (!dialog.lineEditFunction->text().isEmpty()) + data->funcName = dialog.lineEditFunction->text(); if (!dialog.lineEditFunction->text().isEmpty()) data->funcName = dialog.lineEditFunction->text(); if (!dialog.lineEditFileName->text().isEmpty()) data->fileName = dialog.lineEditFileName->text(); - if (!dialog.lineEditFileName->text().isEmpty()) - data->fileName = dialog.lineEditFileName->text(); + data->lineNumber = dialog.lineEditLineNumber->text().toInt(); + data->useFullPath = dialog.checkBoxUseFullPath->isChecked(); if (!dialog.lineEditCondition->text().isEmpty()) data->condition = dialog.lineEditCondition->text().toUtf8(); if (!dialog.lineEditIgnoreCount->text().isEmpty()) data->ignoreCount = dialog.lineEditIgnoreCount->text().toInt(); if (!dialog.lineEditThreadSpec->text().isEmpty()) data->threadSpec = dialog.lineEditThreadSpec->text().toUtf8(); - setModelData(RequestBreakpointRole, QVariant::fromValue(data)); + return true; +} + +void BreakWindow::addBreakpoint() +{ + BreakpointData *data = new BreakpointData(); + if (editBreakpoint(data)) + setModelData(RequestBreakpointRole, QVariant::fromValue(data)); + else + delete data; } void BreakWindow::editBreakpoints(const QModelIndexList &list) { + if (list.size() == 1) { + QVariant var = model()->data(list.at(0), BreakpointRole); + BreakpointData *data = (BreakpointData *)var.toULongLong(); + if (editBreakpoint(data)) + data->reinsertBreakpoint(); + return; + } + + // This allows to change properties of multiple breakpoints at a time. QDialog dlg(this); Ui::BreakCondition ui; ui.setupUi(&dlg); QTC_ASSERT(!list.isEmpty(), return); QModelIndex idx = list.front(); - const int row = idx.row(); - dlg.setWindowTitle(tr("Conditions on Breakpoint %1").arg(row)); + dlg.setWindowTitle(tr("Edit Breakpoint Properties")); ui.lineEditFunction->hide(); ui.labelFunction->hide(); ui.lineEditFileName->hide(); @@ -436,7 +436,8 @@ void BreakWindow::editBreakpoints(const QModelIndexList &list) QAbstractItemModel *m = model(); ui.lineEditCondition->setText( m->data(idx, BreakpointConditionRole).toString()); - ui.lineEditIgnoreCount->setValidator(new QIntValidator(0, 2147483647, ui.lineEditIgnoreCount)); + ui.lineEditIgnoreCount->setValidator( + new QIntValidator(0, 2147483647, ui.lineEditIgnoreCount)); ui.lineEditIgnoreCount->setText( m->data(idx, BreakpointIgnoreCountRole).toString()); ui.lineEditThreadSpec->setText( diff --git a/src/plugins/debugger/breakwindow.h b/src/plugins/debugger/breakwindow.h index 2a9e41b7a0dce60d0bf8c3595d7483615e35b390..5b6b1cb969b2d72e8a48ff921c0093a3be42a06b 100644 --- a/src/plugins/debugger/breakwindow.h +++ b/src/plugins/debugger/breakwindow.h @@ -62,6 +62,7 @@ private: void deleteBreakpoints(const QModelIndexList &list); void deleteBreakpoints(QList<int> rows); void addBreakpoint(); + bool editBreakpoint(BreakpointData *data); // Returns 'Accept'. void editBreakpoints(const QModelIndexList &list); void associateBreakpoint(const QModelIndexList &list, int thread); void setBreakpointsEnabled(const QModelIndexList &list, bool enabled); diff --git a/src/plugins/debugger/debugger.pro b/src/plugins/debugger/debugger.pro index f4ebe54f7270dd3bc87f6dfd0cdaa278c5c74853..62035c48e69301662c85194cd1d7c89c12509630 100644 --- a/src/plugins/debugger/debugger.pro +++ b/src/plugins/debugger/debugger.pro @@ -95,7 +95,6 @@ SOURCES += breakhandler.cpp \ FORMS += attachexternaldialog.ui \ attachcoredialog.ui \ attachtcfdialog.ui \ - breakbyfunction.ui \ breakcondition.ui \ breakpoint.ui \ dumperoptionpage.ui \ diff --git a/src/plugins/debugger/debuggeractions.cpp b/src/plugins/debugger/debuggeractions.cpp index 8a0eba727c50fe84956657131854c7d6932a842f..670db758c0070602427c3b429739dba6293027ac 100644 --- a/src/plugins/debugger/debuggeractions.cpp +++ b/src/plugins/debugger/debuggeractions.cpp @@ -317,9 +317,6 @@ DebuggerSettings *DebuggerSettings::instance() item->setValue(true); instance->insertItem(UseCodeModel, item); - item = new SavedAction(instance); - item->setText(tr("Recheck Debugging Helper Availability")); - instance->insertItem(RecheckDebuggingHelpers, item); // // Breakpoints diff --git a/src/plugins/debugger/debuggeractions.h b/src/plugins/debugger/debuggeractions.h index 6fd56fb64faf085b45417e260060d41fb3bd1e8c..c0ef28a8f37b8770ccc78498d84e50440f5b0a41 100644 --- a/src/plugins/debugger/debuggeractions.h +++ b/src/plugins/debugger/debuggeractions.h @@ -94,7 +94,6 @@ enum DebuggerActionCode OperateByInstruction, AutoDerefPointers, - RecheckDebuggingHelpers, UseDebuggingHelpers, UseCustomDebuggingHelperLocation, CustomDebuggingHelperLocation, diff --git a/src/plugins/debugger/debuggerconstants.h b/src/plugins/debugger/debuggerconstants.h index 6f56ef5dbcc72c9f6e03cccf350d8c48d6a8b32d..35e60bcfe45fda385d7e08b7e46c1fe3a9922800 100644 --- a/src/plugins/debugger/debuggerconstants.h +++ b/src/plugins/debugger/debuggerconstants.h @@ -204,6 +204,7 @@ enum ModelRoles RequestExecuteCommandRole, // Breakpoints + BreakpointRole, BreakpointEnabledRole, BreakpointUseFullPathRole, BreakpointFunctionNameRole, diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp index 56f165db766dfe71f32744adb3a98ad3c87a6459..34d1b5b591fe95be44a8892a4e906e3836ae285c 100644 --- a/src/plugins/debugger/debuggerplugin.cpp +++ b/src/plugins/debugger/debuggerplugin.cpp @@ -2235,7 +2235,6 @@ void DebuggerPluginPrivate::setInitialState() m_actions.jumpToLineAction2->setEnabled(false); m_actions.nextAction->setEnabled(false); - theDebuggerAction(RecheckDebuggingHelpers)->setEnabled(false); theDebuggerAction(AutoDerefPointers)->setEnabled(true); theDebuggerAction(ExpandStack)->setEnabled(false); theDebuggerAction(ExecuteCommand)->setEnabled(m_state == InferiorStopOk); @@ -2347,7 +2346,6 @@ void DebuggerPluginPrivate::updateState(DebuggerEngine *engine) m_actions.nextAction->setEnabled(stopped); - theDebuggerAction(RecheckDebuggingHelpers)->setEnabled(actionsEnabled); const bool canDeref = actionsEnabled && (m_capabilities & AutoDerefPointersCapability); theDebuggerAction(AutoDerefPointers)->setEnabled(canDeref); diff --git a/src/plugins/debugger/gdb/classicgdbengine.cpp b/src/plugins/debugger/gdb/classicgdbengine.cpp index 16d3a2685520156eb77e87c4e89cb03cff64d4c0..6918f23c20ffda506e9e16e069b80de1ab6cb544 100644 --- a/src/plugins/debugger/gdb/classicgdbengine.cpp +++ b/src/plugins/debugger/gdb/classicgdbengine.cpp @@ -569,17 +569,6 @@ void GdbEngine::tryQueryDebuggingHelpersClassic() CB(handleQueryDebuggingHelperClassic)); } -void GdbEngine::recheckDebuggingHelperAvailabilityClassic() -{ - PRECONDITION; - if (m_gdbAdapter->dumperHandling() != AbstractGdbAdapter::DumperNotAvailable) { - // Retrieve list of dumpable classes. - postCommand("call (void*)qDumpObjectData440(1,0,0,0,0,0,0,0)"); - postCommand("p (char*)&qDumpOutBuffer", - CB(handleQueryDebuggingHelperClassic)); - } -} - // Called from CoreAdapter and AttachAdapter void GdbEngine::updateAllClassic() { diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp index 27311de6e85b5ca2a586948d87bc9593af955cf2..ec860d875aad5ac0d7d4b3a37fee454bbcba4316 100644 --- a/src/plugins/debugger/gdb/gdbengine.cpp +++ b/src/plugins/debugger/gdb/gdbengine.cpp @@ -1781,8 +1781,6 @@ void GdbEngine::setupEngine() this, SLOT(setUseDebuggingHelpers(QVariant))); connect(theDebuggerAction(DebugDebuggingHelpers), SIGNAL(valueChanged(QVariant)), this, SLOT(setDebugDebuggingHelpersClassic(QVariant))); - connect(theDebuggerAction(RecheckDebuggingHelpers), SIGNAL(triggered()), - this, SLOT(recheckDebuggingHelperAvailabilityClassic())); } QTC_ASSERT(state() == EngineSetupRequested, /**/); diff --git a/src/plugins/debugger/gdb/gdbengine.h b/src/plugins/debugger/gdb/gdbengine.h index c4b90b80da87bb69ad4693efa7c1b69242d38355..210b1c678174aa3c5dcc80a4395f55faf1a03844 100644 --- a/src/plugins/debugger/gdb/gdbengine.h +++ b/src/plugins/debugger/gdb/gdbengine.h @@ -516,7 +516,6 @@ private: ////////// View & Data Stuff ////////// void setDebuggingHelperStateClassic(DebuggingHelperState); void tryLoadDebuggingHelpersClassic(); void tryQueryDebuggingHelpersClassic(); - Q_SLOT void recheckDebuggingHelperAvailabilityClassic(); Q_SLOT void setDebugDebuggingHelpersClassic(const QVariant &on); Q_SLOT void setUseDebuggingHelpers(const QVariant &on); diff --git a/src/plugins/debugger/watchwindow.cpp b/src/plugins/debugger/watchwindow.cpp index b1b46cc49a2130ae414a70f45a80578f6db9289b..878b0a11db404dceeb1e947ea7091c4fb197f1f4 100644 --- a/src/plugins/debugger/watchwindow.cpp +++ b/src/plugins/debugger/watchwindow.cpp @@ -376,20 +376,8 @@ void WatchWindow::contextMenuEvent(QContextMenuEvent *ev) menu.addAction(actSetWatchPointAtPointerValue); menu.addSeparator(); - menu.addAction(theDebuggerAction(RecheckDebuggingHelpers)); menu.addAction(theDebuggerAction(UseDebuggingHelpers)); - QAction *actClearCodeModelSnapshot - = new QAction(tr("Refresh Code Model Snapshot"), &menu); - actClearCodeModelSnapshot->setEnabled(actionsEnabled - && theDebuggerAction(UseCodeModel)->isChecked()); - menu.addAction(actClearCodeModelSnapshot); - QAction *actShowInEditor - = new QAction(tr("Show View Contents in Editor"), &menu); - actShowInEditor->setEnabled(actionsEnabled); - menu.addAction(actShowInEditor); - menu.addSeparator(); menu.addAction(theDebuggerAction(UseToolTipsInLocalsView)); - menu.addAction(theDebuggerAction(AutoDerefPointers)); menu.addAction(theDebuggerAction(ShowStdNamespace)); menu.addAction(theDebuggerAction(ShowQtNamespace)); @@ -403,6 +391,15 @@ void WatchWindow::contextMenuEvent(QContextMenuEvent *ev) actAlwaysAdjustColumnWidth->setChecked(m_alwaysResizeColumnsToContents); menu.addSeparator(); + QAction *actClearCodeModelSnapshot + = new QAction(tr("Refresh Code Model Snapshot"), &menu); + actClearCodeModelSnapshot->setEnabled(actionsEnabled + && theDebuggerAction(UseCodeModel)->isChecked()); + menu.addAction(actClearCodeModelSnapshot); + QAction *actShowInEditor + = new QAction(tr("Show View Contents in Editor"), &menu); + actShowInEditor->setEnabled(actionsEnabled); + menu.addAction(actShowInEditor); menu.addAction(theDebuggerAction(SettingsDialog)); QAction *act = menu.exec(ev->globalPos()); diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemorunfactories.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemorunfactories.cpp index 0ee8512d1d34b457c81add6391af01f40ef2f20e..49c42bef3c3ebe2b8d84f2e33f7b69c3ab23148c 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemorunfactories.cpp +++ b/src/plugins/qt4projectmanager/qt-maemo/maemorunfactories.cpp @@ -163,7 +163,8 @@ bool MaemoRunControlFactory::canRun(RunConfiguration *runConfiguration, const MaemoRunConfiguration * const maemoRunConfig = qobject_cast<MaemoRunConfiguration *>(runConfiguration); if (!maemoRunConfig || !maemoRunConfig->deviceConfig().isValid() - || !maemoRunConfig->toolchain()) + || !maemoRunConfig->toolchain() + || maemoRunConfig->remoteExecutableFilePath().isEmpty()) return false; const int freePortCount = maemoRunConfig->freePorts().count(); if (freePortCount == 0) @@ -182,10 +183,11 @@ bool MaemoRunControlFactory::canRun(RunConfiguration *runConfiguration, RunControl* MaemoRunControlFactory::create(RunConfiguration *runConfig, const QString &mode) { - MaemoRunConfiguration *rc = qobject_cast<MaemoRunConfiguration *>(runConfig); - Q_ASSERT(rc); Q_ASSERT(mode == ProjectExplorer::Constants::RUNMODE || mode == ProjectExplorer::Constants::DEBUGMODE); + Q_ASSERT(canRun(runConfig, mode)); + MaemoRunConfiguration *rc = qobject_cast<MaemoRunConfiguration *>(runConfig); + Q_ASSERT(rc); if (mode == ProjectExplorer::Constants::RUNMODE) return new MaemoRunControl(rc); return MaemoDebugSupport::createDebugRunControl(rc); diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemosshrunner.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemosshrunner.cpp index 0ef0e95fc27b892c1b7cdc64bbe9cbed4636713a..5ea12bc90e2e554a5445f8f7065f8b79fd5b8536 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemosshrunner.cpp +++ b/src/plugins/qt4projectmanager/qt-maemo/maemosshrunner.cpp @@ -143,11 +143,15 @@ void MaemoSshRunner::cleanup(bool initialCleanup) emit reportProgress(tr("Killing remote process(es)...")); m_shuttingDown = !initialCleanup; + + // pkill behaves differently on Fremantle and Harmattan. + const char *const killTemplate = "pkill -%2 '^%1$'; pkill -%2 '/%1$';"; + QString niceKill; QString brutalKill; foreach (const QString &proc, m_procsToKill) { - niceKill += QString::fromLocal8Bit("pkill %1\\$;").arg(proc); - brutalKill += QString::fromLocal8Bit("pkill -9 %1\\$;").arg(proc); + niceKill += QString::fromLocal8Bit(killTemplate).arg(proc).arg("SIGTERM"); + brutalKill += QString::fromLocal8Bit(killTemplate).arg(proc).arg("SIGKILL"); } QString remoteCall = niceKill + QLatin1String("sleep 1; ") + brutalKill; remoteCall.remove(remoteCall.count() - 1, 1); // Get rid of trailing semicolon. diff --git a/src/plugins/texteditor/fontsettingspage.cpp b/src/plugins/texteditor/fontsettingspage.cpp index 0336d660b7dad2b6f78f0ee755a047078db5413c..45882f7e0ffc7eeba7122be7158ce24f0e5fc0eb 100644 --- a/src/plugins/texteditor/fontsettingspage.cpp +++ b/src/plugins/texteditor/fontsettingspage.cpp @@ -383,14 +383,14 @@ void FontSettingsPage::updatePointSizes() d_ptr->ui.sizeComboBox->clear(); } const QList<int> sizeLst = pointSizesForSelectedFont(); - int idx = 0; + int idx = -1; int i = 0; for (; i < sizeLst.count(); ++i) { - if (idx == 0 && sizeLst.at(i) >= oldSize) + if (idx == -1 && sizeLst.at(i) >= oldSize) idx = i; d_ptr->ui.sizeComboBox->addItem(QString::number(sizeLst.at(i))); } - if (d_ptr->ui.sizeComboBox->count()) + if (idx != -1) d_ptr->ui.sizeComboBox->setCurrentIndex(idx); } diff --git a/src/tools/qml/qmlobserver/main.cpp b/src/tools/qml/qmlobserver/main.cpp index 786c494d5c928903e0ec9238a23ca55f15ea5846..f04640d970eb8b53f22833aa88f793be17e442bc 100644 --- a/src/tools/qml/qmlobserver/main.cpp +++ b/src/tools/qml/qmlobserver/main.cpp @@ -85,6 +85,9 @@ QString warnings; void showWarnings() { if (!warnings.isEmpty()) { + int argc = 0; char **argv = 0; + QApplication application(argc, argv); // QApplication() in main has been destroyed already. + Q_UNUSED(application) QMessageBox::warning(0, QApplication::tr("Qt QML Viewer"), warnings); } } @@ -176,7 +179,7 @@ int main(int argc, char ** argv) #if defined (Q_OS_WIN) // Debugging output is not visible by default on Windows - - // therefore show modal dialog with errors instad. + // therefore show modal dialog with errors instead. atexit(showWarnings); #endif diff --git a/src/tools/qml/qmlobserver/qmlruntime.cpp b/src/tools/qml/qmlobserver/qmlruntime.cpp index 6d4fe6c7a040b019bd18838383852efca725db6d..0fbacbe3648d5bc4028cb36cf2c84b67c54f3671 100644 --- a/src/tools/qml/qmlobserver/qmlruntime.cpp +++ b/src/tools/qml/qmlobserver/qmlruntime.cpp @@ -649,7 +649,7 @@ QDeclarativeViewer::QDeclarativeViewer(QWidget *parent, Qt::WindowFlags flags) QObject::connect(observer, SIGNAL(inspectorContextCleared()), m_crumblePathWidget, SLOT(clear())); QObject::connect(observer, SIGNAL(inspectorContextPushed(QString)), m_crumblePathWidget, SLOT(pushElement(QString))); QObject::connect(observer, SIGNAL(inspectorContextPopped()), m_crumblePathWidget, SLOT(popElement())); - QObject::connect(m_crumblePathWidget, SIGNAL(elementClicked(int)), observer, SLOT(setInspectorContext(int))); + QObject::connect(m_crumblePathWidget, SIGNAL(elementClicked(int)), observer, SLOT(setObserverContext(int))); QObject::connect(observer, SIGNAL(designModeBehaviorChanged(bool)), m_crumblePathWidget, SLOT(setVisible(bool))); } QObject::connect(canvas->engine(), SIGNAL(quit()), QCoreApplication::instance (), SLOT(quit()));