Members of the KDE Community are recommended to subscribe to the kde-community mailing list at https://mail.kde.org/mailman/listinfo/kde-community to allow them to participate in important discussions and receive other important announcements

EditProfileDialog.h 7.58 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
/*
    Copyright (C) 2007 by Robert Knight <robertknight@gmail.com>

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301  USA.
*/

#ifndef EDITSESSIONDIALOG_H
#define EDITSESSIONDIALOG_H

// Qt
Dirk Mueller's avatar
Dirk Mueller committed
24 25 26 27
#include <QtGui/QAbstractItemDelegate>
#include <QtCore/QPair>
#include <QtCore/QHash>
#include <QtCore/QSet>
28
#include <QtCore/QPointer>
29 30 31 32

// KDE
#include <KDialog>

33
class QAbstractButton;
34
class QTextCodec;
35
class QTimeLine;
36

37 38
namespace Ui
{
39
    class EditProfileDialog;
Stephan Binner's avatar
Stephan Binner committed
40
}
41 42 43 44

namespace Konsole
{

45
class Profile;
46 47

/**
48
 * A dialog which allows the user to edit a profile.
49 50 51 52 53 54 55 56 57 58
 * After the dialog is created, it can be initialised with the settings
 * for a profile using setProfile().  When the user makes changes to the 
 * dialog and accepts the changes, the dialog will update the
 * profile in the SessionManager by calling the SessionManager's 
 * changeProfile() method.
 *
 * Some changes made in the dialog are preview-only changes which cause
 * the SessionManager's changeProfile() method to be called with
 * the persistant argument set to false.  These changes are then
 * un-done when the dialog is closed.
59 60 61
 *
 * TODO: More documentation
 */
62
class EditProfileDialog : public KDialog
63 64 65 66 67
{
Q_OBJECT

public:
    /** Constructs a new dialog with the specified parent. */
68 69
    EditProfileDialog(QWidget* parent = 0);
    virtual ~EditProfileDialog();
70 71 72 73 74

    /**
     * Initialises the dialog with the settings for the specified session
     * type.
     *
75 76 77
     * When the dialog closes, the profile will be updated in the SessionManager
     * with the altered settings.
     *
78 79
     * @param key The key for the session type provided by the SessionManager instance
     */
80
    void setProfile(const QString& key);
81

82
public slots:
83
    // reimplemented
84
    virtual void accept();
85
    // reimplemented 
86
    virtual void reject();
87

88 89 90
protected:
    virtual bool eventFilter(QObject* watched , QEvent* event);

91
private slots:
92 93 94
    // sets up the specified tab page if necessary
    void ensurePageLoaded(int);

95 96 97
    // saves changes to profile
    void save();

98 99
    // general page
    void selectInitialDir();
100 101 102 103 104 105 106
    void selectIcon();

    void profileNameChanged(const QString& text);
    void initialDirChanged(const QString& text);
    void commandChanged(const QString& text);
    void tabTitleFormatChanged(const QString& text);
    void remoteTabTitleFormatChanged(const QString& text);
107

108 109
    void insertTabTitleText(const QString& text);
    void insertRemoteTabTitleText(const QString& text);
110

111
    void showMenuBar(bool);
112
    void showEnvironmentEditor();
113 114
    void tabBarVisibilityChanged(int);
    void tabBarPositionChanged(int);
115

116
    // appearance page
117 118
    void setFontSize(int pointSize);
    void showFontDialog();
119 120 121
    void newColorScheme();
    void editColorScheme();
    void removeColorScheme();
122
    void colorSchemeSelected();
123
    void previewColorScheme(const QModelIndex& index);
124
    void fontSelected(const QFont&);
125
    //void previewFont(const QFont&);
126

127 128
    void colorSchemeAnimationUpdate();

129 130 131 132 133 134 135 136 137 138 139
    // scrolling page
    void noScrollBack();
    void fixedScrollBack();
    void unlimitedScrollBack();
   
    void scrollBackLinesChanged(int);

    void hideScrollBar();
    void showScrollBarLeft();
    void showScrollBarRight();

140 141 142 143 144 145
    // keyboard page
    void editKeyBinding();
    void newKeyBinding();
    void keyBindingSelected();
    void removeKeyBinding();

146 147 148 149
    // advanced page
    void toggleBlinkingText(bool);
    void toggleFlowControl(bool);
    void toggleResizeWindow(bool);
150
    void toggleBlinkingCursor(bool);
151

152 153 154 155 156
    void setCursorShape(int);
    void autoCursorColor();
    void customCursorColor();
    void customCursorColorChanged(const QColor&);
    void wordCharactersChanged(const QString&);
157
    void setDefaultCodec(QTextCodec*);
158

159 160
private:
    // initialize various pages of the dialog
161
    void setupGeneralPage(const Profile* info);
162
    void setupTabsPage(const Profile* info);
163
    void setupAppearancePage(const Profile* info);
164 165 166
    void setupKeyboardPage(const Profile* info);
    void setupScrollingPage(const Profile* info);
    void setupAdvancedPage(const Profile* info);
167

168
    void updateColorSchemeList(bool selectCurrentScheme = false);
169
    void updateKeyBindingsList();
170
    void updateFontPreviewLabel(const QFont& font);
171

172
    void showColorSchemeEditor(bool newScheme);
173 174 175
    void showKeyBindingEditor(bool newTranslator);

    void changeCheckedItem( QAbstractItemModel* mode,  const QModelIndex& to );
176

Robert Knight's avatar
Robert Knight committed
177
    void preview(int property , const QVariant& value);
178
    void unpreview(int property);
179
    void unpreviewAll();
180

Robert Knight's avatar
Robert Knight committed
181 182 183 184 185 186 187 188 189 190 191 192 193 194
    struct RadioOption
    {
       QAbstractButton* button;
       int property;
       char* slot; 
    };
    void setupRadio(RadioOption* possible,int actual);
    struct ComboOption
    {
       QAbstractButton* button;
       int property;
       char* slot;
    };
    void setupCombo(ComboOption* options , const Profile* profile);
195

196 197
    const Profile* lookupProfile() const;

198
    Ui::EditProfileDialog* _ui;
199
    Profile* _tempProfile;
200
    QString _profileKey;
201

202 203 204 205 206
    // keeps track of pages which need to be updated to match the current
    // profile.  all elements in this vector are set to true when the 
    // profile is changed and individual elements are set to false 
    // after an update by a call to ensurePageLoaded()
    QVector<bool> _pageNeedsUpdate;
207
    QHash<int,QVariant> _previewedProperties;
208 209 210 211 212 213 214
};

/**
 * A delegate which can display and edit color schemes in a view.
 */
class ColorSchemeViewDelegate : public QAbstractItemDelegate
{
215 216
Q_OBJECT

217 218 219 220 221 222 223 224 225
public:
    ColorSchemeViewDelegate(QObject* parent = 0);

