Files
GoldenCheetah/src/Gui/GcSideBarItem.h
2026-01-22 17:49:55 -03:00

178 lines
4.3 KiB
C++

/*
* Copyright (c) 2013 Damien Grauser (Damien.Grauser@pev-geneve.ch)
*
* 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 _GC_GcSideBarItem_h
#define _GC_GcSideBarItem_h 1
#include <QtGui>
#include <QList>
#include <QSplitter>
#include <QToolBar>
#include <QAction>
#include <QHBoxLayout>
#include <QVBoxLayout>
class GcSubSplitter;
class GcSplitterControl;
class GcSplitterItem;
class GcLabel;
class GcSplitter : public QWidget
{
Q_OBJECT
public:
GcSplitter(Qt::Orientation orientation, QWidget *parent = 0);
void addWidget(QWidget *widget);
void insertWidget(int index, QWidget *widget);
void setOpaqueResize(bool opaque = true);
QList<int> sizes() const;
void setSizes(const QList<int> &list);
QByteArray saveState() const;
bool restoreState(const QByteArray &state);
void prepare(QString cyclist, QString name); // get ready for first show, you're now configured
// I'm gonna call you "name" -- which is used to
// save and restore state
signals:
void splitterMoved(int pos, int index);
public slots:
void subSplitterMoved(int pos, int index);
void saveSettings();
private:
GcSubSplitter *splitter;
GcSplitterControl *control;
QString cyclist, name;
};
class GcSubSplitter : public QSplitter
{
Q_OBJECT
public:
GcSubSplitter(Qt::Orientation orientation, GcSplitterControl *control, GcSplitter *parent, bool plainstyle=false);
// plainstyle splitters have no control (pass NULL), no metal styling and no toolbar on the handle
void addWidget(QWidget *widget);
void insertWidget(int index, QWidget *widget);
GcSplitterItem *removeItem(QString text);
protected:
QSplitterHandle *createHandle();
private:
QList<QString> titles;
QWidget * _insertedWidget;
GcSplitterControl *control;
GcSplitter *gcSplitter;
bool plainstyle;
};
class GcSplitterHandle : public QSplitterHandle
{
Q_OBJECT
friend class ::GcSplitterItem;
public:
GcSplitterHandle(QString title, Qt::Orientation orientation, QSplitter *parent = 0, bool metal = true);
GcSplitterHandle(QString title, Qt::Orientation orientation, QWidget *left, QWidget *mid, QWidget *right,
QSplitter *parent = 0, bool metal = true);
QString title() const { return _title; }
QSize sizeHint() const;
GcSubSplitter *splitter() const;
void addAction(QAction *action);
void addActions(QList<QAction*> actions);
QHBoxLayout* getTitleLayout() { return titleLayout; }
protected:
void paintEvent(QPaintEvent *);
GcSubSplitter *gcSplitter;
int index;
private:
void init(QString title, Qt::Orientation orientation, QWidget *left, QWidget *mid, QWidget *right,
QSplitter *parent, bool metal);
void paintBackground(QPaintEvent *);
QHBoxLayout *titleLayout;
GcLabel *titleLabel;
QString _title;
int fullHeight;
bool metal;
};
class GcSplitterControl : public QToolBar
{
Q_OBJECT
public:
GcSplitterControl(QWidget *parent);
void selectAction();
protected:
void paintEvent(QPaintEvent *);
private:
void paintBackground(QPaintEvent *);
};
class GcSplitterItem : public QWidget
{
Q_OBJECT
public:
GcSplitterItem(QString title, QIcon icon, QWidget *parent);
~GcSplitterItem();
QWidget *content;
GcSplitterHandle *splitterHandle;
bool state;
QString title;
QIcon icon;
QAction *controlAction;
public slots:
void addWidget(QWidget*);
void selectHandle();
private:
QVBoxLayout *layout;
};
extern QIcon iconFromPNG(QString filename, QSize size);
extern QIcon iconFromPNG(QString filename, bool emboss = true);
#endif