diff options
Diffstat (limited to 'tools/designer/designer/popupmenueditor.h')
-rw-r--r-- | tools/designer/designer/popupmenueditor.h | 242 |
1 files changed, 242 insertions, 0 deletions
diff --git a/tools/designer/designer/popupmenueditor.h b/tools/designer/designer/popupmenueditor.h new file mode 100644 index 0000000..1bfda4b --- /dev/null +++ b/tools/designer/designer/popupmenueditor.h @@ -0,0 +1,242 @@ +/********************************************************************** +** Copyright (C) 2005-2008 Trolltech ASA. All rights reserved. +** +** This file is part of Qt Designer. +** +** This file may be used under the terms of the GNU General +** Public License versions 2.0 or 3.0 as published by the Free +** Software Foundation and appearing in the files LICENSE.GPL2 +** and LICENSE.GPL3 included in the packaging of this file. +** Alternatively you may (at your option) use any later version +** of the GNU General Public License if such license has been +** publicly approved by Trolltech ASA (or its successors, if any) +** and the KDE Free Qt Foundation. +** +** Please review the following information to ensure GNU General +** Public Licensing requirements will be met: +** http://trolltech.com/products/qt/licenses/licensing/opensource/. +** If you are unsure which license is appropriate for your use, please +** review the following information: +** http://trolltech.com/products/qt/licenses/licensing/licensingoverview +** or contact the sales department at [email protected]. +** +** Licensees holding valid Qt Commercial licenses may use this file in +** accordance with the Qt Commercial License Agreement provided with +** the Software. +** +** This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +** INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE. Trolltech reserves all rights not granted +** herein. +** +**********************************************************************/ + +#ifndef POPUPMENUEDITOR_H +#define POPUPMENUEDITOR_H + +#include <qwidget.h> +#include <qptrlist.h> +#include <qaction.h> + +class PopupMenuEditor; +class QMenuItem; + +class PopupMenuEditorItem : public QObject +{ + Q_OBJECT + + friend class PopupMenuEditor; + + PopupMenuEditorItem( PopupMenuEditor * menu = 0, QObject * parent = 0, const char * name = 0 ); + +public: + enum ItemType { + Unknown = -1, + Separator = 0, + Action = 1 + }; + + PopupMenuEditorItem( QAction * action, PopupMenuEditor * menu, + QObject * parent = 0, const char * name = 0 ); + PopupMenuEditorItem( PopupMenuEditorItem * item, PopupMenuEditor * menu, + QObject * parent = 0, const char * name = 0 ); + ~PopupMenuEditorItem(); + + void init(); + + ItemType type() const; + QAction * action() const { return a; } + + void setVisible( bool enable ); + bool isVisible() const; + + void setSeparator( bool enable ) { separator = enable; } + bool isSeparator() const { return separator; } + + void setRemovable( bool enable ) { removable = enable; } + bool isRemovable() const { return removable; } + + void showMenu( int x, int y ); + void hideMenu(); + void focusOnMenu(); + PopupMenuEditor * subMenu() const { return s; } + + int count() const; + + bool eventFilter( QObject *, QEvent * event ); + +public slots: + void selfDestruct(); + +protected: + +private: + QAction * a; + PopupMenuEditor * s; + PopupMenuEditor * m; + uint separator : 1; + uint removable : 1; +}; + +class FormWindow; +class MainWindow; +class QLineEdit; + +#include <qpopupmenu.h> + +class PopupMenuEditor : public QWidget +{ + Q_OBJECT + + friend class PopupMenuEditorItem; + friend class MenuBarEditor; + friend class Resource; + +public: + PopupMenuEditor( FormWindow * fw, QWidget * parent = 0, const char * name = 0 ); + PopupMenuEditor( FormWindow * fw, PopupMenuEditor * menu, QWidget * parent, const char * name = 0 ); + ~PopupMenuEditor(); + + void init(); + + void insert( PopupMenuEditorItem * item, int index = -1 ); + void insert( QAction * action, int index = -1 ); + void insert( QActionGroup * actionGroup, int index = -1 ); + int find( const QAction * action ); + int find( PopupMenuEditor * menu ); + int count(); + PopupMenuEditorItem * at( int index ); + PopupMenuEditorItem * at( QPoint pos ) { return itemAt( pos.y() ); } + void exchange( int a, int b ); + + void cut( int index ); + void copy( int index ); + void paste( int index ); + + void insertedActions( QPtrList<QAction> & list ); + + void show(); + void choosePixmap( int index = -1 ); + void showLineEdit( int index = -1); + void setAccelerator( int key, Qt::ButtonState state, int index = -1 ); + + FormWindow * formWindow() { return formWnd; } + bool isCreatingAccelerator() { return ( currentField == 2 ); } + + QPtrList<PopupMenuEditorItem> * items() { return &itemList; } + + QWidget * parentEditor() { return parentMenu; } + +signals: + void inserted( QAction * ); + void removed( QAction * ); + +public slots: + + void cut() { cut( currentIndex ); } + void copy() { copy( currentIndex ); } + void paste() { paste( currentIndex ); } + + void remove( int index ); + void remove( QAction * a ) { remove( find( a ) ); } + + void resizeToContents(); + void showSubMenu(); + void hideSubMenu(); + void focusOnSubMenu(); + +protected: + PopupMenuEditorItem * createItem( QAction * a = 0 ); + void removeItem( int index = -1 ); + PopupMenuEditorItem * currentItem(); + PopupMenuEditorItem * itemAt( int y ); + void setFocusAt( const QPoint & pos ); + + bool eventFilter( QObject * o, QEvent * e ); + void paintEvent( QPaintEvent * e ); + void mousePressEvent( QMouseEvent * e ); + void mouseDoubleClickEvent( QMouseEvent * e ); + void mouseMoveEvent( QMouseEvent * e ); + void dragEnterEvent( QDragEnterEvent * e ); + void dragLeaveEvent( QDragLeaveEvent * e ); + void dragMoveEvent( QDragMoveEvent * e ); + void dropEvent( QDropEvent * e ); + void keyPressEvent( QKeyEvent * e ); + void focusInEvent( QFocusEvent * e ); + void focusOutEvent( QFocusEvent * e ); + + void drawItems( QPainter * p ); + void drawItem( QPainter * p, PopupMenuEditorItem * i, const QRect & r, int f ) const; + void drawWinFocusRect( QPainter * p, const QRect & r ) const; + + QSize contentsSize(); + int itemHeight( const PopupMenuEditorItem * item ) const; + int itemPos( const PopupMenuEditorItem * item ) const; + + int snapToItem( int y ); + void dropInPlace( PopupMenuEditorItem * i, int y ); + void dropInPlace( QActionGroup * g, int y ); + + void safeDec(); + void safeInc(); + + void clearCurrentField(); + void navigateUp( bool ctrl ); + void navigateDown( bool ctrl ); + void navigateLeft(); + void navigateRight(); + void enterEditMode( QKeyEvent * e ); + void leaveEditMode( QKeyEvent * e ); + + QString constructName( PopupMenuEditorItem *item ); + +private: + FormWindow * formWnd; + QLineEdit * lineEdit; + QWidget * dropLine; + QPtrList<PopupMenuEditorItem> itemList; + PopupMenuEditorItem addItem; + PopupMenuEditorItem addSeparator; + QWidget * parentMenu; + + int iconWidth; + int textWidth; + int accelWidth; + int arrowWidth; + int borderSize; + + int currentField; + int currentIndex; + QPoint mousePressPos; + static PopupMenuEditorItem * draggedItem; + + enum ClipboardOperation { + None = 0, + Cut = 1, + Copy = 2 + }; + static int clipboardOperation; + static PopupMenuEditorItem * clipboardItem; +}; + +#endif //POPUPMENUEDITOR_H |