/********************************************************************** ** Copyright (C) 2000-2001 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. ** **********************************************************************/ #include "mainwindow.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "defs.h" #include "project.h" #include "widgetdatabase.h" #include "widgetfactory.h" #include "preferences.h" #include "formwindow.h" #include "newformimpl.h" #include "resource.h" #include "projectsettingsimpl.h" #include "workspace.h" #include "createtemplate.h" #include "hierarchyview.h" #include "editfunctionsimpl.h" #include "finddialog.h" #include "replacedialog.h" #include "gotolinedialog.h" #include "formsettingsimpl.h" #include "pixmapcollectioneditor.h" #include "styledbutton.h" #include "customwidgeteditorimpl.h" #ifndef TQT_NO_SQL #include "dbconnectionsimpl.h" #include "dbconnectionimpl.h" #endif #include "widgetaction.h" #include #include "startdialogimpl.h" #include "designerappiface.h" #include "connectiondialog.h" #include "configtoolboxdialog.h" #include "designeraction.h" #include "kdevdesigner_part.h" static const char * whatsthis_image[] = { "16 16 3 1", " c None", "o c #000000", "a c #000080", "o aaaaa ", "oo aaa aaa ", "ooo aaa aaa", "oooo aa aa", "ooooo aa aa", "oooooo a aaa", "ooooooo aaa ", "oooooooo aaa ", "ooooooooo aaa ", "ooooo aaa ", "oo ooo ", "o ooo aaa ", " ooo aaa ", " ooo ", " ooo ", " ooo "}; const TQString toolbarHelp = "

Toolbars contain a number of buttons to " "provide quick access to often used functions.%1" "
Click on the toolbar handle to hide the toolbar, " "or drag and place the toolbar to a different location.

