vcsbasesubmiteditor.h 7.13 KB
Newer Older
1
/**************************************************************************
con's avatar
con committed
2
3
4
**
** This file is part of Qt Creator
**
5
** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
con's avatar
con committed
6
7
8
**
** Contact:  Qt Software Information (qt-info@nokia.com)
**
9
** Commercial Usage
10
**
11
12
13
14
** Licensees holding valid Qt Commercial licenses may use this file in
** accordance with the Qt Commercial License Agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and Nokia.
15
**
16
** GNU Lesser General Public License Usage
17
**
18
19
20
21
22
23
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 2.1 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPL included in the
** packaging of this file.  Please review the following information to
** ensure the GNU Lesser General Public License version 2.1 requirements
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
24
**
25
26
** If you are unsure which license is appropriate for your use, please
** contact the sales department at qt-sales@nokia.com.
con's avatar
con committed
27
**
28
**************************************************************************/
hjk's avatar
hjk committed
29
30
31

#ifndef VCSBASE_SUBMITEDITOR_H
#define VCSBASE_SUBMITEDITOR_H
con's avatar
con committed
32
33
34
35
36
37

#include "vcsbase_global.h"

#include <coreplugin/editormanager/ieditor.h>

#include <QtCore/QList>
38
#include <QtGui/QAbstractItemView>
con's avatar
con committed
39

40
41
QT_BEGIN_NAMESPACE
class QIcon;
42
class QAbstractItemModel;
43
class QAction;
44
45
QT_END_NAMESPACE

con's avatar
con committed
46
47
48
49
50
51
52
namespace Core {
    namespace Utils {
        class SubmitEditorWidget;
    }
}

namespace VCSBase {
53
54
55
namespace Internal {
    struct VCSBaseSettings;
}
con's avatar
con committed
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
struct VCSBaseSubmitEditorPrivate;

/* Utility struct to parametrize a VCSBaseSubmitEditor. */
struct VCSBASE_EXPORT VCSBaseSubmitEditorParameters {
    const char *mimeType;
    const char *kind;
    const char *context;
};

/* Base class for a submit editor based on the Core::Utils::SubmitEditorWidget
 * that presents the commit message in a text editor and an
 * checkable list of modified files in a list window. The user can delete
 * files from the list by pressing unchecking them or diff the selection
 * by doubleclicking.
 *
 * The action matching the the ids (unless 0) of the parameter struct will be
 * registered with the EditorWidget and submit/diff actions will be added to
 * a toolbar.
 *
 * For the given context, there must be only one instance of the editor
 * active.
 * To start a submit, set the submit template on the editor and the output
 * of the VCS status command listing the modified files as fileList and open
 * it.
 * The submit process is started by listening on the editor close
 * signal and then asking the IFile interface of the editor to save the file
 * within a IFileManager::blockFileChange() section
 * and to launch the submit process. In addition, the action registered
84
85
 * for submit sho src/libs/utils/submiteditorwidget.h
uld be connected to a slot triggering the close of the
con's avatar
con committed
86
87
88
89
90
 * current editor in the editor manager. */

class VCSBASE_EXPORT VCSBaseSubmitEditor : public Core::IEditor
{
    Q_OBJECT
91
    Q_PROPERTY(int fileNameColumn READ fileNameColumn WRITE setFileNameColumn DESIGNABLE false)
92
    Q_PROPERTY(QAbstractItemView::SelectionMode fileListSelectionMode READ fileListSelectionMode WRITE setFileListSelectionMode DESIGNABLE true)
93
94
    Q_PROPERTY(bool lineWrap READ lineWrap WRITE setLineWrap DESIGNABLE true);
    Q_PROPERTY(int lineWrapWidth READ lineWrapWidth WRITE setLineWrapWidth DESIGNABLE true);
con's avatar
con committed
95
96
97
98
99
100
101
102
public:
    typedef QList<int> Context;

protected:
    explicit VCSBaseSubmitEditor(const VCSBaseSubmitEditorParameters *parameters,
                                 Core::Utils::SubmitEditorWidget *editorWidget);

public:
103
104
105
106
107
108
    // Register the actions with the submit editor widget.
    void registerActions(QAction *editorUndoAction,  QAction *editorRedoAction,
                         QAction *submitAction = 0, QAction *diffAction = 0);
    void unregisterActions(QAction *editorUndoAction,  QAction *editorRedoAction,
                           QAction *submitAction = 0, QAction *diffAction = 0);

con's avatar
con committed
109
110
    virtual ~VCSBaseSubmitEditor();

111
    // A utility routine to be called when closing a submit editor.
112
    // Runs checks on the message and prompts according to configuration.
113
114
    // Force prompt should be true if it is invoked by closing an editor
    // as opposed to invoking the "Submit" button.
115
116
    enum PromptSubmitResult { SubmitConfirmed, SubmitCanceled, SubmitDiscarded };
    PromptSubmitResult promptSubmit(const QString &title, const QString &question,
117
118
                                    const QString &checkFailureQuestion,
                                    bool forcePrompt = false) const;
119

120
121
122
    int fileNameColumn() const;
    void setFileNameColumn(int c);

123
124
125
    QAbstractItemView::SelectionMode fileListSelectionMode() const;
    void setFileListSelectionMode(QAbstractItemView::SelectionMode sm);

126
127
128
129
130
131
    bool lineWrap() const;
    void setLineWrap(bool);

