Files
create/src/Gui/Widgets.h

379 lines
9.9 KiB
C++

/***************************************************************************
* Copyright (c) 2004 Werner Mayer <wmayer[at]users.sourceforge.net> *
* *
* This file is part of the FreeCAD CAx development system. *
* *
* This library is free software; you can redistribute it and/or *
* modify it under the terms of the GNU Library General Public *
* License as published by the Free Software Foundation; either *
* version 2 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 Library General Public License for more details. *
* *
* You should have received a copy of the GNU Library General Public *
* License along with this library; see the file COPYING.LIB. If not, *
* write to the Free Software Foundation, Inc., 59 Temple Place, *
* Suite 330, Boston, MA 02111-1307, USA *
* *
***************************************************************************/
#ifndef GUI_WIDGETS_H
#define GUI_WIDGETS_H
#include <Gui/ui_DlgTreeWidget.h>
#include <QListWidget>
#include <QLabel>
#include <QLineEdit>
#include <QPointer>
#include <QBasicTimer>
#include <QTime>
namespace Gui {
class PrefCheckBox;
class CommandViewItemPrivate;
/**
* This class allows to drag one or more items which correspond to a Command object.
* The dragged items can be dropped onto the @ref Gui::PythonConsole.
* @see CommandViewItem, Command
* @author Werner Mayer
*/
class CommandIconView : public QListWidget
{
Q_OBJECT
public:
CommandIconView (QWidget * parent = 0);
virtual ~CommandIconView ();
protected:
void startDrag ( Qt::DropActions supportedActions );
protected Q_SLOTS:
void onSelectionChanged( QListWidgetItem * item, QListWidgetItem * );
Q_SIGNALS:
/** Emits this signal if selection has changed. */
void emitSelectionChanged( const QString& );
};
// ------------------------------------------------------------------------------
class GuiExport ActionSelector : public QWidget
{
Q_OBJECT
public:
ActionSelector(QWidget* parent=0);
~ActionSelector();
QTreeWidget* availableTreeWidget() const
{ return availableWidget; }
QTreeWidget* selectedTreeWidget() const
{ return selectedWidget; }
void setSelectedLabel(const QString&);
QString selectedLabel() const;
void setAvailableLabel(const QString&);
QString availableLabel() const;
private:
void keyPressEvent(QKeyEvent *);
void changeEvent(QEvent*);
void retranslateUi();
void setButtonsEnabled();
private Q_SLOTS:
void on_addButton_clicked();
void on_removeButton_clicked();
void on_upButton_clicked();
void on_downButton_clicked();
void onCurrentItemChanged(QTreeWidgetItem*, QTreeWidgetItem*);
void onItemDoubleClicked(QTreeWidgetItem * item, int column);
private:
QGridLayout *gridLayout;
QVBoxLayout *vboxLayout;
QVBoxLayout *vboxLayout1;
QPushButton *addButton;
QPushButton *removeButton;
QPushButton *upButton;
QPushButton *downButton;
QLabel *labelAvailable;
QLabel *labelSelected;
QTreeWidget *availableWidget;
QTreeWidget *selectedWidget;
QSpacerItem *spacerItem;
QSpacerItem *spacerItem1;
};
// ------------------------------------------------------------------------------
/**
* The AccelLineEdit class provides a lineedit to specfify shortcuts.
* \author Werner Mayer
*/
class GuiExport AccelLineEdit : public QLineEdit
{
Q_OBJECT
public:
AccelLineEdit ( QWidget * parent=0 );
protected:
void keyPressEvent ( QKeyEvent * e);
};
// ------------------------------------------------------------------------------
typedef QPair<QString, bool> CheckListItem;
/**
* The CheckListDialog class provides a dialog with a QListView with
* checkable items inside.
* \author Werner Mayer
*/
class GuiExport CheckListDialog : public QDialog
{
Q_OBJECT
public:
CheckListDialog( QWidget* parent = 0, Qt::WFlags fl = 0 );
~CheckListDialog();
void setCheckableItems( const QStringList& items );
void setCheckableItems( const QList<CheckListItem>& items );
QStringList getCheckedItems() const;
void accept ();
private:
QStringList checked;
Ui_DlgTreeWidget ui;
};
// ------------------------------------------------------------------------------
/**
* Implementation of a color button.
* \author Werner Mayer
*/
class GuiExport ColorButton : public QPushButton
{
Q_OBJECT
Q_PROPERTY( QColor color READ color WRITE setColor )
Q_PROPERTY( bool allowChangeColor READ allowChangeColor WRITE setAllowChangeColor )
Q_PROPERTY( bool drawFrame READ drawFrame WRITE setDrawFrame )
public:
ColorButton(QWidget* parent = 0);
~ColorButton();
void setColor(const QColor&);
QColor color() const;
void setAllowChangeColor(bool);
bool allowChangeColor() const;
void setDrawFrame(bool);
bool drawFrame() const;
void setModal(bool);
bool isModal() const;
public Q_SLOTS:
void onChooseColor();
private Q_SLOTS:
void onColorChosen(const QColor&);
void onRejected();
Q_SIGNALS:
/** Emits this signal when color has changed */
void changed();
protected:
void paintEvent (QPaintEvent*);
private:
struct ColorButtonP *d;
};
// ------------------------------------------------------------------------------
/**
* A text label where a url can specified. When the user clicks on the text label the system browser
* gets opened with the specified url.
*
* This can be used for e.g. in the about dialog where the url of the maintainer of an application
* can be specified.
* @author Werner Mayer
*/
class GuiExport UrlLabel : public QLabel
{
Q_OBJECT
Q_PROPERTY( QString url READ url WRITE setUrl)
public:
UrlLabel ( QWidget * parent = 0, Qt::WFlags f = 0 );
virtual ~UrlLabel();
QString url() const;
public Q_SLOTS:
void setUrl( const QString &u );
protected:
void enterEvent ( QEvent * );
void leaveEvent ( QEvent * );
void mouseReleaseEvent ( QMouseEvent * );
private:
QString _url;
};
// ----------------------------------------------------------------------
/**
* The LabelButton class provides a label with a button on the right side.
* @author Werner Mayer
*/
class GuiExport LabelButton : public QWidget
{
Q_OBJECT
Q_PROPERTY(QVariant value READ value WRITE setValue)
public:
LabelButton (QWidget * parent = 0);
virtual ~LabelButton();
QVariant value() const;
QLabel *getLabel() const;
QPushButton *getButton() const;
public Q_SLOTS:
void setValue(const QVariant&);
protected:
virtual void showValue(const QVariant&) = 0;
void resizeEvent(QResizeEvent*);
protected Q_SLOTS:
virtual void browse() = 0;
Q_SIGNALS:
void valueChanged(const QVariant &);
private:
QLabel *label;
QPushButton *button;
QVariant _val;
};
// ----------------------------------------------------------------------
/**
* Qt's tooltip does not work as expected with some classes, e.g. when showing
* it in the 3d view it immediately receives a timer event to destroy itself.
* This class is thought to circumvent this behaviour by filtering the internal
* timer events.
* @author Werner Mayer
*/
class GuiExport ToolTip : public QObject
{
public:
static void showText(const QPoint & pos, const QString & text, QWidget * w = 0);
protected:
static ToolTip* instance();
ToolTip();
virtual ~ToolTip();
void timerEvent(QTimerEvent *e);
bool eventFilter(QObject* o, QEvent*e);
void installEventFilter();
void removeEventFilter();
private:
bool installed, hidden;
static ToolTip* inst;
QString text;
QPoint pos;
QPointer<QWidget> w; // need guard in case widget gets destroyed
QBasicTimer tooltipTimer;
QTime displayTime;
};
// ----------------------------------------------------------------------
class GuiExport StatusWidget : public QWidget
{
Q_OBJECT
public:
StatusWidget(QWidget* parent);
~StatusWidget();
void setStatusText(const QString&);
QSize sizeHint () const;
void showText(int ms);
protected:
void showEvent(QShowEvent*);
void hideEvent(QHideEvent*);
void adjustPosition(QWidget* w);
private:
QLabel* label;
};
// ----------------------------------------------------------------------
class GuiExport LabelEditor : public QWidget
{
Q_OBJECT
Q_PROPERTY(QString text READ text WRITE setText )
Q_PROPERTY(QString buttonText READ buttonText WRITE setButtonText)
public:
LabelEditor (QWidget * parent = 0);
virtual ~LabelEditor();
/**
* Returns the filename.
*/
QString text() const;
/**
* Returns the button's text.
*/
QString buttonText() const;
public Q_SLOTS:
virtual void setText(const QString &);
virtual void setButtonText (const QString &);
Q_SIGNALS:
void textChanged(const QString &);
private Q_SLOTS:
void changeText();
private:
QLineEdit *lineEdit;
QPushButton *button;
};
} // namespace Gui
#endif // GUI_WIDGETS_H