"; static TQIconSet createIconSet( const TQString &name ) { TQIconSet ic( BarIcon( "" + name, KDevDesignerPartFactory::instance() ) ); TQString prefix = "designer_"; int right = name.length() - prefix.length(); ic.setPixmap( BarIcon( prefix + "d_" + name.right( right ), KDevDesignerPartFactory::instance() ), TQIconSet::Small, TQIconSet::Disabled ); return ic; } void MainWindow::setupEditActions() { actionEditUndo = new DesignerAction( i18n("Undo"), createIconSet( "designer_undo.png" ),i18n("&Undo: Not Available"), CTRL + Key_Z, TQT_TQOBJECT(this), 0 ); actionEditUndo->setStatusTip( i18n( "Undoes the last action" ) ); actionEditUndo->setWhatsThis( whatsThisFrom( "Edit|Undo" ) ); connect( actionEditUndo, TQT_SIGNAL( activated() ), TQT_TQOBJECT(this), TQT_SLOT( editUndo() ) ); actionEditUndo->setEnabled( FALSE ); actionEditRedo = new DesignerAction( i18n( "Redo" ), createIconSet("designer_redo.png"), i18n( "&Redo: Not Available" ), CTRL + Key_Y, TQT_TQOBJECT(this), 0 ); actionEditRedo->setStatusTip( i18n( "Redoes the last undone operation") ); actionEditRedo->setWhatsThis( whatsThisFrom( "Edit|Redo" ) ); connect( actionEditRedo, TQT_SIGNAL( activated() ), TQT_TQOBJECT(this), TQT_SLOT( editRedo() ) ); actionEditRedo->setEnabled( FALSE ); actionEditCut = new DesignerAction( i18n( "Cut" ), createIconSet("designer_editcut.png"), i18n( "Cu&t" ), CTRL + Key_X, TQT_TQOBJECT(this), 0 ); actionEditCut->setStatusTip( i18n( "Cuts the selected widgets and puts them on the clipboard" ) ); actionEditCut->setWhatsThis( whatsThisFrom( "Edit|Cut" ) ); connect( actionEditCut, TQT_SIGNAL( activated() ), TQT_TQOBJECT(this), TQT_SLOT( editCut() ) ); actionEditCut->setEnabled( FALSE ); actionEditCopy = new DesignerAction( i18n( "Copy" ), createIconSet("designer_editcopy.png"), i18n( "&Copy" ), CTRL + Key_C, TQT_TQOBJECT(this), 0 ); actionEditCopy->setStatusTip( i18n( "Copies the selected widgets to the clipboard" ) ); actionEditCopy->setWhatsThis( whatsThisFrom( "Edit|Copy" ) ); connect( actionEditCopy, TQT_SIGNAL( activated() ), TQT_TQOBJECT(this), TQT_SLOT( editCopy() ) ); actionEditCopy->setEnabled( FALSE ); actionEditPaste = new DesignerAction( i18n( "Paste" ), createIconSet("designer_editpaste.png"), i18n( "&Paste" ), CTRL + Key_V, TQT_TQOBJECT(this), 0 ); actionEditPaste->setStatusTip( i18n( "Pastes the clipboard's contents" ) ); actionEditPaste->setWhatsThis( whatsThisFrom( "Edit|Paste" ) ); connect( actionEditPaste, TQT_SIGNAL( activated() ), TQT_TQOBJECT(this), TQT_SLOT( editPaste() ) ); actionEditPaste->setEnabled( FALSE ); actionEditDelete = new DesignerAction( i18n( "Delete" ), TQPixmap(), i18n( "&Delete" ), Key_Delete, TQT_TQOBJECT(this), 0 ); actionEditDelete->setStatusTip( i18n( "Deletes the selected widgets" ) ); actionEditDelete->setWhatsThis( whatsThisFrom( "Edit|Delete" ) ); connect( actionEditDelete, TQT_SIGNAL( activated() ), TQT_TQOBJECT(this), TQT_SLOT( editDelete() ) ); actionEditDelete->setEnabled( FALSE ); #ifdef TQ_WS_MAC TQAction *macDelete = new DesignerAction( i18n( "Delete" ), TQPixmap(), i18n( "&Delete" ), Key_Backspace, TQT_TQOBJECT(this), 0 ); connect( macDelete, TQT_SIGNAL( activated() ), TQT_TQOBJECT(this), TQT_SLOT( editDelete() ) ); #endif actionEditSelectAll = new DesignerAction( i18n( "Select All" ), TQPixmap(), i18n( "Select &All" ), CTRL + Key_A, TQT_TQOBJECT(this), 0 ); actionEditSelectAll->setStatusTip( i18n( "Selects all widgets" ) ); actionEditSelectAll->setWhatsThis( whatsThisFrom( "Edit|Select All" ) ); connect( actionEditSelectAll, TQT_SIGNAL( activated() ), TQT_TQOBJECT(this), TQT_SLOT( editSelectAll() ) ); actionEditSelectAll->setEnabled( TRUE ); actionEditRaise = new DesignerAction( i18n( "Bring to Front" ), createIconSet("designer_editraise.png"), i18n( "Bring to &Front" ), 0, TQT_TQOBJECT(this), 0 ); actionEditRaise->setStatusTip( i18n( "Raises the selected widgets" ) ); actionEditRaise->setWhatsThis( i18n( "Raises the selected widgets" ) ); connect( actionEditRaise, TQT_SIGNAL( activated() ), TQT_TQOBJECT(this), TQT_SLOT( editRaise() ) ); actionEditRaise->setEnabled( FALSE ); actionEditLower = new DesignerAction( i18n( "Send to Back" ), createIconSet("designer_editlower.png"), i18n( "Send to &Back" ), 0, TQT_TQOBJECT(this), 0 ); actionEditLower->setStatusTip( i18n( "Lowers the selected widgets" ) ); actionEditLower->setWhatsThis( i18n( "Lowers the selected widgets" ) ); connect( actionEditLower, TQT_SIGNAL( activated() ), TQT_TQOBJECT(this), TQT_SLOT( editLower() ) ); actionEditLower->setEnabled( FALSE ); actionEditAccels = new DesignerAction( i18n( "Check Accelerators" ), TQPixmap(), i18n( "Chec&k Accelerators" ), ALT + Key_R, TQT_TQOBJECT(this), 0 ); actionEditAccels->setStatusTip( i18n("Checks if the accelerators used in the form are unique") ); actionEditAccels->setWhatsThis( whatsThisFrom( "Edit|Check Accelerator" ) ); connect( actionEditAccels, TQT_SIGNAL( activated() ), TQT_TQOBJECT(this), TQT_SLOT( editAccels() ) ); connect( this, TQT_SIGNAL( hasActiveForm(bool) ), actionEditAccels, TQT_SLOT( setEnabled(bool) ) ); actionEditFunctions = new DesignerAction( i18n( "Slots" ), createIconSet("designer_editslots.png"), i18n( "S&lots..." ), 0, TQT_TQOBJECT(this), 0 ); actionEditFunctions->setStatusTip( i18n("Opens a dialog for editing slots") ); actionEditFunctions->setWhatsThis( whatsThisFrom( "Edit|Slots" ) ); connect( actionEditFunctions, TQT_SIGNAL( activated() ), TQT_TQOBJECT(this), TQT_SLOT( editFunctions() ) ); connect( this, TQT_SIGNAL( hasActiveForm(bool) ), actionEditFunctions, TQT_SLOT( setEnabled(bool) ) ); actionEditConnections = new DesignerAction( i18n( "Connections" ), createIconSet("designer_connecttool.png"), i18n( "Co&nnections..." ), 0, TQT_TQOBJECT(this), 0 ); actionEditConnections->setStatusTip( i18n("Opens a dialog for editing connections") ); actionEditConnections->setWhatsThis( whatsThisFrom( "Edit|Connections" ) ); connect( actionEditConnections, TQT_SIGNAL( activated() ), TQT_TQOBJECT(this), TQT_SLOT( editConnections() ) ); connect( this, TQT_SIGNAL( hasActiveForm(bool) ), actionEditConnections, TQT_SLOT( setEnabled(bool) ) ); actionEditSource = new DesignerAction( i18n( "Source" ), TQIconSet(), i18n( "&Source..." ), CTRL + Key_E, TQT_TQOBJECT(this), 0 ); actionEditSource->setStatusTip( i18n("Opens an editor to edit the form's source code") ); actionEditSource->setWhatsThis( whatsThisFrom( "Edit|Source" ) ); connect( actionEditSource, TQT_SIGNAL( activated() ), TQT_TQOBJECT(this), TQT_SLOT( editSource() ) ); connect( this, TQT_SIGNAL( hasActiveForm(bool) ), actionEditSource, TQT_SLOT( setEnabled(bool) ) ); actionEditFormSettings = new DesignerAction( i18n( "Form Settings" ), TQPixmap(), i18n( "&Form Settings..." ), 0, TQT_TQOBJECT(this), 0 ); actionEditFormSettings->setStatusTip( i18n("Opens a dialog to change the form's settings") ); actionEditFormSettings->setWhatsThis( whatsThisFrom( "Edit|Form Settings" ) ); connect( actionEditFormSettings, TQT_SIGNAL( activated() ), TQT_TQOBJECT(this), TQT_SLOT( editFormSettings() ) ); connect( this, TQT_SIGNAL( hasActiveForm(bool) ), actionEditFormSettings, TQT_SLOT( setEnabled(bool) ) ); actionEditPreferences = new DesignerAction( i18n( "Preferences" ), TQPixmap(), i18n( "Preferences..." ), 0, TQT_TQOBJECT(this), 0 ); actionEditPreferences->setStatusTip( i18n("Opens a dialog to change preferences") ); actionEditPreferences->setWhatsThis( whatsThisFrom( "Edit|Preferences" ) ); connect( actionEditPreferences, TQT_SIGNAL( activated() ), TQT_TQOBJECT(this), TQT_SLOT( editPreferences() ) ); /* TQToolBar *tb = new TQToolBar( this, "Edit" ); tb->setCloseMode( TQDockWindow::Undocked ); TQWhatsThis::add( tb, i18n( "The Edit toolbar%1").arg(i18n(toolbarHelp).arg("")) ); addToolBar( tb, i18n( "Edit" ) ); actionEditUndo->addTo( tb ); actionEditRedo->addTo( tb ); tb->addSeparator(); actionEditCut->addTo( tb ); actionEditCopy->addTo( tb ); actionEditPaste->addTo( tb );*/ #if 0 tb->addSeparator(); actionEditLower->addTo( tb ); actionEditRaise->addTo( tb ); #endif TQPopupMenu *menu = new TQPopupMenu( this, "Edit" ); connect( menu, TQT_SIGNAL( aboutToShow() ), TQT_TQOBJECT(this), TQT_SLOT( updateEditorUndoRedo() ) ); menubar->insertItem( i18n( "&Edit" ), menu ); actionEditUndo->addTo( menu ); actionEditRedo->addTo( menu ); menu->insertSeparator(); actionEditCut->addTo( menu ); actionEditCopy->addTo( menu ); actionEditPaste->addTo( menu ); actionEditDelete->addTo( menu ); actionEditSelectAll->addTo( menu ); actionEditAccels->addTo( menu ); #if 0 menu->insertSeparator(); actionEditLower->addTo( menu ); actionEditRaise->addTo( menu ); #endif menu->insertSeparator(); if ( !singleProjectMode() ) { actionEditFunctions->addTo( menu ); actionEditConnections->addTo( menu ); } actionEditFormSettings->addTo( menu ); menu->insertSeparator(); actionEditPreferences->addTo( menu ); } void MainWindow::setupSearchActions() { actionSearchFind = new DesignerAction( i18n( "Find" ), createIconSet( "designer_searchfind.png" ), i18n( "&Find..." ), CTRL + Key_F, TQT_TQOBJECT(this), 0 ); connect( actionSearchFind, TQT_SIGNAL( activated() ), TQT_TQOBJECT(this), TQT_SLOT( searchFind() ) ); actionSearchFind->setEnabled( FALSE ); actionSearchFind->setWhatsThis( whatsThisFrom( "Search|Find" ) ); actionSearchIncremetal = new DesignerAction( i18n( "Find Incremental" ), TQIconSet(), i18n( "Find &Incremental" ), ALT + Key_I, TQT_TQOBJECT(this), 0 ); connect( actionSearchIncremetal, TQT_SIGNAL( activated() ), TQT_TQOBJECT(this), TQT_SLOT( searchIncremetalFindMenu() ) ); actionSearchIncremetal->setEnabled( FALSE ); actionSearchIncremetal->setWhatsThis( whatsThisFrom( "Search|Find Incremental" ) ); actionSearchReplace = new DesignerAction( i18n( "Replace" ), TQIconSet(), i18n( "&Replace..." ), CTRL + Key_R, TQT_TQOBJECT(this), 0 ); connect( actionSearchReplace, TQT_SIGNAL( activated() ), TQT_TQOBJECT(this), TQT_SLOT( searchReplace() ) ); actionSearchReplace->setEnabled( FALSE ); actionSearchReplace->setWhatsThis( whatsThisFrom( "Search|Replace" ) ); actionSearchGotoLine = new DesignerAction( i18n( "Goto Line" ), TQIconSet(), i18n( "&Goto Line..." ), ALT + Key_G, TQT_TQOBJECT(this), 0 ); connect( actionSearchGotoLine, TQT_SIGNAL( activated() ), TQT_TQOBJECT(this), TQT_SLOT( searchGotoLine() ) ); actionSearchGotoLine->setEnabled( FALSE ); actionSearchGotoLine->setWhatsThis( whatsThisFrom( "Search|Goto line" ) ); /* TQToolBar *tb = new TQToolBar( this, "Search" ); tb->setCloseMode( TQDockWindow::Undocked ); addToolBar( tb, i18n( "Search" ) ); actionSearchFind->addTo( tb );*/ incrementalSearch = new TQLineEdit( 0 ); incrementalSearch->hide(); TQToolTip::add( incrementalSearch, i18n( "Incremental search (Alt+I)" ) ); connect( incrementalSearch, TQT_SIGNAL( textChanged( const TQString & ) ), this, TQT_SLOT( searchIncremetalFind() ) ); connect( incrementalSearch, TQT_SIGNAL( returnPressed() ), this, TQT_SLOT( searchIncremetalFindNext() ) ); incrementalSearch->setEnabled( FALSE ); TQPopupMenu *menu = new TQPopupMenu( this, "Search" ); menubar->insertItem( i18n( "&Search" ), menu ); actionSearchFind->addTo( menu ); actionSearchIncremetal->addTo( menu ); actionSearchReplace->addTo( menu ); menu->insertSeparator(); actionSearchGotoLine->addTo( menu ); } void MainWindow::setupLayoutActions() { if ( !actionGroupTools ) { actionGroupTools = new TQActionGroup( this ); actionGroupTools->setExclusive( TRUE ); connect( actionGroupTools, TQT_SIGNAL( selected(TQAction*) ), TQT_TQOBJECT(this), TQT_SLOT( toolSelected(TQAction*) ) ); } actionEditAdjustSize = new DesignerAction( i18n( "Adjust Size" ), createIconSet("designer_adjustsize.png"), i18n( "Adjust &Size" ), CTRL + Key_J, TQT_TQOBJECT(this), 0 ); actionEditAdjustSize->setStatusTip(i18n("Adjusts the size of the selected widget") ); actionEditAdjustSize->setWhatsThis( whatsThisFrom( "Layout|Adjust Size" ) ); connect( actionEditAdjustSize, TQT_SIGNAL( activated() ), TQT_TQOBJECT(this), TQT_SLOT( editAdjustSize() ) ); actionEditAdjustSize->setEnabled( FALSE ); actionEditHLayout = new DesignerAction( i18n( "Lay OutQt::Horizontally" ), createIconSet("designer_edithlayout.png"), i18n( "Lay Out &Horizontally" ), CTRL + Key_H, TQT_TQOBJECT(this), 0 ); actionEditHLayout->setStatusTip(i18n("Lays out the selected widgets horizontally") ); actionEditHLayout->setWhatsThis( whatsThisFrom( "Layout|Lay OutQt::Horizontally" ) ); connect( actionEditHLayout, TQT_SIGNAL( activated() ), TQT_TQOBJECT(this), TQT_SLOT( editLayoutHorizontal() ) ); actionEditHLayout->setEnabled( FALSE ); actionEditVLayout = new DesignerAction( i18n( "Lay OutQt::Vertically" ), createIconSet("designer_editvlayout.png"), i18n( "Lay Out &Vertically" ), CTRL + Key_L, TQT_TQOBJECT(this), 0 ); actionEditVLayout->setStatusTip(i18n("Lays out the selected widgets vertically") ); actionEditVLayout->setWhatsThis( whatsThisFrom( "Layout|Lay OutQt::Vertically" ) ); connect( actionEditVLayout, TQT_SIGNAL( activated() ), TQT_TQOBJECT(this), TQT_SLOT( editLayoutVertical() ) ); actionEditVLayout->setEnabled( FALSE ); actionEditGridLayout = new DesignerAction( i18n( "Lay Out in a Grid" ), createIconSet("designer_editgrid.png"), i18n( "Lay Out in a &Grid" ), CTRL + Key_G, TQT_TQOBJECT(this), 0 ); actionEditGridLayout->setStatusTip(i18n("Lays out the selected widgets in a grid") ); actionEditGridLayout->setWhatsThis( whatsThisFrom( "Layout|Lay Out in a Grid" ) ); connect( actionEditGridLayout, TQT_SIGNAL( activated() ), TQT_TQOBJECT(this), TQT_SLOT( editLayoutGrid() ) ); actionEditGridLayout->setEnabled( FALSE ); actionEditSplitHorizontal = new DesignerAction( i18n( "Lay OutQt::Horizontally (in Splitter)" ), createIconSet("designer_editvlayoutsplit.png"), i18n( "Lay OutQt::Horizontally (in S&plitter)" ), 0, TQT_TQOBJECT(this), 0 ); actionEditSplitHorizontal->setStatusTip(i18n("Lays out the selected widgets horizontally in a splitter") ); actionEditSplitHorizontal->setWhatsThis( whatsThisFrom( "Layout|Lay OutQt::Horizontally (in Splitter)" ) ); connect( actionEditSplitHorizontal, TQT_SIGNAL( activated() ), TQT_TQOBJECT(this), TQT_SLOT( editLayoutHorizontalSplit() ) ); actionEditSplitHorizontal->setEnabled( FALSE ); actionEditSplitVertical = new DesignerAction( i18n( "Lay OutQt::Vertically (in Splitter)" ), createIconSet("designer_edithlayoutsplit.png"), i18n( "Lay OutQt::Vertically (in Sp&litter)" ), 0, TQT_TQOBJECT(this), 0 ); actionEditSplitVertical->setStatusTip(i18n("Lays out the selected widgets vertically in a splitter") ); actionEditSplitVertical->setWhatsThis( whatsThisFrom( "Layout|Lay OutQt::Vertically (in Splitter)" ) ); connect( actionEditSplitVertical, TQT_SIGNAL( activated() ), TQT_TQOBJECT(this), TQT_SLOT( editLayoutVerticalSplit() ) ); actionEditSplitVertical->setEnabled( FALSE ); actionEditBreakLayout = new DesignerAction( i18n( "Break Layout" ), createIconSet("designer_editbreaklayout.png"), i18n( "&Break Layout" ), CTRL + Key_B, TQT_TQOBJECT(this), 0 ); actionEditBreakLayout->setStatusTip(i18n("Breaks the selected layout") ); actionEditBreakLayout->setWhatsThis( whatsThisFrom( "Layout|Break Layout" ) ); connect( actionEditBreakLayout, TQT_SIGNAL( activated() ), TQT_TQOBJECT(this), TQT_SLOT( editBreakLayout() ) ); actionEditBreakLayout->setEnabled( FALSE ); int id = WidgetDatabase::idFromClassName( "Spacer" ); actionInsertSpacer = new WidgetAction( i18n( "Layout" ), actionGroupTools, TQString::number( id ).latin1() ); actionInsertSpacer->setToggleAction( TRUE ); actionInsertSpacer->setText( WidgetDatabase::className( id ) ); actionInsertSpacer->setMenuText( i18n( "Add %1").arg( WidgetDatabase::className( id ) ) ); actionInsertSpacer->setIconSet( WidgetDatabase::iconSet( id ) ); actionInsertSpacer->setToolTip( WidgetDatabase::toolTip( id ) ); actionInsertSpacer->setStatusTip( i18n( "Insert a %1").arg(WidgetDatabase::toolTip( id )) ); actionInsertSpacer->setWhatsThis( i18n("A %1

%2

" "

