From c297a4ac55540f3a22e94547f9601d3e455c39c6 Mon Sep 17 00:00:00 2001 From: Daniel Molkentin Date: Tue, 28 Jul 2009 18:59:10 +0200 Subject: [PATCH] Remove accidentially committed file --- ...Make-the-welcome-screen-into-plugins.patch | 13132 ---------------- 1 file changed, 13132 deletions(-) delete mode 100644 0001-Make-the-welcome-screen-into-plugins.patch 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 84af98cdb97..00000000000 --- 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 -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 -+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 -++ -++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 -+ #include -+ #include -+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 -+ -+ 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. -+ -+ -+ -+- -+ -+ -+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(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. -+ -+ -+ -+- -+ -+ -+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 -+ #include -+@@ -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(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 -+- (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(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(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(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 -++#include -++#include -++#include -++#include -++ -++#include -++#include -++#include -++#include -++#include -++ -++#include -++ -++using namespace ProjectExplorer::Internal; -++ -++static QString formatTitleLabel(const QString &text) -++{ -++ // TODO: do not hardcode here -++ QString rc = QLatin1String( -++ "" -++ "" -++ "

" -++ ""); -++ rc += text; -++ rc += QLatin1String("


"); -++ 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 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 -++ -++ -++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 > 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 @@ -++ -++ -++ ProjectExplorer::Internal::ProjectWelcomePage -++ -++ -++ -++ 0 -++ 0 -++ 667 -++ 365 -++ -++ -++ -++ Form -++ -++ -++ -++ -++ -++ -++ 0 -++ 0 -++ -++ -++ -++ -++ 270 -++ 130 -++ -++ -++ -++ -++ -++ -++ -++ 0 -++ -++ -++ 3 -++ -++ -++ -++ -++ -++ 0 -++ 0 -++ -++ -++ -++ Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop -++ -++ -++ -++ -++ -++ -++ -++ 0 -++ 0 -++ -++ -++ -++ Qt::NoFocus -++ -++ -++ QFrame::NoFrame -++ -++ -++ QAbstractItemView::NoSelection -++ -++ -++ QAbstractItemView::ScrollPerPixel -++ -++ -++ false -++ -++ -++ true -++ -++ -++ true -++ -++ -++ 2 -++ -++ -++ false -++ -++ -++ 24 -++ -++ -++ 0 -++ -++ -++ -++ 1 -++ -++ -++ -++ -++ 2 -++ -++ -++ -++ -++ -++ -++ -++ Qt::TabFocus -++ -++ -++ Manage Sessions... -++ -++ -++ -++ -++ -++ -++ Qt::Vertical -++ -++ -++ -++ 20 -++ 40 -++ -++ -++ -++ -++ -++ -++ -++ -++ -++ -++ -++ -++ -++ -++ 0 -++ -++ -++ 3 -++ -++ -++ 9 -++ -++ -++ -++ -++ -++ 0 -++ 0 -++ -++ -++ -++ Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop -++ -++ -++ -++ -++ -++ -++ -++ 0 -++ 0 -++ -++ -++ -++ Qt::NoFocus -++ -++ -++ QFrame::NoFrame -++ -++ -++ QAbstractItemView::NoSelection -++ -++ -++ QAbstractItemView::ScrollPerPixel -++ -++ -++ false -++ -++ -++ true -++ -++ -++ true -++ -++ -++ 2 -++ -++ -++ false -++ -++ -++ 24 -++ -++ -++ 0 -++ -++ -++ -++ 1 -++ -++ -++ -++ -++ 2 -++ -++ -++ -++ -++ -++ -++ -++ Qt::TabFocus -++ -++ -++ Create New Project... -++ -++ -++ false -++ -++ -++ -++ -++ -++ -++ Qt::Vertical -++ -++ -++ -++ 20 -++ 40 -++ -++ -++ -++ -++ -++ -++ -++ -++ -++ -++ -++ Core::Utils::WelcomeModeTreeWidget -++ QTreeWidget -++
utils/welcomemodetreewidget.h
-++
-++
-++ -++ -++
-+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 -++ -++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 @@ -++ -++ -++ -++ -++ ProjectWelcomePlugin -++ -++ -++ -++ 0 -++ 0 -++ 400 -++ 300 -++ -++ -++ -++ Form -++ -++ -++ -++ -++ -+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. -+ -+ -+ -+- -+ -+ -+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 -++#include -++ -++#include -++ -++#include -++ -++#include -++#include -++#include -++#include -++#include -++#include -++#include -++ -++namespace Qt4ProjectManager { -++namespace Internal { -++ -++// TODO: remove -++static QString titleLabel(const QString &text) -++{ -++ // TODO: do not hardcode here -++ QString rc = QLatin1String( -++ "" -++ "" -++ "

" -++ ""); -++ rc += text; -++ rc += QLatin1String("


"); -++ 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("Qt Creator - A quick tour"), -++ 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(); -++ Q_ASSERT(helpManager); -++ helpManager->openHelpPage(url); -++} -++void GettingStartedWelcomePage::slotOpenContextHelpPage(const QString& url) -++{ -++ Help::HelpManager *helpManager -++ = ExtensionSystem::PluginManager::instance()->getObject(); -++ 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 Ctrl+number:
    " -++ "
  • 1 - Welcome
  • 2 - Edit
  • 3 - Debug
  • 4 - Projects
  • 5 - Help
  • " -++ "
  • 6 - Output
")); -++ //:%1 gets replaced by Alt (Win/Unix) or Cmd (Mac) -++ tips.append(tr("You can show and hide the side bar using %1+0.").arg(altShortcut)); -++ tips.append(tr("You can fine tune the Find 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 external libraries, Qt Creator will automatically offer syntax highlighting " -++ "and code completion.")); -++ tips.append(tr("The code completion is CamelCase-aware. For example, to complete namespaceUri " -++ "you can just type nU and hit Ctrl+Space.")); -++ tips.append(tr("You can force code completion at any time using Ctrl+Space.")); -++ tips.append(tr("You can start Qt Creator with a session by calling qtcreator <sessionname>.")); -++ tips.append(tr("You can return to edit mode from any other mode at any time by hitting Escape.")); -++ //:%1 gets replaced by Alt (Win/Unix) or Cmd (Mac) -++ tips.append(tr("You can switch between the output pane by hitting %1+n where n is the number denoted " -++ "on the buttons at the window bottom:" -++ "
  • 1 - Build Issues
  • 2 - Search Results
  • 3 - Application Output
  • " -++ "
  • 4 - Compile Output
