X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fuisupport%2Fbufferview.cpp;h=ecaf7e948f2f971429b8c4f1718b882794453dbe;hp=0d7be090501fab4dcecdbd4631560f75f8be1ce6;hb=119c23602ed1aa956d756ad6f56adb05cad1f815;hpb=ef48d209f03f02debf369ff689002f1b32165100 diff --git a/src/uisupport/bufferview.cpp b/src/uisupport/bufferview.cpp index 0d7be090..ecaf7e94 100644 --- a/src/uisupport/bufferview.cpp +++ b/src/uisupport/bufferview.cpp @@ -35,12 +35,11 @@ #include "buffersettings.h" #include "buffersyncer.h" #include "client.h" -#include "iconloader.h" +#include "contextmenuactionprovider.h" +#include "graphicalui.h" #include "network.h" #include "networkmodel.h" -#include "networkmodelactionprovider.h" -#include "quasselui.h" -#include "uisettings.h" +#include "contextmenuactionprovider.h" /***************************************** * The TreeView showing the Buffers @@ -68,8 +67,13 @@ void BufferView::init() { setIndentation(10); expandAll(); + header()->hide(); // nobody seems to use this anyway + setAnimated(true); + // FIXME This is to workaround bug #663 + setUniformRowHeights(true); + #ifndef QT_NO_DRAGANDDROP setDragEnabled(true); setAcceptDrops(true); @@ -81,9 +85,11 @@ void BufferView::init() { // activated() fails on X11 and Qtopia at least #if defined Q_WS_QWS || defined Q_WS_X11 + disconnect(this, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(joinChannel(QModelIndex))); connect(this, SIGNAL(doubleClicked(QModelIndex)), SLOT(joinChannel(QModelIndex))); #else // afaik this is better on Mac and Windows + disconnect(this, SIGNAL(activated(QModelIndex)), this, SLOT(joinChannel(QModelIndex))); connect(this, SIGNAL(activated(QModelIndex)), SLOT(joinChannel(QModelIndex))); #endif } @@ -115,6 +121,7 @@ void BufferView::setModel(QAbstractItemModel *model) { header()->addAction(showSection); } + connect(model, SIGNAL(layoutChanged()), this, SLOT(on_layoutChanged())); } void BufferView::setFilteredModel(QAbstractItemModel *model_, BufferViewConfig *config) { @@ -261,7 +268,9 @@ void BufferView::removeSelectedBuffers(bool permanently) { continue; removedRows << bufferId; + } + foreach(BufferId bufferId, removedRows) { if(permanently) config()->requestRemoveBufferPermanently(bufferId); else @@ -269,17 +278,21 @@ void BufferView::removeSelectedBuffers(bool permanently) { } } -void BufferView::rowsInserted(const QModelIndex & parent, int start, int end) { +void BufferView::rowsInserted(const QModelIndex &parent, int start, int end) { QTreeView::rowsInserted(parent, start, end); // ensure that newly inserted network nodes are expanded per default if(parent.data(NetworkModel::ItemTypeRole) != NetworkModel::NetworkItemType) return; - if(model()->rowCount(parent) == 1 && parent.data(NetworkModel::ItemActiveRole) == true) { - // without updating the parent the expand will have no effect... Qt Bug? - update(parent); - expand(parent); + setExpandedState(parent); +} + +void BufferView::on_layoutChanged() { + int numNets = model()->rowCount(QModelIndex()); + for(int row = 0; row < numNets; row++) { + QModelIndex networkIdx = model()->index(row, 0, QModelIndex()); + setExpandedState(networkIdx); } } @@ -298,7 +311,6 @@ void BufferView::on_configChanged() { if(!networkId.isValid()) continue; - update(networkIdx); setExpandedState(networkIdx); } @@ -306,8 +318,6 @@ void BufferView::on_configChanged() { // update selection to current one Client::bufferModel()->synchronizeView(this); } - - return; } void BufferView::storeExpandedState(const QModelIndex &networkIdx) { @@ -339,9 +349,11 @@ void BufferView::setExpandedState(const QModelIndex &networkIdx) { expandNetwork = (bool)(oldState & WasExpanded); } - storeExpandedState(networkIdx); // this call is needed to keep track of the isActive state - if(expandNetwork != isExpanded(networkIdx)) + if(expandNetwork != isExpanded(networkIdx)) { + update(networkIdx); setExpanded(networkIdx, expandNetwork); + } + storeExpandedState(networkIdx); // this call is needed to keep track of the isActive state } void BufferView::dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight) { @@ -386,7 +398,7 @@ void BufferView::addActionsToMenu(QMenu *contextMenu, const QModelIndex &index) indexList.removeAll(index); indexList.prepend(index); - Client::mainUi()->actionProvider()->addActions(contextMenu, indexList, this, "menuActionTriggered", (bool)config()); + GraphicalUi::contextMenuActionProvider()->addActions(contextMenu, indexList, this, "menuActionTriggered", (bool)config()); } void BufferView::addFilterActions(QMenu *contextMenu, const QModelIndex &index) { @@ -403,12 +415,12 @@ void BufferView::addFilterActions(QMenu *contextMenu, const QModelIndex &index) } void BufferView::menuActionTriggered(QAction *result) { - NetworkModelActionProvider::ActionType type = (NetworkModelActionProvider::ActionType)result->data().toInt(); + ContextMenuActionProvider::ActionType type = (ContextMenuActionProvider::ActionType)result->data().toInt(); switch(type) { - case NetworkModelActionProvider::HideBufferTemporarily: + case ContextMenuActionProvider::HideBufferTemporarily: removeSelectedBuffers(); break; - case NetworkModelActionProvider::HideBufferPermanently: + case ContextMenuActionProvider::HideBufferPermanently: removeSelectedBuffers(true); break; default: @@ -417,7 +429,7 @@ void BufferView::menuActionTriggered(QAction *result) { } void BufferView::wheelEvent(QWheelEvent* event) { - if(UiSettings().value("MouseWheelChangesBuffers", QVariant(true)).toBool() == (bool)(event->modifiers() & Qt::AltModifier)) + if(ItemViewSettings().mouseWheelChangesBuffer() == (bool)(event->modifiers() & Qt::AltModifier)) return QTreeView::wheelEvent(event); int rowDelta = ( event->delta() > 0 ) ? -1 : 1; @@ -464,15 +476,21 @@ QSize BufferView::sizeHint() const { // **************************************** // BufferViewDelgate // **************************************** +class ColorsChangedEvent : public QEvent { +public: + ColorsChangedEvent() : QEvent(QEvent::User) {}; +}; + BufferViewDelegate::BufferViewDelegate(QObject *parent) : QStyledItemDelegate(parent) { - UiSettings s("QtUiStyle/Colors"); - _FgColorInactiveActivity = s.value("inactiveActivityFG", QVariant(QColor(Qt::gray))).value(); - _FgColorNoActivity = s.value("noActivityFG", QVariant(QColor(Qt::black))).value(); - _FgColorHighlightActivity = s.value("highlightActivityFG", QVariant(QColor(Qt::magenta))).value(); - _FgColorNewMessageActivity = s.value("newMessageActivityFG", QVariant(QColor(Qt::green))).value(); - _FgColorOtherActivity = s.value("otherActivityFG", QVariant(QColor(Qt::darkGreen))).value(); +} + +void BufferViewDelegate::customEvent(QEvent *event) { + if(event->type() != QEvent::User) + return; + + event->accept(); } bool BufferViewDelegate::editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index) { @@ -506,26 +524,6 @@ bool BufferViewDelegate::editorEvent(QEvent *event, QAbstractItemModel *model, c return true; } -void BufferViewDelegate::initStyleOption(QStyleOptionViewItem *option, const QModelIndex &index) const { - QStyledItemDelegate::initStyleOption(option, index); - - BufferInfo::ActivityLevel activity = (BufferInfo::ActivityLevel)index.data(NetworkModel::BufferActivityRole).toInt(); - - QColor fgColor = _FgColorNoActivity; - if(activity & BufferInfo::Highlight) { - fgColor = _FgColorHighlightActivity; - } else if(activity & BufferInfo::NewMessage) { - fgColor = _FgColorNewMessageActivity; - } else if(activity & BufferInfo::OtherActivity) { - fgColor = _FgColorOtherActivity; - } else if(!index.data(NetworkModel::ItemActiveRole).toBool() || index.data(NetworkModel::UserAwayRole).toBool()) { - fgColor = _FgColorInactiveActivity; - } - - option->palette.setColor(QPalette::Text, fgColor); -} - - // ============================== // BufferView Dock // ============================== @@ -542,3 +540,22 @@ void BufferViewDock::bufferViewRenamed(const QString &newName) { setWindowTitle(newName); toggleViewAction()->setText(newName); } + +int BufferViewDock::bufferViewId() const { + BufferView *view = bufferView(); + if(!view) + return 0; + + if(view->config()) + return view->config()->bufferViewId(); + else + return 0; +} + +BufferViewConfig *BufferViewDock::config() const { + BufferView *view = bufferView(); + if(!view) + return 0; + else + return view->config(); +}