Click to insert a single %3," "or double click to keep the tool selected.") .arg(WidgetDatabase::toolTip( id )) .arg(WidgetDatabase::whatsThis( id )) .arg(WidgetDatabase::toolTip( id ) )); actionInsertSpacer->addTo( commonWidgetsToolBar ); commonWidgetsPage.append( actionInsertSpacer ); TQWidget *w; commonWidgetsToolBar->setStretchableWidget( ( w = new TQWidget( commonWidgetsToolBar ) ) ); w->setBackgroundMode( commonWidgetsToolBar->backgroundMode() ); TQWhatsThis::add( layoutToolBar, i18n( "The Layout toolbar%1" ).arg(i18n(toolbarHelp).arg("")) ); actionEditAdjustSize->addTo( layoutToolBar ); layoutToolBar->addSeparator(); actionEditHLayout->addTo( layoutToolBar ); actionEditVLayout->addTo( layoutToolBar ); actionEditGridLayout->addTo( layoutToolBar ); actionEditSplitHorizontal->addTo( layoutToolBar ); actionEditSplitVertical->addTo( layoutToolBar ); actionEditBreakLayout->addTo( layoutToolBar ); layoutToolBar->addSeparator(); actionInsertSpacer->addTo( layoutToolBar ); TQPopupMenu *menu = new TQPopupMenu( this, "Layout" ); layoutMenu = menu; menubar->insertItem( i18n( "&Layout" ), menu, toolsMenuId + 1 ); actionEditAdjustSize->addTo( menu ); menu->insertSeparator(); actionEditHLayout->addTo( menu ); actionEditVLayout->addTo( menu ); actionEditGridLayout->addTo( menu ); actionEditSplitHorizontal->addTo( menu ); actionEditSplitVertical->addTo( menu ); actionEditBreakLayout->addTo( menu ); menu->insertSeparator(); actionInsertSpacer->addTo( menu ); } void MainWindow::setupToolActions() { if ( !actionGroupTools ) { actionGroupTools = new TQActionGroup( this ); actionGroupTools->setExclusive( TRUE ); connect( actionGroupTools, TQT_SIGNAL( selected(TQAction*) ), this, TQT_SLOT( toolSelected(TQAction*) ) ); } actionPointerTool = new DesignerAction( i18n("Pointer"), createIconSet("designer_pointer.png"), i18n("&Pointer"), Key_F2, actionGroupTools, TQString::number(POINTER_TOOL).latin1(), TRUE ); actionPointerTool->setStatusTip( i18n("Selects the pointer tool") ); actionPointerTool->setWhatsThis( whatsThisFrom( "Tools|Pointer" ) ); actionConnectTool = new DesignerAction( i18n("Connect Signal/Slots"), createIconSet("designer_connecttool.png"), i18n("&Connect Signal/Slots"), singleProjectMode() ? 0 : Key_F3, actionGroupTools, TQString::number(CONNECT_TOOL).latin1(), TRUE ); actionConnectTool->setStatusTip( i18n("Selects the connection tool") ); actionConnectTool->setWhatsThis( whatsThisFrom( "Tools|Connect Signals and Slots" ) ); actionOrderTool = new DesignerAction( i18n("Tab Order"), createIconSet("designer_ordertool.png"), i18n("Tab &Order"), Key_F4, actionGroupTools, TQString::number(ORDER_TOOL).latin1(), TRUE ); actionOrderTool->setStatusTip( i18n("Selects the tab order tool") ); actionOrderTool->setWhatsThis( whatsThisFrom( "Tools|Tab Order" ) ); actionBuddyTool = new DesignerAction( i18n( "Set Buddy" ), createIconSet( "designer_setbuddy.png" ), i18n( "Set &Buddy" ), Key_F12, actionGroupTools, TQString::number( BUDDY_TOOL ).latin1(), TRUE ); actionBuddyTool->setStatusTip( i18n( "Sets a buddy to a label" ) ); actionBuddyTool->setWhatsThis( whatsThisFrom( "Tools|Set Buddy" ) ); TQToolBar *tb = new TQToolBar( this, "Tools" ); tb->setCloseMode( TQDockWindow::Undocked ); toolsToolBar = tb; TQWhatsThis::add( tb, i18n( "The Tools toolbar%1" ).arg(i18n(toolbarHelp).arg("")) ); addToolBar( tb, i18n( "Tools" ), TQMainWindow::DockTop, FALSE ); actionPointerTool->addTo( tb ); if ( !singleProjectMode() ) actionConnectTool->addTo( tb ); actionOrderTool->addTo( tb ); actionBuddyTool->addTo( tb ); TQPopupMenu *mmenu = new TQPopupMenu( this, "Tools" ); toolsMenu = mmenu; toolsMenuId = 100; menubar->insertItem( i18n( "&Tools" ), mmenu, toolsMenuId ); toolsMenuIndex = menubar->indexOf( toolsMenuId ); actionPointerTool->addTo( mmenu ); if ( !singleProjectMode() ) actionConnectTool->addTo( mmenu ); actionOrderTool->addTo( mmenu ); actionBuddyTool->addTo( mmenu ); mmenu->insertSeparator(); customWidgetToolBar = 0; customWidgetMenu = 0; actionToolsCustomWidget = new DesignerAction( i18n("Custom Widgets"), createIconSet( "designer_customwidget.png" ), i18n("Edit &Custom Widgets..."), 0, TQT_TQOBJECT(this), 0 ); actionToolsCustomWidget->setStatusTip( i18n("Opens a dialog to add and change " "custom widgets") ); actionToolsCustomWidget->setWhatsThis( whatsThisFrom( "Tools|Custom|Edit Custom" "Widgets" ) ); connect( actionToolsCustomWidget, TQT_SIGNAL( activated() ), this, TQT_SLOT( toolsCustomWidget() ) ); for ( int j = 0; j < WidgetDatabase::numWidgetGroups(); ++j ) { TQString grp = WidgetDatabase::widgetGroup( j ); if ( !WidgetDatabase::isGroupVisible( grp ) || WidgetDatabase::isGroupEmpty( grp ) ) continue; TQToolBar *tb = new TQToolBar( this, grp.latin1() ); tb->setCloseMode( TQDockWindow::Undocked ); widgetToolBars.append( tb ); bool plural = grp[(int)grp.length()-1] == 's'; if ( plural ) { TQWhatsThis::add( tb, i18n( "The %1%2" ).arg(grp).arg(i18n(toolbarHelp). arg( i18n(" Click on a button to insert a single widget, " "or double click to insert multiple %1.") ).arg(grp)) ); } else { TQWhatsThis::add( tb, i18n( "The %1 Widgets%2" ).arg(grp).arg(i18n(toolbarHelp). arg( i18n(" Click on a button to insert a single %1 widget, " "or double click to insert multiple widgets.") ).arg(grp)) ); } addToolBar( tb, grp ); tb->hide(); TQPopupMenu *menu = new TQPopupMenu( this, grp.latin1() ); mmenu->insertItem( grp, menu ); TQToolBar *tb2 = new TQToolBar( grp, 0, toolBox, FALSE, grp.latin1() ); tb2->setFrameStyle( TQFrame::NoFrame ); tb2->setOrientation( Qt::Vertical ); tb2->setBackgroundMode( PaletteBase ); toolBox->addItem( tb2, grp ); if ( grp == "Custom" ) { if ( !customWidgetMenu ) actionToolsCustomWidget->addTo( menu ); else menu->insertSeparator(); customWidgetMenu = menu; customWidgetToolBar = tb; } for ( int i = 0; i < WidgetDatabase::count(); ++i ) { if ( WidgetDatabase::group( i ) != grp ) continue; // only widgets, i.e. not forms and temp stuff WidgetAction* a = new WidgetAction( grp, actionGroupTools, TQString::number( i ).latin1() ); a->setToggleAction( TRUE ); TQString atext = WidgetDatabase::className( i ); if ( atext[0] == 'Q' ) atext = atext.mid(1); while ( atext.length() && atext[0] >= 'a' && atext[0] <= 'z' ) atext = atext.mid(1); if ( atext.isEmpty() ) atext = WidgetDatabase::className( i ); a->setText( atext ); TQString ttip = WidgetDatabase::toolTip( i ); a->setIconSet( WidgetDatabase::iconSet( i ) ); a->setToolTip( ttip ); if ( !WidgetDatabase::isWhatsThisLoaded() ) WidgetDatabase::loadWhatsThis( documentationPath() ); a->setStatusTip( i18n( "Insert a %1").arg(WidgetDatabase::className( i )) ); TQString whats = i18n("A %1").arg( WidgetDatabase::className( i ) ); if ( !WidgetDatabase::whatsThis( i ).isEmpty() ) whats += TQString("

%1

").arg(WidgetDatabase::whatsThis( i )); a->setWhatsThis( whats+ i18n("

Double click on this tool to keep it selected.

") ); if ( grp != "KDE" ) a->addTo( tb ); a->addTo( menu ); a->addTo( tb2 ); if ( WidgetDatabase::isCommon( i ) ) { a->addTo( commonWidgetsToolBar ); commonWidgetsPage.append( a ); } } TQWidget *w; tb2->setStretchableWidget( ( w = new TQWidget( tb2 ) ) ); w->setBackgroundMode( tb2->backgroundMode() ); } if ( !customWidgetToolBar ) { TQToolBar *tb = new TQToolBar( this, "Custom Widgets" ); tb->setCloseMode( TQDockWindow::Undocked ); TQWhatsThis::add( tb, i18n( "The Custom Widgets toolbar%1" "

Click Edit Custom Widgets..." "in the Tools|Custom menu to " "add and change custom widgets

