Files
konsole/src/ManageProfilesDialog.h
Jekyll Wu e25962af06 Disable the delete button when selected profile is undeletable.
This is to avoid the confusion users might have: "Why can't I delete
the 'Shell' profile when the UI implies I can ?". Users tend to think
konsole is broken in that situation.

Current implementation follows a stupid logic:
1). When multiple profiles are selecte, always enable the delete button.
2). When single profile is selected, disable it if user has no
permission to delete that profile.
2011-08-13 02:07:57 +08:00

168 lines
4.8 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 MANAGEPROFILESDIALOG_H
#define MANAGEPROFILESDIALOG_H
// Qt
#include <QtGui/QStyledItemDelegate>
#include <QtCore/QSet>
// KDE
#include <KDialog>
// Konsole
#include "Profile.h"
class QItemSelection;
class QShowEvent;
class QStandardItem;
class QStandardItemModel;
class QTableView;
namespace Ui
{
class ManageProfilesDialog;
}
namespace Konsole
{
/**
* A dialog which lists the available types of profiles and allows
* the user to add new profiles, and remove or edit existing
* profile types.
*/
class KONSOLEPRIVATE_EXPORT ManageProfilesDialog : public KDialog
{
Q_OBJECT
friend class FavoriteItemDelegate;
friend class ShortcutItemDelegate;
friend class ::QTableView;
public:
/** Constructs a new profile type with the specified parent. */
ManageProfilesDialog(QWidget* parent = 0);
virtual ~ManageProfilesDialog();
/**
* Specifies whether the shorcut editor should be show.
* The shortcut editor allows shortcuts to be associated with
* profiles. When a shortcut is changed, the dialog will call
* SessionManager::instance()->setShortcut() to update the shortcut
* associated with the profile.
*
* By default the editor is visible.
*/
void setShortcutEditorVisible(bool visible);
protected:
virtual void showEvent(QShowEvent* event);
private slots:
void deleteSelected();
void setSelectedAsDefault();
void newType();
void editSelected();
void moveUpSelected();
void moveDownSelected();
void itemDataChanged(QStandardItem* item);
// enables or disables Edit/Delete/Set as Default buttons when the
// selection changes
void tableSelectionChanged(const QItemSelection&);
void updateFavoriteStatus(Profile::Ptr profile, bool favorite);
void addItems(const Profile::Ptr);
void updateItems(const Profile::Ptr);
void removeItems(const Profile::Ptr);
void setMenuOrder(void);
private:
Profile::Ptr currentProfile() const;
QList<Profile::Ptr> selectedProfiles() const;
bool isProfileDeletable(Profile::Ptr profile) const;
// updates the font of the items to match
// their default / non-default profile status
void updateDefaultItem();
void updateItemsForProfile(const Profile::Ptr profile, QList<QStandardItem*>& items) const;
// updates the profile table to be in sync with the
// session manager
void populateTable();
int rowForProfile(const Profile::Ptr info) const;
Ui::ManageProfilesDialog* _ui;
QStandardItemModel* _sessionModel;
static const int ProfileNameColumn = 0;
static const int FavoriteStatusColumn = 1;
static const int ShortcutColumn = 2;
static const int ProfileKeyRole = Qt::UserRole + 1;
static const int ShortcutRole = Qt::UserRole + 1;
};
class StyledBackgroundPainter
{
public:
static void drawBackground(QPainter* painter, const QStyleOptionViewItem& option,
const QModelIndex& index);
};
class FavoriteItemDelegate : public QStyledItemDelegate
{
public:
FavoriteItemDelegate(QObject* parent = 0);
virtual bool editorEvent(QEvent* event,QAbstractItemModel* model,
const QStyleOptionViewItem& option,const QModelIndex& index);
virtual void paint(QPainter* painter, const QStyleOptionViewItem& option,
const QModelIndex& index) const;
};
class ShortcutItemDelegate : public QStyledItemDelegate
{
Q_OBJECT
public:
ShortcutItemDelegate(QObject* parent = 0);
virtual void setModelData(QWidget* editor, QAbstractItemModel* model, const QModelIndex& index) const;
virtual QWidget* createEditor(QWidget* parent, const QStyleOptionViewItem& option,
const QModelIndex& index) const;
virtual void paint(QPainter* painter, const QStyleOptionViewItem& option,
const QModelIndex& index) const;
private slots:
void editorModified(const QKeySequence& keys);
private:
mutable QSet<QWidget*> _modifiedEditors;
mutable QSet<QModelIndex> _itemsBeingEdited;
};
}
#endif // MANAGEPROFILESDIALOG_H