").arg(altShortcut)); -++ tips.append(tr("You can quickly search methods, classes, help and more using the " -++ "Locator bar (Ctrl+K).")); -++ tips.append(tr("You can add custom build steps in the " -++ "build settings.")); -++ tips.append(tr("Within a session, you can add " -++ "dependencies between projects.")); -++ tips.append(tr("You can set the preferred editor encoding for every project in Projects -> Editor Settings -> Default Encoding.")); -++ tips.append(tr("You can modify the binary that is being executed when you press the Run button: Add a Custom Executable " -++ "by clicking the + button in Projects -> Run Settings -> Run Configuration and then select the new " -++ "target in the combo box.")); -++ tips.append(tr("You can use Qt Creator with a number of " -++ "revision control systems such as Subversion, Perforce and Git.")); -++ tips.append(tr("In the editor, F2 toggles declaration and definition while F4 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 -++ -++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 @@ -++ -++ -++ Qt4ProjectManager::Internal::GettingStartedWelcomePage -++ -++ -++ -++ 0 -++ 0 -++ 646 -++ 361 -++ -++ -++ -++ Form -++ -++ -++ -++ -++ -++ -++ 0 -++ 0 -++ -++ -++ -++ -++ 400 -++ 16777215 -++ -++ -++ -++ -++ -++ -++ -++ -++ -++ -++ 0 -++ 0 -++ -++ -++ -++ Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop -++ -++ -++ -++ -++ -++ -++ -++ 0 -++ 0 -++ -++ -++ -++ Qt::NoFocus -++ -++ -++ QFrame::NoFrame -++ -++ -++ QAbstractItemView::NoSelection -++ -++ -++ QAbstractItemView::ScrollPerPixel -++ -++ -++ false -++ -++ -++ true -++ -++ -++ true -++ -++ -++ 2 -++ -++ -++ false -++ -++ -++ 24 -++ -++ -++ 0 -++ -++ -++ -++ 1 -++ -++ -++ -++ -++ 2 -++ -++ -++ -++ -++ -++ -++ -++ -++ -++ -++ -++ 0 -++ 0 -++ -++ -++ -++ -++ 400 -++ 16777215 -++ -++ -++ -++ -++ -++ -++ -++ 8 -++ -++ -++ 0 -++ -++ -++ -++ -++ Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop -++ -++ -++ -++ -++ -++ -++ false -++ -++ -++ -++ 0 -++ 0 -++ -++ -++ -++ -++ Examples not installed -++ -++ -++ -++ -++ -++ -++ -++ false -++ -++ -++ -++ 0 -++ 0 -++ -++ -++ -++ Open -++ -++ -++ -++ -++ -++ -++ Qt::Horizontal -++ -++ -++ QSizePolicy::Fixed -++ -++ -++ -++ 6 -++ 6 -++ -++ -++ -++ -++ -++ -++ -++ -++ -++ -++ -++ 0 -++ 0 -++ -++ -++ -++ -++ 400 -++ 16777215 -++ -++ -++ -++ -++ -++ -++ -++ 9 -++ -++ -++ -++ -++ -++ 0 -++ 0 -++ -++ -++ -++ Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop -++ -++ -++ -++ -++ -++ -++ -++ 0 -++ 0 -++ -++ -++ -++ QFrame::NoFrame -++ -++ -++ QFrame::Plain -++ -++ -++ Qt::ScrollBarAlwaysOff -++ -++ -++ Qt::ScrollBarAlwaysOff -++ -++ -++ true -++ -++ -++ -++ -++ -++ -++ 0 -++ -++ -++ -++ -++ Qt::Vertical -++ -++ -++ QSizePolicy::Preferred -++ -++ -++ -++ 20 -++ 2 -++ -++ -++ -++ -++ -++ -++ -++ QToolButton{ -++ border-right:solid 0 px; -++ height:16px; -++ width:12px; -++} -++ -++ -++ -++ -++ -++ -++ -++ :/welcome/images/arrow-left.png:/welcome/images/arrow-left.png -++ -++ -++ Qt::NoArrow -++ -++ -++ -++ -++ -++ -++ QToolButton{ -++ border-left:solid 0 px; -++ height:16px; -++ width:12px; -++} -++ -++ -++ -++ -++ -++ -++ -++ :/welcome/images/arrow-right.png:/welcome/images/arrow-right.png -++ -++ -++ Qt::NoArrow -++ -++ -++ -++ -++ -++ -++ Qt::Vertical -++ -++ -++ -++ 20 -++ 2 -++ -++ -++ -++ -++ -++ -++ -++ -++ -++ -++ -++ -++ -++ Core::Utils::WelcomeModeTreeWidget -++ QTreeWidget -++
utils/welcomemodetreewidget.h
-++
-++
-++ -++ -++ -++ -++
-+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 -++ -++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(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 -+ #include -+ #include -+-#include -+ #include -+ #include -+ #include -+@@ -51,6 +50,7 @@ -+ #include -+ #include -+ #include -++#include -+ #include -+ #include -+ -+@@ -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 -+- (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 &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 -++ -++namespace Welcome { -++namespace Internal { -++ -++// TODO: remove -++static QString titleLabel(const QString &text) -++{ -++ // TODO: do not hardcode here -++ QString rc = QLatin1String( -++ "" -++ "" -++ "

" -++ ""); -++ rc += text; -++ rc += QLatin1String("


"); -++ 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 -++ -++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 @@ -++ -++ -++ Welcome::Internal::CommunityWelcomePage -++ -++ -++ -++ 0 -++ 0 -++ 667 -++ 352 -++ -++ -++ -++ Form -++ -++ -++ -++ -++ -++ QFrame::NoFrame -++ -++ -++ QFrame::Plain -++ -++ -++ -++ -++ -++ -++ 0 -++ 0 -++ -++ -++ -++ Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop -++ -++ -++ -++ -++ -++ -++ -++ 0 -++ 0 -++ -++ -++ -++ -++ 340 -++ 0 -++ -++ -++ -++ Qt::NoFocus -++ -++ -++ QFrame::NoFrame -++ -++ -++ QAbstractItemView::NoSelection -++ -++ -++ QAbstractItemView::ScrollPerPixel -++ -++ -++ false -++ -++ -++ true -++ -++ -++ true -++ -++ -++ 2 -++ -++ -++ false -++ -++ -++ 24 -++ -++ -++ 0 -++ -++ -++ -++ 1 -++ -++ -++ -++ -++ 2 -++ -++ -++ -++ -++ -++ -++ -++ -++ -++ -++ QFrame::NoFrame -++ -++ -++ QFrame::Plain -++ -++ -++ -++ -++ -++ -++ 0 -++ 0 -++ -++ -++ -++ Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop -++ -++ -++ -++ -++ -++ -++ -++ 0 -++ 0 -++ -++ -++ -++ Qt::NoFocus -++ -++ -++ QFrame::NoFrame -++ -++ -++ QAbstractItemView::NoSelection -++ -++ -++ QAbstractItemView::ScrollPerPixel -++ -++ -++ false -++ -++ -++ true -++ -++ -++ true -++ -++ -++ 2 -++ -++ -++ false -++ -++ -++ 24 -++ -++ -++ 0 -++ -++ -++ -++ 1 -++ -++ -++ -++ -++ 2 -++ -++ -++ -++ -++ -++ -++ -++ -++ -++ -++ -++ Core::Utils::WelcomeModeTreeWidget -++ QTreeWidget -++
utils/welcomemodetreewidget.h
-++
-++
-++ -++ -++
-+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 -++ -++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 -+ #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 -+ -+ 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 -++#include -+ -+ #include -+-#include -+- -+ #include -+ #include -+ #include -+@@ -41,24 +40,38 @@ -+ #include -+ #include -+ -+-#include -+ #include -+ #include -+ #include -++#include -++#include -+ -+-#include -+-#include -+-#include -+-#include -+-#include -+ #include -++#include -++#include -+ -+ #include -+ -+ #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( -++ "" -++ "" -++ "

" -++ ""); -++ rc += text; -++ rc += QLatin1String("


"); -++ 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 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( -+- "" -+- "" -+- "

" -+- ""); -+- rc += text; -+- rc += QLatin1String("


"); -+- 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("Qt Creator - A quick tour"), -+- 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 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 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 plugins = PluginManager::instance()->getObjects(); -++ 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 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(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 plugins = PluginManager::instance()->getObjects(); -++ 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(sender()); -++ QMap::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 Ctrl+number:
    " -+- "
  • 1 - Welcome
  • 2 - Edit
  • 3 - Debug
  • 4 - Projects
  • 5 - Help
  • " -+- "
  • 6 - Output
")); -+- //:%1 gets replaced by Alt (Win/Unix) or Cmd (Mac) -+- tips.append(tr("You can show and hide the side bar using %1+0.").arg(altShortcut)); -+- tips.append(tr("You can fine tune the Find 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 external libraries, Qt Creator will automatically offer syntax highlighting " -+- "and code completion.")); -+- tips.append(tr("The code completion is CamelCase-aware. For example, to complete namespaceUri " -+- "you can just type nU and hit Ctrl+Space.")); -+- tips.append(tr("You can force code completion at any time using Ctrl+Space.")); -+- tips.append(tr("You can start Qt Creator with a session by calling qtcreator <sessionname>.")); -+- tips.append(tr("You can return to edit mode from any other mode at any time by hitting Escape.")); -+- //:%1 gets replaced by Alt (Win/Unix) or Cmd (Mac) -+- tips.append(tr("You can switch between the output pane by hitting %1+n where n is the number denoted " -+- "on the buttons at the window bottom:" -+- "
  • 1 - Build Issues
  • 2 - Search Results
  • 3 - Application Output
  • " -+- "
  • 4 - Compile Output
").arg(altShortcut)); -+- tips.append(tr("You can quickly search methods, classes, help and more using the " -+- "Locator bar (Ctrl+K).")); -+- tips.append(tr("You can add custom build steps in the " -+- "build settings.")); -+- tips.append(tr("Within a session, you can add " -+- "dependencies between projects.")); -+- tips.append(tr("You can set the preferred editor encoding for every project in Projects -> Editor Settings -> Default Encoding.")); -+- tips.append(tr("You can modify the binary that is being executed when you press the Run button: Add a Custom Executable " -+- "by clicking the + button in Projects -> Run Settings -> Run Configuration and then select the new " -+- "target in the combo box.")); -+- tips.append(tr("You can use Qt Creator with a number of " -+- "revision control systems such as Subversion, Perforce and Git.")); -+- tips.append(tr("In the editor, F2 toggles declaration and definition while F4 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 > projectList; // pair of filename, displayname -+- }; -+- -+- void updateWelcomePage(const WelcomePageData &welcomePageData); -+- -+ // IMode -+ QString name() const; -+ QIcon icon() const; -+@@ -75,31 +63,14 @@ public: -+ QList 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 @@ -+ -+ -+- Welcome::WelcomePage -+- -++ Welcome::WelcomeMode -++ -+ -+ -+ 0 -+@@ -172,6 +172,12 @@ QToolButton:pressed, QPushButton:pressed{ -+ 0 -+ -+ -++ -++ -++ 0 -++ 10 -++ -++ -+ -+ -+ 50 -+@@ -238,129 +244,6 @@ QToolButton:pressed { -+ -+ QFrame::Plain -+ -+- -+- -+- 0 -+- -+- -+- 0 -+- -+- -+- -+- -+- true -+- -+- -+- -+- 0 -+- 0 -+- -+- -+- -+- -+- 0 -+- 0 -+- -+- -+- -+- -+- -1 -+- -+- -+- -+- -+- -+- -+- Getting Started -+- -+- -+- true -+- -+- -+- true -+- -+- -+- false -+- -+- -+- -+- -+- -+- -+- -+- 0 -+- 0 -+- -+- -+- -+- -+- 0 -+- 0 -+- -+- -+- -+- -+- -1 -+- -+- -+- -+- Develop -+- -+- -+- true -+- -+- -+- false -+- -+- -+- -+- -+- -+- -+- -+- 0 -+- 0 -+- -+- -+- -+- -+- 0 -+- 0 -+- -+- -+- -+- -+- -1 -+- -+- -+- -+- -+- -+- -+- Community -+- -+- -+- true -+- -+- -+- -+- -+- -+- -+- Qt::Horizontal -+- -+- -+- QSizePolicy::Fixed -+- -+- -+- -+- 5 -+- 20 -+- -+- -+- -+- -+- -+ -+ -+ -+@@ -368,575 +251,7 @@ QToolButton:pressed { -+ -+ 0 -+ -+- -+- -+- -+- 18 -+- -+- -+- 18 -+- -+- -+- 12 -+- -+- -+- 18 -+- -+- -+- 24 -+- -+- -+- -+- -+- -+- 0 -+- 0 -+- -+- -+- -+- -+- 400 -+- 16777215 -+- -+- -+- -+- -+- -+- -+- -+- -+- -+- -+- 0 -+- 0 -+- -+- -+- -+- Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop -+- -+- -+- -+- -+- -+- -+- -+- 0 -+- 0 -+- -+- -+- -+- Qt::NoFocus -+- -+- -+- QFrame::NoFrame -+- -+- -+- QAbstractItemView::NoSelection -+- -+- -+- QAbstractItemView::ScrollPerPixel -+- -+- -+- false -+- -+- -+- true -+- -+- -+- true -+- -+- -+- 2 -+- -+- -+- false -+- -+- -+- 24 -+- -+- -+- 0 -+- -+- -+- -+- 1 -+- -+- -+- -+- -+- 2 -+- -+- -+- -+- -+- -+- -+- -+- -+- -+- -+- -+- 0 -+- 0 -+- -+- -+- -+- -+- 400 -+- 16777215 -+- -+- -+- -+- -+- -+- -+- -+- 8 -+- -+- -+- 0 -+- -+- -+- -+- -+- Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop -+- -+- -+- -+- -+- -+- -+- false -+- -+- -+- -+- 0 -+- 0 -+- -+- -+- -+- -+- Examples not installed -+- -+- -+- -+- -+- -+- -+- -+- false -+- -+- -+- -+- 0 -+- 0 -+- -+- -+- -+- Open -+- -+- -+- -+- -+- -+- -+- Qt::Horizontal -+- -+- -+- QSizePolicy::Fixed -+- -+- -+- -+- 6 -+- 6 -+- -+- -+- -+- -+- -+- -+- -+- -+- -+- -+- -+- 0 -+- 0 -+- -+- -+- -+- -+- 400 -+- 16777215 -+- -+- -+- -+- -+- -+- -+- -+- 9 -+- -+- -+- -+- -+- -+- 0 -+- 0 -+- -+- -+- -+- Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop -+- -+- -+- -+- -+- -+- -+- -+- 0 -+- 0 -+- -+- -+- -+- QFrame::NoFrame -+- -+- -+- QFrame::Plain -+- -+- -+- Qt::ScrollBarAlwaysOff -+- -+- -+- Qt::ScrollBarAlwaysOff -+- -+- -+- true -+- -+- -+- -+- -+- -+- -+- 0 -+- -+- -+- -+- -+- Qt::Vertical -+- -+- -+- QSizePolicy::Preferred -+- -+- -+- -+- 20 -+- 2 -+- -+- -+- -+- -+- -+- -+- -+- QToolButton{ -+- border-right:solid 0 px; -+- height:16px; -+- width:12px; -+-} -+- -+- -+- -+- -+- -+- -+- -+- :/welcome/images/arrow-left.png:/welcome/images/arrow-left.png -+- -+- -+- Qt::NoArrow -+- -+- -+- -+- -+- -+- -+- QToolButton{ -+- border-left:solid 0 px; -+- height:16px; -+- width:12px; -+-} -+- -+- -+- -+- -+- -+- -+- -+- :/welcome/images/arrow-right.png:/welcome/images/arrow-right.png -+- -+- -+- Qt::NoArrow -+- -+- -+- -+- -+- -+- -+- Qt::Vertical -+- -+- -+- -+- 20 -+- 2 -+- -+- -+- -+- -+- -+- -+- -+- -+- -+- -+- -+- -+- -+- -+- 18 -+- -+- -+- 24 -+- -+- -+- -+- -+- -+- 0 -+- 0 -+- -+- -+- -+- -+- 270 -+- 130 -+- -+- -+- -+- -+- -+- -+- -+- 0 -+- -+- -+- 3 -+- -+- -+- -+- -+- -+- 0 -+- 0 -+- -+- -+- -+- Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop -+- -+- -+- -+- -+- -+- -+- -+- 0 -+- 0 -+- -+- -+- -+- Qt::NoFocus -+- -+- -+- QFrame::NoFrame -+- -+- -+- QAbstractItemView::NoSelection -+- -+- -+- QAbstractItemView::ScrollPerPixel -+- -+- -+- false -+- -+- -+- true -+- -+- -+- true -+- -+- -+- 2 -+- -+- -+- false -+- -+- -+- 24 -+- -+- -+- 0 -+- -+- -+- -+- 1 -+- -+- -+- -+- -+- 2 -+- -+- -+- -+- -+- -+- -+- -+- Qt::TabFocus -+- -+- -+- Manage Sessions... -+- -+- -+- -+- -+- -+- -+- Qt::Vertical -+- -+- -+- -+- 20 -+- 40 -+- -+- -+- -+- -+- -+- -+- -+- -+- -+- -+- -+- -+- -+- -+- 0 -+- -+- -+- 3 -+- -+- -+- 9 -+- -+- -+- -+- -+- -+- 0 -+- 0 -+- -+- -+- -+- Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop -+- -+- -+- -+- -+- -+- -+- -+- 0 -+- 0 -+- -+- -+- -+- Qt::NoFocus -+- -+- -+- QFrame::NoFrame -+- -+- -+- QAbstractItemView::NoSelection -+- -+- -+- QAbstractItemView::ScrollPerPixel -+- -+- -+- false -+- -+- -+- true -+- -+- -+- true -+- -+- -+- 2 -+- -+- -+- false -+- -+- -+- 24 -+- -+- -+- 0 -+- -+- -+- -+- 1 -+- -+- -+- -+- -+- 2 -+- -+- -+- -+- -+- -+- -+- -+- Qt::TabFocus -+- -+- -+- Create New Project... -+- -+- -+- true -+- -+- -+- -+- -+- -+- -+- Qt::Vertical -+- -+- -+- -+- 20 -+- 40 -+- -+- -+- -+- -+- -+- -+- -+- -+- -+- -++ -+ -+ -+ 18 -+@@ -944,168 +259,6 @@ QToolButton:pressed { -+ -+ 24 -+ -+- -+- -+- -+- QFrame::NoFrame -+- -+- -+- QFrame::Plain -+- -+- -+- -+- -+- -+- -+- 0 -+- 0 -+- -+- -+- -+- Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop -+- -+- -+- -+- -+- -+- -+- -+- 0 -+- 0 -+- -+- -+- -+- -+- 340 -+- 0 -+- -+- -+- -+- Qt::NoFocus -+- -+- -+- QFrame::NoFrame -+- -+- -+- QAbstractItemView::NoSelection -+- -+- -+- QAbstractItemView::ScrollPerPixel -+- -+- -+- false -+- -+- -+- true -+- -+- -+- true -+- -+- -+- 2 -+- -+- -+- false -+- -+- -+- 24 -+- -+- -+- 0 -+- -+- -+- -+- 1 -+- -+- -+- -+- -+- 2 -+- -+- -+- -+- -+- -+- -+- -+- -+- -+- -+- QFrame::NoFrame -+- -+- -+- QFrame::Plain -+- -+- -+- -+- -+- -+- -+- 0 -+- 0 -+- -+- -+- -+- Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop -+- -+- -+- -+- -+- -+- -+- -+- 0 -+- 0 -+- -+- -+- -+- Qt::NoFocus -+- -+- -+- QFrame::NoFrame -+- -+- -+- QAbstractItemView::NoSelection -+- -+- -+- QAbstractItemView::ScrollPerPixel -+- -+- -+- false -+- -+- -+- true -+- -+- -+- true -+- -+- -+- 2 -+- -+- -+- false -+- -+- -+- 24 -+- -+- -+- 0 -+- -+- -+- -+- 1 -+- -+- -+- -+- -+- 2 -+- -+- -+- -+- -+- -+- -+- -+ -+ -+ -+@@ -1219,13 +372,6 @@ QToolButton:pressed { -+ -+ -+ -+- -+- -+- Core::Utils::WelcomeModeTreeWidget -+- QTreeWidget -+-
utils/welcomemodetreewidget.h
-+-
-+-
-+ -+ -+ -+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 -+ #include -+ #include -+@@ -45,11 +47,10 @@ -+ #include -+ #include -+ -+-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 -+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 -++ -++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 -+ -+ 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. -+ -+ -+ -+- -+ -+ -+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(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. -+ -+ -+ -+- -+ -+ -+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 -+ #include -+@@ -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(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 -+- (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(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(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(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 -++#include -++#include -++#include -++#include -++ -++#include -++#include -++#include -++#include -++#include -++ -++#include -++ -++using namespace ProjectExplorer::Internal; -++ -++static QString formatTitleLabel(const QString &text) -++{ -++ // TODO: do not hardcode here -++ QString rc = QLatin1String( -++ "" -++ "" -++ "

" -++ ""); -++ rc += text; -++ rc += QLatin1String("


"); -++ 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 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 -++ -++ -++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 > 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 @@ -++ -++ -++ ProjectExplorer::Internal::ProjectWelcomePageWidget -++ -++ -++ -++ 0 -++ 0 -++ 667 -++ 365 -++ -++ -++ -++ Form -++ -++ -++ -++ -++ -++ -++ 0 -++ 0 -++ -++ -++ -++ -++ 270 -++ 130 -++ -++ -++ -++ -++ -++ -++ -++ 0 -++ -++ -++ 3 -++ -++ -++ -++ -++ -++ 0 -++ 0 -++ -++ -++ -++ Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop -++ -++ -++ -++ -++ -++ -++ -++ 0 -++ 0 -++ -++ -++ -++ Qt::NoFocus -++ -++ -++ QFrame::NoFrame -++ -++ -++ QAbstractItemView::NoSelection -++ -++ -++ QAbstractItemView::ScrollPerPixel -++ -++ -++ false -++ -++ -++ true -++ -++ -++ true -++ -++ -++ 2 -++ -++ -++ false -++ -++ -++ 24 -++ -++ -++ 0 -++ -++ -++ -++ 1 -++ -++ -++ -++ -++ 2 -++ -++ -++ -++ -++ -++ -++ -++ Qt::TabFocus -++ -++ -++ Manage Sessions... -++ -++ -++ -++ -++ -++ -++ Qt::Vertical -++ -++ -++ -++ 20 -++ 40 -++ -++ -++ -++ -++ -++ -++ -++ -++ -++ -++ -++ -++ -++ -++ 0 -++ -++ -++ 3 -++ -++ -++ 9 -++ -++ -++ -++ -++ -++ 0 -++ 0 -++ -++ -++ -++ Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop -++ -++ -++ -++ -++ -++ -++ -++ 0 -++ 0 -++ -++ -++ -++ Qt::NoFocus -++ -++ -++ QFrame::NoFrame -++ -++ -++ QAbstractItemView::NoSelection -++ -++ -++ QAbstractItemView::ScrollPerPixel -++ -++ -++ false -++ -++ -++ true -++ -++ -++ true -++ -++ -++ 2 -++ -++ -++ false -++ -++ -++ 24 -++ -++ -++ 0 -++ -++ -++ -++ 1 -++ -++ -++ -++ -++ 2 -++ -++ -++ -++ -++ -++ -++ -++ Qt::TabFocus -++ -++ -++ Create New Project... -++ -++ -++ false -++ -++ -++ -++ -++ -++ -++ Qt::Vertical -++ -++ -++ -++ 20 -++ 40 -++ -++ -++ -++ -++ -++ -++ -++ -++ -++ -++ -++ Core::Utils::WelcomeModeTreeWidget -++ QTreeWidget -++
utils/welcomemodetreewidget.h
-++
-++
-++ -++ -++
-+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 -++ -++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 @@ -++ -++ -++ -++ -++ ProjectWelcomePage -++ -++ -++ -++ 0 -++ 0 -++ 400 -++ 300 -++ -++ -++ -++ Form -++ -++ -++ -++ -++ -+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. -+ -+ -+ -+- -+ -+ -+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 -++#include -++ -++#include -++ -++#include -++ -++#include -++#include -++#include -++#include -++#include -++#include -++#include -++ -++namespace Qt4ProjectManager { -++namespace Internal { -++ -++// TODO: remove -++static QString titleLabel(const QString &text) -++{ -++ // TODO: do not hardcode here -++ QString rc = QLatin1String( -++ "" -++ "" -++ "

" -++ ""); -++ rc += text; -++ rc += QLatin1String("


"); -++ 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("Qt Creator - A quick tour"), -++ 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(); -++ Q_ASSERT(helpManager); -++ helpManager->openHelpPage(url); -++} -++void GettingStartedWelcomePageWidget::slotOpenContextHelpPage(const QString& url) -++{ -++ Help::HelpManager *helpManager -++ = ExtensionSystem::PluginManager::instance()->getObject(); -++ 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 Ctrl+number:
    " -++ "
  • 1 - Welcome
  • 2 - Edit
  • 3 - Debug
  • 4 - Projects
  • 5 - Help
  • " -++ "
  • 6 - Output
")); -++ //:%1 gets replaced by Alt (Win/Unix) or Cmd (Mac) -++ tips.append(tr("You can show and hide the side bar using %1+0.").arg(altShortcut)); -++ tips.append(tr("You can fine tune the Find 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 external libraries, Qt Creator will automatically offer syntax highlighting " -++ "and code completion.")); -++ tips.append(tr("The code completion is CamelCase-aware. For example, to complete namespaceUri " -++ "you can just type nU and hit Ctrl+Space.")); -++ tips.append(tr("You can force code completion at any time using Ctrl+Space.")); -++ tips.append(tr("You can start Qt Creator with a session by calling qtcreator <sessionname>.")); -++ tips.append(tr("You can return to edit mode from any other mode at any time by hitting Escape.")); -++ //:%1 gets replaced by Alt (Win/Unix) or Cmd (Mac) -++ tips.append(tr("You can switch between the output pane by hitting %1+n where n is the number denoted " -++ "on the buttons at the window bottom:" -++ "
  • 1 - Build Issues
  • 2 - Search Results
  • 3 - Application Output
  • " -++ "
  • 4 - Compile Output
").arg(altShortcut)); -++ tips.append(tr("You can quickly search methods, classes, help and more using the " -++ "Locator bar (Ctrl+K).")); -++ tips.append(tr("You can add custom build steps in the " -++ "build settings.")); -++ tips.append(tr("Within a session, you can add " -++ "dependencies between projects.")); -++ tips.append(tr("You can set the preferred editor encoding for every project in Projects -> Editor Settings -> Default Encoding.")); -++ tips.append(tr("You can modify the binary that is being executed when you press the Run button: Add a Custom Executable " -++ "by clicking the + button in Projects -> Run Settings -> Run Configuration and then select the new " -++ "target in the combo box.")); -++ tips.append(tr("You can use Qt Creator with a number of " -++ "revision control systems such as Subversion, Perforce and Git.")); -++ tips.append(tr("In the editor, F2 toggles declaration and definition while F4 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 -++ -++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 @@ -++ -++ -++ Qt4ProjectManager::Internal::GettingStartedWelcomePageWidget -++ -++ -++ -++ 0 -++ 0 -++ 646 -++ 361 -++ -++ -++ -++ Form -++ -++ -++ -++ -++ -++ -++ 0 -++ 0 -++ -++ -++ -++ -++ 400 -++ 16777215 -++ -++ -++ -++ -++ -++ -++ -++ -++ -++ -++ 0 -++ 0 -++ -++ -++ -++ Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop -++ -++ -++ -++ -++ -++ -++ -++ 0 -++ 0 -++ -++ -++ -++ Qt::NoFocus -++ -++ -++ QFrame::NoFrame -++ -++ -++ QAbstractItemView::NoSelection -++ -++ -++ QAbstractItemView::ScrollPerPixel -++ -++ -++ false -++ -++ -++ true -++ -++ -++ true -++ -++ -++ 2 -++ -++ -++ false -++ -++ -++ 24 -++ -++ -++ 0 -++ -++ -++ -++ 1 -++ -++ -++ -++ -++ 2 -++ -++ -++ -++ -++ -++ -++ -++ -++ -++ -++ -++ 0 -++ 0 -++ -++ -++ -++ -++ 400 -++ 16777215 -++ -++ -++ -++ -++ -++ -++ -++ 8 -++ -++ -++ 0 -++ -++ -++ -++ -++ Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop -++ -++ -++ -++ -++ -++ -++ false -++ -++ -++ -++ 0 -++ 0 -++ -++ -++ -++ -++ Examples not installed -++ -++ -++ -++ -++ -++ -++ -++ false -++ -++ -++ -++ 0 -++ 0 -++ -++ -++ -++ Open -++ -++ -++ -++ -++ -++ -++ Qt::Horizontal -++ -++ -++ QSizePolicy::Fixed -++ -++ -++ -++ 6 -++ 6 -++ -++ -++ -++ -++ -++ -++ -++ -++ -++ -++ -++ 0 -++ 0 -++ -++ -++ -++ -++ 400 -++ 16777215 -++ -++ -++ -++ -++ -++ -++ -++ 9 -++ -++ -++ -++ -++ -++ 0 -++ 0 -++ -++ -++ -++ Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop -++ -++ -++ -++ -++ -++ -++ -++ 0 -++ 0 -++ -++ -++ -++ QFrame::NoFrame -++ -++ -++ QFrame::Plain -++ -++ -++ Qt::ScrollBarAlwaysOff -++ -++ -++ Qt::ScrollBarAlwaysOff -++ -++ -++ true -++ -++ -++ -++ -++ -++ -++ 0 -++ -++ -++ -++ -++ Qt::Vertical -++ -++ -++ QSizePolicy::Preferred -++ -++ -++ -++ 20 -++ 2 -++ -++ -++ -++ -++ -++ -++ -++ QToolButton{ -++ border-right:solid 0 px; -++ height:16px; -++ width:12px; -++} -++ -++ -++ -++ -++ -++ -++ -++ :/welcome/images/arrow-left.png:/welcome/images/arrow-left.png -++ -++ -++ Qt::NoArrow -++ -++ -++ -++ -++ -++ -++ QToolButton{ -++ border-left:solid 0 px; -++ height:16px; -++ width:12px; -++} -++ -++ -++ -++ -++ -++ -++ -++ :/welcome/images/arrow-right.png:/welcome/images/arrow-right.png -++ -++ -++ Qt::NoArrow -++ -++ -++ -++ -++ -++ -++ Qt::Vertical -++ -++ -++ -++ 20 -++ 2 -++ -++ -++ -++ -++ -++ -++ -++ -++ -++ -++ -++ -++ -++ Core::Utils::WelcomeModeTreeWidget -++ QTreeWidget -++
utils/welcomemodetreewidget.h
-++
-++
-++ -++ -++ -++ -++
-+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 -++ -++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(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 -+ #include -+ #include -+-#include -+ #include -+ #include -+ #include -+@@ -51,6 +50,7 @@ -+ #include -+ #include -+ #include -++#include -+ #include -+ #include -+ -+@@ -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 -+- (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 &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 -++ -++namespace Welcome { -++namespace Internal { -++ -++// TODO: remove -++static QString titleLabel(const QString &text) -++{ -++ // TODO: do not hardcode here -++ QString rc = QLatin1String( -++ "" -++ "" -++ "

" -++ ""); -++ rc += text; -++ rc += QLatin1String("


"); -++ 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 -++ -++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 @@ -++ -++ -++ Welcome::Internal::CommunityWelcomePageWidget -++ -++ -++ -++ 0 -++ 0 -++ 667 -++ 352 -++ -++ -++ -++ Form -++ -++ -++ -++ -++ -++ QFrame::NoFrame -++ -++ -++ QFrame::Plain -++ -++ -++ -++ -++ -++ -++ 0 -++ 0 -++ -++ -++ -++ Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop -++ -++ -++ -++ -++ -++ -++ -++ 0 -++ 0 -++ -++ -++ -++ -++ 340 -++ 0 -++ -++ -++ -++ Qt::NoFocus -++ -++ -++ QFrame::NoFrame -++ -++ -++ QAbstractItemView::NoSelection -++ -++ -++ QAbstractItemView::ScrollPerPixel -++ -++ -++ false -++ -++ -++ true -++ -++ -++ true -++ -++ -++ 2 -++ -++ -++ false -++ -++ -++ 24 -++ -++ -++ 0 -++ -++ -++ -++ 1 -++ -++ -++ -++ -++ 2 -++ -++ -++ -++ -++ -++ -++ -++ -++ -++ -++ QFrame::NoFrame -++ -++ -++ QFrame::Plain -++ -++ -++ -++ -++ -++ -++ 0 -++ 0 -++ -++ -++ -++ Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop -++ -++ -++ -++ -++ -++ -++ -++ 0 -++ 0 -++ -++ -++ -++ Qt::NoFocus -++ -++ -++ QFrame::NoFrame -++ -++ -++ QAbstractItemView::NoSelection -++ -++ -++ QAbstractItemView::ScrollPerPixel -++ -++ -++ false -++ -++ -++ true -++ -++ -++ true -++ -++ -++ 2 -++ -++ -++ false -++ -++ -++ 24 -++ -++ -++ 0 -++ -++ -++ -++ 1 -++ -++ -++ -++ -++ 2 -++ -++ -++ -++ -++ -++ -++ -++ -++ -++ -++ -++ Core::Utils::WelcomeModeTreeWidget -++ QTreeWidget -++
utils/welcomemodetreewidget.h
-++
-++
-++ -++ -++
-+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 -++ -++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 -+ #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 -+ -+ 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 -++#include -+ -+ #include -+-#include -+- -+ #include -+ #include -+ #include -+@@ -41,24 +40,38 @@ -+ #include -+ #include -+ -+-#include -+ #include -+ #include -+ #include -++#include -++#include -+ -+-#include -+-#include -+-#include -+-#include -+-#include -+ #include -++#include -++#include -+ -+ #include -+ -+ #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( -++ "" -++ "" -++ "

" -++ ""); -++ rc += text; -++ rc += QLatin1String("


"); -++ 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 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( -+- "" -+- "" -+- "

" -+- ""); -+- rc += text; -+- rc += QLatin1String("


"); -+- 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("Qt Creator - A quick tour"), -+- 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 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 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 plugins = PluginManager::instance()->getObjects(); -++ 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 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(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 plugins = PluginManager::instance()->getObjects(); -++ 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(sender()); -++ QMap::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 Ctrl+number:
    " -+- "
  • 1 - Welcome
  • 2 - Edit
  • 3 - Debug
  • 4 - Projects
  • 5 - Help
  • " -+- "
  • 6 - Output
")); -+- //:%1 gets replaced by Alt (Win/Unix) or Cmd (Mac) -+- tips.append(tr("You can show and hide the side bar using %1+0.").arg(altShortcut)); -+- tips.append(tr("You can fine tune the Find 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 external libraries, Qt Creator will automatically offer syntax highlighting " -+- "and code completion.")); -+- tips.append(tr("The code completion is CamelCase-aware. For example, to complete namespaceUri " -+- "you can just type nU and hit Ctrl+Space.")); -+- tips.append(tr("You can force code completion at any time using Ctrl+Space.")); -+- tips.append(tr("You can start Qt Creator with a session by calling qtcreator <sessionname>.")); -+- tips.append(tr("You can return to edit mode from any other mode at any time by hitting Escape.")); -+- //:%1 gets replaced by Alt (Win/Unix) or Cmd (Mac) -+- tips.append(tr("You can switch between the output pane by hitting %1+n where n is the number denoted " -+- "on the buttons at the window bottom:" -+- "
  • 1 - Build Issues
  • 2 - Search Results
  • 3 - Application Output
  • " -+- "
  • 4 - Compile Output
").arg(altShortcut)); -+- tips.append(tr("You can quickly search methods, classes, help and more using the " -+- "Locator bar (Ctrl+K).")); -+- tips.append(tr("You can add custom build steps in the " -+- "build settings.")); -+- tips.append(tr("Within a session, you can add " -+- "dependencies between projects.")); -+- tips.append(tr("You can set the preferred editor encoding for every project in Projects -> Editor Settings -> Default Encoding.")); -+- tips.append(tr("You can modify the binary that is being executed when you press the Run button: Add a Custom Executable " -+- "by clicking the + button in Projects -> Run Settings -> Run Configuration and then select the new " -+- "target in the combo box.")); -+- tips.append(tr("You can use Qt Creator with a number of " -+- "revision control systems such as Subversion, Perforce and Git.")); -+- tips.append(tr("In the editor, F2 toggles declaration and definition while F4 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 > projectList; // pair of filename, displayname -+- }; -+- -+- void updateWelcomePage(const WelcomePageData &welcomePageData); -+- -+ // IMode -+ QString name() const; -+ QIcon icon() const; -+@@ -75,31 +63,14 @@ public: -+ QList 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 @@ -+ -+ -+- Welcome::WelcomePage -+- -++ Welcome::WelcomeMode -++ -+ -+ -+ 0 -+@@ -172,6 +172,12 @@ QToolButton:pressed, QPushButton:pressed{ -+ 0 -+ -+ -++ -++ -++ 0 -++ 10 -++ -++ -+ -+ -+ 50 -+@@ -238,129 +244,6 @@ QToolButton:pressed { -+ -+ QFrame::Plain -+ -+- -+- -+- 0 -+- -+- -+- 0 -+- -+- -+- -+- -+- true -+- -+- -+- -+- 0 -+- 0 -+- -+- -+- -+- -+- 0 -+- 0 -+- -+- -+- -+- -+- -1 -+- -+- -+- -+- -+- -+- -+- Getting Started -+- -+- -+- true -+- -+- -+- true -+- -+- -+- false -+- -+- -+- -+- -+- -+- -+- -+- 0 -+- 0 -+- -+- -+- -+- -+- 0 -+- 0 -+- -+- -+- -+- -+- -1 -+- -+- -+- -+- Develop -+- -+- -+- true -+- -+- -+- false -+- -+- -+- -+- -+- -+- -+- -+- 0 -+- 0 -+- -+- -+- -+- -+- 0 -+- 0 -+- -+- -+- -+- -+- -1 -+- -+- -+- -+- -+- -+- -+- Community -+- -+- -+- true -+- -+- -+- -+- -+- -+- -+- Qt::Horizontal -+- -+- -+- QSizePolicy::Fixed -+- -+- -+- -+- 5 -+- 20 -+- -+- -+- -+- -+- -+ -+ -+ -+@@ -368,575 +251,7 @@ QToolButton:pressed { -+ -+ 0 -+ -+- -+- -+- -+- 18 -+- -+- -+- 18 -+- -+- -+- 12 -+- -+- -+- 18 -+- -+- -+- 24 -+- -+- -+- -+- -+- -+- 0 -+- 0 -+- -+- -+- -+- -+- 400 -+- 16777215 -+- -+- -+- -+- -+- -+- -+- -+- -+- -+- -+- 0 -+- 0 -+- -+- -+- -+- Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop -+- -+- -+- -+- -+- -+- -+- -+- 0 -+- 0 -+- -+- -+- -+- Qt::NoFocus -+- -+- -+- QFrame::NoFrame -+- -+- -+- QAbstractItemView::NoSelection -+- -+- -+- QAbstractItemView::ScrollPerPixel -+- -+- -+- false -+- -+- -+- true -+- -+- -+- true -+- -+- -+- 2 -+- -+- -+- false -+- -+- -+- 24 -+- -+- -+- 0 -+- -+- -+- -+- 1 -+- -+- -+- -+- -+- 2 -+- -+- -+- -+- -+- -+- -+- -+- -+- -+- -+- -+- 0 -+- 0 -+- -+- -+- -+- -+- 400 -+- 16777215 -+- -+- -+- -+- -+- -+- -+- -+- 8 -+- -+- -+- 0 -+- -+- -+- -+- -+- Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop -+- -+- -+- -+- -+- -+- -+- false -+- -+- -+- -+- 0 -+- 0 -+- -+- -+- -+- -+- Examples not installed -+- -+- -+- -+- -+- -+- -+- -+- false -+- -+- -+- -+- 0 -+- 0 -+- -+- -+- -+- Open -+- -+- -+- -+- -+- -+- -+- Qt::Horizontal -+- -+- -+- QSizePolicy::Fixed -+- -+- -+- -+- 6 -+- 6 -+- -+- -+- -+- -+- -+- -+- -+- -+- -+- -+- -+- 0 -+- 0 -+- -+- -+- -+- -+- 400 -+- 16777215 -+- -+- -+- -+- -+- -+- -+- -+- 9 -+- -+- -+- -+- -+- -+- 0 -+- 0 -+- -+- -+- -+- Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop -+- -+- -+- -+- -+- -+- -+- -+- 0 -+- 0 -+- -+- -+- -+- QFrame::NoFrame -+- -+- -+- QFrame::Plain -+- -+- -+- Qt::ScrollBarAlwaysOff -+- -+- -+- Qt::ScrollBarAlwaysOff -+- -+- -+- true -+- -+- -+- -+- -+- -+- -+- 0 -+- -+- -+- -+- -+- Qt::Vertical -+- -+- -+- QSizePolicy::Preferred -+- -+- -+- -+- 20 -+- 2 -+- -+- -+- -+- -+- -+- -+- -+- QToolButton{ -+- border-right:solid 0 px; -+- height:16px; -+- width:12px; -+-} -+- -+- -+- -+- -+- -+- -+- -+- :/welcome/images/arrow-left.png:/welcome/images/arrow-left.png -+- -+- -+- Qt::NoArrow -+- -+- -+- -+- -+- -+- -+- QToolButton{ -+- border-left:solid 0 px; -+- height:16px; -+- width:12px; -+-} -+- -+- -+- -+- -+- -+- -+- -+- :/welcome/images/arrow-right.png:/welcome/images/arrow-right.png -+- -+- -+- Qt::NoArrow -+- -+- -+- -+- -+- -+- -+- Qt::Vertical -+- -+- -+- -+- 20 -+- 2 -+- -+- -+- -+- -+- -+- -+- -+- -+- -+- -+- -+- -+- -+- -+- 18 -+- -+- -+- 24 -+- -+- -+- -+- -+- -+- 0 -+- 0 -+- -+- -+- -+- -+- 270 -+- 130 -+- -+- -+- -+- -+- -+- -+- -+- 0 -+- -+- -+- 3 -+- -+- -+- -+- -+- -+- 0 -+- 0 -+- -+- -+- -+- Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop -+- -+- -+- -+- -+- -+- -+- -+- 0 -+- 0 -+- -+- -+- -+- Qt::NoFocus -+- -+- -+- QFrame::NoFrame -+- -+- -+- QAbstractItemView::NoSelection -+- -+- -+- QAbstractItemView::ScrollPerPixel -+- -+- -+- false -+- -+- -+- true -+- -+- -+- true -+- -+- -+- 2 -+- -+- -+- false -+- -+- -+- 24 -+- -+- -+- 0 -+- -+- -+- -+- 1 -+- -+- -+- -+- -+- 2 -+- -+- -+- -+- -+- -+- -+- -+- Qt::TabFocus -+- -+- -+- Manage Sessions... -+- -+- -+- -+- -+- -+- -+- Qt::Vertical -+- -+- -+- -+- 20 -+- 40 -+- -+- -+- -+- -+- -+- -+- -+- -+- -+- -+- -+- -+- -+- -+- 0 -+- -+- -+- 3 -+- -+- -+- 9 -+- -+- -+- -+- -+- -+- 0 -+- 0 -+- -+- -+- -+- Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop -+- -+- -+- -+- -+- -+- -+- -+- 0 -+- 0 -+- -+- -+- -+- Qt::NoFocus -+- -+- -+- QFrame::NoFrame -+- -+- -+- QAbstractItemView::NoSelection -+- -+- -+- QAbstractItemView::ScrollPerPixel -+- -+- -+- false -+- -+- -+- true -+- -+- -+- true -+- -+- -+- 2 -+- -+- -+- false -+- -+- -+- 24 -+- -+- -+- 0 -+- -+- -+- -+- 1 -+- -+- -+- -+- -+- 2 -+- -+- -+- -+- -+- -+- -+- -+- Qt::TabFocus -+- -+- -+- Create New Project... -+- -+- -+- true -+- -+- -+- -+- -+- -+- -+- Qt::Vertical -+- -+- -+- -+- 20 -+- 40 -+- -+- -+- -+- -+- -+- -+- -+- -+- -+- -++ -+ -+ -+ 18 -+@@ -944,168 +259,6 @@ QToolButton:pressed { -+ -+ 24 -+ -+- -+- -+- -+- QFrame::NoFrame -+- -+- -+- QFrame::Plain -+- -+- -+- -+- -+- -+- -+- 0 -+- 0 -+- -+- -+- -+- Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop -+- -+- -+- -+- -+- -+- -+- -+- 0 -+- 0 -+- -+- -+- -+- -+- 340 -+- 0 -+- -+- -+- -+- Qt::NoFocus -+- -+- -+- QFrame::NoFrame -+- -+- -+- QAbstractItemView::NoSelection -+- -+- -+- QAbstractItemView::ScrollPerPixel -+- -+- -+- false -+- -+- -+- true -+- -+- -+- true -+- -+- -+- 2 -+- -+- -+- false -+- -+- -+- 24 -+- -+- -+- 0 -+- -+- -+- -+- 1 -+- -+- -+- -+- -+- 2 -+- -+- -+- -+- -+- -+- -+- -+- -+- -+- -+- QFrame::NoFrame -+- -+- -+- QFrame::Plain -+- -+- -+- -+- -+- -+- -+- 0 -+- 0 -+- -+- -+- -+- Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop -+- -+- -+- -+- -+- -+- -+- -+- 0 -+- 0 -+- -+- -+- -+- Qt::NoFocus -+- -+- -+- QFrame::NoFrame -+- -+- -+- QAbstractItemView::NoSelection -+- -+- -+- QAbstractItemView::ScrollPerPixel -+- -+- -+- false -+- -+- -+- true -+- -+- -+- true -+- -+- -+- 2 -+- -+- -+- false -+- -+- -+- 24 -+- -+- -+- 0 -+- -+- -+- -+- 1 -+- -+- -+- -+- -+- 2 -+- -+- -+- -+- -+- -+- -+- -+ -+ -+ -+@@ -1219,13 +372,6 @@ QToolButton:pressed { -+ -+ -+ -+- -+- -+- Core::Utils::WelcomeModeTreeWidget -+- QTreeWidget -+-
utils/welcomemodetreewidget.h
-+-
-+-
-+ -+ -+ -+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 -+ #include -+ #include -+@@ -45,11 +47,10 @@ -+ #include -+ #include -+ -+-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 -+ -+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( -+ "" -+ "" -+ "

" -+ ""); -+ rc += text; -+ rc += QLatin1String("


"); -+ 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 -+#include - - 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 - - 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. - - - -- - - -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(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. - - - -- - - -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 - #include -@@ -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(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 -- (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(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(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(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 -+ -+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 -+#include -+#include -+#include -+#include -+ -+#include -+#include -+#include -+#include -+#include -+ -+#include -+ -+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 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 -+ -+ -+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 > 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 @@ -+ -+ -+ ProjectExplorer::Internal::ProjectWelcomePageWidget -+ -+ -+ -+ 0 -+ 0 -+ 667 -+ 365 -+ -+ -+ -+ Form -+ -+ -+ -+ -+ -+ -+ 0 -+ 0 -+ -+ -+ -+ -+ 270 -+ 130 -+ -+ -+ -+ -+ -+ -+ -+ 0 -+ -+ -+ 3 -+ -+ -+ -+ -+ -+ 0 -+ 0 -+ -+ -+ -+ Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop -+ -+ -+ -+ -+ -+ -+ -+ 0 -+ 0 -+ -+ -+ -+ Qt::NoFocus -+ -+ -+ QFrame::NoFrame -+ -+ -+ QAbstractItemView::NoSelection -+ -+ -+ QAbstractItemView::ScrollPerPixel -+ -+ -+ false -+ -+ -+ true -+ -+ -+ true -+ -+ -+ 2 -+ -+ -+ false -+ -+ -+ 24 -+ -+ -+ 0 -+ -+ -+ -+ 1 -+ -+ -+ -+ -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ Qt::TabFocus -+ -+ -+ Manage Sessions... -+ -+ -+ -+ -+ -+ -+ Qt::Vertical -+ -+ -+ -+ 20 -+ 40 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ 0 -+ -+ -+ 3 -+ -+ -+ 9 -+ -+ -+ -+ -+ -+ 0 -+ 0 -+ -+ -+ -+ Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop -+ -+ -+ -+ -+ -+ -+ -+ 0 -+ 0 -+ -+ -+ -+ Qt::NoFocus -+ -+ -+ QFrame::NoFrame -+ -+ -+ QAbstractItemView::NoSelection -+ -+ -+ QAbstractItemView::ScrollPerPixel -+ -+ -+ false -+ -+ -+ true -+ -+ -+ true -+ -+ -+ 2 -+ -+ -+ false -+ -+ -+ 24 -+ -+ -+ 0 -+ -+ -+ -+ 1 -+ -+ -+ -+ -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ Qt::TabFocus -+ -+ -+ Create New Project... -+ -+ -+ false -+ -+ -+ -+ -+ -+ -+ Qt::Vertical -+ -+ -+ -+ 20 -+ 40 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ Core::Utils::WelcomeModeTreeWidget -+ QTreeWidget -+
utils/welcomemodetreewidget.h
-+
-+ -+ Core::Utils::WelcomeModeLabel -+ QLabel -+
utils/welcomemodetreewidget.h
-+
-+
-+ -+ -+
-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 @@ -+ -+ -+ -+ -+ ProjectWelcomePage -+ -+ -+ -+ 0 -+ 0 -+ 400 -+ 300 -+ -+ -+ -+ Form -+ -+ -+ -+ -+ -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. - - - -- - - -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 -+ -+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 -+#include -+ -+#include -+ -+#include -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+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("Qt Creator - A quick tour"), -+ 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(); -+ Q_ASSERT(helpManager); -+ helpManager->openHelpPage(url); -+} -+void GettingStartedWelcomePageWidget::slotOpenContextHelpPage(const QString& url) -+{ -+ Help::HelpManager *helpManager -+ = ExtensionSystem::PluginManager::instance()->getObject(); -+ 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 Ctrl+number:
    " -+ "
  • 1 - Welcome
  • 2 - Edit
  • 3 - Debug
  • 4 - Projects
  • 5 - Help
  • " -+ "
  • 6 - Output
")); -+ //:%1 gets replaced by Alt (Win/Unix) or Cmd (Mac) -+ tips.append(tr("You can show and hide the side bar using %1+0.").arg(altShortcut)); -+ tips.append(tr("You can fine tune the Find 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 external libraries, Qt Creator will automatically offer syntax highlighting " -+ "and code completion.")); -+ tips.append(tr("The code completion is CamelCase-aware. For example, to complete namespaceUri " -+ "you can just type nU and hit Ctrl+Space.")); -+ tips.append(tr("You can force code completion at any time using Ctrl+Space.")); -+ tips.append(tr("You can start Qt Creator with a session by calling qtcreator <sessionname>.")); -+ tips.append(tr("You can return to edit mode from any other mode at any time by hitting Escape.")); -+ //:%1 gets replaced by Alt (Win/Unix) or Cmd (Mac) -+ tips.append(tr("You can switch between the output pane by hitting %1+n where n is the number denoted " -+ "on the buttons at the window bottom:" -+ "
  • 1 - Build Issues
  • 2 - Search Results
  • 3 - Application Output
  • " -+ "
  • 4 - Compile Output
").arg(altShortcut)); -+ tips.append(tr("You can quickly search methods, classes, help and more using the " -+ "Locator bar (Ctrl+K).")); -+ tips.append(tr("You can add custom build steps in the " -+ "build settings.")); -+ tips.append(tr("Within a session, you can add " -+ "dependencies between projects.")); -+ tips.append(tr("You can set the preferred editor encoding for every project in Projects -> Editor Settings -> Default Encoding.")); -+ tips.append(tr("You can modify the binary that is being executed when you press the Run button: Add a Custom Executable " -+ "by clicking the + button in Projects -> Run Settings -> Run Configuration and then select the new " -+ "target in the combo box.")); -+ tips.append(tr("You can use Qt Creator with a number of " -+ "revision control systems such as Subversion, Perforce and Git.")); -+ tips.append(tr("In the editor, F2 toggles declaration and definition while F4 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 -+ -+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 @@ -+ -+ -+ Qt4ProjectManager::Internal::GettingStartedWelcomePageWidget -+ -+ -+ -+ 0 -+ 0 -+ 646 -+ 361 -+ -+ -+ -+ Form -+ -+ -+ -+ -+ -+ -+ 0 -+ 0 -+ -+ -+ -+ -+ 400 -+ 16777215 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ 0 -+ 0 -+ -+ -+ -+ Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop -+ -+ -+ -+ -+ -+ -+ -+ 0 -+ 0 -+ -+ -+ -+ Qt::NoFocus -+ -+ -+ QFrame::NoFrame -+ -+ -+ QAbstractItemView::NoSelection -+ -+ -+ QAbstractItemView::ScrollPerPixel -+ -+ -+ false -+ -+ -+ true -+ -+ -+ true -+ -+ -+ 2 -+ -+ -+ false -+ -+ -+ 24 -+ -+ -+ 0 -+ -+ -+ -+ 1 -+ -+ -+ -+ -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ 0 -+ 0 -+ -+ -+ -+ -+ 400 -+ 16777215 -+ -+ -+ -+ -+ -+ -+ -+ 8 -+ -+ -+ 0 -+ -+ -+ -+ -+ Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop -+ -+ -+ -+ -+ -+ -+ false -+ -+ -+ -+ 0 -+ 0 -+ -+ -+ -+ -+ Examples not installed -+ -+ -+ -+ -+ -+ -+ -+ false -+ -+ -+ -+ 0 -+ 0 -+ -+ -+ -+ Open -+ -+ -+ -+ -+ -+ -+ Qt::Horizontal -+ -+ -+ QSizePolicy::Fixed -+ -+ -+ -+ 6 -+ 6 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ 0 -+ 0 -+ -+ -+ -+ -+ 400 -+ 16777215 -+ -+ -+ -+ -+ -+ -+ -+ 9 -+ -+ -+ -+ -+ -+ 0 -+ 0 -+ -+ -+ -+ Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop -+ -+ -+ -+ -+ -+ -+ -+ 0 -+ 0 -+ -+ -+ -+ QFrame::NoFrame -+ -+ -+ QFrame::Plain -+ -+ -+ Qt::ScrollBarAlwaysOff -+ -+ -+ Qt::ScrollBarAlwaysOff -+ -+ -+ true -+ -+ -+ -+ -+ -+ -+ 0 -+ -+ -+ -+ -+ Qt::Vertical -+ -+ -+ QSizePolicy::Preferred -+ -+ -+ -+ 20 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ QToolButton{ -+ border-right:solid 0 px; -+ height:16px; -+ width:12px; -+} -+ -+ -+ -+ -+ -+ -+ -+ :/welcome/images/arrow-left.png:/welcome/images/arrow-left.png -+ -+ -+ Qt::NoArrow -+ -+ -+ -+ -+ -+ -+ QToolButton{ -+ border-left:solid 0 px; -+ height:16px; -+ width:12px; -+} -+ -+ -+ -+ -+ -+ -+ -+ :/welcome/images/arrow-right.png:/welcome/images/arrow-right.png -+ -+ -+ Qt::NoArrow -+ -+ -+ -+ -+ -+ -+ Qt::Vertical -+ -+ -+ -+ 20 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ Core::Utils::WelcomeModeTreeWidget -+ QTreeWidget -+
utils/welcomemodetreewidget.h
-+
-+ -+ Core::Utils::WelcomeModeLabel -+ QLabel -+
utils/welcomemodetreewidget.h
-+
-+
-+ -+ -+ -+ -+
-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(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 - #include - #include --#include - #include - #include - #include -@@ -51,6 +50,7 @@ - #include - #include - #include -+#include - #include - #include - -@@ -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 -- (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 &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 -+ -+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 -+ -+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 -+ -+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 @@ -+ -+ -+ Welcome::Internal::CommunityWelcomePageWidget -+ -+ -+ -+ 0 -+ 0 -+ 667 -+ 352 -+ -+ -+ -+ Form -+ -+ -+ -+ -+ -+ QFrame::NoFrame -+ -+ -+ QFrame::Plain -+ -+ -+ -+ -+ -+ -+ 0 -+ 0 -+ -+ -+ -+ Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop -+ -+ -+ -+ -+ -+ -+ -+ 0 -+ 0 -+ -+ -+ -+ -+ 340 -+ 0 -+ -+ -+ -+ Qt::NoFocus -+ -+ -+ QFrame::NoFrame -+ -+ -+ QAbstractItemView::NoSelection -+ -+ -+ QAbstractItemView::ScrollPerPixel -+ -+ -+ false -+ -+ -+ true -+ -+ -+ true -+ -+ -+ 2 -+ -+ -+ false -+ -+ -+ 24 -+ -+ -+ 0 -+ -+ -+ -+ 1 -+ -+ -+ -+ -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ QFrame::NoFrame -+ -+ -+ QFrame::Plain -+ -+ -+ -+ -+ -+ -+ 0 -+ 0 -+ -+ -+ -+ Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop -+ -+ -+ -+ -+ -+ -+ -+ 0 -+ 0 -+ -+ -+ -+ Qt::NoFocus -+ -+ -+ QFrame::NoFrame -+ -+ -+ QAbstractItemView::NoSelection -+ -+ -+ QAbstractItemView::ScrollPerPixel -+ -+ -+ false -+ -+ -+ true -+ -+ -+ true -+ -+ -+ 2 -+ -+ -+ false -+ -+ -+ 24 -+ -+ -+ 0 -+ -+ -+ -+ 1 -+ -+ -+ -+ -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ Core::Utils::WelcomeModeTreeWidget -+ QTreeWidget -+
utils/welcomemodetreewidget.h
-+
-+ -+ Core::Utils::WelcomeModeLabel -+ QLabel -+
utils/welcomemodetreewidget.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 - #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 - - 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 -+#include - - #include --#include -- - #include - #include - #include -@@ -41,22 +40,22 @@ - #include - #include - --#include - #include - #include - #include -+#include -+#include - --#include --#include --#include --#include --#include - #include -+#include -+#include - - #include - - #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 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( -- "" -- "" -- "

" -- ""); -- rc += text; -- rc += QLatin1String("


"); -- 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("Qt Creator - A quick tour"), -- 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 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 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 plugins = PluginManager::instance()->getObjects(); -+ 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 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(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 plugins = PluginManager::instance()->getObjects(); -+ 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(sender()); -+ QMap::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 Ctrl+number:
    " -- "
  • 1 - Welcome
  • 2 - Edit
  • 3 - Debug
  • 4 - Projects
  • 5 - Help
  • " -- "
  • 6 - Output
")); -- //:%1 gets replaced by Alt (Win/Unix) or Cmd (Mac) -- tips.append(tr("You can show and hide the side bar using %1+0.").arg(altShortcut)); -- tips.append(tr("You can fine tune the Find 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 external libraries, Qt Creator will automatically offer syntax highlighting " -- "and code completion.")); -- tips.append(tr("The code completion is CamelCase-aware. For example, to complete namespaceUri " -- "you can just type nU and hit Ctrl+Space.")); -- tips.append(tr("You can force code completion at any time using Ctrl+Space.")); -- tips.append(tr("You can start Qt Creator with a session by calling qtcreator <sessionname>.")); -- tips.append(tr("You can return to edit mode from any other mode at any time by hitting Escape.")); -- //:%1 gets replaced by Alt (Win/Unix) or Cmd (Mac) -- tips.append(tr("You can switch between the output pane by hitting %1+n where n is the number denoted " -- "on the buttons at the window bottom:" -- "
  • 1 - Build Issues
  • 2 - Search Results
  • 3 - Application Output
  • " -- "
  • 4 - Compile Output
").arg(altShortcut)); -- tips.append(tr("You can quickly search methods, classes, help and more using the " -- "Locator bar (Ctrl+K).")); -- tips.append(tr("You can add custom build steps in the " -- "build settings.")); -- tips.append(tr("Within a session, you can add " -- "dependencies between projects.")); -- tips.append(tr("You can set the preferred editor encoding for every project in Projects -> Editor Settings -> Default Encoding.")); -- tips.append(tr("You can modify the binary that is being executed when you press the Run button: Add a Custom Executable " -- "by clicking the + button in Projects -> Run Settings -> Run Configuration and then select the new " -- "target in the combo box.")); -- tips.append(tr("You can use Qt Creator with a number of " -- "revision control systems such as Subversion, Perforce and Git.")); -- tips.append(tr("In the editor, F2 toggles declaration and definition while F4 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 > projectList; // pair of filename, displayname -- }; -- -- void updateWelcomePage(const WelcomePageData &welcomePageData); -- - // IMode - QString name() const; - QIcon icon() const; -@@ -75,31 +63,14 @@ public: - QList 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 @@ - - -- Welcome::WelcomePage -- -+ Welcome::WelcomeMode -+ - - - 0 -@@ -172,6 +172,12 @@ QToolButton:pressed, QPushButton:pressed{ - 0 - - -+ -+ -+ 0 -+ 10 -+ -+ - - - 50 -@@ -238,129 +244,6 @@ QToolButton:pressed { - - QFrame::Plain - -- -- -- 0 -- -- -- 0 -- -- -- -- -- true -- -- -- -- 0 -- 0 -- -- -- -- -- 0 -- 0 -- -- -- -- -- -1 -- -- -- -- -- -- -- Getting Started -- -- -- true -- -- -- true -- -- -- false -- -- -- -- -- -- -- -- 0 -- 0 -- -- -- -- -- 0 -- 0 -- -- -- -- -- -1 -- -- -- -- Develop -- -- -- true -- -- -- false -- -- -- -- -- -- -- -- 0 -- 0 -- -- -- -- -- 0 -- 0 -- -- -- -- -- -1 -- -- -- -- -- -- -- Community -- -- -- true -- -- -- -- -- -- -- Qt::Horizontal -- -- -- QSizePolicy::Fixed -- -- -- -- 5 -- 20 -- -- -- -- -- - - - -@@ -368,575 +251,7 @@ QToolButton:pressed { - - 0 - -- -- -- -- 18 -- -- -- 18 -- -- -- 12 -- -- -- 18 -- -- -- 24 -- -- -- -- -- -- 0 -- 0 -- -- -- -- -- 400 -- 16777215 -- -- -- -- -- -- -- -- -- -- -- 0 -- 0 -- -- -- -- Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop -- -- -- -- -- -- -- -- 0 -- 0 -- -- -- -- Qt::NoFocus -- -- -- QFrame::NoFrame -- -- -- QAbstractItemView::NoSelection -- -- -- QAbstractItemView::ScrollPerPixel -- -- -- false -- -- -- true -- -- -- true -- -- -- 2 -- -- -- false -- -- -- 24 -- -- -- 0 -- -- -- -- 1 -- -- -- -- -- 2 -- -- -- -- -- -- -- -- -- -- -- -- 0 -- 0 -- -- -- -- -- 400 -- 16777215 -- -- -- -- -- -- -- -- 8 -- -- -- 0 -- -- -- -- -- Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop -- -- -- -- -- -- -- false -- -- -- -- 0 -- 0 -- -- -- -- -- Examples not installed -- -- -- -- -- -- -- -- false -- -- -- -- 0 -- 0 -- -- -- -- Open -- -- -- -- -- -- -- Qt::Horizontal -- -- -- QSizePolicy::Fixed -- -- -- -- 6 -- 6 -- -- -- -- -- -- -- -- -- -- -- -- 0 -- 0 -- -- -- -- -- 400 -- 16777215 -- -- -- -- -- -- -- -- 9 -- -- -- -- -- -- 0 -- 0 -- -- -- -- Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop -- -- -- -- -- -- -- -- 0 -- 0 -- -- -- -- QFrame::NoFrame -- -- -- QFrame::Plain -- -- -- Qt::ScrollBarAlwaysOff -- -- -- Qt::ScrollBarAlwaysOff -- -- -- true -- -- -- -- -- -- -- 0 -- -- -- -- -- Qt::Vertical -- -- -- QSizePolicy::Preferred -- -- -- -- 20 -- 2 -- -- -- -- -- -- -- -- QToolButton{ -- border-right:solid 0 px; -- height:16px; -- width:12px; --} -- -- -- -- -- -- -- -- :/welcome/images/arrow-left.png:/welcome/images/arrow-left.png -- -- -- Qt::NoArrow -- -- -- -- -- -- -- QToolButton{ -- border-left:solid 0 px; -- height:16px; -- width:12px; --} -- -- -- -- -- -- -- -- :/welcome/images/arrow-right.png:/welcome/images/arrow-right.png -- -- -- Qt::NoArrow -- -- -- -- -- -- -- Qt::Vertical -- -- -- -- 20 -- 2 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 18 -- -- -- 24 -- -- -- -- -- -- 0 -- 0 -- -- -- -- -- 270 -- 130 -- -- -- -- -- -- -- -- 0 -- -- -- 3 -- -- -- -- -- -- 0 -- 0 -- -- -- -- Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop -- -- -- -- -- -- -- -- 0 -- 0 -- -- -- -- Qt::NoFocus -- -- -- QFrame::NoFrame -- -- -- QAbstractItemView::NoSelection -- -- -- QAbstractItemView::ScrollPerPixel -- -- -- false -- -- -- true -- -- -- true -- -- -- 2 -- -- -- false -- -- -- 24 -- -- -- 0 -- -- -- -- 1 -- -- -- -- -- 2 -- -- -- -- -- -- -- -- Qt::TabFocus -- -- -- Manage Sessions... -- -- -- -- -- -- -- Qt::Vertical -- -- -- -- 20 -- 40 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 0 -- -- -- 3 -- -- -- 9 -- -- -- -- -- -- 0 -- 0 -- -- -- -- Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop -- -- -- -- -- -- -- -- 0 -- 0 -- -- -- -- Qt::NoFocus -- -- -- QFrame::NoFrame -- -- -- QAbstractItemView::NoSelection -- -- -- QAbstractItemView::ScrollPerPixel -- -- -- false -- -- -- true -- -- -- true -- -- -- 2 -- -- -- false -- -- -- 24 -- -- -- 0 -- -- -- -- 1 -- -- -- -- -- 2 -- -- -- -- -- -- -- -- Qt::TabFocus -- -- -- Create New Project... -- -- -- true -- -- -- -- -- -- -- Qt::Vertical -- -- -- -- 20 -- 40 -- -- -- -- -- -- -- -- -- -- -+ - - - 18 -@@ -944,168 +259,6 @@ QToolButton:pressed { - - 24 - -- -- -- -- QFrame::NoFrame -- -- -- QFrame::Plain -- -- -- -- -- -- -- 0 -- 0 -- -- -- -- Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop -- -- -- -- -- -- -- -- 0 -- 0 -- -- -- -- -- 340 -- 0 -- -- -- -- Qt::NoFocus -- -- -- QFrame::NoFrame -- -- -- QAbstractItemView::NoSelection -- -- -- QAbstractItemView::ScrollPerPixel -- -- -- false -- -- -- true -- -- -- true -- -- -- 2 -- -- -- false -- -- -- 24 -- -- -- 0 -- -- -- -- 1 -- -- -- -- -- 2 -- -- -- -- -- -- -- -- -- -- -- QFrame::NoFrame -- -- -- QFrame::Plain -- -- -- -- -- -- -- 0 -- 0 -- -- -- -- Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop -- -- -- -- -- -- -- -- 0 -- 0 -- -- -- -- Qt::NoFocus -- -- -- QFrame::NoFrame -- -- -- QAbstractItemView::NoSelection -- -- -- QAbstractItemView::ScrollPerPixel -- -- -- false -- -- -- true -- -- -- true -- -- -- 2 -- -- -- false -- -- -- 24 -- -- -- 0 -- -- -- -- 1 -- -- -- -- -- 2 -- -- -- -- -- -- -- - - - -@@ -1219,13 +372,6 @@ QToolButton:pressed { - - - -- -- -- Core::Utils::WelcomeModeTreeWidget -- QTreeWidget --
utils/welcomemodetreewidget.h
--
--
- - - -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 - #include - #include -@@ -45,11 +47,10 @@ - #include - #include - --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 -