" ). arg(i18n(toolbarHelp). arg( i18n(" Click on the buttons to insert a single widget, " "or double click to insert multiple widgets.") )) ); addToolBar( tb, i18n( "Custom" ) ); tb->hide(); widgetToolBars.append( tb ); customWidgetToolBar = tb; TQPopupMenu *menu = new TQPopupMenu( this, "Custom Widgets" ); mmenu->insertItem( "Custom", menu ); customWidgetMenu = menu; customWidgetToolBar->hide(); actionToolsCustomWidget->addTo( customWidgetMenu ); customWidgetMenu->insertSeparator(); TQToolBar *tb2 = new TQToolBar( "Custom Widgets", 0, toolBox, FALSE, "Custom Widgets" ); tb2->setBackgroundMode(PaletteBase); tb2->setOrientation( Qt::Vertical ); tb2->setFrameStyle( TQFrame::NoFrame ); toolBox->addItem( tb2, "Custom Widgets" ); customWidgetToolBar2 = tb2; } TQAction *a = new DesignerAction( i18n( "Configure Toolbox" ), i18n( "Configure Toolbox..." ), 0, TQT_TQOBJECT(this) ); a->setStatusTip( i18n( "Opens a dialog to configure the common " "widgets page of the toolbox") ); connect( a, TQT_SIGNAL( activated() ), TQT_TQOBJECT(this), TQT_SLOT( toolsConfigure() ) ); mmenu->insertSeparator(); a->addTo( mmenu ); resetTool(); } void MainWindow::setupFileActions() { TQToolBar* tb = new TQToolBar( this, "File" ); tb->setCloseMode( TQDockWindow::Undocked ); projectToolBar = tb; TQWhatsThis::add( tb, i18n( "The File toolbar%1" ).arg(i18n(toolbarHelp).arg("")) ); addToolBar( tb, i18n( "File" ) ); fileMenu = new TQPopupMenu( this, "File" ); menubar->insertItem( i18n( "&File" ), fileMenu ); DesignerAction *a = 0; if ( !singleProject ) { DesignerAction *a = new DesignerAction( TQT_TQOBJECT(this), 0 ); a->setText( i18n( "New" ) ); a->setToolTip( i18n( "New dialog or file" ) ); a->setMenuText( i18n( "&New..." ) ); a->setIconSet( createIconSet("designer_filenew.png") ); a->setAccel( CTRL + Key_N ); a->setStatusTip( i18n( "Creates a new project, form or source file." ) ); a->setWhatsThis( whatsThisFrom( "File|New" ) ); connect( a, TQT_SIGNAL( activated() ), TQT_TQOBJECT(this), TQT_SLOT( fileNew() ) ); a->addTo( tb ); a->addTo( fileMenu ); actionNewFile = a; } else { actionGroupNew = new TQActionGroup( this, 0, FALSE ); TQActionGroup* a = actionGroupNew; ( (TQActionGroup*)a )->setUsesDropDown( TRUE ); a->setText( i18n( "New" ) ); a->setMenuText( i18n( "&New..." ) ); a->setIconSet( createIconSet("designer_form.png") ); a->setStatusTip( i18n( "Creates a new dialog or file" ) ); a->setWhatsThis( whatsThisFrom( "File|New" ) ); TQAction *newForm = new DesignerAction( a, 0 ); newForm->setText( i18n( "New Dialog" ) ); newForm->setMenuText( i18n( "&Dialog..." ) ); newForm->setIconSet( createIconSet("designer_form.png") ); newForm->setAccel( CTRL + Key_N ); newForm->setStatusTip( i18n( "Creates a new dialog." ) ); connect( newForm, TQT_SIGNAL( activated() ), TQT_TQOBJECT(this), TQT_SLOT( fileNewDialog() ) ); DesignerAction *newFile = new DesignerAction( TQT_TQOBJECT(a), 0 ); newFile->setText( i18n( "New File" ) ); newFile->setMenuText( i18n( "&File..." ) ); newFile->setIconSet( createIconSet("designer_filenew.png") ); newFile->setAccel( ALT + Key_N ); newFile->setStatusTip( i18n( "Creates a new file." ) ); connect( newFile, TQT_SIGNAL( activated() ), TQT_TQOBJECT(this), TQT_SLOT( fileNewFile() ) ); actionNewFile = newFile; a->addTo( tb ); a->addTo( fileMenu ); fileMenu->insertSeparator(); } a = new DesignerAction( TQT_TQOBJECT(this), 0 ); a->setText( i18n( "Open" ) ); a->setMenuText( i18n( "&Open..." ) ); a->setIconSet( createIconSet("designer_fileopen.png") ); a->setAccel( CTRL + Key_O ); a->setStatusTip( i18n( "Opens an existing project, form or source file ") ); a->setWhatsThis( whatsThisFrom( "File|Open" ) ); connect( a, TQT_SIGNAL( activated() ), TQT_TQOBJECT(this), TQT_SLOT( fileOpen() ) ); if ( !singleProject ) { a->addTo( tb ); a->addTo( fileMenu ); fileMenu->insertSeparator(); } a = new DesignerAction( TQT_TQOBJECT(this), 0 ); actionFileClose = a; a->setText( i18n( "Close" ) ); a->setMenuText( i18n( "&Close" ) ); a->setStatusTip( i18n( "Closes the current project or document" ) ); a->setWhatsThis(whatsThisFrom( "File|Close" ) ); connect( a, TQT_SIGNAL( activated() ), TQT_TQOBJECT(this), TQT_SLOT( fileClose() ) ); connect( this, TQT_SIGNAL( hasActiveWindowOrProject(bool) ), a, TQT_SLOT( setEnabled(bool) ) ); if ( !singleProject ) { a->addTo( fileMenu ); fileMenu->insertSeparator(); } a = new DesignerAction( TQT_TQOBJECT(this), 0 ); actionFileSave = a; a->setText( i18n( "Save" ) ); a->setMenuText( i18n( "&Save" ) ); a->setIconSet( createIconSet("designer_filesave.png") ); a->setAccel( CTRL + Key_S ); a->setStatusTip( i18n( "Saves the current project or document" ) ); a->setWhatsThis(whatsThisFrom( "File|Save" ) ); connect( a, TQT_SIGNAL( activated() ), TQT_TQOBJECT(this), TQT_SLOT( fileSave() ) ); connect( this, TQT_SIGNAL( hasActiveWindowOrProject(bool) ), a, TQT_SLOT( setEnabled(bool) ) ); a->addTo( tb ); a->addTo( fileMenu ); a = new DesignerAction( TQT_TQOBJECT(this), 0 ); actionFileSaveAs = a; a->setText( i18n( "Save As" ) ); a->setMenuText( i18n( "Save &As..." ) ); a->setStatusTip( i18n( "Saves the current form with a new filename" ) ); a->setWhatsThis( whatsThisFrom( "File|Save As" ) ); connect( a, TQT_SIGNAL( activated() ), TQT_TQOBJECT(this), TQT_SLOT( fileSaveAs() ) ); connect( this, TQT_SIGNAL( hasActiveWindow(bool) ), a, TQT_SLOT( setEnabled(bool) ) ); if ( !singleProject ) a->addTo( fileMenu ); a = new DesignerAction( TQT_TQOBJECT(this), 0 ); actionFileSaveAll = a; a->setText( i18n( "Save All" ) ); a->setMenuText( i18n( "Sa&ve All" ) ); a->setStatusTip( i18n( "Saves all open documents" ) ); a->setWhatsThis( whatsThisFrom( "File|Save All" ) ); connect( a, TQT_SIGNAL( activated() ), TQT_TQOBJECT(this), TQT_SLOT( fileSaveAll() ) ); connect( this, TQT_SIGNAL( hasActiveWindowOrProject(bool) ), a, TQT_SLOT( setEnabled(bool) ) ); if ( !singleProject ) { a->addTo( fileMenu ); fileMenu->insertSeparator(); } a = new DesignerAction( TQT_TQOBJECT(this), 0 ); a->setText( i18n( "Create Template" ) ); a->setMenuText( i18n( "Create &Template..." ) ); a->setStatusTip( i18n( "Creates a new template" ) ); a->setWhatsThis( whatsThisFrom( "File|Create Template" ) ); connect( a, TQT_SIGNAL( activated() ), TQT_TQOBJECT(this), TQT_SLOT( fileCreateTemplate() ) ); if ( !singleProject ) a->addTo( fileMenu ); if ( !singleProject ) fileMenu->insertSeparator(); recentlyFilesMenu = new TQPopupMenu( this ); recentlyProjectsMenu = new TQPopupMenu( this ); if ( !singleProject ) { fileMenu->insertItem( i18n( "Recently Opened Files " ), recentlyFilesMenu ); fileMenu->insertItem( i18n( "Recently Opened Projects" ), recentlyProjectsMenu ); } connect( recentlyFilesMenu, TQT_SIGNAL( aboutToShow() ), this, TQT_SLOT( setupRecentlyFilesMenu() ) ); connect( recentlyProjectsMenu, TQT_SIGNAL( aboutToShow() ), this, TQT_SLOT( setupRecentlyProjectsMenu() ) ); connect( recentlyFilesMenu, TQT_SIGNAL( activated( int ) ), this, TQT_SLOT( recentlyFilesMenuActivated( int ) ) ); connect( recentlyProjectsMenu, TQT_SIGNAL( activated( int ) ), this, TQT_SLOT( recentlyProjectsMenuActivated( int ) ) ); if ( !singleProject ) fileMenu->insertSeparator(); a = new DesignerAction( TQT_TQOBJECT(this), 0 ); actionFileExit = a; if ( !singleProjectMode() ) { a->setText( i18n( "Exit" ) ); a->setMenuText( i18n( "E&xit" ) ); a->setStatusTip( i18n( "Quits the application and prompts to save any changed forms, source files or project settings" ) ); a->setWhatsThis( whatsThisFrom( "File|Exit" ) ); } else { a->setText( i18n( "Close" ) ); a->setMenuText( i18n( "&Close" ) ); } connect( a, TQT_SIGNAL( activated() ), TQT_TQOBJECT(this), TQT_SLOT( fileQuit() ) ); a->addTo( fileMenu ); } void MainWindow::setupProjectActions() { projectMenu = new TQPopupMenu( this, "Project" ); menubar->insertItem( i18n( "Pr&oject" ), projectMenu ); TQActionGroup *ag = new TQActionGroup( this, 0 ); ag->setText( i18n( "Active Project" ) ); ag->setMenuText( i18n( "Active Project" ) ); ag->setExclusive( TRUE ); ag->setUsesDropDown( TRUE ); connect( ag, TQT_SIGNAL( selected( TQAction * ) ), TQT_TQOBJECT(this), TQT_SLOT( projectSelected( TQAction * ) ) ); connect( ag, TQT_SIGNAL( selected( TQAction * ) ), TQT_TQOBJECT(this), TQT_SIGNAL( projectChanged() ) ); DesignerAction *a = new DesignerAction( i18n( "" ), i18n( "" ), 0, ag, 0, TRUE ); eProject = new Project( "", i18n( "" ), projectSettingsPluginManager, TRUE ); projects.insert( a, eProject ); a->setOn( TRUE ); ag->addTo( projectMenu ); ag->addTo( projectToolBar ); actionGroupProjects = ag; if ( !singleProject ) projectMenu->insertSeparator(); a = new DesignerAction( i18n( "Add File" ), TQPixmap(), i18n( "&Add File..." ), 0, TQT_TQOBJECT(this), 0 ); actionProjectAddFile = a; a->setStatusTip( i18n("Adds a file to the current project") ); a->setWhatsThis( whatsThisFrom( "Project|Add File" ) ); connect( a, TQT_SIGNAL( activated() ), TQT_TQOBJECT(this), TQT_SLOT( projectInsertFile() ) ); a->setEnabled( FALSE ); connect( this, TQT_SIGNAL( hasNonDummyProject(bool) ), a, TQT_SLOT( setEnabled(bool) ) ); if ( !singleProject ) a->addTo( projectMenu ); actionEditPixmapCollection = new DesignerAction( i18n( "Image Collection..." ), TQPixmap(), i18n( "&Image Collection..." ), 0, TQT_TQOBJECT(this), 0 ); actionEditPixmapCollection->setStatusTip( i18n("Opens a dialog for editing the current project's image collection") ); actionEditPixmapCollection->setWhatsThis( whatsThisFrom( "Project|Image Collection" ) ); connect( actionEditPixmapCollection, TQT_SIGNAL( activated() ), TQT_TQOBJECT(this), TQT_SLOT( editPixmapCollection() ) ); actionEditPixmapCollection->setEnabled( FALSE ); connect( this, TQT_SIGNAL( hasNonDummyProject(bool) ), actionEditPixmapCollection, TQT_SLOT( setEnabled(bool) ) ); actionEditPixmapCollection->addTo( projectMenu ); #ifndef TQT_NO_SQL actionEditDatabaseConnections = new DesignerAction( i18n( "Database Connections..." ), TQPixmap(), i18n( "&Database Connections..." ), 0, TQT_TQOBJECT(this), 0 ); actionEditDatabaseConnections->setStatusTip( i18n("Opens a dialog for editing the current project's database connections") ); actionEditDatabaseConnections->setWhatsThis( whatsThisFrom( "Project|Database Connections" ) ); connect( actionEditDatabaseConnections, TQT_SIGNAL( activated() ), TQT_TQOBJECT(this), TQT_SLOT( editDatabaseConnections() ) ); //actionEditDatabaseConnections->setEnabled( FALSE ); //connect( this, TQT_SIGNAL( hasNonDummyProject(bool) ), actionEditDatabaseConnections, TQT_SLOT( setEnabled(bool) ) ); if ( !singleProject ) actionEditDatabaseConnections->addTo( projectMenu ); #endif actionEditProjectSettings = new DesignerAction( i18n( "Project Settings..." ), TQPixmap(), i18n( "&Project Settings..." ), 0, TQT_TQOBJECT(this), 0 ); actionEditProjectSettings->setStatusTip( i18n("Opens a dialog to change the project's settings") ); actionEditProjectSettings->setWhatsThis( whatsThisFrom( "Project|Project Settings" ) ); connect( actionEditProjectSettings, TQT_SIGNAL( activated() ), TQT_TQOBJECT(this), TQT_SLOT( editProjectSettings() ) ); actionEditProjectSettings->setEnabled( FALSE ); connect( this, TQT_SIGNAL( hasNonDummyProject(bool) ), actionEditProjectSettings, TQT_SLOT( setEnabled(bool) ) ); actionEditProjectSettings->addTo( projectMenu ); } void MainWindow::setupPreviewActions() { DesignerAction* a = 0; TQPopupMenu *menu = new TQPopupMenu( this, "Preview" ); layoutMenu = menu; menubar->insertItem( i18n( "&Preview" ), menu, toolsMenuId + 2 ); a = new DesignerAction( i18n( "Preview Form" ), TQPixmap(), i18n( "Preview &Form" ), 0, TQT_TQOBJECT(this), 0 ); actionPreview = a; a->setAccel( CTRL + Key_T ); a->setStatusTip( i18n("Opens a preview") ); a->setWhatsThis( whatsThisFrom( "Preview|Preview Form" ) ); connect( a, TQT_SIGNAL( activated() ), TQT_TQOBJECT(this), TQT_SLOT( previewForm() ) ); connect( this, TQT_SIGNAL( hasActiveForm(bool) ), a, TQT_SLOT( setEnabled(bool) ) ); a->addTo( menu ); menu->insertSeparator(); TQSignalMapper *mapper = new TQSignalMapper( TQT_TQOBJECT(this) ); connect( mapper, TQT_SIGNAL(mapped(const TQString&)), TQT_TQOBJECT(this), TQT_SLOT(previewForm(const TQString&)) ); TQStringList styles = TQStyleFactory::keys(); for ( TQStringList::Iterator it = styles.begin(); it != styles.end(); ++it ) { TQString info; if ( *it == "Motif" ) info = i18n( "The preview will use the Motif look and feel which is used as the default style on most UNIX systems." ); else if ( *it == "Windows" ) info = i18n( "The preview will use the Windows look and feel." ); else if ( *it == "Platinum" ) info = i18n( "The preview will use the Platinum look and feel which is similar to the Macintosh GUI style." ); else if ( *it == "CDE" ) info = i18n( "The preview will use the CDE look and feel which is similar to some versions of the Common Desktop Environment." ); else if ( *it == "SGI" ) info = i18n( "The preview will use the Motif look and feel which is used as the default style on SGI systems." ); else if ( *it == "MotifPlus" ) info = i18n( "The preview will use the advanced Motif look and feel used by the GIMP toolkit (GTK) on Linux." ); a = new DesignerAction( i18n( "Preview Form in %1 Style" ).arg( *it ), TQPixmap(), i18n( "... in %1 Style" ).arg( *it ), 0, TQT_TQOBJECT(this), 0 ); a->setStatusTip( i18n("Opens a preview in %1 style").arg( *it ) ); a->setWhatsThis( i18n("Open a preview in %1 style." "

