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 0000000000000000000000000000000000000000..84af98cdb9784056ad4d1b87f9dcf0c2fae18d3d --- /dev/null +++ b/0001-Make-the-welcome-screen-into-plugins.patch @@ -0,0 +1,13132 @@ +From 2e2d936b4afbec13dfc5f08f0f3998398b7de5ab Mon Sep 17 00:00:00 2001 +From: Daniel Molkentin <daniel.molkentin@nokia.com> +Date: Mon, 27 Jul 2009 13:55:30 +0200 +Subject: [PATCH] Make the welcome screen into plugins. + +This removes the all hard dependencies to and from welcome screen, +except the one to the core plugin. More in detail: + +- Add IWelcomePage to add a tab to the welcome screen +- Move tabs in the modules where they belong +- Enables QHelpManager to open help fullscreen and contextually +- "Getting Started" moves to Qt4ProjectManager +- Projects & Sessions (aka "Develop") moves to ProjectExplorer +- "Community" remains in the welcome plugin for simplicity +--- + 0001-Make-the-welcome-screen-into-plugins.patch | 4384 ++++++++++++++++++++ + ...-the-welcome-screen-into-plugins.patch.modified | 4364 +++++++++++++++++++ + src/libs/extensionsystem/extensionsystem.pro | 10 +- + src/libs/extensionsystem/iwelcomepage.cpp | 8 + + src/libs/extensionsystem/iwelcomepage.h | 31 + + src/libs/utils/welcomemodetreewidget.cpp | 14 + + src/libs/utils/welcomemodetreewidget.h | 11 + + src/plugins/coreplugin/coreplugin.h | 5 - + src/plugins/help/Help.pluginspec | 1 - + src/plugins/help/help.pro | 1 - + src/plugins/help/helpplugin.cpp | 36 +- + src/plugins/help/helpplugin.h | 17 +- + src/plugins/plugins.pro | 3 - + .../projectexplorer/ProjectExplorer.pluginspec | 1 - + src/plugins/projectexplorer/projectexplorer.cpp | 36 +- + src/plugins/projectexplorer/projectexplorer.h | 6 +- + src/plugins/projectexplorer/projectexplorer.pro | 11 +- + .../projectexplorer_dependencies.pri | 1 - + src/plugins/projectexplorer/projectwelcomepage.cpp | 48 + + src/plugins/projectexplorer/projectwelcomepage.h | 58 + + .../projectexplorer/projectwelcomepagewidget.cpp | 157 + + .../projectexplorer/projectwelcomepagewidget.h | 81 + + .../projectexplorer/projectwelcomepagewidget.ui | 259 ++ + .../projectexplorer/projectwelcomeplugin.ui | 21 + + .../qt4projectmanager/Qt4ProjectManager.pluginspec | 1 - + .../gettingstartedwelcomepage.cpp | 47 + + .../qt4projectmanager/gettingstartedwelcomepage.h | 56 + + .../gettingstartedwelcomepagewidget.cpp | 259 ++ + .../gettingstartedwelcomepagewidget.h | 69 + + .../gettingstartedwelcomepagewidget.ui | 348 ++ + .../qt4projectmanager/qt4projectmanager.pro | 14 +- + .../qt4projectmanager_dependencies.pri | 1 - + .../qt4projectmanager/qt4projectmanagerplugin.cpp | 13 +- + .../qt4projectmanager/qt4projectmanagerplugin.h | 2 + + src/plugins/qt4projectmanager/qtversionmanager.cpp | 9 +- + src/plugins/qt4projectmanager/qtversionmanager.h | 5 +- + src/plugins/welcome/communitywelcomepage.cpp | 48 + + src/plugins/welcome/communitywelcomepage.h | 60 + + src/plugins/welcome/communitywelcomepagewidget.cpp | 79 + + src/plugins/welcome/communitywelcomepagewidget.h | 64 + + src/plugins/welcome/communitywelcomepagewidget.ui | 195 + + src/plugins/welcome/rssfetcher.cpp | 2 +- + src/plugins/welcome/rssfetcher.h | 2 + + src/plugins/welcome/welcome.pro | 12 +- + src/plugins/welcome/welcomemode.cpp | 394 +-- + src/plugins/welcome/welcomemode.h | 35 +- + src/plugins/welcome/welcomemode.ui | 872 +---- + src/plugins/welcome/welcomeplugin.cpp | 15 +- + src/plugins/welcome/welcomeplugin.h | 5 + + 49 files changed, 10872 insertions(+), 1299 deletions(-) + create mode 100644 0001-Make-the-welcome-screen-into-plugins.patch + create mode 100644 0001-Make-the-welcome-screen-into-plugins.patch.modified + create mode 100644 src/libs/extensionsystem/iwelcomepage.cpp + create mode 100644 src/libs/extensionsystem/iwelcomepage.h + create mode 100644 src/plugins/projectexplorer/projectwelcomepage.cpp + create mode 100644 src/plugins/projectexplorer/projectwelcomepage.h + create mode 100644 src/plugins/projectexplorer/projectwelcomepagewidget.cpp + create mode 100644 src/plugins/projectexplorer/projectwelcomepagewidget.h + create mode 100644 src/plugins/projectexplorer/projectwelcomepagewidget.ui + create mode 100644 src/plugins/projectexplorer/projectwelcomeplugin.ui + create mode 100644 src/plugins/qt4projectmanager/gettingstartedwelcomepage.cpp + create mode 100644 src/plugins/qt4projectmanager/gettingstartedwelcomepage.h + create mode 100644 src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.cpp + create mode 100644 src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.h + create mode 100644 src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.ui + create mode 100644 src/plugins/welcome/communitywelcomepage.cpp + create mode 100644 src/plugins/welcome/communitywelcomepage.h + create mode 100644 src/plugins/welcome/communitywelcomepagewidget.cpp + create mode 100644 src/plugins/welcome/communitywelcomepagewidget.h + create mode 100644 src/plugins/welcome/communitywelcomepagewidget.ui + +diff --git a/0001-Make-the-welcome-screen-into-plugins.patch b/0001-Make-the-welcome-screen-into-plugins.patch +new file mode 100644 +index 0000000..7f838eb +--- /dev/null ++++ b/0001-Make-the-welcome-screen-into-plugins.patch +@@ -0,0 +1,4384 @@ ++From b551c15d0842620e4653a4c48a8e31d7de9f1bfb Mon Sep 17 00:00:00 2001 ++From: Daniel Molkentin <daniel.molkentin@nokia.com> ++Date: Mon, 27 Jul 2009 13:55:30 +0200 ++Subject: [PATCH] Make the welcome screen into plugins. ++ ++This removes the all hard dependencies to and from welcome screen, ++except the one to the core plugin. More in detail: ++ ++- Add IWelcomePlugin to add a tab to the welcome screen ++- Move tabs in the modules where they belong ++- Enables QHelpManager to open help fullscreen and contextually ++- "Getting Started" moves to Qt4ProjectManager ++- Projects & Sessions (aka "Develop") moves to ProjectExplorer ++- "Community" remains in the welcome plugin for simplicity ++--- ++ src/libs/aggregation/aggregation.pri | 2 + ++ src/libs/extensionsystem/extensionsystem.pro | 10 +- ++ src/libs/extensionsystem/iwelcomeplugin.cpp | 8 + ++ src/libs/extensionsystem/iwelcomeplugin.h | 31 + ++ src/libs/extensionsystem/pluginmanager.cpp | 1 + ++ src/libs/utils/welcomemodetreewidget.cpp | 2 + ++ src/plugins/coreplugin/coreplugin.h | 5 - ++ src/plugins/help/Help.pluginspec | 1 - ++ src/plugins/help/help.pro | 1 - ++ src/plugins/help/helpplugin.cpp | 36 +- ++ src/plugins/help/helpplugin.h | 17 +- ++ src/plugins/plugins.pro | 3 - ++ .../projectexplorer/ProjectExplorer.pluginspec | 1 - ++ src/plugins/projectexplorer/projectexplorer.cpp | 38 +- ++ src/plugins/projectexplorer/projectexplorer.h | 6 +- ++ src/plugins/projectexplorer/projectexplorer.pro | 11 +- ++ .../projectexplorer_dependencies.pri | 1 - ++ src/plugins/projectexplorer/projectwelcomepage.cpp | 170 ++++ ++ src/plugins/projectexplorer/projectwelcomepage.h | 81 ++ ++ src/plugins/projectexplorer/projectwelcomepage.ui | 254 ++++++ ++ .../projectexplorer/projectwelcomeplugin.cpp | 48 ++ ++ src/plugins/projectexplorer/projectwelcomeplugin.h | 58 ++ ++ .../projectexplorer/projectwelcomeplugin.ui | 21 + ++ .../qt4projectmanager/Qt4ProjectManager.pluginspec | 1 - ++ .../gettingstartedwelcomepage.cpp | 271 ++++++ ++ .../qt4projectmanager/gettingstartedwelcomepage.h | 69 ++ ++ .../qt4projectmanager/gettingstartedwelcomepage.ui | 343 ++++++++ ++ .../gettingstartedwelcomeplugin.cpp | 47 ++ ++ .../gettingstartedwelcomeplugin.h | 56 ++ ++ .../qt4projectmanager/qt4projectmanager.pro | 14 +- ++ .../qt4projectmanager_dependencies.pri | 1 - ++ .../qt4projectmanager/qt4projectmanagerplugin.cpp | 13 +- ++ .../qt4projectmanager/qt4projectmanagerplugin.h | 2 + ++ src/plugins/qt4projectmanager/qtversionmanager.cpp | 9 +- ++ src/plugins/qt4projectmanager/qtversionmanager.h | 5 +- ++ src/plugins/welcome/communitywelcomepage.cpp | 93 +++ ++ src/plugins/welcome/communitywelcomepage.h | 64 ++ ++ src/plugins/welcome/communitywelcomepage.ui | 190 +++++ ++ src/plugins/welcome/communitywelcomeplugin.cpp | 47 ++ ++ src/plugins/welcome/communitywelcomeplugin.h | 60 ++ ++ src/plugins/welcome/rssfetcher.cpp | 2 +- ++ src/plugins/welcome/rssfetcher.h | 2 + ++ src/plugins/welcome/welcome.pro | 11 +- ++ src/plugins/welcome/welcomemode.cpp | 409 ++------- ++ src/plugins/welcome/welcomemode.h | 35 +- ++ src/plugins/welcome/welcomemode.ui | 872 +------------------- ++ src/plugins/welcome/welcomeplugin.cpp | 15 +- ++ src/plugins/welcome/welcomeplugin.h | 5 + ++ 48 files changed, 2142 insertions(+), 1300 deletions(-) ++ create mode 100644 src/libs/extensionsystem/iwelcomeplugin.cpp ++ create mode 100644 src/libs/extensionsystem/iwelcomeplugin.h ++ create mode 100644 src/plugins/projectexplorer/projectwelcomepage.cpp ++ create mode 100644 src/plugins/projectexplorer/projectwelcomepage.h ++ create mode 100644 src/plugins/projectexplorer/projectwelcomepage.ui ++ create mode 100644 src/plugins/projectexplorer/projectwelcomeplugin.cpp ++ create mode 100644 src/plugins/projectexplorer/projectwelcomeplugin.h ++ create mode 100644 src/plugins/projectexplorer/projectwelcomeplugin.ui ++ create mode 100644 src/plugins/qt4projectmanager/gettingstartedwelcomepage.cpp ++ create mode 100644 src/plugins/qt4projectmanager/gettingstartedwelcomepage.h ++ create mode 100644 src/plugins/qt4projectmanager/gettingstartedwelcomepage.ui ++ create mode 100644 src/plugins/qt4projectmanager/gettingstartedwelcomeplugin.cpp ++ create mode 100644 src/plugins/qt4projectmanager/gettingstartedwelcomeplugin.h ++ create mode 100644 src/plugins/welcome/communitywelcomepage.cpp ++ create mode 100644 src/plugins/welcome/communitywelcomepage.h ++ create mode 100644 src/plugins/welcome/communitywelcomepage.ui ++ create mode 100644 src/plugins/welcome/communitywelcomeplugin.cpp ++ create mode 100644 src/plugins/welcome/communitywelcomeplugin.h ++ ++diff --git a/src/libs/aggregation/aggregation.pri b/src/libs/aggregation/aggregation.pri ++index a6c48c5..14f9d06 100644 ++--- a/src/libs/aggregation/aggregation.pri +++++ b/src/libs/aggregation/aggregation.pri ++@@ -1 +1,3 @@ ++ LIBS *= -l$$qtLibraryTarget(Aggregation) +++HEADERS += +++SOURCES += ++diff --git a/src/libs/extensionsystem/extensionsystem.pro b/src/libs/extensionsystem/extensionsystem.pro ++index 81f3bc8..ea5574d 100644 ++--- a/src/libs/extensionsystem/extensionsystem.pro +++++ b/src/libs/extensionsystem/extensionsystem.pro ++@@ -4,9 +4,7 @@ DEFINES += EXTENSIONSYSTEM_LIBRARY ++ include(../../qtcreatorlibrary.pri) ++ include(extensionsystem_dependencies.pri) ++ ++-unix:!macx:!freebsd* { ++- LIBS += -ldl ++-} +++unix:!macx:!freebsd*:LIBS += -ldl ++ ++ DEFINES += IDE_TEST_DIR=\\\"$$IDE_SOURCE_TREE\\\" ++ ++@@ -21,14 +19,16 @@ HEADERS += pluginerrorview.h \ ++ pluginspec_p.h \ ++ pluginview.h \ ++ pluginview_p.h \ ++- optionsparser.h +++ optionsparser.h \ +++ iwelcomeplugin.h ++ SOURCES += pluginerrorview.cpp \ ++ plugindetailsview.cpp \ ++ iplugin.cpp \ ++ pluginmanager.cpp \ ++ pluginspec.cpp \ ++ pluginview.cpp \ ++- optionsparser.cpp +++ optionsparser.cpp \ +++ iwelcomeplugin.cpp ++ FORMS += pluginview.ui \ ++ pluginerrorview.ui \ ++ plugindetailsview.ui ++diff --git a/src/libs/extensionsystem/iwelcomeplugin.cpp b/src/libs/extensionsystem/iwelcomeplugin.cpp ++new file mode 100644 ++index 0000000..345d77b ++--- /dev/null +++++ b/src/libs/extensionsystem/iwelcomeplugin.cpp ++@@ -0,0 +1,8 @@ +++#include "iwelcomeplugin.h" +++ +++using namespace ExtensionSystem; +++ +++IWelcomePlugin::IWelcomePlugin() +++{ +++ +++} ++diff --git a/src/libs/extensionsystem/iwelcomeplugin.h b/src/libs/extensionsystem/iwelcomeplugin.h ++new file mode 100644 ++index 0000000..33546ed ++--- /dev/null +++++ b/src/libs/extensionsystem/iwelcomeplugin.h ++@@ -0,0 +1,31 @@ +++#ifndef IWELCOMEPLUGIN_H +++#define IWELCOMEPLUGIN_H +++ +++ +++#include "extensionsystem_global.h" +++ +++#include <QObject> +++ +++namespace ExtensionSystem { +++ +++class IWelcomePluginPrivate; +++ +++class EXTENSIONSYSTEM_EXPORT IWelcomePlugin : public QObject +++{ +++ Q_OBJECT +++ +++public: +++ IWelcomePlugin(); +++ +++ virtual QWidget *page() = 0; +++ virtual QString title() const = 0; +++ virtual int priority() const { return 0; } +++ +++private: +++ // not used atm +++ IWelcomePluginPrivate *m_d; +++}; +++ +++} +++ +++#endif // IWELCOMEPLUGIN_H ++diff --git a/src/libs/extensionsystem/pluginmanager.cpp b/src/libs/extensionsystem/pluginmanager.cpp ++index e79d603..602314a 100644 ++--- a/src/libs/extensionsystem/pluginmanager.cpp +++++ b/src/libs/extensionsystem/pluginmanager.cpp ++@@ -34,6 +34,7 @@ ++ #include "optionsparser.h" ++ #include "iplugin.h" ++ +++ ++ #include <QtCore/QMetaProperty> ++ #include <QtCore/QDir> ++ #include <QtCore/QTextStream> ++diff --git a/src/libs/utils/welcomemodetreewidget.cpp b/src/libs/utils/welcomemodetreewidget.cpp ++index 26d55a3..7ea7373 100644 ++--- a/src/libs/utils/welcomemodetreewidget.cpp +++++ b/src/libs/utils/welcomemodetreewidget.cpp ++@@ -48,6 +48,8 @@ WelcomeModeTreeWidget::WelcomeModeTreeWidget(QWidget *parent) : ++ m_d->bullet = QIcon(QLatin1String(":/welcome/images/list_bullet_arrow.png")); ++ connect(this, SIGNAL(itemClicked(QTreeWidgetItem *, int)), ++ SLOT(slotItemClicked(QTreeWidgetItem *))); +++ +++ viewport()->setAutoFillBackground(false); ++ } ++ ++ WelcomeModeTreeWidget::~WelcomeModeTreeWidget() ++diff --git a/src/plugins/coreplugin/coreplugin.h b/src/plugins/coreplugin/coreplugin.h ++index 04e5be4..ce487fb 100644 ++--- a/src/plugins/coreplugin/coreplugin.h +++++ b/src/plugins/coreplugin/coreplugin.h ++@@ -33,10 +33,6 @@ ++ #include <extensionsystem/iplugin.h> ++ ++ namespace Core { ++- class IMode; ++-} ++- ++-namespace Core { ++ namespace Internal { ++ ++ class EditMode; ++@@ -59,7 +55,6 @@ public slots: ++ ++ private: ++ MainWindow *m_mainWindow; ++- Core::IMode *m_welcomeMode; ++ EditMode *m_editMode; ++ }; ++ ++diff --git a/src/plugins/help/Help.pluginspec b/src/plugins/help/Help.pluginspec ++index d7ccc07..29f1b46 100644 ++--- a/src/plugins/help/Help.pluginspec +++++ b/src/plugins/help/Help.pluginspec ++@@ -22,6 +22,5 @@ will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.</license> ++ <dependency name="Core" version="1.2.80"/> ++ <dependency name="Find" version="1.2.80"/> ++ <dependency name="QuickOpen" version="1.2.80"/> ++- <dependency name="Welcome" version="1.2.80"/> ++ </dependencyList> ++ </plugin> ++diff --git a/src/plugins/help/help.pro b/src/plugins/help/help.pro ++index 1f5ec55..b733a1f 100644 ++--- a/src/plugins/help/help.pro +++++ b/src/plugins/help/help.pro ++@@ -4,7 +4,6 @@ include(../../qtcreatorplugin.pri) ++ include(../../plugins/coreplugin/coreplugin.pri) ++ include(../../plugins/find/find.pri) ++ include(../../plugins/quickopen/quickopen.pri) ++-include(../../plugins/welcome/welcome.pri) ++ QT += network ++ CONFIG += help ++ DEFINES += QT_CLUCENE_SUPPORT \ ++diff --git a/src/plugins/help/helpplugin.cpp b/src/plugins/help/helpplugin.cpp ++index f6e8db8..2ff11c8 100644 ++--- a/src/plugins/help/helpplugin.cpp +++++ b/src/plugins/help/helpplugin.cpp ++@@ -87,8 +87,8 @@ ++ using namespace Help; ++ using namespace Help::Internal; ++ ++-HelpManager::HelpManager(QHelpEngine *helpEngine) ++- : m_helpEngine(helpEngine) +++HelpManager::HelpManager(Internal::HelpPlugin* plugin) +++ : m_plugin(plugin) ++ { ++ } ++ ++@@ -96,7 +96,7 @@ void HelpManager::registerDocumentation(const QStringList &fileNames) ++ { ++ bool needsSetup = false; ++ { ++- QHelpEngineCore hc(m_helpEngine->collectionFile()); +++ QHelpEngineCore hc(m_plugin->helpEngine()->collectionFile()); ++ if (!hc.setupData()) ++ qWarning() << "Could not initialize help engine:" << hc.error(); ++ foreach (const QString &fileName, fileNames) { ++@@ -113,7 +113,17 @@ void HelpManager::registerDocumentation(const QStringList &fileNames) ++ } ++ } ++ if (needsSetup) ++- m_helpEngine->setupData(); +++ m_plugin->helpEngine()->setupData(); +++} +++ +++void HelpManager::openHelpPage(const QString& url) +++{ +++ m_plugin->openHelpPage(url); +++} +++ +++void HelpManager::openContextHelpPage(const QString& url) +++{ +++ m_plugin->openContextHelpPage(url); ++ } ++ ++ HelpPlugin::HelpPlugin() : ++@@ -180,7 +190,7 @@ bool HelpPlugin::initialize(const QStringList &arguments, QString *error) ++ connect(m_helpEngine, SIGNAL(setupFinished()), this, ++ SLOT(updateFilterComboBox())); ++ ++- addAutoReleasedObject(new HelpManager(m_helpEngine)); +++ addAutoReleasedObject(new HelpManager(this)); ++ ++ m_filterSettingsPage = new FilterSettingsPage(m_helpEngine); ++ addAutoReleasedObject(m_filterSettingsPage); ++@@ -430,6 +440,11 @@ bool HelpPlugin::initialize(const QStringList &arguments, QString *error) ++ return true; ++ } ++ +++QHelpEngine* HelpPlugin::helpEngine() const +++{ +++ return m_helpEngine; +++} +++ ++ void HelpPlugin::createRightPaneSideBar() ++ { ++ QAction *switchToHelpMode = new QAction("Go to Help Mode", this); ++@@ -610,17 +625,6 @@ void HelpPlugin::extensionsInitialized() ++ updateFilterComboBox(); ++ m_bookmarkManager->setupBookmarkModels(); ++ ++- using namespace Core::Internal; ++- using namespace Core::Constants; ++- Welcome::WelcomeMode *welcomeMode = ++- qobject_cast<Welcome::WelcomeMode*>(m_core->modeManager()->mode(MODE_WELCOME)); ++- if (welcomeMode) { ++- connect(welcomeMode, SIGNAL(openHelpPage(QString)), this, ++- SLOT(openHelpPage(QString))); ++- connect(welcomeMode, SIGNAL(openContextHelpPage(QString)), this, ++- SLOT(openContextHelpPage(QString))); ++- } ++- ++ #if !defined(QT_NO_WEBKIT) ++ QWebSettings* webSettings = QWebSettings::globalSettings(); ++ QFont font(webSettings->fontFamily(QWebSettings::StandardFont), ++diff --git a/src/plugins/help/helpplugin.h b/src/plugins/help/helpplugin.h ++index 6ab78cf..10cf1fd 100644 ++--- a/src/plugins/help/helpplugin.h +++++ b/src/plugins/help/helpplugin.h ++@@ -63,6 +63,7 @@ class SideBarItem; ++ namespace Help { ++ namespace Internal { ++ class CentralWidget; +++ class HelpPlugin; ++ } ++ ++ namespace Constants { ++@@ -76,12 +77,14 @@ class HELP_EXPORT HelpManager : public QObject ++ { ++ Q_OBJECT ++ public: ++- HelpManager(QHelpEngine *helpEngine); +++ HelpManager(Internal::HelpPlugin*); ++ ++ void registerDocumentation(const QStringList &fileNames); +++ void openHelpPage(const QString& url); +++ void openContextHelpPage(const QString &url); ++ ++ private: ++- QHelpEngine *m_helpEngine; +++ Internal::HelpPlugin *m_plugin; ++ }; ++ ++ namespace Internal { ++@@ -108,6 +111,12 @@ public: ++ void setIndexFilter(const QString &filter); ++ QString indexFilter() const; ++ +++ void openHelpPage(const QUrl& url); +++ void openHelpPage(const QString& url); +++ void openContextHelpPage(const QString &url); +++ +++ QHelpEngine* helpEngine() const; +++ ++ private slots: ++ void modeChanged(Core::IMode *mode); ++ void activateContext(); ++@@ -128,10 +137,6 @@ private slots: ++ void slotHideRightPane(); ++ void copyFromSideBar(); ++ ++- void openHelpPage(const QUrl& url); ++- void openHelpPage(const QString& url); ++- void openContextHelpPage(const QString &url); ++- ++ void updateSideBarSource(); ++ void updateSideBarSource(const QUrl &newUrl); ++ ++diff --git a/src/plugins/plugins.pro b/src/plugins/plugins.pro ++index 6ef52c1..b8ae5ec 100644 ++--- a/src/plugins/plugins.pro +++++ b/src/plugins/plugins.pro ++@@ -94,7 +94,6 @@ plugin_projectexplorer.depends = plugin_quickopen ++ plugin_projectexplorer.depends += plugin_find ++ plugin_projectexplorer.depends += plugin_coreplugin ++ plugin_projectexplorer.depends += plugin_texteditor ++-plugin_projectexplorer.depends += plugin_welcome ++ ++ plugin_qt4projectmanager.subdir = qt4projectmanager ++ plugin_qt4projectmanager.depends = plugin_texteditor ++@@ -103,7 +102,6 @@ plugin_qt4projectmanager.depends += plugin_cpptools ++ plugin_qt4projectmanager.depends += plugin_cppeditor ++ plugin_qt4projectmanager.depends += plugin_help ++ plugin_qt4projectmanager.depends += plugin_designer ++-plugin_qt4projectmanager.depends += plugin_welcome ++ ++ plugin_quickopen.subdir = quickopen ++ plugin_quickopen.depends = plugin_coreplugin ++@@ -144,7 +142,6 @@ plugin_help.subdir = help ++ plugin_help.depends = plugin_find ++ plugin_help.depends += plugin_quickopen ++ plugin_help.depends += plugin_coreplugin ++-plugin_help.depends += plugin_welcome ++ ++ plugin_resourceeditor.subdir = resourceeditor ++ plugin_resourceeditor.depends = plugin_coreplugin ++diff --git a/src/plugins/projectexplorer/ProjectExplorer.pluginspec b/src/plugins/projectexplorer/ProjectExplorer.pluginspec ++index 6a66cfe..8b5a7c3 100644 ++--- a/src/plugins/projectexplorer/ProjectExplorer.pluginspec +++++ b/src/plugins/projectexplorer/ProjectExplorer.pluginspec ++@@ -23,6 +23,5 @@ will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.</license> ++ <dependency name="Find" version="1.2.80"/> ++ <dependency name="QuickOpen" version="1.2.80"/> ++ <dependency name="TextEditor" version="1.2.80"/> ++- <dependency name="Welcome" version="1.2.80"/> ++ </dependencyList> ++ </plugin> ++diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp ++index f10b628..101a2e8 100644 ++--- a/src/plugins/projectexplorer/projectexplorer.cpp +++++ b/src/plugins/projectexplorer/projectexplorer.cpp ++@@ -57,6 +57,8 @@ ++ #include "sessiondialog.h" ++ #include "buildparserfactory.h" ++ #include "projectexplorersettingspage.h" +++#include "projectwelcomeplugin.h" +++#include "projectwelcomepage.h" ++ ++ #include <coreplugin/basemode.h> ++ #include <coreplugin/coreconstants.h> ++@@ -140,6 +142,7 @@ ProjectExplorerPlugin::ProjectExplorerPlugin() ++ ++ ProjectExplorerPlugin::~ProjectExplorerPlugin() ++ { +++ removeObject(m_welcomePlugin); ++ removeObject(this); ++ } ++ ++@@ -156,6 +159,11 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er ++ Core::ICore *core = Core::ICore::instance(); ++ Core::ActionManager *am = core->actionManager(); ++ +++ m_welcomePlugin = new ProjectWelcomePlugin; +++ m_welcomePage = qobject_cast<Internal::ProjectWelcomePage*>(m_welcomePlugin->page()); +++ Q_ASSERT(m_welcomePage); +++ connect(m_welcomePage, SIGNAL(manageSessions()), this, SLOT(showSessionManager())); +++ addObject(m_welcomePlugin); ++ addObject(this); ++ ++ connect(core->fileManager(), SIGNAL(currentFileChanged(QString)), ++@@ -646,10 +654,6 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er ++ m_projectExplorerSettings.showCompilerOutput = s->value("ProjectExplorer/Settings/ShowCompilerOutput", false).toBool(); ++ } ++ ++- if (Welcome::WelcomeMode *welcomeMode = qobject_cast<Welcome::WelcomeMode*> ++- (Core::ICore::instance()->modeManager()->mode(Core::Constants::MODE_WELCOME))) { ++- connect(welcomeMode, SIGNAL(manageSessions()), this, SLOT(showSessionManager())); ++- } ++ connect(m_sessionManagerAction, SIGNAL(triggered()), this, SLOT(showSessionManager())); ++ connect(m_newAction, SIGNAL(triggered()), this, SLOT(newProject())); ++ #if 0 ++@@ -685,6 +689,8 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er ++ this, SLOT(determineSessionToRestoreAtStartup())); ++ connect(Core::ICore::instance(), SIGNAL(coreOpened()), this, SLOT(restoreSession())); ++ +++ updateWelcomePage(); +++ ++ return true; ++ } ++ ++@@ -835,9 +841,7 @@ void ProjectExplorerPlugin::showSessionManager() ++ Core::ModeManager *modeManager = Core::ModeManager::instance(); ++ Core::IMode *welcomeMode = modeManager->mode(Core::Constants::MODE_WELCOME); ++ if (modeManager->currentMode() == welcomeMode) ++- { ++- updateWelcomePage(qobject_cast<Welcome::WelcomeMode*>(welcomeMode)); ++- } +++ updateWelcomePage(); ++ } ++ ++ void ProjectExplorerPlugin::setStartupProject(Project *project) ++@@ -1019,20 +1023,19 @@ Project *ProjectExplorerPlugin::startupProject() const ++ } ++ ++ // update welcome page ++-void ProjectExplorerPlugin::updateWelcomePage(Welcome::WelcomeMode *welcomeMode) +++void ProjectExplorerPlugin::updateWelcomePage() ++ { ++- Welcome::WelcomeMode::WelcomePageData welcomePageData; +++ ProjectWelcomePage::WelcomePageData welcomePageData; ++ welcomePageData.sessionList = m_session->sessions(); ++ welcomePageData.activeSession = m_session->activeSession(); ++ welcomePageData.previousSession = m_session->lastSession(); ++ welcomePageData.projectList = m_recentProjects; ++- welcomeMode->updateWelcomePage(welcomePageData); +++ m_welcomePage->updateWelcomePage(welcomePageData); ++ } ++ ++-void ProjectExplorerPlugin::currentModeChanged(Core::IMode *mode) +++void ProjectExplorerPlugin::currentModeChanged(Core::IMode *) ++ { ++- if (Welcome::WelcomeMode *welcomeMode = qobject_cast<Welcome::WelcomeMode*>(mode)) ++- updateWelcomePage(welcomeMode); +++ updateWelcomePage(); ++ } ++ ++ void ProjectExplorerPlugin::determineSessionToRestoreAtStartup() ++@@ -1080,12 +1083,9 @@ void ProjectExplorerPlugin::restoreSession() ++ // update welcome page ++ Core::ModeManager *modeManager = Core::ModeManager::instance(); ++ connect(modeManager, SIGNAL(currentModeChanged(Core::IMode*)), this, SLOT(currentModeChanged(Core::IMode*))); ++- if (Welcome::WelcomeMode *welcomeMode = qobject_cast<Welcome::WelcomeMode*>(modeManager->mode(Core::Constants::MODE_WELCOME))) { ++- updateWelcomePage(welcomeMode); ++- connect(welcomeMode, SIGNAL(requestSession(QString)), this, SLOT(loadSession(QString))); ++- connect(welcomeMode, SIGNAL(requestProject(QString)), this, SLOT(loadProject(QString))); ++- } ++- +++ connect(m_welcomePage, SIGNAL(requestSession(QString)), this, SLOT(loadSession(QString))); +++ connect(m_welcomePage, SIGNAL(requestProject(QString)), this, SLOT(loadProject(QString))); +++ ++ Core::ICore::instance()->openFiles(arguments); ++ updateActions(); ++ ++diff --git a/src/plugins/projectexplorer/projectexplorer.h b/src/plugins/projectexplorer/projectexplorer.h ++index 0f781ea..48f8c27 100644 ++--- a/src/plugins/projectexplorer/projectexplorer.h +++++ b/src/plugins/projectexplorer/projectexplorer.h ++@@ -72,6 +72,8 @@ class ApplicationOutput; ++ class OutputPane; ++ class ProjectWindow; ++ class ProjectFileFactory; +++class ProjectWelcomePlugin; +++class ProjectWelcomePage; ++ ++ struct ProjectExplorerSettings ++ { ++@@ -209,7 +211,7 @@ private: ++ ++ void updateActions(); ++ void addToRecentProjects(const QString &fileName, const QString &displayName); ++- void updateWelcomePage(Welcome::WelcomeMode *welcomeMode); +++ void updateWelcomePage(); ++ Internal::ProjectFileFactory *findProjectFileFactory(const QString &filename) const; ++ ++ static ProjectExplorerPlugin *m_instance; ++@@ -279,6 +281,8 @@ private: ++ QString m_runMode; ++ QString m_projectFilterString; ++ Internal::ProjectExplorerSettings m_projectExplorerSettings; +++ Internal::ProjectWelcomePlugin *m_welcomePlugin; +++ Internal::ProjectWelcomePage *m_welcomePage; ++ }; ++ ++ namespace Internal { ++diff --git a/src/plugins/projectexplorer/projectexplorer.pro b/src/plugins/projectexplorer/projectexplorer.pro ++index ffb0b08..4a954cc 100644 ++--- a/src/plugins/projectexplorer/projectexplorer.pro +++++ b/src/plugins/projectexplorer/projectexplorer.pro ++@@ -61,7 +61,9 @@ HEADERS += projectexplorer.h \ ++ filewatcher.h \ ++ debugginghelper.h \ ++ abstractmakestep.h \ ++- projectexplorersettingspage.h +++ projectexplorersettingspage.h \ +++ projectwelcomeplugin.h \ +++ projectwelcomepage.h ++ SOURCES += projectexplorer.cpp \ ++ projectwindow.cpp \ ++ buildmanager.cpp \ ++@@ -111,7 +113,9 @@ SOURCES += projectexplorer.cpp \ ++ filewatcher.cpp \ ++ debugginghelper.cpp \ ++ abstractmakestep.cpp \ ++- projectexplorersettingspage.cpp +++ projectexplorersettingspage.cpp \ +++ projectwelcomeplugin.cpp \ +++ projectwelcomepage.cpp ++ FORMS += processstep.ui \ ++ editorsettingspropertiespage.ui \ ++ runsettingspropertiespage.ui \ ++@@ -119,7 +123,8 @@ FORMS += processstep.ui \ ++ projectwizardpage.ui \ ++ buildstepspage.ui \ ++ removefiledialog.ui \ ++- projectexplorersettingspage.ui +++ projectexplorersettingspage.ui \ +++ projectwelcomepage.ui ++ win32 { ++ SOURCES += applicationlauncher_win.cpp \ ++ winguiprocess.cpp ++diff --git a/src/plugins/projectexplorer/projectexplorer_dependencies.pri b/src/plugins/projectexplorer/projectexplorer_dependencies.pri ++index ecbb7a4..674c8bb 100644 ++--- a/src/plugins/projectexplorer/projectexplorer_dependencies.pri +++++ b/src/plugins/projectexplorer/projectexplorer_dependencies.pri ++@@ -3,4 +3,3 @@ include(../../plugins/quickopen/quickopen.pri) ++ include(../../plugins/find/find.pri) ++ include(../../plugins/coreplugin/coreplugin.pri) ++ include(../../plugins/texteditor/texteditor.pri) ++-include(../../plugins/welcome/welcome.pri) ++diff --git a/src/plugins/projectexplorer/projectwelcomepage.cpp b/src/plugins/projectexplorer/projectwelcomepage.cpp ++new file mode 100644 ++index 0000000..ff50f38 ++--- /dev/null +++++ b/src/plugins/projectexplorer/projectwelcomepage.cpp ++@@ -0,0 +1,170 @@ +++/************************************************************************** +++** +++** This file is part of Qt Creator +++** +++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +++** +++** Contact: Nokia Corporation (qt-info@nokia.com) +++** +++** Commercial Usage +++** +++** Licensees holding valid Qt Commercial licenses may use this file in +++** accordance with the Qt Commercial License Agreement provided with the +++** Software or, alternatively, in accordance with the terms contained in +++** a written agreement between you and Nokia. +++** +++** GNU Lesser General Public License Usage +++** +++** Alternatively, this file may be used under the terms of the GNU Lesser +++** General Public License version 2.1 as published by the Free Software +++** Foundation and appearing in the file LICENSE.LGPL included in the +++** packaging of this file. Please review the following information to +++** ensure the GNU Lesser General Public License version 2.1 requirements +++** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +++** +++** If you are unsure which license is appropriate for your use, please +++** contact the sales department at http://www.qtsoftware.com/contact. +++** +++**************************************************************************/ +++ +++#include "projectwelcomepage.h" +++#include "ui_projectwelcomepage.h" +++ +++#include <coreplugin/coreconstants.h> +++#include <coreplugin/uniqueidmanager.h> +++#include <coreplugin/modemanager.h> +++#include <coreplugin/icore.h> +++#include <coreplugin/dialogs/iwizard.h> +++ +++#include <QtCore/QFileInfo> +++#include <QtCore/QDir> +++#include <QtCore/QPair> +++#include <QtGui/QLabel> +++#include <QtGui/QTreeWidgetItem> +++ +++#include <QtCore/QDebug> +++ +++using namespace ProjectExplorer::Internal; +++ +++static QString formatTitleLabel(const QString &text) +++{ +++ // TODO: do not hardcode here +++ QString rc = QLatin1String( +++ "<html><head><style type=\"text/css\">p, li { white-space: pre-wrap; }</style></head>" +++ "<body style=\" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;\">" +++ "<p style=\" margin-top:16px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">" +++ "<span style=\" font-size:x-large; color:#555555;\">"); +++ rc += text; +++ rc += QLatin1String("</span></p><hr/></body></html>"); +++ return rc; +++} +++ +++bool ProjectWelcomePage::WelcomePageData::operator==(const WelcomePageData &rhs) const +++{ +++ return previousSession == rhs.previousSession +++ && activeSession == rhs.activeSession +++ && sessionList == rhs.sessionList +++ && projectList == rhs.projectList; +++} +++ +++bool ProjectWelcomePage::WelcomePageData::operator!=(const WelcomePageData &rhs) const +++{ +++ return previousSession != rhs.previousSession +++ || activeSession != rhs.activeSession +++ || sessionList != rhs.sessionList +++ || projectList != rhs.projectList; +++} +++ +++QDebug operator<<(QDebug dgb, const ProjectWelcomePage::WelcomePageData &d) +++{ +++ dgb.nospace() << "PreviousSession=" << d.previousSession +++ << " activeSession=" << d.activeSession +++ << " sessionList=" << d.sessionList +++ << " projectList=" << d.projectList; +++ return dgb; +++} +++ +++ProjectWelcomePage::ProjectWelcomePage(QWidget *parent) : +++ QWidget(parent), +++ ui(new Ui::ProjectWelcomePage) +++{ +++ ui->setupUi(this); +++ ui->projTitleLabel->setText(::formatTitleLabel(tr("Open Recent Project"))); +++ ui->recentSessionsTitleLabel->setText(::formatTitleLabel(tr("Resume Session"))); +++ updateWelcomePage(WelcomePageData()); +++ +++ connect(ui->sessTreeWidget, SIGNAL(activated(QString)), SLOT(slotSessionClicked(QString))); +++ connect(ui->projTreeWidget, SIGNAL(activated(QString)), SLOT(slotProjectClicked(QString))); +++ connect(ui->createNewProjectButton, SIGNAL(clicked()), SLOT(slotCreateNewProject())); +++ connect(ui->manageSessionsButton, SIGNAL(clicked()), SIGNAL(manageSessions())); +++ +++} +++ +++ProjectWelcomePage::~ProjectWelcomePage() +++{ +++ delete ui; +++} +++ +++void ProjectWelcomePage::updateWelcomePage(const WelcomePageData &welcomePageData) +++{ +++ // Update only if data are modified +++ if (welcomePageData == lastData) +++ return; +++ lastData = welcomePageData; +++ +++ setUpdatesEnabled(false); +++ ui->sessTreeWidget->clear(); +++ ui->projTreeWidget->clear(); +++ +++ if (welcomePageData.sessionList.count() > 0) { +++ foreach (const QString &s, welcomePageData.sessionList) { +++ QString str = s; +++ if (s == welcomePageData.previousSession) +++ str = tr("%1 (last session)").arg(s); +++ ui->sessTreeWidget->addItem(str, s); +++ } +++ ui->sessTreeWidget->updateGeometry(); +++ ui->sessTreeWidget->show(); +++ } else { +++ ui->sessTreeWidget->hide(); +++ } +++ +++ typedef QPair<QString, QString> QStringPair; +++ if (welcomePageData.projectList.count() > 0) { +++ foreach (const QStringPair &it, welcomePageData.projectList) { +++ QTreeWidgetItem *item = ui->projTreeWidget->addItem(it.second, it.first); +++ const QFileInfo fi(it.first); +++ item->setToolTip(1, QDir::toNativeSeparators(fi.absolutePath())); +++ } +++ } else { +++ ui->projTreeWidget->hide(); +++ } +++ ui->projTreeWidget->updateGeometry(); +++ setUpdatesEnabled(true); +++} +++ +++void ProjectWelcomePage::activateEditMode() +++{ +++ Core::ModeManager *modeManager = Core::ModeManager::instance(); +++ if (modeManager->currentMode() == modeManager->mode(Core::Constants::MODE_WELCOME)) +++ modeManager->activateMode(Core::Constants::MODE_EDIT); +++} +++ +++ +++void ProjectWelcomePage::slotSessionClicked(const QString &data) +++{ +++ emit requestSession(data); +++ activateEditMode(); +++} +++ +++void ProjectWelcomePage::slotProjectClicked(const QString &data) +++{ +++ emit requestProject(data); +++ activateEditMode(); +++} +++ +++void ProjectWelcomePage::slotCreateNewProject() +++{ +++ Core::ICore::instance()->showNewItemDialog(tr("New Project..."), +++ Core::IWizard::wizardsOfKind(Core::IWizard::ProjectWizard)); +++} ++diff --git a/src/plugins/projectexplorer/projectwelcomepage.h b/src/plugins/projectexplorer/projectwelcomepage.h ++new file mode 100644 ++index 0000000..02e277d ++--- /dev/null +++++ b/src/plugins/projectexplorer/projectwelcomepage.h ++@@ -0,0 +1,81 @@ +++/************************************************************************** +++** +++** This file is part of Qt Creator +++** +++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +++** +++** Contact: Nokia Corporation (qt-info@nokia.com) +++** +++** Commercial Usage +++** +++** Licensees holding valid Qt Commercial licenses may use this file in +++** accordance with the Qt Commercial License Agreement provided with the +++** Software or, alternatively, in accordance with the terms contained in +++** a written agreement between you and Nokia. +++** +++** GNU Lesser General Public License Usage +++** +++** Alternatively, this file may be used under the terms of the GNU Lesser +++** General Public License version 2.1 as published by the Free Software +++** Foundation and appearing in the file LICENSE.LGPL included in the +++** packaging of this file. Please review the following information to +++** ensure the GNU Lesser General Public License version 2.1 requirements +++** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +++** +++** If you are unsure which license is appropriate for your use, please +++** contact the sales department at http://www.qtsoftware.com/contact. +++** +++**************************************************************************/ +++ +++#ifndef PROJECTWELCOMEPAGE_H +++#define PROJECTWELCOMEPAGE_H +++ +++#include <QtGui/QWidget> +++ +++ +++namespace ProjectExplorer { +++ namespace Internal { +++ +++ +++namespace Ui { +++ class ProjectWelcomePage; +++} +++ +++class ProjectWelcomePage : public QWidget { +++ Q_OBJECT +++public: +++ ProjectWelcomePage(QWidget *parent = 0); +++ ~ProjectWelcomePage(); +++ +++ struct WelcomePageData{ +++ bool operator==(const WelcomePageData &rhs) const; +++ bool operator!=(const WelcomePageData &rhs) const; +++ +++ QString previousSession; +++ QString activeSession; +++ QStringList sessionList; +++ QList<QPair<QString, QString> > projectList; // pair of filename, displayname +++ }; +++ +++ void updateWelcomePage(const WelcomePageData &welcomePageData); +++ +++signals: +++ void requestProject(const QString &project); +++ void requestSession(const QString &session); +++ void manageSessions(); +++ +++private slots: +++ void slotSessionClicked(const QString &data); +++ void slotProjectClicked(const QString &data); +++ void slotCreateNewProject(); +++ +++private: +++ void activateEditMode(); +++ Ui::ProjectWelcomePage *ui; +++ WelcomePageData lastData; +++}; +++ +++} +++} +++ +++#endif // PROJECTWELCOMEPAGE_H ++diff --git a/src/plugins/projectexplorer/projectwelcomepage.ui b/src/plugins/projectexplorer/projectwelcomepage.ui ++new file mode 100644 ++index 0000000..cb26957 ++--- /dev/null +++++ b/src/plugins/projectexplorer/projectwelcomepage.ui ++@@ -0,0 +1,254 @@ +++<?xml version="1.0" encoding="UTF-8"?> +++<ui version="4.0"> +++ <class>ProjectExplorer::Internal::ProjectWelcomePage</class> +++ <widget class="QWidget" name="ProjectExplorer::Internal::ProjectWelcomePage"> +++ <property name="geometry"> +++ <rect> +++ <x>0</x> +++ <y>0</y> +++ <width>667</width> +++ <height>365</height> +++ </rect> +++ </property> +++ <property name="windowTitle"> +++ <string>Form</string> +++ </property> +++ <layout class="QHBoxLayout" name="horizontalLayout"> +++ <item> +++ <widget class="QFrame" name="recentSessionsFrame"> +++ <property name="sizePolicy"> +++ <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> +++ <horstretch>0</horstretch> +++ <verstretch>0</verstretch> +++ </sizepolicy> +++ </property> +++ <property name="minimumSize"> +++ <size> +++ <width>270</width> +++ <height>130</height> +++ </size> +++ </property> +++ <property name="styleSheet"> +++ <string/> +++ </property> +++ <layout class="QGridLayout" name="gridLayout_3"> +++ <property name="horizontalSpacing"> +++ <number>0</number> +++ </property> +++ <property name="verticalSpacing"> +++ <number>3</number> +++ </property> +++ <item row="0" column="0" colspan="3"> +++ <widget class="QLabel" name="recentSessionsTitleLabel"> +++ <property name="sizePolicy"> +++ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Maximum"> +++ <horstretch>0</horstretch> +++ <verstretch>0</verstretch> +++ </sizepolicy> +++ </property> +++ <property name="alignment"> +++ <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> +++ </property> +++ </widget> +++ </item> +++ <item row="1" column="0" colspan="3"> +++ <widget class="Core::Utils::WelcomeModeTreeWidget" name="sessTreeWidget"> +++ <property name="sizePolicy"> +++ <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> +++ <horstretch>0</horstretch> +++ <verstretch>0</verstretch> +++ </sizepolicy> +++ </property> +++ <property name="focusPolicy"> +++ <enum>Qt::NoFocus</enum> +++ </property> +++ <property name="frameShape"> +++ <enum>QFrame::NoFrame</enum> +++ </property> +++ <property name="selectionMode"> +++ <enum>QAbstractItemView::NoSelection</enum> +++ </property> +++ <property name="verticalScrollMode"> +++ <enum>QAbstractItemView::ScrollPerPixel</enum> +++ </property> +++ <property name="rootIsDecorated"> +++ <bool>false</bool> +++ </property> +++ <property name="uniformRowHeights"> +++ <bool>true</bool> +++ </property> +++ <property name="allColumnsShowFocus"> +++ <bool>true</bool> +++ </property> +++ <property name="columnCount"> +++ <number>2</number> +++ </property> +++ <attribute name="headerVisible"> +++ <bool>false</bool> +++ </attribute> +++ <attribute name="headerDefaultSectionSize"> +++ <number>24</number> +++ </attribute> +++ <attribute name="headerMinimumSectionSize"> +++ <number>0</number> +++ </attribute> +++ <column> +++ <property name="text"> +++ <string notr="true">1</string> +++ </property> +++ </column> +++ <column> +++ <property name="text"> +++ <string notr="true">2</string> +++ </property> +++ </column> +++ </widget> +++ </item> +++ <item row="3" column="0"> +++ <widget class="QPushButton" name="manageSessionsButton"> +++ <property name="focusPolicy"> +++ <enum>Qt::TabFocus</enum> +++ </property> +++ <property name="text"> +++ <string>Manage Sessions...</string> +++ </property> +++ </widget> +++ </item> +++ <item row="4" column="0"> +++ <spacer name="verticalSpacer"> +++ <property name="orientation"> +++ <enum>Qt::Vertical</enum> +++ </property> +++ <property name="sizeHint" stdset="0"> +++ <size> +++ <width>20</width> +++ <height>40</height> +++ </size> +++ </property> +++ </spacer> +++ </item> +++ </layout> +++ </widget> +++ </item> +++ <item> +++ <widget class="QFrame" name="recentProjectsFrame"> +++ <property name="styleSheet"> +++ <string/> +++ </property> +++ <layout class="QGridLayout" name="gridLayout_5"> +++ <property name="horizontalSpacing"> +++ <number>0</number> +++ </property> +++ <property name="verticalSpacing"> +++ <number>3</number> +++ </property> +++ <property name="rightMargin"> +++ <number>9</number> +++ </property> +++ <item row="0" column="0" colspan="3"> +++ <widget class="QLabel" name="projTitleLabel"> +++ <property name="sizePolicy"> +++ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Maximum"> +++ <horstretch>0</horstretch> +++ <verstretch>0</verstretch> +++ </sizepolicy> +++ </property> +++ <property name="alignment"> +++ <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> +++ </property> +++ </widget> +++ </item> +++ <item row="1" column="0" colspan="3"> +++ <widget class="Core::Utils::WelcomeModeTreeWidget" name="projTreeWidget"> +++ <property name="sizePolicy"> +++ <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> +++ <horstretch>0</horstretch> +++ <verstretch>0</verstretch> +++ </sizepolicy> +++ </property> +++ <property name="focusPolicy"> +++ <enum>Qt::NoFocus</enum> +++ </property> +++ <property name="frameShape"> +++ <enum>QFrame::NoFrame</enum> +++ </property> +++ <property name="selectionMode"> +++ <enum>QAbstractItemView::NoSelection</enum> +++ </property> +++ <property name="verticalScrollMode"> +++ <enum>QAbstractItemView::ScrollPerPixel</enum> +++ </property> +++ <property name="rootIsDecorated"> +++ <bool>false</bool> +++ </property> +++ <property name="uniformRowHeights"> +++ <bool>true</bool> +++ </property> +++ <property name="allColumnsShowFocus"> +++ <bool>true</bool> +++ </property> +++ <property name="columnCount"> +++ <number>2</number> +++ </property> +++ <attribute name="headerVisible"> +++ <bool>false</bool> +++ </attribute> +++ <attribute name="headerDefaultSectionSize"> +++ <number>24</number> +++ </attribute> +++ <attribute name="headerMinimumSectionSize"> +++ <number>0</number> +++ </attribute> +++ <column> +++ <property name="text"> +++ <string notr="true">1</string> +++ </property> +++ </column> +++ <column> +++ <property name="text"> +++ <string notr="true">2</string> +++ </property> +++ </column> +++ </widget> +++ </item> +++ <item row="3" column="0"> +++ <widget class="QPushButton" name="createNewProjectButton"> +++ <property name="focusPolicy"> +++ <enum>Qt::TabFocus</enum> +++ </property> +++ <property name="text"> +++ <string>Create New Project...</string> +++ </property> +++ <property name="flat"> +++ <bool>false</bool> +++ </property> +++ </widget> +++ </item> +++ <item row="4" column="0"> +++ <spacer name="verticalSpacer_2"> +++ <property name="orientation"> +++ <enum>Qt::Vertical</enum> +++ </property> +++ <property name="sizeHint" stdset="0"> +++ <size> +++ <width>20</width> +++ <height>40</height> +++ </size> +++ </property> +++ </spacer> +++ </item> +++ </layout> +++ </widget> +++ </item> +++ </layout> +++ </widget> +++ <customwidgets> +++ <customwidget> +++ <class>Core::Utils::WelcomeModeTreeWidget</class> +++ <extends>QTreeWidget</extends> +++ <header>utils/welcomemodetreewidget.h</header> +++ </customwidget> +++ </customwidgets> +++ <resources/> +++ <connections/> +++</ui> ++diff --git a/src/plugins/projectexplorer/projectwelcomeplugin.cpp b/src/plugins/projectexplorer/projectwelcomeplugin.cpp ++new file mode 100644 ++index 0000000..d850c8f ++--- /dev/null +++++ b/src/plugins/projectexplorer/projectwelcomeplugin.cpp ++@@ -0,0 +1,48 @@ +++/************************************************************************** +++** +++** This file is part of Qt Creator +++** +++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +++** +++** Contact: Nokia Corporation (qt-info@nokia.com) +++** +++** Commercial Usage +++** +++** Licensees holding valid Qt Commercial licenses may use this file in +++** accordance with the Qt Commercial License Agreement provided with the +++** Software or, alternatively, in accordance with the terms contained in +++** a written agreement between you and Nokia. +++** +++** GNU Lesser General Public License Usage +++** +++** Alternatively, this file may be used under the terms of the GNU Lesser +++** General Public License version 2.1 as published by the Free Software +++** Foundation and appearing in the file LICENSE.LGPL included in the +++** packaging of this file. Please review the following information to +++** ensure the GNU Lesser General Public License version 2.1 requirements +++** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +++** +++** If you are unsure which license is appropriate for your use, please +++** contact the sales department at http://www.qtsoftware.com/contact. +++** +++**************************************************************************/ +++ +++#include "projectwelcomeplugin.h" +++#include "projectwelcomepage.h" +++ +++namespace ProjectExplorer { +++namespace Internal { +++ +++ProjectWelcomePlugin::ProjectWelcomePlugin() +++ : m_page(new ProjectWelcomePage) +++{ +++ +++} +++ +++QWidget* ProjectWelcomePlugin::page() +++{ +++ return m_page; +++} +++ +++} // namespace Internal +++} // namespace ProjectExplorer ++diff --git a/src/plugins/projectexplorer/projectwelcomeplugin.h b/src/plugins/projectexplorer/projectwelcomeplugin.h ++new file mode 100644 ++index 0000000..af55a7d ++--- /dev/null +++++ b/src/plugins/projectexplorer/projectwelcomeplugin.h ++@@ -0,0 +1,58 @@ +++/************************************************************************** +++** +++** This file is part of Qt Creator +++** +++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +++** +++** Contact: Nokia Corporation (qt-info@nokia.com) +++** +++** Commercial Usage +++** +++** Licensees holding valid Qt Commercial licenses may use this file in +++** accordance with the Qt Commercial License Agreement provided with the +++** Software or, alternatively, in accordance with the terms contained in +++** a written agreement between you and Nokia. +++** +++** GNU Lesser General Public License Usage +++** +++** Alternatively, this file may be used under the terms of the GNU Lesser +++** General Public License version 2.1 as published by the Free Software +++** Foundation and appearing in the file LICENSE.LGPL included in the +++** packaging of this file. Please review the following information to +++** ensure the GNU Lesser General Public License version 2.1 requirements +++** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +++** +++** If you are unsure which license is appropriate for your use, please +++** contact the sales department at http://www.qtsoftware.com/contact. +++** +++**************************************************************************/ +++ +++#ifndef PROJECTWELCOMEPLUGIN_H +++#define PROJECTWELCOMEPLUGIN_H +++ +++#include <extensionsystem/iwelcomeplugin.h> +++ +++namespace ProjectExplorer { +++namespace Internal { +++ +++class ProjectWelcomePage; +++ +++class ProjectWelcomePlugin : public ExtensionSystem::IWelcomePlugin +++{ +++ Q_OBJECT +++public: +++ ProjectWelcomePlugin(); +++ +++ QWidget *page(); +++ QString title() const { return tr("Develop"); } +++ int priority() const { return 20; } +++private: +++ ProjectWelcomePage *m_page; +++ +++ +++}; +++ +++} // namespace Internal +++} // namespace ProjectExplorer +++ +++#endif // PROJECTWELCOMEPLUGIN_H ++diff --git a/src/plugins/projectexplorer/projectwelcomeplugin.ui b/src/plugins/projectexplorer/projectwelcomeplugin.ui ++new file mode 100644 ++index 0000000..7f7c84b ++--- /dev/null +++++ b/src/plugins/projectexplorer/projectwelcomeplugin.ui ++@@ -0,0 +1,21 @@ +++<ui version="4.0" > +++ <author/> +++ <comment/> +++ <exportmacro/> +++ <class>ProjectWelcomePlugin</class> +++ <widget class="QWidget" name="ProjectWelcomePlugin" > +++ <property name="geometry" > +++ <rect> +++ <x>0</x> +++ <y>0</y> +++ <width>400</width> +++ <height>300</height> +++ </rect> +++ </property> +++ <property name="windowTitle" > +++ <string>Form</string> +++ </property> +++ </widget> +++ <pixmapfunction/> +++ <connections/> +++</ui> ++diff --git a/src/plugins/qt4projectmanager/Qt4ProjectManager.pluginspec b/src/plugins/qt4projectmanager/Qt4ProjectManager.pluginspec ++index 3b515bd..c4b8d44 100644 ++--- a/src/plugins/qt4projectmanager/Qt4ProjectManager.pluginspec +++++ b/src/plugins/qt4projectmanager/Qt4ProjectManager.pluginspec ++@@ -25,6 +25,5 @@ will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.</license> ++ <dependency name="CppEditor" version="1.2.80"/> ++ <dependency name="Help" version="1.2.80"/> ++ <dependency name="Designer" version="1.2.80"/> ++- <dependency name="Welcome" version="1.2.80"/> ++ </dependencyList> ++ </plugin> ++diff --git a/src/plugins/qt4projectmanager/gettingstartedwelcomepage.cpp b/src/plugins/qt4projectmanager/gettingstartedwelcomepage.cpp ++new file mode 100644 ++index 0000000..ca1db4c ++--- /dev/null +++++ b/src/plugins/qt4projectmanager/gettingstartedwelcomepage.cpp ++@@ -0,0 +1,271 @@ +++/************************************************************************** +++** +++** This file is part of Qt Creator +++** +++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +++** +++** Contact: Nokia Corporation (qt-info@nokia.com) +++** +++** Commercial Usage +++** +++** Licensees holding valid Qt Commercial licenses may use this file in +++** accordance with the Qt Commercial License Agreement provided with the +++** Software or, alternatively, in accordance with the terms contained in +++** a written agreement between you and Nokia. +++** +++** GNU Lesser General Public License Usage +++** +++** Alternatively, this file may be used under the terms of the GNU Lesser +++** General Public License version 2.1 as published by the Free Software +++** Foundation and appearing in the file LICENSE.LGPL included in the +++** packaging of this file. Please review the following information to +++** ensure the GNU Lesser General Public License version 2.1 requirements +++** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +++** +++** If you are unsure which license is appropriate for your use, please +++** contact the sales department at http://www.qtsoftware.com/contact. +++** +++**************************************************************************/ +++ +++#include "gettingstartedwelcomepage.h" +++#include "ui_gettingstartedwelcomepage.h" +++ +++#include <coreplugin/icore.h> +++#include <coreplugin/coreconstants.h> +++ +++#include <extensionsystem/pluginmanager.h> +++ +++#include <help/helpplugin.h> +++ +++#include <QtCore/QDateTime> +++#include <QtCore/QDir> +++#include <QtCore/QFileInfo> +++#include <QtCore/QDebug> +++#include <QtCore/QUrl> +++#include <QtCore/QXmlStreamReader> +++#include <QtGui/QFont> +++ +++namespace Qt4ProjectManager { +++namespace Internal { +++ +++// TODO: remove +++static QString titleLabel(const QString &text) +++{ +++ // TODO: do not hardcode here +++ QString rc = QLatin1String( +++ "<html><head><style type=\"text/css\">p, li { white-space: pre-wrap; }</style></head>" +++ "<body style=\" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;\">" +++ "<p style=\" margin-top:16px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">" +++ "<span style=\" font-size:x-large; color:#555555;\">"); +++ rc += text; +++ rc += QLatin1String("</span></p><hr/></body></html>"); +++ return rc; +++} +++ +++GettingStartedWelcomePage::GettingStartedWelcomePage(QWidget *parent) : +++ QWidget(parent), +++ ui(new Ui::GettingStartedWelcomePage) +++{ +++ ui->setupUi(this); +++ ui->tutorialsTitleLabel->setText(titleLabel(tr("Tutorials"))); +++ ui->demoTitleLabel->setText(titleLabel(tr("Explore Qt Examples"))); +++ ui->didYouKnowTextBrowser->viewport()->setAutoFillBackground(false); +++ ui->didYouKnowTitleLabel->setText(titleLabel(tr("Did You Know?"))); +++ +++ connect(ui->tutorialTreeWidget, SIGNAL(activated(QString)), SLOT(slotOpenHelpPage(const QString&))); +++ connect(ui->openExampleButton, SIGNAL(clicked()), SLOT(slotOpenExample())); +++ connect(ui->examplesComboBox, SIGNAL(currentIndexChanged(int)), SLOT(slotEnableExampleButton(int))); +++ +++ ui->tutorialTreeWidget->addItem(tr("<b>Qt Creator - A quick tour</b>"), +++ QString("qthelp://com.nokia.qtcreator.%1%2/doc/index.html").arg(IDE_VERSION_MAJOR).arg(IDE_VERSION_MINOR)); +++ ui->tutorialTreeWidget->addItem(tr("Creating an address book"), +++ QLatin1String("qthelp://com.nokia.qtcreator/doc/tutorials-addressbook-sdk.html")); +++ ui->tutorialTreeWidget->addItem(tr("Understanding widgets"), +++ QLatin1String("qthelp://com.trolltech.qt/qdoc/widgets-tutorial.html")); +++ ui->tutorialTreeWidget->addItem(tr("Building with qmake"), +++ QLatin1String("qthelp://com.trolltech.qmake/qdoc/qmake-tutorial.html")); +++ ui->tutorialTreeWidget->addItem(tr("Writing test cases"), +++ QLatin1String("qthelp://com.trolltech.qt/qdoc/qtestlib-tutorial.html")); +++ +++ srand(QDateTime::currentDateTime().toTime_t()); +++ QStringList tips = tipsOfTheDay(); +++ m_currentTip = rand()%tips.count(); +++ +++ QTextDocument *doc = ui->didYouKnowTextBrowser->document(); +++ doc->setDefaultStyleSheet("a:link {color:black;}"); +++ ui->didYouKnowTextBrowser->setDocument(doc); +++ ui->didYouKnowTextBrowser->setText(tips.at(m_currentTip)); +++ +++ connect(ui->nextTipBtn, SIGNAL(clicked()), this, SLOT(slotNextTip())); +++ connect(ui->prevTipBtn, SIGNAL(clicked()), this, SLOT(slotPrevTip())); +++ +++} +++ +++GettingStartedWelcomePage::~GettingStartedWelcomePage() +++{ +++ delete ui; +++} +++ +++void GettingStartedWelcomePage::updateExamples(const QString& examplePath, const QString& demosPath, const QString &sourcePath) +++{ +++ QString demoxml = demosPath + "/qtdemo/xml/examples.xml"; +++ if (!QFile::exists(demoxml)) { +++ demoxml = sourcePath + "/demos/qtdemo/xml/examples.xml"; +++ if (!QFile::exists(demoxml)) +++ return; +++ } +++ +++ QFile description(demoxml); +++ if (!description.open(QFile::ReadOnly)) +++ return; +++ +++ ui->examplesComboBox->clear(); +++ ui->examplesComboBox->setEnabled(true); +++ +++ ui->examplesComboBox->addItem(tr("Choose an example...")); +++ QFont f = font(); +++ f.setItalic(true); +++ ui->examplesComboBox->setItemData(0, f, Qt::FontRole); +++ f.setItalic(false); +++ bool inExamples = false; +++ QString dirName; +++ QXmlStreamReader reader(&description); +++ while (!reader.atEnd()) { +++ switch (reader.readNext()) { +++ case QXmlStreamReader::StartElement: +++ if (reader.name() == "category") { +++ QString name = reader.attributes().value(QLatin1String("name")).toString(); +++ if (name.contains("tutorial")) +++ break; +++ dirName = reader.attributes().value(QLatin1String("dirname")).toString(); +++ ui->examplesComboBox->addItem(name); +++ f.setBold(true); +++ ui->examplesComboBox->setItemData(ui->examplesComboBox->count()-1, f, Qt::FontRole); +++ f.setBold(false); +++ inExamples = true; +++ } +++ if (inExamples && reader.name() == "example") { +++ QString name = reader.attributes().value(QLatin1String("name")).toString(); +++ QString fn = reader.attributes().value(QLatin1String("filename")).toString(); +++ QString relativeProPath = '/' + dirName + '/' + fn + '/' + fn + ".pro"; +++ QString fileName = examplePath + relativeProPath; +++ if (!QFile::exists(fileName)) +++ fileName = sourcePath + "/examples" + relativeProPath; +++ QString helpPath = "qthelp://com.trolltech.qt/qdoc/" + dirName.replace("/", "-") + "-" + fn + ".html"; +++ +++ ui->examplesComboBox->addItem(" " + name, fileName); +++ ui->examplesComboBox->setItemData(ui->examplesComboBox->count()-1, helpPath, Qt::UserRole+1); +++ } +++ break; +++ case QXmlStreamReader::EndElement: +++ if (reader.name() == "category") +++ inExamples = false; +++ break; +++ default: +++ break; +++ } +++ } +++} +++ +++void GettingStartedWelcomePage::slotEnableExampleButton(int index) +++{ +++ QString fileName = ui->examplesComboBox->itemData(index, Qt::UserRole).toString(); +++ ui->openExampleButton->setEnabled(!fileName.isEmpty()); +++} +++ +++void GettingStartedWelcomePage::slotOpenExample() +++{ +++ QComboBox *box = ui->examplesComboBox; +++ QString proFile = box->itemData(box->currentIndex(), Qt::UserRole).toString(); +++ QString helpFile = box->itemData(box->currentIndex(), Qt::UserRole + 1).toString(); +++ QStringList files; +++ QFileInfo fi(proFile); +++ QString tryFile = fi.path() + "/main.cpp"; +++ files << proFile; +++ if(!QFile::exists(tryFile)) +++ tryFile = fi.path() + '/' + fi.baseName() + ".cpp"; +++ if(QFile::exists(tryFile)) +++ files << tryFile; +++ Core::ICore::instance()->openFiles(files); +++ slotOpenContextHelpPage(helpFile); +++} +++ +++void GettingStartedWelcomePage::slotOpenHelpPage(const QString& url) +++{ +++ Help::HelpManager *helpManager +++ = ExtensionSystem::PluginManager::instance()->getObject<Help::HelpManager>(); +++ Q_ASSERT(helpManager); +++ helpManager->openHelpPage(url); +++} +++void GettingStartedWelcomePage::slotOpenContextHelpPage(const QString& url) +++{ +++ Help::HelpManager *helpManager +++ = ExtensionSystem::PluginManager::instance()->getObject<Help::HelpManager>(); +++ Q_ASSERT(helpManager); +++ helpManager->openContextHelpPage(url); +++} +++ +++void GettingStartedWelcomePage::slotNextTip() +++{ +++ QStringList tips = tipsOfTheDay(); +++ m_currentTip = ((m_currentTip+1)%tips.count()); +++ ui->didYouKnowTextBrowser->setText(tips.at(m_currentTip)); +++} +++ +++void GettingStartedWelcomePage::slotPrevTip() +++{ +++ QStringList tips = tipsOfTheDay(); +++ m_currentTip = ((m_currentTip-1)+tips.count())%tips.count(); +++ ui->didYouKnowTextBrowser->setText(tips.at(m_currentTip)); +++} +++ +++QStringList GettingStartedWelcomePage::tipsOfTheDay() +++{ +++ static QStringList tips; +++ if (tips.isEmpty()) { +++ QString altShortcut = +++#ifdef Q_WS_MAC +++ tr("Cmd", "Shortcut key"); +++#else +++ tr("Alt", "Shortcut key"); +++#endif +++ tips.append(tr("You can switch between Qt Creator's modes using <tt>Ctrl+number</tt>:<ul>" +++ "<li>1 - Welcome</li><li>2 - Edit</li><li>3 - Debug</li><li>4 - Projects</li><li>5 - Help</li>" +++ "<li></li><li>6 - Output</li></ul>")); +++ //:%1 gets replaced by Alt (Win/Unix) or Cmd (Mac) +++ tips.append(tr("You can show and hide the side bar using <tt>%1+0<tt>.").arg(altShortcut)); +++ tips.append(tr("You can fine tune the <tt>Find</tt> function by selecting "Whole Words" " +++ "or "Case Sensitive". Simply click on the icons on the right end of the line edit.")); +++ tips.append(tr("If you add <a href=\"qthelp://com.nokia.qtcreator/doc/creator-external-library-handling.html\"" +++ ">external libraries</a>, Qt Creator will automatically offer syntax highlighting " +++ "and code completion.")); +++ tips.append(tr("The code completion is CamelCase-aware. For example, to complete <tt>namespaceUri</tt> " +++ "you can just type <tt>nU</tt> and hit <tt>Ctrl+Space</tt>.")); +++ tips.append(tr("You can force code completion at any time using <tt>Ctrl+Space</tt>.")); +++ tips.append(tr("You can start Qt Creator with a session by calling <tt>qtcreator <sessionname></tt>.")); +++ tips.append(tr("You can return to edit mode from any other mode at any time by hitting <tt>Escape</tt>.")); +++ //:%1 gets replaced by Alt (Win/Unix) or Cmd (Mac) +++ tips.append(tr("You can switch between the output pane by hitting <tt>%1+n</tt> where n is the number denoted " +++ "on the buttons at the window bottom:" +++ "<ul><li>1 - Build Issues</li><li>2 - Search Results</li><li>3 - Application Output</li>" +++ "<li>4 - Compile Output</li></ul>").arg(altShortcut)); +++ tips.append(tr("You can quickly search methods, classes, help and more using the " +++ "<a href=\"qthelp://com.nokia.qtcreator/doc/creator-navigation.html\">Locator bar</a> (<tt>Ctrl+K</tt>).")); +++ tips.append(tr("You can add custom build steps in the " +++ "<a href=\"qthelp://com.nokia.qtcreator/doc/creator-build-settings.html\">build settings</a>.")); +++ tips.append(tr("Within a session, you can add " +++ "<a href=\"qthelp://com.nokia.qtcreator/doc/creator-build-settings.html#dependencies\">dependencies</a> between projects.")); +++ tips.append(tr("You can set the preferred editor encoding for every project in <tt>Projects -> Editor Settings -> Default Encoding</tt>.")); +++ tips.append(tr("You can modify the binary that is being executed when you press the <tt>Run</tt> button: Add a <tt>Custom Executable</tt> " +++ "by clicking the <tt>+</tt> button in <tt>Projects -> Run Settings -> Run Configuration</tt> and then select the new " +++ "target in the combo box.")); +++ tips.append(tr("You can use Qt Creator with a number of <a href=\"qthelp://com.nokia.qtcreator/doc/creator-version-control.html\">" +++ "revision control systems</a> such as Subversion, Perforce and Git.")); +++ tips.append(tr("In the editor, <tt>F2</tt> toggles declaration and definition while <tt>F4</tt> toggles header file and source file.")); +++ } +++ return tips; +++} +++ +++ +++} // namespace Internal +++} // namespace Qt4ProjectManager ++diff --git a/src/plugins/qt4projectmanager/gettingstartedwelcomepage.h b/src/plugins/qt4projectmanager/gettingstartedwelcomepage.h ++new file mode 100644 ++index 0000000..a40df28 ++--- /dev/null +++++ b/src/plugins/qt4projectmanager/gettingstartedwelcomepage.h ++@@ -0,0 +1,69 @@ +++/************************************************************************** +++** +++** This file is part of Qt Creator +++** +++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +++** +++** Contact: Nokia Corporation (qt-info@nokia.com) +++** +++** Commercial Usage +++** +++** Licensees holding valid Qt Commercial licenses may use this file in +++** accordance with the Qt Commercial License Agreement provided with the +++** Software or, alternatively, in accordance with the terms contained in +++** a written agreement between you and Nokia. +++** +++** GNU Lesser General Public License Usage +++** +++** Alternatively, this file may be used under the terms of the GNU Lesser +++** General Public License version 2.1 as published by the Free Software +++** Foundation and appearing in the file LICENSE.LGPL included in the +++** packaging of this file. Please review the following information to +++** ensure the GNU Lesser General Public License version 2.1 requirements +++** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +++** +++** If you are unsure which license is appropriate for your use, please +++** contact the sales department at http://www.qtsoftware.com/contact. +++** +++**************************************************************************/ +++ +++#ifndef GETTINGSTARTEDWELCOMEPAGE_H +++#define GETTINGSTARTEDWELCOMEPAGE_H +++ +++#include <QWidget> +++ +++namespace Qt4ProjectManager { +++namespace Internal { +++ +++namespace Ui { +++ class GettingStartedWelcomePage; +++} +++ +++class GettingStartedWelcomePage : public QWidget { +++ Q_OBJECT +++public: +++ GettingStartedWelcomePage(QWidget *parent = 0); +++ ~GettingStartedWelcomePage(); +++ +++ public slots: +++ void updateExamples(const QString& examplePath, const QString& demosPath, const QString &sourcePath); +++ +++private slots: +++ void slotOpenHelpPage(const QString& url); +++ void slotOpenContextHelpPage(const QString& url); +++ void slotEnableExampleButton(int); +++ void slotOpenExample(); +++ void slotNextTip(); +++ void slotPrevTip(); +++ +++private: +++ QStringList tipsOfTheDay(); +++ +++ Ui::GettingStartedWelcomePage *ui; +++ int m_currentTip; +++}; +++ +++ +++} // namespace Internal +++} // namespace Qt4ProjectManager +++#endif // GETTINGSTARTEDWELCOMEPAGE_H ++diff --git a/src/plugins/qt4projectmanager/gettingstartedwelcomepage.ui b/src/plugins/qt4projectmanager/gettingstartedwelcomepage.ui ++new file mode 100644 ++index 0000000..8bfebb0 ++--- /dev/null +++++ b/src/plugins/qt4projectmanager/gettingstartedwelcomepage.ui ++@@ -0,0 +1,343 @@ +++<?xml version="1.0" encoding="UTF-8"?> +++<ui version="4.0"> +++ <class>Qt4ProjectManager::Internal::GettingStartedWelcomePage</class> +++ <widget class="QWidget" name="Qt4ProjectManager::Internal::GettingStartedWelcomePage"> +++ <property name="geometry"> +++ <rect> +++ <x>0</x> +++ <y>0</y> +++ <width>646</width> +++ <height>361</height> +++ </rect> +++ </property> +++ <property name="windowTitle"> +++ <string>Form</string> +++ </property> +++ <layout class="QGridLayout" name="gridLayout"> +++ <item row="0" column="0" rowspan="2"> +++ <widget class="QFrame" name="tutorialsFrame"> +++ <property name="sizePolicy"> +++ <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> +++ <horstretch>0</horstretch> +++ <verstretch>0</verstretch> +++ </sizepolicy> +++ </property> +++ <property name="maximumSize"> +++ <size> +++ <width>400</width> +++ <height>16777215</height> +++ </size> +++ </property> +++ <property name="styleSheet"> +++ <string/> +++ </property> +++ <layout class="QGridLayout" name="gridLayout_6"> +++ <item row="0" column="0"> +++ <widget class="QLabel" name="tutorialsTitleLabel"> +++ <property name="sizePolicy"> +++ <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> +++ <horstretch>0</horstretch> +++ <verstretch>0</verstretch> +++ </sizepolicy> +++ </property> +++ <property name="alignment"> +++ <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> +++ </property> +++ </widget> +++ </item> +++ <item row="1" column="0"> +++ <widget class="Core::Utils::WelcomeModeTreeWidget" name="tutorialTreeWidget"> +++ <property name="sizePolicy"> +++ <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> +++ <horstretch>0</horstretch> +++ <verstretch>0</verstretch> +++ </sizepolicy> +++ </property> +++ <property name="focusPolicy"> +++ <enum>Qt::NoFocus</enum> +++ </property> +++ <property name="frameShape"> +++ <enum>QFrame::NoFrame</enum> +++ </property> +++ <property name="selectionMode"> +++ <enum>QAbstractItemView::NoSelection</enum> +++ </property> +++ <property name="verticalScrollMode"> +++ <enum>QAbstractItemView::ScrollPerPixel</enum> +++ </property> +++ <property name="rootIsDecorated"> +++ <bool>false</bool> +++ </property> +++ <property name="uniformRowHeights"> +++ <bool>true</bool> +++ </property> +++ <property name="allColumnsShowFocus"> +++ <bool>true</bool> +++ </property> +++ <property name="columnCount"> +++ <number>2</number> +++ </property> +++ <attribute name="headerVisible"> +++ <bool>false</bool> +++ </attribute> +++ <attribute name="headerDefaultSectionSize"> +++ <number>24</number> +++ </attribute> +++ <attribute name="headerMinimumSectionSize"> +++ <number>0</number> +++ </attribute> +++ <column> +++ <property name="text"> +++ <string notr="true">1</string> +++ </property> +++ </column> +++ <column> +++ <property name="text"> +++ <string notr="true">2</string> +++ </property> +++ </column> +++ </widget> +++ </item> +++ </layout> +++ </widget> +++ </item> +++ <item row="0" column="1"> +++ <widget class="QFrame" name="demosExamplesFrame"> +++ <property name="sizePolicy"> +++ <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> +++ <horstretch>0</horstretch> +++ <verstretch>0</verstretch> +++ </sizepolicy> +++ </property> +++ <property name="maximumSize"> +++ <size> +++ <width>400</width> +++ <height>16777215</height> +++ </size> +++ </property> +++ <property name="styleSheet"> +++ <string/> +++ </property> +++ <layout class="QGridLayout" name="gridLayout_8"> +++ <property name="rightMargin"> +++ <number>8</number> +++ </property> +++ <property name="horizontalSpacing"> +++ <number>0</number> +++ </property> +++ <item row="0" column="0" colspan="4"> +++ <widget class="QLabel" name="demoTitleLabel"> +++ <property name="alignment"> +++ <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> +++ </property> +++ </widget> +++ </item> +++ <item row="1" column="0"> +++ <widget class="QComboBox" name="examplesComboBox"> +++ <property name="enabled"> +++ <bool>false</bool> +++ </property> +++ <property name="sizePolicy"> +++ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred"> +++ <horstretch>0</horstretch> +++ <verstretch>0</verstretch> +++ </sizepolicy> +++ </property> +++ <item> +++ <property name="text"> +++ <string>Examples not installed</string> +++ </property> +++ </item> +++ </widget> +++ </item> +++ <item row="1" column="2"> +++ <widget class="QToolButton" name="openExampleButton"> +++ <property name="enabled"> +++ <bool>false</bool> +++ </property> +++ <property name="sizePolicy"> +++ <sizepolicy hsizetype="Fixed" vsizetype="Preferred"> +++ <horstretch>0</horstretch> +++ <verstretch>0</verstretch> +++ </sizepolicy> +++ </property> +++ <property name="text"> +++ <string>Open</string> +++ </property> +++ </widget> +++ </item> +++ <item row="1" column="1"> +++ <spacer name="horizontalSpacer"> +++ <property name="orientation"> +++ <enum>Qt::Horizontal</enum> +++ </property> +++ <property name="sizeType"> +++ <enum>QSizePolicy::Fixed</enum> +++ </property> +++ <property name="sizeHint" stdset="0"> +++ <size> +++ <width>6</width> +++ <height>6</height> +++ </size> +++ </property> +++ </spacer> +++ </item> +++ </layout> +++ </widget> +++ </item> +++ <item row="1" column="1"> +++ <widget class="QFrame" name="didyouKnowFrame"> +++ <property name="sizePolicy"> +++ <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> +++ <horstretch>0</horstretch> +++ <verstretch>0</verstretch> +++ </sizepolicy> +++ </property> +++ <property name="maximumSize"> +++ <size> +++ <width>400</width> +++ <height>16777215</height> +++ </size> +++ </property> +++ <property name="styleSheet"> +++ <string/> +++ </property> +++ <layout class="QGridLayout" name="gridLayout_11"> +++ <property name="rightMargin"> +++ <number>9</number> +++ </property> +++ <item row="0" column="0"> +++ <widget class="QLabel" name="didYouKnowTitleLabel"> +++ <property name="sizePolicy"> +++ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Maximum"> +++ <horstretch>0</horstretch> +++ <verstretch>0</verstretch> +++ </sizepolicy> +++ </property> +++ <property name="alignment"> +++ <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> +++ </property> +++ </widget> +++ </item> +++ <item row="1" column="0" colspan="2"> +++ <widget class="QTextBrowser" name="didYouKnowTextBrowser"> +++ <property name="sizePolicy"> +++ <sizepolicy hsizetype="Minimum" vsizetype="Preferred"> +++ <horstretch>0</horstretch> +++ <verstretch>0</verstretch> +++ </sizepolicy> +++ </property> +++ <property name="frameShape"> +++ <enum>QFrame::NoFrame</enum> +++ </property> +++ <property name="frameShadow"> +++ <enum>QFrame::Plain</enum> +++ </property> +++ <property name="verticalScrollBarPolicy"> +++ <enum>Qt::ScrollBarAlwaysOff</enum> +++ </property> +++ <property name="horizontalScrollBarPolicy"> +++ <enum>Qt::ScrollBarAlwaysOff</enum> +++ </property> +++ <property name="openExternalLinks"> +++ <bool>true</bool> +++ </property> +++ </widget> +++ </item> +++ <item row="0" column="1"> +++ <layout class="QGridLayout" name="gridLayout_10"> +++ <property name="spacing"> +++ <number>0</number> +++ </property> +++ <item row="0" column="0" colspan="2"> +++ <spacer name="verticalSpacer_4"> +++ <property name="orientation"> +++ <enum>Qt::Vertical</enum> +++ </property> +++ <property name="sizeType"> +++ <enum>QSizePolicy::Preferred</enum> +++ </property> +++ <property name="sizeHint" stdset="0"> +++ <size> +++ <width>20</width> +++ <height>2</height> +++ </size> +++ </property> +++ </spacer> +++ </item> +++ <item row="1" column="0"> +++ <widget class="QToolButton" name="prevTipBtn"> +++ <property name="styleSheet"> +++ <string notr="true">QToolButton{ +++ border-right:solid 0 px; +++ height:16px; +++ width:12px; +++} +++</string> +++ </property> +++ <property name="text"> +++ <string/> +++ </property> +++ <property name="icon"> +++ <iconset resource="../welcome/welcome.qrc"> +++ <normaloff>:/welcome/images/arrow-left.png</normaloff>:/welcome/images/arrow-left.png</iconset> +++ </property> +++ <property name="arrowType"> +++ <enum>Qt::NoArrow</enum> +++ </property> +++ </widget> +++ </item> +++ <item row="1" column="1"> +++ <widget class="QToolButton" name="nextTipBtn"> +++ <property name="styleSheet"> +++ <string notr="true">QToolButton{ +++ border-left:solid 0 px; +++ height:16px; +++ width:12px; +++} +++</string> +++ </property> +++ <property name="text"> +++ <string/> +++ </property> +++ <property name="icon"> +++ <iconset resource="../welcome/welcome.qrc"> +++ <normaloff>:/welcome/images/arrow-right.png</normaloff>:/welcome/images/arrow-right.png</iconset> +++ </property> +++ <property name="arrowType"> +++ <enum>Qt::NoArrow</enum> +++ </property> +++ </widget> +++ </item> +++ <item row="2" column="0" colspan="2"> +++ <spacer name="verticalSpacer_3"> +++ <property name="orientation"> +++ <enum>Qt::Vertical</enum> +++ </property> +++ <property name="sizeHint" stdset="0"> +++ <size> +++ <width>20</width> +++ <height>2</height> +++ </size> +++ </property> +++ </spacer> +++ </item> +++ </layout> +++ </item> +++ </layout> +++ </widget> +++ </item> +++ </layout> +++ </widget> +++ <customwidgets> +++ <customwidget> +++ <class>Core::Utils::WelcomeModeTreeWidget</class> +++ <extends>QTreeWidget</extends> +++ <header>utils/welcomemodetreewidget.h</header> +++ </customwidget> +++ </customwidgets> +++ <resources> +++ <include location="../welcome/welcome.qrc"/> +++ </resources> +++ <connections/> +++</ui> ++diff --git a/src/plugins/qt4projectmanager/gettingstartedwelcomeplugin.cpp b/src/plugins/qt4projectmanager/gettingstartedwelcomeplugin.cpp ++new file mode 100644 ++index 0000000..a68f80d ++--- /dev/null +++++ b/src/plugins/qt4projectmanager/gettingstartedwelcomeplugin.cpp ++@@ -0,0 +1,47 @@ +++/************************************************************************** +++** +++** This file is part of Qt Creator +++** +++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +++** +++** Contact: Nokia Corporation (qt-info@nokia.com) +++** +++** Commercial Usage +++** +++** Licensees holding valid Qt Commercial licenses may use this file in +++** accordance with the Qt Commercial License Agreement provided with the +++** Software or, alternatively, in accordance with the terms contained in +++** a written agreement between you and Nokia. +++** +++** GNU Lesser General Public License Usage +++** +++** Alternatively, this file may be used under the terms of the GNU Lesser +++** General Public License version 2.1 as published by the Free Software +++** Foundation and appearing in the file LICENSE.LGPL included in the +++** packaging of this file. Please review the following information to +++** ensure the GNU Lesser General Public License version 2.1 requirements +++** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +++** +++** If you are unsure which license is appropriate for your use, please +++** contact the sales department at http://www.qtsoftware.com/contact. +++** +++**************************************************************************/ +++ +++#include "gettingstartedwelcomeplugin.h" +++#include "gettingstartedwelcomepage.h" +++ +++namespace Qt4ProjectManager { +++namespace Internal { +++ +++GettingStartedWelcomePlugin::GettingStartedWelcomePlugin() +++ : m_page(new GettingStartedWelcomePage) +++{ +++} +++ +++QWidget* GettingStartedWelcomePlugin::page() +++{ +++ return m_page; +++} +++ +++} // namespace Internal +++} // namespace Qt4ProjectManager ++diff --git a/src/plugins/qt4projectmanager/gettingstartedwelcomeplugin.h b/src/plugins/qt4projectmanager/gettingstartedwelcomeplugin.h ++new file mode 100644 ++index 0000000..f8760df ++--- /dev/null +++++ b/src/plugins/qt4projectmanager/gettingstartedwelcomeplugin.h ++@@ -0,0 +1,56 @@ +++/************************************************************************** +++** +++** This file is part of Qt Creator +++** +++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +++** +++** Contact: Nokia Corporation (qt-info@nokia.com) +++** +++** Commercial Usage +++** +++** Licensees holding valid Qt Commercial licenses may use this file in +++** accordance with the Qt Commercial License Agreement provided with the +++** Software or, alternatively, in accordance with the terms contained in +++** a written agreement between you and Nokia. +++** +++** GNU Lesser General Public License Usage +++** +++** Alternatively, this file may be used under the terms of the GNU Lesser +++** General Public License version 2.1 as published by the Free Software +++** Foundation and appearing in the file LICENSE.LGPL included in the +++** packaging of this file. Please review the following information to +++** ensure the GNU Lesser General Public License version 2.1 requirements +++** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +++** +++** If you are unsure which license is appropriate for your use, please +++** contact the sales department at http://www.qtsoftware.com/contact. +++** +++**************************************************************************/ +++ +++#ifndef GETTINGSTARTEDWELCOMEPLUGIN_H +++#define GETTINGSTARTEDWELCOMEPLUGIN_H +++ +++#include <extensionsystem/iwelcomeplugin.h> +++ +++namespace Qt4ProjectManager { +++namespace Internal { +++ +++class GettingStartedWelcomePage; +++ +++class GettingStartedWelcomePlugin : public ExtensionSystem::IWelcomePlugin +++{ +++public: +++ GettingStartedWelcomePlugin(); +++ +++ QWidget *page(); +++ QString title() const { return tr("Getting Started");} +++ int priority() const { return 10; } +++ +++private: +++ GettingStartedWelcomePage *m_page; +++}; +++ +++} // namespace Internal +++} // namespace Qt4ProjectManager +++ +++#endif // GETTINGSTARTEDWELCOMEPLUGIN_H ++diff --git a/src/plugins/qt4projectmanager/qt4projectmanager.pro b/src/plugins/qt4projectmanager/qt4projectmanager.pro ++index 6b69139..c9335d5 100644 ++--- a/src/plugins/qt4projectmanager/qt4projectmanager.pro +++++ b/src/plugins/qt4projectmanager/qt4projectmanager.pro ++@@ -3,7 +3,6 @@ TARGET = Qt4ProjectManager ++ QT += network ++ include(../../qtcreatorplugin.pri) ++ include(qt4projectmanager_dependencies.pri) ++- ++ HEADERS += qt4projectmanagerplugin.h \ ++ qt4projectmanager.h \ ++ qt4project.h \ ++@@ -39,7 +38,9 @@ HEADERS += qt4projectmanagerplugin.h \ ++ qtversionmanager.h \ ++ qtoptionspage.h \ ++ qtuicodemodelsupport.h \ ++- externaleditors.h +++ externaleditors.h \ +++ gettingstartedwelcomepage.h \ +++ gettingstartedwelcomeplugin.h ++ SOURCES += qt4projectmanagerplugin.cpp \ ++ qt4projectmanager.cpp \ ++ qt4project.cpp \ ++@@ -73,19 +74,20 @@ SOURCES += qt4projectmanagerplugin.cpp \ ++ qtversionmanager.cpp \ ++ qtoptionspage.cpp \ ++ qtuicodemodelsupport.cpp \ ++- externaleditors.cpp +++ externaleditors.cpp \ +++ gettingstartedwelcomepage.cpp \ +++ gettingstartedwelcomeplugin.cpp ++ FORMS += makestep.ui \ ++ qmakestep.ui \ ++ qt4projectconfigwidget.ui \ ++ embeddedpropertiespage.ui \ ++ qtversionmanager.ui \ ++- showbuildlog.ui +++ showbuildlog.ui \ +++ gettingstartedwelcomepage.ui ++ RESOURCES += qt4projectmanager.qrc \ ++ wizards/wizards.qrc ++- ++ include(../../shared/proparser/proparser.pri) ++ include(qt-s60/qt-s60.pri) ++ include(customwidgetwizard/customwidgetwizard.pri) ++- ++ DEFINES += QT_NO_CAST_TO_ASCII ++ OTHER_FILES += Qt4ProjectManager.pluginspec ++diff --git a/src/plugins/qt4projectmanager/qt4projectmanager_dependencies.pri b/src/plugins/qt4projectmanager/qt4projectmanager_dependencies.pri ++index e1bd37d..9a49315 100644 ++--- a/src/plugins/qt4projectmanager/qt4projectmanager_dependencies.pri +++++ b/src/plugins/qt4projectmanager/qt4projectmanager_dependencies.pri ++@@ -3,4 +3,3 @@ include(../../plugins/cpptools/cpptools.pri) ++ include(../../plugins/cppeditor/cppeditor.pri) ++ include(../../plugins/help/help.pri) ++ include(../../plugins/designer/designer.pri) ++-include(../../plugins/welcome/welcome.pri) ++diff --git a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp ++index f740c27..8c87b8d 100644 ++--- a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp +++++ b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp ++@@ -44,6 +44,8 @@ ++ #include "qtversionmanager.h" ++ #include "qtoptionspage.h" ++ #include "externaleditors.h" +++#include "gettingstartedwelcomeplugin.h" +++#include "gettingstartedwelcomepage.h" ++ ++ #ifdef QTCREATOR_WITH_S60 ++ #include "qt-s60/s60manager.h" ++@@ -82,6 +84,8 @@ Qt4ProjectManagerPlugin::~Qt4ProjectManagerPlugin() ++ delete m_proFileEditorFactory; ++ removeObject(m_qt4ProjectManager); ++ delete m_qt4ProjectManager; +++ removeObject(m_welcomePlugin); +++ delete m_welcomePlugin; ++ } ++ /* ++ static Core::Command *createSeparator(Core::ActionManager *am, ++@@ -106,9 +110,16 @@ bool Qt4ProjectManagerPlugin::initialize(const QStringList &arguments, QString * ++ m_projectExplorer = ProjectExplorer::ProjectExplorerPlugin::instance(); ++ Core::ActionManager *am = core->actionManager(); ++ ++- addAutoReleasedObject(new QtVersionManager()); +++ QtVersionManager *mgr = new QtVersionManager(); +++ addAutoReleasedObject(mgr); ++ addAutoReleasedObject(new QtOptionsPage()); ++ +++ m_welcomePlugin = new GettingStartedWelcomePlugin; +++ addObject(m_welcomePlugin); +++ GettingStartedWelcomePage *gswp = +++ static_cast<GettingStartedWelcomePage*>(m_welcomePlugin->page()); +++ connect(mgr, SIGNAL(updateExamples(QString,QString,QString)), +++ gswp, SLOT(updateExamples(QString,QString,QString))); ++ ++ //create and register objects ++ m_qt4ProjectManager = new Qt4Manager(this); ++diff --git a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.h b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.h ++index 18781bc..84a5fbd 100644 ++--- a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.h +++++ b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.h ++@@ -49,6 +49,7 @@ class MakeStepFactory; ++ class GccParserFactory; ++ class MsvcParserFactory; ++ class EmbeddedPropertiesPage; +++class GettingStartedWelcomePlugin; ++ ++ class Qt4ProjectManagerPlugin : public ExtensionSystem::IPlugin ++ { ++@@ -81,6 +82,7 @@ private: ++ ++ QAction *m_runQMakeAction; ++ QAction *m_runQMakeActionContextMenu; +++ GettingStartedWelcomePlugin *m_welcomePlugin; ++ }; ++ ++ } // namespace Internal ++diff --git a/src/plugins/qt4projectmanager/qtversionmanager.cpp b/src/plugins/qt4projectmanager/qtversionmanager.cpp ++index aa65520..6bce576 100644 ++--- a/src/plugins/qt4projectmanager/qtversionmanager.cpp +++++ b/src/plugins/qt4projectmanager/qtversionmanager.cpp ++@@ -42,7 +42,6 @@ ++ #include <coreplugin/coreconstants.h> ++ #include <coreplugin/icore.h> ++ #include <coreplugin/modemanager.h> ++-#include <welcome/welcomemode.h> ++ #include <extensionsystem/pluginmanager.h> ++ #include <help/helpplugin.h> ++ #include <utils/qtcassert.h> ++@@ -51,6 +50,7 @@ ++ #include <QtCore/QProcess> ++ #include <QtCore/QSettings> ++ #include <QtCore/QTime> +++#include <QtCore/QTimer> ++ #include <QtGui/QApplication> ++ #include <QtGui/QDesktopServices> ++ ++@@ -122,7 +122,8 @@ QtVersionManager::QtVersionManager() ++ writeVersionsIntoSettings(); ++ ++ updateDocumentation(); ++- updateExamples(); +++ // cannot call from ctor, needs to get connected extenernally first +++ QTimer::singleShot(0, this, SLOT(updateExamples())); ++ } ++ ++ QtVersionManager::~QtVersionManager() ++@@ -185,9 +186,7 @@ void QtVersionManager::updateExamples() ++ if (version->hasDemos()) ++ demosPath = version->demosPath(); ++ if (!examplesPath.isEmpty() && !demosPath.isEmpty()) { ++- if (Welcome::WelcomeMode *welcomeMode = qobject_cast<Welcome::WelcomeMode*> ++- (Core::ICore::instance()->modeManager()->mode(Core::Constants::MODE_WELCOME))) ++- welcomeMode->updateExamples(examplesPath, demosPath, version->sourcePath()); +++ emit updateExamples(examplesPath, demosPath, version->sourcePath()); ++ return; ++ } ++ } ++diff --git a/src/plugins/qt4projectmanager/qtversionmanager.h b/src/plugins/qt4projectmanager/qtversionmanager.h ++index 0f2144c..fb7a33b 100644 ++--- a/src/plugins/qt4projectmanager/qtversionmanager.h +++++ b/src/plugins/qt4projectmanager/qtversionmanager.h ++@@ -201,6 +201,10 @@ public: ++ signals: ++ void defaultQtVersionChanged(); ++ void qtVersionsChanged(); +++ void updateExamples(QString, QString, QString); +++ +++private slots: +++ void updateExamples(); ++ private: ++ static QString findQMakeLine(const QString &directory); ++ static QString trimLine(const QString line); ++@@ -215,7 +219,6 @@ private: ++ void addNewVersionsFromInstaller(); ++ void updateSystemVersion(); ++ void updateDocumentation(); ++- void updateExamples(); ++ ++ static int indexOfVersionInList(const QtVersion * const version, const QList<QtVersion *> &list); ++ void updateUniqueIdToIndexMap(); ++diff --git a/src/plugins/welcome/communitywelcomepage.cpp b/src/plugins/welcome/communitywelcomepage.cpp ++new file mode 100644 ++index 0000000..d3127e0 ++--- /dev/null +++++ b/src/plugins/welcome/communitywelcomepage.cpp ++@@ -0,0 +1,93 @@ +++/************************************************************************** +++** +++** This file is part of Qt Creator +++** +++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +++** +++** Contact: Nokia Corporation (qt-info@nokia.com) +++** +++** Commercial Usage +++** +++** Licensees holding valid Qt Commercial licenses may use this file in +++** accordance with the Qt Commercial License Agreement provided with the +++** Software or, alternatively, in accordance with the terms contained in +++** a written agreement between you and Nokia. +++** +++** GNU Lesser General Public License Usage +++** +++** Alternatively, this file may be used under the terms of the GNU Lesser +++** General Public License version 2.1 as published by the Free Software +++** Foundation and appearing in the file LICENSE.LGPL included in the +++** packaging of this file. Please review the following information to +++** ensure the GNU Lesser General Public License version 2.1 requirements +++** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +++** +++** If you are unsure which license is appropriate for your use, please +++** contact the sales department at http://www.qtsoftware.com/contact. +++** +++**************************************************************************/ +++ +++#include "communitywelcomepage.h" +++#include "ui_communitywelcomepage.h" +++ +++#include "rssfetcher.h" +++ +++#include <QtGui/QDesktopServices> +++ +++namespace Welcome { +++namespace Internal { +++ +++// TODO: remove +++static QString titleLabel(const QString &text) +++{ +++ // TODO: do not hardcode here +++ QString rc = QLatin1String( +++ "<html><head><style type=\"text/css\">p, li { white-space: pre-wrap; }</style></head>" +++ "<body style=\" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;\">" +++ "<p style=\" margin-top:16px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">" +++ "<span style=\" font-size:x-large; color:#555555;\">"); +++ rc += text; +++ rc += QLatin1String("</span></p><hr/></body></html>"); +++ return rc; +++} +++ +++CommunityWelcomePage::CommunityWelcomePage(QWidget *parent) : +++ QWidget(parent), +++ ui(new Ui::CommunityWelcomePage), +++ m_rssFetcher(new RSSFetcher(7)) +++{ +++ ui->setupUi(this); +++ ui->labsTitleLabel->setText(titleLabel(tr("News From the Qt Labs"))); +++ ui->sitesTitleLabel->setText(titleLabel(tr("Qt Websites"))); +++ +++ connect(ui->newsTreeWidget, SIGNAL(activated(QString)), SLOT(slotUrlClicked(QString))); +++ connect(ui->sitesTreeWidget, SIGNAL(activated(QString)), SLOT(slotUrlClicked(QString))); +++ +++ connect(m_rssFetcher, SIGNAL(newsItemReady(QString, QString, QString)), +++ ui->newsTreeWidget, SLOT(slotAddNewsItem(QString, QString, QString))); +++ //: Add localized feed here only if one exists +++ m_rssFetcher->fetch(QUrl(tr("http://labs.trolltech.com/blogs/feed"))); +++ +++ ui->sitesTreeWidget->addItem(tr("Qt Home"), QLatin1String("http://qtsoftware.com")); +++ ui->sitesTreeWidget->addItem(tr("Qt Labs"), QLatin1String("http://labs.trolltech.com")); +++ ui->sitesTreeWidget->addItem(tr("Qt Git Hosting"), QLatin1String("http://qt.gitorious.org")); +++ ui->sitesTreeWidget->addItem(tr("Qt Centre"), QLatin1String("http://www.qtcentre.org")); +++ ui->sitesTreeWidget->addItem(tr("Qt for S60 at Forum Nokia"), QLatin1String("http://discussion.forum.nokia.com/forum/forumdisplay.php?f=196")); +++} +++ +++CommunityWelcomePage::~CommunityWelcomePage() +++{ +++ delete m_rssFetcher; +++ delete ui; +++} +++ +++ +++void CommunityWelcomePage::slotUrlClicked(const QString &data) +++{ +++ QDesktopServices::openUrl(QUrl(data)); +++} +++ +++ +++ +++} // namespace Internal +++} // namespace Welcome ++diff --git a/src/plugins/welcome/communitywelcomepage.h b/src/plugins/welcome/communitywelcomepage.h ++new file mode 100644 ++index 0000000..d9c81b2 ++--- /dev/null +++++ b/src/plugins/welcome/communitywelcomepage.h ++@@ -0,0 +1,64 @@ +++/************************************************************************** +++** +++** This file is part of Qt Creator +++** +++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +++** +++** Contact: Nokia Corporation (qt-info@nokia.com) +++** +++** Commercial Usage +++** +++** Licensees holding valid Qt Commercial licenses may use this file in +++** accordance with the Qt Commercial License Agreement provided with the +++** Software or, alternatively, in accordance with the terms contained in +++** a written agreement between you and Nokia. +++** +++** GNU Lesser General Public License Usage +++** +++** Alternatively, this file may be used under the terms of the GNU Lesser +++** General Public License version 2.1 as published by the Free Software +++** Foundation and appearing in the file LICENSE.LGPL included in the +++** packaging of this file. Please review the following information to +++** ensure the GNU Lesser General Public License version 2.1 requirements +++** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +++** +++** If you are unsure which license is appropriate for your use, please +++** contact the sales department at http://www.qtsoftware.com/contact. +++** +++**************************************************************************/ +++ +++#ifndef COMMUNITYWELCOMEPAGE_H +++#define COMMUNITYWELCOMEPAGE_H +++ +++#include <QWidget> +++ +++namespace Welcome { +++namespace Internal { +++ +++class RSSFetcher; +++ +++namespace Ui { +++ class CommunityWelcomePage; +++} +++ +++class CommunityWelcomePage : public QWidget +++{ +++ Q_OBJECT +++ +++public: +++ CommunityWelcomePage(QWidget *parent = 0); +++ ~CommunityWelcomePage(); +++ +++private slots: +++ void slotUrlClicked(const QString &data); +++ +++ +++private: +++ RSSFetcher *m_rssFetcher; +++ Ui::CommunityWelcomePage *ui; +++}; +++ +++ +++} // namespace Internal +++} // namespace Welcome +++#endif // COMMUNITYWELCOMEPAGE_H ++diff --git a/src/plugins/welcome/communitywelcomepage.ui b/src/plugins/welcome/communitywelcomepage.ui ++new file mode 100644 ++index 0000000..707412c ++--- /dev/null +++++ b/src/plugins/welcome/communitywelcomepage.ui ++@@ -0,0 +1,190 @@ +++<?xml version="1.0" encoding="UTF-8"?> +++<ui version="4.0"> +++ <class>Welcome::Internal::CommunityWelcomePage</class> +++ <widget class="QWidget" name="Welcome::Internal::CommunityWelcomePage"> +++ <property name="geometry"> +++ <rect> +++ <x>0</x> +++ <y>0</y> +++ <width>667</width> +++ <height>352</height> +++ </rect> +++ </property> +++ <property name="windowTitle"> +++ <string>Form</string> +++ </property> +++ <layout class="QHBoxLayout" name="horizontalLayout"> +++ <item> +++ <widget class="QFrame" name="labsFrame"> +++ <property name="frameShape"> +++ <enum>QFrame::NoFrame</enum> +++ </property> +++ <property name="frameShadow"> +++ <enum>QFrame::Plain</enum> +++ </property> +++ <layout class="QVBoxLayout" name="verticalLayout_2"> +++ <item> +++ <widget class="QLabel" name="labsTitleLabel"> +++ <property name="sizePolicy"> +++ <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> +++ <horstretch>0</horstretch> +++ <verstretch>0</verstretch> +++ </sizepolicy> +++ </property> +++ <property name="alignment"> +++ <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> +++ </property> +++ </widget> +++ </item> +++ <item> +++ <widget class="Core::Utils::WelcomeModeTreeWidget" name="newsTreeWidget"> +++ <property name="sizePolicy"> +++ <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> +++ <horstretch>0</horstretch> +++ <verstretch>0</verstretch> +++ </sizepolicy> +++ </property> +++ <property name="minimumSize"> +++ <size> +++ <width>340</width> +++ <height>0</height> +++ </size> +++ </property> +++ <property name="focusPolicy"> +++ <enum>Qt::NoFocus</enum> +++ </property> +++ <property name="frameShape"> +++ <enum>QFrame::NoFrame</enum> +++ </property> +++ <property name="selectionMode"> +++ <enum>QAbstractItemView::NoSelection</enum> +++ </property> +++ <property name="verticalScrollMode"> +++ <enum>QAbstractItemView::ScrollPerPixel</enum> +++ </property> +++ <property name="rootIsDecorated"> +++ <bool>false</bool> +++ </property> +++ <property name="uniformRowHeights"> +++ <bool>true</bool> +++ </property> +++ <property name="allColumnsShowFocus"> +++ <bool>true</bool> +++ </property> +++ <property name="columnCount"> +++ <number>2</number> +++ </property> +++ <attribute name="headerVisible"> +++ <bool>false</bool> +++ </attribute> +++ <attribute name="headerDefaultSectionSize"> +++ <number>24</number> +++ </attribute> +++ <attribute name="headerMinimumSectionSize"> +++ <number>0</number> +++ </attribute> +++ <column> +++ <property name="text"> +++ <string notr="true">1</string> +++ </property> +++ </column> +++ <column> +++ <property name="text"> +++ <string notr="true">2</string> +++ </property> +++ </column> +++ </widget> +++ </item> +++ </layout> +++ </widget> +++ </item> +++ <item> +++ <widget class="QFrame" name="sitesFrame"> +++ <property name="frameShape"> +++ <enum>QFrame::NoFrame</enum> +++ </property> +++ <property name="frameShadow"> +++ <enum>QFrame::Plain</enum> +++ </property> +++ <layout class="QVBoxLayout" name="verticalLayout_3"> +++ <item> +++ <widget class="QLabel" name="sitesTitleLabel"> +++ <property name="sizePolicy"> +++ <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> +++ <horstretch>0</horstretch> +++ <verstretch>0</verstretch> +++ </sizepolicy> +++ </property> +++ <property name="alignment"> +++ <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> +++ </property> +++ </widget> +++ </item> +++ <item> +++ <widget class="Core::Utils::WelcomeModeTreeWidget" name="sitesTreeWidget"> +++ <property name="sizePolicy"> +++ <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> +++ <horstretch>0</horstretch> +++ <verstretch>0</verstretch> +++ </sizepolicy> +++ </property> +++ <property name="focusPolicy"> +++ <enum>Qt::NoFocus</enum> +++ </property> +++ <property name="frameShape"> +++ <enum>QFrame::NoFrame</enum> +++ </property> +++ <property name="selectionMode"> +++ <enum>QAbstractItemView::NoSelection</enum> +++ </property> +++ <property name="verticalScrollMode"> +++ <enum>QAbstractItemView::ScrollPerPixel</enum> +++ </property> +++ <property name="rootIsDecorated"> +++ <bool>false</bool> +++ </property> +++ <property name="uniformRowHeights"> +++ <bool>true</bool> +++ </property> +++ <property name="allColumnsShowFocus"> +++ <bool>true</bool> +++ </property> +++ <property name="columnCount"> +++ <number>2</number> +++ </property> +++ <attribute name="headerVisible"> +++ <bool>false</bool> +++ </attribute> +++ <attribute name="headerDefaultSectionSize"> +++ <number>24</number> +++ </attribute> +++ <attribute name="headerMinimumSectionSize"> +++ <number>0</number> +++ </attribute> +++ <column> +++ <property name="text"> +++ <string notr="true">1</string> +++ </property> +++ </column> +++ <column> +++ <property name="text"> +++ <string notr="true">2</string> +++ </property> +++ </column> +++ </widget> +++ </item> +++ </layout> +++ </widget> +++ </item> +++ </layout> +++ </widget> +++ <customwidgets> +++ <customwidget> +++ <class>Core::Utils::WelcomeModeTreeWidget</class> +++ <extends>QTreeWidget</extends> +++ <header>utils/welcomemodetreewidget.h</header> +++ </customwidget> +++ </customwidgets> +++ <resources/> +++ <connections/> +++</ui> ++diff --git a/src/plugins/welcome/communitywelcomeplugin.cpp b/src/plugins/welcome/communitywelcomeplugin.cpp ++new file mode 100644 ++index 0000000..7a0dd61 ++--- /dev/null +++++ b/src/plugins/welcome/communitywelcomeplugin.cpp ++@@ -0,0 +1,47 @@ +++/************************************************************************** +++** +++** This file is part of Qt Creator +++** +++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +++** +++** Contact: Nokia Corporation (qt-info@nokia.com) +++** +++** Commercial Usage +++** +++** Licensees holding valid Qt Commercial licenses may use this file in +++** accordance with the Qt Commercial License Agreement provided with the +++** Software or, alternatively, in accordance with the terms contained in +++** a written agreement between you and Nokia. +++** +++** GNU Lesser General Public License Usage +++** +++** Alternatively, this file may be used under the terms of the GNU Lesser +++** General Public License version 2.1 as published by the Free Software +++** Foundation and appearing in the file LICENSE.LGPL included in the +++** packaging of this file. Please review the following information to +++** ensure the GNU Lesser General Public License version 2.1 requirements +++** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +++** +++** If you are unsure which license is appropriate for your use, please +++** contact the sales department at http://www.qtsoftware.com/contact. +++** +++**************************************************************************/ +++ +++#include "communitywelcomeplugin.h" +++#include "communitywelcomepage.h" +++ +++namespace Welcome { +++namespace Internal { +++ +++CommunityWelcomePlugin::CommunityWelcomePlugin() +++ : m_page(new CommunityWelcomePage) +++{ +++} +++ +++QWidget* CommunityWelcomePlugin::page() +++{ +++ return m_page; +++} +++ +++} // namespace Internal +++} // namespace WelcomePlugin ++diff --git a/src/plugins/welcome/communitywelcomeplugin.h b/src/plugins/welcome/communitywelcomeplugin.h ++new file mode 100644 ++index 0000000..fd97e0e ++--- /dev/null +++++ b/src/plugins/welcome/communitywelcomeplugin.h ++@@ -0,0 +1,60 @@ +++/************************************************************************** +++** +++** This file is part of Qt Creator +++** +++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +++** +++** Contact: Nokia Corporation (qt-info@nokia.com) +++** +++** Commercial Usage +++** +++** Licensees holding valid Qt Commercial licenses may use this file in +++** accordance with the Qt Commercial License Agreement provided with the +++** Software or, alternatively, in accordance with the terms contained in +++** a written agreement between you and Nokia. +++** +++** GNU Lesser General Public License Usage +++** +++** Alternatively, this file may be used under the terms of the GNU Lesser +++** General Public License version 2.1 as published by the Free Software +++** Foundation and appearing in the file LICENSE.LGPL included in the +++** packaging of this file. Please review the following information to +++** ensure the GNU Lesser General Public License version 2.1 requirements +++** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +++** +++** If you are unsure which license is appropriate for your use, please +++** contact the sales department at http://www.qtsoftware.com/contact. +++** +++**************************************************************************/ +++ +++#ifndef COMMUNITYWELCOMEPLUGIN_H +++#define COMMUNITYWELCOMEPLUGIN_H +++ +++#include "welcome_global.h" +++ +++#include <extensionsystem/iwelcomeplugin.h> +++ +++namespace Welcome { +++namespace Internal { +++ +++class CommunityWelcomePage; +++ +++class WELCOME_EXPORT CommunityWelcomePlugin : public ExtensionSystem::IWelcomePlugin +++{ +++ Q_OBJECT +++public: +++ CommunityWelcomePlugin(); +++ +++ QWidget *page(); +++ QString title() const { return tr("Community"); } +++ int priority() const { return 30; } +++ +++private: +++ CommunityWelcomePage *m_page; +++ +++}; +++ +++} // namespace Internal +++} // namespace Welcome +++ +++#endif // COMMUNITYWELCOMEPLUGIN_H ++diff --git a/src/plugins/welcome/rssfetcher.cpp b/src/plugins/welcome/rssfetcher.cpp ++index f5fc756..7254c2d 100644 ++--- a/src/plugins/welcome/rssfetcher.cpp +++++ b/src/plugins/welcome/rssfetcher.cpp ++@@ -43,7 +43,7 @@ ++ #include <sys/utsname.h> ++ #endif ++ ++-using namespace Welcome; +++using namespace Welcome::Internal; ++ ++ static const QString getOsString() ++ { ++diff --git a/src/plugins/welcome/rssfetcher.h b/src/plugins/welcome/rssfetcher.h ++index 9267fdb..54ef87d 100644 ++--- a/src/plugins/welcome/rssfetcher.h +++++ b/src/plugins/welcome/rssfetcher.h ++@@ -35,6 +35,7 @@ ++ #include <QtNetwork/QHttp> ++ ++ namespace Welcome { +++namespace Internal { ++ ++ class RSSFetcher : public QObject ++ { ++@@ -69,6 +70,7 @@ private: ++ }; ++ ++ } // namespace Welcome +++} // namespace Internal ++ ++ #endif // RSSFETCHER_H ++ ++diff --git a/src/plugins/welcome/welcome.pro b/src/plugins/welcome/welcome.pro ++index 11d48e8..b5bbd1c 100644 ++--- a/src/plugins/welcome/welcome.pro +++++ b/src/plugins/welcome/welcome.pro ++@@ -5,11 +5,16 @@ include(../../qtcreatorplugin.pri) ++ include(../../plugins/coreplugin/coreplugin.pri) ++ HEADERS += welcomeplugin.h \ ++ welcomemode.h \ ++- rssfetcher.h +++ rssfetcher.h \ +++ communitywelcomepage.h \ +++ communitywelcomeplugin.h ++ SOURCES += welcomeplugin.cpp \ ++ welcomemode.cpp \ ++- rssfetcher.cpp ++-FORMS += welcomemode.ui +++ rssfetcher.cpp \ +++ communitywelcomepage.cpp \ +++ communitywelcomeplugin.cpp +++FORMS += welcomemode.ui \ +++ communitywelcomepage.ui ++ RESOURCES += welcome.qrc ++ DEFINES += WELCOME_LIBRARY ++ OTHER_FILES += Welcome.pluginspec ++diff --git a/src/plugins/welcome/welcomemode.cpp b/src/plugins/welcome/welcomemode.cpp ++index bc6a876..b47cb36 100644 ++--- a/src/plugins/welcome/welcomemode.cpp +++++ b/src/plugins/welcome/welcomemode.cpp ++@@ -28,11 +28,10 @@ ++ **************************************************************************/ ++ ++ #include "welcomemode.h" ++-#include "rssfetcher.h" +++#include <extensionsystem/pluginmanager.h> +++#include <extensionsystem/iwelcomeplugin.h> ++ ++ #include <coreplugin/icore.h> ++-#include <coreplugin/dialogs/iwizard.h> ++- ++ #include <coreplugin/coreconstants.h> ++ #include <coreplugin/uniqueidmanager.h> ++ #include <coreplugin/modemanager.h> ++@@ -41,24 +40,38 @@ ++ #include <utils/styledbar.h> ++ #include <utils/welcomemodetreewidget.h> ++ ++-#include <QtGui/QDesktopServices> ++ #include <QtGui/QMouseEvent> ++ #include <QtGui/QScrollArea> ++ #include <QtGui/QButtonGroup> +++#include <QtGui/QDesktopServices> +++#include <QtGui/QToolButton> ++ ++-#include <QtCore/QDateTime> ++-#include <QtCore/QDir> ++-#include <QtCore/QFileInfo> ++-#include <QtCore/QDebug> ++-#include <QtCore/QUrl> ++ #include <QtCore/QSettings> +++#include <QtCore/QUrl> +++#include <QtCore/QDebug> ++ ++ #include <cstdlib> ++ ++ #include "ui_welcomemode.h" ++ +++using namespace ExtensionSystem; +++ ++ namespace Welcome { ++ +++// TODO: remove +++static QString titleLabel(const QString &text) +++{ +++ // TODO: do not hardcode here +++ QString rc = QLatin1String( +++ "<html><head><style type=\"text/css\">p, li { white-space: pre-wrap; }</style></head>" +++ "<body style=\" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;\">" +++ "<p style=\" margin-top:16px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">" +++ "<span style=\" font-size:x-large; color:#555555;\">"); +++ rc += text; +++ rc += QLatin1String("</span></p><hr/></body></html>"); +++ return rc; +++} +++ ++ struct WelcomeModePrivate ++ { ++ WelcomeModePrivate(); ++@@ -66,10 +79,9 @@ struct WelcomeModePrivate ++ QScrollArea *m_scrollArea; ++ QWidget *m_widget; ++ QWidget *m_welcomePage; ++- QButtonGroup *btnGrp; ++- Ui::WelcomePage ui; ++- RSSFetcher *rssFetcher; ++- WelcomeMode::WelcomePageData lastData; +++ QMap<QAbstractButton*, QWidget*> buttonMap; +++ QHBoxLayout * buttonLayout; +++ Ui::WelcomeMode ui; ++ int currentTip; ++ }; ++ ++@@ -77,46 +89,6 @@ WelcomeModePrivate::WelcomeModePrivate() ++ { ++ } ++ ++-// --- WelcomePageData ++- ++-bool WelcomeMode::WelcomePageData::operator==(const WelcomePageData &rhs) const ++-{ ++- return previousSession == rhs.previousSession ++- && activeSession == rhs.activeSession ++- && sessionList == rhs.sessionList ++- && projectList == rhs.projectList; ++-} ++- ++-bool WelcomeMode::WelcomePageData::operator!=(const WelcomePageData &rhs) const ++-{ ++- return previousSession != rhs.previousSession ++- || activeSession != rhs.activeSession ++- || sessionList != rhs.sessionList ++- || projectList != rhs.projectList; ++-} ++- ++-QDebug operator<<(QDebug dgb, const WelcomeMode::WelcomePageData &d) ++-{ ++- dgb.nospace() << "PreviousSession=" << d.previousSession ++- << " activeSession=" << d.activeSession ++- << " sessionList=" << d.sessionList ++- << " projectList=" << d.projectList; ++- return dgb; ++-} ++- ++-// Format a title + ruler for title labels ++-static inline QString titleLabel(const QString &text) ++-{ ++- QString rc = QLatin1String( ++- "<html><head><style type=\"text/css\">p, li { white-space: pre-wrap; }</style></head>" ++- "<body style=\" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;\">" ++- "<p style=\" margin-top:16px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">" ++- "<span style=\" font-size:x-large; color:#555555;\">"); ++- rc += text; ++- rc += QLatin1String("</span></p><hr/></body></html>"); ++- return rc; ++-} ++- ++ // --- WelcomeMode ++ WelcomeMode::WelcomeMode() : ++ m_d(new WelcomeModePrivate) ++@@ -126,22 +98,8 @@ WelcomeMode::WelcomeMode() : ++ l->setMargin(0); ++ l->setSpacing(0); ++ l->addWidget(new Core::Utils::StyledBar(m_d->m_widget)); ++- m_d->rssFetcher = new RSSFetcher(7, this); ++ m_d->m_welcomePage = new QWidget(m_d->m_widget); ++ m_d->ui.setupUi(m_d->m_welcomePage); ++- m_d->ui.projTitleLabel->setText(titleLabel(tr("Open Recent Project"))); ++- m_d->ui.recentSessionsTitleLabel->setText(titleLabel(tr("Resume Session"))); ++- m_d->ui.tutorialsTitleLabel->setText(titleLabel(tr("Tutorials"))); ++- m_d->ui.demoTitleLabel->setText(titleLabel(tr("Explore Qt Examples"))); ++- m_d->ui.didYouKnowTitleLabel->setText(titleLabel(tr("Did You Know?"))); ++- m_d->ui.labsTitleLabel->setText(titleLabel(tr("News From the Qt Labs"))); ++- m_d->ui.sitesTitleLabel->setText(titleLabel(tr("Qt Websites"))); ++- m_d->ui.sessTreeWidget->viewport()->setAutoFillBackground(false); ++- m_d->ui.projTreeWidget->viewport()->setAutoFillBackground(false); ++- m_d->ui.newsTreeWidget->viewport()->setAutoFillBackground(false); ++- m_d->ui.sitesTreeWidget->viewport()->setAutoFillBackground(false); ++- m_d->ui.tutorialTreeWidget->viewport()->setAutoFillBackground(false); ++- m_d->ui.didYouKnowTextBrowser->viewport()->setAutoFillBackground(false); ++ m_d->ui.helpUsLabel->setAttribute(Qt::WA_LayoutUsesWidgetRect); ++ m_d->ui.feedbackButton->setAttribute(Qt::WA_LayoutUsesWidgetRect); ++ l->addWidget(m_d->m_welcomePage); ++@@ -151,71 +109,17 @@ WelcomeMode::WelcomeMode() : ++ m_d->m_scrollArea->setWidget(m_d->m_widget); ++ m_d->m_scrollArea->setWidgetResizable(true); ++ ++- updateWelcomePage(WelcomePageData()); ++- ++- m_d->btnGrp = new QButtonGroup(this); ++- m_d->btnGrp->addButton(m_d->ui.gettingStartedSectButton, 0); ++- m_d->btnGrp->addButton(m_d->ui.developSectButton, 1); ++- m_d->btnGrp->addButton(m_d->ui.communitySectButton, 2); ++- ++- connect(m_d->btnGrp, SIGNAL(buttonClicked(int)), m_d->ui.stackedWidget, SLOT(setCurrentIndex(int))); +++ PluginManager *pluginManager = PluginManager::instance(); +++ connect(pluginManager, SIGNAL(objectAdded(QObject*)), SLOT(welcomePluginAdded(QObject))); ++ ++ connect(m_d->ui.feedbackButton, SIGNAL(clicked()), SLOT(slotFeedback())); ++- connect(m_d->ui.manageSessionsButton, SIGNAL(clicked()), SIGNAL(manageSessions())); ++- connect(m_d->ui.createNewProjectButton, SIGNAL(clicked()), SLOT(slotCreateNewProject())); ++- connect(m_d->ui.sessTreeWidget, SIGNAL(activated(QString)), SLOT(slotSessionClicked(QString))); ++- connect(m_d->ui.projTreeWidget, SIGNAL(activated(QString)), SLOT(slotProjectClicked(QString))); ++- connect(m_d->ui.newsTreeWidget, SIGNAL(activated(QString)), SLOT(slotUrlClicked(QString))); ++- connect(m_d->ui.sitesTreeWidget, SIGNAL(activated(QString)), SLOT(slotUrlClicked(QString))); ++- connect(m_d->ui.tutorialTreeWidget, SIGNAL(activated(QString)), SIGNAL(openHelpPage(const QString&))); ++- connect(m_d->ui.openExampleButton, SIGNAL(clicked()), SLOT(slotOpenExample())); ++- connect(m_d->ui.examplesComboBox, SIGNAL(currentIndexChanged(int)), SLOT(slotEnableExampleButton(int))); ++- ++- connect(m_d->rssFetcher, SIGNAL(newsItemReady(QString, QString, QString)), ++- m_d->ui.newsTreeWidget, SLOT(slotAddNewsItem(QString, QString, QString))); ++- ++- //: Add localized feed here only if one exists ++- m_d->rssFetcher->fetch(QUrl(tr("http://labs.trolltech.com/blogs/feed"))); ++- ++- m_d->ui.sitesTreeWidget->addItem(tr("Qt Home"), QLatin1String("http://qtsoftware.com")); ++- m_d->ui.sitesTreeWidget->addItem(tr("Qt Labs"), QLatin1String("http://labs.trolltech.com")); ++- m_d->ui.sitesTreeWidget->addItem(tr("Qt Git Hosting"), QLatin1String("http://qt.gitorious.org")); ++- m_d->ui.sitesTreeWidget->addItem(tr("Qt Centre"), QLatin1String("http://www.qtcentre.org")); ++- m_d->ui.sitesTreeWidget->addItem(tr("Qt for S60 at Forum Nokia"), QLatin1String("http://discussion.forum.nokia.com/forum/forumdisplay.php?f=196")); ++- ++- m_d->ui.tutorialTreeWidget->addItem(tr("<b>Qt Creator - A quick tour</b>"), ++- QString("qthelp://com.nokia.qtcreator.%1%2/doc/index.html").arg(IDE_VERSION_MAJOR).arg(IDE_VERSION_MINOR)); ++- m_d->ui.tutorialTreeWidget->addItem(tr("Creating an address book"), ++- QLatin1String("qthelp://com.nokia.qtcreator/doc/tutorials-addressbook-sdk.html")); ++- m_d->ui.tutorialTreeWidget->addItem(tr("Understanding widgets"), ++- QLatin1String("qthelp://com.trolltech.qt/qdoc/widgets-tutorial.html")); ++- m_d->ui.tutorialTreeWidget->addItem(tr("Building with qmake"), ++- QLatin1String("qthelp://com.trolltech.qmake/qdoc/qmake-tutorial.html")); ++- m_d->ui.tutorialTreeWidget->addItem(tr("Writing test cases"), ++- QLatin1String("qthelp://com.trolltech.qt/qdoc/qtestlib-tutorial.html")); ++- ++- srand(QDateTime::currentDateTime().toTime_t()); ++- QStringList tips = tipsOfTheDay(); ++- m_d->currentTip = rand()%tips.count(); ++- ++- QTextDocument *doc = m_d->ui.didYouKnowTextBrowser->document(); ++- doc->setDefaultStyleSheet("a:link {color:black;}"); ++- m_d->ui.didYouKnowTextBrowser->setDocument(doc); ++- m_d->ui.didYouKnowTextBrowser->setText(tips.at(m_d->currentTip)); ++- ++- connect(m_d->ui.nextTipBtn, SIGNAL(clicked()), this, SLOT(slotNextTip())); ++- connect(m_d->ui.prevTipBtn, SIGNAL(clicked()), this, SLOT(slotPrevTip())); ++ ++- QSettings *settings = Core::ICore::instance()->settings(); ++- int id = settings->value("General/WelcomeTab", 0).toInt(); ++- m_d->btnGrp->button(id)->setChecked(true); ++- m_d->ui.stackedWidget->setCurrentIndex(id); ++ } ++ ++ WelcomeMode::~WelcomeMode() ++ { ++ QSettings *settings = Core::ICore::instance()->settings(); ++- settings->setValue("General/WelcomeTab", m_d->btnGrp->checkedId()); +++ settings->setValue("General/WelcomeTab", m_d->ui.stackedWidget->currentIndex()); ++ delete m_d->m_widget; ++ delete m_d; ++ } ++@@ -252,150 +156,79 @@ QList<int> WelcomeMode::context() const ++ return contexts; ++ } ++ ++-void WelcomeMode::updateWelcomePage(const WelcomePageData &welcomePageData) ++-{ ++- // Update only if data are modified ++- if (welcomePageData == m_d->lastData) ++- return; ++- m_d->lastData = welcomePageData; ++- ++- m_d->m_widget->setUpdatesEnabled(false); ++- m_d->ui.sessTreeWidget->clear(); ++- m_d->ui.projTreeWidget->clear(); ++- ++- if (welcomePageData.sessionList.count() > 0) { ++- foreach (const QString &s, welcomePageData.sessionList) { ++- QString str = s; ++- if (s == welcomePageData.previousSession) ++- str = tr("%1 (last session)").arg(s); ++- m_d->ui.sessTreeWidget->addItem(str, s); ++- } ++- m_d->ui.sessTreeWidget->updateGeometry(); ++- m_d->ui.sessTreeWidget->show(); ++- } else { ++- m_d->ui.sessTreeWidget->hide(); ++- } ++- ++- typedef QPair<QString, QString> QStringPair; ++- if (welcomePageData.projectList.count() > 0) { ++- foreach (const QStringPair &it, welcomePageData.projectList) { ++- QTreeWidgetItem *item = m_d->ui.projTreeWidget->addItem(it.second, it.first); ++- const QFileInfo fi(it.first); ++- item->setToolTip(1, QDir::toNativeSeparators(fi.absolutePath())); ++- } ++- } else { ++- m_d->ui.projTreeWidget->hide(); ++- } ++- m_d->ui.projTreeWidget->updateGeometry(); ++- m_d->m_widget->setUpdatesEnabled(true); ++-} ++- ++-void WelcomeMode::activateEditMode() ++-{ ++- Core::ModeManager *modeManager = Core::ModeManager::instance(); ++- if (modeManager->currentMode() == this) ++- modeManager->activateMode(Core::Constants::MODE_EDIT); ++-} ++- ++-void WelcomeMode::slotSessionClicked(const QString &data) ++-{ ++- emit requestSession(data); ++- activateEditMode(); ++-} ++- ++-void WelcomeMode::slotProjectClicked(const QString &data) ++-{ ++- emit requestProject(data); ++- activateEditMode(); ++-} ++- ++-void WelcomeMode::slotUrlClicked(const QString &data) +++bool sortFunction(IWelcomePlugin * a, IWelcomePlugin *b) ++ { ++- QDesktopServices::openUrl(QUrl(data)); +++ return a->priority() < b->priority(); ++ } ++ ++-void WelcomeMode::updateExamples(const QString& examplePath, const QString& demosPath, const QString &sourcePath) +++void WelcomeMode::initPlugins() ++ { ++- QString demoxml = demosPath + "/qtdemo/xml/examples.xml"; ++- if (!QFile::exists(demoxml)) { ++- demoxml = sourcePath + "/demos/qtdemo/xml/examples.xml"; ++- if (!QFile::exists(demoxml)) ++- return; +++ m_d->buttonLayout = new QHBoxLayout(m_d->ui.navFrame); +++ m_d->buttonLayout->setMargin(0); +++ m_d->buttonLayout->setSpacing(0); +++ delete m_d->ui.stackedWidget->currentWidget(); +++ QList<IWelcomePlugin*> plugins = PluginManager::instance()->getObjects<IWelcomePlugin>(); +++ qSort(plugins.begin(), plugins.end(), &sortFunction); +++ foreach(IWelcomePlugin* plugin, plugins) { +++ QToolButton * btn = new QToolButton; +++ btn->setCheckable(true); +++ btn->setText(plugin->title()); +++ btn->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); +++ btn->setAutoExclusive(true); +++ connect (btn, SIGNAL(clicked()), SLOT(showClickedPage())); +++ m_d->ui.stackedWidget->addWidget(plugin->page()); +++ m_d->buttonLayout->addWidget(btn); +++ m_d->buttonMap.insert(btn, plugin->page()); ++ } +++ m_d->buttonLayout->addSpacing(5); ++ ++- QFile description(demoxml); ++- if (!description.open(QFile::ReadOnly)) ++- return; ++- ++- m_d->ui.examplesComboBox->clear(); ++- m_d->ui.examplesComboBox->setEnabled(true); ++- ++- m_d->ui.examplesComboBox->addItem(tr("Choose an example...")); ++- QFont f = widget()->font(); ++- f.setItalic(true); ++- m_d->ui.examplesComboBox->setItemData(0, f, Qt::FontRole); ++- f.setItalic(false); ++- bool inExamples = false; ++- QString dirName; ++- QXmlStreamReader reader(&description); ++- while (!reader.atEnd()) { ++- switch (reader.readNext()) { ++- case QXmlStreamReader::StartElement: ++- if (reader.name() == "category") { ++- QString name = reader.attributes().value(QLatin1String("name")).toString(); ++- if (name.contains("tutorial")) ++- break; ++- dirName = reader.attributes().value(QLatin1String("dirname")).toString(); ++- m_d->ui.examplesComboBox->addItem(name); ++- f.setBold(true); ++- m_d->ui.examplesComboBox->setItemData(m_d->ui.examplesComboBox->count()-1, f, Qt::FontRole); ++- f.setBold(false); ++- inExamples = true; ++- } ++- if (inExamples && reader.name() == "example") { ++- QString name = reader.attributes().value(QLatin1String("name")).toString(); ++- QString fn = reader.attributes().value(QLatin1String("filename")).toString(); ++- QString relativeProPath = '/' + dirName + '/' + fn + '/' + fn + ".pro"; ++- QString fileName = examplePath + relativeProPath; ++- if (!QFile::exists(fileName)) ++- fileName = sourcePath + "/examples" + relativeProPath; ++- QString helpPath = "qthelp://com.trolltech.qt/qdoc/" + dirName.replace("/", "-") + "-" + fn + ".html"; ++- ++- m_d->ui.examplesComboBox->addItem(" " + name, fileName); ++- m_d->ui.examplesComboBox->setItemData(m_d->ui.examplesComboBox->count()-1, helpPath, Qt::UserRole+1); +++ QSettings *settings = Core::ICore::instance()->settings(); +++ int tabId = settings->value("General/WelcomeTab", 0).toInt(); +++ +++ int pluginCount = m_d->ui.stackedWidget->count(); +++ if (tabId < pluginCount) { +++ //qDebug() << tabId; +++ m_d->ui.stackedWidget->setCurrentIndex(tabId); +++ QMapIterator<QAbstractButton*, QWidget*> it(m_d->buttonMap); +++ while (it.hasNext()) +++ if (it.next().value() == m_d->ui.stackedWidget->currentWidget()) { +++ it.key()->setChecked(true); +++ break; ++ } ++- break; ++- case QXmlStreamReader::EndElement: ++- if (reader.name() == "category") ++- inExamples = false; ++- break; ++- default: ++- break; ++- } ++ } +++ ++ } ++ ++-void WelcomeMode::slotEnableExampleButton(int index) ++-{ ++- QString fileName = m_d->ui.examplesComboBox->itemData(index, Qt::UserRole).toString(); ++- m_d->ui.openExampleButton->setEnabled(!fileName.isEmpty()); +++void WelcomeMode::welcomePluginAdded(QObject *obj) +++{ +++ if (IWelcomePlugin *plugin = qobject_cast<IWelcomePlugin*>(obj)) +++ { +++ QToolButton * btn = new QToolButton; +++ btn->setCheckable(true); +++ btn->setAutoExclusive(true); +++ btn->setText(plugin->title()); +++ btn->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); +++ connect (btn, SIGNAL(clicked()), SLOT(showClickedPage())); +++ int insertPos = 0; +++ QList<IWelcomePlugin*> plugins = PluginManager::instance()->getObjects<IWelcomePlugin>(); +++ foreach (IWelcomePlugin* p, plugins) { +++ if (plugin->priority() < p->priority()) +++ insertPos++; +++ else +++ break; +++ } +++ m_d->ui.stackedWidget->insertWidget(insertPos, plugin->page()); +++ m_d->buttonMap.insert(btn, plugin->page()); +++ m_d->buttonLayout->insertWidget(insertPos, btn); +++ } ++ } ++ ++-void WelcomeMode::slotOpenExample() +++void WelcomeMode::showClickedPage() ++ { ++- QComboBox *box = m_d->ui.examplesComboBox; ++- QString proFile = box->itemData(box->currentIndex(), Qt::UserRole).toString(); ++- QString helpFile = box->itemData(box->currentIndex(), Qt::UserRole + 1).toString(); ++- QStringList files; ++- QFileInfo fi(proFile); ++- QString tryFile = fi.path() + "/main.cpp"; ++- files << proFile; ++- if(!QFile::exists(tryFile)) ++- tryFile = fi.path() + '/' + fi.baseName() + ".cpp"; ++- if(QFile::exists(tryFile)) ++- files << tryFile; ++- Core::ICore::instance()->openFiles(files); ++- emit openContextHelpPage(helpFile); +++ QAbstractButton *btn = qobject_cast<QAbstractButton*>(sender()); +++ QMap<QAbstractButton*, QWidget*>::iterator it = m_d->buttonMap.find(btn); +++ if (it.value()) +++ m_d->ui.stackedWidget->setCurrentWidget(it.value()); ++ } ++ ++ void WelcomeMode::slotFeedback() ++@@ -404,71 +237,5 @@ void WelcomeMode::slotFeedback() ++ "http://qtsoftware.com/forms/feedback-forms/qt-creator-user-feedback/view"))); ++ } ++ ++-void WelcomeMode::slotCreateNewProject() ++-{ ++- Core::ICore::instance()->showNewItemDialog(tr("New Project..."), ++- Core::IWizard::wizardsOfKind(Core::IWizard::ProjectWizard)); ++-} ++- ++-void WelcomeMode::slotNextTip() ++-{ ++- QStringList tips = tipsOfTheDay(); ++- m_d->currentTip = ((m_d->currentTip+1)%tips.count()); ++- m_d->ui.didYouKnowTextBrowser->setText(tips.at(m_d->currentTip)); ++-} ++- ++-void WelcomeMode::slotPrevTip() ++-{ ++- QStringList tips = tipsOfTheDay(); ++- m_d->currentTip = ((m_d->currentTip-1)+tips.count())%tips.count(); ++- m_d->ui.didYouKnowTextBrowser->setText(tips.at(m_d->currentTip)); ++-} ++- ++-QStringList WelcomeMode::tipsOfTheDay() ++-{ ++- static QStringList tips; ++- if (tips.isEmpty()) { ++- QString altShortcut = ++-#ifdef Q_WS_MAC ++- tr("Cmd", "Shortcut key"); ++-#else ++- tr("Alt", "Shortcut key"); ++-#endif ++- tips.append(tr("You can switch between Qt Creator's modes using <tt>Ctrl+number</tt>:<ul>" ++- "<li>1 - Welcome</li><li>2 - Edit</li><li>3 - Debug</li><li>4 - Projects</li><li>5 - Help</li>" ++- "<li></li><li>6 - Output</li></ul>")); ++- //:%1 gets replaced by Alt (Win/Unix) or Cmd (Mac) ++- tips.append(tr("You can show and hide the side bar using <tt>%1+0<tt>.").arg(altShortcut)); ++- tips.append(tr("You can fine tune the <tt>Find</tt> function by selecting "Whole Words" " ++- "or "Case Sensitive". Simply click on the icons on the right end of the line edit.")); ++- tips.append(tr("If you add <a href=\"qthelp://com.nokia.qtcreator/doc/creator-external-library-handling.html\"" ++- ">external libraries</a>, Qt Creator will automatically offer syntax highlighting " ++- "and code completion.")); ++- tips.append(tr("The code completion is CamelCase-aware. For example, to complete <tt>namespaceUri</tt> " ++- "you can just type <tt>nU</tt> and hit <tt>Ctrl+Space</tt>.")); ++- tips.append(tr("You can force code completion at any time using <tt>Ctrl+Space</tt>.")); ++- tips.append(tr("You can start Qt Creator with a session by calling <tt>qtcreator <sessionname></tt>.")); ++- tips.append(tr("You can return to edit mode from any other mode at any time by hitting <tt>Escape</tt>.")); ++- //:%1 gets replaced by Alt (Win/Unix) or Cmd (Mac) ++- tips.append(tr("You can switch between the output pane by hitting <tt>%1+n</tt> where n is the number denoted " ++- "on the buttons at the window bottom:" ++- "<ul><li>1 - Build Issues</li><li>2 - Search Results</li><li>3 - Application Output</li>" ++- "<li>4 - Compile Output</li></ul>").arg(altShortcut)); ++- tips.append(tr("You can quickly search methods, classes, help and more using the " ++- "<a href=\"qthelp://com.nokia.qtcreator/doc/creator-navigation.html\">Locator bar</a> (<tt>Ctrl+K</tt>).")); ++- tips.append(tr("You can add custom build steps in the " ++- "<a href=\"qthelp://com.nokia.qtcreator/doc/creator-build-settings.html\">build settings</a>.")); ++- tips.append(tr("Within a session, you can add " ++- "<a href=\"qthelp://com.nokia.qtcreator/doc/creator-build-settings.html#dependencies\">dependencies</a> between projects.")); ++- tips.append(tr("You can set the preferred editor encoding for every project in <tt>Projects -> Editor Settings -> Default Encoding</tt>.")); ++- tips.append(tr("You can modify the binary that is being executed when you press the <tt>Run</tt> button: Add a <tt>Custom Executable</tt> " ++- "by clicking the <tt>+</tt> button in <tt>Projects -> Run Settings -> Run Configuration</tt> and then select the new " ++- "target in the combo box.")); ++- tips.append(tr("You can use Qt Creator with a number of <a href=\"qthelp://com.nokia.qtcreator/doc/creator-version-control.html\">" ++- "revision control systems</a> such as Subversion, Perforce and Git.")); ++- tips.append(tr("In the editor, <tt>F2</tt> toggles declaration and definition while <tt>F4</tt> toggles header file and source file.")); ++- } ++- return tips; ++-} ++ ++ } // namespace Welcome ++diff --git a/src/plugins/welcome/welcomemode.h b/src/plugins/welcome/welcomemode.h ++index 0555ce6..1576d24 100644 ++--- a/src/plugins/welcome/welcomemode.h +++++ b/src/plugins/welcome/welcomemode.h ++@@ -54,18 +54,6 @@ public: ++ WelcomeMode(); ++ ~WelcomeMode(); ++ ++- struct WelcomePageData{ ++- bool operator==(const WelcomePageData &rhs) const; ++- bool operator!=(const WelcomePageData &rhs) const; ++- ++- QString previousSession; ++- QString activeSession; ++- QStringList sessionList; ++- QList<QPair<QString, QString> > projectList; // pair of filename, displayname ++- }; ++- ++- void updateWelcomePage(const WelcomePageData &welcomePageData); ++- ++ // IMode ++ QString name() const; ++ QIcon icon() const; ++@@ -75,31 +63,14 @@ public: ++ QList<int> context() const; ++ void activated(); ++ QString contextHelpId() const { return QLatin1String("Qt Creator"); } ++- ++- void updateExamples(const QString& examplePath, const QString& demosPath, const QString &sourcePath); ++- ++-signals: ++- void requestProject(const QString &project); ++- void requestSession(const QString &session); ++- void openHelpPage(const QString& url); ++- void openContextHelpPage(const QString& url); ++- void manageSessions(); +++ void initPlugins(); ++ ++ private slots: ++ void slotFeedback(); ++- void slotSessionClicked(const QString &data); ++- void slotProjectClicked(const QString &data); ++- void slotUrlClicked(const QString &data); ++- void slotEnableExampleButton(int); ++- void slotOpenExample(); ++- void slotCreateNewProject(); ++- void slotNextTip(); ++- void slotPrevTip(); +++ void welcomePluginAdded(QObject*); +++ void showClickedPage(); ++ ++ private: ++- void activateEditMode(); ++- QStringList tipsOfTheDay(); ++- ++ WelcomeModePrivate *m_d; ++ }; ++ ++diff --git a/src/plugins/welcome/welcomemode.ui b/src/plugins/welcome/welcomemode.ui ++index c70aabb..e1c18bd 100644 ++--- a/src/plugins/welcome/welcomemode.ui +++++ b/src/plugins/welcome/welcomemode.ui ++@@ -1,7 +1,7 @@ ++ <?xml version="1.0" encoding="UTF-8"?> ++ <ui version="4.0"> ++- <class>Welcome::WelcomePage</class> ++- <widget class="QWidget" name="Core::Utils::WelcomePage"> +++ <class>Welcome::WelcomeMode</class> +++ <widget class="QWidget" name="Welcome::WelcomeMode"> ++ <property name="geometry"> ++ <rect> ++ <x>0</x> ++@@ -172,6 +172,12 @@ QToolButton:pressed, QPushButton:pressed{ ++ <verstretch>0</verstretch> ++ </sizepolicy> ++ </property> +++ <property name="minimumSize"> +++ <size> +++ <width>0</width> +++ <height>10</height> +++ </size> +++ </property> ++ <property name="font"> ++ <font> ++ <weight>50</weight> ++@@ -238,129 +244,6 @@ QToolButton:pressed { ++ <property name="frameShadow"> ++ <enum>QFrame::Plain</enum> ++ </property> ++- <layout class="QGridLayout" name="gridLayout_2"> ++- <property name="margin"> ++- <number>0</number> ++- </property> ++- <property name="spacing"> ++- <number>0</number> ++- </property> ++- <item row="0" column="0"> ++- <widget class="QToolButton" name="gettingStartedSectButton"> ++- <property name="enabled"> ++- <bool>true</bool> ++- </property> ++- <property name="sizePolicy"> ++- <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> ++- <horstretch>0</horstretch> ++- <verstretch>0</verstretch> ++- </sizepolicy> ++- </property> ++- <property name="minimumSize"> ++- <size> ++- <width>0</width> ++- <height>0</height> ++- </size> ++- </property> ++- <property name="font"> ++- <font> ++- <pointsize>-1</pointsize> ++- </font> ++- </property> ++- <property name="styleSheet"> ++- <string notr="true"/> ++- </property> ++- <property name="text"> ++- <string>Getting Started</string> ++- </property> ++- <property name="checkable"> ++- <bool>true</bool> ++- </property> ++- <property name="checked"> ++- <bool>true</bool> ++- </property> ++- <property name="autoExclusive"> ++- <bool>false</bool> ++- </property> ++- </widget> ++- </item> ++- <item row="0" column="1"> ++- <widget class="QToolButton" name="developSectButton"> ++- <property name="sizePolicy"> ++- <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> ++- <horstretch>0</horstretch> ++- <verstretch>0</verstretch> ++- </sizepolicy> ++- </property> ++- <property name="minimumSize"> ++- <size> ++- <width>0</width> ++- <height>0</height> ++- </size> ++- </property> ++- <property name="font"> ++- <font> ++- <pointsize>-1</pointsize> ++- </font> ++- </property> ++- <property name="text"> ++- <string>Develop</string> ++- </property> ++- <property name="checkable"> ++- <bool>true</bool> ++- </property> ++- <property name="autoExclusive"> ++- <bool>false</bool> ++- </property> ++- </widget> ++- </item> ++- <item row="0" column="2"> ++- <widget class="QToolButton" name="communitySectButton"> ++- <property name="sizePolicy"> ++- <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> ++- <horstretch>0</horstretch> ++- <verstretch>0</verstretch> ++- </sizepolicy> ++- </property> ++- <property name="minimumSize"> ++- <size> ++- <width>0</width> ++- <height>0</height> ++- </size> ++- </property> ++- <property name="font"> ++- <font> ++- <pointsize>-1</pointsize> ++- </font> ++- </property> ++- <property name="styleSheet"> ++- <string notr="true"/> ++- </property> ++- <property name="text"> ++- <string>Community</string> ++- </property> ++- <property name="checkable"> ++- <bool>true</bool> ++- </property> ++- </widget> ++- </item> ++- <item row="0" column="3"> ++- <spacer name="horizontalSpacer_2"> ++- <property name="orientation"> ++- <enum>Qt::Horizontal</enum> ++- </property> ++- <property name="sizeType"> ++- <enum>QSizePolicy::Fixed</enum> ++- </property> ++- <property name="sizeHint" stdset="0"> ++- <size> ++- <width>5</width> ++- <height>20</height> ++- </size> ++- </property> ++- </spacer> ++- </item> ++- </layout> ++ </widget> ++ </item> ++ <item> ++@@ -368,575 +251,7 @@ QToolButton:pressed { ++ <property name="currentIndex"> ++ <number>0</number> ++ </property> ++- <widget class="QWidget" name="gettingStartedPage"> ++- <layout class="QGridLayout" name="gridLayout_9"> ++- <property name="leftMargin"> ++- <number>18</number> ++- </property> ++- <property name="topMargin"> ++- <number>18</number> ++- </property> ++- <property name="rightMargin"> ++- <number>12</number> ++- </property> ++- <property name="bottomMargin"> ++- <number>18</number> ++- </property> ++- <property name="spacing"> ++- <number>24</number> ++- </property> ++- <item row="0" column="0" rowspan="2"> ++- <widget class="QFrame" name="tutorialsFrame"> ++- <property name="sizePolicy"> ++- <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> ++- <horstretch>0</horstretch> ++- <verstretch>0</verstretch> ++- </sizepolicy> ++- </property> ++- <property name="maximumSize"> ++- <size> ++- <width>400</width> ++- <height>16777215</height> ++- </size> ++- </property> ++- <property name="styleSheet"> ++- <string/> ++- </property> ++- <layout class="QGridLayout" name="gridLayout_6"> ++- <item row="0" column="0"> ++- <widget class="QLabel" name="tutorialsTitleLabel"> ++- <property name="sizePolicy"> ++- <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> ++- <horstretch>0</horstretch> ++- <verstretch>0</verstretch> ++- </sizepolicy> ++- </property> ++- <property name="alignment"> ++- <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> ++- </property> ++- </widget> ++- </item> ++- <item row="1" column="0"> ++- <widget class="Core::Utils::WelcomeModeTreeWidget" name="tutorialTreeWidget"> ++- <property name="sizePolicy"> ++- <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> ++- <horstretch>0</horstretch> ++- <verstretch>0</verstretch> ++- </sizepolicy> ++- </property> ++- <property name="focusPolicy"> ++- <enum>Qt::NoFocus</enum> ++- </property> ++- <property name="frameShape"> ++- <enum>QFrame::NoFrame</enum> ++- </property> ++- <property name="selectionMode"> ++- <enum>QAbstractItemView::NoSelection</enum> ++- </property> ++- <property name="verticalScrollMode"> ++- <enum>QAbstractItemView::ScrollPerPixel</enum> ++- </property> ++- <property name="rootIsDecorated"> ++- <bool>false</bool> ++- </property> ++- <property name="uniformRowHeights"> ++- <bool>true</bool> ++- </property> ++- <property name="allColumnsShowFocus"> ++- <bool>true</bool> ++- </property> ++- <property name="columnCount"> ++- <number>2</number> ++- </property> ++- <attribute name="headerVisible"> ++- <bool>false</bool> ++- </attribute> ++- <attribute name="headerDefaultSectionSize"> ++- <number>24</number> ++- </attribute> ++- <attribute name="headerMinimumSectionSize"> ++- <number>0</number> ++- </attribute> ++- <column> ++- <property name="text"> ++- <string notr="true">1</string> ++- </property> ++- </column> ++- <column> ++- <property name="text"> ++- <string notr="true">2</string> ++- </property> ++- </column> ++- </widget> ++- </item> ++- </layout> ++- </widget> ++- </item> ++- <item row="0" column="1"> ++- <widget class="QFrame" name="demosExamplesFrame"> ++- <property name="sizePolicy"> ++- <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> ++- <horstretch>0</horstretch> ++- <verstretch>0</verstretch> ++- </sizepolicy> ++- </property> ++- <property name="maximumSize"> ++- <size> ++- <width>400</width> ++- <height>16777215</height> ++- </size> ++- </property> ++- <property name="styleSheet"> ++- <string/> ++- </property> ++- <layout class="QGridLayout" name="gridLayout_8"> ++- <property name="rightMargin"> ++- <number>8</number> ++- </property> ++- <property name="horizontalSpacing"> ++- <number>0</number> ++- </property> ++- <item row="0" column="0" colspan="4"> ++- <widget class="QLabel" name="demoTitleLabel"> ++- <property name="alignment"> ++- <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> ++- </property> ++- </widget> ++- </item> ++- <item row="1" column="0"> ++- <widget class="QComboBox" name="examplesComboBox"> ++- <property name="enabled"> ++- <bool>false</bool> ++- </property> ++- <property name="sizePolicy"> ++- <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred"> ++- <horstretch>0</horstretch> ++- <verstretch>0</verstretch> ++- </sizepolicy> ++- </property> ++- <item> ++- <property name="text"> ++- <string>Examples not installed</string> ++- </property> ++- </item> ++- </widget> ++- </item> ++- <item row="1" column="2"> ++- <widget class="QToolButton" name="openExampleButton"> ++- <property name="enabled"> ++- <bool>false</bool> ++- </property> ++- <property name="sizePolicy"> ++- <sizepolicy hsizetype="Fixed" vsizetype="Preferred"> ++- <horstretch>0</horstretch> ++- <verstretch>0</verstretch> ++- </sizepolicy> ++- </property> ++- <property name="text"> ++- <string>Open</string> ++- </property> ++- </widget> ++- </item> ++- <item row="1" column="1"> ++- <spacer name="horizontalSpacer"> ++- <property name="orientation"> ++- <enum>Qt::Horizontal</enum> ++- </property> ++- <property name="sizeType"> ++- <enum>QSizePolicy::Fixed</enum> ++- </property> ++- <property name="sizeHint" stdset="0"> ++- <size> ++- <width>6</width> ++- <height>6</height> ++- </size> ++- </property> ++- </spacer> ++- </item> ++- </layout> ++- </widget> ++- </item> ++- <item row="1" column="1"> ++- <widget class="QFrame" name="didyouKnowFrame"> ++- <property name="sizePolicy"> ++- <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> ++- <horstretch>0</horstretch> ++- <verstretch>0</verstretch> ++- </sizepolicy> ++- </property> ++- <property name="maximumSize"> ++- <size> ++- <width>400</width> ++- <height>16777215</height> ++- </size> ++- </property> ++- <property name="styleSheet"> ++- <string/> ++- </property> ++- <layout class="QGridLayout" name="gridLayout_11"> ++- <property name="rightMargin"> ++- <number>9</number> ++- </property> ++- <item row="0" column="0"> ++- <widget class="QLabel" name="didYouKnowTitleLabel"> ++- <property name="sizePolicy"> ++- <sizepolicy hsizetype="MinimumExpanding" vsizetype="Maximum"> ++- <horstretch>0</horstretch> ++- <verstretch>0</verstretch> ++- </sizepolicy> ++- </property> ++- <property name="alignment"> ++- <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> ++- </property> ++- </widget> ++- </item> ++- <item row="1" column="0" colspan="2"> ++- <widget class="QTextBrowser" name="didYouKnowTextBrowser"> ++- <property name="sizePolicy"> ++- <sizepolicy hsizetype="Minimum" vsizetype="Preferred"> ++- <horstretch>0</horstretch> ++- <verstretch>0</verstretch> ++- </sizepolicy> ++- </property> ++- <property name="frameShape"> ++- <enum>QFrame::NoFrame</enum> ++- </property> ++- <property name="frameShadow"> ++- <enum>QFrame::Plain</enum> ++- </property> ++- <property name="verticalScrollBarPolicy"> ++- <enum>Qt::ScrollBarAlwaysOff</enum> ++- </property> ++- <property name="horizontalScrollBarPolicy"> ++- <enum>Qt::ScrollBarAlwaysOff</enum> ++- </property> ++- <property name="openExternalLinks"> ++- <bool>true</bool> ++- </property> ++- </widget> ++- </item> ++- <item row="0" column="1"> ++- <layout class="QGridLayout" name="gridLayout_10"> ++- <property name="spacing"> ++- <number>0</number> ++- </property> ++- <item row="0" column="0" colspan="2"> ++- <spacer name="verticalSpacer_4"> ++- <property name="orientation"> ++- <enum>Qt::Vertical</enum> ++- </property> ++- <property name="sizeType"> ++- <enum>QSizePolicy::Preferred</enum> ++- </property> ++- <property name="sizeHint" stdset="0"> ++- <size> ++- <width>20</width> ++- <height>2</height> ++- </size> ++- </property> ++- </spacer> ++- </item> ++- <item row="1" column="0"> ++- <widget class="QToolButton" name="prevTipBtn"> ++- <property name="styleSheet"> ++- <string notr="true">QToolButton{ ++- border-right:solid 0 px; ++- height:16px; ++- width:12px; ++-} ++-</string> ++- </property> ++- <property name="text"> ++- <string/> ++- </property> ++- <property name="icon"> ++- <iconset resource="welcome.qrc"> ++- <normaloff>:/welcome/images/arrow-left.png</normaloff>:/welcome/images/arrow-left.png</iconset> ++- </property> ++- <property name="arrowType"> ++- <enum>Qt::NoArrow</enum> ++- </property> ++- </widget> ++- </item> ++- <item row="1" column="1"> ++- <widget class="QToolButton" name="nextTipBtn"> ++- <property name="styleSheet"> ++- <string notr="true">QToolButton{ ++- border-left:solid 0 px; ++- height:16px; ++- width:12px; ++-} ++-</string> ++- </property> ++- <property name="text"> ++- <string/> ++- </property> ++- <property name="icon"> ++- <iconset resource="welcome.qrc"> ++- <normaloff>:/welcome/images/arrow-right.png</normaloff>:/welcome/images/arrow-right.png</iconset> ++- </property> ++- <property name="arrowType"> ++- <enum>Qt::NoArrow</enum> ++- </property> ++- </widget> ++- </item> ++- <item row="2" column="0" colspan="2"> ++- <spacer name="verticalSpacer_3"> ++- <property name="orientation"> ++- <enum>Qt::Vertical</enum> ++- </property> ++- <property name="sizeHint" stdset="0"> ++- <size> ++- <width>20</width> ++- <height>2</height> ++- </size> ++- </property> ++- </spacer> ++- </item> ++- </layout> ++- </item> ++- </layout> ++- </widget> ++- </item> ++- </layout> ++- </widget> ++- <widget class="QWidget" name="developPage"> ++- <layout class="QGridLayout" name="gridLayout_4"> ++- <property name="margin"> ++- <number>18</number> ++- </property> ++- <property name="spacing"> ++- <number>24</number> ++- </property> ++- <item row="0" column="0"> ++- <widget class="QFrame" name="recentSessionsFrame"> ++- <property name="sizePolicy"> ++- <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> ++- <horstretch>0</horstretch> ++- <verstretch>0</verstretch> ++- </sizepolicy> ++- </property> ++- <property name="minimumSize"> ++- <size> ++- <width>270</width> ++- <height>130</height> ++- </size> ++- </property> ++- <property name="styleSheet"> ++- <string/> ++- </property> ++- <layout class="QGridLayout" name="gridLayout_3"> ++- <property name="horizontalSpacing"> ++- <number>0</number> ++- </property> ++- <property name="verticalSpacing"> ++- <number>3</number> ++- </property> ++- <item row="0" column="0" colspan="3"> ++- <widget class="QLabel" name="recentSessionsTitleLabel"> ++- <property name="sizePolicy"> ++- <sizepolicy hsizetype="MinimumExpanding" vsizetype="Maximum"> ++- <horstretch>0</horstretch> ++- <verstretch>0</verstretch> ++- </sizepolicy> ++- </property> ++- <property name="alignment"> ++- <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> ++- </property> ++- </widget> ++- </item> ++- <item row="1" column="0" colspan="3"> ++- <widget class="Core::Utils::WelcomeModeTreeWidget" name="sessTreeWidget"> ++- <property name="sizePolicy"> ++- <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> ++- <horstretch>0</horstretch> ++- <verstretch>0</verstretch> ++- </sizepolicy> ++- </property> ++- <property name="focusPolicy"> ++- <enum>Qt::NoFocus</enum> ++- </property> ++- <property name="frameShape"> ++- <enum>QFrame::NoFrame</enum> ++- </property> ++- <property name="selectionMode"> ++- <enum>QAbstractItemView::NoSelection</enum> ++- </property> ++- <property name="verticalScrollMode"> ++- <enum>QAbstractItemView::ScrollPerPixel</enum> ++- </property> ++- <property name="rootIsDecorated"> ++- <bool>false</bool> ++- </property> ++- <property name="uniformRowHeights"> ++- <bool>true</bool> ++- </property> ++- <property name="allColumnsShowFocus"> ++- <bool>true</bool> ++- </property> ++- <property name="columnCount"> ++- <number>2</number> ++- </property> ++- <attribute name="headerVisible"> ++- <bool>false</bool> ++- </attribute> ++- <attribute name="headerDefaultSectionSize"> ++- <number>24</number> ++- </attribute> ++- <attribute name="headerMinimumSectionSize"> ++- <number>0</number> ++- </attribute> ++- <column> ++- <property name="text"> ++- <string notr="true">1</string> ++- </property> ++- </column> ++- <column> ++- <property name="text"> ++- <string notr="true">2</string> ++- </property> ++- </column> ++- </widget> ++- </item> ++- <item row="3" column="0"> ++- <widget class="QPushButton" name="manageSessionsButton"> ++- <property name="focusPolicy"> ++- <enum>Qt::TabFocus</enum> ++- </property> ++- <property name="text"> ++- <string>Manage Sessions...</string> ++- </property> ++- </widget> ++- </item> ++- <item row="4" column="0"> ++- <spacer name="verticalSpacer"> ++- <property name="orientation"> ++- <enum>Qt::Vertical</enum> ++- </property> ++- <property name="sizeHint" stdset="0"> ++- <size> ++- <width>20</width> ++- <height>40</height> ++- </size> ++- </property> ++- </spacer> ++- </item> ++- </layout> ++- </widget> ++- </item> ++- <item row="0" column="2"> ++- <widget class="QFrame" name="recentProjectsFrame"> ++- <property name="styleSheet"> ++- <string/> ++- </property> ++- <layout class="QGridLayout" name="gridLayout_5"> ++- <property name="horizontalSpacing"> ++- <number>0</number> ++- </property> ++- <property name="verticalSpacing"> ++- <number>3</number> ++- </property> ++- <property name="rightMargin"> ++- <number>9</number> ++- </property> ++- <item row="0" column="0" colspan="3"> ++- <widget class="QLabel" name="projTitleLabel"> ++- <property name="sizePolicy"> ++- <sizepolicy hsizetype="MinimumExpanding" vsizetype="Maximum"> ++- <horstretch>0</horstretch> ++- <verstretch>0</verstretch> ++- </sizepolicy> ++- </property> ++- <property name="alignment"> ++- <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> ++- </property> ++- </widget> ++- </item> ++- <item row="1" column="0" colspan="3"> ++- <widget class="Core::Utils::WelcomeModeTreeWidget" name="projTreeWidget"> ++- <property name="sizePolicy"> ++- <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> ++- <horstretch>0</horstretch> ++- <verstretch>0</verstretch> ++- </sizepolicy> ++- </property> ++- <property name="focusPolicy"> ++- <enum>Qt::NoFocus</enum> ++- </property> ++- <property name="frameShape"> ++- <enum>QFrame::NoFrame</enum> ++- </property> ++- <property name="selectionMode"> ++- <enum>QAbstractItemView::NoSelection</enum> ++- </property> ++- <property name="verticalScrollMode"> ++- <enum>QAbstractItemView::ScrollPerPixel</enum> ++- </property> ++- <property name="rootIsDecorated"> ++- <bool>false</bool> ++- </property> ++- <property name="uniformRowHeights"> ++- <bool>true</bool> ++- </property> ++- <property name="allColumnsShowFocus"> ++- <bool>true</bool> ++- </property> ++- <property name="columnCount"> ++- <number>2</number> ++- </property> ++- <attribute name="headerVisible"> ++- <bool>false</bool> ++- </attribute> ++- <attribute name="headerDefaultSectionSize"> ++- <number>24</number> ++- </attribute> ++- <attribute name="headerMinimumSectionSize"> ++- <number>0</number> ++- </attribute> ++- <column> ++- <property name="text"> ++- <string notr="true">1</string> ++- </property> ++- </column> ++- <column> ++- <property name="text"> ++- <string notr="true">2</string> ++- </property> ++- </column> ++- </widget> ++- </item> ++- <item row="3" column="0"> ++- <widget class="QPushButton" name="createNewProjectButton"> ++- <property name="focusPolicy"> ++- <enum>Qt::TabFocus</enum> ++- </property> ++- <property name="text"> ++- <string>Create New Project...</string> ++- </property> ++- <property name="flat"> ++- <bool>true</bool> ++- </property> ++- </widget> ++- </item> ++- <item row="4" column="0"> ++- <spacer name="verticalSpacer_2"> ++- <property name="orientation"> ++- <enum>Qt::Vertical</enum> ++- </property> ++- <property name="sizeHint" stdset="0"> ++- <size> ++- <width>20</width> ++- <height>40</height> ++- </size> ++- </property> ++- </spacer> ++- </item> ++- </layout> ++- </widget> ++- </item> ++- </layout> ++- </widget> ++- <widget class="QWidget" name="communityPage"> +++ <widget class="QWidget" name="widget"> ++ <layout class="QGridLayout" name="gridLayout_7"> ++ <property name="margin"> ++ <number>18</number> ++@@ -944,168 +259,6 @@ QToolButton:pressed { ++ <property name="spacing"> ++ <number>24</number> ++ </property> ++- <item row="0" column="0"> ++- <widget class="QFrame" name="labsFrame"> ++- <property name="frameShape"> ++- <enum>QFrame::NoFrame</enum> ++- </property> ++- <property name="frameShadow"> ++- <enum>QFrame::Plain</enum> ++- </property> ++- <layout class="QVBoxLayout" name="verticalLayout_2"> ++- <item> ++- <widget class="QLabel" name="labsTitleLabel"> ++- <property name="sizePolicy"> ++- <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> ++- <horstretch>0</horstretch> ++- <verstretch>0</verstretch> ++- </sizepolicy> ++- </property> ++- <property name="alignment"> ++- <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> ++- </property> ++- </widget> ++- </item> ++- <item> ++- <widget class="Core::Utils::WelcomeModeTreeWidget" name="newsTreeWidget"> ++- <property name="sizePolicy"> ++- <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> ++- <horstretch>0</horstretch> ++- <verstretch>0</verstretch> ++- </sizepolicy> ++- </property> ++- <property name="minimumSize"> ++- <size> ++- <width>340</width> ++- <height>0</height> ++- </size> ++- </property> ++- <property name="focusPolicy"> ++- <enum>Qt::NoFocus</enum> ++- </property> ++- <property name="frameShape"> ++- <enum>QFrame::NoFrame</enum> ++- </property> ++- <property name="selectionMode"> ++- <enum>QAbstractItemView::NoSelection</enum> ++- </property> ++- <property name="verticalScrollMode"> ++- <enum>QAbstractItemView::ScrollPerPixel</enum> ++- </property> ++- <property name="rootIsDecorated"> ++- <bool>false</bool> ++- </property> ++- <property name="uniformRowHeights"> ++- <bool>true</bool> ++- </property> ++- <property name="allColumnsShowFocus"> ++- <bool>true</bool> ++- </property> ++- <property name="columnCount"> ++- <number>2</number> ++- </property> ++- <attribute name="headerVisible"> ++- <bool>false</bool> ++- </attribute> ++- <attribute name="headerDefaultSectionSize"> ++- <number>24</number> ++- </attribute> ++- <attribute name="headerMinimumSectionSize"> ++- <number>0</number> ++- </attribute> ++- <column> ++- <property name="text"> ++- <string notr="true">1</string> ++- </property> ++- </column> ++- <column> ++- <property name="text"> ++- <string notr="true">2</string> ++- </property> ++- </column> ++- </widget> ++- </item> ++- </layout> ++- </widget> ++- </item> ++- <item row="0" column="1"> ++- <widget class="QFrame" name="sitesFrame"> ++- <property name="frameShape"> ++- <enum>QFrame::NoFrame</enum> ++- </property> ++- <property name="frameShadow"> ++- <enum>QFrame::Plain</enum> ++- </property> ++- <layout class="QVBoxLayout" name="verticalLayout_3"> ++- <item> ++- <widget class="QLabel" name="sitesTitleLabel"> ++- <property name="sizePolicy"> ++- <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> ++- <horstretch>0</horstretch> ++- <verstretch>0</verstretch> ++- </sizepolicy> ++- </property> ++- <property name="alignment"> ++- <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> ++- </property> ++- </widget> ++- </item> ++- <item> ++- <widget class="Core::Utils::WelcomeModeTreeWidget" name="sitesTreeWidget"> ++- <property name="sizePolicy"> ++- <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> ++- <horstretch>0</horstretch> ++- <verstretch>0</verstretch> ++- </sizepolicy> ++- </property> ++- <property name="focusPolicy"> ++- <enum>Qt::NoFocus</enum> ++- </property> ++- <property name="frameShape"> ++- <enum>QFrame::NoFrame</enum> ++- </property> ++- <property name="selectionMode"> ++- <enum>QAbstractItemView::NoSelection</enum> ++- </property> ++- <property name="verticalScrollMode"> ++- <enum>QAbstractItemView::ScrollPerPixel</enum> ++- </property> ++- <property name="rootIsDecorated"> ++- <bool>false</bool> ++- </property> ++- <property name="uniformRowHeights"> ++- <bool>true</bool> ++- </property> ++- <property name="allColumnsShowFocus"> ++- <bool>true</bool> ++- </property> ++- <property name="columnCount"> ++- <number>2</number> ++- </property> ++- <attribute name="headerVisible"> ++- <bool>false</bool> ++- </attribute> ++- <attribute name="headerDefaultSectionSize"> ++- <number>24</number> ++- </attribute> ++- <attribute name="headerMinimumSectionSize"> ++- <number>0</number> ++- </attribute> ++- <column> ++- <property name="text"> ++- <string notr="true">1</string> ++- </property> ++- </column> ++- <column> ++- <property name="text"> ++- <string notr="true">2</string> ++- </property> ++- </column> ++- </widget> ++- </item> ++- </layout> ++- </widget> ++- </item> ++ </layout> ++ </widget> ++ </widget> ++@@ -1219,13 +372,6 @@ QToolButton:pressed { ++ </item> ++ </layout> ++ </widget> ++- <customwidgets> ++- <customwidget> ++- <class>Core::Utils::WelcomeModeTreeWidget</class> ++- <extends>QTreeWidget</extends> ++- <header>utils/welcomemodetreewidget.h</header> ++- </customwidget> ++- </customwidgets> ++ <resources> ++ <include location="welcome.qrc"/> ++ </resources> ++diff --git a/src/plugins/welcome/welcomeplugin.cpp b/src/plugins/welcome/welcomeplugin.cpp ++index e9743a9..544e36a 100644 ++--- a/src/plugins/welcome/welcomeplugin.cpp +++++ b/src/plugins/welcome/welcomeplugin.cpp ++@@ -31,6 +31,8 @@ ++ ++ #include "welcomemode.h" ++ +++#include "communitywelcomeplugin.h" +++ ++ #include <coreplugin/actionmanager/actionmanager.h> ++ #include <coreplugin/basemode.h> ++ #include <coreplugin/coreconstants.h> ++@@ -45,11 +47,10 @@ ++ #include <QtGui/QMessageBox> ++ #include <QtGui/QPushButton> ++ ++-using namespace Welcome; ++- +++using namespace Welcome::Internal; ++ ++ WelcomePlugin::WelcomePlugin() ++- : m_welcomeMode(0) +++ : m_welcomeMode(0), m_communityWelcomePlugin(0) ++ { ++ } ++ ++@@ -59,6 +60,10 @@ WelcomePlugin::~WelcomePlugin() ++ removeObject(m_welcomeMode); ++ delete m_welcomeMode; ++ } +++ if (m_communityWelcomePlugin) { +++ removeObject(m_communityWelcomePlugin); +++ delete m_communityWelcomePlugin; +++ } ++ } ++ ++ /*! Initializes the plugin. Returns true on success. ++@@ -72,6 +77,9 @@ bool WelcomePlugin::initialize(const QStringList &arguments, QString *error_mess ++ Q_UNUSED(arguments) ++ Q_UNUSED(error_message) ++ +++ m_communityWelcomePlugin = new Internal::CommunityWelcomePlugin; +++ addObject(m_communityWelcomePlugin); +++ ++ m_welcomeMode = new WelcomeMode; ++ addObject(m_welcomeMode); ++ ++@@ -91,6 +99,7 @@ bool WelcomePlugin::initialize(const QStringList &arguments, QString *error_mess ++ */ ++ void WelcomePlugin::extensionsInitialized() ++ { +++ m_welcomeMode->initPlugins(); ++ Core::ModeManager::instance()->activateMode(m_welcomeMode->uniqueModeName()); ++ } ++ ++diff --git a/src/plugins/welcome/welcomeplugin.h b/src/plugins/welcome/welcomeplugin.h ++index 970ec39..9855595 100644 ++--- a/src/plugins/welcome/welcomeplugin.h +++++ b/src/plugins/welcome/welcomeplugin.h ++@@ -36,6 +36,9 @@ namespace Welcome { ++ ++ class WelcomeMode; ++ +++namespace Internal { +++class CommunityWelcomePlugin; +++ ++ class WelcomePlugin ++ : public ExtensionSystem::IPlugin ++ { ++@@ -51,8 +54,10 @@ public: ++ ++ private: ++ WelcomeMode *m_welcomeMode; +++ Internal::CommunityWelcomePlugin *m_communityWelcomePlugin; ++ }; ++ ++ } // namespace Welcome +++} // namespace Internal ++ ++ #endif // WELCOMEPLUGIN_H ++-- ++1.6.3.msysgit.0 ++ +diff --git a/0001-Make-the-welcome-screen-into-plugins.patch.modified b/0001-Make-the-welcome-screen-into-plugins.patch.modified +new file mode 100644 +index 0000000..3ccea00 +--- /dev/null ++++ b/0001-Make-the-welcome-screen-into-plugins.patch.modified +@@ -0,0 +1,4364 @@ ++From b551c15d0842620e4653a4c48a8e31d7de9f1bfb Mon Sep 17 00:00:00 2001 ++From: Daniel Molkentin <daniel.molkentin@nokia.com> ++Date: Mon, 27 Jul 2009 13:55:30 +0200 ++Subject: [PATCH] Make the welcome screen into plugins. ++ ++This removes the all hard dependencies to and from welcome screen, ++except the one to the core plugin. More in detail: ++ ++- Add IWelcomePage to add a tab to the welcome screen ++- Move tabs in the modules where they belong ++- Enables QHelpManager to open help fullscreen and contextually ++- "Getting Started" moves to Qt4ProjectManager ++- Projects & Sessions (aka "Develop") moves to ProjectExplorer ++- "Community" remains in the welcome plugin for simplicity ++--- ++ src/libs/aggregation/aggregation.pri | 2 + ++ src/libs/extensionsystem/extensionsystem.pro | 10 +- ++ src/libs/extensionsystem/iwelcomepage.cpp | 8 + ++ src/libs/extensionsystem/iwelcomepage.h | 31 + ++ src/libs/extensionsystem/pluginmanager.cpp | 1 + ++ src/libs/utils/welcomemodetreewidget.cpp | 2 + ++ src/plugins/coreplugin/coreplugin.h | 5 - ++ src/plugins/help/Help.pluginspec | 1 - ++ src/plugins/help/help.pro | 1 - ++ src/plugins/help/helpplugin.cpp | 36 +- ++ src/plugins/help/helpplugin.h | 17 +- ++ src/plugins/plugins.pro | 3 - ++ .../projectexplorer/ProjectExplorer.pluginspec | 1 - ++ src/plugins/projectexplorer/projectexplorer.cpp | 38 +- ++ src/plugins/projectexplorer/projectexplorer.h | 6 +- ++ src/plugins/projectexplorer/projectexplorer.pro | 11 +- ++ .../projectexplorer_dependencies.pri | 1 - ++ src/plugins/projectexplorer/projectwelcomepagewidget.cpp | 170 ++++ ++ src/plugins/projectexplorer/projectwelcomepagewidget.h | 81 ++ ++ src/plugins/projectexplorer/projectwelcomepagewidget.ui | 254 ++++++ ++ .../projectexplorer/projectwelcomepage.cpp | 48 ++ ++ src/plugins/projectexplorer/projectwelcomepage.h | 58 ++ ++ .../projectexplorer/projectwelcomeplugin.ui | 21 + ++ .../qt4projectmanager/Qt4ProjectManager.pluginspec | 1 - ++ .../gettingstartedwelcomepagewidget.cpp | 271 ++++++ ++ .../qt4projectmanager/gettingstartedwelcomepagewidget.h | 69 ++ ++ .../qt4projectmanager/gettingstartedwelcomepagewidget.ui | 343 ++++++++ ++ .../gettingstartedwelcomepage.cpp | 47 ++ ++ .../gettingstartedwelcomepage.h | 56 ++ ++ .../qt4projectmanager/qt4projectmanager.pro | 14 +- ++ .../qt4projectmanager_dependencies.pri | 1 - ++ .../qt4projectmanager/qt4projectmanagerplugin.cpp | 13 +- ++ .../qt4projectmanager/qt4projectmanagerplugin.h | 2 + ++ src/plugins/qt4projectmanager/qtversionmanager.cpp | 9 +- ++ src/plugins/qt4projectmanager/qtversionmanager.h | 5 +- ++ src/plugins/welcome/communitywelcomepagewidget.cpp | 93 +++ ++ src/plugins/welcome/communitywelcomepagewidget.h | 64 ++ ++ src/plugins/welcome/communitywelcomepagewidget.ui | 190 +++++ ++ src/plugins/welcome/communitywelcomepage.h | 47 ++ ++ src/plugins/welcome/communitywelcomepage.h | 60 ++ ++ src/plugins/welcome/rssfetcher.cpp | 2 +- ++ src/plugins/welcome/rssfetcher.h | 2 + ++ src/plugins/welcome/welcome.pro | 11 +- ++ src/plugins/welcome/welcomemode.cpp | 409 ++------- ++ src/plugins/welcome/welcomemode.h | 35 +- ++ src/plugins/welcome/welcomemode.ui | 872 +------------------- ++ src/plugins/welcome/welcomeplugin.cpp | 15 +- ++ src/plugins/welcome/welcomeplugin.h | 5 + ++ 48 files changed, 2142 insertions(+), 1300 deletions(-) ++ create mode 100644 src/libs/extensionsystem/iwelcomeplugin.cpp ++ create mode 100644 src/libs/extensionsystem/iwelcomepage.h ++ create mode 100644 src/plugins/projectexplorer/projectwelcomepagewidget.cpp ++ create mode 100644 src/plugins/projectexplorer/projectwelcomepagewidget.h ++ create mode 100644 src/plugins/projectexplorer/projectwelcomepagewidget.ui ++ create mode 100644 src/plugins/projectexplorer/projectwelcomepage.cpp ++ create mode 100644 src/plugins/projectexplorer/projectwelcomepage.h ++ create mode 100644 src/plugins/projectexplorer/projectwelcomeplugin.ui ++ create mode 100644 src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.cpp ++ create mode 100644 src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.h ++ create mode 100644 src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.ui ++ create mode 100644 src/plugins/qt4projectmanager/gettingstartedwelcomepage.cpp ++ create mode 100644 src/plugins/qt4projectmanager/gettingstartedwelcomepage.h ++ create mode 100644 src/plugins/welcome/communitywelcomepagewidget.cpp ++ create mode 100644 src/plugins/welcome/communitywelcomepagewidget.h ++ create mode 100644 src/plugins/welcome/communitywelcomepagewidget.ui ++ create mode 100644 src/plugins/welcome/communitywelcomepage.h ++ create mode 100644 src/plugins/welcome/communitywelcomepage.h ++ ++diff --git a/src/libs/extensionsystem/extensionsystem.pro b/src/libs/extensionsystem/extensionsystem.pro ++index 81f3bc8..ea5574d 100644 ++--- a/src/libs/extensionsystem/extensionsystem.pro +++++ b/src/libs/extensionsystem/extensionsystem.pro ++@@ -4,9 +4,7 @@ DEFINES += EXTENSIONSYSTEM_LIBRARY ++ include(../../qtcreatorlibrary.pri) ++ include(extensionsystem_dependencies.pri) ++ ++-unix:!macx:!freebsd* { ++- LIBS += -ldl ++-} +++unix:!macx:!freebsd*:LIBS += -ldl ++ ++ DEFINES += IDE_TEST_DIR=\\\"$$IDE_SOURCE_TREE\\\" ++ ++@@ -21,14 +19,16 @@ HEADERS += pluginerrorview.h \ ++ pluginspec_p.h \ ++ pluginview.h \ ++ pluginview_p.h \ ++- optionsparser.h +++ optionsparser.h \ +++ iwelcomeplugin.h ++ SOURCES += pluginerrorview.cpp \ ++ plugindetailsview.cpp \ ++ iplugin.cpp \ ++ pluginmanager.cpp \ ++ pluginspec.cpp \ ++ pluginview.cpp \ ++- optionsparser.cpp +++ optionsparser.cpp \ +++ iwelcomepage.cpp ++ FORMS += pluginview.ui \ ++ pluginerrorview.ui \ ++ plugindetailsview.ui ++diff --git a/src/libs/extensionsystem/iwelcomepage.cpp b/src/libs/extensionsystem/iwelcomepage.cpp ++new file mode 100644 ++index 0000000..345d77b ++--- /dev/null +++++ b/src/libs/extensionsystem/iwelcomepage.cpp ++@@ -0,0 +1,8 @@ +++#include "iwelcomepage.h" +++ +++using namespace ExtensionSystem; +++ +++IWelcomePage::IWelcomePage() +++{ +++ +++} ++diff --git a/src/libs/extensionsystem/iwelcomepage b/src/libs/extensionsystem/iwelcomepage.h ++new file mode 100644 ++index 0000000..33546ed ++--- /dev/null +++++ b/src/libs/extensionsystem/iwelcomepage.h ++@@ -0,0 +1,31 @@ +++#ifndef IWELCOMEPAGE_H +++#define IWELCOMEPAGE_H +++ +++ +++#include "extensionsystem_global.h" +++ +++#include <QObject> +++ +++namespace ExtensionSystem { +++ +++class IWelcomePagePrivate; +++ +++class EXTENSIONSYSTEM_EXPORT IWelcomePage : public QObject +++{ +++ Q_OBJECT +++ +++public: +++ IWelcomePage(); +++ +++ virtual QWidget *page() = 0; +++ virtual QString title() const = 0; +++ virtual int priority() const { return 0; } +++ +++private: +++ // not used atm +++ IWelcomePagePrivate *m_d; +++}; +++ +++} +++ +++#endif // IWELCOMEPAGE_H ++diff --git a/src/libs/utils/welcomemodetreewidget.cpp b/src/libs/utils/welcomemodetreewidget.cpp ++index 26d55a3..7ea7373 100644 ++--- a/src/libs/utils/welcomemodetreewidget.cpp +++++ b/src/libs/utils/welcomemodetreewidget.cpp ++@@ -48,6 +48,8 @@ WelcomeModeTreeWidget::WelcomeModeTreeWidget(QWidget *parent) : ++ m_d->bullet = QIcon(QLatin1String(":/welcome/images/list_bullet_arrow.png")); ++ connect(this, SIGNAL(itemClicked(QTreeWidgetItem *, int)), ++ SLOT(slotItemClicked(QTreeWidgetItem *))); +++ +++ viewport()->setAutoFillBackground(false); ++ } ++ ++ WelcomeModeTreeWidget::~WelcomeModeTreeWidget() ++diff --git a/src/plugins/coreplugin/coreplugin.h b/src/plugins/coreplugin/coreplugin.h ++index 04e5be4..ce487fb 100644 ++--- a/src/plugins/coreplugin/coreplugin.h +++++ b/src/plugins/coreplugin/coreplugin.h ++@@ -33,10 +33,6 @@ ++ #include <extensionsystem/iplugin.h> ++ ++ namespace Core { ++- class IMode; ++-} ++- ++-namespace Core { ++ namespace Internal { ++ ++ class EditMode; ++@@ -59,7 +55,6 @@ public slots: ++ ++ private: ++ MainWindow *m_mainWindow; ++- Core::IMode *m_welcomeMode; ++ EditMode *m_editMode; ++ }; ++ ++diff --git a/src/plugins/help/Help.pluginspec b/src/plugins/help/Help.pluginspec ++index d7ccc07..29f1b46 100644 ++--- a/src/plugins/help/Help.pluginspec +++++ b/src/plugins/help/Help.pluginspec ++@@ -22,6 +22,5 @@ will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.</license> ++ <dependency name="Core" version="1.2.80"/> ++ <dependency name="Find" version="1.2.80"/> ++ <dependency name="QuickOpen" version="1.2.80"/> ++- <dependency name="Welcome" version="1.2.80"/> ++ </dependencyList> ++ </plugin> ++diff --git a/src/plugins/help/help.pro b/src/plugins/help/help.pro ++index 1f5ec55..b733a1f 100644 ++--- a/src/plugins/help/help.pro +++++ b/src/plugins/help/help.pro ++@@ -4,7 +4,6 @@ include(../../qtcreatorplugin.pri) ++ include(../../plugins/coreplugin/coreplugin.pri) ++ include(../../plugins/find/find.pri) ++ include(../../plugins/quickopen/quickopen.pri) ++-include(../../plugins/welcome/welcome.pri) ++ QT += network ++ CONFIG += help ++ DEFINES += QT_CLUCENE_SUPPORT \ ++diff --git a/src/plugins/help/helpplugin.cpp b/src/plugins/help/helpplugin.cpp ++index f6e8db8..2ff11c8 100644 ++--- a/src/plugins/help/helpplugin.cpp +++++ b/src/plugins/help/helpplugin.cpp ++@@ -87,8 +87,8 @@ ++ using namespace Help; ++ using namespace Help::Internal; ++ ++-HelpManager::HelpManager(QHelpEngine *helpEngine) ++- : m_helpEngine(helpEngine) +++HelpManager::HelpManager(Internal::HelpPlugin* plugin) +++ : m_plugin(plugin) ++ { ++ } ++ ++@@ -96,7 +96,7 @@ void HelpManager::registerDocumentation(const QStringList &fileNames) ++ { ++ bool needsSetup = false; ++ { ++- QHelpEngineCore hc(m_helpEngine->collectionFile()); +++ QHelpEngineCore hc(m_plugin->helpEngine()->collectionFile()); ++ if (!hc.setupData()) ++ qWarning() << "Could not initialize help engine:" << hc.error(); ++ foreach (const QString &fileName, fileNames) { ++@@ -113,7 +113,17 @@ void HelpManager::registerDocumentation(const QStringList &fileNames) ++ } ++ } ++ if (needsSetup) ++- m_helpEngine->setupData(); +++ m_plugin->helpEngine()->setupData(); +++} +++ +++void HelpManager::openHelpPage(const QString& url) +++{ +++ m_plugin->openHelpPage(url); +++} +++ +++void HelpManager::openContextHelpPage(const QString& url) +++{ +++ m_plugin->openContextHelpPage(url); ++ } ++ ++ HelpPlugin::HelpPlugin() : ++@@ -180,7 +190,7 @@ bool HelpPlugin::initialize(const QStringList &arguments, QString *error) ++ connect(m_helpEngine, SIGNAL(setupFinished()), this, ++ SLOT(updateFilterComboBox())); ++ ++- addAutoReleasedObject(new HelpManager(m_helpEngine)); +++ addAutoReleasedObject(new HelpManager(this)); ++ ++ m_filterSettingsPage = new FilterSettingsPage(m_helpEngine); ++ addAutoReleasedObject(m_filterSettingsPage); ++@@ -430,6 +440,11 @@ bool HelpPlugin::initialize(const QStringList &arguments, QString *error) ++ return true; ++ } ++ +++QHelpEngine* HelpPlugin::helpEngine() const +++{ +++ return m_helpEngine; +++} +++ ++ void HelpPlugin::createRightPaneSideBar() ++ { ++ QAction *switchToHelpMode = new QAction("Go to Help Mode", this); ++@@ -610,17 +625,6 @@ void HelpPlugin::extensionsInitialized() ++ updateFilterComboBox(); ++ m_bookmarkManager->setupBookmarkModels(); ++ ++- using namespace Core::Internal; ++- using namespace Core::Constants; ++- Welcome::WelcomeMode *welcomeMode = ++- qobject_cast<Welcome::WelcomeMode*>(m_core->modeManager()->mode(MODE_WELCOME)); ++- if (welcomeMode) { ++- connect(welcomeMode, SIGNAL(openHelpPage(QString)), this, ++- SLOT(openHelpPage(QString))); ++- connect(welcomeMode, SIGNAL(openContextHelpPage(QString)), this, ++- SLOT(openContextHelpPage(QString))); ++- } ++- ++ #if !defined(QT_NO_WEBKIT) ++ QWebSettings* webSettings = QWebSettings::globalSettings(); ++ QFont font(webSettings->fontFamily(QWebSettings::StandardFont), ++diff --git a/src/plugins/help/helpplugin.h b/src/plugins/help/helpplugin.h ++index 6ab78cf..10cf1fd 100644 ++--- a/src/plugins/help/helpplugin.h +++++ b/src/plugins/help/helpplugin.h ++@@ -63,6 +63,7 @@ class SideBarItem; ++ namespace Help { ++ namespace Internal { ++ class CentralWidget; +++ class HelpPlugin; ++ } ++ ++ namespace Constants { ++@@ -76,12 +77,14 @@ class HELP_EXPORT HelpManager : public QObject ++ { ++ Q_OBJECT ++ public: ++- HelpManager(QHelpEngine *helpEngine); +++ HelpManager(Internal::HelpPlugin*); ++ ++ void registerDocumentation(const QStringList &fileNames); +++ void openHelpPage(const QString& url); +++ void openContextHelpPage(const QString &url); ++ ++ private: ++- QHelpEngine *m_helpEngine; +++ Internal::HelpPlugin *m_plugin; ++ }; ++ ++ namespace Internal { ++@@ -108,6 +111,12 @@ public: ++ void setIndexFilter(const QString &filter); ++ QString indexFilter() const; ++ +++ void openHelpPage(const QUrl& url); +++ void openHelpPage(const QString& url); +++ void openContextHelpPage(const QString &url); +++ +++ QHelpEngine* helpEngine() const; +++ ++ private slots: ++ void modeChanged(Core::IMode *mode); ++ void activateContext(); ++@@ -128,10 +137,6 @@ private slots: ++ void slotHideRightPane(); ++ void copyFromSideBar(); ++ ++- void openHelpPage(const QUrl& url); ++- void openHelpPage(const QString& url); ++- void openContextHelpPage(const QString &url); ++- ++ void updateSideBarSource(); ++ void updateSideBarSource(const QUrl &newUrl); ++ ++diff --git a/src/plugins/plugins.pro b/src/plugins/plugins.pro ++index 6ef52c1..b8ae5ec 100644 ++--- a/src/plugins/plugins.pro +++++ b/src/plugins/plugins.pro ++@@ -94,7 +94,6 @@ plugin_projectexplorer.depends = plugin_quickopen ++ plugin_projectexplorer.depends += plugin_find ++ plugin_projectexplorer.depends += plugin_coreplugin ++ plugin_projectexplorer.depends += plugin_texteditor ++-plugin_projectexplorer.depends += plugin_welcome ++ ++ plugin_qt4projectmanager.subdir = qt4projectmanager ++ plugin_qt4projectmanager.depends = plugin_texteditor ++@@ -103,7 +102,6 @@ plugin_qt4projectmanager.depends += plugin_cpptools ++ plugin_qt4projectmanager.depends += plugin_cppeditor ++ plugin_qt4projectmanager.depends += plugin_help ++ plugin_qt4projectmanager.depends += plugin_designer ++-plugin_qt4projectmanager.depends += plugin_welcome ++ ++ plugin_quickopen.subdir = quickopen ++ plugin_quickopen.depends = plugin_coreplugin ++@@ -144,7 +142,6 @@ plugin_help.subdir = help ++ plugin_help.depends = plugin_find ++ plugin_help.depends += plugin_quickopen ++ plugin_help.depends += plugin_coreplugin ++-plugin_help.depends += plugin_welcome ++ ++ plugin_resourceeditor.subdir = resourceeditor ++ plugin_resourceeditor.depends = plugin_coreplugin ++diff --git a/src/plugins/projectexplorer/ProjectExplorer.pluginspec b/src/plugins/projectexplorer/ProjectExplorer.pluginspec ++index 6a66cfe..8b5a7c3 100644 ++--- a/src/plugins/projectexplorer/ProjectExplorer.pluginspec +++++ b/src/plugins/projectexplorer/ProjectExplorer.pluginspec ++@@ -23,6 +23,5 @@ will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.</license> ++ <dependency name="Find" version="1.2.80"/> ++ <dependency name="QuickOpen" version="1.2.80"/> ++ <dependency name="TextEditor" version="1.2.80"/> ++- <dependency name="Welcome" version="1.2.80"/> ++ </dependencyList> ++ </plugin> ++diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp ++index f10b628..101a2e8 100644 ++--- a/src/plugins/projectexplorer/projectexplorer.cpp +++++ b/src/plugins/projectexplorer/projectexplorer.cpp ++@@ -57,6 +57,8 @@ ++ #include "sessiondialog.h" ++ #include "buildparserfactory.h" ++ #include "projectexplorersettingspage.h" +++#include "projectwelcomepage.h" +++#include "projectwelcomepagewidget.h" ++ ++ #include <coreplugin/basemode.h> ++ #include <coreplugin/coreconstants.h> ++@@ -140,6 +142,7 @@ ProjectExplorerPlugin::ProjectExplorerPlugin() ++ ++ ProjectExplorerPlugin::~ProjectExplorerPlugin() ++ { +++ removeObject(m_welcomePlugin); ++ removeObject(this); ++ } ++ ++@@ -156,6 +159,11 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er ++ Core::ICore *core = Core::ICore::instance(); ++ Core::ActionManager *am = core->actionManager(); ++ +++ m_welcomePlugin = new ProjectWelcomePage; +++ m_welcomePage = qobject_cast<Internal::ProjectWelcomePageWidget*>(m_welcomePlugin->page()); +++ Q_ASSERT(m_welcomePage); +++ connect(m_welcomePage, SIGNAL(manageSessions()), this, SLOT(showSessionManager())); +++ addObject(m_welcomePlugin); ++ addObject(this); ++ ++ connect(core->fileManager(), SIGNAL(currentFileChanged(QString)), ++@@ -646,10 +654,6 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er ++ m_projectExplorerSettings.showCompilerOutput = s->value("ProjectExplorer/Settings/ShowCompilerOutput", false).toBool(); ++ } ++ ++- if (Welcome::WelcomeMode *welcomeMode = qobject_cast<Welcome::WelcomeMode*> ++- (Core::ICore::instance()->modeManager()->mode(Core::Constants::MODE_WELCOME))) { ++- connect(welcomeMode, SIGNAL(manageSessions()), this, SLOT(showSessionManager())); ++- } ++ connect(m_sessionManagerAction, SIGNAL(triggered()), this, SLOT(showSessionManager())); ++ connect(m_newAction, SIGNAL(triggered()), this, SLOT(newProject())); ++ #if 0 ++@@ -685,6 +689,8 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er ++ this, SLOT(determineSessionToRestoreAtStartup())); ++ connect(Core::ICore::instance(), SIGNAL(coreOpened()), this, SLOT(restoreSession())); ++ +++ updateWelcomePage(); +++ ++ return true; ++ } ++ ++@@ -835,9 +841,7 @@ void ProjectExplorerPlugin::showSessionManager() ++ Core::ModeManager *modeManager = Core::ModeManager::instance(); ++ Core::IMode *welcomeMode = modeManager->mode(Core::Constants::MODE_WELCOME); ++ if (modeManager->currentMode() == welcomeMode) ++- { ++- updateWelcomePage(qobject_cast<Welcome::WelcomeMode*>(welcomeMode)); ++- } +++ updateWelcomePage(); ++ } ++ ++ void ProjectExplorerPlugin::setStartupProject(Project *project) ++@@ -1019,20 +1023,19 @@ Project *ProjectExplorerPlugin::startupProject() const ++ } ++ ++ // update welcome page ++-void ProjectExplorerPlugin::updateWelcomePage(Welcome::WelcomeMode *welcomeMode) +++void ProjectExplorerPlugin::updateWelcomePage() ++ { ++- Welcome::WelcomeMode::WelcomePageData welcomePageData; +++ ProjectWelcomePageWidget::WelcomePageData welcomePageData; ++ welcomePageData.sessionList = m_session->sessions(); ++ welcomePageData.activeSession = m_session->activeSession(); ++ welcomePageData.previousSession = m_session->lastSession(); ++ welcomePageData.projectList = m_recentProjects; ++- welcomeMode->updateWelcomePage(welcomePageData); +++ m_welcomePage->updateWelcomePage(welcomePageData); ++ } ++ ++-void ProjectExplorerPlugin::currentModeChanged(Core::IMode *mode) +++void ProjectExplorerPlugin::currentModeChanged(Core::IMode *) ++ { ++- if (Welcome::WelcomeMode *welcomeMode = qobject_cast<Welcome::WelcomeMode*>(mode)) ++- updateWelcomePage(welcomeMode); +++ updateWelcomePage(); ++ } ++ ++ void ProjectExplorerPlugin::determineSessionToRestoreAtStartup() ++@@ -1080,12 +1083,9 @@ void ProjectExplorerPlugin::restoreSession() ++ // update welcome page ++ Core::ModeManager *modeManager = Core::ModeManager::instance(); ++ connect(modeManager, SIGNAL(currentModeChanged(Core::IMode*)), this, SLOT(currentModeChanged(Core::IMode*))); ++- if (Welcome::WelcomeMode *welcomeMode = qobject_cast<Welcome::WelcomeMode*>(modeManager->mode(Core::Constants::MODE_WELCOME))) { ++- updateWelcomePage(welcomeMode); ++- connect(welcomeMode, SIGNAL(requestSession(QString)), this, SLOT(loadSession(QString))); ++- connect(welcomeMode, SIGNAL(requestProject(QString)), this, SLOT(loadProject(QString))); ++- } ++- +++ connect(m_welcomePage, SIGNAL(requestSession(QString)), this, SLOT(loadSession(QString))); +++ connect(m_welcomePage, SIGNAL(requestProject(QString)), this, SLOT(loadProject(QString))); +++ ++ Core::ICore::instance()->openFiles(arguments); ++ updateActions(); ++ ++diff --git a/src/plugins/projectexplorer/projectexplorer.h b/src/plugins/projectexplorer/projectexplorer.h ++index 0f781ea..48f8c27 100644 ++--- a/src/plugins/projectexplorer/projectexplorer.h +++++ b/src/plugins/projectexplorer/projectexplorer.h ++@@ -72,6 +72,8 @@ class ApplicationOutput; ++ class OutputPane; ++ class ProjectWindow; ++ class ProjectFileFactory; +++class ProjectWelcomePage; +++class ProjectWelcomePageWidget; ++ ++ struct ProjectExplorerSettings ++ { ++@@ -209,7 +211,7 @@ private: ++ ++ void updateActions(); ++ void addToRecentProjects(const QString &fileName, const QString &displayName); ++- void updateWelcomePage(Welcome::WelcomeMode *welcomeMode); +++ void updateWelcomePage(); ++ Internal::ProjectFileFactory *findProjectFileFactory(const QString &filename) const; ++ ++ static ProjectExplorerPlugin *m_instance; ++@@ -279,6 +281,8 @@ private: ++ QString m_runMode; ++ QString m_projectFilterString; ++ Internal::ProjectExplorerSettings m_projectExplorerSettings; +++ Internal::ProjectWelcomePage *m_welcomePlugin; +++ Internal::ProjectWelcomePageWidget *m_welcomePage; ++ }; ++ ++ namespace Internal { ++diff --git a/src/plugins/projectexplorer/projectexplorer.pro b/src/plugins/projectexplorer/projectexplorer.pro ++index ffb0b08..4a954cc 100644 ++--- a/src/plugins/projectexplorer/projectexplorer.pro +++++ b/src/plugins/projectexplorer/projectexplorer.pro ++@@ -61,7 +61,9 @@ HEADERS += projectexplorer.h \ ++ filewatcher.h \ ++ debugginghelper.h \ ++ abstractmakestep.h \ ++- projectexplorersettingspage.h +++ projectexplorersettingspage.h \ +++ projectwelcomepage.h \ +++ projectwelcomepagewidget.h ++ SOURCES += projectexplorer.cpp \ ++ projectwindow.cpp \ ++ buildmanager.cpp \ ++@@ -111,7 +113,9 @@ SOURCES += projectexplorer.cpp \ ++ filewatcher.cpp \ ++ debugginghelper.cpp \ ++ abstractmakestep.cpp \ ++- projectexplorersettingspage.cpp +++ projectexplorersettingspage.cpp \ +++ projectwelcomepage.cpp \ +++ projectwelcomepagewidget.cpp ++ FORMS += processstep.ui \ ++ editorsettingspropertiespage.ui \ ++ runsettingspropertiespage.ui \ ++@@ -119,7 +123,8 @@ FORMS += processstep.ui \ ++ projectwizardpage.ui \ ++ buildstepspage.ui \ ++ removefiledialog.ui \ ++- projectexplorersettingspage.ui +++ projectexplorersettingspage.ui \ +++ projectwelcomepagewidget.ui ++ win32 { ++ SOURCES += applicationlauncher_win.cpp \ ++ winguiprocess.cpp ++diff --git a/src/plugins/projectexplorer/projectexplorer_dependencies.pri b/src/plugins/projectexplorer/projectexplorer_dependencies.pri ++index ecbb7a4..674c8bb 100644 ++--- a/src/plugins/projectexplorer/projectexplorer_dependencies.pri +++++ b/src/plugins/projectexplorer/projectexplorer_dependencies.pri ++@@ -3,4 +3,3 @@ include(../../plugins/quickopen/quickopen.pri) ++ include(../../plugins/find/find.pri) ++ include(../../plugins/coreplugin/coreplugin.pri) ++ include(../../plugins/texteditor/texteditor.pri) ++-include(../../plugins/welcome/welcome.pri) ++diff --git a/src/plugins/projectexplorer/projectwelcomepagewidget.cpp b/src/plugins/projectexplorer/projectwelcomepagewidget.cpp ++new file mode 100644 ++index 0000000..ff50f38 ++--- /dev/null +++++ b/src/plugins/projectexplorer/projectwelcomepagewidget.cpp ++@@ -0,0 +1,170 @@ +++/************************************************************************** +++** +++** This file is part of Qt Creator +++** +++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +++** +++** Contact: Nokia Corporation (qt-info@nokia.com) +++** +++** Commercial Usage +++** +++** Licensees holding valid Qt Commercial licenses may use this file in +++** accordance with the Qt Commercial License Agreement provided with the +++** Software or, alternatively, in accordance with the terms contained in +++** a written agreement between you and Nokia. +++** +++** GNU Lesser General Public License Usage +++** +++** Alternatively, this file may be used under the terms of the GNU Lesser +++** General Public License version 2.1 as published by the Free Software +++** Foundation and appearing in the file LICENSE.LGPL included in the +++** packaging of this file. Please review the following information to +++** ensure the GNU Lesser General Public License version 2.1 requirements +++** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +++** +++** If you are unsure which license is appropriate for your use, please +++** contact the sales department at http://www.qtsoftware.com/contact. +++** +++**************************************************************************/ +++ +++#include "projectwelcomepagewidget.h" +++#include "ui_projectwelcomepagewidget.h" +++ +++#include <coreplugin/coreconstants.h> +++#include <coreplugin/uniqueidmanager.h> +++#include <coreplugin/modemanager.h> +++#include <coreplugin/icore.h> +++#include <coreplugin/dialogs/iwizard.h> +++ +++#include <QtCore/QFileInfo> +++#include <QtCore/QDir> +++#include <QtCore/QPair> +++#include <QtGui/QLabel> +++#include <QtGui/QTreeWidgetItem> +++ +++#include <QtCore/QDebug> +++ +++using namespace ProjectExplorer::Internal; +++ +++static QString formatTitleLabel(const QString &text) +++{ +++ // TODO: do not hardcode here +++ QString rc = QLatin1String( +++ "<html><head><style type=\"text/css\">p, li { white-space: pre-wrap; }</style></head>" +++ "<body style=\" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;\">" +++ "<p style=\" margin-top:16px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">" +++ "<span style=\" font-size:x-large; color:#555555;\">"); +++ rc += text; +++ rc += QLatin1String("</span></p><hr/></body></html>"); +++ return rc; +++} +++ +++bool ProjectWelcomePageWidget::WelcomePageData::operator==(const WelcomePageData &rhs) const +++{ +++ return previousSession == rhs.previousSession +++ && activeSession == rhs.activeSession +++ && sessionList == rhs.sessionList +++ && projectList == rhs.projectList; +++} +++ +++bool ProjectWelcomePageWidget::WelcomePageData::operator!=(const WelcomePageData &rhs) const +++{ +++ return previousSession != rhs.previousSession +++ || activeSession != rhs.activeSession +++ || sessionList != rhs.sessionList +++ || projectList != rhs.projectList; +++} +++ +++QDebug operator<<(QDebug dgb, const ProjectWelcomePageWidget::WelcomePageData &d) +++{ +++ dgb.nospace() << "PreviousSession=" << d.previousSession +++ << " activeSession=" << d.activeSession +++ << " sessionList=" << d.sessionList +++ << " projectList=" << d.projectList; +++ return dgb; +++} +++ +++ProjectWelcomePageWidget::ProjectWelcomePageWidget(QWidget *parent) : +++ QWidget(parent), +++ ui(new Ui::ProjectWelcomePageWidget) +++{ +++ ui->setupUi(this); +++ ui->projTitleLabel->setText(::formatTitleLabel(tr("Open Recent Project"))); +++ ui->recentSessionsTitleLabel->setText(::formatTitleLabel(tr("Resume Session"))); +++ updateWelcomePage(WelcomePageData()); +++ +++ connect(ui->sessTreeWidget, SIGNAL(activated(QString)), SLOT(slotSessionClicked(QString))); +++ connect(ui->projTreeWidget, SIGNAL(activated(QString)), SLOT(slotProjectClicked(QString))); +++ connect(ui->createNewProjectButton, SIGNAL(clicked()), SLOT(slotCreateNewProject())); +++ connect(ui->manageSessionsButton, SIGNAL(clicked()), SIGNAL(manageSessions())); +++ +++} +++ +++ProjectWelcomePageWidget::~ProjectWelcomePageWidget() +++{ +++ delete ui; +++} +++ +++void ProjectWelcomePageWidget::updateWelcomePage(const WelcomePageData &welcomePageData) +++{ +++ // Update only if data are modified +++ if (welcomePageData == lastData) +++ return; +++ lastData = welcomePageData; +++ +++ setUpdatesEnabled(false); +++ ui->sessTreeWidget->clear(); +++ ui->projTreeWidget->clear(); +++ +++ if (welcomePageData.sessionList.count() > 0) { +++ foreach (const QString &s, welcomePageData.sessionList) { +++ QString str = s; +++ if (s == welcomePageData.previousSession) +++ str = tr("%1 (last session)").arg(s); +++ ui->sessTreeWidget->addItem(str, s); +++ } +++ ui->sessTreeWidget->updateGeometry(); +++ ui->sessTreeWidget->show(); +++ } else { +++ ui->sessTreeWidget->hide(); +++ } +++ +++ typedef QPair<QString, QString> QStringPair; +++ if (welcomePageData.projectList.count() > 0) { +++ foreach (const QStringPair &it, welcomePageData.projectList) { +++ QTreeWidgetItem *item = ui->projTreeWidget->addItem(it.second, it.first); +++ const QFileInfo fi(it.first); +++ item->setToolTip(1, QDir::toNativeSeparators(fi.absolutePath())); +++ } +++ } else { +++ ui->projTreeWidget->hide(); +++ } +++ ui->projTreeWidget->updateGeometry(); +++ setUpdatesEnabled(true); +++} +++ +++void ProjectWelcomePageWidget::activateEditMode() +++{ +++ Core::ModeManager *modeManager = Core::ModeManager::instance(); +++ if (modeManager->currentMode() == modeManager->mode(Core::Constants::MODE_WELCOME)) +++ modeManager->activateMode(Core::Constants::MODE_EDIT); +++} +++ +++ +++void ProjectWelcomePageWidget::slotSessionClicked(const QString &data) +++{ +++ emit requestSession(data); +++ activateEditMode(); +++} +++ +++void ProjectWelcomePageWidget::slotProjectClicked(const QString &data) +++{ +++ emit requestProject(data); +++ activateEditMode(); +++} +++ +++void ProjectWelcomePageWidget::slotCreateNewProject() +++{ +++ Core::ICore::instance()->showNewItemDialog(tr("New Project..."), +++ Core::IWizard::wizardsOfKind(Core::IWizard::ProjectWizard)); +++} ++diff --git a/src/plugins/projectexplorer/projectwelcomepagewidget.h b/src/plugins/projectexplorer/projectwelcomepagewidget.h ++new file mode 100644 ++index 0000000..02e277d ++--- /dev/null +++++ b/src/plugins/projectexplorer/projectwelcomepagewidget.h ++@@ -0,0 +1,81 @@ +++/************************************************************************** +++** +++** This file is part of Qt Creator +++** +++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +++** +++** Contact: Nokia Corporation (qt-info@nokia.com) +++** +++** Commercial Usage +++** +++** Licensees holding valid Qt Commercial licenses may use this file in +++** accordance with the Qt Commercial License Agreement provided with the +++** Software or, alternatively, in accordance with the terms contained in +++** a written agreement between you and Nokia. +++** +++** GNU Lesser General Public License Usage +++** +++** Alternatively, this file may be used under the terms of the GNU Lesser +++** General Public License version 2.1 as published by the Free Software +++** Foundation and appearing in the file LICENSE.LGPL included in the +++** packaging of this file. Please review the following information to +++** ensure the GNU Lesser General Public License version 2.1 requirements +++** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +++** +++** If you are unsure which license is appropriate for your use, please +++** contact the sales department at http://www.qtsoftware.com/contact. +++** +++**************************************************************************/ +++ +++#ifndef PROJECTWELCOMEPAGEWIDGET_H +++#define PROJECTWELCOMEPAGEWIDGET_H +++ +++#include <QtGui/QWidget> +++ +++ +++namespace ProjectExplorer { +++ namespace Internal { +++ +++ +++namespace Ui { +++ class ProjectWelcomePageWidget; +++} +++ +++class ProjectWelcomePageWidget : public QWidget { +++ Q_OBJECT +++public: +++ ProjectWelcomePageWidget(QWidget *parent = 0); +++ ~ProjectWelcomePageWidget(); +++ +++ struct WelcomePageData{ +++ bool operator==(const WelcomePageData &rhs) const; +++ bool operator!=(const WelcomePageData &rhs) const; +++ +++ QString previousSession; +++ QString activeSession; +++ QStringList sessionList; +++ QList<QPair<QString, QString> > projectList; // pair of filename, displayname +++ }; +++ +++ void updateWelcomePage(const WelcomePageData &welcomePageData); +++ +++signals: +++ void requestProject(const QString &project); +++ void requestSession(const QString &session); +++ void manageSessions(); +++ +++private slots: +++ void slotSessionClicked(const QString &data); +++ void slotProjectClicked(const QString &data); +++ void slotCreateNewProject(); +++ +++private: +++ void activateEditMode(); +++ Ui::ProjectWelcomePageWidget *ui; +++ WelcomePageData lastData; +++}; +++ +++} +++} +++ +++#endif // PROJECTWELCOMEPAGEWIDGET_H ++diff --git a/src/plugins/projectexplorer/projectwelcomepagewidget.ui b/src/plugins/projectexplorer/projectwelcomepagewidget.ui ++new file mode 100644 ++index 0000000..cb26957 ++--- /dev/null +++++ b/src/plugins/projectexplorer/projectwelcomepagewidget.ui ++@@ -0,0 +1,254 @@ +++<?xml version="1.0" encoding="UTF-8"?> +++<ui version="4.0"> +++ <class>ProjectExplorer::Internal::ProjectWelcomePageWidget</class> +++ <widget class="QWidget" name="ProjectExplorer::Internal::ProjectWelcomePageWidget"> +++ <property name="geometry"> +++ <rect> +++ <x>0</x> +++ <y>0</y> +++ <width>667</width> +++ <height>365</height> +++ </rect> +++ </property> +++ <property name="windowTitle"> +++ <string>Form</string> +++ </property> +++ <layout class="QHBoxLayout" name="horizontalLayout"> +++ <item> +++ <widget class="QFrame" name="recentSessionsFrame"> +++ <property name="sizePolicy"> +++ <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> +++ <horstretch>0</horstretch> +++ <verstretch>0</verstretch> +++ </sizepolicy> +++ </property> +++ <property name="minimumSize"> +++ <size> +++ <width>270</width> +++ <height>130</height> +++ </size> +++ </property> +++ <property name="styleSheet"> +++ <string/> +++ </property> +++ <layout class="QGridLayout" name="gridLayout_3"> +++ <property name="horizontalSpacing"> +++ <number>0</number> +++ </property> +++ <property name="verticalSpacing"> +++ <number>3</number> +++ </property> +++ <item row="0" column="0" colspan="3"> +++ <widget class="QLabel" name="recentSessionsTitleLabel"> +++ <property name="sizePolicy"> +++ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Maximum"> +++ <horstretch>0</horstretch> +++ <verstretch>0</verstretch> +++ </sizepolicy> +++ </property> +++ <property name="alignment"> +++ <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> +++ </property> +++ </widget> +++ </item> +++ <item row="1" column="0" colspan="3"> +++ <widget class="Core::Utils::WelcomeModeTreeWidget" name="sessTreeWidget"> +++ <property name="sizePolicy"> +++ <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> +++ <horstretch>0</horstretch> +++ <verstretch>0</verstretch> +++ </sizepolicy> +++ </property> +++ <property name="focusPolicy"> +++ <enum>Qt::NoFocus</enum> +++ </property> +++ <property name="frameShape"> +++ <enum>QFrame::NoFrame</enum> +++ </property> +++ <property name="selectionMode"> +++ <enum>QAbstractItemView::NoSelection</enum> +++ </property> +++ <property name="verticalScrollMode"> +++ <enum>QAbstractItemView::ScrollPerPixel</enum> +++ </property> +++ <property name="rootIsDecorated"> +++ <bool>false</bool> +++ </property> +++ <property name="uniformRowHeights"> +++ <bool>true</bool> +++ </property> +++ <property name="allColumnsShowFocus"> +++ <bool>true</bool> +++ </property> +++ <property name="columnCount"> +++ <number>2</number> +++ </property> +++ <attribute name="headerVisible"> +++ <bool>false</bool> +++ </attribute> +++ <attribute name="headerDefaultSectionSize"> +++ <number>24</number> +++ </attribute> +++ <attribute name="headerMinimumSectionSize"> +++ <number>0</number> +++ </attribute> +++ <column> +++ <property name="text"> +++ <string notr="true">1</string> +++ </property> +++ </column> +++ <column> +++ <property name="text"> +++ <string notr="true">2</string> +++ </property> +++ </column> +++ </widget> +++ </item> +++ <item row="3" column="0"> +++ <widget class="QPushButton" name="manageSessionsButton"> +++ <property name="focusPolicy"> +++ <enum>Qt::TabFocus</enum> +++ </property> +++ <property name="text"> +++ <string>Manage Sessions...</string> +++ </property> +++ </widget> +++ </item> +++ <item row="4" column="0"> +++ <spacer name="verticalSpacer"> +++ <property name="orientation"> +++ <enum>Qt::Vertical</enum> +++ </property> +++ <property name="sizeHint" stdset="0"> +++ <size> +++ <width>20</width> +++ <height>40</height> +++ </size> +++ </property> +++ </spacer> +++ </item> +++ </layout> +++ </widget> +++ </item> +++ <item> +++ <widget class="QFrame" name="recentProjectsFrame"> +++ <property name="styleSheet"> +++ <string/> +++ </property> +++ <layout class="QGridLayout" name="gridLayout_5"> +++ <property name="horizontalSpacing"> +++ <number>0</number> +++ </property> +++ <property name="verticalSpacing"> +++ <number>3</number> +++ </property> +++ <property name="rightMargin"> +++ <number>9</number> +++ </property> +++ <item row="0" column="0" colspan="3"> +++ <widget class="QLabel" name="projTitleLabel"> +++ <property name="sizePolicy"> +++ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Maximum"> +++ <horstretch>0</horstretch> +++ <verstretch>0</verstretch> +++ </sizepolicy> +++ </property> +++ <property name="alignment"> +++ <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> +++ </property> +++ </widget> +++ </item> +++ <item row="1" column="0" colspan="3"> +++ <widget class="Core::Utils::WelcomeModeTreeWidget" name="projTreeWidget"> +++ <property name="sizePolicy"> +++ <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> +++ <horstretch>0</horstretch> +++ <verstretch>0</verstretch> +++ </sizepolicy> +++ </property> +++ <property name="focusPolicy"> +++ <enum>Qt::NoFocus</enum> +++ </property> +++ <property name="frameShape"> +++ <enum>QFrame::NoFrame</enum> +++ </property> +++ <property name="selectionMode"> +++ <enum>QAbstractItemView::NoSelection</enum> +++ </property> +++ <property name="verticalScrollMode"> +++ <enum>QAbstractItemView::ScrollPerPixel</enum> +++ </property> +++ <property name="rootIsDecorated"> +++ <bool>false</bool> +++ </property> +++ <property name="uniformRowHeights"> +++ <bool>true</bool> +++ </property> +++ <property name="allColumnsShowFocus"> +++ <bool>true</bool> +++ </property> +++ <property name="columnCount"> +++ <number>2</number> +++ </property> +++ <attribute name="headerVisible"> +++ <bool>false</bool> +++ </attribute> +++ <attribute name="headerDefaultSectionSize"> +++ <number>24</number> +++ </attribute> +++ <attribute name="headerMinimumSectionSize"> +++ <number>0</number> +++ </attribute> +++ <column> +++ <property name="text"> +++ <string notr="true">1</string> +++ </property> +++ </column> +++ <column> +++ <property name="text"> +++ <string notr="true">2</string> +++ </property> +++ </column> +++ </widget> +++ </item> +++ <item row="3" column="0"> +++ <widget class="QPushButton" name="createNewProjectButton"> +++ <property name="focusPolicy"> +++ <enum>Qt::TabFocus</enum> +++ </property> +++ <property name="text"> +++ <string>Create New Project...</string> +++ </property> +++ <property name="flat"> +++ <bool>false</bool> +++ </property> +++ </widget> +++ </item> +++ <item row="4" column="0"> +++ <spacer name="verticalSpacer_2"> +++ <property name="orientation"> +++ <enum>Qt::Vertical</enum> +++ </property> +++ <property name="sizeHint" stdset="0"> +++ <size> +++ <width>20</width> +++ <height>40</height> +++ </size> +++ </property> +++ </spacer> +++ </item> +++ </layout> +++ </widget> +++ </item> +++ </layout> +++ </widget> +++ <customwidgets> +++ <customwidget> +++ <class>Core::Utils::WelcomeModeTreeWidget</class> +++ <extends>QTreeWidget</extends> +++ <header>utils/welcomemodetreewidget.h</header> +++ </customwidget> +++ </customwidgets> +++ <resources/> +++ <connections/> +++</ui> ++diff --git a/src/plugins/projectexplorer/projectwelcomepage.cpp b/src/plugins/projectexplorer/projectwelcomepage.cpp ++new file mode 100644 ++index 0000000..d850c8f ++--- /dev/null +++++ b/src/plugins/projectexplorer/projectwelcomepage.cpp ++@@ -0,0 +1,48 @@ +++/************************************************************************** +++** +++** This file is part of Qt Creator +++** +++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +++** +++** Contact: Nokia Corporation (qt-info@nokia.com) +++** +++** Commercial Usage +++** +++** Licensees holding valid Qt Commercial licenses may use this file in +++** accordance with the Qt Commercial License Agreement provided with the +++** Software or, alternatively, in accordance with the terms contained in +++** a written agreement between you and Nokia. +++** +++** GNU Lesser General Public License Usage +++** +++** Alternatively, this file may be used under the terms of the GNU Lesser +++** General Public License version 2.1 as published by the Free Software +++** Foundation and appearing in the file LICENSE.LGPL included in the +++** packaging of this file. Please review the following information to +++** ensure the GNU Lesser General Public License version 2.1 requirements +++** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +++** +++** If you are unsure which license is appropriate for your use, please +++** contact the sales department at http://www.qtsoftware.com/contact. +++** +++**************************************************************************/ +++ +++#include "projectwelcomepage.h" +++#include "projectwelcomepagewidget.h" +++ +++namespace ProjectExplorer { +++namespace Internal { +++ +++ProjectWelcomePage::ProjectWelcomePage() +++ : m_page(new ProjectWelcomePageWidget) +++{ +++ +++} +++ +++QWidget* ProjectWelcomePage::page() +++{ +++ return m_page; +++} +++ +++} // namespace Internal +++} // namespace ProjectExplorer ++diff --git a/src/plugins/projectexplorer/projectwelcomepage.h b/src/plugins/projectexplorer/projectwelcomepage.h ++new file mode 100644 ++index 0000000..af55a7d ++--- /dev/null +++++ b/src/plugins/projectexplorer/projectwelcomepage.h ++@@ -0,0 +1,58 @@ +++/************************************************************************** +++** +++** This file is part of Qt Creator +++** +++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +++** +++** Contact: Nokia Corporation (qt-info@nokia.com) +++** +++** Commercial Usage +++** +++** Licensees holding valid Qt Commercial licenses may use this file in +++** accordance with the Qt Commercial License Agreement provided with the +++** Software or, alternatively, in accordance with the terms contained in +++** a written agreement between you and Nokia. +++** +++** GNU Lesser General Public License Usage +++** +++** Alternatively, this file may be used under the terms of the GNU Lesser +++** General Public License version 2.1 as published by the Free Software +++** Foundation and appearing in the file LICENSE.LGPL included in the +++** packaging of this file. Please review the following information to +++** ensure the GNU Lesser General Public License version 2.1 requirements +++** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +++** +++** If you are unsure which license is appropriate for your use, please +++** contact the sales department at http://www.qtsoftware.com/contact. +++** +++**************************************************************************/ +++ +++#ifndef PROJECTWELCOMEPAGE_H +++#define PROJECTWELCOMEPAGE_H +++ +++#include <extensionsystem/iwelcomepage.h> +++ +++namespace ProjectExplorer { +++namespace Internal { +++ +++class ProjectWelcomePageWidget; +++ +++class ProjectWelcomePage : public ExtensionSystem::IWelcomePage +++{ +++ Q_OBJECT +++public: +++ ProjectWelcomePage(); +++ +++ QWidget *page(); +++ QString title() const { return tr("Develop"); } +++ int priority() const { return 20; } +++private: +++ ProjectWelcomePageWidget *m_page; +++ +++ +++}; +++ +++} // namespace Internal +++} // namespace ProjectExplorer +++ +++#endif // PROJECTWELCOMEPAGE_H ++diff --git a/src/plugins/projectexplorer/projectwelcomeplugin.ui b/src/plugins/projectexplorer/projectwelcomeplugin.ui ++new file mode 100644 ++index 0000000..7f7c84b ++--- /dev/null +++++ b/src/plugins/projectexplorer/projectwelcomeplugin.ui ++@@ -0,0 +1,21 @@ +++<ui version="4.0" > +++ <author/> +++ <comment/> +++ <exportmacro/> +++ <class>ProjectWelcomePage</class> +++ <widget class="QWidget" name="ProjectWelcomePage" > +++ <property name="geometry" > +++ <rect> +++ <x>0</x> +++ <y>0</y> +++ <width>400</width> +++ <height>300</height> +++ </rect> +++ </property> +++ <property name="windowTitle" > +++ <string>Form</string> +++ </property> +++ </widget> +++ <pixmapfunction/> +++ <connections/> +++</ui> ++diff --git a/src/plugins/qt4projectmanager/Qt4ProjectManager.pluginspec b/src/plugins/qt4projectmanager/Qt4ProjectManager.pluginspec ++index 3b515bd..c4b8d44 100644 ++--- a/src/plugins/qt4projectmanager/Qt4ProjectManager.pluginspec +++++ b/src/plugins/qt4projectmanager/Qt4ProjectManager.pluginspec ++@@ -25,6 +25,5 @@ will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.</license> ++ <dependency name="CppEditor" version="1.2.80"/> ++ <dependency name="Help" version="1.2.80"/> ++ <dependency name="Designer" version="1.2.80"/> ++- <dependency name="Welcome" version="1.2.80"/> ++ </dependencyList> ++ </plugin> ++diff --git a/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.cpp b/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.cpp ++new file mode 100644 ++index 0000000..ca1db4c ++--- /dev/null +++++ b/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.cpp ++@@ -0,0 +1,271 @@ +++/************************************************************************** +++** +++** This file is part of Qt Creator +++** +++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +++** +++** Contact: Nokia Corporation (qt-info@nokia.com) +++** +++** Commercial Usage +++** +++** Licensees holding valid Qt Commercial licenses may use this file in +++** accordance with the Qt Commercial License Agreement provided with the +++** Software or, alternatively, in accordance with the terms contained in +++** a written agreement between you and Nokia. +++** +++** GNU Lesser General Public License Usage +++** +++** Alternatively, this file may be used under the terms of the GNU Lesser +++** General Public License version 2.1 as published by the Free Software +++** Foundation and appearing in the file LICENSE.LGPL included in the +++** packaging of this file. Please review the following information to +++** ensure the GNU Lesser General Public License version 2.1 requirements +++** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +++** +++** If you are unsure which license is appropriate for your use, please +++** contact the sales department at http://www.qtsoftware.com/contact. +++** +++**************************************************************************/ +++ +++#include "gettingstartedwelcomepagewidget.h" +++#include "ui_gettingstartedwelcomepagewidget.h" +++ +++#include <coreplugin/icore.h> +++#include <coreplugin/coreconstants.h> +++ +++#include <extensionsystem/pluginmanager.h> +++ +++#include <help/helpplugin.h> +++ +++#include <QtCore/QDateTime> +++#include <QtCore/QDir> +++#include <QtCore/QFileInfo> +++#include <QtCore/QDebug> +++#include <QtCore/QUrl> +++#include <QtCore/QXmlStreamReader> +++#include <QtGui/QFont> +++ +++namespace Qt4ProjectManager { +++namespace Internal { +++ +++// TODO: remove +++static QString titleLabel(const QString &text) +++{ +++ // TODO: do not hardcode here +++ QString rc = QLatin1String( +++ "<html><head><style type=\"text/css\">p, li { white-space: pre-wrap; }</style></head>" +++ "<body style=\" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;\">" +++ "<p style=\" margin-top:16px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">" +++ "<span style=\" font-size:x-large; color:#555555;\">"); +++ rc += text; +++ rc += QLatin1String("</span></p><hr/></body></html>"); +++ return rc; +++} +++ +++GettingStartedWelcomePageWidget::GettingStartedWelcomePageWidget(QWidget *parent) : +++ QWidget(parent), +++ ui(new Ui::GettingStartedWelcomePageWidget) +++{ +++ ui->setupUi(this); +++ ui->tutorialsTitleLabel->setText(titleLabel(tr("Tutorials"))); +++ ui->demoTitleLabel->setText(titleLabel(tr("Explore Qt Examples"))); +++ ui->didYouKnowTextBrowser->viewport()->setAutoFillBackground(false); +++ ui->didYouKnowTitleLabel->setText(titleLabel(tr("Did You Know?"))); +++ +++ connect(ui->tutorialTreeWidget, SIGNAL(activated(QString)), SLOT(slotOpenHelpPage(const QString&))); +++ connect(ui->openExampleButton, SIGNAL(clicked()), SLOT(slotOpenExample())); +++ connect(ui->examplesComboBox, SIGNAL(currentIndexChanged(int)), SLOT(slotEnableExampleButton(int))); +++ +++ ui->tutorialTreeWidget->addItem(tr("<b>Qt Creator - A quick tour</b>"), +++ QString("qthelp://com.nokia.qtcreator.%1%2/doc/index.html").arg(IDE_VERSION_MAJOR).arg(IDE_VERSION_MINOR)); +++ ui->tutorialTreeWidget->addItem(tr("Creating an address book"), +++ QLatin1String("qthelp://com.nokia.qtcreator/doc/tutorials-addressbook-sdk.html")); +++ ui->tutorialTreeWidget->addItem(tr("Understanding widgets"), +++ QLatin1String("qthelp://com.trolltech.qt/qdoc/widgets-tutorial.html")); +++ ui->tutorialTreeWidget->addItem(tr("Building with qmake"), +++ QLatin1String("qthelp://com.trolltech.qmake/qdoc/qmake-tutorial.html")); +++ ui->tutorialTreeWidget->addItem(tr("Writing test cases"), +++ QLatin1String("qthelp://com.trolltech.qt/qdoc/qtestlib-tutorial.html")); +++ +++ srand(QDateTime::currentDateTime().toTime_t()); +++ QStringList tips = tipsOfTheDay(); +++ m_currentTip = rand()%tips.count(); +++ +++ QTextDocument *doc = ui->didYouKnowTextBrowser->document(); +++ doc->setDefaultStyleSheet("a:link {color:black;}"); +++ ui->didYouKnowTextBrowser->setDocument(doc); +++ ui->didYouKnowTextBrowser->setText(tips.at(m_currentTip)); +++ +++ connect(ui->nextTipBtn, SIGNAL(clicked()), this, SLOT(slotNextTip())); +++ connect(ui->prevTipBtn, SIGNAL(clicked()), this, SLOT(slotPrevTip())); +++ +++} +++ +++GettingStartedWelcomePageWidget::~GettingStartedWelcomePageWidget() +++{ +++ delete ui; +++} +++ +++void GettingStartedWelcomePageWidget::updateExamples(const QString& examplePath, const QString& demosPath, const QString &sourcePath) +++{ +++ QString demoxml = demosPath + "/qtdemo/xml/examples.xml"; +++ if (!QFile::exists(demoxml)) { +++ demoxml = sourcePath + "/demos/qtdemo/xml/examples.xml"; +++ if (!QFile::exists(demoxml)) +++ return; +++ } +++ +++ QFile description(demoxml); +++ if (!description.open(QFile::ReadOnly)) +++ return; +++ +++ ui->examplesComboBox->clear(); +++ ui->examplesComboBox->setEnabled(true); +++ +++ ui->examplesComboBox->addItem(tr("Choose an example...")); +++ QFont f = font(); +++ f.setItalic(true); +++ ui->examplesComboBox->setItemData(0, f, Qt::FontRole); +++ f.setItalic(false); +++ bool inExamples = false; +++ QString dirName; +++ QXmlStreamReader reader(&description); +++ while (!reader.atEnd()) { +++ switch (reader.readNext()) { +++ case QXmlStreamReader::StartElement: +++ if (reader.name() == "category") { +++ QString name = reader.attributes().value(QLatin1String("name")).toString(); +++ if (name.contains("tutorial")) +++ break; +++ dirName = reader.attributes().value(QLatin1String("dirname")).toString(); +++ ui->examplesComboBox->addItem(name); +++ f.setBold(true); +++ ui->examplesComboBox->setItemData(ui->examplesComboBox->count()-1, f, Qt::FontRole); +++ f.setBold(false); +++ inExamples = true; +++ } +++ if (inExamples && reader.name() == "example") { +++ QString name = reader.attributes().value(QLatin1String("name")).toString(); +++ QString fn = reader.attributes().value(QLatin1String("filename")).toString(); +++ QString relativeProPath = '/' + dirName + '/' + fn + '/' + fn + ".pro"; +++ QString fileName = examplePath + relativeProPath; +++ if (!QFile::exists(fileName)) +++ fileName = sourcePath + "/examples" + relativeProPath; +++ QString helpPath = "qthelp://com.trolltech.qt/qdoc/" + dirName.replace("/", "-") + "-" + fn + ".html"; +++ +++ ui->examplesComboBox->addItem(" " + name, fileName); +++ ui->examplesComboBox->setItemData(ui->examplesComboBox->count()-1, helpPath, Qt::UserRole+1); +++ } +++ break; +++ case QXmlStreamReader::EndElement: +++ if (reader.name() == "category") +++ inExamples = false; +++ break; +++ default: +++ break; +++ } +++ } +++} +++ +++void GettingStartedWelcomePageWidget::slotEnableExampleButton(int index) +++{ +++ QString fileName = ui->examplesComboBox->itemData(index, Qt::UserRole).toString(); +++ ui->openExampleButton->setEnabled(!fileName.isEmpty()); +++} +++ +++void GettingStartedWelcomePageWidget::slotOpenExample() +++{ +++ QComboBox *box = ui->examplesComboBox; +++ QString proFile = box->itemData(box->currentIndex(), Qt::UserRole).toString(); +++ QString helpFile = box->itemData(box->currentIndex(), Qt::UserRole + 1).toString(); +++ QStringList files; +++ QFileInfo fi(proFile); +++ QString tryFile = fi.path() + "/main.cpp"; +++ files << proFile; +++ if(!QFile::exists(tryFile)) +++ tryFile = fi.path() + '/' + fi.baseName() + ".cpp"; +++ if(QFile::exists(tryFile)) +++ files << tryFile; +++ Core::ICore::instance()->openFiles(files); +++ slotOpenContextHelpPage(helpFile); +++} +++ +++void GettingStartedWelcomePageWidget::slotOpenHelpPage(const QString& url) +++{ +++ Help::HelpManager *helpManager +++ = ExtensionSystem::PluginManager::instance()->getObject<Help::HelpManager>(); +++ Q_ASSERT(helpManager); +++ helpManager->openHelpPage(url); +++} +++void GettingStartedWelcomePageWidget::slotOpenContextHelpPage(const QString& url) +++{ +++ Help::HelpManager *helpManager +++ = ExtensionSystem::PluginManager::instance()->getObject<Help::HelpManager>(); +++ Q_ASSERT(helpManager); +++ helpManager->openContextHelpPage(url); +++} +++ +++void GettingStartedWelcomePageWidget::slotNextTip() +++{ +++ QStringList tips = tipsOfTheDay(); +++ m_currentTip = ((m_currentTip+1)%tips.count()); +++ ui->didYouKnowTextBrowser->setText(tips.at(m_currentTip)); +++} +++ +++void GettingStartedWelcomePageWidget::slotPrevTip() +++{ +++ QStringList tips = tipsOfTheDay(); +++ m_currentTip = ((m_currentTip-1)+tips.count())%tips.count(); +++ ui->didYouKnowTextBrowser->setText(tips.at(m_currentTip)); +++} +++ +++QStringList GettingStartedWelcomePageWidget::tipsOfTheDay() +++{ +++ static QStringList tips; +++ if (tips.isEmpty()) { +++ QString altShortcut = +++#ifdef Q_WS_MAC +++ tr("Cmd", "Shortcut key"); +++#else +++ tr("Alt", "Shortcut key"); +++#endif +++ tips.append(tr("You can switch between Qt Creator's modes using <tt>Ctrl+number</tt>:<ul>" +++ "<li>1 - Welcome</li><li>2 - Edit</li><li>3 - Debug</li><li>4 - Projects</li><li>5 - Help</li>" +++ "<li></li><li>6 - Output</li></ul>")); +++ //:%1 gets replaced by Alt (Win/Unix) or Cmd (Mac) +++ tips.append(tr("You can show and hide the side bar using <tt>%1+0<tt>.").arg(altShortcut)); +++ tips.append(tr("You can fine tune the <tt>Find</tt> function by selecting "Whole Words" " +++ "or "Case Sensitive". Simply click on the icons on the right end of the line edit.")); +++ tips.append(tr("If you add <a href=\"qthelp://com.nokia.qtcreator/doc/creator-external-library-handling.html\"" +++ ">external libraries</a>, Qt Creator will automatically offer syntax highlighting " +++ "and code completion.")); +++ tips.append(tr("The code completion is CamelCase-aware. For example, to complete <tt>namespaceUri</tt> " +++ "you can just type <tt>nU</tt> and hit <tt>Ctrl+Space</tt>.")); +++ tips.append(tr("You can force code completion at any time using <tt>Ctrl+Space</tt>.")); +++ tips.append(tr("You can start Qt Creator with a session by calling <tt>qtcreator <sessionname></tt>.")); +++ tips.append(tr("You can return to edit mode from any other mode at any time by hitting <tt>Escape</tt>.")); +++ //:%1 gets replaced by Alt (Win/Unix) or Cmd (Mac) +++ tips.append(tr("You can switch between the output pane by hitting <tt>%1+n</tt> where n is the number denoted " +++ "on the buttons at the window bottom:" +++ "<ul><li>1 - Build Issues</li><li>2 - Search Results</li><li>3 - Application Output</li>" +++ "<li>4 - Compile Output</li></ul>").arg(altShortcut)); +++ tips.append(tr("You can quickly search methods, classes, help and more using the " +++ "<a href=\"qthelp://com.nokia.qtcreator/doc/creator-navigation.html\">Locator bar</a> (<tt>Ctrl+K</tt>).")); +++ tips.append(tr("You can add custom build steps in the " +++ "<a href=\"qthelp://com.nokia.qtcreator/doc/creator-build-settings.html\">build settings</a>.")); +++ tips.append(tr("Within a session, you can add " +++ "<a href=\"qthelp://com.nokia.qtcreator/doc/creator-build-settings.html#dependencies\">dependencies</a> between projects.")); +++ tips.append(tr("You can set the preferred editor encoding for every project in <tt>Projects -> Editor Settings -> Default Encoding</tt>.")); +++ tips.append(tr("You can modify the binary that is being executed when you press the <tt>Run</tt> button: Add a <tt>Custom Executable</tt> " +++ "by clicking the <tt>+</tt> button in <tt>Projects -> Run Settings -> Run Configuration</tt> and then select the new " +++ "target in the combo box.")); +++ tips.append(tr("You can use Qt Creator with a number of <a href=\"qthelp://com.nokia.qtcreator/doc/creator-version-control.html\">" +++ "revision control systems</a> such as Subversion, Perforce and Git.")); +++ tips.append(tr("In the editor, <tt>F2</tt> toggles declaration and definition while <tt>F4</tt> toggles header file and source file.")); +++ } +++ return tips; +++} +++ +++ +++} // namespace Internal +++} // namespace Qt4ProjectManager ++diff --git a/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.h b/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.h ++new file mode 100644 ++index 0000000..a40df28 ++--- /dev/null +++++ b/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.h ++@@ -0,0 +1,69 @@ +++/************************************************************************** +++** +++** This file is part of Qt Creator +++** +++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +++** +++** Contact: Nokia Corporation (qt-info@nokia.com) +++** +++** Commercial Usage +++** +++** Licensees holding valid Qt Commercial licenses may use this file in +++** accordance with the Qt Commercial License Agreement provided with the +++** Software or, alternatively, in accordance with the terms contained in +++** a written agreement between you and Nokia. +++** +++** GNU Lesser General Public License Usage +++** +++** Alternatively, this file may be used under the terms of the GNU Lesser +++** General Public License version 2.1 as published by the Free Software +++** Foundation and appearing in the file LICENSE.LGPL included in the +++** packaging of this file. Please review the following information to +++** ensure the GNU Lesser General Public License version 2.1 requirements +++** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +++** +++** If you are unsure which license is appropriate for your use, please +++** contact the sales department at http://www.qtsoftware.com/contact. +++** +++**************************************************************************/ +++ +++#ifndef GETTINGSTARTEDWELCOMEPAGEWIDGET_H +++#define GETTINGSTARTEDWELCOMEPAGEWIDGET_H +++ +++#include <QWidget> +++ +++namespace Qt4ProjectManager { +++namespace Internal { +++ +++namespace Ui { +++ class GettingStartedWelcomePageWidget; +++} +++ +++class GettingStartedWelcomePageWidget : public QWidget { +++ Q_OBJECT +++public: +++ GettingStartedWelcomePageWidget(QWidget *parent = 0); +++ ~GettingStartedWelcomePageWidget(); +++ +++ public slots: +++ void updateExamples(const QString& examplePath, const QString& demosPath, const QString &sourcePath); +++ +++private slots: +++ void slotOpenHelpPage(const QString& url); +++ void slotOpenContextHelpPage(const QString& url); +++ void slotEnableExampleButton(int); +++ void slotOpenExample(); +++ void slotNextTip(); +++ void slotPrevTip(); +++ +++private: +++ QStringList tipsOfTheDay(); +++ +++ Ui::GettingStartedWelcomePageWidget *ui; +++ int m_currentTip; +++}; +++ +++ +++} // namespace Internal +++} // namespace Qt4ProjectManager +++#endif // GETTINGSTARTEDWELCOMEPAGEWIDGET_H ++diff --git a/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.ui b/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.ui ++new file mode 100644 ++index 0000000..8bfebb0 ++--- /dev/null +++++ b/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.ui ++@@ -0,0 +1,343 @@ +++<?xml version="1.0" encoding="UTF-8"?> +++<ui version="4.0"> +++ <class>Qt4ProjectManager::Internal::GettingStartedWelcomePageWidget</class> +++ <widget class="QWidget" name="Qt4ProjectManager::Internal::GettingStartedWelcomePageWidget"> +++ <property name="geometry"> +++ <rect> +++ <x>0</x> +++ <y>0</y> +++ <width>646</width> +++ <height>361</height> +++ </rect> +++ </property> +++ <property name="windowTitle"> +++ <string>Form</string> +++ </property> +++ <layout class="QGridLayout" name="gridLayout"> +++ <item row="0" column="0" rowspan="2"> +++ <widget class="QFrame" name="tutorialsFrame"> +++ <property name="sizePolicy"> +++ <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> +++ <horstretch>0</horstretch> +++ <verstretch>0</verstretch> +++ </sizepolicy> +++ </property> +++ <property name="maximumSize"> +++ <size> +++ <width>400</width> +++ <height>16777215</height> +++ </size> +++ </property> +++ <property name="styleSheet"> +++ <string/> +++ </property> +++ <layout class="QGridLayout" name="gridLayout_6"> +++ <item row="0" column="0"> +++ <widget class="QLabel" name="tutorialsTitleLabel"> +++ <property name="sizePolicy"> +++ <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> +++ <horstretch>0</horstretch> +++ <verstretch>0</verstretch> +++ </sizepolicy> +++ </property> +++ <property name="alignment"> +++ <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> +++ </property> +++ </widget> +++ </item> +++ <item row="1" column="0"> +++ <widget class="Core::Utils::WelcomeModeTreeWidget" name="tutorialTreeWidget"> +++ <property name="sizePolicy"> +++ <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> +++ <horstretch>0</horstretch> +++ <verstretch>0</verstretch> +++ </sizepolicy> +++ </property> +++ <property name="focusPolicy"> +++ <enum>Qt::NoFocus</enum> +++ </property> +++ <property name="frameShape"> +++ <enum>QFrame::NoFrame</enum> +++ </property> +++ <property name="selectionMode"> +++ <enum>QAbstractItemView::NoSelection</enum> +++ </property> +++ <property name="verticalScrollMode"> +++ <enum>QAbstractItemView::ScrollPerPixel</enum> +++ </property> +++ <property name="rootIsDecorated"> +++ <bool>false</bool> +++ </property> +++ <property name="uniformRowHeights"> +++ <bool>true</bool> +++ </property> +++ <property name="allColumnsShowFocus"> +++ <bool>true</bool> +++ </property> +++ <property name="columnCount"> +++ <number>2</number> +++ </property> +++ <attribute name="headerVisible"> +++ <bool>false</bool> +++ </attribute> +++ <attribute name="headerDefaultSectionSize"> +++ <number>24</number> +++ </attribute> +++ <attribute name="headerMinimumSectionSize"> +++ <number>0</number> +++ </attribute> +++ <column> +++ <property name="text"> +++ <string notr="true">1</string> +++ </property> +++ </column> +++ <column> +++ <property name="text"> +++ <string notr="true">2</string> +++ </property> +++ </column> +++ </widget> +++ </item> +++ </layout> +++ </widget> +++ </item> +++ <item row="0" column="1"> +++ <widget class="QFrame" name="demosExamplesFrame"> +++ <property name="sizePolicy"> +++ <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> +++ <horstretch>0</horstretch> +++ <verstretch>0</verstretch> +++ </sizepolicy> +++ </property> +++ <property name="maximumSize"> +++ <size> +++ <width>400</width> +++ <height>16777215</height> +++ </size> +++ </property> +++ <property name="styleSheet"> +++ <string/> +++ </property> +++ <layout class="QGridLayout" name="gridLayout_8"> +++ <property name="rightMargin"> +++ <number>8</number> +++ </property> +++ <property name="horizontalSpacing"> +++ <number>0</number> +++ </property> +++ <item row="0" column="0" colspan="4"> +++ <widget class="QLabel" name="demoTitleLabel"> +++ <property name="alignment"> +++ <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> +++ </property> +++ </widget> +++ </item> +++ <item row="1" column="0"> +++ <widget class="QComboBox" name="examplesComboBox"> +++ <property name="enabled"> +++ <bool>false</bool> +++ </property> +++ <property name="sizePolicy"> +++ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred"> +++ <horstretch>0</horstretch> +++ <verstretch>0</verstretch> +++ </sizepolicy> +++ </property> +++ <item> +++ <property name="text"> +++ <string>Examples not installed</string> +++ </property> +++ </item> +++ </widget> +++ </item> +++ <item row="1" column="2"> +++ <widget class="QToolButton" name="openExampleButton"> +++ <property name="enabled"> +++ <bool>false</bool> +++ </property> +++ <property name="sizePolicy"> +++ <sizepolicy hsizetype="Fixed" vsizetype="Preferred"> +++ <horstretch>0</horstretch> +++ <verstretch>0</verstretch> +++ </sizepolicy> +++ </property> +++ <property name="text"> +++ <string>Open</string> +++ </property> +++ </widget> +++ </item> +++ <item row="1" column="1"> +++ <spacer name="horizontalSpacer"> +++ <property name="orientation"> +++ <enum>Qt::Horizontal</enum> +++ </property> +++ <property name="sizeType"> +++ <enum>QSizePolicy::Fixed</enum> +++ </property> +++ <property name="sizeHint" stdset="0"> +++ <size> +++ <width>6</width> +++ <height>6</height> +++ </size> +++ </property> +++ </spacer> +++ </item> +++ </layout> +++ </widget> +++ </item> +++ <item row="1" column="1"> +++ <widget class="QFrame" name="didyouKnowFrame"> +++ <property name="sizePolicy"> +++ <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> +++ <horstretch>0</horstretch> +++ <verstretch>0</verstretch> +++ </sizepolicy> +++ </property> +++ <property name="maximumSize"> +++ <size> +++ <width>400</width> +++ <height>16777215</height> +++ </size> +++ </property> +++ <property name="styleSheet"> +++ <string/> +++ </property> +++ <layout class="QGridLayout" name="gridLayout_11"> +++ <property name="rightMargin"> +++ <number>9</number> +++ </property> +++ <item row="0" column="0"> +++ <widget class="QLabel" name="didYouKnowTitleLabel"> +++ <property name="sizePolicy"> +++ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Maximum"> +++ <horstretch>0</horstretch> +++ <verstretch>0</verstretch> +++ </sizepolicy> +++ </property> +++ <property name="alignment"> +++ <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> +++ </property> +++ </widget> +++ </item> +++ <item row="1" column="0" colspan="2"> +++ <widget class="QTextBrowser" name="didYouKnowTextBrowser"> +++ <property name="sizePolicy"> +++ <sizepolicy hsizetype="Minimum" vsizetype="Preferred"> +++ <horstretch>0</horstretch> +++ <verstretch>0</verstretch> +++ </sizepolicy> +++ </property> +++ <property name="frameShape"> +++ <enum>QFrame::NoFrame</enum> +++ </property> +++ <property name="frameShadow"> +++ <enum>QFrame::Plain</enum> +++ </property> +++ <property name="verticalScrollBarPolicy"> +++ <enum>Qt::ScrollBarAlwaysOff</enum> +++ </property> +++ <property name="horizontalScrollBarPolicy"> +++ <enum>Qt::ScrollBarAlwaysOff</enum> +++ </property> +++ <property name="openExternalLinks"> +++ <bool>true</bool> +++ </property> +++ </widget> +++ </item> +++ <item row="0" column="1"> +++ <layout class="QGridLayout" name="gridLayout_10"> +++ <property name="spacing"> +++ <number>0</number> +++ </property> +++ <item row="0" column="0" colspan="2"> +++ <spacer name="verticalSpacer_4"> +++ <property name="orientation"> +++ <enum>Qt::Vertical</enum> +++ </property> +++ <property name="sizeType"> +++ <enum>QSizePolicy::Preferred</enum> +++ </property> +++ <property name="sizeHint" stdset="0"> +++ <size> +++ <width>20</width> +++ <height>2</height> +++ </size> +++ </property> +++ </spacer> +++ </item> +++ <item row="1" column="0"> +++ <widget class="QToolButton" name="prevTipBtn"> +++ <property name="styleSheet"> +++ <string notr="true">QToolButton{ +++ border-right:solid 0 px; +++ height:16px; +++ width:12px; +++} +++</string> +++ </property> +++ <property name="text"> +++ <string/> +++ </property> +++ <property name="icon"> +++ <iconset resource="../welcome/welcome.qrc"> +++ <normaloff>:/welcome/images/arrow-left.png</normaloff>:/welcome/images/arrow-left.png</iconset> +++ </property> +++ <property name="arrowType"> +++ <enum>Qt::NoArrow</enum> +++ </property> +++ </widget> +++ </item> +++ <item row="1" column="1"> +++ <widget class="QToolButton" name="nextTipBtn"> +++ <property name="styleSheet"> +++ <string notr="true">QToolButton{ +++ border-left:solid 0 px; +++ height:16px; +++ width:12px; +++} +++</string> +++ </property> +++ <property name="text"> +++ <string/> +++ </property> +++ <property name="icon"> +++ <iconset resource="../welcome/welcome.qrc"> +++ <normaloff>:/welcome/images/arrow-right.png</normaloff>:/welcome/images/arrow-right.png</iconset> +++ </property> +++ <property name="arrowType"> +++ <enum>Qt::NoArrow</enum> +++ </property> +++ </widget> +++ </item> +++ <item row="2" column="0" colspan="2"> +++ <spacer name="verticalSpacer_3"> +++ <property name="orientation"> +++ <enum>Qt::Vertical</enum> +++ </property> +++ <property name="sizeHint" stdset="0"> +++ <size> +++ <width>20</width> +++ <height>2</height> +++ </size> +++ </property> +++ </spacer> +++ </item> +++ </layout> +++ </item> +++ </layout> +++ </widget> +++ </item> +++ </layout> +++ </widget> +++ <customwidgets> +++ <customwidget> +++ <class>Core::Utils::WelcomeModeTreeWidget</class> +++ <extends>QTreeWidget</extends> +++ <header>utils/welcomemodetreewidget.h</header> +++ </customwidget> +++ </customwidgets> +++ <resources> +++ <include location="../welcome/welcome.qrc"/> +++ </resources> +++ <connections/> +++</ui> ++diff --git a/src/plugins/qt4projectmanager/gettingstartedwelcomepage.cpp b/src/plugins/qt4projectmanager/gettingstartedwelcomepage.cpp ++new file mode 100644 ++index 0000000..a68f80d ++--- /dev/null +++++ b/src/plugins/qt4projectmanager/gettingstartedwelcomepage.cpp ++@@ -0,0 +1,47 @@ +++/************************************************************************** +++** +++** This file is part of Qt Creator +++** +++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +++** +++** Contact: Nokia Corporation (qt-info@nokia.com) +++** +++** Commercial Usage +++** +++** Licensees holding valid Qt Commercial licenses may use this file in +++** accordance with the Qt Commercial License Agreement provided with the +++** Software or, alternatively, in accordance with the terms contained in +++** a written agreement between you and Nokia. +++** +++** GNU Lesser General Public License Usage +++** +++** Alternatively, this file may be used under the terms of the GNU Lesser +++** General Public License version 2.1 as published by the Free Software +++** Foundation and appearing in the file LICENSE.LGPL included in the +++** packaging of this file. Please review the following information to +++** ensure the GNU Lesser General Public License version 2.1 requirements +++** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +++** +++** If you are unsure which license is appropriate for your use, please +++** contact the sales department at http://www.qtsoftware.com/contact. +++** +++**************************************************************************/ +++ +++#include "gettingstartedwelcomepage.h" +++#include "gettingstartedwelcomepagewidget.h" +++ +++namespace Qt4ProjectManager { +++namespace Internal { +++ +++GettingStartedWelcomePlugin::GettingStartedWelcomePlugin() +++ : m_page(new GettingStartedWelcomePageWidget) +++{ +++} +++ +++QWidget* GettingStartedWelcomePlugin::page() +++{ +++ return m_page; +++} +++ +++} // namespace Internal +++} // namespace Qt4ProjectManager ++diff --git a/src/plugins/qt4projectmanager/gettingstartedwelcomepage.h b/src/plugins/qt4projectmanager/gettingstartedwelcomepage.h ++new file mode 100644 ++index 0000000..f8760df ++--- /dev/null +++++ b/src/plugins/qt4projectmanager/gettingstartedwelcomepage.h ++@@ -0,0 +1,56 @@ +++/************************************************************************** +++** +++** This file is part of Qt Creator +++** +++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +++** +++** Contact: Nokia Corporation (qt-info@nokia.com) +++** +++** Commercial Usage +++** +++** Licensees holding valid Qt Commercial licenses may use this file in +++** accordance with the Qt Commercial License Agreement provided with the +++** Software or, alternatively, in accordance with the terms contained in +++** a written agreement between you and Nokia. +++** +++** GNU Lesser General Public License Usage +++** +++** Alternatively, this file may be used under the terms of the GNU Lesser +++** General Public License version 2.1 as published by the Free Software +++** Foundation and appearing in the file LICENSE.LGPL included in the +++** packaging of this file. Please review the following information to +++** ensure the GNU Lesser General Public License version 2.1 requirements +++** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +++** +++** If you are unsure which license is appropriate for your use, please +++** contact the sales department at http://www.qtsoftware.com/contact. +++** +++**************************************************************************/ +++ +++#ifndef GETTINGSTARTEDWELCOMEPLUGIN_H +++#define GETTINGSTARTEDWELCOMEPLUGIN_H +++ +++#include <extensionsystem/iwelcomepage.h> +++ +++namespace Qt4ProjectManager { +++namespace Internal { +++ +++class GettingStartedWelcomePageWidget; +++ +++class GettingStartedWelcomePlugin : public ExtensionSystem::IWelcomePage +++{ +++public: +++ GettingStartedWelcomePlugin(); +++ +++ QWidget *page(); +++ QString title() const { return tr("Getting Started");} +++ int priority() const { return 10; } +++ +++private: +++ GettingStartedWelcomePageWidget *m_page; +++}; +++ +++} // namespace Internal +++} // namespace Qt4ProjectManager +++ +++#endif // GETTINGSTARTEDWELCOMEPLUGIN_H ++diff --git a/src/plugins/qt4projectmanager/qt4projectmanager.pro b/src/plugins/qt4projectmanager/qt4projectmanager.pro ++index 6b69139..c9335d5 100644 ++--- a/src/plugins/qt4projectmanager/qt4projectmanager.pro +++++ b/src/plugins/qt4projectmanager/qt4projectmanager.pro ++@@ -3,7 +3,6 @@ TARGET = Qt4ProjectManager ++ QT += network ++ include(../../qtcreatorplugin.pri) ++ include(qt4projectmanager_dependencies.pri) ++- ++ HEADERS += qt4projectmanagerplugin.h \ ++ qt4projectmanager.h \ ++ qt4project.h \ ++@@ -39,7 +38,9 @@ HEADERS += qt4projectmanagerplugin.h \ ++ qtversionmanager.h \ ++ qtoptionspage.h \ ++ qtuicodemodelsupport.h \ ++- externaleditors.h +++ externaleditors.h \ +++ gettingstartedwelcomepagewidget.h \ +++ gettingstartedwelcomepage.h ++ SOURCES += qt4projectmanagerplugin.cpp \ ++ qt4projectmanager.cpp \ ++ qt4project.cpp \ ++@@ -73,19 +74,20 @@ SOURCES += qt4projectmanagerplugin.cpp \ ++ qtversionmanager.cpp \ ++ qtoptionspage.cpp \ ++ qtuicodemodelsupport.cpp \ ++- externaleditors.cpp +++ externaleditors.cpp \ +++ gettingstartedwelcomepagewidget.cpp \ +++ gettingstartedwelcomepage.cpp ++ FORMS += makestep.ui \ ++ qmakestep.ui \ ++ qt4projectconfigwidget.ui \ ++ embeddedpropertiespage.ui \ ++ qtversionmanager.ui \ ++- showbuildlog.ui +++ showbuildlog.ui \ +++ gettingstartedwelcomepagewidget.ui ++ RESOURCES += qt4projectmanager.qrc \ ++ wizards/wizards.qrc ++- ++ include(../../shared/proparser/proparser.pri) ++ include(qt-s60/qt-s60.pri) ++ include(customwidgetwizard/customwidgetwizard.pri) ++- ++ DEFINES += QT_NO_CAST_TO_ASCII ++ OTHER_FILES += Qt4ProjectManager.pluginspec ++diff --git a/src/plugins/qt4projectmanager/qt4projectmanager_dependencies.pri b/src/plugins/qt4projectmanager/qt4projectmanager_dependencies.pri ++index e1bd37d..9a49315 100644 ++--- a/src/plugins/qt4projectmanager/qt4projectmanager_dependencies.pri +++++ b/src/plugins/qt4projectmanager/qt4projectmanager_dependencies.pri ++@@ -3,4 +3,3 @@ include(../../plugins/cpptools/cpptools.pri) ++ include(../../plugins/cppeditor/cppeditor.pri) ++ include(../../plugins/help/help.pri) ++ include(../../plugins/designer/designer.pri) ++-include(../../plugins/welcome/welcome.pri) ++diff --git a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp ++index f740c27..8c87b8d 100644 ++--- a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp +++++ b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp ++@@ -44,6 +44,8 @@ ++ #include "qtversionmanager.h" ++ #include "qtoptionspage.h" ++ #include "externaleditors.h" +++#include "gettingstartedwelcomepage.h" +++#include "gettingstartedwelcomepagewidget.h" ++ ++ #ifdef QTCREATOR_WITH_S60 ++ #include "qt-s60/s60manager.h" ++@@ -82,6 +84,8 @@ Qt4ProjectManagerPlugin::~Qt4ProjectManagerPlugin() ++ delete m_proFileEditorFactory; ++ removeObject(m_qt4ProjectManager); ++ delete m_qt4ProjectManager; +++ removeObject(m_welcomePlugin); +++ delete m_welcomePlugin; ++ } ++ /* ++ static Core::Command *createSeparator(Core::ActionManager *am, ++@@ -106,9 +110,16 @@ bool Qt4ProjectManagerPlugin::initialize(const QStringList &arguments, QString * ++ m_projectExplorer = ProjectExplorer::ProjectExplorerPlugin::instance(); ++ Core::ActionManager *am = core->actionManager(); ++ ++- addAutoReleasedObject(new QtVersionManager()); +++ QtVersionManager *mgr = new QtVersionManager(); +++ addAutoReleasedObject(mgr); ++ addAutoReleasedObject(new QtOptionsPage()); ++ +++ m_welcomePlugin = new GettingStartedWelcomePlugin; +++ addObject(m_welcomePlugin); +++ GettingStartedWelcomePageWidget *gswp = +++ static_cast<GettingStartedWelcomePageWidget*>(m_welcomePlugin->page()); +++ connect(mgr, SIGNAL(updateExamples(QString,QString,QString)), +++ gswp, SLOT(updateExamples(QString,QString,QString))); ++ ++ //create and register objects ++ m_qt4ProjectManager = new Qt4Manager(this); ++diff --git a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.h b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.h ++index 18781bc..84a5fbd 100644 ++--- a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.h +++++ b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.h ++@@ -49,6 +49,7 @@ class MakeStepFactory; ++ class GccParserFactory; ++ class MsvcParserFactory; ++ class EmbeddedPropertiesPage; +++class GettingStartedWelcomePlugin; ++ ++ class Qt4ProjectManagerPlugin : public ExtensionSystem::IPlugin ++ { ++@@ -81,6 +82,7 @@ private: ++ ++ QAction *m_runQMakeAction; ++ QAction *m_runQMakeActionContextMenu; +++ GettingStartedWelcomePlugin *m_welcomePlugin; ++ }; ++ ++ } // namespace Internal ++diff --git a/src/plugins/qt4projectmanager/qtversionmanager.cpp b/src/plugins/qt4projectmanager/qtversionmanager.cpp ++index aa65520..6bce576 100644 ++--- a/src/plugins/qt4projectmanager/qtversionmanager.cpp +++++ b/src/plugins/qt4projectmanager/qtversionmanager.cpp ++@@ -42,7 +42,6 @@ ++ #include <coreplugin/coreconstants.h> ++ #include <coreplugin/icore.h> ++ #include <coreplugin/modemanager.h> ++-#include <welcome/welcomemode.h> ++ #include <extensionsystem/pluginmanager.h> ++ #include <help/helpplugin.h> ++ #include <utils/qtcassert.h> ++@@ -51,6 +50,7 @@ ++ #include <QtCore/QProcess> ++ #include <QtCore/QSettings> ++ #include <QtCore/QTime> +++#include <QtCore/QTimer> ++ #include <QtGui/QApplication> ++ #include <QtGui/QDesktopServices> ++ ++@@ -122,7 +122,8 @@ QtVersionManager::QtVersionManager() ++ writeVersionsIntoSettings(); ++ ++ updateDocumentation(); ++- updateExamples(); +++ // cannot call from ctor, needs to get connected extenernally first +++ QTimer::singleShot(0, this, SLOT(updateExamples())); ++ } ++ ++ QtVersionManager::~QtVersionManager() ++@@ -185,9 +186,7 @@ void QtVersionManager::updateExamples() ++ if (version->hasDemos()) ++ demosPath = version->demosPath(); ++ if (!examplesPath.isEmpty() && !demosPath.isEmpty()) { ++- if (Welcome::WelcomeMode *welcomeMode = qobject_cast<Welcome::WelcomeMode*> ++- (Core::ICore::instance()->modeManager()->mode(Core::Constants::MODE_WELCOME))) ++- welcomeMode->updateExamples(examplesPath, demosPath, version->sourcePath()); +++ emit updateExamples(examplesPath, demosPath, version->sourcePath()); ++ return; ++ } ++ } ++diff --git a/src/plugins/qt4projectmanager/qtversionmanager.h b/src/plugins/qt4projectmanager/qtversionmanager.h ++index 0f2144c..fb7a33b 100644 ++--- a/src/plugins/qt4projectmanager/qtversionmanager.h +++++ b/src/plugins/qt4projectmanager/qtversionmanager.h ++@@ -201,6 +201,10 @@ public: ++ signals: ++ void defaultQtVersionChanged(); ++ void qtVersionsChanged(); +++ void updateExamples(QString, QString, QString); +++ +++private slots: +++ void updateExamples(); ++ private: ++ static QString findQMakeLine(const QString &directory); ++ static QString trimLine(const QString line); ++@@ -215,7 +219,6 @@ private: ++ void addNewVersionsFromInstaller(); ++ void updateSystemVersion(); ++ void updateDocumentation(); ++- void updateExamples(); ++ ++ static int indexOfVersionInList(const QtVersion * const version, const QList<QtVersion *> &list); ++ void updateUniqueIdToIndexMap(); ++diff --git a/src/plugins/welcome/communitywelcomepagewidget.cpp b/src/plugins/welcome/communitywelcomepagewidget.cpp ++new file mode 100644 ++index 0000000..d3127e0 ++--- /dev/null +++++ b/src/plugins/welcome/communitywelcomepagewidget.cpp ++@@ -0,0 +1,93 @@ +++/************************************************************************** +++** +++** This file is part of Qt Creator +++** +++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +++** +++** Contact: Nokia Corporation (qt-info@nokia.com) +++** +++** Commercial Usage +++** +++** Licensees holding valid Qt Commercial licenses may use this file in +++** accordance with the Qt Commercial License Agreement provided with the +++** Software or, alternatively, in accordance with the terms contained in +++** a written agreement between you and Nokia. +++** +++** GNU Lesser General Public License Usage +++** +++** Alternatively, this file may be used under the terms of the GNU Lesser +++** General Public License version 2.1 as published by the Free Software +++** Foundation and appearing in the file LICENSE.LGPL included in the +++** packaging of this file. Please review the following information to +++** ensure the GNU Lesser General Public License version 2.1 requirements +++** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +++** +++** If you are unsure which license is appropriate for your use, please +++** contact the sales department at http://www.qtsoftware.com/contact. +++** +++**************************************************************************/ +++ +++#include "communitywelcomepagewidget.h" +++#include "ui_communitywelcomepagewidget.h" +++ +++#include "rssfetcher.h" +++ +++#include <QtGui/QDesktopServices> +++ +++namespace Welcome { +++namespace Internal { +++ +++// TODO: remove +++static QString titleLabel(const QString &text) +++{ +++ // TODO: do not hardcode here +++ QString rc = QLatin1String( +++ "<html><head><style type=\"text/css\">p, li { white-space: pre-wrap; }</style></head>" +++ "<body style=\" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;\">" +++ "<p style=\" margin-top:16px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">" +++ "<span style=\" font-size:x-large; color:#555555;\">"); +++ rc += text; +++ rc += QLatin1String("</span></p><hr/></body></html>"); +++ return rc; +++} +++ +++CommunityWelcomePageWidget::CommunityWelcomePageWidget(QWidget *parent) : +++ QWidget(parent), +++ ui(new Ui::CommunityWelcomePageWidget), +++ m_rssFetcher(new RSSFetcher(7)) +++{ +++ ui->setupUi(this); +++ ui->labsTitleLabel->setText(titleLabel(tr("News From the Qt Labs"))); +++ ui->sitesTitleLabel->setText(titleLabel(tr("Qt Websites"))); +++ +++ connect(ui->newsTreeWidget, SIGNAL(activated(QString)), SLOT(slotUrlClicked(QString))); +++ connect(ui->sitesTreeWidget, SIGNAL(activated(QString)), SLOT(slotUrlClicked(QString))); +++ +++ connect(m_rssFetcher, SIGNAL(newsItemReady(QString, QString, QString)), +++ ui->newsTreeWidget, SLOT(slotAddNewsItem(QString, QString, QString))); +++ //: Add localized feed here only if one exists +++ m_rssFetcher->fetch(QUrl(tr("http://labs.trolltech.com/blogs/feed"))); +++ +++ ui->sitesTreeWidget->addItem(tr("Qt Home"), QLatin1String("http://qtsoftware.com")); +++ ui->sitesTreeWidget->addItem(tr("Qt Labs"), QLatin1String("http://labs.trolltech.com")); +++ ui->sitesTreeWidget->addItem(tr("Qt Git Hosting"), QLatin1String("http://qt.gitorious.org")); +++ ui->sitesTreeWidget->addItem(tr("Qt Centre"), QLatin1String("http://www.qtcentre.org")); +++ ui->sitesTreeWidget->addItem(tr("Qt for S60 at Forum Nokia"), QLatin1String("http://discussion.forum.nokia.com/forum/forumdisplay.php?f=196")); +++} +++ +++CommunityWelcomePageWidget::~CommunityWelcomePageWidget() +++{ +++ delete m_rssFetcher; +++ delete ui; +++} +++ +++ +++void CommunityWelcomePageWidget::slotUrlClicked(const QString &data) +++{ +++ QDesktopServices::openUrl(QUrl(data)); +++} +++ +++ +++ +++} // namespace Internal +++} // namespace Welcome ++diff --git a/src/plugins/welcome/communitywelcomepagewidget.h b/src/plugins/welcome/communitywelcomepagewidget.h ++new file mode 100644 ++index 0000000..d9c81b2 ++--- /dev/null +++++ b/src/plugins/welcome/communitywelcomepagewidget.h ++@@ -0,0 +1,64 @@ +++/************************************************************************** +++** +++** This file is part of Qt Creator +++** +++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +++** +++** Contact: Nokia Corporation (qt-info@nokia.com) +++** +++** Commercial Usage +++** +++** Licensees holding valid Qt Commercial licenses may use this file in +++** accordance with the Qt Commercial License Agreement provided with the +++** Software or, alternatively, in accordance with the terms contained in +++** a written agreement between you and Nokia. +++** +++** GNU Lesser General Public License Usage +++** +++** Alternatively, this file may be used under the terms of the GNU Lesser +++** General Public License version 2.1 as published by the Free Software +++** Foundation and appearing in the file LICENSE.LGPL included in the +++** packaging of this file. Please review the following information to +++** ensure the GNU Lesser General Public License version 2.1 requirements +++** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +++** +++** If you are unsure which license is appropriate for your use, please +++** contact the sales department at http://www.qtsoftware.com/contact. +++** +++**************************************************************************/ +++ +++#ifndef COMMUNITYWELCOMEPAGEWIDGET_H +++#define COMMUNITYWELCOMEPAGEWIDGET_H +++ +++#include <QWidget> +++ +++namespace Welcome { +++namespace Internal { +++ +++class RSSFetcher; +++ +++namespace Ui { +++ class CommunityWelcomePageWidget; +++} +++ +++class CommunityWelcomePageWidget : public QWidget +++{ +++ Q_OBJECT +++ +++public: +++ CommunityWelcomePageWidget(QWidget *parent = 0); +++ ~CommunityWelcomePageWidget(); +++ +++private slots: +++ void slotUrlClicked(const QString &data); +++ +++ +++private: +++ RSSFetcher *m_rssFetcher; +++ Ui::CommunityWelcomePageWidget *ui; +++}; +++ +++ +++} // namespace Internal +++} // namespace Welcome +++#endif // COMMUNITYWELCOMEPAGEWIDGET_H ++diff --git a/src/plugins/welcome/communitywelcomepagewidget.ui b/src/plugins/welcome/communitywelcomepagewidget.ui ++new file mode 100644 ++index 0000000..707412c ++--- /dev/null +++++ b/src/plugins/welcome/communitywelcomepagewidget.ui ++@@ -0,0 +1,190 @@ +++<?xml version="1.0" encoding="UTF-8"?> +++<ui version="4.0"> +++ <class>Welcome::Internal::CommunityWelcomePageWidget</class> +++ <widget class="QWidget" name="Welcome::Internal::CommunityWelcomePageWidget"> +++ <property name="geometry"> +++ <rect> +++ <x>0</x> +++ <y>0</y> +++ <width>667</width> +++ <height>352</height> +++ </rect> +++ </property> +++ <property name="windowTitle"> +++ <string>Form</string> +++ </property> +++ <layout class="QHBoxLayout" name="horizontalLayout"> +++ <item> +++ <widget class="QFrame" name="labsFrame"> +++ <property name="frameShape"> +++ <enum>QFrame::NoFrame</enum> +++ </property> +++ <property name="frameShadow"> +++ <enum>QFrame::Plain</enum> +++ </property> +++ <layout class="QVBoxLayout" name="verticalLayout_2"> +++ <item> +++ <widget class="QLabel" name="labsTitleLabel"> +++ <property name="sizePolicy"> +++ <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> +++ <horstretch>0</horstretch> +++ <verstretch>0</verstretch> +++ </sizepolicy> +++ </property> +++ <property name="alignment"> +++ <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> +++ </property> +++ </widget> +++ </item> +++ <item> +++ <widget class="Core::Utils::WelcomeModeTreeWidget" name="newsTreeWidget"> +++ <property name="sizePolicy"> +++ <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> +++ <horstretch>0</horstretch> +++ <verstretch>0</verstretch> +++ </sizepolicy> +++ </property> +++ <property name="minimumSize"> +++ <size> +++ <width>340</width> +++ <height>0</height> +++ </size> +++ </property> +++ <property name="focusPolicy"> +++ <enum>Qt::NoFocus</enum> +++ </property> +++ <property name="frameShape"> +++ <enum>QFrame::NoFrame</enum> +++ </property> +++ <property name="selectionMode"> +++ <enum>QAbstractItemView::NoSelection</enum> +++ </property> +++ <property name="verticalScrollMode"> +++ <enum>QAbstractItemView::ScrollPerPixel</enum> +++ </property> +++ <property name="rootIsDecorated"> +++ <bool>false</bool> +++ </property> +++ <property name="uniformRowHeights"> +++ <bool>true</bool> +++ </property> +++ <property name="allColumnsShowFocus"> +++ <bool>true</bool> +++ </property> +++ <property name="columnCount"> +++ <number>2</number> +++ </property> +++ <attribute name="headerVisible"> +++ <bool>false</bool> +++ </attribute> +++ <attribute name="headerDefaultSectionSize"> +++ <number>24</number> +++ </attribute> +++ <attribute name="headerMinimumSectionSize"> +++ <number>0</number> +++ </attribute> +++ <column> +++ <property name="text"> +++ <string notr="true">1</string> +++ </property> +++ </column> +++ <column> +++ <property name="text"> +++ <string notr="true">2</string> +++ </property> +++ </column> +++ </widget> +++ </item> +++ </layout> +++ </widget> +++ </item> +++ <item> +++ <widget class="QFrame" name="sitesFrame"> +++ <property name="frameShape"> +++ <enum>QFrame::NoFrame</enum> +++ </property> +++ <property name="frameShadow"> +++ <enum>QFrame::Plain</enum> +++ </property> +++ <layout class="QVBoxLayout" name="verticalLayout_3"> +++ <item> +++ <widget class="QLabel" name="sitesTitleLabel"> +++ <property name="sizePolicy"> +++ <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> +++ <horstretch>0</horstretch> +++ <verstretch>0</verstretch> +++ </sizepolicy> +++ </property> +++ <property name="alignment"> +++ <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> +++ </property> +++ </widget> +++ </item> +++ <item> +++ <widget class="Core::Utils::WelcomeModeTreeWidget" name="sitesTreeWidget"> +++ <property name="sizePolicy"> +++ <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> +++ <horstretch>0</horstretch> +++ <verstretch>0</verstretch> +++ </sizepolicy> +++ </property> +++ <property name="focusPolicy"> +++ <enum>Qt::NoFocus</enum> +++ </property> +++ <property name="frameShape"> +++ <enum>QFrame::NoFrame</enum> +++ </property> +++ <property name="selectionMode"> +++ <enum>QAbstractItemView::NoSelection</enum> +++ </property> +++ <property name="verticalScrollMode"> +++ <enum>QAbstractItemView::ScrollPerPixel</enum> +++ </property> +++ <property name="rootIsDecorated"> +++ <bool>false</bool> +++ </property> +++ <property name="uniformRowHeights"> +++ <bool>true</bool> +++ </property> +++ <property name="allColumnsShowFocus"> +++ <bool>true</bool> +++ </property> +++ <property name="columnCount"> +++ <number>2</number> +++ </property> +++ <attribute name="headerVisible"> +++ <bool>false</bool> +++ </attribute> +++ <attribute name="headerDefaultSectionSize"> +++ <number>24</number> +++ </attribute> +++ <attribute name="headerMinimumSectionSize"> +++ <number>0</number> +++ </attribute> +++ <column> +++ <property name="text"> +++ <string notr="true">1</string> +++ </property> +++ </column> +++ <column> +++ <property name="text"> +++ <string notr="true">2</string> +++ </property> +++ </column> +++ </widget> +++ </item> +++ </layout> +++ </widget> +++ </item> +++ </layout> +++ </widget> +++ <customwidgets> +++ <customwidget> +++ <class>Core::Utils::WelcomeModeTreeWidget</class> +++ <extends>QTreeWidget</extends> +++ <header>utils/welcomemodetreewidget.h</header> +++ </customwidget> +++ </customwidgets> +++ <resources/> +++ <connections/> +++</ui> ++diff --git a/src/plugins/welcome/communitywelcomepage.h b/src/plugins/welcome/communitywelcomepage.h ++new file mode 100644 ++index 0000000..7a0dd61 ++--- /dev/null +++++ b/src/plugins/welcome/communitywelcomepage.h ++@@ -0,0 +1,47 @@ +++/************************************************************************** +++** +++** This file is part of Qt Creator +++** +++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +++** +++** Contact: Nokia Corporation (qt-info@nokia.com) +++** +++** Commercial Usage +++** +++** Licensees holding valid Qt Commercial licenses may use this file in +++** accordance with the Qt Commercial License Agreement provided with the +++** Software or, alternatively, in accordance with the terms contained in +++** a written agreement between you and Nokia. +++** +++** GNU Lesser General Public License Usage +++** +++** Alternatively, this file may be used under the terms of the GNU Lesser +++** General Public License version 2.1 as published by the Free Software +++** Foundation and appearing in the file LICENSE.LGPL included in the +++** packaging of this file. Please review the following information to +++** ensure the GNU Lesser General Public License version 2.1 requirements +++** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +++** +++** If you are unsure which license is appropriate for your use, please +++** contact the sales department at http://www.qtsoftware.com/contact. +++** +++**************************************************************************/ +++ +++#include "communitywelcomepage.h" +++#include "communitywelcomepagewidget.h" +++ +++namespace Welcome { +++namespace Internal { +++ +++CommunityWelcomePage::CommunityWelcomePage() +++ : m_page(new CommunityWelcomePageWidget) +++{ +++} +++ +++QWidget* CommunityWelcomePage::page() +++{ +++ return m_page; +++} +++ +++} // namespace Internal +++} // namespace WelcomePlugin ++diff --git a/src/plugins/welcome/communitywelcomepage.h b/src/plugins/welcome/communitywelcomepage.h ++new file mode 100644 ++index 0000000..fd97e0e ++--- /dev/null +++++ b/src/plugins/welcome/communitywelcomepage.h ++@@ -0,0 +1,60 @@ +++/************************************************************************** +++** +++** This file is part of Qt Creator +++** +++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +++** +++** Contact: Nokia Corporation (qt-info@nokia.com) +++** +++** Commercial Usage +++** +++** Licensees holding valid Qt Commercial licenses may use this file in +++** accordance with the Qt Commercial License Agreement provided with the +++** Software or, alternatively, in accordance with the terms contained in +++** a written agreement between you and Nokia. +++** +++** GNU Lesser General Public License Usage +++** +++** Alternatively, this file may be used under the terms of the GNU Lesser +++** General Public License version 2.1 as published by the Free Software +++** Foundation and appearing in the file LICENSE.LGPL included in the +++** packaging of this file. Please review the following information to +++** ensure the GNU Lesser General Public License version 2.1 requirements +++** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +++** +++** If you are unsure which license is appropriate for your use, please +++** contact the sales department at http://www.qtsoftware.com/contact. +++** +++**************************************************************************/ +++ +++#ifndef COMMUNITYWELCOMEPAGE_H +++#define COMMUNITYWELCOMEPAGE_H +++ +++#include "welcome_global.h" +++ +++#include <extensionsystem/iwelcomepage.h> +++ +++namespace Welcome { +++namespace Internal { +++ +++class CommunityWelcomePageWidget; +++ +++class WELCOME_EXPORT CommunityWelcomePage : public ExtensionSystem::IWelcomePage +++{ +++ Q_OBJECT +++public: +++ CommunityWelcomePage(); +++ +++ QWidget *page(); +++ QString title() const { return tr("Community"); } +++ int priority() const { return 30; } +++ +++private: +++ CommunityWelcomePageWidget *m_page; +++ +++}; +++ +++} // namespace Internal +++} // namespace Welcome +++ +++#endif // COMMUNITYWELCOMEPAGE_H ++diff --git a/src/plugins/welcome/rssfetcher.cpp b/src/plugins/welcome/rssfetcher.cpp ++index f5fc756..7254c2d 100644 ++--- a/src/plugins/welcome/rssfetcher.cpp +++++ b/src/plugins/welcome/rssfetcher.cpp ++@@ -43,7 +43,7 @@ ++ #include <sys/utsname.h> ++ #endif ++ ++-using namespace Welcome; +++using namespace Welcome::Internal; ++ ++ static const QString getOsString() ++ { ++diff --git a/src/plugins/welcome/rssfetcher.h b/src/plugins/welcome/rssfetcher.h ++index 9267fdb..54ef87d 100644 ++--- a/src/plugins/welcome/rssfetcher.h +++++ b/src/plugins/welcome/rssfetcher.h ++@@ -35,6 +35,7 @@ ++ #include <QtNetwork/QHttp> ++ ++ namespace Welcome { +++namespace Internal { ++ ++ class RSSFetcher : public QObject ++ { ++@@ -69,6 +70,7 @@ private: ++ }; ++ ++ } // namespace Welcome +++} // namespace Internal ++ ++ #endif // RSSFETCHER_H ++ ++diff --git a/src/plugins/welcome/welcome.pro b/src/plugins/welcome/welcome.pro ++index 11d48e8..b5bbd1c 100644 ++--- a/src/plugins/welcome/welcome.pro +++++ b/src/plugins/welcome/welcome.pro ++@@ -5,11 +5,16 @@ include(../../qtcreatorplugin.pri) ++ include(../../plugins/coreplugin/coreplugin.pri) ++ HEADERS += welcomeplugin.h \ ++ welcomemode.h \ ++- rssfetcher.h +++ rssfetcher.h \ +++ communitywelcomepagewidget.h \ +++ communitywelcomepage.h ++ SOURCES += welcomeplugin.cpp \ ++ welcomemode.cpp \ ++- rssfetcher.cpp ++-FORMS += welcomemode.ui +++ rssfetcher.cpp \ +++ communitywelcomepagewidget.cpp \ +++ communitywelcomepage.h +++FORMS += welcomemode.ui \ +++ communitywelcomepagewidget.ui ++ RESOURCES += welcome.qrc ++ DEFINES += WELCOME_LIBRARY ++ OTHER_FILES += Welcome.pluginspec ++diff --git a/src/plugins/welcome/welcomemode.cpp b/src/plugins/welcome/welcomemode.cpp ++index bc6a876..b47cb36 100644 ++--- a/src/plugins/welcome/welcomemode.cpp +++++ b/src/plugins/welcome/welcomemode.cpp ++@@ -28,11 +28,10 @@ ++ **************************************************************************/ ++ ++ #include "welcomemode.h" ++-#include "rssfetcher.h" +++#include <extensionsystem/pluginmanager.h> +++#include <extensionsystem/iwelcomepage.h> ++ ++ #include <coreplugin/icore.h> ++-#include <coreplugin/dialogs/iwizard.h> ++- ++ #include <coreplugin/coreconstants.h> ++ #include <coreplugin/uniqueidmanager.h> ++ #include <coreplugin/modemanager.h> ++@@ -41,24 +40,38 @@ ++ #include <utils/styledbar.h> ++ #include <utils/welcomemodetreewidget.h> ++ ++-#include <QtGui/QDesktopServices> ++ #include <QtGui/QMouseEvent> ++ #include <QtGui/QScrollArea> ++ #include <QtGui/QButtonGroup> +++#include <QtGui/QDesktopServices> +++#include <QtGui/QToolButton> ++ ++-#include <QtCore/QDateTime> ++-#include <QtCore/QDir> ++-#include <QtCore/QFileInfo> ++-#include <QtCore/QDebug> ++-#include <QtCore/QUrl> ++ #include <QtCore/QSettings> +++#include <QtCore/QUrl> +++#include <QtCore/QDebug> ++ ++ #include <cstdlib> ++ ++ #include "ui_welcomemode.h" ++ +++using namespace ExtensionSystem; +++ ++ namespace Welcome { ++ +++// TODO: remove +++static QString titleLabel(const QString &text) +++{ +++ // TODO: do not hardcode here +++ QString rc = QLatin1String( +++ "<html><head><style type=\"text/css\">p, li { white-space: pre-wrap; }</style></head>" +++ "<body style=\" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;\">" +++ "<p style=\" margin-top:16px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">" +++ "<span style=\" font-size:x-large; color:#555555;\">"); +++ rc += text; +++ rc += QLatin1String("</span></p><hr/></body></html>"); +++ return rc; +++} +++ ++ struct WelcomeModePrivate ++ { ++ WelcomeModePrivate(); ++@@ -66,10 +79,9 @@ struct WelcomeModePrivate ++ QScrollArea *m_scrollArea; ++ QWidget *m_widget; ++ QWidget *m_welcomePage; ++- QButtonGroup *btnGrp; ++- Ui::WelcomePage ui; ++- RSSFetcher *rssFetcher; ++- WelcomeMode::WelcomePageData lastData; +++ QMap<QAbstractButton*, QWidget*> buttonMap; +++ QHBoxLayout * buttonLayout; +++ Ui::WelcomeMode ui; ++ int currentTip; ++ }; ++ ++@@ -77,46 +89,6 @@ WelcomeModePrivate::WelcomeModePrivate() ++ { ++ } ++ ++-// --- WelcomePageData ++- ++-bool WelcomeMode::WelcomePageData::operator==(const WelcomePageData &rhs) const ++-{ ++- return previousSession == rhs.previousSession ++- && activeSession == rhs.activeSession ++- && sessionList == rhs.sessionList ++- && projectList == rhs.projectList; ++-} ++- ++-bool WelcomeMode::WelcomePageData::operator!=(const WelcomePageData &rhs) const ++-{ ++- return previousSession != rhs.previousSession ++- || activeSession != rhs.activeSession ++- || sessionList != rhs.sessionList ++- || projectList != rhs.projectList; ++-} ++- ++-QDebug operator<<(QDebug dgb, const WelcomeMode::WelcomePageData &d) ++-{ ++- dgb.nospace() << "PreviousSession=" << d.previousSession ++- << " activeSession=" << d.activeSession ++- << " sessionList=" << d.sessionList ++- << " projectList=" << d.projectList; ++- return dgb; ++-} ++- ++-// Format a title + ruler for title labels ++-static inline QString titleLabel(const QString &text) ++-{ ++- QString rc = QLatin1String( ++- "<html><head><style type=\"text/css\">p, li { white-space: pre-wrap; }</style></head>" ++- "<body style=\" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;\">" ++- "<p style=\" margin-top:16px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">" ++- "<span style=\" font-size:x-large; color:#555555;\">"); ++- rc += text; ++- rc += QLatin1String("</span></p><hr/></body></html>"); ++- return rc; ++-} ++- ++ // --- WelcomeMode ++ WelcomeMode::WelcomeMode() : ++ m_d(new WelcomeModePrivate) ++@@ -126,22 +98,8 @@ WelcomeMode::WelcomeMode() : ++ l->setMargin(0); ++ l->setSpacing(0); ++ l->addWidget(new Core::Utils::StyledBar(m_d->m_widget)); ++- m_d->rssFetcher = new RSSFetcher(7, this); ++ m_d->m_welcomePage = new QWidget(m_d->m_widget); ++ m_d->ui.setupUi(m_d->m_welcomePage); ++- m_d->ui.projTitleLabel->setText(titleLabel(tr("Open Recent Project"))); ++- m_d->ui.recentSessionsTitleLabel->setText(titleLabel(tr("Resume Session"))); ++- m_d->ui.tutorialsTitleLabel->setText(titleLabel(tr("Tutorials"))); ++- m_d->ui.demoTitleLabel->setText(titleLabel(tr("Explore Qt Examples"))); ++- m_d->ui.didYouKnowTitleLabel->setText(titleLabel(tr("Did You Know?"))); ++- m_d->ui.labsTitleLabel->setText(titleLabel(tr("News From the Qt Labs"))); ++- m_d->ui.sitesTitleLabel->setText(titleLabel(tr("Qt Websites"))); ++- m_d->ui.sessTreeWidget->viewport()->setAutoFillBackground(false); ++- m_d->ui.projTreeWidget->viewport()->setAutoFillBackground(false); ++- m_d->ui.newsTreeWidget->viewport()->setAutoFillBackground(false); ++- m_d->ui.sitesTreeWidget->viewport()->setAutoFillBackground(false); ++- m_d->ui.tutorialTreeWidget->viewport()->setAutoFillBackground(false); ++- m_d->ui.didYouKnowTextBrowser->viewport()->setAutoFillBackground(false); ++ m_d->ui.helpUsLabel->setAttribute(Qt::WA_LayoutUsesWidgetRect); ++ m_d->ui.feedbackButton->setAttribute(Qt::WA_LayoutUsesWidgetRect); ++ l->addWidget(m_d->m_welcomePage); ++@@ -151,71 +109,17 @@ WelcomeMode::WelcomeMode() : ++ m_d->m_scrollArea->setWidget(m_d->m_widget); ++ m_d->m_scrollArea->setWidgetResizable(true); ++ ++- updateWelcomePage(WelcomePageData()); ++- ++- m_d->btnGrp = new QButtonGroup(this); ++- m_d->btnGrp->addButton(m_d->ui.gettingStartedSectButton, 0); ++- m_d->btnGrp->addButton(m_d->ui.developSectButton, 1); ++- m_d->btnGrp->addButton(m_d->ui.communitySectButton, 2); ++- ++- connect(m_d->btnGrp, SIGNAL(buttonClicked(int)), m_d->ui.stackedWidget, SLOT(setCurrentIndex(int))); +++ PluginManager *pluginManager = PluginManager::instance(); +++ connect(pluginManager, SIGNAL(objectAdded(QObject*)), SLOT(welcomePluginAdded(QObject))); ++ ++ connect(m_d->ui.feedbackButton, SIGNAL(clicked()), SLOT(slotFeedback())); ++- connect(m_d->ui.manageSessionsButton, SIGNAL(clicked()), SIGNAL(manageSessions())); ++- connect(m_d->ui.createNewProjectButton, SIGNAL(clicked()), SLOT(slotCreateNewProject())); ++- connect(m_d->ui.sessTreeWidget, SIGNAL(activated(QString)), SLOT(slotSessionClicked(QString))); ++- connect(m_d->ui.projTreeWidget, SIGNAL(activated(QString)), SLOT(slotProjectClicked(QString))); ++- connect(m_d->ui.newsTreeWidget, SIGNAL(activated(QString)), SLOT(slotUrlClicked(QString))); ++- connect(m_d->ui.sitesTreeWidget, SIGNAL(activated(QString)), SLOT(slotUrlClicked(QString))); ++- connect(m_d->ui.tutorialTreeWidget, SIGNAL(activated(QString)), SIGNAL(openHelpPage(const QString&))); ++- connect(m_d->ui.openExampleButton, SIGNAL(clicked()), SLOT(slotOpenExample())); ++- connect(m_d->ui.examplesComboBox, SIGNAL(currentIndexChanged(int)), SLOT(slotEnableExampleButton(int))); ++- ++- connect(m_d->rssFetcher, SIGNAL(newsItemReady(QString, QString, QString)), ++- m_d->ui.newsTreeWidget, SLOT(slotAddNewsItem(QString, QString, QString))); ++- ++- //: Add localized feed here only if one exists ++- m_d->rssFetcher->fetch(QUrl(tr("http://labs.trolltech.com/blogs/feed"))); ++- ++- m_d->ui.sitesTreeWidget->addItem(tr("Qt Home"), QLatin1String("http://qtsoftware.com")); ++- m_d->ui.sitesTreeWidget->addItem(tr("Qt Labs"), QLatin1String("http://labs.trolltech.com")); ++- m_d->ui.sitesTreeWidget->addItem(tr("Qt Git Hosting"), QLatin1String("http://qt.gitorious.org")); ++- m_d->ui.sitesTreeWidget->addItem(tr("Qt Centre"), QLatin1String("http://www.qtcentre.org")); ++- m_d->ui.sitesTreeWidget->addItem(tr("Qt for S60 at Forum Nokia"), QLatin1String("http://discussion.forum.nokia.com/forum/forumdisplay.php?f=196")); ++- ++- m_d->ui.tutorialTreeWidget->addItem(tr("<b>Qt Creator - A quick tour</b>"), ++- QString("qthelp://com.nokia.qtcreator.%1%2/doc/index.html").arg(IDE_VERSION_MAJOR).arg(IDE_VERSION_MINOR)); ++- m_d->ui.tutorialTreeWidget->addItem(tr("Creating an address book"), ++- QLatin1String("qthelp://com.nokia.qtcreator/doc/tutorials-addressbook-sdk.html")); ++- m_d->ui.tutorialTreeWidget->addItem(tr("Understanding widgets"), ++- QLatin1String("qthelp://com.trolltech.qt/qdoc/widgets-tutorial.html")); ++- m_d->ui.tutorialTreeWidget->addItem(tr("Building with qmake"), ++- QLatin1String("qthelp://com.trolltech.qmake/qdoc/qmake-tutorial.html")); ++- m_d->ui.tutorialTreeWidget->addItem(tr("Writing test cases"), ++- QLatin1String("qthelp://com.trolltech.qt/qdoc/qtestlib-tutorial.html")); ++- ++- srand(QDateTime::currentDateTime().toTime_t()); ++- QStringList tips = tipsOfTheDay(); ++- m_d->currentTip = rand()%tips.count(); ++- ++- QTextDocument *doc = m_d->ui.didYouKnowTextBrowser->document(); ++- doc->setDefaultStyleSheet("a:link {color:black;}"); ++- m_d->ui.didYouKnowTextBrowser->setDocument(doc); ++- m_d->ui.didYouKnowTextBrowser->setText(tips.at(m_d->currentTip)); ++- ++- connect(m_d->ui.nextTipBtn, SIGNAL(clicked()), this, SLOT(slotNextTip())); ++- connect(m_d->ui.prevTipBtn, SIGNAL(clicked()), this, SLOT(slotPrevTip())); ++ ++- QSettings *settings = Core::ICore::instance()->settings(); ++- int id = settings->value("General/WelcomeTab", 0).toInt(); ++- m_d->btnGrp->button(id)->setChecked(true); ++- m_d->ui.stackedWidget->setCurrentIndex(id); ++ } ++ ++ WelcomeMode::~WelcomeMode() ++ { ++ QSettings *settings = Core::ICore::instance()->settings(); ++- settings->setValue("General/WelcomeTab", m_d->btnGrp->checkedId()); +++ settings->setValue("General/WelcomeTab", m_d->ui.stackedWidget->currentIndex()); ++ delete m_d->m_widget; ++ delete m_d; ++ } ++@@ -252,150 +156,79 @@ QList<int> WelcomeMode::context() const ++ return contexts; ++ } ++ ++-void WelcomeMode::updateWelcomePage(const WelcomePageData &welcomePageData) ++-{ ++- // Update only if data are modified ++- if (welcomePageData == m_d->lastData) ++- return; ++- m_d->lastData = welcomePageData; ++- ++- m_d->m_widget->setUpdatesEnabled(false); ++- m_d->ui.sessTreeWidget->clear(); ++- m_d->ui.projTreeWidget->clear(); ++- ++- if (welcomePageData.sessionList.count() > 0) { ++- foreach (const QString &s, welcomePageData.sessionList) { ++- QString str = s; ++- if (s == welcomePageData.previousSession) ++- str = tr("%1 (last session)").arg(s); ++- m_d->ui.sessTreeWidget->addItem(str, s); ++- } ++- m_d->ui.sessTreeWidget->updateGeometry(); ++- m_d->ui.sessTreeWidget->show(); ++- } else { ++- m_d->ui.sessTreeWidget->hide(); ++- } ++- ++- typedef QPair<QString, QString> QStringPair; ++- if (welcomePageData.projectList.count() > 0) { ++- foreach (const QStringPair &it, welcomePageData.projectList) { ++- QTreeWidgetItem *item = m_d->ui.projTreeWidget->addItem(it.second, it.first); ++- const QFileInfo fi(it.first); ++- item->setToolTip(1, QDir::toNativeSeparators(fi.absolutePath())); ++- } ++- } else { ++- m_d->ui.projTreeWidget->hide(); ++- } ++- m_d->ui.projTreeWidget->updateGeometry(); ++- m_d->m_widget->setUpdatesEnabled(true); ++-} ++- ++-void WelcomeMode::activateEditMode() ++-{ ++- Core::ModeManager *modeManager = Core::ModeManager::instance(); ++- if (modeManager->currentMode() == this) ++- modeManager->activateMode(Core::Constants::MODE_EDIT); ++-} ++- ++-void WelcomeMode::slotSessionClicked(const QString &data) ++-{ ++- emit requestSession(data); ++- activateEditMode(); ++-} ++- ++-void WelcomeMode::slotProjectClicked(const QString &data) ++-{ ++- emit requestProject(data); ++- activateEditMode(); ++-} ++- ++-void WelcomeMode::slotUrlClicked(const QString &data) +++bool sortFunction(IWelcomePage * a, IWelcomePage *b) ++ { ++- QDesktopServices::openUrl(QUrl(data)); +++ return a->priority() < b->priority(); ++ } ++ ++-void WelcomeMode::updateExamples(const QString& examplePath, const QString& demosPath, const QString &sourcePath) +++void WelcomeMode::initPlugins() ++ { ++- QString demoxml = demosPath + "/qtdemo/xml/examples.xml"; ++- if (!QFile::exists(demoxml)) { ++- demoxml = sourcePath + "/demos/qtdemo/xml/examples.xml"; ++- if (!QFile::exists(demoxml)) ++- return; +++ m_d->buttonLayout = new QHBoxLayout(m_d->ui.navFrame); +++ m_d->buttonLayout->setMargin(0); +++ m_d->buttonLayout->setSpacing(0); +++ delete m_d->ui.stackedWidget->currentWidget(); +++ QList<IWelcomePage*> plugins = PluginManager::instance()->getObjects<IWelcomePage>(); +++ qSort(plugins.begin(), plugins.end(), &sortFunction); +++ foreach (IWelcomePage* plugin, plugins) { +++ QToolButton * btn = new QToolButton; +++ btn->setCheckable(true); +++ btn->setText(plugin->title()); +++ btn->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); +++ btn->setAutoExclusive(true); +++ connect (btn, SIGNAL(clicked()), SLOT(showClickedPage())); +++ m_d->ui.stackedWidget->addWidget(plugin->page()); +++ m_d->buttonLayout->addWidget(btn); +++ m_d->buttonMap.insert(btn, plugin->page()); ++ } +++ m_d->buttonLayout->addSpacing(5); ++ ++- QFile description(demoxml); ++- if (!description.open(QFile::ReadOnly)) ++- return; ++- ++- m_d->ui.examplesComboBox->clear(); ++- m_d->ui.examplesComboBox->setEnabled(true); ++- ++- m_d->ui.examplesComboBox->addItem(tr("Choose an example...")); ++- QFont f = widget()->font(); ++- f.setItalic(true); ++- m_d->ui.examplesComboBox->setItemData(0, f, Qt::FontRole); ++- f.setItalic(false); ++- bool inExamples = false; ++- QString dirName; ++- QXmlStreamReader reader(&description); ++- while (!reader.atEnd()) { ++- switch (reader.readNext()) { ++- case QXmlStreamReader::StartElement: ++- if (reader.name() == "category") { ++- QString name = reader.attributes().value(QLatin1String("name")).toString(); ++- if (name.contains("tutorial")) ++- break; ++- dirName = reader.attributes().value(QLatin1String("dirname")).toString(); ++- m_d->ui.examplesComboBox->addItem(name); ++- f.setBold(true); ++- m_d->ui.examplesComboBox->setItemData(m_d->ui.examplesComboBox->count()-1, f, Qt::FontRole); ++- f.setBold(false); ++- inExamples = true; ++- } ++- if (inExamples && reader.name() == "example") { ++- QString name = reader.attributes().value(QLatin1String("name")).toString(); ++- QString fn = reader.attributes().value(QLatin1String("filename")).toString(); ++- QString relativeProPath = '/' + dirName + '/' + fn + '/' + fn + ".pro"; ++- QString fileName = examplePath + relativeProPath; ++- if (!QFile::exists(fileName)) ++- fileName = sourcePath + "/examples" + relativeProPath; ++- QString helpPath = "qthelp://com.trolltech.qt/qdoc/" + dirName.replace("/", "-") + "-" + fn + ".html"; ++- ++- m_d->ui.examplesComboBox->addItem(" " + name, fileName); ++- m_d->ui.examplesComboBox->setItemData(m_d->ui.examplesComboBox->count()-1, helpPath, Qt::UserRole+1); +++ QSettings *settings = Core::ICore::instance()->settings(); +++ int tabId = settings->value("General/WelcomeTab", 0).toInt(); +++ +++ int pluginCount = m_d->ui.stackedWidget->count(); +++ if (tabId < pluginCount) { +++ //qDebug() << tabId; +++ m_d->ui.stackedWidget->setCurrentIndex(tabId); +++ QMapIterator<QAbstractButton*, QWidget*> it(m_d->buttonMap); +++ while (it.hasNext()) +++ if (it.next().value() == m_d->ui.stackedWidget->currentWidget()) { +++ it.key()->setChecked(true); +++ break; ++ } ++- break; ++- case QXmlStreamReader::EndElement: ++- if (reader.name() == "category") ++- inExamples = false; ++- break; ++- default: ++- break; ++- } ++ } +++ ++ } ++ ++-void WelcomeMode::slotEnableExampleButton(int index) ++-{ ++- QString fileName = m_d->ui.examplesComboBox->itemData(index, Qt::UserRole).toString(); ++- m_d->ui.openExampleButton->setEnabled(!fileName.isEmpty()); +++void WelcomeMode::welcomePluginAdded(QObject *obj) +++{ +++ if (IWelcomePage *plugin = qobject_cast<IWelcomePage*>(obj)) +++ { +++ QToolButton * btn = new QToolButton; +++ btn->setCheckable(true); +++ btn->setAutoExclusive(true); +++ btn->setText(plugin->title()); +++ btn->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); +++ connect (btn, SIGNAL(clicked()), SLOT(showClickedPage())); +++ int insertPos = 0; +++ QList<IWelcomePage*> plugins = PluginManager::instance()->getObjects<IWelcomePage>(); +++ foreach (IWelcomePage* p, plugins) { +++ if (plugin->priority() < p->priority()) +++ insertPos++; +++ else +++ break; +++ } +++ m_d->ui.stackedWidget->insertWidget(insertPos, plugin->page()); +++ m_d->buttonMap.insert(btn, plugin->page()); +++ m_d->buttonLayout->insertWidget(insertPos, btn); +++ } ++ } ++ ++-void WelcomeMode::slotOpenExample() +++void WelcomeMode::showClickedPage() ++ { ++- QComboBox *box = m_d->ui.examplesComboBox; ++- QString proFile = box->itemData(box->currentIndex(), Qt::UserRole).toString(); ++- QString helpFile = box->itemData(box->currentIndex(), Qt::UserRole + 1).toString(); ++- QStringList files; ++- QFileInfo fi(proFile); ++- QString tryFile = fi.path() + "/main.cpp"; ++- files << proFile; ++- if(!QFile::exists(tryFile)) ++- tryFile = fi.path() + '/' + fi.baseName() + ".cpp"; ++- if(QFile::exists(tryFile)) ++- files << tryFile; ++- Core::ICore::instance()->openFiles(files); ++- emit openContextHelpPage(helpFile); +++ QAbstractButton *btn = qobject_cast<QAbstractButton*>(sender()); +++ QMap<QAbstractButton*, QWidget*>::iterator it = m_d->buttonMap.find(btn); +++ if (it.value()) +++ m_d->ui.stackedWidget->setCurrentWidget(it.value()); ++ } ++ ++ void WelcomeMode::slotFeedback() ++@@ -404,71 +237,5 @@ void WelcomeMode::slotFeedback() ++ "http://qtsoftware.com/forms/feedback-forms/qt-creator-user-feedback/view"))); ++ } ++ ++-void WelcomeMode::slotCreateNewProject() ++-{ ++- Core::ICore::instance()->showNewItemDialog(tr("New Project..."), ++- Core::IWizard::wizardsOfKind(Core::IWizard::ProjectWizard)); ++-} ++- ++-void WelcomeMode::slotNextTip() ++-{ ++- QStringList tips = tipsOfTheDay(); ++- m_d->currentTip = ((m_d->currentTip+1)%tips.count()); ++- m_d->ui.didYouKnowTextBrowser->setText(tips.at(m_d->currentTip)); ++-} ++- ++-void WelcomeMode::slotPrevTip() ++-{ ++- QStringList tips = tipsOfTheDay(); ++- m_d->currentTip = ((m_d->currentTip-1)+tips.count())%tips.count(); ++- m_d->ui.didYouKnowTextBrowser->setText(tips.at(m_d->currentTip)); ++-} ++- ++-QStringList WelcomeMode::tipsOfTheDay() ++-{ ++- static QStringList tips; ++- if (tips.isEmpty()) { ++- QString altShortcut = ++-#ifdef Q_WS_MAC ++- tr("Cmd", "Shortcut key"); ++-#else ++- tr("Alt", "Shortcut key"); ++-#endif ++- tips.append(tr("You can switch between Qt Creator's modes using <tt>Ctrl+number</tt>:<ul>" ++- "<li>1 - Welcome</li><li>2 - Edit</li><li>3 - Debug</li><li>4 - Projects</li><li>5 - Help</li>" ++- "<li></li><li>6 - Output</li></ul>")); ++- //:%1 gets replaced by Alt (Win/Unix) or Cmd (Mac) ++- tips.append(tr("You can show and hide the side bar using <tt>%1+0<tt>.").arg(altShortcut)); ++- tips.append(tr("You can fine tune the <tt>Find</tt> function by selecting "Whole Words" " ++- "or "Case Sensitive". Simply click on the icons on the right end of the line edit.")); ++- tips.append(tr("If you add <a href=\"qthelp://com.nokia.qtcreator/doc/creator-external-library-handling.html\"" ++- ">external libraries</a>, Qt Creator will automatically offer syntax highlighting " ++- "and code completion.")); ++- tips.append(tr("The code completion is CamelCase-aware. For example, to complete <tt>namespaceUri</tt> " ++- "you can just type <tt>nU</tt> and hit <tt>Ctrl+Space</tt>.")); ++- tips.append(tr("You can force code completion at any time using <tt>Ctrl+Space</tt>.")); ++- tips.append(tr("You can start Qt Creator with a session by calling <tt>qtcreator <sessionname></tt>.")); ++- tips.append(tr("You can return to edit mode from any other mode at any time by hitting <tt>Escape</tt>.")); ++- //:%1 gets replaced by Alt (Win/Unix) or Cmd (Mac) ++- tips.append(tr("You can switch between the output pane by hitting <tt>%1+n</tt> where n is the number denoted " ++- "on the buttons at the window bottom:" ++- "<ul><li>1 - Build Issues</li><li>2 - Search Results</li><li>3 - Application Output</li>" ++- "<li>4 - Compile Output</li></ul>").arg(altShortcut)); ++- tips.append(tr("You can quickly search methods, classes, help and more using the " ++- "<a href=\"qthelp://com.nokia.qtcreator/doc/creator-navigation.html\">Locator bar</a> (<tt>Ctrl+K</tt>).")); ++- tips.append(tr("You can add custom build steps in the " ++- "<a href=\"qthelp://com.nokia.qtcreator/doc/creator-build-settings.html\">build settings</a>.")); ++- tips.append(tr("Within a session, you can add " ++- "<a href=\"qthelp://com.nokia.qtcreator/doc/creator-build-settings.html#dependencies\">dependencies</a> between projects.")); ++- tips.append(tr("You can set the preferred editor encoding for every project in <tt>Projects -> Editor Settings -> Default Encoding</tt>.")); ++- tips.append(tr("You can modify the binary that is being executed when you press the <tt>Run</tt> button: Add a <tt>Custom Executable</tt> " ++- "by clicking the <tt>+</tt> button in <tt>Projects -> Run Settings -> Run Configuration</tt> and then select the new " ++- "target in the combo box.")); ++- tips.append(tr("You can use Qt Creator with a number of <a href=\"qthelp://com.nokia.qtcreator/doc/creator-version-control.html\">" ++- "revision control systems</a> such as Subversion, Perforce and Git.")); ++- tips.append(tr("In the editor, <tt>F2</tt> toggles declaration and definition while <tt>F4</tt> toggles header file and source file.")); ++- } ++- return tips; ++-} ++ ++ } // namespace Welcome ++diff --git a/src/plugins/welcome/welcomemode.h b/src/plugins/welcome/welcomemode.h ++index 0555ce6..1576d24 100644 ++--- a/src/plugins/welcome/welcomemode.h +++++ b/src/plugins/welcome/welcomemode.h ++@@ -54,18 +54,6 @@ public: ++ WelcomeMode(); ++ ~WelcomeMode(); ++ ++- struct WelcomePageData{ ++- bool operator==(const WelcomePageData &rhs) const; ++- bool operator!=(const WelcomePageData &rhs) const; ++- ++- QString previousSession; ++- QString activeSession; ++- QStringList sessionList; ++- QList<QPair<QString, QString> > projectList; // pair of filename, displayname ++- }; ++- ++- void updateWelcomePage(const WelcomePageData &welcomePageData); ++- ++ // IMode ++ QString name() const; ++ QIcon icon() const; ++@@ -75,31 +63,14 @@ public: ++ QList<int> context() const; ++ void activated(); ++ QString contextHelpId() const { return QLatin1String("Qt Creator"); } ++- ++- void updateExamples(const QString& examplePath, const QString& demosPath, const QString &sourcePath); ++- ++-signals: ++- void requestProject(const QString &project); ++- void requestSession(const QString &session); ++- void openHelpPage(const QString& url); ++- void openContextHelpPage(const QString& url); ++- void manageSessions(); +++ void initPlugins(); ++ ++ private slots: ++ void slotFeedback(); ++- void slotSessionClicked(const QString &data); ++- void slotProjectClicked(const QString &data); ++- void slotUrlClicked(const QString &data); ++- void slotEnableExampleButton(int); ++- void slotOpenExample(); ++- void slotCreateNewProject(); ++- void slotNextTip(); ++- void slotPrevTip(); +++ void welcomePluginAdded(QObject*); +++ void showClickedPage(); ++ ++ private: ++- void activateEditMode(); ++- QStringList tipsOfTheDay(); ++- ++ WelcomeModePrivate *m_d; ++ }; ++ ++diff --git a/src/plugins/welcome/welcomemode.ui b/src/plugins/welcome/welcomemode.ui ++index c70aabb..e1c18bd 100644 ++--- a/src/plugins/welcome/welcomemode.ui +++++ b/src/plugins/welcome/welcomemode.ui ++@@ -1,7 +1,7 @@ ++ <?xml version="1.0" encoding="UTF-8"?> ++ <ui version="4.0"> ++- <class>Welcome::WelcomePage</class> ++- <widget class="QWidget" name="Core::Utils::WelcomePage"> +++ <class>Welcome::WelcomeMode</class> +++ <widget class="QWidget" name="Welcome::WelcomeMode"> ++ <property name="geometry"> ++ <rect> ++ <x>0</x> ++@@ -172,6 +172,12 @@ QToolButton:pressed, QPushButton:pressed{ ++ <verstretch>0</verstretch> ++ </sizepolicy> ++ </property> +++ <property name="minimumSize"> +++ <size> +++ <width>0</width> +++ <height>10</height> +++ </size> +++ </property> ++ <property name="font"> ++ <font> ++ <weight>50</weight> ++@@ -238,129 +244,6 @@ QToolButton:pressed { ++ <property name="frameShadow"> ++ <enum>QFrame::Plain</enum> ++ </property> ++- <layout class="QGridLayout" name="gridLayout_2"> ++- <property name="margin"> ++- <number>0</number> ++- </property> ++- <property name="spacing"> ++- <number>0</number> ++- </property> ++- <item row="0" column="0"> ++- <widget class="QToolButton" name="gettingStartedSectButton"> ++- <property name="enabled"> ++- <bool>true</bool> ++- </property> ++- <property name="sizePolicy"> ++- <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> ++- <horstretch>0</horstretch> ++- <verstretch>0</verstretch> ++- </sizepolicy> ++- </property> ++- <property name="minimumSize"> ++- <size> ++- <width>0</width> ++- <height>0</height> ++- </size> ++- </property> ++- <property name="font"> ++- <font> ++- <pointsize>-1</pointsize> ++- </font> ++- </property> ++- <property name="styleSheet"> ++- <string notr="true"/> ++- </property> ++- <property name="text"> ++- <string>Getting Started</string> ++- </property> ++- <property name="checkable"> ++- <bool>true</bool> ++- </property> ++- <property name="checked"> ++- <bool>true</bool> ++- </property> ++- <property name="autoExclusive"> ++- <bool>false</bool> ++- </property> ++- </widget> ++- </item> ++- <item row="0" column="1"> ++- <widget class="QToolButton" name="developSectButton"> ++- <property name="sizePolicy"> ++- <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> ++- <horstretch>0</horstretch> ++- <verstretch>0</verstretch> ++- </sizepolicy> ++- </property> ++- <property name="minimumSize"> ++- <size> ++- <width>0</width> ++- <height>0</height> ++- </size> ++- </property> ++- <property name="font"> ++- <font> ++- <pointsize>-1</pointsize> ++- </font> ++- </property> ++- <property name="text"> ++- <string>Develop</string> ++- </property> ++- <property name="checkable"> ++- <bool>true</bool> ++- </property> ++- <property name="autoExclusive"> ++- <bool>false</bool> ++- </property> ++- </widget> ++- </item> ++- <item row="0" column="2"> ++- <widget class="QToolButton" name="communitySectButton"> ++- <property name="sizePolicy"> ++- <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> ++- <horstretch>0</horstretch> ++- <verstretch>0</verstretch> ++- </sizepolicy> ++- </property> ++- <property name="minimumSize"> ++- <size> ++- <width>0</width> ++- <height>0</height> ++- </size> ++- </property> ++- <property name="font"> ++- <font> ++- <pointsize>-1</pointsize> ++- </font> ++- </property> ++- <property name="styleSheet"> ++- <string notr="true"/> ++- </property> ++- <property name="text"> ++- <string>Community</string> ++- </property> ++- <property name="checkable"> ++- <bool>true</bool> ++- </property> ++- </widget> ++- </item> ++- <item row="0" column="3"> ++- <spacer name="horizontalSpacer_2"> ++- <property name="orientation"> ++- <enum>Qt::Horizontal</enum> ++- </property> ++- <property name="sizeType"> ++- <enum>QSizePolicy::Fixed</enum> ++- </property> ++- <property name="sizeHint" stdset="0"> ++- <size> ++- <width>5</width> ++- <height>20</height> ++- </size> ++- </property> ++- </spacer> ++- </item> ++- </layout> ++ </widget> ++ </item> ++ <item> ++@@ -368,575 +251,7 @@ QToolButton:pressed { ++ <property name="currentIndex"> ++ <number>0</number> ++ </property> ++- <widget class="QWidget" name="gettingStartedPage"> ++- <layout class="QGridLayout" name="gridLayout_9"> ++- <property name="leftMargin"> ++- <number>18</number> ++- </property> ++- <property name="topMargin"> ++- <number>18</number> ++- </property> ++- <property name="rightMargin"> ++- <number>12</number> ++- </property> ++- <property name="bottomMargin"> ++- <number>18</number> ++- </property> ++- <property name="spacing"> ++- <number>24</number> ++- </property> ++- <item row="0" column="0" rowspan="2"> ++- <widget class="QFrame" name="tutorialsFrame"> ++- <property name="sizePolicy"> ++- <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> ++- <horstretch>0</horstretch> ++- <verstretch>0</verstretch> ++- </sizepolicy> ++- </property> ++- <property name="maximumSize"> ++- <size> ++- <width>400</width> ++- <height>16777215</height> ++- </size> ++- </property> ++- <property name="styleSheet"> ++- <string/> ++- </property> ++- <layout class="QGridLayout" name="gridLayout_6"> ++- <item row="0" column="0"> ++- <widget class="QLabel" name="tutorialsTitleLabel"> ++- <property name="sizePolicy"> ++- <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> ++- <horstretch>0</horstretch> ++- <verstretch>0</verstretch> ++- </sizepolicy> ++- </property> ++- <property name="alignment"> ++- <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> ++- </property> ++- </widget> ++- </item> ++- <item row="1" column="0"> ++- <widget class="Core::Utils::WelcomeModeTreeWidget" name="tutorialTreeWidget"> ++- <property name="sizePolicy"> ++- <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> ++- <horstretch>0</horstretch> ++- <verstretch>0</verstretch> ++- </sizepolicy> ++- </property> ++- <property name="focusPolicy"> ++- <enum>Qt::NoFocus</enum> ++- </property> ++- <property name="frameShape"> ++- <enum>QFrame::NoFrame</enum> ++- </property> ++- <property name="selectionMode"> ++- <enum>QAbstractItemView::NoSelection</enum> ++- </property> ++- <property name="verticalScrollMode"> ++- <enum>QAbstractItemView::ScrollPerPixel</enum> ++- </property> ++- <property name="rootIsDecorated"> ++- <bool>false</bool> ++- </property> ++- <property name="uniformRowHeights"> ++- <bool>true</bool> ++- </property> ++- <property name="allColumnsShowFocus"> ++- <bool>true</bool> ++- </property> ++- <property name="columnCount"> ++- <number>2</number> ++- </property> ++- <attribute name="headerVisible"> ++- <bool>false</bool> ++- </attribute> ++- <attribute name="headerDefaultSectionSize"> ++- <number>24</number> ++- </attribute> ++- <attribute name="headerMinimumSectionSize"> ++- <number>0</number> ++- </attribute> ++- <column> ++- <property name="text"> ++- <string notr="true">1</string> ++- </property> ++- </column> ++- <column> ++- <property name="text"> ++- <string notr="true">2</string> ++- </property> ++- </column> ++- </widget> ++- </item> ++- </layout> ++- </widget> ++- </item> ++- <item row="0" column="1"> ++- <widget class="QFrame" name="demosExamplesFrame"> ++- <property name="sizePolicy"> ++- <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> ++- <horstretch>0</horstretch> ++- <verstretch>0</verstretch> ++- </sizepolicy> ++- </property> ++- <property name="maximumSize"> ++- <size> ++- <width>400</width> ++- <height>16777215</height> ++- </size> ++- </property> ++- <property name="styleSheet"> ++- <string/> ++- </property> ++- <layout class="QGridLayout" name="gridLayout_8"> ++- <property name="rightMargin"> ++- <number>8</number> ++- </property> ++- <property name="horizontalSpacing"> ++- <number>0</number> ++- </property> ++- <item row="0" column="0" colspan="4"> ++- <widget class="QLabel" name="demoTitleLabel"> ++- <property name="alignment"> ++- <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> ++- </property> ++- </widget> ++- </item> ++- <item row="1" column="0"> ++- <widget class="QComboBox" name="examplesComboBox"> ++- <property name="enabled"> ++- <bool>false</bool> ++- </property> ++- <property name="sizePolicy"> ++- <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred"> ++- <horstretch>0</horstretch> ++- <verstretch>0</verstretch> ++- </sizepolicy> ++- </property> ++- <item> ++- <property name="text"> ++- <string>Examples not installed</string> ++- </property> ++- </item> ++- </widget> ++- </item> ++- <item row="1" column="2"> ++- <widget class="QToolButton" name="openExampleButton"> ++- <property name="enabled"> ++- <bool>false</bool> ++- </property> ++- <property name="sizePolicy"> ++- <sizepolicy hsizetype="Fixed" vsizetype="Preferred"> ++- <horstretch>0</horstretch> ++- <verstretch>0</verstretch> ++- </sizepolicy> ++- </property> ++- <property name="text"> ++- <string>Open</string> ++- </property> ++- </widget> ++- </item> ++- <item row="1" column="1"> ++- <spacer name="horizontalSpacer"> ++- <property name="orientation"> ++- <enum>Qt::Horizontal</enum> ++- </property> ++- <property name="sizeType"> ++- <enum>QSizePolicy::Fixed</enum> ++- </property> ++- <property name="sizeHint" stdset="0"> ++- <size> ++- <width>6</width> ++- <height>6</height> ++- </size> ++- </property> ++- </spacer> ++- </item> ++- </layout> ++- </widget> ++- </item> ++- <item row="1" column="1"> ++- <widget class="QFrame" name="didyouKnowFrame"> ++- <property name="sizePolicy"> ++- <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> ++- <horstretch>0</horstretch> ++- <verstretch>0</verstretch> ++- </sizepolicy> ++- </property> ++- <property name="maximumSize"> ++- <size> ++- <width>400</width> ++- <height>16777215</height> ++- </size> ++- </property> ++- <property name="styleSheet"> ++- <string/> ++- </property> ++- <layout class="QGridLayout" name="gridLayout_11"> ++- <property name="rightMargin"> ++- <number>9</number> ++- </property> ++- <item row="0" column="0"> ++- <widget class="QLabel" name="didYouKnowTitleLabel"> ++- <property name="sizePolicy"> ++- <sizepolicy hsizetype="MinimumExpanding" vsizetype="Maximum"> ++- <horstretch>0</horstretch> ++- <verstretch>0</verstretch> ++- </sizepolicy> ++- </property> ++- <property name="alignment"> ++- <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> ++- </property> ++- </widget> ++- </item> ++- <item row="1" column="0" colspan="2"> ++- <widget class="QTextBrowser" name="didYouKnowTextBrowser"> ++- <property name="sizePolicy"> ++- <sizepolicy hsizetype="Minimum" vsizetype="Preferred"> ++- <horstretch>0</horstretch> ++- <verstretch>0</verstretch> ++- </sizepolicy> ++- </property> ++- <property name="frameShape"> ++- <enum>QFrame::NoFrame</enum> ++- </property> ++- <property name="frameShadow"> ++- <enum>QFrame::Plain</enum> ++- </property> ++- <property name="verticalScrollBarPolicy"> ++- <enum>Qt::ScrollBarAlwaysOff</enum> ++- </property> ++- <property name="horizontalScrollBarPolicy"> ++- <enum>Qt::ScrollBarAlwaysOff</enum> ++- </property> ++- <property name="openExternalLinks"> ++- <bool>true</bool> ++- </property> ++- </widget> ++- </item> ++- <item row="0" column="1"> ++- <layout class="QGridLayout" name="gridLayout_10"> ++- <property name="spacing"> ++- <number>0</number> ++- </property> ++- <item row="0" column="0" colspan="2"> ++- <spacer name="verticalSpacer_4"> ++- <property name="orientation"> ++- <enum>Qt::Vertical</enum> ++- </property> ++- <property name="sizeType"> ++- <enum>QSizePolicy::Preferred</enum> ++- </property> ++- <property name="sizeHint" stdset="0"> ++- <size> ++- <width>20</width> ++- <height>2</height> ++- </size> ++- </property> ++- </spacer> ++- </item> ++- <item row="1" column="0"> ++- <widget class="QToolButton" name="prevTipBtn"> ++- <property name="styleSheet"> ++- <string notr="true">QToolButton{ ++- border-right:solid 0 px; ++- height:16px; ++- width:12px; ++-} ++-</string> ++- </property> ++- <property name="text"> ++- <string/> ++- </property> ++- <property name="icon"> ++- <iconset resource="welcome.qrc"> ++- <normaloff>:/welcome/images/arrow-left.png</normaloff>:/welcome/images/arrow-left.png</iconset> ++- </property> ++- <property name="arrowType"> ++- <enum>Qt::NoArrow</enum> ++- </property> ++- </widget> ++- </item> ++- <item row="1" column="1"> ++- <widget class="QToolButton" name="nextTipBtn"> ++- <property name="styleSheet"> ++- <string notr="true">QToolButton{ ++- border-left:solid 0 px; ++- height:16px; ++- width:12px; ++-} ++-</string> ++- </property> ++- <property name="text"> ++- <string/> ++- </property> ++- <property name="icon"> ++- <iconset resource="welcome.qrc"> ++- <normaloff>:/welcome/images/arrow-right.png</normaloff>:/welcome/images/arrow-right.png</iconset> ++- </property> ++- <property name="arrowType"> ++- <enum>Qt::NoArrow</enum> ++- </property> ++- </widget> ++- </item> ++- <item row="2" column="0" colspan="2"> ++- <spacer name="verticalSpacer_3"> ++- <property name="orientation"> ++- <enum>Qt::Vertical</enum> ++- </property> ++- <property name="sizeHint" stdset="0"> ++- <size> ++- <width>20</width> ++- <height>2</height> ++- </size> ++- </property> ++- </spacer> ++- </item> ++- </layout> ++- </item> ++- </layout> ++- </widget> ++- </item> ++- </layout> ++- </widget> ++- <widget class="QWidget" name="developPage"> ++- <layout class="QGridLayout" name="gridLayout_4"> ++- <property name="margin"> ++- <number>18</number> ++- </property> ++- <property name="spacing"> ++- <number>24</number> ++- </property> ++- <item row="0" column="0"> ++- <widget class="QFrame" name="recentSessionsFrame"> ++- <property name="sizePolicy"> ++- <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> ++- <horstretch>0</horstretch> ++- <verstretch>0</verstretch> ++- </sizepolicy> ++- </property> ++- <property name="minimumSize"> ++- <size> ++- <width>270</width> ++- <height>130</height> ++- </size> ++- </property> ++- <property name="styleSheet"> ++- <string/> ++- </property> ++- <layout class="QGridLayout" name="gridLayout_3"> ++- <property name="horizontalSpacing"> ++- <number>0</number> ++- </property> ++- <property name="verticalSpacing"> ++- <number>3</number> ++- </property> ++- <item row="0" column="0" colspan="3"> ++- <widget class="QLabel" name="recentSessionsTitleLabel"> ++- <property name="sizePolicy"> ++- <sizepolicy hsizetype="MinimumExpanding" vsizetype="Maximum"> ++- <horstretch>0</horstretch> ++- <verstretch>0</verstretch> ++- </sizepolicy> ++- </property> ++- <property name="alignment"> ++- <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> ++- </property> ++- </widget> ++- </item> ++- <item row="1" column="0" colspan="3"> ++- <widget class="Core::Utils::WelcomeModeTreeWidget" name="sessTreeWidget"> ++- <property name="sizePolicy"> ++- <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> ++- <horstretch>0</horstretch> ++- <verstretch>0</verstretch> ++- </sizepolicy> ++- </property> ++- <property name="focusPolicy"> ++- <enum>Qt::NoFocus</enum> ++- </property> ++- <property name="frameShape"> ++- <enum>QFrame::NoFrame</enum> ++- </property> ++- <property name="selectionMode"> ++- <enum>QAbstractItemView::NoSelection</enum> ++- </property> ++- <property name="verticalScrollMode"> ++- <enum>QAbstractItemView::ScrollPerPixel</enum> ++- </property> ++- <property name="rootIsDecorated"> ++- <bool>false</bool> ++- </property> ++- <property name="uniformRowHeights"> ++- <bool>true</bool> ++- </property> ++- <property name="allColumnsShowFocus"> ++- <bool>true</bool> ++- </property> ++- <property name="columnCount"> ++- <number>2</number> ++- </property> ++- <attribute name="headerVisible"> ++- <bool>false</bool> ++- </attribute> ++- <attribute name="headerDefaultSectionSize"> ++- <number>24</number> ++- </attribute> ++- <attribute name="headerMinimumSectionSize"> ++- <number>0</number> ++- </attribute> ++- <column> ++- <property name="text"> ++- <string notr="true">1</string> ++- </property> ++- </column> ++- <column> ++- <property name="text"> ++- <string notr="true">2</string> ++- </property> ++- </column> ++- </widget> ++- </item> ++- <item row="3" column="0"> ++- <widget class="QPushButton" name="manageSessionsButton"> ++- <property name="focusPolicy"> ++- <enum>Qt::TabFocus</enum> ++- </property> ++- <property name="text"> ++- <string>Manage Sessions...</string> ++- </property> ++- </widget> ++- </item> ++- <item row="4" column="0"> ++- <spacer name="verticalSpacer"> ++- <property name="orientation"> ++- <enum>Qt::Vertical</enum> ++- </property> ++- <property name="sizeHint" stdset="0"> ++- <size> ++- <width>20</width> ++- <height>40</height> ++- </size> ++- </property> ++- </spacer> ++- </item> ++- </layout> ++- </widget> ++- </item> ++- <item row="0" column="2"> ++- <widget class="QFrame" name="recentProjectsFrame"> ++- <property name="styleSheet"> ++- <string/> ++- </property> ++- <layout class="QGridLayout" name="gridLayout_5"> ++- <property name="horizontalSpacing"> ++- <number>0</number> ++- </property> ++- <property name="verticalSpacing"> ++- <number>3</number> ++- </property> ++- <property name="rightMargin"> ++- <number>9</number> ++- </property> ++- <item row="0" column="0" colspan="3"> ++- <widget class="QLabel" name="projTitleLabel"> ++- <property name="sizePolicy"> ++- <sizepolicy hsizetype="MinimumExpanding" vsizetype="Maximum"> ++- <horstretch>0</horstretch> ++- <verstretch>0</verstretch> ++- </sizepolicy> ++- </property> ++- <property name="alignment"> ++- <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> ++- </property> ++- </widget> ++- </item> ++- <item row="1" column="0" colspan="3"> ++- <widget class="Core::Utils::WelcomeModeTreeWidget" name="projTreeWidget"> ++- <property name="sizePolicy"> ++- <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> ++- <horstretch>0</horstretch> ++- <verstretch>0</verstretch> ++- </sizepolicy> ++- </property> ++- <property name="focusPolicy"> ++- <enum>Qt::NoFocus</enum> ++- </property> ++- <property name="frameShape"> ++- <enum>QFrame::NoFrame</enum> ++- </property> ++- <property name="selectionMode"> ++- <enum>QAbstractItemView::NoSelection</enum> ++- </property> ++- <property name="verticalScrollMode"> ++- <enum>QAbstractItemView::ScrollPerPixel</enum> ++- </property> ++- <property name="rootIsDecorated"> ++- <bool>false</bool> ++- </property> ++- <property name="uniformRowHeights"> ++- <bool>true</bool> ++- </property> ++- <property name="allColumnsShowFocus"> ++- <bool>true</bool> ++- </property> ++- <property name="columnCount"> ++- <number>2</number> ++- </property> ++- <attribute name="headerVisible"> ++- <bool>false</bool> ++- </attribute> ++- <attribute name="headerDefaultSectionSize"> ++- <number>24</number> ++- </attribute> ++- <attribute name="headerMinimumSectionSize"> ++- <number>0</number> ++- </attribute> ++- <column> ++- <property name="text"> ++- <string notr="true">1</string> ++- </property> ++- </column> ++- <column> ++- <property name="text"> ++- <string notr="true">2</string> ++- </property> ++- </column> ++- </widget> ++- </item> ++- <item row="3" column="0"> ++- <widget class="QPushButton" name="createNewProjectButton"> ++- <property name="focusPolicy"> ++- <enum>Qt::TabFocus</enum> ++- </property> ++- <property name="text"> ++- <string>Create New Project...</string> ++- </property> ++- <property name="flat"> ++- <bool>true</bool> ++- </property> ++- </widget> ++- </item> ++- <item row="4" column="0"> ++- <spacer name="verticalSpacer_2"> ++- <property name="orientation"> ++- <enum>Qt::Vertical</enum> ++- </property> ++- <property name="sizeHint" stdset="0"> ++- <size> ++- <width>20</width> ++- <height>40</height> ++- </size> ++- </property> ++- </spacer> ++- </item> ++- </layout> ++- </widget> ++- </item> ++- </layout> ++- </widget> ++- <widget class="QWidget" name="communityPage"> +++ <widget class="QWidget" name="widget"> ++ <layout class="QGridLayout" name="gridLayout_7"> ++ <property name="margin"> ++ <number>18</number> ++@@ -944,168 +259,6 @@ QToolButton:pressed { ++ <property name="spacing"> ++ <number>24</number> ++ </property> ++- <item row="0" column="0"> ++- <widget class="QFrame" name="labsFrame"> ++- <property name="frameShape"> ++- <enum>QFrame::NoFrame</enum> ++- </property> ++- <property name="frameShadow"> ++- <enum>QFrame::Plain</enum> ++- </property> ++- <layout class="QVBoxLayout" name="verticalLayout_2"> ++- <item> ++- <widget class="QLabel" name="labsTitleLabel"> ++- <property name="sizePolicy"> ++- <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> ++- <horstretch>0</horstretch> ++- <verstretch>0</verstretch> ++- </sizepolicy> ++- </property> ++- <property name="alignment"> ++- <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> ++- </property> ++- </widget> ++- </item> ++- <item> ++- <widget class="Core::Utils::WelcomeModeTreeWidget" name="newsTreeWidget"> ++- <property name="sizePolicy"> ++- <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> ++- <horstretch>0</horstretch> ++- <verstretch>0</verstretch> ++- </sizepolicy> ++- </property> ++- <property name="minimumSize"> ++- <size> ++- <width>340</width> ++- <height>0</height> ++- </size> ++- </property> ++- <property name="focusPolicy"> ++- <enum>Qt::NoFocus</enum> ++- </property> ++- <property name="frameShape"> ++- <enum>QFrame::NoFrame</enum> ++- </property> ++- <property name="selectionMode"> ++- <enum>QAbstractItemView::NoSelection</enum> ++- </property> ++- <property name="verticalScrollMode"> ++- <enum>QAbstractItemView::ScrollPerPixel</enum> ++- </property> ++- <property name="rootIsDecorated"> ++- <bool>false</bool> ++- </property> ++- <property name="uniformRowHeights"> ++- <bool>true</bool> ++- </property> ++- <property name="allColumnsShowFocus"> ++- <bool>true</bool> ++- </property> ++- <property name="columnCount"> ++- <number>2</number> ++- </property> ++- <attribute name="headerVisible"> ++- <bool>false</bool> ++- </attribute> ++- <attribute name="headerDefaultSectionSize"> ++- <number>24</number> ++- </attribute> ++- <attribute name="headerMinimumSectionSize"> ++- <number>0</number> ++- </attribute> ++- <column> ++- <property name="text"> ++- <string notr="true">1</string> ++- </property> ++- </column> ++- <column> ++- <property name="text"> ++- <string notr="true">2</string> ++- </property> ++- </column> ++- </widget> ++- </item> ++- </layout> ++- </widget> ++- </item> ++- <item row="0" column="1"> ++- <widget class="QFrame" name="sitesFrame"> ++- <property name="frameShape"> ++- <enum>QFrame::NoFrame</enum> ++- </property> ++- <property name="frameShadow"> ++- <enum>QFrame::Plain</enum> ++- </property> ++- <layout class="QVBoxLayout" name="verticalLayout_3"> ++- <item> ++- <widget class="QLabel" name="sitesTitleLabel"> ++- <property name="sizePolicy"> ++- <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> ++- <horstretch>0</horstretch> ++- <verstretch>0</verstretch> ++- </sizepolicy> ++- </property> ++- <property name="alignment"> ++- <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> ++- </property> ++- </widget> ++- </item> ++- <item> ++- <widget class="Core::Utils::WelcomeModeTreeWidget" name="sitesTreeWidget"> ++- <property name="sizePolicy"> ++- <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> ++- <horstretch>0</horstretch> ++- <verstretch>0</verstretch> ++- </sizepolicy> ++- </property> ++- <property name="focusPolicy"> ++- <enum>Qt::NoFocus</enum> ++- </property> ++- <property name="frameShape"> ++- <enum>QFrame::NoFrame</enum> ++- </property> ++- <property name="selectionMode"> ++- <enum>QAbstractItemView::NoSelection</enum> ++- </property> ++- <property name="verticalScrollMode"> ++- <enum>QAbstractItemView::ScrollPerPixel</enum> ++- </property> ++- <property name="rootIsDecorated"> ++- <bool>false</bool> ++- </property> ++- <property name="uniformRowHeights"> ++- <bool>true</bool> ++- </property> ++- <property name="allColumnsShowFocus"> ++- <bool>true</bool> ++- </property> ++- <property name="columnCount"> ++- <number>2</number> ++- </property> ++- <attribute name="headerVisible"> ++- <bool>false</bool> ++- </attribute> ++- <attribute name="headerDefaultSectionSize"> ++- <number>24</number> ++- </attribute> ++- <attribute name="headerMinimumSectionSize"> ++- <number>0</number> ++- </attribute> ++- <column> ++- <property name="text"> ++- <string notr="true">1</string> ++- </property> ++- </column> ++- <column> ++- <property name="text"> ++- <string notr="true">2</string> ++- </property> ++- </column> ++- </widget> ++- </item> ++- </layout> ++- </widget> ++- </item> ++ </layout> ++ </widget> ++ </widget> ++@@ -1219,13 +372,6 @@ QToolButton:pressed { ++ </item> ++ </layout> ++ </widget> ++- <customwidgets> ++- <customwidget> ++- <class>Core::Utils::WelcomeModeTreeWidget</class> ++- <extends>QTreeWidget</extends> ++- <header>utils/welcomemodetreewidget.h</header> ++- </customwidget> ++- </customwidgets> ++ <resources> ++ <include location="welcome.qrc"/> ++ </resources> ++diff --git a/src/plugins/welcome/welcomeplugin.cpp b/src/plugins/welcome/welcomeplugin.cpp ++index e9743a9..544e36a 100644 ++--- a/src/plugins/welcome/welcomeplugin.cpp +++++ b/src/plugins/welcome/welcomeplugin.cpp ++@@ -31,6 +31,8 @@ ++ ++ #include "welcomemode.h" ++ +++#include "communitywelcomepage.h" +++ ++ #include <coreplugin/actionmanager/actionmanager.h> ++ #include <coreplugin/basemode.h> ++ #include <coreplugin/coreconstants.h> ++@@ -45,11 +47,10 @@ ++ #include <QtGui/QMessageBox> ++ #include <QtGui/QPushButton> ++ ++-using namespace Welcome; ++- +++using namespace Welcome::Internal; ++ ++ WelcomePlugin::WelcomePlugin() ++- : m_welcomeMode(0) +++ : m_welcomeMode(0), m_communityWelcomePlugin(0) ++ { ++ } ++ ++@@ -59,6 +60,10 @@ WelcomePlugin::~WelcomePlugin() ++ removeObject(m_welcomeMode); ++ delete m_welcomeMode; ++ } +++ if (m_communityWelcomePlugin) { +++ removeObject(m_communityWelcomePlugin); +++ delete m_communityWelcomePlugin; +++ } ++ } ++ ++ /*! Initializes the plugin. Returns true on success. ++@@ -72,6 +77,9 @@ bool WelcomePlugin::initialize(const QStringList &arguments, QString *error_mess ++ Q_UNUSED(arguments) ++ Q_UNUSED(error_message) ++ +++ m_communityWelcomePlugin = new Internal::CommunityWelcomePage; +++ addObject(m_communityWelcomePlugin); +++ ++ m_welcomeMode = new WelcomeMode; ++ addObject(m_welcomeMode); ++ ++@@ -91,6 +99,7 @@ bool WelcomePlugin::initialize(const QStringList &arguments, QString *error_mess ++ */ ++ void WelcomePlugin::extensionsInitialized() ++ { +++ m_welcomeMode->initPlugins(); ++ Core::ModeManager::instance()->activateMode(m_welcomeMode->uniqueModeName()); ++ } ++ ++diff --git a/src/plugins/welcome/welcomeplugin.h b/src/plugins/welcome/welcomeplugin.h ++index 970ec39..9855595 100644 ++--- a/src/plugins/welcome/welcomeplugin.h +++++ b/src/plugins/welcome/welcomeplugin.h ++@@ -36,6 +36,9 @@ namespace Welcome { ++ ++ class WelcomeMode; ++ +++namespace Internal { +++class CommunityWelcomePage; +++ ++ class WelcomePlugin ++ : public ExtensionSystem::IPlugin ++ { ++@@ -51,8 +54,10 @@ public: ++ ++ private: ++ WelcomeMode *m_welcomeMode; +++ Internal::CommunityWelcomePage *m_communityWelcomePlugin; ++ }; ++ ++ } // namespace Welcome +++} // namespace Internal ++ ++ #endif // WELCOMEPLUGIN_H ++-- ++1.6.3.msysgit.0 ++ +diff --git a/src/libs/extensionsystem/extensionsystem.pro b/src/libs/extensionsystem/extensionsystem.pro +index 81f3bc8..b5fed62 100644 +--- a/src/libs/extensionsystem/extensionsystem.pro ++++ b/src/libs/extensionsystem/extensionsystem.pro +@@ -4,9 +4,7 @@ DEFINES += EXTENSIONSYSTEM_LIBRARY + include(../../qtcreatorlibrary.pri) + include(extensionsystem_dependencies.pri) + +-unix:!macx:!freebsd* { +- LIBS += -ldl +-} ++unix:!macx:!freebsd*:LIBS += -ldl + + DEFINES += IDE_TEST_DIR=\\\"$$IDE_SOURCE_TREE\\\" + +@@ -21,14 +19,16 @@ HEADERS += pluginerrorview.h \ + pluginspec_p.h \ + pluginview.h \ + pluginview_p.h \ +- optionsparser.h ++ optionsparser.h \ ++ iwelcomepage.h + SOURCES += pluginerrorview.cpp \ + plugindetailsview.cpp \ + iplugin.cpp \ + pluginmanager.cpp \ + pluginspec.cpp \ + pluginview.cpp \ +- optionsparser.cpp ++ optionsparser.cpp \ ++ iwelcomepage.cpp + FORMS += pluginview.ui \ + pluginerrorview.ui \ + plugindetailsview.ui +diff --git a/src/libs/extensionsystem/iwelcomepage.cpp b/src/libs/extensionsystem/iwelcomepage.cpp +new file mode 100644 +index 0000000..1297037 +--- /dev/null ++++ b/src/libs/extensionsystem/iwelcomepage.cpp +@@ -0,0 +1,8 @@ ++#include "iwelcomepage.h" ++ ++using namespace ExtensionSystem; ++ ++IWelcomePage::IWelcomePage() ++{ ++ ++} +diff --git a/src/libs/extensionsystem/iwelcomepage.h b/src/libs/extensionsystem/iwelcomepage.h +new file mode 100644 +index 0000000..e4e5e6f +--- /dev/null ++++ b/src/libs/extensionsystem/iwelcomepage.h +@@ -0,0 +1,31 @@ ++#ifndef IWELCOMEPAGE_H ++#define IWELCOMEPAGE_H ++ ++ ++#include "extensionsystem_global.h" ++ ++#include <QObject> ++ ++namespace ExtensionSystem { ++ ++class IWelcomePagePrivate; ++ ++class EXTENSIONSYSTEM_EXPORT IWelcomePage : public QObject ++{ ++ Q_OBJECT ++ ++public: ++ IWelcomePage(); ++ ++ virtual QWidget *page() = 0; ++ virtual QString title() const = 0; ++ virtual int priority() const { return 0; } ++ ++private: ++ // not used atm ++ IWelcomePagePrivate *m_d; ++}; ++ ++} ++ ++#endif // IWELCOMEPAGE_H +diff --git a/src/libs/utils/welcomemodetreewidget.cpp b/src/libs/utils/welcomemodetreewidget.cpp +index 26d55a3..ff68ccc 100644 +--- a/src/libs/utils/welcomemodetreewidget.cpp ++++ b/src/libs/utils/welcomemodetreewidget.cpp +@@ -36,6 +36,18 @@ + namespace Core { + namespace Utils { + ++void WelcomeModeLabel::setStyledText(const QString &text) ++{ ++ QString rc = QLatin1String( ++ "<html><head><style type=\"text/css\">p, li { white-space: pre-wrap; }</style></head>" ++ "<body style=\" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;\">" ++ "<p style=\" margin-top:16px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">" ++ "<span style=\" font-size:x-large; color:#555555;\">"); ++ rc += text; ++ rc += QLatin1String("</span></p><hr/></body></html>"); ++ setText(rc); ++} ++ + struct WelcomeModeTreeWidgetPrivate + { + WelcomeModeTreeWidgetPrivate() {} +@@ -48,6 +60,8 @@ WelcomeModeTreeWidget::WelcomeModeTreeWidget(QWidget *parent) : + m_d->bullet = QIcon(QLatin1String(":/welcome/images/list_bullet_arrow.png")); + connect(this, SIGNAL(itemClicked(QTreeWidgetItem *, int)), + SLOT(slotItemClicked(QTreeWidgetItem *))); ++ ++ viewport()->setAutoFillBackground(false); + } + + WelcomeModeTreeWidget::~WelcomeModeTreeWidget() +diff --git a/src/libs/utils/welcomemodetreewidget.h b/src/libs/utils/welcomemodetreewidget.h +index d26bc22..8237613 100644 +--- a/src/libs/utils/welcomemodetreewidget.h ++++ b/src/libs/utils/welcomemodetreewidget.h +@@ -33,11 +33,22 @@ + #include "utils_global.h" + + #include <QtGui/QTreeWidget> ++#include <QtGui/QLabel> + + namespace Core { + namespace Utils { + + struct WelcomeModeTreeWidgetPrivate; ++struct WelcomeModeLabelPrivate; ++ ++class QTCREATOR_UTILS_EXPORT WelcomeModeLabel : public QLabel ++{ ++ Q_OBJECT ++public: ++ WelcomeModeLabel(QWidget *parent) : QLabel(parent) {}; ++ void setStyledText(const QString &text); ++ WelcomeModeLabelPrivate *m_d; ++}; + + class QTCREATOR_UTILS_EXPORT WelcomeModeTreeWidget : public QTreeWidget + { +diff --git a/src/plugins/coreplugin/coreplugin.h b/src/plugins/coreplugin/coreplugin.h +index 04e5be4..ce487fb 100644 +--- a/src/plugins/coreplugin/coreplugin.h ++++ b/src/plugins/coreplugin/coreplugin.h +@@ -33,10 +33,6 @@ + #include <extensionsystem/iplugin.h> + + namespace Core { +- class IMode; +-} +- +-namespace Core { + namespace Internal { + + class EditMode; +@@ -59,7 +55,6 @@ public slots: + + private: + MainWindow *m_mainWindow; +- Core::IMode *m_welcomeMode; + EditMode *m_editMode; + }; + +diff --git a/src/plugins/help/Help.pluginspec b/src/plugins/help/Help.pluginspec +index d7ccc07..29f1b46 100644 +--- a/src/plugins/help/Help.pluginspec ++++ b/src/plugins/help/Help.pluginspec +@@ -22,6 +22,5 @@ will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.</license> + <dependency name="Core" version="1.2.80"/> + <dependency name="Find" version="1.2.80"/> + <dependency name="QuickOpen" version="1.2.80"/> +- <dependency name="Welcome" version="1.2.80"/> + </dependencyList> + </plugin> +diff --git a/src/plugins/help/help.pro b/src/plugins/help/help.pro +index 1f5ec55..b733a1f 100644 +--- a/src/plugins/help/help.pro ++++ b/src/plugins/help/help.pro +@@ -4,7 +4,6 @@ include(../../qtcreatorplugin.pri) + include(../../plugins/coreplugin/coreplugin.pri) + include(../../plugins/find/find.pri) + include(../../plugins/quickopen/quickopen.pri) +-include(../../plugins/welcome/welcome.pri) + QT += network + CONFIG += help + DEFINES += QT_CLUCENE_SUPPORT \ +diff --git a/src/plugins/help/helpplugin.cpp b/src/plugins/help/helpplugin.cpp +index f6e8db8..2ff11c8 100644 +--- a/src/plugins/help/helpplugin.cpp ++++ b/src/plugins/help/helpplugin.cpp +@@ -87,8 +87,8 @@ + using namespace Help; + using namespace Help::Internal; + +-HelpManager::HelpManager(QHelpEngine *helpEngine) +- : m_helpEngine(helpEngine) ++HelpManager::HelpManager(Internal::HelpPlugin* plugin) ++ : m_plugin(plugin) + { + } + +@@ -96,7 +96,7 @@ void HelpManager::registerDocumentation(const QStringList &fileNames) + { + bool needsSetup = false; + { +- QHelpEngineCore hc(m_helpEngine->collectionFile()); ++ QHelpEngineCore hc(m_plugin->helpEngine()->collectionFile()); + if (!hc.setupData()) + qWarning() << "Could not initialize help engine:" << hc.error(); + foreach (const QString &fileName, fileNames) { +@@ -113,7 +113,17 @@ void HelpManager::registerDocumentation(const QStringList &fileNames) + } + } + if (needsSetup) +- m_helpEngine->setupData(); ++ m_plugin->helpEngine()->setupData(); ++} ++ ++void HelpManager::openHelpPage(const QString& url) ++{ ++ m_plugin->openHelpPage(url); ++} ++ ++void HelpManager::openContextHelpPage(const QString& url) ++{ ++ m_plugin->openContextHelpPage(url); + } + + HelpPlugin::HelpPlugin() : +@@ -180,7 +190,7 @@ bool HelpPlugin::initialize(const QStringList &arguments, QString *error) + connect(m_helpEngine, SIGNAL(setupFinished()), this, + SLOT(updateFilterComboBox())); + +- addAutoReleasedObject(new HelpManager(m_helpEngine)); ++ addAutoReleasedObject(new HelpManager(this)); + + m_filterSettingsPage = new FilterSettingsPage(m_helpEngine); + addAutoReleasedObject(m_filterSettingsPage); +@@ -430,6 +440,11 @@ bool HelpPlugin::initialize(const QStringList &arguments, QString *error) + return true; + } + ++QHelpEngine* HelpPlugin::helpEngine() const ++{ ++ return m_helpEngine; ++} ++ + void HelpPlugin::createRightPaneSideBar() + { + QAction *switchToHelpMode = new QAction("Go to Help Mode", this); +@@ -610,17 +625,6 @@ void HelpPlugin::extensionsInitialized() + updateFilterComboBox(); + m_bookmarkManager->setupBookmarkModels(); + +- using namespace Core::Internal; +- using namespace Core::Constants; +- Welcome::WelcomeMode *welcomeMode = +- qobject_cast<Welcome::WelcomeMode*>(m_core->modeManager()->mode(MODE_WELCOME)); +- if (welcomeMode) { +- connect(welcomeMode, SIGNAL(openHelpPage(QString)), this, +- SLOT(openHelpPage(QString))); +- connect(welcomeMode, SIGNAL(openContextHelpPage(QString)), this, +- SLOT(openContextHelpPage(QString))); +- } +- + #if !defined(QT_NO_WEBKIT) + QWebSettings* webSettings = QWebSettings::globalSettings(); + QFont font(webSettings->fontFamily(QWebSettings::StandardFont), +diff --git a/src/plugins/help/helpplugin.h b/src/plugins/help/helpplugin.h +index 6ab78cf..10cf1fd 100644 +--- a/src/plugins/help/helpplugin.h ++++ b/src/plugins/help/helpplugin.h +@@ -63,6 +63,7 @@ class SideBarItem; + namespace Help { + namespace Internal { + class CentralWidget; ++ class HelpPlugin; + } + + namespace Constants { +@@ -76,12 +77,14 @@ class HELP_EXPORT HelpManager : public QObject + { + Q_OBJECT + public: +- HelpManager(QHelpEngine *helpEngine); ++ HelpManager(Internal::HelpPlugin*); + + void registerDocumentation(const QStringList &fileNames); ++ void openHelpPage(const QString& url); ++ void openContextHelpPage(const QString &url); + + private: +- QHelpEngine *m_helpEngine; ++ Internal::HelpPlugin *m_plugin; + }; + + namespace Internal { +@@ -108,6 +111,12 @@ public: + void setIndexFilter(const QString &filter); + QString indexFilter() const; + ++ void openHelpPage(const QUrl& url); ++ void openHelpPage(const QString& url); ++ void openContextHelpPage(const QString &url); ++ ++ QHelpEngine* helpEngine() const; ++ + private slots: + void modeChanged(Core::IMode *mode); + void activateContext(); +@@ -128,10 +137,6 @@ private slots: + void slotHideRightPane(); + void copyFromSideBar(); + +- void openHelpPage(const QUrl& url); +- void openHelpPage(const QString& url); +- void openContextHelpPage(const QString &url); +- + void updateSideBarSource(); + void updateSideBarSource(const QUrl &newUrl); + +diff --git a/src/plugins/plugins.pro b/src/plugins/plugins.pro +index 6ef52c1..b8ae5ec 100644 +--- a/src/plugins/plugins.pro ++++ b/src/plugins/plugins.pro +@@ -94,7 +94,6 @@ plugin_projectexplorer.depends = plugin_quickopen + plugin_projectexplorer.depends += plugin_find + plugin_projectexplorer.depends += plugin_coreplugin + plugin_projectexplorer.depends += plugin_texteditor +-plugin_projectexplorer.depends += plugin_welcome + + plugin_qt4projectmanager.subdir = qt4projectmanager + plugin_qt4projectmanager.depends = plugin_texteditor +@@ -103,7 +102,6 @@ plugin_qt4projectmanager.depends += plugin_cpptools + plugin_qt4projectmanager.depends += plugin_cppeditor + plugin_qt4projectmanager.depends += plugin_help + plugin_qt4projectmanager.depends += plugin_designer +-plugin_qt4projectmanager.depends += plugin_welcome + + plugin_quickopen.subdir = quickopen + plugin_quickopen.depends = plugin_coreplugin +@@ -144,7 +142,6 @@ plugin_help.subdir = help + plugin_help.depends = plugin_find + plugin_help.depends += plugin_quickopen + plugin_help.depends += plugin_coreplugin +-plugin_help.depends += plugin_welcome + + plugin_resourceeditor.subdir = resourceeditor + plugin_resourceeditor.depends = plugin_coreplugin +diff --git a/src/plugins/projectexplorer/ProjectExplorer.pluginspec b/src/plugins/projectexplorer/ProjectExplorer.pluginspec +index 6a66cfe..8b5a7c3 100644 +--- a/src/plugins/projectexplorer/ProjectExplorer.pluginspec ++++ b/src/plugins/projectexplorer/ProjectExplorer.pluginspec +@@ -23,6 +23,5 @@ will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.</license> + <dependency name="Find" version="1.2.80"/> + <dependency name="QuickOpen" version="1.2.80"/> + <dependency name="TextEditor" version="1.2.80"/> +- <dependency name="Welcome" version="1.2.80"/> + </dependencyList> + </plugin> +diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp +index f10b628..c9a692c 100644 +--- a/src/plugins/projectexplorer/projectexplorer.cpp ++++ b/src/plugins/projectexplorer/projectexplorer.cpp +@@ -57,6 +57,8 @@ + #include "sessiondialog.h" + #include "buildparserfactory.h" + #include "projectexplorersettingspage.h" ++#include "projectwelcomepage.h" ++#include "projectwelcomepagewidget.h" + + #include <coreplugin/basemode.h> + #include <coreplugin/coreconstants.h> +@@ -140,6 +142,7 @@ ProjectExplorerPlugin::ProjectExplorerPlugin() + + ProjectExplorerPlugin::~ProjectExplorerPlugin() + { ++ removeObject(m_welcomePlugin); + removeObject(this); + } + +@@ -156,6 +159,11 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er + Core::ICore *core = Core::ICore::instance(); + Core::ActionManager *am = core->actionManager(); + ++ m_welcomePlugin = new ProjectWelcomePage; ++ m_welcomePage = qobject_cast<Internal::ProjectWelcomePageWidget*>(m_welcomePlugin->page()); ++ Q_ASSERT(m_welcomePage); ++ connect(m_welcomePage, SIGNAL(manageSessions()), this, SLOT(showSessionManager())); ++ addObject(m_welcomePlugin); + addObject(this); + + connect(core->fileManager(), SIGNAL(currentFileChanged(QString)), +@@ -646,10 +654,6 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er + m_projectExplorerSettings.showCompilerOutput = s->value("ProjectExplorer/Settings/ShowCompilerOutput", false).toBool(); + } + +- if (Welcome::WelcomeMode *welcomeMode = qobject_cast<Welcome::WelcomeMode*> +- (Core::ICore::instance()->modeManager()->mode(Core::Constants::MODE_WELCOME))) { +- connect(welcomeMode, SIGNAL(manageSessions()), this, SLOT(showSessionManager())); +- } + connect(m_sessionManagerAction, SIGNAL(triggered()), this, SLOT(showSessionManager())); + connect(m_newAction, SIGNAL(triggered()), this, SLOT(newProject())); + #if 0 +@@ -685,6 +689,8 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er + this, SLOT(determineSessionToRestoreAtStartup())); + connect(Core::ICore::instance(), SIGNAL(coreOpened()), this, SLOT(restoreSession())); + ++ updateWelcomePage(); ++ + return true; + } + +@@ -835,9 +841,7 @@ void ProjectExplorerPlugin::showSessionManager() + Core::ModeManager *modeManager = Core::ModeManager::instance(); + Core::IMode *welcomeMode = modeManager->mode(Core::Constants::MODE_WELCOME); + if (modeManager->currentMode() == welcomeMode) +- { +- updateWelcomePage(qobject_cast<Welcome::WelcomeMode*>(welcomeMode)); +- } ++ updateWelcomePage(); + } + + void ProjectExplorerPlugin::setStartupProject(Project *project) +@@ -1019,20 +1023,19 @@ Project *ProjectExplorerPlugin::startupProject() const + } + + // update welcome page +-void ProjectExplorerPlugin::updateWelcomePage(Welcome::WelcomeMode *welcomeMode) ++void ProjectExplorerPlugin::updateWelcomePage() + { +- Welcome::WelcomeMode::WelcomePageData welcomePageData; ++ ProjectWelcomePageWidget::WelcomePageData welcomePageData; + welcomePageData.sessionList = m_session->sessions(); + welcomePageData.activeSession = m_session->activeSession(); + welcomePageData.previousSession = m_session->lastSession(); + welcomePageData.projectList = m_recentProjects; +- welcomeMode->updateWelcomePage(welcomePageData); ++ m_welcomePage->updateWelcomePage(welcomePageData); + } + +-void ProjectExplorerPlugin::currentModeChanged(Core::IMode *mode) ++void ProjectExplorerPlugin::currentModeChanged(Core::IMode *) + { +- if (Welcome::WelcomeMode *welcomeMode = qobject_cast<Welcome::WelcomeMode*>(mode)) +- updateWelcomePage(welcomeMode); ++ updateWelcomePage(); + } + + void ProjectExplorerPlugin::determineSessionToRestoreAtStartup() +@@ -1080,11 +1083,8 @@ void ProjectExplorerPlugin::restoreSession() + // update welcome page + Core::ModeManager *modeManager = Core::ModeManager::instance(); + connect(modeManager, SIGNAL(currentModeChanged(Core::IMode*)), this, SLOT(currentModeChanged(Core::IMode*))); +- if (Welcome::WelcomeMode *welcomeMode = qobject_cast<Welcome::WelcomeMode*>(modeManager->mode(Core::Constants::MODE_WELCOME))) { +- updateWelcomePage(welcomeMode); +- connect(welcomeMode, SIGNAL(requestSession(QString)), this, SLOT(loadSession(QString))); +- connect(welcomeMode, SIGNAL(requestProject(QString)), this, SLOT(loadProject(QString))); +- } ++ connect(m_welcomePage, SIGNAL(requestSession(QString)), this, SLOT(loadSession(QString))); ++ connect(m_welcomePage, SIGNAL(requestProject(QString)), this, SLOT(loadProject(QString))); + + Core::ICore::instance()->openFiles(arguments); + updateActions(); +diff --git a/src/plugins/projectexplorer/projectexplorer.h b/src/plugins/projectexplorer/projectexplorer.h +index 0f781ea..c3251c0 100644 +--- a/src/plugins/projectexplorer/projectexplorer.h ++++ b/src/plugins/projectexplorer/projectexplorer.h +@@ -72,6 +72,8 @@ class ApplicationOutput; + class OutputPane; + class ProjectWindow; + class ProjectFileFactory; ++class ProjectWelcomePage; ++class ProjectWelcomePageWidget; + + struct ProjectExplorerSettings + { +@@ -209,7 +211,7 @@ private: + + void updateActions(); + void addToRecentProjects(const QString &fileName, const QString &displayName); +- void updateWelcomePage(Welcome::WelcomeMode *welcomeMode); ++ void updateWelcomePage(); + Internal::ProjectFileFactory *findProjectFileFactory(const QString &filename) const; + + static ProjectExplorerPlugin *m_instance; +@@ -279,6 +281,8 @@ private: + QString m_runMode; + QString m_projectFilterString; + Internal::ProjectExplorerSettings m_projectExplorerSettings; ++ Internal::ProjectWelcomePage *m_welcomePlugin; ++ Internal::ProjectWelcomePageWidget *m_welcomePage; + }; + + namespace Internal { +diff --git a/src/plugins/projectexplorer/projectexplorer.pro b/src/plugins/projectexplorer/projectexplorer.pro +index ffb0b08..9e73399 100644 +--- a/src/plugins/projectexplorer/projectexplorer.pro ++++ b/src/plugins/projectexplorer/projectexplorer.pro +@@ -61,7 +61,9 @@ HEADERS += projectexplorer.h \ + filewatcher.h \ + debugginghelper.h \ + abstractmakestep.h \ +- projectexplorersettingspage.h ++ projectexplorersettingspage.h \ ++ projectwelcomepage.h \ ++ projectwelcomepagewidget.h + SOURCES += projectexplorer.cpp \ + projectwindow.cpp \ + buildmanager.cpp \ +@@ -111,7 +113,9 @@ SOURCES += projectexplorer.cpp \ + filewatcher.cpp \ + debugginghelper.cpp \ + abstractmakestep.cpp \ +- projectexplorersettingspage.cpp ++ projectexplorersettingspage.cpp \ ++ projectwelcomepage.cpp \ ++ projectwelcomepagewidget.cpp + FORMS += processstep.ui \ + editorsettingspropertiespage.ui \ + runsettingspropertiespage.ui \ +@@ -119,7 +123,8 @@ FORMS += processstep.ui \ + projectwizardpage.ui \ + buildstepspage.ui \ + removefiledialog.ui \ +- projectexplorersettingspage.ui ++ projectexplorersettingspage.ui \ ++ projectwelcomepagewidget.ui + win32 { + SOURCES += applicationlauncher_win.cpp \ + winguiprocess.cpp +diff --git a/src/plugins/projectexplorer/projectexplorer_dependencies.pri b/src/plugins/projectexplorer/projectexplorer_dependencies.pri +index ecbb7a4..674c8bb 100644 +--- a/src/plugins/projectexplorer/projectexplorer_dependencies.pri ++++ b/src/plugins/projectexplorer/projectexplorer_dependencies.pri +@@ -3,4 +3,3 @@ include(../../plugins/quickopen/quickopen.pri) + include(../../plugins/find/find.pri) + include(../../plugins/coreplugin/coreplugin.pri) + include(../../plugins/texteditor/texteditor.pri) +-include(../../plugins/welcome/welcome.pri) +diff --git a/src/plugins/projectexplorer/projectwelcomepage.cpp b/src/plugins/projectexplorer/projectwelcomepage.cpp +new file mode 100644 +index 0000000..ad1c3e9 +--- /dev/null ++++ b/src/plugins/projectexplorer/projectwelcomepage.cpp +@@ -0,0 +1,48 @@ ++/************************************************************************** ++** ++** This file is part of Qt Creator ++** ++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). ++** ++** Contact: Nokia Corporation (qt-info@nokia.com) ++** ++** Commercial Usage ++** ++** Licensees holding valid Qt Commercial licenses may use this file in ++** accordance with the Qt Commercial License Agreement provided with the ++** Software or, alternatively, in accordance with the terms contained in ++** a written agreement between you and Nokia. ++** ++** GNU Lesser General Public License Usage ++** ++** Alternatively, this file may be used under the terms of the GNU Lesser ++** General Public License version 2.1 as published by the Free Software ++** Foundation and appearing in the file LICENSE.LGPL included in the ++** packaging of this file. Please review the following information to ++** ensure the GNU Lesser General Public License version 2.1 requirements ++** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ++** ++** If you are unsure which license is appropriate for your use, please ++** contact the sales department at http://www.qtsoftware.com/contact. ++** ++**************************************************************************/ ++ ++#include "projectwelcomepage.h" ++#include "projectwelcomepagewidget.h" ++ ++namespace ProjectExplorer { ++namespace Internal { ++ ++ProjectWelcomePage::ProjectWelcomePage() ++ : m_page(new ProjectWelcomePageWidget) ++{ ++ ++} ++ ++QWidget* ProjectWelcomePage::page() ++{ ++ return m_page; ++} ++ ++} // namespace Internal ++} // namespace ProjectExplorer +diff --git a/src/plugins/projectexplorer/projectwelcomepage.h b/src/plugins/projectexplorer/projectwelcomepage.h +new file mode 100644 +index 0000000..6185dd5 +--- /dev/null ++++ b/src/plugins/projectexplorer/projectwelcomepage.h +@@ -0,0 +1,58 @@ ++/************************************************************************** ++** ++** This file is part of Qt Creator ++** ++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). ++** ++** Contact: Nokia Corporation (qt-info@nokia.com) ++** ++** Commercial Usage ++** ++** Licensees holding valid Qt Commercial licenses may use this file in ++** accordance with the Qt Commercial License Agreement provided with the ++** Software or, alternatively, in accordance with the terms contained in ++** a written agreement between you and Nokia. ++** ++** GNU Lesser General Public License Usage ++** ++** Alternatively, this file may be used under the terms of the GNU Lesser ++** General Public License version 2.1 as published by the Free Software ++** Foundation and appearing in the file LICENSE.LGPL included in the ++** packaging of this file. Please review the following information to ++** ensure the GNU Lesser General Public License version 2.1 requirements ++** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ++** ++** If you are unsure which license is appropriate for your use, please ++** contact the sales department at http://www.qtsoftware.com/contact. ++** ++**************************************************************************/ ++ ++#ifndef PROJECTWELCOMEPAGE_H ++#define PROJECTWELCOMEPAGE_H ++ ++#include <extensionsystem/iwelcomepage.h> ++ ++namespace ProjectExplorer { ++namespace Internal { ++ ++class ProjectWelcomePageWidget; ++ ++class ProjectWelcomePage : public ExtensionSystem::IWelcomePage ++{ ++ Q_OBJECT ++public: ++ ProjectWelcomePage(); ++ ++ QWidget *page(); ++ QString title() const { return tr("Develop"); } ++ int priority() const { return 20; } ++private: ++ ProjectWelcomePageWidget *m_page; ++ ++ ++}; ++ ++} // namespace Internal ++} // namespace ProjectExplorer ++ ++#endif // PROJECTWELCOMEPAGE_H +diff --git a/src/plugins/projectexplorer/projectwelcomepagewidget.cpp b/src/plugins/projectexplorer/projectwelcomepagewidget.cpp +new file mode 100644 +index 0000000..fe824a7 +--- /dev/null ++++ b/src/plugins/projectexplorer/projectwelcomepagewidget.cpp +@@ -0,0 +1,157 @@ ++/************************************************************************** ++** ++** This file is part of Qt Creator ++** ++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). ++** ++** Contact: Nokia Corporation (qt-info@nokia.com) ++** ++** Commercial Usage ++** ++** Licensees holding valid Qt Commercial licenses may use this file in ++** accordance with the Qt Commercial License Agreement provided with the ++** Software or, alternatively, in accordance with the terms contained in ++** a written agreement between you and Nokia. ++** ++** GNU Lesser General Public License Usage ++** ++** Alternatively, this file may be used under the terms of the GNU Lesser ++** General Public License version 2.1 as published by the Free Software ++** Foundation and appearing in the file LICENSE.LGPL included in the ++** packaging of this file. Please review the following information to ++** ensure the GNU Lesser General Public License version 2.1 requirements ++** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ++** ++** If you are unsure which license is appropriate for your use, please ++** contact the sales department at http://www.qtsoftware.com/contact. ++** ++**************************************************************************/ ++ ++#include "projectwelcomepagewidget.h" ++#include "ui_projectwelcomepagewidget.h" ++ ++#include <coreplugin/coreconstants.h> ++#include <coreplugin/uniqueidmanager.h> ++#include <coreplugin/modemanager.h> ++#include <coreplugin/icore.h> ++#include <coreplugin/dialogs/iwizard.h> ++ ++#include <QtCore/QFileInfo> ++#include <QtCore/QDir> ++#include <QtCore/QPair> ++#include <QtGui/QLabel> ++#include <QtGui/QTreeWidgetItem> ++ ++#include <QtCore/QDebug> ++ ++using namespace ProjectExplorer::Internal; ++ ++bool ProjectWelcomePageWidget::WelcomePageData::operator==(const WelcomePageData &rhs) const ++{ ++ return previousSession == rhs.previousSession ++ && activeSession == rhs.activeSession ++ && sessionList == rhs.sessionList ++ && projectList == rhs.projectList; ++} ++ ++bool ProjectWelcomePageWidget::WelcomePageData::operator!=(const WelcomePageData &rhs) const ++{ ++ return previousSession != rhs.previousSession ++ || activeSession != rhs.activeSession ++ || sessionList != rhs.sessionList ++ || projectList != rhs.projectList; ++} ++ ++QDebug operator<<(QDebug dgb, const ProjectWelcomePageWidget::WelcomePageData &d) ++{ ++ dgb.nospace() << "PreviousSession=" << d.previousSession ++ << " activeSession=" << d.activeSession ++ << " sessionList=" << d.sessionList ++ << " projectList=" << d.projectList; ++ return dgb; ++} ++ ++ProjectWelcomePageWidget::ProjectWelcomePageWidget(QWidget *parent) : ++ QWidget(parent), ++ ui(new Ui::ProjectWelcomePageWidget) ++{ ++ ui->setupUi(this); ++ ui->projTitleLabel->setStyledText(tr("Open Recent Project")); ++ ui->recentSessionsTitleLabel->setStyledText(tr("Resume Session")); ++ updateWelcomePage(WelcomePageData()); ++ ++ connect(ui->sessTreeWidget, SIGNAL(activated(QString)), SLOT(slotSessionClicked(QString))); ++ connect(ui->projTreeWidget, SIGNAL(activated(QString)), SLOT(slotProjectClicked(QString))); ++ connect(ui->createNewProjectButton, SIGNAL(clicked()), SLOT(slotCreateNewProject())); ++ connect(ui->manageSessionsButton, SIGNAL(clicked()), SIGNAL(manageSessions())); ++ ++} ++ ++ProjectWelcomePageWidget::~ProjectWelcomePageWidget() ++{ ++ delete ui; ++} ++ ++void ProjectWelcomePageWidget::updateWelcomePage(const WelcomePageData &welcomePageData) ++{ ++ // Update only if data are modified ++ if (welcomePageData == lastData) ++ return; ++ lastData = welcomePageData; ++ ++ setUpdatesEnabled(false); ++ ui->sessTreeWidget->clear(); ++ ui->projTreeWidget->clear(); ++ ++ if (welcomePageData.sessionList.count() > 0) { ++ foreach (const QString &s, welcomePageData.sessionList) { ++ QString str = s; ++ if (s == welcomePageData.previousSession) ++ str = tr("%1 (last session)").arg(s); ++ ui->sessTreeWidget->addItem(str, s); ++ } ++ ui->sessTreeWidget->updateGeometry(); ++ ui->sessTreeWidget->show(); ++ } else { ++ ui->sessTreeWidget->hide(); ++ } ++ ++ typedef QPair<QString, QString> QStringPair; ++ if (welcomePageData.projectList.count() > 0) { ++ foreach (const QStringPair &it, welcomePageData.projectList) { ++ QTreeWidgetItem *item = ui->projTreeWidget->addItem(it.second, it.first); ++ const QFileInfo fi(it.first); ++ item->setToolTip(1, QDir::toNativeSeparators(fi.absolutePath())); ++ } ++ } else { ++ ui->projTreeWidget->hide(); ++ } ++ ui->projTreeWidget->updateGeometry(); ++ setUpdatesEnabled(true); ++} ++ ++void ProjectWelcomePageWidget::activateEditMode() ++{ ++ Core::ModeManager *modeManager = Core::ModeManager::instance(); ++ if (modeManager->currentMode() == modeManager->mode(Core::Constants::MODE_WELCOME)) ++ modeManager->activateMode(Core::Constants::MODE_EDIT); ++} ++ ++ ++void ProjectWelcomePageWidget::slotSessionClicked(const QString &data) ++{ ++ emit requestSession(data); ++ activateEditMode(); ++} ++ ++void ProjectWelcomePageWidget::slotProjectClicked(const QString &data) ++{ ++ emit requestProject(data); ++ activateEditMode(); ++} ++ ++void ProjectWelcomePageWidget::slotCreateNewProject() ++{ ++ Core::ICore::instance()->showNewItemDialog(tr("New Project..."), ++ Core::IWizard::wizardsOfKind(Core::IWizard::ProjectWizard)); ++} +diff --git a/src/plugins/projectexplorer/projectwelcomepagewidget.h b/src/plugins/projectexplorer/projectwelcomepagewidget.h +new file mode 100644 +index 0000000..ac94986 +--- /dev/null ++++ b/src/plugins/projectexplorer/projectwelcomepagewidget.h +@@ -0,0 +1,81 @@ ++/************************************************************************** ++** ++** This file is part of Qt Creator ++** ++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). ++** ++** Contact: Nokia Corporation (qt-info@nokia.com) ++** ++** Commercial Usage ++** ++** Licensees holding valid Qt Commercial licenses may use this file in ++** accordance with the Qt Commercial License Agreement provided with the ++** Software or, alternatively, in accordance with the terms contained in ++** a written agreement between you and Nokia. ++** ++** GNU Lesser General Public License Usage ++** ++** Alternatively, this file may be used under the terms of the GNU Lesser ++** General Public License version 2.1 as published by the Free Software ++** Foundation and appearing in the file LICENSE.LGPL included in the ++** packaging of this file. Please review the following information to ++** ensure the GNU Lesser General Public License version 2.1 requirements ++** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ++** ++** If you are unsure which license is appropriate for your use, please ++** contact the sales department at http://www.qtsoftware.com/contact. ++** ++**************************************************************************/ ++ ++#ifndef PROJECTWELCOMEPAGEWIDGET_H ++#define PROJECTWELCOMEPAGEWIDGET_H ++ ++#include <QtGui/QWidget> ++ ++ ++namespace ProjectExplorer { ++ namespace Internal { ++ ++ ++namespace Ui { ++ class ProjectWelcomePageWidget; ++} ++ ++class ProjectWelcomePageWidget : public QWidget { ++ Q_OBJECT ++public: ++ ProjectWelcomePageWidget(QWidget *parent = 0); ++ ~ProjectWelcomePageWidget(); ++ ++ struct WelcomePageData{ ++ bool operator==(const WelcomePageData &rhs) const; ++ bool operator!=(const WelcomePageData &rhs) const; ++ ++ QString previousSession; ++ QString activeSession; ++ QStringList sessionList; ++ QList<QPair<QString, QString> > projectList; // pair of filename, displayname ++ }; ++ ++ void updateWelcomePage(const WelcomePageData &welcomePageData); ++ ++signals: ++ void requestProject(const QString &project); ++ void requestSession(const QString &session); ++ void manageSessions(); ++ ++private slots: ++ void slotSessionClicked(const QString &data); ++ void slotProjectClicked(const QString &data); ++ void slotCreateNewProject(); ++ ++private: ++ void activateEditMode(); ++ Ui::ProjectWelcomePageWidget *ui; ++ WelcomePageData lastData; ++}; ++ ++} ++} ++ ++#endif // PROJECTWELCOMEPAGEWIDGET_H +diff --git a/src/plugins/projectexplorer/projectwelcomepagewidget.ui b/src/plugins/projectexplorer/projectwelcomepagewidget.ui +new file mode 100644 +index 0000000..38558d4 +--- /dev/null ++++ b/src/plugins/projectexplorer/projectwelcomepagewidget.ui +@@ -0,0 +1,259 @@ ++<?xml version="1.0" encoding="UTF-8"?> ++<ui version="4.0"> ++ <class>ProjectExplorer::Internal::ProjectWelcomePageWidget</class> ++ <widget class="QWidget" name="ProjectExplorer::Internal::ProjectWelcomePageWidget"> ++ <property name="geometry"> ++ <rect> ++ <x>0</x> ++ <y>0</y> ++ <width>667</width> ++ <height>365</height> ++ </rect> ++ </property> ++ <property name="windowTitle"> ++ <string>Form</string> ++ </property> ++ <layout class="QHBoxLayout" name="horizontalLayout"> ++ <item> ++ <widget class="QFrame" name="recentSessionsFrame"> ++ <property name="sizePolicy"> ++ <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> ++ <horstretch>0</horstretch> ++ <verstretch>0</verstretch> ++ </sizepolicy> ++ </property> ++ <property name="minimumSize"> ++ <size> ++ <width>270</width> ++ <height>130</height> ++ </size> ++ </property> ++ <property name="styleSheet"> ++ <string/> ++ </property> ++ <layout class="QGridLayout" name="gridLayout_3"> ++ <property name="horizontalSpacing"> ++ <number>0</number> ++ </property> ++ <property name="verticalSpacing"> ++ <number>3</number> ++ </property> ++ <item row="0" column="0" colspan="3"> ++ <widget class="Core::Utils::WelcomeModeLabel" name="recentSessionsTitleLabel"> ++ <property name="sizePolicy"> ++ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Maximum"> ++ <horstretch>0</horstretch> ++ <verstretch>0</verstretch> ++ </sizepolicy> ++ </property> ++ <property name="alignment"> ++ <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> ++ </property> ++ </widget> ++ </item> ++ <item row="1" column="0" colspan="3"> ++ <widget class="Core::Utils::WelcomeModeTreeWidget" name="sessTreeWidget"> ++ <property name="sizePolicy"> ++ <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> ++ <horstretch>0</horstretch> ++ <verstretch>0</verstretch> ++ </sizepolicy> ++ </property> ++ <property name="focusPolicy"> ++ <enum>Qt::NoFocus</enum> ++ </property> ++ <property name="frameShape"> ++ <enum>QFrame::NoFrame</enum> ++ </property> ++ <property name="selectionMode"> ++ <enum>QAbstractItemView::NoSelection</enum> ++ </property> ++ <property name="verticalScrollMode"> ++ <enum>QAbstractItemView::ScrollPerPixel</enum> ++ </property> ++ <property name="rootIsDecorated"> ++ <bool>false</bool> ++ </property> ++ <property name="uniformRowHeights"> ++ <bool>true</bool> ++ </property> ++ <property name="allColumnsShowFocus"> ++ <bool>true</bool> ++ </property> ++ <property name="columnCount"> ++ <number>2</number> ++ </property> ++ <attribute name="headerVisible"> ++ <bool>false</bool> ++ </attribute> ++ <attribute name="headerDefaultSectionSize"> ++ <number>24</number> ++ </attribute> ++ <attribute name="headerMinimumSectionSize"> ++ <number>0</number> ++ </attribute> ++ <column> ++ <property name="text"> ++ <string notr="true">1</string> ++ </property> ++ </column> ++ <column> ++ <property name="text"> ++ <string notr="true">2</string> ++ </property> ++ </column> ++ </widget> ++ </item> ++ <item row="3" column="0"> ++ <widget class="QPushButton" name="manageSessionsButton"> ++ <property name="focusPolicy"> ++ <enum>Qt::TabFocus</enum> ++ </property> ++ <property name="text"> ++ <string>Manage Sessions...</string> ++ </property> ++ </widget> ++ </item> ++ <item row="4" column="0"> ++ <spacer name="verticalSpacer"> ++ <property name="orientation"> ++ <enum>Qt::Vertical</enum> ++ </property> ++ <property name="sizeHint" stdset="0"> ++ <size> ++ <width>20</width> ++ <height>40</height> ++ </size> ++ </property> ++ </spacer> ++ </item> ++ </layout> ++ </widget> ++ </item> ++ <item> ++ <widget class="QFrame" name="recentProjectsFrame"> ++ <property name="styleSheet"> ++ <string/> ++ </property> ++ <layout class="QGridLayout" name="gridLayout_5"> ++ <property name="horizontalSpacing"> ++ <number>0</number> ++ </property> ++ <property name="verticalSpacing"> ++ <number>3</number> ++ </property> ++ <property name="rightMargin"> ++ <number>9</number> ++ </property> ++ <item row="0" column="0" colspan="3"> ++ <widget class="Core::Utils::WelcomeModeLabel" name="projTitleLabel"> ++ <property name="sizePolicy"> ++ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Maximum"> ++ <horstretch>0</horstretch> ++ <verstretch>0</verstretch> ++ </sizepolicy> ++ </property> ++ <property name="alignment"> ++ <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> ++ </property> ++ </widget> ++ </item> ++ <item row="1" column="0" colspan="3"> ++ <widget class="Core::Utils::WelcomeModeTreeWidget" name="projTreeWidget"> ++ <property name="sizePolicy"> ++ <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> ++ <horstretch>0</horstretch> ++ <verstretch>0</verstretch> ++ </sizepolicy> ++ </property> ++ <property name="focusPolicy"> ++ <enum>Qt::NoFocus</enum> ++ </property> ++ <property name="frameShape"> ++ <enum>QFrame::NoFrame</enum> ++ </property> ++ <property name="selectionMode"> ++ <enum>QAbstractItemView::NoSelection</enum> ++ </property> ++ <property name="verticalScrollMode"> ++ <enum>QAbstractItemView::ScrollPerPixel</enum> ++ </property> ++ <property name="rootIsDecorated"> ++ <bool>false</bool> ++ </property> ++ <property name="uniformRowHeights"> ++ <bool>true</bool> ++ </property> ++ <property name="allColumnsShowFocus"> ++ <bool>true</bool> ++ </property> ++ <property name="columnCount"> ++ <number>2</number> ++ </property> ++ <attribute name="headerVisible"> ++ <bool>false</bool> ++ </attribute> ++ <attribute name="headerDefaultSectionSize"> ++ <number>24</number> ++ </attribute> ++ <attribute name="headerMinimumSectionSize"> ++ <number>0</number> ++ </attribute> ++ <column> ++ <property name="text"> ++ <string notr="true">1</string> ++ </property> ++ </column> ++ <column> ++ <property name="text"> ++ <string notr="true">2</string> ++ </property> ++ </column> ++ </widget> ++ </item> ++ <item row="3" column="0"> ++ <widget class="QPushButton" name="createNewProjectButton"> ++ <property name="focusPolicy"> ++ <enum>Qt::TabFocus</enum> ++ </property> ++ <property name="text"> ++ <string>Create New Project...</string> ++ </property> ++ <property name="flat"> ++ <bool>false</bool> ++ </property> ++ </widget> ++ </item> ++ <item row="4" column="0"> ++ <spacer name="verticalSpacer_2"> ++ <property name="orientation"> ++ <enum>Qt::Vertical</enum> ++ </property> ++ <property name="sizeHint" stdset="0"> ++ <size> ++ <width>20</width> ++ <height>40</height> ++ </size> ++ </property> ++ </spacer> ++ </item> ++ </layout> ++ </widget> ++ </item> ++ </layout> ++ </widget> ++ <customwidgets> ++ <customwidget> ++ <class>Core::Utils::WelcomeModeTreeWidget</class> ++ <extends>QTreeWidget</extends> ++ <header>utils/welcomemodetreewidget.h</header> ++ </customwidget> ++ <customwidget> ++ <class>Core::Utils::WelcomeModeLabel</class> ++ <extends>QLabel</extends> ++ <header>utils/welcomemodetreewidget.h</header> ++ </customwidget> ++ </customwidgets> ++ <resources/> ++ <connections/> ++</ui> +diff --git a/src/plugins/projectexplorer/projectwelcomeplugin.ui b/src/plugins/projectexplorer/projectwelcomeplugin.ui +new file mode 100644 +index 0000000..9ad7e16 +--- /dev/null ++++ b/src/plugins/projectexplorer/projectwelcomeplugin.ui +@@ -0,0 +1,21 @@ ++<ui version="4.0" > ++ <author/> ++ <comment/> ++ <exportmacro/> ++ <class>ProjectWelcomePage</class> ++ <widget class="QWidget" name="ProjectWelcomePage" > ++ <property name="geometry" > ++ <rect> ++ <x>0</x> ++ <y>0</y> ++ <width>400</width> ++ <height>300</height> ++ </rect> ++ </property> ++ <property name="windowTitle" > ++ <string>Form</string> ++ </property> ++ </widget> ++ <pixmapfunction/> ++ <connections/> ++</ui> +diff --git a/src/plugins/qt4projectmanager/Qt4ProjectManager.pluginspec b/src/plugins/qt4projectmanager/Qt4ProjectManager.pluginspec +index 3b515bd..c4b8d44 100644 +--- a/src/plugins/qt4projectmanager/Qt4ProjectManager.pluginspec ++++ b/src/plugins/qt4projectmanager/Qt4ProjectManager.pluginspec +@@ -25,6 +25,5 @@ will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.</license> + <dependency name="CppEditor" version="1.2.80"/> + <dependency name="Help" version="1.2.80"/> + <dependency name="Designer" version="1.2.80"/> +- <dependency name="Welcome" version="1.2.80"/> + </dependencyList> + </plugin> +diff --git a/src/plugins/qt4projectmanager/gettingstartedwelcomepage.cpp b/src/plugins/qt4projectmanager/gettingstartedwelcomepage.cpp +new file mode 100644 +index 0000000..379d459 +--- /dev/null ++++ b/src/plugins/qt4projectmanager/gettingstartedwelcomepage.cpp +@@ -0,0 +1,47 @@ ++/************************************************************************** ++** ++** This file is part of Qt Creator ++** ++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). ++** ++** Contact: Nokia Corporation (qt-info@nokia.com) ++** ++** Commercial Usage ++** ++** Licensees holding valid Qt Commercial licenses may use this file in ++** accordance with the Qt Commercial License Agreement provided with the ++** Software or, alternatively, in accordance with the terms contained in ++** a written agreement between you and Nokia. ++** ++** GNU Lesser General Public License Usage ++** ++** Alternatively, this file may be used under the terms of the GNU Lesser ++** General Public License version 2.1 as published by the Free Software ++** Foundation and appearing in the file LICENSE.LGPL included in the ++** packaging of this file. Please review the following information to ++** ensure the GNU Lesser General Public License version 2.1 requirements ++** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ++** ++** If you are unsure which license is appropriate for your use, please ++** contact the sales department at http://www.qtsoftware.com/contact. ++** ++**************************************************************************/ ++ ++#include "gettingstartedwelcomepage.h" ++#include "gettingstartedwelcomepagewidget.h" ++ ++namespace Qt4ProjectManager { ++namespace Internal { ++ ++GettingStartedWelcomePage::GettingStartedWelcomePage() ++ : m_page(new GettingStartedWelcomePageWidget) ++{ ++} ++ ++QWidget* GettingStartedWelcomePage::page() ++{ ++ return m_page; ++} ++ ++} // namespace Internal ++} // namespace Qt4ProjectManager +diff --git a/src/plugins/qt4projectmanager/gettingstartedwelcomepage.h b/src/plugins/qt4projectmanager/gettingstartedwelcomepage.h +new file mode 100644 +index 0000000..2534f7a +--- /dev/null ++++ b/src/plugins/qt4projectmanager/gettingstartedwelcomepage.h +@@ -0,0 +1,56 @@ ++/************************************************************************** ++** ++** This file is part of Qt Creator ++** ++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). ++** ++** Contact: Nokia Corporation (qt-info@nokia.com) ++** ++** Commercial Usage ++** ++** Licensees holding valid Qt Commercial licenses may use this file in ++** accordance with the Qt Commercial License Agreement provided with the ++** Software or, alternatively, in accordance with the terms contained in ++** a written agreement between you and Nokia. ++** ++** GNU Lesser General Public License Usage ++** ++** Alternatively, this file may be used under the terms of the GNU Lesser ++** General Public License version 2.1 as published by the Free Software ++** Foundation and appearing in the file LICENSE.LGPL included in the ++** packaging of this file. Please review the following information to ++** ensure the GNU Lesser General Public License version 2.1 requirements ++** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ++** ++** If you are unsure which license is appropriate for your use, please ++** contact the sales department at http://www.qtsoftware.com/contact. ++** ++**************************************************************************/ ++ ++#ifndef GETTINGSTARTEDWELCOMEPLUGIN_H ++#define GETTINGSTARTEDWELCOMEPLUGIN_H ++ ++#include <extensionsystem/iwelcomepage.h> ++ ++namespace Qt4ProjectManager { ++namespace Internal { ++ ++class GettingStartedWelcomePageWidget; ++ ++class GettingStartedWelcomePage : public ExtensionSystem::IWelcomePage ++{ ++public: ++ GettingStartedWelcomePage(); ++ ++ QWidget *page(); ++ QString title() const { return tr("Getting Started");} ++ int priority() const { return 10; } ++ ++private: ++ GettingStartedWelcomePageWidget *m_page; ++}; ++ ++} // namespace Internal ++} // namespace Qt4ProjectManager ++ ++#endif // GETTINGSTARTEDWELCOMEPLUGIN_H +diff --git a/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.cpp b/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.cpp +new file mode 100644 +index 0000000..41dd90d +--- /dev/null ++++ b/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.cpp +@@ -0,0 +1,259 @@ ++/************************************************************************** ++** ++** This file is part of Qt Creator ++** ++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). ++** ++** Contact: Nokia Corporation (qt-info@nokia.com) ++** ++** Commercial Usage ++** ++** Licensees holding valid Qt Commercial licenses may use this file in ++** accordance with the Qt Commercial License Agreement provided with the ++** Software or, alternatively, in accordance with the terms contained in ++** a written agreement between you and Nokia. ++** ++** GNU Lesser General Public License Usage ++** ++** Alternatively, this file may be used under the terms of the GNU Lesser ++** General Public License version 2.1 as published by the Free Software ++** Foundation and appearing in the file LICENSE.LGPL included in the ++** packaging of this file. Please review the following information to ++** ensure the GNU Lesser General Public License version 2.1 requirements ++** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ++** ++** If you are unsure which license is appropriate for your use, please ++** contact the sales department at http://www.qtsoftware.com/contact. ++** ++**************************************************************************/ ++ ++#include "gettingstartedwelcomepagewidget.h" ++#include "ui_gettingstartedwelcomepagewidget.h" ++ ++#include <coreplugin/icore.h> ++#include <coreplugin/coreconstants.h> ++ ++#include <extensionsystem/pluginmanager.h> ++ ++#include <help/helpplugin.h> ++ ++#include <QtCore/QDateTime> ++#include <QtCore/QDir> ++#include <QtCore/QFileInfo> ++#include <QtCore/QDebug> ++#include <QtCore/QUrl> ++#include <QtCore/QXmlStreamReader> ++#include <QtGui/QFont> ++ ++namespace Qt4ProjectManager { ++namespace Internal { ++ ++// TODO: remove ++ ++GettingStartedWelcomePageWidget::GettingStartedWelcomePageWidget(QWidget *parent) : ++ QWidget(parent), ++ ui(new Ui::GettingStartedWelcomePageWidget) ++{ ++ ui->setupUi(this); ++ ui->tutorialsTitleLabel->setStyledText(tr("Tutorials")); ++ ui->demoTitleLabel->setStyledText(tr("Explore Qt Examples")); ++ ui->didYouKnowTextBrowser->viewport()->setAutoFillBackground(false); ++ ui->didYouKnowTitleLabel->setStyledText(tr("Did You Know?")); ++ ++ connect(ui->tutorialTreeWidget, SIGNAL(activated(QString)), SLOT(slotOpenHelpPage(const QString&))); ++ connect(ui->openExampleButton, SIGNAL(clicked()), SLOT(slotOpenExample())); ++ connect(ui->examplesComboBox, SIGNAL(currentIndexChanged(int)), SLOT(slotEnableExampleButton(int))); ++ ++ ui->tutorialTreeWidget->addItem(tr("<b>Qt Creator - A quick tour</b>"), ++ QString("qthelp://com.nokia.qtcreator.%1%2/doc/index.html").arg(IDE_VERSION_MAJOR).arg(IDE_VERSION_MINOR)); ++ ui->tutorialTreeWidget->addItem(tr("Creating an address book"), ++ QLatin1String("qthelp://com.nokia.qtcreator/doc/tutorials-addressbook-sdk.html")); ++ ui->tutorialTreeWidget->addItem(tr("Understanding widgets"), ++ QLatin1String("qthelp://com.trolltech.qt/qdoc/widgets-tutorial.html")); ++ ui->tutorialTreeWidget->addItem(tr("Building with qmake"), ++ QLatin1String("qthelp://com.trolltech.qmake/qdoc/qmake-tutorial.html")); ++ ui->tutorialTreeWidget->addItem(tr("Writing test cases"), ++ QLatin1String("qthelp://com.trolltech.qt/qdoc/qtestlib-tutorial.html")); ++ ++ srand(QDateTime::currentDateTime().toTime_t()); ++ QStringList tips = tipsOfTheDay(); ++ m_currentTip = rand()%tips.count(); ++ ++ QTextDocument *doc = ui->didYouKnowTextBrowser->document(); ++ doc->setDefaultStyleSheet("a:link {color:black;}"); ++ ui->didYouKnowTextBrowser->setDocument(doc); ++ ui->didYouKnowTextBrowser->setText(tips.at(m_currentTip)); ++ ++ connect(ui->nextTipBtn, SIGNAL(clicked()), this, SLOT(slotNextTip())); ++ connect(ui->prevTipBtn, SIGNAL(clicked()), this, SLOT(slotPrevTip())); ++ ++} ++ ++GettingStartedWelcomePageWidget::~GettingStartedWelcomePageWidget() ++{ ++ delete ui; ++} ++ ++void GettingStartedWelcomePageWidget::updateExamples(const QString& examplePath, const QString& demosPath, const QString &sourcePath) ++{ ++ QString demoxml = demosPath + "/qtdemo/xml/examples.xml"; ++ if (!QFile::exists(demoxml)) { ++ demoxml = sourcePath + "/demos/qtdemo/xml/examples.xml"; ++ if (!QFile::exists(demoxml)) ++ return; ++ } ++ ++ QFile description(demoxml); ++ if (!description.open(QFile::ReadOnly)) ++ return; ++ ++ ui->examplesComboBox->clear(); ++ ui->examplesComboBox->setEnabled(true); ++ ++ ui->examplesComboBox->addItem(tr("Choose an example...")); ++ QFont f = font(); ++ f.setItalic(true); ++ ui->examplesComboBox->setItemData(0, f, Qt::FontRole); ++ f.setItalic(false); ++ bool inExamples = false; ++ QString dirName; ++ QXmlStreamReader reader(&description); ++ while (!reader.atEnd()) { ++ switch (reader.readNext()) { ++ case QXmlStreamReader::StartElement: ++ if (reader.name() == "category") { ++ QString name = reader.attributes().value(QLatin1String("name")).toString(); ++ if (name.contains("tutorial")) ++ break; ++ dirName = reader.attributes().value(QLatin1String("dirname")).toString(); ++ ui->examplesComboBox->addItem(name); ++ f.setBold(true); ++ ui->examplesComboBox->setItemData(ui->examplesComboBox->count()-1, f, Qt::FontRole); ++ f.setBold(false); ++ inExamples = true; ++ } ++ if (inExamples && reader.name() == "example") { ++ QString name = reader.attributes().value(QLatin1String("name")).toString(); ++ QString fn = reader.attributes().value(QLatin1String("filename")).toString(); ++ QString relativeProPath = '/' + dirName + '/' + fn + '/' + fn + ".pro"; ++ QString fileName = examplePath + relativeProPath; ++ if (!QFile::exists(fileName)) ++ fileName = sourcePath + "/examples" + relativeProPath; ++ QString helpPath = "qthelp://com.trolltech.qt/qdoc/" + dirName.replace("/", "-") + "-" + fn + ".html"; ++ ++ ui->examplesComboBox->addItem(" " + name, fileName); ++ ui->examplesComboBox->setItemData(ui->examplesComboBox->count()-1, helpPath, Qt::UserRole+1); ++ } ++ break; ++ case QXmlStreamReader::EndElement: ++ if (reader.name() == "category") ++ inExamples = false; ++ break; ++ default: ++ break; ++ } ++ } ++} ++ ++void GettingStartedWelcomePageWidget::slotEnableExampleButton(int index) ++{ ++ QString fileName = ui->examplesComboBox->itemData(index, Qt::UserRole).toString(); ++ ui->openExampleButton->setEnabled(!fileName.isEmpty()); ++} ++ ++void GettingStartedWelcomePageWidget::slotOpenExample() ++{ ++ QComboBox *box = ui->examplesComboBox; ++ QString proFile = box->itemData(box->currentIndex(), Qt::UserRole).toString(); ++ QString helpFile = box->itemData(box->currentIndex(), Qt::UserRole + 1).toString(); ++ QStringList files; ++ QFileInfo fi(proFile); ++ QString tryFile = fi.path() + "/main.cpp"; ++ files << proFile; ++ if(!QFile::exists(tryFile)) ++ tryFile = fi.path() + '/' + fi.baseName() + ".cpp"; ++ if(QFile::exists(tryFile)) ++ files << tryFile; ++ Core::ICore::instance()->openFiles(files); ++ slotOpenContextHelpPage(helpFile); ++} ++ ++void GettingStartedWelcomePageWidget::slotOpenHelpPage(const QString& url) ++{ ++ Help::HelpManager *helpManager ++ = ExtensionSystem::PluginManager::instance()->getObject<Help::HelpManager>(); ++ Q_ASSERT(helpManager); ++ helpManager->openHelpPage(url); ++} ++void GettingStartedWelcomePageWidget::slotOpenContextHelpPage(const QString& url) ++{ ++ Help::HelpManager *helpManager ++ = ExtensionSystem::PluginManager::instance()->getObject<Help::HelpManager>(); ++ Q_ASSERT(helpManager); ++ helpManager->openContextHelpPage(url); ++} ++ ++void GettingStartedWelcomePageWidget::slotNextTip() ++{ ++ QStringList tips = tipsOfTheDay(); ++ m_currentTip = ((m_currentTip+1)%tips.count()); ++ ui->didYouKnowTextBrowser->setText(tips.at(m_currentTip)); ++} ++ ++void GettingStartedWelcomePageWidget::slotPrevTip() ++{ ++ QStringList tips = tipsOfTheDay(); ++ m_currentTip = ((m_currentTip-1)+tips.count())%tips.count(); ++ ui->didYouKnowTextBrowser->setText(tips.at(m_currentTip)); ++} ++ ++QStringList GettingStartedWelcomePageWidget::tipsOfTheDay() ++{ ++ static QStringList tips; ++ if (tips.isEmpty()) { ++ QString altShortcut = ++#ifdef Q_WS_MAC ++ tr("Cmd", "Shortcut key"); ++#else ++ tr("Alt", "Shortcut key"); ++#endif ++ tips.append(tr("You can switch between Qt Creator's modes using <tt>Ctrl+number</tt>:<ul>" ++ "<li>1 - Welcome</li><li>2 - Edit</li><li>3 - Debug</li><li>4 - Projects</li><li>5 - Help</li>" ++ "<li></li><li>6 - Output</li></ul>")); ++ //:%1 gets replaced by Alt (Win/Unix) or Cmd (Mac) ++ tips.append(tr("You can show and hide the side bar using <tt>%1+0<tt>.").arg(altShortcut)); ++ tips.append(tr("You can fine tune the <tt>Find</tt> function by selecting "Whole Words" " ++ "or "Case Sensitive". Simply click on the icons on the right end of the line edit.")); ++ tips.append(tr("If you add <a href=\"qthelp://com.nokia.qtcreator/doc/creator-external-library-handling.html\"" ++ ">external libraries</a>, Qt Creator will automatically offer syntax highlighting " ++ "and code completion.")); ++ tips.append(tr("The code completion is CamelCase-aware. For example, to complete <tt>namespaceUri</tt> " ++ "you can just type <tt>nU</tt> and hit <tt>Ctrl+Space</tt>.")); ++ tips.append(tr("You can force code completion at any time using <tt>Ctrl+Space</tt>.")); ++ tips.append(tr("You can start Qt Creator with a session by calling <tt>qtcreator <sessionname></tt>.")); ++ tips.append(tr("You can return to edit mode from any other mode at any time by hitting <tt>Escape</tt>.")); ++ //:%1 gets replaced by Alt (Win/Unix) or Cmd (Mac) ++ tips.append(tr("You can switch between the output pane by hitting <tt>%1+n</tt> where n is the number denoted " ++ "on the buttons at the window bottom:" ++ "<ul><li>1 - Build Issues</li><li>2 - Search Results</li><li>3 - Application Output</li>" ++ "<li>4 - Compile Output</li></ul>").arg(altShortcut)); ++ tips.append(tr("You can quickly search methods, classes, help and more using the " ++ "<a href=\"qthelp://com.nokia.qtcreator/doc/creator-navigation.html\">Locator bar</a> (<tt>Ctrl+K</tt>).")); ++ tips.append(tr("You can add custom build steps in the " ++ "<a href=\"qthelp://com.nokia.qtcreator/doc/creator-build-settings.html\">build settings</a>.")); ++ tips.append(tr("Within a session, you can add " ++ "<a href=\"qthelp://com.nokia.qtcreator/doc/creator-build-settings.html#dependencies\">dependencies</a> between projects.")); ++ tips.append(tr("You can set the preferred editor encoding for every project in <tt>Projects -> Editor Settings -> Default Encoding</tt>.")); ++ tips.append(tr("You can modify the binary that is being executed when you press the <tt>Run</tt> button: Add a <tt>Custom Executable</tt> " ++ "by clicking the <tt>+</tt> button in <tt>Projects -> Run Settings -> Run Configuration</tt> and then select the new " ++ "target in the combo box.")); ++ tips.append(tr("You can use Qt Creator with a number of <a href=\"qthelp://com.nokia.qtcreator/doc/creator-version-control.html\">" ++ "revision control systems</a> such as Subversion, Perforce and Git.")); ++ tips.append(tr("In the editor, <tt>F2</tt> toggles declaration and definition while <tt>F4</tt> toggles header file and source file.")); ++ } ++ return tips; ++} ++ ++ ++} // namespace Internal ++} // namespace Qt4ProjectManager +diff --git a/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.h b/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.h +new file mode 100644 +index 0000000..fdc6ec0 +--- /dev/null ++++ b/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.h +@@ -0,0 +1,69 @@ ++/************************************************************************** ++** ++** This file is part of Qt Creator ++** ++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). ++** ++** Contact: Nokia Corporation (qt-info@nokia.com) ++** ++** Commercial Usage ++** ++** Licensees holding valid Qt Commercial licenses may use this file in ++** accordance with the Qt Commercial License Agreement provided with the ++** Software or, alternatively, in accordance with the terms contained in ++** a written agreement between you and Nokia. ++** ++** GNU Lesser General Public License Usage ++** ++** Alternatively, this file may be used under the terms of the GNU Lesser ++** General Public License version 2.1 as published by the Free Software ++** Foundation and appearing in the file LICENSE.LGPL included in the ++** packaging of this file. Please review the following information to ++** ensure the GNU Lesser General Public License version 2.1 requirements ++** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ++** ++** If you are unsure which license is appropriate for your use, please ++** contact the sales department at http://www.qtsoftware.com/contact. ++** ++**************************************************************************/ ++ ++#ifndef GETTINGSTARTEDWELCOMEPAGEWIDGET_H ++#define GETTINGSTARTEDWELCOMEPAGEWIDGET_H ++ ++#include <QWidget> ++ ++namespace Qt4ProjectManager { ++namespace Internal { ++ ++namespace Ui { ++ class GettingStartedWelcomePageWidget; ++} ++ ++class GettingStartedWelcomePageWidget : public QWidget { ++ Q_OBJECT ++public: ++ GettingStartedWelcomePageWidget(QWidget *parent = 0); ++ ~GettingStartedWelcomePageWidget(); ++ ++ public slots: ++ void updateExamples(const QString& examplePath, const QString& demosPath, const QString &sourcePath); ++ ++private slots: ++ void slotOpenHelpPage(const QString& url); ++ void slotOpenContextHelpPage(const QString& url); ++ void slotEnableExampleButton(int); ++ void slotOpenExample(); ++ void slotNextTip(); ++ void slotPrevTip(); ++ ++private: ++ QStringList tipsOfTheDay(); ++ ++ Ui::GettingStartedWelcomePageWidget *ui; ++ int m_currentTip; ++}; ++ ++ ++} // namespace Internal ++} // namespace Qt4ProjectManager ++#endif // GETTINGSTARTEDWELCOMEPAGEWIDGET_H +diff --git a/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.ui b/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.ui +new file mode 100644 +index 0000000..e4dc34b +--- /dev/null ++++ b/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.ui +@@ -0,0 +1,348 @@ ++<?xml version="1.0" encoding="UTF-8"?> ++<ui version="4.0"> ++ <class>Qt4ProjectManager::Internal::GettingStartedWelcomePageWidget</class> ++ <widget class="QWidget" name="Qt4ProjectManager::Internal::GettingStartedWelcomePageWidget"> ++ <property name="geometry"> ++ <rect> ++ <x>0</x> ++ <y>0</y> ++ <width>646</width> ++ <height>361</height> ++ </rect> ++ </property> ++ <property name="windowTitle"> ++ <string>Form</string> ++ </property> ++ <layout class="QGridLayout" name="gridLayout"> ++ <item row="0" column="0" rowspan="2"> ++ <widget class="QFrame" name="tutorialsFrame"> ++ <property name="sizePolicy"> ++ <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> ++ <horstretch>0</horstretch> ++ <verstretch>0</verstretch> ++ </sizepolicy> ++ </property> ++ <property name="maximumSize"> ++ <size> ++ <width>400</width> ++ <height>16777215</height> ++ </size> ++ </property> ++ <property name="styleSheet"> ++ <string/> ++ </property> ++ <layout class="QGridLayout" name="gridLayout_6"> ++ <item row="0" column="0"> ++ <widget class="Core::Utils::WelcomeModeLabel" name="tutorialsTitleLabel"> ++ <property name="sizePolicy"> ++ <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> ++ <horstretch>0</horstretch> ++ <verstretch>0</verstretch> ++ </sizepolicy> ++ </property> ++ <property name="alignment"> ++ <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> ++ </property> ++ </widget> ++ </item> ++ <item row="1" column="0"> ++ <widget class="Core::Utils::WelcomeModeTreeWidget" name="tutorialTreeWidget"> ++ <property name="sizePolicy"> ++ <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> ++ <horstretch>0</horstretch> ++ <verstretch>0</verstretch> ++ </sizepolicy> ++ </property> ++ <property name="focusPolicy"> ++ <enum>Qt::NoFocus</enum> ++ </property> ++ <property name="frameShape"> ++ <enum>QFrame::NoFrame</enum> ++ </property> ++ <property name="selectionMode"> ++ <enum>QAbstractItemView::NoSelection</enum> ++ </property> ++ <property name="verticalScrollMode"> ++ <enum>QAbstractItemView::ScrollPerPixel</enum> ++ </property> ++ <property name="rootIsDecorated"> ++ <bool>false</bool> ++ </property> ++ <property name="uniformRowHeights"> ++ <bool>true</bool> ++ </property> ++ <property name="allColumnsShowFocus"> ++ <bool>true</bool> ++ </property> ++ <property name="columnCount"> ++ <number>2</number> ++ </property> ++ <attribute name="headerVisible"> ++ <bool>false</bool> ++ </attribute> ++ <attribute name="headerDefaultSectionSize"> ++ <number>24</number> ++ </attribute> ++ <attribute name="headerMinimumSectionSize"> ++ <number>0</number> ++ </attribute> ++ <column> ++ <property name="text"> ++ <string notr="true">1</string> ++ </property> ++ </column> ++ <column> ++ <property name="text"> ++ <string notr="true">2</string> ++ </property> ++ </column> ++ </widget> ++ </item> ++ </layout> ++ </widget> ++ </item> ++ <item row="0" column="1"> ++ <widget class="QFrame" name="demosExamplesFrame"> ++ <property name="sizePolicy"> ++ <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> ++ <horstretch>0</horstretch> ++ <verstretch>0</verstretch> ++ </sizepolicy> ++ </property> ++ <property name="maximumSize"> ++ <size> ++ <width>400</width> ++ <height>16777215</height> ++ </size> ++ </property> ++ <property name="styleSheet"> ++ <string/> ++ </property> ++ <layout class="QGridLayout" name="gridLayout_8"> ++ <property name="rightMargin"> ++ <number>8</number> ++ </property> ++ <property name="horizontalSpacing"> ++ <number>0</number> ++ </property> ++ <item row="0" column="0" colspan="4"> ++ <widget class="Core::Utils::WelcomeModeLabel" name="demoTitleLabel"> ++ <property name="alignment"> ++ <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> ++ </property> ++ </widget> ++ </item> ++ <item row="1" column="0"> ++ <widget class="QComboBox" name="examplesComboBox"> ++ <property name="enabled"> ++ <bool>false</bool> ++ </property> ++ <property name="sizePolicy"> ++ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred"> ++ <horstretch>0</horstretch> ++ <verstretch>0</verstretch> ++ </sizepolicy> ++ </property> ++ <item> ++ <property name="text"> ++ <string>Examples not installed</string> ++ </property> ++ </item> ++ </widget> ++ </item> ++ <item row="1" column="2"> ++ <widget class="QToolButton" name="openExampleButton"> ++ <property name="enabled"> ++ <bool>false</bool> ++ </property> ++ <property name="sizePolicy"> ++ <sizepolicy hsizetype="Fixed" vsizetype="Preferred"> ++ <horstretch>0</horstretch> ++ <verstretch>0</verstretch> ++ </sizepolicy> ++ </property> ++ <property name="text"> ++ <string>Open</string> ++ </property> ++ </widget> ++ </item> ++ <item row="1" column="1"> ++ <spacer name="horizontalSpacer"> ++ <property name="orientation"> ++ <enum>Qt::Horizontal</enum> ++ </property> ++ <property name="sizeType"> ++ <enum>QSizePolicy::Fixed</enum> ++ </property> ++ <property name="sizeHint" stdset="0"> ++ <size> ++ <width>6</width> ++ <height>6</height> ++ </size> ++ </property> ++ </spacer> ++ </item> ++ </layout> ++ </widget> ++ </item> ++ <item row="1" column="1"> ++ <widget class="QFrame" name="didyouKnowFrame"> ++ <property name="sizePolicy"> ++ <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> ++ <horstretch>0</horstretch> ++ <verstretch>0</verstretch> ++ </sizepolicy> ++ </property> ++ <property name="maximumSize"> ++ <size> ++ <width>400</width> ++ <height>16777215</height> ++ </size> ++ </property> ++ <property name="styleSheet"> ++ <string/> ++ </property> ++ <layout class="QGridLayout" name="gridLayout_11"> ++ <property name="rightMargin"> ++ <number>9</number> ++ </property> ++ <item row="0" column="0"> ++ <widget class="Core::Utils::WelcomeModeLabel" name="didYouKnowTitleLabel"> ++ <property name="sizePolicy"> ++ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Maximum"> ++ <horstretch>0</horstretch> ++ <verstretch>0</verstretch> ++ </sizepolicy> ++ </property> ++ <property name="alignment"> ++ <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> ++ </property> ++ </widget> ++ </item> ++ <item row="1" column="0" colspan="2"> ++ <widget class="QTextBrowser" name="didYouKnowTextBrowser"> ++ <property name="sizePolicy"> ++ <sizepolicy hsizetype="Minimum" vsizetype="Preferred"> ++ <horstretch>0</horstretch> ++ <verstretch>0</verstretch> ++ </sizepolicy> ++ </property> ++ <property name="frameShape"> ++ <enum>QFrame::NoFrame</enum> ++ </property> ++ <property name="frameShadow"> ++ <enum>QFrame::Plain</enum> ++ </property> ++ <property name="verticalScrollBarPolicy"> ++ <enum>Qt::ScrollBarAlwaysOff</enum> ++ </property> ++ <property name="horizontalScrollBarPolicy"> ++ <enum>Qt::ScrollBarAlwaysOff</enum> ++ </property> ++ <property name="openExternalLinks"> ++ <bool>true</bool> ++ </property> ++ </widget> ++ </item> ++ <item row="0" column="1"> ++ <layout class="QGridLayout" name="gridLayout_10"> ++ <property name="spacing"> ++ <number>0</number> ++ </property> ++ <item row="0" column="0" colspan="2"> ++ <spacer name="verticalSpacer_4"> ++ <property name="orientation"> ++ <enum>Qt::Vertical</enum> ++ </property> ++ <property name="sizeType"> ++ <enum>QSizePolicy::Preferred</enum> ++ </property> ++ <property name="sizeHint" stdset="0"> ++ <size> ++ <width>20</width> ++ <height>2</height> ++ </size> ++ </property> ++ </spacer> ++ </item> ++ <item row="1" column="0"> ++ <widget class="QToolButton" name="prevTipBtn"> ++ <property name="styleSheet"> ++ <string notr="true">QToolButton{ ++ border-right:solid 0 px; ++ height:16px; ++ width:12px; ++} ++</string> ++ </property> ++ <property name="text"> ++ <string/> ++ </property> ++ <property name="icon"> ++ <iconset resource="../welcome/welcome.qrc"> ++ <normaloff>:/welcome/images/arrow-left.png</normaloff>:/welcome/images/arrow-left.png</iconset> ++ </property> ++ <property name="arrowType"> ++ <enum>Qt::NoArrow</enum> ++ </property> ++ </widget> ++ </item> ++ <item row="1" column="1"> ++ <widget class="QToolButton" name="nextTipBtn"> ++ <property name="styleSheet"> ++ <string notr="true">QToolButton{ ++ border-left:solid 0 px; ++ height:16px; ++ width:12px; ++} ++</string> ++ </property> ++ <property name="text"> ++ <string/> ++ </property> ++ <property name="icon"> ++ <iconset resource="../welcome/welcome.qrc"> ++ <normaloff>:/welcome/images/arrow-right.png</normaloff>:/welcome/images/arrow-right.png</iconset> ++ </property> ++ <property name="arrowType"> ++ <enum>Qt::NoArrow</enum> ++ </property> ++ </widget> ++ </item> ++ <item row="2" column="0" colspan="2"> ++ <spacer name="verticalSpacer_3"> ++ <property name="orientation"> ++ <enum>Qt::Vertical</enum> ++ </property> ++ <property name="sizeHint" stdset="0"> ++ <size> ++ <width>20</width> ++ <height>2</height> ++ </size> ++ </property> ++ </spacer> ++ </item> ++ </layout> ++ </item> ++ </layout> ++ </widget> ++ </item> ++ </layout> ++ </widget> ++ <customwidgets> ++ <customwidget> ++ <class>Core::Utils::WelcomeModeTreeWidget</class> ++ <extends>QTreeWidget</extends> ++ <header>utils/welcomemodetreewidget.h</header> ++ </customwidget> ++ <customwidget> ++ <class>Core::Utils::WelcomeModeLabel</class> ++ <extends>QLabel</extends> ++ <header>utils/welcomemodetreewidget.h</header> ++ </customwidget> ++ </customwidgets> ++ <resources> ++ <include location="../welcome/welcome.qrc"/> ++ </resources> ++ <connections/> ++</ui> +diff --git a/src/plugins/qt4projectmanager/qt4projectmanager.pro b/src/plugins/qt4projectmanager/qt4projectmanager.pro +index 6b69139..a85ffce 100644 +--- a/src/plugins/qt4projectmanager/qt4projectmanager.pro ++++ b/src/plugins/qt4projectmanager/qt4projectmanager.pro +@@ -3,7 +3,6 @@ TARGET = Qt4ProjectManager + QT += network + include(../../qtcreatorplugin.pri) + include(qt4projectmanager_dependencies.pri) +- + HEADERS += qt4projectmanagerplugin.h \ + qt4projectmanager.h \ + qt4project.h \ +@@ -39,7 +38,9 @@ HEADERS += qt4projectmanagerplugin.h \ + qtversionmanager.h \ + qtoptionspage.h \ + qtuicodemodelsupport.h \ +- externaleditors.h ++ externaleditors.h \ ++ gettingstartedwelcomepagewidget.h \ ++ gettingstartedwelcomepage.h + SOURCES += qt4projectmanagerplugin.cpp \ + qt4projectmanager.cpp \ + qt4project.cpp \ +@@ -73,19 +74,20 @@ SOURCES += qt4projectmanagerplugin.cpp \ + qtversionmanager.cpp \ + qtoptionspage.cpp \ + qtuicodemodelsupport.cpp \ +- externaleditors.cpp ++ externaleditors.cpp \ ++ gettingstartedwelcomepagewidget.cpp \ ++ gettingstartedwelcomepage.cpp + FORMS += makestep.ui \ + qmakestep.ui \ + qt4projectconfigwidget.ui \ + embeddedpropertiespage.ui \ + qtversionmanager.ui \ +- showbuildlog.ui ++ showbuildlog.ui \ ++ gettingstartedwelcomepagewidget.ui + RESOURCES += qt4projectmanager.qrc \ + wizards/wizards.qrc +- + include(../../shared/proparser/proparser.pri) + include(qt-s60/qt-s60.pri) + include(customwidgetwizard/customwidgetwizard.pri) +- + DEFINES += QT_NO_CAST_TO_ASCII + OTHER_FILES += Qt4ProjectManager.pluginspec +diff --git a/src/plugins/qt4projectmanager/qt4projectmanager_dependencies.pri b/src/plugins/qt4projectmanager/qt4projectmanager_dependencies.pri +index e1bd37d..9a49315 100644 +--- a/src/plugins/qt4projectmanager/qt4projectmanager_dependencies.pri ++++ b/src/plugins/qt4projectmanager/qt4projectmanager_dependencies.pri +@@ -3,4 +3,3 @@ include(../../plugins/cpptools/cpptools.pri) + include(../../plugins/cppeditor/cppeditor.pri) + include(../../plugins/help/help.pri) + include(../../plugins/designer/designer.pri) +-include(../../plugins/welcome/welcome.pri) +diff --git a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp +index f740c27..e2dde77 100644 +--- a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp ++++ b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp +@@ -44,6 +44,8 @@ + #include "qtversionmanager.h" + #include "qtoptionspage.h" + #include "externaleditors.h" ++#include "gettingstartedwelcomepage.h" ++#include "gettingstartedwelcomepagewidget.h" + + #ifdef QTCREATOR_WITH_S60 + #include "qt-s60/s60manager.h" +@@ -82,6 +84,8 @@ Qt4ProjectManagerPlugin::~Qt4ProjectManagerPlugin() + delete m_proFileEditorFactory; + removeObject(m_qt4ProjectManager); + delete m_qt4ProjectManager; ++ removeObject(m_welcomePage); ++ delete m_welcomePage; + } + /* + static Core::Command *createSeparator(Core::ActionManager *am, +@@ -106,9 +110,16 @@ bool Qt4ProjectManagerPlugin::initialize(const QStringList &arguments, QString * + m_projectExplorer = ProjectExplorer::ProjectExplorerPlugin::instance(); + Core::ActionManager *am = core->actionManager(); + +- addAutoReleasedObject(new QtVersionManager()); ++ QtVersionManager *mgr = new QtVersionManager(); ++ addAutoReleasedObject(mgr); + addAutoReleasedObject(new QtOptionsPage()); + ++ m_welcomePage = new GettingStartedWelcomePage; ++ addObject(m_welcomePage); ++ GettingStartedWelcomePageWidget *gswp = ++ static_cast<GettingStartedWelcomePageWidget*>(m_welcomePage->page()); ++ connect(mgr, SIGNAL(updateExamples(QString,QString,QString)), ++ gswp, SLOT(updateExamples(QString,QString,QString))); + + //create and register objects + m_qt4ProjectManager = new Qt4Manager(this); +diff --git a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.h b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.h +index 18781bc..5e3e016 100644 +--- a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.h ++++ b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.h +@@ -49,6 +49,7 @@ class MakeStepFactory; + class GccParserFactory; + class MsvcParserFactory; + class EmbeddedPropertiesPage; ++class GettingStartedWelcomePage; + + class Qt4ProjectManagerPlugin : public ExtensionSystem::IPlugin + { +@@ -81,6 +82,7 @@ private: + + QAction *m_runQMakeAction; + QAction *m_runQMakeActionContextMenu; ++ GettingStartedWelcomePage *m_welcomePage; + }; + + } // namespace Internal +diff --git a/src/plugins/qt4projectmanager/qtversionmanager.cpp b/src/plugins/qt4projectmanager/qtversionmanager.cpp +index aa65520..6bce576 100644 +--- a/src/plugins/qt4projectmanager/qtversionmanager.cpp ++++ b/src/plugins/qt4projectmanager/qtversionmanager.cpp +@@ -42,7 +42,6 @@ + #include <coreplugin/coreconstants.h> + #include <coreplugin/icore.h> + #include <coreplugin/modemanager.h> +-#include <welcome/welcomemode.h> + #include <extensionsystem/pluginmanager.h> + #include <help/helpplugin.h> + #include <utils/qtcassert.h> +@@ -51,6 +50,7 @@ + #include <QtCore/QProcess> + #include <QtCore/QSettings> + #include <QtCore/QTime> ++#include <QtCore/QTimer> + #include <QtGui/QApplication> + #include <QtGui/QDesktopServices> + +@@ -122,7 +122,8 @@ QtVersionManager::QtVersionManager() + writeVersionsIntoSettings(); + + updateDocumentation(); +- updateExamples(); ++ // cannot call from ctor, needs to get connected extenernally first ++ QTimer::singleShot(0, this, SLOT(updateExamples())); + } + + QtVersionManager::~QtVersionManager() +@@ -185,9 +186,7 @@ void QtVersionManager::updateExamples() + if (version->hasDemos()) + demosPath = version->demosPath(); + if (!examplesPath.isEmpty() && !demosPath.isEmpty()) { +- if (Welcome::WelcomeMode *welcomeMode = qobject_cast<Welcome::WelcomeMode*> +- (Core::ICore::instance()->modeManager()->mode(Core::Constants::MODE_WELCOME))) +- welcomeMode->updateExamples(examplesPath, demosPath, version->sourcePath()); ++ emit updateExamples(examplesPath, demosPath, version->sourcePath()); + return; + } + } +diff --git a/src/plugins/qt4projectmanager/qtversionmanager.h b/src/plugins/qt4projectmanager/qtversionmanager.h +index 0f2144c..fb7a33b 100644 +--- a/src/plugins/qt4projectmanager/qtversionmanager.h ++++ b/src/plugins/qt4projectmanager/qtversionmanager.h +@@ -201,6 +201,10 @@ public: + signals: + void defaultQtVersionChanged(); + void qtVersionsChanged(); ++ void updateExamples(QString, QString, QString); ++ ++private slots: ++ void updateExamples(); + private: + static QString findQMakeLine(const QString &directory); + static QString trimLine(const QString line); +@@ -215,7 +219,6 @@ private: + void addNewVersionsFromInstaller(); + void updateSystemVersion(); + void updateDocumentation(); +- void updateExamples(); + + static int indexOfVersionInList(const QtVersion * const version, const QList<QtVersion *> &list); + void updateUniqueIdToIndexMap(); +diff --git a/src/plugins/welcome/communitywelcomepage.cpp b/src/plugins/welcome/communitywelcomepage.cpp +new file mode 100644 +index 0000000..0337fb1 +--- /dev/null ++++ b/src/plugins/welcome/communitywelcomepage.cpp +@@ -0,0 +1,48 @@ ++/************************************************************************** ++** ++** This file is part of Qt Creator ++** ++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). ++** ++** Contact: Nokia Corporation (qt-info@nokia.com) ++** ++** Commercial Usage ++** ++** Licensees holding valid Qt Commercial licenses may use this file in ++** accordance with the Qt Commercial License Agreement provided with the ++** Software or, alternatively, in accordance with the terms contained in ++** a written agreement between you and Nokia. ++** ++** GNU Lesser General Public License Usage ++** ++** Alternatively, this file may be used under the terms of the GNU Lesser ++** General Public License version 2.1 as published by the Free Software ++** Foundation and appearing in the file LICENSE.LGPL included in the ++** packaging of this file. Please review the following information to ++** ensure the GNU Lesser General Public License version 2.1 requirements ++** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ++** ++** If you are unsure which license is appropriate for your use, please ++** contact the sales department at http://www.qtsoftware.com/contact. ++** ++**************************************************************************/ ++ ++#include "communitywelcomepage.h" ++#include "communitywelcomepagewidget.h" ++ ++ ++namespace Welcome { ++namespace Internal { ++ ++CommunityWelcomePage::CommunityWelcomePage() ++ : m_page(new CommunityWelcomePageWidget) ++{ ++} ++ ++QWidget* CommunityWelcomePage::page() ++{ ++ return m_page; ++} ++ ++} // namespace Internal ++} // namespace Welcome +diff --git a/src/plugins/welcome/communitywelcomepage.h b/src/plugins/welcome/communitywelcomepage.h +new file mode 100644 +index 0000000..b6c047c +--- /dev/null ++++ b/src/plugins/welcome/communitywelcomepage.h +@@ -0,0 +1,60 @@ ++/************************************************************************** ++** ++** This file is part of Qt Creator ++** ++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). ++** ++** Contact: Nokia Corporation (qt-info@nokia.com) ++** ++** Commercial Usage ++** ++** Licensees holding valid Qt Commercial licenses may use this file in ++** accordance with the Qt Commercial License Agreement provided with the ++** Software or, alternatively, in accordance with the terms contained in ++** a written agreement between you and Nokia. ++** ++** GNU Lesser General Public License Usage ++** ++** Alternatively, this file may be used under the terms of the GNU Lesser ++** General Public License version 2.1 as published by the Free Software ++** Foundation and appearing in the file LICENSE.LGPL included in the ++** packaging of this file. Please review the following information to ++** ensure the GNU Lesser General Public License version 2.1 requirements ++** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ++** ++** If you are unsure which license is appropriate for your use, please ++** contact the sales department at http://www.qtsoftware.com/contact. ++** ++**************************************************************************/ ++ ++#ifndef COMMUNITYWELCOMEPAGE_H ++#define COMMUNITYWELCOMEPAGE_H ++ ++#include "welcome_global.h" ++ ++#include <extensionsystem/iwelcomepage.h> ++ ++namespace Welcome { ++namespace Internal { ++ ++class CommunityWelcomePageWidget; ++ ++class WELCOME_EXPORT CommunityWelcomePage : public ExtensionSystem::IWelcomePage ++{ ++ Q_OBJECT ++public: ++ CommunityWelcomePage(); ++ ++ QWidget *page(); ++ QString title() const { return tr("Community"); } ++ int priority() const { return 30; } ++ ++private: ++ CommunityWelcomePageWidget *m_page; ++ ++}; ++ ++} // namespace Internal ++} // namespace Welcome ++ ++#endif // COMMUNITYWELCOMEPAGE_H +diff --git a/src/plugins/welcome/communitywelcomepagewidget.cpp b/src/plugins/welcome/communitywelcomepagewidget.cpp +new file mode 100644 +index 0000000..40c72fe +--- /dev/null ++++ b/src/plugins/welcome/communitywelcomepagewidget.cpp +@@ -0,0 +1,79 @@ ++/************************************************************************** ++** ++** This file is part of Qt Creator ++** ++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). ++** ++** Contact: Nokia Corporation (qt-info@nokia.com) ++** ++** Commercial Usage ++** ++** Licensees holding valid Qt Commercial licenses may use this file in ++** accordance with the Qt Commercial License Agreement provided with the ++** Software or, alternatively, in accordance with the terms contained in ++** a written agreement between you and Nokia. ++** ++** GNU Lesser General Public License Usage ++** ++** Alternatively, this file may be used under the terms of the GNU Lesser ++** General Public License version 2.1 as published by the Free Software ++** Foundation and appearing in the file LICENSE.LGPL included in the ++** packaging of this file. Please review the following information to ++** ensure the GNU Lesser General Public License version 2.1 requirements ++** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ++** ++** If you are unsure which license is appropriate for your use, please ++** contact the sales department at http://www.qtsoftware.com/contact. ++** ++**************************************************************************/ ++ ++#include "communitywelcomepagewidget.h" ++#include "ui_communitywelcomepagewidget.h" ++ ++#include "rssfetcher.h" ++ ++#include <QtGui/QDesktopServices> ++ ++namespace Welcome { ++namespace Internal { ++ ++CommunityWelcomePageWidget::CommunityWelcomePageWidget(QWidget *parent) : ++ QWidget(parent), ++ ui(new Ui::CommunityWelcomePageWidget), ++ m_rssFetcher(new RSSFetcher(7)) ++{ ++ ui->setupUi(this); ++ ui->labsTitleLabel->setStyledText(tr("News From the Qt Labs")); ++ ui->sitesTitleLabel->setStyledText(tr("Qt Websites")); ++ ++ connect(ui->newsTreeWidget, SIGNAL(activated(QString)), SLOT(slotUrlClicked(QString))); ++ connect(ui->sitesTreeWidget, SIGNAL(activated(QString)), SLOT(slotUrlClicked(QString))); ++ ++ connect(m_rssFetcher, SIGNAL(newsItemReady(QString, QString, QString)), ++ ui->newsTreeWidget, SLOT(slotAddNewsItem(QString, QString, QString))); ++ //: Add localized feed here only if one exists ++ m_rssFetcher->fetch(QUrl(tr("http://labs.trolltech.com/blogs/feed"))); ++ ++ ui->sitesTreeWidget->addItem(tr("Qt Home"), QLatin1String("http://qtsoftware.com")); ++ ui->sitesTreeWidget->addItem(tr("Qt Labs"), QLatin1String("http://labs.trolltech.com")); ++ ui->sitesTreeWidget->addItem(tr("Qt Git Hosting"), QLatin1String("http://qt.gitorious.org")); ++ ui->sitesTreeWidget->addItem(tr("Qt Centre"), QLatin1String("http://www.qtcentre.org")); ++ ui->sitesTreeWidget->addItem(tr("Qt for S60 at Forum Nokia"), QLatin1String("http://discussion.forum.nokia.com/forum/forumdisplay.php?f=196")); ++} ++ ++CommunityWelcomePageWidget::~CommunityWelcomePageWidget() ++{ ++ delete m_rssFetcher; ++ delete ui; ++} ++ ++ ++void CommunityWelcomePageWidget::slotUrlClicked(const QString &data) ++{ ++ QDesktopServices::openUrl(QUrl(data)); ++} ++ ++ ++ ++} // namespace Internal ++} // namespace Welcome +diff --git a/src/plugins/welcome/communitywelcomepagewidget.h b/src/plugins/welcome/communitywelcomepagewidget.h +new file mode 100644 +index 0000000..8da68fe +--- /dev/null ++++ b/src/plugins/welcome/communitywelcomepagewidget.h +@@ -0,0 +1,64 @@ ++/************************************************************************** ++** ++** This file is part of Qt Creator ++** ++** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). ++** ++** Contact: Nokia Corporation (qt-info@nokia.com) ++** ++** Commercial Usage ++** ++** Licensees holding valid Qt Commercial licenses may use this file in ++** accordance with the Qt Commercial License Agreement provided with the ++** Software or, alternatively, in accordance with the terms contained in ++** a written agreement between you and Nokia. ++** ++** GNU Lesser General Public License Usage ++** ++** Alternatively, this file may be used under the terms of the GNU Lesser ++** General Public License version 2.1 as published by the Free Software ++** Foundation and appearing in the file LICENSE.LGPL included in the ++** packaging of this file. Please review the following information to ++** ensure the GNU Lesser General Public License version 2.1 requirements ++** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ++** ++** If you are unsure which license is appropriate for your use, please ++** contact the sales department at http://www.qtsoftware.com/contact. ++** ++**************************************************************************/ ++ ++#ifndef COMMUNITYWELCOMEPAGEWIDGET_H ++#define COMMUNITYWELCOMEPAGEWIDGET_H ++ ++#include <QWidget> ++ ++namespace Welcome { ++namespace Internal { ++ ++class RSSFetcher; ++ ++namespace Ui { ++ class CommunityWelcomePageWidget; ++} ++ ++class CommunityWelcomePageWidget : public QWidget ++{ ++ Q_OBJECT ++ ++public: ++ CommunityWelcomePageWidget(QWidget *parent = 0); ++ ~CommunityWelcomePageWidget(); ++ ++private slots: ++ void slotUrlClicked(const QString &data); ++ ++ ++private: ++ RSSFetcher *m_rssFetcher; ++ Ui::CommunityWelcomePageWidget *ui; ++}; ++ ++ ++} // namespace Internal ++} // namespace Welcome ++#endif // COMMUNITYWELCOMEPAGEWIDGET_H +diff --git a/src/plugins/welcome/communitywelcomepagewidget.ui b/src/plugins/welcome/communitywelcomepagewidget.ui +new file mode 100644 +index 0000000..7d05f30 +--- /dev/null ++++ b/src/plugins/welcome/communitywelcomepagewidget.ui +@@ -0,0 +1,195 @@ ++<?xml version="1.0" encoding="UTF-8"?> ++<ui version="4.0"> ++ <class>Welcome::Internal::CommunityWelcomePageWidget</class> ++ <widget class="QWidget" name="Welcome::Internal::CommunityWelcomePageWidget"> ++ <property name="geometry"> ++ <rect> ++ <x>0</x> ++ <y>0</y> ++ <width>667</width> ++ <height>352</height> ++ </rect> ++ </property> ++ <property name="windowTitle"> ++ <string>Form</string> ++ </property> ++ <layout class="QHBoxLayout" name="horizontalLayout"> ++ <item> ++ <widget class="QFrame" name="labsFrame"> ++ <property name="frameShape"> ++ <enum>QFrame::NoFrame</enum> ++ </property> ++ <property name="frameShadow"> ++ <enum>QFrame::Plain</enum> ++ </property> ++ <layout class="QVBoxLayout" name="verticalLayout_2"> ++ <item> ++ <widget class="Core::Utils::WelcomeModeLabel" name="labsTitleLabel"> ++ <property name="sizePolicy"> ++ <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> ++ <horstretch>0</horstretch> ++ <verstretch>0</verstretch> ++ </sizepolicy> ++ </property> ++ <property name="alignment"> ++ <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> ++ </property> ++ </widget> ++ </item> ++ <item> ++ <widget class="Core::Utils::WelcomeModeTreeWidget" name="newsTreeWidget"> ++ <property name="sizePolicy"> ++ <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> ++ <horstretch>0</horstretch> ++ <verstretch>0</verstretch> ++ </sizepolicy> ++ </property> ++ <property name="minimumSize"> ++ <size> ++ <width>340</width> ++ <height>0</height> ++ </size> ++ </property> ++ <property name="focusPolicy"> ++ <enum>Qt::NoFocus</enum> ++ </property> ++ <property name="frameShape"> ++ <enum>QFrame::NoFrame</enum> ++ </property> ++ <property name="selectionMode"> ++ <enum>QAbstractItemView::NoSelection</enum> ++ </property> ++ <property name="verticalScrollMode"> ++ <enum>QAbstractItemView::ScrollPerPixel</enum> ++ </property> ++ <property name="rootIsDecorated"> ++ <bool>false</bool> ++ </property> ++ <property name="uniformRowHeights"> ++ <bool>true</bool> ++ </property> ++ <property name="allColumnsShowFocus"> ++ <bool>true</bool> ++ </property> ++ <property name="columnCount"> ++ <number>2</number> ++ </property> ++ <attribute name="headerVisible"> ++ <bool>false</bool> ++ </attribute> ++ <attribute name="headerDefaultSectionSize"> ++ <number>24</number> ++ </attribute> ++ <attribute name="headerMinimumSectionSize"> ++ <number>0</number> ++ </attribute> ++ <column> ++ <property name="text"> ++ <string notr="true">1</string> ++ </property> ++ </column> ++ <column> ++ <property name="text"> ++ <string notr="true">2</string> ++ </property> ++ </column> ++ </widget> ++ </item> ++ </layout> ++ </widget> ++ </item> ++ <item> ++ <widget class="QFrame" name="sitesFrame"> ++ <property name="frameShape"> ++ <enum>QFrame::NoFrame</enum> ++ </property> ++ <property name="frameShadow"> ++ <enum>QFrame::Plain</enum> ++ </property> ++ <layout class="QVBoxLayout" name="verticalLayout_3"> ++ <item> ++ <widget class="Core::Utils::WelcomeModeLabel" name="sitesTitleLabel"> ++ <property name="sizePolicy"> ++ <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> ++ <horstretch>0</horstretch> ++ <verstretch>0</verstretch> ++ </sizepolicy> ++ </property> ++ <property name="alignment"> ++ <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> ++ </property> ++ </widget> ++ </item> ++ <item> ++ <widget class="Core::Utils::WelcomeModeTreeWidget" name="sitesTreeWidget"> ++ <property name="sizePolicy"> ++ <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> ++ <horstretch>0</horstretch> ++ <verstretch>0</verstretch> ++ </sizepolicy> ++ </property> ++ <property name="focusPolicy"> ++ <enum>Qt::NoFocus</enum> ++ </property> ++ <property name="frameShape"> ++ <enum>QFrame::NoFrame</enum> ++ </property> ++ <property name="selectionMode"> ++ <enum>QAbstractItemView::NoSelection</enum> ++ </property> ++ <property name="verticalScrollMode"> ++ <enum>QAbstractItemView::ScrollPerPixel</enum> ++ </property> ++ <property name="rootIsDecorated"> ++ <bool>false</bool> ++ </property> ++ <property name="uniformRowHeights"> ++ <bool>true</bool> ++ </property> ++ <property name="allColumnsShowFocus"> ++ <bool>true</bool> ++ </property> ++ <property name="columnCount"> ++ <number>2</number> ++ </property> ++ <attribute name="headerVisible"> ++ <bool>false</bool> ++ </attribute> ++ <attribute name="headerDefaultSectionSize"> ++ <number>24</number> ++ </attribute> ++ <attribute name="headerMinimumSectionSize"> ++ <number>0</number> ++ </attribute> ++ <column> ++ <property name="text"> ++ <string notr="true">1</string> ++ </property> ++ </column> ++ <column> ++ <property name="text"> ++ <string notr="true">2</string> ++ </property> ++ </column> ++ </widget> ++ </item> ++ </layout> ++ </widget> ++ </item> ++ </layout> ++ </widget> ++ <customwidgets> ++ <customwidget> ++ <class>Core::Utils::WelcomeModeTreeWidget</class> ++ <extends>QTreeWidget</extends> ++ <header>utils/welcomemodetreewidget.h</header> ++ </customwidget> ++ <customwidget> ++ <class>Core::Utils::WelcomeModeLabel</class> ++ <extends>QLabel</extends> ++ <header>utils/welcomemodetreewidget.h</header> ++ </customwidget> ++ </customwidgets> ++ <resources/> ++ <connections/> ++</ui> +diff --git a/src/plugins/welcome/rssfetcher.cpp b/src/plugins/welcome/rssfetcher.cpp +index f5fc756..7254c2d 100644 +--- a/src/plugins/welcome/rssfetcher.cpp ++++ b/src/plugins/welcome/rssfetcher.cpp +@@ -43,7 +43,7 @@ + #include <sys/utsname.h> + #endif + +-using namespace Welcome; ++using namespace Welcome::Internal; + + static const QString getOsString() + { +diff --git a/src/plugins/welcome/rssfetcher.h b/src/plugins/welcome/rssfetcher.h +index 9267fdb..54ef87d 100644 +--- a/src/plugins/welcome/rssfetcher.h ++++ b/src/plugins/welcome/rssfetcher.h +@@ -35,6 +35,7 @@ + #include <QtNetwork/QHttp> + + namespace Welcome { ++namespace Internal { + + class RSSFetcher : public QObject + { +@@ -69,6 +70,7 @@ private: + }; + + } // namespace Welcome ++} // namespace Internal + + #endif // RSSFETCHER_H + +diff --git a/src/plugins/welcome/welcome.pro b/src/plugins/welcome/welcome.pro +index 11d48e8..0ad5a50 100644 +--- a/src/plugins/welcome/welcome.pro ++++ b/src/plugins/welcome/welcome.pro +@@ -5,11 +5,17 @@ include(../../qtcreatorplugin.pri) + include(../../plugins/coreplugin/coreplugin.pri) + HEADERS += welcomeplugin.h \ + welcomemode.h \ +- rssfetcher.h ++ rssfetcher.h \ ++ communitywelcomepagewidget.h \ ++ communitywelcomepage.h + SOURCES += welcomeplugin.cpp \ + welcomemode.cpp \ +- rssfetcher.cpp +-FORMS += welcomemode.ui ++ rssfetcher.cpp \ ++ communitywelcomepagewidget.cpp \ ++ communitywelcomepage.cpp \ ++ communitywelcomepage.cpp ++FORMS += welcomemode.ui \ ++ communitywelcomepagewidget.ui + RESOURCES += welcome.qrc + DEFINES += WELCOME_LIBRARY + OTHER_FILES += Welcome.pluginspec +diff --git a/src/plugins/welcome/welcomemode.cpp b/src/plugins/welcome/welcomemode.cpp +index bc6a876..72dbb10 100644 +--- a/src/plugins/welcome/welcomemode.cpp ++++ b/src/plugins/welcome/welcomemode.cpp +@@ -28,11 +28,10 @@ + **************************************************************************/ + + #include "welcomemode.h" +-#include "rssfetcher.h" ++#include <extensionsystem/pluginmanager.h> ++#include <extensionsystem/iwelcomepage.h> + + #include <coreplugin/icore.h> +-#include <coreplugin/dialogs/iwizard.h> +- + #include <coreplugin/coreconstants.h> + #include <coreplugin/uniqueidmanager.h> + #include <coreplugin/modemanager.h> +@@ -41,22 +40,22 @@ + #include <utils/styledbar.h> + #include <utils/welcomemodetreewidget.h> + +-#include <QtGui/QDesktopServices> + #include <QtGui/QMouseEvent> + #include <QtGui/QScrollArea> + #include <QtGui/QButtonGroup> ++#include <QtGui/QDesktopServices> ++#include <QtGui/QToolButton> + +-#include <QtCore/QDateTime> +-#include <QtCore/QDir> +-#include <QtCore/QFileInfo> +-#include <QtCore/QDebug> +-#include <QtCore/QUrl> + #include <QtCore/QSettings> ++#include <QtCore/QUrl> ++#include <QtCore/QDebug> + + #include <cstdlib> + + #include "ui_welcomemode.h" + ++using namespace ExtensionSystem; ++ + namespace Welcome { + + struct WelcomeModePrivate +@@ -66,10 +65,9 @@ struct WelcomeModePrivate + QScrollArea *m_scrollArea; + QWidget *m_widget; + QWidget *m_welcomePage; +- QButtonGroup *btnGrp; +- Ui::WelcomePage ui; +- RSSFetcher *rssFetcher; +- WelcomeMode::WelcomePageData lastData; ++ QMap<QAbstractButton*, QWidget*> buttonMap; ++ QHBoxLayout * buttonLayout; ++ Ui::WelcomeMode ui; + int currentTip; + }; + +@@ -77,46 +75,6 @@ WelcomeModePrivate::WelcomeModePrivate() + { + } + +-// --- WelcomePageData +- +-bool WelcomeMode::WelcomePageData::operator==(const WelcomePageData &rhs) const +-{ +- return previousSession == rhs.previousSession +- && activeSession == rhs.activeSession +- && sessionList == rhs.sessionList +- && projectList == rhs.projectList; +-} +- +-bool WelcomeMode::WelcomePageData::operator!=(const WelcomePageData &rhs) const +-{ +- return previousSession != rhs.previousSession +- || activeSession != rhs.activeSession +- || sessionList != rhs.sessionList +- || projectList != rhs.projectList; +-} +- +-QDebug operator<<(QDebug dgb, const WelcomeMode::WelcomePageData &d) +-{ +- dgb.nospace() << "PreviousSession=" << d.previousSession +- << " activeSession=" << d.activeSession +- << " sessionList=" << d.sessionList +- << " projectList=" << d.projectList; +- return dgb; +-} +- +-// Format a title + ruler for title labels +-static inline QString titleLabel(const QString &text) +-{ +- QString rc = QLatin1String( +- "<html><head><style type=\"text/css\">p, li { white-space: pre-wrap; }</style></head>" +- "<body style=\" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;\">" +- "<p style=\" margin-top:16px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">" +- "<span style=\" font-size:x-large; color:#555555;\">"); +- rc += text; +- rc += QLatin1String("</span></p><hr/></body></html>"); +- return rc; +-} +- + // --- WelcomeMode + WelcomeMode::WelcomeMode() : + m_d(new WelcomeModePrivate) +@@ -126,22 +84,8 @@ WelcomeMode::WelcomeMode() : + l->setMargin(0); + l->setSpacing(0); + l->addWidget(new Core::Utils::StyledBar(m_d->m_widget)); +- m_d->rssFetcher = new RSSFetcher(7, this); + m_d->m_welcomePage = new QWidget(m_d->m_widget); + m_d->ui.setupUi(m_d->m_welcomePage); +- m_d->ui.projTitleLabel->setText(titleLabel(tr("Open Recent Project"))); +- m_d->ui.recentSessionsTitleLabel->setText(titleLabel(tr("Resume Session"))); +- m_d->ui.tutorialsTitleLabel->setText(titleLabel(tr("Tutorials"))); +- m_d->ui.demoTitleLabel->setText(titleLabel(tr("Explore Qt Examples"))); +- m_d->ui.didYouKnowTitleLabel->setText(titleLabel(tr("Did You Know?"))); +- m_d->ui.labsTitleLabel->setText(titleLabel(tr("News From the Qt Labs"))); +- m_d->ui.sitesTitleLabel->setText(titleLabel(tr("Qt Websites"))); +- m_d->ui.sessTreeWidget->viewport()->setAutoFillBackground(false); +- m_d->ui.projTreeWidget->viewport()->setAutoFillBackground(false); +- m_d->ui.newsTreeWidget->viewport()->setAutoFillBackground(false); +- m_d->ui.sitesTreeWidget->viewport()->setAutoFillBackground(false); +- m_d->ui.tutorialTreeWidget->viewport()->setAutoFillBackground(false); +- m_d->ui.didYouKnowTextBrowser->viewport()->setAutoFillBackground(false); + m_d->ui.helpUsLabel->setAttribute(Qt::WA_LayoutUsesWidgetRect); + m_d->ui.feedbackButton->setAttribute(Qt::WA_LayoutUsesWidgetRect); + l->addWidget(m_d->m_welcomePage); +@@ -151,71 +95,17 @@ WelcomeMode::WelcomeMode() : + m_d->m_scrollArea->setWidget(m_d->m_widget); + m_d->m_scrollArea->setWidgetResizable(true); + +- updateWelcomePage(WelcomePageData()); +- +- m_d->btnGrp = new QButtonGroup(this); +- m_d->btnGrp->addButton(m_d->ui.gettingStartedSectButton, 0); +- m_d->btnGrp->addButton(m_d->ui.developSectButton, 1); +- m_d->btnGrp->addButton(m_d->ui.communitySectButton, 2); +- +- connect(m_d->btnGrp, SIGNAL(buttonClicked(int)), m_d->ui.stackedWidget, SLOT(setCurrentIndex(int))); ++ PluginManager *pluginManager = PluginManager::instance(); ++ connect(pluginManager, SIGNAL(objectAdded(QObject*)), SLOT(welcomePluginAdded(QObject))); + + connect(m_d->ui.feedbackButton, SIGNAL(clicked()), SLOT(slotFeedback())); +- connect(m_d->ui.manageSessionsButton, SIGNAL(clicked()), SIGNAL(manageSessions())); +- connect(m_d->ui.createNewProjectButton, SIGNAL(clicked()), SLOT(slotCreateNewProject())); +- connect(m_d->ui.sessTreeWidget, SIGNAL(activated(QString)), SLOT(slotSessionClicked(QString))); +- connect(m_d->ui.projTreeWidget, SIGNAL(activated(QString)), SLOT(slotProjectClicked(QString))); +- connect(m_d->ui.newsTreeWidget, SIGNAL(activated(QString)), SLOT(slotUrlClicked(QString))); +- connect(m_d->ui.sitesTreeWidget, SIGNAL(activated(QString)), SLOT(slotUrlClicked(QString))); +- connect(m_d->ui.tutorialTreeWidget, SIGNAL(activated(QString)), SIGNAL(openHelpPage(const QString&))); +- connect(m_d->ui.openExampleButton, SIGNAL(clicked()), SLOT(slotOpenExample())); +- connect(m_d->ui.examplesComboBox, SIGNAL(currentIndexChanged(int)), SLOT(slotEnableExampleButton(int))); +- +- connect(m_d->rssFetcher, SIGNAL(newsItemReady(QString, QString, QString)), +- m_d->ui.newsTreeWidget, SLOT(slotAddNewsItem(QString, QString, QString))); +- +- //: Add localized feed here only if one exists +- m_d->rssFetcher->fetch(QUrl(tr("http://labs.trolltech.com/blogs/feed"))); +- +- m_d->ui.sitesTreeWidget->addItem(tr("Qt Home"), QLatin1String("http://qtsoftware.com")); +- m_d->ui.sitesTreeWidget->addItem(tr("Qt Labs"), QLatin1String("http://labs.trolltech.com")); +- m_d->ui.sitesTreeWidget->addItem(tr("Qt Git Hosting"), QLatin1String("http://qt.gitorious.org")); +- m_d->ui.sitesTreeWidget->addItem(tr("Qt Centre"), QLatin1String("http://www.qtcentre.org")); +- m_d->ui.sitesTreeWidget->addItem(tr("Qt for S60 at Forum Nokia"), QLatin1String("http://discussion.forum.nokia.com/forum/forumdisplay.php?f=196")); +- +- m_d->ui.tutorialTreeWidget->addItem(tr("<b>Qt Creator - A quick tour</b>"), +- QString("qthelp://com.nokia.qtcreator.%1%2/doc/index.html").arg(IDE_VERSION_MAJOR).arg(IDE_VERSION_MINOR)); +- m_d->ui.tutorialTreeWidget->addItem(tr("Creating an address book"), +- QLatin1String("qthelp://com.nokia.qtcreator/doc/tutorials-addressbook-sdk.html")); +- m_d->ui.tutorialTreeWidget->addItem(tr("Understanding widgets"), +- QLatin1String("qthelp://com.trolltech.qt/qdoc/widgets-tutorial.html")); +- m_d->ui.tutorialTreeWidget->addItem(tr("Building with qmake"), +- QLatin1String("qthelp://com.trolltech.qmake/qdoc/qmake-tutorial.html")); +- m_d->ui.tutorialTreeWidget->addItem(tr("Writing test cases"), +- QLatin1String("qthelp://com.trolltech.qt/qdoc/qtestlib-tutorial.html")); +- +- srand(QDateTime::currentDateTime().toTime_t()); +- QStringList tips = tipsOfTheDay(); +- m_d->currentTip = rand()%tips.count(); +- +- QTextDocument *doc = m_d->ui.didYouKnowTextBrowser->document(); +- doc->setDefaultStyleSheet("a:link {color:black;}"); +- m_d->ui.didYouKnowTextBrowser->setDocument(doc); +- m_d->ui.didYouKnowTextBrowser->setText(tips.at(m_d->currentTip)); +- +- connect(m_d->ui.nextTipBtn, SIGNAL(clicked()), this, SLOT(slotNextTip())); +- connect(m_d->ui.prevTipBtn, SIGNAL(clicked()), this, SLOT(slotPrevTip())); + +- QSettings *settings = Core::ICore::instance()->settings(); +- int id = settings->value("General/WelcomeTab", 0).toInt(); +- m_d->btnGrp->button(id)->setChecked(true); +- m_d->ui.stackedWidget->setCurrentIndex(id); + } + + WelcomeMode::~WelcomeMode() + { + QSettings *settings = Core::ICore::instance()->settings(); +- settings->setValue("General/WelcomeTab", m_d->btnGrp->checkedId()); ++ settings->setValue("General/WelcomeTab", m_d->ui.stackedWidget->currentIndex()); + delete m_d->m_widget; + delete m_d; + } +@@ -252,150 +142,78 @@ QList<int> WelcomeMode::context() const + return contexts; + } + +-void WelcomeMode::updateWelcomePage(const WelcomePageData &welcomePageData) +-{ +- // Update only if data are modified +- if (welcomePageData == m_d->lastData) +- return; +- m_d->lastData = welcomePageData; +- +- m_d->m_widget->setUpdatesEnabled(false); +- m_d->ui.sessTreeWidget->clear(); +- m_d->ui.projTreeWidget->clear(); +- +- if (welcomePageData.sessionList.count() > 0) { +- foreach (const QString &s, welcomePageData.sessionList) { +- QString str = s; +- if (s == welcomePageData.previousSession) +- str = tr("%1 (last session)").arg(s); +- m_d->ui.sessTreeWidget->addItem(str, s); +- } +- m_d->ui.sessTreeWidget->updateGeometry(); +- m_d->ui.sessTreeWidget->show(); +- } else { +- m_d->ui.sessTreeWidget->hide(); +- } +- +- typedef QPair<QString, QString> QStringPair; +- if (welcomePageData.projectList.count() > 0) { +- foreach (const QStringPair &it, welcomePageData.projectList) { +- QTreeWidgetItem *item = m_d->ui.projTreeWidget->addItem(it.second, it.first); +- const QFileInfo fi(it.first); +- item->setToolTip(1, QDir::toNativeSeparators(fi.absolutePath())); +- } +- } else { +- m_d->ui.projTreeWidget->hide(); +- } +- m_d->ui.projTreeWidget->updateGeometry(); +- m_d->m_widget->setUpdatesEnabled(true); +-} +- +-void WelcomeMode::activateEditMode() +-{ +- Core::ModeManager *modeManager = Core::ModeManager::instance(); +- if (modeManager->currentMode() == this) +- modeManager->activateMode(Core::Constants::MODE_EDIT); +-} +- +-void WelcomeMode::slotSessionClicked(const QString &data) +-{ +- emit requestSession(data); +- activateEditMode(); +-} +- +-void WelcomeMode::slotProjectClicked(const QString &data) ++bool sortFunction(IWelcomePage * a, IWelcomePage *b) + { +- emit requestProject(data); +- activateEditMode(); ++ return a->priority() < b->priority(); + } + +-void WelcomeMode::slotUrlClicked(const QString &data) ++void WelcomeMode::initPlugins() + { +- QDesktopServices::openUrl(QUrl(data)); +-} +- +-void WelcomeMode::updateExamples(const QString& examplePath, const QString& demosPath, const QString &sourcePath) +-{ +- QString demoxml = demosPath + "/qtdemo/xml/examples.xml"; +- if (!QFile::exists(demoxml)) { +- demoxml = sourcePath + "/demos/qtdemo/xml/examples.xml"; +- if (!QFile::exists(demoxml)) +- return; ++ m_d->buttonLayout = new QHBoxLayout(m_d->ui.navFrame); ++ m_d->buttonLayout->setMargin(0); ++ m_d->buttonLayout->setSpacing(0); ++ delete m_d->ui.stackedWidget->currentWidget(); ++ QList<IWelcomePage*> plugins = PluginManager::instance()->getObjects<IWelcomePage>(); ++ qSort(plugins.begin(), plugins.end(), &sortFunction); ++ foreach (IWelcomePage* plugin, plugins) { ++ QToolButton * btn = new QToolButton; ++ btn->setCheckable(true); ++ btn->setText(plugin->title()); ++ btn->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); ++ btn->setAutoExclusive(true); ++ connect (btn, SIGNAL(clicked()), SLOT(showClickedPage())); ++ m_d->ui.stackedWidget->addWidget(plugin->page()); ++ m_d->buttonLayout->addWidget(btn); ++ m_d->buttonMap.insert(btn, plugin->page()); + } ++ m_d->buttonLayout->addSpacing(5); + +- QFile description(demoxml); +- if (!description.open(QFile::ReadOnly)) +- return; +- +- m_d->ui.examplesComboBox->clear(); +- m_d->ui.examplesComboBox->setEnabled(true); +- +- m_d->ui.examplesComboBox->addItem(tr("Choose an example...")); +- QFont f = widget()->font(); +- f.setItalic(true); +- m_d->ui.examplesComboBox->setItemData(0, f, Qt::FontRole); +- f.setItalic(false); +- bool inExamples = false; +- QString dirName; +- QXmlStreamReader reader(&description); +- while (!reader.atEnd()) { +- switch (reader.readNext()) { +- case QXmlStreamReader::StartElement: +- if (reader.name() == "category") { +- QString name = reader.attributes().value(QLatin1String("name")).toString(); +- if (name.contains("tutorial")) +- break; +- dirName = reader.attributes().value(QLatin1String("dirname")).toString(); +- m_d->ui.examplesComboBox->addItem(name); +- f.setBold(true); +- m_d->ui.examplesComboBox->setItemData(m_d->ui.examplesComboBox->count()-1, f, Qt::FontRole); +- f.setBold(false); +- inExamples = true; +- } +- if (inExamples && reader.name() == "example") { +- QString name = reader.attributes().value(QLatin1String("name")).toString(); +- QString fn = reader.attributes().value(QLatin1String("filename")).toString(); +- QString relativeProPath = '/' + dirName + '/' + fn + '/' + fn + ".pro"; +- QString fileName = examplePath + relativeProPath; +- if (!QFile::exists(fileName)) +- fileName = sourcePath + "/examples" + relativeProPath; +- QString helpPath = "qthelp://com.trolltech.qt/qdoc/" + dirName.replace("/", "-") + "-" + fn + ".html"; +- +- m_d->ui.examplesComboBox->addItem(" " + name, fileName); +- m_d->ui.examplesComboBox->setItemData(m_d->ui.examplesComboBox->count()-1, helpPath, Qt::UserRole+1); ++ QSettings *settings = Core::ICore::instance()->settings(); ++ int tabId = settings->value("General/WelcomeTab", 0).toInt(); ++ ++ int pluginCount = m_d->ui.stackedWidget->count(); ++ if (tabId < pluginCount) { ++ m_d->ui.stackedWidget->setCurrentIndex(tabId); ++ QMapIterator<QAbstractButton*, QWidget*> it(m_d->buttonMap); ++ while (it.hasNext()) ++ if (it.next().value() == m_d->ui.stackedWidget->currentWidget()) { ++ it.key()->setChecked(true); ++ break; + } +- break; +- case QXmlStreamReader::EndElement: +- if (reader.name() == "category") +- inExamples = false; +- break; +- default: +- break; +- } + } ++ + } + +-void WelcomeMode::slotEnableExampleButton(int index) +-{ +- QString fileName = m_d->ui.examplesComboBox->itemData(index, Qt::UserRole).toString(); +- m_d->ui.openExampleButton->setEnabled(!fileName.isEmpty()); ++void WelcomeMode::welcomePluginAdded(QObject *obj) ++{ ++ if (IWelcomePage *plugin = qobject_cast<IWelcomePage*>(obj)) ++ { ++ QToolButton * btn = new QToolButton; ++ btn->setCheckable(true); ++ btn->setAutoExclusive(true); ++ btn->setText(plugin->title()); ++ btn->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); ++ connect (btn, SIGNAL(clicked()), SLOT(showClickedPage())); ++ int insertPos = 0; ++ QList<IWelcomePage*> plugins = PluginManager::instance()->getObjects<IWelcomePage>(); ++ foreach (IWelcomePage* p, plugins) { ++ if (plugin->priority() < p->priority()) ++ insertPos++; ++ else ++ break; ++ } ++ m_d->ui.stackedWidget->insertWidget(insertPos, plugin->page()); ++ m_d->buttonMap.insert(btn, plugin->page()); ++ m_d->buttonLayout->insertWidget(insertPos, btn); ++ } + } + +-void WelcomeMode::slotOpenExample() ++void WelcomeMode::showClickedPage() + { +- QComboBox *box = m_d->ui.examplesComboBox; +- QString proFile = box->itemData(box->currentIndex(), Qt::UserRole).toString(); +- QString helpFile = box->itemData(box->currentIndex(), Qt::UserRole + 1).toString(); +- QStringList files; +- QFileInfo fi(proFile); +- QString tryFile = fi.path() + "/main.cpp"; +- files << proFile; +- if(!QFile::exists(tryFile)) +- tryFile = fi.path() + '/' + fi.baseName() + ".cpp"; +- if(QFile::exists(tryFile)) +- files << tryFile; +- Core::ICore::instance()->openFiles(files); +- emit openContextHelpPage(helpFile); ++ QAbstractButton *btn = qobject_cast<QAbstractButton*>(sender()); ++ QMap<QAbstractButton*, QWidget*>::iterator it = m_d->buttonMap.find(btn); ++ if (it.value()) ++ m_d->ui.stackedWidget->setCurrentWidget(it.value()); + } + + void WelcomeMode::slotFeedback() +@@ -404,71 +222,5 @@ void WelcomeMode::slotFeedback() + "http://qtsoftware.com/forms/feedback-forms/qt-creator-user-feedback/view"))); + } + +-void WelcomeMode::slotCreateNewProject() +-{ +- Core::ICore::instance()->showNewItemDialog(tr("New Project..."), +- Core::IWizard::wizardsOfKind(Core::IWizard::ProjectWizard)); +-} +- +-void WelcomeMode::slotNextTip() +-{ +- QStringList tips = tipsOfTheDay(); +- m_d->currentTip = ((m_d->currentTip+1)%tips.count()); +- m_d->ui.didYouKnowTextBrowser->setText(tips.at(m_d->currentTip)); +-} +- +-void WelcomeMode::slotPrevTip() +-{ +- QStringList tips = tipsOfTheDay(); +- m_d->currentTip = ((m_d->currentTip-1)+tips.count())%tips.count(); +- m_d->ui.didYouKnowTextBrowser->setText(tips.at(m_d->currentTip)); +-} +- +-QStringList WelcomeMode::tipsOfTheDay() +-{ +- static QStringList tips; +- if (tips.isEmpty()) { +- QString altShortcut = +-#ifdef Q_WS_MAC +- tr("Cmd", "Shortcut key"); +-#else +- tr("Alt", "Shortcut key"); +-#endif +- tips.append(tr("You can switch between Qt Creator's modes using <tt>Ctrl+number</tt>:<ul>" +- "<li>1 - Welcome</li><li>2 - Edit</li><li>3 - Debug</li><li>4 - Projects</li><li>5 - Help</li>" +- "<li></li><li>6 - Output</li></ul>")); +- //:%1 gets replaced by Alt (Win/Unix) or Cmd (Mac) +- tips.append(tr("You can show and hide the side bar using <tt>%1+0<tt>.").arg(altShortcut)); +- tips.append(tr("You can fine tune the <tt>Find</tt> function by selecting "Whole Words" " +- "or "Case Sensitive". Simply click on the icons on the right end of the line edit.")); +- tips.append(tr("If you add <a href=\"qthelp://com.nokia.qtcreator/doc/creator-external-library-handling.html\"" +- ">external libraries</a>, Qt Creator will automatically offer syntax highlighting " +- "and code completion.")); +- tips.append(tr("The code completion is CamelCase-aware. For example, to complete <tt>namespaceUri</tt> " +- "you can just type <tt>nU</tt> and hit <tt>Ctrl+Space</tt>.")); +- tips.append(tr("You can force code completion at any time using <tt>Ctrl+Space</tt>.")); +- tips.append(tr("You can start Qt Creator with a session by calling <tt>qtcreator <sessionname></tt>.")); +- tips.append(tr("You can return to edit mode from any other mode at any time by hitting <tt>Escape</tt>.")); +- //:%1 gets replaced by Alt (Win/Unix) or Cmd (Mac) +- tips.append(tr("You can switch between the output pane by hitting <tt>%1+n</tt> where n is the number denoted " +- "on the buttons at the window bottom:" +- "<ul><li>1 - Build Issues</li><li>2 - Search Results</li><li>3 - Application Output</li>" +- "<li>4 - Compile Output</li></ul>").arg(altShortcut)); +- tips.append(tr("You can quickly search methods, classes, help and more using the " +- "<a href=\"qthelp://com.nokia.qtcreator/doc/creator-navigation.html\">Locator bar</a> (<tt>Ctrl+K</tt>).")); +- tips.append(tr("You can add custom build steps in the " +- "<a href=\"qthelp://com.nokia.qtcreator/doc/creator-build-settings.html\">build settings</a>.")); +- tips.append(tr("Within a session, you can add " +- "<a href=\"qthelp://com.nokia.qtcreator/doc/creator-build-settings.html#dependencies\">dependencies</a> between projects.")); +- tips.append(tr("You can set the preferred editor encoding for every project in <tt>Projects -> Editor Settings -> Default Encoding</tt>.")); +- tips.append(tr("You can modify the binary that is being executed when you press the <tt>Run</tt> button: Add a <tt>Custom Executable</tt> " +- "by clicking the <tt>+</tt> button in <tt>Projects -> Run Settings -> Run Configuration</tt> and then select the new " +- "target in the combo box.")); +- tips.append(tr("You can use Qt Creator with a number of <a href=\"qthelp://com.nokia.qtcreator/doc/creator-version-control.html\">" +- "revision control systems</a> such as Subversion, Perforce and Git.")); +- tips.append(tr("In the editor, <tt>F2</tt> toggles declaration and definition while <tt>F4</tt> toggles header file and source file.")); +- } +- return tips; +-} + + } // namespace Welcome +diff --git a/src/plugins/welcome/welcomemode.h b/src/plugins/welcome/welcomemode.h +index 0555ce6..1576d24 100644 +--- a/src/plugins/welcome/welcomemode.h ++++ b/src/plugins/welcome/welcomemode.h +@@ -54,18 +54,6 @@ public: + WelcomeMode(); + ~WelcomeMode(); + +- struct WelcomePageData{ +- bool operator==(const WelcomePageData &rhs) const; +- bool operator!=(const WelcomePageData &rhs) const; +- +- QString previousSession; +- QString activeSession; +- QStringList sessionList; +- QList<QPair<QString, QString> > projectList; // pair of filename, displayname +- }; +- +- void updateWelcomePage(const WelcomePageData &welcomePageData); +- + // IMode + QString name() const; + QIcon icon() const; +@@ -75,31 +63,14 @@ public: + QList<int> context() const; + void activated(); + QString contextHelpId() const { return QLatin1String("Qt Creator"); } +- +- void updateExamples(const QString& examplePath, const QString& demosPath, const QString &sourcePath); +- +-signals: +- void requestProject(const QString &project); +- void requestSession(const QString &session); +- void openHelpPage(const QString& url); +- void openContextHelpPage(const QString& url); +- void manageSessions(); ++ void initPlugins(); + + private slots: + void slotFeedback(); +- void slotSessionClicked(const QString &data); +- void slotProjectClicked(const QString &data); +- void slotUrlClicked(const QString &data); +- void slotEnableExampleButton(int); +- void slotOpenExample(); +- void slotCreateNewProject(); +- void slotNextTip(); +- void slotPrevTip(); ++ void welcomePluginAdded(QObject*); ++ void showClickedPage(); + + private: +- void activateEditMode(); +- QStringList tipsOfTheDay(); +- + WelcomeModePrivate *m_d; + }; + +diff --git a/src/plugins/welcome/welcomemode.ui b/src/plugins/welcome/welcomemode.ui +index c70aabb..e1c18bd 100644 +--- a/src/plugins/welcome/welcomemode.ui ++++ b/src/plugins/welcome/welcomemode.ui +@@ -1,7 +1,7 @@ + <?xml version="1.0" encoding="UTF-8"?> + <ui version="4.0"> +- <class>Welcome::WelcomePage</class> +- <widget class="QWidget" name="Core::Utils::WelcomePage"> ++ <class>Welcome::WelcomeMode</class> ++ <widget class="QWidget" name="Welcome::WelcomeMode"> + <property name="geometry"> + <rect> + <x>0</x> +@@ -172,6 +172,12 @@ QToolButton:pressed, QPushButton:pressed{ + <verstretch>0</verstretch> + </sizepolicy> + </property> ++ <property name="minimumSize"> ++ <size> ++ <width>0</width> ++ <height>10</height> ++ </size> ++ </property> + <property name="font"> + <font> + <weight>50</weight> +@@ -238,129 +244,6 @@ QToolButton:pressed { + <property name="frameShadow"> + <enum>QFrame::Plain</enum> + </property> +- <layout class="QGridLayout" name="gridLayout_2"> +- <property name="margin"> +- <number>0</number> +- </property> +- <property name="spacing"> +- <number>0</number> +- </property> +- <item row="0" column="0"> +- <widget class="QToolButton" name="gettingStartedSectButton"> +- <property name="enabled"> +- <bool>true</bool> +- </property> +- <property name="sizePolicy"> +- <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> +- <horstretch>0</horstretch> +- <verstretch>0</verstretch> +- </sizepolicy> +- </property> +- <property name="minimumSize"> +- <size> +- <width>0</width> +- <height>0</height> +- </size> +- </property> +- <property name="font"> +- <font> +- <pointsize>-1</pointsize> +- </font> +- </property> +- <property name="styleSheet"> +- <string notr="true"/> +- </property> +- <property name="text"> +- <string>Getting Started</string> +- </property> +- <property name="checkable"> +- <bool>true</bool> +- </property> +- <property name="checked"> +- <bool>true</bool> +- </property> +- <property name="autoExclusive"> +- <bool>false</bool> +- </property> +- </widget> +- </item> +- <item row="0" column="1"> +- <widget class="QToolButton" name="developSectButton"> +- <property name="sizePolicy"> +- <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> +- <horstretch>0</horstretch> +- <verstretch>0</verstretch> +- </sizepolicy> +- </property> +- <property name="minimumSize"> +- <size> +- <width>0</width> +- <height>0</height> +- </size> +- </property> +- <property name="font"> +- <font> +- <pointsize>-1</pointsize> +- </font> +- </property> +- <property name="text"> +- <string>Develop</string> +- </property> +- <property name="checkable"> +- <bool>true</bool> +- </property> +- <property name="autoExclusive"> +- <bool>false</bool> +- </property> +- </widget> +- </item> +- <item row="0" column="2"> +- <widget class="QToolButton" name="communitySectButton"> +- <property name="sizePolicy"> +- <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> +- <horstretch>0</horstretch> +- <verstretch>0</verstretch> +- </sizepolicy> +- </property> +- <property name="minimumSize"> +- <size> +- <width>0</width> +- <height>0</height> +- </size> +- </property> +- <property name="font"> +- <font> +- <pointsize>-1</pointsize> +- </font> +- </property> +- <property name="styleSheet"> +- <string notr="true"/> +- </property> +- <property name="text"> +- <string>Community</string> +- </property> +- <property name="checkable"> +- <bool>true</bool> +- </property> +- </widget> +- </item> +- <item row="0" column="3"> +- <spacer name="horizontalSpacer_2"> +- <property name="orientation"> +- <enum>Qt::Horizontal</enum> +- </property> +- <property name="sizeType"> +- <enum>QSizePolicy::Fixed</enum> +- </property> +- <property name="sizeHint" stdset="0"> +- <size> +- <width>5</width> +- <height>20</height> +- </size> +- </property> +- </spacer> +- </item> +- </layout> + </widget> + </item> + <item> +@@ -368,575 +251,7 @@ QToolButton:pressed { + <property name="currentIndex"> + <number>0</number> + </property> +- <widget class="QWidget" name="gettingStartedPage"> +- <layout class="QGridLayout" name="gridLayout_9"> +- <property name="leftMargin"> +- <number>18</number> +- </property> +- <property name="topMargin"> +- <number>18</number> +- </property> +- <property name="rightMargin"> +- <number>12</number> +- </property> +- <property name="bottomMargin"> +- <number>18</number> +- </property> +- <property name="spacing"> +- <number>24</number> +- </property> +- <item row="0" column="0" rowspan="2"> +- <widget class="QFrame" name="tutorialsFrame"> +- <property name="sizePolicy"> +- <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> +- <horstretch>0</horstretch> +- <verstretch>0</verstretch> +- </sizepolicy> +- </property> +- <property name="maximumSize"> +- <size> +- <width>400</width> +- <height>16777215</height> +- </size> +- </property> +- <property name="styleSheet"> +- <string/> +- </property> +- <layout class="QGridLayout" name="gridLayout_6"> +- <item row="0" column="0"> +- <widget class="QLabel" name="tutorialsTitleLabel"> +- <property name="sizePolicy"> +- <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> +- <horstretch>0</horstretch> +- <verstretch>0</verstretch> +- </sizepolicy> +- </property> +- <property name="alignment"> +- <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> +- </property> +- </widget> +- </item> +- <item row="1" column="0"> +- <widget class="Core::Utils::WelcomeModeTreeWidget" name="tutorialTreeWidget"> +- <property name="sizePolicy"> +- <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> +- <horstretch>0</horstretch> +- <verstretch>0</verstretch> +- </sizepolicy> +- </property> +- <property name="focusPolicy"> +- <enum>Qt::NoFocus</enum> +- </property> +- <property name="frameShape"> +- <enum>QFrame::NoFrame</enum> +- </property> +- <property name="selectionMode"> +- <enum>QAbstractItemView::NoSelection</enum> +- </property> +- <property name="verticalScrollMode"> +- <enum>QAbstractItemView::ScrollPerPixel</enum> +- </property> +- <property name="rootIsDecorated"> +- <bool>false</bool> +- </property> +- <property name="uniformRowHeights"> +- <bool>true</bool> +- </property> +- <property name="allColumnsShowFocus"> +- <bool>true</bool> +- </property> +- <property name="columnCount"> +- <number>2</number> +- </property> +- <attribute name="headerVisible"> +- <bool>false</bool> +- </attribute> +- <attribute name="headerDefaultSectionSize"> +- <number>24</number> +- </attribute> +- <attribute name="headerMinimumSectionSize"> +- <number>0</number> +- </attribute> +- <column> +- <property name="text"> +- <string notr="true">1</string> +- </property> +- </column> +- <column> +- <property name="text"> +- <string notr="true">2</string> +- </property> +- </column> +- </widget> +- </item> +- </layout> +- </widget> +- </item> +- <item row="0" column="1"> +- <widget class="QFrame" name="demosExamplesFrame"> +- <property name="sizePolicy"> +- <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> +- <horstretch>0</horstretch> +- <verstretch>0</verstretch> +- </sizepolicy> +- </property> +- <property name="maximumSize"> +- <size> +- <width>400</width> +- <height>16777215</height> +- </size> +- </property> +- <property name="styleSheet"> +- <string/> +- </property> +- <layout class="QGridLayout" name="gridLayout_8"> +- <property name="rightMargin"> +- <number>8</number> +- </property> +- <property name="horizontalSpacing"> +- <number>0</number> +- </property> +- <item row="0" column="0" colspan="4"> +- <widget class="QLabel" name="demoTitleLabel"> +- <property name="alignment"> +- <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> +- </property> +- </widget> +- </item> +- <item row="1" column="0"> +- <widget class="QComboBox" name="examplesComboBox"> +- <property name="enabled"> +- <bool>false</bool> +- </property> +- <property name="sizePolicy"> +- <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred"> +- <horstretch>0</horstretch> +- <verstretch>0</verstretch> +- </sizepolicy> +- </property> +- <item> +- <property name="text"> +- <string>Examples not installed</string> +- </property> +- </item> +- </widget> +- </item> +- <item row="1" column="2"> +- <widget class="QToolButton" name="openExampleButton"> +- <property name="enabled"> +- <bool>false</bool> +- </property> +- <property name="sizePolicy"> +- <sizepolicy hsizetype="Fixed" vsizetype="Preferred"> +- <horstretch>0</horstretch> +- <verstretch>0</verstretch> +- </sizepolicy> +- </property> +- <property name="text"> +- <string>Open</string> +- </property> +- </widget> +- </item> +- <item row="1" column="1"> +- <spacer name="horizontalSpacer"> +- <property name="orientation"> +- <enum>Qt::Horizontal</enum> +- </property> +- <property name="sizeType"> +- <enum>QSizePolicy::Fixed</enum> +- </property> +- <property name="sizeHint" stdset="0"> +- <size> +- <width>6</width> +- <height>6</height> +- </size> +- </property> +- </spacer> +- </item> +- </layout> +- </widget> +- </item> +- <item row="1" column="1"> +- <widget class="QFrame" name="didyouKnowFrame"> +- <property name="sizePolicy"> +- <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> +- <horstretch>0</horstretch> +- <verstretch>0</verstretch> +- </sizepolicy> +- </property> +- <property name="maximumSize"> +- <size> +- <width>400</width> +- <height>16777215</height> +- </size> +- </property> +- <property name="styleSheet"> +- <string/> +- </property> +- <layout class="QGridLayout" name="gridLayout_11"> +- <property name="rightMargin"> +- <number>9</number> +- </property> +- <item row="0" column="0"> +- <widget class="QLabel" name="didYouKnowTitleLabel"> +- <property name="sizePolicy"> +- <sizepolicy hsizetype="MinimumExpanding" vsizetype="Maximum"> +- <horstretch>0</horstretch> +- <verstretch>0</verstretch> +- </sizepolicy> +- </property> +- <property name="alignment"> +- <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> +- </property> +- </widget> +- </item> +- <item row="1" column="0" colspan="2"> +- <widget class="QTextBrowser" name="didYouKnowTextBrowser"> +- <property name="sizePolicy"> +- <sizepolicy hsizetype="Minimum" vsizetype="Preferred"> +- <horstretch>0</horstretch> +- <verstretch>0</verstretch> +- </sizepolicy> +- </property> +- <property name="frameShape"> +- <enum>QFrame::NoFrame</enum> +- </property> +- <property name="frameShadow"> +- <enum>QFrame::Plain</enum> +- </property> +- <property name="verticalScrollBarPolicy"> +- <enum>Qt::ScrollBarAlwaysOff</enum> +- </property> +- <property name="horizontalScrollBarPolicy"> +- <enum>Qt::ScrollBarAlwaysOff</enum> +- </property> +- <property name="openExternalLinks"> +- <bool>true</bool> +- </property> +- </widget> +- </item> +- <item row="0" column="1"> +- <layout class="QGridLayout" name="gridLayout_10"> +- <property name="spacing"> +- <number>0</number> +- </property> +- <item row="0" column="0" colspan="2"> +- <spacer name="verticalSpacer_4"> +- <property name="orientation"> +- <enum>Qt::Vertical</enum> +- </property> +- <property name="sizeType"> +- <enum>QSizePolicy::Preferred</enum> +- </property> +- <property name="sizeHint" stdset="0"> +- <size> +- <width>20</width> +- <height>2</height> +- </size> +- </property> +- </spacer> +- </item> +- <item row="1" column="0"> +- <widget class="QToolButton" name="prevTipBtn"> +- <property name="styleSheet"> +- <string notr="true">QToolButton{ +- border-right:solid 0 px; +- height:16px; +- width:12px; +-} +-</string> +- </property> +- <property name="text"> +- <string/> +- </property> +- <property name="icon"> +- <iconset resource="welcome.qrc"> +- <normaloff>:/welcome/images/arrow-left.png</normaloff>:/welcome/images/arrow-left.png</iconset> +- </property> +- <property name="arrowType"> +- <enum>Qt::NoArrow</enum> +- </property> +- </widget> +- </item> +- <item row="1" column="1"> +- <widget class="QToolButton" name="nextTipBtn"> +- <property name="styleSheet"> +- <string notr="true">QToolButton{ +- border-left:solid 0 px; +- height:16px; +- width:12px; +-} +-</string> +- </property> +- <property name="text"> +- <string/> +- </property> +- <property name="icon"> +- <iconset resource="welcome.qrc"> +- <normaloff>:/welcome/images/arrow-right.png</normaloff>:/welcome/images/arrow-right.png</iconset> +- </property> +- <property name="arrowType"> +- <enum>Qt::NoArrow</enum> +- </property> +- </widget> +- </item> +- <item row="2" column="0" colspan="2"> +- <spacer name="verticalSpacer_3"> +- <property name="orientation"> +- <enum>Qt::Vertical</enum> +- </property> +- <property name="sizeHint" stdset="0"> +- <size> +- <width>20</width> +- <height>2</height> +- </size> +- </property> +- </spacer> +- </item> +- </layout> +- </item> +- </layout> +- </widget> +- </item> +- </layout> +- </widget> +- <widget class="QWidget" name="developPage"> +- <layout class="QGridLayout" name="gridLayout_4"> +- <property name="margin"> +- <number>18</number> +- </property> +- <property name="spacing"> +- <number>24</number> +- </property> +- <item row="0" column="0"> +- <widget class="QFrame" name="recentSessionsFrame"> +- <property name="sizePolicy"> +- <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> +- <horstretch>0</horstretch> +- <verstretch>0</verstretch> +- </sizepolicy> +- </property> +- <property name="minimumSize"> +- <size> +- <width>270</width> +- <height>130</height> +- </size> +- </property> +- <property name="styleSheet"> +- <string/> +- </property> +- <layout class="QGridLayout" name="gridLayout_3"> +- <property name="horizontalSpacing"> +- <number>0</number> +- </property> +- <property name="verticalSpacing"> +- <number>3</number> +- </property> +- <item row="0" column="0" colspan="3"> +- <widget class="QLabel" name="recentSessionsTitleLabel"> +- <property name="sizePolicy"> +- <sizepolicy hsizetype="MinimumExpanding" vsizetype="Maximum"> +- <horstretch>0</horstretch> +- <verstretch>0</verstretch> +- </sizepolicy> +- </property> +- <property name="alignment"> +- <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> +- </property> +- </widget> +- </item> +- <item row="1" column="0" colspan="3"> +- <widget class="Core::Utils::WelcomeModeTreeWidget" name="sessTreeWidget"> +- <property name="sizePolicy"> +- <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> +- <horstretch>0</horstretch> +- <verstretch>0</verstretch> +- </sizepolicy> +- </property> +- <property name="focusPolicy"> +- <enum>Qt::NoFocus</enum> +- </property> +- <property name="frameShape"> +- <enum>QFrame::NoFrame</enum> +- </property> +- <property name="selectionMode"> +- <enum>QAbstractItemView::NoSelection</enum> +- </property> +- <property name="verticalScrollMode"> +- <enum>QAbstractItemView::ScrollPerPixel</enum> +- </property> +- <property name="rootIsDecorated"> +- <bool>false</bool> +- </property> +- <property name="uniformRowHeights"> +- <bool>true</bool> +- </property> +- <property name="allColumnsShowFocus"> +- <bool>true</bool> +- </property> +- <property name="columnCount"> +- <number>2</number> +- </property> +- <attribute name="headerVisible"> +- <bool>false</bool> +- </attribute> +- <attribute name="headerDefaultSectionSize"> +- <number>24</number> +- </attribute> +- <attribute name="headerMinimumSectionSize"> +- <number>0</number> +- </attribute> +- <column> +- <property name="text"> +- <string notr="true">1</string> +- </property> +- </column> +- <column> +- <property name="text"> +- <string notr="true">2</string> +- </property> +- </column> +- </widget> +- </item> +- <item row="3" column="0"> +- <widget class="QPushButton" name="manageSessionsButton"> +- <property name="focusPolicy"> +- <enum>Qt::TabFocus</enum> +- </property> +- <property name="text"> +- <string>Manage Sessions...</string> +- </property> +- </widget> +- </item> +- <item row="4" column="0"> +- <spacer name="verticalSpacer"> +- <property name="orientation"> +- <enum>Qt::Vertical</enum> +- </property> +- <property name="sizeHint" stdset="0"> +- <size> +- <width>20</width> +- <height>40</height> +- </size> +- </property> +- </spacer> +- </item> +- </layout> +- </widget> +- </item> +- <item row="0" column="2"> +- <widget class="QFrame" name="recentProjectsFrame"> +- <property name="styleSheet"> +- <string/> +- </property> +- <layout class="QGridLayout" name="gridLayout_5"> +- <property name="horizontalSpacing"> +- <number>0</number> +- </property> +- <property name="verticalSpacing"> +- <number>3</number> +- </property> +- <property name="rightMargin"> +- <number>9</number> +- </property> +- <item row="0" column="0" colspan="3"> +- <widget class="QLabel" name="projTitleLabel"> +- <property name="sizePolicy"> +- <sizepolicy hsizetype="MinimumExpanding" vsizetype="Maximum"> +- <horstretch>0</horstretch> +- <verstretch>0</verstretch> +- </sizepolicy> +- </property> +- <property name="alignment"> +- <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> +- </property> +- </widget> +- </item> +- <item row="1" column="0" colspan="3"> +- <widget class="Core::Utils::WelcomeModeTreeWidget" name="projTreeWidget"> +- <property name="sizePolicy"> +- <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> +- <horstretch>0</horstretch> +- <verstretch>0</verstretch> +- </sizepolicy> +- </property> +- <property name="focusPolicy"> +- <enum>Qt::NoFocus</enum> +- </property> +- <property name="frameShape"> +- <enum>QFrame::NoFrame</enum> +- </property> +- <property name="selectionMode"> +- <enum>QAbstractItemView::NoSelection</enum> +- </property> +- <property name="verticalScrollMode"> +- <enum>QAbstractItemView::ScrollPerPixel</enum> +- </property> +- <property name="rootIsDecorated"> +- <bool>false</bool> +- </property> +- <property name="uniformRowHeights"> +- <bool>true</bool> +- </property> +- <property name="allColumnsShowFocus"> +- <bool>true</bool> +- </property> +- <property name="columnCount"> +- <number>2</number> +- </property> +- <attribute name="headerVisible"> +- <bool>false</bool> +- </attribute> +- <attribute name="headerDefaultSectionSize"> +- <number>24</number> +- </attribute> +- <attribute name="headerMinimumSectionSize"> +- <number>0</number> +- </attribute> +- <column> +- <property name="text"> +- <string notr="true">1</string> +- </property> +- </column> +- <column> +- <property name="text"> +- <string notr="true">2</string> +- </property> +- </column> +- </widget> +- </item> +- <item row="3" column="0"> +- <widget class="QPushButton" name="createNewProjectButton"> +- <property name="focusPolicy"> +- <enum>Qt::TabFocus</enum> +- </property> +- <property name="text"> +- <string>Create New Project...</string> +- </property> +- <property name="flat"> +- <bool>true</bool> +- </property> +- </widget> +- </item> +- <item row="4" column="0"> +- <spacer name="verticalSpacer_2"> +- <property name="orientation"> +- <enum>Qt::Vertical</enum> +- </property> +- <property name="sizeHint" stdset="0"> +- <size> +- <width>20</width> +- <height>40</height> +- </size> +- </property> +- </spacer> +- </item> +- </layout> +- </widget> +- </item> +- </layout> +- </widget> +- <widget class="QWidget" name="communityPage"> ++ <widget class="QWidget" name="widget"> + <layout class="QGridLayout" name="gridLayout_7"> + <property name="margin"> + <number>18</number> +@@ -944,168 +259,6 @@ QToolButton:pressed { + <property name="spacing"> + <number>24</number> + </property> +- <item row="0" column="0"> +- <widget class="QFrame" name="labsFrame"> +- <property name="frameShape"> +- <enum>QFrame::NoFrame</enum> +- </property> +- <property name="frameShadow"> +- <enum>QFrame::Plain</enum> +- </property> +- <layout class="QVBoxLayout" name="verticalLayout_2"> +- <item> +- <widget class="QLabel" name="labsTitleLabel"> +- <property name="sizePolicy"> +- <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> +- <horstretch>0</horstretch> +- <verstretch>0</verstretch> +- </sizepolicy> +- </property> +- <property name="alignment"> +- <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> +- </property> +- </widget> +- </item> +- <item> +- <widget class="Core::Utils::WelcomeModeTreeWidget" name="newsTreeWidget"> +- <property name="sizePolicy"> +- <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> +- <horstretch>0</horstretch> +- <verstretch>0</verstretch> +- </sizepolicy> +- </property> +- <property name="minimumSize"> +- <size> +- <width>340</width> +- <height>0</height> +- </size> +- </property> +- <property name="focusPolicy"> +- <enum>Qt::NoFocus</enum> +- </property> +- <property name="frameShape"> +- <enum>QFrame::NoFrame</enum> +- </property> +- <property name="selectionMode"> +- <enum>QAbstractItemView::NoSelection</enum> +- </property> +- <property name="verticalScrollMode"> +- <enum>QAbstractItemView::ScrollPerPixel</enum> +- </property> +- <property name="rootIsDecorated"> +- <bool>false</bool> +- </property> +- <property name="uniformRowHeights"> +- <bool>true</bool> +- </property> +- <property name="allColumnsShowFocus"> +- <bool>true</bool> +- </property> +- <property name="columnCount"> +- <number>2</number> +- </property> +- <attribute name="headerVisible"> +- <bool>false</bool> +- </attribute> +- <attribute name="headerDefaultSectionSize"> +- <number>24</number> +- </attribute> +- <attribute name="headerMinimumSectionSize"> +- <number>0</number> +- </attribute> +- <column> +- <property name="text"> +- <string notr="true">1</string> +- </property> +- </column> +- <column> +- <property name="text"> +- <string notr="true">2</string> +- </property> +- </column> +- </widget> +- </item> +- </layout> +- </widget> +- </item> +- <item row="0" column="1"> +- <widget class="QFrame" name="sitesFrame"> +- <property name="frameShape"> +- <enum>QFrame::NoFrame</enum> +- </property> +- <property name="frameShadow"> +- <enum>QFrame::Plain</enum> +- </property> +- <layout class="QVBoxLayout" name="verticalLayout_3"> +- <item> +- <widget class="QLabel" name="sitesTitleLabel"> +- <property name="sizePolicy"> +- <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> +- <horstretch>0</horstretch> +- <verstretch>0</verstretch> +- </sizepolicy> +- </property> +- <property name="alignment"> +- <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> +- </property> +- </widget> +- </item> +- <item> +- <widget class="Core::Utils::WelcomeModeTreeWidget" name="sitesTreeWidget"> +- <property name="sizePolicy"> +- <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> +- <horstretch>0</horstretch> +- <verstretch>0</verstretch> +- </sizepolicy> +- </property> +- <property name="focusPolicy"> +- <enum>Qt::NoFocus</enum> +- </property> +- <property name="frameShape"> +- <enum>QFrame::NoFrame</enum> +- </property> +- <property name="selectionMode"> +- <enum>QAbstractItemView::NoSelection</enum> +- </property> +- <property name="verticalScrollMode"> +- <enum>QAbstractItemView::ScrollPerPixel</enum> +- </property> +- <property name="rootIsDecorated"> +- <bool>false</bool> +- </property> +- <property name="uniformRowHeights"> +- <bool>true</bool> +- </property> +- <property name="allColumnsShowFocus"> +- <bool>true</bool> +- </property> +- <property name="columnCount"> +- <number>2</number> +- </property> +- <attribute name="headerVisible"> +- <bool>false</bool> +- </attribute> +- <attribute name="headerDefaultSectionSize"> +- <number>24</number> +- </attribute> +- <attribute name="headerMinimumSectionSize"> +- <number>0</number> +- </attribute> +- <column> +- <property name="text"> +- <string notr="true">1</string> +- </property> +- </column> +- <column> +- <property name="text"> +- <string notr="true">2</string> +- </property> +- </column> +- </widget> +- </item> +- </layout> +- </widget> +- </item> + </layout> + </widget> + </widget> +@@ -1219,13 +372,6 @@ QToolButton:pressed { + </item> + </layout> + </widget> +- <customwidgets> +- <customwidget> +- <class>Core::Utils::WelcomeModeTreeWidget</class> +- <extends>QTreeWidget</extends> +- <header>utils/welcomemodetreewidget.h</header> +- </customwidget> +- </customwidgets> + <resources> + <include location="welcome.qrc"/> + </resources> +diff --git a/src/plugins/welcome/welcomeplugin.cpp b/src/plugins/welcome/welcomeplugin.cpp +index e9743a9..e7906f1 100644 +--- a/src/plugins/welcome/welcomeplugin.cpp ++++ b/src/plugins/welcome/welcomeplugin.cpp +@@ -31,6 +31,8 @@ + + #include "welcomemode.h" + ++#include "communitywelcomepage.h" ++ + #include <coreplugin/actionmanager/actionmanager.h> + #include <coreplugin/basemode.h> + #include <coreplugin/coreconstants.h> +@@ -45,11 +47,10 @@ + #include <QtGui/QMessageBox> + #include <QtGui/QPushButton> + +-using namespace Welcome; +- ++using namespace Welcome::Internal; + + WelcomePlugin::WelcomePlugin() +- : m_welcomeMode(0) ++ : m_welcomeMode(0), m_communityWelcomePage(0) + { + } + +@@ -59,6 +60,10 @@ WelcomePlugin::~WelcomePlugin() + removeObject(m_welcomeMode); + delete m_welcomeMode; + } ++ if (m_communityWelcomePage) { ++ removeObject(m_communityWelcomePage); ++ delete m_communityWelcomePage; ++ } + } + + /*! Initializes the plugin. Returns true on success. +@@ -72,6 +77,9 @@ bool WelcomePlugin::initialize(const QStringList &arguments, QString *error_mess + Q_UNUSED(arguments) + Q_UNUSED(error_message) + ++ m_communityWelcomePage = new Internal::CommunityWelcomePage; ++ addObject(m_communityWelcomePage); ++ + m_welcomeMode = new WelcomeMode; + addObject(m_welcomeMode); + +@@ -91,6 +99,7 @@ bool WelcomePlugin::initialize(const QStringList &arguments, QString *error_mess + */ + void WelcomePlugin::extensionsInitialized() + { ++ m_welcomeMode->initPlugins(); + Core::ModeManager::instance()->activateMode(m_welcomeMode->uniqueModeName()); + } + +diff --git a/src/plugins/welcome/welcomeplugin.h b/src/plugins/welcome/welcomeplugin.h +index 970ec39..54275b0 100644 +--- a/src/plugins/welcome/welcomeplugin.h ++++ b/src/plugins/welcome/welcomeplugin.h +@@ -36,6 +36,9 @@ namespace Welcome { + + class WelcomeMode; + ++namespace Internal { ++class CommunityWelcomePage; ++ + class WelcomePlugin + : public ExtensionSystem::IPlugin + { +@@ -51,8 +54,10 @@ public: + + private: + WelcomeMode *m_welcomeMode; ++ Internal::CommunityWelcomePage *m_communityWelcomePage; + }; + + } // namespace Welcome ++} // namespace Internal + + #endif // WELCOMEPLUGIN_H +-- +1.6.3.msysgit.0 + diff --git a/src/libs/extensionsystem/extensionsystem.pro b/src/libs/extensionsystem/extensionsystem.pro index 81f3bc8fc79284e905bd1ff1171ad66fc82d007a..b5fed62800b68341cfb6f7ca712bc162d37fc3e0 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 0000000000000000000000000000000000000000..1297037988940c2a41e5c34d990e1d975b99afb9 --- /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 0000000000000000000000000000000000000000..e4e5e6f1d65c1bb9f0b58f263c840f3d018af409 --- /dev/null +++ b/src/libs/extensionsystem/iwelcomepage.h @@ -0,0 +1,31 @@ +#ifndef IWELCOMEPAGE_H +#define IWELCOMEPAGE_H + + +#include "extensionsystem_global.h" + +#include <QObject> + +namespace ExtensionSystem { + +class IWelcomePagePrivate; + +class EXTENSIONSYSTEM_EXPORT IWelcomePage : public QObject +{ + Q_OBJECT + +public: + IWelcomePage(); + + virtual QWidget *page() = 0; + virtual QString title() const = 0; + virtual int priority() const { return 0; } + +private: + // not used atm + IWelcomePagePrivate *m_d; +}; + +} + +#endif // IWELCOMEPAGE_H diff --git a/src/libs/utils/welcomemodetreewidget.cpp b/src/libs/utils/welcomemodetreewidget.cpp index 26d55a3bd9fece0dfee4835c9c2ce996bb6fc2ff..ff68cccdf26c3435e9924b848df8dcd356137b43 100644 --- a/src/libs/utils/welcomemodetreewidget.cpp +++ b/src/libs/utils/welcomemodetreewidget.cpp @@ -36,6 +36,18 @@ namespace Core { namespace Utils { +void WelcomeModeLabel::setStyledText(const QString &text) +{ + QString rc = QLatin1String( + "<html><head><style type=\"text/css\">p, li { white-space: pre-wrap; }</style></head>" + "<body style=\" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;\">" + "<p style=\" margin-top:16px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">" + "<span style=\" font-size:x-large; color:#555555;\">"); + rc += text; + rc += QLatin1String("</span></p><hr/></body></html>"); + setText(rc); +} + struct WelcomeModeTreeWidgetPrivate { WelcomeModeTreeWidgetPrivate() {} @@ -48,6 +60,8 @@ WelcomeModeTreeWidget::WelcomeModeTreeWidget(QWidget *parent) : m_d->bullet = QIcon(QLatin1String(":/welcome/images/list_bullet_arrow.png")); connect(this, SIGNAL(itemClicked(QTreeWidgetItem *, int)), SLOT(slotItemClicked(QTreeWidgetItem *))); + + viewport()->setAutoFillBackground(false); } WelcomeModeTreeWidget::~WelcomeModeTreeWidget() diff --git a/src/libs/utils/welcomemodetreewidget.h b/src/libs/utils/welcomemodetreewidget.h index d26bc22735414500be7b44fa9daea3532732eaaf..82376132379402f2f9a6da184280068bf3295888 100644 --- a/src/libs/utils/welcomemodetreewidget.h +++ b/src/libs/utils/welcomemodetreewidget.h @@ -33,11 +33,22 @@ #include "utils_global.h" #include <QtGui/QTreeWidget> +#include <QtGui/QLabel> namespace Core { namespace Utils { struct WelcomeModeTreeWidgetPrivate; +struct WelcomeModeLabelPrivate; + +class QTCREATOR_UTILS_EXPORT WelcomeModeLabel : public QLabel +{ + Q_OBJECT +public: + WelcomeModeLabel(QWidget *parent) : QLabel(parent) {}; + void setStyledText(const QString &text); + WelcomeModeLabelPrivate *m_d; +}; class QTCREATOR_UTILS_EXPORT WelcomeModeTreeWidget : public QTreeWidget { diff --git a/src/plugins/coreplugin/coreplugin.h b/src/plugins/coreplugin/coreplugin.h index 04e5be49b473dd5b79b0b150c09eb7cf662c1f3f..ce487fbc8dcad5f05c31b0dfc10ef43fd07ab8b6 100644 --- a/src/plugins/coreplugin/coreplugin.h +++ b/src/plugins/coreplugin/coreplugin.h @@ -32,10 +32,6 @@ #include <extensionsystem/iplugin.h> -namespace Core { - class IMode; -} - namespace Core { namespace Internal { @@ -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 d7ccc070fdcb4a82bd2187d2128b99750ce35abe..29f1b469610e06a42d032f837120afd170dc9939 100644 --- a/src/plugins/help/Help.pluginspec +++ b/src/plugins/help/Help.pluginspec @@ -22,6 +22,5 @@ will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.</license> <dependency name="Core" version="1.2.80"/> <dependency name="Find" version="1.2.80"/> <dependency name="QuickOpen" version="1.2.80"/> - <dependency name="Welcome" version="1.2.80"/> </dependencyList> </plugin> diff --git a/src/plugins/help/help.pro b/src/plugins/help/help.pro index 1f5ec5585ea406961f5235b77c2d37c9a3f3caca..b733a1fa70de08e961cb26c9d0f4a90c01a612b0 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 f6e8db8fb33d7374bfd8f09df026510f6689460b..2ff11c8072c02e29fb10cd245ad25bd20d9a5c8f 100644 --- a/src/plugins/help/helpplugin.cpp +++ b/src/plugins/help/helpplugin.cpp @@ -87,8 +87,8 @@ using namespace Help; using namespace Help::Internal; -HelpManager::HelpManager(QHelpEngine *helpEngine) - : m_helpEngine(helpEngine) +HelpManager::HelpManager(Internal::HelpPlugin* plugin) + : m_plugin(plugin) { } @@ -96,7 +96,7 @@ void HelpManager::registerDocumentation(const QStringList &fileNames) { bool needsSetup = false; { - QHelpEngineCore hc(m_helpEngine->collectionFile()); + QHelpEngineCore hc(m_plugin->helpEngine()->collectionFile()); if (!hc.setupData()) qWarning() << "Could not initialize help engine:" << hc.error(); foreach (const QString &fileName, fileNames) { @@ -113,7 +113,17 @@ void HelpManager::registerDocumentation(const QStringList &fileNames) } } if (needsSetup) - m_helpEngine->setupData(); + m_plugin->helpEngine()->setupData(); +} + +void HelpManager::openHelpPage(const QString& url) +{ + m_plugin->openHelpPage(url); +} + +void HelpManager::openContextHelpPage(const QString& url) +{ + m_plugin->openContextHelpPage(url); } HelpPlugin::HelpPlugin() : @@ -180,7 +190,7 @@ bool HelpPlugin::initialize(const QStringList &arguments, QString *error) connect(m_helpEngine, SIGNAL(setupFinished()), this, SLOT(updateFilterComboBox())); - addAutoReleasedObject(new HelpManager(m_helpEngine)); + addAutoReleasedObject(new HelpManager(this)); m_filterSettingsPage = new FilterSettingsPage(m_helpEngine); addAutoReleasedObject(m_filterSettingsPage); @@ -430,6 +440,11 @@ bool HelpPlugin::initialize(const QStringList &arguments, QString *error) return true; } +QHelpEngine* HelpPlugin::helpEngine() const +{ + return m_helpEngine; +} + void HelpPlugin::createRightPaneSideBar() { QAction *switchToHelpMode = new QAction("Go to Help Mode", this); @@ -610,17 +625,6 @@ void HelpPlugin::extensionsInitialized() updateFilterComboBox(); m_bookmarkManager->setupBookmarkModels(); - using namespace Core::Internal; - using namespace Core::Constants; - Welcome::WelcomeMode *welcomeMode = - qobject_cast<Welcome::WelcomeMode*>(m_core->modeManager()->mode(MODE_WELCOME)); - if (welcomeMode) { - connect(welcomeMode, SIGNAL(openHelpPage(QString)), this, - SLOT(openHelpPage(QString))); - connect(welcomeMode, SIGNAL(openContextHelpPage(QString)), this, - SLOT(openContextHelpPage(QString))); - } - #if !defined(QT_NO_WEBKIT) QWebSettings* webSettings = QWebSettings::globalSettings(); QFont font(webSettings->fontFamily(QWebSettings::StandardFont), diff --git a/src/plugins/help/helpplugin.h b/src/plugins/help/helpplugin.h index 6ab78cfc34177f3bf3cbba22fce7fb2e77b24e7c..10cf1fdf2ffd704b71307fec0c82233ab1132ef1 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 6ef52c1591c1659263fe60320db8d071b8de3587..b8ae5ecafaccc396bb91b80812ebcb408b6c9949 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 6a66cfe1b88d29c04450e72b6a055fd0991e9628..8b5a7c317a7623c63c5280808a1743454e03b8c5 100644 --- a/src/plugins/projectexplorer/ProjectExplorer.pluginspec +++ b/src/plugins/projectexplorer/ProjectExplorer.pluginspec @@ -23,6 +23,5 @@ will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.</license> <dependency name="Find" version="1.2.80"/> <dependency name="QuickOpen" version="1.2.80"/> <dependency name="TextEditor" version="1.2.80"/> - <dependency name="Welcome" version="1.2.80"/> </dependencyList> </plugin> diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp index f10b628aadd64e636167b9a542a6ef966bdd0904..c9a692c3e71819bf9ec46ff2e538cfc8e92e4e63 100644 --- a/src/plugins/projectexplorer/projectexplorer.cpp +++ b/src/plugins/projectexplorer/projectexplorer.cpp @@ -57,6 +57,8 @@ #include "sessiondialog.h" #include "buildparserfactory.h" #include "projectexplorersettingspage.h" +#include "projectwelcomepage.h" +#include "projectwelcomepagewidget.h" #include <coreplugin/basemode.h> #include <coreplugin/coreconstants.h> @@ -140,6 +142,7 @@ ProjectExplorerPlugin::ProjectExplorerPlugin() ProjectExplorerPlugin::~ProjectExplorerPlugin() { + removeObject(m_welcomePlugin); removeObject(this); } @@ -156,6 +159,11 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er Core::ICore *core = Core::ICore::instance(); Core::ActionManager *am = core->actionManager(); + m_welcomePlugin = new ProjectWelcomePage; + m_welcomePage = qobject_cast<Internal::ProjectWelcomePageWidget*>(m_welcomePlugin->page()); + Q_ASSERT(m_welcomePage); + connect(m_welcomePage, SIGNAL(manageSessions()), this, SLOT(showSessionManager())); + addObject(m_welcomePlugin); addObject(this); connect(core->fileManager(), SIGNAL(currentFileChanged(QString)), @@ -646,10 +654,6 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er m_projectExplorerSettings.showCompilerOutput = s->value("ProjectExplorer/Settings/ShowCompilerOutput", false).toBool(); } - if (Welcome::WelcomeMode *welcomeMode = qobject_cast<Welcome::WelcomeMode*> - (Core::ICore::instance()->modeManager()->mode(Core::Constants::MODE_WELCOME))) { - connect(welcomeMode, SIGNAL(manageSessions()), this, SLOT(showSessionManager())); - } connect(m_sessionManagerAction, SIGNAL(triggered()), this, SLOT(showSessionManager())); connect(m_newAction, SIGNAL(triggered()), this, SLOT(newProject())); #if 0 @@ -685,6 +689,8 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er this, SLOT(determineSessionToRestoreAtStartup())); connect(Core::ICore::instance(), SIGNAL(coreOpened()), this, SLOT(restoreSession())); + updateWelcomePage(); + return true; } @@ -835,9 +841,7 @@ void ProjectExplorerPlugin::showSessionManager() Core::ModeManager *modeManager = Core::ModeManager::instance(); Core::IMode *welcomeMode = modeManager->mode(Core::Constants::MODE_WELCOME); if (modeManager->currentMode() == welcomeMode) - { - updateWelcomePage(qobject_cast<Welcome::WelcomeMode*>(welcomeMode)); - } + updateWelcomePage(); } void ProjectExplorerPlugin::setStartupProject(Project *project) @@ -1019,20 +1023,19 @@ Project *ProjectExplorerPlugin::startupProject() const } // update welcome page -void ProjectExplorerPlugin::updateWelcomePage(Welcome::WelcomeMode *welcomeMode) +void ProjectExplorerPlugin::updateWelcomePage() { - Welcome::WelcomeMode::WelcomePageData welcomePageData; + ProjectWelcomePageWidget::WelcomePageData welcomePageData; welcomePageData.sessionList = m_session->sessions(); welcomePageData.activeSession = m_session->activeSession(); welcomePageData.previousSession = m_session->lastSession(); welcomePageData.projectList = m_recentProjects; - welcomeMode->updateWelcomePage(welcomePageData); + m_welcomePage->updateWelcomePage(welcomePageData); } -void ProjectExplorerPlugin::currentModeChanged(Core::IMode *mode) +void ProjectExplorerPlugin::currentModeChanged(Core::IMode *) { - if (Welcome::WelcomeMode *welcomeMode = qobject_cast<Welcome::WelcomeMode*>(mode)) - updateWelcomePage(welcomeMode); + updateWelcomePage(); } void ProjectExplorerPlugin::determineSessionToRestoreAtStartup() @@ -1080,11 +1083,8 @@ void ProjectExplorerPlugin::restoreSession() // update welcome page Core::ModeManager *modeManager = Core::ModeManager::instance(); connect(modeManager, SIGNAL(currentModeChanged(Core::IMode*)), this, SLOT(currentModeChanged(Core::IMode*))); - if (Welcome::WelcomeMode *welcomeMode = qobject_cast<Welcome::WelcomeMode*>(modeManager->mode(Core::Constants::MODE_WELCOME))) { - updateWelcomePage(welcomeMode); - connect(welcomeMode, SIGNAL(requestSession(QString)), this, SLOT(loadSession(QString))); - connect(welcomeMode, SIGNAL(requestProject(QString)), this, SLOT(loadProject(QString))); - } + connect(m_welcomePage, SIGNAL(requestSession(QString)), this, SLOT(loadSession(QString))); + connect(m_welcomePage, SIGNAL(requestProject(QString)), this, SLOT(loadProject(QString))); Core::ICore::instance()->openFiles(arguments); updateActions(); diff --git a/src/plugins/projectexplorer/projectexplorer.h b/src/plugins/projectexplorer/projectexplorer.h index 0f781eac882cf7b87b82a21abafdc2bc8446c32a..c3251c0e37c389f29da7aadf606cb58ff75af1c1 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 ffb0b081efc5df4cdb991fb069baf131fc96f679..9e733990dd95bb8ea2cf03bc8446c317e02a3057 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 ecbb7a4b976eacaa587f99cd39f5ed64a42f8d4b..674c8bbb362f8727a5284f915e046a8db44f538a 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 0000000000000000000000000000000000000000..ad1c3e97c4703d316bef458708c08e17e5fe7a3d --- /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 0000000000000000000000000000000000000000..6185dd57caf4fee6ef3ecfb5df66233e3cf77572 --- /dev/null +++ b/src/plugins/projectexplorer/projectwelcomepage.h @@ -0,0 +1,58 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** Commercial Usage +** +** Licensees holding valid Qt Commercial licenses may use this file in +** accordance with the Qt Commercial License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Nokia. +** +** GNU Lesser General Public License Usage +** +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** +**************************************************************************/ + +#ifndef PROJECTWELCOMEPAGE_H +#define PROJECTWELCOMEPAGE_H + +#include <extensionsystem/iwelcomepage.h> + +namespace ProjectExplorer { +namespace Internal { + +class ProjectWelcomePageWidget; + +class ProjectWelcomePage : public ExtensionSystem::IWelcomePage +{ + Q_OBJECT +public: + ProjectWelcomePage(); + + QWidget *page(); + QString title() const { return tr("Develop"); } + int priority() const { return 20; } +private: + ProjectWelcomePageWidget *m_page; + + +}; + +} // namespace Internal +} // namespace ProjectExplorer + +#endif // PROJECTWELCOMEPAGE_H diff --git a/src/plugins/projectexplorer/projectwelcomepagewidget.cpp b/src/plugins/projectexplorer/projectwelcomepagewidget.cpp new file mode 100644 index 0000000000000000000000000000000000000000..fe824a71ad79a43c31550caf4226634bb6b8d5e4 --- /dev/null +++ b/src/plugins/projectexplorer/projectwelcomepagewidget.cpp @@ -0,0 +1,157 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** Commercial Usage +** +** Licensees holding valid Qt Commercial licenses may use this file in +** accordance with the Qt Commercial License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Nokia. +** +** GNU Lesser General Public License Usage +** +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** +**************************************************************************/ + +#include "projectwelcomepagewidget.h" +#include "ui_projectwelcomepagewidget.h" + +#include <coreplugin/coreconstants.h> +#include <coreplugin/uniqueidmanager.h> +#include <coreplugin/modemanager.h> +#include <coreplugin/icore.h> +#include <coreplugin/dialogs/iwizard.h> + +#include <QtCore/QFileInfo> +#include <QtCore/QDir> +#include <QtCore/QPair> +#include <QtGui/QLabel> +#include <QtGui/QTreeWidgetItem> + +#include <QtCore/QDebug> + +using namespace ProjectExplorer::Internal; + +bool ProjectWelcomePageWidget::WelcomePageData::operator==(const WelcomePageData &rhs) const +{ + return previousSession == rhs.previousSession + && activeSession == rhs.activeSession + && sessionList == rhs.sessionList + && projectList == rhs.projectList; +} + +bool ProjectWelcomePageWidget::WelcomePageData::operator!=(const WelcomePageData &rhs) const +{ + return previousSession != rhs.previousSession + || activeSession != rhs.activeSession + || sessionList != rhs.sessionList + || projectList != rhs.projectList; +} + +QDebug operator<<(QDebug dgb, const ProjectWelcomePageWidget::WelcomePageData &d) +{ + dgb.nospace() << "PreviousSession=" << d.previousSession + << " activeSession=" << d.activeSession + << " sessionList=" << d.sessionList + << " projectList=" << d.projectList; + return dgb; +} + +ProjectWelcomePageWidget::ProjectWelcomePageWidget(QWidget *parent) : + QWidget(parent), + ui(new Ui::ProjectWelcomePageWidget) +{ + ui->setupUi(this); + ui->projTitleLabel->setStyledText(tr("Open Recent Project")); + ui->recentSessionsTitleLabel->setStyledText(tr("Resume Session")); + updateWelcomePage(WelcomePageData()); + + connect(ui->sessTreeWidget, SIGNAL(activated(QString)), SLOT(slotSessionClicked(QString))); + connect(ui->projTreeWidget, SIGNAL(activated(QString)), SLOT(slotProjectClicked(QString))); + connect(ui->createNewProjectButton, SIGNAL(clicked()), SLOT(slotCreateNewProject())); + connect(ui->manageSessionsButton, SIGNAL(clicked()), SIGNAL(manageSessions())); + +} + +ProjectWelcomePageWidget::~ProjectWelcomePageWidget() +{ + delete ui; +} + +void ProjectWelcomePageWidget::updateWelcomePage(const WelcomePageData &welcomePageData) +{ + // Update only if data are modified + if (welcomePageData == lastData) + return; + lastData = welcomePageData; + + setUpdatesEnabled(false); + ui->sessTreeWidget->clear(); + ui->projTreeWidget->clear(); + + if (welcomePageData.sessionList.count() > 0) { + foreach (const QString &s, welcomePageData.sessionList) { + QString str = s; + if (s == welcomePageData.previousSession) + str = tr("%1 (last session)").arg(s); + ui->sessTreeWidget->addItem(str, s); + } + ui->sessTreeWidget->updateGeometry(); + ui->sessTreeWidget->show(); + } else { + ui->sessTreeWidget->hide(); + } + + typedef QPair<QString, QString> QStringPair; + if (welcomePageData.projectList.count() > 0) { + foreach (const QStringPair &it, welcomePageData.projectList) { + QTreeWidgetItem *item = ui->projTreeWidget->addItem(it.second, it.first); + const QFileInfo fi(it.first); + item->setToolTip(1, QDir::toNativeSeparators(fi.absolutePath())); + } + } else { + ui->projTreeWidget->hide(); + } + ui->projTreeWidget->updateGeometry(); + setUpdatesEnabled(true); +} + +void ProjectWelcomePageWidget::activateEditMode() +{ + Core::ModeManager *modeManager = Core::ModeManager::instance(); + if (modeManager->currentMode() == modeManager->mode(Core::Constants::MODE_WELCOME)) + modeManager->activateMode(Core::Constants::MODE_EDIT); +} + + +void ProjectWelcomePageWidget::slotSessionClicked(const QString &data) +{ + emit requestSession(data); + activateEditMode(); +} + +void ProjectWelcomePageWidget::slotProjectClicked(const QString &data) +{ + emit requestProject(data); + activateEditMode(); +} + +void ProjectWelcomePageWidget::slotCreateNewProject() +{ + Core::ICore::instance()->showNewItemDialog(tr("New Project..."), + Core::IWizard::wizardsOfKind(Core::IWizard::ProjectWizard)); +} diff --git a/src/plugins/projectexplorer/projectwelcomepagewidget.h b/src/plugins/projectexplorer/projectwelcomepagewidget.h new file mode 100644 index 0000000000000000000000000000000000000000..ac94986c18e6fffcb610c26853a6a8281f5dc029 --- /dev/null +++ b/src/plugins/projectexplorer/projectwelcomepagewidget.h @@ -0,0 +1,81 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** Commercial Usage +** +** Licensees holding valid Qt Commercial licenses may use this file in +** accordance with the Qt Commercial License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Nokia. +** +** GNU Lesser General Public License Usage +** +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** +**************************************************************************/ + +#ifndef PROJECTWELCOMEPAGEWIDGET_H +#define PROJECTWELCOMEPAGEWIDGET_H + +#include <QtGui/QWidget> + + +namespace ProjectExplorer { + namespace Internal { + + +namespace Ui { + class ProjectWelcomePageWidget; +} + +class ProjectWelcomePageWidget : public QWidget { + Q_OBJECT +public: + ProjectWelcomePageWidget(QWidget *parent = 0); + ~ProjectWelcomePageWidget(); + + struct WelcomePageData{ + bool operator==(const WelcomePageData &rhs) const; + bool operator!=(const WelcomePageData &rhs) const; + + QString previousSession; + QString activeSession; + QStringList sessionList; + QList<QPair<QString, QString> > projectList; // pair of filename, displayname + }; + + void updateWelcomePage(const WelcomePageData &welcomePageData); + +signals: + void requestProject(const QString &project); + void requestSession(const QString &session); + void manageSessions(); + +private slots: + void slotSessionClicked(const QString &data); + void slotProjectClicked(const QString &data); + void slotCreateNewProject(); + +private: + void activateEditMode(); + Ui::ProjectWelcomePageWidget *ui; + WelcomePageData lastData; +}; + +} +} + +#endif // PROJECTWELCOMEPAGEWIDGET_H diff --git a/src/plugins/projectexplorer/projectwelcomepagewidget.ui b/src/plugins/projectexplorer/projectwelcomepagewidget.ui new file mode 100644 index 0000000000000000000000000000000000000000..38558d441bd95fce838aa8b118916cc108403b81 --- /dev/null +++ b/src/plugins/projectexplorer/projectwelcomepagewidget.ui @@ -0,0 +1,259 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>ProjectExplorer::Internal::ProjectWelcomePageWidget</class> + <widget class="QWidget" name="ProjectExplorer::Internal::ProjectWelcomePageWidget"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>667</width> + <height>365</height> + </rect> + </property> + <property name="windowTitle"> + <string>Form</string> + </property> + <layout class="QHBoxLayout" name="horizontalLayout"> + <item> + <widget class="QFrame" name="recentSessionsFrame"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>270</width> + <height>130</height> + </size> + </property> + <property name="styleSheet"> + <string/> + </property> + <layout class="QGridLayout" name="gridLayout_3"> + <property name="horizontalSpacing"> + <number>0</number> + </property> + <property name="verticalSpacing"> + <number>3</number> + </property> + <item row="0" column="0" colspan="3"> + <widget class="Core::Utils::WelcomeModeLabel" name="recentSessionsTitleLabel"> + <property name="sizePolicy"> + <sizepolicy hsizetype="MinimumExpanding" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="alignment"> + <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> + </property> + </widget> + </item> + <item row="1" column="0" colspan="3"> + <widget class="Core::Utils::WelcomeModeTreeWidget" name="sessTreeWidget"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="focusPolicy"> + <enum>Qt::NoFocus</enum> + </property> + <property name="frameShape"> + <enum>QFrame::NoFrame</enum> + </property> + <property name="selectionMode"> + <enum>QAbstractItemView::NoSelection</enum> + </property> + <property name="verticalScrollMode"> + <enum>QAbstractItemView::ScrollPerPixel</enum> + </property> + <property name="rootIsDecorated"> + <bool>false</bool> + </property> + <property name="uniformRowHeights"> + <bool>true</bool> + </property> + <property name="allColumnsShowFocus"> + <bool>true</bool> + </property> + <property name="columnCount"> + <number>2</number> + </property> + <attribute name="headerVisible"> + <bool>false</bool> + </attribute> + <attribute name="headerDefaultSectionSize"> + <number>24</number> + </attribute> + <attribute name="headerMinimumSectionSize"> + <number>0</number> + </attribute> + <column> + <property name="text"> + <string notr="true">1</string> + </property> + </column> + <column> + <property name="text"> + <string notr="true">2</string> + </property> + </column> + </widget> + </item> + <item row="3" column="0"> + <widget class="QPushButton" name="manageSessionsButton"> + <property name="focusPolicy"> + <enum>Qt::TabFocus</enum> + </property> + <property name="text"> + <string>Manage Sessions...</string> + </property> + </widget> + </item> + <item row="4" column="0"> + <spacer name="verticalSpacer"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>40</height> + </size> + </property> + </spacer> + </item> + </layout> + </widget> + </item> + <item> + <widget class="QFrame" name="recentProjectsFrame"> + <property name="styleSheet"> + <string/> + </property> + <layout class="QGridLayout" name="gridLayout_5"> + <property name="horizontalSpacing"> + <number>0</number> + </property> + <property name="verticalSpacing"> + <number>3</number> + </property> + <property name="rightMargin"> + <number>9</number> + </property> + <item row="0" column="0" colspan="3"> + <widget class="Core::Utils::WelcomeModeLabel" name="projTitleLabel"> + <property name="sizePolicy"> + <sizepolicy hsizetype="MinimumExpanding" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="alignment"> + <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> + </property> + </widget> + </item> + <item row="1" column="0" colspan="3"> + <widget class="Core::Utils::WelcomeModeTreeWidget" name="projTreeWidget"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="focusPolicy"> + <enum>Qt::NoFocus</enum> + </property> + <property name="frameShape"> + <enum>QFrame::NoFrame</enum> + </property> + <property name="selectionMode"> + <enum>QAbstractItemView::NoSelection</enum> + </property> + <property name="verticalScrollMode"> + <enum>QAbstractItemView::ScrollPerPixel</enum> + </property> + <property name="rootIsDecorated"> + <bool>false</bool> + </property> + <property name="uniformRowHeights"> + <bool>true</bool> + </property> + <property name="allColumnsShowFocus"> + <bool>true</bool> + </property> + <property name="columnCount"> + <number>2</number> + </property> + <attribute name="headerVisible"> + <bool>false</bool> + </attribute> + <attribute name="headerDefaultSectionSize"> + <number>24</number> + </attribute> + <attribute name="headerMinimumSectionSize"> + <number>0</number> + </attribute> + <column> + <property name="text"> + <string notr="true">1</string> + </property> + </column> + <column> + <property name="text"> + <string notr="true">2</string> + </property> + </column> + </widget> + </item> + <item row="3" column="0"> + <widget class="QPushButton" name="createNewProjectButton"> + <property name="focusPolicy"> + <enum>Qt::TabFocus</enum> + </property> + <property name="text"> + <string>Create New Project...</string> + </property> + <property name="flat"> + <bool>false</bool> + </property> + </widget> + </item> + <item row="4" column="0"> + <spacer name="verticalSpacer_2"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>40</height> + </size> + </property> + </spacer> + </item> + </layout> + </widget> + </item> + </layout> + </widget> + <customwidgets> + <customwidget> + <class>Core::Utils::WelcomeModeTreeWidget</class> + <extends>QTreeWidget</extends> + <header>utils/welcomemodetreewidget.h</header> + </customwidget> + <customwidget> + <class>Core::Utils::WelcomeModeLabel</class> + <extends>QLabel</extends> + <header>utils/welcomemodetreewidget.h</header> + </customwidget> + </customwidgets> + <resources/> + <connections/> +</ui> diff --git a/src/plugins/projectexplorer/projectwelcomeplugin.ui b/src/plugins/projectexplorer/projectwelcomeplugin.ui new file mode 100644 index 0000000000000000000000000000000000000000..9ad7e162b0a16d0d069a5d29b6710198edda57a3 --- /dev/null +++ b/src/plugins/projectexplorer/projectwelcomeplugin.ui @@ -0,0 +1,21 @@ +<ui version="4.0" > + <author/> + <comment/> + <exportmacro/> + <class>ProjectWelcomePage</class> + <widget class="QWidget" name="ProjectWelcomePage" > + <property name="geometry" > + <rect> + <x>0</x> + <y>0</y> + <width>400</width> + <height>300</height> + </rect> + </property> + <property name="windowTitle" > + <string>Form</string> + </property> + </widget> + <pixmapfunction/> + <connections/> +</ui> diff --git a/src/plugins/qt4projectmanager/Qt4ProjectManager.pluginspec b/src/plugins/qt4projectmanager/Qt4ProjectManager.pluginspec index 3b515bd60e5d0608d4ecb3cbba608c2e934f560f..c4b8d4455f451e09e642f749f06816878464c875 100644 --- a/src/plugins/qt4projectmanager/Qt4ProjectManager.pluginspec +++ b/src/plugins/qt4projectmanager/Qt4ProjectManager.pluginspec @@ -25,6 +25,5 @@ will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.</license> <dependency name="CppEditor" version="1.2.80"/> <dependency name="Help" version="1.2.80"/> <dependency name="Designer" version="1.2.80"/> - <dependency name="Welcome" version="1.2.80"/> </dependencyList> </plugin> diff --git a/src/plugins/qt4projectmanager/gettingstartedwelcomepage.cpp b/src/plugins/qt4projectmanager/gettingstartedwelcomepage.cpp new file mode 100644 index 0000000000000000000000000000000000000000..379d45902111c2c9b67964c98555d10983519f72 --- /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 0000000000000000000000000000000000000000..2534f7ae0ca19edd6a60adb14f7db98534bc9d2f --- /dev/null +++ b/src/plugins/qt4projectmanager/gettingstartedwelcomepage.h @@ -0,0 +1,56 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** Commercial Usage +** +** Licensees holding valid Qt Commercial licenses may use this file in +** accordance with the Qt Commercial License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Nokia. +** +** GNU Lesser General Public License Usage +** +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** +**************************************************************************/ + +#ifndef GETTINGSTARTEDWELCOMEPLUGIN_H +#define GETTINGSTARTEDWELCOMEPLUGIN_H + +#include <extensionsystem/iwelcomepage.h> + +namespace Qt4ProjectManager { +namespace Internal { + +class GettingStartedWelcomePageWidget; + +class GettingStartedWelcomePage : public ExtensionSystem::IWelcomePage +{ +public: + GettingStartedWelcomePage(); + + QWidget *page(); + QString title() const { return tr("Getting Started");} + int priority() const { return 10; } + +private: + GettingStartedWelcomePageWidget *m_page; +}; + +} // namespace Internal +} // namespace Qt4ProjectManager + +#endif // GETTINGSTARTEDWELCOMEPLUGIN_H diff --git a/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.cpp b/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.cpp new file mode 100644 index 0000000000000000000000000000000000000000..41dd90da34a3ec1020822a48f48461afb570c44b --- /dev/null +++ b/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.cpp @@ -0,0 +1,259 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** Commercial Usage +** +** Licensees holding valid Qt Commercial licenses may use this file in +** accordance with the Qt Commercial License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Nokia. +** +** GNU Lesser General Public License Usage +** +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** +**************************************************************************/ + +#include "gettingstartedwelcomepagewidget.h" +#include "ui_gettingstartedwelcomepagewidget.h" + +#include <coreplugin/icore.h> +#include <coreplugin/coreconstants.h> + +#include <extensionsystem/pluginmanager.h> + +#include <help/helpplugin.h> + +#include <QtCore/QDateTime> +#include <QtCore/QDir> +#include <QtCore/QFileInfo> +#include <QtCore/QDebug> +#include <QtCore/QUrl> +#include <QtCore/QXmlStreamReader> +#include <QtGui/QFont> + +namespace Qt4ProjectManager { +namespace Internal { + +// TODO: remove + +GettingStartedWelcomePageWidget::GettingStartedWelcomePageWidget(QWidget *parent) : + QWidget(parent), + ui(new Ui::GettingStartedWelcomePageWidget) +{ + ui->setupUi(this); + ui->tutorialsTitleLabel->setStyledText(tr("Tutorials")); + ui->demoTitleLabel->setStyledText(tr("Explore Qt Examples")); + ui->didYouKnowTextBrowser->viewport()->setAutoFillBackground(false); + ui->didYouKnowTitleLabel->setStyledText(tr("Did You Know?")); + + connect(ui->tutorialTreeWidget, SIGNAL(activated(QString)), SLOT(slotOpenHelpPage(const QString&))); + connect(ui->openExampleButton, SIGNAL(clicked()), SLOT(slotOpenExample())); + connect(ui->examplesComboBox, SIGNAL(currentIndexChanged(int)), SLOT(slotEnableExampleButton(int))); + + ui->tutorialTreeWidget->addItem(tr("<b>Qt Creator - A quick tour</b>"), + QString("qthelp://com.nokia.qtcreator.%1%2/doc/index.html").arg(IDE_VERSION_MAJOR).arg(IDE_VERSION_MINOR)); + ui->tutorialTreeWidget->addItem(tr("Creating an address book"), + QLatin1String("qthelp://com.nokia.qtcreator/doc/tutorials-addressbook-sdk.html")); + ui->tutorialTreeWidget->addItem(tr("Understanding widgets"), + QLatin1String("qthelp://com.trolltech.qt/qdoc/widgets-tutorial.html")); + ui->tutorialTreeWidget->addItem(tr("Building with qmake"), + QLatin1String("qthelp://com.trolltech.qmake/qdoc/qmake-tutorial.html")); + ui->tutorialTreeWidget->addItem(tr("Writing test cases"), + QLatin1String("qthelp://com.trolltech.qt/qdoc/qtestlib-tutorial.html")); + + srand(QDateTime::currentDateTime().toTime_t()); + QStringList tips = tipsOfTheDay(); + m_currentTip = rand()%tips.count(); + + QTextDocument *doc = ui->didYouKnowTextBrowser->document(); + doc->setDefaultStyleSheet("a:link {color:black;}"); + ui->didYouKnowTextBrowser->setDocument(doc); + ui->didYouKnowTextBrowser->setText(tips.at(m_currentTip)); + + connect(ui->nextTipBtn, SIGNAL(clicked()), this, SLOT(slotNextTip())); + connect(ui->prevTipBtn, SIGNAL(clicked()), this, SLOT(slotPrevTip())); + +} + +GettingStartedWelcomePageWidget::~GettingStartedWelcomePageWidget() +{ + delete ui; +} + +void GettingStartedWelcomePageWidget::updateExamples(const QString& examplePath, const QString& demosPath, const QString &sourcePath) +{ + QString demoxml = demosPath + "/qtdemo/xml/examples.xml"; + if (!QFile::exists(demoxml)) { + demoxml = sourcePath + "/demos/qtdemo/xml/examples.xml"; + if (!QFile::exists(demoxml)) + return; + } + + QFile description(demoxml); + if (!description.open(QFile::ReadOnly)) + return; + + ui->examplesComboBox->clear(); + ui->examplesComboBox->setEnabled(true); + + ui->examplesComboBox->addItem(tr("Choose an example...")); + QFont f = font(); + f.setItalic(true); + ui->examplesComboBox->setItemData(0, f, Qt::FontRole); + f.setItalic(false); + bool inExamples = false; + QString dirName; + QXmlStreamReader reader(&description); + while (!reader.atEnd()) { + switch (reader.readNext()) { + case QXmlStreamReader::StartElement: + if (reader.name() == "category") { + QString name = reader.attributes().value(QLatin1String("name")).toString(); + if (name.contains("tutorial")) + break; + dirName = reader.attributes().value(QLatin1String("dirname")).toString(); + ui->examplesComboBox->addItem(name); + f.setBold(true); + ui->examplesComboBox->setItemData(ui->examplesComboBox->count()-1, f, Qt::FontRole); + f.setBold(false); + inExamples = true; + } + if (inExamples && reader.name() == "example") { + QString name = reader.attributes().value(QLatin1String("name")).toString(); + QString fn = reader.attributes().value(QLatin1String("filename")).toString(); + QString relativeProPath = '/' + dirName + '/' + fn + '/' + fn + ".pro"; + QString fileName = examplePath + relativeProPath; + if (!QFile::exists(fileName)) + fileName = sourcePath + "/examples" + relativeProPath; + QString helpPath = "qthelp://com.trolltech.qt/qdoc/" + dirName.replace("/", "-") + "-" + fn + ".html"; + + ui->examplesComboBox->addItem(" " + name, fileName); + ui->examplesComboBox->setItemData(ui->examplesComboBox->count()-1, helpPath, Qt::UserRole+1); + } + break; + case QXmlStreamReader::EndElement: + if (reader.name() == "category") + inExamples = false; + break; + default: + break; + } + } +} + +void GettingStartedWelcomePageWidget::slotEnableExampleButton(int index) +{ + QString fileName = ui->examplesComboBox->itemData(index, Qt::UserRole).toString(); + ui->openExampleButton->setEnabled(!fileName.isEmpty()); +} + +void GettingStartedWelcomePageWidget::slotOpenExample() +{ + QComboBox *box = ui->examplesComboBox; + QString proFile = box->itemData(box->currentIndex(), Qt::UserRole).toString(); + QString helpFile = box->itemData(box->currentIndex(), Qt::UserRole + 1).toString(); + QStringList files; + QFileInfo fi(proFile); + QString tryFile = fi.path() + "/main.cpp"; + files << proFile; + if(!QFile::exists(tryFile)) + tryFile = fi.path() + '/' + fi.baseName() + ".cpp"; + if(QFile::exists(tryFile)) + files << tryFile; + Core::ICore::instance()->openFiles(files); + slotOpenContextHelpPage(helpFile); +} + +void GettingStartedWelcomePageWidget::slotOpenHelpPage(const QString& url) +{ + Help::HelpManager *helpManager + = ExtensionSystem::PluginManager::instance()->getObject<Help::HelpManager>(); + Q_ASSERT(helpManager); + helpManager->openHelpPage(url); +} +void GettingStartedWelcomePageWidget::slotOpenContextHelpPage(const QString& url) +{ + Help::HelpManager *helpManager + = ExtensionSystem::PluginManager::instance()->getObject<Help::HelpManager>(); + Q_ASSERT(helpManager); + helpManager->openContextHelpPage(url); +} + +void GettingStartedWelcomePageWidget::slotNextTip() +{ + QStringList tips = tipsOfTheDay(); + m_currentTip = ((m_currentTip+1)%tips.count()); + ui->didYouKnowTextBrowser->setText(tips.at(m_currentTip)); +} + +void GettingStartedWelcomePageWidget::slotPrevTip() +{ + QStringList tips = tipsOfTheDay(); + m_currentTip = ((m_currentTip-1)+tips.count())%tips.count(); + ui->didYouKnowTextBrowser->setText(tips.at(m_currentTip)); +} + +QStringList GettingStartedWelcomePageWidget::tipsOfTheDay() +{ + static QStringList tips; + if (tips.isEmpty()) { + QString altShortcut = +#ifdef Q_WS_MAC + tr("Cmd", "Shortcut key"); +#else + tr("Alt", "Shortcut key"); +#endif + tips.append(tr("You can switch between Qt Creator's modes using <tt>Ctrl+number</tt>:<ul>" + "<li>1 - Welcome</li><li>2 - Edit</li><li>3 - Debug</li><li>4 - Projects</li><li>5 - Help</li>" + "<li></li><li>6 - Output</li></ul>")); + //:%1 gets replaced by Alt (Win/Unix) or Cmd (Mac) + tips.append(tr("You can show and hide the side bar using <tt>%1+0<tt>.").arg(altShortcut)); + tips.append(tr("You can fine tune the <tt>Find</tt> function by selecting "Whole Words" " + "or "Case Sensitive". Simply click on the icons on the right end of the line edit.")); + tips.append(tr("If you add <a href=\"qthelp://com.nokia.qtcreator/doc/creator-external-library-handling.html\"" + ">external libraries</a>, Qt Creator will automatically offer syntax highlighting " + "and code completion.")); + tips.append(tr("The code completion is CamelCase-aware. For example, to complete <tt>namespaceUri</tt> " + "you can just type <tt>nU</tt> and hit <tt>Ctrl+Space</tt>.")); + tips.append(tr("You can force code completion at any time using <tt>Ctrl+Space</tt>.")); + tips.append(tr("You can start Qt Creator with a session by calling <tt>qtcreator <sessionname></tt>.")); + tips.append(tr("You can return to edit mode from any other mode at any time by hitting <tt>Escape</tt>.")); + //:%1 gets replaced by Alt (Win/Unix) or Cmd (Mac) + tips.append(tr("You can switch between the output pane by hitting <tt>%1+n</tt> where n is the number denoted " + "on the buttons at the window bottom:" + "<ul><li>1 - Build Issues</li><li>2 - Search Results</li><li>3 - Application Output</li>" + "<li>4 - Compile Output</li></ul>").arg(altShortcut)); + tips.append(tr("You can quickly search methods, classes, help and more using the " + "<a href=\"qthelp://com.nokia.qtcreator/doc/creator-navigation.html\">Locator bar</a> (<tt>Ctrl+K</tt>).")); + tips.append(tr("You can add custom build steps in the " + "<a href=\"qthelp://com.nokia.qtcreator/doc/creator-build-settings.html\">build settings</a>.")); + tips.append(tr("Within a session, you can add " + "<a href=\"qthelp://com.nokia.qtcreator/doc/creator-build-settings.html#dependencies\">dependencies</a> between projects.")); + tips.append(tr("You can set the preferred editor encoding for every project in <tt>Projects -> Editor Settings -> Default Encoding</tt>.")); + tips.append(tr("You can modify the binary that is being executed when you press the <tt>Run</tt> button: Add a <tt>Custom Executable</tt> " + "by clicking the <tt>+</tt> button in <tt>Projects -> Run Settings -> Run Configuration</tt> and then select the new " + "target in the combo box.")); + tips.append(tr("You can use Qt Creator with a number of <a href=\"qthelp://com.nokia.qtcreator/doc/creator-version-control.html\">" + "revision control systems</a> such as Subversion, Perforce and Git.")); + tips.append(tr("In the editor, <tt>F2</tt> toggles declaration and definition while <tt>F4</tt> toggles header file and source file.")); + } + return tips; +} + + +} // namespace Internal +} // namespace Qt4ProjectManager diff --git a/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.h b/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.h new file mode 100644 index 0000000000000000000000000000000000000000..fdc6ec01602eb44edd92c00235147f6103cf5799 --- /dev/null +++ b/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.h @@ -0,0 +1,69 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** Commercial Usage +** +** Licensees holding valid Qt Commercial licenses may use this file in +** accordance with the Qt Commercial License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Nokia. +** +** GNU Lesser General Public License Usage +** +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** +**************************************************************************/ + +#ifndef GETTINGSTARTEDWELCOMEPAGEWIDGET_H +#define GETTINGSTARTEDWELCOMEPAGEWIDGET_H + +#include <QWidget> + +namespace Qt4ProjectManager { +namespace Internal { + +namespace Ui { + class GettingStartedWelcomePageWidget; +} + +class GettingStartedWelcomePageWidget : public QWidget { + Q_OBJECT +public: + GettingStartedWelcomePageWidget(QWidget *parent = 0); + ~GettingStartedWelcomePageWidget(); + + public slots: + void updateExamples(const QString& examplePath, const QString& demosPath, const QString &sourcePath); + +private slots: + void slotOpenHelpPage(const QString& url); + void slotOpenContextHelpPage(const QString& url); + void slotEnableExampleButton(int); + void slotOpenExample(); + void slotNextTip(); + void slotPrevTip(); + +private: + QStringList tipsOfTheDay(); + + Ui::GettingStartedWelcomePageWidget *ui; + int m_currentTip; +}; + + +} // namespace Internal +} // namespace Qt4ProjectManager +#endif // GETTINGSTARTEDWELCOMEPAGEWIDGET_H diff --git a/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.ui b/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.ui new file mode 100644 index 0000000000000000000000000000000000000000..e4dc34ba355ebb0cc81d0eeb9b3d5432daceb87e --- /dev/null +++ b/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.ui @@ -0,0 +1,348 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>Qt4ProjectManager::Internal::GettingStartedWelcomePageWidget</class> + <widget class="QWidget" name="Qt4ProjectManager::Internal::GettingStartedWelcomePageWidget"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>646</width> + <height>361</height> + </rect> + </property> + <property name="windowTitle"> + <string>Form</string> + </property> + <layout class="QGridLayout" name="gridLayout"> + <item row="0" column="0" rowspan="2"> + <widget class="QFrame" name="tutorialsFrame"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="maximumSize"> + <size> + <width>400</width> + <height>16777215</height> + </size> + </property> + <property name="styleSheet"> + <string/> + </property> + <layout class="QGridLayout" name="gridLayout_6"> + <item row="0" column="0"> + <widget class="Core::Utils::WelcomeModeLabel" name="tutorialsTitleLabel"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="alignment"> + <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> + </property> + </widget> + </item> + <item row="1" column="0"> + <widget class="Core::Utils::WelcomeModeTreeWidget" name="tutorialTreeWidget"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="focusPolicy"> + <enum>Qt::NoFocus</enum> + </property> + <property name="frameShape"> + <enum>QFrame::NoFrame</enum> + </property> + <property name="selectionMode"> + <enum>QAbstractItemView::NoSelection</enum> + </property> + <property name="verticalScrollMode"> + <enum>QAbstractItemView::ScrollPerPixel</enum> + </property> + <property name="rootIsDecorated"> + <bool>false</bool> + </property> + <property name="uniformRowHeights"> + <bool>true</bool> + </property> + <property name="allColumnsShowFocus"> + <bool>true</bool> + </property> + <property name="columnCount"> + <number>2</number> + </property> + <attribute name="headerVisible"> + <bool>false</bool> + </attribute> + <attribute name="headerDefaultSectionSize"> + <number>24</number> + </attribute> + <attribute name="headerMinimumSectionSize"> + <number>0</number> + </attribute> + <column> + <property name="text"> + <string notr="true">1</string> + </property> + </column> + <column> + <property name="text"> + <string notr="true">2</string> + </property> + </column> + </widget> + </item> + </layout> + </widget> + </item> + <item row="0" column="1"> + <widget class="QFrame" name="demosExamplesFrame"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="maximumSize"> + <size> + <width>400</width> + <height>16777215</height> + </size> + </property> + <property name="styleSheet"> + <string/> + </property> + <layout class="QGridLayout" name="gridLayout_8"> + <property name="rightMargin"> + <number>8</number> + </property> + <property name="horizontalSpacing"> + <number>0</number> + </property> + <item row="0" column="0" colspan="4"> + <widget class="Core::Utils::WelcomeModeLabel" name="demoTitleLabel"> + <property name="alignment"> + <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> + </property> + </widget> + </item> + <item row="1" column="0"> + <widget class="QComboBox" name="examplesComboBox"> + <property name="enabled"> + <bool>false</bool> + </property> + <property name="sizePolicy"> + <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <item> + <property name="text"> + <string>Examples not installed</string> + </property> + </item> + </widget> + </item> + <item row="1" column="2"> + <widget class="QToolButton" name="openExampleButton"> + <property name="enabled"> + <bool>false</bool> + </property> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>Open</string> + </property> + </widget> + </item> + <item row="1" column="1"> + <spacer name="horizontalSpacer"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeType"> + <enum>QSizePolicy::Fixed</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>6</width> + <height>6</height> + </size> + </property> + </spacer> + </item> + </layout> + </widget> + </item> + <item row="1" column="1"> + <widget class="QFrame" name="didyouKnowFrame"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="maximumSize"> + <size> + <width>400</width> + <height>16777215</height> + </size> + </property> + <property name="styleSheet"> + <string/> + </property> + <layout class="QGridLayout" name="gridLayout_11"> + <property name="rightMargin"> + <number>9</number> + </property> + <item row="0" column="0"> + <widget class="Core::Utils::WelcomeModeLabel" name="didYouKnowTitleLabel"> + <property name="sizePolicy"> + <sizepolicy hsizetype="MinimumExpanding" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="alignment"> + <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> + </property> + </widget> + </item> + <item row="1" column="0" colspan="2"> + <widget class="QTextBrowser" name="didYouKnowTextBrowser"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Minimum" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="frameShape"> + <enum>QFrame::NoFrame</enum> + </property> + <property name="frameShadow"> + <enum>QFrame::Plain</enum> + </property> + <property name="verticalScrollBarPolicy"> + <enum>Qt::ScrollBarAlwaysOff</enum> + </property> + <property name="horizontalScrollBarPolicy"> + <enum>Qt::ScrollBarAlwaysOff</enum> + </property> + <property name="openExternalLinks"> + <bool>true</bool> + </property> + </widget> + </item> + <item row="0" column="1"> + <layout class="QGridLayout" name="gridLayout_10"> + <property name="spacing"> + <number>0</number> + </property> + <item row="0" column="0" colspan="2"> + <spacer name="verticalSpacer_4"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeType"> + <enum>QSizePolicy::Preferred</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>2</height> + </size> + </property> + </spacer> + </item> + <item row="1" column="0"> + <widget class="QToolButton" name="prevTipBtn"> + <property name="styleSheet"> + <string notr="true">QToolButton{ + border-right:solid 0 px; + height:16px; + width:12px; +} +</string> + </property> + <property name="text"> + <string/> + </property> + <property name="icon"> + <iconset resource="../welcome/welcome.qrc"> + <normaloff>:/welcome/images/arrow-left.png</normaloff>:/welcome/images/arrow-left.png</iconset> + </property> + <property name="arrowType"> + <enum>Qt::NoArrow</enum> + </property> + </widget> + </item> + <item row="1" column="1"> + <widget class="QToolButton" name="nextTipBtn"> + <property name="styleSheet"> + <string notr="true">QToolButton{ + border-left:solid 0 px; + height:16px; + width:12px; +} +</string> + </property> + <property name="text"> + <string/> + </property> + <property name="icon"> + <iconset resource="../welcome/welcome.qrc"> + <normaloff>:/welcome/images/arrow-right.png</normaloff>:/welcome/images/arrow-right.png</iconset> + </property> + <property name="arrowType"> + <enum>Qt::NoArrow</enum> + </property> + </widget> + </item> + <item row="2" column="0" colspan="2"> + <spacer name="verticalSpacer_3"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>2</height> + </size> + </property> + </spacer> + </item> + </layout> + </item> + </layout> + </widget> + </item> + </layout> + </widget> + <customwidgets> + <customwidget> + <class>Core::Utils::WelcomeModeTreeWidget</class> + <extends>QTreeWidget</extends> + <header>utils/welcomemodetreewidget.h</header> + </customwidget> + <customwidget> + <class>Core::Utils::WelcomeModeLabel</class> + <extends>QLabel</extends> + <header>utils/welcomemodetreewidget.h</header> + </customwidget> + </customwidgets> + <resources> + <include location="../welcome/welcome.qrc"/> + </resources> + <connections/> +</ui> diff --git a/src/plugins/qt4projectmanager/qt4projectmanager.pro b/src/plugins/qt4projectmanager/qt4projectmanager.pro index 6b691397ac3ed5577adc29e50ba43eeff0db954f..a85ffcef011e6fdc409e650dc4f098070f9b18e6 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 e1bd37df3667b4a76b8d069736bf44339bdd93dc..9a493156ad5a2d69369b1f77fa1f3c33dd960d9b 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 f740c2775635a894853a2c3060864097ddd63006..e2dde775053ae0140e57be17fc1d6f764d1d3c6b 100644 --- a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp +++ b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp @@ -44,6 +44,8 @@ #include "qtversionmanager.h" #include "qtoptionspage.h" #include "externaleditors.h" +#include "gettingstartedwelcomepage.h" +#include "gettingstartedwelcomepagewidget.h" #ifdef QTCREATOR_WITH_S60 #include "qt-s60/s60manager.h" @@ -82,6 +84,8 @@ Qt4ProjectManagerPlugin::~Qt4ProjectManagerPlugin() delete m_proFileEditorFactory; removeObject(m_qt4ProjectManager); delete m_qt4ProjectManager; + removeObject(m_welcomePage); + delete m_welcomePage; } /* static Core::Command *createSeparator(Core::ActionManager *am, @@ -106,9 +110,16 @@ bool Qt4ProjectManagerPlugin::initialize(const QStringList &arguments, QString * m_projectExplorer = ProjectExplorer::ProjectExplorerPlugin::instance(); Core::ActionManager *am = core->actionManager(); - addAutoReleasedObject(new QtVersionManager()); + QtVersionManager *mgr = new QtVersionManager(); + addAutoReleasedObject(mgr); addAutoReleasedObject(new QtOptionsPage()); + m_welcomePage = new GettingStartedWelcomePage; + addObject(m_welcomePage); + GettingStartedWelcomePageWidget *gswp = + static_cast<GettingStartedWelcomePageWidget*>(m_welcomePage->page()); + connect(mgr, SIGNAL(updateExamples(QString,QString,QString)), + gswp, SLOT(updateExamples(QString,QString,QString))); //create and register objects m_qt4ProjectManager = new Qt4Manager(this); diff --git a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.h b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.h index 18781bc82c98c0d4db1014695e349b2f74cdb921..5e3e016ce6115a1d0c60fdcd1f04017ba8fd3038 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 aa655204ffc4c42b032a97d160ae6c1b4e10568e..6bce576c7f8720363477bfa668d27be06d606478 100644 --- a/src/plugins/qt4projectmanager/qtversionmanager.cpp +++ b/src/plugins/qt4projectmanager/qtversionmanager.cpp @@ -42,7 +42,6 @@ #include <coreplugin/coreconstants.h> #include <coreplugin/icore.h> #include <coreplugin/modemanager.h> -#include <welcome/welcomemode.h> #include <extensionsystem/pluginmanager.h> #include <help/helpplugin.h> #include <utils/qtcassert.h> @@ -51,6 +50,7 @@ #include <QtCore/QProcess> #include <QtCore/QSettings> #include <QtCore/QTime> +#include <QtCore/QTimer> #include <QtGui/QApplication> #include <QtGui/QDesktopServices> @@ -122,7 +122,8 @@ QtVersionManager::QtVersionManager() writeVersionsIntoSettings(); updateDocumentation(); - updateExamples(); + // cannot call from ctor, needs to get connected extenernally first + QTimer::singleShot(0, this, SLOT(updateExamples())); } QtVersionManager::~QtVersionManager() @@ -185,9 +186,7 @@ void QtVersionManager::updateExamples() if (version->hasDemos()) demosPath = version->demosPath(); if (!examplesPath.isEmpty() && !demosPath.isEmpty()) { - if (Welcome::WelcomeMode *welcomeMode = qobject_cast<Welcome::WelcomeMode*> - (Core::ICore::instance()->modeManager()->mode(Core::Constants::MODE_WELCOME))) - welcomeMode->updateExamples(examplesPath, demosPath, version->sourcePath()); + emit updateExamples(examplesPath, demosPath, version->sourcePath()); return; } } diff --git a/src/plugins/qt4projectmanager/qtversionmanager.h b/src/plugins/qt4projectmanager/qtversionmanager.h index 0f2144c250076f03063c1ac872e53d058c76e682..fb7a33b412dad9e0b122cdb138b4dd23db0d3636 100644 --- a/src/plugins/qt4projectmanager/qtversionmanager.h +++ b/src/plugins/qt4projectmanager/qtversionmanager.h @@ -201,6 +201,10 @@ public: signals: void defaultQtVersionChanged(); void qtVersionsChanged(); + void updateExamples(QString, QString, QString); + +private slots: + void updateExamples(); private: static QString findQMakeLine(const QString &directory); static QString trimLine(const QString line); @@ -215,7 +219,6 @@ private: void addNewVersionsFromInstaller(); void updateSystemVersion(); void updateDocumentation(); - void updateExamples(); static int indexOfVersionInList(const QtVersion * const version, const QList<QtVersion *> &list); void updateUniqueIdToIndexMap(); diff --git a/src/plugins/welcome/communitywelcomepage.cpp b/src/plugins/welcome/communitywelcomepage.cpp new file mode 100644 index 0000000000000000000000000000000000000000..0337fb113b1d71ea8a8a656da9bee8af1bd5b230 --- /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 0000000000000000000000000000000000000000..b6c047c3d7253a833c364670839ec16aa81c9eb0 --- /dev/null +++ b/src/plugins/welcome/communitywelcomepage.h @@ -0,0 +1,60 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** Commercial Usage +** +** Licensees holding valid Qt Commercial licenses may use this file in +** accordance with the Qt Commercial License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Nokia. +** +** GNU Lesser General Public License Usage +** +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** +**************************************************************************/ + +#ifndef COMMUNITYWELCOMEPAGE_H +#define COMMUNITYWELCOMEPAGE_H + +#include "welcome_global.h" + +#include <extensionsystem/iwelcomepage.h> + +namespace Welcome { +namespace Internal { + +class CommunityWelcomePageWidget; + +class WELCOME_EXPORT CommunityWelcomePage : public ExtensionSystem::IWelcomePage +{ + Q_OBJECT +public: + CommunityWelcomePage(); + + QWidget *page(); + QString title() const { return tr("Community"); } + int priority() const { return 30; } + +private: + CommunityWelcomePageWidget *m_page; + +}; + +} // namespace Internal +} // namespace Welcome + +#endif // COMMUNITYWELCOMEPAGE_H diff --git a/src/plugins/welcome/communitywelcomepagewidget.cpp b/src/plugins/welcome/communitywelcomepagewidget.cpp new file mode 100644 index 0000000000000000000000000000000000000000..40c72fed57f3455e47ff4bb8b3eb74cff1f0fb32 --- /dev/null +++ b/src/plugins/welcome/communitywelcomepagewidget.cpp @@ -0,0 +1,79 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** Commercial Usage +** +** Licensees holding valid Qt Commercial licenses may use this file in +** accordance with the Qt Commercial License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Nokia. +** +** GNU Lesser General Public License Usage +** +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** +**************************************************************************/ + +#include "communitywelcomepagewidget.h" +#include "ui_communitywelcomepagewidget.h" + +#include "rssfetcher.h" + +#include <QtGui/QDesktopServices> + +namespace Welcome { +namespace Internal { + +CommunityWelcomePageWidget::CommunityWelcomePageWidget(QWidget *parent) : + QWidget(parent), + ui(new Ui::CommunityWelcomePageWidget), + m_rssFetcher(new RSSFetcher(7)) +{ + ui->setupUi(this); + ui->labsTitleLabel->setStyledText(tr("News From the Qt Labs")); + ui->sitesTitleLabel->setStyledText(tr("Qt Websites")); + + connect(ui->newsTreeWidget, SIGNAL(activated(QString)), SLOT(slotUrlClicked(QString))); + connect(ui->sitesTreeWidget, SIGNAL(activated(QString)), SLOT(slotUrlClicked(QString))); + + connect(m_rssFetcher, SIGNAL(newsItemReady(QString, QString, QString)), + ui->newsTreeWidget, SLOT(slotAddNewsItem(QString, QString, QString))); + //: Add localized feed here only if one exists + m_rssFetcher->fetch(QUrl(tr("http://labs.trolltech.com/blogs/feed"))); + + ui->sitesTreeWidget->addItem(tr("Qt Home"), QLatin1String("http://qtsoftware.com")); + ui->sitesTreeWidget->addItem(tr("Qt Labs"), QLatin1String("http://labs.trolltech.com")); + ui->sitesTreeWidget->addItem(tr("Qt Git Hosting"), QLatin1String("http://qt.gitorious.org")); + ui->sitesTreeWidget->addItem(tr("Qt Centre"), QLatin1String("http://www.qtcentre.org")); + ui->sitesTreeWidget->addItem(tr("Qt for S60 at Forum Nokia"), QLatin1String("http://discussion.forum.nokia.com/forum/forumdisplay.php?f=196")); +} + +CommunityWelcomePageWidget::~CommunityWelcomePageWidget() +{ + delete m_rssFetcher; + delete ui; +} + + +void CommunityWelcomePageWidget::slotUrlClicked(const QString &data) +{ + QDesktopServices::openUrl(QUrl(data)); +} + + + +} // namespace Internal +} // namespace Welcome diff --git a/src/plugins/welcome/communitywelcomepagewidget.h b/src/plugins/welcome/communitywelcomepagewidget.h new file mode 100644 index 0000000000000000000000000000000000000000..8da68feebf260efb078a1baa0bf61fd998dc08b4 --- /dev/null +++ b/src/plugins/welcome/communitywelcomepagewidget.h @@ -0,0 +1,64 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** Commercial Usage +** +** Licensees holding valid Qt Commercial licenses may use this file in +** accordance with the Qt Commercial License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Nokia. +** +** GNU Lesser General Public License Usage +** +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** +**************************************************************************/ + +#ifndef COMMUNITYWELCOMEPAGEWIDGET_H +#define COMMUNITYWELCOMEPAGEWIDGET_H + +#include <QWidget> + +namespace Welcome { +namespace Internal { + +class RSSFetcher; + +namespace Ui { + class CommunityWelcomePageWidget; +} + +class CommunityWelcomePageWidget : public QWidget +{ + Q_OBJECT + +public: + CommunityWelcomePageWidget(QWidget *parent = 0); + ~CommunityWelcomePageWidget(); + +private slots: + void slotUrlClicked(const QString &data); + + +private: + RSSFetcher *m_rssFetcher; + Ui::CommunityWelcomePageWidget *ui; +}; + + +} // namespace Internal +} // namespace Welcome +#endif // COMMUNITYWELCOMEPAGEWIDGET_H diff --git a/src/plugins/welcome/communitywelcomepagewidget.ui b/src/plugins/welcome/communitywelcomepagewidget.ui new file mode 100644 index 0000000000000000000000000000000000000000..7d05f30d70d6206caef42bbc319aca3783a23fe5 --- /dev/null +++ b/src/plugins/welcome/communitywelcomepagewidget.ui @@ -0,0 +1,195 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>Welcome::Internal::CommunityWelcomePageWidget</class> + <widget class="QWidget" name="Welcome::Internal::CommunityWelcomePageWidget"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>667</width> + <height>352</height> + </rect> + </property> + <property name="windowTitle"> + <string>Form</string> + </property> + <layout class="QHBoxLayout" name="horizontalLayout"> + <item> + <widget class="QFrame" name="labsFrame"> + <property name="frameShape"> + <enum>QFrame::NoFrame</enum> + </property> + <property name="frameShadow"> + <enum>QFrame::Plain</enum> + </property> + <layout class="QVBoxLayout" name="verticalLayout_2"> + <item> + <widget class="Core::Utils::WelcomeModeLabel" name="labsTitleLabel"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="alignment"> + <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> + </property> + </widget> + </item> + <item> + <widget class="Core::Utils::WelcomeModeTreeWidget" name="newsTreeWidget"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>340</width> + <height>0</height> + </size> + </property> + <property name="focusPolicy"> + <enum>Qt::NoFocus</enum> + </property> + <property name="frameShape"> + <enum>QFrame::NoFrame</enum> + </property> + <property name="selectionMode"> + <enum>QAbstractItemView::NoSelection</enum> + </property> + <property name="verticalScrollMode"> + <enum>QAbstractItemView::ScrollPerPixel</enum> + </property> + <property name="rootIsDecorated"> + <bool>false</bool> + </property> + <property name="uniformRowHeights"> + <bool>true</bool> + </property> + <property name="allColumnsShowFocus"> + <bool>true</bool> + </property> + <property name="columnCount"> + <number>2</number> + </property> + <attribute name="headerVisible"> + <bool>false</bool> + </attribute> + <attribute name="headerDefaultSectionSize"> + <number>24</number> + </attribute> + <attribute name="headerMinimumSectionSize"> + <number>0</number> + </attribute> + <column> + <property name="text"> + <string notr="true">1</string> + </property> + </column> + <column> + <property name="text"> + <string notr="true">2</string> + </property> + </column> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <widget class="QFrame" name="sitesFrame"> + <property name="frameShape"> + <enum>QFrame::NoFrame</enum> + </property> + <property name="frameShadow"> + <enum>QFrame::Plain</enum> + </property> + <layout class="QVBoxLayout" name="verticalLayout_3"> + <item> + <widget class="Core::Utils::WelcomeModeLabel" name="sitesTitleLabel"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="alignment"> + <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> + </property> + </widget> + </item> + <item> + <widget class="Core::Utils::WelcomeModeTreeWidget" name="sitesTreeWidget"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="focusPolicy"> + <enum>Qt::NoFocus</enum> + </property> + <property name="frameShape"> + <enum>QFrame::NoFrame</enum> + </property> + <property name="selectionMode"> + <enum>QAbstractItemView::NoSelection</enum> + </property> + <property name="verticalScrollMode"> + <enum>QAbstractItemView::ScrollPerPixel</enum> + </property> + <property name="rootIsDecorated"> + <bool>false</bool> + </property> + <property name="uniformRowHeights"> + <bool>true</bool> + </property> + <property name="allColumnsShowFocus"> + <bool>true</bool> + </property> + <property name="columnCount"> + <number>2</number> + </property> + <attribute name="headerVisible"> + <bool>false</bool> + </attribute> + <attribute name="headerDefaultSectionSize"> + <number>24</number> + </attribute> + <attribute name="headerMinimumSectionSize"> + <number>0</number> + </attribute> + <column> + <property name="text"> + <string notr="true">1</string> + </property> + </column> + <column> + <property name="text"> + <string notr="true">2</string> + </property> + </column> + </widget> + </item> + </layout> + </widget> + </item> + </layout> + </widget> + <customwidgets> + <customwidget> + <class>Core::Utils::WelcomeModeTreeWidget</class> + <extends>QTreeWidget</extends> + <header>utils/welcomemodetreewidget.h</header> + </customwidget> + <customwidget> + <class>Core::Utils::WelcomeModeLabel</class> + <extends>QLabel</extends> + <header>utils/welcomemodetreewidget.h</header> + </customwidget> + </customwidgets> + <resources/> + <connections/> +</ui> diff --git a/src/plugins/welcome/rssfetcher.cpp b/src/plugins/welcome/rssfetcher.cpp index f5fc756c9bb1f2262c192d9d64c312dd222c8c57..7254c2d00b9792101f397524cc42afde1c731a0e 100644 --- a/src/plugins/welcome/rssfetcher.cpp +++ b/src/plugins/welcome/rssfetcher.cpp @@ -43,7 +43,7 @@ #include <sys/utsname.h> #endif -using namespace Welcome; +using namespace Welcome::Internal; static const QString getOsString() { diff --git a/src/plugins/welcome/rssfetcher.h b/src/plugins/welcome/rssfetcher.h index 9267fdb47aeacb1d943a15f2df541970c66269cb..54ef87d7b619e0fcc80d4de7d42cde2868e9d41c 100644 --- a/src/plugins/welcome/rssfetcher.h +++ b/src/plugins/welcome/rssfetcher.h @@ -35,6 +35,7 @@ #include <QtNetwork/QHttp> namespace Welcome { +namespace Internal { class RSSFetcher : public QObject { @@ -69,6 +70,7 @@ private: }; } // namespace Welcome +} // namespace Internal #endif // RSSFETCHER_H diff --git a/src/plugins/welcome/welcome.pro b/src/plugins/welcome/welcome.pro index 11d48e82bc987a564de740073a287d016d452d6f..fb5cfc9e748b5c40b043bfc40e17300f802b2a50 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 + +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 bc6a87682843442940698c018c78b2cf79246a83..6e973eb59da6cb78c7e2e084f30eb7331863f38c 100644 --- a/src/plugins/welcome/welcomemode.cpp +++ b/src/plugins/welcome/welcomemode.cpp @@ -28,11 +28,10 @@ **************************************************************************/ #include "welcomemode.h" -#include "rssfetcher.h" +#include <extensionsystem/pluginmanager.h> +#include <extensionsystem/iwelcomepage.h> #include <coreplugin/icore.h> -#include <coreplugin/dialogs/iwizard.h> - #include <coreplugin/coreconstants.h> #include <coreplugin/uniqueidmanager.h> #include <coreplugin/modemanager.h> @@ -41,22 +40,22 @@ #include <utils/styledbar.h> #include <utils/welcomemodetreewidget.h> -#include <QtGui/QDesktopServices> #include <QtGui/QMouseEvent> #include <QtGui/QScrollArea> #include <QtGui/QButtonGroup> +#include <QtGui/QDesktopServices> +#include <QtGui/QToolButton> -#include <QtCore/QDateTime> -#include <QtCore/QDir> -#include <QtCore/QFileInfo> -#include <QtCore/QDebug> -#include <QtCore/QUrl> #include <QtCore/QSettings> +#include <QtCore/QUrl> +#include <QtCore/QDebug> #include <cstdlib> #include "ui_welcomemode.h" +using namespace ExtensionSystem; + namespace Welcome { struct WelcomeModePrivate @@ -66,10 +65,9 @@ struct WelcomeModePrivate QScrollArea *m_scrollArea; QWidget *m_widget; QWidget *m_welcomePage; - QButtonGroup *btnGrp; - Ui::WelcomePage ui; - RSSFetcher *rssFetcher; - WelcomeMode::WelcomePageData lastData; + QMap<QAbstractButton*, QWidget*> buttonMap; + QHBoxLayout * buttonLayout; + Ui::WelcomeMode ui; int currentTip; }; @@ -77,46 +75,6 @@ WelcomeModePrivate::WelcomeModePrivate() { } -// --- WelcomePageData - -bool WelcomeMode::WelcomePageData::operator==(const WelcomePageData &rhs) const -{ - return previousSession == rhs.previousSession - && activeSession == rhs.activeSession - && sessionList == rhs.sessionList - && projectList == rhs.projectList; -} - -bool WelcomeMode::WelcomePageData::operator!=(const WelcomePageData &rhs) const -{ - return previousSession != rhs.previousSession - || activeSession != rhs.activeSession - || sessionList != rhs.sessionList - || projectList != rhs.projectList; -} - -QDebug operator<<(QDebug dgb, const WelcomeMode::WelcomePageData &d) -{ - dgb.nospace() << "PreviousSession=" << d.previousSession - << " activeSession=" << d.activeSession - << " sessionList=" << d.sessionList - << " projectList=" << d.projectList; - return dgb; -} - -// Format a title + ruler for title labels -static inline QString titleLabel(const QString &text) -{ - QString rc = QLatin1String( - "<html><head><style type=\"text/css\">p, li { white-space: pre-wrap; }</style></head>" - "<body style=\" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;\">" - "<p style=\" margin-top:16px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">" - "<span style=\" font-size:x-large; color:#555555;\">"); - rc += text; - rc += QLatin1String("</span></p><hr/></body></html>"); - return rc; -} - // --- WelcomeMode WelcomeMode::WelcomeMode() : m_d(new WelcomeModePrivate) @@ -126,22 +84,8 @@ WelcomeMode::WelcomeMode() : l->setMargin(0); l->setSpacing(0); l->addWidget(new Core::Utils::StyledBar(m_d->m_widget)); - m_d->rssFetcher = new RSSFetcher(7, this); m_d->m_welcomePage = new QWidget(m_d->m_widget); m_d->ui.setupUi(m_d->m_welcomePage); - m_d->ui.projTitleLabel->setText(titleLabel(tr("Open Recent Project"))); - m_d->ui.recentSessionsTitleLabel->setText(titleLabel(tr("Resume Session"))); - m_d->ui.tutorialsTitleLabel->setText(titleLabel(tr("Tutorials"))); - m_d->ui.demoTitleLabel->setText(titleLabel(tr("Explore Qt Examples"))); - m_d->ui.didYouKnowTitleLabel->setText(titleLabel(tr("Did You Know?"))); - m_d->ui.labsTitleLabel->setText(titleLabel(tr("News From the Qt Labs"))); - m_d->ui.sitesTitleLabel->setText(titleLabel(tr("Qt Websites"))); - m_d->ui.sessTreeWidget->viewport()->setAutoFillBackground(false); - m_d->ui.projTreeWidget->viewport()->setAutoFillBackground(false); - m_d->ui.newsTreeWidget->viewport()->setAutoFillBackground(false); - m_d->ui.sitesTreeWidget->viewport()->setAutoFillBackground(false); - m_d->ui.tutorialTreeWidget->viewport()->setAutoFillBackground(false); - m_d->ui.didYouKnowTextBrowser->viewport()->setAutoFillBackground(false); m_d->ui.helpUsLabel->setAttribute(Qt::WA_LayoutUsesWidgetRect); m_d->ui.feedbackButton->setAttribute(Qt::WA_LayoutUsesWidgetRect); l->addWidget(m_d->m_welcomePage); @@ -151,71 +95,17 @@ WelcomeMode::WelcomeMode() : m_d->m_scrollArea->setWidget(m_d->m_widget); m_d->m_scrollArea->setWidgetResizable(true); - updateWelcomePage(WelcomePageData()); - - m_d->btnGrp = new QButtonGroup(this); - m_d->btnGrp->addButton(m_d->ui.gettingStartedSectButton, 0); - m_d->btnGrp->addButton(m_d->ui.developSectButton, 1); - m_d->btnGrp->addButton(m_d->ui.communitySectButton, 2); - - connect(m_d->btnGrp, SIGNAL(buttonClicked(int)), m_d->ui.stackedWidget, SLOT(setCurrentIndex(int))); + PluginManager *pluginManager = PluginManager::instance(); + connect(pluginManager, SIGNAL(objectAdded(QObject*)), SLOT(welcomePluginAdded(QObject*))); connect(m_d->ui.feedbackButton, SIGNAL(clicked()), SLOT(slotFeedback())); - connect(m_d->ui.manageSessionsButton, SIGNAL(clicked()), SIGNAL(manageSessions())); - connect(m_d->ui.createNewProjectButton, SIGNAL(clicked()), SLOT(slotCreateNewProject())); - connect(m_d->ui.sessTreeWidget, SIGNAL(activated(QString)), SLOT(slotSessionClicked(QString))); - connect(m_d->ui.projTreeWidget, SIGNAL(activated(QString)), SLOT(slotProjectClicked(QString))); - connect(m_d->ui.newsTreeWidget, SIGNAL(activated(QString)), SLOT(slotUrlClicked(QString))); - connect(m_d->ui.sitesTreeWidget, SIGNAL(activated(QString)), SLOT(slotUrlClicked(QString))); - connect(m_d->ui.tutorialTreeWidget, SIGNAL(activated(QString)), SIGNAL(openHelpPage(const QString&))); - connect(m_d->ui.openExampleButton, SIGNAL(clicked()), SLOT(slotOpenExample())); - connect(m_d->ui.examplesComboBox, SIGNAL(currentIndexChanged(int)), SLOT(slotEnableExampleButton(int))); - - connect(m_d->rssFetcher, SIGNAL(newsItemReady(QString, QString, QString)), - m_d->ui.newsTreeWidget, SLOT(slotAddNewsItem(QString, QString, QString))); - - //: Add localized feed here only if one exists - m_d->rssFetcher->fetch(QUrl(tr("http://labs.trolltech.com/blogs/feed"))); - - m_d->ui.sitesTreeWidget->addItem(tr("Qt Home"), QLatin1String("http://qtsoftware.com")); - m_d->ui.sitesTreeWidget->addItem(tr("Qt Labs"), QLatin1String("http://labs.trolltech.com")); - m_d->ui.sitesTreeWidget->addItem(tr("Qt Git Hosting"), QLatin1String("http://qt.gitorious.org")); - m_d->ui.sitesTreeWidget->addItem(tr("Qt Centre"), QLatin1String("http://www.qtcentre.org")); - m_d->ui.sitesTreeWidget->addItem(tr("Qt for S60 at Forum Nokia"), QLatin1String("http://discussion.forum.nokia.com/forum/forumdisplay.php?f=196")); - - m_d->ui.tutorialTreeWidget->addItem(tr("<b>Qt Creator - A quick tour</b>"), - QString("qthelp://com.nokia.qtcreator.%1%2/doc/index.html").arg(IDE_VERSION_MAJOR).arg(IDE_VERSION_MINOR)); - m_d->ui.tutorialTreeWidget->addItem(tr("Creating an address book"), - QLatin1String("qthelp://com.nokia.qtcreator/doc/tutorials-addressbook-sdk.html")); - m_d->ui.tutorialTreeWidget->addItem(tr("Understanding widgets"), - QLatin1String("qthelp://com.trolltech.qt/qdoc/widgets-tutorial.html")); - m_d->ui.tutorialTreeWidget->addItem(tr("Building with qmake"), - QLatin1String("qthelp://com.trolltech.qmake/qdoc/qmake-tutorial.html")); - m_d->ui.tutorialTreeWidget->addItem(tr("Writing test cases"), - QLatin1String("qthelp://com.trolltech.qt/qdoc/qtestlib-tutorial.html")); - - srand(QDateTime::currentDateTime().toTime_t()); - QStringList tips = tipsOfTheDay(); - m_d->currentTip = rand()%tips.count(); - - QTextDocument *doc = m_d->ui.didYouKnowTextBrowser->document(); - doc->setDefaultStyleSheet("a:link {color:black;}"); - m_d->ui.didYouKnowTextBrowser->setDocument(doc); - m_d->ui.didYouKnowTextBrowser->setText(tips.at(m_d->currentTip)); - - connect(m_d->ui.nextTipBtn, SIGNAL(clicked()), this, SLOT(slotNextTip())); - connect(m_d->ui.prevTipBtn, SIGNAL(clicked()), this, SLOT(slotPrevTip())); - QSettings *settings = Core::ICore::instance()->settings(); - int id = settings->value("General/WelcomeTab", 0).toInt(); - m_d->btnGrp->button(id)->setChecked(true); - m_d->ui.stackedWidget->setCurrentIndex(id); } WelcomeMode::~WelcomeMode() { QSettings *settings = Core::ICore::instance()->settings(); - settings->setValue("General/WelcomeTab", m_d->btnGrp->checkedId()); + settings->setValue("General/WelcomeTab", m_d->ui.stackedWidget->currentIndex()); delete m_d->m_widget; delete m_d; } @@ -252,150 +142,78 @@ QList<int> WelcomeMode::context() const return contexts; } -void WelcomeMode::updateWelcomePage(const WelcomePageData &welcomePageData) -{ - // Update only if data are modified - if (welcomePageData == m_d->lastData) - return; - m_d->lastData = welcomePageData; - - m_d->m_widget->setUpdatesEnabled(false); - m_d->ui.sessTreeWidget->clear(); - m_d->ui.projTreeWidget->clear(); - - if (welcomePageData.sessionList.count() > 0) { - foreach (const QString &s, welcomePageData.sessionList) { - QString str = s; - if (s == welcomePageData.previousSession) - str = tr("%1 (last session)").arg(s); - m_d->ui.sessTreeWidget->addItem(str, s); - } - m_d->ui.sessTreeWidget->updateGeometry(); - m_d->ui.sessTreeWidget->show(); - } else { - m_d->ui.sessTreeWidget->hide(); - } - - typedef QPair<QString, QString> QStringPair; - if (welcomePageData.projectList.count() > 0) { - foreach (const QStringPair &it, welcomePageData.projectList) { - QTreeWidgetItem *item = m_d->ui.projTreeWidget->addItem(it.second, it.first); - const QFileInfo fi(it.first); - item->setToolTip(1, QDir::toNativeSeparators(fi.absolutePath())); - } - } else { - m_d->ui.projTreeWidget->hide(); - } - m_d->ui.projTreeWidget->updateGeometry(); - m_d->m_widget->setUpdatesEnabled(true); -} - -void WelcomeMode::activateEditMode() -{ - Core::ModeManager *modeManager = Core::ModeManager::instance(); - if (modeManager->currentMode() == this) - modeManager->activateMode(Core::Constants::MODE_EDIT); -} - -void WelcomeMode::slotSessionClicked(const QString &data) -{ - emit requestSession(data); - activateEditMode(); -} - -void WelcomeMode::slotProjectClicked(const QString &data) +bool sortFunction(IWelcomePage * a, IWelcomePage *b) { - emit requestProject(data); - activateEditMode(); + return a->priority() < b->priority(); } -void WelcomeMode::slotUrlClicked(const QString &data) +void WelcomeMode::initPlugins() { - QDesktopServices::openUrl(QUrl(data)); -} - -void WelcomeMode::updateExamples(const QString& examplePath, const QString& demosPath, const QString &sourcePath) -{ - QString demoxml = demosPath + "/qtdemo/xml/examples.xml"; - if (!QFile::exists(demoxml)) { - demoxml = sourcePath + "/demos/qtdemo/xml/examples.xml"; - if (!QFile::exists(demoxml)) - return; + m_d->buttonLayout = new QHBoxLayout(m_d->ui.navFrame); + m_d->buttonLayout->setMargin(0); + m_d->buttonLayout->setSpacing(0); + delete m_d->ui.stackedWidget->currentWidget(); + QList<IWelcomePage*> plugins = PluginManager::instance()->getObjects<IWelcomePage>(); + qSort(plugins.begin(), plugins.end(), &sortFunction); + foreach (IWelcomePage* plugin, plugins) { + QToolButton * btn = new QToolButton; + btn->setCheckable(true); + btn->setText(plugin->title()); + btn->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); + btn->setAutoExclusive(true); + connect (btn, SIGNAL(clicked()), SLOT(showClickedPage())); + m_d->ui.stackedWidget->addWidget(plugin->page()); + m_d->buttonLayout->addWidget(btn); + m_d->buttonMap.insert(btn, plugin->page()); } + m_d->buttonLayout->addSpacing(5); - QFile description(demoxml); - if (!description.open(QFile::ReadOnly)) - return; - - m_d->ui.examplesComboBox->clear(); - m_d->ui.examplesComboBox->setEnabled(true); - - m_d->ui.examplesComboBox->addItem(tr("Choose an example...")); - QFont f = widget()->font(); - f.setItalic(true); - m_d->ui.examplesComboBox->setItemData(0, f, Qt::FontRole); - f.setItalic(false); - bool inExamples = false; - QString dirName; - QXmlStreamReader reader(&description); - while (!reader.atEnd()) { - switch (reader.readNext()) { - case QXmlStreamReader::StartElement: - if (reader.name() == "category") { - QString name = reader.attributes().value(QLatin1String("name")).toString(); - if (name.contains("tutorial")) - break; - dirName = reader.attributes().value(QLatin1String("dirname")).toString(); - m_d->ui.examplesComboBox->addItem(name); - f.setBold(true); - m_d->ui.examplesComboBox->setItemData(m_d->ui.examplesComboBox->count()-1, f, Qt::FontRole); - f.setBold(false); - inExamples = true; - } - if (inExamples && reader.name() == "example") { - QString name = reader.attributes().value(QLatin1String("name")).toString(); - QString fn = reader.attributes().value(QLatin1String("filename")).toString(); - QString relativeProPath = '/' + dirName + '/' + fn + '/' + fn + ".pro"; - QString fileName = examplePath + relativeProPath; - if (!QFile::exists(fileName)) - fileName = sourcePath + "/examples" + relativeProPath; - QString helpPath = "qthelp://com.trolltech.qt/qdoc/" + dirName.replace("/", "-") + "-" + fn + ".html"; - - m_d->ui.examplesComboBox->addItem(" " + name, fileName); - m_d->ui.examplesComboBox->setItemData(m_d->ui.examplesComboBox->count()-1, helpPath, Qt::UserRole+1); + QSettings *settings = Core::ICore::instance()->settings(); + int tabId = settings->value("General/WelcomeTab", 0).toInt(); + + int pluginCount = m_d->ui.stackedWidget->count(); + if (tabId < pluginCount) { + m_d->ui.stackedWidget->setCurrentIndex(tabId); + QMapIterator<QAbstractButton*, QWidget*> it(m_d->buttonMap); + while (it.hasNext()) + if (it.next().value() == m_d->ui.stackedWidget->currentWidget()) { + it.key()->setChecked(true); + break; } - break; - case QXmlStreamReader::EndElement: - if (reader.name() == "category") - inExamples = false; - break; - default: - break; - } } + } -void WelcomeMode::slotEnableExampleButton(int index) -{ - QString fileName = m_d->ui.examplesComboBox->itemData(index, Qt::UserRole).toString(); - m_d->ui.openExampleButton->setEnabled(!fileName.isEmpty()); +void WelcomeMode::welcomePluginAdded(QObject *obj) +{ + if (IWelcomePage *plugin = qobject_cast<IWelcomePage*>(obj)) + { + QToolButton * btn = new QToolButton; + btn->setCheckable(true); + btn->setAutoExclusive(true); + btn->setText(plugin->title()); + btn->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); + connect (btn, SIGNAL(clicked()), SLOT(showClickedPage())); + int insertPos = 0; + QList<IWelcomePage*> plugins = PluginManager::instance()->getObjects<IWelcomePage>(); + foreach (IWelcomePage* p, plugins) { + if (plugin->priority() < p->priority()) + insertPos++; + else + break; + } + m_d->ui.stackedWidget->insertWidget(insertPos, plugin->page()); + m_d->buttonMap.insert(btn, plugin->page()); + m_d->buttonLayout->insertWidget(insertPos, btn); + } } -void WelcomeMode::slotOpenExample() +void WelcomeMode::showClickedPage() { - QComboBox *box = m_d->ui.examplesComboBox; - QString proFile = box->itemData(box->currentIndex(), Qt::UserRole).toString(); - QString helpFile = box->itemData(box->currentIndex(), Qt::UserRole + 1).toString(); - QStringList files; - QFileInfo fi(proFile); - QString tryFile = fi.path() + "/main.cpp"; - files << proFile; - if(!QFile::exists(tryFile)) - tryFile = fi.path() + '/' + fi.baseName() + ".cpp"; - if(QFile::exists(tryFile)) - files << tryFile; - Core::ICore::instance()->openFiles(files); - emit openContextHelpPage(helpFile); + QAbstractButton *btn = qobject_cast<QAbstractButton*>(sender()); + QMap<QAbstractButton*, QWidget*>::iterator it = m_d->buttonMap.find(btn); + if (it.value()) + m_d->ui.stackedWidget->setCurrentWidget(it.value()); } void WelcomeMode::slotFeedback() @@ -404,71 +222,5 @@ void WelcomeMode::slotFeedback() "http://qtsoftware.com/forms/feedback-forms/qt-creator-user-feedback/view"))); } -void WelcomeMode::slotCreateNewProject() -{ - Core::ICore::instance()->showNewItemDialog(tr("New Project..."), - Core::IWizard::wizardsOfKind(Core::IWizard::ProjectWizard)); -} - -void WelcomeMode::slotNextTip() -{ - QStringList tips = tipsOfTheDay(); - m_d->currentTip = ((m_d->currentTip+1)%tips.count()); - m_d->ui.didYouKnowTextBrowser->setText(tips.at(m_d->currentTip)); -} - -void WelcomeMode::slotPrevTip() -{ - QStringList tips = tipsOfTheDay(); - m_d->currentTip = ((m_d->currentTip-1)+tips.count())%tips.count(); - m_d->ui.didYouKnowTextBrowser->setText(tips.at(m_d->currentTip)); -} - -QStringList WelcomeMode::tipsOfTheDay() -{ - static QStringList tips; - if (tips.isEmpty()) { - QString altShortcut = -#ifdef Q_WS_MAC - tr("Cmd", "Shortcut key"); -#else - tr("Alt", "Shortcut key"); -#endif - tips.append(tr("You can switch between Qt Creator's modes using <tt>Ctrl+number</tt>:<ul>" - "<li>1 - Welcome</li><li>2 - Edit</li><li>3 - Debug</li><li>4 - Projects</li><li>5 - Help</li>" - "<li></li><li>6 - Output</li></ul>")); - //:%1 gets replaced by Alt (Win/Unix) or Cmd (Mac) - tips.append(tr("You can show and hide the side bar using <tt>%1+0<tt>.").arg(altShortcut)); - tips.append(tr("You can fine tune the <tt>Find</tt> function by selecting "Whole Words" " - "or "Case Sensitive". Simply click on the icons on the right end of the line edit.")); - tips.append(tr("If you add <a href=\"qthelp://com.nokia.qtcreator/doc/creator-external-library-handling.html\"" - ">external libraries</a>, Qt Creator will automatically offer syntax highlighting " - "and code completion.")); - tips.append(tr("The code completion is CamelCase-aware. For example, to complete <tt>namespaceUri</tt> " - "you can just type <tt>nU</tt> and hit <tt>Ctrl+Space</tt>.")); - tips.append(tr("You can force code completion at any time using <tt>Ctrl+Space</tt>.")); - tips.append(tr("You can start Qt Creator with a session by calling <tt>qtcreator <sessionname></tt>.")); - tips.append(tr("You can return to edit mode from any other mode at any time by hitting <tt>Escape</tt>.")); - //:%1 gets replaced by Alt (Win/Unix) or Cmd (Mac) - tips.append(tr("You can switch between the output pane by hitting <tt>%1+n</tt> where n is the number denoted " - "on the buttons at the window bottom:" - "<ul><li>1 - Build Issues</li><li>2 - Search Results</li><li>3 - Application Output</li>" - "<li>4 - Compile Output</li></ul>").arg(altShortcut)); - tips.append(tr("You can quickly search methods, classes, help and more using the " - "<a href=\"qthelp://com.nokia.qtcreator/doc/creator-navigation.html\">Locator bar</a> (<tt>Ctrl+K</tt>).")); - tips.append(tr("You can add custom build steps in the " - "<a href=\"qthelp://com.nokia.qtcreator/doc/creator-build-settings.html\">build settings</a>.")); - tips.append(tr("Within a session, you can add " - "<a href=\"qthelp://com.nokia.qtcreator/doc/creator-build-settings.html#dependencies\">dependencies</a> between projects.")); - tips.append(tr("You can set the preferred editor encoding for every project in <tt>Projects -> Editor Settings -> Default Encoding</tt>.")); - tips.append(tr("You can modify the binary that is being executed when you press the <tt>Run</tt> button: Add a <tt>Custom Executable</tt> " - "by clicking the <tt>+</tt> button in <tt>Projects -> Run Settings -> Run Configuration</tt> and then select the new " - "target in the combo box.")); - tips.append(tr("You can use Qt Creator with a number of <a href=\"qthelp://com.nokia.qtcreator/doc/creator-version-control.html\">" - "revision control systems</a> such as Subversion, Perforce and Git.")); - tips.append(tr("In the editor, <tt>F2</tt> toggles declaration and definition while <tt>F4</tt> toggles header file and source file.")); - } - return tips; -} } // namespace Welcome diff --git a/src/plugins/welcome/welcomemode.h b/src/plugins/welcome/welcomemode.h index 0555ce60f30ce1fa2fb640f8236045fc607eb684..1576d2489b3b0036bb198d833c537b97e8e1eb36 100644 --- a/src/plugins/welcome/welcomemode.h +++ b/src/plugins/welcome/welcomemode.h @@ -54,18 +54,6 @@ public: WelcomeMode(); ~WelcomeMode(); - struct WelcomePageData{ - bool operator==(const WelcomePageData &rhs) const; - bool operator!=(const WelcomePageData &rhs) const; - - QString previousSession; - QString activeSession; - QStringList sessionList; - QList<QPair<QString, QString> > projectList; // pair of filename, displayname - }; - - void updateWelcomePage(const WelcomePageData &welcomePageData); - // IMode QString name() const; QIcon icon() const; @@ -75,31 +63,14 @@ public: QList<int> context() const; void activated(); QString contextHelpId() const { return QLatin1String("Qt Creator"); } - - void updateExamples(const QString& examplePath, const QString& demosPath, const QString &sourcePath); - -signals: - void requestProject(const QString &project); - void requestSession(const QString &session); - void openHelpPage(const QString& url); - void openContextHelpPage(const QString& url); - void manageSessions(); + void initPlugins(); private slots: void slotFeedback(); - void slotSessionClicked(const QString &data); - void slotProjectClicked(const QString &data); - void slotUrlClicked(const QString &data); - void slotEnableExampleButton(int); - void slotOpenExample(); - void slotCreateNewProject(); - void slotNextTip(); - void slotPrevTip(); + void welcomePluginAdded(QObject*); + void showClickedPage(); private: - void activateEditMode(); - QStringList tipsOfTheDay(); - WelcomeModePrivate *m_d; }; diff --git a/src/plugins/welcome/welcomemode.ui b/src/plugins/welcome/welcomemode.ui index c70aabbafa596945238dac13f671c0e704f899fe..e1c18bde915df9ad104b728a87fae44a5dccf400 100644 --- a/src/plugins/welcome/welcomemode.ui +++ b/src/plugins/welcome/welcomemode.ui @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> <ui version="4.0"> - <class>Welcome::WelcomePage</class> - <widget class="QWidget" name="Core::Utils::WelcomePage"> + <class>Welcome::WelcomeMode</class> + <widget class="QWidget" name="Welcome::WelcomeMode"> <property name="geometry"> <rect> <x>0</x> @@ -172,6 +172,12 @@ QToolButton:pressed, QPushButton:pressed{ <verstretch>0</verstretch> </sizepolicy> </property> + <property name="minimumSize"> + <size> + <width>0</width> + <height>10</height> + </size> + </property> <property name="font"> <font> <weight>50</weight> @@ -238,129 +244,6 @@ QToolButton:pressed { <property name="frameShadow"> <enum>QFrame::Plain</enum> </property> - <layout class="QGridLayout" name="gridLayout_2"> - <property name="margin"> - <number>0</number> - </property> - <property name="spacing"> - <number>0</number> - </property> - <item row="0" column="0"> - <widget class="QToolButton" name="gettingStartedSectButton"> - <property name="enabled"> - <bool>true</bool> - </property> - <property name="sizePolicy"> - <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="minimumSize"> - <size> - <width>0</width> - <height>0</height> - </size> - </property> - <property name="font"> - <font> - <pointsize>-1</pointsize> - </font> - </property> - <property name="styleSheet"> - <string notr="true"/> - </property> - <property name="text"> - <string>Getting Started</string> - </property> - <property name="checkable"> - <bool>true</bool> - </property> - <property name="checked"> - <bool>true</bool> - </property> - <property name="autoExclusive"> - <bool>false</bool> - </property> - </widget> - </item> - <item row="0" column="1"> - <widget class="QToolButton" name="developSectButton"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="minimumSize"> - <size> - <width>0</width> - <height>0</height> - </size> - </property> - <property name="font"> - <font> - <pointsize>-1</pointsize> - </font> - </property> - <property name="text"> - <string>Develop</string> - </property> - <property name="checkable"> - <bool>true</bool> - </property> - <property name="autoExclusive"> - <bool>false</bool> - </property> - </widget> - </item> - <item row="0" column="2"> - <widget class="QToolButton" name="communitySectButton"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="minimumSize"> - <size> - <width>0</width> - <height>0</height> - </size> - </property> - <property name="font"> - <font> - <pointsize>-1</pointsize> - </font> - </property> - <property name="styleSheet"> - <string notr="true"/> - </property> - <property name="text"> - <string>Community</string> - </property> - <property name="checkable"> - <bool>true</bool> - </property> - </widget> - </item> - <item row="0" column="3"> - <spacer name="horizontalSpacer_2"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - <property name="sizeType"> - <enum>QSizePolicy::Fixed</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>5</width> - <height>20</height> - </size> - </property> - </spacer> - </item> - </layout> </widget> </item> <item> @@ -368,575 +251,7 @@ QToolButton:pressed { <property name="currentIndex"> <number>0</number> </property> - <widget class="QWidget" name="gettingStartedPage"> - <layout class="QGridLayout" name="gridLayout_9"> - <property name="leftMargin"> - <number>18</number> - </property> - <property name="topMargin"> - <number>18</number> - </property> - <property name="rightMargin"> - <number>12</number> - </property> - <property name="bottomMargin"> - <number>18</number> - </property> - <property name="spacing"> - <number>24</number> - </property> - <item row="0" column="0" rowspan="2"> - <widget class="QFrame" name="tutorialsFrame"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="maximumSize"> - <size> - <width>400</width> - <height>16777215</height> - </size> - </property> - <property name="styleSheet"> - <string/> - </property> - <layout class="QGridLayout" name="gridLayout_6"> - <item row="0" column="0"> - <widget class="QLabel" name="tutorialsTitleLabel"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="alignment"> - <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> - </property> - </widget> - </item> - <item row="1" column="0"> - <widget class="Core::Utils::WelcomeModeTreeWidget" name="tutorialTreeWidget"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="focusPolicy"> - <enum>Qt::NoFocus</enum> - </property> - <property name="frameShape"> - <enum>QFrame::NoFrame</enum> - </property> - <property name="selectionMode"> - <enum>QAbstractItemView::NoSelection</enum> - </property> - <property name="verticalScrollMode"> - <enum>QAbstractItemView::ScrollPerPixel</enum> - </property> - <property name="rootIsDecorated"> - <bool>false</bool> - </property> - <property name="uniformRowHeights"> - <bool>true</bool> - </property> - <property name="allColumnsShowFocus"> - <bool>true</bool> - </property> - <property name="columnCount"> - <number>2</number> - </property> - <attribute name="headerVisible"> - <bool>false</bool> - </attribute> - <attribute name="headerDefaultSectionSize"> - <number>24</number> - </attribute> - <attribute name="headerMinimumSectionSize"> - <number>0</number> - </attribute> - <column> - <property name="text"> - <string notr="true">1</string> - </property> - </column> - <column> - <property name="text"> - <string notr="true">2</string> - </property> - </column> - </widget> - </item> - </layout> - </widget> - </item> - <item row="0" column="1"> - <widget class="QFrame" name="demosExamplesFrame"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="maximumSize"> - <size> - <width>400</width> - <height>16777215</height> - </size> - </property> - <property name="styleSheet"> - <string/> - </property> - <layout class="QGridLayout" name="gridLayout_8"> - <property name="rightMargin"> - <number>8</number> - </property> - <property name="horizontalSpacing"> - <number>0</number> - </property> - <item row="0" column="0" colspan="4"> - <widget class="QLabel" name="demoTitleLabel"> - <property name="alignment"> - <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> - </property> - </widget> - </item> - <item row="1" column="0"> - <widget class="QComboBox" name="examplesComboBox"> - <property name="enabled"> - <bool>false</bool> - </property> - <property name="sizePolicy"> - <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <item> - <property name="text"> - <string>Examples not installed</string> - </property> - </item> - </widget> - </item> - <item row="1" column="2"> - <widget class="QToolButton" name="openExampleButton"> - <property name="enabled"> - <bool>false</bool> - </property> - <property name="sizePolicy"> - <sizepolicy hsizetype="Fixed" vsizetype="Preferred"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="text"> - <string>Open</string> - </property> - </widget> - </item> - <item row="1" column="1"> - <spacer name="horizontalSpacer"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - <property name="sizeType"> - <enum>QSizePolicy::Fixed</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>6</width> - <height>6</height> - </size> - </property> - </spacer> - </item> - </layout> - </widget> - </item> - <item row="1" column="1"> - <widget class="QFrame" name="didyouKnowFrame"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="maximumSize"> - <size> - <width>400</width> - <height>16777215</height> - </size> - </property> - <property name="styleSheet"> - <string/> - </property> - <layout class="QGridLayout" name="gridLayout_11"> - <property name="rightMargin"> - <number>9</number> - </property> - <item row="0" column="0"> - <widget class="QLabel" name="didYouKnowTitleLabel"> - <property name="sizePolicy"> - <sizepolicy hsizetype="MinimumExpanding" vsizetype="Maximum"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="alignment"> - <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> - </property> - </widget> - </item> - <item row="1" column="0" colspan="2"> - <widget class="QTextBrowser" name="didYouKnowTextBrowser"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Minimum" vsizetype="Preferred"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="frameShape"> - <enum>QFrame::NoFrame</enum> - </property> - <property name="frameShadow"> - <enum>QFrame::Plain</enum> - </property> - <property name="verticalScrollBarPolicy"> - <enum>Qt::ScrollBarAlwaysOff</enum> - </property> - <property name="horizontalScrollBarPolicy"> - <enum>Qt::ScrollBarAlwaysOff</enum> - </property> - <property name="openExternalLinks"> - <bool>true</bool> - </property> - </widget> - </item> - <item row="0" column="1"> - <layout class="QGridLayout" name="gridLayout_10"> - <property name="spacing"> - <number>0</number> - </property> - <item row="0" column="0" colspan="2"> - <spacer name="verticalSpacer_4"> - <property name="orientation"> - <enum>Qt::Vertical</enum> - </property> - <property name="sizeType"> - <enum>QSizePolicy::Preferred</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>20</width> - <height>2</height> - </size> - </property> - </spacer> - </item> - <item row="1" column="0"> - <widget class="QToolButton" name="prevTipBtn"> - <property name="styleSheet"> - <string notr="true">QToolButton{ - border-right:solid 0 px; - height:16px; - width:12px; -} -</string> - </property> - <property name="text"> - <string/> - </property> - <property name="icon"> - <iconset resource="welcome.qrc"> - <normaloff>:/welcome/images/arrow-left.png</normaloff>:/welcome/images/arrow-left.png</iconset> - </property> - <property name="arrowType"> - <enum>Qt::NoArrow</enum> - </property> - </widget> - </item> - <item row="1" column="1"> - <widget class="QToolButton" name="nextTipBtn"> - <property name="styleSheet"> - <string notr="true">QToolButton{ - border-left:solid 0 px; - height:16px; - width:12px; -} -</string> - </property> - <property name="text"> - <string/> - </property> - <property name="icon"> - <iconset resource="welcome.qrc"> - <normaloff>:/welcome/images/arrow-right.png</normaloff>:/welcome/images/arrow-right.png</iconset> - </property> - <property name="arrowType"> - <enum>Qt::NoArrow</enum> - </property> - </widget> - </item> - <item row="2" column="0" colspan="2"> - <spacer name="verticalSpacer_3"> - <property name="orientation"> - <enum>Qt::Vertical</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>20</width> - <height>2</height> - </size> - </property> - </spacer> - </item> - </layout> - </item> - </layout> - </widget> - </item> - </layout> - </widget> - <widget class="QWidget" name="developPage"> - <layout class="QGridLayout" name="gridLayout_4"> - <property name="margin"> - <number>18</number> - </property> - <property name="spacing"> - <number>24</number> - </property> - <item row="0" column="0"> - <widget class="QFrame" name="recentSessionsFrame"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="minimumSize"> - <size> - <width>270</width> - <height>130</height> - </size> - </property> - <property name="styleSheet"> - <string/> - </property> - <layout class="QGridLayout" name="gridLayout_3"> - <property name="horizontalSpacing"> - <number>0</number> - </property> - <property name="verticalSpacing"> - <number>3</number> - </property> - <item row="0" column="0" colspan="3"> - <widget class="QLabel" name="recentSessionsTitleLabel"> - <property name="sizePolicy"> - <sizepolicy hsizetype="MinimumExpanding" vsizetype="Maximum"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="alignment"> - <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> - </property> - </widget> - </item> - <item row="1" column="0" colspan="3"> - <widget class="Core::Utils::WelcomeModeTreeWidget" name="sessTreeWidget"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="focusPolicy"> - <enum>Qt::NoFocus</enum> - </property> - <property name="frameShape"> - <enum>QFrame::NoFrame</enum> - </property> - <property name="selectionMode"> - <enum>QAbstractItemView::NoSelection</enum> - </property> - <property name="verticalScrollMode"> - <enum>QAbstractItemView::ScrollPerPixel</enum> - </property> - <property name="rootIsDecorated"> - <bool>false</bool> - </property> - <property name="uniformRowHeights"> - <bool>true</bool> - </property> - <property name="allColumnsShowFocus"> - <bool>true</bool> - </property> - <property name="columnCount"> - <number>2</number> - </property> - <attribute name="headerVisible"> - <bool>false</bool> - </attribute> - <attribute name="headerDefaultSectionSize"> - <number>24</number> - </attribute> - <attribute name="headerMinimumSectionSize"> - <number>0</number> - </attribute> - <column> - <property name="text"> - <string notr="true">1</string> - </property> - </column> - <column> - <property name="text"> - <string notr="true">2</string> - </property> - </column> - </widget> - </item> - <item row="3" column="0"> - <widget class="QPushButton" name="manageSessionsButton"> - <property name="focusPolicy"> - <enum>Qt::TabFocus</enum> - </property> - <property name="text"> - <string>Manage Sessions...</string> - </property> - </widget> - </item> - <item row="4" column="0"> - <spacer name="verticalSpacer"> - <property name="orientation"> - <enum>Qt::Vertical</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>20</width> - <height>40</height> - </size> - </property> - </spacer> - </item> - </layout> - </widget> - </item> - <item row="0" column="2"> - <widget class="QFrame" name="recentProjectsFrame"> - <property name="styleSheet"> - <string/> - </property> - <layout class="QGridLayout" name="gridLayout_5"> - <property name="horizontalSpacing"> - <number>0</number> - </property> - <property name="verticalSpacing"> - <number>3</number> - </property> - <property name="rightMargin"> - <number>9</number> - </property> - <item row="0" column="0" colspan="3"> - <widget class="QLabel" name="projTitleLabel"> - <property name="sizePolicy"> - <sizepolicy hsizetype="MinimumExpanding" vsizetype="Maximum"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="alignment"> - <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> - </property> - </widget> - </item> - <item row="1" column="0" colspan="3"> - <widget class="Core::Utils::WelcomeModeTreeWidget" name="projTreeWidget"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="focusPolicy"> - <enum>Qt::NoFocus</enum> - </property> - <property name="frameShape"> - <enum>QFrame::NoFrame</enum> - </property> - <property name="selectionMode"> - <enum>QAbstractItemView::NoSelection</enum> - </property> - <property name="verticalScrollMode"> - <enum>QAbstractItemView::ScrollPerPixel</enum> - </property> - <property name="rootIsDecorated"> - <bool>false</bool> - </property> - <property name="uniformRowHeights"> - <bool>true</bool> - </property> - <property name="allColumnsShowFocus"> - <bool>true</bool> - </property> - <property name="columnCount"> - <number>2</number> - </property> - <attribute name="headerVisible"> - <bool>false</bool> - </attribute> - <attribute name="headerDefaultSectionSize"> - <number>24</number> - </attribute> - <attribute name="headerMinimumSectionSize"> - <number>0</number> - </attribute> - <column> - <property name="text"> - <string notr="true">1</string> - </property> - </column> - <column> - <property name="text"> - <string notr="true">2</string> - </property> - </column> - </widget> - </item> - <item row="3" column="0"> - <widget class="QPushButton" name="createNewProjectButton"> - <property name="focusPolicy"> - <enum>Qt::TabFocus</enum> - </property> - <property name="text"> - <string>Create New Project...</string> - </property> - <property name="flat"> - <bool>true</bool> - </property> - </widget> - </item> - <item row="4" column="0"> - <spacer name="verticalSpacer_2"> - <property name="orientation"> - <enum>Qt::Vertical</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>20</width> - <height>40</height> - </size> - </property> - </spacer> - </item> - </layout> - </widget> - </item> - </layout> - </widget> - <widget class="QWidget" name="communityPage"> + <widget class="QWidget" name="widget"> <layout class="QGridLayout" name="gridLayout_7"> <property name="margin"> <number>18</number> @@ -944,168 +259,6 @@ QToolButton:pressed { <property name="spacing"> <number>24</number> </property> - <item row="0" column="0"> - <widget class="QFrame" name="labsFrame"> - <property name="frameShape"> - <enum>QFrame::NoFrame</enum> - </property> - <property name="frameShadow"> - <enum>QFrame::Plain</enum> - </property> - <layout class="QVBoxLayout" name="verticalLayout_2"> - <item> - <widget class="QLabel" name="labsTitleLabel"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="alignment"> - <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> - </property> - </widget> - </item> - <item> - <widget class="Core::Utils::WelcomeModeTreeWidget" name="newsTreeWidget"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="minimumSize"> - <size> - <width>340</width> - <height>0</height> - </size> - </property> - <property name="focusPolicy"> - <enum>Qt::NoFocus</enum> - </property> - <property name="frameShape"> - <enum>QFrame::NoFrame</enum> - </property> - <property name="selectionMode"> - <enum>QAbstractItemView::NoSelection</enum> - </property> - <property name="verticalScrollMode"> - <enum>QAbstractItemView::ScrollPerPixel</enum> - </property> - <property name="rootIsDecorated"> - <bool>false</bool> - </property> - <property name="uniformRowHeights"> - <bool>true</bool> - </property> - <property name="allColumnsShowFocus"> - <bool>true</bool> - </property> - <property name="columnCount"> - <number>2</number> - </property> - <attribute name="headerVisible"> - <bool>false</bool> - </attribute> - <attribute name="headerDefaultSectionSize"> - <number>24</number> - </attribute> - <attribute name="headerMinimumSectionSize"> - <number>0</number> - </attribute> - <column> - <property name="text"> - <string notr="true">1</string> - </property> - </column> - <column> - <property name="text"> - <string notr="true">2</string> - </property> - </column> - </widget> - </item> - </layout> - </widget> - </item> - <item row="0" column="1"> - <widget class="QFrame" name="sitesFrame"> - <property name="frameShape"> - <enum>QFrame::NoFrame</enum> - </property> - <property name="frameShadow"> - <enum>QFrame::Plain</enum> - </property> - <layout class="QVBoxLayout" name="verticalLayout_3"> - <item> - <widget class="QLabel" name="sitesTitleLabel"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="alignment"> - <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> - </property> - </widget> - </item> - <item> - <widget class="Core::Utils::WelcomeModeTreeWidget" name="sitesTreeWidget"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="focusPolicy"> - <enum>Qt::NoFocus</enum> - </property> - <property name="frameShape"> - <enum>QFrame::NoFrame</enum> - </property> - <property name="selectionMode"> - <enum>QAbstractItemView::NoSelection</enum> - </property> - <property name="verticalScrollMode"> - <enum>QAbstractItemView::ScrollPerPixel</enum> - </property> - <property name="rootIsDecorated"> - <bool>false</bool> - </property> - <property name="uniformRowHeights"> - <bool>true</bool> - </property> - <property name="allColumnsShowFocus"> - <bool>true</bool> - </property> - <property name="columnCount"> - <number>2</number> - </property> - <attribute name="headerVisible"> - <bool>false</bool> - </attribute> - <attribute name="headerDefaultSectionSize"> - <number>24</number> - </attribute> - <attribute name="headerMinimumSectionSize"> - <number>0</number> - </attribute> - <column> - <property name="text"> - <string notr="true">1</string> - </property> - </column> - <column> - <property name="text"> - <string notr="true">2</string> - </property> - </column> - </widget> - </item> - </layout> - </widget> - </item> </layout> </widget> </widget> @@ -1219,13 +372,6 @@ QToolButton:pressed { </item> </layout> </widget> - <customwidgets> - <customwidget> - <class>Core::Utils::WelcomeModeTreeWidget</class> - <extends>QTreeWidget</extends> - <header>utils/welcomemodetreewidget.h</header> - </customwidget> - </customwidgets> <resources> <include location="welcome.qrc"/> </resources> diff --git a/src/plugins/welcome/welcomeplugin.cpp b/src/plugins/welcome/welcomeplugin.cpp index e9743a9428c394fe89e9892e772e3927e0e786e9..e7906f14bcf0fd41066a7e72ebd05a1e1ef6ab98 100644 --- a/src/plugins/welcome/welcomeplugin.cpp +++ b/src/plugins/welcome/welcomeplugin.cpp @@ -31,6 +31,8 @@ #include "welcomemode.h" +#include "communitywelcomepage.h" + #include <coreplugin/actionmanager/actionmanager.h> #include <coreplugin/basemode.h> #include <coreplugin/coreconstants.h> @@ -45,11 +47,10 @@ #include <QtGui/QMessageBox> #include <QtGui/QPushButton> -using namespace Welcome; - +using namespace Welcome::Internal; WelcomePlugin::WelcomePlugin() - : m_welcomeMode(0) + : m_welcomeMode(0), m_communityWelcomePage(0) { } @@ -59,6 +60,10 @@ WelcomePlugin::~WelcomePlugin() removeObject(m_welcomeMode); delete m_welcomeMode; } + if (m_communityWelcomePage) { + removeObject(m_communityWelcomePage); + delete m_communityWelcomePage; + } } /*! Initializes the plugin. Returns true on success. @@ -72,6 +77,9 @@ bool WelcomePlugin::initialize(const QStringList &arguments, QString *error_mess Q_UNUSED(arguments) Q_UNUSED(error_message) + m_communityWelcomePage = new Internal::CommunityWelcomePage; + addObject(m_communityWelcomePage); + m_welcomeMode = new WelcomeMode; addObject(m_welcomeMode); @@ -91,6 +99,7 @@ bool WelcomePlugin::initialize(const QStringList &arguments, QString *error_mess */ void WelcomePlugin::extensionsInitialized() { + m_welcomeMode->initPlugins(); Core::ModeManager::instance()->activateMode(m_welcomeMode->uniqueModeName()); } diff --git a/src/plugins/welcome/welcomeplugin.h b/src/plugins/welcome/welcomeplugin.h index 970ec399500b5174398ffe45fb4b0af85eaf3f73..54275b045cb26a319aab301638743c2ec4cb0a5c 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 diff --git a/tests/manual/trk/trkserver.cpp b/tests/manual/trk/trkserver.cpp index c36169b059154de862d270bc194d5106bedac79f..83cea50c3968b473f757bc57126d40411e3d37f4 100644 --- a/tests/manual/trk/trkserver.cpp +++ b/tests/manual/trk/trkserver.cpp @@ -118,7 +118,7 @@ public: void setServerName(const QString &name) { m_serverName = name; } void setMemoryDumpName(const QString &source) { m_memoryDumpName = source; } void setVerbose(int v) { m_verbose = v; } - void startServer(); + bool startServer(); private slots: void handleConnection(); @@ -157,25 +157,29 @@ TrkServer::~TrkServer() m_server.close(); } -void TrkServer::startServer() +bool TrkServer::startServer() { QFile file(m_memoryDumpName); - file.open(QIODevice::ReadOnly); + if (!file.open(QIODevice::ReadOnly)) { + logMessage(QString::fromLatin1("Unable to read %1: %2").arg(m_memoryDumpName, file.errorString()), true); + return false; + } m_memoryData = file.readAll(); file.close(); logMessage(QString("Read %1 bytes of data from %2") - .arg(m_memoryData.size()).arg(m_memoryDumpName)); + .arg(m_memoryData.size()).arg(m_memoryDumpName), true); m_lastSent = 0; if (!m_server.listen(m_serverName)) { logMessage(QString("Error: Unable to start the TRK server %1: %2.") .arg(m_serverName).arg(m_server.errorString()), true); - return; + return false; } logMessage("The TRK server '" + m_serverName + "'is running. Run the adapter now.", true); connect(&m_server, SIGNAL(newConnection()), this, SLOT(handleConnection())); + return true; } void TrkServer::logMessage(const QString &msg, bool force) @@ -384,7 +388,8 @@ int main(int argc, char *argv[]) server.setServerName(options.serverName); server.setMemoryDumpName(options.dumpName); server.setVerbose(options.verbose); - server.startServer(); + if (!server.startServer()) + return -1; return app.exec(); }