Files
konsole/src/EditProfileDialog.h
2013-05-20 08:14:55 -04:00

287 lines
8.7 KiB
C++

/*
Copyright 2007-2008 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 EDITPROFILEDIALOG_H
#define EDITPROFILEDIALOG_H
// Qt
#include <QAbstractItemDelegate>
#include <QtCore/QHash>
#include <QtCore/QPointer>
// KDE
#include <KDialog>
// Konsole
#include "Profile.h"
#include "Enumeration.h"
class QAbstractButton;
class QItemSelectionModel;
class QTextCodec;
class QTimeLine;
namespace Ui
{
class EditProfileDialog;
}
namespace Konsole
{
/**
* A dialog which allows the user to edit a profile.
* After the dialog is created, it can be initialized 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 persistent argument set to false. These changes are then
* un-done when the dialog is closed.
*/
class KONSOLEPRIVATE_EXPORT EditProfileDialog : public KDialog
{
Q_OBJECT
public:
/** Constructs a new dialog with the specified parent. */
explicit EditProfileDialog(QWidget* parent = 0);
virtual ~EditProfileDialog();
/**
* Initializes the dialog with the settings for the specified session
* type.
*
* When the dialog closes, the profile will be updated in the SessionManager
* with the altered settings.
*
* @param profile The profile to be edited
*/
void setProfile(Profile::Ptr profile);
/**
* Selects the text in the profile name edit area.
* When the dialog is being used to create a new profile,
* this can be used to draw the user's attention to the profile name
* and make it easy for them to change it.
*/
void selectProfileName();
const Profile::Ptr lookupProfile() const;
public slots:
// reimplemented
virtual void accept();
// reimplemented
virtual void reject();
protected:
virtual bool eventFilter(QObject* watched , QEvent* event);
private slots:
// sets up the specified tab page if necessary
void preparePage(int);
// saves changes to profile
void save();
// general page
void selectInitialDir();
void selectIcon();
void profileNameChanged(const QString& text);
void initialDirChanged(const QString& text);
void startInSameDir(bool);
void commandChanged(const QString& text);
void tabTitleFormatChanged(const QString& text);
void remoteTabTitleFormatChanged(const QString& text);
void showTerminalSizeHint(bool);
void saveGeometryOnExit(bool);
void showEnvironmentEditor();
void silenceSecondsChanged(int);
// appearance page
void setFontSize(double pointSize);
void setFontInputValue(const QFont&);
void setAntialiasText(bool enable);
void setBoldIntense(bool enable);
void showFontDialog();
void newColorScheme();
void editColorScheme();
void removeColorScheme();
void colorSchemeSelected();
void previewColorScheme(const QModelIndex& index);
void fontSelected(const QFont&);
void toggleMouseWheelZoom(bool enable);
void colorSchemeAnimationUpdate();
// scrolling page
void historyModeChanged(Enum::HistoryModeEnum mode);
void historySizeChanged(int);
void hideScrollBar();
void showScrollBarLeft();
void showScrollBarRight();
void scrollFullPage();
void scrollHalfPage();
// keyboard page
void editKeyBinding();
void newKeyBinding();
void keyBindingSelected();
void removeKeyBinding();
// mouse page
void toggleUnderlineLinks(bool);
void toggleOpenLinksByDirectClick(bool);
void toggleCtrlRequiredForDrag(bool);
void toggleCopyTextToClipboard(bool);
void toggleTrimTrailingSpacesInSelectedText(bool);
void pasteFromX11Selection();
void pasteFromClipboard();
void TripleClickModeChanged(int);
void wordCharactersChanged(const QString&);
// advanced page
void toggleBlinkingText(bool);
void toggleFlowControl(bool);
void togglebidiRendering(bool);
void lineSpacingChanged(int);
void toggleBlinkingCursor(bool);
void setCursorShape(int);
void autoCursorColor();
void customCursorColor();
void customCursorColorChanged(const QColor&);
void setDefaultCodec(QTextCodec*);
// apply the first previewed changes stored up by delayedPreview()
void delayedPreviewActivate();
private:
// initialize various pages of the dialog
void setupGeneralPage(const Profile::Ptr profile);
void setupTabsPage(const Profile::Ptr profile);
void setupAppearancePage(const Profile::Ptr profile);
void setupKeyboardPage(const Profile::Ptr profile);
void setupScrollingPage(const Profile::Ptr profile);
void setupAdvancedPage(const Profile::Ptr profile);
void setupMousePage(const Profile::Ptr info);
void updateColorSchemeList(bool selectCurrentScheme = false);
void updateColorSchemeButtons();
void updateKeyBindingsList(bool selectCurrentTranslator = false);
void updateKeyBindingsButtons();
void showColorSchemeEditor(bool isNewScheme);
void showKeyBindingEditor(bool newTranslator);
void preview(int property , const QVariant& value);
void delayedPreview(int property , const QVariant& value);
void unpreview(int property);
void unpreviewAll();
void enableIfNonEmptySelection(QWidget* widget, QItemSelectionModel* selectionModel);
void updateCaption(const Profile::Ptr profile);
void updateTransparencyWarning();
// Update _tempProfile in a way of respecting the apply button.
// When used with some previewed property, this method should
// always come after the preview operation.
void updateTempProfileProperty(Profile::Property, const QVariant& value);
// helper method for creating an empty & hidden profile and assigning
// it to _tempProfile.
void createTempProfile();
// Enable or disable apply button, used only within
// updateTempProfileProperty().
void updateButtonApply();
static QString groupProfileNames(const ProfileGroup::Ptr group, int maxLength = -1);
struct RadioOption {
QAbstractButton* button;
int value;
const char* slot;
};
void setupRadio(RadioOption* possibilities, int actual);
struct BooleanOption {
QAbstractButton* button;
Profile::Property property;
const char* slot;
};
void setupCheckBoxes(BooleanOption* options , const Profile::Ptr profile);
Ui::EditProfileDialog* _ui;
Profile::Ptr _tempProfile;
Profile::Ptr _profile;
// 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;
QHash<int, QVariant> _previewedProperties;
QTimeLine* _colorSchemeAnimationTimeLine;
QHash<int, QVariant> _delayedPreviewProperties;
QTimer* _delayedPreviewTimer;
};
/**
* A delegate which can display and edit color schemes in a view.
*/
class ColorSchemeViewDelegate : public QAbstractItemDelegate
{
Q_OBJECT
public:
explicit 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;
/**
* 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;
};
}
#endif // EDITPROFILEDIALOG_H