forked from qt-creator/qt-creator
Merge branch 'master' of git@scm.dev.nokia.troll.no:creator/mainline
This commit is contained in:
@@ -503,7 +503,7 @@ QStringList BaseFileWizard::runWizard(const QString &path, QWidget *parent)
|
||||
|
||||
QPixmap BaseFileWizard::watermark()
|
||||
{
|
||||
return QPixmap(QLatin1String(":/qworkbench/images/qtwatermark.png"));
|
||||
return QPixmap(QLatin1String(":/core/images/qtwatermark.png"));
|
||||
}
|
||||
|
||||
void BaseFileWizard::setupWizard(QWizard *w)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<RCC>
|
||||
<qresource prefix="/qworkbench" >
|
||||
<qresource prefix="/core" >
|
||||
<file>html/images/bg_site_header_dark_grey.png</file>
|
||||
<file>html/images/body_bg_circles_bottom_right.png</file>
|
||||
<file>html/images/body_bg_gradient.png</file>
|
||||
|
||||
@@ -194,27 +194,27 @@ const char * const G_WINDOW_LIST = "QtCreator.Group.Window.List";
|
||||
const char * const G_HELP_HELP = "QtCreator.Group.Help.Help";
|
||||
const char * const G_HELP_ABOUT = "QtCreator.Group.Help.About";
|
||||
|
||||
const char * const ICON_MINUS = ":/qworkbench/images/minus.png";
|
||||
const char * const ICON_PLUS = ":/qworkbench/images/plus.png";
|
||||
const char * const ICON_NEWFILE = ":/qworkbench/images/filenew.png";
|
||||
const char * const ICON_OPENFILE = ":/qworkbench/images/fileopen.png";
|
||||
const char * const ICON_SAVEFILE = ":/qworkbench/images/filesave.png";
|
||||
const char * const ICON_UNDO = ":/qworkbench/images/undo.png";
|
||||
const char * const ICON_REDO = ":/qworkbench/images/redo.png";
|
||||
const char * const ICON_COPY = ":/qworkbench/images/editcopy.png";
|
||||
const char * const ICON_PASTE = ":/qworkbench/images/editpaste.png";
|
||||
const char * const ICON_CUT = ":/qworkbench/images/editcut.png";
|
||||
const char * const ICON_NEXT = ":/qworkbench/images/next.png";
|
||||
const char * const ICON_PREV = ":/qworkbench/images/prev.png";
|
||||
const char * const ICON_DIR = ":/qworkbench/images/dir.png";
|
||||
const char * const ICON_CLEAN_PANE = ":/qworkbench/images/clean_pane_small.png";
|
||||
const char * const ICON_CLEAR = ":/qworkbench/images/clear.png";
|
||||
const char * const ICON_FIND = ":/qworkbench/images/find.png";
|
||||
const char * const ICON_FINDNEXT = ":/qworkbench/images/findnext.png";
|
||||
const char * const ICON_REPLACE = ":/qworkbench/images/replace.png";
|
||||
const char * const ICON_RESET = ":/qworkbench/images/reset.png";
|
||||
const char * const ICON_MAGNIFIER = ":/qworkbench/images/magnifier.png";
|
||||
const char * const ICON_TOGGLE_SIDEBAR = ":/qworkbench/images/sidebaricon.png";
|
||||
const char * const ICON_MINUS = ":/core/images/minus.png";
|
||||
const char * const ICON_PLUS = ":/core/images/plus.png";
|
||||
const char * const ICON_NEWFILE = ":/core/images/filenew.png";
|
||||
const char * const ICON_OPENFILE = ":/core/images/fileopen.png";
|
||||
const char * const ICON_SAVEFILE = ":/core/images/filesave.png";
|
||||
const char * const ICON_UNDO = ":/core/images/undo.png";
|
||||
const char * const ICON_REDO = ":/core/images/redo.png";
|
||||
const char * const ICON_COPY = ":/core/images/editcopy.png";
|
||||
const char * const ICON_PASTE = ":/core/images/editpaste.png";
|
||||
const char * const ICON_CUT = ":/core/images/editcut.png";
|
||||
const char * const ICON_NEXT = ":/core/images/next.png";
|
||||
const char * const ICON_PREV = ":/core/images/prev.png";
|
||||
const char * const ICON_DIR = ":/core/images/dir.png";
|
||||
const char * const ICON_CLEAN_PANE = ":/core/images/clean_pane_small.png";
|
||||
const char * const ICON_CLEAR = ":/core/images/clear.png";
|
||||
const char * const ICON_FIND = ":/core/images/find.png";
|
||||
const char * const ICON_FINDNEXT = ":/core/images/findnext.png";
|
||||
const char * const ICON_REPLACE = ":/core/images/replace.png";
|
||||
const char * const ICON_RESET = ":/core/images/reset.png";
|
||||
const char * const ICON_MAGNIFIER = ":/core/images/magnifier.png";
|
||||
const char * const ICON_TOGGLE_SIDEBAR = ":/core/images/sidebaricon.png";
|
||||
|
||||
// wizard kind
|
||||
const char * const WIZARD_TYPE_FILE = "QtCreator::WizardType::File";
|
||||
|
||||
@@ -84,11 +84,6 @@ MessageManager *CoreImpl::messageManager() const
|
||||
return m_mainwindow->messageManager();
|
||||
}
|
||||
|
||||
ViewManagerInterface *CoreImpl::viewManager() const
|
||||
{
|
||||
return m_mainwindow->viewManager();
|
||||
}
|
||||
|
||||
ExtensionSystem::PluginManager *CoreImpl::pluginManager() const
|
||||
{
|
||||
return m_mainwindow->pluginManager();
|
||||
@@ -148,15 +143,6 @@ QString CoreImpl::resourcePath() const
|
||||
#endif
|
||||
}
|
||||
|
||||
QString CoreImpl::libraryPath() const
|
||||
{
|
||||
#if defined(Q_OS_MAC)
|
||||
return QDir::cleanPath(QCoreApplication::applicationDirPath()+QLatin1String("/../PlugIns"));
|
||||
#else
|
||||
return QDir::cleanPath(QCoreApplication::applicationDirPath()+QLatin1String("/../lib"));
|
||||
#endif
|
||||
}
|
||||
|
||||
IContext *CoreImpl::currentContextObject() const
|
||||
{
|
||||
return m_mainwindow->currentContextObject();
|
||||
@@ -168,12 +154,6 @@ QMainWindow *CoreImpl::mainWindow() const
|
||||
return m_mainwindow;
|
||||
}
|
||||
|
||||
QStatusBar *CoreImpl::statusBar() const
|
||||
{
|
||||
return m_mainwindow->statusBar();
|
||||
}
|
||||
|
||||
|
||||
// adds and removes additional active contexts, this context is appended to the
|
||||
// currently active contexts. call updateContext after changing
|
||||
void CoreImpl::addAdditionalContext(int context)
|
||||
|
||||
@@ -60,7 +60,6 @@ public:
|
||||
FileManager *fileManager() const ;
|
||||
UniqueIDManager *uniqueIDManager() const;
|
||||
MessageManager *messageManager() const;
|
||||
ViewManagerInterface *viewManager() const;
|
||||
ExtensionSystem::PluginManager *pluginManager() const;
|
||||
EditorManager *editorManager() const;
|
||||
ProgressManagerInterface *progressManager() const;
|
||||
@@ -74,12 +73,10 @@ public:
|
||||
QPrinter *printer() const;
|
||||
|
||||
QString resourcePath() const;
|
||||
QString libraryPath() const;
|
||||
|
||||
IContext *currentContextObject() const;
|
||||
|
||||
QMainWindow *mainWindow() const;
|
||||
QStatusBar *statusBar() const;
|
||||
|
||||
// adds and removes additional active contexts, this context is appended to the
|
||||
// currently active contexts. call updateContext after changing
|
||||
|
||||
@@ -37,7 +37,6 @@
|
||||
#include "editormanager.h"
|
||||
#include "mainwindow.h"
|
||||
#include "modemanager.h"
|
||||
#include "viewmanager.h"
|
||||
#include "fileiconprovider.h"
|
||||
|
||||
#include <QtCore/qplugin.h>
|
||||
|
||||
@@ -31,8 +31,8 @@
|
||||
**
|
||||
***************************************************************************/
|
||||
|
||||
#ifndef QWORKBENCHPLUGIN_H
|
||||
#define QWORKBENCHPLUGIN_H
|
||||
#ifndef COREPLUGIN_H
|
||||
#define COREPLUGIN_H
|
||||
|
||||
#include <extensionsystem/iplugin.h>
|
||||
|
||||
@@ -68,4 +68,4 @@ private:
|
||||
} // namespace Internal
|
||||
} // namespace Core
|
||||
|
||||
#endif // QWORKBENCHPLUGIN_H
|
||||
#endif // COREPLUGIN_H
|
||||
|
||||
@@ -1,3 +1,2 @@
|
||||
include(coreplugin_dependencies.pri)
|
||||
|
||||
LIBS *= -l$$qtLibraryTarget(Core)
|
||||
|
||||
@@ -73,7 +73,8 @@ SOURCES += mainwindow.cpp \
|
||||
rightpane.cpp \
|
||||
sidebar.cpp \
|
||||
fileiconprovider.cpp \
|
||||
mimedatabase.cpp
|
||||
mimedatabase.cpp \
|
||||
icore.cpp
|
||||
HEADERS += mainwindow.h \
|
||||
welcomemode.h \
|
||||
editmode.h \
|
||||
|
||||
@@ -131,7 +131,7 @@
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../core.qrc">
|
||||
<normaloff>:/qworkbench/images/reset.png</normaloff>:/qworkbench/images/reset.png</iconset>
|
||||
<normaloff>:/core/images/reset.png</normaloff>:/core/images/reset.png</iconset>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
@@ -145,7 +145,7 @@
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../core.qrc">
|
||||
<normaloff>:/qworkbench/images/clear.png</normaloff>:/qworkbench/images/clear.png</iconset>
|
||||
<normaloff>:/core/images/clear.png</normaloff>:/core/images/clear.png</iconset>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
|
||||
@@ -118,7 +118,7 @@ QVariant EditorModel::data(const QModelIndex &index, int role) const
|
||||
: editor->displayName();
|
||||
case Qt::DecorationRole:
|
||||
return editor->file()->isReadOnly()
|
||||
? QIcon(QLatin1String(":/qworkbench/images/locked.png"))
|
||||
? QIcon(QLatin1String(":/core/images/locked.png"))
|
||||
: QIcon();
|
||||
case Qt::ToolTipRole:
|
||||
return editor->file()->fileName().isEmpty()
|
||||
|
||||
@@ -172,8 +172,8 @@ void OpenEditorsWidget::updateCurrentItem(QTreeWidgetItem *currentItem)
|
||||
//todo: this is almost duplicated in openeditorswindow
|
||||
void OpenEditorsWidget::updateItem(QTreeWidgetItem *item, IEditor *editor)
|
||||
{
|
||||
static const QIcon lockedIcon(QLatin1String(":/qworkbench/images/locked.png"));
|
||||
static const QIcon emptyIcon(QLatin1String(":/qworkbench/images/empty14.png"));
|
||||
static const QIcon lockedIcon(QLatin1String(":/core/images/locked.png"));
|
||||
static const QIcon emptyIcon(QLatin1String(":/core/images/empty14.png"));
|
||||
QString title = editor->displayName();
|
||||
if (editor->file()->isModified())
|
||||
title += tr("*");
|
||||
|
||||
@@ -300,8 +300,8 @@ void OpenEditorsWindow::centerOnItem(int selectedIndex)
|
||||
|
||||
void OpenEditorsWindow::updateItem(QTreeWidgetItem *item, IEditor *editor)
|
||||
{
|
||||
static const QIcon lockedIcon(QLatin1String(":/qworkbench/images/locked.png"));
|
||||
static const QIcon emptyIcon(QLatin1String(":/qworkbench/images/empty14.png"));
|
||||
static const QIcon lockedIcon(QLatin1String(":/core/images/locked.png"));
|
||||
static const QIcon emptyIcon(QLatin1String(":/core/images/empty14.png"));
|
||||
|
||||
QString title = editor->displayName();
|
||||
if (editor->file()->isModified())
|
||||
|
||||
@@ -103,7 +103,7 @@ StackedEditorGroup::StackedEditorGroup(QWidget *parent) :
|
||||
m_lockButton->setProperty("type", QLatin1String("dockbutton"));
|
||||
|
||||
m_closeButton->setAutoRaise(true);
|
||||
m_closeButton->setIcon(QIcon(":/qworkbench/images/closebutton.png"));
|
||||
m_closeButton->setIcon(QIcon(":/core/images/closebutton.png"));
|
||||
m_closeButton->setProperty("type", QLatin1String("dockbutton"));
|
||||
|
||||
QToolBar *rightToolBar = new QToolBar;
|
||||
@@ -150,7 +150,7 @@ StackedEditorGroup::StackedEditorGroup(QWidget *parent) :
|
||||
|
||||
QToolButton *closeButton = new QToolButton;
|
||||
closeButton->setAutoRaise(true);
|
||||
closeButton->setIcon(QIcon(":/qworkbench/images/clear.png"));
|
||||
closeButton->setIcon(QIcon(":/core/images/clear.png"));
|
||||
closeButton->setToolTip(tr("Close"));
|
||||
connect(closeButton, SIGNAL(clicked()), m_infoWidget, SLOT(hide()));
|
||||
|
||||
@@ -303,8 +303,8 @@ void StackedEditorGroup::checkEditorStatus()
|
||||
|
||||
void StackedEditorGroup::updateEditorStatus(IEditor *editor)
|
||||
{
|
||||
static const QIcon lockedIcon(QLatin1String(":/qworkbench/images/locked.png"));
|
||||
static const QIcon unlockedIcon(QLatin1String(":/qworkbench/images/unlocked.png"));
|
||||
static const QIcon lockedIcon(QLatin1String(":/core/images/locked.png"));
|
||||
static const QIcon unlockedIcon(QLatin1String(":/core/images/unlocked.png"));
|
||||
|
||||
if (editor->file()->isReadOnly()) {
|
||||
m_lockButton->setIcon(lockedIcon);
|
||||
|
||||
@@ -48,7 +48,7 @@ using namespace Core;
|
||||
FileIconProvider *FileIconProvider::m_instance = 0;
|
||||
|
||||
FileIconProvider::FileIconProvider()
|
||||
: m_unknownFileIcon(QLatin1String(":/qworkbench/images/unknownfile.png"))
|
||||
: m_unknownFileIcon(QLatin1String(":/core/images/unknownfile.png"))
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@@ -42,7 +42,8 @@
|
||||
|
||||
using namespace Core::Internal;
|
||||
|
||||
GeneralSettings::GeneralSettings()
|
||||
GeneralSettings::GeneralSettings():
|
||||
m_dialog(0)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -61,7 +62,7 @@ QString GeneralSettings::trCategory() const
|
||||
return tr("Environment");
|
||||
}
|
||||
|
||||
QWidget* GeneralSettings::createPage(QWidget *parent)
|
||||
QWidget *GeneralSettings::createPage(QWidget *parent)
|
||||
{
|
||||
m_page = new Ui_GeneralSettings;
|
||||
QWidget *w = new QWidget(parent);
|
||||
|
||||
@@ -77,7 +77,7 @@
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="core.qrc">
|
||||
<normaloff>:/qworkbench/images/reset.png</normaloff>:/qworkbench/images/reset.png</iconset>
|
||||
<normaloff>:/core/images/reset.png</normaloff>:/core/images/reset.png</iconset>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
@@ -118,7 +118,7 @@
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="core.qrc">
|
||||
<normaloff>:/qworkbench/images/reset.png</normaloff>:/qworkbench/images/reset.png</iconset>
|
||||
<normaloff>:/core/images/reset.png</normaloff>:/core/images/reset.png</iconset>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
|
||||
308
src/plugins/coreplugin/icore.cpp
Normal file
308
src/plugins/coreplugin/icore.cpp
Normal file
@@ -0,0 +1,308 @@
|
||||
#include "icore.h"
|
||||
|
||||
/*!
|
||||
\namespace Core
|
||||
\brief The Core namespace contains all classes that make up the Core plugin
|
||||
which constitute the basic functionality of Qt Creator.
|
||||
*/
|
||||
|
||||
/*!
|
||||
\namespace Core::Internal
|
||||
\internal
|
||||
*/
|
||||
|
||||
/*!
|
||||
\class Core::ICore
|
||||
\brief The ICore class allows access to the different part that make up
|
||||
the basic functionality of Qt Creator.
|
||||
|
||||
You should never create a subclass of this interface. The one and only
|
||||
instance is created by the Core plugin. You can access this instance
|
||||
from your plugin via the plugin manager, e.g.
|
||||
\code
|
||||
ExtensionSystem::PluginManager::instance()->getObject<Core::ICore>();
|
||||
\endcode
|
||||
|
||||
\mainclass
|
||||
*/
|
||||
|
||||
/*!
|
||||
\fn QStringList ICore::showNewItemDialog(const QString &title,
|
||||
const QList<IWizard *> &wizards,
|
||||
const QString &defaultLocation = QString())
|
||||
\brief Opens a dialog where the user can choose from a set of \a wizards that
|
||||
create new files/classes/projects.
|
||||
|
||||
The \a title argument is shown as the dialogs title. The path where the
|
||||
files will be created (if the user doesn't change it) is set
|
||||
in \a defaultLocation. It defaults to the path of the file manager's
|
||||
current file.
|
||||
|
||||
\sa Core::FileManager
|
||||
*/
|
||||
|
||||
/*!
|
||||
\fn void ICore::showOptionsDialog(const QString &group = QString(),
|
||||
const QString &page = QString())
|
||||
\brief Opens the application options/preferences dialog with preselected
|
||||
\a page in a specified \a group.
|
||||
|
||||
The arguments refer to the string IDs of the corresponding IOptionsPage.
|
||||
*/
|
||||
|
||||
/*!
|
||||
\fn ActionManagerInterface *ICore::actionManager() const
|
||||
\brief Returns the application's action manager.
|
||||
|
||||
The action manager is responsible for registration of menus and
|
||||
menu items and keyboard shortcuts.
|
||||
*/
|
||||
|
||||
/*!
|
||||
\fn FileManager *ICore::fileManager() const
|
||||
\brief Returns the application's file manager.
|
||||
|
||||
The file manager keeps track of files for changes outside the application.
|
||||
*/
|
||||
|
||||
/*!
|
||||
\fn UniqueIDManager *ICore::uniqueIDManager() const
|
||||
\brief Returns the application's id manager.
|
||||
|
||||
The unique ID manager transforms strings in unique integers and the other way round.
|
||||
*/
|
||||
|
||||
/*!
|
||||
\fn MessageManager *ICore::messageManager() const
|
||||
\brief Returns the application's message manager.
|
||||
|
||||
The message manager is the interface to the "General" output pane for
|
||||
general application debug messages.
|
||||
*/
|
||||
|
||||
/*!
|
||||
\fn ExtensionSystem::PluginManager *ICore::pluginManager() const
|
||||
\brief Returns the application's plugin manager.
|
||||
|
||||
The plugin manager handles the plugin life cycles and manages
|
||||
the common object pool.
|
||||
*/
|
||||
|
||||
/*!
|
||||
\fn EditorManager *ICore::editorManager() const
|
||||
\brief Returns the application's editor manager.
|
||||
|
||||
The editor manager handles all editor related tasks like opening
|
||||
documents, the stack of currently open documents and the currently
|
||||
active document.
|
||||
*/
|
||||
|
||||
/*!
|
||||
\fn ProgressManagerInterface *ICore::progressManager() const
|
||||
\brief Returns the application's progress manager.
|
||||
|
||||
Use the progress manager to register a concurrent task to
|
||||
show a progress bar the way Qt Creator does it.
|
||||
*/
|
||||
|
||||
/*!
|
||||
\fn ScriptManagerInterface *ICore::scriptManager() const
|
||||
\internal
|
||||
*/
|
||||
|
||||
/*!
|
||||
\fn VariableManager *ICore::variableManager() const
|
||||
\brief Returns the application's variable manager.
|
||||
|
||||
The variable manager is used to register application wide string variables
|
||||
like \c MY_PROJECT_DIR such that strings like \c{somecommand ${MY_PROJECT_DIR}/sub}
|
||||
can be resolved/expanded from anywhere in the application.
|
||||
*/
|
||||
|
||||
/*!
|
||||
\fn VCSManager *ICore::vcsManager() const
|
||||
\brief Returns the application's vcs manager.
|
||||
|
||||
The vcs manager can be used to e.g. retrieve information about
|
||||
the version control system used for a directory on hard disk.
|
||||
The actual functionality for a specific version control system
|
||||
must be implemented in a IVersionControl object and registered in
|
||||
the plugin manager's object pool.
|
||||
*/
|
||||
|
||||
/*!
|
||||
\fn ModeManager *ICore::modeManager() const
|
||||
\brief Returns the application's mode manager.
|
||||
|
||||
The mode manager handles everything related to the instances of IMode
|
||||
that were added to the plugin manager's object pool as well as their
|
||||
buttons and the tool bar with the round buttons in the lower left
|
||||
corner of Qt Creator.
|
||||
*/
|
||||
|
||||
/*!
|
||||
\fn MimeDatabase *ICore::mimeDatabase() const
|
||||
\brief Returns the application's mime database.
|
||||
|
||||
Use the mime database to manage mime types.
|
||||
*/
|
||||
|
||||
/*!
|
||||
\fn QSettings *ICore::settings() const
|
||||
\brief Returns the application's main settings object.
|
||||
|
||||
You can use it to retrieve or set application wide settings
|
||||
(in contrast to session or project specific settings).
|
||||
*/
|
||||
|
||||
/*!
|
||||
\fn QPrinter *ICore::printer() const
|
||||
\brief Returns the application's printer object.
|
||||
|
||||
Always use this printer object for printing, so the different parts of the
|
||||
application re-use it's settings.
|
||||
*/
|
||||
|
||||
/*!
|
||||
\fn QString ICore::resourcePath() const
|
||||
\brief Returns the absolute path that is used for resources like
|
||||
project templates and the debugger macros.
|
||||
|
||||
This abstraction is needed to avoid platform-specific code all over
|
||||
the place, since e.g. on Mac the resources are part of the application bundle.
|
||||
*/
|
||||
|
||||
/*!
|
||||
\fn QMainWindow *ICore::mainWindow() const
|
||||
\brief Returns the main application window.
|
||||
|
||||
For use as dialog parent etc.
|
||||
*/
|
||||
|
||||
/*!
|
||||
\fn IContext *ICore::currentContextObject() const
|
||||
\brief Returns the context object of the current main context.
|
||||
|
||||
\sa ICore::addAdditionalContext()
|
||||
\sa ICore::addContextObject()
|
||||
*/
|
||||
|
||||
/*!
|
||||
\fn void ICore::addAdditionalContext(int context)
|
||||
\brief Register additional context to be currently active.
|
||||
|
||||
Appends the additional \a context to the list of currently active
|
||||
contexts. You need to call ICore::updateContext to make that change
|
||||
take effect.
|
||||
|
||||
\sa ICore::removeAdditionalContext()
|
||||
\sa ICore::hasContext()
|
||||
\sa ICore::updateContext()
|
||||
*/
|
||||
|
||||
/*!
|
||||
\fn void ICore::removeAdditionalContext(int context)
|
||||
\brief Removes the given \a context from the list of currently active contexts.
|
||||
|
||||
You need to call ICore::updateContext to make that change
|
||||
take effect.
|
||||
|
||||
\sa ICore::addAdditionalContext()
|
||||
\sa ICore::hasContext()
|
||||
\sa ICore::updateContext()
|
||||
*/
|
||||
|
||||
/*!
|
||||
\fn bool ICore::hasContext(int context) const
|
||||
\brief Returns if the given \a context is currently one of the active contexts.
|
||||
|
||||
\sa ICore::addAdditionalContext()
|
||||
\sa ICore::addContextObject()
|
||||
*/
|
||||
|
||||
/*!
|
||||
\fn void ICore::addContextObject(IContext *context)
|
||||
\brief Registers an additional \a context object.
|
||||
|
||||
After registration this context object gets automatically the
|
||||
current context object whenever it's widget gets focus.
|
||||
|
||||
\sa ICore::removeContextObject()
|
||||
\sa ICore::addAdditionalContext()
|
||||
\sa ICore::currentContextObject()
|
||||
*/
|
||||
|
||||
/*!
|
||||
\fn void ICore::removeContextObject(IContext *context)
|
||||
\brief Unregisters a \a context object from the list of know contexts.
|
||||
|
||||
\sa ICore::addContextObject()
|
||||
\sa ICore::addAdditionalContext()
|
||||
\sa ICore::currentContextObject()
|
||||
}
|
||||
*/
|
||||
|
||||
/*!
|
||||
\fn void ICore::updateContext()
|
||||
\brief Update the list of active contexts after adding or removing additional ones.
|
||||
|
||||
\sa ICore::addAdditionalContext()
|
||||
\sa ICore::removeAdditionalContext()
|
||||
*/
|
||||
|
||||
/*!
|
||||
\fn void ICore::openFiles(const QStringList &fileNames)
|
||||
\brief Open all files from a list of \a fileNames like it would be
|
||||
done if they were given to Qt Creator on the command line, or
|
||||
they were opened via \gui{File|Open}.
|
||||
*/
|
||||
|
||||
/*!
|
||||
\fn ICore::ICore()
|
||||
\internal
|
||||
*/
|
||||
|
||||
/*!
|
||||
\fn ICore::~ICore()
|
||||
\internal
|
||||
*/
|
||||
|
||||
/*!
|
||||
\fn void ICore::coreOpened()
|
||||
\brief Emitted after all plugins have been loaded and the main window shown.
|
||||
*/
|
||||
|
||||
/*!
|
||||
\fn void ICore::saveSettingsRequested()
|
||||
\brief Emitted to signal that the user has requested that the global settings
|
||||
should be saved to disk.
|
||||
|
||||
At the moment that happens when the application is closed, and on \gui{Save All}.
|
||||
*/
|
||||
|
||||
/*!
|
||||
\fn void ICore::optionsDialogRequested()
|
||||
\brief Signal that allows plugins to perform actions just before the \gui{Tools|Options}
|
||||
dialog is shown.
|
||||
*/
|
||||
|
||||
/*!
|
||||
\fn void ICore::coreAboutToClose()
|
||||
\brief Plugins can do some pre-end-of-life actions when they get this signal.
|
||||
|
||||
The application is guaranteed to shut down after this signal is emitted.
|
||||
It's there as an addition to the usual plugin lifecycle methods, namely
|
||||
IPlugin::shutdown(), just for convenience.
|
||||
*/
|
||||
|
||||
/*!
|
||||
\fn void ICore::contextAboutToChange(Core::IContext *context)
|
||||
\brief Sent just before a new \a context becomes the current context
|
||||
(meaning that it's widget got focus).
|
||||
*/
|
||||
|
||||
/*!
|
||||
\fn void ICore::contextChanged(Core::IContext *context)
|
||||
\brief Sent just after a new \a context became the current context
|
||||
(meaning that it's widget got focus).
|
||||
*/
|
||||
@@ -56,7 +56,6 @@ class FileManager;
|
||||
class MessageManager;
|
||||
class IEditor;
|
||||
class UniqueIDManager;
|
||||
class ViewManagerInterface;
|
||||
class EditorManager;
|
||||
class ProgressManagerInterface;
|
||||
class ScriptManagerInterface;
|
||||
@@ -86,7 +85,6 @@ public:
|
||||
virtual FileManager *fileManager() const = 0;
|
||||
virtual UniqueIDManager *uniqueIDManager() const = 0;
|
||||
virtual MessageManager *messageManager() const = 0;
|
||||
virtual ViewManagerInterface *viewManager() const = 0;
|
||||
virtual ExtensionSystem::PluginManager *pluginManager() const = 0;
|
||||
virtual EditorManager *editorManager() const = 0;
|
||||
virtual ProgressManagerInterface *progressManager() const = 0;
|
||||
@@ -100,20 +98,17 @@ public:
|
||||
virtual QPrinter *printer() const = 0;
|
||||
|
||||
virtual QString resourcePath() const = 0;
|
||||
virtual QString libraryPath() const = 0;
|
||||
|
||||
virtual IContext *currentContextObject() const = 0;
|
||||
|
||||
virtual QMainWindow *mainWindow() const = 0;
|
||||
virtual QStatusBar *statusBar() const = 0;
|
||||
|
||||
// adds and removes additional active contexts, this context is appended to the
|
||||
// currently active contexts. call updateContext after changing
|
||||
virtual IContext *currentContextObject() const = 0;
|
||||
virtual void addAdditionalContext(int context) = 0;
|
||||
virtual void removeAdditionalContext(int context) = 0;
|
||||
virtual bool hasContext(int context) const = 0;
|
||||
virtual void addContextObject(IContext *contex) = 0;
|
||||
virtual void removeContextObject(IContext *contex) = 0;
|
||||
virtual void addContextObject(IContext *context) = 0;
|
||||
virtual void removeContextObject(IContext *context) = 0;
|
||||
|
||||
virtual void updateContext() = 0;
|
||||
|
||||
@@ -122,7 +117,7 @@ public:
|
||||
signals:
|
||||
void coreOpened();
|
||||
void saveSettingsRequested();
|
||||
void settingsDialogRequested();
|
||||
void optionsDialogRequested();
|
||||
void coreAboutToClose();
|
||||
void contextAboutToChange(Core::IContext *context);
|
||||
void contextChanged(Core::IContext *context);
|
||||
|
||||
@@ -149,7 +149,7 @@ MainWindow::MainWindow() :
|
||||
m_toggleSideBarButton(new QToolButton)
|
||||
{
|
||||
setWindowTitle(tr("Qt Creator"));
|
||||
qApp->setWindowIcon(QIcon(":/qworkbench/images/qtcreator_logo_128.png"));
|
||||
qApp->setWindowIcon(QIcon(":/core/images/qtcreator_logo_128.png"));
|
||||
setDockNestingEnabled(true);
|
||||
|
||||
setCorner(Qt::BottomLeftCorner, Qt::LeftDockWidgetArea);
|
||||
@@ -783,7 +783,7 @@ QStringList MainWindow::showNewItemDialog(const QString &title,
|
||||
|
||||
void MainWindow::showOptionsDialog(const QString &category, const QString &page)
|
||||
{
|
||||
emit m_coreImpl->settingsDialogRequested();
|
||||
emit m_coreImpl->optionsDialogRequested();
|
||||
SettingsDialog dlg(this, category, page);
|
||||
dlg.exec();
|
||||
}
|
||||
@@ -840,11 +840,6 @@ VCSManager *MainWindow::vcsManager() const
|
||||
return m_vcsManager;
|
||||
}
|
||||
|
||||
ViewManagerInterface *MainWindow::viewManager() const
|
||||
{
|
||||
return m_viewManager;
|
||||
}
|
||||
|
||||
EditorManager *MainWindow::editorManager() const
|
||||
{
|
||||
return m_editorManager;
|
||||
|
||||
@@ -109,7 +109,6 @@ public:
|
||||
Core::FileManager *fileManager() const;
|
||||
Core::UniqueIDManager *uniqueIDManager() const;
|
||||
Core::MessageManager *messageManager() const;
|
||||
Core::ViewManagerInterface *viewManager() const;
|
||||
ExtensionSystem::PluginManager *pluginManager() const;
|
||||
Core::EditorManager *editorManager() const;
|
||||
Core::ProgressManagerInterface *progressManager() const;
|
||||
|
||||
@@ -102,11 +102,11 @@ public:
|
||||
{
|
||||
style = QStyleFactory::create(baseStyleName);
|
||||
QTC_ASSERT(style, /**/);
|
||||
buttonImage_pressed = QImage(":/qworkbench/images/pushbutton_pressed.png");
|
||||
buttonImage = QImage(":/qworkbench/images/pushbutton.png");
|
||||
buttonImage_pressed = QImage(":/core/images/pushbutton_pressed.png");
|
||||
buttonImage = QImage(":/core/images/pushbutton.png");
|
||||
|
||||
lineeditImage = QImage(":/qworkbench/images/inputfield.png");
|
||||
lineeditImage_disabled = QImage(":/qworkbench/images/inputfield_disabled.png");
|
||||
lineeditImage = QImage(":/core/images/inputfield.png");
|
||||
lineeditImage_disabled = QImage(":/core/images/inputfield_disabled.png");
|
||||
}
|
||||
|
||||
~ManhattanStylePrivate()
|
||||
@@ -345,7 +345,7 @@ void ManhattanStyle::polish(QPalette &pal)
|
||||
QIcon ManhattanStyle::standardIconImplementation(StandardPixmap standardIcon, const QStyleOption *option,
|
||||
const QWidget *widget) const
|
||||
{
|
||||
static const QIcon closeButton(":/qworkbench/images/closebutton.png");
|
||||
static const QIcon closeButton(":/core/images/closebutton.png");
|
||||
QIcon icon;
|
||||
switch (standardIcon) {
|
||||
case QStyle::SP_TitleBarCloseButton:
|
||||
@@ -360,7 +360,7 @@ QIcon ManhattanStyle::standardIconImplementation(StandardPixmap standardIcon, co
|
||||
QPixmap ManhattanStyle::standardPixmap(StandardPixmap standardPixmap, const QStyleOption *opt,
|
||||
const QWidget *widget) const
|
||||
{
|
||||
static const QPixmap closeButton(":/qworkbench/images/closebutton.png");
|
||||
static const QPixmap closeButton(":/core/images/closebutton.png");
|
||||
QPixmap pixmap;
|
||||
switch (standardPixmap) {
|
||||
case QStyle::SP_TitleBarCloseButton:
|
||||
|
||||
@@ -358,13 +358,13 @@ NavigationSubWidget::NavigationSubWidget(NavigationWidget *parentWidget)
|
||||
|
||||
QToolButton *split = new QToolButton;
|
||||
split->setProperty("type", QLatin1String("dockbutton"));
|
||||
split->setIcon(QIcon(":/qworkbench/images/splitbutton_horizontal.png"));
|
||||
split->setIcon(QIcon(":/core/images/splitbutton_horizontal.png"));
|
||||
split->setToolTip(tr("Split"));
|
||||
connect(split, SIGNAL(clicked(bool)), this, SIGNAL(split()));
|
||||
|
||||
QToolButton *close = new QToolButton;
|
||||
close->setProperty("type", QLatin1String("dockbutton"));
|
||||
close->setIcon(QIcon(":/qworkbench/images/closebutton.png"));
|
||||
close->setIcon(QIcon(":/core/images/closebutton.png"));
|
||||
close->setToolTip(tr("Close"));
|
||||
|
||||
connect(close, SIGNAL(clicked(bool)), this, SIGNAL(close()));
|
||||
|
||||
@@ -167,7 +167,7 @@ OutputPane::OutputPane(const QList<int> &context, QWidget *parent) :
|
||||
m_clearButton->setToolTip(tr("Clear"));
|
||||
connect(m_clearButton, SIGNAL(clicked()), this, SLOT(clearPage()));
|
||||
|
||||
m_closeButton->setIcon(QIcon(":/qworkbench/images/closebutton.png"));
|
||||
m_closeButton->setIcon(QIcon(":/core/images/closebutton.png"));
|
||||
m_closeButton->setProperty("type", QLatin1String("dockbutton"));
|
||||
connect(m_closeButton, SIGNAL(clicked()), this, SLOT(slotHide()));
|
||||
|
||||
@@ -488,13 +488,13 @@ OutputPaneToggleButton::OutputPaneToggleButton(int number, const QString &text,
|
||||
setFocusPolicy(Qt::NoFocus);
|
||||
setCheckable(true);
|
||||
setStyleSheet(
|
||||
"QPushButton { border-image: url(:/qworkbench/images/panel_button.png) 2 2 2 19;"
|
||||
"QPushButton { border-image: url(:/core/images/panel_button.png) 2 2 2 19;"
|
||||
" border-width: 2px 2px 2px 19px; padding-left: -17; padding-right: 4 } "
|
||||
"QPushButton:checked { border-image: url(:/qworkbench/images/panel_button_checked.png) 2 2 2 19 } "
|
||||
"QPushButton:checked { border-image: url(:/core/images/panel_button_checked.png) 2 2 2 19 } "
|
||||
#ifndef Q_WS_MAC // Mac UI's dont usually do hover
|
||||
"QPushButton:checked:hover { border-image: url(:/qworkbench/images/panel_button_checked_hover.png) 2 2 2 19 } "
|
||||
"QPushButton:pressed:hover { border-image: url(:/qworkbench/images/panel_button_pressed.png) 2 2 2 19 } "
|
||||
"QPushButton:hover { border-image: url(:/qworkbench/images/panel_button_hover.png) 2 2 2 19 } "
|
||||
"QPushButton:checked:hover { border-image: url(:/core/images/panel_button_checked_hover.png) 2 2 2 19 } "
|
||||
"QPushButton:pressed:hover { border-image: url(:/core/images/panel_button_pressed.png) 2 2 2 19 } "
|
||||
"QPushButton:hover { border-image: url(:/core/images/panel_button_hover.png) 2 2 2 19 } "
|
||||
#endif
|
||||
);
|
||||
}
|
||||
|
||||
@@ -38,7 +38,6 @@
|
||||
|
||||
#include "coreconstants.h"
|
||||
#include "uniqueidmanager.h"
|
||||
#include "viewmanagerinterface.h"
|
||||
|
||||
#include <utils/qtcassert.h>
|
||||
|
||||
|
||||
@@ -44,7 +44,6 @@
|
||||
#include <QtCore/QSettings>
|
||||
|
||||
#include <QtGui/QMainWindow>
|
||||
#include <QtGui/QStatusBar>
|
||||
#include <QtGui/QToolBar>
|
||||
|
||||
#include <QtScript/QScriptEngine>
|
||||
@@ -82,11 +81,6 @@ QMainWindow *CorePrototype::mainWindow() const
|
||||
return callee()->mainWindow();
|
||||
}
|
||||
|
||||
QStatusBar *CorePrototype::statusBar() const
|
||||
{
|
||||
return callee()->statusBar();
|
||||
}
|
||||
|
||||
QSettings *CorePrototype::settings() const
|
||||
{
|
||||
return callee()->settings();
|
||||
|
||||
@@ -55,7 +55,6 @@ class CorePrototype : public QObject, public QScriptable
|
||||
Q_PROPERTY(Core::EditorManager* editorManager READ editorManager DESIGNABLE false SCRIPTABLE true STORED false)
|
||||
|
||||
Q_PROPERTY(QMainWindow* mainWindow READ mainWindow DESIGNABLE false SCRIPTABLE true STORED false)
|
||||
Q_PROPERTY(QStatusBar* statusBar READ statusBar DESIGNABLE false SCRIPTABLE true STORED false)
|
||||
Q_PROPERTY(QSettings* settings READ settings DESIGNABLE false SCRIPTABLE true STORED false)
|
||||
|
||||
public:
|
||||
@@ -68,7 +67,6 @@ public:
|
||||
Core::EditorManager *editorManager() const;
|
||||
|
||||
QMainWindow *mainWindow() const;
|
||||
QStatusBar *statusBar() const;
|
||||
QSettings *settings() const;
|
||||
|
||||
public slots:
|
||||
|
||||
@@ -44,7 +44,7 @@ namespace Core {
|
||||
|
||||
/* Script Manager.
|
||||
* Provides a script engine that is initialized with
|
||||
* QWorkBenchs interfaces and allows for running scripts.
|
||||
* Qt Creator's interfaces and allows for running scripts.
|
||||
* @{todo} Should it actually manage script files, too? */
|
||||
|
||||
class CORE_EXPORT ScriptManagerInterface : public QObject
|
||||
|
||||
@@ -231,13 +231,13 @@ SideBarWidget::SideBarWidget(SideBar *sideBar, const QString &title)
|
||||
|
||||
m_splitButton = new QToolButton;
|
||||
m_splitButton->setProperty("type", QLatin1String("dockbutton"));
|
||||
m_splitButton->setIcon(QIcon(":/qworkbench/images/splitbutton_horizontal.png"));
|
||||
m_splitButton->setIcon(QIcon(":/core/images/splitbutton_horizontal.png"));
|
||||
m_splitButton->setToolTip(tr("Split"));
|
||||
connect(m_splitButton, SIGNAL(clicked(bool)), this, SIGNAL(split()));
|
||||
|
||||
m_closeButton = new QToolButton;
|
||||
m_closeButton->setProperty("type", QLatin1String("dockbutton"));
|
||||
m_closeButton->setIcon(QIcon(":/qworkbench/images/closebutton.png"));
|
||||
m_closeButton->setIcon(QIcon(":/core/images/closebutton.png"));
|
||||
m_closeButton->setToolTip(tr("Close"));
|
||||
|
||||
connect(m_closeButton, SIGNAL(clicked(bool)), this, SIGNAL(close()));
|
||||
|
||||
@@ -56,7 +56,7 @@ VersionDialog::VersionDialog(QWidget *parent)
|
||||
{
|
||||
// We need to set the window icon explicitly here since for some reason the
|
||||
// application icon isn't used when the size of the dialog is fixed (at least not on X11/GNOME)
|
||||
setWindowIcon(QIcon(":/qworkbench/images/qtcreator_logo_128.png"));
|
||||
setWindowIcon(QIcon(":/core/images/qtcreator_logo_128.png"));
|
||||
|
||||
setWindowTitle(tr("About Qt Creator"));
|
||||
setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
|
||||
@@ -102,7 +102,7 @@ VersionDialog::VersionDialog(QWidget *parent)
|
||||
connect(buttonBox , SIGNAL(helpRequested()), this, SLOT(popupLicense()));
|
||||
|
||||
QLabel *logoLabel = new QLabel;
|
||||
logoLabel->setPixmap(QPixmap(QLatin1String(":/qworkbench/images/qtcreator_logo_128.png")));
|
||||
logoLabel->setPixmap(QPixmap(QLatin1String(":/core/images/qtcreator_logo_128.png")));
|
||||
layout->addWidget(logoLabel , 0, 0, 1, 1);
|
||||
layout->addWidget(copyRightLabel, 0, 1, 4, 4);
|
||||
layout->addWidget(buttonBox, 4, 0, 1, 5);
|
||||
|
||||
@@ -92,16 +92,16 @@ WelcomeModePrivate::WelcomeModePrivate() :
|
||||
#else
|
||||
m_label(new QLabel),
|
||||
#endif
|
||||
m_htmlTemplate(readFile(QLatin1String(":/qworkbench/html/welcome.html"))),
|
||||
m_sessionHtmlTemplate(readFile(QLatin1String(":/qworkbench/html/recent_sessions.html"))),
|
||||
m_projectHtmlTemplate(readFile(QLatin1String(":/qworkbench/html/recent_projects.html"))),
|
||||
m_baseUrl(QUrl(QLatin1String("qrc:/qworkbench/html/welcome.html")))
|
||||
m_htmlTemplate(readFile(QLatin1String(":/core/html/welcome.html"))),
|
||||
m_sessionHtmlTemplate(readFile(QLatin1String(":/core/html/recent_sessions.html"))),
|
||||
m_projectHtmlTemplate(readFile(QLatin1String(":/core/html/recent_projects.html"))),
|
||||
m_baseUrl(QUrl(QLatin1String("qrc:/core/html/welcome.html")))
|
||||
{
|
||||
}
|
||||
|
||||
#if defined(QT_NO_WEBKIT)
|
||||
|
||||
const char *LABEL = "<center><table><tr><td><img src=\":/qworkbench/html/images/product_logo.png\"/></td><td width=300>"
|
||||
const char *LABEL = "<center><table><tr><td><img src=\":/core/html/images/product_logo.png\"/></td><td width=300>"
|
||||
"<h2><br/><br/>Welcome</h2><p> Qt Creator is an intuitive, modern cross platform IDE that enables "
|
||||
"developers to create graphically appealing applications for desktop, "
|
||||
"embedded, and mobile devices. "
|
||||
@@ -172,7 +172,7 @@ QString WelcomeMode::name() const
|
||||
|
||||
QIcon WelcomeMode::icon() const
|
||||
{
|
||||
return QIcon(QLatin1String(":/qworkbench/images/qtcreator_logo_32.png"));
|
||||
return QIcon(QLatin1String(":/core/images/qtcreator_logo_32.png"));
|
||||
}
|
||||
|
||||
int WelcomeMode::priority() const
|
||||
|
||||
@@ -715,7 +715,7 @@ void FormEditorW::print()
|
||||
painter.drawPixmap(0, 0, pixmap);
|
||||
m_core->mainWindow()->setCursor(oldCursor);
|
||||
|
||||
m_core->statusBar()->showMessage(tr("Printed %1...").arg(QFileInfo(fw->fileName()).fileName()));
|
||||
// m_core->statusBar()->showMessage(tr("Printed %1...").arg(QFileInfo(fw->fileName()).fileName()));
|
||||
} while (false);
|
||||
m_core->printer()->setFullPage(oldFullPage);
|
||||
m_core->printer()->setOrientation(oldOrientation);
|
||||
|
||||
@@ -89,7 +89,7 @@ class SettingsPage;
|
||||
* Requesting an editor via instance() will fully initialize the class.
|
||||
* This is based on the assumption that the Designer settings work with
|
||||
* no plugins loaded. If that does not work, full initialization can be
|
||||
* triggered by connection to the ICore::settingsDialogRequested() signal.
|
||||
* triggered by connection to the ICore::optionsDialogRequested() signal.
|
||||
*/
|
||||
class FormEditorW : public QObject
|
||||
{
|
||||
|
||||
@@ -81,7 +81,7 @@ FindToolBar::FindToolBar(FindPlugin *plugin, CurrentDocumentFind *currentDocumen
|
||||
addWidget(spacerItem);
|
||||
QToolButton *close = new QToolButton;
|
||||
close->setProperty("type", QLatin1String("dockbutton"));
|
||||
close->setIcon(QIcon(":/qworkbench/images/closebutton.png"));
|
||||
close->setIcon(QIcon(":/core/images/closebutton.png"));
|
||||
connect(close, SIGNAL(clicked()), this, SLOT(hideAndResetFocus()));
|
||||
addWidget(close);
|
||||
|
||||
|
||||
@@ -32,8 +32,12 @@
|
||||
***************************************************************************/
|
||||
|
||||
#include "commitdata.h"
|
||||
#include <utils/qtcassert.h>
|
||||
|
||||
#include <QtCore/QDebug>
|
||||
#include <QtCore/QRegExp>
|
||||
|
||||
const char *const kBranchIndicatorC = "# On branch";
|
||||
|
||||
namespace Git {
|
||||
namespace Internal {
|
||||
@@ -85,6 +89,130 @@ void CommitData::clear()
|
||||
untrackedFiles.clear();
|
||||
}
|
||||
|
||||
// Split a state/file spec from git status output
|
||||
// '#<tab>modified:<blanks>git .pro'
|
||||
// into state and file ('modified', 'git .pro').
|
||||
CommitData::StateFilePair splitStateFileSpecification(const QString &line)
|
||||
{
|
||||
QPair<QString, QString> rc;
|
||||
const int statePos = 2;
|
||||
const int colonIndex = line.indexOf(QLatin1Char(':'), statePos);
|
||||
if (colonIndex == -1)
|
||||
return rc;
|
||||
rc.first = line.mid(statePos, colonIndex - statePos);
|
||||
int filePos = colonIndex + 1;
|
||||
const QChar blank = QLatin1Char(' ');
|
||||
while (line.at(filePos) == blank)
|
||||
filePos++;
|
||||
if (filePos < line.size())
|
||||
rc.second = line.mid(filePos, line.size() - filePos);
|
||||
return rc;
|
||||
}
|
||||
|
||||
// Convenience to add a state/file spec to a list
|
||||
static inline bool addStateFileSpecification(const QString &line, QList<CommitData::StateFilePair> *list)
|
||||
{
|
||||
const CommitData::StateFilePair sf = splitStateFileSpecification(line);
|
||||
if (sf.first.isEmpty() || sf.second.isEmpty())
|
||||
return false;
|
||||
list->push_back(sf);
|
||||
return true;
|
||||
}
|
||||
|
||||
/* Parse a git status file list:
|
||||
* \code
|
||||
# Changes to be committed:
|
||||
#<tab>modified:<blanks>git.pro
|
||||
# Changed but not updated:
|
||||
#<tab>modified:<blanks>git.pro
|
||||
# Untracked files:
|
||||
#<tab>git.pro
|
||||
\endcode
|
||||
*/
|
||||
|
||||
bool CommitData::parseFilesFromStatus(const QString &output)
|
||||
{
|
||||
enum State { None, CommitFiles, NotUpdatedFiles, UntrackedFiles };
|
||||
|
||||
const QStringList lines = output.split(QLatin1Char('\n'));
|
||||
const QString branchIndicator = QLatin1String(kBranchIndicatorC);
|
||||
const QString commitIndicator = QLatin1String("# Changes to be committed:");
|
||||
const QString notUpdatedIndicator = QLatin1String("# Changed but not updated:");
|
||||
const QString untrackedIndicator = QLatin1String("# Untracked files:");
|
||||
|
||||
State s = None;
|
||||
// Match added/changed-not-updated files: "#<tab>modified: foo.cpp"
|
||||
QRegExp filesPattern(QLatin1String("#\\t[^:]+:\\s+.+"));
|
||||
QTC_ASSERT(filesPattern.isValid(), return false);
|
||||
|
||||
const QStringList::const_iterator cend = lines.constEnd();
|
||||
for (QStringList::const_iterator it = lines.constBegin(); it != cend; ++it) {
|
||||
const QString line = *it;
|
||||
if (line.startsWith(branchIndicator)) {
|
||||
panelInfo.branch = line.mid(branchIndicator.size() + 1);
|
||||
} else {
|
||||
if (line.startsWith(commitIndicator)) {
|
||||
s = CommitFiles;
|
||||
} else {
|
||||
if (line.startsWith(notUpdatedIndicator)) {
|
||||
s = NotUpdatedFiles;
|
||||
} else {
|
||||
if (line.startsWith(untrackedIndicator)) {
|
||||
// Now match untracked: "#<tab>foo.cpp"
|
||||
s = UntrackedFiles;
|
||||
filesPattern = QRegExp(QLatin1String("#\\t.+"));
|
||||
QTC_ASSERT(filesPattern.isValid(), return false);
|
||||
} else {
|
||||
if (filesPattern.exactMatch(line)) {
|
||||
switch (s) {
|
||||
case CommitFiles:
|
||||
addStateFileSpecification(line, &stagedFiles);
|
||||
break;
|
||||
case NotUpdatedFiles:
|
||||
addStateFileSpecification(line, &unstagedFiles);
|
||||
break;
|
||||
case UntrackedFiles:
|
||||
untrackedFiles.push_back(line.mid(2).trimmed());
|
||||
break;
|
||||
case None:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return !stagedFiles.empty() || !unstagedFiles.empty() || !untrackedFiles.empty();
|
||||
}
|
||||
|
||||
// Convert a spec pair list to a list of file names, optionally
|
||||
// filter for a state
|
||||
static QStringList specToFileNames(const QList<CommitData::StateFilePair> &files,
|
||||
const QString &stateFilter)
|
||||
{
|
||||
typedef QList<CommitData::StateFilePair>::const_iterator ConstIterator;
|
||||
if (files.empty())
|
||||
return QStringList();
|
||||
const bool emptyFilter = stateFilter.isEmpty();
|
||||
QStringList rc;
|
||||
const ConstIterator cend = files.constEnd();
|
||||
for (ConstIterator it = files.constBegin(); it != cend; ++it)
|
||||
if (emptyFilter || stateFilter == it->first)
|
||||
rc.push_back(it->second);
|
||||
return rc;
|
||||
}
|
||||
|
||||
QStringList CommitData::stagedFileNames(const QString &stateFilter) const
|
||||
{
|
||||
return specToFileNames(stagedFiles, stateFilter);
|
||||
}
|
||||
|
||||
QStringList CommitData::unstagedFileNames(const QString &stateFilter) const
|
||||
{
|
||||
return specToFileNames(unstagedFiles, stateFilter);
|
||||
}
|
||||
|
||||
QDebug operator<<(QDebug d, const CommitData &data)
|
||||
{
|
||||
d << data.panelInfo << data.panelData;
|
||||
|
||||
@@ -35,6 +35,7 @@
|
||||
#define COMMITDATA_H
|
||||
|
||||
#include <QtCore/QStringList>
|
||||
#include <QtCore/QPair>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
class QDebug;
|
||||
@@ -68,11 +69,24 @@ QDebug operator<<(QDebug d, const GitSubmitEditorPanelData &);
|
||||
|
||||
struct CommitData
|
||||
{
|
||||
// A pair of state string/file name ('modified', 'file.cpp').
|
||||
typedef QPair<QString, QString> StateFilePair;
|
||||
|
||||
void clear();
|
||||
// Parse the files and the branch of panelInfo
|
||||
// from a git status output
|
||||
bool parseFilesFromStatus(const QString &output);
|
||||
|
||||
// Convenience to retrieve the file names from
|
||||
// the specification list. Optionally filter for a certain state
|
||||
QStringList stagedFileNames(const QString &stateFilter = QString()) const;
|
||||
QStringList unstagedFileNames(const QString &stateFilter = QString()) const;
|
||||
|
||||
GitSubmitEditorPanelInfo panelInfo;
|
||||
GitSubmitEditorPanelData panelData;
|
||||
QStringList stagedFiles;
|
||||
QStringList unstagedFiles;
|
||||
|
||||
QList<StateFilePair> stagedFiles;
|
||||
QList<StateFilePair> unstagedFiles;
|
||||
QStringList untrackedFiles;
|
||||
};
|
||||
|
||||
|
||||
@@ -622,73 +622,6 @@ GitClient::StatusResult GitClient::gitStatus(const QString &workingDirectory,
|
||||
return StatusChanged;
|
||||
}
|
||||
|
||||
/* Parse a git status file list:
|
||||
* \code
|
||||
# Changes to be committed:
|
||||
#<tab>modified:<blanks>git.pro
|
||||
# Changed but not updated:
|
||||
#<tab>modified:<blanks>git.pro
|
||||
# Untracked files:
|
||||
#<tab>git.pro
|
||||
\endcode
|
||||
*/
|
||||
static bool parseFiles(const QString &output, CommitData *d)
|
||||
{
|
||||
enum State { None, CommitFiles, NotUpdatedFiles, UntrackedFiles };
|
||||
|
||||
const QStringList lines = output.split(QLatin1Char('\n'));
|
||||
const QString branchIndicator = QLatin1String(kBranchIndicatorC);
|
||||
const QString commitIndicator = QLatin1String("# Changes to be committed:");
|
||||
const QString notUpdatedIndicator = QLatin1String("# Changed but not updated:");
|
||||
const QString untrackedIndicator = QLatin1String("# Untracked files:");
|
||||
|
||||
State s = None;
|
||||
// Match added/changed-not-updated files: "#<tab>modified: foo.cpp"
|
||||
QRegExp filesPattern(QLatin1String("#\\t[^:]+:\\s+.+"));
|
||||
QTC_ASSERT(filesPattern.isValid(), return false);
|
||||
|
||||
const QStringList::const_iterator cend = lines.constEnd();
|
||||
for (QStringList::const_iterator it = lines.constBegin(); it != cend; ++it) {
|
||||
const QString line = *it;
|
||||
if (line.startsWith(branchIndicator)) {
|
||||
d->panelInfo.branch = line.mid(branchIndicator.size() + 1);
|
||||
} else {
|
||||
if (line.startsWith(commitIndicator)) {
|
||||
s = CommitFiles;
|
||||
} else {
|
||||
if (line.startsWith(notUpdatedIndicator)) {
|
||||
s = NotUpdatedFiles;
|
||||
} else {
|
||||
if (line.startsWith(untrackedIndicator)) {
|
||||
// Now match untracked: "#<tab>foo.cpp"
|
||||
s = UntrackedFiles;
|
||||
filesPattern = QRegExp(QLatin1String("#\\t.+"));
|
||||
QTC_ASSERT(filesPattern.isValid(), return false);
|
||||
} else {
|
||||
if (filesPattern.exactMatch(line)) {
|
||||
const QString fileSpec = line.mid(2).trimmed();
|
||||
switch (s) {
|
||||
case CommitFiles:
|
||||
d->stagedFiles.push_back(trimFileSpecification(fileSpec));
|
||||
break;
|
||||
case NotUpdatedFiles:
|
||||
d->unstagedFiles.push_back(trimFileSpecification(fileSpec));
|
||||
break;
|
||||
case UntrackedFiles:
|
||||
d->untrackedFiles.push_back(fileSpec);
|
||||
break;
|
||||
case None:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return !d->stagedFiles.empty() || !d->unstagedFiles.empty() || !d->untrackedFiles.empty();
|
||||
}
|
||||
|
||||
// Filter out untracked files that are not part of the project
|
||||
static void filterUntrackedFilesOfProject(const QString &repoDir, QStringList *l)
|
||||
{
|
||||
@@ -771,20 +704,12 @@ bool GitClient::getCommitData(const QString &workingDirectory,
|
||||
// #
|
||||
// # list of files...
|
||||
|
||||
if (!parseFiles(output, d)) {
|
||||
if (!d->parseFilesFromStatus(output)) {
|
||||
*errorMessage = msgParseFilesFailed();
|
||||
return false;
|
||||
}
|
||||
// Filter out untracked files that are not part of the project and,
|
||||
// for symmetry, insert the prefix "untracked:" (as "added:" or ":modified"
|
||||
// for staged files).
|
||||
// Filter out untracked files that are not part of the project
|
||||
filterUntrackedFilesOfProject(repoDirectory, &d->untrackedFiles);
|
||||
if (!d->untrackedFiles.empty()) {
|
||||
const QString untrackedPrefix = QLatin1String("untracked: ");
|
||||
const QStringList::iterator pend = d->untrackedFiles.end();
|
||||
for (QStringList::iterator it = d->untrackedFiles.begin(); it != pend; ++it)
|
||||
it->insert(0, untrackedPrefix);
|
||||
}
|
||||
|
||||
d->panelData.author = readConfigValue(workingDirectory, QLatin1String("user.name"));
|
||||
d->panelData.email = readConfigValue(workingDirectory, QLatin1String("user.email"));
|
||||
@@ -881,7 +806,7 @@ GitClient::RevertResult GitClient::revertI(QStringList files, bool *ptrToIsDirec
|
||||
return RevertFailed;
|
||||
}
|
||||
CommitData data;
|
||||
if (!parseFiles(output, &data)) {
|
||||
if (!data.parseFilesFromStatus(output)) {
|
||||
*errorMessage = msgParseFilesFailed();
|
||||
return RevertFailed;
|
||||
}
|
||||
@@ -896,9 +821,9 @@ GitClient::RevertResult GitClient::revertI(QStringList files, bool *ptrToIsDirec
|
||||
}
|
||||
|
||||
// From the status output, determine all modified [un]staged files.
|
||||
const QString modifiedPattern = QLatin1String("modified: ");
|
||||
const QStringList allStagedFiles = GitSubmitEditor::statusListToFileList(data.stagedFiles.filter(modifiedPattern));
|
||||
const QStringList allUnstagedFiles = GitSubmitEditor::statusListToFileList(data.unstagedFiles.filter(modifiedPattern));
|
||||
const QString modifiedState = QLatin1String("modified");
|
||||
const QStringList allStagedFiles = data.stagedFileNames(modifiedState);
|
||||
const QStringList allUnstagedFiles = data.unstagedFileNames(modifiedState);
|
||||
// Unless a directory was passed, filter all modified files for the
|
||||
// argument file list.
|
||||
QStringList stagedFiles = allStagedFiles;
|
||||
|
||||
@@ -602,7 +602,7 @@ void GitPlugin::startCommit()
|
||||
// Store repository for diff and the original list of
|
||||
// files to be able to unstage files the user unchecks
|
||||
m_submitRepository = data.panelInfo.repository;
|
||||
m_submitOrigCommitFiles = GitSubmitEditor::statusListToFileList(data.stagedFiles);
|
||||
m_submitOrigCommitFiles = data.stagedFileNames();
|
||||
|
||||
if (Git::Constants::debug)
|
||||
qDebug() << Q_FUNC_INFO << data << commitTemplate;
|
||||
|
||||
@@ -36,6 +36,8 @@
|
||||
#include "gitconstants.h"
|
||||
#include "commitdata.h"
|
||||
|
||||
#include <vcsbase/submitfilemodel.h>
|
||||
|
||||
#include <QtCore/QDebug>
|
||||
|
||||
namespace Git {
|
||||
@@ -52,14 +54,14 @@ GitSubmitEditorWidget *GitSubmitEditor::submitEditorWidget()
|
||||
return static_cast<GitSubmitEditorWidget *>(widget());
|
||||
}
|
||||
|
||||
QStringList GitSubmitEditor::statusListToFileList(const QStringList &rawList)
|
||||
static void addStateFileListToModel(const QList<CommitData::StateFilePair> &l,
|
||||
VCSBase::SubmitFileModel *model,
|
||||
bool checked)
|
||||
{
|
||||
if (rawList.empty())
|
||||
return rawList;
|
||||
QStringList rc;
|
||||
foreach (const QString &rf, rawList)
|
||||
rc.push_back(fileFromStatusLine(rf));
|
||||
return rc;
|
||||
typedef QList<CommitData::StateFilePair>::const_iterator ConstIterator;
|
||||
const ConstIterator cend = l.constEnd();
|
||||
for (ConstIterator it = l.constBegin(); it != cend; ++it)
|
||||
model->addFile(it->second, it->first, checked);
|
||||
}
|
||||
|
||||
void GitSubmitEditor::setCommitData(const CommitData &d)
|
||||
@@ -67,10 +69,16 @@ void GitSubmitEditor::setCommitData(const CommitData &d)
|
||||
submitEditorWidget()->setPanelData(d.panelData);
|
||||
submitEditorWidget()->setPanelInfo(d.panelInfo);
|
||||
|
||||
addFiles(d.stagedFiles, true, true);
|
||||
// Not Updated: Initially unchecked
|
||||
addFiles(d.unstagedFiles, false, true);
|
||||
addFiles(d.untrackedFiles, false, true);
|
||||
VCSBase::SubmitFileModel *model = new VCSBase::SubmitFileModel(this);
|
||||
addStateFileListToModel(d.stagedFiles, model, true);
|
||||
addStateFileListToModel(d.unstagedFiles, model, false);
|
||||
if (!d.untrackedFiles.empty()) {
|
||||
const QString untrackedSpec = QLatin1String("untracked");
|
||||
const QStringList::const_iterator cend = d.untrackedFiles.constEnd();
|
||||
for (QStringList::const_iterator it = d.untrackedFiles.constBegin(); it != cend; ++it)
|
||||
model->addFile(*it, untrackedSpec, false);
|
||||
}
|
||||
setFileModel(model);
|
||||
}
|
||||
|
||||
GitSubmitEditorPanelData GitSubmitEditor::panelData() const
|
||||
@@ -78,18 +86,5 @@ GitSubmitEditorPanelData GitSubmitEditor::panelData() const
|
||||
return const_cast<GitSubmitEditor*>(this)->submitEditorWidget()->panelData();
|
||||
}
|
||||
|
||||
QString GitSubmitEditor::fileFromStatusLine(const QString &line)
|
||||
{
|
||||
QString rc = line;
|
||||
// "modified: mainwindow.cpp"
|
||||
const int index = rc.indexOf(QLatin1Char(':'));
|
||||
if (index != -1)
|
||||
rc.remove(0, index + 1);
|
||||
const QChar blank(' ');
|
||||
while (rc.startsWith(blank))
|
||||
rc.remove(0, 1);
|
||||
return rc;
|
||||
}
|
||||
|
||||
} // namespace Internal
|
||||
} // namespace Git
|
||||
|
||||
@@ -54,13 +54,6 @@ public:
|
||||
void setCommitData(const CommitData &);
|
||||
GitSubmitEditorPanelData panelData() const;
|
||||
|
||||
static QString fileFromStatusLine(const QString &line);
|
||||
static QStringList statusListToFileList(const QStringList &);
|
||||
|
||||
protected:
|
||||
virtual QStringList vcsFileListToFileList(const QStringList &l) const
|
||||
{ return statusListToFileList(l); }
|
||||
|
||||
private:
|
||||
inline GitSubmitEditorWidget *submitEditorWidget();
|
||||
};
|
||||
|
||||
@@ -355,7 +355,7 @@ void HelpPlugin::createRightPaneSideBar()
|
||||
|
||||
QToolButton *closeButton = new QToolButton();
|
||||
closeButton->setProperty("type", QLatin1String("dockbutton"));
|
||||
closeButton->setIcon(QIcon(":/qworkbench/images/closebutton.png"));
|
||||
closeButton->setIcon(QIcon(":/core/images/closebutton.png"));
|
||||
|
||||
// Dummy layout to align the close button to the right
|
||||
QHBoxLayout *hboxLayout = new QHBoxLayout();
|
||||
|
||||
@@ -494,19 +494,19 @@ void PerforcePlugin::submit()
|
||||
QTC_ASSERT(m_coreInstance, return);
|
||||
|
||||
if (!checkP4Command()) {
|
||||
showOutput(tr("No p4 executable specified!"));
|
||||
showOutput(tr("No p4 executable specified!"), true);
|
||||
return;
|
||||
}
|
||||
|
||||
if (m_changeTmpFile) {
|
||||
showOutput(tr("Another submit is currently executed."));
|
||||
showOutput(tr("Another submit is currently executed."), true);
|
||||
m_perforceOutputWindow->popup(false);
|
||||
return;
|
||||
}
|
||||
|
||||
m_changeTmpFile = new QTemporaryFile(this);
|
||||
if (!m_changeTmpFile->open()) {
|
||||
showOutput(tr("Cannot create temporary file."));
|
||||
showOutput(tr("Cannot create temporary file."), true);
|
||||
delete m_changeTmpFile;
|
||||
m_changeTmpFile = 0;
|
||||
return;
|
||||
@@ -970,7 +970,7 @@ bool PerforcePlugin::editorAboutToClose(Core::IEditor *editor)
|
||||
QByteArray change = m_changeTmpFile->readAll();
|
||||
m_changeTmpFile->close();
|
||||
if (!checkP4Command()) {
|
||||
showOutput(tr("No p4 executable specified!"));
|
||||
showOutput(tr("No p4 executable specified!"), true);
|
||||
delete m_changeTmpFile;
|
||||
m_changeTmpFile = 0;
|
||||
return false;
|
||||
@@ -981,8 +981,8 @@ bool PerforcePlugin::editorAboutToClose(Core::IEditor *editor)
|
||||
QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
|
||||
proc.start(m_settings.p4Command,
|
||||
basicP4Args() << QLatin1String("submit") << QLatin1String("-i"));
|
||||
if (!proc.waitForStarted(3000)) {
|
||||
showOutput(tr("Cannot execute p4 submit."));
|
||||
if (!proc.waitForStarted(p4Timeout)) {
|
||||
showOutput(tr("Cannot execute p4 submit."), true);
|
||||
QApplication::restoreOverrideCursor();
|
||||
delete m_changeTmpFile;
|
||||
m_changeTmpFile = 0;
|
||||
@@ -992,7 +992,7 @@ bool PerforcePlugin::editorAboutToClose(Core::IEditor *editor)
|
||||
proc.closeWriteChannel();
|
||||
|
||||
if (!proc.waitForFinished()) {
|
||||
showOutput(tr("Cannot execute p4 submit."));
|
||||
showOutput(tr("Cannot execute p4 submit."), true);
|
||||
QApplication::restoreOverrideCursor();
|
||||
delete m_changeTmpFile;
|
||||
m_changeTmpFile = 0;
|
||||
@@ -1000,7 +1000,7 @@ bool PerforcePlugin::editorAboutToClose(Core::IEditor *editor)
|
||||
}
|
||||
QString output = QString::fromUtf8(proc.readAll());
|
||||
showOutput(output);
|
||||
if (output.contains("Out of date files must be resolved or reverted")) {
|
||||
if (output.contains("Out of date files must be resolved or reverted"), true) {
|
||||
QMessageBox::warning(editor->widget(), "Pending change", "Could not submit the change, because your workspace was out of date. Created a pending submit instead.");
|
||||
}
|
||||
QApplication::restoreOverrideCursor();
|
||||
|
||||
@@ -36,6 +36,7 @@
|
||||
#include "perforceplugin.h"
|
||||
#include "perforceconstants.h"
|
||||
|
||||
#include <vcsbase/submitfilemodel.h>
|
||||
#include <utils/qtcassert.h>
|
||||
|
||||
#include <QtCore/QDebug>
|
||||
@@ -43,10 +44,14 @@
|
||||
namespace Perforce {
|
||||
namespace Internal {
|
||||
|
||||
enum { FileSpecRole = Qt::UserRole + 1 };
|
||||
|
||||
PerforceSubmitEditor::PerforceSubmitEditor(const VCSBase::VCSBaseSubmitEditorParameters *parameters, QWidget *parent) :
|
||||
VCSBaseSubmitEditor(parameters, new PerforceSubmitEditorWidget(parent))
|
||||
VCSBaseSubmitEditor(parameters, new PerforceSubmitEditorWidget(parent)),
|
||||
m_fileModel(new VCSBase::SubmitFileModel(this))
|
||||
{
|
||||
setDisplayName(tr("Perforce Submit"));
|
||||
setFileModel(m_fileModel);
|
||||
}
|
||||
|
||||
PerforceSubmitEditorWidget *PerforceSubmitEditor::submitEditorWidget()
|
||||
@@ -54,14 +59,6 @@ PerforceSubmitEditorWidget *PerforceSubmitEditor::submitEditorWidget()
|
||||
return static_cast<PerforceSubmitEditorWidget *>(widget());
|
||||
}
|
||||
|
||||
QStringList PerforceSubmitEditor::vcsFileListToFileList(const QStringList &rawList) const
|
||||
{
|
||||
QStringList rc;
|
||||
foreach (const QString &rf, rawList)
|
||||
rc.push_back(fileFromChangeLine(rf));
|
||||
return rc;
|
||||
}
|
||||
|
||||
QString PerforceSubmitEditor::fileContents() const
|
||||
{
|
||||
const_cast<PerforceSubmitEditor*>(this)->updateEntries();
|
||||
@@ -121,25 +118,7 @@ bool PerforceSubmitEditor::parseText(QString text)
|
||||
|
||||
void PerforceSubmitEditor::restrictToProjectFiles(const QStringList &knownProjectFiles)
|
||||
{
|
||||
QStringList allFiles = submitEditorWidget()->fileList();
|
||||
const int oldSize = allFiles.size();
|
||||
for (int i = oldSize - 1; i >= 0; i--)
|
||||
if (!knownProjectFiles.contains(fileFromChangeLine(allFiles.at(i))))
|
||||
allFiles.removeAt(i);
|
||||
if (allFiles.size() != oldSize)
|
||||
submitEditorWidget()->setFileList(allFiles);
|
||||
if (Perforce::Constants::debug)
|
||||
qDebug() << Q_FUNC_INFO << oldSize << "->" << allFiles.size();
|
||||
}
|
||||
|
||||
QString PerforceSubmitEditor::fileFromChangeLine(const QString &line)
|
||||
{
|
||||
QString rc = line;
|
||||
// " foo.cpp#add"
|
||||
const int index = rc.lastIndexOf(QLatin1Char('#'));
|
||||
if (index != -1)
|
||||
rc.truncate(index);
|
||||
return rc.trimmed();
|
||||
m_fileModel->filter(knownProjectFiles, fileNameColumn());
|
||||
}
|
||||
|
||||
void PerforceSubmitEditor::updateFields()
|
||||
@@ -161,12 +140,15 @@ void PerforceSubmitEditor::updateFields()
|
||||
widget->setDescriptionText(lines.join(newLine));
|
||||
|
||||
lines = m_entries.value(QLatin1String("Files")).split(newLine);
|
||||
lines.replaceInStrings(leadingTabPattern, QString());
|
||||
QStringList fileList;
|
||||
foreach (const QString &line, lines)
|
||||
if (!line.isEmpty())
|
||||
fileList.push_back(line);
|
||||
widget->setFileList(fileList);
|
||||
// split up "file#add" and store complete spec line as user data
|
||||
foreach (const QString &specLine, lines) {
|
||||
const QStringList list = specLine.split(QLatin1Char('#'));
|
||||
if (list.size() == 2) {
|
||||
const QString file = list.at(0).trimmed();
|
||||
const QString state = list.at(1).trimmed();
|
||||
m_fileModel->addFile(file, state).at(0)->setData(specLine, FileSpecRole);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void PerforceSubmitEditor::updateEntries()
|
||||
@@ -181,13 +163,14 @@ void PerforceSubmitEditor::updateEntries()
|
||||
lines.replaceInStrings(QRegExp(QLatin1String("^")), tab);
|
||||
m_entries.insert(QLatin1String("Description"), newLine + lines.join(newLine) + QLatin1String("\n\n"));
|
||||
QString files = newLine;
|
||||
// Files
|
||||
const QStringList fileList = submitEditorWidget()->fileList();
|
||||
const int count = fileList.size();
|
||||
for (int i = 0; i < count; i++) {
|
||||
files += tab;
|
||||
files += fileList.at(i);
|
||||
files += newLine;
|
||||
// Re-build the file spec '<tab>file#add' from the user data
|
||||
const int count = m_fileModel->rowCount();
|
||||
for (int r = 0; r < count; r++) {
|
||||
const QStandardItem *item = m_fileModel->item(r, 0);
|
||||
if (item->checkState() == Qt::Checked) {
|
||||
files += item->data(FileSpecRole).toString();
|
||||
files += newLine;
|
||||
}
|
||||
}
|
||||
files += newLine;
|
||||
m_entries.insert(QLatin1String("Files"), files);
|
||||
|
||||
@@ -39,6 +39,10 @@
|
||||
#include <QtCore/QStringList>
|
||||
#include <QtCore/QMap>
|
||||
|
||||
namespace VCSBase {
|
||||
class SubmitFileModel;
|
||||
}
|
||||
|
||||
namespace Perforce {
|
||||
namespace Internal {
|
||||
|
||||
@@ -66,7 +70,6 @@ public:
|
||||
static QString fileFromChangeLine(const QString &line);
|
||||
|
||||
protected:
|
||||
virtual QStringList vcsFileListToFileList(const QStringList &) const;
|
||||
virtual QString fileContents() const;
|
||||
virtual bool setFileContents(const QString &contents);
|
||||
|
||||
@@ -77,6 +80,7 @@ private:
|
||||
void updateEntries();
|
||||
|
||||
QMap<QString, QString> m_entries;
|
||||
VCSBase::SubmitFileModel *m_fileModel;
|
||||
};
|
||||
|
||||
} // namespace Internal
|
||||
|
||||
@@ -36,6 +36,7 @@
|
||||
#include "buildstepspage.h"
|
||||
#include "project.h"
|
||||
|
||||
#include <coreplugin/coreconstants.h>
|
||||
#include <extensionsystem/pluginmanager.h>
|
||||
|
||||
#include <QtCore/QDebug>
|
||||
@@ -102,9 +103,9 @@ BuildSettingsWidget::BuildSettingsWidget(Project *project)
|
||||
m_ui.splitter->setStretchFactor(1,10);
|
||||
m_ui.buildSettingsList->setContextMenuPolicy(Qt::CustomContextMenu);
|
||||
|
||||
m_ui.addButton->setIcon(QIcon(":/qworkbench/images/plus.png"));
|
||||
m_ui.addButton->setIcon(QIcon(Core::Constants::ICON_PLUS));
|
||||
m_ui.addButton->setText("");
|
||||
m_ui.removeButton->setIcon(QIcon(":/qworkbench/images/minus.png"));
|
||||
m_ui.removeButton->setIcon(QIcon(Core::Constants::ICON_MINUS));
|
||||
m_ui.removeButton->setText("");
|
||||
|
||||
QMenu *addButtonMenu = new QMenu(this);
|
||||
|
||||
@@ -36,6 +36,7 @@
|
||||
#include "ui_buildstepspage.h"
|
||||
#include "project.h"
|
||||
|
||||
#include <coreplugin/coreconstants.h>
|
||||
#include <extensionsystem/pluginmanager.h>
|
||||
#include <utils/qtcassert.h>
|
||||
|
||||
@@ -50,8 +51,8 @@ BuildStepsPage::BuildStepsPage(Project *project) :
|
||||
m_ui->setupUi(this);
|
||||
|
||||
m_ui->buildStepAddButton->setMenu(new QMenu(this));
|
||||
m_ui->buildStepAddButton->setIcon(QIcon(":/qworkbench/images/plus.png"));
|
||||
m_ui->buildStepRemoveToolButton->setIcon(QIcon(":/qworkbench/images/minus.png"));
|
||||
m_ui->buildStepAddButton->setIcon(QIcon(Core::Constants::ICON_PLUS));
|
||||
m_ui->buildStepRemoveToolButton->setIcon(QIcon(Core::Constants::ICON_MINUS));
|
||||
m_ui->buildStepUpToolButton->setArrowType(Qt::UpArrow);
|
||||
m_ui->buildStepDownToolButton->setArrowType(Qt::DownArrow);
|
||||
|
||||
|
||||
@@ -1,59 +1,45 @@
|
||||
<ui version="4.0" >
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>ProjectExplorer::Internal::DependenciesDialog</class>
|
||||
<widget class="QDialog" name="ProjectExplorer::Internal::DependenciesDialog" >
|
||||
<property name="geometry" >
|
||||
<widget class="QDialog" name="ProjectExplorer::Internal::DependenciesDialog">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>618</width>
|
||||
<height>660</height>
|
||||
<width>492</width>
|
||||
<height>435</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle" >
|
||||
<property name="windowTitle">
|
||||
<string>Project Dependencies</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" >
|
||||
<property name="spacing" >
|
||||
<layout class="QVBoxLayout">
|
||||
<property name="spacing">
|
||||
<number>6</number>
|
||||
</property>
|
||||
<property name="leftMargin" >
|
||||
<number>9</number>
|
||||
</property>
|
||||
<property name="topMargin" >
|
||||
<number>9</number>
|
||||
</property>
|
||||
<property name="rightMargin" >
|
||||
<number>9</number>
|
||||
</property>
|
||||
<property name="bottomMargin" >
|
||||
<property name="margin">
|
||||
<number>9</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QTableView" name="dependencyTable" >
|
||||
<property name="minimumSize" >
|
||||
<size>
|
||||
<width>600</width>
|
||||
<height>600</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="selectionMode" >
|
||||
<widget class="QTableView" name="dependencyTable">
|
||||
<property name="selectionMode">
|
||||
<enum>QAbstractItemView::SingleSelection</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="Line" name="line" >
|
||||
<property name="orientation" >
|
||||
<widget class="Line" name="line">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QDialogButtonBox" name="buttonBox" >
|
||||
<property name="orientation" >
|
||||
<widget class="QDialogButtonBox" name="buttonBox">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="standardButtons" >
|
||||
<property name="standardButtons">
|
||||
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
|
||||
</property>
|
||||
</widget>
|
||||
@@ -68,11 +54,11 @@
|
||||
<receiver>ProjectExplorer::Internal::DependenciesDialog</receiver>
|
||||
<slot>accept()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel" >
|
||||
<hint type="sourcelabel">
|
||||
<x>142</x>
|
||||
<y>285</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel" >
|
||||
<hint type="destinationlabel">
|
||||
<x>142</x>
|
||||
<y>155</y>
|
||||
</hint>
|
||||
@@ -84,11 +70,11 @@
|
||||
<receiver>ProjectExplorer::Internal::DependenciesDialog</receiver>
|
||||
<slot>reject()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel" >
|
||||
<hint type="sourcelabel">
|
||||
<x>142</x>
|
||||
<y>285</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel" >
|
||||
<hint type="destinationlabel">
|
||||
<x>142</x>
|
||||
<y>155</y>
|
||||
</hint>
|
||||
|
||||
@@ -209,7 +209,7 @@ Core::NavigationView FolderNavigationWidgetFactory::createWidget()
|
||||
n.widget = ptw;
|
||||
QToolButton *toggleSync = new QToolButton;
|
||||
toggleSync->setProperty("type", "dockbutton");
|
||||
toggleSync->setIcon(QIcon(":/qworkbench/images/linkicon.png"));
|
||||
toggleSync->setIcon(QIcon(":/core/images/linkicon.png"));
|
||||
toggleSync->setCheckable(true);
|
||||
toggleSync->setChecked(ptw->autoSynchronization());
|
||||
toggleSync->setToolTip(tr("Synchronize with Editor"));
|
||||
|
||||
@@ -484,6 +484,10 @@ bool ProjectExplorerPlugin::initialize(const QStringList & /*arguments*/, QStrin
|
||||
mbuild->addAction(cmd, Constants::G_BUILD_SESSION);
|
||||
msessionContextMenu->addAction(cmd, Constants::G_SESSION_BUILD);
|
||||
|
||||
// dependencies action
|
||||
m_dependenciesAction = new QAction(tr("Edit Dependencies..."), this);
|
||||
cmd = am->registerAction(m_dependenciesAction, Constants::DEPENDENCIES, globalcontext);
|
||||
mbuild->addAction(cmd, Constants::G_BUILD_SESSION);
|
||||
|
||||
// build action
|
||||
m_buildAction = new QAction(tr("Build Project"), this);
|
||||
@@ -555,11 +559,6 @@ bool ProjectExplorerPlugin::initialize(const QStringList & /*arguments*/, QStrin
|
||||
mdebug->addAction(cmd, Core::Constants::G_DEFAULT_ONE);
|
||||
modeManager->addAction(cmd, Constants::P_ACTION_DEBUG, m_runConfigurationMenu);
|
||||
|
||||
// dependencies action
|
||||
m_dependenciesAction = new QAction(tr("Edit Dependencies..."), this);
|
||||
cmd = am->registerAction(m_dependenciesAction, Constants::DEPENDENCIES, pecontext);
|
||||
msessionContextMenu->addAction(cmd, Constants::G_SESSION_CONFIG);
|
||||
|
||||
// add new file action
|
||||
m_addNewFileAction = new QAction(tr("Add New..."), this);
|
||||
cmd = am->registerAction(m_addNewFileAction, ProjectExplorer::Constants::ADDNEWFILE,
|
||||
|
||||
@@ -159,7 +159,7 @@ ProjectTreeWidget::ProjectTreeWidget(Core::ICore *core, QWidget *parent)
|
||||
|
||||
m_toggleSync = new QToolButton;
|
||||
m_toggleSync->setProperty("type", "dockbutton");
|
||||
m_toggleSync->setIcon(QIcon(":/qworkbench/images/linkicon.png"));
|
||||
m_toggleSync->setIcon(QIcon(":/core/images/linkicon.png"));
|
||||
m_toggleSync->setCheckable(true);
|
||||
m_toggleSync->setChecked(autoSynchronization());
|
||||
m_toggleSync->setToolTip(tr("Synchronize with Editor"));
|
||||
|
||||
@@ -36,6 +36,7 @@
|
||||
|
||||
#include "ui_runsettingspropertiespage.h"
|
||||
|
||||
#include <coreplugin/coreconstants.h>
|
||||
#include <extensionsystem/pluginmanager.h>
|
||||
#include <utils/qtcassert.h>
|
||||
|
||||
@@ -180,9 +181,9 @@ RunSettingsWidget::RunSettingsWidget(Project *project)
|
||||
m_ui = new Ui::RunSettingsPropertiesPage;
|
||||
m_ui->setupUi(this);
|
||||
m_addMenu = new QMenu(m_ui->addToolButton);
|
||||
m_ui->addToolButton->setIcon(QIcon(":/qworkbench/images/plus.png"));
|
||||
m_ui->addToolButton->setIcon(QIcon(Core::Constants::ICON_PLUS));
|
||||
m_ui->addToolButton->setMenu(m_addMenu);
|
||||
m_ui->removeToolButton->setIcon(QIcon(":/qworkbench/images/minus.png"));
|
||||
m_ui->removeToolButton->setIcon(QIcon(Core::Constants::ICON_MINUS));
|
||||
m_ui->runConfigurationCombo->setModel(m_runConfigurationsModel);
|
||||
|
||||
connect(m_addMenu, SIGNAL(aboutToShow()),
|
||||
|
||||
@@ -139,6 +139,29 @@ inline Core::IEditor* locateEditor(const Core::ICore *core, const char *property
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Parse "svn status" output for added/modified/deleted files
|
||||
// "M<7blanks>file"
|
||||
typedef QList<SubversionSubmitEditor::StatusFilePair> StatusList;
|
||||
|
||||
StatusList parseStatusOutput(const QString &output)
|
||||
{
|
||||
StatusList changeSet;
|
||||
const QString newLine = QString(QLatin1Char('\n'));
|
||||
const QStringList list = output.split(newLine, QString::SkipEmptyParts);
|
||||
foreach (const QString &l, list) {
|
||||
const QString line =l.trimmed();
|
||||
if (line.size() > 8) {
|
||||
const QChar state = line.at(0);
|
||||
if (state == QLatin1Char('A') || state == QLatin1Char('D') || state == QLatin1Char('M')) {
|
||||
const QString fileName = line.mid(7);
|
||||
changeSet.push_back(SubversionSubmitEditor::StatusFilePair(QString(state), fileName));
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
return changeSet;
|
||||
}
|
||||
|
||||
// ------------- SubversionPlugin
|
||||
Core::ICore *SubversionPlugin::m_coreInstance = 0;
|
||||
SubversionPlugin *SubversionPlugin::m_subversionPluginInstance = 0;
|
||||
@@ -694,7 +717,7 @@ void SubversionPlugin::startCommit(const QStringList &files)
|
||||
if (response.error)
|
||||
return;
|
||||
// Get list of added/modified/deleted files
|
||||
const QStringList statusOutput = parseStatusOutput(response.stdOut);
|
||||
const StatusList statusOutput = parseStatusOutput(response.stdOut);
|
||||
if (statusOutput.empty()) {
|
||||
showOutput(tr("There are no modified files."), true);
|
||||
return;
|
||||
@@ -717,22 +740,7 @@ void SubversionPlugin::startCommit(const QStringList &files)
|
||||
m_changeTmpFile->seek(0);
|
||||
// Create a submit editor and set file list
|
||||
SubversionSubmitEditor *editor = openSubversionSubmitEditor(m_changeTmpFile->fileName());
|
||||
editor->setFileList(statusOutput);
|
||||
}
|
||||
|
||||
// Parse "status" output for added/modified/deleted files
|
||||
QStringList SubversionPlugin::parseStatusOutput(const QString &output) const
|
||||
{
|
||||
QStringList changeSet;
|
||||
const QString newLine = QString(QLatin1Char('\n'));
|
||||
const QStringList list = output.split(newLine, QString::SkipEmptyParts);
|
||||
foreach (const QString &l, list) {
|
||||
QString line(l.trimmed());
|
||||
if (line.startsWith(QLatin1Char('A')) || line.startsWith(QLatin1Char('D'))
|
||||
|| line.startsWith(QLatin1Char('M')))
|
||||
changeSet.append(line);
|
||||
}
|
||||
return changeSet;
|
||||
editor->setStatusList(statusOutput);
|
||||
}
|
||||
|
||||
bool SubversionPlugin::commit(const QString &messageFile,
|
||||
|
||||
@@ -133,7 +133,6 @@ private:
|
||||
SubversionResponse runSvn(const QStringList &arguments, int timeOut,
|
||||
bool showStdOutInOutputWindow, QTextCodec *outputCodec = 0);
|
||||
void showOutput(const QString &output, bool bringToForeground = true);
|
||||
QStringList parseStatusOutput(const QString &output) const;
|
||||
void annotate(const QString &file);
|
||||
void filelog(const QString &file);
|
||||
bool managesDirectory(const QDir &directory) const;
|
||||
|
||||
@@ -35,6 +35,7 @@
|
||||
#include "subversionsubmiteditor.h"
|
||||
|
||||
#include <utils/submiteditorwidget.h>
|
||||
#include <vcsbase/submitfilemodel.h>
|
||||
|
||||
using namespace Subversion::Internal;
|
||||
|
||||
@@ -45,6 +46,19 @@ SubversionSubmitEditor::SubversionSubmitEditor(const VCSBase::VCSBaseSubmitEdito
|
||||
setDisplayName(tr("Subversion Submit"));
|
||||
}
|
||||
|
||||
void SubversionSubmitEditor::setStatusList(const QList<StatusFilePair> &statusOutput)
|
||||
{
|
||||
typedef QList<StatusFilePair>::const_iterator ConstIterator;
|
||||
VCSBase::SubmitFileModel *model = new VCSBase::SubmitFileModel(this);
|
||||
|
||||
const ConstIterator cend = statusOutput.constEnd();
|
||||
for (ConstIterator it = statusOutput.constBegin(); it != cend; ++it)
|
||||
model->addFile(it->second, it->first, true);
|
||||
setFileModel(model);
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
QStringList SubversionSubmitEditor::vcsFileListToFileList(const QStringList &rl) const
|
||||
{
|
||||
QStringList files;
|
||||
@@ -59,3 +73,5 @@ QString SubversionSubmitEditor::fileFromStatusLine(const QString &statusLine)
|
||||
enum { filePos = 7 };
|
||||
return statusLine.mid(filePos, statusLine.size() - filePos);
|
||||
}
|
||||
|
||||
*/
|
||||
|
||||
@@ -34,6 +34,9 @@
|
||||
#ifndef SUBVERSIONSUBMITEDITOR_H
|
||||
#define SUBVERSIONSUBMITEDITOR_H
|
||||
|
||||
#include <QtCore/QPair>
|
||||
#include <QtCore/QStringList>
|
||||
|
||||
#include <vcsbase/vcsbasesubmiteditor.h>
|
||||
|
||||
namespace Subversion {
|
||||
@@ -48,8 +51,10 @@ public:
|
||||
|
||||
static QString fileFromStatusLine(const QString &statusLine);
|
||||
|
||||
private:
|
||||
virtual QStringList vcsFileListToFileList(const QStringList &) const;
|
||||
// A list of ( 'A','M','D') status indicators and file names.
|
||||
typedef QPair<QString, QString> StatusFilePair;
|
||||
|
||||
void setStatusList(const QList<StatusFilePair> &statusOutput);
|
||||
};
|
||||
|
||||
} // namespace Internal
|
||||
|
||||
@@ -86,10 +86,10 @@ TextEditorSettings::TextEditorSettings(Internal::TextEditorPlugin *plugin,
|
||||
formatDescriptions.push_back(FormatDescription(QLatin1String(C_DISABLED_CODE), tr("Disabled Code"), Qt::gray));
|
||||
|
||||
// Diff categories
|
||||
formatDescriptions.push_back(FormatDescription(QLatin1String(C_ADDED_LINE), tr("Added Line"), Qt::blue));
|
||||
formatDescriptions.push_back(FormatDescription(QLatin1String(C_ADDED_LINE), tr("Added Line"), QColor(0, 170, 0)));
|
||||
formatDescriptions.push_back(FormatDescription(QLatin1String(C_REMOVED_LINE), tr("Removed Line"), Qt::red));
|
||||
formatDescriptions.push_back(FormatDescription(QLatin1String(C_DIFF_FILE), tr("Diff File"), Qt::black));
|
||||
formatDescriptions.push_back(FormatDescription(QLatin1String(C_DIFF_LOCATION), tr("Diff Location"), Qt::green));
|
||||
formatDescriptions.push_back(FormatDescription(QLatin1String(C_DIFF_FILE), tr("Diff File"), Qt::darkBlue));
|
||||
formatDescriptions.push_back(FormatDescription(QLatin1String(C_DIFF_LOCATION), tr("Diff Location"), Qt::blue));
|
||||
|
||||
m_fontSettingsPage = new FontSettingsPage(formatDescriptions,
|
||||
QLatin1String("TextEditor"),
|
||||
|
||||
78
src/plugins/vcsbase/submitfilemodel.cpp
Normal file
78
src/plugins/vcsbase/submitfilemodel.cpp
Normal file
@@ -0,0 +1,78 @@
|
||||
/***************************************************************************
|
||||
**
|
||||
** This file is part of Qt Creator
|
||||
**
|
||||
** Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
|
||||
**
|
||||
** Contact: Qt Software Information (qt-info@nokia.com)
|
||||
**
|
||||
**
|
||||
** Non-Open Source Usage
|
||||
**
|
||||
** Licensees may use this file in accordance with the Qt Beta Version
|
||||
** License Agreement, Agreement version 2.2 provided with the Software or,
|
||||
** alternatively, in accordance with the terms contained in a written
|
||||
** agreement between you and Nokia.
|
||||
**
|
||||
** GNU General Public License Usage
|
||||
**
|
||||
** Alternatively, this file may be used under the terms of the GNU General
|
||||
** Public License versions 2.0 or 3.0 as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.GPL included in the packaging
|
||||
** of this file. Please review the following information to ensure GNU
|
||||
** General Public Licensing requirements will be met:
|
||||
**
|
||||
** http://www.fsf.org/licensing/licenses/info/GPLv2.html and
|
||||
** http://www.gnu.org/copyleft/gpl.html.
|
||||
**
|
||||
** In addition, as a special exception, Nokia gives you certain additional
|
||||
** rights. These rights are described in the Nokia Qt GPL Exception
|
||||
** version 1.3, included in the file GPL_EXCEPTION.txt in this package.
|
||||
**
|
||||
***************************************************************************/
|
||||
|
||||
#include "submitfilemodel.h"
|
||||
#include "vcsbaseconstants.h"
|
||||
|
||||
#include <QtGui/QStandardItem>
|
||||
#include <QtCore/QDebug>
|
||||
|
||||
namespace VCSBase {
|
||||
|
||||
SubmitFileModel::SubmitFileModel(QObject *parent) :
|
||||
QStandardItemModel(0, 2, parent)
|
||||
{
|
||||
// setColumnCount(2);
|
||||
QStringList headerLabels;
|
||||
headerLabels << tr("State") << tr("File");
|
||||
setHorizontalHeaderLabels(headerLabels);
|
||||
}
|
||||
|
||||
QList<QStandardItem *> SubmitFileModel::addFile(const QString &fileName, const QString &status, bool checked)
|
||||
{
|
||||
if (VCSBase::Constants::Internal::debug)
|
||||
qDebug() << Q_FUNC_INFO << fileName << status << checked;
|
||||
QStandardItem *statusItem = new QStandardItem(status);
|
||||
statusItem->setCheckable(true);
|
||||
statusItem->setCheckState(checked ? Qt::Checked : Qt::Unchecked);
|
||||
QStandardItem *fileItem = new QStandardItem(fileName);
|
||||
QList<QStandardItem *> row;
|
||||
row << statusItem << fileItem;
|
||||
appendRow(row);
|
||||
return row;
|
||||
}
|
||||
|
||||
unsigned SubmitFileModel::filter(const QStringList &filter, int column)
|
||||
{
|
||||
unsigned rc = 0;
|
||||
for (int r = rowCount() - 1; r >= 0; r--)
|
||||
if (const QStandardItem *i = item(r, column))
|
||||
if (!filter.contains(i->text())) {
|
||||
qDeleteAll(takeRow(r));
|
||||
rc++;
|
||||
}
|
||||
if (VCSBase::Constants::Internal::debug)
|
||||
qDebug() << Q_FUNC_INFO << " deleted " << rc << " items using " << filter << " , remaining " << rowCount();
|
||||
return rc;
|
||||
}
|
||||
}
|
||||
62
src/plugins/vcsbase/submitfilemodel.h
Normal file
62
src/plugins/vcsbase/submitfilemodel.h
Normal file
@@ -0,0 +1,62 @@
|
||||
/***************************************************************************
|
||||
**
|
||||
** This file is part of Qt Creator
|
||||
**
|
||||
** Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
|
||||
**
|
||||
** Contact: Qt Software Information (qt-info@nokia.com)
|
||||
**
|
||||
**
|
||||
** Non-Open Source Usage
|
||||
**
|
||||
** Licensees may use this file in accordance with the Qt Beta Version
|
||||
** License Agreement, Agreement version 2.2 provided with the Software or,
|
||||
** alternatively, in accordance with the terms contained in a written
|
||||
** agreement between you and Nokia.
|
||||
**
|
||||
** GNU General Public License Usage
|
||||
**
|
||||
** Alternatively, this file may be used under the terms of the GNU General
|
||||
** Public License versions 2.0 or 3.0 as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.GPL included in the packaging
|
||||
** of this file. Please review the following information to ensure GNU
|
||||
** General Public Licensing requirements will be met:
|
||||
**
|
||||
** http://www.fsf.org/licensing/licenses/info/GPLv2.html and
|
||||
** http://www.gnu.org/copyleft/gpl.html.
|
||||
**
|
||||
** In addition, as a special exception, Nokia gives you certain additional
|
||||
** rights. These rights are described in the Nokia Qt GPL Exception
|
||||
** version 1.3, included in the file GPL_EXCEPTION.txt in this package.
|
||||
**
|
||||
***************************************************************************/
|
||||
|
||||
#ifndef SUBMITMODEL_H
|
||||
#define SUBMITMODEL_H
|
||||
|
||||
#include "vcsbase_global.h"
|
||||
|
||||
#include <QtGui/QStandardItemModel>
|
||||
|
||||
namespace VCSBase {
|
||||
|
||||
/* A 2-column (checkable, state, file name) model to be used to list the files-
|
||||
* in the submit editor. Provides header items and a convience to add files. */
|
||||
|
||||
class VCSBASE_EXPORT SubmitFileModel : public QStandardItemModel
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit SubmitFileModel(QObject *parent = 0);
|
||||
|
||||
// Convenience to add a file plus status text.
|
||||
QList<QStandardItem *> addFile(const QString &fileName, const QString &status = QString(), bool checked = true);
|
||||
|
||||
// Filter for entries contained in the filter list. Returns the
|
||||
// number of deleted entries.
|
||||
unsigned filter(const QStringList &filter, int column);
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif // SUBMITMODEL_H
|
||||
@@ -1,31 +1,28 @@
|
||||
TEMPLATE = lib
|
||||
TARGET = VCSBase
|
||||
|
||||
DEFINES += VCSBASE_LIBRARY
|
||||
|
||||
include(../../qworkbenchplugin.pri)
|
||||
include(vcsbase_dependencies.pri)
|
||||
|
||||
HEADERS += vcsbase_global.h \
|
||||
vcsbaseconstants.h \
|
||||
vcsbaseplugin.h \
|
||||
baseannotationhighlighter.h \
|
||||
diffhighlighter.h \
|
||||
vcsbasetextdocument.h \
|
||||
vcsbaseeditor.h \
|
||||
vcsbasesubmiteditor.h \
|
||||
basevcseditorfactory.h \
|
||||
submiteditorfile.h \
|
||||
basevcssubmiteditorfactory.h
|
||||
|
||||
vcsbaseconstants.h \
|
||||
vcsbaseplugin.h \
|
||||
baseannotationhighlighter.h \
|
||||
diffhighlighter.h \
|
||||
vcsbasetextdocument.h \
|
||||
vcsbaseeditor.h \
|
||||
vcsbasesubmiteditor.h \
|
||||
basevcseditorfactory.h \
|
||||
submiteditorfile.h \
|
||||
basevcssubmiteditorfactory.h \
|
||||
submitfilemodel.h
|
||||
SOURCES += vcsbaseplugin.cpp \
|
||||
baseannotationhighlighter.cpp \
|
||||
diffhighlighter.cpp \
|
||||
vcsbasetextdocument.cpp \
|
||||
vcsbaseeditor.cpp \
|
||||
vcsbasesubmiteditor.cpp \
|
||||
basevcseditorfactory.cpp \
|
||||
submiteditorfile.cpp \
|
||||
basevcssubmiteditorfactory.cpp
|
||||
|
||||
RESOURCES=vcsbase.qrc
|
||||
baseannotationhighlighter.cpp \
|
||||
diffhighlighter.cpp \
|
||||
vcsbasetextdocument.cpp \
|
||||
vcsbaseeditor.cpp \
|
||||
vcsbasesubmiteditor.cpp \
|
||||
basevcseditorfactory.cpp \
|
||||
submiteditorfile.cpp \
|
||||
basevcssubmiteditorfactory.cpp \
|
||||
submitfilemodel.cpp
|
||||
RESOURCES = vcsbase.qrc
|
||||
|
||||
@@ -129,6 +129,16 @@ VCSBaseSubmitEditor::~VCSBaseSubmitEditor()
|
||||
delete m_d;
|
||||
}
|
||||
|
||||
int VCSBaseSubmitEditor::fileNameColumn() const
|
||||
{
|
||||
return m_d->m_widget->fileNameColumn();
|
||||
}
|
||||
|
||||
void VCSBaseSubmitEditor::setFileNameColumn(int c)
|
||||
{
|
||||
m_d->m_widget->setFileNameColumn(c);
|
||||
}
|
||||
|
||||
void VCSBaseSubmitEditor::slotDescriptionChanged()
|
||||
{
|
||||
}
|
||||
@@ -246,22 +256,22 @@ bool VCSBaseSubmitEditor::restoreState(const QByteArray &/*state*/)
|
||||
|
||||
QStringList VCSBaseSubmitEditor::checkedFiles() const
|
||||
{
|
||||
return vcsFileListToFileList(m_d->m_widget->checkedFiles());
|
||||
return m_d->m_widget->checkedFiles();
|
||||
}
|
||||
|
||||
void VCSBaseSubmitEditor::setFileList(const QStringList &l)
|
||||
void VCSBaseSubmitEditor::setFileModel(QAbstractItemModel *m)
|
||||
{
|
||||
m_d->m_widget->setFileList(l);
|
||||
m_d->m_widget->setFileModel(m);
|
||||
}
|
||||
|
||||
void VCSBaseSubmitEditor::addFiles(const QStringList& list, bool checked, bool userCheckable)
|
||||
QAbstractItemModel *VCSBaseSubmitEditor::fileModel() const
|
||||
{
|
||||
m_d->m_widget->addFiles(list, checked, userCheckable);
|
||||
return m_d->m_widget->fileModel();
|
||||
}
|
||||
|
||||
void VCSBaseSubmitEditor::slotDiffSelectedVCSFiles(const QStringList &rawList)
|
||||
{
|
||||
emit diffSelectedFiles(vcsFileListToFileList(rawList));
|
||||
emit diffSelectedFiles(rawList);
|
||||
}
|
||||
|
||||
bool VCSBaseSubmitEditor::save(const QString &fileName)
|
||||
|
||||
@@ -42,6 +42,7 @@
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
class QIcon;
|
||||
class QAbstractItemModel;
|
||||
QT_END_NAMESPACE
|
||||
|
||||
namespace Core {
|
||||
@@ -90,6 +91,7 @@ struct VCSBASE_EXPORT VCSBaseSubmitEditorParameters {
|
||||
class VCSBASE_EXPORT VCSBaseSubmitEditor : public Core::IEditor
|
||||
{
|
||||
Q_OBJECT
|
||||
Q_PROPERTY(int fileNameColumn READ fileNameColumn WRITE setFileNameColumn DESIGNABLE false)
|
||||
public:
|
||||
typedef QList<int> Context;
|
||||
|
||||
@@ -100,6 +102,9 @@ protected:
|
||||
public:
|
||||
virtual ~VCSBaseSubmitEditor();
|
||||
|
||||
int fileNameColumn() const;
|
||||
void setFileNameColumn(int c);
|
||||
|
||||
// Core::IEditor
|
||||
virtual bool createNew(const QString &contents);
|
||||
virtual bool open(const QString &fileName);
|
||||
@@ -119,8 +124,8 @@ public:
|
||||
|
||||
QStringList checkedFiles() const;
|
||||
|
||||
void setFileList(const QStringList&);
|
||||
void addFiles(const QStringList&, bool checked = true, bool userCheckable = true);
|
||||
void setFileModel(QAbstractItemModel *m);
|
||||
QAbstractItemModel *fileModel() const;
|
||||
|
||||
// Utilities returning some predefined icons for actions
|
||||
static QIcon diffIcon();
|
||||
@@ -139,11 +144,6 @@ private slots:
|
||||
void slotDescriptionChanged();
|
||||
|
||||
protected:
|
||||
/* Implemented this to extract the real file list from the status
|
||||
* output of the versioning system as displayed in the file list
|
||||
* for example "M foo.cpp" -> "foo.cpp". */
|
||||
virtual QStringList vcsFileListToFileList(const QStringList &) const = 0;
|
||||
|
||||
/* These hooks allow for modifying the contents that goes to
|
||||
* the file. The default implementation uses the text
|
||||
* of the description editor. */
|
||||
|
||||
Reference in New Issue
Block a user