/********************************************************************** ** Copyright (C) 2003 Trolltech AS. All rights reserved. ** ** This file is part of TQt Designer. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** Licensees holding valid TQt Enterprise Edition or TQt Professional Edition ** licenses may use this file in accordance with the TQt Commercial License ** Agreement provided with the Software. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for ** information about TQt Commercial License Agreements. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #ifndef POPUPMENUEDITOR_H #define POPUPMENUEDITOR_H #include #include #include class PopupMenuEditor; class TQMenuItem; class PopupMenuEditorItem : public TQObject { Q_OBJECT friend class PopupMenuEditor; PopupMenuEditorItem( PopupMenuEditor * menu = 0, TQObject * parent = 0, const char * name = 0 ); public: enum ItemType { Unknown = -1, Separator = 0, Action = 1 }; PopupMenuEditorItem( TQAction * action, PopupMenuEditor * menu, TQObject * parent = 0, const char * name = 0 ); PopupMenuEditorItem( PopupMenuEditorItem * item, PopupMenuEditor * menu, TQObject * parent = 0, const char * name = 0 ); ~PopupMenuEditorItem(); void init(); ItemType type() const; TQAction * 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( TQObject *, TQEvent * event ); public slots: void selfDestruct(); protected: private: TQAction * a; PopupMenuEditor * s; PopupMenuEditor * m; uint separator : 1; uint removable : 1; }; class FormWindow; class MainWindow; class TQLineEdit; #include class PopupMenuEditor : public TQWidget { Q_OBJECT friend class PopupMenuEditorItem; friend class MenuBarEditor; friend class Resource; public: PopupMenuEditor( FormWindow * fw, TQWidget * parent = 0, const char * name = 0 ); PopupMenuEditor( FormWindow * fw, PopupMenuEditor * menu, TQWidget * parent, const char * name = 0 ); ~PopupMenuEditor(); void init(); void insert( PopupMenuEditorItem * item, int index = -1 ); void insert( TQAction * action, int index = -1 ); void insert( TQActionGroup * actionGroup, int index = -1 ); int find( const TQAction * action ); int find( PopupMenuEditor * menu ); int count(); PopupMenuEditorItem * at( int index ); PopupMenuEditorItem * at( TQPoint 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( TQPtrList & list ); void show(); void choosePixmap( int index = -1 ); void showLineEdit( int index = -1); void setAccelerator( int key, TQt::ButtonState state, int index = -1 ); FormWindow * formWindow() { return formWnd; } bool isCreatingAccelerator() { return ( currentField == 2 ); } TQPtrList * items() { return &itemList; } TQWidget * parentEditor() { return parentMenu; } signals: void inserted( TQAction * ); void removed( TQAction * ); public slots: void cut() { cut( currentIndex ); } void copy() { copy( currentIndex ); } void paste() { paste( currentIndex ); } void remove( int index ); void remove( TQAction * a ) { remove( find( a ) ); } void resizeToContents(); void showSubMenu(); void hideSubMenu(); void focusOnSubMenu(); protected: PopupMenuEditorItem * createItem( TQAction * a = 0 ); void removeItem( int index = -1 ); PopupMenuEditorItem * currentItem(); PopupMenuEditorItem * itemAt( int y ); void setFocusAt( const TQPoint & pos ); bool eventFilter( TQObject * o, TQEvent * e ); void paintEvent( TQPaintEvent * e ); void mousePressEvent( TQMouseEvent * e ); void mouseDoubleClickEvent( TQMouseEvent * e ); void mouseMoveEvent( TQMouseEvent * e ); void dragEnterEvent( TQDragEnterEvent * e ); void dragLeaveEvent( TQDragLeaveEvent * e ); void dragMoveEvent( TQDragMoveEvent * e ); void dropEvent( TQDropEvent * e ); void keyPressEvent( TQKeyEvent * e ); void focusInEvent( TQFocusEvent * e ); void focusOutEvent( TQFocusEvent * e ); void drawItems( TQPainter * p ); void drawItem( TQPainter * p, PopupMenuEditorItem * i, const TQRect & r, int f ) const; void drawWinFocusRect( TQPainter * p, const TQRect & r ) const; TQSize 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( TQActionGroup * g, int y ); void safeDec(); void safeInc(); void clearCurrentField(); void navigateUp( bool ctrl ); void navigateDown( bool ctrl ); void navigateLeft(); void navigateRight(); void enterEditMode( TQKeyEvent * e ); void leaveEditMode( TQKeyEvent * e ); TQString constructName( PopupMenuEditorItem *item ); private: FormWindow * formWnd; TQLineEdit * lineEdit; TQWidget * dropLine; TQPtrList itemList; PopupMenuEditorItem addItem; PopupMenuEditorItem addSeparator; TQWidget * parentMenu; int iconWidth; int textWidth; int accelWidth; int arrowWidth; int borderSize; int currentField; int currentIndex; TQPoint mousePressPos; static PopupMenuEditorItem * draggedItem; enum ClipboardOperation { None = 0, Cut = 1, Copy = 2 }; static int clipboardOperation; static PopupMenuEditorItem * clipboardItem; }; #endif //POPUPMENUEDITOR_H