You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
lxqt-panel-packaging/plugin-taskbar/lxqttaskbar.h

147 lines
4.6 KiB

/* BEGIN_COMMON_COPYRIGHT_HEADER
* (c)LGPL2+
*
* LXDE-Qt - a lightweight, Qt based, desktop toolset
* http://razor-qt.org
* http://lxqt.org
*
* Copyright: 2011 Razor team
* 2014 LXQt team
* Authors:
* Alexander Sokoloff <sokoloff.a@gmail.com>
* Maciej Płaza <plaza.maciej@gmail.com>
* Kuzma Shapran <kuzma.shapran@gmail.com>
*
* This program or library is free software; you can redistribute it
* and/or modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library 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
* Lesser General Public License for more details.
* You should have received a copy of the GNU Lesser General
* Public License along with this library; if not, write to the
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA
*
* END_COMMON_COPYRIGHT_HEADER */
#ifndef LXQTTASKBAR_H
#define LXQTTASKBAR_H
#include "../panel/ilxqtpanel.h"
#include "../panel/ilxqtpanelplugin.h"
#include "lxqttaskbarconfiguration.h"
#include "lxqttaskgroup.h"
#include "lxqttaskbutton.h"
#include <QFrame>
#include <QBoxLayout>
#include <QMap>
#include "../panel/ilxqtpanel.h"
#include <KWindowSystem/KWindowSystem>
#include <KWindowSystem/KWindowInfo>
#include <KWindowSystem/NETWM>
class LXQtTaskButton;
class ElidedButtonStyle;
namespace LXQt {
class GridLayout;
}
class LXQtTaskBar : public QFrame
{
Q_OBJECT
public:
explicit LXQtTaskBar(ILXQtPanelPlugin *plugin, QWidget* parent = 0);
virtual ~LXQtTaskBar();
void realign();
Qt::ToolButtonStyle buttonStyle() const { return mButtonStyle; }
int buttonWidth() const { return mButtonWidth; }
bool closeOnMiddleClick() const { return mCloseOnMiddleClick; }
bool raiseOnCurrentDesktop() const { return mRaiseOnCurrentDesktop; }
bool isShowOnlyOneDesktopTasks() const { return mShowOnlyOneDesktopTasks; }
int showDesktopNum() const { return mShowDesktopNum; }
bool isShowOnlyCurrentScreenTasks() const { return mShowOnlyCurrentScreenTasks; }
bool isShowOnlyMinimizedTasks() const { return mShowOnlyMinimizedTasks; }
bool isAutoRotate() const { return mAutoRotate; }
bool isGroupingEnabled() const { return mGroupingEnabled; }
bool isShowGroupOnHover() const { return mShowGroupOnHover; }
bool isIconByClass() const { return mIconByClass; }
inline ILXQtPanel * panel() const { return mPlugin->panel(); }
inline ILXQtPanelPlugin * plugin() const { return mPlugin; }
public slots:
void settingsChanged();
signals:
void buttonRotationRefreshed(bool autoRotate, ILXQtPanel::Position position);
void buttonStyleRefreshed(Qt::ToolButtonStyle buttonStyle);
void refreshIconGeometry();
void showOnlySettingChanged();
void iconByClassChanged();
void popupShown(LXQtTaskGroup* sender);
protected:
virtual void dragEnterEvent(QDragEnterEvent * event);
virtual void dragMoveEvent(QDragMoveEvent * event);
private slots:
void refreshTaskList();
void refreshButtonRotation();
void refreshPlaceholderVisibility();
void groupBecomeEmptySlot();
void onWindowChanged(WId window, NET::Properties prop, NET::Properties2 prop2);
void onWindowAdded(WId window);
void onWindowRemoved(WId window);
private:
typedef QMap<WId, LXQtTaskGroup*> windowMap_t;
private:
void addWindow(WId window);
windowMap_t::iterator removeWindow(windowMap_t::iterator pos);
void buttonMove(LXQtTaskGroup * dst, LXQtTaskGroup * src, QPoint const & pos);
private:
QMap<WId, LXQtTaskGroup*> mKnownWindows; //!< Ids of known windows (mapping to buttons/groups)
LXQt::GridLayout *mLayout;
// Settings
Qt::ToolButtonStyle mButtonStyle;
int mButtonWidth;
int mButtonHeight;
bool mCloseOnMiddleClick;
bool mRaiseOnCurrentDesktop;
bool mShowOnlyOneDesktopTasks;
int mShowDesktopNum;
bool mShowOnlyCurrentScreenTasks;
bool mShowOnlyMinimizedTasks;
bool mAutoRotate;
bool mGroupingEnabled;
bool mShowGroupOnHover;
bool mIconByClass;
bool mCycleOnWheelScroll; //!< flag for processing the wheelEvent
bool acceptWindow(WId window) const;
void setButtonStyle(Qt::ToolButtonStyle buttonStyle);
void wheelEvent(QWheelEvent* event);
void changeEvent(QEvent* event);
void resizeEvent(QResizeEvent *event);
ILXQtPanelPlugin *mPlugin;
QWidget *mPlaceHolder;
LeftAlignedTextStyle *mStyle;
};
#endif // LXQTTASKBAR_H