    int lineWrapWidth() const;
    void setLineWrapWidth(int);

con's avatar
con committed
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
    // Core::IEditor
    virtual bool createNew(const QString &contents);
    virtual bool open(const QString &fileName);
    virtual Core::IFile *file();
    virtual QString displayName() const;
    virtual void setDisplayName(const QString &title);
    virtual bool duplicateSupported() const;
    virtual Core::IEditor *duplicate(QWidget * parent);
    virtual const char *kind() const;

    virtual QToolBar *toolBar();
    virtual QList<int> context() const;
    virtual QWidget *widget();

    virtual QByteArray saveState() const;
    virtual bool restoreState(const QByteArray &state);

    QStringList checkedFiles() const;

151
152
    void setFileModel(QAbstractItemModel *m);
    QAbstractItemModel *fileModel() const;
con's avatar
con committed
153

154
155
156
157
    // Utilities returning some predefined icons for actions
    static QIcon diffIcon();
    static QIcon submitIcon();

158
159
160
161
    // Utility returning all project files in case submit lists need to
    // be restricted to them
    static QStringList currentProjectFiles(bool nativeSeparators, QString *name = 0);

162
163
164
165
    virtual bool temporaryEditor() const { return true; }

    // Helper to raise an already open submit editor to prevent opening twice.
    static bool raiseSubmitEditor();
dt's avatar
dt committed
166

con's avatar
con committed
167
168
169
170
171
172
173
signals:
    void diffSelectedFiles(const QStringList &files);

private slots:
    void slotDiffSelectedVCSFiles(const QStringList &rawList);
    bool save(const QString &fileName);
    void slotDescriptionChanged();
174
175
176
    void slotCheckSubmitMessage();
    void slotInsertNickName();
    void slotSetFieldNickName(int);
177
    void slotUpdateEditorSettings(const VCSBase::Internal::VCSBaseSettings &);
con's avatar
con committed
178
179
180
181
182
183
184
185
186

protected:
    /* These hooks allow for modifying the contents that goes to
     * the file. The default implementation uses the text
     * of the description editor. */
    virtual QString fileContents() const;
    virtual bool setFileContents(const QString &contents);

private:
187
188
    void createUserFields(const QString &fieldConfigFile);
    bool checkSubmitMessage(QString *errorMessage) const;
189
    bool runSubmitMessageCheckScript(const QString &script, QString *errorMessage) const;
190
191
    QString promptForNickName();

con's avatar
con committed
192
193
194
    VCSBaseSubmitEditorPrivate *m_d;
};

hjk's avatar
hjk committed
195
} // namespace VCSBase
con's avatar
con committed
196

hjk's avatar
hjk committed
197
#endif // VCSBASE_SUBMITEDITOR_H