Use the preview to test the design and " "signal-slot connections of the current form. %2

").arg( *it ).arg( info ) ); mapper->setMapping( a, *it ); connect( a, TQT_SIGNAL(activated()), mapper, TQT_SLOT(map()) ); connect( this, TQT_SIGNAL( hasActiveForm(bool) ), a, TQT_SLOT( setEnabled(bool) ) ); a->addTo( menu ); } } void MainWindow::setupWindowActions() { /* static bool windowActionsSetup = FALSE; if ( !windowActionsSetup ) { windowActionsSetup = TRUE; */ actionWindowTile = new DesignerAction( i18n( "Tile" ), i18n( "&Tile" ), 0, TQT_TQOBJECT(this) ); actionWindowTile->setStatusTip( i18n("Tiles the windows so that they are all visible") ); actionWindowTile->setWhatsThis( whatsThisFrom( "Window|Tile" ) ); connect( actionWindowTile, TQT_SIGNAL( activated() ), qworkspace, TQT_SLOT( tile() ) ); actionWindowCascade = new DesignerAction( i18n( "Cascade" ), i18n( "&Cascade" ), 0, TQT_TQOBJECT(this) ); actionWindowCascade->setStatusTip( i18n("Cascades the windows so that all their title bars are visible") ); actionWindowCascade->setWhatsThis( whatsThisFrom( "Window|Cascade" ) ); connect( actionWindowCascade, TQT_SIGNAL( activated() ), qworkspace, TQT_SLOT( cascade() ) ); actionWindowClose = new DesignerAction( i18n( "Close" ), i18n( "Cl&ose" ), CTRL + Key_F4, TQT_TQOBJECT(this) ); actionWindowClose->setStatusTip( i18n( "Closes the active window") ); actionWindowClose->setWhatsThis( whatsThisFrom( "Window|Close" ) ); connect( actionWindowClose, TQT_SIGNAL( activated() ), qworkspace, TQT_SLOT( closeActiveWindow() ) ); actionWindowCloseAll = new DesignerAction( i18n( "Close All" ), i18n( "Close Al&l" ), 0, TQT_TQOBJECT(this) ); actionWindowCloseAll->setStatusTip( i18n( "Closes all form windows") ); actionWindowCloseAll->setWhatsThis( whatsThisFrom( "Window|Close All" ) ); connect( actionWindowCloseAll, TQT_SIGNAL( activated() ), qworkspace, TQT_SLOT( closeAllWindows() ) ); actionWindowNext = new DesignerAction( i18n( "Next" ), i18n( "Ne&xt" ), CTRL + Key_F6, TQT_TQOBJECT(this) ); actionWindowNext->setStatusTip( i18n( "Activates the next window" ) ); actionWindowNext->setWhatsThis( whatsThisFrom( "Window|Next" ) ); connect( actionWindowNext, TQT_SIGNAL( activated() ), qworkspace, TQT_SLOT( activateNextWindow() ) ); actionWindowPrevious = new DesignerAction( i18n( "Previous" ), i18n( "Pre&vious" ), CTRL + SHIFT + Key_F6, TQT_TQOBJECT(this) ); actionWindowPrevious->setStatusTip( i18n( "Activates the previous window" ) ); actionWindowPrevious->setWhatsThis( whatsThisFrom( "Window|Previous" ) ); connect( actionWindowPrevious, TQT_SIGNAL( activated() ), qworkspace, TQT_SLOT( activatePreviousWindow() ) ); // } if ( !windowMenu ) { windowMenu = new TQPopupMenu( this, "Window" ); menubar->insertItem( i18n( "&Window" ), windowMenu ); connect( windowMenu, TQT_SIGNAL( aboutToShow() ), this, TQT_SLOT( setupWindowActions() ) ); } else { windowMenu->clear(); } actionWindowClose->addTo( windowMenu ); actionWindowCloseAll->addTo( windowMenu ); windowMenu->insertSeparator(); actionWindowNext->addTo( windowMenu ); actionWindowPrevious->addTo( windowMenu ); windowMenu->insertSeparator(); actionWindowTile->addTo( windowMenu ); actionWindowCascade->addTo( windowMenu ); windowMenu->insertSeparator(); windowMenu->insertItem( i18n( "Vie&ws" ), createDockWindowMenu( NoToolBars ) ); windowMenu->insertItem( i18n( "Tool&bars" ), createDockWindowMenu( OnlyToolBars ) ); TQWidgetList windows = qworkspace->windowList(); if ( windows.count() && formWindow() ) windowMenu->insertSeparator(); int j = 0; for ( int i = 0; i < int( windows.count() ); ++i ) { TQWidget *w = windows.at( i ); if ( !::tqqt_cast(w) && !::tqqt_cast(w) ) continue; if ( ::tqqt_cast(w) && ( ( (FormWindow*)w )->isFake() ) ) continue; j++; TQString itemText; if ( j < 10 ) itemText = TQString("&%1 ").arg( j ); if ( ::tqqt_cast(w) ) itemText += w->name(); else itemText += w->caption(); int id = windowMenu->insertItem( itemText, TQT_TQOBJECT(this), TQT_SLOT( windowsMenuActivated( int ) ) ); windowMenu->setItemParameter( id, i ); windowMenu->setItemChecked( id, qworkspace->activeWindow() == windows.at( i ) ); } } void MainWindow::setupHelpActions() { actionHelpContents = new DesignerAction( i18n( "Contents" ), i18n( "&Contents" ), Key_F1, TQT_TQOBJECT(this), 0 ); actionHelpContents->setStatusTip( i18n("Opens the online help") ); actionHelpContents->setWhatsThis( whatsThisFrom( "Help|Contents" ) ); connect( actionHelpContents, TQT_SIGNAL( activated() ), TQT_TQOBJECT(this), TQT_SLOT( helpContents() ) ); actionHelpManual = new DesignerAction( i18n( "Manual" ), i18n( "&Manual" ), CTRL + Key_M, TQT_TQOBJECT(this), 0 ); actionHelpManual->setStatusTip( i18n("Opens the TQt Designer manual") ); actionHelpManual->setWhatsThis( whatsThisFrom( "Help|Manual" ) ); connect( actionHelpManual, TQT_SIGNAL( activated() ), TQT_TQOBJECT(this), TQT_SLOT( helpManual() ) ); actionHelpAbout = new DesignerAction( i18n("About"), TQPixmap(), i18n("&About"), 0, TQT_TQOBJECT(this), 0 ); actionHelpAbout->setStatusTip( i18n("Displays information about TQt Designer") ); actionHelpAbout->setWhatsThis( whatsThisFrom( "Help|About" ) ); connect( actionHelpAbout, TQT_SIGNAL( activated() ), TQT_TQOBJECT(this), TQT_SLOT( helpAbout() ) ); actionHelpAboutTQt = new DesignerAction( i18n("About TQt"), TQPixmap(), i18n("About &TQt"), 0, TQT_TQOBJECT(this), 0 ); actionHelpAboutTQt->setStatusTip( i18n("Displays information about the TQt Toolkit") ); actionHelpAboutTQt->setWhatsThis( whatsThisFrom( "Help|About TQt" ) ); connect( actionHelpAboutTQt, TQT_SIGNAL( activated() ), TQT_TQOBJECT(this), TQT_SLOT( helpAboutTQt() ) ); #if 0 //defined(TQT_NON_COMMERCIAL) // ### not used anymore -- should be deleted? actionHelpRegister = new DesignerAction( i18n("Register TQt"), TQPixmap(), i18n("&Register TQt..."), 0, TQT_TQOBJECT(this), 0 ); actionHelpRegister->setStatusTip( i18n("Opens a web browser at the evaluation form on www.trolltech.com") ); actionHelpRegister->setWhatsThis( i18n("Register with Trolltech") ); connect( actionHelpRegister, TQT_SIGNAL( activated() ), TQT_TQOBJECT(this), TQT_SLOT( helpRegister() ) ); #endif actionHelpWhatsThis = new DesignerAction( i18n("What's This?"), TQIconSet( whatsthis_image, whatsthis_image ), i18n("What's This?"), SHIFT + Key_F1, TQT_TQOBJECT(this), 0 ); actionHelpWhatsThis->setStatusTip( i18n("\"What's This?\" context sensitive help") ); actionHelpWhatsThis->setWhatsThis( whatsThisFrom( "Help|What's This?" ) ); connect( actionHelpWhatsThis, TQT_SIGNAL( activated() ), TQT_TQOBJECT(this), TQT_SLOT( whatsThis() ) ); /* TQToolBar *tb = new TQToolBar( this, "Help" ); tb->setCloseMode( TQDockWindow::Undocked ); TQWhatsThis::add( tb, i18n( "The Help toolbar%1" ).arg(i18n(toolbarHelp).arg("") )); addToolBar( tb, i18n( "Help" ) ); actionHelpWhatsThis->addTo( tb );*/ TQPopupMenu *menu = new TQPopupMenu( this, "Help" ); menubar->insertSeparator(); menubar->insertItem( i18n( "&Help" ), menu ); actionHelpContents->addTo( menu ); actionHelpManual->addTo( menu ); menu->insertSeparator(); actionHelpAbout->addTo( menu ); actionHelpAboutTQt->addTo( menu ); #if 0 //defined(TQT_NON_COMMERCIAL) // ### not used anymore -- should be deleted? actionHelpRegister->addTo( menu ); #endif menu->insertSeparator(); actionHelpWhatsThis->addTo( menu ); } void MainWindow::fileNew() { statusMessage( i18n( "Create a new project, form or source file...") ); NewForm dlg( this, projectNames(), currentProject->projectName(), templatePath() ); dlg.exec(); statusBar()->clear(); } void MainWindow::fileNewDialog() { static int forms = 0; TQString n = "Dialog" + TQString::number( ++forms ); while ( currentProject->findFormFile( n + ".ui" ) ) n = "Dialog" + TQString::number( ++forms ); FormWindow *fw = 0; FormFile *ff = new FormFile( n + ".ui", FALSE, currentProject ); fw = new FormWindow( ff, MainWindow::self, MainWindow::self->qWorkspace(), n ); ff->setModified( TRUE ); currentProject->setModified( TRUE ); workspace()->update(); fw->setProject( currentProject ); MetaDataBase::addEntry( TQT_TQOBJECT(fw) ); TQWidget *w = WidgetFactory::create( WidgetDatabase::idFromClassName( TQDIALOG_OBJECT_NAME_STRING ), fw, n.latin1() ); fw->setMainContainer( w ); fw->setCaption( n ); fw->resize( 600, 480 ); insertFormWindow( fw ); fw->killAccels( TQT_TQOBJECT(fw) ); fw->project()->setModified( TRUE ); fw->setFocus(); fw->setSavePixmapInProject( TRUE ); fw->setSavePixmapInline( FALSE ); } void MainWindow::fileNewFile() { TQString name = TQInputDialog::getText( i18n( "Name of File" ), i18n( "Enter the name of the new source file:" ) ); if ( name.isEmpty() ) return; if ( name.right( 3 ) != ".qs" ) name += ".qs"; SourceFile *f = new SourceFile( name, FALSE, currentProject ); MainWindow::self->editSource( f ); f->setModified( TRUE ); currentProject->setModified( TRUE ); workspace()->update(); } void MainWindow::fileQuit() { close(); if ( !singleProjectMode() ) tqApp->closeAllWindows(); } void MainWindow::fileClose() { if ( !currentProject->isDummy() ) { fileCloseProject(); } else { TQWidget *w = qworkspace->activeWindow(); if ( w ) { if ( ::tqqt_cast(w) ) ( (FormWindow*)w )->formFile()->close(); else if ( ::tqqt_cast(w) ) ( (SourceEditor*)w )->close(); } } } void MainWindow::fileCloseProject() { if ( currentProject->isDummy() ) return; Project *pro = currentProject; TQAction* a = 0; TQAction* lastValid = 0; for ( TQMap::Iterator it = projects.begin(); it != projects.end(); ++it ) { if ( it.data() == pro ) { a = it.key(); if ( lastValid ) break; } lastValid = it.key(); } if ( a ) { if ( pro->isModified() ) { switch ( TQMessageBox::warning( this, i18n( "Save Project Settings" ), i18n( "Save changes to '%1'?" ).arg( pro->fileName() ), i18n( "&Yes" ), i18n( "&No" ), i18n( "&Cancel" ), 0, 2 ) ) { case 0: // save pro->save(); break; case 1: // don't save break; case 2: // cancel return; default: break; } } TQWidgetList windows = qWorkspace()->windowList(); qWorkspace()->blockSignals( TRUE ); TQWidgetListIt wit( windows ); while ( wit.current() ) { TQWidget *w = wit.current(); ++wit; if ( ::tqqt_cast(w) ) { if ( ( (FormWindow*)w )->project() == pro ) { if ( ( (FormWindow*)w )->formFile()->editor() ) windows.removeRef( ( (FormWindow*)w )->formFile()->editor() ); if ( !( (FormWindow*)w )->formFile()->close() ) return; } } else if ( ::tqqt_cast(w) ) { if ( !( (SourceEditor*)w )->close() ) return; } } hierarchyView->clear(); windows = qWorkspace()->windowList(); qWorkspace()->blockSignals( FALSE ); actionGroupProjects->removeChild( a ); projects.remove( a ); delete a; currentProject = 0; if ( lastValid ) { projectSelected( lastValid ); statusMessage( i18n( "Selected project '%1'" ).arg( currentProject->projectName() ) ); } if ( !windows.isEmpty() ) { for ( TQWidget *w = windows.first(); w; w = windows.next() ) { if ( !::tqqt_cast(w) ) continue; w->setFocus(); activeWindowChanged( w ); break; } } else { emit hasActiveWindow( FALSE ); emit hasActiveForm( FALSE ); updateUndoRedo( FALSE, FALSE, TQString(), TQString() ); } } } void MainWindow::fileOpen() // as called by the menu { fileOpen( "", "", "", FALSE ); } void MainWindow::projectInsertFile() { fileOpen( "", "" ); } void MainWindow::fileOpen( const TQString &filter, const TQString &extension, const TQString &fn, bool inProject ) { statusMessage( i18n( "Open a file...") ); TQPluginManager manager( IID_ImportFilter, TQApplication::libraryPaths(), pluginDirectory() ); Project* project = inProject ? currentProject : eProject; TQStringList additionalSources; { TQStringList filterlist; if ( filter.isEmpty() ) { if ( !inProject ) filterlist << i18n( "*.ui *.pro|Designer Files" ); filterlist << i18n( "*.ui|TQt User-Interface Files" ); if ( !inProject ) filterlist << i18n( "*.pro|TQMAKE Project Files" ); TQStringList list = manager.featureList(); for ( TQStringList::Iterator it = list.begin(); it != list.end(); ++it ) filterlist << *it; LanguageInterface *iface = MetaDataBase::languageInterface( project->language() ); if ( iface ) { filterlist += iface->fileFilterList(); additionalSources += iface->fileExtensionList(); } filterlist << i18n( "*|All Files" ); } else { filterlist << filter; } TQString filters = filterlist.join( "\n" ); TQStringList filenames; if ( fn.isEmpty() ) { if ( !inProject ) { TQString f = KFileDialog::getOpenFileName( TQString(), filters, this, /*0,*/ i18n("Open" )/*, &lastOpenFilter */); filenames << f; } else { filenames = KFileDialog::getOpenFileNames( TQString(), filters, this, /*0,*/ i18n("Add")/*, &lastOpenFilter */); } } else { filenames << fn; } for ( TQStringList::Iterator fit = filenames.begin(); fit != filenames.end(); ++fit ) { TQString filename = *fit; if ( !filename.isEmpty() ) { TQFileInfo fi( filename ); if ( fi.extension( FALSE ) == "pro" && ( extension.isEmpty() || extension.find( ";pro" ) != -1 ) ) { addRecentlyOpened( filename, recentlyProjects ); openProject( filename ); } else if ( fi.extension( FALSE ) == "ui" && ( extension.isEmpty() || extension.find( ";ui" ) != -1 ) ) { if ( !inProject ) setCurrentProject( eProject ); openFormWindow( filename ); addRecentlyOpened( filename, recentlyFiles ); } else if ( !extension.isEmpty() && extension.find( ";" + fi.extension( FALSE ) ) != -1 || additionalSources.find( fi.extension( FALSE ) ) != additionalSources.end() ) { SourceFile *sf = project->findSourceFile( project->makeRelative( filename ) ); if ( !sf ) sf = new SourceFile( project->makeRelative( filename ), FALSE, project ); editSource( sf ); } else if ( extension.isEmpty() ) { TQString filter; for ( TQStringList::Iterator it2 = filterlist.begin(); it2 != filterlist.end(); ++it2 ) { if ( (*it2).contains( "." + fi.extension( FALSE ), FALSE ) ) { filter = *it2; break; } } ImportFilterInterface* iface = 0; manager.queryInterface( filter, &iface ); if ( !iface ) { statusMessage( i18n( "No import filter is available to import '%1'"). arg( filename )/*, 3000*/ ); return; } statusMessage( i18n( "Importing '%1' using import filter ...").arg( filename ) ); TQStringList list = iface->import( filter, filename ); iface->release(); if ( list.isEmpty() ) { statusMessage( i18n( "Nothing to load in '%1'").arg( filename )/*, 3000*/ ); return; } if ( !inProject ) setCurrentProject( eProject ); addRecentlyOpened( filename, recentlyFiles ); for ( TQStringList::Iterator it = list.begin(); it != list.end(); ++it ) { openFormWindow( *it, FALSE ); TQFile::remove( *it ); } statusBar()->clear(); } } } } } FormWindow *MainWindow::openFormWindow( const TQString &filename, bool validFileName, FormFile *ff ) { if ( filename.isEmpty() ) return 0; bool makeNew = FALSE; if ( !TQFile::exists( filename ) ) { makeNew = TRUE; } else { TQFile f( filename ); f.open( IO_ReadOnly ); TQTextStream ts( &f ); makeNew = ts.read().length() < 2; } if ( makeNew ) { fileNew(); if ( formWindow() ) formWindow()->setFileName( filename ); return formWindow(); } statusMessage( i18n( "Reading file '%1'...").arg( filename ) ); FormFile *ff2 = currentProject->findFormFile( currentProject->makeRelative(filename) ); if ( ff2 && ff2->formWindow() ) { ff2->formWindow()->setFocus(); return ff2->formWindow(); } if ( ff2 ) ff = ff2; TQApplication::setOverrideCursor( WaitCursor ); Resource resource( this ); if ( !ff ) ff = new FormFile( currentProject->makeRelative( filename ), FALSE, currentProject ); bool b = resource.load( ff ) && (FormWindow*)resource.widget(); if ( !validFileName && resource.widget() ) ( (FormWindow*)resource.widget() )->setFileName( TQString() ); TQApplication::restoreOverrideCursor(); if ( b ) { rebuildCustomWidgetGUI(); statusMessage( i18n( "Loaded file '%1'").arg( filename )/*, 3000 */); } else { statusMessage( i18n( "Failed to load file '%1'").arg( filename )/*, 5000 */); TQMessageBox::information( this, i18n("Load File"), i18n("Could not load file '%1'.").arg( filename ) ); delete ff; } return (FormWindow*)resource.widget(); } bool MainWindow::fileSave() { if ( !currentProject->isDummy() ) return fileSaveProject(); return fileSaveForm(); } bool MainWindow::fileSaveForm() { for ( SourceEditor *e = sourceEditors.first(); e; e = sourceEditors.next() ) { if ( TQT_BASE_OBJECT(e->object()) == formWindow() || e == qWorkspace()->activeWindow() ) { e->save(); } } FormWindow *fw = 0; TQWidget *w = qWorkspace()->activeWindow(); if ( w ) { if ( ::tqqt_cast(w) ) { SourceEditor *se = (SourceEditor*)w; if ( se->formWindow() ) fw = se->formWindow(); else if ( se->sourceFile() ) { se->sourceFile()->save(); return TRUE; } } } if ( !fw ) fw = formWindow(); if ( !fw || !fw->formFile()->save() ) return FALSE; TQApplication::restoreOverrideCursor(); return TRUE; } bool MainWindow::fileSaveProject() { currentProject->save(); statusMessage( i18n( "Project '%1' saved.").arg( currentProject->projectName() )/*, 3000 */); return TRUE; } bool MainWindow::fileSaveAs() { statusMessage( i18n( "Enter a filename..." ) ); TQWidget *w = qworkspace->activeWindow(); if ( !w ) return TRUE; if ( ::tqqt_cast(w) ) return ( (FormWindow*)w )->formFile()->saveAs(); else if ( ::tqqt_cast(w) ) return ( (SourceEditor*)w )->saveAs(); return FALSE; } void MainWindow::fileSaveAll() { for ( TQMap::Iterator it = projects.begin(); it != projects.end(); ++it ) (*it)->save(); } void MainWindow::fileCreateTemplate() { CreateTemplate dia( this, 0, TRUE ); int i = 0; for ( i = 0; i < WidgetDatabase::count(); ++i ) { if ( WidgetDatabase::isForm( i ) && WidgetDatabase::group( i ) != "Temp") { dia.listClass->insertItem( WidgetDatabase::className( i ) ); } } for ( i = 0; i < WidgetDatabase::count(); ++i ) { if ( WidgetDatabase::isContainer( i ) && !WidgetDatabase::isForm(i) && WidgetDatabase::className( i ) != TQTABWIDGET_OBJECT_NAME_STRING && WidgetDatabase::group( i ) != "Temp" ) { dia.listClass->insertItem( WidgetDatabase::className( i ) ); } } TQPtrList *lst = MetaDataBase::customWidgets(); for ( MetaDataBase::CustomWidget *w = lst->first(); w; w = lst->next() ) { if ( w->isContainer ) dia.listClass->insertItem( w->className ); } dia.editName->setText( i18n( "NewTemplate" ) ); connect( dia.buttonCreate, TQT_SIGNAL( clicked() ), this, TQT_SLOT( createNewTemplate() ) ); dia.exec(); } void MainWindow::createNewTemplate() { CreateTemplate *dia = (CreateTemplate*)TQT_TQOBJECT(const_cast(sender()))->parent(); TQString fn = dia->editName->text(); TQString cn = dia->listClass->currentText(); if ( fn.isEmpty() || cn.isEmpty() ) { TQMessageBox::information( this, i18n( "Create Template" ), i18n( "Could not create the template." ) ); return; } TQStringList templRoots; const char *qtdir = getenv( "QTDIR" ); if(qtdir) templRoots << qtdir; templRoots << tqInstallPathData(); if(qtdir) //try the tools/designer directory last! templRoots << (TQString(qtdir) + "/tools/designer"); TQFile f; for ( TQStringList::Iterator it = templRoots.begin(); it != templRoots.end(); ++it ) { if ( TQFile::exists( (*it) + "/templates/" )) { TQString tmpfn = (*it) + "/templates/" + fn + ".ui"; f.setName(tmpfn); if(f.open(IO_WriteOnly)) break; } } if ( !f.isOpen() ) { TQMessageBox::information( this, i18n( "Create Template" ), i18n( "Could not create the template." ) ); return; } TQTextStream ts( &f ); ts << "" << endl; ts << "" << endl; ts << "" << cn << "" << endl; ts << "" << endl; ts << " name" << endl; ts << " " << cn << "Form" << endl; ts << "" << endl; ts << "" << endl; ts << " geometry" << endl; ts << " " << endl; ts << " 300" << endl; ts << " 400" << endl; ts << " " << endl; ts << "" << endl; ts << "" << endl; ts << "" << endl; dia->editName->setText( i18n( "NewTemplate" ) ); f.close(); } void MainWindow::editUndo() { if ( qWorkspace()->activeWindow() && ::tqqt_cast(qWorkspace()->activeWindow()) ) { ( (SourceEditor*)qWorkspace()->activeWindow() )->editUndo(); return; } if ( formWindow() ) formWindow()->undo(); } void MainWindow::editRedo() { if ( qWorkspace()->activeWindow() && ::tqqt_cast(qWorkspace()->activeWindow()) ) { ( (SourceEditor*)qWorkspace()->activeWindow() )->editRedo(); return; } if ( formWindow() ) formWindow()->redo(); } void MainWindow::editCut() { if ( qWorkspace()->activeWindow() && ::tqqt_cast(qWorkspace()->activeWindow()) ) { ( (SourceEditor*)qWorkspace()->activeWindow() )->editCut(); return; } editCopy(); editDelete(); } void MainWindow::editCopy() { if ( qWorkspace()->activeWindow() && ::tqqt_cast(qWorkspace()->activeWindow()) ) { ( (SourceEditor*)qWorkspace()->activeWindow() )->editCopy(); return; } if ( formWindow() ) tqApp->clipboard()->setText( formWindow()->copy() ); } void MainWindow::editPaste() { if ( qWorkspace()->activeWindow() && ::tqqt_cast(qWorkspace()->activeWindow()) ) { ( (SourceEditor*)qWorkspace()->activeWindow() )->editPaste(); return; } if ( !formWindow() ) return; TQWidget *w = formWindow()->mainContainer(); TQWidgetList l( formWindow()->selectedWidgets() ); if ( l.count() == 1 ) { w = l.first(); if ( WidgetFactory::layoutType( w ) != WidgetFactory::NoLayout || ( !WidgetDatabase::isContainer( WidgetDatabase::idFromClassName( WidgetFactory::classNameOf( TQT_TQOBJECT(w) ) ) ) && w != formWindow()->mainContainer() ) ) w = formWindow()->mainContainer(); } if ( w && WidgetFactory::layoutType( w ) == WidgetFactory::NoLayout ) { formWindow()->paste( tqApp->clipboard()->text(), WidgetFactory::containerOfWidget( w ) ); hierarchyView->widgetInserted( 0 ); formWindow()->commandHistory()->setModified( TRUE ); } else { TQMessageBox::information( this, i18n( "Paste Error" ), i18n( "Cannot paste widgets. Designer could not find a container\n" "to paste into which does not contain a layout. Break the layout\n" "of the container you want to paste into and select this container\n" "and then paste again." ) ); } } void MainWindow::editDelete() { if ( formWindow() ) formWindow()->deleteWidgets(); } void MainWindow::editSelectAll() { if ( qWorkspace()->activeWindow() && ::tqqt_cast(qWorkspace()->activeWindow()) ) { ( (SourceEditor*)qWorkspace()->activeWindow() )->editSelectAll(); return; } if ( formWindow() ) formWindow()->selectAll(); } void MainWindow::editLower() { if ( formWindow() ) formWindow()->lowerWidgets(); } void MainWindow::editRaise() { if ( formWindow() ) formWindow()->raiseWidgets(); } void MainWindow::editAdjustSize() { if ( formWindow() ) formWindow()->editAdjustSize(); } void MainWindow::editLayoutHorizontal() { if ( layoutChilds ) editLayoutContainerHorizontal(); else if ( layoutSelected && formWindow() ) formWindow()->layoutHorizontal(); } void MainWindow::editLayoutVertical() { if ( layoutChilds ) editLayoutContainerVertical(); else if ( layoutSelected && formWindow() ) formWindow()->layoutVertical(); } void MainWindow::editLayoutHorizontalSplit() { if ( layoutChilds ) ; // no way to do that else if ( layoutSelected && formWindow() ) formWindow()->layoutHorizontalSplit(); } void MainWindow::editLayoutVerticalSplit() { if ( layoutChilds ) ; // no way to do that else if ( layoutSelected && formWindow() ) formWindow()->layoutVerticalSplit(); } void MainWindow::editLayoutGrid() { if ( layoutChilds ) editLayoutContainerGrid(); else if ( layoutSelected && formWindow() ) formWindow()->layoutGrid(); } void MainWindow::editLayoutContainerVertical() { if ( !formWindow() ) return; TQWidget *w = formWindow()->mainContainer(); TQWidgetList l( formWindow()->selectedWidgets() ); if ( l.count() == 1 ) w = l.first(); if ( w ) formWindow()->layoutVerticalContainer( w ); } void MainWindow::editLayoutContainerHorizontal() { if ( !formWindow() ) return; TQWidget *w = formWindow()->mainContainer(); TQWidgetList l( formWindow()->selectedWidgets() ); if ( l.count() == 1 ) w = l.first(); if ( w ) formWindow()->layoutHorizontalContainer( w ); } void MainWindow::editLayoutContainerGrid() { if ( !formWindow() ) return; TQWidget *w = formWindow()->mainContainer(); TQWidgetList l( formWindow()->selectedWidgets() ); if ( l.count() == 1 ) w = l.first(); if ( w ) formWindow()->layoutGridContainer( w ); } void MainWindow::editBreakLayout() { if ( !formWindow() || !breakLayout ) return; TQWidget *w = formWindow()->mainContainer(); if ( formWindow()->currentWidget() ) w = formWindow()->currentWidget(); if ( WidgetFactory::layoutType( w ) != WidgetFactory::NoLayout || w->parentWidget() && WidgetFactory::layoutType( w->parentWidget() ) != WidgetFactory::NoLayout ) { formWindow()->breakLayout( w ); return; } else { TQWidgetList widgets = formWindow()->selectedWidgets(); for ( w = widgets.first(); w; w = widgets.next() ) { if ( WidgetFactory::layoutType( w ) != WidgetFactory::NoLayout || w->parentWidget() && WidgetFactory::layoutType( w->parentWidget() ) != WidgetFactory::NoLayout ) break; } if ( w ) { formWindow()->breakLayout( w ); return; } } w = formWindow()->mainContainer(); if ( WidgetFactory::layoutType( w ) != WidgetFactory::NoLayout || w->parentWidget() && WidgetFactory::layoutType( w->parentWidget() ) != WidgetFactory::NoLayout ) formWindow()->breakLayout( w ); } void MainWindow::editAccels() { if ( !formWindow() ) return; formWindow()->checkAccels(); } void MainWindow::editFunctions() { if ( !formWindow() ) return; statusMessage( i18n( "Edit the current form's slots..." ) ); EditFunctions dlg( this, formWindow(), TRUE ); dlg.exec(); statusBar()->clear(); } void MainWindow::editConnections() { if ( !formWindow() ) return; statusMessage( i18n( "Edit the current form's connections..." ) ); ConnectionDialog dlg( this ); dlg.exec(); statusBar()->clear(); } SourceEditor *MainWindow::editSource() { if ( !formWindow() ) return 0; return formWindow()->formFile()->showEditor(); } SourceEditor *MainWindow::openSourceEditor() { if ( !formWindow() ) return 0; TQString lang = currentProject->language(); if ( !MetaDataBase::hasEditor( lang ) ) { TQMessageBox::information( this, i18n( "Edit Source" ), i18n( "There is no plugin for editing %1 code installed.\n" "Note: Plugins are not available in static TQt configurations." ).arg( lang ) ); return 0; } SourceEditor *editor = 0; for ( SourceEditor *e = sourceEditors.first(); e; e = sourceEditors.next() ) { if ( e->language() == lang && e->formWindow() == formWindow() ) { editor = e; break; } } if ( !editor ) editor = createSourceEditor( TQT_TQOBJECT(formWindow()), formWindow()->project(), lang ); return editor; } SourceEditor *MainWindow::editSource( SourceFile *f ) { TQString lang = currentProject->language(); if ( !MetaDataBase::hasEditor( lang ) ) { TQMessageBox::information( this, i18n( "Edit Source" ), i18n( "There is no plugin for editing %1 code installed.\n" "Note: Plugins are not available in static TQt configurations." ).arg( lang ) ); return 0; } SourceEditor *editor = 0; if ( f ) editor = f->editor(); if ( !editor ) editor = createSourceEditor( f, currentProject, lang ); editor->setActiveWindow(); editor->setFocus(); return editor; } SourceEditor *MainWindow::createSourceEditor( TQObject *object, Project *project, const TQString &lang, const TQString &func, bool rereadSource ) { SourceEditor *editor = 0; EditorInterface *eIface = 0; editorPluginManager->queryInterface( lang, &eIface ); if ( !eIface ) return 0; LanguageInterface *lIface = MetaDataBase::languageInterface( lang ); if ( !lIface ) return 0; TQApplication::setOverrideCursor( WaitCursor ); editor = new SourceEditor( qWorkspace(), eIface, lIface ); eIface->release(); lIface->release(); editor->setLanguage( lang ); sourceEditors.append( editor ); TQApplication::restoreOverrideCursor(); if ( editor->object() != object ) editor->setObject( object, project ); else if ( rereadSource ) editor->refresh( FALSE ); editor->show(); editor->setFocus(); if ( !func.isEmpty() ) editor->setFunction( func ); emit editorChanged(); return editor; } void MainWindow::editFormSettings() { if ( !formWindow() ) return; statusMessage( i18n( "Edit the current form's settings..." ) ); FormSettings dlg( this, formWindow() ); dlg.exec(); statusBar()->clear(); } void MainWindow::editProjectSettings() { openProjectSettings( currentProject ); wspace->setCurrentProject( currentProject ); } void MainWindow::editPixmapCollection() { PixmapCollectionEditor dia( this, 0, TRUE ); dia.setProject( currentProject ); dia.exec(); } void MainWindow::editDatabaseConnections() { #ifndef TQT_NO_SQL DatabaseConnectionsEditor dia( currentProject, this, 0, TRUE ); dia.exec(); #endif } void MainWindow::editPreferences() { statusMessage( i18n( "Edit preferences..." ) ); Preferences *dia = new Preferences( this, 0, TRUE ); prefDia = dia; connect( dia->helpButton, TQT_SIGNAL( clicked() ), MainWindow::self, TQT_SLOT( showDialogHelp() ) ); dia->buttonColor->setEditor( StyledButton::ColorEditor ); dia->buttonPixmap->setEditor( StyledButton::PixmapEditor ); dia->groupBoxGrid->setChecked( sGrid ); dia->checkBoxSnapGrid->setChecked( snGrid ); dia->spinGridX->setValue( grid().x() ); dia->spinGridY->setValue( grid().y() ); dia->checkBoxWorkspace->setChecked( restoreConfig ); dia->checkBoxTextLabels->setChecked( usesTextLabel() ); dia->buttonColor->setColor( qworkspace->backgroundColor() ); TQString pluginPaths = TQApplication::libraryPaths().join("\n"); dia->textEditPluginPaths->setText(pluginPaths); if ( qworkspace->backgroundPixmap() ) dia->buttonPixmap->setPixmap( *qworkspace->backgroundPixmap() ); if ( backPix ) dia->radioPixmap->setChecked( TRUE ); else dia->radioColor->setChecked( TRUE ); dia->checkBoxSplash->setChecked( splashScreen ); dia->checkAutoEdit->setChecked( !databaseAutoEdit ); dia->checkBoxStartDialog->setChecked( shStartDialog ); dia->checkBoxAutoSave->setChecked( autoSaveEnabled ); int h = autoSaveInterval / 3600; int m = ( autoSaveInterval - h * 3600 ) / 60; int s = autoSaveInterval - ( h * 3600 + m * 60 ); TQTime t( h, m, s ); dia->timeEditAutoSave->setTime( t ); SenderObject *senderObject = new SenderObject( designerInterface() ); TQValueList::Iterator it; for ( it = preferenceTabs.begin(); it != preferenceTabs.end(); ++it ) { Tab t = *it; dia->tabWidget->addTab( t.w, t.title ); if ( t.receiver ) { connect( dia->buttonOk, TQT_SIGNAL( clicked() ), senderObject, TQT_SLOT( emitAcceptSignal() ) ); connect( senderObject, TQT_SIGNAL( acceptSignal( TQUnknownInterface * ) ), t.receiver, t.accept_slot ); connect( senderObject, TQT_SIGNAL( initSignal( TQUnknownInterface * ) ), t.receiver, t.init_slot ); senderObject->emitInitSignal(); disconnect( senderObject, TQT_SIGNAL( initSignal( TQUnknownInterface * ) ), t.receiver, t.init_slot ); } } if ( dia->exec() == TQDialog::Accepted ) { setSnapGrid( dia->checkBoxSnapGrid->isChecked() ); setShowGrid( dia->groupBoxGrid->isChecked() ); setGrid( TQPoint( dia->spinGridX->value(), dia->spinGridY->value() ) ); restoreConfig = dia->checkBoxWorkspace->isChecked(); setUsesTextLabel( dia->checkBoxTextLabels->isChecked() ); if (dia->textEditPluginPaths->isModified()) { pluginPaths = dia->textEditPluginPaths->text(); TQApplication::setLibraryPaths(TQStringList::split("\n", pluginPaths)); savePluginPaths = TRUE; } if ( dia->radioPixmap->isChecked() && dia->buttonPixmap->pixmap() ) { qworkspace->setBackgroundPixmap( *dia->buttonPixmap->pixmap() ); backPix = TRUE; } else { qworkspace->setBackgroundColor( dia->buttonColor->color() ); backPix = FALSE; } splashScreen = dia->checkBoxSplash->isChecked(); databaseAutoEdit = !dia->checkAutoEdit->isChecked(); shStartDialog = dia->checkBoxStartDialog->isChecked(); autoSaveEnabled = dia->checkBoxAutoSave->isChecked(); TQTime time = dia->timeEditAutoSave->time(); autoSaveInterval = time.hour() * 3600 + time.minute() * 60 + time.second(); if ( autoSaveEnabled ) autoSaveTimer->start( autoSaveInterval * 1000 ); else autoSaveTimer->stop(); } delete senderObject; for ( it = preferenceTabs.begin(); it != preferenceTabs.end(); ++it ) { Tab t = *it; dia->tabWidget->removePage( t.w ); t.w->reparent( 0, TQPoint(0,0), FALSE ); } for ( SourceEditor *e = sourceEditors.first(); e; e = sourceEditors.next() ) e->configChanged(); delete dia; prefDia = 0; statusBar()->clear(); } void MainWindow::searchFind() { if ( !qWorkspace()->activeWindow() || !::tqqt_cast(qWorkspace()->activeWindow()) ) return; if ( !findDialog ) findDialog = new FindDialog( this, 0, FALSE ); findDialog->show(); findDialog->raise(); findDialog->setEditor( ( (SourceEditor*)qWorkspace()->activeWindow() )->editorInterface(), ( (SourceEditor*)qWorkspace()->activeWindow() )->object() ); findDialog->comboFind->setFocus(); findDialog->comboFind->lineEdit()->selectAll(); } void MainWindow::searchIncremetalFindMenu() { incrementalSearch->selectAll(); incrementalSearch->setFocus(); } void MainWindow::searchIncremetalFind() { if ( !qWorkspace()->activeWindow() || !::tqqt_cast(qWorkspace()->activeWindow()) ) return; ( (SourceEditor*)qWorkspace()->activeWindow() )->editorInterface()->find( incrementalSearch->text(), FALSE, FALSE, TRUE, FALSE ); } void MainWindow::searchIncremetalFindNext() { if ( !qWorkspace()->activeWindow() || !::tqqt_cast(qWorkspace()->activeWindow()) ) return; ( (SourceEditor*)qWorkspace()->activeWindow() )->editorInterface()->find( incrementalSearch->text(), FALSE, FALSE, TRUE, TRUE ); } void MainWindow::searchReplace() { if ( !qWorkspace()->activeWindow() || !::tqqt_cast(qWorkspace()->activeWindow()) ) return; if ( !replaceDialog ) replaceDialog = new ReplaceDialog( this, 0, FALSE ); replaceDialog->show(); replaceDialog->raise(); replaceDialog->setEditor( ( (SourceEditor*)qWorkspace()->activeWindow() )->editorInterface(), ( (SourceEditor*)qWorkspace()->activeWindow() )->object() ); replaceDialog->comboFind->setFocus(); replaceDialog->comboFind->lineEdit()->selectAll(); } void MainWindow::searchGotoLine() { if ( !qWorkspace()->activeWindow() || !::tqqt_cast(qWorkspace()->activeWindow()) ) return; if ( !gotoLineDialog ) gotoLineDialog = new GotoLineDialog( this, 0, FALSE ); gotoLineDialog->show(); gotoLineDialog->raise(); gotoLineDialog->setEditor( ( (SourceEditor*)qWorkspace()->activeWindow() )->editorInterface() ); gotoLineDialog->spinLine->setFocus(); gotoLineDialog->spinLine->setMinValue( 1 ); gotoLineDialog->spinLine->setMaxValue( ( (SourceEditor*)qWorkspace()->activeWindow() )->numLines() ); gotoLineDialog->spinLine->selectAll(); } void MainWindow::toolsCustomWidget() { statusMessage( i18n( "Edit custom widgets..." ) ); CustomWidgetEditor edit( this, this ); edit.exec(); rebuildCustomWidgetGUI(); statusBar()->clear(); } void MainWindow::toolsConfigure() { ConfigToolboxDialog dlg( this ); if ( dlg.exec() != TQDialog::Accepted ) return; rebuildCommonWidgetsToolBoxPage(); } void MainWindow::showStartDialog() { if ( singleProjectMode() ) return; for ( int i = 1; i < tqApp->argc(); ++i ) { TQString arg = tqApp->argv()[i]; if ( arg[0] != '-' ) return; } StartDialog *sd = new StartDialog( this, templatePath() ); sd->setRecentlyFiles( recentlyFiles ); sd->setRecentlyProjects( recentlyProjects ); sd->exec(); shStartDialog = sd->showDialogInFuture(); }