diff --git a/0001-Make-the-welcome-screen-into-plugins.patch b/0001-Make-the-welcome-screen-into-plugins.patch deleted file mode 100644 index 84af98cdb9784056ad4d1b87f9dcf0c2fae18d3d..0000000000000000000000000000000000000000 --- a/0001-Make-the-welcome-screen-into-plugins.patch +++ /dev/null @@ -1,13132 +0,0 @@ -From 2e2d936b4afbec13dfc5f08f0f3998398b7de5ab Mon Sep 17 00:00:00 2001 -From: Daniel Molkentin <daniel.molkentin@nokia.com> -Date: Mon, 27 Jul 2009 13:55:30 +0200 -Subject: [PATCH] Make the welcome screen into plugins. - -This removes the all hard dependencies to and from welcome screen, -except the one to the core plugin. More in detail: - -- Add IWelcomePage to add a tab to the welcome screen -- Move tabs in the modules where they belong -- Enables QHelpManager to open help fullscreen and contextually -- "Getting Started" moves to Qt4ProjectManager -- Projects & Sessions (aka "Develop") moves to ProjectExplorer -- "Community" remains in the welcome plugin for simplicity ---- - 0001-Make-the-welcome-screen-into-plugins.patch | 4384 ++++++++++++++++++++ - ...-the-welcome-screen-into-plugins.patch.modified | 4364 +++++++++++++++++++ - src/libs/extensionsystem/extensionsystem.pro | 10 +- - src/libs/extensionsystem/iwelcomepage.cpp | 8 + - src/libs/extensionsystem/iwelcomepage.h | 31 + - src/libs/utils/welcomemodetreewidget.cpp | 14 + - src/libs/utils/welcomemodetreewidget.h | 11 + - src/plugins/coreplugin/coreplugin.h | 5 - - src/plugins/help/Help.pluginspec | 1 - - src/plugins/help/help.pro | 1 - - src/plugins/help/helpplugin.cpp | 36 +- - src/plugins/help/helpplugin.h | 17 +- - src/plugins/plugins.pro | 3 - - .../projectexplorer/ProjectExplorer.pluginspec | 1 - - src/plugins/projectexplorer/projectexplorer.cpp | 36 +- - src/plugins/projectexplorer/projectexplorer.h | 6 +- - src/plugins/projectexplorer/projectexplorer.pro | 11 +- - .../projectexplorer_dependencies.pri | 1 - - src/plugins/projectexplorer/projectwelcomepage.cpp | 48 + - src/plugins/projectexplorer/projectwelcomepage.h | 58 + - .../projectexplorer/projectwelcomepagewidget.cpp | 157 + - .../projectexplorer/projectwelcomepagewidget.h | 81 + - .../projectexplorer/projectwelcomepagewidget.ui | 259 ++ - .../projectexplorer/projectwelcomeplugin.ui | 21 + - .../qt4projectmanager/Qt4ProjectManager.pluginspec | 1 - - .../gettingstartedwelcomepage.cpp | 47 + - .../qt4projectmanager/gettingstartedwelcomepage.h | 56 + - .../gettingstartedwelcomepagewidget.cpp | 259 ++ - .../gettingstartedwelcomepagewidget.h | 69 + - .../gettingstartedwelcomepagewidget.ui | 348 ++ - .../qt4projectmanager/qt4projectmanager.pro | 14 +- - .../qt4projectmanager_dependencies.pri | 1 - - .../qt4projectmanager/qt4projectmanagerplugin.cpp | 13 +- - .../qt4projectmanager/qt4projectmanagerplugin.h | 2 + - src/plugins/qt4projectmanager/qtversionmanager.cpp | 9 +- - src/plugins/qt4projectmanager/qtversionmanager.h | 5 +- - src/plugins/welcome/communitywelcomepage.cpp | 48 + - src/plugins/welcome/communitywelcomepage.h | 60 + - src/plugins/welcome/communitywelcomepagewidget.cpp | 79 + - src/plugins/welcome/communitywelcomepagewidget.h | 64 + - src/plugins/welcome/communitywelcomepagewidget.ui | 195 + - src/plugins/welcome/rssfetcher.cpp | 2 +- - src/plugins/welcome/rssfetcher.h | 2 + - src/plugins/welcome/welcome.pro | 12 +- - src/plugins/welcome/welcomemode.cpp | 394 +-- - src/plugins/welcome/welcomemode.h | 35 +- - src/plugins/welcome/welcomemode.ui | 872 +---- - src/plugins/welcome/welcomeplugin.cpp | 15 +- - src/plugins/welcome/welcomeplugin.h | 5 + - 49 files changed, 10872 insertions(+), 1299 deletions(-) - create mode 100644 0001-Make-the-welcome-screen-into-plugins.patch - create mode 100644 0001-Make-the-welcome-screen-into-plugins.patch.modified - create mode 100644 src/libs/extensionsystem/iwelcomepage.cpp - create mode 100644 src/libs/extensionsystem/iwelcomepage.h - create mode 100644 src/plugins/projectexplorer/projectwelcomepage.cpp - create mode 100644 src/plugins/projectexplorer/projectwelcomepage.h - create mode 100644 src/plugins/projectexplorer/projectwelcomepagewidget.cpp - create mode 100644 src/plugins/projectexplorer/projectwelcomepagewidget.h - create mode 100644 src/plugins/projectexplorer/projectwelcomepagewidget.ui - create mode 100644 src/plugins/projectexplorer/projectwelcomeplugin.ui - create mode 100644 src/plugins/qt4projectmanager/gettingstartedwelcomepage.cpp - create mode 100644 src/plugins/qt4projectmanager/gettingstartedwelcomepage.h - create mode 100644 src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.cpp - create mode 100644 src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.h - create mode 100644 src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.ui - create mode 100644 src/plugins/welcome/communitywelcomepage.cpp - create mode 100644 src/plugins/welcome/communitywelcomepage.h - create mode 100644 src/plugins/welcome/communitywelcomepagewidget.cpp - create mode 100644 src/plugins/welcome/communitywelcomepagewidget.h - create mode 100644 src/plugins/welcome/communitywelcomepagewidget.ui - -diff --git a/0001-Make-the-welcome-screen-into-plugins.patch b/0001-Make-the-welcome-screen-into-plugins.patch -new file mode 100644 -index 0000000..7f838eb ---- /dev/null -+++ b/0001-Make-the-welcome-screen-into-plugins.patch -@@ -0,0 +1,4384 @@ -+From b551c15d0842620e4653a4c48a8e31d7de9f1bfb Mon Sep 17 00:00:00 2001 -+From: Daniel Molkentin <daniel.molkentin@nokia.com> -+Date: Mon, 27 Jul 2009 13:55:30 +0200 -+Subject: [PATCH] Make the welcome screen into plugins. -+ -+This removes the all hard dependencies to and from welcome screen, -+except the one to the core plugin. More in detail: -+ -+- Add IWelcomePlugin to add a tab to the welcome screen -+- Move tabs in the modules where they belong -+- Enables QHelpManager to open help fullscreen and contextually -+- "Getting Started" moves to Qt4ProjectManager -+- Projects & Sessions (aka "Develop") moves to ProjectExplorer -+- "Community" remains in the welcome plugin for simplicity -+--- -+ src/libs/aggregation/aggregation.pri | 2 + -+ src/libs/extensionsystem/extensionsystem.pro | 10 +- -+ src/libs/extensionsystem/iwelcomeplugin.cpp | 8 + -+ src/libs/extensionsystem/iwelcomeplugin.h | 31 + -+ src/libs/extensionsystem/pluginmanager.cpp | 1 + -+ src/libs/utils/welcomemodetreewidget.cpp | 2 + -+ src/plugins/coreplugin/coreplugin.h | 5 - -+ src/plugins/help/Help.pluginspec | 1 - -+ src/plugins/help/help.pro | 1 - -+ src/plugins/help/helpplugin.cpp | 36 +- -+ src/plugins/help/helpplugin.h | 17 +- -+ src/plugins/plugins.pro | 3 - -+ .../projectexplorer/ProjectExplorer.pluginspec | 1 - -+ src/plugins/projectexplorer/projectexplorer.cpp | 38 +- -+ src/plugins/projectexplorer/projectexplorer.h | 6 +- -+ src/plugins/projectexplorer/projectexplorer.pro | 11 +- -+ .../projectexplorer_dependencies.pri | 1 - -+ src/plugins/projectexplorer/projectwelcomepage.cpp | 170 ++++ -+ src/plugins/projectexplorer/projectwelcomepage.h | 81 ++ -+ src/plugins/projectexplorer/projectwelcomepage.ui | 254 ++++++ -+ .../projectexplorer/projectwelcomeplugin.cpp | 48 ++ -+ src/plugins/projectexplorer/projectwelcomeplugin.h | 58 ++ -+ .../projectexplorer/projectwelcomeplugin.ui | 21 + -+ .../qt4projectmanager/Qt4ProjectManager.pluginspec | 1 - -+ .../gettingstartedwelcomepage.cpp | 271 ++++++ -+ .../qt4projectmanager/gettingstartedwelcomepage.h | 69 ++ -+ .../qt4projectmanager/gettingstartedwelcomepage.ui | 343 ++++++++ -+ .../gettingstartedwelcomeplugin.cpp | 47 ++ -+ .../gettingstartedwelcomeplugin.h | 56 ++ -+ .../qt4projectmanager/qt4projectmanager.pro | 14 +- -+ .../qt4projectmanager_dependencies.pri | 1 - -+ .../qt4projectmanager/qt4projectmanagerplugin.cpp | 13 +- -+ .../qt4projectmanager/qt4projectmanagerplugin.h | 2 + -+ src/plugins/qt4projectmanager/qtversionmanager.cpp | 9 +- -+ src/plugins/qt4projectmanager/qtversionmanager.h | 5 +- -+ src/plugins/welcome/communitywelcomepage.cpp | 93 +++ -+ src/plugins/welcome/communitywelcomepage.h | 64 ++ -+ src/plugins/welcome/communitywelcomepage.ui | 190 +++++ -+ src/plugins/welcome/communitywelcomeplugin.cpp | 47 ++ -+ src/plugins/welcome/communitywelcomeplugin.h | 60 ++ -+ src/plugins/welcome/rssfetcher.cpp | 2 +- -+ src/plugins/welcome/rssfetcher.h | 2 + -+ src/plugins/welcome/welcome.pro | 11 +- -+ src/plugins/welcome/welcomemode.cpp | 409 ++------- -+ src/plugins/welcome/welcomemode.h | 35 +- -+ src/plugins/welcome/welcomemode.ui | 872 +------------------- -+ src/plugins/welcome/welcomeplugin.cpp | 15 +- -+ src/plugins/welcome/welcomeplugin.h | 5 + -+ 48 files changed, 2142 insertions(+), 1300 deletions(-) -+ create mode 100644 src/libs/extensionsystem/iwelcomeplugin.cpp -+ create mode 100644 src/libs/extensionsystem/iwelcomeplugin.h -+ create mode 100644 src/plugins/projectexplorer/projectwelcomepage.cpp -+ create mode 100644 src/plugins/projectexplorer/projectwelcomepage.h -+ create mode 100644 src/plugins/projectexplorer/projectwelcomepage.ui -+ create mode 100644 src/plugins/projectexplorer/projectwelcomeplugin.cpp -+ create mode 100644 src/plugins/projectexplorer/projectwelcomeplugin.h -+ create mode 100644 src/plugins/projectexplorer/projectwelcomeplugin.ui -+ create mode 100644 src/plugins/qt4projectmanager/gettingstartedwelcomepage.cpp -+ create mode 100644 src/plugins/qt4projectmanager/gettingstartedwelcomepage.h -+ create mode 100644 src/plugins/qt4projectmanager/gettingstartedwelcomepage.ui -+ create mode 100644 src/plugins/qt4projectmanager/gettingstartedwelcomeplugin.cpp -+ create mode 100644 src/plugins/qt4projectmanager/gettingstartedwelcomeplugin.h -+ create mode 100644 src/plugins/welcome/communitywelcomepage.cpp -+ create mode 100644 src/plugins/welcome/communitywelcomepage.h -+ create mode 100644 src/plugins/welcome/communitywelcomepage.ui -+ create mode 100644 src/plugins/welcome/communitywelcomeplugin.cpp -+ create mode 100644 src/plugins/welcome/communitywelcomeplugin.h -+ -+diff --git a/src/libs/aggregation/aggregation.pri b/src/libs/aggregation/aggregation.pri -+index a6c48c5..14f9d06 100644 -+--- a/src/libs/aggregation/aggregation.pri -++++ b/src/libs/aggregation/aggregation.pri -+@@ -1 +1,3 @@ -+ LIBS *= -l$$qtLibraryTarget(Aggregation) -++HEADERS += -++SOURCES += -+diff --git a/src/libs/extensionsystem/extensionsystem.pro b/src/libs/extensionsystem/extensionsystem.pro -+index 81f3bc8..ea5574d 100644 -+--- a/src/libs/extensionsystem/extensionsystem.pro -++++ b/src/libs/extensionsystem/extensionsystem.pro -+@@ -4,9 +4,7 @@ DEFINES += EXTENSIONSYSTEM_LIBRARY -+ include(../../qtcreatorlibrary.pri) -+ include(extensionsystem_dependencies.pri) -+ -+-unix:!macx:!freebsd* { -+- LIBS += -ldl -+-} -++unix:!macx:!freebsd*:LIBS += -ldl -+ -+ DEFINES += IDE_TEST_DIR=\\\"$$IDE_SOURCE_TREE\\\" -+ -+@@ -21,14 +19,16 @@ HEADERS += pluginerrorview.h \ -+ pluginspec_p.h \ -+ pluginview.h \ -+ pluginview_p.h \ -+- optionsparser.h -++ optionsparser.h \ -++ iwelcomeplugin.h -+ SOURCES += pluginerrorview.cpp \ -+ plugindetailsview.cpp \ -+ iplugin.cpp \ -+ pluginmanager.cpp \ -+ pluginspec.cpp \ -+ pluginview.cpp \ -+- optionsparser.cpp -++ optionsparser.cpp \ -++ iwelcomeplugin.cpp -+ FORMS += pluginview.ui \ -+ pluginerrorview.ui \ -+ plugindetailsview.ui -+diff --git a/src/libs/extensionsystem/iwelcomeplugin.cpp b/src/libs/extensionsystem/iwelcomeplugin.cpp -+new file mode 100644 -+index 0000000..345d77b -+--- /dev/null -++++ b/src/libs/extensionsystem/iwelcomeplugin.cpp -+@@ -0,0 +1,8 @@ -++#include "iwelcomeplugin.h" -++ -++using namespace ExtensionSystem; -++ -++IWelcomePlugin::IWelcomePlugin() -++{ -++ -++} -+diff --git a/src/libs/extensionsystem/iwelcomeplugin.h b/src/libs/extensionsystem/iwelcomeplugin.h -+new file mode 100644 -+index 0000000..33546ed -+--- /dev/null -++++ b/src/libs/extensionsystem/iwelcomeplugin.h -+@@ -0,0 +1,31 @@ -++#ifndef IWELCOMEPLUGIN_H -++#define IWELCOMEPLUGIN_H -++ -++ -++#include "extensionsystem_global.h" -++ -++#include <QObject> -++ -++namespace ExtensionSystem { -++ -++class IWelcomePluginPrivate; -++ -++class EXTENSIONSYSTEM_EXPORT IWelcomePlugin : public QObject -++{ -++ Q_OBJECT -++ -++public: -++ IWelcomePlugin(); -++ -++ virtual QWidget *page() = 0; -++ virtual QString title() const = 0; -++ virtual int priority() const { return 0; } -++ -++private: -++ // not used atm -++ IWelcomePluginPrivate *m_d; -++}; -++ -++} -++ -++#endif // IWELCOMEPLUGIN_H -+diff --git a/src/libs/extensionsystem/pluginmanager.cpp b/src/libs/extensionsystem/pluginmanager.cpp -+index e79d603..602314a 100644 -+--- a/src/libs/extensionsystem/pluginmanager.cpp -++++ b/src/libs/extensionsystem/pluginmanager.cpp -+@@ -34,6 +34,7 @@ -+ #include "optionsparser.h" -+ #include "iplugin.h" -+ -++ -+ #include <QtCore/QMetaProperty> -+ #include <QtCore/QDir> -+ #include <QtCore/QTextStream> -+diff --git a/src/libs/utils/welcomemodetreewidget.cpp b/src/libs/utils/welcomemodetreewidget.cpp -+index 26d55a3..7ea7373 100644 -+--- a/src/libs/utils/welcomemodetreewidget.cpp -++++ b/src/libs/utils/welcomemodetreewidget.cpp -+@@ -48,6 +48,8 @@ WelcomeModeTreeWidget::WelcomeModeTreeWidget(QWidget *parent) : -+ m_d->bullet = QIcon(QLatin1String(":/welcome/images/list_bullet_arrow.png")); -+ connect(this, SIGNAL(itemClicked(QTreeWidgetItem *, int)), -+ SLOT(slotItemClicked(QTreeWidgetItem *))); -++ -++ viewport()->setAutoFillBackground(false); -+ } -+ -+ WelcomeModeTreeWidget::~WelcomeModeTreeWidget() -+diff --git a/src/plugins/coreplugin/coreplugin.h b/src/plugins/coreplugin/coreplugin.h -+index 04e5be4..ce487fb 100644 -+--- a/src/plugins/coreplugin/coreplugin.h -++++ b/src/plugins/coreplugin/coreplugin.h -+@@ -33,10 +33,6 @@ -+ #include <extensionsystem/iplugin.h> -+ -+ namespace Core { -+- class IMode; -+-} -+- -+-namespace Core { -+ namespace Internal { -+ -+ class EditMode; -+@@ -59,7 +55,6 @@ public slots: -+ -+ private: -+ MainWindow *m_mainWindow; -+- Core::IMode *m_welcomeMode; -+ EditMode *m_editMode; -+ }; -+ -+diff --git a/src/plugins/help/Help.pluginspec b/src/plugins/help/Help.pluginspec -+index d7ccc07..29f1b46 100644 -+--- a/src/plugins/help/Help.pluginspec -++++ b/src/plugins/help/Help.pluginspec -+@@ -22,6 +22,5 @@ will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.</license> -+ <dependency name="Core" version="1.2.80"/> -+ <dependency name="Find" version="1.2.80"/> -+ <dependency name="QuickOpen" version="1.2.80"/> -+- <dependency name="Welcome" version="1.2.80"/> -+ </dependencyList> -+ </plugin> -+diff --git a/src/plugins/help/help.pro b/src/plugins/help/help.pro -+index 1f5ec55..b733a1f 100644 -+--- a/src/plugins/help/help.pro -++++ b/src/plugins/help/help.pro -+@@ -4,7 +4,6 @@ include(../../qtcreatorplugin.pri) -+ include(../../plugins/coreplugin/coreplugin.pri) -+ include(../../plugins/find/find.pri) -+ include(../../plugins/quickopen/quickopen.pri) -+-include(../../plugins/welcome/welcome.pri) -+ QT += network -+ CONFIG += help -+ DEFINES += QT_CLUCENE_SUPPORT \ -+diff --git a/src/plugins/help/helpplugin.cpp b/src/plugins/help/helpplugin.cpp -+index f6e8db8..2ff11c8 100644 -+--- a/src/plugins/help/helpplugin.cpp -++++ b/src/plugins/help/helpplugin.cpp -+@@ -87,8 +87,8 @@ -+ using namespace Help; -+ using namespace Help::Internal; -+ -+-HelpManager::HelpManager(QHelpEngine *helpEngine) -+- : m_helpEngine(helpEngine) -++HelpManager::HelpManager(Internal::HelpPlugin* plugin) -++ : m_plugin(plugin) -+ { -+ } -+ -+@@ -96,7 +96,7 @@ void HelpManager::registerDocumentation(const QStringList &fileNames) -+ { -+ bool needsSetup = false; -+ { -+- QHelpEngineCore hc(m_helpEngine->collectionFile()); -++ QHelpEngineCore hc(m_plugin->helpEngine()->collectionFile()); -+ if (!hc.setupData()) -+ qWarning() << "Could not initialize help engine:" << hc.error(); -+ foreach (const QString &fileName, fileNames) { -+@@ -113,7 +113,17 @@ void HelpManager::registerDocumentation(const QStringList &fileNames) -+ } -+ } -+ if (needsSetup) -+- m_helpEngine->setupData(); -++ m_plugin->helpEngine()->setupData(); -++} -++ -++void HelpManager::openHelpPage(const QString& url) -++{ -++ m_plugin->openHelpPage(url); -++} -++ -++void HelpManager::openContextHelpPage(const QString& url) -++{ -++ m_plugin->openContextHelpPage(url); -+ } -+ -+ HelpPlugin::HelpPlugin() : -+@@ -180,7 +190,7 @@ bool HelpPlugin::initialize(const QStringList &arguments, QString *error) -+ connect(m_helpEngine, SIGNAL(setupFinished()), this, -+ SLOT(updateFilterComboBox())); -+ -+- addAutoReleasedObject(new HelpManager(m_helpEngine)); -++ addAutoReleasedObject(new HelpManager(this)); -+ -+ m_filterSettingsPage = new FilterSettingsPage(m_helpEngine); -+ addAutoReleasedObject(m_filterSettingsPage); -+@@ -430,6 +440,11 @@ bool HelpPlugin::initialize(const QStringList &arguments, QString *error) -+ return true; -+ } -+ -++QHelpEngine* HelpPlugin::helpEngine() const -++{ -++ return m_helpEngine; -++} -++ -+ void HelpPlugin::createRightPaneSideBar() -+ { -+ QAction *switchToHelpMode = new QAction("Go to Help Mode", this); -+@@ -610,17 +625,6 @@ void HelpPlugin::extensionsInitialized() -+ updateFilterComboBox(); -+ m_bookmarkManager->setupBookmarkModels(); -+ -+- using namespace Core::Internal; -+- using namespace Core::Constants; -+- Welcome::WelcomeMode *welcomeMode = -+- qobject_cast<Welcome::WelcomeMode*>(m_core->modeManager()->mode(MODE_WELCOME)); -+- if (welcomeMode) { -+- connect(welcomeMode, SIGNAL(openHelpPage(QString)), this, -+- SLOT(openHelpPage(QString))); -+- connect(welcomeMode, SIGNAL(openContextHelpPage(QString)), this, -+- SLOT(openContextHelpPage(QString))); -+- } -+- -+ #if !defined(QT_NO_WEBKIT) -+ QWebSettings* webSettings = QWebSettings::globalSettings(); -+ QFont font(webSettings->fontFamily(QWebSettings::StandardFont), -+diff --git a/src/plugins/help/helpplugin.h b/src/plugins/help/helpplugin.h -+index 6ab78cf..10cf1fd 100644 -+--- a/src/plugins/help/helpplugin.h -++++ b/src/plugins/help/helpplugin.h -+@@ -63,6 +63,7 @@ class SideBarItem; -+ namespace Help { -+ namespace Internal { -+ class CentralWidget; -++ class HelpPlugin; -+ } -+ -+ namespace Constants { -+@@ -76,12 +77,14 @@ class HELP_EXPORT HelpManager : public QObject -+ { -+ Q_OBJECT -+ public: -+- HelpManager(QHelpEngine *helpEngine); -++ HelpManager(Internal::HelpPlugin*); -+ -+ void registerDocumentation(const QStringList &fileNames); -++ void openHelpPage(const QString& url); -++ void openContextHelpPage(const QString &url); -+ -+ private: -+- QHelpEngine *m_helpEngine; -++ Internal::HelpPlugin *m_plugin; -+ }; -+ -+ namespace Internal { -+@@ -108,6 +111,12 @@ public: -+ void setIndexFilter(const QString &filter); -+ QString indexFilter() const; -+ -++ void openHelpPage(const QUrl& url); -++ void openHelpPage(const QString& url); -++ void openContextHelpPage(const QString &url); -++ -++ QHelpEngine* helpEngine() const; -++ -+ private slots: -+ void modeChanged(Core::IMode *mode); -+ void activateContext(); -+@@ -128,10 +137,6 @@ private slots: -+ void slotHideRightPane(); -+ void copyFromSideBar(); -+ -+- void openHelpPage(const QUrl& url); -+- void openHelpPage(const QString& url); -+- void openContextHelpPage(const QString &url); -+- -+ void updateSideBarSource(); -+ void updateSideBarSource(const QUrl &newUrl); -+ -+diff --git a/src/plugins/plugins.pro b/src/plugins/plugins.pro -+index 6ef52c1..b8ae5ec 100644 -+--- a/src/plugins/plugins.pro -++++ b/src/plugins/plugins.pro -+@@ -94,7 +94,6 @@ plugin_projectexplorer.depends = plugin_quickopen -+ plugin_projectexplorer.depends += plugin_find -+ plugin_projectexplorer.depends += plugin_coreplugin -+ plugin_projectexplorer.depends += plugin_texteditor -+-plugin_projectexplorer.depends += plugin_welcome -+ -+ plugin_qt4projectmanager.subdir = qt4projectmanager -+ plugin_qt4projectmanager.depends = plugin_texteditor -+@@ -103,7 +102,6 @@ plugin_qt4projectmanager.depends += plugin_cpptools -+ plugin_qt4projectmanager.depends += plugin_cppeditor -+ plugin_qt4projectmanager.depends += plugin_help -+ plugin_qt4projectmanager.depends += plugin_designer -+-plugin_qt4projectmanager.depends += plugin_welcome -+ -+ plugin_quickopen.subdir = quickopen -+ plugin_quickopen.depends = plugin_coreplugin -+@@ -144,7 +142,6 @@ plugin_help.subdir = help -+ plugin_help.depends = plugin_find -+ plugin_help.depends += plugin_quickopen -+ plugin_help.depends += plugin_coreplugin -+-plugin_help.depends += plugin_welcome -+ -+ plugin_resourceeditor.subdir = resourceeditor -+ plugin_resourceeditor.depends = plugin_coreplugin -+diff --git a/src/plugins/projectexplorer/ProjectExplorer.pluginspec b/src/plugins/projectexplorer/ProjectExplorer.pluginspec -+index 6a66cfe..8b5a7c3 100644 -+--- a/src/plugins/projectexplorer/ProjectExplorer.pluginspec -++++ b/src/plugins/projectexplorer/ProjectExplorer.pluginspec -+@@ -23,6 +23,5 @@ will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.</license> -+ <dependency name="Find" version="1.2.80"/> -+ <dependency name="QuickOpen" version="1.2.80"/> -+ <dependency name="TextEditor" version="1.2.80"/> -+- <dependency name="Welcome" version="1.2.80"/> -+ </dependencyList> -+ </plugin> -+diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp -+index f10b628..101a2e8 100644 -+--- a/src/plugins/projectexplorer/projectexplorer.cpp -++++ b/src/plugins/projectexplorer/projectexplorer.cpp -+@@ -57,6 +57,8 @@ -+ #include "sessiondialog.h" -+ #include "buildparserfactory.h" -+ #include "projectexplorersettingspage.h" -++#include "projectwelcomeplugin.h" -++#include "projectwelcomepage.h" -+ -+ #include <coreplugin/basemode.h> -+ #include <coreplugin/coreconstants.h> -+@@ -140,6 +142,7 @@ ProjectExplorerPlugin::ProjectExplorerPlugin() -+ -+ ProjectExplorerPlugin::~ProjectExplorerPlugin() -+ { -++ removeObject(m_welcomePlugin); -+ removeObject(this); -+ } -+ -+@@ -156,6 +159,11 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er -+ Core::ICore *core = Core::ICore::instance(); -+ Core::ActionManager *am = core->actionManager(); -+ -++ m_welcomePlugin = new ProjectWelcomePlugin; -++ m_welcomePage = qobject_cast<Internal::ProjectWelcomePage*>(m_welcomePlugin->page()); -++ Q_ASSERT(m_welcomePage); -++ connect(m_welcomePage, SIGNAL(manageSessions()), this, SLOT(showSessionManager())); -++ addObject(m_welcomePlugin); -+ addObject(this); -+ -+ connect(core->fileManager(), SIGNAL(currentFileChanged(QString)), -+@@ -646,10 +654,6 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er -+ m_projectExplorerSettings.showCompilerOutput = s->value("ProjectExplorer/Settings/ShowCompilerOutput", false).toBool(); -+ } -+ -+- if (Welcome::WelcomeMode *welcomeMode = qobject_cast<Welcome::WelcomeMode*> -+- (Core::ICore::instance()->modeManager()->mode(Core::Constants::MODE_WELCOME))) { -+- connect(welcomeMode, SIGNAL(manageSessions()), this, SLOT(showSessionManager())); -+- } -+ connect(m_sessionManagerAction, SIGNAL(triggered()), this, SLOT(showSessionManager())); -+ connect(m_newAction, SIGNAL(triggered()), this, SLOT(newProject())); -+ #if 0 -+@@ -685,6 +689,8 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er -+ this, SLOT(determineSessionToRestoreAtStartup())); -+ connect(Core::ICore::instance(), SIGNAL(coreOpened()), this, SLOT(restoreSession())); -+ -++ updateWelcomePage(); -++ -+ return true; -+ } -+ -+@@ -835,9 +841,7 @@ void ProjectExplorerPlugin::showSessionManager() -+ Core::ModeManager *modeManager = Core::ModeManager::instance(); -+ Core::IMode *welcomeMode = modeManager->mode(Core::Constants::MODE_WELCOME); -+ if (modeManager->currentMode() == welcomeMode) -+- { -+- updateWelcomePage(qobject_cast<Welcome::WelcomeMode*>(welcomeMode)); -+- } -++ updateWelcomePage(); -+ } -+ -+ void ProjectExplorerPlugin::setStartupProject(Project *project) -+@@ -1019,20 +1023,19 @@ Project *ProjectExplorerPlugin::startupProject() const -+ } -+ -+ // update welcome page -+-void ProjectExplorerPlugin::updateWelcomePage(Welcome::WelcomeMode *welcomeMode) -++void ProjectExplorerPlugin::updateWelcomePage() -+ { -+- Welcome::WelcomeMode::WelcomePageData welcomePageData; -++ ProjectWelcomePage::WelcomePageData welcomePageData; -+ welcomePageData.sessionList = m_session->sessions(); -+ welcomePageData.activeSession = m_session->activeSession(); -+ welcomePageData.previousSession = m_session->lastSession(); -+ welcomePageData.projectList = m_recentProjects; -+- welcomeMode->updateWelcomePage(welcomePageData); -++ m_welcomePage->updateWelcomePage(welcomePageData); -+ } -+ -+-void ProjectExplorerPlugin::currentModeChanged(Core::IMode *mode) -++void ProjectExplorerPlugin::currentModeChanged(Core::IMode *) -+ { -+- if (Welcome::WelcomeMode *welcomeMode = qobject_cast<Welcome::WelcomeMode*>(mode)) -+- updateWelcomePage(welcomeMode); -++ updateWelcomePage(); -+ } -+ -+ void ProjectExplorerPlugin::determineSessionToRestoreAtStartup() -+@@ -1080,12 +1083,9 @@ void ProjectExplorerPlugin::restoreSession() -+ // update welcome page -+ Core::ModeManager *modeManager = Core::ModeManager::instance(); -+ connect(modeManager, SIGNAL(currentModeChanged(Core::IMode*)), this, SLOT(currentModeChanged(Core::IMode*))); -+- if (Welcome::WelcomeMode *welcomeMode = qobject_cast<Welcome::WelcomeMode*>(modeManager->mode(Core::Constants::MODE_WELCOME))) { -+- updateWelcomePage(welcomeMode); -+- connect(welcomeMode, SIGNAL(requestSession(QString)), this, SLOT(loadSession(QString))); -+- connect(welcomeMode, SIGNAL(requestProject(QString)), this, SLOT(loadProject(QString))); -+- } -+- -++ connect(m_welcomePage, SIGNAL(requestSession(QString)), this, SLOT(loadSession(QString))); -++ connect(m_welcomePage, SIGNAL(requestProject(QString)), this, SLOT(loadProject(QString))); -++ -+ Core::ICore::instance()->openFiles(arguments); -+ updateActions(); -+ -+diff --git a/src/plugins/projectexplorer/projectexplorer.h b/src/plugins/projectexplorer/projectexplorer.h -+index 0f781ea..48f8c27 100644 -+--- a/src/plugins/projectexplorer/projectexplorer.h -++++ b/src/plugins/projectexplorer/projectexplorer.h -+@@ -72,6 +72,8 @@ class ApplicationOutput; -+ class OutputPane; -+ class ProjectWindow; -+ class ProjectFileFactory; -++class ProjectWelcomePlugin; -++class ProjectWelcomePage; -+ -+ struct ProjectExplorerSettings -+ { -+@@ -209,7 +211,7 @@ private: -+ -+ void updateActions(); -+ void addToRecentProjects(const QString &fileName, const QString &displayName); -+- void updateWelcomePage(Welcome::WelcomeMode *welcomeMode); -++ void updateWelcomePage(); -+ Internal::ProjectFileFactory *findProjectFileFactory(const QString &filename) const; -+ -+ static ProjectExplorerPlugin *m_instance; -+@@ -279,6 +281,8 @@ private: -+ QString m_runMode; -+ QString m_projectFilterString; -+ Internal::ProjectExplorerSettings m_projectExplorerSettings; -++ Internal::ProjectWelcomePlugin *m_welcomePlugin; -++ Internal::ProjectWelcomePage *m_welcomePage; -+ }; -+ -+ namespace Internal { -+diff --git a/src/plugins/projectexplorer/projectexplorer.pro b/src/plugins/projectexplorer/projectexplorer.pro -+index ffb0b08..4a954cc 100644 -+--- a/src/plugins/projectexplorer/projectexplorer.pro -++++ b/src/plugins/projectexplorer/projectexplorer.pro -+@@ -61,7 +61,9 @@ HEADERS += projectexplorer.h \ -+ filewatcher.h \ -+ debugginghelper.h \ -+ abstractmakestep.h \ -+- projectexplorersettingspage.h -++ projectexplorersettingspage.h \ -++ projectwelcomeplugin.h \ -++ projectwelcomepage.h -+ SOURCES += projectexplorer.cpp \ -+ projectwindow.cpp \ -+ buildmanager.cpp \ -+@@ -111,7 +113,9 @@ SOURCES += projectexplorer.cpp \ -+ filewatcher.cpp \ -+ debugginghelper.cpp \ -+ abstractmakestep.cpp \ -+- projectexplorersettingspage.cpp -++ projectexplorersettingspage.cpp \ -++ projectwelcomeplugin.cpp \ -++ projectwelcomepage.cpp -+ FORMS += processstep.ui \ -+ editorsettingspropertiespage.ui \ -+ runsettingspropertiespage.ui \ -+@@ -119,7 +123,8 @@ FORMS += processstep.ui \ -+ projectwizardpage.ui \ -+ buildstepspage.ui \ -+ removefiledialog.ui \ -+- projectexplorersettingspage.ui -++ projectexplorersettingspage.ui \ -++ projectwelcomepage.ui -+ win32 { -+ SOURCES += applicationlauncher_win.cpp \ -+ winguiprocess.cpp -+diff --git a/src/plugins/projectexplorer/projectexplorer_dependencies.pri b/src/plugins/projectexplorer/projectexplorer_dependencies.pri -+index ecbb7a4..674c8bb 100644 -+--- a/src/plugins/projectexplorer/projectexplorer_dependencies.pri -++++ b/src/plugins/projectexplorer/projectexplorer_dependencies.pri -+@@ -3,4 +3,3 @@ include(../../plugins/quickopen/quickopen.pri) -+ include(../../plugins/find/find.pri) -+ include(../../plugins/coreplugin/coreplugin.pri) -+ include(../../plugins/texteditor/texteditor.pri) -+-include(../../plugins/welcome/welcome.pri) -+diff --git a/src/plugins/projectexplorer/projectwelcomepage.cpp b/src/plugins/projectexplorer/projectwelcomepage.cpp -+new file mode 100644 -+index 0000000..ff50f38 -+--- /dev/null -++++ b/src/plugins/projectexplorer/projectwelcomepage.cpp -+@@ -0,0 +1,170 @@ -++/************************************************************************** -++** -++** This file is part of Qt Creator -++** -++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -++** -++** Contact: Nokia Corporation (qt-info@nokia.com) -++** -++** Commercial Usage -++** -++** Licensees holding valid Qt Commercial licenses may use this file in -++** accordance with the Qt Commercial License Agreement provided with the -++** Software or, alternatively, in accordance with the terms contained in -++** a written agreement between you and Nokia. -++** -++** GNU Lesser General Public License Usage -++** -++** Alternatively, this file may be used under the terms of the GNU Lesser -++** General Public License version 2.1 as published by the Free Software -++** Foundation and appearing in the file LICENSE.LGPL included in the -++** packaging of this file. Please review the following information to -++** ensure the GNU Lesser General Public License version 2.1 requirements -++** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -++** -++** If you are unsure which license is appropriate for your use, please -++** contact the sales department at http://www.qtsoftware.com/contact. -++** -++**************************************************************************/ -++ -++#include "projectwelcomepage.h" -++#include "ui_projectwelcomepage.h" -++ -++#include <coreplugin/coreconstants.h> -++#include <coreplugin/uniqueidmanager.h> -++#include <coreplugin/modemanager.h> -++#include <coreplugin/icore.h> -++#include <coreplugin/dialogs/iwizard.h> -++ -++#include <QtCore/QFileInfo> -++#include <QtCore/QDir> -++#include <QtCore/QPair> -++#include <QtGui/QLabel> -++#include <QtGui/QTreeWidgetItem> -++ -++#include <QtCore/QDebug> -++ -++using namespace ProjectExplorer::Internal; -++ -++static QString formatTitleLabel(const QString &text) -++{ -++ // TODO: do not hardcode here -++ QString rc = QLatin1String( -++ "<html><head><style type=\"text/css\">p, li { white-space: pre-wrap; }</style></head>" -++ "<body style=\" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;\">" -++ "<p style=\" margin-top:16px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">" -++ "<span style=\" font-size:x-large; color:#555555;\">"); -++ rc += text; -++ rc += QLatin1String("</span></p><hr/></body></html>"); -++ return rc; -++} -++ -++bool ProjectWelcomePage::WelcomePageData::operator==(const WelcomePageData &rhs) const -++{ -++ return previousSession == rhs.previousSession -++ && activeSession == rhs.activeSession -++ && sessionList == rhs.sessionList -++ && projectList == rhs.projectList; -++} -++ -++bool ProjectWelcomePage::WelcomePageData::operator!=(const WelcomePageData &rhs) const -++{ -++ return previousSession != rhs.previousSession -++ || activeSession != rhs.activeSession -++ || sessionList != rhs.sessionList -++ || projectList != rhs.projectList; -++} -++ -++QDebug operator<<(QDebug dgb, const ProjectWelcomePage::WelcomePageData &d) -++{ -++ dgb.nospace() << "PreviousSession=" << d.previousSession -++ << " activeSession=" << d.activeSession -++ << " sessionList=" << d.sessionList -++ << " projectList=" << d.projectList; -++ return dgb; -++} -++ -++ProjectWelcomePage::ProjectWelcomePage(QWidget *parent) : -++ QWidget(parent), -++ ui(new Ui::ProjectWelcomePage) -++{ -++ ui->setupUi(this); -++ ui->projTitleLabel->setText(::formatTitleLabel(tr("Open Recent Project"))); -++ ui->recentSessionsTitleLabel->setText(::formatTitleLabel(tr("Resume Session"))); -++ updateWelcomePage(WelcomePageData()); -++ -++ connect(ui->sessTreeWidget, SIGNAL(activated(QString)), SLOT(slotSessionClicked(QString))); -++ connect(ui->projTreeWidget, SIGNAL(activated(QString)), SLOT(slotProjectClicked(QString))); -++ connect(ui->createNewProjectButton, SIGNAL(clicked()), SLOT(slotCreateNewProject())); -++ connect(ui->manageSessionsButton, SIGNAL(clicked()), SIGNAL(manageSessions())); -++ -++} -++ -++ProjectWelcomePage::~ProjectWelcomePage() -++{ -++ delete ui; -++} -++ -++void ProjectWelcomePage::updateWelcomePage(const WelcomePageData &welcomePageData) -++{ -++ // Update only if data are modified -++ if (welcomePageData == lastData) -++ return; -++ lastData = welcomePageData; -++ -++ setUpdatesEnabled(false); -++ ui->sessTreeWidget->clear(); -++ ui->projTreeWidget->clear(); -++ -++ if (welcomePageData.sessionList.count() > 0) { -++ foreach (const QString &s, welcomePageData.sessionList) { -++ QString str = s; -++ if (s == welcomePageData.previousSession) -++ str = tr("%1 (last session)").arg(s); -++ ui->sessTreeWidget->addItem(str, s); -++ } -++ ui->sessTreeWidget->updateGeometry(); -++ ui->sessTreeWidget->show(); -++ } else { -++ ui->sessTreeWidget->hide(); -++ } -++ -++ typedef QPair<QString, QString> QStringPair; -++ if (welcomePageData.projectList.count() > 0) { -++ foreach (const QStringPair &it, welcomePageData.projectList) { -++ QTreeWidgetItem *item = ui->projTreeWidget->addItem(it.second, it.first); -++ const QFileInfo fi(it.first); -++ item->setToolTip(1, QDir::toNativeSeparators(fi.absolutePath())); -++ } -++ } else { -++ ui->projTreeWidget->hide(); -++ } -++ ui->projTreeWidget->updateGeometry(); -++ setUpdatesEnabled(true); -++} -++ -++void ProjectWelcomePage::activateEditMode() -++{ -++ Core::ModeManager *modeManager = Core::ModeManager::instance(); -++ if (modeManager->currentMode() == modeManager->mode(Core::Constants::MODE_WELCOME)) -++ modeManager->activateMode(Core::Constants::MODE_EDIT); -++} -++ -++ -++void ProjectWelcomePage::slotSessionClicked(const QString &data) -++{ -++ emit requestSession(data); -++ activateEditMode(); -++} -++ -++void ProjectWelcomePage::slotProjectClicked(const QString &data) -++{ -++ emit requestProject(data); -++ activateEditMode(); -++} -++ -++void ProjectWelcomePage::slotCreateNewProject() -++{ -++ Core::ICore::instance()->showNewItemDialog(tr("New Project..."), -++ Core::IWizard::wizardsOfKind(Core::IWizard::ProjectWizard)); -++} -+diff --git a/src/plugins/projectexplorer/projectwelcomepage.h b/src/plugins/projectexplorer/projectwelcomepage.h -+new file mode 100644 -+index 0000000..02e277d -+--- /dev/null -++++ b/src/plugins/projectexplorer/projectwelcomepage.h -+@@ -0,0 +1,81 @@ -++/************************************************************************** -++** -++** This file is part of Qt Creator -++** -++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -++** -++** Contact: Nokia Corporation (qt-info@nokia.com) -++** -++** Commercial Usage -++** -++** Licensees holding valid Qt Commercial licenses may use this file in -++** accordance with the Qt Commercial License Agreement provided with the -++** Software or, alternatively, in accordance with the terms contained in -++** a written agreement between you and Nokia. -++** -++** GNU Lesser General Public License Usage -++** -++** Alternatively, this file may be used under the terms of the GNU Lesser -++** General Public License version 2.1 as published by the Free Software -++** Foundation and appearing in the file LICENSE.LGPL included in the -++** packaging of this file. Please review the following information to -++** ensure the GNU Lesser General Public License version 2.1 requirements -++** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -++** -++** If you are unsure which license is appropriate for your use, please -++** contact the sales department at http://www.qtsoftware.com/contact. -++** -++**************************************************************************/ -++ -++#ifndef PROJECTWELCOMEPAGE_H -++#define PROJECTWELCOMEPAGE_H -++ -++#include <QtGui/QWidget> -++ -++ -++namespace ProjectExplorer { -++ namespace Internal { -++ -++ -++namespace Ui { -++ class ProjectWelcomePage; -++} -++ -++class ProjectWelcomePage : public QWidget { -++ Q_OBJECT -++public: -++ ProjectWelcomePage(QWidget *parent = 0); -++ ~ProjectWelcomePage(); -++ -++ struct WelcomePageData{ -++ bool operator==(const WelcomePageData &rhs) const; -++ bool operator!=(const WelcomePageData &rhs) const; -++ -++ QString previousSession; -++ QString activeSession; -++ QStringList sessionList; -++ QList<QPair<QString, QString> > projectList; // pair of filename, displayname -++ }; -++ -++ void updateWelcomePage(const WelcomePageData &welcomePageData); -++ -++signals: -++ void requestProject(const QString &project); -++ void requestSession(const QString &session); -++ void manageSessions(); -++ -++private slots: -++ void slotSessionClicked(const QString &data); -++ void slotProjectClicked(const QString &data); -++ void slotCreateNewProject(); -++ -++private: -++ void activateEditMode(); -++ Ui::ProjectWelcomePage *ui; -++ WelcomePageData lastData; -++}; -++ -++} -++} -++ -++#endif // PROJECTWELCOMEPAGE_H -+diff --git a/src/plugins/projectexplorer/projectwelcomepage.ui b/src/plugins/projectexplorer/projectwelcomepage.ui -+new file mode 100644 -+index 0000000..cb26957 -+--- /dev/null -++++ b/src/plugins/projectexplorer/projectwelcomepage.ui -+@@ -0,0 +1,254 @@ -++<?xml version="1.0" encoding="UTF-8"?> -++<ui version="4.0"> -++ <class>ProjectExplorer::Internal::ProjectWelcomePage</class> -++ <widget class="QWidget" name="ProjectExplorer::Internal::ProjectWelcomePage"> -++ <property name="geometry"> -++ <rect> -++ <x>0</x> -++ <y>0</y> -++ <width>667</width> -++ <height>365</height> -++ </rect> -++ </property> -++ <property name="windowTitle"> -++ <string>Form</string> -++ </property> -++ <layout class="QHBoxLayout" name="horizontalLayout"> -++ <item> -++ <widget class="QFrame" name="recentSessionsFrame"> -++ <property name="sizePolicy"> -++ <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> -++ <horstretch>0</horstretch> -++ <verstretch>0</verstretch> -++ </sizepolicy> -++ </property> -++ <property name="minimumSize"> -++ <size> -++ <width>270</width> -++ <height>130</height> -++ </size> -++ </property> -++ <property name="styleSheet"> -++ <string/> -++ </property> -++ <layout class="QGridLayout" name="gridLayout_3"> -++ <property name="horizontalSpacing"> -++ <number>0</number> -++ </property> -++ <property name="verticalSpacing"> -++ <number>3</number> -++ </property> -++ <item row="0" column="0" colspan="3"> -++ <widget class="QLabel" name="recentSessionsTitleLabel"> -++ <property name="sizePolicy"> -++ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Maximum"> -++ <horstretch>0</horstretch> -++ <verstretch>0</verstretch> -++ </sizepolicy> -++ </property> -++ <property name="alignment"> -++ <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> -++ </property> -++ </widget> -++ </item> -++ <item row="1" column="0" colspan="3"> -++ <widget class="Core::Utils::WelcomeModeTreeWidget" name="sessTreeWidget"> -++ <property name="sizePolicy"> -++ <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> -++ <horstretch>0</horstretch> -++ <verstretch>0</verstretch> -++ </sizepolicy> -++ </property> -++ <property name="focusPolicy"> -++ <enum>Qt::NoFocus</enum> -++ </property> -++ <property name="frameShape"> -++ <enum>QFrame::NoFrame</enum> -++ </property> -++ <property name="selectionMode"> -++ <enum>QAbstractItemView::NoSelection</enum> -++ </property> -++ <property name="verticalScrollMode"> -++ <enum>QAbstractItemView::ScrollPerPixel</enum> -++ </property> -++ <property name="rootIsDecorated"> -++ <bool>false</bool> -++ </property> -++ <property name="uniformRowHeights"> -++ <bool>true</bool> -++ </property> -++ <property name="allColumnsShowFocus"> -++ <bool>true</bool> -++ </property> -++ <property name="columnCount"> -++ <number>2</number> -++ </property> -++ <attribute name="headerVisible"> -++ <bool>false</bool> -++ </attribute> -++ <attribute name="headerDefaultSectionSize"> -++ <number>24</number> -++ </attribute> -++ <attribute name="headerMinimumSectionSize"> -++ <number>0</number> -++ </attribute> -++ <column> -++ <property name="text"> -++ <string notr="true">1</string> -++ </property> -++ </column> -++ <column> -++ <property name="text"> -++ <string notr="true">2</string> -++ </property> -++ </column> -++ </widget> -++ </item> -++ <item row="3" column="0"> -++ <widget class="QPushButton" name="manageSessionsButton"> -++ <property name="focusPolicy"> -++ <enum>Qt::TabFocus</enum> -++ </property> -++ <property name="text"> -++ <string>Manage Sessions...</string> -++ </property> -++ </widget> -++ </item> -++ <item row="4" column="0"> -++ <spacer name="verticalSpacer"> -++ <property name="orientation"> -++ <enum>Qt::Vertical</enum> -++ </property> -++ <property name="sizeHint" stdset="0"> -++ <size> -++ <width>20</width> -++ <height>40</height> -++ </size> -++ </property> -++ </spacer> -++ </item> -++ </layout> -++ </widget> -++ </item> -++ <item> -++ <widget class="QFrame" name="recentProjectsFrame"> -++ <property name="styleSheet"> -++ <string/> -++ </property> -++ <layout class="QGridLayout" name="gridLayout_5"> -++ <property name="horizontalSpacing"> -++ <number>0</number> -++ </property> -++ <property name="verticalSpacing"> -++ <number>3</number> -++ </property> -++ <property name="rightMargin"> -++ <number>9</number> -++ </property> -++ <item row="0" column="0" colspan="3"> -++ <widget class="QLabel" name="projTitleLabel"> -++ <property name="sizePolicy"> -++ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Maximum"> -++ <horstretch>0</horstretch> -++ <verstretch>0</verstretch> -++ </sizepolicy> -++ </property> -++ <property name="alignment"> -++ <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> -++ </property> -++ </widget> -++ </item> -++ <item row="1" column="0" colspan="3"> -++ <widget class="Core::Utils::WelcomeModeTreeWidget" name="projTreeWidget"> -++ <property name="sizePolicy"> -++ <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> -++ <horstretch>0</horstretch> -++ <verstretch>0</verstretch> -++ </sizepolicy> -++ </property> -++ <property name="focusPolicy"> -++ <enum>Qt::NoFocus</enum> -++ </property> -++ <property name="frameShape"> -++ <enum>QFrame::NoFrame</enum> -++ </property> -++ <property name="selectionMode"> -++ <enum>QAbstractItemView::NoSelection</enum> -++ </property> -++ <property name="verticalScrollMode"> -++ <enum>QAbstractItemView::ScrollPerPixel</enum> -++ </property> -++ <property name="rootIsDecorated"> -++ <bool>false</bool> -++ </property> -++ <property name="uniformRowHeights"> -++ <bool>true</bool> -++ </property> -++ <property name="allColumnsShowFocus"> -++ <bool>true</bool> -++ </property> -++ <property name="columnCount"> -++ <number>2</number> -++ </property> -++ <attribute name="headerVisible"> -++ <bool>false</bool> -++ </attribute> -++ <attribute name="headerDefaultSectionSize"> -++ <number>24</number> -++ </attribute> -++ <attribute name="headerMinimumSectionSize"> -++ <number>0</number> -++ </attribute> -++ <column> -++ <property name="text"> -++ <string notr="true">1</string> -++ </property> -++ </column> -++ <column> -++ <property name="text"> -++ <string notr="true">2</string> -++ </property> -++ </column> -++ </widget> -++ </item> -++ <item row="3" column="0"> -++ <widget class="QPushButton" name="createNewProjectButton"> -++ <property name="focusPolicy"> -++ <enum>Qt::TabFocus</enum> -++ </property> -++ <property name="text"> -++ <string>Create New Project...</string> -++ </property> -++ <property name="flat"> -++ <bool>false</bool> -++ </property> -++ </widget> -++ </item> -++ <item row="4" column="0"> -++ <spacer name="verticalSpacer_2"> -++ <property name="orientation"> -++ <enum>Qt::Vertical</enum> -++ </property> -++ <property name="sizeHint" stdset="0"> -++ <size> -++ <width>20</width> -++ <height>40</height> -++ </size> -++ </property> -++ </spacer> -++ </item> -++ </layout> -++ </widget> -++ </item> -++ </layout> -++ </widget> -++ <customwidgets> -++ <customwidget> -++ <class>Core::Utils::WelcomeModeTreeWidget</class> -++ <extends>QTreeWidget</extends> -++ <header>utils/welcomemodetreewidget.h</header> -++ </customwidget> -++ </customwidgets> -++ <resources/> -++ <connections/> -++</ui> -+diff --git a/src/plugins/projectexplorer/projectwelcomeplugin.cpp b/src/plugins/projectexplorer/projectwelcomeplugin.cpp -+new file mode 100644 -+index 0000000..d850c8f -+--- /dev/null -++++ b/src/plugins/projectexplorer/projectwelcomeplugin.cpp -+@@ -0,0 +1,48 @@ -++/************************************************************************** -++** -++** This file is part of Qt Creator -++** -++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -++** -++** Contact: Nokia Corporation (qt-info@nokia.com) -++** -++** Commercial Usage -++** -++** Licensees holding valid Qt Commercial licenses may use this file in -++** accordance with the Qt Commercial License Agreement provided with the -++** Software or, alternatively, in accordance with the terms contained in -++** a written agreement between you and Nokia. -++** -++** GNU Lesser General Public License Usage -++** -++** Alternatively, this file may be used under the terms of the GNU Lesser -++** General Public License version 2.1 as published by the Free Software -++** Foundation and appearing in the file LICENSE.LGPL included in the -++** packaging of this file. Please review the following information to -++** ensure the GNU Lesser General Public License version 2.1 requirements -++** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -++** -++** If you are unsure which license is appropriate for your use, please -++** contact the sales department at http://www.qtsoftware.com/contact. -++** -++**************************************************************************/ -++ -++#include "projectwelcomeplugin.h" -++#include "projectwelcomepage.h" -++ -++namespace ProjectExplorer { -++namespace Internal { -++ -++ProjectWelcomePlugin::ProjectWelcomePlugin() -++ : m_page(new ProjectWelcomePage) -++{ -++ -++} -++ -++QWidget* ProjectWelcomePlugin::page() -++{ -++ return m_page; -++} -++ -++} // namespace Internal -++} // namespace ProjectExplorer -+diff --git a/src/plugins/projectexplorer/projectwelcomeplugin.h b/src/plugins/projectexplorer/projectwelcomeplugin.h -+new file mode 100644 -+index 0000000..af55a7d -+--- /dev/null -++++ b/src/plugins/projectexplorer/projectwelcomeplugin.h -+@@ -0,0 +1,58 @@ -++/************************************************************************** -++** -++** This file is part of Qt Creator -++** -++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -++** -++** Contact: Nokia Corporation (qt-info@nokia.com) -++** -++** Commercial Usage -++** -++** Licensees holding valid Qt Commercial licenses may use this file in -++** accordance with the Qt Commercial License Agreement provided with the -++** Software or, alternatively, in accordance with the terms contained in -++** a written agreement between you and Nokia. -++** -++** GNU Lesser General Public License Usage -++** -++** Alternatively, this file may be used under the terms of the GNU Lesser -++** General Public License version 2.1 as published by the Free Software -++** Foundation and appearing in the file LICENSE.LGPL included in the -++** packaging of this file. Please review the following information to -++** ensure the GNU Lesser General Public License version 2.1 requirements -++** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -++** -++** If you are unsure which license is appropriate for your use, please -++** contact the sales department at http://www.qtsoftware.com/contact. -++** -++**************************************************************************/ -++ -++#ifndef PROJECTWELCOMEPLUGIN_H -++#define PROJECTWELCOMEPLUGIN_H -++ -++#include <extensionsystem/iwelcomeplugin.h> -++ -++namespace ProjectExplorer { -++namespace Internal { -++ -++class ProjectWelcomePage; -++ -++class ProjectWelcomePlugin : public ExtensionSystem::IWelcomePlugin -++{ -++ Q_OBJECT -++public: -++ ProjectWelcomePlugin(); -++ -++ QWidget *page(); -++ QString title() const { return tr("Develop"); } -++ int priority() const { return 20; } -++private: -++ ProjectWelcomePage *m_page; -++ -++ -++}; -++ -++} // namespace Internal -++} // namespace ProjectExplorer -++ -++#endif // PROJECTWELCOMEPLUGIN_H -+diff --git a/src/plugins/projectexplorer/projectwelcomeplugin.ui b/src/plugins/projectexplorer/projectwelcomeplugin.ui -+new file mode 100644 -+index 0000000..7f7c84b -+--- /dev/null -++++ b/src/plugins/projectexplorer/projectwelcomeplugin.ui -+@@ -0,0 +1,21 @@ -++<ui version="4.0" > -++ <author/> -++ <comment/> -++ <exportmacro/> -++ <class>ProjectWelcomePlugin</class> -++ <widget class="QWidget" name="ProjectWelcomePlugin" > -++ <property name="geometry" > -++ <rect> -++ <x>0</x> -++ <y>0</y> -++ <width>400</width> -++ <height>300</height> -++ </rect> -++ </property> -++ <property name="windowTitle" > -++ <string>Form</string> -++ </property> -++ </widget> -++ <pixmapfunction/> -++ <connections/> -++</ui> -+diff --git a/src/plugins/qt4projectmanager/Qt4ProjectManager.pluginspec b/src/plugins/qt4projectmanager/Qt4ProjectManager.pluginspec -+index 3b515bd..c4b8d44 100644 -+--- a/src/plugins/qt4projectmanager/Qt4ProjectManager.pluginspec -++++ b/src/plugins/qt4projectmanager/Qt4ProjectManager.pluginspec -+@@ -25,6 +25,5 @@ will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.</license> -+ <dependency name="CppEditor" version="1.2.80"/> -+ <dependency name="Help" version="1.2.80"/> -+ <dependency name="Designer" version="1.2.80"/> -+- <dependency name="Welcome" version="1.2.80"/> -+ </dependencyList> -+ </plugin> -+diff --git a/src/plugins/qt4projectmanager/gettingstartedwelcomepage.cpp b/src/plugins/qt4projectmanager/gettingstartedwelcomepage.cpp -+new file mode 100644 -+index 0000000..ca1db4c -+--- /dev/null -++++ b/src/plugins/qt4projectmanager/gettingstartedwelcomepage.cpp -+@@ -0,0 +1,271 @@ -++/************************************************************************** -++** -++** This file is part of Qt Creator -++** -++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -++** -++** Contact: Nokia Corporation (qt-info@nokia.com) -++** -++** Commercial Usage -++** -++** Licensees holding valid Qt Commercial licenses may use this file in -++** accordance with the Qt Commercial License Agreement provided with the -++** Software or, alternatively, in accordance with the terms contained in -++** a written agreement between you and Nokia. -++** -++** GNU Lesser General Public License Usage -++** -++** Alternatively, this file may be used under the terms of the GNU Lesser -++** General Public License version 2.1 as published by the Free Software -++** Foundation and appearing in the file LICENSE.LGPL included in the -++** packaging of this file. Please review the following information to -++** ensure the GNU Lesser General Public License version 2.1 requirements -++** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -++** -++** If you are unsure which license is appropriate for your use, please -++** contact the sales department at http://www.qtsoftware.com/contact. -++** -++**************************************************************************/ -++ -++#include "gettingstartedwelcomepage.h" -++#include "ui_gettingstartedwelcomepage.h" -++ -++#include <coreplugin/icore.h> -++#include <coreplugin/coreconstants.h> -++ -++#include <extensionsystem/pluginmanager.h> -++ -++#include <help/helpplugin.h> -++ -++#include <QtCore/QDateTime> -++#include <QtCore/QDir> -++#include <QtCore/QFileInfo> -++#include <QtCore/QDebug> -++#include <QtCore/QUrl> -++#include <QtCore/QXmlStreamReader> -++#include <QtGui/QFont> -++ -++namespace Qt4ProjectManager { -++namespace Internal { -++ -++// TODO: remove -++static QString titleLabel(const QString &text) -++{ -++ // TODO: do not hardcode here -++ QString rc = QLatin1String( -++ "<html><head><style type=\"text/css\">p, li { white-space: pre-wrap; }</style></head>" -++ "<body style=\" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;\">" -++ "<p style=\" margin-top:16px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">" -++ "<span style=\" font-size:x-large; color:#555555;\">"); -++ rc += text; -++ rc += QLatin1String("</span></p><hr/></body></html>"); -++ return rc; -++} -++ -++GettingStartedWelcomePage::GettingStartedWelcomePage(QWidget *parent) : -++ QWidget(parent), -++ ui(new Ui::GettingStartedWelcomePage) -++{ -++ ui->setupUi(this); -++ ui->tutorialsTitleLabel->setText(titleLabel(tr("Tutorials"))); -++ ui->demoTitleLabel->setText(titleLabel(tr("Explore Qt Examples"))); -++ ui->didYouKnowTextBrowser->viewport()->setAutoFillBackground(false); -++ ui->didYouKnowTitleLabel->setText(titleLabel(tr("Did You Know?"))); -++ -++ connect(ui->tutorialTreeWidget, SIGNAL(activated(QString)), SLOT(slotOpenHelpPage(const QString&))); -++ connect(ui->openExampleButton, SIGNAL(clicked()), SLOT(slotOpenExample())); -++ connect(ui->examplesComboBox, SIGNAL(currentIndexChanged(int)), SLOT(slotEnableExampleButton(int))); -++ -++ ui->tutorialTreeWidget->addItem(tr("<b>Qt Creator - A quick tour</b>"), -++ QString("qthelp://com.nokia.qtcreator.%1%2/doc/index.html").arg(IDE_VERSION_MAJOR).arg(IDE_VERSION_MINOR)); -++ ui->tutorialTreeWidget->addItem(tr("Creating an address book"), -++ QLatin1String("qthelp://com.nokia.qtcreator/doc/tutorials-addressbook-sdk.html")); -++ ui->tutorialTreeWidget->addItem(tr("Understanding widgets"), -++ QLatin1String("qthelp://com.trolltech.qt/qdoc/widgets-tutorial.html")); -++ ui->tutorialTreeWidget->addItem(tr("Building with qmake"), -++ QLatin1String("qthelp://com.trolltech.qmake/qdoc/qmake-tutorial.html")); -++ ui->tutorialTreeWidget->addItem(tr("Writing test cases"), -++ QLatin1String("qthelp://com.trolltech.qt/qdoc/qtestlib-tutorial.html")); -++ -++ srand(QDateTime::currentDateTime().toTime_t()); -++ QStringList tips = tipsOfTheDay(); -++ m_currentTip = rand()%tips.count(); -++ -++ QTextDocument *doc = ui->didYouKnowTextBrowser->document(); -++ doc->setDefaultStyleSheet("a:link {color:black;}"); -++ ui->didYouKnowTextBrowser->setDocument(doc); -++ ui->didYouKnowTextBrowser->setText(tips.at(m_currentTip)); -++ -++ connect(ui->nextTipBtn, SIGNAL(clicked()), this, SLOT(slotNextTip())); -++ connect(ui->prevTipBtn, SIGNAL(clicked()), this, SLOT(slotPrevTip())); -++ -++} -++ -++GettingStartedWelcomePage::~GettingStartedWelcomePage() -++{ -++ delete ui; -++} -++ -++void GettingStartedWelcomePage::updateExamples(const QString& examplePath, const QString& demosPath, const QString &sourcePath) -++{ -++ QString demoxml = demosPath + "/qtdemo/xml/examples.xml"; -++ if (!QFile::exists(demoxml)) { -++ demoxml = sourcePath + "/demos/qtdemo/xml/examples.xml"; -++ if (!QFile::exists(demoxml)) -++ return; -++ } -++ -++ QFile description(demoxml); -++ if (!description.open(QFile::ReadOnly)) -++ return; -++ -++ ui->examplesComboBox->clear(); -++ ui->examplesComboBox->setEnabled(true); -++ -++ ui->examplesComboBox->addItem(tr("Choose an example...")); -++ QFont f = font(); -++ f.setItalic(true); -++ ui->examplesComboBox->setItemData(0, f, Qt::FontRole); -++ f.setItalic(false); -++ bool inExamples = false; -++ QString dirName; -++ QXmlStreamReader reader(&description); -++ while (!reader.atEnd()) { -++ switch (reader.readNext()) { -++ case QXmlStreamReader::StartElement: -++ if (reader.name() == "category") { -++ QString name = reader.attributes().value(QLatin1String("name")).toString(); -++ if (name.contains("tutorial")) -++ break; -++ dirName = reader.attributes().value(QLatin1String("dirname")).toString(); -++ ui->examplesComboBox->addItem(name); -++ f.setBold(true); -++ ui->examplesComboBox->setItemData(ui->examplesComboBox->count()-1, f, Qt::FontRole); -++ f.setBold(false); -++ inExamples = true; -++ } -++ if (inExamples && reader.name() == "example") { -++ QString name = reader.attributes().value(QLatin1String("name")).toString(); -++ QString fn = reader.attributes().value(QLatin1String("filename")).toString(); -++ QString relativeProPath = '/' + dirName + '/' + fn + '/' + fn + ".pro"; -++ QString fileName = examplePath + relativeProPath; -++ if (!QFile::exists(fileName)) -++ fileName = sourcePath + "/examples" + relativeProPath; -++ QString helpPath = "qthelp://com.trolltech.qt/qdoc/" + dirName.replace("/", "-") + "-" + fn + ".html"; -++ -++ ui->examplesComboBox->addItem(" " + name, fileName); -++ ui->examplesComboBox->setItemData(ui->examplesComboBox->count()-1, helpPath, Qt::UserRole+1); -++ } -++ break; -++ case QXmlStreamReader::EndElement: -++ if (reader.name() == "category") -++ inExamples = false; -++ break; -++ default: -++ break; -++ } -++ } -++} -++ -++void GettingStartedWelcomePage::slotEnableExampleButton(int index) -++{ -++ QString fileName = ui->examplesComboBox->itemData(index, Qt::UserRole).toString(); -++ ui->openExampleButton->setEnabled(!fileName.isEmpty()); -++} -++ -++void GettingStartedWelcomePage::slotOpenExample() -++{ -++ QComboBox *box = ui->examplesComboBox; -++ QString proFile = box->itemData(box->currentIndex(), Qt::UserRole).toString(); -++ QString helpFile = box->itemData(box->currentIndex(), Qt::UserRole + 1).toString(); -++ QStringList files; -++ QFileInfo fi(proFile); -++ QString tryFile = fi.path() + "/main.cpp"; -++ files << proFile; -++ if(!QFile::exists(tryFile)) -++ tryFile = fi.path() + '/' + fi.baseName() + ".cpp"; -++ if(QFile::exists(tryFile)) -++ files << tryFile; -++ Core::ICore::instance()->openFiles(files); -++ slotOpenContextHelpPage(helpFile); -++} -++ -++void GettingStartedWelcomePage::slotOpenHelpPage(const QString& url) -++{ -++ Help::HelpManager *helpManager -++ = ExtensionSystem::PluginManager::instance()->getObject<Help::HelpManager>(); -++ Q_ASSERT(helpManager); -++ helpManager->openHelpPage(url); -++} -++void GettingStartedWelcomePage::slotOpenContextHelpPage(const QString& url) -++{ -++ Help::HelpManager *helpManager -++ = ExtensionSystem::PluginManager::instance()->getObject<Help::HelpManager>(); -++ Q_ASSERT(helpManager); -++ helpManager->openContextHelpPage(url); -++} -++ -++void GettingStartedWelcomePage::slotNextTip() -++{ -++ QStringList tips = tipsOfTheDay(); -++ m_currentTip = ((m_currentTip+1)%tips.count()); -++ ui->didYouKnowTextBrowser->setText(tips.at(m_currentTip)); -++} -++ -++void GettingStartedWelcomePage::slotPrevTip() -++{ -++ QStringList tips = tipsOfTheDay(); -++ m_currentTip = ((m_currentTip-1)+tips.count())%tips.count(); -++ ui->didYouKnowTextBrowser->setText(tips.at(m_currentTip)); -++} -++ -++QStringList GettingStartedWelcomePage::tipsOfTheDay() -++{ -++ static QStringList tips; -++ if (tips.isEmpty()) { -++ QString altShortcut = -++#ifdef Q_WS_MAC -++ tr("Cmd", "Shortcut key"); -++#else -++ tr("Alt", "Shortcut key"); -++#endif -++ tips.append(tr("You can switch between Qt Creator's modes using <tt>Ctrl+number</tt>:<ul>" -++ "<li>1 - Welcome</li><li>2 - Edit</li><li>3 - Debug</li><li>4 - Projects</li><li>5 - Help</li>" -++ "<li></li><li>6 - Output</li></ul>")); -++ //:%1 gets replaced by Alt (Win/Unix) or Cmd (Mac) -++ tips.append(tr("You can show and hide the side bar using <tt>%1+0<tt>.").arg(altShortcut)); -++ tips.append(tr("You can fine tune the <tt>Find</tt> function by selecting "Whole Words" " -++ "or "Case Sensitive". Simply click on the icons on the right end of the line edit.")); -++ tips.append(tr("If you add <a href=\"qthelp://com.nokia.qtcreator/doc/creator-external-library-handling.html\"" -++ ">external libraries</a>, Qt Creator will automatically offer syntax highlighting " -++ "and code completion.")); -++ tips.append(tr("The code completion is CamelCase-aware. For example, to complete <tt>namespaceUri</tt> " -++ "you can just type <tt>nU</tt> and hit <tt>Ctrl+Space</tt>.")); -++ tips.append(tr("You can force code completion at any time using <tt>Ctrl+Space</tt>.")); -++ tips.append(tr("You can start Qt Creator with a session by calling <tt>qtcreator <sessionname></tt>.")); -++ tips.append(tr("You can return to edit mode from any other mode at any time by hitting <tt>Escape</tt>.")); -++ //:%1 gets replaced by Alt (Win/Unix) or Cmd (Mac) -++ tips.append(tr("You can switch between the output pane by hitting <tt>%1+n</tt> where n is the number denoted " -++ "on the buttons at the window bottom:" -++ "<ul><li>1 - Build Issues</li><li>2 - Search Results</li><li>3 - Application Output</li>" -++ "<li>4 - Compile Output</li></ul>").arg(altShortcut)); -++ tips.append(tr("You can quickly search methods, classes, help and more using the " -++ "<a href=\"qthelp://com.nokia.qtcreator/doc/creator-navigation.html\">Locator bar</a> (<tt>Ctrl+K</tt>).")); -++ tips.append(tr("You can add custom build steps in the " -++ "<a href=\"qthelp://com.nokia.qtcreator/doc/creator-build-settings.html\">build settings</a>.")); -++ tips.append(tr("Within a session, you can add " -++ "<a href=\"qthelp://com.nokia.qtcreator/doc/creator-build-settings.html#dependencies\">dependencies</a> between projects.")); -++ tips.append(tr("You can set the preferred editor encoding for every project in <tt>Projects -> Editor Settings -> Default Encoding</tt>.")); -++ tips.append(tr("You can modify the binary that is being executed when you press the <tt>Run</tt> button: Add a <tt>Custom Executable</tt> " -++ "by clicking the <tt>+</tt> button in <tt>Projects -> Run Settings -> Run Configuration</tt> and then select the new " -++ "target in the combo box.")); -++ tips.append(tr("You can use Qt Creator with a number of <a href=\"qthelp://com.nokia.qtcreator/doc/creator-version-control.html\">" -++ "revision control systems</a> such as Subversion, Perforce and Git.")); -++ tips.append(tr("In the editor, <tt>F2</tt> toggles declaration and definition while <tt>F4</tt> toggles header file and source file.")); -++ } -++ return tips; -++} -++ -++ -++} // namespace Internal -++} // namespace Qt4ProjectManager -+diff --git a/src/plugins/qt4projectmanager/gettingstartedwelcomepage.h b/src/plugins/qt4projectmanager/gettingstartedwelcomepage.h -+new file mode 100644 -+index 0000000..a40df28 -+--- /dev/null -++++ b/src/plugins/qt4projectmanager/gettingstartedwelcomepage.h -+@@ -0,0 +1,69 @@ -++/************************************************************************** -++** -++** This file is part of Qt Creator -++** -++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -++** -++** Contact: Nokia Corporation (qt-info@nokia.com) -++** -++** Commercial Usage -++** -++** Licensees holding valid Qt Commercial licenses may use this file in -++** accordance with the Qt Commercial License Agreement provided with the -++** Software or, alternatively, in accordance with the terms contained in -++** a written agreement between you and Nokia. -++** -++** GNU Lesser General Public License Usage -++** -++** Alternatively, this file may be used under the terms of the GNU Lesser -++** General Public License version 2.1 as published by the Free Software -++** Foundation and appearing in the file LICENSE.LGPL included in the -++** packaging of this file. Please review the following information to -++** ensure the GNU Lesser General Public License version 2.1 requirements -++** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -++** -++** If you are unsure which license is appropriate for your use, please -++** contact the sales department at http://www.qtsoftware.com/contact. -++** -++**************************************************************************/ -++ -++#ifndef GETTINGSTARTEDWELCOMEPAGE_H -++#define GETTINGSTARTEDWELCOMEPAGE_H -++ -++#include <QWidget> -++ -++namespace Qt4ProjectManager { -++namespace Internal { -++ -++namespace Ui { -++ class GettingStartedWelcomePage; -++} -++ -++class GettingStartedWelcomePage : public QWidget { -++ Q_OBJECT -++public: -++ GettingStartedWelcomePage(QWidget *parent = 0); -++ ~GettingStartedWelcomePage(); -++ -++ public slots: -++ void updateExamples(const QString& examplePath, const QString& demosPath, const QString &sourcePath); -++ -++private slots: -++ void slotOpenHelpPage(const QString& url); -++ void slotOpenContextHelpPage(const QString& url); -++ void slotEnableExampleButton(int); -++ void slotOpenExample(); -++ void slotNextTip(); -++ void slotPrevTip(); -++ -++private: -++ QStringList tipsOfTheDay(); -++ -++ Ui::GettingStartedWelcomePage *ui; -++ int m_currentTip; -++}; -++ -++ -++} // namespace Internal -++} // namespace Qt4ProjectManager -++#endif // GETTINGSTARTEDWELCOMEPAGE_H -+diff --git a/src/plugins/qt4projectmanager/gettingstartedwelcomepage.ui b/src/plugins/qt4projectmanager/gettingstartedwelcomepage.ui -+new file mode 100644 -+index 0000000..8bfebb0 -+--- /dev/null -++++ b/src/plugins/qt4projectmanager/gettingstartedwelcomepage.ui -+@@ -0,0 +1,343 @@ -++<?xml version="1.0" encoding="UTF-8"?> -++<ui version="4.0"> -++ <class>Qt4ProjectManager::Internal::GettingStartedWelcomePage</class> -++ <widget class="QWidget" name="Qt4ProjectManager::Internal::GettingStartedWelcomePage"> -++ <property name="geometry"> -++ <rect> -++ <x>0</x> -++ <y>0</y> -++ <width>646</width> -++ <height>361</height> -++ </rect> -++ </property> -++ <property name="windowTitle"> -++ <string>Form</string> -++ </property> -++ <layout class="QGridLayout" name="gridLayout"> -++ <item row="0" column="0" rowspan="2"> -++ <widget class="QFrame" name="tutorialsFrame"> -++ <property name="sizePolicy"> -++ <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> -++ <horstretch>0</horstretch> -++ <verstretch>0</verstretch> -++ </sizepolicy> -++ </property> -++ <property name="maximumSize"> -++ <size> -++ <width>400</width> -++ <height>16777215</height> -++ </size> -++ </property> -++ <property name="styleSheet"> -++ <string/> -++ </property> -++ <layout class="QGridLayout" name="gridLayout_6"> -++ <item row="0" column="0"> -++ <widget class="QLabel" name="tutorialsTitleLabel"> -++ <property name="sizePolicy"> -++ <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> -++ <horstretch>0</horstretch> -++ <verstretch>0</verstretch> -++ </sizepolicy> -++ </property> -++ <property name="alignment"> -++ <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> -++ </property> -++ </widget> -++ </item> -++ <item row="1" column="0"> -++ <widget class="Core::Utils::WelcomeModeTreeWidget" name="tutorialTreeWidget"> -++ <property name="sizePolicy"> -++ <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> -++ <horstretch>0</horstretch> -++ <verstretch>0</verstretch> -++ </sizepolicy> -++ </property> -++ <property name="focusPolicy"> -++ <enum>Qt::NoFocus</enum> -++ </property> -++ <property name="frameShape"> -++ <enum>QFrame::NoFrame</enum> -++ </property> -++ <property name="selectionMode"> -++ <enum>QAbstractItemView::NoSelection</enum> -++ </property> -++ <property name="verticalScrollMode"> -++ <enum>QAbstractItemView::ScrollPerPixel</enum> -++ </property> -++ <property name="rootIsDecorated"> -++ <bool>false</bool> -++ </property> -++ <property name="uniformRowHeights"> -++ <bool>true</bool> -++ </property> -++ <property name="allColumnsShowFocus"> -++ <bool>true</bool> -++ </property> -++ <property name="columnCount"> -++ <number>2</number> -++ </property> -++ <attribute name="headerVisible"> -++ <bool>false</bool> -++ </attribute> -++ <attribute name="headerDefaultSectionSize"> -++ <number>24</number> -++ </attribute> -++ <attribute name="headerMinimumSectionSize"> -++ <number>0</number> -++ </attribute> -++ <column> -++ <property name="text"> -++ <string notr="true">1</string> -++ </property> -++ </column> -++ <column> -++ <property name="text"> -++ <string notr="true">2</string> -++ </property> -++ </column> -++ </widget> -++ </item> -++ </layout> -++ </widget> -++ </item> -++ <item row="0" column="1"> -++ <widget class="QFrame" name="demosExamplesFrame"> -++ <property name="sizePolicy"> -++ <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> -++ <horstretch>0</horstretch> -++ <verstretch>0</verstretch> -++ </sizepolicy> -++ </property> -++ <property name="maximumSize"> -++ <size> -++ <width>400</width> -++ <height>16777215</height> -++ </size> -++ </property> -++ <property name="styleSheet"> -++ <string/> -++ </property> -++ <layout class="QGridLayout" name="gridLayout_8"> -++ <property name="rightMargin"> -++ <number>8</number> -++ </property> -++ <property name="horizontalSpacing"> -++ <number>0</number> -++ </property> -++ <item row="0" column="0" colspan="4"> -++ <widget class="QLabel" name="demoTitleLabel"> -++ <property name="alignment"> -++ <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> -++ </property> -++ </widget> -++ </item> -++ <item row="1" column="0"> -++ <widget class="QComboBox" name="examplesComboBox"> -++ <property name="enabled"> -++ <bool>false</bool> -++ </property> -++ <property name="sizePolicy"> -++ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred"> -++ <horstretch>0</horstretch> -++ <verstretch>0</verstretch> -++ </sizepolicy> -++ </property> -++ <item> -++ <property name="text"> -++ <string>Examples not installed</string> -++ </property> -++ </item> -++ </widget> -++ </item> -++ <item row="1" column="2"> -++ <widget class="QToolButton" name="openExampleButton"> -++ <property name="enabled"> -++ <bool>false</bool> -++ </property> -++ <property name="sizePolicy"> -++ <sizepolicy hsizetype="Fixed" vsizetype="Preferred"> -++ <horstretch>0</horstretch> -++ <verstretch>0</verstretch> -++ </sizepolicy> -++ </property> -++ <property name="text"> -++ <string>Open</string> -++ </property> -++ </widget> -++ </item> -++ <item row="1" column="1"> -++ <spacer name="horizontalSpacer"> -++ <property name="orientation"> -++ <enum>Qt::Horizontal</enum> -++ </property> -++ <property name="sizeType"> -++ <enum>QSizePolicy::Fixed</enum> -++ </property> -++ <property name="sizeHint" stdset="0"> -++ <size> -++ <width>6</width> -++ <height>6</height> -++ </size> -++ </property> -++ </spacer> -++ </item> -++ </layout> -++ </widget> -++ </item> -++ <item row="1" column="1"> -++ <widget class="QFrame" name="didyouKnowFrame"> -++ <property name="sizePolicy"> -++ <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> -++ <horstretch>0</horstretch> -++ <verstretch>0</verstretch> -++ </sizepolicy> -++ </property> -++ <property name="maximumSize"> -++ <size> -++ <width>400</width> -++ <height>16777215</height> -++ </size> -++ </property> -++ <property name="styleSheet"> -++ <string/> -++ </property> -++ <layout class="QGridLayout" name="gridLayout_11"> -++ <property name="rightMargin"> -++ <number>9</number> -++ </property> -++ <item row="0" column="0"> -++ <widget class="QLabel" name="didYouKnowTitleLabel"> -++ <property name="sizePolicy"> -++ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Maximum"> -++ <horstretch>0</horstretch> -++ <verstretch>0</verstretch> -++ </sizepolicy> -++ </property> -++ <property name="alignment"> -++ <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> -++ </property> -++ </widget> -++ </item> -++ <item row="1" column="0" colspan="2"> -++ <widget class="QTextBrowser" name="didYouKnowTextBrowser"> -++ <property name="sizePolicy"> -++ <sizepolicy hsizetype="Minimum" vsizetype="Preferred"> -++ <horstretch>0</horstretch> -++ <verstretch>0</verstretch> -++ </sizepolicy> -++ </property> -++ <property name="frameShape"> -++ <enum>QFrame::NoFrame</enum> -++ </property> -++ <property name="frameShadow"> -++ <enum>QFrame::Plain</enum> -++ </property> -++ <property name="verticalScrollBarPolicy"> -++ <enum>Qt::ScrollBarAlwaysOff</enum> -++ </property> -++ <property name="horizontalScrollBarPolicy"> -++ <enum>Qt::ScrollBarAlwaysOff</enum> -++ </property> -++ <property name="openExternalLinks"> -++ <bool>true</bool> -++ </property> -++ </widget> -++ </item> -++ <item row="0" column="1"> -++ <layout class="QGridLayout" name="gridLayout_10"> -++ <property name="spacing"> -++ <number>0</number> -++ </property> -++ <item row="0" column="0" colspan="2"> -++ <spacer name="verticalSpacer_4"> -++ <property name="orientation"> -++ <enum>Qt::Vertical</enum> -++ </property> -++ <property name="sizeType"> -++ <enum>QSizePolicy::Preferred</enum> -++ </property> -++ <property name="sizeHint" stdset="0"> -++ <size> -++ <width>20</width> -++ <height>2</height> -++ </size> -++ </property> -++ </spacer> -++ </item> -++ <item row="1" column="0"> -++ <widget class="QToolButton" name="prevTipBtn"> -++ <property name="styleSheet"> -++ <string notr="true">QToolButton{ -++ border-right:solid 0 px; -++ height:16px; -++ width:12px; -++} -++</string> -++ </property> -++ <property name="text"> -++ <string/> -++ </property> -++ <property name="icon"> -++ <iconset resource="../welcome/welcome.qrc"> -++ <normaloff>:/welcome/images/arrow-left.png</normaloff>:/welcome/images/arrow-left.png</iconset> -++ </property> -++ <property name="arrowType"> -++ <enum>Qt::NoArrow</enum> -++ </property> -++ </widget> -++ </item> -++ <item row="1" column="1"> -++ <widget class="QToolButton" name="nextTipBtn"> -++ <property name="styleSheet"> -++ <string notr="true">QToolButton{ -++ border-left:solid 0 px; -++ height:16px; -++ width:12px; -++} -++</string> -++ </property> -++ <property name="text"> -++ <string/> -++ </property> -++ <property name="icon"> -++ <iconset resource="../welcome/welcome.qrc"> -++ <normaloff>:/welcome/images/arrow-right.png</normaloff>:/welcome/images/arrow-right.png</iconset> -++ </property> -++ <property name="arrowType"> -++ <enum>Qt::NoArrow</enum> -++ </property> -++ </widget> -++ </item> -++ <item row="2" column="0" colspan="2"> -++ <spacer name="verticalSpacer_3"> -++ <property name="orientation"> -++ <enum>Qt::Vertical</enum> -++ </property> -++ <property name="sizeHint" stdset="0"> -++ <size> -++ <width>20</width> -++ <height>2</height> -++ </size> -++ </property> -++ </spacer> -++ </item> -++ </layout> -++ </item> -++ </layout> -++ </widget> -++ </item> -++ </layout> -++ </widget> -++ <customwidgets> -++ <customwidget> -++ <class>Core::Utils::WelcomeModeTreeWidget</class> -++ <extends>QTreeWidget</extends> -++ <header>utils/welcomemodetreewidget.h</header> -++ </customwidget> -++ </customwidgets> -++ <resources> -++ <include location="../welcome/welcome.qrc"/> -++ </resources> -++ <connections/> -++</ui> -+diff --git a/src/plugins/qt4projectmanager/gettingstartedwelcomeplugin.cpp b/src/plugins/qt4projectmanager/gettingstartedwelcomeplugin.cpp -+new file mode 100644 -+index 0000000..a68f80d -+--- /dev/null -++++ b/src/plugins/qt4projectmanager/gettingstartedwelcomeplugin.cpp -+@@ -0,0 +1,47 @@ -++/************************************************************************** -++** -++** This file is part of Qt Creator -++** -++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -++** -++** Contact: Nokia Corporation (qt-info@nokia.com) -++** -++** Commercial Usage -++** -++** Licensees holding valid Qt Commercial licenses may use this file in -++** accordance with the Qt Commercial License Agreement provided with the -++** Software or, alternatively, in accordance with the terms contained in -++** a written agreement between you and Nokia. -++** -++** GNU Lesser General Public License Usage -++** -++** Alternatively, this file may be used under the terms of the GNU Lesser -++** General Public License version 2.1 as published by the Free Software -++** Foundation and appearing in the file LICENSE.LGPL included in the -++** packaging of this file. Please review the following information to -++** ensure the GNU Lesser General Public License version 2.1 requirements -++** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -++** -++** If you are unsure which license is appropriate for your use, please -++** contact the sales department at http://www.qtsoftware.com/contact. -++** -++**************************************************************************/ -++ -++#include "gettingstartedwelcomeplugin.h" -++#include "gettingstartedwelcomepage.h" -++ -++namespace Qt4ProjectManager { -++namespace Internal { -++ -++GettingStartedWelcomePlugin::GettingStartedWelcomePlugin() -++ : m_page(new GettingStartedWelcomePage) -++{ -++} -++ -++QWidget* GettingStartedWelcomePlugin::page() -++{ -++ return m_page; -++} -++ -++} // namespace Internal -++} // namespace Qt4ProjectManager -+diff --git a/src/plugins/qt4projectmanager/gettingstartedwelcomeplugin.h b/src/plugins/qt4projectmanager/gettingstartedwelcomeplugin.h -+new file mode 100644 -+index 0000000..f8760df -+--- /dev/null -++++ b/src/plugins/qt4projectmanager/gettingstartedwelcomeplugin.h -+@@ -0,0 +1,56 @@ -++/************************************************************************** -++** -++** This file is part of Qt Creator -++** -++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -++** -++** Contact: Nokia Corporation (qt-info@nokia.com) -++** -++** Commercial Usage -++** -++** Licensees holding valid Qt Commercial licenses may use this file in -++** accordance with the Qt Commercial License Agreement provided with the -++** Software or, alternatively, in accordance with the terms contained in -++** a written agreement between you and Nokia. -++** -++** GNU Lesser General Public License Usage -++** -++** Alternatively, this file may be used under the terms of the GNU Lesser -++** General Public License version 2.1 as published by the Free Software -++** Foundation and appearing in the file LICENSE.LGPL included in the -++** packaging of this file. Please review the following information to -++** ensure the GNU Lesser General Public License version 2.1 requirements -++** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -++** -++** If you are unsure which license is appropriate for your use, please -++** contact the sales department at http://www.qtsoftware.com/contact. -++** -++**************************************************************************/ -++ -++#ifndef GETTINGSTARTEDWELCOMEPLUGIN_H -++#define GETTINGSTARTEDWELCOMEPLUGIN_H -++ -++#include <extensionsystem/iwelcomeplugin.h> -++ -++namespace Qt4ProjectManager { -++namespace Internal { -++ -++class GettingStartedWelcomePage; -++ -++class GettingStartedWelcomePlugin : public ExtensionSystem::IWelcomePlugin -++{ -++public: -++ GettingStartedWelcomePlugin(); -++ -++ QWidget *page(); -++ QString title() const { return tr("Getting Started");} -++ int priority() const { return 10; } -++ -++private: -++ GettingStartedWelcomePage *m_page; -++}; -++ -++} // namespace Internal -++} // namespace Qt4ProjectManager -++ -++#endif // GETTINGSTARTEDWELCOMEPLUGIN_H -+diff --git a/src/plugins/qt4projectmanager/qt4projectmanager.pro b/src/plugins/qt4projectmanager/qt4projectmanager.pro -+index 6b69139..c9335d5 100644 -+--- a/src/plugins/qt4projectmanager/qt4projectmanager.pro -++++ b/src/plugins/qt4projectmanager/qt4projectmanager.pro -+@@ -3,7 +3,6 @@ TARGET = Qt4ProjectManager -+ QT += network -+ include(../../qtcreatorplugin.pri) -+ include(qt4projectmanager_dependencies.pri) -+- -+ HEADERS += qt4projectmanagerplugin.h \ -+ qt4projectmanager.h \ -+ qt4project.h \ -+@@ -39,7 +38,9 @@ HEADERS += qt4projectmanagerplugin.h \ -+ qtversionmanager.h \ -+ qtoptionspage.h \ -+ qtuicodemodelsupport.h \ -+- externaleditors.h -++ externaleditors.h \ -++ gettingstartedwelcomepage.h \ -++ gettingstartedwelcomeplugin.h -+ SOURCES += qt4projectmanagerplugin.cpp \ -+ qt4projectmanager.cpp \ -+ qt4project.cpp \ -+@@ -73,19 +74,20 @@ SOURCES += qt4projectmanagerplugin.cpp \ -+ qtversionmanager.cpp \ -+ qtoptionspage.cpp \ -+ qtuicodemodelsupport.cpp \ -+- externaleditors.cpp -++ externaleditors.cpp \ -++ gettingstartedwelcomepage.cpp \ -++ gettingstartedwelcomeplugin.cpp -+ FORMS += makestep.ui \ -+ qmakestep.ui \ -+ qt4projectconfigwidget.ui \ -+ embeddedpropertiespage.ui \ -+ qtversionmanager.ui \ -+- showbuildlog.ui -++ showbuildlog.ui \ -++ gettingstartedwelcomepage.ui -+ RESOURCES += qt4projectmanager.qrc \ -+ wizards/wizards.qrc -+- -+ include(../../shared/proparser/proparser.pri) -+ include(qt-s60/qt-s60.pri) -+ include(customwidgetwizard/customwidgetwizard.pri) -+- -+ DEFINES += QT_NO_CAST_TO_ASCII -+ OTHER_FILES += Qt4ProjectManager.pluginspec -+diff --git a/src/plugins/qt4projectmanager/qt4projectmanager_dependencies.pri b/src/plugins/qt4projectmanager/qt4projectmanager_dependencies.pri -+index e1bd37d..9a49315 100644 -+--- a/src/plugins/qt4projectmanager/qt4projectmanager_dependencies.pri -++++ b/src/plugins/qt4projectmanager/qt4projectmanager_dependencies.pri -+@@ -3,4 +3,3 @@ include(../../plugins/cpptools/cpptools.pri) -+ include(../../plugins/cppeditor/cppeditor.pri) -+ include(../../plugins/help/help.pri) -+ include(../../plugins/designer/designer.pri) -+-include(../../plugins/welcome/welcome.pri) -+diff --git a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp -+index f740c27..8c87b8d 100644 -+--- a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp -++++ b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp -+@@ -44,6 +44,8 @@ -+ #include "qtversionmanager.h" -+ #include "qtoptionspage.h" -+ #include "externaleditors.h" -++#include "gettingstartedwelcomeplugin.h" -++#include "gettingstartedwelcomepage.h" -+ -+ #ifdef QTCREATOR_WITH_S60 -+ #include "qt-s60/s60manager.h" -+@@ -82,6 +84,8 @@ Qt4ProjectManagerPlugin::~Qt4ProjectManagerPlugin() -+ delete m_proFileEditorFactory; -+ removeObject(m_qt4ProjectManager); -+ delete m_qt4ProjectManager; -++ removeObject(m_welcomePlugin); -++ delete m_welcomePlugin; -+ } -+ /* -+ static Core::Command *createSeparator(Core::ActionManager *am, -+@@ -106,9 +110,16 @@ bool Qt4ProjectManagerPlugin::initialize(const QStringList &arguments, QString * -+ m_projectExplorer = ProjectExplorer::ProjectExplorerPlugin::instance(); -+ Core::ActionManager *am = core->actionManager(); -+ -+- addAutoReleasedObject(new QtVersionManager()); -++ QtVersionManager *mgr = new QtVersionManager(); -++ addAutoReleasedObject(mgr); -+ addAutoReleasedObject(new QtOptionsPage()); -+ -++ m_welcomePlugin = new GettingStartedWelcomePlugin; -++ addObject(m_welcomePlugin); -++ GettingStartedWelcomePage *gswp = -++ static_cast<GettingStartedWelcomePage*>(m_welcomePlugin->page()); -++ connect(mgr, SIGNAL(updateExamples(QString,QString,QString)), -++ gswp, SLOT(updateExamples(QString,QString,QString))); -+ -+ //create and register objects -+ m_qt4ProjectManager = new Qt4Manager(this); -+diff --git a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.h b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.h -+index 18781bc..84a5fbd 100644 -+--- a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.h -++++ b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.h -+@@ -49,6 +49,7 @@ class MakeStepFactory; -+ class GccParserFactory; -+ class MsvcParserFactory; -+ class EmbeddedPropertiesPage; -++class GettingStartedWelcomePlugin; -+ -+ class Qt4ProjectManagerPlugin : public ExtensionSystem::IPlugin -+ { -+@@ -81,6 +82,7 @@ private: -+ -+ QAction *m_runQMakeAction; -+ QAction *m_runQMakeActionContextMenu; -++ GettingStartedWelcomePlugin *m_welcomePlugin; -+ }; -+ -+ } // namespace Internal -+diff --git a/src/plugins/qt4projectmanager/qtversionmanager.cpp b/src/plugins/qt4projectmanager/qtversionmanager.cpp -+index aa65520..6bce576 100644 -+--- a/src/plugins/qt4projectmanager/qtversionmanager.cpp -++++ b/src/plugins/qt4projectmanager/qtversionmanager.cpp -+@@ -42,7 +42,6 @@ -+ #include <coreplugin/coreconstants.h> -+ #include <coreplugin/icore.h> -+ #include <coreplugin/modemanager.h> -+-#include <welcome/welcomemode.h> -+ #include <extensionsystem/pluginmanager.h> -+ #include <help/helpplugin.h> -+ #include <utils/qtcassert.h> -+@@ -51,6 +50,7 @@ -+ #include <QtCore/QProcess> -+ #include <QtCore/QSettings> -+ #include <QtCore/QTime> -++#include <QtCore/QTimer> -+ #include <QtGui/QApplication> -+ #include <QtGui/QDesktopServices> -+ -+@@ -122,7 +122,8 @@ QtVersionManager::QtVersionManager() -+ writeVersionsIntoSettings(); -+ -+ updateDocumentation(); -+- updateExamples(); -++ // cannot call from ctor, needs to get connected extenernally first -++ QTimer::singleShot(0, this, SLOT(updateExamples())); -+ } -+ -+ QtVersionManager::~QtVersionManager() -+@@ -185,9 +186,7 @@ void QtVersionManager::updateExamples() -+ if (version->hasDemos()) -+ demosPath = version->demosPath(); -+ if (!examplesPath.isEmpty() && !demosPath.isEmpty()) { -+- if (Welcome::WelcomeMode *welcomeMode = qobject_cast<Welcome::WelcomeMode*> -+- (Core::ICore::instance()->modeManager()->mode(Core::Constants::MODE_WELCOME))) -+- welcomeMode->updateExamples(examplesPath, demosPath, version->sourcePath()); -++ emit updateExamples(examplesPath, demosPath, version->sourcePath()); -+ return; -+ } -+ } -+diff --git a/src/plugins/qt4projectmanager/qtversionmanager.h b/src/plugins/qt4projectmanager/qtversionmanager.h -+index 0f2144c..fb7a33b 100644 -+--- a/src/plugins/qt4projectmanager/qtversionmanager.h -++++ b/src/plugins/qt4projectmanager/qtversionmanager.h -+@@ -201,6 +201,10 @@ public: -+ signals: -+ void defaultQtVersionChanged(); -+ void qtVersionsChanged(); -++ void updateExamples(QString, QString, QString); -++ -++private slots: -++ void updateExamples(); -+ private: -+ static QString findQMakeLine(const QString &directory); -+ static QString trimLine(const QString line); -+@@ -215,7 +219,6 @@ private: -+ void addNewVersionsFromInstaller(); -+ void updateSystemVersion(); -+ void updateDocumentation(); -+- void updateExamples(); -+ -+ static int indexOfVersionInList(const QtVersion * const version, const QList<QtVersion *> &list); -+ void updateUniqueIdToIndexMap(); -+diff --git a/src/plugins/welcome/communitywelcomepage.cpp b/src/plugins/welcome/communitywelcomepage.cpp -+new file mode 100644 -+index 0000000..d3127e0 -+--- /dev/null -++++ b/src/plugins/welcome/communitywelcomepage.cpp -+@@ -0,0 +1,93 @@ -++/************************************************************************** -++** -++** This file is part of Qt Creator -++** -++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -++** -++** Contact: Nokia Corporation (qt-info@nokia.com) -++** -++** Commercial Usage -++** -++** Licensees holding valid Qt Commercial licenses may use this file in -++** accordance with the Qt Commercial License Agreement provided with the -++** Software or, alternatively, in accordance with the terms contained in -++** a written agreement between you and Nokia. -++** -++** GNU Lesser General Public License Usage -++** -++** Alternatively, this file may be used under the terms of the GNU Lesser -++** General Public License version 2.1 as published by the Free Software -++** Foundation and appearing in the file LICENSE.LGPL included in the -++** packaging of this file. Please review the following information to -++** ensure the GNU Lesser General Public License version 2.1 requirements -++** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -++** -++** If you are unsure which license is appropriate for your use, please -++** contact the sales department at http://www.qtsoftware.com/contact. -++** -++**************************************************************************/ -++ -++#include "communitywelcomepage.h" -++#include "ui_communitywelcomepage.h" -++ -++#include "rssfetcher.h" -++ -++#include <QtGui/QDesktopServices> -++ -++namespace Welcome { -++namespace Internal { -++ -++// TODO: remove -++static QString titleLabel(const QString &text) -++{ -++ // TODO: do not hardcode here -++ QString rc = QLatin1String( -++ "<html><head><style type=\"text/css\">p, li { white-space: pre-wrap; }</style></head>" -++ "<body style=\" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;\">" -++ "<p style=\" margin-top:16px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">" -++ "<span style=\" font-size:x-large; color:#555555;\">"); -++ rc += text; -++ rc += QLatin1String("</span></p><hr/></body></html>"); -++ return rc; -++} -++ -++CommunityWelcomePage::CommunityWelcomePage(QWidget *parent) : -++ QWidget(parent), -++ ui(new Ui::CommunityWelcomePage), -++ m_rssFetcher(new RSSFetcher(7)) -++{ -++ ui->setupUi(this); -++ ui->labsTitleLabel->setText(titleLabel(tr("News From the Qt Labs"))); -++ ui->sitesTitleLabel->setText(titleLabel(tr("Qt Websites"))); -++ -++ connect(ui->newsTreeWidget, SIGNAL(activated(QString)), SLOT(slotUrlClicked(QString))); -++ connect(ui->sitesTreeWidget, SIGNAL(activated(QString)), SLOT(slotUrlClicked(QString))); -++ -++ connect(m_rssFetcher, SIGNAL(newsItemReady(QString, QString, QString)), -++ ui->newsTreeWidget, SLOT(slotAddNewsItem(QString, QString, QString))); -++ //: Add localized feed here only if one exists -++ m_rssFetcher->fetch(QUrl(tr("http://labs.trolltech.com/blogs/feed"))); -++ -++ ui->sitesTreeWidget->addItem(tr("Qt Home"), QLatin1String("http://qtsoftware.com")); -++ ui->sitesTreeWidget->addItem(tr("Qt Labs"), QLatin1String("http://labs.trolltech.com")); -++ ui->sitesTreeWidget->addItem(tr("Qt Git Hosting"), QLatin1String("http://qt.gitorious.org")); -++ ui->sitesTreeWidget->addItem(tr("Qt Centre"), QLatin1String("http://www.qtcentre.org")); -++ ui->sitesTreeWidget->addItem(tr("Qt for S60 at Forum Nokia"), QLatin1String("http://discussion.forum.nokia.com/forum/forumdisplay.php?f=196")); -++} -++ -++CommunityWelcomePage::~CommunityWelcomePage() -++{ -++ delete m_rssFetcher; -++ delete ui; -++} -++ -++ -++void CommunityWelcomePage::slotUrlClicked(const QString &data) -++{ -++ QDesktopServices::openUrl(QUrl(data)); -++} -++ -++ -++ -++} // namespace Internal -++} // namespace Welcome -+diff --git a/src/plugins/welcome/communitywelcomepage.h b/src/plugins/welcome/communitywelcomepage.h -+new file mode 100644 -+index 0000000..d9c81b2 -+--- /dev/null -++++ b/src/plugins/welcome/communitywelcomepage.h -+@@ -0,0 +1,64 @@ -++/************************************************************************** -++** -++** This file is part of Qt Creator -++** -++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -++** -++** Contact: Nokia Corporation (qt-info@nokia.com) -++** -++** Commercial Usage -++** -++** Licensees holding valid Qt Commercial licenses may use this file in -++** accordance with the Qt Commercial License Agreement provided with the -++** Software or, alternatively, in accordance with the terms contained in -++** a written agreement between you and Nokia. -++** -++** GNU Lesser General Public License Usage -++** -++** Alternatively, this file may be used under the terms of the GNU Lesser -++** General Public License version 2.1 as published by the Free Software -++** Foundation and appearing in the file LICENSE.LGPL included in the -++** packaging of this file. Please review the following information to -++** ensure the GNU Lesser General Public License version 2.1 requirements -++** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -++** -++** If you are unsure which license is appropriate for your use, please -++** contact the sales department at http://www.qtsoftware.com/contact. -++** -++**************************************************************************/ -++ -++#ifndef COMMUNITYWELCOMEPAGE_H -++#define COMMUNITYWELCOMEPAGE_H -++ -++#include <QWidget> -++ -++namespace Welcome { -++namespace Internal { -++ -++class RSSFetcher; -++ -++namespace Ui { -++ class CommunityWelcomePage; -++} -++ -++class CommunityWelcomePage : public QWidget -++{ -++ Q_OBJECT -++ -++public: -++ CommunityWelcomePage(QWidget *parent = 0); -++ ~CommunityWelcomePage(); -++ -++private slots: -++ void slotUrlClicked(const QString &data); -++ -++ -++private: -++ RSSFetcher *m_rssFetcher; -++ Ui::CommunityWelcomePage *ui; -++}; -++ -++ -++} // namespace Internal -++} // namespace Welcome -++#endif // COMMUNITYWELCOMEPAGE_H -+diff --git a/src/plugins/welcome/communitywelcomepage.ui b/src/plugins/welcome/communitywelcomepage.ui -+new file mode 100644 -+index 0000000..707412c -+--- /dev/null -++++ b/src/plugins/welcome/communitywelcomepage.ui -+@@ -0,0 +1,190 @@ -++<?xml version="1.0" encoding="UTF-8"?> -++<ui version="4.0"> -++ <class>Welcome::Internal::CommunityWelcomePage</class> -++ <widget class="QWidget" name="Welcome::Internal::CommunityWelcomePage"> -++ <property name="geometry"> -++ <rect> -++ <x>0</x> -++ <y>0</y> -++ <width>667</width> -++ <height>352</height> -++ </rect> -++ </property> -++ <property name="windowTitle"> -++ <string>Form</string> -++ </property> -++ <layout class="QHBoxLayout" name="horizontalLayout"> -++ <item> -++ <widget class="QFrame" name="labsFrame"> -++ <property name="frameShape"> -++ <enum>QFrame::NoFrame</enum> -++ </property> -++ <property name="frameShadow"> -++ <enum>QFrame::Plain</enum> -++ </property> -++ <layout class="QVBoxLayout" name="verticalLayout_2"> -++ <item> -++ <widget class="QLabel" name="labsTitleLabel"> -++ <property name="sizePolicy"> -++ <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> -++ <horstretch>0</horstretch> -++ <verstretch>0</verstretch> -++ </sizepolicy> -++ </property> -++ <property name="alignment"> -++ <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> -++ </property> -++ </widget> -++ </item> -++ <item> -++ <widget class="Core::Utils::WelcomeModeTreeWidget" name="newsTreeWidget"> -++ <property name="sizePolicy"> -++ <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> -++ <horstretch>0</horstretch> -++ <verstretch>0</verstretch> -++ </sizepolicy> -++ </property> -++ <property name="minimumSize"> -++ <size> -++ <width>340</width> -++ <height>0</height> -++ </size> -++ </property> -++ <property name="focusPolicy"> -++ <enum>Qt::NoFocus</enum> -++ </property> -++ <property name="frameShape"> -++ <enum>QFrame::NoFrame</enum> -++ </property> -++ <property name="selectionMode"> -++ <enum>QAbstractItemView::NoSelection</enum> -++ </property> -++ <property name="verticalScrollMode"> -++ <enum>QAbstractItemView::ScrollPerPixel</enum> -++ </property> -++ <property name="rootIsDecorated"> -++ <bool>false</bool> -++ </property> -++ <property name="uniformRowHeights"> -++ <bool>true</bool> -++ </property> -++ <property name="allColumnsShowFocus"> -++ <bool>true</bool> -++ </property> -++ <property name="columnCount"> -++ <number>2</number> -++ </property> -++ <attribute name="headerVisible"> -++ <bool>false</bool> -++ </attribute> -++ <attribute name="headerDefaultSectionSize"> -++ <number>24</number> -++ </attribute> -++ <attribute name="headerMinimumSectionSize"> -++ <number>0</number> -++ </attribute> -++ <column> -++ <property name="text"> -++ <string notr="true">1</string> -++ </property> -++ </column> -++ <column> -++ <property name="text"> -++ <string notr="true">2</string> -++ </property> -++ </column> -++ </widget> -++ </item> -++ </layout> -++ </widget> -++ </item> -++ <item> -++ <widget class="QFrame" name="sitesFrame"> -++ <property name="frameShape"> -++ <enum>QFrame::NoFrame</enum> -++ </property> -++ <property name="frameShadow"> -++ <enum>QFrame::Plain</enum> -++ </property> -++ <layout class="QVBoxLayout" name="verticalLayout_3"> -++ <item> -++ <widget class="QLabel" name="sitesTitleLabel"> -++ <property name="sizePolicy"> -++ <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> -++ <horstretch>0</horstretch> -++ <verstretch>0</verstretch> -++ </sizepolicy> -++ </property> -++ <property name="alignment"> -++ <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> -++ </property> -++ </widget> -++ </item> -++ <item> -++ <widget class="Core::Utils::WelcomeModeTreeWidget" name="sitesTreeWidget"> -++ <property name="sizePolicy"> -++ <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> -++ <horstretch>0</horstretch> -++ <verstretch>0</verstretch> -++ </sizepolicy> -++ </property> -++ <property name="focusPolicy"> -++ <enum>Qt::NoFocus</enum> -++ </property> -++ <property name="frameShape"> -++ <enum>QFrame::NoFrame</enum> -++ </property> -++ <property name="selectionMode"> -++ <enum>QAbstractItemView::NoSelection</enum> -++ </property> -++ <property name="verticalScrollMode"> -++ <enum>QAbstractItemView::ScrollPerPixel</enum> -++ </property> -++ <property name="rootIsDecorated"> -++ <bool>false</bool> -++ </property> -++ <property name="uniformRowHeights"> -++ <bool>true</bool> -++ </property> -++ <property name="allColumnsShowFocus"> -++ <bool>true</bool> -++ </property> -++ <property name="columnCount"> -++ <number>2</number> -++ </property> -++ <attribute name="headerVisible"> -++ <bool>false</bool> -++ </attribute> -++ <attribute name="headerDefaultSectionSize"> -++ <number>24</number> -++ </attribute> -++ <attribute name="headerMinimumSectionSize"> -++ <number>0</number> -++ </attribute> -++ <column> -++ <property name="text"> -++ <string notr="true">1</string> -++ </property> -++ </column> -++ <column> -++ <property name="text"> -++ <string notr="true">2</string> -++ </property> -++ </column> -++ </widget> -++ </item> -++ </layout> -++ </widget> -++ </item> -++ </layout> -++ </widget> -++ <customwidgets> -++ <customwidget> -++ <class>Core::Utils::WelcomeModeTreeWidget</class> -++ <extends>QTreeWidget</extends> -++ <header>utils/welcomemodetreewidget.h</header> -++ </customwidget> -++ </customwidgets> -++ <resources/> -++ <connections/> -++</ui> -+diff --git a/src/plugins/welcome/communitywelcomeplugin.cpp b/src/plugins/welcome/communitywelcomeplugin.cpp -+new file mode 100644 -+index 0000000..7a0dd61 -+--- /dev/null -++++ b/src/plugins/welcome/communitywelcomeplugin.cpp -+@@ -0,0 +1,47 @@ -++/************************************************************************** -++** -++** This file is part of Qt Creator -++** -++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -++** -++** Contact: Nokia Corporation (qt-info@nokia.com) -++** -++** Commercial Usage -++** -++** Licensees holding valid Qt Commercial licenses may use this file in -++** accordance with the Qt Commercial License Agreement provided with the -++** Software or, alternatively, in accordance with the terms contained in -++** a written agreement between you and Nokia. -++** -++** GNU Lesser General Public License Usage -++** -++** Alternatively, this file may be used under the terms of the GNU Lesser -++** General Public License version 2.1 as published by the Free Software -++** Foundation and appearing in the file LICENSE.LGPL included in the -++** packaging of this file. Please review the following information to -++** ensure the GNU Lesser General Public License version 2.1 requirements -++** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -++** -++** If you are unsure which license is appropriate for your use, please -++** contact the sales department at http://www.qtsoftware.com/contact. -++** -++**************************************************************************/ -++ -++#include "communitywelcomeplugin.h" -++#include "communitywelcomepage.h" -++ -++namespace Welcome { -++namespace Internal { -++ -++CommunityWelcomePlugin::CommunityWelcomePlugin() -++ : m_page(new CommunityWelcomePage) -++{ -++} -++ -++QWidget* CommunityWelcomePlugin::page() -++{ -++ return m_page; -++} -++ -++} // namespace Internal -++} // namespace WelcomePlugin -+diff --git a/src/plugins/welcome/communitywelcomeplugin.h b/src/plugins/welcome/communitywelcomeplugin.h -+new file mode 100644 -+index 0000000..fd97e0e -+--- /dev/null -++++ b/src/plugins/welcome/communitywelcomeplugin.h -+@@ -0,0 +1,60 @@ -++/************************************************************************** -++** -++** This file is part of Qt Creator -++** -++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -++** -++** Contact: Nokia Corporation (qt-info@nokia.com) -++** -++** Commercial Usage -++** -++** Licensees holding valid Qt Commercial licenses may use this file in -++** accordance with the Qt Commercial License Agreement provided with the -++** Software or, alternatively, in accordance with the terms contained in -++** a written agreement between you and Nokia. -++** -++** GNU Lesser General Public License Usage -++** -++** Alternatively, this file may be used under the terms of the GNU Lesser -++** General Public License version 2.1 as published by the Free Software -++** Foundation and appearing in the file LICENSE.LGPL included in the -++** packaging of this file. Please review the following information to -++** ensure the GNU Lesser General Public License version 2.1 requirements -++** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -++** -++** If you are unsure which license is appropriate for your use, please -++** contact the sales department at http://www.qtsoftware.com/contact. -++** -++**************************************************************************/ -++ -++#ifndef COMMUNITYWELCOMEPLUGIN_H -++#define COMMUNITYWELCOMEPLUGIN_H -++ -++#include "welcome_global.h" -++ -++#include <extensionsystem/iwelcomeplugin.h> -++ -++namespace Welcome { -++namespace Internal { -++ -++class CommunityWelcomePage; -++ -++class WELCOME_EXPORT CommunityWelcomePlugin : public ExtensionSystem::IWelcomePlugin -++{ -++ Q_OBJECT -++public: -++ CommunityWelcomePlugin(); -++ -++ QWidget *page(); -++ QString title() const { return tr("Community"); } -++ int priority() const { return 30; } -++ -++private: -++ CommunityWelcomePage *m_page; -++ -++}; -++ -++} // namespace Internal -++} // namespace Welcome -++ -++#endif // COMMUNITYWELCOMEPLUGIN_H -+diff --git a/src/plugins/welcome/rssfetcher.cpp b/src/plugins/welcome/rssfetcher.cpp -+index f5fc756..7254c2d 100644 -+--- a/src/plugins/welcome/rssfetcher.cpp -++++ b/src/plugins/welcome/rssfetcher.cpp -+@@ -43,7 +43,7 @@ -+ #include <sys/utsname.h> -+ #endif -+ -+-using namespace Welcome; -++using namespace Welcome::Internal; -+ -+ static const QString getOsString() -+ { -+diff --git a/src/plugins/welcome/rssfetcher.h b/src/plugins/welcome/rssfetcher.h -+index 9267fdb..54ef87d 100644 -+--- a/src/plugins/welcome/rssfetcher.h -++++ b/src/plugins/welcome/rssfetcher.h -+@@ -35,6 +35,7 @@ -+ #include <QtNetwork/QHttp> -+ -+ namespace Welcome { -++namespace Internal { -+ -+ class RSSFetcher : public QObject -+ { -+@@ -69,6 +70,7 @@ private: -+ }; -+ -+ } // namespace Welcome -++} // namespace Internal -+ -+ #endif // RSSFETCHER_H -+ -+diff --git a/src/plugins/welcome/welcome.pro b/src/plugins/welcome/welcome.pro -+index 11d48e8..b5bbd1c 100644 -+--- a/src/plugins/welcome/welcome.pro -++++ b/src/plugins/welcome/welcome.pro -+@@ -5,11 +5,16 @@ include(../../qtcreatorplugin.pri) -+ include(../../plugins/coreplugin/coreplugin.pri) -+ HEADERS += welcomeplugin.h \ -+ welcomemode.h \ -+- rssfetcher.h -++ rssfetcher.h \ -++ communitywelcomepage.h \ -++ communitywelcomeplugin.h -+ SOURCES += welcomeplugin.cpp \ -+ welcomemode.cpp \ -+- rssfetcher.cpp -+-FORMS += welcomemode.ui -++ rssfetcher.cpp \ -++ communitywelcomepage.cpp \ -++ communitywelcomeplugin.cpp -++FORMS += welcomemode.ui \ -++ communitywelcomepage.ui -+ RESOURCES += welcome.qrc -+ DEFINES += WELCOME_LIBRARY -+ OTHER_FILES += Welcome.pluginspec -+diff --git a/src/plugins/welcome/welcomemode.cpp b/src/plugins/welcome/welcomemode.cpp -+index bc6a876..b47cb36 100644 -+--- a/src/plugins/welcome/welcomemode.cpp -++++ b/src/plugins/welcome/welcomemode.cpp -+@@ -28,11 +28,10 @@ -+ **************************************************************************/ -+ -+ #include "welcomemode.h" -+-#include "rssfetcher.h" -++#include <extensionsystem/pluginmanager.h> -++#include <extensionsystem/iwelcomeplugin.h> -+ -+ #include <coreplugin/icore.h> -+-#include <coreplugin/dialogs/iwizard.h> -+- -+ #include <coreplugin/coreconstants.h> -+ #include <coreplugin/uniqueidmanager.h> -+ #include <coreplugin/modemanager.h> -+@@ -41,24 +40,38 @@ -+ #include <utils/styledbar.h> -+ #include <utils/welcomemodetreewidget.h> -+ -+-#include <QtGui/QDesktopServices> -+ #include <QtGui/QMouseEvent> -+ #include <QtGui/QScrollArea> -+ #include <QtGui/QButtonGroup> -++#include <QtGui/QDesktopServices> -++#include <QtGui/QToolButton> -+ -+-#include <QtCore/QDateTime> -+-#include <QtCore/QDir> -+-#include <QtCore/QFileInfo> -+-#include <QtCore/QDebug> -+-#include <QtCore/QUrl> -+ #include <QtCore/QSettings> -++#include <QtCore/QUrl> -++#include <QtCore/QDebug> -+ -+ #include <cstdlib> -+ -+ #include "ui_welcomemode.h" -+ -++using namespace ExtensionSystem; -++ -+ namespace Welcome { -+ -++// TODO: remove -++static QString titleLabel(const QString &text) -++{ -++ // TODO: do not hardcode here -++ QString rc = QLatin1String( -++ "<html><head><style type=\"text/css\">p, li { white-space: pre-wrap; }</style></head>" -++ "<body style=\" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;\">" -++ "<p style=\" margin-top:16px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">" -++ "<span style=\" font-size:x-large; color:#555555;\">"); -++ rc += text; -++ rc += QLatin1String("</span></p><hr/></body></html>"); -++ return rc; -++} -++ -+ struct WelcomeModePrivate -+ { -+ WelcomeModePrivate(); -+@@ -66,10 +79,9 @@ struct WelcomeModePrivate -+ QScrollArea *m_scrollArea; -+ QWidget *m_widget; -+ QWidget *m_welcomePage; -+- QButtonGroup *btnGrp; -+- Ui::WelcomePage ui; -+- RSSFetcher *rssFetcher; -+- WelcomeMode::WelcomePageData lastData; -++ QMap<QAbstractButton*, QWidget*> buttonMap; -++ QHBoxLayout * buttonLayout; -++ Ui::WelcomeMode ui; -+ int currentTip; -+ }; -+ -+@@ -77,46 +89,6 @@ WelcomeModePrivate::WelcomeModePrivate() -+ { -+ } -+ -+-// --- WelcomePageData -+- -+-bool WelcomeMode::WelcomePageData::operator==(const WelcomePageData &rhs) const -+-{ -+- return previousSession == rhs.previousSession -+- && activeSession == rhs.activeSession -+- && sessionList == rhs.sessionList -+- && projectList == rhs.projectList; -+-} -+- -+-bool WelcomeMode::WelcomePageData::operator!=(const WelcomePageData &rhs) const -+-{ -+- return previousSession != rhs.previousSession -+- || activeSession != rhs.activeSession -+- || sessionList != rhs.sessionList -+- || projectList != rhs.projectList; -+-} -+- -+-QDebug operator<<(QDebug dgb, const WelcomeMode::WelcomePageData &d) -+-{ -+- dgb.nospace() << "PreviousSession=" << d.previousSession -+- << " activeSession=" << d.activeSession -+- << " sessionList=" << d.sessionList -+- << " projectList=" << d.projectList; -+- return dgb; -+-} -+- -+-// Format a title + ruler for title labels -+-static inline QString titleLabel(const QString &text) -+-{ -+- QString rc = QLatin1String( -+- "<html><head><style type=\"text/css\">p, li { white-space: pre-wrap; }</style></head>" -+- "<body style=\" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;\">" -+- "<p style=\" margin-top:16px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">" -+- "<span style=\" font-size:x-large; color:#555555;\">"); -+- rc += text; -+- rc += QLatin1String("</span></p><hr/></body></html>"); -+- return rc; -+-} -+- -+ // --- WelcomeMode -+ WelcomeMode::WelcomeMode() : -+ m_d(new WelcomeModePrivate) -+@@ -126,22 +98,8 @@ WelcomeMode::WelcomeMode() : -+ l->setMargin(0); -+ l->setSpacing(0); -+ l->addWidget(new Core::Utils::StyledBar(m_d->m_widget)); -+- m_d->rssFetcher = new RSSFetcher(7, this); -+ m_d->m_welcomePage = new QWidget(m_d->m_widget); -+ m_d->ui.setupUi(m_d->m_welcomePage); -+- m_d->ui.projTitleLabel->setText(titleLabel(tr("Open Recent Project"))); -+- m_d->ui.recentSessionsTitleLabel->setText(titleLabel(tr("Resume Session"))); -+- m_d->ui.tutorialsTitleLabel->setText(titleLabel(tr("Tutorials"))); -+- m_d->ui.demoTitleLabel->setText(titleLabel(tr("Explore Qt Examples"))); -+- m_d->ui.didYouKnowTitleLabel->setText(titleLabel(tr("Did You Know?"))); -+- m_d->ui.labsTitleLabel->setText(titleLabel(tr("News From the Qt Labs"))); -+- m_d->ui.sitesTitleLabel->setText(titleLabel(tr("Qt Websites"))); -+- m_d->ui.sessTreeWidget->viewport()->setAutoFillBackground(false); -+- m_d->ui.projTreeWidget->viewport()->setAutoFillBackground(false); -+- m_d->ui.newsTreeWidget->viewport()->setAutoFillBackground(false); -+- m_d->ui.sitesTreeWidget->viewport()->setAutoFillBackground(false); -+- m_d->ui.tutorialTreeWidget->viewport()->setAutoFillBackground(false); -+- m_d->ui.didYouKnowTextBrowser->viewport()->setAutoFillBackground(false); -+ m_d->ui.helpUsLabel->setAttribute(Qt::WA_LayoutUsesWidgetRect); -+ m_d->ui.feedbackButton->setAttribute(Qt::WA_LayoutUsesWidgetRect); -+ l->addWidget(m_d->m_welcomePage); -+@@ -151,71 +109,17 @@ WelcomeMode::WelcomeMode() : -+ m_d->m_scrollArea->setWidget(m_d->m_widget); -+ m_d->m_scrollArea->setWidgetResizable(true); -+ -+- updateWelcomePage(WelcomePageData()); -+- -+- m_d->btnGrp = new QButtonGroup(this); -+- m_d->btnGrp->addButton(m_d->ui.gettingStartedSectButton, 0); -+- m_d->btnGrp->addButton(m_d->ui.developSectButton, 1); -+- m_d->btnGrp->addButton(m_d->ui.communitySectButton, 2); -+- -+- connect(m_d->btnGrp, SIGNAL(buttonClicked(int)), m_d->ui.stackedWidget, SLOT(setCurrentIndex(int))); -++ PluginManager *pluginManager = PluginManager::instance(); -++ connect(pluginManager, SIGNAL(objectAdded(QObject*)), SLOT(welcomePluginAdded(QObject))); -+ -+ connect(m_d->ui.feedbackButton, SIGNAL(clicked()), SLOT(slotFeedback())); -+- connect(m_d->ui.manageSessionsButton, SIGNAL(clicked()), SIGNAL(manageSessions())); -+- connect(m_d->ui.createNewProjectButton, SIGNAL(clicked()), SLOT(slotCreateNewProject())); -+- connect(m_d->ui.sessTreeWidget, SIGNAL(activated(QString)), SLOT(slotSessionClicked(QString))); -+- connect(m_d->ui.projTreeWidget, SIGNAL(activated(QString)), SLOT(slotProjectClicked(QString))); -+- connect(m_d->ui.newsTreeWidget, SIGNAL(activated(QString)), SLOT(slotUrlClicked(QString))); -+- connect(m_d->ui.sitesTreeWidget, SIGNAL(activated(QString)), SLOT(slotUrlClicked(QString))); -+- connect(m_d->ui.tutorialTreeWidget, SIGNAL(activated(QString)), SIGNAL(openHelpPage(const QString&))); -+- connect(m_d->ui.openExampleButton, SIGNAL(clicked()), SLOT(slotOpenExample())); -+- connect(m_d->ui.examplesComboBox, SIGNAL(currentIndexChanged(int)), SLOT(slotEnableExampleButton(int))); -+- -+- connect(m_d->rssFetcher, SIGNAL(newsItemReady(QString, QString, QString)), -+- m_d->ui.newsTreeWidget, SLOT(slotAddNewsItem(QString, QString, QString))); -+- -+- //: Add localized feed here only if one exists -+- m_d->rssFetcher->fetch(QUrl(tr("http://labs.trolltech.com/blogs/feed"))); -+- -+- m_d->ui.sitesTreeWidget->addItem(tr("Qt Home"), QLatin1String("http://qtsoftware.com")); -+- m_d->ui.sitesTreeWidget->addItem(tr("Qt Labs"), QLatin1String("http://labs.trolltech.com")); -+- m_d->ui.sitesTreeWidget->addItem(tr("Qt Git Hosting"), QLatin1String("http://qt.gitorious.org")); -+- m_d->ui.sitesTreeWidget->addItem(tr("Qt Centre"), QLatin1String("http://www.qtcentre.org")); -+- m_d->ui.sitesTreeWidget->addItem(tr("Qt for S60 at Forum Nokia"), QLatin1String("http://discussion.forum.nokia.com/forum/forumdisplay.php?f=196")); -+- -+- m_d->ui.tutorialTreeWidget->addItem(tr("<b>Qt Creator - A quick tour</b>"), -+- QString("qthelp://com.nokia.qtcreator.%1%2/doc/index.html").arg(IDE_VERSION_MAJOR).arg(IDE_VERSION_MINOR)); -+- m_d->ui.tutorialTreeWidget->addItem(tr("Creating an address book"), -+- QLatin1String("qthelp://com.nokia.qtcreator/doc/tutorials-addressbook-sdk.html")); -+- m_d->ui.tutorialTreeWidget->addItem(tr("Understanding widgets"), -+- QLatin1String("qthelp://com.trolltech.qt/qdoc/widgets-tutorial.html")); -+- m_d->ui.tutorialTreeWidget->addItem(tr("Building with qmake"), -+- QLatin1String("qthelp://com.trolltech.qmake/qdoc/qmake-tutorial.html")); -+- m_d->ui.tutorialTreeWidget->addItem(tr("Writing test cases"), -+- QLatin1String("qthelp://com.trolltech.qt/qdoc/qtestlib-tutorial.html")); -+- -+- srand(QDateTime::currentDateTime().toTime_t()); -+- QStringList tips = tipsOfTheDay(); -+- m_d->currentTip = rand()%tips.count(); -+- -+- QTextDocument *doc = m_d->ui.didYouKnowTextBrowser->document(); -+- doc->setDefaultStyleSheet("a:link {color:black;}"); -+- m_d->ui.didYouKnowTextBrowser->setDocument(doc); -+- m_d->ui.didYouKnowTextBrowser->setText(tips.at(m_d->currentTip)); -+- -+- connect(m_d->ui.nextTipBtn, SIGNAL(clicked()), this, SLOT(slotNextTip())); -+- connect(m_d->ui.prevTipBtn, SIGNAL(clicked()), this, SLOT(slotPrevTip())); -+ -+- QSettings *settings = Core::ICore::instance()->settings(); -+- int id = settings->value("General/WelcomeTab", 0).toInt(); -+- m_d->btnGrp->button(id)->setChecked(true); -+- m_d->ui.stackedWidget->setCurrentIndex(id); -+ } -+ -+ WelcomeMode::~WelcomeMode() -+ { -+ QSettings *settings = Core::ICore::instance()->settings(); -+- settings->setValue("General/WelcomeTab", m_d->btnGrp->checkedId()); -++ settings->setValue("General/WelcomeTab", m_d->ui.stackedWidget->currentIndex()); -+ delete m_d->m_widget; -+ delete m_d; -+ } -+@@ -252,150 +156,79 @@ QList<int> WelcomeMode::context() const -+ return contexts; -+ } -+ -+-void WelcomeMode::updateWelcomePage(const WelcomePageData &welcomePageData) -+-{ -+- // Update only if data are modified -+- if (welcomePageData == m_d->lastData) -+- return; -+- m_d->lastData = welcomePageData; -+- -+- m_d->m_widget->setUpdatesEnabled(false); -+- m_d->ui.sessTreeWidget->clear(); -+- m_d->ui.projTreeWidget->clear(); -+- -+- if (welcomePageData.sessionList.count() > 0) { -+- foreach (const QString &s, welcomePageData.sessionList) { -+- QString str = s; -+- if (s == welcomePageData.previousSession) -+- str = tr("%1 (last session)").arg(s); -+- m_d->ui.sessTreeWidget->addItem(str, s); -+- } -+- m_d->ui.sessTreeWidget->updateGeometry(); -+- m_d->ui.sessTreeWidget->show(); -+- } else { -+- m_d->ui.sessTreeWidget->hide(); -+- } -+- -+- typedef QPair<QString, QString> QStringPair; -+- if (welcomePageData.projectList.count() > 0) { -+- foreach (const QStringPair &it, welcomePageData.projectList) { -+- QTreeWidgetItem *item = m_d->ui.projTreeWidget->addItem(it.second, it.first); -+- const QFileInfo fi(it.first); -+- item->setToolTip(1, QDir::toNativeSeparators(fi.absolutePath())); -+- } -+- } else { -+- m_d->ui.projTreeWidget->hide(); -+- } -+- m_d->ui.projTreeWidget->updateGeometry(); -+- m_d->m_widget->setUpdatesEnabled(true); -+-} -+- -+-void WelcomeMode::activateEditMode() -+-{ -+- Core::ModeManager *modeManager = Core::ModeManager::instance(); -+- if (modeManager->currentMode() == this) -+- modeManager->activateMode(Core::Constants::MODE_EDIT); -+-} -+- -+-void WelcomeMode::slotSessionClicked(const QString &data) -+-{ -+- emit requestSession(data); -+- activateEditMode(); -+-} -+- -+-void WelcomeMode::slotProjectClicked(const QString &data) -+-{ -+- emit requestProject(data); -+- activateEditMode(); -+-} -+- -+-void WelcomeMode::slotUrlClicked(const QString &data) -++bool sortFunction(IWelcomePlugin * a, IWelcomePlugin *b) -+ { -+- QDesktopServices::openUrl(QUrl(data)); -++ return a->priority() < b->priority(); -+ } -+ -+-void WelcomeMode::updateExamples(const QString& examplePath, const QString& demosPath, const QString &sourcePath) -++void WelcomeMode::initPlugins() -+ { -+- QString demoxml = demosPath + "/qtdemo/xml/examples.xml"; -+- if (!QFile::exists(demoxml)) { -+- demoxml = sourcePath + "/demos/qtdemo/xml/examples.xml"; -+- if (!QFile::exists(demoxml)) -+- return; -++ m_d->buttonLayout = new QHBoxLayout(m_d->ui.navFrame); -++ m_d->buttonLayout->setMargin(0); -++ m_d->buttonLayout->setSpacing(0); -++ delete m_d->ui.stackedWidget->currentWidget(); -++ QList<IWelcomePlugin*> plugins = PluginManager::instance()->getObjects<IWelcomePlugin>(); -++ qSort(plugins.begin(), plugins.end(), &sortFunction); -++ foreach(IWelcomePlugin* plugin, plugins) { -++ QToolButton * btn = new QToolButton; -++ btn->setCheckable(true); -++ btn->setText(plugin->title()); -++ btn->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); -++ btn->setAutoExclusive(true); -++ connect (btn, SIGNAL(clicked()), SLOT(showClickedPage())); -++ m_d->ui.stackedWidget->addWidget(plugin->page()); -++ m_d->buttonLayout->addWidget(btn); -++ m_d->buttonMap.insert(btn, plugin->page()); -+ } -++ m_d->buttonLayout->addSpacing(5); -+ -+- QFile description(demoxml); -+- if (!description.open(QFile::ReadOnly)) -+- return; -+- -+- m_d->ui.examplesComboBox->clear(); -+- m_d->ui.examplesComboBox->setEnabled(true); -+- -+- m_d->ui.examplesComboBox->addItem(tr("Choose an example...")); -+- QFont f = widget()->font(); -+- f.setItalic(true); -+- m_d->ui.examplesComboBox->setItemData(0, f, Qt::FontRole); -+- f.setItalic(false); -+- bool inExamples = false; -+- QString dirName; -+- QXmlStreamReader reader(&description); -+- while (!reader.atEnd()) { -+- switch (reader.readNext()) { -+- case QXmlStreamReader::StartElement: -+- if (reader.name() == "category") { -+- QString name = reader.attributes().value(QLatin1String("name")).toString(); -+- if (name.contains("tutorial")) -+- break; -+- dirName = reader.attributes().value(QLatin1String("dirname")).toString(); -+- m_d->ui.examplesComboBox->addItem(name); -+- f.setBold(true); -+- m_d->ui.examplesComboBox->setItemData(m_d->ui.examplesComboBox->count()-1, f, Qt::FontRole); -+- f.setBold(false); -+- inExamples = true; -+- } -+- if (inExamples && reader.name() == "example") { -+- QString name = reader.attributes().value(QLatin1String("name")).toString(); -+- QString fn = reader.attributes().value(QLatin1String("filename")).toString(); -+- QString relativeProPath = '/' + dirName + '/' + fn + '/' + fn + ".pro"; -+- QString fileName = examplePath + relativeProPath; -+- if (!QFile::exists(fileName)) -+- fileName = sourcePath + "/examples" + relativeProPath; -+- QString helpPath = "qthelp://com.trolltech.qt/qdoc/" + dirName.replace("/", "-") + "-" + fn + ".html"; -+- -+- m_d->ui.examplesComboBox->addItem(" " + name, fileName); -+- m_d->ui.examplesComboBox->setItemData(m_d->ui.examplesComboBox->count()-1, helpPath, Qt::UserRole+1); -++ QSettings *settings = Core::ICore::instance()->settings(); -++ int tabId = settings->value("General/WelcomeTab", 0).toInt(); -++ -++ int pluginCount = m_d->ui.stackedWidget->count(); -++ if (tabId < pluginCount) { -++ //qDebug() << tabId; -++ m_d->ui.stackedWidget->setCurrentIndex(tabId); -++ QMapIterator<QAbstractButton*, QWidget*> it(m_d->buttonMap); -++ while (it.hasNext()) -++ if (it.next().value() == m_d->ui.stackedWidget->currentWidget()) { -++ it.key()->setChecked(true); -++ break; -+ } -+- break; -+- case QXmlStreamReader::EndElement: -+- if (reader.name() == "category") -+- inExamples = false; -+- break; -+- default: -+- break; -+- } -+ } -++ -+ } -+ -+-void WelcomeMode::slotEnableExampleButton(int index) -+-{ -+- QString fileName = m_d->ui.examplesComboBox->itemData(index, Qt::UserRole).toString(); -+- m_d->ui.openExampleButton->setEnabled(!fileName.isEmpty()); -++void WelcomeMode::welcomePluginAdded(QObject *obj) -++{ -++ if (IWelcomePlugin *plugin = qobject_cast<IWelcomePlugin*>(obj)) -++ { -++ QToolButton * btn = new QToolButton; -++ btn->setCheckable(true); -++ btn->setAutoExclusive(true); -++ btn->setText(plugin->title()); -++ btn->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); -++ connect (btn, SIGNAL(clicked()), SLOT(showClickedPage())); -++ int insertPos = 0; -++ QList<IWelcomePlugin*> plugins = PluginManager::instance()->getObjects<IWelcomePlugin>(); -++ foreach (IWelcomePlugin* p, plugins) { -++ if (plugin->priority() < p->priority()) -++ insertPos++; -++ else -++ break; -++ } -++ m_d->ui.stackedWidget->insertWidget(insertPos, plugin->page()); -++ m_d->buttonMap.insert(btn, plugin->page()); -++ m_d->buttonLayout->insertWidget(insertPos, btn); -++ } -+ } -+ -+-void WelcomeMode::slotOpenExample() -++void WelcomeMode::showClickedPage() -+ { -+- QComboBox *box = m_d->ui.examplesComboBox; -+- QString proFile = box->itemData(box->currentIndex(), Qt::UserRole).toString(); -+- QString helpFile = box->itemData(box->currentIndex(), Qt::UserRole + 1).toString(); -+- QStringList files; -+- QFileInfo fi(proFile); -+- QString tryFile = fi.path() + "/main.cpp"; -+- files << proFile; -+- if(!QFile::exists(tryFile)) -+- tryFile = fi.path() + '/' + fi.baseName() + ".cpp"; -+- if(QFile::exists(tryFile)) -+- files << tryFile; -+- Core::ICore::instance()->openFiles(files); -+- emit openContextHelpPage(helpFile); -++ QAbstractButton *btn = qobject_cast<QAbstractButton*>(sender()); -++ QMap<QAbstractButton*, QWidget*>::iterator it = m_d->buttonMap.find(btn); -++ if (it.value()) -++ m_d->ui.stackedWidget->setCurrentWidget(it.value()); -+ } -+ -+ void WelcomeMode::slotFeedback() -+@@ -404,71 +237,5 @@ void WelcomeMode::slotFeedback() -+ "http://qtsoftware.com/forms/feedback-forms/qt-creator-user-feedback/view"))); -+ } -+ -+-void WelcomeMode::slotCreateNewProject() -+-{ -+- Core::ICore::instance()->showNewItemDialog(tr("New Project..."), -+- Core::IWizard::wizardsOfKind(Core::IWizard::ProjectWizard)); -+-} -+- -+-void WelcomeMode::slotNextTip() -+-{ -+- QStringList tips = tipsOfTheDay(); -+- m_d->currentTip = ((m_d->currentTip+1)%tips.count()); -+- m_d->ui.didYouKnowTextBrowser->setText(tips.at(m_d->currentTip)); -+-} -+- -+-void WelcomeMode::slotPrevTip() -+-{ -+- QStringList tips = tipsOfTheDay(); -+- m_d->currentTip = ((m_d->currentTip-1)+tips.count())%tips.count(); -+- m_d->ui.didYouKnowTextBrowser->setText(tips.at(m_d->currentTip)); -+-} -+- -+-QStringList WelcomeMode::tipsOfTheDay() -+-{ -+- static QStringList tips; -+- if (tips.isEmpty()) { -+- QString altShortcut = -+-#ifdef Q_WS_MAC -+- tr("Cmd", "Shortcut key"); -+-#else -+- tr("Alt", "Shortcut key"); -+-#endif -+- tips.append(tr("You can switch between Qt Creator's modes using <tt>Ctrl+number</tt>:<ul>" -+- "<li>1 - Welcome</li><li>2 - Edit</li><li>3 - Debug</li><li>4 - Projects</li><li>5 - Help</li>" -+- "<li></li><li>6 - Output</li></ul>")); -+- //:%1 gets replaced by Alt (Win/Unix) or Cmd (Mac) -+- tips.append(tr("You can show and hide the side bar using <tt>%1+0<tt>.").arg(altShortcut)); -+- tips.append(tr("You can fine tune the <tt>Find</tt> function by selecting "Whole Words" " -+- "or "Case Sensitive". Simply click on the icons on the right end of the line edit.")); -+- tips.append(tr("If you add <a href=\"qthelp://com.nokia.qtcreator/doc/creator-external-library-handling.html\"" -+- ">external libraries</a>, Qt Creator will automatically offer syntax highlighting " -+- "and code completion.")); -+- tips.append(tr("The code completion is CamelCase-aware. For example, to complete <tt>namespaceUri</tt> " -+- "you can just type <tt>nU</tt> and hit <tt>Ctrl+Space</tt>.")); -+- tips.append(tr("You can force code completion at any time using <tt>Ctrl+Space</tt>.")); -+- tips.append(tr("You can start Qt Creator with a session by calling <tt>qtcreator <sessionname></tt>.")); -+- tips.append(tr("You can return to edit mode from any other mode at any time by hitting <tt>Escape</tt>.")); -+- //:%1 gets replaced by Alt (Win/Unix) or Cmd (Mac) -+- tips.append(tr("You can switch between the output pane by hitting <tt>%1+n</tt> where n is the number denoted " -+- "on the buttons at the window bottom:" -+- "<ul><li>1 - Build Issues</li><li>2 - Search Results</li><li>3 - Application Output</li>" -+- "<li>4 - Compile Output</li></ul>").arg(altShortcut)); -+- tips.append(tr("You can quickly search methods, classes, help and more using the " -+- "<a href=\"qthelp://com.nokia.qtcreator/doc/creator-navigation.html\">Locator bar</a> (<tt>Ctrl+K</tt>).")); -+- tips.append(tr("You can add custom build steps in the " -+- "<a href=\"qthelp://com.nokia.qtcreator/doc/creator-build-settings.html\">build settings</a>.")); -+- tips.append(tr("Within a session, you can add " -+- "<a href=\"qthelp://com.nokia.qtcreator/doc/creator-build-settings.html#dependencies\">dependencies</a> between projects.")); -+- tips.append(tr("You can set the preferred editor encoding for every project in <tt>Projects -> Editor Settings -> Default Encoding</tt>.")); -+- tips.append(tr("You can modify the binary that is being executed when you press the <tt>Run</tt> button: Add a <tt>Custom Executable</tt> " -+- "by clicking the <tt>+</tt> button in <tt>Projects -> Run Settings -> Run Configuration</tt> and then select the new " -+- "target in the combo box.")); -+- tips.append(tr("You can use Qt Creator with a number of <a href=\"qthelp://com.nokia.qtcreator/doc/creator-version-control.html\">" -+- "revision control systems</a> such as Subversion, Perforce and Git.")); -+- tips.append(tr("In the editor, <tt>F2</tt> toggles declaration and definition while <tt>F4</tt> toggles header file and source file.")); -+- } -+- return tips; -+-} -+ -+ } // namespace Welcome -+diff --git a/src/plugins/welcome/welcomemode.h b/src/plugins/welcome/welcomemode.h -+index 0555ce6..1576d24 100644 -+--- a/src/plugins/welcome/welcomemode.h -++++ b/src/plugins/welcome/welcomemode.h -+@@ -54,18 +54,6 @@ public: -+ WelcomeMode(); -+ ~WelcomeMode(); -+ -+- struct WelcomePageData{ -+- bool operator==(const WelcomePageData &rhs) const; -+- bool operator!=(const WelcomePageData &rhs) const; -+- -+- QString previousSession; -+- QString activeSession; -+- QStringList sessionList; -+- QList<QPair<QString, QString> > projectList; // pair of filename, displayname -+- }; -+- -+- void updateWelcomePage(const WelcomePageData &welcomePageData); -+- -+ // IMode -+ QString name() const; -+ QIcon icon() const; -+@@ -75,31 +63,14 @@ public: -+ QList<int> context() const; -+ void activated(); -+ QString contextHelpId() const { return QLatin1String("Qt Creator"); } -+- -+- void updateExamples(const QString& examplePath, const QString& demosPath, const QString &sourcePath); -+- -+-signals: -+- void requestProject(const QString &project); -+- void requestSession(const QString &session); -+- void openHelpPage(const QString& url); -+- void openContextHelpPage(const QString& url); -+- void manageSessions(); -++ void initPlugins(); -+ -+ private slots: -+ void slotFeedback(); -+- void slotSessionClicked(const QString &data); -+- void slotProjectClicked(const QString &data); -+- void slotUrlClicked(const QString &data); -+- void slotEnableExampleButton(int); -+- void slotOpenExample(); -+- void slotCreateNewProject(); -+- void slotNextTip(); -+- void slotPrevTip(); -++ void welcomePluginAdded(QObject*); -++ void showClickedPage(); -+ -+ private: -+- void activateEditMode(); -+- QStringList tipsOfTheDay(); -+- -+ WelcomeModePrivate *m_d; -+ }; -+ -+diff --git a/src/plugins/welcome/welcomemode.ui b/src/plugins/welcome/welcomemode.ui -+index c70aabb..e1c18bd 100644 -+--- a/src/plugins/welcome/welcomemode.ui -++++ b/src/plugins/welcome/welcomemode.ui -+@@ -1,7 +1,7 @@ -+ <?xml version="1.0" encoding="UTF-8"?> -+ <ui version="4.0"> -+- <class>Welcome::WelcomePage</class> -+- <widget class="QWidget" name="Core::Utils::WelcomePage"> -++ <class>Welcome::WelcomeMode</class> -++ <widget class="QWidget" name="Welcome::WelcomeMode"> -+ <property name="geometry"> -+ <rect> -+ <x>0</x> -+@@ -172,6 +172,12 @@ QToolButton:pressed, QPushButton:pressed{ -+ <verstretch>0</verstretch> -+ </sizepolicy> -+ </property> -++ <property name="minimumSize"> -++ <size> -++ <width>0</width> -++ <height>10</height> -++ </size> -++ </property> -+ <property name="font"> -+ <font> -+ <weight>50</weight> -+@@ -238,129 +244,6 @@ QToolButton:pressed { -+ <property name="frameShadow"> -+ <enum>QFrame::Plain</enum> -+ </property> -+- <layout class="QGridLayout" name="gridLayout_2"> -+- <property name="margin"> -+- <number>0</number> -+- </property> -+- <property name="spacing"> -+- <number>0</number> -+- </property> -+- <item row="0" column="0"> -+- <widget class="QToolButton" name="gettingStartedSectButton"> -+- <property name="enabled"> -+- <bool>true</bool> -+- </property> -+- <property name="sizePolicy"> -+- <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> -+- <horstretch>0</horstretch> -+- <verstretch>0</verstretch> -+- </sizepolicy> -+- </property> -+- <property name="minimumSize"> -+- <size> -+- <width>0</width> -+- <height>0</height> -+- </size> -+- </property> -+- <property name="font"> -+- <font> -+- <pointsize>-1</pointsize> -+- </font> -+- </property> -+- <property name="styleSheet"> -+- <string notr="true"/> -+- </property> -+- <property name="text"> -+- <string>Getting Started</string> -+- </property> -+- <property name="checkable"> -+- <bool>true</bool> -+- </property> -+- <property name="checked"> -+- <bool>true</bool> -+- </property> -+- <property name="autoExclusive"> -+- <bool>false</bool> -+- </property> -+- </widget> -+- </item> -+- <item row="0" column="1"> -+- <widget class="QToolButton" name="developSectButton"> -+- <property name="sizePolicy"> -+- <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> -+- <horstretch>0</horstretch> -+- <verstretch>0</verstretch> -+- </sizepolicy> -+- </property> -+- <property name="minimumSize"> -+- <size> -+- <width>0</width> -+- <height>0</height> -+- </size> -+- </property> -+- <property name="font"> -+- <font> -+- <pointsize>-1</pointsize> -+- </font> -+- </property> -+- <property name="text"> -+- <string>Develop</string> -+- </property> -+- <property name="checkable"> -+- <bool>true</bool> -+- </property> -+- <property name="autoExclusive"> -+- <bool>false</bool> -+- </property> -+- </widget> -+- </item> -+- <item row="0" column="2"> -+- <widget class="QToolButton" name="communitySectButton"> -+- <property name="sizePolicy"> -+- <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> -+- <horstretch>0</horstretch> -+- <verstretch>0</verstretch> -+- </sizepolicy> -+- </property> -+- <property name="minimumSize"> -+- <size> -+- <width>0</width> -+- <height>0</height> -+- </size> -+- </property> -+- <property name="font"> -+- <font> -+- <pointsize>-1</pointsize> -+- </font> -+- </property> -+- <property name="styleSheet"> -+- <string notr="true"/> -+- </property> -+- <property name="text"> -+- <string>Community</string> -+- </property> -+- <property name="checkable"> -+- <bool>true</bool> -+- </property> -+- </widget> -+- </item> -+- <item row="0" column="3"> -+- <spacer name="horizontalSpacer_2"> -+- <property name="orientation"> -+- <enum>Qt::Horizontal</enum> -+- </property> -+- <property name="sizeType"> -+- <enum>QSizePolicy::Fixed</enum> -+- </property> -+- <property name="sizeHint" stdset="0"> -+- <size> -+- <width>5</width> -+- <height>20</height> -+- </size> -+- </property> -+- </spacer> -+- </item> -+- </layout> -+ </widget> -+ </item> -+ <item> -+@@ -368,575 +251,7 @@ QToolButton:pressed { -+ <property name="currentIndex"> -+ <number>0</number> -+ </property> -+- <widget class="QWidget" name="gettingStartedPage"> -+- <layout class="QGridLayout" name="gridLayout_9"> -+- <property name="leftMargin"> -+- <number>18</number> -+- </property> -+- <property name="topMargin"> -+- <number>18</number> -+- </property> -+- <property name="rightMargin"> -+- <number>12</number> -+- </property> -+- <property name="bottomMargin"> -+- <number>18</number> -+- </property> -+- <property name="spacing"> -+- <number>24</number> -+- </property> -+- <item row="0" column="0" rowspan="2"> -+- <widget class="QFrame" name="tutorialsFrame"> -+- <property name="sizePolicy"> -+- <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> -+- <horstretch>0</horstretch> -+- <verstretch>0</verstretch> -+- </sizepolicy> -+- </property> -+- <property name="maximumSize"> -+- <size> -+- <width>400</width> -+- <height>16777215</height> -+- </size> -+- </property> -+- <property name="styleSheet"> -+- <string/> -+- </property> -+- <layout class="QGridLayout" name="gridLayout_6"> -+- <item row="0" column="0"> -+- <widget class="QLabel" name="tutorialsTitleLabel"> -+- <property name="sizePolicy"> -+- <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> -+- <horstretch>0</horstretch> -+- <verstretch>0</verstretch> -+- </sizepolicy> -+- </property> -+- <property name="alignment"> -+- <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> -+- </property> -+- </widget> -+- </item> -+- <item row="1" column="0"> -+- <widget class="Core::Utils::WelcomeModeTreeWidget" name="tutorialTreeWidget"> -+- <property name="sizePolicy"> -+- <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> -+- <horstretch>0</horstretch> -+- <verstretch>0</verstretch> -+- </sizepolicy> -+- </property> -+- <property name="focusPolicy"> -+- <enum>Qt::NoFocus</enum> -+- </property> -+- <property name="frameShape"> -+- <enum>QFrame::NoFrame</enum> -+- </property> -+- <property name="selectionMode"> -+- <enum>QAbstractItemView::NoSelection</enum> -+- </property> -+- <property name="verticalScrollMode"> -+- <enum>QAbstractItemView::ScrollPerPixel</enum> -+- </property> -+- <property name="rootIsDecorated"> -+- <bool>false</bool> -+- </property> -+- <property name="uniformRowHeights"> -+- <bool>true</bool> -+- </property> -+- <property name="allColumnsShowFocus"> -+- <bool>true</bool> -+- </property> -+- <property name="columnCount"> -+- <number>2</number> -+- </property> -+- <attribute name="headerVisible"> -+- <bool>false</bool> -+- </attribute> -+- <attribute name="headerDefaultSectionSize"> -+- <number>24</number> -+- </attribute> -+- <attribute name="headerMinimumSectionSize"> -+- <number>0</number> -+- </attribute> -+- <column> -+- <property name="text"> -+- <string notr="true">1</string> -+- </property> -+- </column> -+- <column> -+- <property name="text"> -+- <string notr="true">2</string> -+- </property> -+- </column> -+- </widget> -+- </item> -+- </layout> -+- </widget> -+- </item> -+- <item row="0" column="1"> -+- <widget class="QFrame" name="demosExamplesFrame"> -+- <property name="sizePolicy"> -+- <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> -+- <horstretch>0</horstretch> -+- <verstretch>0</verstretch> -+- </sizepolicy> -+- </property> -+- <property name="maximumSize"> -+- <size> -+- <width>400</width> -+- <height>16777215</height> -+- </size> -+- </property> -+- <property name="styleSheet"> -+- <string/> -+- </property> -+- <layout class="QGridLayout" name="gridLayout_8"> -+- <property name="rightMargin"> -+- <number>8</number> -+- </property> -+- <property name="horizontalSpacing"> -+- <number>0</number> -+- </property> -+- <item row="0" column="0" colspan="4"> -+- <widget class="QLabel" name="demoTitleLabel"> -+- <property name="alignment"> -+- <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> -+- </property> -+- </widget> -+- </item> -+- <item row="1" column="0"> -+- <widget class="QComboBox" name="examplesComboBox"> -+- <property name="enabled"> -+- <bool>false</bool> -+- </property> -+- <property name="sizePolicy"> -+- <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred"> -+- <horstretch>0</horstretch> -+- <verstretch>0</verstretch> -+- </sizepolicy> -+- </property> -+- <item> -+- <property name="text"> -+- <string>Examples not installed</string> -+- </property> -+- </item> -+- </widget> -+- </item> -+- <item row="1" column="2"> -+- <widget class="QToolButton" name="openExampleButton"> -+- <property name="enabled"> -+- <bool>false</bool> -+- </property> -+- <property name="sizePolicy"> -+- <sizepolicy hsizetype="Fixed" vsizetype="Preferred"> -+- <horstretch>0</horstretch> -+- <verstretch>0</verstretch> -+- </sizepolicy> -+- </property> -+- <property name="text"> -+- <string>Open</string> -+- </property> -+- </widget> -+- </item> -+- <item row="1" column="1"> -+- <spacer name="horizontalSpacer"> -+- <property name="orientation"> -+- <enum>Qt::Horizontal</enum> -+- </property> -+- <property name="sizeType"> -+- <enum>QSizePolicy::Fixed</enum> -+- </property> -+- <property name="sizeHint" stdset="0"> -+- <size> -+- <width>6</width> -+- <height>6</height> -+- </size> -+- </property> -+- </spacer> -+- </item> -+- </layout> -+- </widget> -+- </item> -+- <item row="1" column="1"> -+- <widget class="QFrame" name="didyouKnowFrame"> -+- <property name="sizePolicy"> -+- <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> -+- <horstretch>0</horstretch> -+- <verstretch>0</verstretch> -+- </sizepolicy> -+- </property> -+- <property name="maximumSize"> -+- <size> -+- <width>400</width> -+- <height>16777215</height> -+- </size> -+- </property> -+- <property name="styleSheet"> -+- <string/> -+- </property> -+- <layout class="QGridLayout" name="gridLayout_11"> -+- <property name="rightMargin"> -+- <number>9</number> -+- </property> -+- <item row="0" column="0"> -+- <widget class="QLabel" name="didYouKnowTitleLabel"> -+- <property name="sizePolicy"> -+- <sizepolicy hsizetype="MinimumExpanding" vsizetype="Maximum"> -+- <horstretch>0</horstretch> -+- <verstretch>0</verstretch> -+- </sizepolicy> -+- </property> -+- <property name="alignment"> -+- <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> -+- </property> -+- </widget> -+- </item> -+- <item row="1" column="0" colspan="2"> -+- <widget class="QTextBrowser" name="didYouKnowTextBrowser"> -+- <property name="sizePolicy"> -+- <sizepolicy hsizetype="Minimum" vsizetype="Preferred"> -+- <horstretch>0</horstretch> -+- <verstretch>0</verstretch> -+- </sizepolicy> -+- </property> -+- <property name="frameShape"> -+- <enum>QFrame::NoFrame</enum> -+- </property> -+- <property name="frameShadow"> -+- <enum>QFrame::Plain</enum> -+- </property> -+- <property name="verticalScrollBarPolicy"> -+- <enum>Qt::ScrollBarAlwaysOff</enum> -+- </property> -+- <property name="horizontalScrollBarPolicy"> -+- <enum>Qt::ScrollBarAlwaysOff</enum> -+- </property> -+- <property name="openExternalLinks"> -+- <bool>true</bool> -+- </property> -+- </widget> -+- </item> -+- <item row="0" column="1"> -+- <layout class="QGridLayout" name="gridLayout_10"> -+- <property name="spacing"> -+- <number>0</number> -+- </property> -+- <item row="0" column="0" colspan="2"> -+- <spacer name="verticalSpacer_4"> -+- <property name="orientation"> -+- <enum>Qt::Vertical</enum> -+- </property> -+- <property name="sizeType"> -+- <enum>QSizePolicy::Preferred</enum> -+- </property> -+- <property name="sizeHint" stdset="0"> -+- <size> -+- <width>20</width> -+- <height>2</height> -+- </size> -+- </property> -+- </spacer> -+- </item> -+- <item row="1" column="0"> -+- <widget class="QToolButton" name="prevTipBtn"> -+- <property name="styleSheet"> -+- <string notr="true">QToolButton{ -+- border-right:solid 0 px; -+- height:16px; -+- width:12px; -+-} -+-</string> -+- </property> -+- <property name="text"> -+- <string/> -+- </property> -+- <property name="icon"> -+- <iconset resource="welcome.qrc"> -+- <normaloff>:/welcome/images/arrow-left.png</normaloff>:/welcome/images/arrow-left.png</iconset> -+- </property> -+- <property name="arrowType"> -+- <enum>Qt::NoArrow</enum> -+- </property> -+- </widget> -+- </item> -+- <item row="1" column="1"> -+- <widget class="QToolButton" name="nextTipBtn"> -+- <property name="styleSheet"> -+- <string notr="true">QToolButton{ -+- border-left:solid 0 px; -+- height:16px; -+- width:12px; -+-} -+-</string> -+- </property> -+- <property name="text"> -+- <string/> -+- </property> -+- <property name="icon"> -+- <iconset resource="welcome.qrc"> -+- <normaloff>:/welcome/images/arrow-right.png</normaloff>:/welcome/images/arrow-right.png</iconset> -+- </property> -+- <property name="arrowType"> -+- <enum>Qt::NoArrow</enum> -+- </property> -+- </widget> -+- </item> -+- <item row="2" column="0" colspan="2"> -+- <spacer name="verticalSpacer_3"> -+- <property name="orientation"> -+- <enum>Qt::Vertical</enum> -+- </property> -+- <property name="sizeHint" stdset="0"> -+- <size> -+- <width>20</width> -+- <height>2</height> -+- </size> -+- </property> -+- </spacer> -+- </item> -+- </layout> -+- </item> -+- </layout> -+- </widget> -+- </item> -+- </layout> -+- </widget> -+- <widget class="QWidget" name="developPage"> -+- <layout class="QGridLayout" name="gridLayout_4"> -+- <property name="margin"> -+- <number>18</number> -+- </property> -+- <property name="spacing"> -+- <number>24</number> -+- </property> -+- <item row="0" column="0"> -+- <widget class="QFrame" name="recentSessionsFrame"> -+- <property name="sizePolicy"> -+- <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> -+- <horstretch>0</horstretch> -+- <verstretch>0</verstretch> -+- </sizepolicy> -+- </property> -+- <property name="minimumSize"> -+- <size> -+- <width>270</width> -+- <height>130</height> -+- </size> -+- </property> -+- <property name="styleSheet"> -+- <string/> -+- </property> -+- <layout class="QGridLayout" name="gridLayout_3"> -+- <property name="horizontalSpacing"> -+- <number>0</number> -+- </property> -+- <property name="verticalSpacing"> -+- <number>3</number> -+- </property> -+- <item row="0" column="0" colspan="3"> -+- <widget class="QLabel" name="recentSessionsTitleLabel"> -+- <property name="sizePolicy"> -+- <sizepolicy hsizetype="MinimumExpanding" vsizetype="Maximum"> -+- <horstretch>0</horstretch> -+- <verstretch>0</verstretch> -+- </sizepolicy> -+- </property> -+- <property name="alignment"> -+- <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> -+- </property> -+- </widget> -+- </item> -+- <item row="1" column="0" colspan="3"> -+- <widget class="Core::Utils::WelcomeModeTreeWidget" name="sessTreeWidget"> -+- <property name="sizePolicy"> -+- <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> -+- <horstretch>0</horstretch> -+- <verstretch>0</verstretch> -+- </sizepolicy> -+- </property> -+- <property name="focusPolicy"> -+- <enum>Qt::NoFocus</enum> -+- </property> -+- <property name="frameShape"> -+- <enum>QFrame::NoFrame</enum> -+- </property> -+- <property name="selectionMode"> -+- <enum>QAbstractItemView::NoSelection</enum> -+- </property> -+- <property name="verticalScrollMode"> -+- <enum>QAbstractItemView::ScrollPerPixel</enum> -+- </property> -+- <property name="rootIsDecorated"> -+- <bool>false</bool> -+- </property> -+- <property name="uniformRowHeights"> -+- <bool>true</bool> -+- </property> -+- <property name="allColumnsShowFocus"> -+- <bool>true</bool> -+- </property> -+- <property name="columnCount"> -+- <number>2</number> -+- </property> -+- <attribute name="headerVisible"> -+- <bool>false</bool> -+- </attribute> -+- <attribute name="headerDefaultSectionSize"> -+- <number>24</number> -+- </attribute> -+- <attribute name="headerMinimumSectionSize"> -+- <number>0</number> -+- </attribute> -+- <column> -+- <property name="text"> -+- <string notr="true">1</string> -+- </property> -+- </column> -+- <column> -+- <property name="text"> -+- <string notr="true">2</string> -+- </property> -+- </column> -+- </widget> -+- </item> -+- <item row="3" column="0"> -+- <widget class="QPushButton" name="manageSessionsButton"> -+- <property name="focusPolicy"> -+- <enum>Qt::TabFocus</enum> -+- </property> -+- <property name="text"> -+- <string>Manage Sessions...</string> -+- </property> -+- </widget> -+- </item> -+- <item row="4" column="0"> -+- <spacer name="verticalSpacer"> -+- <property name="orientation"> -+- <enum>Qt::Vertical</enum> -+- </property> -+- <property name="sizeHint" stdset="0"> -+- <size> -+- <width>20</width> -+- <height>40</height> -+- </size> -+- </property> -+- </spacer> -+- </item> -+- </layout> -+- </widget> -+- </item> -+- <item row="0" column="2"> -+- <widget class="QFrame" name="recentProjectsFrame"> -+- <property name="styleSheet"> -+- <string/> -+- </property> -+- <layout class="QGridLayout" name="gridLayout_5"> -+- <property name="horizontalSpacing"> -+- <number>0</number> -+- </property> -+- <property name="verticalSpacing"> -+- <number>3</number> -+- </property> -+- <property name="rightMargin"> -+- <number>9</number> -+- </property> -+- <item row="0" column="0" colspan="3"> -+- <widget class="QLabel" name="projTitleLabel"> -+- <property name="sizePolicy"> -+- <sizepolicy hsizetype="MinimumExpanding" vsizetype="Maximum"> -+- <horstretch>0</horstretch> -+- <verstretch>0</verstretch> -+- </sizepolicy> -+- </property> -+- <property name="alignment"> -+- <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> -+- </property> -+- </widget> -+- </item> -+- <item row="1" column="0" colspan="3"> -+- <widget class="Core::Utils::WelcomeModeTreeWidget" name="projTreeWidget"> -+- <property name="sizePolicy"> -+- <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> -+- <horstretch>0</horstretch> -+- <verstretch>0</verstretch> -+- </sizepolicy> -+- </property> -+- <property name="focusPolicy"> -+- <enum>Qt::NoFocus</enum> -+- </property> -+- <property name="frameShape"> -+- <enum>QFrame::NoFrame</enum> -+- </property> -+- <property name="selectionMode"> -+- <enum>QAbstractItemView::NoSelection</enum> -+- </property> -+- <property name="verticalScrollMode"> -+- <enum>QAbstractItemView::ScrollPerPixel</enum> -+- </property> -+- <property name="rootIsDecorated"> -+- <bool>false</bool> -+- </property> -+- <property name="uniformRowHeights"> -+- <bool>true</bool> -+- </property> -+- <property name="allColumnsShowFocus"> -+- <bool>true</bool> -+- </property> -+- <property name="columnCount"> -+- <number>2</number> -+- </property> -+- <attribute name="headerVisible"> -+- <bool>false</bool> -+- </attribute> -+- <attribute name="headerDefaultSectionSize"> -+- <number>24</number> -+- </attribute> -+- <attribute name="headerMinimumSectionSize"> -+- <number>0</number> -+- </attribute> -+- <column> -+- <property name="text"> -+- <string notr="true">1</string> -+- </property> -+- </column> -+- <column> -+- <property name="text"> -+- <string notr="true">2</string> -+- </property> -+- </column> -+- </widget> -+- </item> -+- <item row="3" column="0"> -+- <widget class="QPushButton" name="createNewProjectButton"> -+- <property name="focusPolicy"> -+- <enum>Qt::TabFocus</enum> -+- </property> -+- <property name="text"> -+- <string>Create New Project...</string> -+- </property> -+- <property name="flat"> -+- <bool>true</bool> -+- </property> -+- </widget> -+- </item> -+- <item row="4" column="0"> -+- <spacer name="verticalSpacer_2"> -+- <property name="orientation"> -+- <enum>Qt::Vertical</enum> -+- </property> -+- <property name="sizeHint" stdset="0"> -+- <size> -+- <width>20</width> -+- <height>40</height> -+- </size> -+- </property> -+- </spacer> -+- </item> -+- </layout> -+- </widget> -+- </item> -+- </layout> -+- </widget> -+- <widget class="QWidget" name="communityPage"> -++ <widget class="QWidget" name="widget"> -+ <layout class="QGridLayout" name="gridLayout_7"> -+ <property name="margin"> -+ <number>18</number> -+@@ -944,168 +259,6 @@ QToolButton:pressed { -+ <property name="spacing"> -+ <number>24</number> -+ </property> -+- <item row="0" column="0"> -+- <widget class="QFrame" name="labsFrame"> -+- <property name="frameShape"> -+- <enum>QFrame::NoFrame</enum> -+- </property> -+- <property name="frameShadow"> -+- <enum>QFrame::Plain</enum> -+- </property> -+- <layout class="QVBoxLayout" name="verticalLayout_2"> -+- <item> -+- <widget class="QLabel" name="labsTitleLabel"> -+- <property name="sizePolicy"> -+- <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> -+- <horstretch>0</horstretch> -+- <verstretch>0</verstretch> -+- </sizepolicy> -+- </property> -+- <property name="alignment"> -+- <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> -+- </property> -+- </widget> -+- </item> -+- <item> -+- <widget class="Core::Utils::WelcomeModeTreeWidget" name="newsTreeWidget"> -+- <property name="sizePolicy"> -+- <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> -+- <horstretch>0</horstretch> -+- <verstretch>0</verstretch> -+- </sizepolicy> -+- </property> -+- <property name="minimumSize"> -+- <size> -+- <width>340</width> -+- <height>0</height> -+- </size> -+- </property> -+- <property name="focusPolicy"> -+- <enum>Qt::NoFocus</enum> -+- </property> -+- <property name="frameShape"> -+- <enum>QFrame::NoFrame</enum> -+- </property> -+- <property name="selectionMode"> -+- <enum>QAbstractItemView::NoSelection</enum> -+- </property> -+- <property name="verticalScrollMode"> -+- <enum>QAbstractItemView::ScrollPerPixel</enum> -+- </property> -+- <property name="rootIsDecorated"> -+- <bool>false</bool> -+- </property> -+- <property name="uniformRowHeights"> -+- <bool>true</bool> -+- </property> -+- <property name="allColumnsShowFocus"> -+- <bool>true</bool> -+- </property> -+- <property name="columnCount"> -+- <number>2</number> -+- </property> -+- <attribute name="headerVisible"> -+- <bool>false</bool> -+- </attribute> -+- <attribute name="headerDefaultSectionSize"> -+- <number>24</number> -+- </attribute> -+- <attribute name="headerMinimumSectionSize"> -+- <number>0</number> -+- </attribute> -+- <column> -+- <property name="text"> -+- <string notr="true">1</string> -+- </property> -+- </column> -+- <column> -+- <property name="text"> -+- <string notr="true">2</string> -+- </property> -+- </column> -+- </widget> -+- </item> -+- </layout> -+- </widget> -+- </item> -+- <item row="0" column="1"> -+- <widget class="QFrame" name="sitesFrame"> -+- <property name="frameShape"> -+- <enum>QFrame::NoFrame</enum> -+- </property> -+- <property name="frameShadow"> -+- <enum>QFrame::Plain</enum> -+- </property> -+- <layout class="QVBoxLayout" name="verticalLayout_3"> -+- <item> -+- <widget class="QLabel" name="sitesTitleLabel"> -+- <property name="sizePolicy"> -+- <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> -+- <horstretch>0</horstretch> -+- <verstretch>0</verstretch> -+- </sizepolicy> -+- </property> -+- <property name="alignment"> -+- <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> -+- </property> -+- </widget> -+- </item> -+- <item> -+- <widget class="Core::Utils::WelcomeModeTreeWidget" name="sitesTreeWidget"> -+- <property name="sizePolicy"> -+- <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> -+- <horstretch>0</horstretch> -+- <verstretch>0</verstretch> -+- </sizepolicy> -+- </property> -+- <property name="focusPolicy"> -+- <enum>Qt::NoFocus</enum> -+- </property> -+- <property name="frameShape"> -+- <enum>QFrame::NoFrame</enum> -+- </property> -+- <property name="selectionMode"> -+- <enum>QAbstractItemView::NoSelection</enum> -+- </property> -+- <property name="verticalScrollMode"> -+- <enum>QAbstractItemView::ScrollPerPixel</enum> -+- </property> -+- <property name="rootIsDecorated"> -+- <bool>false</bool> -+- </property> -+- <property name="uniformRowHeights"> -+- <bool>true</bool> -+- </property> -+- <property name="allColumnsShowFocus"> -+- <bool>true</bool> -+- </property> -+- <property name="columnCount"> -+- <number>2</number> -+- </property> -+- <attribute name="headerVisible"> -+- <bool>false</bool> -+- </attribute> -+- <attribute name="headerDefaultSectionSize"> -+- <number>24</number> -+- </attribute> -+- <attribute name="headerMinimumSectionSize"> -+- <number>0</number> -+- </attribute> -+- <column> -+- <property name="text"> -+- <string notr="true">1</string> -+- </property> -+- </column> -+- <column> -+- <property name="text"> -+- <string notr="true">2</string> -+- </property> -+- </column> -+- </widget> -+- </item> -+- </layout> -+- </widget> -+- </item> -+ </layout> -+ </widget> -+ </widget> -+@@ -1219,13 +372,6 @@ QToolButton:pressed { -+ </item> -+ </layout> -+ </widget> -+- <customwidgets> -+- <customwidget> -+- <class>Core::Utils::WelcomeModeTreeWidget</class> -+- <extends>QTreeWidget</extends> -+- <header>utils/welcomemodetreewidget.h</header> -+- </customwidget> -+- </customwidgets> -+ <resources> -+ <include location="welcome.qrc"/> -+ </resources> -+diff --git a/src/plugins/welcome/welcomeplugin.cpp b/src/plugins/welcome/welcomeplugin.cpp -+index e9743a9..544e36a 100644 -+--- a/src/plugins/welcome/welcomeplugin.cpp -++++ b/src/plugins/welcome/welcomeplugin.cpp -+@@ -31,6 +31,8 @@ -+ -+ #include "welcomemode.h" -+ -++#include "communitywelcomeplugin.h" -++ -+ #include <coreplugin/actionmanager/actionmanager.h> -+ #include <coreplugin/basemode.h> -+ #include <coreplugin/coreconstants.h> -+@@ -45,11 +47,10 @@ -+ #include <QtGui/QMessageBox> -+ #include <QtGui/QPushButton> -+ -+-using namespace Welcome; -+- -++using namespace Welcome::Internal; -+ -+ WelcomePlugin::WelcomePlugin() -+- : m_welcomeMode(0) -++ : m_welcomeMode(0), m_communityWelcomePlugin(0) -+ { -+ } -+ -+@@ -59,6 +60,10 @@ WelcomePlugin::~WelcomePlugin() -+ removeObject(m_welcomeMode); -+ delete m_welcomeMode; -+ } -++ if (m_communityWelcomePlugin) { -++ removeObject(m_communityWelcomePlugin); -++ delete m_communityWelcomePlugin; -++ } -+ } -+ -+ /*! Initializes the plugin. Returns true on success. -+@@ -72,6 +77,9 @@ bool WelcomePlugin::initialize(const QStringList &arguments, QString *error_mess -+ Q_UNUSED(arguments) -+ Q_UNUSED(error_message) -+ -++ m_communityWelcomePlugin = new Internal::CommunityWelcomePlugin; -++ addObject(m_communityWelcomePlugin); -++ -+ m_welcomeMode = new WelcomeMode; -+ addObject(m_welcomeMode); -+ -+@@ -91,6 +99,7 @@ bool WelcomePlugin::initialize(const QStringList &arguments, QString *error_mess -+ */ -+ void WelcomePlugin::extensionsInitialized() -+ { -++ m_welcomeMode->initPlugins(); -+ Core::ModeManager::instance()->activateMode(m_welcomeMode->uniqueModeName()); -+ } -+ -+diff --git a/src/plugins/welcome/welcomeplugin.h b/src/plugins/welcome/welcomeplugin.h -+index 970ec39..9855595 100644 -+--- a/src/plugins/welcome/welcomeplugin.h -++++ b/src/plugins/welcome/welcomeplugin.h -+@@ -36,6 +36,9 @@ namespace Welcome { -+ -+ class WelcomeMode; -+ -++namespace Internal { -++class CommunityWelcomePlugin; -++ -+ class WelcomePlugin -+ : public ExtensionSystem::IPlugin -+ { -+@@ -51,8 +54,10 @@ public: -+ -+ private: -+ WelcomeMode *m_welcomeMode; -++ Internal::CommunityWelcomePlugin *m_communityWelcomePlugin; -+ }; -+ -+ } // namespace Welcome -++} // namespace Internal -+ -+ #endif // WELCOMEPLUGIN_H -+-- -+1.6.3.msysgit.0 -+ -diff --git a/0001-Make-the-welcome-screen-into-plugins.patch.modified b/0001-Make-the-welcome-screen-into-plugins.patch.modified -new file mode 100644 -index 0000000..3ccea00 ---- /dev/null -+++ b/0001-Make-the-welcome-screen-into-plugins.patch.modified -@@ -0,0 +1,4364 @@ -+From b551c15d0842620e4653a4c48a8e31d7de9f1bfb Mon Sep 17 00:00:00 2001 -+From: Daniel Molkentin <daniel.molkentin@nokia.com> -+Date: Mon, 27 Jul 2009 13:55:30 +0200 -+Subject: [PATCH] Make the welcome screen into plugins. -+ -+This removes the all hard dependencies to and from welcome screen, -+except the one to the core plugin. More in detail: -+ -+- Add IWelcomePage to add a tab to the welcome screen -+- Move tabs in the modules where they belong -+- Enables QHelpManager to open help fullscreen and contextually -+- "Getting Started" moves to Qt4ProjectManager -+- Projects & Sessions (aka "Develop") moves to ProjectExplorer -+- "Community" remains in the welcome plugin for simplicity -+--- -+ src/libs/aggregation/aggregation.pri | 2 + -+ src/libs/extensionsystem/extensionsystem.pro | 10 +- -+ src/libs/extensionsystem/iwelcomepage.cpp | 8 + -+ src/libs/extensionsystem/iwelcomepage.h | 31 + -+ src/libs/extensionsystem/pluginmanager.cpp | 1 + -+ src/libs/utils/welcomemodetreewidget.cpp | 2 + -+ src/plugins/coreplugin/coreplugin.h | 5 - -+ src/plugins/help/Help.pluginspec | 1 - -+ src/plugins/help/help.pro | 1 - -+ src/plugins/help/helpplugin.cpp | 36 +- -+ src/plugins/help/helpplugin.h | 17 +- -+ src/plugins/plugins.pro | 3 - -+ .../projectexplorer/ProjectExplorer.pluginspec | 1 - -+ src/plugins/projectexplorer/projectexplorer.cpp | 38 +- -+ src/plugins/projectexplorer/projectexplorer.h | 6 +- -+ src/plugins/projectexplorer/projectexplorer.pro | 11 +- -+ .../projectexplorer_dependencies.pri | 1 - -+ src/plugins/projectexplorer/projectwelcomepagewidget.cpp | 170 ++++ -+ src/plugins/projectexplorer/projectwelcomepagewidget.h | 81 ++ -+ src/plugins/projectexplorer/projectwelcomepagewidget.ui | 254 ++++++ -+ .../projectexplorer/projectwelcomepage.cpp | 48 ++ -+ src/plugins/projectexplorer/projectwelcomepage.h | 58 ++ -+ .../projectexplorer/projectwelcomeplugin.ui | 21 + -+ .../qt4projectmanager/Qt4ProjectManager.pluginspec | 1 - -+ .../gettingstartedwelcomepagewidget.cpp | 271 ++++++ -+ .../qt4projectmanager/gettingstartedwelcomepagewidget.h | 69 ++ -+ .../qt4projectmanager/gettingstartedwelcomepagewidget.ui | 343 ++++++++ -+ .../gettingstartedwelcomepage.cpp | 47 ++ -+ .../gettingstartedwelcomepage.h | 56 ++ -+ .../qt4projectmanager/qt4projectmanager.pro | 14 +- -+ .../qt4projectmanager_dependencies.pri | 1 - -+ .../qt4projectmanager/qt4projectmanagerplugin.cpp | 13 +- -+ .../qt4projectmanager/qt4projectmanagerplugin.h | 2 + -+ src/plugins/qt4projectmanager/qtversionmanager.cpp | 9 +- -+ src/plugins/qt4projectmanager/qtversionmanager.h | 5 +- -+ src/plugins/welcome/communitywelcomepagewidget.cpp | 93 +++ -+ src/plugins/welcome/communitywelcomepagewidget.h | 64 ++ -+ src/plugins/welcome/communitywelcomepagewidget.ui | 190 +++++ -+ src/plugins/welcome/communitywelcomepage.h | 47 ++ -+ src/plugins/welcome/communitywelcomepage.h | 60 ++ -+ src/plugins/welcome/rssfetcher.cpp | 2 +- -+ src/plugins/welcome/rssfetcher.h | 2 + -+ src/plugins/welcome/welcome.pro | 11 +- -+ src/plugins/welcome/welcomemode.cpp | 409 ++------- -+ src/plugins/welcome/welcomemode.h | 35 +- -+ src/plugins/welcome/welcomemode.ui | 872 +------------------- -+ src/plugins/welcome/welcomeplugin.cpp | 15 +- -+ src/plugins/welcome/welcomeplugin.h | 5 + -+ 48 files changed, 2142 insertions(+), 1300 deletions(-) -+ create mode 100644 src/libs/extensionsystem/iwelcomeplugin.cpp -+ create mode 100644 src/libs/extensionsystem/iwelcomepage.h -+ create mode 100644 src/plugins/projectexplorer/projectwelcomepagewidget.cpp -+ create mode 100644 src/plugins/projectexplorer/projectwelcomepagewidget.h -+ create mode 100644 src/plugins/projectexplorer/projectwelcomepagewidget.ui -+ create mode 100644 src/plugins/projectexplorer/projectwelcomepage.cpp -+ create mode 100644 src/plugins/projectexplorer/projectwelcomepage.h -+ create mode 100644 src/plugins/projectexplorer/projectwelcomeplugin.ui -+ create mode 100644 src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.cpp -+ create mode 100644 src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.h -+ create mode 100644 src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.ui -+ create mode 100644 src/plugins/qt4projectmanager/gettingstartedwelcomepage.cpp -+ create mode 100644 src/plugins/qt4projectmanager/gettingstartedwelcomepage.h -+ create mode 100644 src/plugins/welcome/communitywelcomepagewidget.cpp -+ create mode 100644 src/plugins/welcome/communitywelcomepagewidget.h -+ create mode 100644 src/plugins/welcome/communitywelcomepagewidget.ui -+ create mode 100644 src/plugins/welcome/communitywelcomepage.h -+ create mode 100644 src/plugins/welcome/communitywelcomepage.h -+ -+diff --git a/src/libs/extensionsystem/extensionsystem.pro b/src/libs/extensionsystem/extensionsystem.pro -+index 81f3bc8..ea5574d 100644 -+--- a/src/libs/extensionsystem/extensionsystem.pro -++++ b/src/libs/extensionsystem/extensionsystem.pro -+@@ -4,9 +4,7 @@ DEFINES += EXTENSIONSYSTEM_LIBRARY -+ include(../../qtcreatorlibrary.pri) -+ include(extensionsystem_dependencies.pri) -+ -+-unix:!macx:!freebsd* { -+- LIBS += -ldl -+-} -++unix:!macx:!freebsd*:LIBS += -ldl -+ -+ DEFINES += IDE_TEST_DIR=\\\"$$IDE_SOURCE_TREE\\\" -+ -+@@ -21,14 +19,16 @@ HEADERS += pluginerrorview.h \ -+ pluginspec_p.h \ -+ pluginview.h \ -+ pluginview_p.h \ -+- optionsparser.h -++ optionsparser.h \ -++ iwelcomeplugin.h -+ SOURCES += pluginerrorview.cpp \ -+ plugindetailsview.cpp \ -+ iplugin.cpp \ -+ pluginmanager.cpp \ -+ pluginspec.cpp \ -+ pluginview.cpp \ -+- optionsparser.cpp -++ optionsparser.cpp \ -++ iwelcomepage.cpp -+ FORMS += pluginview.ui \ -+ pluginerrorview.ui \ -+ plugindetailsview.ui -+diff --git a/src/libs/extensionsystem/iwelcomepage.cpp b/src/libs/extensionsystem/iwelcomepage.cpp -+new file mode 100644 -+index 0000000..345d77b -+--- /dev/null -++++ b/src/libs/extensionsystem/iwelcomepage.cpp -+@@ -0,0 +1,8 @@ -++#include "iwelcomepage.h" -++ -++using namespace ExtensionSystem; -++ -++IWelcomePage::IWelcomePage() -++{ -++ -++} -+diff --git a/src/libs/extensionsystem/iwelcomepage b/src/libs/extensionsystem/iwelcomepage.h -+new file mode 100644 -+index 0000000..33546ed -+--- /dev/null -++++ b/src/libs/extensionsystem/iwelcomepage.h -+@@ -0,0 +1,31 @@ -++#ifndef IWELCOMEPAGE_H -++#define IWELCOMEPAGE_H -++ -++ -++#include "extensionsystem_global.h" -++ -++#include <QObject> -++ -++namespace ExtensionSystem { -++ -++class IWelcomePagePrivate; -++ -++class EXTENSIONSYSTEM_EXPORT IWelcomePage : public QObject -++{ -++ Q_OBJECT -++ -++public: -++ IWelcomePage(); -++ -++ virtual QWidget *page() = 0; -++ virtual QString title() const = 0; -++ virtual int priority() const { return 0; } -++ -++private: -++ // not used atm -++ IWelcomePagePrivate *m_d; -++}; -++ -++} -++ -++#endif // IWELCOMEPAGE_H -+diff --git a/src/libs/utils/welcomemodetreewidget.cpp b/src/libs/utils/welcomemodetreewidget.cpp -+index 26d55a3..7ea7373 100644 -+--- a/src/libs/utils/welcomemodetreewidget.cpp -++++ b/src/libs/utils/welcomemodetreewidget.cpp -+@@ -48,6 +48,8 @@ WelcomeModeTreeWidget::WelcomeModeTreeWidget(QWidget *parent) : -+ m_d->bullet = QIcon(QLatin1String(":/welcome/images/list_bullet_arrow.png")); -+ connect(this, SIGNAL(itemClicked(QTreeWidgetItem *, int)), -+ SLOT(slotItemClicked(QTreeWidgetItem *))); -++ -++ viewport()->setAutoFillBackground(false); -+ } -+ -+ WelcomeModeTreeWidget::~WelcomeModeTreeWidget() -+diff --git a/src/plugins/coreplugin/coreplugin.h b/src/plugins/coreplugin/coreplugin.h -+index 04e5be4..ce487fb 100644 -+--- a/src/plugins/coreplugin/coreplugin.h -++++ b/src/plugins/coreplugin/coreplugin.h -+@@ -33,10 +33,6 @@ -+ #include <extensionsystem/iplugin.h> -+ -+ namespace Core { -+- class IMode; -+-} -+- -+-namespace Core { -+ namespace Internal { -+ -+ class EditMode; -+@@ -59,7 +55,6 @@ public slots: -+ -+ private: -+ MainWindow *m_mainWindow; -+- Core::IMode *m_welcomeMode; -+ EditMode *m_editMode; -+ }; -+ -+diff --git a/src/plugins/help/Help.pluginspec b/src/plugins/help/Help.pluginspec -+index d7ccc07..29f1b46 100644 -+--- a/src/plugins/help/Help.pluginspec -++++ b/src/plugins/help/Help.pluginspec -+@@ -22,6 +22,5 @@ will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.</license> -+ <dependency name="Core" version="1.2.80"/> -+ <dependency name="Find" version="1.2.80"/> -+ <dependency name="QuickOpen" version="1.2.80"/> -+- <dependency name="Welcome" version="1.2.80"/> -+ </dependencyList> -+ </plugin> -+diff --git a/src/plugins/help/help.pro b/src/plugins/help/help.pro -+index 1f5ec55..b733a1f 100644 -+--- a/src/plugins/help/help.pro -++++ b/src/plugins/help/help.pro -+@@ -4,7 +4,6 @@ include(../../qtcreatorplugin.pri) -+ include(../../plugins/coreplugin/coreplugin.pri) -+ include(../../plugins/find/find.pri) -+ include(../../plugins/quickopen/quickopen.pri) -+-include(../../plugins/welcome/welcome.pri) -+ QT += network -+ CONFIG += help -+ DEFINES += QT_CLUCENE_SUPPORT \ -+diff --git a/src/plugins/help/helpplugin.cpp b/src/plugins/help/helpplugin.cpp -+index f6e8db8..2ff11c8 100644 -+--- a/src/plugins/help/helpplugin.cpp -++++ b/src/plugins/help/helpplugin.cpp -+@@ -87,8 +87,8 @@ -+ using namespace Help; -+ using namespace Help::Internal; -+ -+-HelpManager::HelpManager(QHelpEngine *helpEngine) -+- : m_helpEngine(helpEngine) -++HelpManager::HelpManager(Internal::HelpPlugin* plugin) -++ : m_plugin(plugin) -+ { -+ } -+ -+@@ -96,7 +96,7 @@ void HelpManager::registerDocumentation(const QStringList &fileNames) -+ { -+ bool needsSetup = false; -+ { -+- QHelpEngineCore hc(m_helpEngine->collectionFile()); -++ QHelpEngineCore hc(m_plugin->helpEngine()->collectionFile()); -+ if (!hc.setupData()) -+ qWarning() << "Could not initialize help engine:" << hc.error(); -+ foreach (const QString &fileName, fileNames) { -+@@ -113,7 +113,17 @@ void HelpManager::registerDocumentation(const QStringList &fileNames) -+ } -+ } -+ if (needsSetup) -+- m_helpEngine->setupData(); -++ m_plugin->helpEngine()->setupData(); -++} -++ -++void HelpManager::openHelpPage(const QString& url) -++{ -++ m_plugin->openHelpPage(url); -++} -++ -++void HelpManager::openContextHelpPage(const QString& url) -++{ -++ m_plugin->openContextHelpPage(url); -+ } -+ -+ HelpPlugin::HelpPlugin() : -+@@ -180,7 +190,7 @@ bool HelpPlugin::initialize(const QStringList &arguments, QString *error) -+ connect(m_helpEngine, SIGNAL(setupFinished()), this, -+ SLOT(updateFilterComboBox())); -+ -+- addAutoReleasedObject(new HelpManager(m_helpEngine)); -++ addAutoReleasedObject(new HelpManager(this)); -+ -+ m_filterSettingsPage = new FilterSettingsPage(m_helpEngine); -+ addAutoReleasedObject(m_filterSettingsPage); -+@@ -430,6 +440,11 @@ bool HelpPlugin::initialize(const QStringList &arguments, QString *error) -+ return true; -+ } -+ -++QHelpEngine* HelpPlugin::helpEngine() const -++{ -++ return m_helpEngine; -++} -++ -+ void HelpPlugin::createRightPaneSideBar() -+ { -+ QAction *switchToHelpMode = new QAction("Go to Help Mode", this); -+@@ -610,17 +625,6 @@ void HelpPlugin::extensionsInitialized() -+ updateFilterComboBox(); -+ m_bookmarkManager->setupBookmarkModels(); -+ -+- using namespace Core::Internal; -+- using namespace Core::Constants; -+- Welcome::WelcomeMode *welcomeMode = -+- qobject_cast<Welcome::WelcomeMode*>(m_core->modeManager()->mode(MODE_WELCOME)); -+- if (welcomeMode) { -+- connect(welcomeMode, SIGNAL(openHelpPage(QString)), this, -+- SLOT(openHelpPage(QString))); -+- connect(welcomeMode, SIGNAL(openContextHelpPage(QString)), this, -+- SLOT(openContextHelpPage(QString))); -+- } -+- -+ #if !defined(QT_NO_WEBKIT) -+ QWebSettings* webSettings = QWebSettings::globalSettings(); -+ QFont font(webSettings->fontFamily(QWebSettings::StandardFont), -+diff --git a/src/plugins/help/helpplugin.h b/src/plugins/help/helpplugin.h -+index 6ab78cf..10cf1fd 100644 -+--- a/src/plugins/help/helpplugin.h -++++ b/src/plugins/help/helpplugin.h -+@@ -63,6 +63,7 @@ class SideBarItem; -+ namespace Help { -+ namespace Internal { -+ class CentralWidget; -++ class HelpPlugin; -+ } -+ -+ namespace Constants { -+@@ -76,12 +77,14 @@ class HELP_EXPORT HelpManager : public QObject -+ { -+ Q_OBJECT -+ public: -+- HelpManager(QHelpEngine *helpEngine); -++ HelpManager(Internal::HelpPlugin*); -+ -+ void registerDocumentation(const QStringList &fileNames); -++ void openHelpPage(const QString& url); -++ void openContextHelpPage(const QString &url); -+ -+ private: -+- QHelpEngine *m_helpEngine; -++ Internal::HelpPlugin *m_plugin; -+ }; -+ -+ namespace Internal { -+@@ -108,6 +111,12 @@ public: -+ void setIndexFilter(const QString &filter); -+ QString indexFilter() const; -+ -++ void openHelpPage(const QUrl& url); -++ void openHelpPage(const QString& url); -++ void openContextHelpPage(const QString &url); -++ -++ QHelpEngine* helpEngine() const; -++ -+ private slots: -+ void modeChanged(Core::IMode *mode); -+ void activateContext(); -+@@ -128,10 +137,6 @@ private slots: -+ void slotHideRightPane(); -+ void copyFromSideBar(); -+ -+- void openHelpPage(const QUrl& url); -+- void openHelpPage(const QString& url); -+- void openContextHelpPage(const QString &url); -+- -+ void updateSideBarSource(); -+ void updateSideBarSource(const QUrl &newUrl); -+ -+diff --git a/src/plugins/plugins.pro b/src/plugins/plugins.pro -+index 6ef52c1..b8ae5ec 100644 -+--- a/src/plugins/plugins.pro -++++ b/src/plugins/plugins.pro -+@@ -94,7 +94,6 @@ plugin_projectexplorer.depends = plugin_quickopen -+ plugin_projectexplorer.depends += plugin_find -+ plugin_projectexplorer.depends += plugin_coreplugin -+ plugin_projectexplorer.depends += plugin_texteditor -+-plugin_projectexplorer.depends += plugin_welcome -+ -+ plugin_qt4projectmanager.subdir = qt4projectmanager -+ plugin_qt4projectmanager.depends = plugin_texteditor -+@@ -103,7 +102,6 @@ plugin_qt4projectmanager.depends += plugin_cpptools -+ plugin_qt4projectmanager.depends += plugin_cppeditor -+ plugin_qt4projectmanager.depends += plugin_help -+ plugin_qt4projectmanager.depends += plugin_designer -+-plugin_qt4projectmanager.depends += plugin_welcome -+ -+ plugin_quickopen.subdir = quickopen -+ plugin_quickopen.depends = plugin_coreplugin -+@@ -144,7 +142,6 @@ plugin_help.subdir = help -+ plugin_help.depends = plugin_find -+ plugin_help.depends += plugin_quickopen -+ plugin_help.depends += plugin_coreplugin -+-plugin_help.depends += plugin_welcome -+ -+ plugin_resourceeditor.subdir = resourceeditor -+ plugin_resourceeditor.depends = plugin_coreplugin -+diff --git a/src/plugins/projectexplorer/ProjectExplorer.pluginspec b/src/plugins/projectexplorer/ProjectExplorer.pluginspec -+index 6a66cfe..8b5a7c3 100644 -+--- a/src/plugins/projectexplorer/ProjectExplorer.pluginspec -++++ b/src/plugins/projectexplorer/ProjectExplorer.pluginspec -+@@ -23,6 +23,5 @@ will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.</license> -+ <dependency name="Find" version="1.2.80"/> -+ <dependency name="QuickOpen" version="1.2.80"/> -+ <dependency name="TextEditor" version="1.2.80"/> -+- <dependency name="Welcome" version="1.2.80"/> -+ </dependencyList> -+ </plugin> -+diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp -+index f10b628..101a2e8 100644 -+--- a/src/plugins/projectexplorer/projectexplorer.cpp -++++ b/src/plugins/projectexplorer/projectexplorer.cpp -+@@ -57,6 +57,8 @@ -+ #include "sessiondialog.h" -+ #include "buildparserfactory.h" -+ #include "projectexplorersettingspage.h" -++#include "projectwelcomepage.h" -++#include "projectwelcomepagewidget.h" -+ -+ #include <coreplugin/basemode.h> -+ #include <coreplugin/coreconstants.h> -+@@ -140,6 +142,7 @@ ProjectExplorerPlugin::ProjectExplorerPlugin() -+ -+ ProjectExplorerPlugin::~ProjectExplorerPlugin() -+ { -++ removeObject(m_welcomePlugin); -+ removeObject(this); -+ } -+ -+@@ -156,6 +159,11 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er -+ Core::ICore *core = Core::ICore::instance(); -+ Core::ActionManager *am = core->actionManager(); -+ -++ m_welcomePlugin = new ProjectWelcomePage; -++ m_welcomePage = qobject_cast<Internal::ProjectWelcomePageWidget*>(m_welcomePlugin->page()); -++ Q_ASSERT(m_welcomePage); -++ connect(m_welcomePage, SIGNAL(manageSessions()), this, SLOT(showSessionManager())); -++ addObject(m_welcomePlugin); -+ addObject(this); -+ -+ connect(core->fileManager(), SIGNAL(currentFileChanged(QString)), -+@@ -646,10 +654,6 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er -+ m_projectExplorerSettings.showCompilerOutput = s->value("ProjectExplorer/Settings/ShowCompilerOutput", false).toBool(); -+ } -+ -+- if (Welcome::WelcomeMode *welcomeMode = qobject_cast<Welcome::WelcomeMode*> -+- (Core::ICore::instance()->modeManager()->mode(Core::Constants::MODE_WELCOME))) { -+- connect(welcomeMode, SIGNAL(manageSessions()), this, SLOT(showSessionManager())); -+- } -+ connect(m_sessionManagerAction, SIGNAL(triggered()), this, SLOT(showSessionManager())); -+ connect(m_newAction, SIGNAL(triggered()), this, SLOT(newProject())); -+ #if 0 -+@@ -685,6 +689,8 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er -+ this, SLOT(determineSessionToRestoreAtStartup())); -+ connect(Core::ICore::instance(), SIGNAL(coreOpened()), this, SLOT(restoreSession())); -+ -++ updateWelcomePage(); -++ -+ return true; -+ } -+ -+@@ -835,9 +841,7 @@ void ProjectExplorerPlugin::showSessionManager() -+ Core::ModeManager *modeManager = Core::ModeManager::instance(); -+ Core::IMode *welcomeMode = modeManager->mode(Core::Constants::MODE_WELCOME); -+ if (modeManager->currentMode() == welcomeMode) -+- { -+- updateWelcomePage(qobject_cast<Welcome::WelcomeMode*>(welcomeMode)); -+- } -++ updateWelcomePage(); -+ } -+ -+ void ProjectExplorerPlugin::setStartupProject(Project *project) -+@@ -1019,20 +1023,19 @@ Project *ProjectExplorerPlugin::startupProject() const -+ } -+ -+ // update welcome page -+-void ProjectExplorerPlugin::updateWelcomePage(Welcome::WelcomeMode *welcomeMode) -++void ProjectExplorerPlugin::updateWelcomePage() -+ { -+- Welcome::WelcomeMode::WelcomePageData welcomePageData; -++ ProjectWelcomePageWidget::WelcomePageData welcomePageData; -+ welcomePageData.sessionList = m_session->sessions(); -+ welcomePageData.activeSession = m_session->activeSession(); -+ welcomePageData.previousSession = m_session->lastSession(); -+ welcomePageData.projectList = m_recentProjects; -+- welcomeMode->updateWelcomePage(welcomePageData); -++ m_welcomePage->updateWelcomePage(welcomePageData); -+ } -+ -+-void ProjectExplorerPlugin::currentModeChanged(Core::IMode *mode) -++void ProjectExplorerPlugin::currentModeChanged(Core::IMode *) -+ { -+- if (Welcome::WelcomeMode *welcomeMode = qobject_cast<Welcome::WelcomeMode*>(mode)) -+- updateWelcomePage(welcomeMode); -++ updateWelcomePage(); -+ } -+ -+ void ProjectExplorerPlugin::determineSessionToRestoreAtStartup() -+@@ -1080,12 +1083,9 @@ void ProjectExplorerPlugin::restoreSession() -+ // update welcome page -+ Core::ModeManager *modeManager = Core::ModeManager::instance(); -+ connect(modeManager, SIGNAL(currentModeChanged(Core::IMode*)), this, SLOT(currentModeChanged(Core::IMode*))); -+- if (Welcome::WelcomeMode *welcomeMode = qobject_cast<Welcome::WelcomeMode*>(modeManager->mode(Core::Constants::MODE_WELCOME))) { -+- updateWelcomePage(welcomeMode); -+- connect(welcomeMode, SIGNAL(requestSession(QString)), this, SLOT(loadSession(QString))); -+- connect(welcomeMode, SIGNAL(requestProject(QString)), this, SLOT(loadProject(QString))); -+- } -+- -++ connect(m_welcomePage, SIGNAL(requestSession(QString)), this, SLOT(loadSession(QString))); -++ connect(m_welcomePage, SIGNAL(requestProject(QString)), this, SLOT(loadProject(QString))); -++ -+ Core::ICore::instance()->openFiles(arguments); -+ updateActions(); -+ -+diff --git a/src/plugins/projectexplorer/projectexplorer.h b/src/plugins/projectexplorer/projectexplorer.h -+index 0f781ea..48f8c27 100644 -+--- a/src/plugins/projectexplorer/projectexplorer.h -++++ b/src/plugins/projectexplorer/projectexplorer.h -+@@ -72,6 +72,8 @@ class ApplicationOutput; -+ class OutputPane; -+ class ProjectWindow; -+ class ProjectFileFactory; -++class ProjectWelcomePage; -++class ProjectWelcomePageWidget; -+ -+ struct ProjectExplorerSettings -+ { -+@@ -209,7 +211,7 @@ private: -+ -+ void updateActions(); -+ void addToRecentProjects(const QString &fileName, const QString &displayName); -+- void updateWelcomePage(Welcome::WelcomeMode *welcomeMode); -++ void updateWelcomePage(); -+ Internal::ProjectFileFactory *findProjectFileFactory(const QString &filename) const; -+ -+ static ProjectExplorerPlugin *m_instance; -+@@ -279,6 +281,8 @@ private: -+ QString m_runMode; -+ QString m_projectFilterString; -+ Internal::ProjectExplorerSettings m_projectExplorerSettings; -++ Internal::ProjectWelcomePage *m_welcomePlugin; -++ Internal::ProjectWelcomePageWidget *m_welcomePage; -+ }; -+ -+ namespace Internal { -+diff --git a/src/plugins/projectexplorer/projectexplorer.pro b/src/plugins/projectexplorer/projectexplorer.pro -+index ffb0b08..4a954cc 100644 -+--- a/src/plugins/projectexplorer/projectexplorer.pro -++++ b/src/plugins/projectexplorer/projectexplorer.pro -+@@ -61,7 +61,9 @@ HEADERS += projectexplorer.h \ -+ filewatcher.h \ -+ debugginghelper.h \ -+ abstractmakestep.h \ -+- projectexplorersettingspage.h -++ projectexplorersettingspage.h \ -++ projectwelcomepage.h \ -++ projectwelcomepagewidget.h -+ SOURCES += projectexplorer.cpp \ -+ projectwindow.cpp \ -+ buildmanager.cpp \ -+@@ -111,7 +113,9 @@ SOURCES += projectexplorer.cpp \ -+ filewatcher.cpp \ -+ debugginghelper.cpp \ -+ abstractmakestep.cpp \ -+- projectexplorersettingspage.cpp -++ projectexplorersettingspage.cpp \ -++ projectwelcomepage.cpp \ -++ projectwelcomepagewidget.cpp -+ FORMS += processstep.ui \ -+ editorsettingspropertiespage.ui \ -+ runsettingspropertiespage.ui \ -+@@ -119,7 +123,8 @@ FORMS += processstep.ui \ -+ projectwizardpage.ui \ -+ buildstepspage.ui \ -+ removefiledialog.ui \ -+- projectexplorersettingspage.ui -++ projectexplorersettingspage.ui \ -++ projectwelcomepagewidget.ui -+ win32 { -+ SOURCES += applicationlauncher_win.cpp \ -+ winguiprocess.cpp -+diff --git a/src/plugins/projectexplorer/projectexplorer_dependencies.pri b/src/plugins/projectexplorer/projectexplorer_dependencies.pri -+index ecbb7a4..674c8bb 100644 -+--- a/src/plugins/projectexplorer/projectexplorer_dependencies.pri -++++ b/src/plugins/projectexplorer/projectexplorer_dependencies.pri -+@@ -3,4 +3,3 @@ include(../../plugins/quickopen/quickopen.pri) -+ include(../../plugins/find/find.pri) -+ include(../../plugins/coreplugin/coreplugin.pri) -+ include(../../plugins/texteditor/texteditor.pri) -+-include(../../plugins/welcome/welcome.pri) -+diff --git a/src/plugins/projectexplorer/projectwelcomepagewidget.cpp b/src/plugins/projectexplorer/projectwelcomepagewidget.cpp -+new file mode 100644 -+index 0000000..ff50f38 -+--- /dev/null -++++ b/src/plugins/projectexplorer/projectwelcomepagewidget.cpp -+@@ -0,0 +1,170 @@ -++/************************************************************************** -++** -++** This file is part of Qt Creator -++** -++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -++** -++** Contact: Nokia Corporation (qt-info@nokia.com) -++** -++** Commercial Usage -++** -++** Licensees holding valid Qt Commercial licenses may use this file in -++** accordance with the Qt Commercial License Agreement provided with the -++** Software or, alternatively, in accordance with the terms contained in -++** a written agreement between you and Nokia. -++** -++** GNU Lesser General Public License Usage -++** -++** Alternatively, this file may be used under the terms of the GNU Lesser -++** General Public License version 2.1 as published by the Free Software -++** Foundation and appearing in the file LICENSE.LGPL included in the -++** packaging of this file. Please review the following information to -++** ensure the GNU Lesser General Public License version 2.1 requirements -++** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -++** -++** If you are unsure which license is appropriate for your use, please -++** contact the sales department at http://www.qtsoftware.com/contact. -++** -++**************************************************************************/ -++ -++#include "projectwelcomepagewidget.h" -++#include "ui_projectwelcomepagewidget.h" -++ -++#include <coreplugin/coreconstants.h> -++#include <coreplugin/uniqueidmanager.h> -++#include <coreplugin/modemanager.h> -++#include <coreplugin/icore.h> -++#include <coreplugin/dialogs/iwizard.h> -++ -++#include <QtCore/QFileInfo> -++#include <QtCore/QDir> -++#include <QtCore/QPair> -++#include <QtGui/QLabel> -++#include <QtGui/QTreeWidgetItem> -++ -++#include <QtCore/QDebug> -++ -++using namespace ProjectExplorer::Internal; -++ -++static QString formatTitleLabel(const QString &text) -++{ -++ // TODO: do not hardcode here -++ QString rc = QLatin1String( -++ "<html><head><style type=\"text/css\">p, li { white-space: pre-wrap; }</style></head>" -++ "<body style=\" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;\">" -++ "<p style=\" margin-top:16px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">" -++ "<span style=\" font-size:x-large; color:#555555;\">"); -++ rc += text; -++ rc += QLatin1String("</span></p><hr/></body></html>"); -++ return rc; -++} -++ -++bool ProjectWelcomePageWidget::WelcomePageData::operator==(const WelcomePageData &rhs) const -++{ -++ return previousSession == rhs.previousSession -++ && activeSession == rhs.activeSession -++ && sessionList == rhs.sessionList -++ && projectList == rhs.projectList; -++} -++ -++bool ProjectWelcomePageWidget::WelcomePageData::operator!=(const WelcomePageData &rhs) const -++{ -++ return previousSession != rhs.previousSession -++ || activeSession != rhs.activeSession -++ || sessionList != rhs.sessionList -++ || projectList != rhs.projectList; -++} -++ -++QDebug operator<<(QDebug dgb, const ProjectWelcomePageWidget::WelcomePageData &d) -++{ -++ dgb.nospace() << "PreviousSession=" << d.previousSession -++ << " activeSession=" << d.activeSession -++ << " sessionList=" << d.sessionList -++ << " projectList=" << d.projectList; -++ return dgb; -++} -++ -++ProjectWelcomePageWidget::ProjectWelcomePageWidget(QWidget *parent) : -++ QWidget(parent), -++ ui(new Ui::ProjectWelcomePageWidget) -++{ -++ ui->setupUi(this); -++ ui->projTitleLabel->setText(::formatTitleLabel(tr("Open Recent Project"))); -++ ui->recentSessionsTitleLabel->setText(::formatTitleLabel(tr("Resume Session"))); -++ updateWelcomePage(WelcomePageData()); -++ -++ connect(ui->sessTreeWidget, SIGNAL(activated(QString)), SLOT(slotSessionClicked(QString))); -++ connect(ui->projTreeWidget, SIGNAL(activated(QString)), SLOT(slotProjectClicked(QString))); -++ connect(ui->createNewProjectButton, SIGNAL(clicked()), SLOT(slotCreateNewProject())); -++ connect(ui->manageSessionsButton, SIGNAL(clicked()), SIGNAL(manageSessions())); -++ -++} -++ -++ProjectWelcomePageWidget::~ProjectWelcomePageWidget() -++{ -++ delete ui; -++} -++ -++void ProjectWelcomePageWidget::updateWelcomePage(const WelcomePageData &welcomePageData) -++{ -++ // Update only if data are modified -++ if (welcomePageData == lastData) -++ return; -++ lastData = welcomePageData; -++ -++ setUpdatesEnabled(false); -++ ui->sessTreeWidget->clear(); -++ ui->projTreeWidget->clear(); -++ -++ if (welcomePageData.sessionList.count() > 0) { -++ foreach (const QString &s, welcomePageData.sessionList) { -++ QString str = s; -++ if (s == welcomePageData.previousSession) -++ str = tr("%1 (last session)").arg(s); -++ ui->sessTreeWidget->addItem(str, s); -++ } -++ ui->sessTreeWidget->updateGeometry(); -++ ui->sessTreeWidget->show(); -++ } else { -++ ui->sessTreeWidget->hide(); -++ } -++ -++ typedef QPair<QString, QString> QStringPair; -++ if (welcomePageData.projectList.count() > 0) { -++ foreach (const QStringPair &it, welcomePageData.projectList) { -++ QTreeWidgetItem *item = ui->projTreeWidget->addItem(it.second, it.first); -++ const QFileInfo fi(it.first); -++ item->setToolTip(1, QDir::toNativeSeparators(fi.absolutePath())); -++ } -++ } else { -++ ui->projTreeWidget->hide(); -++ } -++ ui->projTreeWidget->updateGeometry(); -++ setUpdatesEnabled(true); -++} -++ -++void ProjectWelcomePageWidget::activateEditMode() -++{ -++ Core::ModeManager *modeManager = Core::ModeManager::instance(); -++ if (modeManager->currentMode() == modeManager->mode(Core::Constants::MODE_WELCOME)) -++ modeManager->activateMode(Core::Constants::MODE_EDIT); -++} -++ -++ -++void ProjectWelcomePageWidget::slotSessionClicked(const QString &data) -++{ -++ emit requestSession(data); -++ activateEditMode(); -++} -++ -++void ProjectWelcomePageWidget::slotProjectClicked(const QString &data) -++{ -++ emit requestProject(data); -++ activateEditMode(); -++} -++ -++void ProjectWelcomePageWidget::slotCreateNewProject() -++{ -++ Core::ICore::instance()->showNewItemDialog(tr("New Project..."), -++ Core::IWizard::wizardsOfKind(Core::IWizard::ProjectWizard)); -++} -+diff --git a/src/plugins/projectexplorer/projectwelcomepagewidget.h b/src/plugins/projectexplorer/projectwelcomepagewidget.h -+new file mode 100644 -+index 0000000..02e277d -+--- /dev/null -++++ b/src/plugins/projectexplorer/projectwelcomepagewidget.h -+@@ -0,0 +1,81 @@ -++/************************************************************************** -++** -++** This file is part of Qt Creator -++** -++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -++** -++** Contact: Nokia Corporation (qt-info@nokia.com) -++** -++** Commercial Usage -++** -++** Licensees holding valid Qt Commercial licenses may use this file in -++** accordance with the Qt Commercial License Agreement provided with the -++** Software or, alternatively, in accordance with the terms contained in -++** a written agreement between you and Nokia. -++** -++** GNU Lesser General Public License Usage -++** -++** Alternatively, this file may be used under the terms of the GNU Lesser -++** General Public License version 2.1 as published by the Free Software -++** Foundation and appearing in the file LICENSE.LGPL included in the -++** packaging of this file. Please review the following information to -++** ensure the GNU Lesser General Public License version 2.1 requirements -++** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -++** -++** If you are unsure which license is appropriate for your use, please -++** contact the sales department at http://www.qtsoftware.com/contact. -++** -++**************************************************************************/ -++ -++#ifndef PROJECTWELCOMEPAGEWIDGET_H -++#define PROJECTWELCOMEPAGEWIDGET_H -++ -++#include <QtGui/QWidget> -++ -++ -++namespace ProjectExplorer { -++ namespace Internal { -++ -++ -++namespace Ui { -++ class ProjectWelcomePageWidget; -++} -++ -++class ProjectWelcomePageWidget : public QWidget { -++ Q_OBJECT -++public: -++ ProjectWelcomePageWidget(QWidget *parent = 0); -++ ~ProjectWelcomePageWidget(); -++ -++ struct WelcomePageData{ -++ bool operator==(const WelcomePageData &rhs) const; -++ bool operator!=(const WelcomePageData &rhs) const; -++ -++ QString previousSession; -++ QString activeSession; -++ QStringList sessionList; -++ QList<QPair<QString, QString> > projectList; // pair of filename, displayname -++ }; -++ -++ void updateWelcomePage(const WelcomePageData &welcomePageData); -++ -++signals: -++ void requestProject(const QString &project); -++ void requestSession(const QString &session); -++ void manageSessions(); -++ -++private slots: -++ void slotSessionClicked(const QString &data); -++ void slotProjectClicked(const QString &data); -++ void slotCreateNewProject(); -++ -++private: -++ void activateEditMode(); -++ Ui::ProjectWelcomePageWidget *ui; -++ WelcomePageData lastData; -++}; -++ -++} -++} -++ -++#endif // PROJECTWELCOMEPAGEWIDGET_H -+diff --git a/src/plugins/projectexplorer/projectwelcomepagewidget.ui b/src/plugins/projectexplorer/projectwelcomepagewidget.ui -+new file mode 100644 -+index 0000000..cb26957 -+--- /dev/null -++++ b/src/plugins/projectexplorer/projectwelcomepagewidget.ui -+@@ -0,0 +1,254 @@ -++<?xml version="1.0" encoding="UTF-8"?> -++<ui version="4.0"> -++ <class>ProjectExplorer::Internal::ProjectWelcomePageWidget</class> -++ <widget class="QWidget" name="ProjectExplorer::Internal::ProjectWelcomePageWidget"> -++ <property name="geometry"> -++ <rect> -++ <x>0</x> -++ <y>0</y> -++ <width>667</width> -++ <height>365</height> -++ </rect> -++ </property> -++ <property name="windowTitle"> -++ <string>Form</string> -++ </property> -++ <layout class="QHBoxLayout" name="horizontalLayout"> -++ <item> -++ <widget class="QFrame" name="recentSessionsFrame"> -++ <property name="sizePolicy"> -++ <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> -++ <horstretch>0</horstretch> -++ <verstretch>0</verstretch> -++ </sizepolicy> -++ </property> -++ <property name="minimumSize"> -++ <size> -++ <width>270</width> -++ <height>130</height> -++ </size> -++ </property> -++ <property name="styleSheet"> -++ <string/> -++ </property> -++ <layout class="QGridLayout" name="gridLayout_3"> -++ <property name="horizontalSpacing"> -++ <number>0</number> -++ </property> -++ <property name="verticalSpacing"> -++ <number>3</number> -++ </property> -++ <item row="0" column="0" colspan="3"> -++ <widget class="QLabel" name="recentSessionsTitleLabel"> -++ <property name="sizePolicy"> -++ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Maximum"> -++ <horstretch>0</horstretch> -++ <verstretch>0</verstretch> -++ </sizepolicy> -++ </property> -++ <property name="alignment"> -++ <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> -++ </property> -++ </widget> -++ </item> -++ <item row="1" column="0" colspan="3"> -++ <widget class="Core::Utils::WelcomeModeTreeWidget" name="sessTreeWidget"> -++ <property name="sizePolicy"> -++ <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> -++ <horstretch>0</horstretch> -++ <verstretch>0</verstretch> -++ </sizepolicy> -++ </property> -++ <property name="focusPolicy"> -++ <enum>Qt::NoFocus</enum> -++ </property> -++ <property name="frameShape"> -++ <enum>QFrame::NoFrame</enum> -++ </property> -++ <property name="selectionMode"> -++ <enum>QAbstractItemView::NoSelection</enum> -++ </property> -++ <property name="verticalScrollMode"> -++ <enum>QAbstractItemView::ScrollPerPixel</enum> -++ </property> -++ <property name="rootIsDecorated"> -++ <bool>false</bool> -++ </property> -++ <property name="uniformRowHeights"> -++ <bool>true</bool> -++ </property> -++ <property name="allColumnsShowFocus"> -++ <bool>true</bool> -++ </property> -++ <property name="columnCount"> -++ <number>2</number> -++ </property> -++ <attribute name="headerVisible"> -++ <bool>false</bool> -++ </attribute> -++ <attribute name="headerDefaultSectionSize"> -++ <number>24</number> -++ </attribute> -++ <attribute name="headerMinimumSectionSize"> -++ <number>0</number> -++ </attribute> -++ <column> -++ <property name="text"> -++ <string notr="true">1</string> -++ </property> -++ </column> -++ <column> -++ <property name="text"> -++ <string notr="true">2</string> -++ </property> -++ </column> -++ </widget> -++ </item> -++ <item row="3" column="0"> -++ <widget class="QPushButton" name="manageSessionsButton"> -++ <property name="focusPolicy"> -++ <enum>Qt::TabFocus</enum> -++ </property> -++ <property name="text"> -++ <string>Manage Sessions...</string> -++ </property> -++ </widget> -++ </item> -++ <item row="4" column="0"> -++ <spacer name="verticalSpacer"> -++ <property name="orientation"> -++ <enum>Qt::Vertical</enum> -++ </property> -++ <property name="sizeHint" stdset="0"> -++ <size> -++ <width>20</width> -++ <height>40</height> -++ </size> -++ </property> -++ </spacer> -++ </item> -++ </layout> -++ </widget> -++ </item> -++ <item> -++ <widget class="QFrame" name="recentProjectsFrame"> -++ <property name="styleSheet"> -++ <string/> -++ </property> -++ <layout class="QGridLayout" name="gridLayout_5"> -++ <property name="horizontalSpacing"> -++ <number>0</number> -++ </property> -++ <property name="verticalSpacing"> -++ <number>3</number> -++ </property> -++ <property name="rightMargin"> -++ <number>9</number> -++ </property> -++ <item row="0" column="0" colspan="3"> -++ <widget class="QLabel" name="projTitleLabel"> -++ <property name="sizePolicy"> -++ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Maximum"> -++ <horstretch>0</horstretch> -++ <verstretch>0</verstretch> -++ </sizepolicy> -++ </property> -++ <property name="alignment"> -++ <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> -++ </property> -++ </widget> -++ </item> -++ <item row="1" column="0" colspan="3"> -++ <widget class="Core::Utils::WelcomeModeTreeWidget" name="projTreeWidget"> -++ <property name="sizePolicy"> -++ <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> -++ <horstretch>0</horstretch> -++ <verstretch>0</verstretch> -++ </sizepolicy> -++ </property> -++ <property name="focusPolicy"> -++ <enum>Qt::NoFocus</enum> -++ </property> -++ <property name="frameShape"> -++ <enum>QFrame::NoFrame</enum> -++ </property> -++ <property name="selectionMode"> -++ <enum>QAbstractItemView::NoSelection</enum> -++ </property> -++ <property name="verticalScrollMode"> -++ <enum>QAbstractItemView::ScrollPerPixel</enum> -++ </property> -++ <property name="rootIsDecorated"> -++ <bool>false</bool> -++ </property> -++ <property name="uniformRowHeights"> -++ <bool>true</bool> -++ </property> -++ <property name="allColumnsShowFocus"> -++ <bool>true</bool> -++ </property> -++ <property name="columnCount"> -++ <number>2</number> -++ </property> -++ <attribute name="headerVisible"> -++ <bool>false</bool> -++ </attribute> -++ <attribute name="headerDefaultSectionSize"> -++ <number>24</number> -++ </attribute> -++ <attribute name="headerMinimumSectionSize"> -++ <number>0</number> -++ </attribute> -++ <column> -++ <property name="text"> -++ <string notr="true">1</string> -++ </property> -++ </column> -++ <column> -++ <property name="text"> -++ <string notr="true">2</string> -++ </property> -++ </column> -++ </widget> -++ </item> -++ <item row="3" column="0"> -++ <widget class="QPushButton" name="createNewProjectButton"> -++ <property name="focusPolicy"> -++ <enum>Qt::TabFocus</enum> -++ </property> -++ <property name="text"> -++ <string>Create New Project...</string> -++ </property> -++ <property name="flat"> -++ <bool>false</bool> -++ </property> -++ </widget> -++ </item> -++ <item row="4" column="0"> -++ <spacer name="verticalSpacer_2"> -++ <property name="orientation"> -++ <enum>Qt::Vertical</enum> -++ </property> -++ <property name="sizeHint" stdset="0"> -++ <size> -++ <width>20</width> -++ <height>40</height> -++ </size> -++ </property> -++ </spacer> -++ </item> -++ </layout> -++ </widget> -++ </item> -++ </layout> -++ </widget> -++ <customwidgets> -++ <customwidget> -++ <class>Core::Utils::WelcomeModeTreeWidget</class> -++ <extends>QTreeWidget</extends> -++ <header>utils/welcomemodetreewidget.h</header> -++ </customwidget> -++ </customwidgets> -++ <resources/> -++ <connections/> -++</ui> -+diff --git a/src/plugins/projectexplorer/projectwelcomepage.cpp b/src/plugins/projectexplorer/projectwelcomepage.cpp -+new file mode 100644 -+index 0000000..d850c8f -+--- /dev/null -++++ b/src/plugins/projectexplorer/projectwelcomepage.cpp -+@@ -0,0 +1,48 @@ -++/************************************************************************** -++** -++** This file is part of Qt Creator -++** -++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -++** -++** Contact: Nokia Corporation (qt-info@nokia.com) -++** -++** Commercial Usage -++** -++** Licensees holding valid Qt Commercial licenses may use this file in -++** accordance with the Qt Commercial License Agreement provided with the -++** Software or, alternatively, in accordance with the terms contained in -++** a written agreement between you and Nokia. -++** -++** GNU Lesser General Public License Usage -++** -++** Alternatively, this file may be used under the terms of the GNU Lesser -++** General Public License version 2.1 as published by the Free Software -++** Foundation and appearing in the file LICENSE.LGPL included in the -++** packaging of this file. Please review the following information to -++** ensure the GNU Lesser General Public License version 2.1 requirements -++** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -++** -++** If you are unsure which license is appropriate for your use, please -++** contact the sales department at http://www.qtsoftware.com/contact. -++** -++**************************************************************************/ -++ -++#include "projectwelcomepage.h" -++#include "projectwelcomepagewidget.h" -++ -++namespace ProjectExplorer { -++namespace Internal { -++ -++ProjectWelcomePage::ProjectWelcomePage() -++ : m_page(new ProjectWelcomePageWidget) -++{ -++ -++} -++ -++QWidget* ProjectWelcomePage::page() -++{ -++ return m_page; -++} -++ -++} // namespace Internal -++} // namespace ProjectExplorer -+diff --git a/src/plugins/projectexplorer/projectwelcomepage.h b/src/plugins/projectexplorer/projectwelcomepage.h -+new file mode 100644 -+index 0000000..af55a7d -+--- /dev/null -++++ b/src/plugins/projectexplorer/projectwelcomepage.h -+@@ -0,0 +1,58 @@ -++/************************************************************************** -++** -++** This file is part of Qt Creator -++** -++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -++** -++** Contact: Nokia Corporation (qt-info@nokia.com) -++** -++** Commercial Usage -++** -++** Licensees holding valid Qt Commercial licenses may use this file in -++** accordance with the Qt Commercial License Agreement provided with the -++** Software or, alternatively, in accordance with the terms contained in -++** a written agreement between you and Nokia. -++** -++** GNU Lesser General Public License Usage -++** -++** Alternatively, this file may be used under the terms of the GNU Lesser -++** General Public License version 2.1 as published by the Free Software -++** Foundation and appearing in the file LICENSE.LGPL included in the -++** packaging of this file. Please review the following information to -++** ensure the GNU Lesser General Public License version 2.1 requirements -++** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -++** -++** If you are unsure which license is appropriate for your use, please -++** contact the sales department at http://www.qtsoftware.com/contact. -++** -++**************************************************************************/ -++ -++#ifndef PROJECTWELCOMEPAGE_H -++#define PROJECTWELCOMEPAGE_H -++ -++#include <extensionsystem/iwelcomepage.h> -++ -++namespace ProjectExplorer { -++namespace Internal { -++ -++class ProjectWelcomePageWidget; -++ -++class ProjectWelcomePage : public ExtensionSystem::IWelcomePage -++{ -++ Q_OBJECT -++public: -++ ProjectWelcomePage(); -++ -++ QWidget *page(); -++ QString title() const { return tr("Develop"); } -++ int priority() const { return 20; } -++private: -++ ProjectWelcomePageWidget *m_page; -++ -++ -++}; -++ -++} // namespace Internal -++} // namespace ProjectExplorer -++ -++#endif // PROJECTWELCOMEPAGE_H -+diff --git a/src/plugins/projectexplorer/projectwelcomeplugin.ui b/src/plugins/projectexplorer/projectwelcomeplugin.ui -+new file mode 100644 -+index 0000000..7f7c84b -+--- /dev/null -++++ b/src/plugins/projectexplorer/projectwelcomeplugin.ui -+@@ -0,0 +1,21 @@ -++<ui version="4.0" > -++ <author/> -++ <comment/> -++ <exportmacro/> -++ <class>ProjectWelcomePage</class> -++ <widget class="QWidget" name="ProjectWelcomePage" > -++ <property name="geometry" > -++ <rect> -++ <x>0</x> -++ <y>0</y> -++ <width>400</width> -++ <height>300</height> -++ </rect> -++ </property> -++ <property name="windowTitle" > -++ <string>Form</string> -++ </property> -++ </widget> -++ <pixmapfunction/> -++ <connections/> -++</ui> -+diff --git a/src/plugins/qt4projectmanager/Qt4ProjectManager.pluginspec b/src/plugins/qt4projectmanager/Qt4ProjectManager.pluginspec -+index 3b515bd..c4b8d44 100644 -+--- a/src/plugins/qt4projectmanager/Qt4ProjectManager.pluginspec -++++ b/src/plugins/qt4projectmanager/Qt4ProjectManager.pluginspec -+@@ -25,6 +25,5 @@ will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.</license> -+ <dependency name="CppEditor" version="1.2.80"/> -+ <dependency name="Help" version="1.2.80"/> -+ <dependency name="Designer" version="1.2.80"/> -+- <dependency name="Welcome" version="1.2.80"/> -+ </dependencyList> -+ </plugin> -+diff --git a/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.cpp b/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.cpp -+new file mode 100644 -+index 0000000..ca1db4c -+--- /dev/null -++++ b/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.cpp -+@@ -0,0 +1,271 @@ -++/************************************************************************** -++** -++** This file is part of Qt Creator -++** -++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -++** -++** Contact: Nokia Corporation (qt-info@nokia.com) -++** -++** Commercial Usage -++** -++** Licensees holding valid Qt Commercial licenses may use this file in -++** accordance with the Qt Commercial License Agreement provided with the -++** Software or, alternatively, in accordance with the terms contained in -++** a written agreement between you and Nokia. -++** -++** GNU Lesser General Public License Usage -++** -++** Alternatively, this file may be used under the terms of the GNU Lesser -++** General Public License version 2.1 as published by the Free Software -++** Foundation and appearing in the file LICENSE.LGPL included in the -++** packaging of this file. Please review the following information to -++** ensure the GNU Lesser General Public License version 2.1 requirements -++** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -++** -++** If you are unsure which license is appropriate for your use, please -++** contact the sales department at http://www.qtsoftware.com/contact. -++** -++**************************************************************************/ -++ -++#include "gettingstartedwelcomepagewidget.h" -++#include "ui_gettingstartedwelcomepagewidget.h" -++ -++#include <coreplugin/icore.h> -++#include <coreplugin/coreconstants.h> -++ -++#include <extensionsystem/pluginmanager.h> -++ -++#include <help/helpplugin.h> -++ -++#include <QtCore/QDateTime> -++#include <QtCore/QDir> -++#include <QtCore/QFileInfo> -++#include <QtCore/QDebug> -++#include <QtCore/QUrl> -++#include <QtCore/QXmlStreamReader> -++#include <QtGui/QFont> -++ -++namespace Qt4ProjectManager { -++namespace Internal { -++ -++// TODO: remove -++static QString titleLabel(const QString &text) -++{ -++ // TODO: do not hardcode here -++ QString rc = QLatin1String( -++ "<html><head><style type=\"text/css\">p, li { white-space: pre-wrap; }</style></head>" -++ "<body style=\" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;\">" -++ "<p style=\" margin-top:16px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">" -++ "<span style=\" font-size:x-large; color:#555555;\">"); -++ rc += text; -++ rc += QLatin1String("</span></p><hr/></body></html>"); -++ return rc; -++} -++ -++GettingStartedWelcomePageWidget::GettingStartedWelcomePageWidget(QWidget *parent) : -++ QWidget(parent), -++ ui(new Ui::GettingStartedWelcomePageWidget) -++{ -++ ui->setupUi(this); -++ ui->tutorialsTitleLabel->setText(titleLabel(tr("Tutorials"))); -++ ui->demoTitleLabel->setText(titleLabel(tr("Explore Qt Examples"))); -++ ui->didYouKnowTextBrowser->viewport()->setAutoFillBackground(false); -++ ui->didYouKnowTitleLabel->setText(titleLabel(tr("Did You Know?"))); -++ -++ connect(ui->tutorialTreeWidget, SIGNAL(activated(QString)), SLOT(slotOpenHelpPage(const QString&))); -++ connect(ui->openExampleButton, SIGNAL(clicked()), SLOT(slotOpenExample())); -++ connect(ui->examplesComboBox, SIGNAL(currentIndexChanged(int)), SLOT(slotEnableExampleButton(int))); -++ -++ ui->tutorialTreeWidget->addItem(tr("<b>Qt Creator - A quick tour</b>"), -++ QString("qthelp://com.nokia.qtcreator.%1%2/doc/index.html").arg(IDE_VERSION_MAJOR).arg(IDE_VERSION_MINOR)); -++ ui->tutorialTreeWidget->addItem(tr("Creating an address book"), -++ QLatin1String("qthelp://com.nokia.qtcreator/doc/tutorials-addressbook-sdk.html")); -++ ui->tutorialTreeWidget->addItem(tr("Understanding widgets"), -++ QLatin1String("qthelp://com.trolltech.qt/qdoc/widgets-tutorial.html")); -++ ui->tutorialTreeWidget->addItem(tr("Building with qmake"), -++ QLatin1String("qthelp://com.trolltech.qmake/qdoc/qmake-tutorial.html")); -++ ui->tutorialTreeWidget->addItem(tr("Writing test cases"), -++ QLatin1String("qthelp://com.trolltech.qt/qdoc/qtestlib-tutorial.html")); -++ -++ srand(QDateTime::currentDateTime().toTime_t()); -++ QStringList tips = tipsOfTheDay(); -++ m_currentTip = rand()%tips.count(); -++ -++ QTextDocument *doc = ui->didYouKnowTextBrowser->document(); -++ doc->setDefaultStyleSheet("a:link {color:black;}"); -++ ui->didYouKnowTextBrowser->setDocument(doc); -++ ui->didYouKnowTextBrowser->setText(tips.at(m_currentTip)); -++ -++ connect(ui->nextTipBtn, SIGNAL(clicked()), this, SLOT(slotNextTip())); -++ connect(ui->prevTipBtn, SIGNAL(clicked()), this, SLOT(slotPrevTip())); -++ -++} -++ -++GettingStartedWelcomePageWidget::~GettingStartedWelcomePageWidget() -++{ -++ delete ui; -++} -++ -++void GettingStartedWelcomePageWidget::updateExamples(const QString& examplePath, const QString& demosPath, const QString &sourcePath) -++{ -++ QString demoxml = demosPath + "/qtdemo/xml/examples.xml"; -++ if (!QFile::exists(demoxml)) { -++ demoxml = sourcePath + "/demos/qtdemo/xml/examples.xml"; -++ if (!QFile::exists(demoxml)) -++ return; -++ } -++ -++ QFile description(demoxml); -++ if (!description.open(QFile::ReadOnly)) -++ return; -++ -++ ui->examplesComboBox->clear(); -++ ui->examplesComboBox->setEnabled(true); -++ -++ ui->examplesComboBox->addItem(tr("Choose an example...")); -++ QFont f = font(); -++ f.setItalic(true); -++ ui->examplesComboBox->setItemData(0, f, Qt::FontRole); -++ f.setItalic(false); -++ bool inExamples = false; -++ QString dirName; -++ QXmlStreamReader reader(&description); -++ while (!reader.atEnd()) { -++ switch (reader.readNext()) { -++ case QXmlStreamReader::StartElement: -++ if (reader.name() == "category") { -++ QString name = reader.attributes().value(QLatin1String("name")).toString(); -++ if (name.contains("tutorial")) -++ break; -++ dirName = reader.attributes().value(QLatin1String("dirname")).toString(); -++ ui->examplesComboBox->addItem(name); -++ f.setBold(true); -++ ui->examplesComboBox->setItemData(ui->examplesComboBox->count()-1, f, Qt::FontRole); -++ f.setBold(false); -++ inExamples = true; -++ } -++ if (inExamples && reader.name() == "example") { -++ QString name = reader.attributes().value(QLatin1String("name")).toString(); -++ QString fn = reader.attributes().value(QLatin1String("filename")).toString(); -++ QString relativeProPath = '/' + dirName + '/' + fn + '/' + fn + ".pro"; -++ QString fileName = examplePath + relativeProPath; -++ if (!QFile::exists(fileName)) -++ fileName = sourcePath + "/examples" + relativeProPath; -++ QString helpPath = "qthelp://com.trolltech.qt/qdoc/" + dirName.replace("/", "-") + "-" + fn + ".html"; -++ -++ ui->examplesComboBox->addItem(" " + name, fileName); -++ ui->examplesComboBox->setItemData(ui->examplesComboBox->count()-1, helpPath, Qt::UserRole+1); -++ } -++ break; -++ case QXmlStreamReader::EndElement: -++ if (reader.name() == "category") -++ inExamples = false; -++ break; -++ default: -++ break; -++ } -++ } -++} -++ -++void GettingStartedWelcomePageWidget::slotEnableExampleButton(int index) -++{ -++ QString fileName = ui->examplesComboBox->itemData(index, Qt::UserRole).toString(); -++ ui->openExampleButton->setEnabled(!fileName.isEmpty()); -++} -++ -++void GettingStartedWelcomePageWidget::slotOpenExample() -++{ -++ QComboBox *box = ui->examplesComboBox; -++ QString proFile = box->itemData(box->currentIndex(), Qt::UserRole).toString(); -++ QString helpFile = box->itemData(box->currentIndex(), Qt::UserRole + 1).toString(); -++ QStringList files; -++ QFileInfo fi(proFile); -++ QString tryFile = fi.path() + "/main.cpp"; -++ files << proFile; -++ if(!QFile::exists(tryFile)) -++ tryFile = fi.path() + '/' + fi.baseName() + ".cpp"; -++ if(QFile::exists(tryFile)) -++ files << tryFile; -++ Core::ICore::instance()->openFiles(files); -++ slotOpenContextHelpPage(helpFile); -++} -++ -++void GettingStartedWelcomePageWidget::slotOpenHelpPage(const QString& url) -++{ -++ Help::HelpManager *helpManager -++ = ExtensionSystem::PluginManager::instance()->getObject<Help::HelpManager>(); -++ Q_ASSERT(helpManager); -++ helpManager->openHelpPage(url); -++} -++void GettingStartedWelcomePageWidget::slotOpenContextHelpPage(const QString& url) -++{ -++ Help::HelpManager *helpManager -++ = ExtensionSystem::PluginManager::instance()->getObject<Help::HelpManager>(); -++ Q_ASSERT(helpManager); -++ helpManager->openContextHelpPage(url); -++} -++ -++void GettingStartedWelcomePageWidget::slotNextTip() -++{ -++ QStringList tips = tipsOfTheDay(); -++ m_currentTip = ((m_currentTip+1)%tips.count()); -++ ui->didYouKnowTextBrowser->setText(tips.at(m_currentTip)); -++} -++ -++void GettingStartedWelcomePageWidget::slotPrevTip() -++{ -++ QStringList tips = tipsOfTheDay(); -++ m_currentTip = ((m_currentTip-1)+tips.count())%tips.count(); -++ ui->didYouKnowTextBrowser->setText(tips.at(m_currentTip)); -++} -++ -++QStringList GettingStartedWelcomePageWidget::tipsOfTheDay() -++{ -++ static QStringList tips; -++ if (tips.isEmpty()) { -++ QString altShortcut = -++#ifdef Q_WS_MAC -++ tr("Cmd", "Shortcut key"); -++#else -++ tr("Alt", "Shortcut key"); -++#endif -++ tips.append(tr("You can switch between Qt Creator's modes using <tt>Ctrl+number</tt>:<ul>" -++ "<li>1 - Welcome</li><li>2 - Edit</li><li>3 - Debug</li><li>4 - Projects</li><li>5 - Help</li>" -++ "<li></li><li>6 - Output</li></ul>")); -++ //:%1 gets replaced by Alt (Win/Unix) or Cmd (Mac) -++ tips.append(tr("You can show and hide the side bar using <tt>%1+0<tt>.").arg(altShortcut)); -++ tips.append(tr("You can fine tune the <tt>Find</tt> function by selecting "Whole Words" " -++ "or "Case Sensitive". Simply click on the icons on the right end of the line edit.")); -++ tips.append(tr("If you add <a href=\"qthelp://com.nokia.qtcreator/doc/creator-external-library-handling.html\"" -++ ">external libraries</a>, Qt Creator will automatically offer syntax highlighting " -++ "and code completion.")); -++ tips.append(tr("The code completion is CamelCase-aware. For example, to complete <tt>namespaceUri</tt> " -++ "you can just type <tt>nU</tt> and hit <tt>Ctrl+Space</tt>.")); -++ tips.append(tr("You can force code completion at any time using <tt>Ctrl+Space</tt>.")); -++ tips.append(tr("You can start Qt Creator with a session by calling <tt>qtcreator <sessionname></tt>.")); -++ tips.append(tr("You can return to edit mode from any other mode at any time by hitting <tt>Escape</tt>.")); -++ //:%1 gets replaced by Alt (Win/Unix) or Cmd (Mac) -++ tips.append(tr("You can switch between the output pane by hitting <tt>%1+n</tt> where n is the number denoted " -++ "on the buttons at the window bottom:" -++ "<ul><li>1 - Build Issues</li><li>2 - Search Results</li><li>3 - Application Output</li>" -++ "<li>4 - Compile Output</li></ul>").arg(altShortcut)); -++ tips.append(tr("You can quickly search methods, classes, help and more using the " -++ "<a href=\"qthelp://com.nokia.qtcreator/doc/creator-navigation.html\">Locator bar</a> (<tt>Ctrl+K</tt>).")); -++ tips.append(tr("You can add custom build steps in the " -++ "<a href=\"qthelp://com.nokia.qtcreator/doc/creator-build-settings.html\">build settings</a>.")); -++ tips.append(tr("Within a session, you can add " -++ "<a href=\"qthelp://com.nokia.qtcreator/doc/creator-build-settings.html#dependencies\">dependencies</a> between projects.")); -++ tips.append(tr("You can set the preferred editor encoding for every project in <tt>Projects -> Editor Settings -> Default Encoding</tt>.")); -++ tips.append(tr("You can modify the binary that is being executed when you press the <tt>Run</tt> button: Add a <tt>Custom Executable</tt> " -++ "by clicking the <tt>+</tt> button in <tt>Projects -> Run Settings -> Run Configuration</tt> and then select the new " -++ "target in the combo box.")); -++ tips.append(tr("You can use Qt Creator with a number of <a href=\"qthelp://com.nokia.qtcreator/doc/creator-version-control.html\">" -++ "revision control systems</a> such as Subversion, Perforce and Git.")); -++ tips.append(tr("In the editor, <tt>F2</tt> toggles declaration and definition while <tt>F4</tt> toggles header file and source file.")); -++ } -++ return tips; -++} -++ -++ -++} // namespace Internal -++} // namespace Qt4ProjectManager -+diff --git a/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.h b/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.h -+new file mode 100644 -+index 0000000..a40df28 -+--- /dev/null -++++ b/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.h -+@@ -0,0 +1,69 @@ -++/************************************************************************** -++** -++** This file is part of Qt Creator -++** -++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -++** -++** Contact: Nokia Corporation (qt-info@nokia.com) -++** -++** Commercial Usage -++** -++** Licensees holding valid Qt Commercial licenses may use this file in -++** accordance with the Qt Commercial License Agreement provided with the -++** Software or, alternatively, in accordance with the terms contained in -++** a written agreement between you and Nokia. -++** -++** GNU Lesser General Public License Usage -++** -++** Alternatively, this file may be used under the terms of the GNU Lesser -++** General Public License version 2.1 as published by the Free Software -++** Foundation and appearing in the file LICENSE.LGPL included in the -++** packaging of this file. Please review the following information to -++** ensure the GNU Lesser General Public License version 2.1 requirements -++** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -++** -++** If you are unsure which license is appropriate for your use, please -++** contact the sales department at http://www.qtsoftware.com/contact. -++** -++**************************************************************************/ -++ -++#ifndef GETTINGSTARTEDWELCOMEPAGEWIDGET_H -++#define GETTINGSTARTEDWELCOMEPAGEWIDGET_H -++ -++#include <QWidget> -++ -++namespace Qt4ProjectManager { -++namespace Internal { -++ -++namespace Ui { -++ class GettingStartedWelcomePageWidget; -++} -++ -++class GettingStartedWelcomePageWidget : public QWidget { -++ Q_OBJECT -++public: -++ GettingStartedWelcomePageWidget(QWidget *parent = 0); -++ ~GettingStartedWelcomePageWidget(); -++ -++ public slots: -++ void updateExamples(const QString& examplePath, const QString& demosPath, const QString &sourcePath); -++ -++private slots: -++ void slotOpenHelpPage(const QString& url); -++ void slotOpenContextHelpPage(const QString& url); -++ void slotEnableExampleButton(int); -++ void slotOpenExample(); -++ void slotNextTip(); -++ void slotPrevTip(); -++ -++private: -++ QStringList tipsOfTheDay(); -++ -++ Ui::GettingStartedWelcomePageWidget *ui; -++ int m_currentTip; -++}; -++ -++ -++} // namespace Internal -++} // namespace Qt4ProjectManager -++#endif // GETTINGSTARTEDWELCOMEPAGEWIDGET_H -+diff --git a/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.ui b/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.ui -+new file mode 100644 -+index 0000000..8bfebb0 -+--- /dev/null -++++ b/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.ui -+@@ -0,0 +1,343 @@ -++<?xml version="1.0" encoding="UTF-8"?> -++<ui version="4.0"> -++ <class>Qt4ProjectManager::Internal::GettingStartedWelcomePageWidget</class> -++ <widget class="QWidget" name="Qt4ProjectManager::Internal::GettingStartedWelcomePageWidget"> -++ <property name="geometry"> -++ <rect> -++ <x>0</x> -++ <y>0</y> -++ <width>646</width> -++ <height>361</height> -++ </rect> -++ </property> -++ <property name="windowTitle"> -++ <string>Form</string> -++ </property> -++ <layout class="QGridLayout" name="gridLayout"> -++ <item row="0" column="0" rowspan="2"> -++ <widget class="QFrame" name="tutorialsFrame"> -++ <property name="sizePolicy"> -++ <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> -++ <horstretch>0</horstretch> -++ <verstretch>0</verstretch> -++ </sizepolicy> -++ </property> -++ <property name="maximumSize"> -++ <size> -++ <width>400</width> -++ <height>16777215</height> -++ </size> -++ </property> -++ <property name="styleSheet"> -++ <string/> -++ </property> -++ <layout class="QGridLayout" name="gridLayout_6"> -++ <item row="0" column="0"> -++ <widget class="QLabel" name="tutorialsTitleLabel"> -++ <property name="sizePolicy"> -++ <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> -++ <horstretch>0</horstretch> -++ <verstretch>0</verstretch> -++ </sizepolicy> -++ </property> -++ <property name="alignment"> -++ <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> -++ </property> -++ </widget> -++ </item> -++ <item row="1" column="0"> -++ <widget class="Core::Utils::WelcomeModeTreeWidget" name="tutorialTreeWidget"> -++ <property name="sizePolicy"> -++ <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> -++ <horstretch>0</horstretch> -++ <verstretch>0</verstretch> -++ </sizepolicy> -++ </property> -++ <property name="focusPolicy"> -++ <enum>Qt::NoFocus</enum> -++ </property> -++ <property name="frameShape"> -++ <enum>QFrame::NoFrame</enum> -++ </property> -++ <property name="selectionMode"> -++ <enum>QAbstractItemView::NoSelection</enum> -++ </property> -++ <property name="verticalScrollMode"> -++ <enum>QAbstractItemView::ScrollPerPixel</enum> -++ </property> -++ <property name="rootIsDecorated"> -++ <bool>false</bool> -++ </property> -++ <property name="uniformRowHeights"> -++ <bool>true</bool> -++ </property> -++ <property name="allColumnsShowFocus"> -++ <bool>true</bool> -++ </property> -++ <property name="columnCount"> -++ <number>2</number> -++ </property> -++ <attribute name="headerVisible"> -++ <bool>false</bool> -++ </attribute> -++ <attribute name="headerDefaultSectionSize"> -++ <number>24</number> -++ </attribute> -++ <attribute name="headerMinimumSectionSize"> -++ <number>0</number> -++ </attribute> -++ <column> -++ <property name="text"> -++ <string notr="true">1</string> -++ </property> -++ </column> -++ <column> -++ <property name="text"> -++ <string notr="true">2</string> -++ </property> -++ </column> -++ </widget> -++ </item> -++ </layout> -++ </widget> -++ </item> -++ <item row="0" column="1"> -++ <widget class="QFrame" name="demosExamplesFrame"> -++ <property name="sizePolicy"> -++ <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> -++ <horstretch>0</horstretch> -++ <verstretch>0</verstretch> -++ </sizepolicy> -++ </property> -++ <property name="maximumSize"> -++ <size> -++ <width>400</width> -++ <height>16777215</height> -++ </size> -++ </property> -++ <property name="styleSheet"> -++ <string/> -++ </property> -++ <layout class="QGridLayout" name="gridLayout_8"> -++ <property name="rightMargin"> -++ <number>8</number> -++ </property> -++ <property name="horizontalSpacing"> -++ <number>0</number> -++ </property> -++ <item row="0" column="0" colspan="4"> -++ <widget class="QLabel" name="demoTitleLabel"> -++ <property name="alignment"> -++ <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> -++ </property> -++ </widget> -++ </item> -++ <item row="1" column="0"> -++ <widget class="QComboBox" name="examplesComboBox"> -++ <property name="enabled"> -++ <bool>false</bool> -++ </property> -++ <property name="sizePolicy"> -++ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred"> -++ <horstretch>0</horstretch> -++ <verstretch>0</verstretch> -++ </sizepolicy> -++ </property> -++ <item> -++ <property name="text"> -++ <string>Examples not installed</string> -++ </property> -++ </item> -++ </widget> -++ </item> -++ <item row="1" column="2"> -++ <widget class="QToolButton" name="openExampleButton"> -++ <property name="enabled"> -++ <bool>false</bool> -++ </property> -++ <property name="sizePolicy"> -++ <sizepolicy hsizetype="Fixed" vsizetype="Preferred"> -++ <horstretch>0</horstretch> -++ <verstretch>0</verstretch> -++ </sizepolicy> -++ </property> -++ <property name="text"> -++ <string>Open</string> -++ </property> -++ </widget> -++ </item> -++ <item row="1" column="1"> -++ <spacer name="horizontalSpacer"> -++ <property name="orientation"> -++ <enum>Qt::Horizontal</enum> -++ </property> -++ <property name="sizeType"> -++ <enum>QSizePolicy::Fixed</enum> -++ </property> -++ <property name="sizeHint" stdset="0"> -++ <size> -++ <width>6</width> -++ <height>6</height> -++ </size> -++ </property> -++ </spacer> -++ </item> -++ </layout> -++ </widget> -++ </item> -++ <item row="1" column="1"> -++ <widget class="QFrame" name="didyouKnowFrame"> -++ <property name="sizePolicy"> -++ <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> -++ <horstretch>0</horstretch> -++ <verstretch>0</verstretch> -++ </sizepolicy> -++ </property> -++ <property name="maximumSize"> -++ <size> -++ <width>400</width> -++ <height>16777215</height> -++ </size> -++ </property> -++ <property name="styleSheet"> -++ <string/> -++ </property> -++ <layout class="QGridLayout" name="gridLayout_11"> -++ <property name="rightMargin"> -++ <number>9</number> -++ </property> -++ <item row="0" column="0"> -++ <widget class="QLabel" name="didYouKnowTitleLabel"> -++ <property name="sizePolicy"> -++ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Maximum"> -++ <horstretch>0</horstretch> -++ <verstretch>0</verstretch> -++ </sizepolicy> -++ </property> -++ <property name="alignment"> -++ <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> -++ </property> -++ </widget> -++ </item> -++ <item row="1" column="0" colspan="2"> -++ <widget class="QTextBrowser" name="didYouKnowTextBrowser"> -++ <property name="sizePolicy"> -++ <sizepolicy hsizetype="Minimum" vsizetype="Preferred"> -++ <horstretch>0</horstretch> -++ <verstretch>0</verstretch> -++ </sizepolicy> -++ </property> -++ <property name="frameShape"> -++ <enum>QFrame::NoFrame</enum> -++ </property> -++ <property name="frameShadow"> -++ <enum>QFrame::Plain</enum> -++ </property> -++ <property name="verticalScrollBarPolicy"> -++ <enum>Qt::ScrollBarAlwaysOff</enum> -++ </property> -++ <property name="horizontalScrollBarPolicy"> -++ <enum>Qt::ScrollBarAlwaysOff</enum> -++ </property> -++ <property name="openExternalLinks"> -++ <bool>true</bool> -++ </property> -++ </widget> -++ </item> -++ <item row="0" column="1"> -++ <layout class="QGridLayout" name="gridLayout_10"> -++ <property name="spacing"> -++ <number>0</number> -++ </property> -++ <item row="0" column="0" colspan="2"> -++ <spacer name="verticalSpacer_4"> -++ <property name="orientation"> -++ <enum>Qt::Vertical</enum> -++ </property> -++ <property name="sizeType"> -++ <enum>QSizePolicy::Preferred</enum> -++ </property> -++ <property name="sizeHint" stdset="0"> -++ <size> -++ <width>20</width> -++ <height>2</height> -++ </size> -++ </property> -++ </spacer> -++ </item> -++ <item row="1" column="0"> -++ <widget class="QToolButton" name="prevTipBtn"> -++ <property name="styleSheet"> -++ <string notr="true">QToolButton{ -++ border-right:solid 0 px; -++ height:16px; -++ width:12px; -++} -++</string> -++ </property> -++ <property name="text"> -++ <string/> -++ </property> -++ <property name="icon"> -++ <iconset resource="../welcome/welcome.qrc"> -++ <normaloff>:/welcome/images/arrow-left.png</normaloff>:/welcome/images/arrow-left.png</iconset> -++ </property> -++ <property name="arrowType"> -++ <enum>Qt::NoArrow</enum> -++ </property> -++ </widget> -++ </item> -++ <item row="1" column="1"> -++ <widget class="QToolButton" name="nextTipBtn"> -++ <property name="styleSheet"> -++ <string notr="true">QToolButton{ -++ border-left:solid 0 px; -++ height:16px; -++ width:12px; -++} -++</string> -++ </property> -++ <property name="text"> -++ <string/> -++ </property> -++ <property name="icon"> -++ <iconset resource="../welcome/welcome.qrc"> -++ <normaloff>:/welcome/images/arrow-right.png</normaloff>:/welcome/images/arrow-right.png</iconset> -++ </property> -++ <property name="arrowType"> -++ <enum>Qt::NoArrow</enum> -++ </property> -++ </widget> -++ </item> -++ <item row="2" column="0" colspan="2"> -++ <spacer name="verticalSpacer_3"> -++ <property name="orientation"> -++ <enum>Qt::Vertical</enum> -++ </property> -++ <property name="sizeHint" stdset="0"> -++ <size> -++ <width>20</width> -++ <height>2</height> -++ </size> -++ </property> -++ </spacer> -++ </item> -++ </layout> -++ </item> -++ </layout> -++ </widget> -++ </item> -++ </layout> -++ </widget> -++ <customwidgets> -++ <customwidget> -++ <class>Core::Utils::WelcomeModeTreeWidget</class> -++ <extends>QTreeWidget</extends> -++ <header>utils/welcomemodetreewidget.h</header> -++ </customwidget> -++ </customwidgets> -++ <resources> -++ <include location="../welcome/welcome.qrc"/> -++ </resources> -++ <connections/> -++</ui> -+diff --git a/src/plugins/qt4projectmanager/gettingstartedwelcomepage.cpp b/src/plugins/qt4projectmanager/gettingstartedwelcomepage.cpp -+new file mode 100644 -+index 0000000..a68f80d -+--- /dev/null -++++ b/src/plugins/qt4projectmanager/gettingstartedwelcomepage.cpp -+@@ -0,0 +1,47 @@ -++/************************************************************************** -++** -++** This file is part of Qt Creator -++** -++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -++** -++** Contact: Nokia Corporation (qt-info@nokia.com) -++** -++** Commercial Usage -++** -++** Licensees holding valid Qt Commercial licenses may use this file in -++** accordance with the Qt Commercial License Agreement provided with the -++** Software or, alternatively, in accordance with the terms contained in -++** a written agreement between you and Nokia. -++** -++** GNU Lesser General Public License Usage -++** -++** Alternatively, this file may be used under the terms of the GNU Lesser -++** General Public License version 2.1 as published by the Free Software -++** Foundation and appearing in the file LICENSE.LGPL included in the -++** packaging of this file. Please review the following information to -++** ensure the GNU Lesser General Public License version 2.1 requirements -++** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -++** -++** If you are unsure which license is appropriate for your use, please -++** contact the sales department at http://www.qtsoftware.com/contact. -++** -++**************************************************************************/ -++ -++#include "gettingstartedwelcomepage.h" -++#include "gettingstartedwelcomepagewidget.h" -++ -++namespace Qt4ProjectManager { -++namespace Internal { -++ -++GettingStartedWelcomePlugin::GettingStartedWelcomePlugin() -++ : m_page(new GettingStartedWelcomePageWidget) -++{ -++} -++ -++QWidget* GettingStartedWelcomePlugin::page() -++{ -++ return m_page; -++} -++ -++} // namespace Internal -++} // namespace Qt4ProjectManager -+diff --git a/src/plugins/qt4projectmanager/gettingstartedwelcomepage.h b/src/plugins/qt4projectmanager/gettingstartedwelcomepage.h -+new file mode 100644 -+index 0000000..f8760df -+--- /dev/null -++++ b/src/plugins/qt4projectmanager/gettingstartedwelcomepage.h -+@@ -0,0 +1,56 @@ -++/************************************************************************** -++** -++** This file is part of Qt Creator -++** -++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -++** -++** Contact: Nokia Corporation (qt-info@nokia.com) -++** -++** Commercial Usage -++** -++** Licensees holding valid Qt Commercial licenses may use this file in -++** accordance with the Qt Commercial License Agreement provided with the -++** Software or, alternatively, in accordance with the terms contained in -++** a written agreement between you and Nokia. -++** -++** GNU Lesser General Public License Usage -++** -++** Alternatively, this file may be used under the terms of the GNU Lesser -++** General Public License version 2.1 as published by the Free Software -++** Foundation and appearing in the file LICENSE.LGPL included in the -++** packaging of this file. Please review the following information to -++** ensure the GNU Lesser General Public License version 2.1 requirements -++** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -++** -++** If you are unsure which license is appropriate for your use, please -++** contact the sales department at http://www.qtsoftware.com/contact. -++** -++**************************************************************************/ -++ -++#ifndef GETTINGSTARTEDWELCOMEPLUGIN_H -++#define GETTINGSTARTEDWELCOMEPLUGIN_H -++ -++#include <extensionsystem/iwelcomepage.h> -++ -++namespace Qt4ProjectManager { -++namespace Internal { -++ -++class GettingStartedWelcomePageWidget; -++ -++class GettingStartedWelcomePlugin : public ExtensionSystem::IWelcomePage -++{ -++public: -++ GettingStartedWelcomePlugin(); -++ -++ QWidget *page(); -++ QString title() const { return tr("Getting Started");} -++ int priority() const { return 10; } -++ -++private: -++ GettingStartedWelcomePageWidget *m_page; -++}; -++ -++} // namespace Internal -++} // namespace Qt4ProjectManager -++ -++#endif // GETTINGSTARTEDWELCOMEPLUGIN_H -+diff --git a/src/plugins/qt4projectmanager/qt4projectmanager.pro b/src/plugins/qt4projectmanager/qt4projectmanager.pro -+index 6b69139..c9335d5 100644 -+--- a/src/plugins/qt4projectmanager/qt4projectmanager.pro -++++ b/src/plugins/qt4projectmanager/qt4projectmanager.pro -+@@ -3,7 +3,6 @@ TARGET = Qt4ProjectManager -+ QT += network -+ include(../../qtcreatorplugin.pri) -+ include(qt4projectmanager_dependencies.pri) -+- -+ HEADERS += qt4projectmanagerplugin.h \ -+ qt4projectmanager.h \ -+ qt4project.h \ -+@@ -39,7 +38,9 @@ HEADERS += qt4projectmanagerplugin.h \ -+ qtversionmanager.h \ -+ qtoptionspage.h \ -+ qtuicodemodelsupport.h \ -+- externaleditors.h -++ externaleditors.h \ -++ gettingstartedwelcomepagewidget.h \ -++ gettingstartedwelcomepage.h -+ SOURCES += qt4projectmanagerplugin.cpp \ -+ qt4projectmanager.cpp \ -+ qt4project.cpp \ -+@@ -73,19 +74,20 @@ SOURCES += qt4projectmanagerplugin.cpp \ -+ qtversionmanager.cpp \ -+ qtoptionspage.cpp \ -+ qtuicodemodelsupport.cpp \ -+- externaleditors.cpp -++ externaleditors.cpp \ -++ gettingstartedwelcomepagewidget.cpp \ -++ gettingstartedwelcomepage.cpp -+ FORMS += makestep.ui \ -+ qmakestep.ui \ -+ qt4projectconfigwidget.ui \ -+ embeddedpropertiespage.ui \ -+ qtversionmanager.ui \ -+- showbuildlog.ui -++ showbuildlog.ui \ -++ gettingstartedwelcomepagewidget.ui -+ RESOURCES += qt4projectmanager.qrc \ -+ wizards/wizards.qrc -+- -+ include(../../shared/proparser/proparser.pri) -+ include(qt-s60/qt-s60.pri) -+ include(customwidgetwizard/customwidgetwizard.pri) -+- -+ DEFINES += QT_NO_CAST_TO_ASCII -+ OTHER_FILES += Qt4ProjectManager.pluginspec -+diff --git a/src/plugins/qt4projectmanager/qt4projectmanager_dependencies.pri b/src/plugins/qt4projectmanager/qt4projectmanager_dependencies.pri -+index e1bd37d..9a49315 100644 -+--- a/src/plugins/qt4projectmanager/qt4projectmanager_dependencies.pri -++++ b/src/plugins/qt4projectmanager/qt4projectmanager_dependencies.pri -+@@ -3,4 +3,3 @@ include(../../plugins/cpptools/cpptools.pri) -+ include(../../plugins/cppeditor/cppeditor.pri) -+ include(../../plugins/help/help.pri) -+ include(../../plugins/designer/designer.pri) -+-include(../../plugins/welcome/welcome.pri) -+diff --git a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp -+index f740c27..8c87b8d 100644 -+--- a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp -++++ b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp -+@@ -44,6 +44,8 @@ -+ #include "qtversionmanager.h" -+ #include "qtoptionspage.h" -+ #include "externaleditors.h" -++#include "gettingstartedwelcomepage.h" -++#include "gettingstartedwelcomepagewidget.h" -+ -+ #ifdef QTCREATOR_WITH_S60 -+ #include "qt-s60/s60manager.h" -+@@ -82,6 +84,8 @@ Qt4ProjectManagerPlugin::~Qt4ProjectManagerPlugin() -+ delete m_proFileEditorFactory; -+ removeObject(m_qt4ProjectManager); -+ delete m_qt4ProjectManager; -++ removeObject(m_welcomePlugin); -++ delete m_welcomePlugin; -+ } -+ /* -+ static Core::Command *createSeparator(Core::ActionManager *am, -+@@ -106,9 +110,16 @@ bool Qt4ProjectManagerPlugin::initialize(const QStringList &arguments, QString * -+ m_projectExplorer = ProjectExplorer::ProjectExplorerPlugin::instance(); -+ Core::ActionManager *am = core->actionManager(); -+ -+- addAutoReleasedObject(new QtVersionManager()); -++ QtVersionManager *mgr = new QtVersionManager(); -++ addAutoReleasedObject(mgr); -+ addAutoReleasedObject(new QtOptionsPage()); -+ -++ m_welcomePlugin = new GettingStartedWelcomePlugin; -++ addObject(m_welcomePlugin); -++ GettingStartedWelcomePageWidget *gswp = -++ static_cast<GettingStartedWelcomePageWidget*>(m_welcomePlugin->page()); -++ connect(mgr, SIGNAL(updateExamples(QString,QString,QString)), -++ gswp, SLOT(updateExamples(QString,QString,QString))); -+ -+ //create and register objects -+ m_qt4ProjectManager = new Qt4Manager(this); -+diff --git a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.h b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.h -+index 18781bc..84a5fbd 100644 -+--- a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.h -++++ b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.h -+@@ -49,6 +49,7 @@ class MakeStepFactory; -+ class GccParserFactory; -+ class MsvcParserFactory; -+ class EmbeddedPropertiesPage; -++class GettingStartedWelcomePlugin; -+ -+ class Qt4ProjectManagerPlugin : public ExtensionSystem::IPlugin -+ { -+@@ -81,6 +82,7 @@ private: -+ -+ QAction *m_runQMakeAction; -+ QAction *m_runQMakeActionContextMenu; -++ GettingStartedWelcomePlugin *m_welcomePlugin; -+ }; -+ -+ } // namespace Internal -+diff --git a/src/plugins/qt4projectmanager/qtversionmanager.cpp b/src/plugins/qt4projectmanager/qtversionmanager.cpp -+index aa65520..6bce576 100644 -+--- a/src/plugins/qt4projectmanager/qtversionmanager.cpp -++++ b/src/plugins/qt4projectmanager/qtversionmanager.cpp -+@@ -42,7 +42,6 @@ -+ #include <coreplugin/coreconstants.h> -+ #include <coreplugin/icore.h> -+ #include <coreplugin/modemanager.h> -+-#include <welcome/welcomemode.h> -+ #include <extensionsystem/pluginmanager.h> -+ #include <help/helpplugin.h> -+ #include <utils/qtcassert.h> -+@@ -51,6 +50,7 @@ -+ #include <QtCore/QProcess> -+ #include <QtCore/QSettings> -+ #include <QtCore/QTime> -++#include <QtCore/QTimer> -+ #include <QtGui/QApplication> -+ #include <QtGui/QDesktopServices> -+ -+@@ -122,7 +122,8 @@ QtVersionManager::QtVersionManager() -+ writeVersionsIntoSettings(); -+ -+ updateDocumentation(); -+- updateExamples(); -++ // cannot call from ctor, needs to get connected extenernally first -++ QTimer::singleShot(0, this, SLOT(updateExamples())); -+ } -+ -+ QtVersionManager::~QtVersionManager() -+@@ -185,9 +186,7 @@ void QtVersionManager::updateExamples() -+ if (version->hasDemos()) -+ demosPath = version->demosPath(); -+ if (!examplesPath.isEmpty() && !demosPath.isEmpty()) { -+- if (Welcome::WelcomeMode *welcomeMode = qobject_cast<Welcome::WelcomeMode*> -+- (Core::ICore::instance()->modeManager()->mode(Core::Constants::MODE_WELCOME))) -+- welcomeMode->updateExamples(examplesPath, demosPath, version->sourcePath()); -++ emit updateExamples(examplesPath, demosPath, version->sourcePath()); -+ return; -+ } -+ } -+diff --git a/src/plugins/qt4projectmanager/qtversionmanager.h b/src/plugins/qt4projectmanager/qtversionmanager.h -+index 0f2144c..fb7a33b 100644 -+--- a/src/plugins/qt4projectmanager/qtversionmanager.h -++++ b/src/plugins/qt4projectmanager/qtversionmanager.h -+@@ -201,6 +201,10 @@ public: -+ signals: -+ void defaultQtVersionChanged(); -+ void qtVersionsChanged(); -++ void updateExamples(QString, QString, QString); -++ -++private slots: -++ void updateExamples(); -+ private: -+ static QString findQMakeLine(const QString &directory); -+ static QString trimLine(const QString line); -+@@ -215,7 +219,6 @@ private: -+ void addNewVersionsFromInstaller(); -+ void updateSystemVersion(); -+ void updateDocumentation(); -+- void updateExamples(); -+ -+ static int indexOfVersionInList(const QtVersion * const version, const QList<QtVersion *> &list); -+ void updateUniqueIdToIndexMap(); -+diff --git a/src/plugins/welcome/communitywelcomepagewidget.cpp b/src/plugins/welcome/communitywelcomepagewidget.cpp -+new file mode 100644 -+index 0000000..d3127e0 -+--- /dev/null -++++ b/src/plugins/welcome/communitywelcomepagewidget.cpp -+@@ -0,0 +1,93 @@ -++/************************************************************************** -++** -++** This file is part of Qt Creator -++** -++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -++** -++** Contact: Nokia Corporation (qt-info@nokia.com) -++** -++** Commercial Usage -++** -++** Licensees holding valid Qt Commercial licenses may use this file in -++** accordance with the Qt Commercial License Agreement provided with the -++** Software or, alternatively, in accordance with the terms contained in -++** a written agreement between you and Nokia. -++** -++** GNU Lesser General Public License Usage -++** -++** Alternatively, this file may be used under the terms of the GNU Lesser -++** General Public License version 2.1 as published by the Free Software -++** Foundation and appearing in the file LICENSE.LGPL included in the -++** packaging of this file. Please review the following information to -++** ensure the GNU Lesser General Public License version 2.1 requirements -++** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -++** -++** If you are unsure which license is appropriate for your use, please -++** contact the sales department at http://www.qtsoftware.com/contact. -++** -++**************************************************************************/ -++ -++#include "communitywelcomepagewidget.h" -++#include "ui_communitywelcomepagewidget.h" -++ -++#include "rssfetcher.h" -++ -++#include <QtGui/QDesktopServices> -++ -++namespace Welcome { -++namespace Internal { -++ -++// TODO: remove -++static QString titleLabel(const QString &text) -++{ -++ // TODO: do not hardcode here -++ QString rc = QLatin1String( -++ "<html><head><style type=\"text/css\">p, li { white-space: pre-wrap; }</style></head>" -++ "<body style=\" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;\">" -++ "<p style=\" margin-top:16px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">" -++ "<span style=\" font-size:x-large; color:#555555;\">"); -++ rc += text; -++ rc += QLatin1String("</span></p><hr/></body></html>"); -++ return rc; -++} -++ -++CommunityWelcomePageWidget::CommunityWelcomePageWidget(QWidget *parent) : -++ QWidget(parent), -++ ui(new Ui::CommunityWelcomePageWidget), -++ m_rssFetcher(new RSSFetcher(7)) -++{ -++ ui->setupUi(this); -++ ui->labsTitleLabel->setText(titleLabel(tr("News From the Qt Labs"))); -++ ui->sitesTitleLabel->setText(titleLabel(tr("Qt Websites"))); -++ -++ connect(ui->newsTreeWidget, SIGNAL(activated(QString)), SLOT(slotUrlClicked(QString))); -++ connect(ui->sitesTreeWidget, SIGNAL(activated(QString)), SLOT(slotUrlClicked(QString))); -++ -++ connect(m_rssFetcher, SIGNAL(newsItemReady(QString, QString, QString)), -++ ui->newsTreeWidget, SLOT(slotAddNewsItem(QString, QString, QString))); -++ //: Add localized feed here only if one exists -++ m_rssFetcher->fetch(QUrl(tr("http://labs.trolltech.com/blogs/feed"))); -++ -++ ui->sitesTreeWidget->addItem(tr("Qt Home"), QLatin1String("http://qtsoftware.com")); -++ ui->sitesTreeWidget->addItem(tr("Qt Labs"), QLatin1String("http://labs.trolltech.com")); -++ ui->sitesTreeWidget->addItem(tr("Qt Git Hosting"), QLatin1String("http://qt.gitorious.org")); -++ ui->sitesTreeWidget->addItem(tr("Qt Centre"), QLatin1String("http://www.qtcentre.org")); -++ ui->sitesTreeWidget->addItem(tr("Qt for S60 at Forum Nokia"), QLatin1String("http://discussion.forum.nokia.com/forum/forumdisplay.php?f=196")); -++} -++ -++CommunityWelcomePageWidget::~CommunityWelcomePageWidget() -++{ -++ delete m_rssFetcher; -++ delete ui; -++} -++ -++ -++void CommunityWelcomePageWidget::slotUrlClicked(const QString &data) -++{ -++ QDesktopServices::openUrl(QUrl(data)); -++} -++ -++ -++ -++} // namespace Internal -++} // namespace Welcome -+diff --git a/src/plugins/welcome/communitywelcomepagewidget.h b/src/plugins/welcome/communitywelcomepagewidget.h -+new file mode 100644 -+index 0000000..d9c81b2 -+--- /dev/null -++++ b/src/plugins/welcome/communitywelcomepagewidget.h -+@@ -0,0 +1,64 @@ -++/************************************************************************** -++** -++** This file is part of Qt Creator -++** -++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -++** -++** Contact: Nokia Corporation (qt-info@nokia.com) -++** -++** Commercial Usage -++** -++** Licensees holding valid Qt Commercial licenses may use this file in -++** accordance with the Qt Commercial License Agreement provided with the -++** Software or, alternatively, in accordance with the terms contained in -++** a written agreement between you and Nokia. -++** -++** GNU Lesser General Public License Usage -++** -++** Alternatively, this file may be used under the terms of the GNU Lesser -++** General Public License version 2.1 as published by the Free Software -++** Foundation and appearing in the file LICENSE.LGPL included in the -++** packaging of this file. Please review the following information to -++** ensure the GNU Lesser General Public License version 2.1 requirements -++** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -++** -++** If you are unsure which license is appropriate for your use, please -++** contact the sales department at http://www.qtsoftware.com/contact. -++** -++**************************************************************************/ -++ -++#ifndef COMMUNITYWELCOMEPAGEWIDGET_H -++#define COMMUNITYWELCOMEPAGEWIDGET_H -++ -++#include <QWidget> -++ -++namespace Welcome { -++namespace Internal { -++ -++class RSSFetcher; -++ -++namespace Ui { -++ class CommunityWelcomePageWidget; -++} -++ -++class CommunityWelcomePageWidget : public QWidget -++{ -++ Q_OBJECT -++ -++public: -++ CommunityWelcomePageWidget(QWidget *parent = 0); -++ ~CommunityWelcomePageWidget(); -++ -++private slots: -++ void slotUrlClicked(const QString &data); -++ -++ -++private: -++ RSSFetcher *m_rssFetcher; -++ Ui::CommunityWelcomePageWidget *ui; -++}; -++ -++ -++} // namespace Internal -++} // namespace Welcome -++#endif // COMMUNITYWELCOMEPAGEWIDGET_H -+diff --git a/src/plugins/welcome/communitywelcomepagewidget.ui b/src/plugins/welcome/communitywelcomepagewidget.ui -+new file mode 100644 -+index 0000000..707412c -+--- /dev/null -++++ b/src/plugins/welcome/communitywelcomepagewidget.ui -+@@ -0,0 +1,190 @@ -++<?xml version="1.0" encoding="UTF-8"?> -++<ui version="4.0"> -++ <class>Welcome::Internal::CommunityWelcomePageWidget</class> -++ <widget class="QWidget" name="Welcome::Internal::CommunityWelcomePageWidget"> -++ <property name="geometry"> -++ <rect> -++ <x>0</x> -++ <y>0</y> -++ <width>667</width> -++ <height>352</height> -++ </rect> -++ </property> -++ <property name="windowTitle"> -++ <string>Form</string> -++ </property> -++ <layout class="QHBoxLayout" name="horizontalLayout"> -++ <item> -++ <widget class="QFrame" name="labsFrame"> -++ <property name="frameShape"> -++ <enum>QFrame::NoFrame</enum> -++ </property> -++ <property name="frameShadow"> -++ <enum>QFrame::Plain</enum> -++ </property> -++ <layout class="QVBoxLayout" name="verticalLayout_2"> -++ <item> -++ <widget class="QLabel" name="labsTitleLabel"> -++ <property name="sizePolicy"> -++ <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> -++ <horstretch>0</horstretch> -++ <verstretch>0</verstretch> -++ </sizepolicy> -++ </property> -++ <property name="alignment"> -++ <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> -++ </property> -++ </widget> -++ </item> -++ <item> -++ <widget class="Core::Utils::WelcomeModeTreeWidget" name="newsTreeWidget"> -++ <property name="sizePolicy"> -++ <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> -++ <horstretch>0</horstretch> -++ <verstretch>0</verstretch> -++ </sizepolicy> -++ </property> -++ <property name="minimumSize"> -++ <size> -++ <width>340</width> -++ <height>0</height> -++ </size> -++ </property> -++ <property name="focusPolicy"> -++ <enum>Qt::NoFocus</enum> -++ </property> -++ <property name="frameShape"> -++ <enum>QFrame::NoFrame</enum> -++ </property> -++ <property name="selectionMode"> -++ <enum>QAbstractItemView::NoSelection</enum> -++ </property> -++ <property name="verticalScrollMode"> -++ <enum>QAbstractItemView::ScrollPerPixel</enum> -++ </property> -++ <property name="rootIsDecorated"> -++ <bool>false</bool> -++ </property> -++ <property name="uniformRowHeights"> -++ <bool>true</bool> -++ </property> -++ <property name="allColumnsShowFocus"> -++ <bool>true</bool> -++ </property> -++ <property name="columnCount"> -++ <number>2</number> -++ </property> -++ <attribute name="headerVisible"> -++ <bool>false</bool> -++ </attribute> -++ <attribute name="headerDefaultSectionSize"> -++ <number>24</number> -++ </attribute> -++ <attribute name="headerMinimumSectionSize"> -++ <number>0</number> -++ </attribute> -++ <column> -++ <property name="text"> -++ <string notr="true">1</string> -++ </property> -++ </column> -++ <column> -++ <property name="text"> -++ <string notr="true">2</string> -++ </property> -++ </column> -++ </widget> -++ </item> -++ </layout> -++ </widget> -++ </item> -++ <item> -++ <widget class="QFrame" name="sitesFrame"> -++ <property name="frameShape"> -++ <enum>QFrame::NoFrame</enum> -++ </property> -++ <property name="frameShadow"> -++ <enum>QFrame::Plain</enum> -++ </property> -++ <layout class="QVBoxLayout" name="verticalLayout_3"> -++ <item> -++ <widget class="QLabel" name="sitesTitleLabel"> -++ <property name="sizePolicy"> -++ <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> -++ <horstretch>0</horstretch> -++ <verstretch>0</verstretch> -++ </sizepolicy> -++ </property> -++ <property name="alignment"> -++ <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> -++ </property> -++ </widget> -++ </item> -++ <item> -++ <widget class="Core::Utils::WelcomeModeTreeWidget" name="sitesTreeWidget"> -++ <property name="sizePolicy"> -++ <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> -++ <horstretch>0</horstretch> -++ <verstretch>0</verstretch> -++ </sizepolicy> -++ </property> -++ <property name="focusPolicy"> -++ <enum>Qt::NoFocus</enum> -++ </property> -++ <property name="frameShape"> -++ <enum>QFrame::NoFrame</enum> -++ </property> -++ <property name="selectionMode"> -++ <enum>QAbstractItemView::NoSelection</enum> -++ </property> -++ <property name="verticalScrollMode"> -++ <enum>QAbstractItemView::ScrollPerPixel</enum> -++ </property> -++ <property name="rootIsDecorated"> -++ <bool>false</bool> -++ </property> -++ <property name="uniformRowHeights"> -++ <bool>true</bool> -++ </property> -++ <property name="allColumnsShowFocus"> -++ <bool>true</bool> -++ </property> -++ <property name="columnCount"> -++ <number>2</number> -++ </property> -++ <attribute name="headerVisible"> -++ <bool>false</bool> -++ </attribute> -++ <attribute name="headerDefaultSectionSize"> -++ <number>24</number> -++ </attribute> -++ <attribute name="headerMinimumSectionSize"> -++ <number>0</number> -++ </attribute> -++ <column> -++ <property name="text"> -++ <string notr="true">1</string> -++ </property> -++ </column> -++ <column> -++ <property name="text"> -++ <string notr="true">2</string> -++ </property> -++ </column> -++ </widget> -++ </item> -++ </layout> -++ </widget> -++ </item> -++ </layout> -++ </widget> -++ <customwidgets> -++ <customwidget> -++ <class>Core::Utils::WelcomeModeTreeWidget</class> -++ <extends>QTreeWidget</extends> -++ <header>utils/welcomemodetreewidget.h</header> -++ </customwidget> -++ </customwidgets> -++ <resources/> -++ <connections/> -++</ui> -+diff --git a/src/plugins/welcome/communitywelcomepage.h b/src/plugins/welcome/communitywelcomepage.h -+new file mode 100644 -+index 0000000..7a0dd61 -+--- /dev/null -++++ b/src/plugins/welcome/communitywelcomepage.h -+@@ -0,0 +1,47 @@ -++/************************************************************************** -++** -++** This file is part of Qt Creator -++** -++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -++** -++** Contact: Nokia Corporation (qt-info@nokia.com) -++** -++** Commercial Usage -++** -++** Licensees holding valid Qt Commercial licenses may use this file in -++** accordance with the Qt Commercial License Agreement provided with the -++** Software or, alternatively, in accordance with the terms contained in -++** a written agreement between you and Nokia. -++** -++** GNU Lesser General Public License Usage -++** -++** Alternatively, this file may be used under the terms of the GNU Lesser -++** General Public License version 2.1 as published by the Free Software -++** Foundation and appearing in the file LICENSE.LGPL included in the -++** packaging of this file. Please review the following information to -++** ensure the GNU Lesser General Public License version 2.1 requirements -++** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -++** -++** If you are unsure which license is appropriate for your use, please -++** contact the sales department at http://www.qtsoftware.com/contact. -++** -++**************************************************************************/ -++ -++#include "communitywelcomepage.h" -++#include "communitywelcomepagewidget.h" -++ -++namespace Welcome { -++namespace Internal { -++ -++CommunityWelcomePage::CommunityWelcomePage() -++ : m_page(new CommunityWelcomePageWidget) -++{ -++} -++ -++QWidget* CommunityWelcomePage::page() -++{ -++ return m_page; -++} -++ -++} // namespace Internal -++} // namespace WelcomePlugin -+diff --git a/src/plugins/welcome/communitywelcomepage.h b/src/plugins/welcome/communitywelcomepage.h -+new file mode 100644 -+index 0000000..fd97e0e -+--- /dev/null -++++ b/src/plugins/welcome/communitywelcomepage.h -+@@ -0,0 +1,60 @@ -++/************************************************************************** -++** -++** This file is part of Qt Creator -++** -++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -++** -++** Contact: Nokia Corporation (qt-info@nokia.com) -++** -++** Commercial Usage -++** -++** Licensees holding valid Qt Commercial licenses may use this file in -++** accordance with the Qt Commercial License Agreement provided with the -++** Software or, alternatively, in accordance with the terms contained in -++** a written agreement between you and Nokia. -++** -++** GNU Lesser General Public License Usage -++** -++** Alternatively, this file may be used under the terms of the GNU Lesser -++** General Public License version 2.1 as published by the Free Software -++** Foundation and appearing in the file LICENSE.LGPL included in the -++** packaging of this file. Please review the following information to -++** ensure the GNU Lesser General Public License version 2.1 requirements -++** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -++** -++** If you are unsure which license is appropriate for your use, please -++** contact the sales department at http://www.qtsoftware.com/contact. -++** -++**************************************************************************/ -++ -++#ifndef COMMUNITYWELCOMEPAGE_H -++#define COMMUNITYWELCOMEPAGE_H -++ -++#include "welcome_global.h" -++ -++#include <extensionsystem/iwelcomepage.h> -++ -++namespace Welcome { -++namespace Internal { -++ -++class CommunityWelcomePageWidget; -++ -++class WELCOME_EXPORT CommunityWelcomePage : public ExtensionSystem::IWelcomePage -++{ -++ Q_OBJECT -++public: -++ CommunityWelcomePage(); -++ -++ QWidget *page(); -++ QString title() const { return tr("Community"); } -++ int priority() const { return 30; } -++ -++private: -++ CommunityWelcomePageWidget *m_page; -++ -++}; -++ -++} // namespace Internal -++} // namespace Welcome -++ -++#endif // COMMUNITYWELCOMEPAGE_H -+diff --git a/src/plugins/welcome/rssfetcher.cpp b/src/plugins/welcome/rssfetcher.cpp -+index f5fc756..7254c2d 100644 -+--- a/src/plugins/welcome/rssfetcher.cpp -++++ b/src/plugins/welcome/rssfetcher.cpp -+@@ -43,7 +43,7 @@ -+ #include <sys/utsname.h> -+ #endif -+ -+-using namespace Welcome; -++using namespace Welcome::Internal; -+ -+ static const QString getOsString() -+ { -+diff --git a/src/plugins/welcome/rssfetcher.h b/src/plugins/welcome/rssfetcher.h -+index 9267fdb..54ef87d 100644 -+--- a/src/plugins/welcome/rssfetcher.h -++++ b/src/plugins/welcome/rssfetcher.h -+@@ -35,6 +35,7 @@ -+ #include <QtNetwork/QHttp> -+ -+ namespace Welcome { -++namespace Internal { -+ -+ class RSSFetcher : public QObject -+ { -+@@ -69,6 +70,7 @@ private: -+ }; -+ -+ } // namespace Welcome -++} // namespace Internal -+ -+ #endif // RSSFETCHER_H -+ -+diff --git a/src/plugins/welcome/welcome.pro b/src/plugins/welcome/welcome.pro -+index 11d48e8..b5bbd1c 100644 -+--- a/src/plugins/welcome/welcome.pro -++++ b/src/plugins/welcome/welcome.pro -+@@ -5,11 +5,16 @@ include(../../qtcreatorplugin.pri) -+ include(../../plugins/coreplugin/coreplugin.pri) -+ HEADERS += welcomeplugin.h \ -+ welcomemode.h \ -+- rssfetcher.h -++ rssfetcher.h \ -++ communitywelcomepagewidget.h \ -++ communitywelcomepage.h -+ SOURCES += welcomeplugin.cpp \ -+ welcomemode.cpp \ -+- rssfetcher.cpp -+-FORMS += welcomemode.ui -++ rssfetcher.cpp \ -++ communitywelcomepagewidget.cpp \ -++ communitywelcomepage.h -++FORMS += welcomemode.ui \ -++ communitywelcomepagewidget.ui -+ RESOURCES += welcome.qrc -+ DEFINES += WELCOME_LIBRARY -+ OTHER_FILES += Welcome.pluginspec -+diff --git a/src/plugins/welcome/welcomemode.cpp b/src/plugins/welcome/welcomemode.cpp -+index bc6a876..b47cb36 100644 -+--- a/src/plugins/welcome/welcomemode.cpp -++++ b/src/plugins/welcome/welcomemode.cpp -+@@ -28,11 +28,10 @@ -+ **************************************************************************/ -+ -+ #include "welcomemode.h" -+-#include "rssfetcher.h" -++#include <extensionsystem/pluginmanager.h> -++#include <extensionsystem/iwelcomepage.h> -+ -+ #include <coreplugin/icore.h> -+-#include <coreplugin/dialogs/iwizard.h> -+- -+ #include <coreplugin/coreconstants.h> -+ #include <coreplugin/uniqueidmanager.h> -+ #include <coreplugin/modemanager.h> -+@@ -41,24 +40,38 @@ -+ #include <utils/styledbar.h> -+ #include <utils/welcomemodetreewidget.h> -+ -+-#include <QtGui/QDesktopServices> -+ #include <QtGui/QMouseEvent> -+ #include <QtGui/QScrollArea> -+ #include <QtGui/QButtonGroup> -++#include <QtGui/QDesktopServices> -++#include <QtGui/QToolButton> -+ -+-#include <QtCore/QDateTime> -+-#include <QtCore/QDir> -+-#include <QtCore/QFileInfo> -+-#include <QtCore/QDebug> -+-#include <QtCore/QUrl> -+ #include <QtCore/QSettings> -++#include <QtCore/QUrl> -++#include <QtCore/QDebug> -+ -+ #include <cstdlib> -+ -+ #include "ui_welcomemode.h" -+ -++using namespace ExtensionSystem; -++ -+ namespace Welcome { -+ -++// TODO: remove -++static QString titleLabel(const QString &text) -++{ -++ // TODO: do not hardcode here -++ QString rc = QLatin1String( -++ "<html><head><style type=\"text/css\">p, li { white-space: pre-wrap; }</style></head>" -++ "<body style=\" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;\">" -++ "<p style=\" margin-top:16px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">" -++ "<span style=\" font-size:x-large; color:#555555;\">"); -++ rc += text; -++ rc += QLatin1String("</span></p><hr/></body></html>"); -++ return rc; -++} -++ -+ struct WelcomeModePrivate -+ { -+ WelcomeModePrivate(); -+@@ -66,10 +79,9 @@ struct WelcomeModePrivate -+ QScrollArea *m_scrollArea; -+ QWidget *m_widget; -+ QWidget *m_welcomePage; -+- QButtonGroup *btnGrp; -+- Ui::WelcomePage ui; -+- RSSFetcher *rssFetcher; -+- WelcomeMode::WelcomePageData lastData; -++ QMap<QAbstractButton*, QWidget*> buttonMap; -++ QHBoxLayout * buttonLayout; -++ Ui::WelcomeMode ui; -+ int currentTip; -+ }; -+ -+@@ -77,46 +89,6 @@ WelcomeModePrivate::WelcomeModePrivate() -+ { -+ } -+ -+-// --- WelcomePageData -+- -+-bool WelcomeMode::WelcomePageData::operator==(const WelcomePageData &rhs) const -+-{ -+- return previousSession == rhs.previousSession -+- && activeSession == rhs.activeSession -+- && sessionList == rhs.sessionList -+- && projectList == rhs.projectList; -+-} -+- -+-bool WelcomeMode::WelcomePageData::operator!=(const WelcomePageData &rhs) const -+-{ -+- return previousSession != rhs.previousSession -+- || activeSession != rhs.activeSession -+- || sessionList != rhs.sessionList -+- || projectList != rhs.projectList; -+-} -+- -+-QDebug operator<<(QDebug dgb, const WelcomeMode::WelcomePageData &d) -+-{ -+- dgb.nospace() << "PreviousSession=" << d.previousSession -+- << " activeSession=" << d.activeSession -+- << " sessionList=" << d.sessionList -+- << " projectList=" << d.projectList; -+- return dgb; -+-} -+- -+-// Format a title + ruler for title labels -+-static inline QString titleLabel(const QString &text) -+-{ -+- QString rc = QLatin1String( -+- "<html><head><style type=\"text/css\">p, li { white-space: pre-wrap; }</style></head>" -+- "<body style=\" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;\">" -+- "<p style=\" margin-top:16px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">" -+- "<span style=\" font-size:x-large; color:#555555;\">"); -+- rc += text; -+- rc += QLatin1String("</span></p><hr/></body></html>"); -+- return rc; -+-} -+- -+ // --- WelcomeMode -+ WelcomeMode::WelcomeMode() : -+ m_d(new WelcomeModePrivate) -+@@ -126,22 +98,8 @@ WelcomeMode::WelcomeMode() : -+ l->setMargin(0); -+ l->setSpacing(0); -+ l->addWidget(new Core::Utils::StyledBar(m_d->m_widget)); -+- m_d->rssFetcher = new RSSFetcher(7, this); -+ m_d->m_welcomePage = new QWidget(m_d->m_widget); -+ m_d->ui.setupUi(m_d->m_welcomePage); -+- m_d->ui.projTitleLabel->setText(titleLabel(tr("Open Recent Project"))); -+- m_d->ui.recentSessionsTitleLabel->setText(titleLabel(tr("Resume Session"))); -+- m_d->ui.tutorialsTitleLabel->setText(titleLabel(tr("Tutorials"))); -+- m_d->ui.demoTitleLabel->setText(titleLabel(tr("Explore Qt Examples"))); -+- m_d->ui.didYouKnowTitleLabel->setText(titleLabel(tr("Did You Know?"))); -+- m_d->ui.labsTitleLabel->setText(titleLabel(tr("News From the Qt Labs"))); -+- m_d->ui.sitesTitleLabel->setText(titleLabel(tr("Qt Websites"))); -+- m_d->ui.sessTreeWidget->viewport()->setAutoFillBackground(false); -+- m_d->ui.projTreeWidget->viewport()->setAutoFillBackground(false); -+- m_d->ui.newsTreeWidget->viewport()->setAutoFillBackground(false); -+- m_d->ui.sitesTreeWidget->viewport()->setAutoFillBackground(false); -+- m_d->ui.tutorialTreeWidget->viewport()->setAutoFillBackground(false); -+- m_d->ui.didYouKnowTextBrowser->viewport()->setAutoFillBackground(false); -+ m_d->ui.helpUsLabel->setAttribute(Qt::WA_LayoutUsesWidgetRect); -+ m_d->ui.feedbackButton->setAttribute(Qt::WA_LayoutUsesWidgetRect); -+ l->addWidget(m_d->m_welcomePage); -+@@ -151,71 +109,17 @@ WelcomeMode::WelcomeMode() : -+ m_d->m_scrollArea->setWidget(m_d->m_widget); -+ m_d->m_scrollArea->setWidgetResizable(true); -+ -+- updateWelcomePage(WelcomePageData()); -+- -+- m_d->btnGrp = new QButtonGroup(this); -+- m_d->btnGrp->addButton(m_d->ui.gettingStartedSectButton, 0); -+- m_d->btnGrp->addButton(m_d->ui.developSectButton, 1); -+- m_d->btnGrp->addButton(m_d->ui.communitySectButton, 2); -+- -+- connect(m_d->btnGrp, SIGNAL(buttonClicked(int)), m_d->ui.stackedWidget, SLOT(setCurrentIndex(int))); -++ PluginManager *pluginManager = PluginManager::instance(); -++ connect(pluginManager, SIGNAL(objectAdded(QObject*)), SLOT(welcomePluginAdded(QObject))); -+ -+ connect(m_d->ui.feedbackButton, SIGNAL(clicked()), SLOT(slotFeedback())); -+- connect(m_d->ui.manageSessionsButton, SIGNAL(clicked()), SIGNAL(manageSessions())); -+- connect(m_d->ui.createNewProjectButton, SIGNAL(clicked()), SLOT(slotCreateNewProject())); -+- connect(m_d->ui.sessTreeWidget, SIGNAL(activated(QString)), SLOT(slotSessionClicked(QString))); -+- connect(m_d->ui.projTreeWidget, SIGNAL(activated(QString)), SLOT(slotProjectClicked(QString))); -+- connect(m_d->ui.newsTreeWidget, SIGNAL(activated(QString)), SLOT(slotUrlClicked(QString))); -+- connect(m_d->ui.sitesTreeWidget, SIGNAL(activated(QString)), SLOT(slotUrlClicked(QString))); -+- connect(m_d->ui.tutorialTreeWidget, SIGNAL(activated(QString)), SIGNAL(openHelpPage(const QString&))); -+- connect(m_d->ui.openExampleButton, SIGNAL(clicked()), SLOT(slotOpenExample())); -+- connect(m_d->ui.examplesComboBox, SIGNAL(currentIndexChanged(int)), SLOT(slotEnableExampleButton(int))); -+- -+- connect(m_d->rssFetcher, SIGNAL(newsItemReady(QString, QString, QString)), -+- m_d->ui.newsTreeWidget, SLOT(slotAddNewsItem(QString, QString, QString))); -+- -+- //: Add localized feed here only if one exists -+- m_d->rssFetcher->fetch(QUrl(tr("http://labs.trolltech.com/blogs/feed"))); -+- -+- m_d->ui.sitesTreeWidget->addItem(tr("Qt Home"), QLatin1String("http://qtsoftware.com")); -+- m_d->ui.sitesTreeWidget->addItem(tr("Qt Labs"), QLatin1String("http://labs.trolltech.com")); -+- m_d->ui.sitesTreeWidget->addItem(tr("Qt Git Hosting"), QLatin1String("http://qt.gitorious.org")); -+- m_d->ui.sitesTreeWidget->addItem(tr("Qt Centre"), QLatin1String("http://www.qtcentre.org")); -+- m_d->ui.sitesTreeWidget->addItem(tr("Qt for S60 at Forum Nokia"), QLatin1String("http://discussion.forum.nokia.com/forum/forumdisplay.php?f=196")); -+- -+- m_d->ui.tutorialTreeWidget->addItem(tr("<b>Qt Creator - A quick tour</b>"), -+- QString("qthelp://com.nokia.qtcreator.%1%2/doc/index.html").arg(IDE_VERSION_MAJOR).arg(IDE_VERSION_MINOR)); -+- m_d->ui.tutorialTreeWidget->addItem(tr("Creating an address book"), -+- QLatin1String("qthelp://com.nokia.qtcreator/doc/tutorials-addressbook-sdk.html")); -+- m_d->ui.tutorialTreeWidget->addItem(tr("Understanding widgets"), -+- QLatin1String("qthelp://com.trolltech.qt/qdoc/widgets-tutorial.html")); -+- m_d->ui.tutorialTreeWidget->addItem(tr("Building with qmake"), -+- QLatin1String("qthelp://com.trolltech.qmake/qdoc/qmake-tutorial.html")); -+- m_d->ui.tutorialTreeWidget->addItem(tr("Writing test cases"), -+- QLatin1String("qthelp://com.trolltech.qt/qdoc/qtestlib-tutorial.html")); -+- -+- srand(QDateTime::currentDateTime().toTime_t()); -+- QStringList tips = tipsOfTheDay(); -+- m_d->currentTip = rand()%tips.count(); -+- -+- QTextDocument *doc = m_d->ui.didYouKnowTextBrowser->document(); -+- doc->setDefaultStyleSheet("a:link {color:black;}"); -+- m_d->ui.didYouKnowTextBrowser->setDocument(doc); -+- m_d->ui.didYouKnowTextBrowser->setText(tips.at(m_d->currentTip)); -+- -+- connect(m_d->ui.nextTipBtn, SIGNAL(clicked()), this, SLOT(slotNextTip())); -+- connect(m_d->ui.prevTipBtn, SIGNAL(clicked()), this, SLOT(slotPrevTip())); -+ -+- QSettings *settings = Core::ICore::instance()->settings(); -+- int id = settings->value("General/WelcomeTab", 0).toInt(); -+- m_d->btnGrp->button(id)->setChecked(true); -+- m_d->ui.stackedWidget->setCurrentIndex(id); -+ } -+ -+ WelcomeMode::~WelcomeMode() -+ { -+ QSettings *settings = Core::ICore::instance()->settings(); -+- settings->setValue("General/WelcomeTab", m_d->btnGrp->checkedId()); -++ settings->setValue("General/WelcomeTab", m_d->ui.stackedWidget->currentIndex()); -+ delete m_d->m_widget; -+ delete m_d; -+ } -+@@ -252,150 +156,79 @@ QList<int> WelcomeMode::context() const -+ return contexts; -+ } -+ -+-void WelcomeMode::updateWelcomePage(const WelcomePageData &welcomePageData) -+-{ -+- // Update only if data are modified -+- if (welcomePageData == m_d->lastData) -+- return; -+- m_d->lastData = welcomePageData; -+- -+- m_d->m_widget->setUpdatesEnabled(false); -+- m_d->ui.sessTreeWidget->clear(); -+- m_d->ui.projTreeWidget->clear(); -+- -+- if (welcomePageData.sessionList.count() > 0) { -+- foreach (const QString &s, welcomePageData.sessionList) { -+- QString str = s; -+- if (s == welcomePageData.previousSession) -+- str = tr("%1 (last session)").arg(s); -+- m_d->ui.sessTreeWidget->addItem(str, s); -+- } -+- m_d->ui.sessTreeWidget->updateGeometry(); -+- m_d->ui.sessTreeWidget->show(); -+- } else { -+- m_d->ui.sessTreeWidget->hide(); -+- } -+- -+- typedef QPair<QString, QString> QStringPair; -+- if (welcomePageData.projectList.count() > 0) { -+- foreach (const QStringPair &it, welcomePageData.projectList) { -+- QTreeWidgetItem *item = m_d->ui.projTreeWidget->addItem(it.second, it.first); -+- const QFileInfo fi(it.first); -+- item->setToolTip(1, QDir::toNativeSeparators(fi.absolutePath())); -+- } -+- } else { -+- m_d->ui.projTreeWidget->hide(); -+- } -+- m_d->ui.projTreeWidget->updateGeometry(); -+- m_d->m_widget->setUpdatesEnabled(true); -+-} -+- -+-void WelcomeMode::activateEditMode() -+-{ -+- Core::ModeManager *modeManager = Core::ModeManager::instance(); -+- if (modeManager->currentMode() == this) -+- modeManager->activateMode(Core::Constants::MODE_EDIT); -+-} -+- -+-void WelcomeMode::slotSessionClicked(const QString &data) -+-{ -+- emit requestSession(data); -+- activateEditMode(); -+-} -+- -+-void WelcomeMode::slotProjectClicked(const QString &data) -+-{ -+- emit requestProject(data); -+- activateEditMode(); -+-} -+- -+-void WelcomeMode::slotUrlClicked(const QString &data) -++bool sortFunction(IWelcomePage * a, IWelcomePage *b) -+ { -+- QDesktopServices::openUrl(QUrl(data)); -++ return a->priority() < b->priority(); -+ } -+ -+-void WelcomeMode::updateExamples(const QString& examplePath, const QString& demosPath, const QString &sourcePath) -++void WelcomeMode::initPlugins() -+ { -+- QString demoxml = demosPath + "/qtdemo/xml/examples.xml"; -+- if (!QFile::exists(demoxml)) { -+- demoxml = sourcePath + "/demos/qtdemo/xml/examples.xml"; -+- if (!QFile::exists(demoxml)) -+- return; -++ m_d->buttonLayout = new QHBoxLayout(m_d->ui.navFrame); -++ m_d->buttonLayout->setMargin(0); -++ m_d->buttonLayout->setSpacing(0); -++ delete m_d->ui.stackedWidget->currentWidget(); -++ QList<IWelcomePage*> plugins = PluginManager::instance()->getObjects<IWelcomePage>(); -++ qSort(plugins.begin(), plugins.end(), &sortFunction); -++ foreach (IWelcomePage* plugin, plugins) { -++ QToolButton * btn = new QToolButton; -++ btn->setCheckable(true); -++ btn->setText(plugin->title()); -++ btn->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); -++ btn->setAutoExclusive(true); -++ connect (btn, SIGNAL(clicked()), SLOT(showClickedPage())); -++ m_d->ui.stackedWidget->addWidget(plugin->page()); -++ m_d->buttonLayout->addWidget(btn); -++ m_d->buttonMap.insert(btn, plugin->page()); -+ } -++ m_d->buttonLayout->addSpacing(5); -+ -+- QFile description(demoxml); -+- if (!description.open(QFile::ReadOnly)) -+- return; -+- -+- m_d->ui.examplesComboBox->clear(); -+- m_d->ui.examplesComboBox->setEnabled(true); -+- -+- m_d->ui.examplesComboBox->addItem(tr("Choose an example...")); -+- QFont f = widget()->font(); -+- f.setItalic(true); -+- m_d->ui.examplesComboBox->setItemData(0, f, Qt::FontRole); -+- f.setItalic(false); -+- bool inExamples = false; -+- QString dirName; -+- QXmlStreamReader reader(&description); -+- while (!reader.atEnd()) { -+- switch (reader.readNext()) { -+- case QXmlStreamReader::StartElement: -+- if (reader.name() == "category") { -+- QString name = reader.attributes().value(QLatin1String("name")).toString(); -+- if (name.contains("tutorial")) -+- break; -+- dirName = reader.attributes().value(QLatin1String("dirname")).toString(); -+- m_d->ui.examplesComboBox->addItem(name); -+- f.setBold(true); -+- m_d->ui.examplesComboBox->setItemData(m_d->ui.examplesComboBox->count()-1, f, Qt::FontRole); -+- f.setBold(false); -+- inExamples = true; -+- } -+- if (inExamples && reader.name() == "example") { -+- QString name = reader.attributes().value(QLatin1String("name")).toString(); -+- QString fn = reader.attributes().value(QLatin1String("filename")).toString(); -+- QString relativeProPath = '/' + dirName + '/' + fn + '/' + fn + ".pro"; -+- QString fileName = examplePath + relativeProPath; -+- if (!QFile::exists(fileName)) -+- fileName = sourcePath + "/examples" + relativeProPath; -+- QString helpPath = "qthelp://com.trolltech.qt/qdoc/" + dirName.replace("/", "-") + "-" + fn + ".html"; -+- -+- m_d->ui.examplesComboBox->addItem(" " + name, fileName); -+- m_d->ui.examplesComboBox->setItemData(m_d->ui.examplesComboBox->count()-1, helpPath, Qt::UserRole+1); -++ QSettings *settings = Core::ICore::instance()->settings(); -++ int tabId = settings->value("General/WelcomeTab", 0).toInt(); -++ -++ int pluginCount = m_d->ui.stackedWidget->count(); -++ if (tabId < pluginCount) { -++ //qDebug() << tabId; -++ m_d->ui.stackedWidget->setCurrentIndex(tabId); -++ QMapIterator<QAbstractButton*, QWidget*> it(m_d->buttonMap); -++ while (it.hasNext()) -++ if (it.next().value() == m_d->ui.stackedWidget->currentWidget()) { -++ it.key()->setChecked(true); -++ break; -+ } -+- break; -+- case QXmlStreamReader::EndElement: -+- if (reader.name() == "category") -+- inExamples = false; -+- break; -+- default: -+- break; -+- } -+ } -++ -+ } -+ -+-void WelcomeMode::slotEnableExampleButton(int index) -+-{ -+- QString fileName = m_d->ui.examplesComboBox->itemData(index, Qt::UserRole).toString(); -+- m_d->ui.openExampleButton->setEnabled(!fileName.isEmpty()); -++void WelcomeMode::welcomePluginAdded(QObject *obj) -++{ -++ if (IWelcomePage *plugin = qobject_cast<IWelcomePage*>(obj)) -++ { -++ QToolButton * btn = new QToolButton; -++ btn->setCheckable(true); -++ btn->setAutoExclusive(true); -++ btn->setText(plugin->title()); -++ btn->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); -++ connect (btn, SIGNAL(clicked()), SLOT(showClickedPage())); -++ int insertPos = 0; -++ QList<IWelcomePage*> plugins = PluginManager::instance()->getObjects<IWelcomePage>(); -++ foreach (IWelcomePage* p, plugins) { -++ if (plugin->priority() < p->priority()) -++ insertPos++; -++ else -++ break; -++ } -++ m_d->ui.stackedWidget->insertWidget(insertPos, plugin->page()); -++ m_d->buttonMap.insert(btn, plugin->page()); -++ m_d->buttonLayout->insertWidget(insertPos, btn); -++ } -+ } -+ -+-void WelcomeMode::slotOpenExample() -++void WelcomeMode::showClickedPage() -+ { -+- QComboBox *box = m_d->ui.examplesComboBox; -+- QString proFile = box->itemData(box->currentIndex(), Qt::UserRole).toString(); -+- QString helpFile = box->itemData(box->currentIndex(), Qt::UserRole + 1).toString(); -+- QStringList files; -+- QFileInfo fi(proFile); -+- QString tryFile = fi.path() + "/main.cpp"; -+- files << proFile; -+- if(!QFile::exists(tryFile)) -+- tryFile = fi.path() + '/' + fi.baseName() + ".cpp"; -+- if(QFile::exists(tryFile)) -+- files << tryFile; -+- Core::ICore::instance()->openFiles(files); -+- emit openContextHelpPage(helpFile); -++ QAbstractButton *btn = qobject_cast<QAbstractButton*>(sender()); -++ QMap<QAbstractButton*, QWidget*>::iterator it = m_d->buttonMap.find(btn); -++ if (it.value()) -++ m_d->ui.stackedWidget->setCurrentWidget(it.value()); -+ } -+ -+ void WelcomeMode::slotFeedback() -+@@ -404,71 +237,5 @@ void WelcomeMode::slotFeedback() -+ "http://qtsoftware.com/forms/feedback-forms/qt-creator-user-feedback/view"))); -+ } -+ -+-void WelcomeMode::slotCreateNewProject() -+-{ -+- Core::ICore::instance()->showNewItemDialog(tr("New Project..."), -+- Core::IWizard::wizardsOfKind(Core::IWizard::ProjectWizard)); -+-} -+- -+-void WelcomeMode::slotNextTip() -+-{ -+- QStringList tips = tipsOfTheDay(); -+- m_d->currentTip = ((m_d->currentTip+1)%tips.count()); -+- m_d->ui.didYouKnowTextBrowser->setText(tips.at(m_d->currentTip)); -+-} -+- -+-void WelcomeMode::slotPrevTip() -+-{ -+- QStringList tips = tipsOfTheDay(); -+- m_d->currentTip = ((m_d->currentTip-1)+tips.count())%tips.count(); -+- m_d->ui.didYouKnowTextBrowser->setText(tips.at(m_d->currentTip)); -+-} -+- -+-QStringList WelcomeMode::tipsOfTheDay() -+-{ -+- static QStringList tips; -+- if (tips.isEmpty()) { -+- QString altShortcut = -+-#ifdef Q_WS_MAC -+- tr("Cmd", "Shortcut key"); -+-#else -+- tr("Alt", "Shortcut key"); -+-#endif -+- tips.append(tr("You can switch between Qt Creator's modes using <tt>Ctrl+number</tt>:<ul>" -+- "<li>1 - Welcome</li><li>2 - Edit</li><li>3 - Debug</li><li>4 - Projects</li><li>5 - Help</li>" -+- "<li></li><li>6 - Output</li></ul>")); -+- //:%1 gets replaced by Alt (Win/Unix) or Cmd (Mac) -+- tips.append(tr("You can show and hide the side bar using <tt>%1+0<tt>.").arg(altShortcut)); -+- tips.append(tr("You can fine tune the <tt>Find</tt> function by selecting "Whole Words" " -+- "or "Case Sensitive". Simply click on the icons on the right end of the line edit.")); -+- tips.append(tr("If you add <a href=\"qthelp://com.nokia.qtcreator/doc/creator-external-library-handling.html\"" -+- ">external libraries</a>, Qt Creator will automatically offer syntax highlighting " -+- "and code completion.")); -+- tips.append(tr("The code completion is CamelCase-aware. For example, to complete <tt>namespaceUri</tt> " -+- "you can just type <tt>nU</tt> and hit <tt>Ctrl+Space</tt>.")); -+- tips.append(tr("You can force code completion at any time using <tt>Ctrl+Space</tt>.")); -+- tips.append(tr("You can start Qt Creator with a session by calling <tt>qtcreator <sessionname></tt>.")); -+- tips.append(tr("You can return to edit mode from any other mode at any time by hitting <tt>Escape</tt>.")); -+- //:%1 gets replaced by Alt (Win/Unix) or Cmd (Mac) -+- tips.append(tr("You can switch between the output pane by hitting <tt>%1+n</tt> where n is the number denoted " -+- "on the buttons at the window bottom:" -+- "<ul><li>1 - Build Issues</li><li>2 - Search Results</li><li>3 - Application Output</li>" -+- "<li>4 - Compile Output</li></ul>").arg(altShortcut)); -+- tips.append(tr("You can quickly search methods, classes, help and more using the " -+- "<a href=\"qthelp://com.nokia.qtcreator/doc/creator-navigation.html\">Locator bar</a> (<tt>Ctrl+K</tt>).")); -+- tips.append(tr("You can add custom build steps in the " -+- "<a href=\"qthelp://com.nokia.qtcreator/doc/creator-build-settings.html\">build settings</a>.")); -+- tips.append(tr("Within a session, you can add " -+- "<a href=\"qthelp://com.nokia.qtcreator/doc/creator-build-settings.html#dependencies\">dependencies</a> between projects.")); -+- tips.append(tr("You can set the preferred editor encoding for every project in <tt>Projects -> Editor Settings -> Default Encoding</tt>.")); -+- tips.append(tr("You can modify the binary that is being executed when you press the <tt>Run</tt> button: Add a <tt>Custom Executable</tt> " -+- "by clicking the <tt>+</tt> button in <tt>Projects -> Run Settings -> Run Configuration</tt> and then select the new " -+- "target in the combo box.")); -+- tips.append(tr("You can use Qt Creator with a number of <a href=\"qthelp://com.nokia.qtcreator/doc/creator-version-control.html\">" -+- "revision control systems</a> such as Subversion, Perforce and Git.")); -+- tips.append(tr("In the editor, <tt>F2</tt> toggles declaration and definition while <tt>F4</tt> toggles header file and source file.")); -+- } -+- return tips; -+-} -+ -+ } // namespace Welcome -+diff --git a/src/plugins/welcome/welcomemode.h b/src/plugins/welcome/welcomemode.h -+index 0555ce6..1576d24 100644 -+--- a/src/plugins/welcome/welcomemode.h -++++ b/src/plugins/welcome/welcomemode.h -+@@ -54,18 +54,6 @@ public: -+ WelcomeMode(); -+ ~WelcomeMode(); -+ -+- struct WelcomePageData{ -+- bool operator==(const WelcomePageData &rhs) const; -+- bool operator!=(const WelcomePageData &rhs) const; -+- -+- QString previousSession; -+- QString activeSession; -+- QStringList sessionList; -+- QList<QPair<QString, QString> > projectList; // pair of filename, displayname -+- }; -+- -+- void updateWelcomePage(const WelcomePageData &welcomePageData); -+- -+ // IMode -+ QString name() const; -+ QIcon icon() const; -+@@ -75,31 +63,14 @@ public: -+ QList<int> context() const; -+ void activated(); -+ QString contextHelpId() const { return QLatin1String("Qt Creator"); } -+- -+- void updateExamples(const QString& examplePath, const QString& demosPath, const QString &sourcePath); -+- -+-signals: -+- void requestProject(const QString &project); -+- void requestSession(const QString &session); -+- void openHelpPage(const QString& url); -+- void openContextHelpPage(const QString& url); -+- void manageSessions(); -++ void initPlugins(); -+ -+ private slots: -+ void slotFeedback(); -+- void slotSessionClicked(const QString &data); -+- void slotProjectClicked(const QString &data); -+- void slotUrlClicked(const QString &data); -+- void slotEnableExampleButton(int); -+- void slotOpenExample(); -+- void slotCreateNewProject(); -+- void slotNextTip(); -+- void slotPrevTip(); -++ void welcomePluginAdded(QObject*); -++ void showClickedPage(); -+ -+ private: -+- void activateEditMode(); -+- QStringList tipsOfTheDay(); -+- -+ WelcomeModePrivate *m_d; -+ }; -+ -+diff --git a/src/plugins/welcome/welcomemode.ui b/src/plugins/welcome/welcomemode.ui -+index c70aabb..e1c18bd 100644 -+--- a/src/plugins/welcome/welcomemode.ui -++++ b/src/plugins/welcome/welcomemode.ui -+@@ -1,7 +1,7 @@ -+ <?xml version="1.0" encoding="UTF-8"?> -+ <ui version="4.0"> -+- <class>Welcome::WelcomePage</class> -+- <widget class="QWidget" name="Core::Utils::WelcomePage"> -++ <class>Welcome::WelcomeMode</class> -++ <widget class="QWidget" name="Welcome::WelcomeMode"> -+ <property name="geometry"> -+ <rect> -+ <x>0</x> -+@@ -172,6 +172,12 @@ QToolButton:pressed, QPushButton:pressed{ -+ <verstretch>0</verstretch> -+ </sizepolicy> -+ </property> -++ <property name="minimumSize"> -++ <size> -++ <width>0</width> -++ <height>10</height> -++ </size> -++ </property> -+ <property name="font"> -+ <font> -+ <weight>50</weight> -+@@ -238,129 +244,6 @@ QToolButton:pressed { -+ <property name="frameShadow"> -+ <enum>QFrame::Plain</enum> -+ </property> -+- <layout class="QGridLayout" name="gridLayout_2"> -+- <property name="margin"> -+- <number>0</number> -+- </property> -+- <property name="spacing"> -+- <number>0</number> -+- </property> -+- <item row="0" column="0"> -+- <widget class="QToolButton" name="gettingStartedSectButton"> -+- <property name="enabled"> -+- <bool>true</bool> -+- </property> -+- <property name="sizePolicy"> -+- <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> -+- <horstretch>0</horstretch> -+- <verstretch>0</verstretch> -+- </sizepolicy> -+- </property> -+- <property name="minimumSize"> -+- <size> -+- <width>0</width> -+- <height>0</height> -+- </size> -+- </property> -+- <property name="font"> -+- <font> -+- <pointsize>-1</pointsize> -+- </font> -+- </property> -+- <property name="styleSheet"> -+- <string notr="true"/> -+- </property> -+- <property name="text"> -+- <string>Getting Started</string> -+- </property> -+- <property name="checkable"> -+- <bool>true</bool> -+- </property> -+- <property name="checked"> -+- <bool>true</bool> -+- </property> -+- <property name="autoExclusive"> -+- <bool>false</bool> -+- </property> -+- </widget> -+- </item> -+- <item row="0" column="1"> -+- <widget class="QToolButton" name="developSectButton"> -+- <property name="sizePolicy"> -+- <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> -+- <horstretch>0</horstretch> -+- <verstretch>0</verstretch> -+- </sizepolicy> -+- </property> -+- <property name="minimumSize"> -+- <size> -+- <width>0</width> -+- <height>0</height> -+- </size> -+- </property> -+- <property name="font"> -+- <font> -+- <pointsize>-1</pointsize> -+- </font> -+- </property> -+- <property name="text"> -+- <string>Develop</string> -+- </property> -+- <property name="checkable"> -+- <bool>true</bool> -+- </property> -+- <property name="autoExclusive"> -+- <bool>false</bool> -+- </property> -+- </widget> -+- </item> -+- <item row="0" column="2"> -+- <widget class="QToolButton" name="communitySectButton"> -+- <property name="sizePolicy"> -+- <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> -+- <horstretch>0</horstretch> -+- <verstretch>0</verstretch> -+- </sizepolicy> -+- </property> -+- <property name="minimumSize"> -+- <size> -+- <width>0</width> -+- <height>0</height> -+- </size> -+- </property> -+- <property name="font"> -+- <font> -+- <pointsize>-1</pointsize> -+- </font> -+- </property> -+- <property name="styleSheet"> -+- <string notr="true"/> -+- </property> -+- <property name="text"> -+- <string>Community</string> -+- </property> -+- <property name="checkable"> -+- <bool>true</bool> -+- </property> -+- </widget> -+- </item> -+- <item row="0" column="3"> -+- <spacer name="horizontalSpacer_2"> -+- <property name="orientation"> -+- <enum>Qt::Horizontal</enum> -+- </property> -+- <property name="sizeType"> -+- <enum>QSizePolicy::Fixed</enum> -+- </property> -+- <property name="sizeHint" stdset="0"> -+- <size> -+- <width>5</width> -+- <height>20</height> -+- </size> -+- </property> -+- </spacer> -+- </item> -+- </layout> -+ </widget> -+ </item> -+ <item> -+@@ -368,575 +251,7 @@ QToolButton:pressed { -+ <property name="currentIndex"> -+ <number>0</number> -+ </property> -+- <widget class="QWidget" name="gettingStartedPage"> -+- <layout class="QGridLayout" name="gridLayout_9"> -+- <property name="leftMargin"> -+- <number>18</number> -+- </property> -+- <property name="topMargin"> -+- <number>18</number> -+- </property> -+- <property name="rightMargin"> -+- <number>12</number> -+- </property> -+- <property name="bottomMargin"> -+- <number>18</number> -+- </property> -+- <property name="spacing"> -+- <number>24</number> -+- </property> -+- <item row="0" column="0" rowspan="2"> -+- <widget class="QFrame" name="tutorialsFrame"> -+- <property name="sizePolicy"> -+- <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> -+- <horstretch>0</horstretch> -+- <verstretch>0</verstretch> -+- </sizepolicy> -+- </property> -+- <property name="maximumSize"> -+- <size> -+- <width>400</width> -+- <height>16777215</height> -+- </size> -+- </property> -+- <property name="styleSheet"> -+- <string/> -+- </property> -+- <layout class="QGridLayout" name="gridLayout_6"> -+- <item row="0" column="0"> -+- <widget class="QLabel" name="tutorialsTitleLabel"> -+- <property name="sizePolicy"> -+- <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> -+- <horstretch>0</horstretch> -+- <verstretch>0</verstretch> -+- </sizepolicy> -+- </property> -+- <property name="alignment"> -+- <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> -+- </property> -+- </widget> -+- </item> -+- <item row="1" column="0"> -+- <widget class="Core::Utils::WelcomeModeTreeWidget" name="tutorialTreeWidget"> -+- <property name="sizePolicy"> -+- <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> -+- <horstretch>0</horstretch> -+- <verstretch>0</verstretch> -+- </sizepolicy> -+- </property> -+- <property name="focusPolicy"> -+- <enum>Qt::NoFocus</enum> -+- </property> -+- <property name="frameShape"> -+- <enum>QFrame::NoFrame</enum> -+- </property> -+- <property name="selectionMode"> -+- <enum>QAbstractItemView::NoSelection</enum> -+- </property> -+- <property name="verticalScrollMode"> -+- <enum>QAbstractItemView::ScrollPerPixel</enum> -+- </property> -+- <property name="rootIsDecorated"> -+- <bool>false</bool> -+- </property> -+- <property name="uniformRowHeights"> -+- <bool>true</bool> -+- </property> -+- <property name="allColumnsShowFocus"> -+- <bool>true</bool> -+- </property> -+- <property name="columnCount"> -+- <number>2</number> -+- </property> -+- <attribute name="headerVisible"> -+- <bool>false</bool> -+- </attribute> -+- <attribute name="headerDefaultSectionSize"> -+- <number>24</number> -+- </attribute> -+- <attribute name="headerMinimumSectionSize"> -+- <number>0</number> -+- </attribute> -+- <column> -+- <property name="text"> -+- <string notr="true">1</string> -+- </property> -+- </column> -+- <column> -+- <property name="text"> -+- <string notr="true">2</string> -+- </property> -+- </column> -+- </widget> -+- </item> -+- </layout> -+- </widget> -+- </item> -+- <item row="0" column="1"> -+- <widget class="QFrame" name="demosExamplesFrame"> -+- <property name="sizePolicy"> -+- <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> -+- <horstretch>0</horstretch> -+- <verstretch>0</verstretch> -+- </sizepolicy> -+- </property> -+- <property name="maximumSize"> -+- <size> -+- <width>400</width> -+- <height>16777215</height> -+- </size> -+- </property> -+- <property name="styleSheet"> -+- <string/> -+- </property> -+- <layout class="QGridLayout" name="gridLayout_8"> -+- <property name="rightMargin"> -+- <number>8</number> -+- </property> -+- <property name="horizontalSpacing"> -+- <number>0</number> -+- </property> -+- <item row="0" column="0" colspan="4"> -+- <widget class="QLabel" name="demoTitleLabel"> -+- <property name="alignment"> -+- <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> -+- </property> -+- </widget> -+- </item> -+- <item row="1" column="0"> -+- <widget class="QComboBox" name="examplesComboBox"> -+- <property name="enabled"> -+- <bool>false</bool> -+- </property> -+- <property name="sizePolicy"> -+- <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred"> -+- <horstretch>0</horstretch> -+- <verstretch>0</verstretch> -+- </sizepolicy> -+- </property> -+- <item> -+- <property name="text"> -+- <string>Examples not installed</string> -+- </property> -+- </item> -+- </widget> -+- </item> -+- <item row="1" column="2"> -+- <widget class="QToolButton" name="openExampleButton"> -+- <property name="enabled"> -+- <bool>false</bool> -+- </property> -+- <property name="sizePolicy"> -+- <sizepolicy hsizetype="Fixed" vsizetype="Preferred"> -+- <horstretch>0</horstretch> -+- <verstretch>0</verstretch> -+- </sizepolicy> -+- </property> -+- <property name="text"> -+- <string>Open</string> -+- </property> -+- </widget> -+- </item> -+- <item row="1" column="1"> -+- <spacer name="horizontalSpacer"> -+- <property name="orientation"> -+- <enum>Qt::Horizontal</enum> -+- </property> -+- <property name="sizeType"> -+- <enum>QSizePolicy::Fixed</enum> -+- </property> -+- <property name="sizeHint" stdset="0"> -+- <size> -+- <width>6</width> -+- <height>6</height> -+- </size> -+- </property> -+- </spacer> -+- </item> -+- </layout> -+- </widget> -+- </item> -+- <item row="1" column="1"> -+- <widget class="QFrame" name="didyouKnowFrame"> -+- <property name="sizePolicy"> -+- <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> -+- <horstretch>0</horstretch> -+- <verstretch>0</verstretch> -+- </sizepolicy> -+- </property> -+- <property name="maximumSize"> -+- <size> -+- <width>400</width> -+- <height>16777215</height> -+- </size> -+- </property> -+- <property name="styleSheet"> -+- <string/> -+- </property> -+- <layout class="QGridLayout" name="gridLayout_11"> -+- <property name="rightMargin"> -+- <number>9</number> -+- </property> -+- <item row="0" column="0"> -+- <widget class="QLabel" name="didYouKnowTitleLabel"> -+- <property name="sizePolicy"> -+- <sizepolicy hsizetype="MinimumExpanding" vsizetype="Maximum"> -+- <horstretch>0</horstretch> -+- <verstretch>0</verstretch> -+- </sizepolicy> -+- </property> -+- <property name="alignment"> -+- <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> -+- </property> -+- </widget> -+- </item> -+- <item row="1" column="0" colspan="2"> -+- <widget class="QTextBrowser" name="didYouKnowTextBrowser"> -+- <property name="sizePolicy"> -+- <sizepolicy hsizetype="Minimum" vsizetype="Preferred"> -+- <horstretch>0</horstretch> -+- <verstretch>0</verstretch> -+- </sizepolicy> -+- </property> -+- <property name="frameShape"> -+- <enum>QFrame::NoFrame</enum> -+- </property> -+- <property name="frameShadow"> -+- <enum>QFrame::Plain</enum> -+- </property> -+- <property name="verticalScrollBarPolicy"> -+- <enum>Qt::ScrollBarAlwaysOff</enum> -+- </property> -+- <property name="horizontalScrollBarPolicy"> -+- <enum>Qt::ScrollBarAlwaysOff</enum> -+- </property> -+- <property name="openExternalLinks"> -+- <bool>true</bool> -+- </property> -+- </widget> -+- </item> -+- <item row="0" column="1"> -+- <layout class="QGridLayout" name="gridLayout_10"> -+- <property name="spacing"> -+- <number>0</number> -+- </property> -+- <item row="0" column="0" colspan="2"> -+- <spacer name="verticalSpacer_4"> -+- <property name="orientation"> -+- <enum>Qt::Vertical</enum> -+- </property> -+- <property name="sizeType"> -+- <enum>QSizePolicy::Preferred</enum> -+- </property> -+- <property name="sizeHint" stdset="0"> -+- <size> -+- <width>20</width> -+- <height>2</height> -+- </size> -+- </property> -+- </spacer> -+- </item> -+- <item row="1" column="0"> -+- <widget class="QToolButton" name="prevTipBtn"> -+- <property name="styleSheet"> -+- <string notr="true">QToolButton{ -+- border-right:solid 0 px; -+- height:16px; -+- width:12px; -+-} -+-</string> -+- </property> -+- <property name="text"> -+- <string/> -+- </property> -+- <property name="icon"> -+- <iconset resource="welcome.qrc"> -+- <normaloff>:/welcome/images/arrow-left.png</normaloff>:/welcome/images/arrow-left.png</iconset> -+- </property> -+- <property name="arrowType"> -+- <enum>Qt::NoArrow</enum> -+- </property> -+- </widget> -+- </item> -+- <item row="1" column="1"> -+- <widget class="QToolButton" name="nextTipBtn"> -+- <property name="styleSheet"> -+- <string notr="true">QToolButton{ -+- border-left:solid 0 px; -+- height:16px; -+- width:12px; -+-} -+-</string> -+- </property> -+- <property name="text"> -+- <string/> -+- </property> -+- <property name="icon"> -+- <iconset resource="welcome.qrc"> -+- <normaloff>:/welcome/images/arrow-right.png</normaloff>:/welcome/images/arrow-right.png</iconset> -+- </property> -+- <property name="arrowType"> -+- <enum>Qt::NoArrow</enum> -+- </property> -+- </widget> -+- </item> -+- <item row="2" column="0" colspan="2"> -+- <spacer name="verticalSpacer_3"> -+- <property name="orientation"> -+- <enum>Qt::Vertical</enum> -+- </property> -+- <property name="sizeHint" stdset="0"> -+- <size> -+- <width>20</width> -+- <height>2</height> -+- </size> -+- </property> -+- </spacer> -+- </item> -+- </layout> -+- </item> -+- </layout> -+- </widget> -+- </item> -+- </layout> -+- </widget> -+- <widget class="QWidget" name="developPage"> -+- <layout class="QGridLayout" name="gridLayout_4"> -+- <property name="margin"> -+- <number>18</number> -+- </property> -+- <property name="spacing"> -+- <number>24</number> -+- </property> -+- <item row="0" column="0"> -+- <widget class="QFrame" name="recentSessionsFrame"> -+- <property name="sizePolicy"> -+- <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> -+- <horstretch>0</horstretch> -+- <verstretch>0</verstretch> -+- </sizepolicy> -+- </property> -+- <property name="minimumSize"> -+- <size> -+- <width>270</width> -+- <height>130</height> -+- </size> -+- </property> -+- <property name="styleSheet"> -+- <string/> -+- </property> -+- <layout class="QGridLayout" name="gridLayout_3"> -+- <property name="horizontalSpacing"> -+- <number>0</number> -+- </property> -+- <property name="verticalSpacing"> -+- <number>3</number> -+- </property> -+- <item row="0" column="0" colspan="3"> -+- <widget class="QLabel" name="recentSessionsTitleLabel"> -+- <property name="sizePolicy"> -+- <sizepolicy hsizetype="MinimumExpanding" vsizetype="Maximum"> -+- <horstretch>0</horstretch> -+- <verstretch>0</verstretch> -+- </sizepolicy> -+- </property> -+- <property name="alignment"> -+- <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> -+- </property> -+- </widget> -+- </item> -+- <item row="1" column="0" colspan="3"> -+- <widget class="Core::Utils::WelcomeModeTreeWidget" name="sessTreeWidget"> -+- <property name="sizePolicy"> -+- <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> -+- <horstretch>0</horstretch> -+- <verstretch>0</verstretch> -+- </sizepolicy> -+- </property> -+- <property name="focusPolicy"> -+- <enum>Qt::NoFocus</enum> -+- </property> -+- <property name="frameShape"> -+- <enum>QFrame::NoFrame</enum> -+- </property> -+- <property name="selectionMode"> -+- <enum>QAbstractItemView::NoSelection</enum> -+- </property> -+- <property name="verticalScrollMode"> -+- <enum>QAbstractItemView::ScrollPerPixel</enum> -+- </property> -+- <property name="rootIsDecorated"> -+- <bool>false</bool> -+- </property> -+- <property name="uniformRowHeights"> -+- <bool>true</bool> -+- </property> -+- <property name="allColumnsShowFocus"> -+- <bool>true</bool> -+- </property> -+- <property name="columnCount"> -+- <number>2</number> -+- </property> -+- <attribute name="headerVisible"> -+- <bool>false</bool> -+- </attribute> -+- <attribute name="headerDefaultSectionSize"> -+- <number>24</number> -+- </attribute> -+- <attribute name="headerMinimumSectionSize"> -+- <number>0</number> -+- </attribute> -+- <column> -+- <property name="text"> -+- <string notr="true">1</string> -+- </property> -+- </column> -+- <column> -+- <property name="text"> -+- <string notr="true">2</string> -+- </property> -+- </column> -+- </widget> -+- </item> -+- <item row="3" column="0"> -+- <widget class="QPushButton" name="manageSessionsButton"> -+- <property name="focusPolicy"> -+- <enum>Qt::TabFocus</enum> -+- </property> -+- <property name="text"> -+- <string>Manage Sessions...</string> -+- </property> -+- </widget> -+- </item> -+- <item row="4" column="0"> -+- <spacer name="verticalSpacer"> -+- <property name="orientation"> -+- <enum>Qt::Vertical</enum> -+- </property> -+- <property name="sizeHint" stdset="0"> -+- <size> -+- <width>20</width> -+- <height>40</height> -+- </size> -+- </property> -+- </spacer> -+- </item> -+- </layout> -+- </widget> -+- </item> -+- <item row="0" column="2"> -+- <widget class="QFrame" name="recentProjectsFrame"> -+- <property name="styleSheet"> -+- <string/> -+- </property> -+- <layout class="QGridLayout" name="gridLayout_5"> -+- <property name="horizontalSpacing"> -+- <number>0</number> -+- </property> -+- <property name="verticalSpacing"> -+- <number>3</number> -+- </property> -+- <property name="rightMargin"> -+- <number>9</number> -+- </property> -+- <item row="0" column="0" colspan="3"> -+- <widget class="QLabel" name="projTitleLabel"> -+- <property name="sizePolicy"> -+- <sizepolicy hsizetype="MinimumExpanding" vsizetype="Maximum"> -+- <horstretch>0</horstretch> -+- <verstretch>0</verstretch> -+- </sizepolicy> -+- </property> -+- <property name="alignment"> -+- <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> -+- </property> -+- </widget> -+- </item> -+- <item row="1" column="0" colspan="3"> -+- <widget class="Core::Utils::WelcomeModeTreeWidget" name="projTreeWidget"> -+- <property name="sizePolicy"> -+- <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> -+- <horstretch>0</horstretch> -+- <verstretch>0</verstretch> -+- </sizepolicy> -+- </property> -+- <property name="focusPolicy"> -+- <enum>Qt::NoFocus</enum> -+- </property> -+- <property name="frameShape"> -+- <enum>QFrame::NoFrame</enum> -+- </property> -+- <property name="selectionMode"> -+- <enum>QAbstractItemView::NoSelection</enum> -+- </property> -+- <property name="verticalScrollMode"> -+- <enum>QAbstractItemView::ScrollPerPixel</enum> -+- </property> -+- <property name="rootIsDecorated"> -+- <bool>false</bool> -+- </property> -+- <property name="uniformRowHeights"> -+- <bool>true</bool> -+- </property> -+- <property name="allColumnsShowFocus"> -+- <bool>true</bool> -+- </property> -+- <property name="columnCount"> -+- <number>2</number> -+- </property> -+- <attribute name="headerVisible"> -+- <bool>false</bool> -+- </attribute> -+- <attribute name="headerDefaultSectionSize"> -+- <number>24</number> -+- </attribute> -+- <attribute name="headerMinimumSectionSize"> -+- <number>0</number> -+- </attribute> -+- <column> -+- <property name="text"> -+- <string notr="true">1</string> -+- </property> -+- </column> -+- <column> -+- <property name="text"> -+- <string notr="true">2</string> -+- </property> -+- </column> -+- </widget> -+- </item> -+- <item row="3" column="0"> -+- <widget class="QPushButton" name="createNewProjectButton"> -+- <property name="focusPolicy"> -+- <enum>Qt::TabFocus</enum> -+- </property> -+- <property name="text"> -+- <string>Create New Project...</string> -+- </property> -+- <property name="flat"> -+- <bool>true</bool> -+- </property> -+- </widget> -+- </item> -+- <item row="4" column="0"> -+- <spacer name="verticalSpacer_2"> -+- <property name="orientation"> -+- <enum>Qt::Vertical</enum> -+- </property> -+- <property name="sizeHint" stdset="0"> -+- <size> -+- <width>20</width> -+- <height>40</height> -+- </size> -+- </property> -+- </spacer> -+- </item> -+- </layout> -+- </widget> -+- </item> -+- </layout> -+- </widget> -+- <widget class="QWidget" name="communityPage"> -++ <widget class="QWidget" name="widget"> -+ <layout class="QGridLayout" name="gridLayout_7"> -+ <property name="margin"> -+ <number>18</number> -+@@ -944,168 +259,6 @@ QToolButton:pressed { -+ <property name="spacing"> -+ <number>24</number> -+ </property> -+- <item row="0" column="0"> -+- <widget class="QFrame" name="labsFrame"> -+- <property name="frameShape"> -+- <enum>QFrame::NoFrame</enum> -+- </property> -+- <property name="frameShadow"> -+- <enum>QFrame::Plain</enum> -+- </property> -+- <layout class="QVBoxLayout" name="verticalLayout_2"> -+- <item> -+- <widget class="QLabel" name="labsTitleLabel"> -+- <property name="sizePolicy"> -+- <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> -+- <horstretch>0</horstretch> -+- <verstretch>0</verstretch> -+- </sizepolicy> -+- </property> -+- <property name="alignment"> -+- <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> -+- </property> -+- </widget> -+- </item> -+- <item> -+- <widget class="Core::Utils::WelcomeModeTreeWidget" name="newsTreeWidget"> -+- <property name="sizePolicy"> -+- <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> -+- <horstretch>0</horstretch> -+- <verstretch>0</verstretch> -+- </sizepolicy> -+- </property> -+- <property name="minimumSize"> -+- <size> -+- <width>340</width> -+- <height>0</height> -+- </size> -+- </property> -+- <property name="focusPolicy"> -+- <enum>Qt::NoFocus</enum> -+- </property> -+- <property name="frameShape"> -+- <enum>QFrame::NoFrame</enum> -+- </property> -+- <property name="selectionMode"> -+- <enum>QAbstractItemView::NoSelection</enum> -+- </property> -+- <property name="verticalScrollMode"> -+- <enum>QAbstractItemView::ScrollPerPixel</enum> -+- </property> -+- <property name="rootIsDecorated"> -+- <bool>false</bool> -+- </property> -+- <property name="uniformRowHeights"> -+- <bool>true</bool> -+- </property> -+- <property name="allColumnsShowFocus"> -+- <bool>true</bool> -+- </property> -+- <property name="columnCount"> -+- <number>2</number> -+- </property> -+- <attribute name="headerVisible"> -+- <bool>false</bool> -+- </attribute> -+- <attribute name="headerDefaultSectionSize"> -+- <number>24</number> -+- </attribute> -+- <attribute name="headerMinimumSectionSize"> -+- <number>0</number> -+- </attribute> -+- <column> -+- <property name="text"> -+- <string notr="true">1</string> -+- </property> -+- </column> -+- <column> -+- <property name="text"> -+- <string notr="true">2</string> -+- </property> -+- </column> -+- </widget> -+- </item> -+- </layout> -+- </widget> -+- </item> -+- <item row="0" column="1"> -+- <widget class="QFrame" name="sitesFrame"> -+- <property name="frameShape"> -+- <enum>QFrame::NoFrame</enum> -+- </property> -+- <property name="frameShadow"> -+- <enum>QFrame::Plain</enum> -+- </property> -+- <layout class="QVBoxLayout" name="verticalLayout_3"> -+- <item> -+- <widget class="QLabel" name="sitesTitleLabel"> -+- <property name="sizePolicy"> -+- <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> -+- <horstretch>0</horstretch> -+- <verstretch>0</verstretch> -+- </sizepolicy> -+- </property> -+- <property name="alignment"> -+- <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> -+- </property> -+- </widget> -+- </item> -+- <item> -+- <widget class="Core::Utils::WelcomeModeTreeWidget" name="sitesTreeWidget"> -+- <property name="sizePolicy"> -+- <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> -+- <horstretch>0</horstretch> -+- <verstretch>0</verstretch> -+- </sizepolicy> -+- </property> -+- <property name="focusPolicy"> -+- <enum>Qt::NoFocus</enum> -+- </property> -+- <property name="frameShape"> -+- <enum>QFrame::NoFrame</enum> -+- </property> -+- <property name="selectionMode"> -+- <enum>QAbstractItemView::NoSelection</enum> -+- </property> -+- <property name="verticalScrollMode"> -+- <enum>QAbstractItemView::ScrollPerPixel</enum> -+- </property> -+- <property name="rootIsDecorated"> -+- <bool>false</bool> -+- </property> -+- <property name="uniformRowHeights"> -+- <bool>true</bool> -+- </property> -+- <property name="allColumnsShowFocus"> -+- <bool>true</bool> -+- </property> -+- <property name="columnCount"> -+- <number>2</number> -+- </property> -+- <attribute name="headerVisible"> -+- <bool>false</bool> -+- </attribute> -+- <attribute name="headerDefaultSectionSize"> -+- <number>24</number> -+- </attribute> -+- <attribute name="headerMinimumSectionSize"> -+- <number>0</number> -+- </attribute> -+- <column> -+- <property name="text"> -+- <string notr="true">1</string> -+- </property> -+- </column> -+- <column> -+- <property name="text"> -+- <string notr="true">2</string> -+- </property> -+- </column> -+- </widget> -+- </item> -+- </layout> -+- </widget> -+- </item> -+ </layout> -+ </widget> -+ </widget> -+@@ -1219,13 +372,6 @@ QToolButton:pressed { -+ </item> -+ </layout> -+ </widget> -+- <customwidgets> -+- <customwidget> -+- <class>Core::Utils::WelcomeModeTreeWidget</class> -+- <extends>QTreeWidget</extends> -+- <header>utils/welcomemodetreewidget.h</header> -+- </customwidget> -+- </customwidgets> -+ <resources> -+ <include location="welcome.qrc"/> -+ </resources> -+diff --git a/src/plugins/welcome/welcomeplugin.cpp b/src/plugins/welcome/welcomeplugin.cpp -+index e9743a9..544e36a 100644 -+--- a/src/plugins/welcome/welcomeplugin.cpp -++++ b/src/plugins/welcome/welcomeplugin.cpp -+@@ -31,6 +31,8 @@ -+ -+ #include "welcomemode.h" -+ -++#include "communitywelcomepage.h" -++ -+ #include <coreplugin/actionmanager/actionmanager.h> -+ #include <coreplugin/basemode.h> -+ #include <coreplugin/coreconstants.h> -+@@ -45,11 +47,10 @@ -+ #include <QtGui/QMessageBox> -+ #include <QtGui/QPushButton> -+ -+-using namespace Welcome; -+- -++using namespace Welcome::Internal; -+ -+ WelcomePlugin::WelcomePlugin() -+- : m_welcomeMode(0) -++ : m_welcomeMode(0), m_communityWelcomePlugin(0) -+ { -+ } -+ -+@@ -59,6 +60,10 @@ WelcomePlugin::~WelcomePlugin() -+ removeObject(m_welcomeMode); -+ delete m_welcomeMode; -+ } -++ if (m_communityWelcomePlugin) { -++ removeObject(m_communityWelcomePlugin); -++ delete m_communityWelcomePlugin; -++ } -+ } -+ -+ /*! Initializes the plugin. Returns true on success. -+@@ -72,6 +77,9 @@ bool WelcomePlugin::initialize(const QStringList &arguments, QString *error_mess -+ Q_UNUSED(arguments) -+ Q_UNUSED(error_message) -+ -++ m_communityWelcomePlugin = new Internal::CommunityWelcomePage; -++ addObject(m_communityWelcomePlugin); -++ -+ m_welcomeMode = new WelcomeMode; -+ addObject(m_welcomeMode); -+ -+@@ -91,6 +99,7 @@ bool WelcomePlugin::initialize(const QStringList &arguments, QString *error_mess -+ */ -+ void WelcomePlugin::extensionsInitialized() -+ { -++ m_welcomeMode->initPlugins(); -+ Core::ModeManager::instance()->activateMode(m_welcomeMode->uniqueModeName()); -+ } -+ -+diff --git a/src/plugins/welcome/welcomeplugin.h b/src/plugins/welcome/welcomeplugin.h -+index 970ec39..9855595 100644 -+--- a/src/plugins/welcome/welcomeplugin.h -++++ b/src/plugins/welcome/welcomeplugin.h -+@@ -36,6 +36,9 @@ namespace Welcome { -+ -+ class WelcomeMode; -+ -++namespace Internal { -++class CommunityWelcomePage; -++ -+ class WelcomePlugin -+ : public ExtensionSystem::IPlugin -+ { -+@@ -51,8 +54,10 @@ public: -+ -+ private: -+ WelcomeMode *m_welcomeMode; -++ Internal::CommunityWelcomePage *m_communityWelcomePlugin; -+ }; -+ -+ } // namespace Welcome -++} // namespace Internal -+ -+ #endif // WELCOMEPLUGIN_H -+-- -+1.6.3.msysgit.0 -+ -diff --git a/src/libs/extensionsystem/extensionsystem.pro b/src/libs/extensionsystem/extensionsystem.pro -index 81f3bc8..b5fed62 100644 ---- a/src/libs/extensionsystem/extensionsystem.pro -+++ b/src/libs/extensionsystem/extensionsystem.pro -@@ -4,9 +4,7 @@ DEFINES += EXTENSIONSYSTEM_LIBRARY - include(../../qtcreatorlibrary.pri) - include(extensionsystem_dependencies.pri) - --unix:!macx:!freebsd* { -- LIBS += -ldl --} -+unix:!macx:!freebsd*:LIBS += -ldl - - DEFINES += IDE_TEST_DIR=\\\"$$IDE_SOURCE_TREE\\\" - -@@ -21,14 +19,16 @@ HEADERS += pluginerrorview.h \ - pluginspec_p.h \ - pluginview.h \ - pluginview_p.h \ -- optionsparser.h -+ optionsparser.h \ -+ iwelcomepage.h - SOURCES += pluginerrorview.cpp \ - plugindetailsview.cpp \ - iplugin.cpp \ - pluginmanager.cpp \ - pluginspec.cpp \ - pluginview.cpp \ -- optionsparser.cpp -+ optionsparser.cpp \ -+ iwelcomepage.cpp - FORMS += pluginview.ui \ - pluginerrorview.ui \ - plugindetailsview.ui -diff --git a/src/libs/extensionsystem/iwelcomepage.cpp b/src/libs/extensionsystem/iwelcomepage.cpp -new file mode 100644 -index 0000000..1297037 ---- /dev/null -+++ b/src/libs/extensionsystem/iwelcomepage.cpp -@@ -0,0 +1,8 @@ -+#include "iwelcomepage.h" -+ -+using namespace ExtensionSystem; -+ -+IWelcomePage::IWelcomePage() -+{ -+ -+} -diff --git a/src/libs/extensionsystem/iwelcomepage.h b/src/libs/extensionsystem/iwelcomepage.h -new file mode 100644 -index 0000000..e4e5e6f ---- /dev/null -+++ b/src/libs/extensionsystem/iwelcomepage.h -@@ -0,0 +1,31 @@ -+#ifndef IWELCOMEPAGE_H -+#define IWELCOMEPAGE_H -+ -+ -+#include "extensionsystem_global.h" -+ -+#include <QObject> -+ -+namespace ExtensionSystem { -+ -+class IWelcomePagePrivate; -+ -+class EXTENSIONSYSTEM_EXPORT IWelcomePage : public QObject -+{ -+ Q_OBJECT -+ -+public: -+ IWelcomePage(); -+ -+ virtual QWidget *page() = 0; -+ virtual QString title() const = 0; -+ virtual int priority() const { return 0; } -+ -+private: -+ // not used atm -+ IWelcomePagePrivate *m_d; -+}; -+ -+} -+ -+#endif // IWELCOMEPAGE_H -diff --git a/src/libs/utils/welcomemodetreewidget.cpp b/src/libs/utils/welcomemodetreewidget.cpp -index 26d55a3..ff68ccc 100644 ---- a/src/libs/utils/welcomemodetreewidget.cpp -+++ b/src/libs/utils/welcomemodetreewidget.cpp -@@ -36,6 +36,18 @@ - namespace Core { - namespace Utils { - -+void WelcomeModeLabel::setStyledText(const QString &text) -+{ -+ QString rc = QLatin1String( -+ "<html><head><style type=\"text/css\">p, li { white-space: pre-wrap; }</style></head>" -+ "<body style=\" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;\">" -+ "<p style=\" margin-top:16px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">" -+ "<span style=\" font-size:x-large; color:#555555;\">"); -+ rc += text; -+ rc += QLatin1String("</span></p><hr/></body></html>"); -+ setText(rc); -+} -+ - struct WelcomeModeTreeWidgetPrivate - { - WelcomeModeTreeWidgetPrivate() {} -@@ -48,6 +60,8 @@ WelcomeModeTreeWidget::WelcomeModeTreeWidget(QWidget *parent) : - m_d->bullet = QIcon(QLatin1String(":/welcome/images/list_bullet_arrow.png")); - connect(this, SIGNAL(itemClicked(QTreeWidgetItem *, int)), - SLOT(slotItemClicked(QTreeWidgetItem *))); -+ -+ viewport()->setAutoFillBackground(false); - } - - WelcomeModeTreeWidget::~WelcomeModeTreeWidget() -diff --git a/src/libs/utils/welcomemodetreewidget.h b/src/libs/utils/welcomemodetreewidget.h -index d26bc22..8237613 100644 ---- a/src/libs/utils/welcomemodetreewidget.h -+++ b/src/libs/utils/welcomemodetreewidget.h -@@ -33,11 +33,22 @@ - #include "utils_global.h" - - #include <QtGui/QTreeWidget> -+#include <QtGui/QLabel> - - namespace Core { - namespace Utils { - - struct WelcomeModeTreeWidgetPrivate; -+struct WelcomeModeLabelPrivate; -+ -+class QTCREATOR_UTILS_EXPORT WelcomeModeLabel : public QLabel -+{ -+ Q_OBJECT -+public: -+ WelcomeModeLabel(QWidget *parent) : QLabel(parent) {}; -+ void setStyledText(const QString &text); -+ WelcomeModeLabelPrivate *m_d; -+}; - - class QTCREATOR_UTILS_EXPORT WelcomeModeTreeWidget : public QTreeWidget - { -diff --git a/src/plugins/coreplugin/coreplugin.h b/src/plugins/coreplugin/coreplugin.h -index 04e5be4..ce487fb 100644 ---- a/src/plugins/coreplugin/coreplugin.h -+++ b/src/plugins/coreplugin/coreplugin.h -@@ -33,10 +33,6 @@ - #include <extensionsystem/iplugin.h> - - namespace Core { -- class IMode; --} -- --namespace Core { - namespace Internal { - - class EditMode; -@@ -59,7 +55,6 @@ public slots: - - private: - MainWindow *m_mainWindow; -- Core::IMode *m_welcomeMode; - EditMode *m_editMode; - }; - -diff --git a/src/plugins/help/Help.pluginspec b/src/plugins/help/Help.pluginspec -index d7ccc07..29f1b46 100644 ---- a/src/plugins/help/Help.pluginspec -+++ b/src/plugins/help/Help.pluginspec -@@ -22,6 +22,5 @@ will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.</license> - <dependency name="Core" version="1.2.80"/> - <dependency name="Find" version="1.2.80"/> - <dependency name="QuickOpen" version="1.2.80"/> -- <dependency name="Welcome" version="1.2.80"/> - </dependencyList> - </plugin> -diff --git a/src/plugins/help/help.pro b/src/plugins/help/help.pro -index 1f5ec55..b733a1f 100644 ---- a/src/plugins/help/help.pro -+++ b/src/plugins/help/help.pro -@@ -4,7 +4,6 @@ include(../../qtcreatorplugin.pri) - include(../../plugins/coreplugin/coreplugin.pri) - include(../../plugins/find/find.pri) - include(../../plugins/quickopen/quickopen.pri) --include(../../plugins/welcome/welcome.pri) - QT += network - CONFIG += help - DEFINES += QT_CLUCENE_SUPPORT \ -diff --git a/src/plugins/help/helpplugin.cpp b/src/plugins/help/helpplugin.cpp -index f6e8db8..2ff11c8 100644 ---- a/src/plugins/help/helpplugin.cpp -+++ b/src/plugins/help/helpplugin.cpp -@@ -87,8 +87,8 @@ - using namespace Help; - using namespace Help::Internal; - --HelpManager::HelpManager(QHelpEngine *helpEngine) -- : m_helpEngine(helpEngine) -+HelpManager::HelpManager(Internal::HelpPlugin* plugin) -+ : m_plugin(plugin) - { - } - -@@ -96,7 +96,7 @@ void HelpManager::registerDocumentation(const QStringList &fileNames) - { - bool needsSetup = false; - { -- QHelpEngineCore hc(m_helpEngine->collectionFile()); -+ QHelpEngineCore hc(m_plugin->helpEngine()->collectionFile()); - if (!hc.setupData()) - qWarning() << "Could not initialize help engine:" << hc.error(); - foreach (const QString &fileName, fileNames) { -@@ -113,7 +113,17 @@ void HelpManager::registerDocumentation(const QStringList &fileNames) - } - } - if (needsSetup) -- m_helpEngine->setupData(); -+ m_plugin->helpEngine()->setupData(); -+} -+ -+void HelpManager::openHelpPage(const QString& url) -+{ -+ m_plugin->openHelpPage(url); -+} -+ -+void HelpManager::openContextHelpPage(const QString& url) -+{ -+ m_plugin->openContextHelpPage(url); - } - - HelpPlugin::HelpPlugin() : -@@ -180,7 +190,7 @@ bool HelpPlugin::initialize(const QStringList &arguments, QString *error) - connect(m_helpEngine, SIGNAL(setupFinished()), this, - SLOT(updateFilterComboBox())); - -- addAutoReleasedObject(new HelpManager(m_helpEngine)); -+ addAutoReleasedObject(new HelpManager(this)); - - m_filterSettingsPage = new FilterSettingsPage(m_helpEngine); - addAutoReleasedObject(m_filterSettingsPage); -@@ -430,6 +440,11 @@ bool HelpPlugin::initialize(const QStringList &arguments, QString *error) - return true; - } - -+QHelpEngine* HelpPlugin::helpEngine() const -+{ -+ return m_helpEngine; -+} -+ - void HelpPlugin::createRightPaneSideBar() - { - QAction *switchToHelpMode = new QAction("Go to Help Mode", this); -@@ -610,17 +625,6 @@ void HelpPlugin::extensionsInitialized() - updateFilterComboBox(); - m_bookmarkManager->setupBookmarkModels(); - -- using namespace Core::Internal; -- using namespace Core::Constants; -- Welcome::WelcomeMode *welcomeMode = -- qobject_cast<Welcome::WelcomeMode*>(m_core->modeManager()->mode(MODE_WELCOME)); -- if (welcomeMode) { -- connect(welcomeMode, SIGNAL(openHelpPage(QString)), this, -- SLOT(openHelpPage(QString))); -- connect(welcomeMode, SIGNAL(openContextHelpPage(QString)), this, -- SLOT(openContextHelpPage(QString))); -- } -- - #if !defined(QT_NO_WEBKIT) - QWebSettings* webSettings = QWebSettings::globalSettings(); - QFont font(webSettings->fontFamily(QWebSettings::StandardFont), -diff --git a/src/plugins/help/helpplugin.h b/src/plugins/help/helpplugin.h -index 6ab78cf..10cf1fd 100644 ---- a/src/plugins/help/helpplugin.h -+++ b/src/plugins/help/helpplugin.h -@@ -63,6 +63,7 @@ class SideBarItem; - namespace Help { - namespace Internal { - class CentralWidget; -+ class HelpPlugin; - } - - namespace Constants { -@@ -76,12 +77,14 @@ class HELP_EXPORT HelpManager : public QObject - { - Q_OBJECT - public: -- HelpManager(QHelpEngine *helpEngine); -+ HelpManager(Internal::HelpPlugin*); - - void registerDocumentation(const QStringList &fileNames); -+ void openHelpPage(const QString& url); -+ void openContextHelpPage(const QString &url); - - private: -- QHelpEngine *m_helpEngine; -+ Internal::HelpPlugin *m_plugin; - }; - - namespace Internal { -@@ -108,6 +111,12 @@ public: - void setIndexFilter(const QString &filter); - QString indexFilter() const; - -+ void openHelpPage(const QUrl& url); -+ void openHelpPage(const QString& url); -+ void openContextHelpPage(const QString &url); -+ -+ QHelpEngine* helpEngine() const; -+ - private slots: - void modeChanged(Core::IMode *mode); - void activateContext(); -@@ -128,10 +137,6 @@ private slots: - void slotHideRightPane(); - void copyFromSideBar(); - -- void openHelpPage(const QUrl& url); -- void openHelpPage(const QString& url); -- void openContextHelpPage(const QString &url); -- - void updateSideBarSource(); - void updateSideBarSource(const QUrl &newUrl); - -diff --git a/src/plugins/plugins.pro b/src/plugins/plugins.pro -index 6ef52c1..b8ae5ec 100644 ---- a/src/plugins/plugins.pro -+++ b/src/plugins/plugins.pro -@@ -94,7 +94,6 @@ plugin_projectexplorer.depends = plugin_quickopen - plugin_projectexplorer.depends += plugin_find - plugin_projectexplorer.depends += plugin_coreplugin - plugin_projectexplorer.depends += plugin_texteditor --plugin_projectexplorer.depends += plugin_welcome - - plugin_qt4projectmanager.subdir = qt4projectmanager - plugin_qt4projectmanager.depends = plugin_texteditor -@@ -103,7 +102,6 @@ plugin_qt4projectmanager.depends += plugin_cpptools - plugin_qt4projectmanager.depends += plugin_cppeditor - plugin_qt4projectmanager.depends += plugin_help - plugin_qt4projectmanager.depends += plugin_designer --plugin_qt4projectmanager.depends += plugin_welcome - - plugin_quickopen.subdir = quickopen - plugin_quickopen.depends = plugin_coreplugin -@@ -144,7 +142,6 @@ plugin_help.subdir = help - plugin_help.depends = plugin_find - plugin_help.depends += plugin_quickopen - plugin_help.depends += plugin_coreplugin --plugin_help.depends += plugin_welcome - - plugin_resourceeditor.subdir = resourceeditor - plugin_resourceeditor.depends = plugin_coreplugin -diff --git a/src/plugins/projectexplorer/ProjectExplorer.pluginspec b/src/plugins/projectexplorer/ProjectExplorer.pluginspec -index 6a66cfe..8b5a7c3 100644 ---- a/src/plugins/projectexplorer/ProjectExplorer.pluginspec -+++ b/src/plugins/projectexplorer/ProjectExplorer.pluginspec -@@ -23,6 +23,5 @@ will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.</license> - <dependency name="Find" version="1.2.80"/> - <dependency name="QuickOpen" version="1.2.80"/> - <dependency name="TextEditor" version="1.2.80"/> -- <dependency name="Welcome" version="1.2.80"/> - </dependencyList> - </plugin> -diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp -index f10b628..c9a692c 100644 ---- a/src/plugins/projectexplorer/projectexplorer.cpp -+++ b/src/plugins/projectexplorer/projectexplorer.cpp -@@ -57,6 +57,8 @@ - #include "sessiondialog.h" - #include "buildparserfactory.h" - #include "projectexplorersettingspage.h" -+#include "projectwelcomepage.h" -+#include "projectwelcomepagewidget.h" - - #include <coreplugin/basemode.h> - #include <coreplugin/coreconstants.h> -@@ -140,6 +142,7 @@ ProjectExplorerPlugin::ProjectExplorerPlugin() - - ProjectExplorerPlugin::~ProjectExplorerPlugin() - { -+ removeObject(m_welcomePlugin); - removeObject(this); - } - -@@ -156,6 +159,11 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er - Core::ICore *core = Core::ICore::instance(); - Core::ActionManager *am = core->actionManager(); - -+ m_welcomePlugin = new ProjectWelcomePage; -+ m_welcomePage = qobject_cast<Internal::ProjectWelcomePageWidget*>(m_welcomePlugin->page()); -+ Q_ASSERT(m_welcomePage); -+ connect(m_welcomePage, SIGNAL(manageSessions()), this, SLOT(showSessionManager())); -+ addObject(m_welcomePlugin); - addObject(this); - - connect(core->fileManager(), SIGNAL(currentFileChanged(QString)), -@@ -646,10 +654,6 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er - m_projectExplorerSettings.showCompilerOutput = s->value("ProjectExplorer/Settings/ShowCompilerOutput", false).toBool(); - } - -- if (Welcome::WelcomeMode *welcomeMode = qobject_cast<Welcome::WelcomeMode*> -- (Core::ICore::instance()->modeManager()->mode(Core::Constants::MODE_WELCOME))) { -- connect(welcomeMode, SIGNAL(manageSessions()), this, SLOT(showSessionManager())); -- } - connect(m_sessionManagerAction, SIGNAL(triggered()), this, SLOT(showSessionManager())); - connect(m_newAction, SIGNAL(triggered()), this, SLOT(newProject())); - #if 0 -@@ -685,6 +689,8 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er - this, SLOT(determineSessionToRestoreAtStartup())); - connect(Core::ICore::instance(), SIGNAL(coreOpened()), this, SLOT(restoreSession())); - -+ updateWelcomePage(); -+ - return true; - } - -@@ -835,9 +841,7 @@ void ProjectExplorerPlugin::showSessionManager() - Core::ModeManager *modeManager = Core::ModeManager::instance(); - Core::IMode *welcomeMode = modeManager->mode(Core::Constants::MODE_WELCOME); - if (modeManager->currentMode() == welcomeMode) -- { -- updateWelcomePage(qobject_cast<Welcome::WelcomeMode*>(welcomeMode)); -- } -+ updateWelcomePage(); - } - - void ProjectExplorerPlugin::setStartupProject(Project *project) -@@ -1019,20 +1023,19 @@ Project *ProjectExplorerPlugin::startupProject() const - } - - // update welcome page --void ProjectExplorerPlugin::updateWelcomePage(Welcome::WelcomeMode *welcomeMode) -+void ProjectExplorerPlugin::updateWelcomePage() - { -- Welcome::WelcomeMode::WelcomePageData welcomePageData; -+ ProjectWelcomePageWidget::WelcomePageData welcomePageData; - welcomePageData.sessionList = m_session->sessions(); - welcomePageData.activeSession = m_session->activeSession(); - welcomePageData.previousSession = m_session->lastSession(); - welcomePageData.projectList = m_recentProjects; -- welcomeMode->updateWelcomePage(welcomePageData); -+ m_welcomePage->updateWelcomePage(welcomePageData); - } - --void ProjectExplorerPlugin::currentModeChanged(Core::IMode *mode) -+void ProjectExplorerPlugin::currentModeChanged(Core::IMode *) - { -- if (Welcome::WelcomeMode *welcomeMode = qobject_cast<Welcome::WelcomeMode*>(mode)) -- updateWelcomePage(welcomeMode); -+ updateWelcomePage(); - } - - void ProjectExplorerPlugin::determineSessionToRestoreAtStartup() -@@ -1080,11 +1083,8 @@ void ProjectExplorerPlugin::restoreSession() - // update welcome page - Core::ModeManager *modeManager = Core::ModeManager::instance(); - connect(modeManager, SIGNAL(currentModeChanged(Core::IMode*)), this, SLOT(currentModeChanged(Core::IMode*))); -- if (Welcome::WelcomeMode *welcomeMode = qobject_cast<Welcome::WelcomeMode*>(modeManager->mode(Core::Constants::MODE_WELCOME))) { -- updateWelcomePage(welcomeMode); -- connect(welcomeMode, SIGNAL(requestSession(QString)), this, SLOT(loadSession(QString))); -- connect(welcomeMode, SIGNAL(requestProject(QString)), this, SLOT(loadProject(QString))); -- } -+ connect(m_welcomePage, SIGNAL(requestSession(QString)), this, SLOT(loadSession(QString))); -+ connect(m_welcomePage, SIGNAL(requestProject(QString)), this, SLOT(loadProject(QString))); - - Core::ICore::instance()->openFiles(arguments); - updateActions(); -diff --git a/src/plugins/projectexplorer/projectexplorer.h b/src/plugins/projectexplorer/projectexplorer.h -index 0f781ea..c3251c0 100644 ---- a/src/plugins/projectexplorer/projectexplorer.h -+++ b/src/plugins/projectexplorer/projectexplorer.h -@@ -72,6 +72,8 @@ class ApplicationOutput; - class OutputPane; - class ProjectWindow; - class ProjectFileFactory; -+class ProjectWelcomePage; -+class ProjectWelcomePageWidget; - - struct ProjectExplorerSettings - { -@@ -209,7 +211,7 @@ private: - - void updateActions(); - void addToRecentProjects(const QString &fileName, const QString &displayName); -- void updateWelcomePage(Welcome::WelcomeMode *welcomeMode); -+ void updateWelcomePage(); - Internal::ProjectFileFactory *findProjectFileFactory(const QString &filename) const; - - static ProjectExplorerPlugin *m_instance; -@@ -279,6 +281,8 @@ private: - QString m_runMode; - QString m_projectFilterString; - Internal::ProjectExplorerSettings m_projectExplorerSettings; -+ Internal::ProjectWelcomePage *m_welcomePlugin; -+ Internal::ProjectWelcomePageWidget *m_welcomePage; - }; - - namespace Internal { -diff --git a/src/plugins/projectexplorer/projectexplorer.pro b/src/plugins/projectexplorer/projectexplorer.pro -index ffb0b08..9e73399 100644 ---- a/src/plugins/projectexplorer/projectexplorer.pro -+++ b/src/plugins/projectexplorer/projectexplorer.pro -@@ -61,7 +61,9 @@ HEADERS += projectexplorer.h \ - filewatcher.h \ - debugginghelper.h \ - abstractmakestep.h \ -- projectexplorersettingspage.h -+ projectexplorersettingspage.h \ -+ projectwelcomepage.h \ -+ projectwelcomepagewidget.h - SOURCES += projectexplorer.cpp \ - projectwindow.cpp \ - buildmanager.cpp \ -@@ -111,7 +113,9 @@ SOURCES += projectexplorer.cpp \ - filewatcher.cpp \ - debugginghelper.cpp \ - abstractmakestep.cpp \ -- projectexplorersettingspage.cpp -+ projectexplorersettingspage.cpp \ -+ projectwelcomepage.cpp \ -+ projectwelcomepagewidget.cpp - FORMS += processstep.ui \ - editorsettingspropertiespage.ui \ - runsettingspropertiespage.ui \ -@@ -119,7 +123,8 @@ FORMS += processstep.ui \ - projectwizardpage.ui \ - buildstepspage.ui \ - removefiledialog.ui \ -- projectexplorersettingspage.ui -+ projectexplorersettingspage.ui \ -+ projectwelcomepagewidget.ui - win32 { - SOURCES += applicationlauncher_win.cpp \ - winguiprocess.cpp -diff --git a/src/plugins/projectexplorer/projectexplorer_dependencies.pri b/src/plugins/projectexplorer/projectexplorer_dependencies.pri -index ecbb7a4..674c8bb 100644 ---- a/src/plugins/projectexplorer/projectexplorer_dependencies.pri -+++ b/src/plugins/projectexplorer/projectexplorer_dependencies.pri -@@ -3,4 +3,3 @@ include(../../plugins/quickopen/quickopen.pri) - include(../../plugins/find/find.pri) - include(../../plugins/coreplugin/coreplugin.pri) - include(../../plugins/texteditor/texteditor.pri) --include(../../plugins/welcome/welcome.pri) -diff --git a/src/plugins/projectexplorer/projectwelcomepage.cpp b/src/plugins/projectexplorer/projectwelcomepage.cpp -new file mode 100644 -index 0000000..ad1c3e9 ---- /dev/null -+++ b/src/plugins/projectexplorer/projectwelcomepage.cpp -@@ -0,0 +1,48 @@ -+/************************************************************************** -+** -+** This file is part of Qt Creator -+** -+** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -+** -+** Contact: Nokia Corporation (qt-info@nokia.com) -+** -+** Commercial Usage -+** -+** Licensees holding valid Qt Commercial licenses may use this file in -+** accordance with the Qt Commercial License Agreement provided with the -+** Software or, alternatively, in accordance with the terms contained in -+** a written agreement between you and Nokia. -+** -+** GNU Lesser General Public License Usage -+** -+** Alternatively, this file may be used under the terms of the GNU Lesser -+** General Public License version 2.1 as published by the Free Software -+** Foundation and appearing in the file LICENSE.LGPL included in the -+** packaging of this file. Please review the following information to -+** ensure the GNU Lesser General Public License version 2.1 requirements -+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -+** -+** If you are unsure which license is appropriate for your use, please -+** contact the sales department at http://www.qtsoftware.com/contact. -+** -+**************************************************************************/ -+ -+#include "projectwelcomepage.h" -+#include "projectwelcomepagewidget.h" -+ -+namespace ProjectExplorer { -+namespace Internal { -+ -+ProjectWelcomePage::ProjectWelcomePage() -+ : m_page(new ProjectWelcomePageWidget) -+{ -+ -+} -+ -+QWidget* ProjectWelcomePage::page() -+{ -+ return m_page; -+} -+ -+} // namespace Internal -+} // namespace ProjectExplorer -diff --git a/src/plugins/projectexplorer/projectwelcomepage.h b/src/plugins/projectexplorer/projectwelcomepage.h -new file mode 100644 -index 0000000..6185dd5 ---- /dev/null -+++ b/src/plugins/projectexplorer/projectwelcomepage.h -@@ -0,0 +1,58 @@ -+/************************************************************************** -+** -+** This file is part of Qt Creator -+** -+** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -+** -+** Contact: Nokia Corporation (qt-info@nokia.com) -+** -+** Commercial Usage -+** -+** Licensees holding valid Qt Commercial licenses may use this file in -+** accordance with the Qt Commercial License Agreement provided with the -+** Software or, alternatively, in accordance with the terms contained in -+** a written agreement between you and Nokia. -+** -+** GNU Lesser General Public License Usage -+** -+** Alternatively, this file may be used under the terms of the GNU Lesser -+** General Public License version 2.1 as published by the Free Software -+** Foundation and appearing in the file LICENSE.LGPL included in the -+** packaging of this file. Please review the following information to -+** ensure the GNU Lesser General Public License version 2.1 requirements -+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -+** -+** If you are unsure which license is appropriate for your use, please -+** contact the sales department at http://www.qtsoftware.com/contact. -+** -+**************************************************************************/ -+ -+#ifndef PROJECTWELCOMEPAGE_H -+#define PROJECTWELCOMEPAGE_H -+ -+#include <extensionsystem/iwelcomepage.h> -+ -+namespace ProjectExplorer { -+namespace Internal { -+ -+class ProjectWelcomePageWidget; -+ -+class ProjectWelcomePage : public ExtensionSystem::IWelcomePage -+{ -+ Q_OBJECT -+public: -+ ProjectWelcomePage(); -+ -+ QWidget *page(); -+ QString title() const { return tr("Develop"); } -+ int priority() const { return 20; } -+private: -+ ProjectWelcomePageWidget *m_page; -+ -+ -+}; -+ -+} // namespace Internal -+} // namespace ProjectExplorer -+ -+#endif // PROJECTWELCOMEPAGE_H -diff --git a/src/plugins/projectexplorer/projectwelcomepagewidget.cpp b/src/plugins/projectexplorer/projectwelcomepagewidget.cpp -new file mode 100644 -index 0000000..fe824a7 ---- /dev/null -+++ b/src/plugins/projectexplorer/projectwelcomepagewidget.cpp -@@ -0,0 +1,157 @@ -+/************************************************************************** -+** -+** This file is part of Qt Creator -+** -+** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -+** -+** Contact: Nokia Corporation (qt-info@nokia.com) -+** -+** Commercial Usage -+** -+** Licensees holding valid Qt Commercial licenses may use this file in -+** accordance with the Qt Commercial License Agreement provided with the -+** Software or, alternatively, in accordance with the terms contained in -+** a written agreement between you and Nokia. -+** -+** GNU Lesser General Public License Usage -+** -+** Alternatively, this file may be used under the terms of the GNU Lesser -+** General Public License version 2.1 as published by the Free Software -+** Foundation and appearing in the file LICENSE.LGPL included in the -+** packaging of this file. Please review the following information to -+** ensure the GNU Lesser General Public License version 2.1 requirements -+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -+** -+** If you are unsure which license is appropriate for your use, please -+** contact the sales department at http://www.qtsoftware.com/contact. -+** -+**************************************************************************/ -+ -+#include "projectwelcomepagewidget.h" -+#include "ui_projectwelcomepagewidget.h" -+ -+#include <coreplugin/coreconstants.h> -+#include <coreplugin/uniqueidmanager.h> -+#include <coreplugin/modemanager.h> -+#include <coreplugin/icore.h> -+#include <coreplugin/dialogs/iwizard.h> -+ -+#include <QtCore/QFileInfo> -+#include <QtCore/QDir> -+#include <QtCore/QPair> -+#include <QtGui/QLabel> -+#include <QtGui/QTreeWidgetItem> -+ -+#include <QtCore/QDebug> -+ -+using namespace ProjectExplorer::Internal; -+ -+bool ProjectWelcomePageWidget::WelcomePageData::operator==(const WelcomePageData &rhs) const -+{ -+ return previousSession == rhs.previousSession -+ && activeSession == rhs.activeSession -+ && sessionList == rhs.sessionList -+ && projectList == rhs.projectList; -+} -+ -+bool ProjectWelcomePageWidget::WelcomePageData::operator!=(const WelcomePageData &rhs) const -+{ -+ return previousSession != rhs.previousSession -+ || activeSession != rhs.activeSession -+ || sessionList != rhs.sessionList -+ || projectList != rhs.projectList; -+} -+ -+QDebug operator<<(QDebug dgb, const ProjectWelcomePageWidget::WelcomePageData &d) -+{ -+ dgb.nospace() << "PreviousSession=" << d.previousSession -+ << " activeSession=" << d.activeSession -+ << " sessionList=" << d.sessionList -+ << " projectList=" << d.projectList; -+ return dgb; -+} -+ -+ProjectWelcomePageWidget::ProjectWelcomePageWidget(QWidget *parent) : -+ QWidget(parent), -+ ui(new Ui::ProjectWelcomePageWidget) -+{ -+ ui->setupUi(this); -+ ui->projTitleLabel->setStyledText(tr("Open Recent Project")); -+ ui->recentSessionsTitleLabel->setStyledText(tr("Resume Session")); -+ updateWelcomePage(WelcomePageData()); -+ -+ connect(ui->sessTreeWidget, SIGNAL(activated(QString)), SLOT(slotSessionClicked(QString))); -+ connect(ui->projTreeWidget, SIGNAL(activated(QString)), SLOT(slotProjectClicked(QString))); -+ connect(ui->createNewProjectButton, SIGNAL(clicked()), SLOT(slotCreateNewProject())); -+ connect(ui->manageSessionsButton, SIGNAL(clicked()), SIGNAL(manageSessions())); -+ -+} -+ -+ProjectWelcomePageWidget::~ProjectWelcomePageWidget() -+{ -+ delete ui; -+} -+ -+void ProjectWelcomePageWidget::updateWelcomePage(const WelcomePageData &welcomePageData) -+{ -+ // Update only if data are modified -+ if (welcomePageData == lastData) -+ return; -+ lastData = welcomePageData; -+ -+ setUpdatesEnabled(false); -+ ui->sessTreeWidget->clear(); -+ ui->projTreeWidget->clear(); -+ -+ if (welcomePageData.sessionList.count() > 0) { -+ foreach (const QString &s, welcomePageData.sessionList) { -+ QString str = s; -+ if (s == welcomePageData.previousSession) -+ str = tr("%1 (last session)").arg(s); -+ ui->sessTreeWidget->addItem(str, s); -+ } -+ ui->sessTreeWidget->updateGeometry(); -+ ui->sessTreeWidget->show(); -+ } else { -+ ui->sessTreeWidget->hide(); -+ } -+ -+ typedef QPair<QString, QString> QStringPair; -+ if (welcomePageData.projectList.count() > 0) { -+ foreach (const QStringPair &it, welcomePageData.projectList) { -+ QTreeWidgetItem *item = ui->projTreeWidget->addItem(it.second, it.first); -+ const QFileInfo fi(it.first); -+ item->setToolTip(1, QDir::toNativeSeparators(fi.absolutePath())); -+ } -+ } else { -+ ui->projTreeWidget->hide(); -+ } -+ ui->projTreeWidget->updateGeometry(); -+ setUpdatesEnabled(true); -+} -+ -+void ProjectWelcomePageWidget::activateEditMode() -+{ -+ Core::ModeManager *modeManager = Core::ModeManager::instance(); -+ if (modeManager->currentMode() == modeManager->mode(Core::Constants::MODE_WELCOME)) -+ modeManager->activateMode(Core::Constants::MODE_EDIT); -+} -+ -+ -+void ProjectWelcomePageWidget::slotSessionClicked(const QString &data) -+{ -+ emit requestSession(data); -+ activateEditMode(); -+} -+ -+void ProjectWelcomePageWidget::slotProjectClicked(const QString &data) -+{ -+ emit requestProject(data); -+ activateEditMode(); -+} -+ -+void ProjectWelcomePageWidget::slotCreateNewProject() -+{ -+ Core::ICore::instance()->showNewItemDialog(tr("New Project..."), -+ Core::IWizard::wizardsOfKind(Core::IWizard::ProjectWizard)); -+} -diff --git a/src/plugins/projectexplorer/projectwelcomepagewidget.h b/src/plugins/projectexplorer/projectwelcomepagewidget.h -new file mode 100644 -index 0000000..ac94986 ---- /dev/null -+++ b/src/plugins/projectexplorer/projectwelcomepagewidget.h -@@ -0,0 +1,81 @@ -+/************************************************************************** -+** -+** This file is part of Qt Creator -+** -+** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -+** -+** Contact: Nokia Corporation (qt-info@nokia.com) -+** -+** Commercial Usage -+** -+** Licensees holding valid Qt Commercial licenses may use this file in -+** accordance with the Qt Commercial License Agreement provided with the -+** Software or, alternatively, in accordance with the terms contained in -+** a written agreement between you and Nokia. -+** -+** GNU Lesser General Public License Usage -+** -+** Alternatively, this file may be used under the terms of the GNU Lesser -+** General Public License version 2.1 as published by the Free Software -+** Foundation and appearing in the file LICENSE.LGPL included in the -+** packaging of this file. Please review the following information to -+** ensure the GNU Lesser General Public License version 2.1 requirements -+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -+** -+** If you are unsure which license is appropriate for your use, please -+** contact the sales department at http://www.qtsoftware.com/contact. -+** -+**************************************************************************/ -+ -+#ifndef PROJECTWELCOMEPAGEWIDGET_H -+#define PROJECTWELCOMEPAGEWIDGET_H -+ -+#include <QtGui/QWidget> -+ -+ -+namespace ProjectExplorer { -+ namespace Internal { -+ -+ -+namespace Ui { -+ class ProjectWelcomePageWidget; -+} -+ -+class ProjectWelcomePageWidget : public QWidget { -+ Q_OBJECT -+public: -+ ProjectWelcomePageWidget(QWidget *parent = 0); -+ ~ProjectWelcomePageWidget(); -+ -+ struct WelcomePageData{ -+ bool operator==(const WelcomePageData &rhs) const; -+ bool operator!=(const WelcomePageData &rhs) const; -+ -+ QString previousSession; -+ QString activeSession; -+ QStringList sessionList; -+ QList<QPair<QString, QString> > projectList; // pair of filename, displayname -+ }; -+ -+ void updateWelcomePage(const WelcomePageData &welcomePageData); -+ -+signals: -+ void requestProject(const QString &project); -+ void requestSession(const QString &session); -+ void manageSessions(); -+ -+private slots: -+ void slotSessionClicked(const QString &data); -+ void slotProjectClicked(const QString &data); -+ void slotCreateNewProject(); -+ -+private: -+ void activateEditMode(); -+ Ui::ProjectWelcomePageWidget *ui; -+ WelcomePageData lastData; -+}; -+ -+} -+} -+ -+#endif // PROJECTWELCOMEPAGEWIDGET_H -diff --git a/src/plugins/projectexplorer/projectwelcomepagewidget.ui b/src/plugins/projectexplorer/projectwelcomepagewidget.ui -new file mode 100644 -index 0000000..38558d4 ---- /dev/null -+++ b/src/plugins/projectexplorer/projectwelcomepagewidget.ui -@@ -0,0 +1,259 @@ -+<?xml version="1.0" encoding="UTF-8"?> -+<ui version="4.0"> -+ <class>ProjectExplorer::Internal::ProjectWelcomePageWidget</class> -+ <widget class="QWidget" name="ProjectExplorer::Internal::ProjectWelcomePageWidget"> -+ <property name="geometry"> -+ <rect> -+ <x>0</x> -+ <y>0</y> -+ <width>667</width> -+ <height>365</height> -+ </rect> -+ </property> -+ <property name="windowTitle"> -+ <string>Form</string> -+ </property> -+ <layout class="QHBoxLayout" name="horizontalLayout"> -+ <item> -+ <widget class="QFrame" name="recentSessionsFrame"> -+ <property name="sizePolicy"> -+ <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> -+ <horstretch>0</horstretch> -+ <verstretch>0</verstretch> -+ </sizepolicy> -+ </property> -+ <property name="minimumSize"> -+ <size> -+ <width>270</width> -+ <height>130</height> -+ </size> -+ </property> -+ <property name="styleSheet"> -+ <string/> -+ </property> -+ <layout class="QGridLayout" name="gridLayout_3"> -+ <property name="horizontalSpacing"> -+ <number>0</number> -+ </property> -+ <property name="verticalSpacing"> -+ <number>3</number> -+ </property> -+ <item row="0" column="0" colspan="3"> -+ <widget class="Core::Utils::WelcomeModeLabel" name="recentSessionsTitleLabel"> -+ <property name="sizePolicy"> -+ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Maximum"> -+ <horstretch>0</horstretch> -+ <verstretch>0</verstretch> -+ </sizepolicy> -+ </property> -+ <property name="alignment"> -+ <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> -+ </property> -+ </widget> -+ </item> -+ <item row="1" column="0" colspan="3"> -+ <widget class="Core::Utils::WelcomeModeTreeWidget" name="sessTreeWidget"> -+ <property name="sizePolicy"> -+ <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> -+ <horstretch>0</horstretch> -+ <verstretch>0</verstretch> -+ </sizepolicy> -+ </property> -+ <property name="focusPolicy"> -+ <enum>Qt::NoFocus</enum> -+ </property> -+ <property name="frameShape"> -+ <enum>QFrame::NoFrame</enum> -+ </property> -+ <property name="selectionMode"> -+ <enum>QAbstractItemView::NoSelection</enum> -+ </property> -+ <property name="verticalScrollMode"> -+ <enum>QAbstractItemView::ScrollPerPixel</enum> -+ </property> -+ <property name="rootIsDecorated"> -+ <bool>false</bool> -+ </property> -+ <property name="uniformRowHeights"> -+ <bool>true</bool> -+ </property> -+ <property name="allColumnsShowFocus"> -+ <bool>true</bool> -+ </property> -+ <property name="columnCount"> -+ <number>2</number> -+ </property> -+ <attribute name="headerVisible"> -+ <bool>false</bool> -+ </attribute> -+ <attribute name="headerDefaultSectionSize"> -+ <number>24</number> -+ </attribute> -+ <attribute name="headerMinimumSectionSize"> -+ <number>0</number> -+ </attribute> -+ <column> -+ <property name="text"> -+ <string notr="true">1</string> -+ </property> -+ </column> -+ <column> -+ <property name="text"> -+ <string notr="true">2</string> -+ </property> -+ </column> -+ </widget> -+ </item> -+ <item row="3" column="0"> -+ <widget class="QPushButton" name="manageSessionsButton"> -+ <property name="focusPolicy"> -+ <enum>Qt::TabFocus</enum> -+ </property> -+ <property name="text"> -+ <string>Manage Sessions...</string> -+ </property> -+ </widget> -+ </item> -+ <item row="4" column="0"> -+ <spacer name="verticalSpacer"> -+ <property name="orientation"> -+ <enum>Qt::Vertical</enum> -+ </property> -+ <property name="sizeHint" stdset="0"> -+ <size> -+ <width>20</width> -+ <height>40</height> -+ </size> -+ </property> -+ </spacer> -+ </item> -+ </layout> -+ </widget> -+ </item> -+ <item> -+ <widget class="QFrame" name="recentProjectsFrame"> -+ <property name="styleSheet"> -+ <string/> -+ </property> -+ <layout class="QGridLayout" name="gridLayout_5"> -+ <property name="horizontalSpacing"> -+ <number>0</number> -+ </property> -+ <property name="verticalSpacing"> -+ <number>3</number> -+ </property> -+ <property name="rightMargin"> -+ <number>9</number> -+ </property> -+ <item row="0" column="0" colspan="3"> -+ <widget class="Core::Utils::WelcomeModeLabel" name="projTitleLabel"> -+ <property name="sizePolicy"> -+ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Maximum"> -+ <horstretch>0</horstretch> -+ <verstretch>0</verstretch> -+ </sizepolicy> -+ </property> -+ <property name="alignment"> -+ <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> -+ </property> -+ </widget> -+ </item> -+ <item row="1" column="0" colspan="3"> -+ <widget class="Core::Utils::WelcomeModeTreeWidget" name="projTreeWidget"> -+ <property name="sizePolicy"> -+ <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> -+ <horstretch>0</horstretch> -+ <verstretch>0</verstretch> -+ </sizepolicy> -+ </property> -+ <property name="focusPolicy"> -+ <enum>Qt::NoFocus</enum> -+ </property> -+ <property name="frameShape"> -+ <enum>QFrame::NoFrame</enum> -+ </property> -+ <property name="selectionMode"> -+ <enum>QAbstractItemView::NoSelection</enum> -+ </property> -+ <property name="verticalScrollMode"> -+ <enum>QAbstractItemView::ScrollPerPixel</enum> -+ </property> -+ <property name="rootIsDecorated"> -+ <bool>false</bool> -+ </property> -+ <property name="uniformRowHeights"> -+ <bool>true</bool> -+ </property> -+ <property name="allColumnsShowFocus"> -+ <bool>true</bool> -+ </property> -+ <property name="columnCount"> -+ <number>2</number> -+ </property> -+ <attribute name="headerVisible"> -+ <bool>false</bool> -+ </attribute> -+ <attribute name="headerDefaultSectionSize"> -+ <number>24</number> -+ </attribute> -+ <attribute name="headerMinimumSectionSize"> -+ <number>0</number> -+ </attribute> -+ <column> -+ <property name="text"> -+ <string notr="true">1</string> -+ </property> -+ </column> -+ <column> -+ <property name="text"> -+ <string notr="true">2</string> -+ </property> -+ </column> -+ </widget> -+ </item> -+ <item row="3" column="0"> -+ <widget class="QPushButton" name="createNewProjectButton"> -+ <property name="focusPolicy"> -+ <enum>Qt::TabFocus</enum> -+ </property> -+ <property name="text"> -+ <string>Create New Project...</string> -+ </property> -+ <property name="flat"> -+ <bool>false</bool> -+ </property> -+ </widget> -+ </item> -+ <item row="4" column="0"> -+ <spacer name="verticalSpacer_2"> -+ <property name="orientation"> -+ <enum>Qt::Vertical</enum> -+ </property> -+ <property name="sizeHint" stdset="0"> -+ <size> -+ <width>20</width> -+ <height>40</height> -+ </size> -+ </property> -+ </spacer> -+ </item> -+ </layout> -+ </widget> -+ </item> -+ </layout> -+ </widget> -+ <customwidgets> -+ <customwidget> -+ <class>Core::Utils::WelcomeModeTreeWidget</class> -+ <extends>QTreeWidget</extends> -+ <header>utils/welcomemodetreewidget.h</header> -+ </customwidget> -+ <customwidget> -+ <class>Core::Utils::WelcomeModeLabel</class> -+ <extends>QLabel</extends> -+ <header>utils/welcomemodetreewidget.h</header> -+ </customwidget> -+ </customwidgets> -+ <resources/> -+ <connections/> -+</ui> -diff --git a/src/plugins/projectexplorer/projectwelcomeplugin.ui b/src/plugins/projectexplorer/projectwelcomeplugin.ui -new file mode 100644 -index 0000000..9ad7e16 ---- /dev/null -+++ b/src/plugins/projectexplorer/projectwelcomeplugin.ui -@@ -0,0 +1,21 @@ -+<ui version="4.0" > -+ <author/> -+ <comment/> -+ <exportmacro/> -+ <class>ProjectWelcomePage</class> -+ <widget class="QWidget" name="ProjectWelcomePage" > -+ <property name="geometry" > -+ <rect> -+ <x>0</x> -+ <y>0</y> -+ <width>400</width> -+ <height>300</height> -+ </rect> -+ </property> -+ <property name="windowTitle" > -+ <string>Form</string> -+ </property> -+ </widget> -+ <pixmapfunction/> -+ <connections/> -+</ui> -diff --git a/src/plugins/qt4projectmanager/Qt4ProjectManager.pluginspec b/src/plugins/qt4projectmanager/Qt4ProjectManager.pluginspec -index 3b515bd..c4b8d44 100644 ---- a/src/plugins/qt4projectmanager/Qt4ProjectManager.pluginspec -+++ b/src/plugins/qt4projectmanager/Qt4ProjectManager.pluginspec -@@ -25,6 +25,5 @@ will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.</license> - <dependency name="CppEditor" version="1.2.80"/> - <dependency name="Help" version="1.2.80"/> - <dependency name="Designer" version="1.2.80"/> -- <dependency name="Welcome" version="1.2.80"/> - </dependencyList> - </plugin> -diff --git a/src/plugins/qt4projectmanager/gettingstartedwelcomepage.cpp b/src/plugins/qt4projectmanager/gettingstartedwelcomepage.cpp -new file mode 100644 -index 0000000..379d459 ---- /dev/null -+++ b/src/plugins/qt4projectmanager/gettingstartedwelcomepage.cpp -@@ -0,0 +1,47 @@ -+/************************************************************************** -+** -+** This file is part of Qt Creator -+** -+** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -+** -+** Contact: Nokia Corporation (qt-info@nokia.com) -+** -+** Commercial Usage -+** -+** Licensees holding valid Qt Commercial licenses may use this file in -+** accordance with the Qt Commercial License Agreement provided with the -+** Software or, alternatively, in accordance with the terms contained in -+** a written agreement between you and Nokia. -+** -+** GNU Lesser General Public License Usage -+** -+** Alternatively, this file may be used under the terms of the GNU Lesser -+** General Public License version 2.1 as published by the Free Software -+** Foundation and appearing in the file LICENSE.LGPL included in the -+** packaging of this file. Please review the following information to -+** ensure the GNU Lesser General Public License version 2.1 requirements -+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -+** -+** If you are unsure which license is appropriate for your use, please -+** contact the sales department at http://www.qtsoftware.com/contact. -+** -+**************************************************************************/ -+ -+#include "gettingstartedwelcomepage.h" -+#include "gettingstartedwelcomepagewidget.h" -+ -+namespace Qt4ProjectManager { -+namespace Internal { -+ -+GettingStartedWelcomePage::GettingStartedWelcomePage() -+ : m_page(new GettingStartedWelcomePageWidget) -+{ -+} -+ -+QWidget* GettingStartedWelcomePage::page() -+{ -+ return m_page; -+} -+ -+} // namespace Internal -+} // namespace Qt4ProjectManager -diff --git a/src/plugins/qt4projectmanager/gettingstartedwelcomepage.h b/src/plugins/qt4projectmanager/gettingstartedwelcomepage.h -new file mode 100644 -index 0000000..2534f7a ---- /dev/null -+++ b/src/plugins/qt4projectmanager/gettingstartedwelcomepage.h -@@ -0,0 +1,56 @@ -+/************************************************************************** -+** -+** This file is part of Qt Creator -+** -+** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -+** -+** Contact: Nokia Corporation (qt-info@nokia.com) -+** -+** Commercial Usage -+** -+** Licensees holding valid Qt Commercial licenses may use this file in -+** accordance with the Qt Commercial License Agreement provided with the -+** Software or, alternatively, in accordance with the terms contained in -+** a written agreement between you and Nokia. -+** -+** GNU Lesser General Public License Usage -+** -+** Alternatively, this file may be used under the terms of the GNU Lesser -+** General Public License version 2.1 as published by the Free Software -+** Foundation and appearing in the file LICENSE.LGPL included in the -+** packaging of this file. Please review the following information to -+** ensure the GNU Lesser General Public License version 2.1 requirements -+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -+** -+** If you are unsure which license is appropriate for your use, please -+** contact the sales department at http://www.qtsoftware.com/contact. -+** -+**************************************************************************/ -+ -+#ifndef GETTINGSTARTEDWELCOMEPLUGIN_H -+#define GETTINGSTARTEDWELCOMEPLUGIN_H -+ -+#include <extensionsystem/iwelcomepage.h> -+ -+namespace Qt4ProjectManager { -+namespace Internal { -+ -+class GettingStartedWelcomePageWidget; -+ -+class GettingStartedWelcomePage : public ExtensionSystem::IWelcomePage -+{ -+public: -+ GettingStartedWelcomePage(); -+ -+ QWidget *page(); -+ QString title() const { return tr("Getting Started");} -+ int priority() const { return 10; } -+ -+private: -+ GettingStartedWelcomePageWidget *m_page; -+}; -+ -+} // namespace Internal -+} // namespace Qt4ProjectManager -+ -+#endif // GETTINGSTARTEDWELCOMEPLUGIN_H -diff --git a/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.cpp b/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.cpp -new file mode 100644 -index 0000000..41dd90d ---- /dev/null -+++ b/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.cpp -@@ -0,0 +1,259 @@ -+/************************************************************************** -+** -+** This file is part of Qt Creator -+** -+** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -+** -+** Contact: Nokia Corporation (qt-info@nokia.com) -+** -+** Commercial Usage -+** -+** Licensees holding valid Qt Commercial licenses may use this file in -+** accordance with the Qt Commercial License Agreement provided with the -+** Software or, alternatively, in accordance with the terms contained in -+** a written agreement between you and Nokia. -+** -+** GNU Lesser General Public License Usage -+** -+** Alternatively, this file may be used under the terms of the GNU Lesser -+** General Public License version 2.1 as published by the Free Software -+** Foundation and appearing in the file LICENSE.LGPL included in the -+** packaging of this file. Please review the following information to -+** ensure the GNU Lesser General Public License version 2.1 requirements -+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -+** -+** If you are unsure which license is appropriate for your use, please -+** contact the sales department at http://www.qtsoftware.com/contact. -+** -+**************************************************************************/ -+ -+#include "gettingstartedwelcomepagewidget.h" -+#include "ui_gettingstartedwelcomepagewidget.h" -+ -+#include <coreplugin/icore.h> -+#include <coreplugin/coreconstants.h> -+ -+#include <extensionsystem/pluginmanager.h> -+ -+#include <help/helpplugin.h> -+ -+#include <QtCore/QDateTime> -+#include <QtCore/QDir> -+#include <QtCore/QFileInfo> -+#include <QtCore/QDebug> -+#include <QtCore/QUrl> -+#include <QtCore/QXmlStreamReader> -+#include <QtGui/QFont> -+ -+namespace Qt4ProjectManager { -+namespace Internal { -+ -+// TODO: remove -+ -+GettingStartedWelcomePageWidget::GettingStartedWelcomePageWidget(QWidget *parent) : -+ QWidget(parent), -+ ui(new Ui::GettingStartedWelcomePageWidget) -+{ -+ ui->setupUi(this); -+ ui->tutorialsTitleLabel->setStyledText(tr("Tutorials")); -+ ui->demoTitleLabel->setStyledText(tr("Explore Qt Examples")); -+ ui->didYouKnowTextBrowser->viewport()->setAutoFillBackground(false); -+ ui->didYouKnowTitleLabel->setStyledText(tr("Did You Know?")); -+ -+ connect(ui->tutorialTreeWidget, SIGNAL(activated(QString)), SLOT(slotOpenHelpPage(const QString&))); -+ connect(ui->openExampleButton, SIGNAL(clicked()), SLOT(slotOpenExample())); -+ connect(ui->examplesComboBox, SIGNAL(currentIndexChanged(int)), SLOT(slotEnableExampleButton(int))); -+ -+ ui->tutorialTreeWidget->addItem(tr("<b>Qt Creator - A quick tour</b>"), -+ QString("qthelp://com.nokia.qtcreator.%1%2/doc/index.html").arg(IDE_VERSION_MAJOR).arg(IDE_VERSION_MINOR)); -+ ui->tutorialTreeWidget->addItem(tr("Creating an address book"), -+ QLatin1String("qthelp://com.nokia.qtcreator/doc/tutorials-addressbook-sdk.html")); -+ ui->tutorialTreeWidget->addItem(tr("Understanding widgets"), -+ QLatin1String("qthelp://com.trolltech.qt/qdoc/widgets-tutorial.html")); -+ ui->tutorialTreeWidget->addItem(tr("Building with qmake"), -+ QLatin1String("qthelp://com.trolltech.qmake/qdoc/qmake-tutorial.html")); -+ ui->tutorialTreeWidget->addItem(tr("Writing test cases"), -+ QLatin1String("qthelp://com.trolltech.qt/qdoc/qtestlib-tutorial.html")); -+ -+ srand(QDateTime::currentDateTime().toTime_t()); -+ QStringList tips = tipsOfTheDay(); -+ m_currentTip = rand()%tips.count(); -+ -+ QTextDocument *doc = ui->didYouKnowTextBrowser->document(); -+ doc->setDefaultStyleSheet("a:link {color:black;}"); -+ ui->didYouKnowTextBrowser->setDocument(doc); -+ ui->didYouKnowTextBrowser->setText(tips.at(m_currentTip)); -+ -+ connect(ui->nextTipBtn, SIGNAL(clicked()), this, SLOT(slotNextTip())); -+ connect(ui->prevTipBtn, SIGNAL(clicked()), this, SLOT(slotPrevTip())); -+ -+} -+ -+GettingStartedWelcomePageWidget::~GettingStartedWelcomePageWidget() -+{ -+ delete ui; -+} -+ -+void GettingStartedWelcomePageWidget::updateExamples(const QString& examplePath, const QString& demosPath, const QString &sourcePath) -+{ -+ QString demoxml = demosPath + "/qtdemo/xml/examples.xml"; -+ if (!QFile::exists(demoxml)) { -+ demoxml = sourcePath + "/demos/qtdemo/xml/examples.xml"; -+ if (!QFile::exists(demoxml)) -+ return; -+ } -+ -+ QFile description(demoxml); -+ if (!description.open(QFile::ReadOnly)) -+ return; -+ -+ ui->examplesComboBox->clear(); -+ ui->examplesComboBox->setEnabled(true); -+ -+ ui->examplesComboBox->addItem(tr("Choose an example...")); -+ QFont f = font(); -+ f.setItalic(true); -+ ui->examplesComboBox->setItemData(0, f, Qt::FontRole); -+ f.setItalic(false); -+ bool inExamples = false; -+ QString dirName; -+ QXmlStreamReader reader(&description); -+ while (!reader.atEnd()) { -+ switch (reader.readNext()) { -+ case QXmlStreamReader::StartElement: -+ if (reader.name() == "category") { -+ QString name = reader.attributes().value(QLatin1String("name")).toString(); -+ if (name.contains("tutorial")) -+ break; -+ dirName = reader.attributes().value(QLatin1String("dirname")).toString(); -+ ui->examplesComboBox->addItem(name); -+ f.setBold(true); -+ ui->examplesComboBox->setItemData(ui->examplesComboBox->count()-1, f, Qt::FontRole); -+ f.setBold(false); -+ inExamples = true; -+ } -+ if (inExamples && reader.name() == "example") { -+ QString name = reader.attributes().value(QLatin1String("name")).toString(); -+ QString fn = reader.attributes().value(QLatin1String("filename")).toString(); -+ QString relativeProPath = '/' + dirName + '/' + fn + '/' + fn + ".pro"; -+ QString fileName = examplePath + relativeProPath; -+ if (!QFile::exists(fileName)) -+ fileName = sourcePath + "/examples" + relativeProPath; -+ QString helpPath = "qthelp://com.trolltech.qt/qdoc/" + dirName.replace("/", "-") + "-" + fn + ".html"; -+ -+ ui->examplesComboBox->addItem(" " + name, fileName); -+ ui->examplesComboBox->setItemData(ui->examplesComboBox->count()-1, helpPath, Qt::UserRole+1); -+ } -+ break; -+ case QXmlStreamReader::EndElement: -+ if (reader.name() == "category") -+ inExamples = false; -+ break; -+ default: -+ break; -+ } -+ } -+} -+ -+void GettingStartedWelcomePageWidget::slotEnableExampleButton(int index) -+{ -+ QString fileName = ui->examplesComboBox->itemData(index, Qt::UserRole).toString(); -+ ui->openExampleButton->setEnabled(!fileName.isEmpty()); -+} -+ -+void GettingStartedWelcomePageWidget::slotOpenExample() -+{ -+ QComboBox *box = ui->examplesComboBox; -+ QString proFile = box->itemData(box->currentIndex(), Qt::UserRole).toString(); -+ QString helpFile = box->itemData(box->currentIndex(), Qt::UserRole + 1).toString(); -+ QStringList files; -+ QFileInfo fi(proFile); -+ QString tryFile = fi.path() + "/main.cpp"; -+ files << proFile; -+ if(!QFile::exists(tryFile)) -+ tryFile = fi.path() + '/' + fi.baseName() + ".cpp"; -+ if(QFile::exists(tryFile)) -+ files << tryFile; -+ Core::ICore::instance()->openFiles(files); -+ slotOpenContextHelpPage(helpFile); -+} -+ -+void GettingStartedWelcomePageWidget::slotOpenHelpPage(const QString& url) -+{ -+ Help::HelpManager *helpManager -+ = ExtensionSystem::PluginManager::instance()->getObject<Help::HelpManager>(); -+ Q_ASSERT(helpManager); -+ helpManager->openHelpPage(url); -+} -+void GettingStartedWelcomePageWidget::slotOpenContextHelpPage(const QString& url) -+{ -+ Help::HelpManager *helpManager -+ = ExtensionSystem::PluginManager::instance()->getObject<Help::HelpManager>(); -+ Q_ASSERT(helpManager); -+ helpManager->openContextHelpPage(url); -+} -+ -+void GettingStartedWelcomePageWidget::slotNextTip() -+{ -+ QStringList tips = tipsOfTheDay(); -+ m_currentTip = ((m_currentTip+1)%tips.count()); -+ ui->didYouKnowTextBrowser->setText(tips.at(m_currentTip)); -+} -+ -+void GettingStartedWelcomePageWidget::slotPrevTip() -+{ -+ QStringList tips = tipsOfTheDay(); -+ m_currentTip = ((m_currentTip-1)+tips.count())%tips.count(); -+ ui->didYouKnowTextBrowser->setText(tips.at(m_currentTip)); -+} -+ -+QStringList GettingStartedWelcomePageWidget::tipsOfTheDay() -+{ -+ static QStringList tips; -+ if (tips.isEmpty()) { -+ QString altShortcut = -+#ifdef Q_WS_MAC -+ tr("Cmd", "Shortcut key"); -+#else -+ tr("Alt", "Shortcut key"); -+#endif -+ tips.append(tr("You can switch between Qt Creator's modes using <tt>Ctrl+number</tt>:<ul>" -+ "<li>1 - Welcome</li><li>2 - Edit</li><li>3 - Debug</li><li>4 - Projects</li><li>5 - Help</li>" -+ "<li></li><li>6 - Output</li></ul>")); -+ //:%1 gets replaced by Alt (Win/Unix) or Cmd (Mac) -+ tips.append(tr("You can show and hide the side bar using <tt>%1+0<tt>.").arg(altShortcut)); -+ tips.append(tr("You can fine tune the <tt>Find</tt> function by selecting "Whole Words" " -+ "or "Case Sensitive". Simply click on the icons on the right end of the line edit.")); -+ tips.append(tr("If you add <a href=\"qthelp://com.nokia.qtcreator/doc/creator-external-library-handling.html\"" -+ ">external libraries</a>, Qt Creator will automatically offer syntax highlighting " -+ "and code completion.")); -+ tips.append(tr("The code completion is CamelCase-aware. For example, to complete <tt>namespaceUri</tt> " -+ "you can just type <tt>nU</tt> and hit <tt>Ctrl+Space</tt>.")); -+ tips.append(tr("You can force code completion at any time using <tt>Ctrl+Space</tt>.")); -+ tips.append(tr("You can start Qt Creator with a session by calling <tt>qtcreator <sessionname></tt>.")); -+ tips.append(tr("You can return to edit mode from any other mode at any time by hitting <tt>Escape</tt>.")); -+ //:%1 gets replaced by Alt (Win/Unix) or Cmd (Mac) -+ tips.append(tr("You can switch between the output pane by hitting <tt>%1+n</tt> where n is the number denoted " -+ "on the buttons at the window bottom:" -+ "<ul><li>1 - Build Issues</li><li>2 - Search Results</li><li>3 - Application Output</li>" -+ "<li>4 - Compile Output</li></ul>").arg(altShortcut)); -+ tips.append(tr("You can quickly search methods, classes, help and more using the " -+ "<a href=\"qthelp://com.nokia.qtcreator/doc/creator-navigation.html\">Locator bar</a> (<tt>Ctrl+K</tt>).")); -+ tips.append(tr("You can add custom build steps in the " -+ "<a href=\"qthelp://com.nokia.qtcreator/doc/creator-build-settings.html\">build settings</a>.")); -+ tips.append(tr("Within a session, you can add " -+ "<a href=\"qthelp://com.nokia.qtcreator/doc/creator-build-settings.html#dependencies\">dependencies</a> between projects.")); -+ tips.append(tr("You can set the preferred editor encoding for every project in <tt>Projects -> Editor Settings -> Default Encoding</tt>.")); -+ tips.append(tr("You can modify the binary that is being executed when you press the <tt>Run</tt> button: Add a <tt>Custom Executable</tt> " -+ "by clicking the <tt>+</tt> button in <tt>Projects -> Run Settings -> Run Configuration</tt> and then select the new " -+ "target in the combo box.")); -+ tips.append(tr("You can use Qt Creator with a number of <a href=\"qthelp://com.nokia.qtcreator/doc/creator-version-control.html\">" -+ "revision control systems</a> such as Subversion, Perforce and Git.")); -+ tips.append(tr("In the editor, <tt>F2</tt> toggles declaration and definition while <tt>F4</tt> toggles header file and source file.")); -+ } -+ return tips; -+} -+ -+ -+} // namespace Internal -+} // namespace Qt4ProjectManager -diff --git a/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.h b/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.h -new file mode 100644 -index 0000000..fdc6ec0 ---- /dev/null -+++ b/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.h -@@ -0,0 +1,69 @@ -+/************************************************************************** -+** -+** This file is part of Qt Creator -+** -+** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -+** -+** Contact: Nokia Corporation (qt-info@nokia.com) -+** -+** Commercial Usage -+** -+** Licensees holding valid Qt Commercial licenses may use this file in -+** accordance with the Qt Commercial License Agreement provided with the -+** Software or, alternatively, in accordance with the terms contained in -+** a written agreement between you and Nokia. -+** -+** GNU Lesser General Public License Usage -+** -+** Alternatively, this file may be used under the terms of the GNU Lesser -+** General Public License version 2.1 as published by the Free Software -+** Foundation and appearing in the file LICENSE.LGPL included in the -+** packaging of this file. Please review the following information to -+** ensure the GNU Lesser General Public License version 2.1 requirements -+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -+** -+** If you are unsure which license is appropriate for your use, please -+** contact the sales department at http://www.qtsoftware.com/contact. -+** -+**************************************************************************/ -+ -+#ifndef GETTINGSTARTEDWELCOMEPAGEWIDGET_H -+#define GETTINGSTARTEDWELCOMEPAGEWIDGET_H -+ -+#include <QWidget> -+ -+namespace Qt4ProjectManager { -+namespace Internal { -+ -+namespace Ui { -+ class GettingStartedWelcomePageWidget; -+} -+ -+class GettingStartedWelcomePageWidget : public QWidget { -+ Q_OBJECT -+public: -+ GettingStartedWelcomePageWidget(QWidget *parent = 0); -+ ~GettingStartedWelcomePageWidget(); -+ -+ public slots: -+ void updateExamples(const QString& examplePath, const QString& demosPath, const QString &sourcePath); -+ -+private slots: -+ void slotOpenHelpPage(const QString& url); -+ void slotOpenContextHelpPage(const QString& url); -+ void slotEnableExampleButton(int); -+ void slotOpenExample(); -+ void slotNextTip(); -+ void slotPrevTip(); -+ -+private: -+ QStringList tipsOfTheDay(); -+ -+ Ui::GettingStartedWelcomePageWidget *ui; -+ int m_currentTip; -+}; -+ -+ -+} // namespace Internal -+} // namespace Qt4ProjectManager -+#endif // GETTINGSTARTEDWELCOMEPAGEWIDGET_H -diff --git a/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.ui b/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.ui -new file mode 100644 -index 0000000..e4dc34b ---- /dev/null -+++ b/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.ui -@@ -0,0 +1,348 @@ -+<?xml version="1.0" encoding="UTF-8"?> -+<ui version="4.0"> -+ <class>Qt4ProjectManager::Internal::GettingStartedWelcomePageWidget</class> -+ <widget class="QWidget" name="Qt4ProjectManager::Internal::GettingStartedWelcomePageWidget"> -+ <property name="geometry"> -+ <rect> -+ <x>0</x> -+ <y>0</y> -+ <width>646</width> -+ <height>361</height> -+ </rect> -+ </property> -+ <property name="windowTitle"> -+ <string>Form</string> -+ </property> -+ <layout class="QGridLayout" name="gridLayout"> -+ <item row="0" column="0" rowspan="2"> -+ <widget class="QFrame" name="tutorialsFrame"> -+ <property name="sizePolicy"> -+ <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> -+ <horstretch>0</horstretch> -+ <verstretch>0</verstretch> -+ </sizepolicy> -+ </property> -+ <property name="maximumSize"> -+ <size> -+ <width>400</width> -+ <height>16777215</height> -+ </size> -+ </property> -+ <property name="styleSheet"> -+ <string/> -+ </property> -+ <layout class="QGridLayout" name="gridLayout_6"> -+ <item row="0" column="0"> -+ <widget class="Core::Utils::WelcomeModeLabel" name="tutorialsTitleLabel"> -+ <property name="sizePolicy"> -+ <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> -+ <horstretch>0</horstretch> -+ <verstretch>0</verstretch> -+ </sizepolicy> -+ </property> -+ <property name="alignment"> -+ <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> -+ </property> -+ </widget> -+ </item> -+ <item row="1" column="0"> -+ <widget class="Core::Utils::WelcomeModeTreeWidget" name="tutorialTreeWidget"> -+ <property name="sizePolicy"> -+ <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> -+ <horstretch>0</horstretch> -+ <verstretch>0</verstretch> -+ </sizepolicy> -+ </property> -+ <property name="focusPolicy"> -+ <enum>Qt::NoFocus</enum> -+ </property> -+ <property name="frameShape"> -+ <enum>QFrame::NoFrame</enum> -+ </property> -+ <property name="selectionMode"> -+ <enum>QAbstractItemView::NoSelection</enum> -+ </property> -+ <property name="verticalScrollMode"> -+ <enum>QAbstractItemView::ScrollPerPixel</enum> -+ </property> -+ <property name="rootIsDecorated"> -+ <bool>false</bool> -+ </property> -+ <property name="uniformRowHeights"> -+ <bool>true</bool> -+ </property> -+ <property name="allColumnsShowFocus"> -+ <bool>true</bool> -+ </property> -+ <property name="columnCount"> -+ <number>2</number> -+ </property> -+ <attribute name="headerVisible"> -+ <bool>false</bool> -+ </attribute> -+ <attribute name="headerDefaultSectionSize"> -+ <number>24</number> -+ </attribute> -+ <attribute name="headerMinimumSectionSize"> -+ <number>0</number> -+ </attribute> -+ <column> -+ <property name="text"> -+ <string notr="true">1</string> -+ </property> -+ </column> -+ <column> -+ <property name="text"> -+ <string notr="true">2</string> -+ </property> -+ </column> -+ </widget> -+ </item> -+ </layout> -+ </widget> -+ </item> -+ <item row="0" column="1"> -+ <widget class="QFrame" name="demosExamplesFrame"> -+ <property name="sizePolicy"> -+ <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> -+ <horstretch>0</horstretch> -+ <verstretch>0</verstretch> -+ </sizepolicy> -+ </property> -+ <property name="maximumSize"> -+ <size> -+ <width>400</width> -+ <height>16777215</height> -+ </size> -+ </property> -+ <property name="styleSheet"> -+ <string/> -+ </property> -+ <layout class="QGridLayout" name="gridLayout_8"> -+ <property name="rightMargin"> -+ <number>8</number> -+ </property> -+ <property name="horizontalSpacing"> -+ <number>0</number> -+ </property> -+ <item row="0" column="0" colspan="4"> -+ <widget class="Core::Utils::WelcomeModeLabel" name="demoTitleLabel"> -+ <property name="alignment"> -+ <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> -+ </property> -+ </widget> -+ </item> -+ <item row="1" column="0"> -+ <widget class="QComboBox" name="examplesComboBox"> -+ <property name="enabled"> -+ <bool>false</bool> -+ </property> -+ <property name="sizePolicy"> -+ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred"> -+ <horstretch>0</horstretch> -+ <verstretch>0</verstretch> -+ </sizepolicy> -+ </property> -+ <item> -+ <property name="text"> -+ <string>Examples not installed</string> -+ </property> -+ </item> -+ </widget> -+ </item> -+ <item row="1" column="2"> -+ <widget class="QToolButton" name="openExampleButton"> -+ <property name="enabled"> -+ <bool>false</bool> -+ </property> -+ <property name="sizePolicy"> -+ <sizepolicy hsizetype="Fixed" vsizetype="Preferred"> -+ <horstretch>0</horstretch> -+ <verstretch>0</verstretch> -+ </sizepolicy> -+ </property> -+ <property name="text"> -+ <string>Open</string> -+ </property> -+ </widget> -+ </item> -+ <item row="1" column="1"> -+ <spacer name="horizontalSpacer"> -+ <property name="orientation"> -+ <enum>Qt::Horizontal</enum> -+ </property> -+ <property name="sizeType"> -+ <enum>QSizePolicy::Fixed</enum> -+ </property> -+ <property name="sizeHint" stdset="0"> -+ <size> -+ <width>6</width> -+ <height>6</height> -+ </size> -+ </property> -+ </spacer> -+ </item> -+ </layout> -+ </widget> -+ </item> -+ <item row="1" column="1"> -+ <widget class="QFrame" name="didyouKnowFrame"> -+ <property name="sizePolicy"> -+ <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> -+ <horstretch>0</horstretch> -+ <verstretch>0</verstretch> -+ </sizepolicy> -+ </property> -+ <property name="maximumSize"> -+ <size> -+ <width>400</width> -+ <height>16777215</height> -+ </size> -+ </property> -+ <property name="styleSheet"> -+ <string/> -+ </property> -+ <layout class="QGridLayout" name="gridLayout_11"> -+ <property name="rightMargin"> -+ <number>9</number> -+ </property> -+ <item row="0" column="0"> -+ <widget class="Core::Utils::WelcomeModeLabel" name="didYouKnowTitleLabel"> -+ <property name="sizePolicy"> -+ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Maximum"> -+ <horstretch>0</horstretch> -+ <verstretch>0</verstretch> -+ </sizepolicy> -+ </property> -+ <property name="alignment"> -+ <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> -+ </property> -+ </widget> -+ </item> -+ <item row="1" column="0" colspan="2"> -+ <widget class="QTextBrowser" name="didYouKnowTextBrowser"> -+ <property name="sizePolicy"> -+ <sizepolicy hsizetype="Minimum" vsizetype="Preferred"> -+ <horstretch>0</horstretch> -+ <verstretch>0</verstretch> -+ </sizepolicy> -+ </property> -+ <property name="frameShape"> -+ <enum>QFrame::NoFrame</enum> -+ </property> -+ <property name="frameShadow"> -+ <enum>QFrame::Plain</enum> -+ </property> -+ <property name="verticalScrollBarPolicy"> -+ <enum>Qt::ScrollBarAlwaysOff</enum> -+ </property> -+ <property name="horizontalScrollBarPolicy"> -+ <enum>Qt::ScrollBarAlwaysOff</enum> -+ </property> -+ <property name="openExternalLinks"> -+ <bool>true</bool> -+ </property> -+ </widget> -+ </item> -+ <item row="0" column="1"> -+ <layout class="QGridLayout" name="gridLayout_10"> -+ <property name="spacing"> -+ <number>0</number> -+ </property> -+ <item row="0" column="0" colspan="2"> -+ <spacer name="verticalSpacer_4"> -+ <property name="orientation"> -+ <enum>Qt::Vertical</enum> -+ </property> -+ <property name="sizeType"> -+ <enum>QSizePolicy::Preferred</enum> -+ </property> -+ <property name="sizeHint" stdset="0"> -+ <size> -+ <width>20</width> -+ <height>2</height> -+ </size> -+ </property> -+ </spacer> -+ </item> -+ <item row="1" column="0"> -+ <widget class="QToolButton" name="prevTipBtn"> -+ <property name="styleSheet"> -+ <string notr="true">QToolButton{ -+ border-right:solid 0 px; -+ height:16px; -+ width:12px; -+} -+</string> -+ </property> -+ <property name="text"> -+ <string/> -+ </property> -+ <property name="icon"> -+ <iconset resource="../welcome/welcome.qrc"> -+ <normaloff>:/welcome/images/arrow-left.png</normaloff>:/welcome/images/arrow-left.png</iconset> -+ </property> -+ <property name="arrowType"> -+ <enum>Qt::NoArrow</enum> -+ </property> -+ </widget> -+ </item> -+ <item row="1" column="1"> -+ <widget class="QToolButton" name="nextTipBtn"> -+ <property name="styleSheet"> -+ <string notr="true">QToolButton{ -+ border-left:solid 0 px; -+ height:16px; -+ width:12px; -+} -+</string> -+ </property> -+ <property name="text"> -+ <string/> -+ </property> -+ <property name="icon"> -+ <iconset resource="../welcome/welcome.qrc"> -+ <normaloff>:/welcome/images/arrow-right.png</normaloff>:/welcome/images/arrow-right.png</iconset> -+ </property> -+ <property name="arrowType"> -+ <enum>Qt::NoArrow</enum> -+ </property> -+ </widget> -+ </item> -+ <item row="2" column="0" colspan="2"> -+ <spacer name="verticalSpacer_3"> -+ <property name="orientation"> -+ <enum>Qt::Vertical</enum> -+ </property> -+ <property name="sizeHint" stdset="0"> -+ <size> -+ <width>20</width> -+ <height>2</height> -+ </size> -+ </property> -+ </spacer> -+ </item> -+ </layout> -+ </item> -+ </layout> -+ </widget> -+ </item> -+ </layout> -+ </widget> -+ <customwidgets> -+ <customwidget> -+ <class>Core::Utils::WelcomeModeTreeWidget</class> -+ <extends>QTreeWidget</extends> -+ <header>utils/welcomemodetreewidget.h</header> -+ </customwidget> -+ <customwidget> -+ <class>Core::Utils::WelcomeModeLabel</class> -+ <extends>QLabel</extends> -+ <header>utils/welcomemodetreewidget.h</header> -+ </customwidget> -+ </customwidgets> -+ <resources> -+ <include location="../welcome/welcome.qrc"/> -+ </resources> -+ <connections/> -+</ui> -diff --git a/src/plugins/qt4projectmanager/qt4projectmanager.pro b/src/plugins/qt4projectmanager/qt4projectmanager.pro -index 6b69139..a85ffce 100644 ---- a/src/plugins/qt4projectmanager/qt4projectmanager.pro -+++ b/src/plugins/qt4projectmanager/qt4projectmanager.pro -@@ -3,7 +3,6 @@ TARGET = Qt4ProjectManager - QT += network - include(../../qtcreatorplugin.pri) - include(qt4projectmanager_dependencies.pri) -- - HEADERS += qt4projectmanagerplugin.h \ - qt4projectmanager.h \ - qt4project.h \ -@@ -39,7 +38,9 @@ HEADERS += qt4projectmanagerplugin.h \ - qtversionmanager.h \ - qtoptionspage.h \ - qtuicodemodelsupport.h \ -- externaleditors.h -+ externaleditors.h \ -+ gettingstartedwelcomepagewidget.h \ -+ gettingstartedwelcomepage.h - SOURCES += qt4projectmanagerplugin.cpp \ - qt4projectmanager.cpp \ - qt4project.cpp \ -@@ -73,19 +74,20 @@ SOURCES += qt4projectmanagerplugin.cpp \ - qtversionmanager.cpp \ - qtoptionspage.cpp \ - qtuicodemodelsupport.cpp \ -- externaleditors.cpp -+ externaleditors.cpp \ -+ gettingstartedwelcomepagewidget.cpp \ -+ gettingstartedwelcomepage.cpp - FORMS += makestep.ui \ - qmakestep.ui \ - qt4projectconfigwidget.ui \ - embeddedpropertiespage.ui \ - qtversionmanager.ui \ -- showbuildlog.ui -+ showbuildlog.ui \ -+ gettingstartedwelcomepagewidget.ui - RESOURCES += qt4projectmanager.qrc \ - wizards/wizards.qrc -- - include(../../shared/proparser/proparser.pri) - include(qt-s60/qt-s60.pri) - include(customwidgetwizard/customwidgetwizard.pri) -- - DEFINES += QT_NO_CAST_TO_ASCII - OTHER_FILES += Qt4ProjectManager.pluginspec -diff --git a/src/plugins/qt4projectmanager/qt4projectmanager_dependencies.pri b/src/plugins/qt4projectmanager/qt4projectmanager_dependencies.pri -index e1bd37d..9a49315 100644 ---- a/src/plugins/qt4projectmanager/qt4projectmanager_dependencies.pri -+++ b/src/plugins/qt4projectmanager/qt4projectmanager_dependencies.pri -@@ -3,4 +3,3 @@ include(../../plugins/cpptools/cpptools.pri) - include(../../plugins/cppeditor/cppeditor.pri) - include(../../plugins/help/help.pri) - include(../../plugins/designer/designer.pri) --include(../../plugins/welcome/welcome.pri) -diff --git a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp -index f740c27..e2dde77 100644 ---- a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp -+++ b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp -@@ -44,6 +44,8 @@ - #include "qtversionmanager.h" - #include "qtoptionspage.h" - #include "externaleditors.h" -+#include "gettingstartedwelcomepage.h" -+#include "gettingstartedwelcomepagewidget.h" - - #ifdef QTCREATOR_WITH_S60 - #include "qt-s60/s60manager.h" -@@ -82,6 +84,8 @@ Qt4ProjectManagerPlugin::~Qt4ProjectManagerPlugin() - delete m_proFileEditorFactory; - removeObject(m_qt4ProjectManager); - delete m_qt4ProjectManager; -+ removeObject(m_welcomePage); -+ delete m_welcomePage; - } - /* - static Core::Command *createSeparator(Core::ActionManager *am, -@@ -106,9 +110,16 @@ bool Qt4ProjectManagerPlugin::initialize(const QStringList &arguments, QString * - m_projectExplorer = ProjectExplorer::ProjectExplorerPlugin::instance(); - Core::ActionManager *am = core->actionManager(); - -- addAutoReleasedObject(new QtVersionManager()); -+ QtVersionManager *mgr = new QtVersionManager(); -+ addAutoReleasedObject(mgr); - addAutoReleasedObject(new QtOptionsPage()); - -+ m_welcomePage = new GettingStartedWelcomePage; -+ addObject(m_welcomePage); -+ GettingStartedWelcomePageWidget *gswp = -+ static_cast<GettingStartedWelcomePageWidget*>(m_welcomePage->page()); -+ connect(mgr, SIGNAL(updateExamples(QString,QString,QString)), -+ gswp, SLOT(updateExamples(QString,QString,QString))); - - //create and register objects - m_qt4ProjectManager = new Qt4Manager(this); -diff --git a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.h b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.h -index 18781bc..5e3e016 100644 ---- a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.h -+++ b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.h -@@ -49,6 +49,7 @@ class MakeStepFactory; - class GccParserFactory; - class MsvcParserFactory; - class EmbeddedPropertiesPage; -+class GettingStartedWelcomePage; - - class Qt4ProjectManagerPlugin : public ExtensionSystem::IPlugin - { -@@ -81,6 +82,7 @@ private: - - QAction *m_runQMakeAction; - QAction *m_runQMakeActionContextMenu; -+ GettingStartedWelcomePage *m_welcomePage; - }; - - } // namespace Internal -diff --git a/src/plugins/qt4projectmanager/qtversionmanager.cpp b/src/plugins/qt4projectmanager/qtversionmanager.cpp -index aa65520..6bce576 100644 ---- a/src/plugins/qt4projectmanager/qtversionmanager.cpp -+++ b/src/plugins/qt4projectmanager/qtversionmanager.cpp -@@ -42,7 +42,6 @@ - #include <coreplugin/coreconstants.h> - #include <coreplugin/icore.h> - #include <coreplugin/modemanager.h> --#include <welcome/welcomemode.h> - #include <extensionsystem/pluginmanager.h> - #include <help/helpplugin.h> - #include <utils/qtcassert.h> -@@ -51,6 +50,7 @@ - #include <QtCore/QProcess> - #include <QtCore/QSettings> - #include <QtCore/QTime> -+#include <QtCore/QTimer> - #include <QtGui/QApplication> - #include <QtGui/QDesktopServices> - -@@ -122,7 +122,8 @@ QtVersionManager::QtVersionManager() - writeVersionsIntoSettings(); - - updateDocumentation(); -- updateExamples(); -+ // cannot call from ctor, needs to get connected extenernally first -+ QTimer::singleShot(0, this, SLOT(updateExamples())); - } - - QtVersionManager::~QtVersionManager() -@@ -185,9 +186,7 @@ void QtVersionManager::updateExamples() - if (version->hasDemos()) - demosPath = version->demosPath(); - if (!examplesPath.isEmpty() && !demosPath.isEmpty()) { -- if (Welcome::WelcomeMode *welcomeMode = qobject_cast<Welcome::WelcomeMode*> -- (Core::ICore::instance()->modeManager()->mode(Core::Constants::MODE_WELCOME))) -- welcomeMode->updateExamples(examplesPath, demosPath, version->sourcePath()); -+ emit updateExamples(examplesPath, demosPath, version->sourcePath()); - return; - } - } -diff --git a/src/plugins/qt4projectmanager/qtversionmanager.h b/src/plugins/qt4projectmanager/qtversionmanager.h -index 0f2144c..fb7a33b 100644 ---- a/src/plugins/qt4projectmanager/qtversionmanager.h -+++ b/src/plugins/qt4projectmanager/qtversionmanager.h -@@ -201,6 +201,10 @@ public: - signals: - void defaultQtVersionChanged(); - void qtVersionsChanged(); -+ void updateExamples(QString, QString, QString); -+ -+private slots: -+ void updateExamples(); - private: - static QString findQMakeLine(const QString &directory); - static QString trimLine(const QString line); -@@ -215,7 +219,6 @@ private: - void addNewVersionsFromInstaller(); - void updateSystemVersion(); - void updateDocumentation(); -- void updateExamples(); - - static int indexOfVersionInList(const QtVersion * const version, const QList<QtVersion *> &list); - void updateUniqueIdToIndexMap(); -diff --git a/src/plugins/welcome/communitywelcomepage.cpp b/src/plugins/welcome/communitywelcomepage.cpp -new file mode 100644 -index 0000000..0337fb1 ---- /dev/null -+++ b/src/plugins/welcome/communitywelcomepage.cpp -@@ -0,0 +1,48 @@ -+/************************************************************************** -+** -+** This file is part of Qt Creator -+** -+** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -+** -+** Contact: Nokia Corporation (qt-info@nokia.com) -+** -+** Commercial Usage -+** -+** Licensees holding valid Qt Commercial licenses may use this file in -+** accordance with the Qt Commercial License Agreement provided with the -+** Software or, alternatively, in accordance with the terms contained in -+** a written agreement between you and Nokia. -+** -+** GNU Lesser General Public License Usage -+** -+** Alternatively, this file may be used under the terms of the GNU Lesser -+** General Public License version 2.1 as published by the Free Software -+** Foundation and appearing in the file LICENSE.LGPL included in the -+** packaging of this file. Please review the following information to -+** ensure the GNU Lesser General Public License version 2.1 requirements -+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -+** -+** If you are unsure which license is appropriate for your use, please -+** contact the sales department at http://www.qtsoftware.com/contact. -+** -+**************************************************************************/ -+ -+#include "communitywelcomepage.h" -+#include "communitywelcomepagewidget.h" -+ -+ -+namespace Welcome { -+namespace Internal { -+ -+CommunityWelcomePage::CommunityWelcomePage() -+ : m_page(new CommunityWelcomePageWidget) -+{ -+} -+ -+QWidget* CommunityWelcomePage::page() -+{ -+ return m_page; -+} -+ -+} // namespace Internal -+} // namespace Welcome -diff --git a/src/plugins/welcome/communitywelcomepage.h b/src/plugins/welcome/communitywelcomepage.h -new file mode 100644 -index 0000000..b6c047c ---- /dev/null -+++ b/src/plugins/welcome/communitywelcomepage.h -@@ -0,0 +1,60 @@ -+/************************************************************************** -+** -+** This file is part of Qt Creator -+** -+** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -+** -+** Contact: Nokia Corporation (qt-info@nokia.com) -+** -+** Commercial Usage -+** -+** Licensees holding valid Qt Commercial licenses may use this file in -+** accordance with the Qt Commercial License Agreement provided with the -+** Software or, alternatively, in accordance with the terms contained in -+** a written agreement between you and Nokia. -+** -+** GNU Lesser General Public License Usage -+** -+** Alternatively, this file may be used under the terms of the GNU Lesser -+** General Public License version 2.1 as published by the Free Software -+** Foundation and appearing in the file LICENSE.LGPL included in the -+** packaging of this file. Please review the following information to -+** ensure the GNU Lesser General Public License version 2.1 requirements -+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -+** -+** If you are unsure which license is appropriate for your use, please -+** contact the sales department at http://www.qtsoftware.com/contact. -+** -+**************************************************************************/ -+ -+#ifndef COMMUNITYWELCOMEPAGE_H -+#define COMMUNITYWELCOMEPAGE_H -+ -+#include "welcome_global.h" -+ -+#include <extensionsystem/iwelcomepage.h> -+ -+namespace Welcome { -+namespace Internal { -+ -+class CommunityWelcomePageWidget; -+ -+class WELCOME_EXPORT CommunityWelcomePage : public ExtensionSystem::IWelcomePage -+{ -+ Q_OBJECT -+public: -+ CommunityWelcomePage(); -+ -+ QWidget *page(); -+ QString title() const { return tr("Community"); } -+ int priority() const { return 30; } -+ -+private: -+ CommunityWelcomePageWidget *m_page; -+ -+}; -+ -+} // namespace Internal -+} // namespace Welcome -+ -+#endif // COMMUNITYWELCOMEPAGE_H -diff --git a/src/plugins/welcome/communitywelcomepagewidget.cpp b/src/plugins/welcome/communitywelcomepagewidget.cpp -new file mode 100644 -index 0000000..40c72fe ---- /dev/null -+++ b/src/plugins/welcome/communitywelcomepagewidget.cpp -@@ -0,0 +1,79 @@ -+/************************************************************************** -+** -+** This file is part of Qt Creator -+** -+** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -+** -+** Contact: Nokia Corporation (qt-info@nokia.com) -+** -+** Commercial Usage -+** -+** Licensees holding valid Qt Commercial licenses may use this file in -+** accordance with the Qt Commercial License Agreement provided with the -+** Software or, alternatively, in accordance with the terms contained in -+** a written agreement between you and Nokia. -+** -+** GNU Lesser General Public License Usage -+** -+** Alternatively, this file may be used under the terms of the GNU Lesser -+** General Public License version 2.1 as published by the Free Software -+** Foundation and appearing in the file LICENSE.LGPL included in the -+** packaging of this file. Please review the following information to -+** ensure the GNU Lesser General Public License version 2.1 requirements -+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -+** -+** If you are unsure which license is appropriate for your use, please -+** contact the sales department at http://www.qtsoftware.com/contact. -+** -+**************************************************************************/ -+ -+#include "communitywelcomepagewidget.h" -+#include "ui_communitywelcomepagewidget.h" -+ -+#include "rssfetcher.h" -+ -+#include <QtGui/QDesktopServices> -+ -+namespace Welcome { -+namespace Internal { -+ -+CommunityWelcomePageWidget::CommunityWelcomePageWidget(QWidget *parent) : -+ QWidget(parent), -+ ui(new Ui::CommunityWelcomePageWidget), -+ m_rssFetcher(new RSSFetcher(7)) -+{ -+ ui->setupUi(this); -+ ui->labsTitleLabel->setStyledText(tr("News From the Qt Labs")); -+ ui->sitesTitleLabel->setStyledText(tr("Qt Websites")); -+ -+ connect(ui->newsTreeWidget, SIGNAL(activated(QString)), SLOT(slotUrlClicked(QString))); -+ connect(ui->sitesTreeWidget, SIGNAL(activated(QString)), SLOT(slotUrlClicked(QString))); -+ -+ connect(m_rssFetcher, SIGNAL(newsItemReady(QString, QString, QString)), -+ ui->newsTreeWidget, SLOT(slotAddNewsItem(QString, QString, QString))); -+ //: Add localized feed here only if one exists -+ m_rssFetcher->fetch(QUrl(tr("http://labs.trolltech.com/blogs/feed"))); -+ -+ ui->sitesTreeWidget->addItem(tr("Qt Home"), QLatin1String("http://qtsoftware.com")); -+ ui->sitesTreeWidget->addItem(tr("Qt Labs"), QLatin1String("http://labs.trolltech.com")); -+ ui->sitesTreeWidget->addItem(tr("Qt Git Hosting"), QLatin1String("http://qt.gitorious.org")); -+ ui->sitesTreeWidget->addItem(tr("Qt Centre"), QLatin1String("http://www.qtcentre.org")); -+ ui->sitesTreeWidget->addItem(tr("Qt for S60 at Forum Nokia"), QLatin1String("http://discussion.forum.nokia.com/forum/forumdisplay.php?f=196")); -+} -+ -+CommunityWelcomePageWidget::~CommunityWelcomePageWidget() -+{ -+ delete m_rssFetcher; -+ delete ui; -+} -+ -+ -+void CommunityWelcomePageWidget::slotUrlClicked(const QString &data) -+{ -+ QDesktopServices::openUrl(QUrl(data)); -+} -+ -+ -+ -+} // namespace Internal -+} // namespace Welcome -diff --git a/src/plugins/welcome/communitywelcomepagewidget.h b/src/plugins/welcome/communitywelcomepagewidget.h -new file mode 100644 -index 0000000..8da68fe ---- /dev/null -+++ b/src/plugins/welcome/communitywelcomepagewidget.h -@@ -0,0 +1,64 @@ -+/************************************************************************** -+** -+** This file is part of Qt Creator -+** -+** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -+** -+** Contact: Nokia Corporation (qt-info@nokia.com) -+** -+** Commercial Usage -+** -+** Licensees holding valid Qt Commercial licenses may use this file in -+** accordance with the Qt Commercial License Agreement provided with the -+** Software or, alternatively, in accordance with the terms contained in -+** a written agreement between you and Nokia. -+** -+** GNU Lesser General Public License Usage -+** -+** Alternatively, this file may be used under the terms of the GNU Lesser -+** General Public License version 2.1 as published by the Free Software -+** Foundation and appearing in the file LICENSE.LGPL included in the -+** packaging of this file. Please review the following information to -+** ensure the GNU Lesser General Public License version 2.1 requirements -+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -+** -+** If you are unsure which license is appropriate for your use, please -+** contact the sales department at http://www.qtsoftware.com/contact. -+** -+**************************************************************************/ -+ -+#ifndef COMMUNITYWELCOMEPAGEWIDGET_H -+#define COMMUNITYWELCOMEPAGEWIDGET_H -+ -+#include <QWidget> -+ -+namespace Welcome { -+namespace Internal { -+ -+class RSSFetcher; -+ -+namespace Ui { -+ class CommunityWelcomePageWidget; -+} -+ -+class CommunityWelcomePageWidget : public QWidget -+{ -+ Q_OBJECT -+ -+public: -+ CommunityWelcomePageWidget(QWidget *parent = 0); -+ ~CommunityWelcomePageWidget(); -+ -+private slots: -+ void slotUrlClicked(const QString &data); -+ -+ -+private: -+ RSSFetcher *m_rssFetcher; -+ Ui::CommunityWelcomePageWidget *ui; -+}; -+ -+ -+} // namespace Internal -+} // namespace Welcome -+#endif // COMMUNITYWELCOMEPAGEWIDGET_H -diff --git a/src/plugins/welcome/communitywelcomepagewidget.ui b/src/plugins/welcome/communitywelcomepagewidget.ui -new file mode 100644 -index 0000000..7d05f30 ---- /dev/null -+++ b/src/plugins/welcome/communitywelcomepagewidget.ui -@@ -0,0 +1,195 @@ -+<?xml version="1.0" encoding="UTF-8"?> -+<ui version="4.0"> -+ <class>Welcome::Internal::CommunityWelcomePageWidget</class> -+ <widget class="QWidget" name="Welcome::Internal::CommunityWelcomePageWidget"> -+ <property name="geometry"> -+ <rect> -+ <x>0</x> -+ <y>0</y> -+ <width>667</width> -+ <height>352</height> -+ </rect> -+ </property> -+ <property name="windowTitle"> -+ <string>Form</string> -+ </property> -+ <layout class="QHBoxLayout" name="horizontalLayout"> -+ <item> -+ <widget class="QFrame" name="labsFrame"> -+ <property name="frameShape"> -+ <enum>QFrame::NoFrame</enum> -+ </property> -+ <property name="frameShadow"> -+ <enum>QFrame::Plain</enum> -+ </property> -+ <layout class="QVBoxLayout" name="verticalLayout_2"> -+ <item> -+ <widget class="Core::Utils::WelcomeModeLabel" name="labsTitleLabel"> -+ <property name="sizePolicy"> -+ <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> -+ <horstretch>0</horstretch> -+ <verstretch>0</verstretch> -+ </sizepolicy> -+ </property> -+ <property name="alignment"> -+ <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> -+ </property> -+ </widget> -+ </item> -+ <item> -+ <widget class="Core::Utils::WelcomeModeTreeWidget" name="newsTreeWidget"> -+ <property name="sizePolicy"> -+ <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> -+ <horstretch>0</horstretch> -+ <verstretch>0</verstretch> -+ </sizepolicy> -+ </property> -+ <property name="minimumSize"> -+ <size> -+ <width>340</width> -+ <height>0</height> -+ </size> -+ </property> -+ <property name="focusPolicy"> -+ <enum>Qt::NoFocus</enum> -+ </property> -+ <property name="frameShape"> -+ <enum>QFrame::NoFrame</enum> -+ </property> -+ <property name="selectionMode"> -+ <enum>QAbstractItemView::NoSelection</enum> -+ </property> -+ <property name="verticalScrollMode"> -+ <enum>QAbstractItemView::ScrollPerPixel</enum> -+ </property> -+ <property name="rootIsDecorated"> -+ <bool>false</bool> -+ </property> -+ <property name="uniformRowHeights"> -+ <bool>true</bool> -+ </property> -+ <property name="allColumnsShowFocus"> -+ <bool>true</bool> -+ </property> -+ <property name="columnCount"> -+ <number>2</number> -+ </property> -+ <attribute name="headerVisible"> -+ <bool>false</bool> -+ </attribute> -+ <attribute name="headerDefaultSectionSize"> -+ <number>24</number> -+ </attribute> -+ <attribute name="headerMinimumSectionSize"> -+ <number>0</number> -+ </attribute> -+ <column> -+ <property name="text"> -+ <string notr="true">1</string> -+ </property> -+ </column> -+ <column> -+ <property name="text"> -+ <string notr="true">2</string> -+ </property> -+ </column> -+ </widget> -+ </item> -+ </layout> -+ </widget> -+ </item> -+ <item> -+ <widget class="QFrame" name="sitesFrame"> -+ <property name="frameShape"> -+ <enum>QFrame::NoFrame</enum> -+ </property> -+ <property name="frameShadow"> -+ <enum>QFrame::Plain</enum> -+ </property> -+ <layout class="QVBoxLayout" name="verticalLayout_3"> -+ <item> -+ <widget class="Core::Utils::WelcomeModeLabel" name="sitesTitleLabel"> -+ <property name="sizePolicy"> -+ <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> -+ <horstretch>0</horstretch> -+ <verstretch>0</verstretch> -+ </sizepolicy> -+ </property> -+ <property name="alignment"> -+ <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> -+ </property> -+ </widget> -+ </item> -+ <item> -+ <widget class="Core::Utils::WelcomeModeTreeWidget" name="sitesTreeWidget"> -+ <property name="sizePolicy"> -+ <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> -+ <horstretch>0</horstretch> -+ <verstretch>0</verstretch> -+ </sizepolicy> -+ </property> -+ <property name="focusPolicy"> -+ <enum>Qt::NoFocus</enum> -+ </property> -+ <property name="frameShape"> -+ <enum>QFrame::NoFrame</enum> -+ </property> -+ <property name="selectionMode"> -+ <enum>QAbstractItemView::NoSelection</enum> -+ </property> -+ <property name="verticalScrollMode"> -+ <enum>QAbstractItemView::ScrollPerPixel</enum> -+ </property> -+ <property name="rootIsDecorated"> -+ <bool>false</bool> -+ </property> -+ <property name="uniformRowHeights"> -+ <bool>true</bool> -+ </property> -+ <property name="allColumnsShowFocus"> -+ <bool>true</bool> -+ </property> -+ <property name="columnCount"> -+ <number>2</number> -+ </property> -+ <attribute name="headerVisible"> -+ <bool>false</bool> -+ </attribute> -+ <attribute name="headerDefaultSectionSize"> -+ <number>24</number> -+ </attribute> -+ <attribute name="headerMinimumSectionSize"> -+ <number>0</number> -+ </attribute> -+ <column> -+ <property name="text"> -+ <string notr="true">1</string> -+ </property> -+ </column> -+ <column> -+ <property name="text"> -+ <string notr="true">2</string> -+ </property> -+ </column> -+ </widget> -+ </item> -+ </layout> -+ </widget> -+ </item> -+ </layout> -+ </widget> -+ <customwidgets> -+ <customwidget> -+ <class>Core::Utils::WelcomeModeTreeWidget</class> -+ <extends>QTreeWidget</extends> -+ <header>utils/welcomemodetreewidget.h</header> -+ </customwidget> -+ <customwidget> -+ <class>Core::Utils::WelcomeModeLabel</class> -+ <extends>QLabel</extends> -+ <header>utils/welcomemodetreewidget.h</header> -+ </customwidget> -+ </customwidgets> -+ <resources/> -+ <connections/> -+</ui> -diff --git a/src/plugins/welcome/rssfetcher.cpp b/src/plugins/welcome/rssfetcher.cpp -index f5fc756..7254c2d 100644 ---- a/src/plugins/welcome/rssfetcher.cpp -+++ b/src/plugins/welcome/rssfetcher.cpp -@@ -43,7 +43,7 @@ - #include <sys/utsname.h> - #endif - --using namespace Welcome; -+using namespace Welcome::Internal; - - static const QString getOsString() - { -diff --git a/src/plugins/welcome/rssfetcher.h b/src/plugins/welcome/rssfetcher.h -index 9267fdb..54ef87d 100644 ---- a/src/plugins/welcome/rssfetcher.h -+++ b/src/plugins/welcome/rssfetcher.h -@@ -35,6 +35,7 @@ - #include <QtNetwork/QHttp> - - namespace Welcome { -+namespace Internal { - - class RSSFetcher : public QObject - { -@@ -69,6 +70,7 @@ private: - }; - - } // namespace Welcome -+} // namespace Internal - - #endif // RSSFETCHER_H - -diff --git a/src/plugins/welcome/welcome.pro b/src/plugins/welcome/welcome.pro -index 11d48e8..0ad5a50 100644 ---- a/src/plugins/welcome/welcome.pro -+++ b/src/plugins/welcome/welcome.pro -@@ -5,11 +5,17 @@ include(../../qtcreatorplugin.pri) - include(../../plugins/coreplugin/coreplugin.pri) - HEADERS += welcomeplugin.h \ - welcomemode.h \ -- rssfetcher.h -+ rssfetcher.h \ -+ communitywelcomepagewidget.h \ -+ communitywelcomepage.h - SOURCES += welcomeplugin.cpp \ - welcomemode.cpp \ -- rssfetcher.cpp --FORMS += welcomemode.ui -+ rssfetcher.cpp \ -+ communitywelcomepagewidget.cpp \ -+ communitywelcomepage.cpp \ -+ communitywelcomepage.cpp -+FORMS += welcomemode.ui \ -+ communitywelcomepagewidget.ui - RESOURCES += welcome.qrc - DEFINES += WELCOME_LIBRARY - OTHER_FILES += Welcome.pluginspec -diff --git a/src/plugins/welcome/welcomemode.cpp b/src/plugins/welcome/welcomemode.cpp -index bc6a876..72dbb10 100644 ---- a/src/plugins/welcome/welcomemode.cpp -+++ b/src/plugins/welcome/welcomemode.cpp -@@ -28,11 +28,10 @@ - **************************************************************************/ - - #include "welcomemode.h" --#include "rssfetcher.h" -+#include <extensionsystem/pluginmanager.h> -+#include <extensionsystem/iwelcomepage.h> - - #include <coreplugin/icore.h> --#include <coreplugin/dialogs/iwizard.h> -- - #include <coreplugin/coreconstants.h> - #include <coreplugin/uniqueidmanager.h> - #include <coreplugin/modemanager.h> -@@ -41,22 +40,22 @@ - #include <utils/styledbar.h> - #include <utils/welcomemodetreewidget.h> - --#include <QtGui/QDesktopServices> - #include <QtGui/QMouseEvent> - #include <QtGui/QScrollArea> - #include <QtGui/QButtonGroup> -+#include <QtGui/QDesktopServices> -+#include <QtGui/QToolButton> - --#include <QtCore/QDateTime> --#include <QtCore/QDir> --#include <QtCore/QFileInfo> --#include <QtCore/QDebug> --#include <QtCore/QUrl> - #include <QtCore/QSettings> -+#include <QtCore/QUrl> -+#include <QtCore/QDebug> - - #include <cstdlib> - - #include "ui_welcomemode.h" - -+using namespace ExtensionSystem; -+ - namespace Welcome { - - struct WelcomeModePrivate -@@ -66,10 +65,9 @@ struct WelcomeModePrivate - QScrollArea *m_scrollArea; - QWidget *m_widget; - QWidget *m_welcomePage; -- QButtonGroup *btnGrp; -- Ui::WelcomePage ui; -- RSSFetcher *rssFetcher; -- WelcomeMode::WelcomePageData lastData; -+ QMap<QAbstractButton*, QWidget*> buttonMap; -+ QHBoxLayout * buttonLayout; -+ Ui::WelcomeMode ui; - int currentTip; - }; - -@@ -77,46 +75,6 @@ WelcomeModePrivate::WelcomeModePrivate() - { - } - --// --- WelcomePageData -- --bool WelcomeMode::WelcomePageData::operator==(const WelcomePageData &rhs) const --{ -- return previousSession == rhs.previousSession -- && activeSession == rhs.activeSession -- && sessionList == rhs.sessionList -- && projectList == rhs.projectList; --} -- --bool WelcomeMode::WelcomePageData::operator!=(const WelcomePageData &rhs) const --{ -- return previousSession != rhs.previousSession -- || activeSession != rhs.activeSession -- || sessionList != rhs.sessionList -- || projectList != rhs.projectList; --} -- --QDebug operator<<(QDebug dgb, const WelcomeMode::WelcomePageData &d) --{ -- dgb.nospace() << "PreviousSession=" << d.previousSession -- << " activeSession=" << d.activeSession -- << " sessionList=" << d.sessionList -- << " projectList=" << d.projectList; -- return dgb; --} -- --// Format a title + ruler for title labels --static inline QString titleLabel(const QString &text) --{ -- QString rc = QLatin1String( -- "<html><head><style type=\"text/css\">p, li { white-space: pre-wrap; }</style></head>" -- "<body style=\" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;\">" -- "<p style=\" margin-top:16px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">" -- "<span style=\" font-size:x-large; color:#555555;\">"); -- rc += text; -- rc += QLatin1String("</span></p><hr/></body></html>"); -- return rc; --} -- - // --- WelcomeMode - WelcomeMode::WelcomeMode() : - m_d(new WelcomeModePrivate) -@@ -126,22 +84,8 @@ WelcomeMode::WelcomeMode() : - l->setMargin(0); - l->setSpacing(0); - l->addWidget(new Core::Utils::StyledBar(m_d->m_widget)); -- m_d->rssFetcher = new RSSFetcher(7, this); - m_d->m_welcomePage = new QWidget(m_d->m_widget); - m_d->ui.setupUi(m_d->m_welcomePage); -- m_d->ui.projTitleLabel->setText(titleLabel(tr("Open Recent Project"))); -- m_d->ui.recentSessionsTitleLabel->setText(titleLabel(tr("Resume Session"))); -- m_d->ui.tutorialsTitleLabel->setText(titleLabel(tr("Tutorials"))); -- m_d->ui.demoTitleLabel->setText(titleLabel(tr("Explore Qt Examples"))); -- m_d->ui.didYouKnowTitleLabel->setText(titleLabel(tr("Did You Know?"))); -- m_d->ui.labsTitleLabel->setText(titleLabel(tr("News From the Qt Labs"))); -- m_d->ui.sitesTitleLabel->setText(titleLabel(tr("Qt Websites"))); -- m_d->ui.sessTreeWidget->viewport()->setAutoFillBackground(false); -- m_d->ui.projTreeWidget->viewport()->setAutoFillBackground(false); -- m_d->ui.newsTreeWidget->viewport()->setAutoFillBackground(false); -- m_d->ui.sitesTreeWidget->viewport()->setAutoFillBackground(false); -- m_d->ui.tutorialTreeWidget->viewport()->setAutoFillBackground(false); -- m_d->ui.didYouKnowTextBrowser->viewport()->setAutoFillBackground(false); - m_d->ui.helpUsLabel->setAttribute(Qt::WA_LayoutUsesWidgetRect); - m_d->ui.feedbackButton->setAttribute(Qt::WA_LayoutUsesWidgetRect); - l->addWidget(m_d->m_welcomePage); -@@ -151,71 +95,17 @@ WelcomeMode::WelcomeMode() : - m_d->m_scrollArea->setWidget(m_d->m_widget); - m_d->m_scrollArea->setWidgetResizable(true); - -- updateWelcomePage(WelcomePageData()); -- -- m_d->btnGrp = new QButtonGroup(this); -- m_d->btnGrp->addButton(m_d->ui.gettingStartedSectButton, 0); -- m_d->btnGrp->addButton(m_d->ui.developSectButton, 1); -- m_d->btnGrp->addButton(m_d->ui.communitySectButton, 2); -- -- connect(m_d->btnGrp, SIGNAL(buttonClicked(int)), m_d->ui.stackedWidget, SLOT(setCurrentIndex(int))); -+ PluginManager *pluginManager = PluginManager::instance(); -+ connect(pluginManager, SIGNAL(objectAdded(QObject*)), SLOT(welcomePluginAdded(QObject))); - - connect(m_d->ui.feedbackButton, SIGNAL(clicked()), SLOT(slotFeedback())); -- connect(m_d->ui.manageSessionsButton, SIGNAL(clicked()), SIGNAL(manageSessions())); -- connect(m_d->ui.createNewProjectButton, SIGNAL(clicked()), SLOT(slotCreateNewProject())); -- connect(m_d->ui.sessTreeWidget, SIGNAL(activated(QString)), SLOT(slotSessionClicked(QString))); -- connect(m_d->ui.projTreeWidget, SIGNAL(activated(QString)), SLOT(slotProjectClicked(QString))); -- connect(m_d->ui.newsTreeWidget, SIGNAL(activated(QString)), SLOT(slotUrlClicked(QString))); -- connect(m_d->ui.sitesTreeWidget, SIGNAL(activated(QString)), SLOT(slotUrlClicked(QString))); -- connect(m_d->ui.tutorialTreeWidget, SIGNAL(activated(QString)), SIGNAL(openHelpPage(const QString&))); -- connect(m_d->ui.openExampleButton, SIGNAL(clicked()), SLOT(slotOpenExample())); -- connect(m_d->ui.examplesComboBox, SIGNAL(currentIndexChanged(int)), SLOT(slotEnableExampleButton(int))); -- -- connect(m_d->rssFetcher, SIGNAL(newsItemReady(QString, QString, QString)), -- m_d->ui.newsTreeWidget, SLOT(slotAddNewsItem(QString, QString, QString))); -- -- //: Add localized feed here only if one exists -- m_d->rssFetcher->fetch(QUrl(tr("http://labs.trolltech.com/blogs/feed"))); -- -- m_d->ui.sitesTreeWidget->addItem(tr("Qt Home"), QLatin1String("http://qtsoftware.com")); -- m_d->ui.sitesTreeWidget->addItem(tr("Qt Labs"), QLatin1String("http://labs.trolltech.com")); -- m_d->ui.sitesTreeWidget->addItem(tr("Qt Git Hosting"), QLatin1String("http://qt.gitorious.org")); -- m_d->ui.sitesTreeWidget->addItem(tr("Qt Centre"), QLatin1String("http://www.qtcentre.org")); -- m_d->ui.sitesTreeWidget->addItem(tr("Qt for S60 at Forum Nokia"), QLatin1String("http://discussion.forum.nokia.com/forum/forumdisplay.php?f=196")); -- -- m_d->ui.tutorialTreeWidget->addItem(tr("<b>Qt Creator - A quick tour</b>"), -- QString("qthelp://com.nokia.qtcreator.%1%2/doc/index.html").arg(IDE_VERSION_MAJOR).arg(IDE_VERSION_MINOR)); -- m_d->ui.tutorialTreeWidget->addItem(tr("Creating an address book"), -- QLatin1String("qthelp://com.nokia.qtcreator/doc/tutorials-addressbook-sdk.html")); -- m_d->ui.tutorialTreeWidget->addItem(tr("Understanding widgets"), -- QLatin1String("qthelp://com.trolltech.qt/qdoc/widgets-tutorial.html")); -- m_d->ui.tutorialTreeWidget->addItem(tr("Building with qmake"), -- QLatin1String("qthelp://com.trolltech.qmake/qdoc/qmake-tutorial.html")); -- m_d->ui.tutorialTreeWidget->addItem(tr("Writing test cases"), -- QLatin1String("qthelp://com.trolltech.qt/qdoc/qtestlib-tutorial.html")); -- -- srand(QDateTime::currentDateTime().toTime_t()); -- QStringList tips = tipsOfTheDay(); -- m_d->currentTip = rand()%tips.count(); -- -- QTextDocument *doc = m_d->ui.didYouKnowTextBrowser->document(); -- doc->setDefaultStyleSheet("a:link {color:black;}"); -- m_d->ui.didYouKnowTextBrowser->setDocument(doc); -- m_d->ui.didYouKnowTextBrowser->setText(tips.at(m_d->currentTip)); -- -- connect(m_d->ui.nextTipBtn, SIGNAL(clicked()), this, SLOT(slotNextTip())); -- connect(m_d->ui.prevTipBtn, SIGNAL(clicked()), this, SLOT(slotPrevTip())); - -- QSettings *settings = Core::ICore::instance()->settings(); -- int id = settings->value("General/WelcomeTab", 0).toInt(); -- m_d->btnGrp->button(id)->setChecked(true); -- m_d->ui.stackedWidget->setCurrentIndex(id); - } - - WelcomeMode::~WelcomeMode() - { - QSettings *settings = Core::ICore::instance()->settings(); -- settings->setValue("General/WelcomeTab", m_d->btnGrp->checkedId()); -+ settings->setValue("General/WelcomeTab", m_d->ui.stackedWidget->currentIndex()); - delete m_d->m_widget; - delete m_d; - } -@@ -252,150 +142,78 @@ QList<int> WelcomeMode::context() const - return contexts; - } - --void WelcomeMode::updateWelcomePage(const WelcomePageData &welcomePageData) --{ -- // Update only if data are modified -- if (welcomePageData == m_d->lastData) -- return; -- m_d->lastData = welcomePageData; -- -- m_d->m_widget->setUpdatesEnabled(false); -- m_d->ui.sessTreeWidget->clear(); -- m_d->ui.projTreeWidget->clear(); -- -- if (welcomePageData.sessionList.count() > 0) { -- foreach (const QString &s, welcomePageData.sessionList) { -- QString str = s; -- if (s == welcomePageData.previousSession) -- str = tr("%1 (last session)").arg(s); -- m_d->ui.sessTreeWidget->addItem(str, s); -- } -- m_d->ui.sessTreeWidget->updateGeometry(); -- m_d->ui.sessTreeWidget->show(); -- } else { -- m_d->ui.sessTreeWidget->hide(); -- } -- -- typedef QPair<QString, QString> QStringPair; -- if (welcomePageData.projectList.count() > 0) { -- foreach (const QStringPair &it, welcomePageData.projectList) { -- QTreeWidgetItem *item = m_d->ui.projTreeWidget->addItem(it.second, it.first); -- const QFileInfo fi(it.first); -- item->setToolTip(1, QDir::toNativeSeparators(fi.absolutePath())); -- } -- } else { -- m_d->ui.projTreeWidget->hide(); -- } -- m_d->ui.projTreeWidget->updateGeometry(); -- m_d->m_widget->setUpdatesEnabled(true); --} -- --void WelcomeMode::activateEditMode() --{ -- Core::ModeManager *modeManager = Core::ModeManager::instance(); -- if (modeManager->currentMode() == this) -- modeManager->activateMode(Core::Constants::MODE_EDIT); --} -- --void WelcomeMode::slotSessionClicked(const QString &data) --{ -- emit requestSession(data); -- activateEditMode(); --} -- --void WelcomeMode::slotProjectClicked(const QString &data) -+bool sortFunction(IWelcomePage * a, IWelcomePage *b) - { -- emit requestProject(data); -- activateEditMode(); -+ return a->priority() < b->priority(); - } - --void WelcomeMode::slotUrlClicked(const QString &data) -+void WelcomeMode::initPlugins() - { -- QDesktopServices::openUrl(QUrl(data)); --} -- --void WelcomeMode::updateExamples(const QString& examplePath, const QString& demosPath, const QString &sourcePath) --{ -- QString demoxml = demosPath + "/qtdemo/xml/examples.xml"; -- if (!QFile::exists(demoxml)) { -- demoxml = sourcePath + "/demos/qtdemo/xml/examples.xml"; -- if (!QFile::exists(demoxml)) -- return; -+ m_d->buttonLayout = new QHBoxLayout(m_d->ui.navFrame); -+ m_d->buttonLayout->setMargin(0); -+ m_d->buttonLayout->setSpacing(0); -+ delete m_d->ui.stackedWidget->currentWidget(); -+ QList<IWelcomePage*> plugins = PluginManager::instance()->getObjects<IWelcomePage>(); -+ qSort(plugins.begin(), plugins.end(), &sortFunction); -+ foreach (IWelcomePage* plugin, plugins) { -+ QToolButton * btn = new QToolButton; -+ btn->setCheckable(true); -+ btn->setText(plugin->title()); -+ btn->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); -+ btn->setAutoExclusive(true); -+ connect (btn, SIGNAL(clicked()), SLOT(showClickedPage())); -+ m_d->ui.stackedWidget->addWidget(plugin->page()); -+ m_d->buttonLayout->addWidget(btn); -+ m_d->buttonMap.insert(btn, plugin->page()); - } -+ m_d->buttonLayout->addSpacing(5); - -- QFile description(demoxml); -- if (!description.open(QFile::ReadOnly)) -- return; -- -- m_d->ui.examplesComboBox->clear(); -- m_d->ui.examplesComboBox->setEnabled(true); -- -- m_d->ui.examplesComboBox->addItem(tr("Choose an example...")); -- QFont f = widget()->font(); -- f.setItalic(true); -- m_d->ui.examplesComboBox->setItemData(0, f, Qt::FontRole); -- f.setItalic(false); -- bool inExamples = false; -- QString dirName; -- QXmlStreamReader reader(&description); -- while (!reader.atEnd()) { -- switch (reader.readNext()) { -- case QXmlStreamReader::StartElement: -- if (reader.name() == "category") { -- QString name = reader.attributes().value(QLatin1String("name")).toString(); -- if (name.contains("tutorial")) -- break; -- dirName = reader.attributes().value(QLatin1String("dirname")).toString(); -- m_d->ui.examplesComboBox->addItem(name); -- f.setBold(true); -- m_d->ui.examplesComboBox->setItemData(m_d->ui.examplesComboBox->count()-1, f, Qt::FontRole); -- f.setBold(false); -- inExamples = true; -- } -- if (inExamples && reader.name() == "example") { -- QString name = reader.attributes().value(QLatin1String("name")).toString(); -- QString fn = reader.attributes().value(QLatin1String("filename")).toString(); -- QString relativeProPath = '/' + dirName + '/' + fn + '/' + fn + ".pro"; -- QString fileName = examplePath + relativeProPath; -- if (!QFile::exists(fileName)) -- fileName = sourcePath + "/examples" + relativeProPath; -- QString helpPath = "qthelp://com.trolltech.qt/qdoc/" + dirName.replace("/", "-") + "-" + fn + ".html"; -- -- m_d->ui.examplesComboBox->addItem(" " + name, fileName); -- m_d->ui.examplesComboBox->setItemData(m_d->ui.examplesComboBox->count()-1, helpPath, Qt::UserRole+1); -+ QSettings *settings = Core::ICore::instance()->settings(); -+ int tabId = settings->value("General/WelcomeTab", 0).toInt(); -+ -+ int pluginCount = m_d->ui.stackedWidget->count(); -+ if (tabId < pluginCount) { -+ m_d->ui.stackedWidget->setCurrentIndex(tabId); -+ QMapIterator<QAbstractButton*, QWidget*> it(m_d->buttonMap); -+ while (it.hasNext()) -+ if (it.next().value() == m_d->ui.stackedWidget->currentWidget()) { -+ it.key()->setChecked(true); -+ break; - } -- break; -- case QXmlStreamReader::EndElement: -- if (reader.name() == "category") -- inExamples = false; -- break; -- default: -- break; -- } - } -+ - } - --void WelcomeMode::slotEnableExampleButton(int index) --{ -- QString fileName = m_d->ui.examplesComboBox->itemData(index, Qt::UserRole).toString(); -- m_d->ui.openExampleButton->setEnabled(!fileName.isEmpty()); -+void WelcomeMode::welcomePluginAdded(QObject *obj) -+{ -+ if (IWelcomePage *plugin = qobject_cast<IWelcomePage*>(obj)) -+ { -+ QToolButton * btn = new QToolButton; -+ btn->setCheckable(true); -+ btn->setAutoExclusive(true); -+ btn->setText(plugin->title()); -+ btn->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); -+ connect (btn, SIGNAL(clicked()), SLOT(showClickedPage())); -+ int insertPos = 0; -+ QList<IWelcomePage*> plugins = PluginManager::instance()->getObjects<IWelcomePage>(); -+ foreach (IWelcomePage* p, plugins) { -+ if (plugin->priority() < p->priority()) -+ insertPos++; -+ else -+ break; -+ } -+ m_d->ui.stackedWidget->insertWidget(insertPos, plugin->page()); -+ m_d->buttonMap.insert(btn, plugin->page()); -+ m_d->buttonLayout->insertWidget(insertPos, btn); -+ } - } - --void WelcomeMode::slotOpenExample() -+void WelcomeMode::showClickedPage() - { -- QComboBox *box = m_d->ui.examplesComboBox; -- QString proFile = box->itemData(box->currentIndex(), Qt::UserRole).toString(); -- QString helpFile = box->itemData(box->currentIndex(), Qt::UserRole + 1).toString(); -- QStringList files; -- QFileInfo fi(proFile); -- QString tryFile = fi.path() + "/main.cpp"; -- files << proFile; -- if(!QFile::exists(tryFile)) -- tryFile = fi.path() + '/' + fi.baseName() + ".cpp"; -- if(QFile::exists(tryFile)) -- files << tryFile; -- Core::ICore::instance()->openFiles(files); -- emit openContextHelpPage(helpFile); -+ QAbstractButton *btn = qobject_cast<QAbstractButton*>(sender()); -+ QMap<QAbstractButton*, QWidget*>::iterator it = m_d->buttonMap.find(btn); -+ if (it.value()) -+ m_d->ui.stackedWidget->setCurrentWidget(it.value()); - } - - void WelcomeMode::slotFeedback() -@@ -404,71 +222,5 @@ void WelcomeMode::slotFeedback() - "http://qtsoftware.com/forms/feedback-forms/qt-creator-user-feedback/view"))); - } - --void WelcomeMode::slotCreateNewProject() --{ -- Core::ICore::instance()->showNewItemDialog(tr("New Project..."), -- Core::IWizard::wizardsOfKind(Core::IWizard::ProjectWizard)); --} -- --void WelcomeMode::slotNextTip() --{ -- QStringList tips = tipsOfTheDay(); -- m_d->currentTip = ((m_d->currentTip+1)%tips.count()); -- m_d->ui.didYouKnowTextBrowser->setText(tips.at(m_d->currentTip)); --} -- --void WelcomeMode::slotPrevTip() --{ -- QStringList tips = tipsOfTheDay(); -- m_d->currentTip = ((m_d->currentTip-1)+tips.count())%tips.count(); -- m_d->ui.didYouKnowTextBrowser->setText(tips.at(m_d->currentTip)); --} -- --QStringList WelcomeMode::tipsOfTheDay() --{ -- static QStringList tips; -- if (tips.isEmpty()) { -- QString altShortcut = --#ifdef Q_WS_MAC -- tr("Cmd", "Shortcut key"); --#else -- tr("Alt", "Shortcut key"); --#endif -- tips.append(tr("You can switch between Qt Creator's modes using <tt>Ctrl+number</tt>:<ul>" -- "<li>1 - Welcome</li><li>2 - Edit</li><li>3 - Debug</li><li>4 - Projects</li><li>5 - Help</li>" -- "<li></li><li>6 - Output</li></ul>")); -- //:%1 gets replaced by Alt (Win/Unix) or Cmd (Mac) -- tips.append(tr("You can show and hide the side bar using <tt>%1+0<tt>.").arg(altShortcut)); -- tips.append(tr("You can fine tune the <tt>Find</tt> function by selecting "Whole Words" " -- "or "Case Sensitive". Simply click on the icons on the right end of the line edit.")); -- tips.append(tr("If you add <a href=\"qthelp://com.nokia.qtcreator/doc/creator-external-library-handling.html\"" -- ">external libraries</a>, Qt Creator will automatically offer syntax highlighting " -- "and code completion.")); -- tips.append(tr("The code completion is CamelCase-aware. For example, to complete <tt>namespaceUri</tt> " -- "you can just type <tt>nU</tt> and hit <tt>Ctrl+Space</tt>.")); -- tips.append(tr("You can force code completion at any time using <tt>Ctrl+Space</tt>.")); -- tips.append(tr("You can start Qt Creator with a session by calling <tt>qtcreator <sessionname></tt>.")); -- tips.append(tr("You can return to edit mode from any other mode at any time by hitting <tt>Escape</tt>.")); -- //:%1 gets replaced by Alt (Win/Unix) or Cmd (Mac) -- tips.append(tr("You can switch between the output pane by hitting <tt>%1+n</tt> where n is the number denoted " -- "on the buttons at the window bottom:" -- "<ul><li>1 - Build Issues</li><li>2 - Search Results</li><li>3 - Application Output</li>" -- "<li>4 - Compile Output</li></ul>").arg(altShortcut)); -- tips.append(tr("You can quickly search methods, classes, help and more using the " -- "<a href=\"qthelp://com.nokia.qtcreator/doc/creator-navigation.html\">Locator bar</a> (<tt>Ctrl+K</tt>).")); -- tips.append(tr("You can add custom build steps in the " -- "<a href=\"qthelp://com.nokia.qtcreator/doc/creator-build-settings.html\">build settings</a>.")); -- tips.append(tr("Within a session, you can add " -- "<a href=\"qthelp://com.nokia.qtcreator/doc/creator-build-settings.html#dependencies\">dependencies</a> between projects.")); -- tips.append(tr("You can set the preferred editor encoding for every project in <tt>Projects -> Editor Settings -> Default Encoding</tt>.")); -- tips.append(tr("You can modify the binary that is being executed when you press the <tt>Run</tt> button: Add a <tt>Custom Executable</tt> " -- "by clicking the <tt>+</tt> button in <tt>Projects -> Run Settings -> Run Configuration</tt> and then select the new " -- "target in the combo box.")); -- tips.append(tr("You can use Qt Creator with a number of <a href=\"qthelp://com.nokia.qtcreator/doc/creator-version-control.html\">" -- "revision control systems</a> such as Subversion, Perforce and Git.")); -- tips.append(tr("In the editor, <tt>F2</tt> toggles declaration and definition while <tt>F4</tt> toggles header file and source file.")); -- } -- return tips; --} - - } // namespace Welcome -diff --git a/src/plugins/welcome/welcomemode.h b/src/plugins/welcome/welcomemode.h -index 0555ce6..1576d24 100644 ---- a/src/plugins/welcome/welcomemode.h -+++ b/src/plugins/welcome/welcomemode.h -@@ -54,18 +54,6 @@ public: - WelcomeMode(); - ~WelcomeMode(); - -- struct WelcomePageData{ -- bool operator==(const WelcomePageData &rhs) const; -- bool operator!=(const WelcomePageData &rhs) const; -- -- QString previousSession; -- QString activeSession; -- QStringList sessionList; -- QList<QPair<QString, QString> > projectList; // pair of filename, displayname -- }; -- -- void updateWelcomePage(const WelcomePageData &welcomePageData); -- - // IMode - QString name() const; - QIcon icon() const; -@@ -75,31 +63,14 @@ public: - QList<int> context() const; - void activated(); - QString contextHelpId() const { return QLatin1String("Qt Creator"); } -- -- void updateExamples(const QString& examplePath, const QString& demosPath, const QString &sourcePath); -- --signals: -- void requestProject(const QString &project); -- void requestSession(const QString &session); -- void openHelpPage(const QString& url); -- void openContextHelpPage(const QString& url); -- void manageSessions(); -+ void initPlugins(); - - private slots: - void slotFeedback(); -- void slotSessionClicked(const QString &data); -- void slotProjectClicked(const QString &data); -- void slotUrlClicked(const QString &data); -- void slotEnableExampleButton(int); -- void slotOpenExample(); -- void slotCreateNewProject(); -- void slotNextTip(); -- void slotPrevTip(); -+ void welcomePluginAdded(QObject*); -+ void showClickedPage(); - - private: -- void activateEditMode(); -- QStringList tipsOfTheDay(); -- - WelcomeModePrivate *m_d; - }; - -diff --git a/src/plugins/welcome/welcomemode.ui b/src/plugins/welcome/welcomemode.ui -index c70aabb..e1c18bd 100644 ---- a/src/plugins/welcome/welcomemode.ui -+++ b/src/plugins/welcome/welcomemode.ui -@@ -1,7 +1,7 @@ - <?xml version="1.0" encoding="UTF-8"?> - <ui version="4.0"> -- <class>Welcome::WelcomePage</class> -- <widget class="QWidget" name="Core::Utils::WelcomePage"> -+ <class>Welcome::WelcomeMode</class> -+ <widget class="QWidget" name="Welcome::WelcomeMode"> - <property name="geometry"> - <rect> - <x>0</x> -@@ -172,6 +172,12 @@ QToolButton:pressed, QPushButton:pressed{ - <verstretch>0</verstretch> - </sizepolicy> - </property> -+ <property name="minimumSize"> -+ <size> -+ <width>0</width> -+ <height>10</height> -+ </size> -+ </property> - <property name="font"> - <font> - <weight>50</weight> -@@ -238,129 +244,6 @@ QToolButton:pressed { - <property name="frameShadow"> - <enum>QFrame::Plain</enum> - </property> -- <layout class="QGridLayout" name="gridLayout_2"> -- <property name="margin"> -- <number>0</number> -- </property> -- <property name="spacing"> -- <number>0</number> -- </property> -- <item row="0" column="0"> -- <widget class="QToolButton" name="gettingStartedSectButton"> -- <property name="enabled"> -- <bool>true</bool> -- </property> -- <property name="sizePolicy"> -- <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> -- <horstretch>0</horstretch> -- <verstretch>0</verstretch> -- </sizepolicy> -- </property> -- <property name="minimumSize"> -- <size> -- <width>0</width> -- <height>0</height> -- </size> -- </property> -- <property name="font"> -- <font> -- <pointsize>-1</pointsize> -- </font> -- </property> -- <property name="styleSheet"> -- <string notr="true"/> -- </property> -- <property name="text"> -- <string>Getting Started</string> -- </property> -- <property name="checkable"> -- <bool>true</bool> -- </property> -- <property name="checked"> -- <bool>true</bool> -- </property> -- <property name="autoExclusive"> -- <bool>false</bool> -- </property> -- </widget> -- </item> -- <item row="0" column="1"> -- <widget class="QToolButton" name="developSectButton"> -- <property name="sizePolicy"> -- <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> -- <horstretch>0</horstretch> -- <verstretch>0</verstretch> -- </sizepolicy> -- </property> -- <property name="minimumSize"> -- <size> -- <width>0</width> -- <height>0</height> -- </size> -- </property> -- <property name="font"> -- <font> -- <pointsize>-1</pointsize> -- </font> -- </property> -- <property name="text"> -- <string>Develop</string> -- </property> -- <property name="checkable"> -- <bool>true</bool> -- </property> -- <property name="autoExclusive"> -- <bool>false</bool> -- </property> -- </widget> -- </item> -- <item row="0" column="2"> -- <widget class="QToolButton" name="communitySectButton"> -- <property name="sizePolicy"> -- <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> -- <horstretch>0</horstretch> -- <verstretch>0</verstretch> -- </sizepolicy> -- </property> -- <property name="minimumSize"> -- <size> -- <width>0</width> -- <height>0</height> -- </size> -- </property> -- <property name="font"> -- <font> -- <pointsize>-1</pointsize> -- </font> -- </property> -- <property name="styleSheet"> -- <string notr="true"/> -- </property> -- <property name="text"> -- <string>Community</string> -- </property> -- <property name="checkable"> -- <bool>true</bool> -- </property> -- </widget> -- </item> -- <item row="0" column="3"> -- <spacer name="horizontalSpacer_2"> -- <property name="orientation"> -- <enum>Qt::Horizontal</enum> -- </property> -- <property name="sizeType"> -- <enum>QSizePolicy::Fixed</enum> -- </property> -- <property name="sizeHint" stdset="0"> -- <size> -- <width>5</width> -- <height>20</height> -- </size> -- </property> -- </spacer> -- </item> -- </layout> - </widget> - </item> - <item> -@@ -368,575 +251,7 @@ QToolButton:pressed { - <property name="currentIndex"> - <number>0</number> - </property> -- <widget class="QWidget" name="gettingStartedPage"> -- <layout class="QGridLayout" name="gridLayout_9"> -- <property name="leftMargin"> -- <number>18</number> -- </property> -- <property name="topMargin"> -- <number>18</number> -- </property> -- <property name="rightMargin"> -- <number>12</number> -- </property> -- <property name="bottomMargin"> -- <number>18</number> -- </property> -- <property name="spacing"> -- <number>24</number> -- </property> -- <item row="0" column="0" rowspan="2"> -- <widget class="QFrame" name="tutorialsFrame"> -- <property name="sizePolicy"> -- <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> -- <horstretch>0</horstretch> -- <verstretch>0</verstretch> -- </sizepolicy> -- </property> -- <property name="maximumSize"> -- <size> -- <width>400</width> -- <height>16777215</height> -- </size> -- </property> -- <property name="styleSheet"> -- <string/> -- </property> -- <layout class="QGridLayout" name="gridLayout_6"> -- <item row="0" column="0"> -- <widget class="QLabel" name="tutorialsTitleLabel"> -- <property name="sizePolicy"> -- <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> -- <horstretch>0</horstretch> -- <verstretch>0</verstretch> -- </sizepolicy> -- </property> -- <property name="alignment"> -- <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> -- </property> -- </widget> -- </item> -- <item row="1" column="0"> -- <widget class="Core::Utils::WelcomeModeTreeWidget" name="tutorialTreeWidget"> -- <property name="sizePolicy"> -- <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> -- <horstretch>0</horstretch> -- <verstretch>0</verstretch> -- </sizepolicy> -- </property> -- <property name="focusPolicy"> -- <enum>Qt::NoFocus</enum> -- </property> -- <property name="frameShape"> -- <enum>QFrame::NoFrame</enum> -- </property> -- <property name="selectionMode"> -- <enum>QAbstractItemView::NoSelection</enum> -- </property> -- <property name="verticalScrollMode"> -- <enum>QAbstractItemView::ScrollPerPixel</enum> -- </property> -- <property name="rootIsDecorated"> -- <bool>false</bool> -- </property> -- <property name="uniformRowHeights"> -- <bool>true</bool> -- </property> -- <property name="allColumnsShowFocus"> -- <bool>true</bool> -- </property> -- <property name="columnCount"> -- <number>2</number> -- </property> -- <attribute name="headerVisible"> -- <bool>false</bool> -- </attribute> -- <attribute name="headerDefaultSectionSize"> -- <number>24</number> -- </attribute> -- <attribute name="headerMinimumSectionSize"> -- <number>0</number> -- </attribute> -- <column> -- <property name="text"> -- <string notr="true">1</string> -- </property> -- </column> -- <column> -- <property name="text"> -- <string notr="true">2</string> -- </property> -- </column> -- </widget> -- </item> -- </layout> -- </widget> -- </item> -- <item row="0" column="1"> -- <widget class="QFrame" name="demosExamplesFrame"> -- <property name="sizePolicy"> -- <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> -- <horstretch>0</horstretch> -- <verstretch>0</verstretch> -- </sizepolicy> -- </property> -- <property name="maximumSize"> -- <size> -- <width>400</width> -- <height>16777215</height> -- </size> -- </property> -- <property name="styleSheet"> -- <string/> -- </property> -- <layout class="QGridLayout" name="gridLayout_8"> -- <property name="rightMargin"> -- <number>8</number> -- </property> -- <property name="horizontalSpacing"> -- <number>0</number> -- </property> -- <item row="0" column="0" colspan="4"> -- <widget class="QLabel" name="demoTitleLabel"> -- <property name="alignment"> -- <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> -- </property> -- </widget> -- </item> -- <item row="1" column="0"> -- <widget class="QComboBox" name="examplesComboBox"> -- <property name="enabled"> -- <bool>false</bool> -- </property> -- <property name="sizePolicy"> -- <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred"> -- <horstretch>0</horstretch> -- <verstretch>0</verstretch> -- </sizepolicy> -- </property> -- <item> -- <property name="text"> -- <string>Examples not installed</string> -- </property> -- </item> -- </widget> -- </item> -- <item row="1" column="2"> -- <widget class="QToolButton" name="openExampleButton"> -- <property name="enabled"> -- <bool>false</bool> -- </property> -- <property name="sizePolicy"> -- <sizepolicy hsizetype="Fixed" vsizetype="Preferred"> -- <horstretch>0</horstretch> -- <verstretch>0</verstretch> -- </sizepolicy> -- </property> -- <property name="text"> -- <string>Open</string> -- </property> -- </widget> -- </item> -- <item row="1" column="1"> -- <spacer name="horizontalSpacer"> -- <property name="orientation"> -- <enum>Qt::Horizontal</enum> -- </property> -- <property name="sizeType"> -- <enum>QSizePolicy::Fixed</enum> -- </property> -- <property name="sizeHint" stdset="0"> -- <size> -- <width>6</width> -- <height>6</height> -- </size> -- </property> -- </spacer> -- </item> -- </layout> -- </widget> -- </item> -- <item row="1" column="1"> -- <widget class="QFrame" name="didyouKnowFrame"> -- <property name="sizePolicy"> -- <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> -- <horstretch>0</horstretch> -- <verstretch>0</verstretch> -- </sizepolicy> -- </property> -- <property name="maximumSize"> -- <size> -- <width>400</width> -- <height>16777215</height> -- </size> -- </property> -- <property name="styleSheet"> -- <string/> -- </property> -- <layout class="QGridLayout" name="gridLayout_11"> -- <property name="rightMargin"> -- <number>9</number> -- </property> -- <item row="0" column="0"> -- <widget class="QLabel" name="didYouKnowTitleLabel"> -- <property name="sizePolicy"> -- <sizepolicy hsizetype="MinimumExpanding" vsizetype="Maximum"> -- <horstretch>0</horstretch> -- <verstretch>0</verstretch> -- </sizepolicy> -- </property> -- <property name="alignment"> -- <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> -- </property> -- </widget> -- </item> -- <item row="1" column="0" colspan="2"> -- <widget class="QTextBrowser" name="didYouKnowTextBrowser"> -- <property name="sizePolicy"> -- <sizepolicy hsizetype="Minimum" vsizetype="Preferred"> -- <horstretch>0</horstretch> -- <verstretch>0</verstretch> -- </sizepolicy> -- </property> -- <property name="frameShape"> -- <enum>QFrame::NoFrame</enum> -- </property> -- <property name="frameShadow"> -- <enum>QFrame::Plain</enum> -- </property> -- <property name="verticalScrollBarPolicy"> -- <enum>Qt::ScrollBarAlwaysOff</enum> -- </property> -- <property name="horizontalScrollBarPolicy"> -- <enum>Qt::ScrollBarAlwaysOff</enum> -- </property> -- <property name="openExternalLinks"> -- <bool>true</bool> -- </property> -- </widget> -- </item> -- <item row="0" column="1"> -- <layout class="QGridLayout" name="gridLayout_10"> -- <property name="spacing"> -- <number>0</number> -- </property> -- <item row="0" column="0" colspan="2"> -- <spacer name="verticalSpacer_4"> -- <property name="orientation"> -- <enum>Qt::Vertical</enum> -- </property> -- <property name="sizeType"> -- <enum>QSizePolicy::Preferred</enum> -- </property> -- <property name="sizeHint" stdset="0"> -- <size> -- <width>20</width> -- <height>2</height> -- </size> -- </property> -- </spacer> -- </item> -- <item row="1" column="0"> -- <widget class="QToolButton" name="prevTipBtn"> -- <property name="styleSheet"> -- <string notr="true">QToolButton{ -- border-right:solid 0 px; -- height:16px; -- width:12px; --} --</string> -- </property> -- <property name="text"> -- <string/> -- </property> -- <property name="icon"> -- <iconset resource="welcome.qrc"> -- <normaloff>:/welcome/images/arrow-left.png</normaloff>:/welcome/images/arrow-left.png</iconset> -- </property> -- <property name="arrowType"> -- <enum>Qt::NoArrow</enum> -- </property> -- </widget> -- </item> -- <item row="1" column="1"> -- <widget class="QToolButton" name="nextTipBtn"> -- <property name="styleSheet"> -- <string notr="true">QToolButton{ -- border-left:solid 0 px; -- height:16px; -- width:12px; --} --</string> -- </property> -- <property name="text"> -- <string/> -- </property> -- <property name="icon"> -- <iconset resource="welcome.qrc"> -- <normaloff>:/welcome/images/arrow-right.png</normaloff>:/welcome/images/arrow-right.png</iconset> -- </property> -- <property name="arrowType"> -- <enum>Qt::NoArrow</enum> -- </property> -- </widget> -- </item> -- <item row="2" column="0" colspan="2"> -- <spacer name="verticalSpacer_3"> -- <property name="orientation"> -- <enum>Qt::Vertical</enum> -- </property> -- <property name="sizeHint" stdset="0"> -- <size> -- <width>20</width> -- <height>2</height> -- </size> -- </property> -- </spacer> -- </item> -- </layout> -- </item> -- </layout> -- </widget> -- </item> -- </layout> -- </widget> -- <widget class="QWidget" name="developPage"> -- <layout class="QGridLayout" name="gridLayout_4"> -- <property name="margin"> -- <number>18</number> -- </property> -- <property name="spacing"> -- <number>24</number> -- </property> -- <item row="0" column="0"> -- <widget class="QFrame" name="recentSessionsFrame"> -- <property name="sizePolicy"> -- <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> -- <horstretch>0</horstretch> -- <verstretch>0</verstretch> -- </sizepolicy> -- </property> -- <property name="minimumSize"> -- <size> -- <width>270</width> -- <height>130</height> -- </size> -- </property> -- <property name="styleSheet"> -- <string/> -- </property> -- <layout class="QGridLayout" name="gridLayout_3"> -- <property name="horizontalSpacing"> -- <number>0</number> -- </property> -- <property name="verticalSpacing"> -- <number>3</number> -- </property> -- <item row="0" column="0" colspan="3"> -- <widget class="QLabel" name="recentSessionsTitleLabel"> -- <property name="sizePolicy"> -- <sizepolicy hsizetype="MinimumExpanding" vsizetype="Maximum"> -- <horstretch>0</horstretch> -- <verstretch>0</verstretch> -- </sizepolicy> -- </property> -- <property name="alignment"> -- <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> -- </property> -- </widget> -- </item> -- <item row="1" column="0" colspan="3"> -- <widget class="Core::Utils::WelcomeModeTreeWidget" name="sessTreeWidget"> -- <property name="sizePolicy"> -- <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> -- <horstretch>0</horstretch> -- <verstretch>0</verstretch> -- </sizepolicy> -- </property> -- <property name="focusPolicy"> -- <enum>Qt::NoFocus</enum> -- </property> -- <property name="frameShape"> -- <enum>QFrame::NoFrame</enum> -- </property> -- <property name="selectionMode"> -- <enum>QAbstractItemView::NoSelection</enum> -- </property> -- <property name="verticalScrollMode"> -- <enum>QAbstractItemView::ScrollPerPixel</enum> -- </property> -- <property name="rootIsDecorated"> -- <bool>false</bool> -- </property> -- <property name="uniformRowHeights"> -- <bool>true</bool> -- </property> -- <property name="allColumnsShowFocus"> -- <bool>true</bool> -- </property> -- <property name="columnCount"> -- <number>2</number> -- </property> -- <attribute name="headerVisible"> -- <bool>false</bool> -- </attribute> -- <attribute name="headerDefaultSectionSize"> -- <number>24</number> -- </attribute> -- <attribute name="headerMinimumSectionSize"> -- <number>0</number> -- </attribute> -- <column> -- <property name="text"> -- <string notr="true">1</string> -- </property> -- </column> -- <column> -- <property name="text"> -- <string notr="true">2</string> -- </property> -- </column> -- </widget> -- </item> -- <item row="3" column="0"> -- <widget class="QPushButton" name="manageSessionsButton"> -- <property name="focusPolicy"> -- <enum>Qt::TabFocus</enum> -- </property> -- <property name="text"> -- <string>Manage Sessions...</string> -- </property> -- </widget> -- </item> -- <item row="4" column="0"> -- <spacer name="verticalSpacer"> -- <property name="orientation"> -- <enum>Qt::Vertical</enum> -- </property> -- <property name="sizeHint" stdset="0"> -- <size> -- <width>20</width> -- <height>40</height> -- </size> -- </property> -- </spacer> -- </item> -- </layout> -- </widget> -- </item> -- <item row="0" column="2"> -- <widget class="QFrame" name="recentProjectsFrame"> -- <property name="styleSheet"> -- <string/> -- </property> -- <layout class="QGridLayout" name="gridLayout_5"> -- <property name="horizontalSpacing"> -- <number>0</number> -- </property> -- <property name="verticalSpacing"> -- <number>3</number> -- </property> -- <property name="rightMargin"> -- <number>9</number> -- </property> -- <item row="0" column="0" colspan="3"> -- <widget class="QLabel" name="projTitleLabel"> -- <property name="sizePolicy"> -- <sizepolicy hsizetype="MinimumExpanding" vsizetype="Maximum"> -- <horstretch>0</horstretch> -- <verstretch>0</verstretch> -- </sizepolicy> -- </property> -- <property name="alignment"> -- <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> -- </property> -- </widget> -- </item> -- <item row="1" column="0" colspan="3"> -- <widget class="Core::Utils::WelcomeModeTreeWidget" name="projTreeWidget"> -- <property name="sizePolicy"> -- <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> -- <horstretch>0</horstretch> -- <verstretch>0</verstretch> -- </sizepolicy> -- </property> -- <property name="focusPolicy"> -- <enum>Qt::NoFocus</enum> -- </property> -- <property name="frameShape"> -- <enum>QFrame::NoFrame</enum> -- </property> -- <property name="selectionMode"> -- <enum>QAbstractItemView::NoSelection</enum> -- </property> -- <property name="verticalScrollMode"> -- <enum>QAbstractItemView::ScrollPerPixel</enum> -- </property> -- <property name="rootIsDecorated"> -- <bool>false</bool> -- </property> -- <property name="uniformRowHeights"> -- <bool>true</bool> -- </property> -- <property name="allColumnsShowFocus"> -- <bool>true</bool> -- </property> -- <property name="columnCount"> -- <number>2</number> -- </property> -- <attribute name="headerVisible"> -- <bool>false</bool> -- </attribute> -- <attribute name="headerDefaultSectionSize"> -- <number>24</number> -- </attribute> -- <attribute name="headerMinimumSectionSize"> -- <number>0</number> -- </attribute> -- <column> -- <property name="text"> -- <string notr="true">1</string> -- </property> -- </column> -- <column> -- <property name="text"> -- <string notr="true">2</string> -- </property> -- </column> -- </widget> -- </item> -- <item row="3" column="0"> -- <widget class="QPushButton" name="createNewProjectButton"> -- <property name="focusPolicy"> -- <enum>Qt::TabFocus</enum> -- </property> -- <property name="text"> -- <string>Create New Project...</string> -- </property> -- <property name="flat"> -- <bool>true</bool> -- </property> -- </widget> -- </item> -- <item row="4" column="0"> -- <spacer name="verticalSpacer_2"> -- <property name="orientation"> -- <enum>Qt::Vertical</enum> -- </property> -- <property name="sizeHint" stdset="0"> -- <size> -- <width>20</width> -- <height>40</height> -- </size> -- </property> -- </spacer> -- </item> -- </layout> -- </widget> -- </item> -- </layout> -- </widget> -- <widget class="QWidget" name="communityPage"> -+ <widget class="QWidget" name="widget"> - <layout class="QGridLayout" name="gridLayout_7"> - <property name="margin"> - <number>18</number> -@@ -944,168 +259,6 @@ QToolButton:pressed { - <property name="spacing"> - <number>24</number> - </property> -- <item row="0" column="0"> -- <widget class="QFrame" name="labsFrame"> -- <property name="frameShape"> -- <enum>QFrame::NoFrame</enum> -- </property> -- <property name="frameShadow"> -- <enum>QFrame::Plain</enum> -- </property> -- <layout class="QVBoxLayout" name="verticalLayout_2"> -- <item> -- <widget class="QLabel" name="labsTitleLabel"> -- <property name="sizePolicy"> -- <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> -- <horstretch>0</horstretch> -- <verstretch>0</verstretch> -- </sizepolicy> -- </property> -- <property name="alignment"> -- <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> -- </property> -- </widget> -- </item> -- <item> -- <widget class="Core::Utils::WelcomeModeTreeWidget" name="newsTreeWidget"> -- <property name="sizePolicy"> -- <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> -- <horstretch>0</horstretch> -- <verstretch>0</verstretch> -- </sizepolicy> -- </property> -- <property name="minimumSize"> -- <size> -- <width>340</width> -- <height>0</height> -- </size> -- </property> -- <property name="focusPolicy"> -- <enum>Qt::NoFocus</enum> -- </property> -- <property name="frameShape"> -- <enum>QFrame::NoFrame</enum> -- </property> -- <property name="selectionMode"> -- <enum>QAbstractItemView::NoSelection</enum> -- </property> -- <property name="verticalScrollMode"> -- <enum>QAbstractItemView::ScrollPerPixel</enum> -- </property> -- <property name="rootIsDecorated"> -- <bool>false</bool> -- </property> -- <property name="uniformRowHeights"> -- <bool>true</bool> -- </property> -- <property name="allColumnsShowFocus"> -- <bool>true</bool> -- </property> -- <property name="columnCount"> -- <number>2</number> -- </property> -- <attribute name="headerVisible"> -- <bool>false</bool> -- </attribute> -- <attribute name="headerDefaultSectionSize"> -- <number>24</number> -- </attribute> -- <attribute name="headerMinimumSectionSize"> -- <number>0</number> -- </attribute> -- <column> -- <property name="text"> -- <string notr="true">1</string> -- </property> -- </column> -- <column> -- <property name="text"> -- <string notr="true">2</string> -- </property> -- </column> -- </widget> -- </item> -- </layout> -- </widget> -- </item> -- <item row="0" column="1"> -- <widget class="QFrame" name="sitesFrame"> -- <property name="frameShape"> -- <enum>QFrame::NoFrame</enum> -- </property> -- <property name="frameShadow"> -- <enum>QFrame::Plain</enum> -- </property> -- <layout class="QVBoxLayout" name="verticalLayout_3"> -- <item> -- <widget class="QLabel" name="sitesTitleLabel"> -- <property name="sizePolicy"> -- <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> -- <horstretch>0</horstretch> -- <verstretch>0</verstretch> -- </sizepolicy> -- </property> -- <property name="alignment"> -- <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> -- </property> -- </widget> -- </item> -- <item> -- <widget class="Core::Utils::WelcomeModeTreeWidget" name="sitesTreeWidget"> -- <property name="sizePolicy"> -- <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> -- <horstretch>0</horstretch> -- <verstretch>0</verstretch> -- </sizepolicy> -- </property> -- <property name="focusPolicy"> -- <enum>Qt::NoFocus</enum> -- </property> -- <property name="frameShape"> -- <enum>QFrame::NoFrame</enum> -- </property> -- <property name="selectionMode"> -- <enum>QAbstractItemView::NoSelection</enum> -- </property> -- <property name="verticalScrollMode"> -- <enum>QAbstractItemView::ScrollPerPixel</enum> -- </property> -- <property name="rootIsDecorated"> -- <bool>false</bool> -- </property> -- <property name="uniformRowHeights"> -- <bool>true</bool> -- </property> -- <property name="allColumnsShowFocus"> -- <bool>true</bool> -- </property> -- <property name="columnCount"> -- <number>2</number> -- </property> -- <attribute name="headerVisible"> -- <bool>false</bool> -- </attribute> -- <attribute name="headerDefaultSectionSize"> -- <number>24</number> -- </attribute> -- <attribute name="headerMinimumSectionSize"> -- <number>0</number> -- </attribute> -- <column> -- <property name="text"> -- <string notr="true">1</string> -- </property> -- </column> -- <column> -- <property name="text"> -- <string notr="true">2</string> -- </property> -- </column> -- </widget> -- </item> -- </layout> -- </widget> -- </item> - </layout> - </widget> - </widget> -@@ -1219,13 +372,6 @@ QToolButton:pressed { - </item> - </layout> - </widget> -- <customwidgets> -- <customwidget> -- <class>Core::Utils::WelcomeModeTreeWidget</class> -- <extends>QTreeWidget</extends> -- <header>utils/welcomemodetreewidget.h</header> -- </customwidget> -- </customwidgets> - <resources> - <include location="welcome.qrc"/> - </resources> -diff --git a/src/plugins/welcome/welcomeplugin.cpp b/src/plugins/welcome/welcomeplugin.cpp -index e9743a9..e7906f1 100644 ---- a/src/plugins/welcome/welcomeplugin.cpp -+++ b/src/plugins/welcome/welcomeplugin.cpp -@@ -31,6 +31,8 @@ - - #include "welcomemode.h" - -+#include "communitywelcomepage.h" -+ - #include <coreplugin/actionmanager/actionmanager.h> - #include <coreplugin/basemode.h> - #include <coreplugin/coreconstants.h> -@@ -45,11 +47,10 @@ - #include <QtGui/QMessageBox> - #include <QtGui/QPushButton> - --using namespace Welcome; -- -+using namespace Welcome::Internal; - - WelcomePlugin::WelcomePlugin() -- : m_welcomeMode(0) -+ : m_welcomeMode(0), m_communityWelcomePage(0) - { - } - -@@ -59,6 +60,10 @@ WelcomePlugin::~WelcomePlugin() - removeObject(m_welcomeMode); - delete m_welcomeMode; - } -+ if (m_communityWelcomePage) { -+ removeObject(m_communityWelcomePage); -+ delete m_communityWelcomePage; -+ } - } - - /*! Initializes the plugin. Returns true on success. -@@ -72,6 +77,9 @@ bool WelcomePlugin::initialize(const QStringList &arguments, QString *error_mess - Q_UNUSED(arguments) - Q_UNUSED(error_message) - -+ m_communityWelcomePage = new Internal::CommunityWelcomePage; -+ addObject(m_communityWelcomePage); -+ - m_welcomeMode = new WelcomeMode; - addObject(m_welcomeMode); - -@@ -91,6 +99,7 @@ bool WelcomePlugin::initialize(const QStringList &arguments, QString *error_mess - */ - void WelcomePlugin::extensionsInitialized() - { -+ m_welcomeMode->initPlugins(); - Core::ModeManager::instance()->activateMode(m_welcomeMode->uniqueModeName()); - } - -diff --git a/src/plugins/welcome/welcomeplugin.h b/src/plugins/welcome/welcomeplugin.h -index 970ec39..54275b0 100644 ---- a/src/plugins/welcome/welcomeplugin.h -+++ b/src/plugins/welcome/welcomeplugin.h -@@ -36,6 +36,9 @@ namespace Welcome { - - class WelcomeMode; - -+namespace Internal { -+class CommunityWelcomePage; -+ - class WelcomePlugin - : public ExtensionSystem::IPlugin - { -@@ -51,8 +54,10 @@ public: - - private: - WelcomeMode *m_welcomeMode; -+ Internal::CommunityWelcomePage *m_communityWelcomePage; - }; - - } // namespace Welcome -+} // namespace Internal - - #endif // WELCOMEPLUGIN_H --- -1.6.3.msysgit.0 -