Merge branch 'master' of git@scm.dev.nokia.troll.no:creator/mainline

This commit is contained in:
dt
2009-01-12 18:26:52 +01:00
76 changed files with 1591 additions and 1076 deletions

View File

@@ -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)

View File

@@ -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>

View 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";

View 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)

View File

@@ -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

View File

@@ -37,7 +37,6 @@
#include "editormanager.h"
#include "mainwindow.h"
#include "modemanager.h"
#include "viewmanager.h"
#include "fileiconprovider.h"
#include <QtCore/qplugin.h>

View File

@@ -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

View File

@@ -1,3 +1,2 @@
include(coreplugin_dependencies.pri)
LIBS *= -l$$qtLibraryTarget(Core)

View File

@@ -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 \

View File

@@ -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>

View File

@@ -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()

View File

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

View File

@@ -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())

View File

@@ -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);

View File

@@ -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"))
{
}

View File

@@ -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);

View File

@@ -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>

View 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).
*/

View File

@@ -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);

View File

@@ -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;

View File

@@ -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;

View File

@@ -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:

View File

@@ -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()));

View File

@@ -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
);
}

View File

@@ -38,7 +38,6 @@
#include "coreconstants.h"
#include "uniqueidmanager.h"
#include "viewmanagerinterface.h"
#include <utils/qtcassert.h>

View File

@@ -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();

View File

@@ -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:

View File

@@ -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

View File

@@ -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()));

View File

@@ -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);

View File

@@ -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

View File

@@ -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);

View File

@@ -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
{

View File

@@ -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);

View File

@@ -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;

View File

@@ -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;
};

View File

@@ -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;

View File

@@ -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;

View File

@@ -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

View File

@@ -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();
};

View File

@@ -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();

View File

@@ -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();

View File

@@ -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);

View File

@@ -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

View File

@@ -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);

View File

@@ -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);

View File

@@ -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>

View File

@@ -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"));

View File

@@ -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,

View File

@@ -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"));

View File

@@ -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()),

View File

@@ -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,

View File

@@ -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;

View File

@@ -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);
}
*/

View File

@@ -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

View File

@@ -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"),

View 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;
}
}

View 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

View File

@@ -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

View File

@@ -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)

View File

@@ -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. */