    // reimplemented
    virtual void paint(QPainter* painter, const QStyleOptionViewItem& option,
                       const QModelIndex& index) const;
    virtual QSize sizeHint( const QStyleOptionViewItem& option,
                       const QModelIndex& index) const;

226 227 228 229 230 231 232 233 234 235 236 237 238
    /** 
     * Sets the timeline used to control the entry animation
     * for this delegate.
     *
     * During a call to paint(), the value of the timeLine is used to
     * determine how to render the item ( with 0 being the beginning 
     * of the animation and 1.0 being the end )
     */
    void setEntryTimeLine( QTimeLine* timeLine );

private:
    QPointer<QTimeLine> _entryTimeLine;

239 240
   // virtual QWidget* createEditor(QWidget* parent, const QStyleOptionViewItem& option, 
   //                               const QModelIndex& index) const;
241 242
   // virtual bool editorEvent(QEvent* event,QAbstractItemModel* model,
   //                          const QStyleOptionViewItem& option, const QModelIndex& index);
243

244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261
};

/**
 * A delegate which can display and edit key bindings in a view.
 */
class KeyBindingViewDelegate : public QAbstractItemDelegate
{
public:
    KeyBindingViewDelegate(QObject* parent = 0);

    // reimplemented
    virtual void paint(QPainter* painter, const QStyleOptionViewItem& option,
                       const QModelIndex& index) const;
    virtual QSize sizeHint( const QStyleOptionViewItem& option,
                       const QModelIndex& index) const;

};

Stephan Binner's avatar
Stephan Binner committed
262
}
263 264
#endif // EDITSESSIONDIALOG_H