diff --git a/doc/doc.pri b/doc/doc.pri index 4ed0de99375..3c23ab8a951 100644 --- a/doc/doc.pri +++ b/doc/doc.pri @@ -27,7 +27,8 @@ linux-* { } macx { - cp_docs.commands = $${QMAKE_COPY_DIR} $${OUT_PWD}/doc $${OUT_PWD}/bin/QtCreator.app/Contents/Resources + DOC_DIR = $${OUT_PWD}/bin/QtCreator.app/Contents/Resources/doc + cp_docs.commands = mkdir -p $${DOC_DIR} ; $${QMAKE_COPY} $${QCH_FILE} $${DOC_DIR} cp_docs.depends += qch_docs docs.depends = cp_docs QMAKE_EXTRA_TARGETS += html_docs qch_docs cp_docs docs diff --git a/qtcreator.pro b/qtcreator.pro index e1e65631d12..7eadc16290f 100644 --- a/qtcreator.pro +++ b/qtcreator.pro @@ -6,7 +6,6 @@ count(TOO_OLD_LIST, 1) { } include(doc/doc.pri) -include(share/share.pri) TEMPLATE = subdirs CONFIG += ordered diff --git a/src/app/Info.plist b/share/qtcreator/Info.plist similarity index 100% rename from src/app/Info.plist rename to share/qtcreator/Info.plist diff --git a/share/share.pri b/share/share.pri index 50fa37a71a0..ece603de416 100644 --- a/share/share.pri +++ b/share/share.pri @@ -14,7 +14,7 @@ macx { RUNINTERMINAL.path = Contents/Resources RUNINTERMINAL.files = $$PWD/qtcreator/runInTerminal.command QMAKE_BUNDLE_DATA += SNIPPETS TEMPLATES DESIGNER SCHEMES GDBDEBUGGER LICENSE RUNINTERMINAL - QMAKE_INFO_PLIST = $$PWD/qtcreator/info.plist + QMAKE_INFO_PLIST = $$PWD/qtcreator/Info.plist } win32 { diff --git a/src/app/app.pro b/src/app/app.pro index cc8ccbe1af1..14a3cdf35c0 100644 --- a/src/app/app.pro +++ b/src/app/app.pro @@ -38,3 +38,5 @@ macx { ICON = qtcreator.icns } +include(../../share/share.pri) + diff --git a/src/plugins/coreplugin/fancytabwidget.cpp b/src/plugins/coreplugin/fancytabwidget.cpp index 1302dc71d67..f5b646ba6be 100644 --- a/src/plugins/coreplugin/fancytabwidget.cpp +++ b/src/plugins/coreplugin/fancytabwidget.cpp @@ -158,7 +158,7 @@ void FancyTabBar::paintTab(QPainter *painter, int tabIndex) const QColor hoverColor; if (hover) { - hoverColor = QColor(255, 255, 255, m_hoverControl.currentFrame()*2); + hoverColor = QColor(255, 255, 255, m_hoverControl.currentFrame()); } QColor light = QColor(255, 255, 255, 40); diff --git a/src/plugins/coreplugin/fileiconprovider.cpp b/src/plugins/coreplugin/fileiconprovider.cpp index bf48ba37013..63947e8ed6c 100644 --- a/src/plugins/coreplugin/fileiconprovider.cpp +++ b/src/plugins/coreplugin/fileiconprovider.cpp @@ -32,6 +32,9 @@ ***************************************************************************/ #include "fileiconprovider.h" +#include +#include +#include using namespace Core; @@ -48,7 +51,7 @@ using namespace Core; FileIconProvider *FileIconProvider::m_instance = 0; FileIconProvider::FileIconProvider() - : m_unknownFileIcon(QLatin1String(":/core/images/unknownfile.png")) + : m_unknownFileIcon(qApp->style()->standardIcon(QStyle::SP_FileIcon)) { } @@ -76,7 +79,7 @@ QIcon FileIconProvider::icon(const QFileInfo &fileInfo) // same suffix (Mac OS X), but should speed up the retrieval a lot ... icon = m_systemIconProvider.icon(fileInfo); if (!suffix.isEmpty()) - registerIconForSuffix(icon, suffix); + registerIconOverlayForSuffix(icon, suffix); #else if (fileInfo.isDir()) { icon = m_systemIconProvider.icon(fileInfo); @@ -89,11 +92,22 @@ QIcon FileIconProvider::icon(const QFileInfo &fileInfo) return icon; } -/*! - Registers an icon for a given suffix, overriding any existing icon. - */ -void FileIconProvider::registerIconForSuffix(const QIcon &icon, const QString &suffix) +// Creates a pixmap with baseicon at size and overlayous overlayIcon over it. +QPixmap FileIconProvider::overlayIcon(QStyle::StandardPixmap baseIcon, const QIcon &overlayIcon, const QSize &size) const { + QPixmap iconPixmap = qApp->style()->standardIcon(baseIcon).pixmap(size); + QPainter painter(&iconPixmap); + painter.drawPixmap(0, 0, overlayIcon.pixmap(size)); + painter.end(); + return iconPixmap; +} + +/*! + Registers an icon for a given suffix, overlaying the system file icon + */ +void FileIconProvider::registerIconOverlayForSuffix(const QIcon &icon, const QString &suffix) +{ + QPixmap fileIconPixmap = overlayIcon(QStyle::SP_FileIcon, icon, QSize(16, 16)); // delete old icon, if it exists QList >::iterator iter = m_cache.begin(); for (; iter != m_cache.end(); ++iter) { @@ -103,7 +117,7 @@ void FileIconProvider::registerIconForSuffix(const QIcon &icon, const QString &s } } - QPair newEntry(suffix, icon); + QPair newEntry(suffix, fileIconPixmap); m_cache.append(newEntry); } diff --git a/src/plugins/coreplugin/fileiconprovider.h b/src/plugins/coreplugin/fileiconprovider.h index 8a92666ba4e..5e56228304f 100644 --- a/src/plugins/coreplugin/fileiconprovider.h +++ b/src/plugins/coreplugin/fileiconprovider.h @@ -40,6 +40,7 @@ #include #include #include +#include namespace Core { @@ -48,7 +49,8 @@ public: ~FileIconProvider(); // used to clear the cache QIcon icon(const QFileInfo &fileInfo); - void registerIconForSuffix(const QIcon &icon, const QString &suffix); + QPixmap overlayIcon(QStyle::StandardPixmap baseIcon, const QIcon &overlayIcon, const QSize &size) const; + void registerIconOverlayForSuffix(const QIcon &icon, const QString &suffix); static FileIconProvider *instance(); diff --git a/src/plugins/coreplugin/images/extension.png b/src/plugins/coreplugin/images/extension.png index 6bdfc07b830..40c2ee30d6c 100644 Binary files a/src/plugins/coreplugin/images/extension.png and b/src/plugins/coreplugin/images/extension.png differ diff --git a/src/plugins/coreplugin/images/splitbutton_horizontal.png b/src/plugins/coreplugin/images/splitbutton_horizontal.png index a71fdfdb624..c85a093f2c3 100644 Binary files a/src/plugins/coreplugin/images/splitbutton_horizontal.png and b/src/plugins/coreplugin/images/splitbutton_horizontal.png differ diff --git a/src/plugins/coreplugin/manhattanstyle.cpp b/src/plugins/coreplugin/manhattanstyle.cpp index ee3ca2f62d1..af361aacbb9 100644 --- a/src/plugins/coreplugin/manhattanstyle.cpp +++ b/src/plugins/coreplugin/manhattanstyle.cpp @@ -200,9 +200,13 @@ int ManhattanStyle::layoutSpacingImplementation(QSizePolicy::ControlType control QSize ManhattanStyle::sizeFromContents(ContentsType type, const QStyleOption *option, const QSize &size, const QWidget *widget) const { + QSize newSize = d->style->sizeFromContents(type, option, size, widget); + if (type == CT_Splitter && widget && widget->property("minisplitter").toBool()) return QSize(1, 1); - return d->style->sizeFromContents(type, option, size, widget); + else if (type == CT_ComboBox && panelWidget(widget)) + newSize += QSize(10, 0); + return newSize; } QRect ManhattanStyle::subElementRect(SubElement element, const QStyleOption *option, const QWidget *widget) const @@ -384,15 +388,20 @@ QPixmap ManhattanStyle::standardPixmap(StandardPixmap standardPixmap, const QSty int ManhattanStyle::styleHint(StyleHint hint, const QStyleOption *option, const QWidget *widget, QStyleHintReturn *returnData) const { - int ret = 0; + int ret = d->style->styleHint(hint, option, widget, returnData); switch (hint) { + // Make project explorer alternate rows all the way + case QStyle::SH_ItemView_PaintAlternatingRowColorsForEmptyArea: + if (widget && widget->property("AlternateEmpty").toBool()) + ret = true; + break; case QStyle::SH_EtchDisabledText: - ret = false; // We really should only enforce this for panel widgets + if (panelWidget(widget)) + ret = false; break; default: - ret = d->style->styleHint(hint, option, widget, returnData); + break; } - return ret; } @@ -491,10 +500,10 @@ void ManhattanStyle::drawPrimitive(PrimitiveElement element, const QStyleOption if (pressed) { QColor shade(0, 0, 0, 50); if (option->state & State_Sunken) - shade = QColor(0, 0, 0, 70); + shade = QColor(0, 0, 0, 50); #ifndef Q_WS_MAC else if (option->state & State_MouseOver) - shade = QColor(255, 255, 255, 40); + shade = QColor(255, 255, 255, 10); #endif else if (option->state & State_On) shade = QColor(0, 0, 0, 50); @@ -510,7 +519,7 @@ void ManhattanStyle::drawPrimitive(PrimitiveElement element, const QStyleOption } #ifndef Q_WS_MAC else if (option->state & State_MouseOver) { - QColor lighter(255, 255, 255, 100); + QColor lighter(255, 255, 255, 35); painter->fillRect(rect, lighter); painter->drawLine(rect.topRight(), rect.bottomRight()); } @@ -656,8 +665,6 @@ void ManhattanStyle::drawPrimitive(PrimitiveElement element, const QStyleOption int sx = sqsize / 2 - bounds.center().x() - 1; int sy = sqsize / 2 - bounds.center().y() - 1; imagePainter.translate(sx + bsx, sy + bsy); - imagePainter.setPen(option->palette.buttonText().color()); - imagePainter.setBrush(option->palette.buttonText()); if (!(option->state & State_Enabled)) { imagePainter.translate(1, 1); @@ -667,8 +674,17 @@ void ManhattanStyle::drawPrimitive(PrimitiveElement element, const QStyleOption imagePainter.translate(-1, -1); imagePainter.setBrush(option->palette.mid().color()); imagePainter.setPen(option->palette.mid().color()); + } else { + QColor shadow(0, 0, 0, 50); + imagePainter.translate(0, 1); + imagePainter.setPen(shadow); + imagePainter.setBrush(shadow); + QColor foreGround(255, 255, 255, 220); + imagePainter.drawPolygon(a); + imagePainter.translate(0, -1); + imagePainter.setPen(foreGround); + imagePainter.setBrush(foreGround); } - imagePainter.drawPolygon(a); imagePainter.end(); pixmap = QPixmap::fromImage(image); @@ -766,7 +782,8 @@ void ManhattanStyle::drawControl(ControlElement element, const QStyleOption *opt customPal.setBrush(QPalette::All, QPalette::ButtonText, QColor(0, 0, 0, 70)); - QRect rect = editRect.adjusted(1, 0, -8, 0); + // Reserve some space for the down-arrow + QRect rect = editRect.adjusted(0, 0, -8, 0); QString text = option->fontMetrics.elidedText(cb->currentText, Qt::ElideRight, rect.width()); drawItemText(painter, rect.translated(0, 1), visualAlignment(option->direction, Qt::AlignLeft | Qt::AlignVCenter), @@ -998,10 +1015,21 @@ void ManhattanStyle::drawComplexControl(ComplexControl control, const QStyleOpti painter->save(); // Draw tool button + QLinearGradient grad(option->rect.topRight(), option->rect.bottomRight()); + grad.setColorAt(0, Qt::transparent); + grad.setColorAt(0.4, QColor(255, 255, 255, 30)); + grad.setColorAt(1, Qt::transparent); + painter->setPen(QPen(grad, 0)); + painter->drawLine(rect.topRight(), rect.bottomRight()); + grad.setColorAt(0, Qt::transparent); + grad.setColorAt(0.4, QColor(0, 0, 0, 30)); + grad.setColorAt(1, Qt::transparent); + painter->setPen(QPen(grad, 0)); + painter->drawLine(rect.topRight() - QPoint(1,0), rect.bottomRight() - QPoint(1,0)); drawPrimitive(PE_PanelButtonTool, option, painter, widget); // Draw arrow - int menuButtonWidth = 16; + int menuButtonWidth = 12; bool reverse = option->direction == Qt::RightToLeft; int left = !reverse ? rect.right() - menuButtonWidth : rect.left(); int right = !reverse ? rect.right() : rect.left() + menuButtonWidth; diff --git a/src/plugins/cppeditor/cppplugin.cpp b/src/plugins/cppeditor/cppplugin.cpp index e600de92c58..efa689995c4 100644 --- a/src/plugins/cppeditor/cppplugin.cpp +++ b/src/plugins/cppeditor/cppplugin.cpp @@ -75,9 +75,9 @@ CppPluginEditorFactory::CppPluginEditorFactory(CppPlugin *owner) : << QLatin1String(CppEditor::Constants::CPP_SOURCE_MIMETYPE) << QLatin1String(CppEditor::Constants::CPP_HEADER_MIMETYPE); Core::FileIconProvider *iconProvider = Core::FileIconProvider::instance(); - iconProvider->registerIconForSuffix(QIcon(":/cppeditor/images/qt_cpp.png"), + iconProvider->registerIconOverlayForSuffix(QIcon(":/cppeditor/images/qt_cpp.png"), QLatin1String("cpp")); - iconProvider->registerIconForSuffix(QIcon(":/cppeditor/images/qt_h.png"), + iconProvider->registerIconOverlayForSuffix(QIcon(":/cppeditor/images/qt_h.png"), QLatin1String("h")); } diff --git a/src/plugins/cppeditor/images/qt_cpp.png b/src/plugins/cppeditor/images/qt_cpp.png index 73fd1642b3c..c938e2d65cf 100644 Binary files a/src/plugins/cppeditor/images/qt_cpp.png and b/src/plugins/cppeditor/images/qt_cpp.png differ diff --git a/src/plugins/cppeditor/images/qt_h.png b/src/plugins/cppeditor/images/qt_h.png index dec0475219f..3c279d4b4e5 100644 Binary files a/src/plugins/cppeditor/images/qt_h.png and b/src/plugins/cppeditor/images/qt_h.png differ diff --git a/src/plugins/designer/README.txt b/src/plugins/designer/README.txt index eeef2a6c1d8..7665e29c98e 100644 --- a/src/plugins/designer/README.txt +++ b/src/plugins/designer/README.txt @@ -5,6 +5,7 @@ Including cpp.pri in designer.pro enables them and defines CPP_ENABLED. Resource handling: +------------------ When the editor is opened for the ui file we remember the internal qrc list read from the ui file (m_originalUiQrcPaths). In next step (a call to @@ -35,3 +36,11 @@ designer's internal file watcher updates the changes to qrc files silently. A call to setResourceEditingEnabled(false) removes the edit resources action form resource browser in designer + +Building +-------- + +The plugin accesses some private headers of Qt Designer 4.5. +Copies of them are located in qt_private to achieve a clean build +from a standard Qt distribution. The script syncqtheader.sh +can be used to update them. diff --git a/src/plugins/designer/formeditorfactory.cpp b/src/plugins/designer/formeditorfactory.cpp index df3c59adfa3..545a6cca27c 100644 --- a/src/plugins/designer/formeditorfactory.cpp +++ b/src/plugins/designer/formeditorfactory.cpp @@ -52,7 +52,7 @@ FormEditorFactory::FormEditorFactory() m_mimeTypes(QLatin1String(FORM_MIMETYPE)) { Core::FileIconProvider *iconProvider = Core::FileIconProvider::instance(); - iconProvider->registerIconForSuffix(QIcon(":/formeditor/images/qt_ui.png"), + iconProvider->registerIconOverlayForSuffix(QIcon(":/formeditor/images/qt_ui.png"), QLatin1String("ui")); } diff --git a/src/plugins/designer/formeditorw.cpp b/src/plugins/designer/formeditorw.cpp index 58de33f2753..4ab3c61694a 100644 --- a/src/plugins/designer/formeditorw.cpp +++ b/src/plugins/designer/formeditorw.cpp @@ -48,11 +48,11 @@ #include #include -#include +#include -#include // createIconSet -#include -#include +#include // createIconSet +#include +#include #include #include @@ -84,8 +84,6 @@ #include #include -enum { wantCodeGenerationAction = 0 }; - static const char *editorWidgetStateKeyC = "editorWidgetState"; static const char *settingsGroup = "Designer"; @@ -166,8 +164,7 @@ FormEditorW::FormEditorW() : m_core(Core::ICore::instance()), m_initStage(RegisterPlugins), m_actionGroupEditMode(0), - m_actionPrint(0), - m_actionGenerateCode(0) + m_actionPrint(0) { if (Designer::Constants::Internal::debug) qDebug() << Q_FUNC_INFO; @@ -420,13 +417,6 @@ void FormEditorW::setupActions() m_actionGroupPreviewInStyle = m_fwm->actionGroupPreviewInStyle(); mformtools->addMenu(createPreviewStyleMenu(am, m_actionGroupPreviewInStyle)); - // Disabled since we cannot reliably locate uic. - if (wantCodeGenerationAction) { - m_actionGenerateCode = new QAction(tr("View &code"), this); - addToolAction(m_actionGenerateCode, am, m_context, - QLatin1String("FormEditor.ViewCode"), mformtools); - connect(m_actionGenerateCode, SIGNAL(triggered()), this, SLOT(generateCode())); - } // Form settings createSeparator(this, am, m_context, medit, QLatin1String("FormEditor.Edit.Separator2"), Core::Constants::G_EDIT_OTHER); @@ -513,42 +503,6 @@ void FormEditorW::restoreSettings(const QSettings *s) } } -void FormEditorW::generateCode() -{ - const FormWindowEditor *fww = activeFormWindow(); - if (!fww) - return; - - bool ok = false; - QString errorMessage; - - do { - QByteArray header; - if (!fww->generateCode(header, errorMessage)) - break; - - QString tempPattern = QDir::tempPath(); - if (!tempPattern.endsWith(QDir::separator())) // platform-dependant - tempPattern += QDir::separator(); - tempPattern += QLatin1String("ui_headerXXXXXX.h"); - QTemporaryFile headerFile(tempPattern); - headerFile.setAutoRemove (false); - if (!headerFile.open() || !headerFile.write(header)) { - errorMessage = tr("Unable to write to a temporary file."); - break; - } - const QString headerFileName = headerFile.fileName(); - headerFile.close(); - Core::IEditor *eif = m_core->editorManager()->openEditor(headerFileName); - if (!eif) { - errorMessage = tr("Unable open %1.").arg(headerFileName); - break; - } - ok = true; - } while (false); - if (!ok) - critical(errorMessage); -} void FormEditorW::critical(const QString &errorMessage) { @@ -621,8 +575,6 @@ void FormEditorW::activeFormWindowChanged(QDesignerFormWindowInterface *afw) } m_actionPreview->setEnabled(foundFormWindow); - if (m_actionGenerateCode) - m_actionGenerateCode->setEnabled(foundFormWindow); m_actionGroupPreviewInStyle->setEnabled(foundFormWindow); } diff --git a/src/plugins/designer/formeditorw.h b/src/plugins/designer/formeditorw.h index f41d3554e25..89da92443ce 100644 --- a/src/plugins/designer/formeditorw.h +++ b/src/plugins/designer/formeditorw.h @@ -120,7 +120,6 @@ public: FormWindowEditor *activeFormWindow(); private slots: - void generateCode(); void activateEditMode(int id); void activateEditMode(QAction*); void activeFormWindowChanged(QDesignerFormWindowInterface *); @@ -160,7 +159,6 @@ private: QList m_settingsPages; QActionGroup *m_actionGroupEditMode; QAction *m_actionPrint; - QAction *m_actionGenerateCode; QAction *m_actionPreview; QActionGroup *m_actionGroupPreviewInStyle; diff --git a/src/plugins/designer/formtemplatewizardpage.cpp b/src/plugins/designer/formtemplatewizardpage.cpp index aacda476a16..221da1edfc9 100644 --- a/src/plugins/designer/formtemplatewizardpage.cpp +++ b/src/plugins/designer/formtemplatewizardpage.cpp @@ -34,7 +34,7 @@ #include "formtemplatewizardpage.h" #include "formeditorw.h" -#include +#include #include #include diff --git a/src/plugins/designer/formwindoweditor.cpp b/src/plugins/designer/formwindoweditor.cpp index be6b763e61c..65eaf8aceb1 100644 --- a/src/plugins/designer/formwindoweditor.cpp +++ b/src/plugins/designer/formwindoweditor.cpp @@ -45,8 +45,8 @@ #include #include #include -#include -#include +#include +#include #include #include @@ -300,33 +300,6 @@ QWidget *FormWindowEditor::widget() return m_editorWidget; } -bool FormWindowEditor::generateCode(QByteArray &header, QString &errorMessage) const -{ - if (Designer::Constants::Internal::debug) - qDebug() << Q_FUNC_INFO; - - QString tempPattern = QDir::tempPath(); - if (!tempPattern.endsWith(QDir::separator())) // platform-dependant - tempPattern += QDir::separator(); - tempPattern += QLatin1String("formXXXXXX.ui"); - QTemporaryFile uiFile(tempPattern); - uiFile.setAutoRemove(true); - if (!uiFile.open()) { - errorMessage = tr("Unable to write to a temporary file."); - return false; - } - if (!m_file->writeFile(uiFile, errorMessage)) { - errorMessage = tr("Unable to write to a temporary file."); - return false; - } - const QString uiFileName = uiFile.fileName(); - uiFile.close(); - - if (!qdesigner_internal::runUIC(uiFileName, qdesigner_internal::UIC_GenerateCode, header, errorMessage)) - return false; - - return true; -} QDesignerFormWindowInterface *FormWindowEditor::formWindow() const { diff --git a/src/plugins/designer/formwindoweditor.h b/src/plugins/designer/formwindoweditor.h index 6a449aeb96f..e854ccac915 100644 --- a/src/plugins/designer/formwindoweditor.h +++ b/src/plugins/designer/formwindoweditor.h @@ -87,8 +87,6 @@ public: QList context() const; QWidget *widget(); - // Internal - bool generateCode(QByteArray &header, QString &errorMessage) const; QDesignerFormWindowInterface *formWindow() const; QWidget *integrationContainer(); void updateFormWindowSelectionHandles(bool state); diff --git a/src/plugins/designer/images/qt_ui.png b/src/plugins/designer/images/qt_ui.png index 8fb61ee27ff..982b19d6043 100644 Binary files a/src/plugins/designer/images/qt_ui.png and b/src/plugins/designer/images/qt_ui.png differ diff --git a/src/plugins/designer/qt_private/abstractnewformwidget_p.h b/src/plugins/designer/qt_private/abstractnewformwidget_p.h new file mode 100644 index 00000000000..2f176f74a2e --- /dev/null +++ b/src/plugins/designer/qt_private/abstractnewformwidget_p.h @@ -0,0 +1,80 @@ +/*************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Qt Software Information (qt-info@nokia.com) +** +** +** Non-Open Source Usage +** +** Licensees may use this file in accordance with the Qt Beta Version +** License Agreement, Agreement version 2.2 provided with the Software or, +** alternatively, in accordance with the terms contained in a written +** agreement between you and Nokia. +** +** GNU General Public License Usage +** +** Alternatively, this file may be used under the terms of the GNU General +** Public License versions 2.0 or 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the packaging +** of this file. Please review the following information to ensure GNU +** General Public Licensing requirements will be met: +** +** http://www.fsf.org/licensing/licenses/info/GPLv2.html and +** http://www.gnu.org/copyleft/gpl.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt GPL Exception +** version 1.3, included in the file GPL_EXCEPTION.txt in this package. +** +***************************************************************************/ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists for the convenience +// of Qt Designer. This header +// file may change from version to version without notice, or even be removed. +// +// We mean it. +// + +#ifndef ABSTRACTNEWFORMWIDGET_H +#define ABSTRACTNEWFORMWIDGET_H + +#include + +#include + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +class QDesignerFormEditorInterface; + +class QDESIGNER_SDK_EXPORT QDesignerNewFormWidgetInterface : public QWidget +{ + Q_DISABLE_COPY(QDesignerNewFormWidgetInterface) + Q_OBJECT +public: + explicit QDesignerNewFormWidgetInterface(QWidget *parent = 0); + virtual ~QDesignerNewFormWidgetInterface(); + + virtual bool hasCurrentTemplate() const = 0; + virtual QString currentTemplate(QString *errorMessage = 0) = 0; + + static QDesignerNewFormWidgetInterface *createNewFormWidget(QDesignerFormEditorInterface *core, QWidget *parent = 0); + +Q_SIGNALS: + void templateActivated(); + void currentTemplateChanged(bool templateSelected); +}; + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif // ABSTRACTNEWFORMWIDGET_H diff --git a/src/plugins/designer/qt_private/abstractoptionspage_p.h b/src/plugins/designer/qt_private/abstractoptionspage_p.h new file mode 100644 index 00000000000..8455c87720f --- /dev/null +++ b/src/plugins/designer/qt_private/abstractoptionspage_p.h @@ -0,0 +1,71 @@ +/*************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Qt Software Information (qt-info@nokia.com) +** +** +** Non-Open Source Usage +** +** Licensees may use this file in accordance with the Qt Beta Version +** License Agreement, Agreement version 2.2 provided with the Software or, +** alternatively, in accordance with the terms contained in a written +** agreement between you and Nokia. +** +** GNU General Public License Usage +** +** Alternatively, this file may be used under the terms of the GNU General +** Public License versions 2.0 or 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the packaging +** of this file. Please review the following information to ensure GNU +** General Public Licensing requirements will be met: +** +** http://www.fsf.org/licensing/licenses/info/GPLv2.html and +** http://www.gnu.org/copyleft/gpl.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt GPL Exception +** version 1.3, included in the file GPL_EXCEPTION.txt in this package. +** +***************************************************************************/ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists for the convenience +// of Qt Designer. This header +// file may change from version to version without notice, or even be removed. +// +// We mean it. +// + +#ifndef ABSTRACTOPTIONSPAGE_P_H +#define ABSTRACTOPTIONSPAGE_P_H + +#include + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +class QString; +class QWidget; + +class QDESIGNER_SDK_EXPORT QDesignerOptionsPageInterface +{ +public: + virtual ~QDesignerOptionsPageInterface() {} + virtual QString name() const = 0; + virtual QWidget *createPage(QWidget *parent) = 0; + virtual void apply() = 0; + virtual void finish() = 0; +}; + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif // ABSTRACTOPTIONSPAGE_P_H diff --git a/src/plugins/designer/qt_private/abstractsettings_p.h b/src/plugins/designer/qt_private/abstractsettings_p.h new file mode 100644 index 00000000000..2d5bece0cdf --- /dev/null +++ b/src/plugins/designer/qt_private/abstractsettings_p.h @@ -0,0 +1,79 @@ +/*************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Qt Software Information (qt-info@nokia.com) +** +** +** Non-Open Source Usage +** +** Licensees may use this file in accordance with the Qt Beta Version +** License Agreement, Agreement version 2.2 provided with the Software or, +** alternatively, in accordance with the terms contained in a written +** agreement between you and Nokia. +** +** GNU General Public License Usage +** +** Alternatively, this file may be used under the terms of the GNU General +** Public License versions 2.0 or 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the packaging +** of this file. Please review the following information to ensure GNU +** General Public Licensing requirements will be met: +** +** http://www.fsf.org/licensing/licenses/info/GPLv2.html and +** http://www.gnu.org/copyleft/gpl.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt GPL Exception +** version 1.3, included in the file GPL_EXCEPTION.txt in this package. +** +***************************************************************************/ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists for the convenience +// of Qt Designer. This header +// file may change from version to version without notice, or even be removed. +// +// We mean it. +// + +#ifndef ABSTRACTSETTINGS_P_H +#define ABSTRACTSETTINGS_P_H + +#include + +#include + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +class QString; + +/*! + To be implemented by IDEs that want to control the way designer retrieves/stores its settings. + */ +class QDESIGNER_SDK_EXPORT QDesignerSettingsInterface +{ +public: + virtual ~QDesignerSettingsInterface() {} + + virtual void beginGroup(const QString &prefix) = 0; + virtual void endGroup() = 0; + + virtual bool contains(const QString &key) const = 0; + virtual void setValue(const QString &key, const QVariant &value) = 0; + virtual QVariant value(const QString &key, const QVariant &defaultValue = QVariant()) const = 0; + virtual void remove(const QString &key) = 0; +}; + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif // ABSTRACTSETTINGS_P_H diff --git a/src/plugins/designer/qt_private/formwindowbase_p.h b/src/plugins/designer/qt_private/formwindowbase_p.h new file mode 100644 index 00000000000..23344c18194 --- /dev/null +++ b/src/plugins/designer/qt_private/formwindowbase_p.h @@ -0,0 +1,194 @@ +/*************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Qt Software Information (qt-info@nokia.com) +** +** +** Non-Open Source Usage +** +** Licensees may use this file in accordance with the Qt Beta Version +** License Agreement, Agreement version 2.2 provided with the Software or, +** alternatively, in accordance with the terms contained in a written +** agreement between you and Nokia. +** +** GNU General Public License Usage +** +** Alternatively, this file may be used under the terms of the GNU General +** Public License versions 2.0 or 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the packaging +** of this file. Please review the following information to ensure GNU +** General Public Licensing requirements will be met: +** +** http://www.fsf.org/licensing/licenses/info/GPLv2.html and +** http://www.gnu.org/copyleft/gpl.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt GPL Exception +** version 1.3, included in the file GPL_EXCEPTION.txt in this package. +** +***************************************************************************/ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists for the convenience +// of Qt Designer. This header +// file may change from version to version without notice, or even be removed. +// +// We mean it. +// + +#ifndef FORMWINDOWBASE_H +#define FORMWINDOWBASE_H + +#include "shared_global_p.h" + +#include + +#include +#include + +QT_BEGIN_NAMESPACE + +class QDesignerDnDItemInterface; +class QMenu; +class QtResourceSet; +class QDesignerPropertySheet; + +namespace qdesigner_internal { + +class QEditorFormBuilder; +class DeviceProfile; +class Grid; + +class DesignerPixmapCache; +class DesignerIconCache; +class FormWindowBasePrivate; + +class QDESIGNER_SHARED_EXPORT FormWindowBase: public QDesignerFormWindowInterface +{ + Q_OBJECT +public: + enum HighlightMode { Restore, Highlight }; + enum SaveResourcesBehaviour { SaveAll, SaveOnlyUsedQrcFiles, DontSaveQrcFiles }; + + explicit FormWindowBase(QDesignerFormEditorInterface *core, QWidget *parent = 0, Qt::WindowFlags flags = 0); + virtual ~FormWindowBase(); + + QVariantMap formData(); + void setFormData(const QVariantMap &vm); + + // Return the widget containing the form. This is used to + // apply embedded design settings to that are inherited (for example font). + // These are meant to be applied to the form only and not to the other editors + // in the widget stack. + virtual QWidget *formContainer() const = 0; + + // Deprecated + virtual QPoint grid() const; + + // Deprecated + virtual void setGrid(const QPoint &grid); + + virtual bool hasFeature(Feature f) const; + virtual Feature features() const; + virtual void setFeatures(Feature f); + + const Grid &designerGrid() const; + void setDesignerGrid(const Grid& grid); + + bool hasFormGrid() const; + void setHasFormGrid(bool b); + + bool gridVisible() const; + + SaveResourcesBehaviour saveResourcesBehaviour() const; + void setSaveResourcesBehaviour(SaveResourcesBehaviour behaviour); + + static const Grid &defaultDesignerGrid(); + static void setDefaultDesignerGrid(const Grid& grid); + + // Overwrite to initialize and return a full popup menu for a managed widget + virtual QMenu *initializePopupMenu(QWidget *managedWidget); + // Helper to create a basic popup menu from task menu extensions (internal/public) + static QMenu *createExtensionTaskMenu(QDesignerFormWindowInterface *fw, QObject *o, bool trailingSeparator = true); + + virtual bool dropWidgets(const QList &item_list, QWidget *target, + const QPoint &global_mouse_pos) = 0; + + // Helper to find the widget at the mouse position with some flags. + enum WidgetUnderMouseMode { FindSingleSelectionDropTarget, FindMultiSelectionDropTarget }; + QWidget *widgetUnderMouse(const QPoint &formPos, WidgetUnderMouseMode m); + + virtual QWidget *widgetAt(const QPoint &pos) = 0; + virtual QWidget *findContainer(QWidget *w, bool excludeLayout) const = 0; + + void deleteWidgetList(const QWidgetList &widget_list); + + virtual void highlightWidget(QWidget *w, const QPoint &pos, HighlightMode mode = Highlight) = 0; + + enum PasteMode { PasteAll, PasteActionsOnly }; + virtual void paste(PasteMode pasteMode) = 0; + + // Factory method to create a form builder + virtual QEditorFormBuilder *createFormBuilder() = 0; + + virtual bool blockSelectionChanged(bool blocked) = 0; + virtual void emitSelectionChanged() = 0; + + DesignerPixmapCache *pixmapCache() const; + DesignerIconCache *iconCache() const; + QtResourceSet *resourceSet() const; + void setResourceSet(QtResourceSet *resourceSet); + void addReloadableProperty(QDesignerPropertySheet *sheet, int index); + void removeReloadableProperty(QDesignerPropertySheet *sheet, int index); + void addReloadablePropertySheet(QDesignerPropertySheet *sheet, QObject *object); + void removeReloadablePropertySheet(QDesignerPropertySheet *sheet); + void reloadProperties(); + + void emitWidgetRemoved(QWidget *w); + void emitObjectRemoved(QObject *o); + + DeviceProfile deviceProfile() const; + QString styleName() const; + QString deviceProfileName() const; + + enum LineTerminatorMode { + LFLineTerminator, + CRLFLineTerminator, + NativeLineTerminator = +#if defined (Q_OS_WIN) + CRLFLineTerminator +#else + LFLineTerminator +#endif + }; + + void setLineTerminatorMode(LineTerminatorMode mode); + LineTerminatorMode lineTerminatorMode() const; + + // Connect the 'activated' (doubleclicked) signal of the form window to a + // slot triggering the default action (of the task menu) + static void setupDefaultAction(QDesignerFormWindowInterface *fw); + +public slots: + void resourceSetActivated(QtResourceSet *resourceSet, bool resourceSetChanged); + +private slots: + void triggerDefaultAction(QWidget *w); + +private: + void syncGridFeature(); + + FormWindowBasePrivate *m_d; +}; + +} // namespace qdesigner_internal + +QT_END_NAMESPACE + +#endif // FORMWINDOWBASE_H diff --git a/src/plugins/designer/qt_private/iconloader_p.h b/src/plugins/designer/qt_private/iconloader_p.h new file mode 100644 index 00000000000..29c33ef5819 --- /dev/null +++ b/src/plugins/designer/qt_private/iconloader_p.h @@ -0,0 +1,64 @@ +/*************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Qt Software Information (qt-info@nokia.com) +** +** +** Non-Open Source Usage +** +** Licensees may use this file in accordance with the Qt Beta Version +** License Agreement, Agreement version 2.2 provided with the Software or, +** alternatively, in accordance with the terms contained in a written +** agreement between you and Nokia. +** +** GNU General Public License Usage +** +** Alternatively, this file may be used under the terms of the GNU General +** Public License versions 2.0 or 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the packaging +** of this file. Please review the following information to ensure GNU +** General Public Licensing requirements will be met: +** +** http://www.fsf.org/licensing/licenses/info/GPLv2.html and +** http://www.gnu.org/copyleft/gpl.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt GPL Exception +** version 1.3, included in the file GPL_EXCEPTION.txt in this package. +** +***************************************************************************/ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists for the convenience +// of Qt Designer. This header +// file may change from version to version without notice, or even be removed. +// +// We mean it. +// + +#ifndef ICONLOADER_H +#define ICONLOADER_H + +#include "shared_global_p.h" + +QT_BEGIN_NAMESPACE + +class QString; +class QIcon; + +namespace qdesigner_internal { + +QDESIGNER_SHARED_EXPORT QIcon createIconSet(const QString &name); +QDESIGNER_SHARED_EXPORT QIcon emptyIcon(); + +} // namespace qdesigner_internal + +QT_END_NAMESPACE + +#endif // ICONLOADER_H diff --git a/src/plugins/designer/qt_private/pluginmanager_p.h b/src/plugins/designer/qt_private/pluginmanager_p.h new file mode 100644 index 00000000000..1b0b58ced28 --- /dev/null +++ b/src/plugins/designer/qt_private/pluginmanager_p.h @@ -0,0 +1,143 @@ +/*************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Qt Software Information (qt-info@nokia.com) +** +** +** Non-Open Source Usage +** +** Licensees may use this file in accordance with the Qt Beta Version +** License Agreement, Agreement version 2.2 provided with the Software or, +** alternatively, in accordance with the terms contained in a written +** agreement between you and Nokia. +** +** GNU General Public License Usage +** +** Alternatively, this file may be used under the terms of the GNU General +** Public License versions 2.0 or 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the packaging +** of this file. Please review the following information to ensure GNU +** General Public Licensing requirements will be met: +** +** http://www.fsf.org/licensing/licenses/info/GPLv2.html and +** http://www.gnu.org/copyleft/gpl.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt GPL Exception +** version 1.3, included in the file GPL_EXCEPTION.txt in this package. +** +***************************************************************************/ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists for the convenience +// of Qt Designer. This header +// file may change from version to version without notice, or even be removed. +// +// We mean it. +// + +#ifndef PLUGINMANAGER_H +#define PLUGINMANAGER_H + +#include "shared_global_p.h" + +#include +#include +#include + +QT_BEGIN_NAMESPACE + +class QDesignerFormEditorInterface; +class QDesignerCustomWidgetInterface; +class QDesignerPluginManagerPrivate; + +class QDesignerCustomWidgetSharedData; + +/* Information contained in the Dom XML of a custom widget. */ +class QDESIGNER_SHARED_EXPORT QDesignerCustomWidgetData { +public: + explicit QDesignerCustomWidgetData(const QString &pluginPath = QString()); + + enum ParseResult { ParseOk, ParseWarning, ParseError }; + ParseResult parseXml(const QString &xml, const QString &name, QString *errorMessage); + + QDesignerCustomWidgetData(const QDesignerCustomWidgetData&); + QDesignerCustomWidgetData& operator=(const QDesignerCustomWidgetData&); + ~QDesignerCustomWidgetData(); + + bool isNull() const; + + QString pluginPath() const; + + // Data as parsed from the widget's domXML(). + QString xmlClassName() const; + // Optional. The language the plugin is supposed to be used with. + QString xmlLanguage() const; + // Optional. method used to add pages to a container with a container extension + QString xmlAddPageMethod() const; + // Optional. Base class + QString xmlExtends() const; + // Optional. The name to be used in the widget box. + QString xmlDisplayName() const; + +private: + QSharedDataPointer m_d; +}; + +class QDESIGNER_SHARED_EXPORT QDesignerPluginManager: public QObject +{ + Q_OBJECT +public: + typedef QList CustomWidgetList; + + explicit QDesignerPluginManager(QDesignerFormEditorInterface *core); + virtual ~QDesignerPluginManager(); + + QDesignerFormEditorInterface *core() const; + + QObject *instance(const QString &plugin) const; + + QStringList registeredPlugins() const; + + QStringList findPlugins(const QString &path); + + QStringList pluginPaths() const; + void setPluginPaths(const QStringList &plugin_paths); + + QStringList disabledPlugins() const; + void setDisabledPlugins(const QStringList &disabled_plugins); + + QStringList failedPlugins() const; + QString failureReason(const QString &pluginName) const; + + QObjectList instances() const; + + CustomWidgetList registeredCustomWidgets() const; + QDesignerCustomWidgetData customWidgetData(QDesignerCustomWidgetInterface *w) const; + + bool registerNewPlugins(); + +public slots: + bool syncSettings(); + void ensureInitialized(); + +private: + void updateRegisteredPlugins(); + void registerPath(const QString &path); + void registerPlugin(const QString &plugin); + +private: + static QStringList defaultPluginPaths(); + + QDesignerPluginManagerPrivate *m_d; +}; + +QT_END_NAMESPACE + +#endif // PLUGINMANAGER_H diff --git a/src/plugins/designer/qt_private/qdesigner_formwindowmanager_p.h b/src/plugins/designer/qt_private/qdesigner_formwindowmanager_p.h new file mode 100644 index 00000000000..fc4efe6535a --- /dev/null +++ b/src/plugins/designer/qt_private/qdesigner_formwindowmanager_p.h @@ -0,0 +1,90 @@ +/*************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Qt Software Information (qt-info@nokia.com) +** +** +** Non-Open Source Usage +** +** Licensees may use this file in accordance with the Qt Beta Version +** License Agreement, Agreement version 2.2 provided with the Software or, +** alternatively, in accordance with the terms contained in a written +** agreement between you and Nokia. +** +** GNU General Public License Usage +** +** Alternatively, this file may be used under the terms of the GNU General +** Public License versions 2.0 or 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the packaging +** of this file. Please review the following information to ensure GNU +** General Public Licensing requirements will be met: +** +** http://www.fsf.org/licensing/licenses/info/GPLv2.html and +** http://www.gnu.org/copyleft/gpl.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt GPL Exception +** version 1.3, included in the file GPL_EXCEPTION.txt in this package. +** +***************************************************************************/ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists for the convenience +// of Qt Designer. This header +// file may change from version to version without notice, or even be removed. +// +// We mean it. +// + +#ifndef QDESIGNER_FORMWINDOMANAGER_H +#define QDESIGNER_FORMWINDOMANAGER_H + +#include "shared_global_p.h" +#include + +QT_BEGIN_NAMESPACE + +namespace qdesigner_internal { + +class PreviewManager; + +// +// Convenience methods to manage form previews (ultimately forwarded to PreviewManager). +// +class QDESIGNER_SHARED_EXPORT QDesignerFormWindowManager + : public QDesignerFormWindowManagerInterface +{ + Q_OBJECT +public: + explicit QDesignerFormWindowManager(QObject *parent = 0); + virtual ~QDesignerFormWindowManager(); + + virtual QAction *actionDefaultPreview() const; + virtual QActionGroup *actionGroupPreviewInStyle() const; + virtual QAction *actionShowFormWindowSettingsDialog() const; + + virtual QPixmap createPreviewPixmap(QString *errorMessage) = 0; + + virtual PreviewManager *previewManager() const = 0; + +Q_SIGNALS: + void formWindowSettingsChanged(QDesignerFormWindowInterface *fw); + +public Q_SLOTS: + virtual void closeAllPreviews() = 0; + +private: + void *m_unused; +}; + +} // namespace qdesigner_internal + +QT_END_NAMESPACE + +#endif // QDESIGNER_FORMWINDOMANAGER_H diff --git a/src/plugins/designer/qt_private/qdesigner_integration_p.h b/src/plugins/designer/qt_private/qdesigner_integration_p.h new file mode 100644 index 00000000000..b301a1ce827 --- /dev/null +++ b/src/plugins/designer/qt_private/qdesigner_integration_p.h @@ -0,0 +1,142 @@ +/*************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Qt Software Information (qt-info@nokia.com) +** +** +** Non-Open Source Usage +** +** Licensees may use this file in accordance with the Qt Beta Version +** License Agreement, Agreement version 2.2 provided with the Software or, +** alternatively, in accordance with the terms contained in a written +** agreement between you and Nokia. +** +** GNU General Public License Usage +** +** Alternatively, this file may be used under the terms of the GNU General +** Public License versions 2.0 or 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the packaging +** of this file. Please review the following information to ensure GNU +** General Public Licensing requirements will be met: +** +** http://www.fsf.org/licensing/licenses/info/GPLv2.html and +** http://www.gnu.org/copyleft/gpl.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt GPL Exception +** version 1.3, included in the file GPL_EXCEPTION.txt in this package. +** +***************************************************************************/ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists for the convenience +// of Qt Designer. This header +// file may change from version to version without notice, or even be removed. +// +// We mean it. +// + +#ifndef QDESIGNER_INTEGRATION_H +#define QDESIGNER_INTEGRATION_H + +#include "shared_global_p.h" +#include + +#include + +QT_BEGIN_NAMESPACE + +class QDesignerFormEditorInterface; +class QDesignerFormWindowInterface; +class QDesignerResourceBrowserInterface; + +class QVariant; +class QWidget; + +namespace qdesigner_internal { + +struct Selection; +class QDesignerIntegrationPrivate; + +class QDESIGNER_SHARED_EXPORT QDesignerIntegration: public QDesignerIntegrationInterface +{ + Q_OBJECT +public: + explicit QDesignerIntegration(QDesignerFormEditorInterface *core, QObject *parent = 0); + virtual ~QDesignerIntegration(); + + static void requestHelp(const QDesignerFormEditorInterface *core, const QString &manual, const QString &document); + + virtual QWidget *containerWindow(QWidget *widget) const; + + // Load plugins into widget database and factory. + static void initializePlugins(QDesignerFormEditorInterface *formEditor); + void emitObjectNameChanged(QDesignerFormWindowInterface *formWindow, QObject *object, + const QString &newName, const QString &oldName); + void emitNavigateToSlot(const QString &objectName, const QString &signalSignature, const QStringList ¶meterNames); + void emitNavigateToSlot(const QString &slotSignature); + + // Create a resource browser specific to integration. Language integration takes precedence + virtual QDesignerResourceBrowserInterface *createResourceBrowser(QWidget *parent = 0); + + enum ResourceFileWatcherBehaviour { + NoWatcher, + ReloadSilently, + PromptAndReload + }; + + ResourceFileWatcherBehaviour resourceFileWatcherBehaviour() const; + bool isResourceEditingEnabled() const; + bool isSlotNavigationEnabled() const; + +protected: + + void setResourceFileWatcherBehaviour(ResourceFileWatcherBehaviour behaviour); // PromptAndReload by default + void setResourceEditingEnabled(bool enable); // true by default + void setSlotNavigationEnabled(bool enable); // false by default + +signals: + void propertyChanged(QDesignerFormWindowInterface *formWindow, const QString &name, const QVariant &value); + void objectNameChanged(QDesignerFormWindowInterface *formWindow, QObject *object, const QString &newName, const QString &oldName); + void helpRequested(const QString &manual, const QString &document); + + void navigateToSlot(const QString &objectName, const QString &signalSignature, const QStringList ¶meterNames); + void navigateToSlot(const QString &slotSignature); + +public slots: + virtual void updateProperty(const QString &name, const QVariant &value, bool enableSubPropertyHandling); + // Additional signals of designer property editor + virtual void resetProperty(const QString &name); + virtual void addDynamicProperty(const QString &name, const QVariant &value); + virtual void removeDynamicProperty(const QString &name); + + virtual void updateActiveFormWindow(QDesignerFormWindowInterface *formWindow); + virtual void setupFormWindow(QDesignerFormWindowInterface *formWindow); + virtual void updateSelection(); + virtual void updateGeometry(); + virtual void activateWidget(QWidget *widget); + + void updateCustomWidgetPlugins(); + +private slots: + void updatePropertyPrivate(const QString &name, const QVariant &value); + +private: + void initialize(); + void getSelection(Selection &s); + QObject *propertyEditorObject(); + + QDesignerIntegrationPrivate *m_d; +}; + +} // namespace qdesigner_internal + +QT_END_NAMESPACE + +#endif // QDESIGNER_INTEGRATION_H diff --git a/src/plugins/designer/qt_private/qtresourcemodel_p.h b/src/plugins/designer/qt_private/qtresourcemodel_p.h new file mode 100644 index 00000000000..51743be926e --- /dev/null +++ b/src/plugins/designer/qt_private/qtresourcemodel_p.h @@ -0,0 +1,136 @@ +/*************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Qt Software Information (qt-info@nokia.com) +** +** +** Non-Open Source Usage +** +** Licensees may use this file in accordance with the Qt Beta Version +** License Agreement, Agreement version 2.2 provided with the Software or, +** alternatively, in accordance with the terms contained in a written +** agreement between you and Nokia. +** +** GNU General Public License Usage +** +** Alternatively, this file may be used under the terms of the GNU General +** Public License versions 2.0 or 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the packaging +** of this file. Please review the following information to ensure GNU +** General Public Licensing requirements will be met: +** +** http://www.fsf.org/licensing/licenses/info/GPLv2.html and +** http://www.gnu.org/copyleft/gpl.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt GPL Exception +** version 1.3, included in the file GPL_EXCEPTION.txt in this package. +** +***************************************************************************/ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists for the convenience +// of Qt Designer. This header +// file may change from version to version without notice, or even be removed. +// +// We mean it. +// + +#ifndef QTRESOURCEMODEL_H +#define QTRESOURCEMODEL_H + +#include "shared_global_p.h" +#include +#include + +QT_BEGIN_NAMESPACE + +class QtResourceModel; + +class QDESIGNER_SHARED_EXPORT QtResourceSet // one instance per one form +{ +public: + QStringList activeQrcPaths() const; + + // activateQrcPaths(): if this QtResourceSet is active it emits resourceSetActivated(); + // otherwise only in case if active QtResource set contains one of + // paths which was marked as modified by this resource set, the signal + // is emitted (with reload = true); + // If new path appears on the list it is automatically added to + // loaded list of QtResourceModel. In addition it is marked as modified in case + // QtResourceModel didn't contain the path. + // If some path is removed from that list (and is not used in any other + // resource set) it is automatically unloaded. The removed file can also be + // marked as modified (later when another resource set which contains + // removed path is activated will be reloaded) + void activateQrcPaths(const QStringList &paths, int *errorCount = 0, QString *errorMessages = 0); + + bool isModified(const QString &path) const; // for all paths in resource model (redundant here, maybe it should be removed from here) + void setModified(const QString &path); // for all paths in resource model (redundant here, maybe it should be removed from here) +private: + QtResourceSet(); + QtResourceSet(QtResourceModel *model); + ~QtResourceSet(); + friend class QtResourceModel; + + class QtResourceSetPrivate *d_ptr; + Q_DECLARE_PRIVATE(QtResourceSet) + Q_DISABLE_COPY(QtResourceSet) +}; + +class QDESIGNER_SHARED_EXPORT QtResourceModel : public QObject // one instance per whole designer +{ + Q_OBJECT +public: + QtResourceModel(QObject *parent = 0); + ~QtResourceModel(); + + QStringList loadedQrcFiles() const; + bool isModified(const QString &path) const; // only for paths which are on loadedQrcFiles() list + void setModified(const QString &path); // only for paths which are on loadedQrcPaths() list + + QList resourceSets() const; + + QtResourceSet *currentResourceSet() const; + void setCurrentResourceSet(QtResourceSet *resourceSet, int *errorCount = 0, QString *errorMessages = 0); + + QtResourceSet *addResourceSet(const QStringList &paths); + void removeResourceSet(QtResourceSet *resourceSet); + + void reload(const QString &path, int *errorCount = 0, QString *errorMessages = 0); + void reload(int *errorCount = 0, QString *errorMessages = 0); + + // Contents of the current resource set (content file to qrc path) + QMap contents() const; + // Find the qrc file belonging to the contained file (from current resource set) + QString qrcPath(const QString &file) const; + + void setWatcherEnabled(bool enable); + bool isWatcherEnabled() const; + + void setWatcherEnabled(const QString &path, bool enable); + bool isWatcherEnabled(const QString &path); + +signals: + void resourceSetActivated(QtResourceSet *resourceSet, bool resourceSetChanged); // resourceSetChanged since last time it was activated! + void qrcFileModifiedExternally(const QString &path); + +private: + friend class QtResourceSet; + + class QtResourceModelPrivate *d_ptr; + Q_DECLARE_PRIVATE(QtResourceModel) + Q_DISABLE_COPY(QtResourceModel) + + Q_PRIVATE_SLOT(d_func(), void slotFileChanged(const QString &)) +}; + +QT_END_NAMESPACE + +#endif diff --git a/src/plugins/designer/qt_private/shared_global_p.h b/src/plugins/designer/qt_private/shared_global_p.h new file mode 100644 index 00000000000..0df946fb90e --- /dev/null +++ b/src/plugins/designer/qt_private/shared_global_p.h @@ -0,0 +1,68 @@ +/*************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Qt Software Information (qt-info@nokia.com) +** +** +** Non-Open Source Usage +** +** Licensees may use this file in accordance with the Qt Beta Version +** License Agreement, Agreement version 2.2 provided with the Software or, +** alternatively, in accordance with the terms contained in a written +** agreement between you and Nokia. +** +** GNU General Public License Usage +** +** Alternatively, this file may be used under the terms of the GNU General +** Public License versions 2.0 or 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the packaging +** of this file. Please review the following information to ensure GNU +** General Public Licensing requirements will be met: +** +** http://www.fsf.org/licensing/licenses/info/GPLv2.html and +** http://www.gnu.org/copyleft/gpl.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt GPL Exception +** version 1.3, included in the file GPL_EXCEPTION.txt in this package. +** +***************************************************************************/ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists for the convenience +// of Qt Designer. This header +// file may change from version to version without notice, or even be removed. +// +// We mean it. +// + +#ifndef SHARED_GLOBAL_H +#define SHARED_GLOBAL_H + +#include + +#ifdef QT_DESIGNER_STATIC +#define QDESIGNER_SHARED_EXTERN +#define QDESIGNER_SHARED_IMPORT +#else +#define QDESIGNER_SHARED_EXTERN Q_DECL_EXPORT +#define QDESIGNER_SHARED_IMPORT Q_DECL_IMPORT +#endif + +#ifndef QT_NO_SHARED_EXPORT +# ifdef QDESIGNER_SHARED_LIBRARY +# define QDESIGNER_SHARED_EXPORT QDESIGNER_SHARED_EXTERN +# else +# define QDESIGNER_SHARED_EXPORT QDESIGNER_SHARED_IMPORT +# endif +#else +# define QDESIGNER_SHARED_EXPORT +#endif + +#endif // SHARED_GLOBAL_H diff --git a/src/plugins/designer/settingsmanager.h b/src/plugins/designer/settingsmanager.h index ba6c89e133a..196d5f1ca53 100644 --- a/src/plugins/designer/settingsmanager.h +++ b/src/plugins/designer/settingsmanager.h @@ -34,7 +34,7 @@ #ifndef SETTINGSMANAGER_H #define SETTINGSMANAGER_H -#include +#include #include namespace Designer { diff --git a/src/plugins/designer/settingspage.cpp b/src/plugins/designer/settingspage.cpp index 8de4cad5dc2..9b2c773890a 100644 --- a/src/plugins/designer/settingspage.cpp +++ b/src/plugins/designer/settingspage.cpp @@ -34,7 +34,7 @@ #include "settingspage.h" #include -#include +#include using namespace Designer::Internal; diff --git a/src/plugins/designer/syncqtheader.sh b/src/plugins/designer/syncqtheader.sh new file mode 100755 index 00000000000..b114a8f6b4b --- /dev/null +++ b/src/plugins/designer/syncqtheader.sh @@ -0,0 +1,69 @@ +#!/bin/sh + +# ************************************************************************** +# +# This file is part of Qt Creator +# +# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). +# +# Contact: Qt Software Information (qt-info@nokia.com) +# +# +# Non-Open Source Usage +# +# Licensees may use this file in accordance with the Qt Beta Version +# License Agreement, Agreement version 2.2 provided with the Software or, +# alternatively, in accordance with the terms contained in a written +# agreement between you and Nokia. +# +# GNU General Public License Usage +# +# Alternatively, this file may be used under the terms of the GNU General +# Public License versions 2.0 or 3.0 as published by the Free Software +# Foundation and appearing in the file LICENSE.GPL included in the packaging +# of this file. Please review the following information to ensure GNU +# General Public Licensing requirements will be met: +# +# http://www.fsf.org/licensing/licenses/info/GPLv2.html and +# http://www.gnu.org/copyleft/gpl.html. +# +# In addition, as a special exception, Nokia gives you certain additional +# rights. These rights are described in the Nokia Qt GPL Exception +# version 1.3, included in the file GPL_EXCEPTION.txt in this package. +# +# ***************************************************************************/ + +# Internal utility script that synchronizes the Qt Designer private headers +# used by the Qt Designer plugin (located in the qt_private) directory +# with the Qt source tree pointed to by the environment variable QTDIR. + +REQUIRED_HEADERS="pluginmanager_p.h iconloader_p.h qdesigner_formwindowmanager_p.h formwindowbase_p.h +abstractnewformwidget_p.h qtresourcemodel_p.h abstractoptionspage_p.h +shared_global_p.h abstractsettings_p.h qdesigner_integration_p.h" + +echo Using $QTDIR + +syncHeader() +{ + HDR=$1 + # Locate the Designer header: look in lib/shared or SDK + QTHDR=$QTDIR/tools/designer/src/lib/shared/$HDR + if [ ! -f $QTHDR ] + then + QTHDR=$QTDIR/tools/designer/src/lib/sdk/$HDR + fi + echo Syncing $QTHDR + + [ -f $QTHDR ] || { echo "$HDR does not exist" ; exit 1 ; } + + TARGET=qt_private/$HDR + + # Exchange license header + head -n 32 formwindowfile.h > $TARGET || exit 1 + tail -n +11 $QTHDR >> $TARGET || exit 1 +} + +for H in $REQUIRED_HEADERS +do + syncHeader $H +done diff --git a/src/plugins/designer/workbenchintegration.h b/src/plugins/designer/workbenchintegration.h index 55acd931ec6..707b50a8d78 100644 --- a/src/plugins/designer/workbenchintegration.h +++ b/src/plugins/designer/workbenchintegration.h @@ -36,7 +36,7 @@ #include -#include +#include namespace Designer { namespace Internal { diff --git a/src/plugins/fakevim/fakevimhandler.cpp b/src/plugins/fakevim/fakevimhandler.cpp index 3b981fa6a23..591b307d960 100644 --- a/src/plugins/fakevim/fakevimhandler.cpp +++ b/src/plugins/fakevim/fakevimhandler.cpp @@ -693,6 +693,13 @@ bool FakeVimHandler::Private::handleCommandMode(int key, int unmodified, scrollToLineInDocument(cursorLineInDocument()); moveToFirstNonBlankOnLine(); finishMovement(); + } else if (key == '.') { // center cursor line + scrollToLineInDocument(cursorLineInDocument() - linesOnScreen() / 2); + moveToFirstNonBlankOnLine(); + finishMovement(); + } else if (key == 'z') { // center cursor line + scrollToLineInDocument(cursorLineInDocument() - linesOnScreen() / 2); + finishMovement(); } else { qDebug() << "IGNORED Z_MODE " << key << text; } @@ -908,11 +915,13 @@ bool FakeVimHandler::Private::handleCommandMode(int key, int unmodified, moveToFirstNonBlankOnLine(); finishMovement(); } else if (key == 'i') { + recordBeginGroup(); enterInsertMode(); updateMiniBuffer(); if (atEndOfLine()) moveLeft(); } else if (key == 'I') { + recordBeginGroup(); setAnchor(); enterInsertMode(); if (m_gflag) @@ -976,13 +985,13 @@ bool FakeVimHandler::Private::handleCommandMode(int key, int unmodified, } else if (key == 'N') { search(lastSearchString(), !m_lastSearchForward); } else if (key == 'o' || key == 'O') { + recordBeginGroup(); + recordMove(); enterInsertMode(); moveToFirstNonBlankOnLine(); - recordBeginGroup(); int numSpaces = leftDist(); - moveUp(); - if (key == 'o') - moveDown(); + if (key == 'O') + moveUp(); moveToEndOfLine(); recordInsertText("\n"); moveToStartOfLine(); @@ -990,7 +999,6 @@ bool FakeVimHandler::Private::handleCommandMode(int key, int unmodified, recordInsertText(QString(indentDist(), ' ')); else recordInsertText(QString(numSpaces, ' ')); - recordEndGroup(); } else if (key == 'p' || key == 'P') { recordBeginGroup(); QString text = m_registers[m_register]; @@ -1034,8 +1042,13 @@ bool FakeVimHandler::Private::handleCommandMode(int key, int unmodified, redo(); } else if (key == 's') { recordBeginGroup(); - m_submode = ChangeSubMode; + setAnchor(); moveRight(qMin(count(), rightDist())); + m_registers[m_register] = recordRemoveSelectedText(); + //m_dotCommand = QString("%1s").arg(count()); + m_opcount.clear(); + m_mvcount.clear(); + enterInsertMode(); } else if (key == 't' || key == 'T') { m_subsubmode = FtSubSubMode; m_subsubdata = key; @@ -2043,7 +2056,6 @@ void FakeVimHandler::Private::enterInsertMode() EDITOR(setOverwriteMode(false)); m_mode = InsertMode; m_lastInsertion.clear(); - recordBeginGroup(); } void FakeVimHandler::Private::enterCommandMode() diff --git a/src/plugins/find/searchresulttreeview.cpp b/src/plugins/find/searchresulttreeview.cpp index ea950fb949c..3b51d9e0c1d 100644 --- a/src/plugins/find/searchresulttreeview.cpp +++ b/src/plugins/find/searchresulttreeview.cpp @@ -50,7 +50,7 @@ SearchResultTreeView::SearchResultTreeView(QWidget *parent) setIndentation(14); header()->hide(); - connect (this, SIGNAL(activated(const QModelIndex&)), this, SLOT(emitJumpToSearchResult(const QModelIndex&))); + connect (this, SIGNAL(activated(QModelIndex)), this, SLOT(emitJumpToSearchResult(QModelIndex))); } void SearchResultTreeView::setAutoExpandResults(bool expand) @@ -76,10 +76,7 @@ void SearchResultTreeView::appendResultLine(int index, const QString &fileName, void SearchResultTreeView::emitJumpToSearchResult(const QModelIndex &index) { - if (model()->data(index, ItemDataRoles::TypeRole).toString().compare("row") != 0) - return; - - QString fileName(model()->data(index, ItemDataRoles::FileNameRole).toString()); + QString fileName = model()->data(index, ItemDataRoles::FileNameRole).toString(); int position = model()->data(index, ItemDataRoles::ResultIndexRole).toInt(); int lineNumber = model()->data(index, ItemDataRoles::ResultLineNumberRole).toInt(); int searchTermStart = model()->data(index, ItemDataRoles::SearchTermStartRole).toInt(); diff --git a/src/plugins/projectexplorer/images/filtericon.png b/src/plugins/projectexplorer/images/filtericon.png index de7ee4b5f54..3fae2defdec 100644 Binary files a/src/plugins/projectexplorer/images/filtericon.png and b/src/plugins/projectexplorer/images/filtericon.png differ diff --git a/src/plugins/projectexplorer/projecttreewidget.cpp b/src/plugins/projectexplorer/projecttreewidget.cpp index ad923b3991b..09f61f2bf89 100644 --- a/src/plugins/projectexplorer/projecttreewidget.cpp +++ b/src/plugins/projectexplorer/projecttreewidget.cpp @@ -73,6 +73,8 @@ public: setContextMenuPolicy(Qt::CustomContextMenu); setUniformRowHeights(true); setTextElideMode(Qt::ElideNone); + setAlternatingRowColors(true); + setProperty("AlternateEmpty", true); // Let Manhattan to override style default // setExpandsOnDoubleClick(false); } diff --git a/src/plugins/qt4projectmanager/images/qt_project.png b/src/plugins/qt4projectmanager/images/qt_project.png index 25133f5f476..3a1bfa5fda4 100644 Binary files a/src/plugins/qt4projectmanager/images/qt_project.png and b/src/plugins/qt4projectmanager/images/qt_project.png differ diff --git a/src/plugins/qt4projectmanager/profileeditorfactory.cpp b/src/plugins/qt4projectmanager/profileeditorfactory.cpp index 21299bb2fea..f3d6b631ab9 100644 --- a/src/plugins/qt4projectmanager/profileeditorfactory.cpp +++ b/src/plugins/qt4projectmanager/profileeditorfactory.cpp @@ -56,9 +56,9 @@ ProFileEditorFactory::ProFileEditorFactory(Qt4Manager *manager, TextEditor::Text m_actionHandler(handler) { Core::FileIconProvider *iconProvider = Core::FileIconProvider::instance(); - iconProvider->registerIconForSuffix(QIcon(":/qt4projectmanager/images/qt_project.png"), + iconProvider->registerIconOverlayForSuffix(QIcon(":/qt4projectmanager/images/qt_project.png"), QLatin1String("pro")); - iconProvider->registerIconForSuffix(QIcon(":/qt4projectmanager/images/qt_project.png"), + iconProvider->registerIconOverlayForSuffix(QIcon(":/qt4projectmanager/images/qt_project.png"), QLatin1String("pri")); } diff --git a/src/plugins/qt4projectmanager/qt4nodes.cpp b/src/plugins/qt4projectmanager/qt4nodes.cpp index d7a1783feb5..f9990c522fb 100644 --- a/src/plugins/qt4projectmanager/qt4nodes.cpp +++ b/src/plugins/qt4projectmanager/qt4nodes.cpp @@ -43,6 +43,7 @@ #include #include +#include #include #include #include @@ -60,6 +61,7 @@ #include #include +#include #include #include #include @@ -94,7 +96,17 @@ Qt4PriFileNode::Qt4PriFileNode(Qt4Project *project, Qt4ProFileNode* qt4ProFileNo { Q_ASSERT(project); setFolderName(QFileInfo(filePath).baseName()); - setIcon(QIcon(":/qt4projectmanager/images/qt_project.png")); + + static QIcon dirIcon; + if (dirIcon.isNull()) { + // Create a custom Qt dir icon based on the system icon + Core::FileIconProvider *iconProvider = Core::FileIconProvider::instance(); + QPixmap dirIconPixmap = iconProvider->overlayIcon(QStyle::SP_DirIcon, + QIcon(":/qt4projectmanager/images/qt_project.png"), + QSize(16, 16)); + dirIcon.addPixmap(dirIconPixmap); + } + setIcon(dirIcon); m_fileWatcher->addFile(filePath); connect(m_fileWatcher, SIGNAL(fileChanged(QString)), this, SLOT(scheduleUpdate())); diff --git a/src/plugins/resourceeditor/images/qt_qrc.png b/src/plugins/resourceeditor/images/qt_qrc.png index d22ca676103..3643f37e1a3 100644 Binary files a/src/plugins/resourceeditor/images/qt_qrc.png and b/src/plugins/resourceeditor/images/qt_qrc.png differ diff --git a/src/plugins/resourceeditor/resourceeditorfactory.cpp b/src/plugins/resourceeditor/resourceeditorfactory.cpp index dcdd691c9fc..aefd65f4147 100644 --- a/src/plugins/resourceeditor/resourceeditorfactory.cpp +++ b/src/plugins/resourceeditor/resourceeditorfactory.cpp @@ -55,8 +55,8 @@ ResourceEditorFactory::ResourceEditorFactory(ResourceEditorPlugin *plugin) : m_context += Core::UniqueIDManager::instance() ->uniqueIdentifier(QLatin1String(ResourceEditor::Constants::C_RESOURCEEDITOR)); Core::FileIconProvider *iconProvider = Core::FileIconProvider::instance(); - iconProvider->registerIconForSuffix(QIcon(":/resourceeditor/images/qt_qrc.png"), - QLatin1String("qrc")); + iconProvider->registerIconOverlayForSuffix(QIcon(":/resourceeditor/images/qt_qrc.png"), + QLatin1String("qrc")); } QString ResourceEditorFactory::kind() const diff --git a/src/qworkbenchplugin.pri b/src/qworkbenchplugin.pri index 25e02ae4747..bdf17469aa8 100644 --- a/src/qworkbenchplugin.pri +++ b/src/qworkbenchplugin.pri @@ -51,7 +51,7 @@ macx { contains(QT_CONFIG, reduce_exports):CONFIG += hide_symbols -CONFIG += plugin +CONFIG += plugin plugin_with_soname linux-* { target.path = /lib/qtcreator/plugins/$$PROVIDER