nick changes and day changes can now be hidden too
[quassel.git] / src / uisupport / bufferview.h
index 66ee467..bb7e0cf 100644 (file)
 #ifndef BUFFERVIEW_H_
 #define BUFFERVIEW_H_
 
+#include <QAction>
+#include <QMenu>
 #include <QDockWidget>
 #include <QModelIndex>
 #include <QTreeView>
 #include <QPointer>
 
 #include "bufferviewconfig.h"
+#include "networkmodel.h"
 
 #include "types.h"
 
@@ -35,7 +38,7 @@
  *****************************************/
 class BufferView : public QTreeView {
   Q_OBJECT
-  
+
 public:
   BufferView(QWidget *parent = 0);
   void init();
@@ -46,30 +49,79 @@ public:
 
   void setConfig(BufferViewConfig *config);
   inline BufferViewConfig *config() { return _config; }
-                                                              
+
 public slots:
   void setRootIndexForNetworkId(const NetworkId &networkId);
-  
+  void removeSelectedBuffers(bool permanently = false);
+
 signals:
   void removeBuffer(const QModelIndex &);
+  void removeBufferPermanently(const QModelIndex &);
 
 protected:
   virtual void keyPressEvent(QKeyEvent *);
-  virtual void rowsInserted (const QModelIndex & parent, int start, int end);
+  virtual void rowsInserted(const QModelIndex & parent, int start, int end);
   virtual void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight);
   virtual void wheelEvent(QWheelEvent *);
   virtual QSize sizeHint() const;
   virtual void focusInEvent(QFocusEvent *event) { QAbstractScrollArea::focusInEvent(event); }
+  virtual void contextMenuEvent(QContextMenuEvent *event);
 
 private slots:
   void joinChannel(const QModelIndex &index);
   void toggleHeader(bool checked);
-  void showContextMenu(const QPoint &);
-  void layoutChanged();
+
+  void on_collapse(const QModelIndex &index);
+  void on_expand(const QModelIndex &index);
+  void on_configChanged();
+
+private:
+  enum ItemActiveState {
+    InactiveState = 0x01,
+    ActiveState = 0x02
+  };
+
+public:
+  Q_DECLARE_FLAGS(ItemActiveStates, ItemActiveState)
+  QAction showChannelList;
 
 private:
   QPointer<BufferViewConfig> _config;
+
+  QAction _connectNetAction;
+  QAction _disconnectNetAction;
+  QAction _joinChannelAction;
+
+  QAction _joinBufferAction;
+  QAction _partBufferAction;
+  QAction _hideBufferTemporarilyAction;
+  QAction _hideBufferPermanentlyAction;
+  QAction _removeBufferAction;
+  QAction _ignoreListAction;
+
+  QAction _hideJoinAction;
+  QAction _hidePartAction;
+  QAction _hideQuitAction;
+  QAction _hideNickAction;
+  QAction _hideModeAction;
+  QAction _hideDayChangeAction;
+
+  QHash<NetworkId, bool> _expandedState;
+
+  void storeExpandedState(NetworkId networkId, bool expanded);
+
+  bool checkRequirements(const QModelIndex &index,
+                        ItemActiveStates requiredActiveState = QFlags<ItemActiveState>(ActiveState) | QFlags<ItemActiveState>(InactiveState));
+  void addItemToMenu(QAction &action, QMenu &menu, const QModelIndex &index,
+                    ItemActiveStates requiredActiveState = QFlags<ItemActiveState>(ActiveState) | QFlags<ItemActiveState>(InactiveState));
+  void addItemToMenu(QAction &action, QMenu &menu, bool condition = true);
+  void addItemToMenu(QMenu &subMenu, QMenu &menu, const QModelIndex &index,
+                    ItemActiveStates requiredActiveState = QFlags<ItemActiveState>(ActiveState) | QFlags<ItemActiveState>(InactiveState));
+  void addSeparatorToMenu(QMenu &menu, const QModelIndex &index,
+                         ItemActiveStates requiredActiveState = QFlags<ItemActiveState>(ActiveState) | QFlags<ItemActiveState>(InactiveState));
+  QMenu *createHideEventsSubMenu(QMenu &menu, BufferId bufferId);
 };
+Q_DECLARE_OPERATORS_FOR_FLAGS(BufferView::ItemActiveStates)
 
 
 // ==============================