summaryrefslogtreecommitdiffstats
path: root/tdevdesigner/designer/tdevdesigner_part.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tdevdesigner/designer/tdevdesigner_part.cpp')
-rw-r--r--tdevdesigner/designer/tdevdesigner_part.cpp565
1 files changed, 565 insertions, 0 deletions
diff --git a/tdevdesigner/designer/tdevdesigner_part.cpp b/tdevdesigner/designer/tdevdesigner_part.cpp
new file mode 100644
index 00000000..def9aa7f
--- /dev/null
+++ b/tdevdesigner/designer/tdevdesigner_part.cpp
@@ -0,0 +1,565 @@
+/***************************************************************************
+ * Copyright (C) 2004 by Alexander Dymo *
+ * cloudtemple@mksat.net *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
+ ***************************************************************************/
+
+#include "tdevdesigner_part.h"
+
+#include <kinstance.h>
+#include <tdeaction.h>
+#include <tdeactionclasses.h>
+#include <kstdaction.h>
+#include <tdefiledialog.h>
+#include <kdebug.h>
+#include <tdelocale.h>
+#include <kiconloader.h>
+
+#include <tqfile.h>
+#include <tqtextstream.h>
+#include <tqtoolbar.h>
+#include <tqmenubar.h>
+#include <tqptrlist.h>
+#include <tqstatusbar.h>
+
+#include "mainwindow.h"
+#include "designeraction.h"
+#include "formwindow.h"
+
+TDevDesignerPart::TDevDesignerPart( TQWidget *parentWidget, const char *// widgetName
+ ,
+ TQObject *parent, const char *name, const TQStringList &args )
+ : KInterfaceDesigner::Designer(parent, name)
+{
+ setInstance( TDevDesignerPartFactory::instance() );
+
+ m_widget = new MainWindow( this, true );
+ m_widget->reparent(parentWidget, TQPoint(0,0));
+ setupDesignerWindow();
+
+ setWidget(m_widget);
+
+ setupActions();
+ if (args.contains("in shell"))
+ setXMLFile("tdevdesigner_part_sh.rc");
+ else
+ setXMLFile("tdevdesigner_part.rc");
+
+ setReadWrite(true);
+ setModified(false);
+
+ connect(m_widget, TQT_SIGNAL(formModified(bool )), this, TQT_SLOT(formModified(bool)));
+}
+
+void TDevDesignerPart::setupDesignerWindow()
+{
+ m_widget->menuBar()->hide();
+ m_widget->layoutToolBar->hide();
+ m_widget->projectToolBar->hide();
+ m_widget->toolsToolBar->hide();
+ m_widget->statusBar()->hide();
+}
+
+static TQIconSet createPartIconSet( const TQString &name )
+{
+ TQIconSet ic( BarIcon( "" + name, TDevDesignerPartFactory::instance() ) );
+ TQString prefix = "designer_";
+ int right = name.length() - prefix.length();
+ ic.setPixmap( BarIcon( prefix + "d_" + name.right( right ), TDevDesignerPartFactory::instance() ),
+ TQIconSet::Small, TQIconSet::Disabled );
+ return ic;
+}
+
+void TDevDesignerPart::setupActions( )
+{
+ TDEAction *action;
+ action = KStdAction::openNew(this, TQT_SLOT(fileNew()), actionCollection());
+ action = KStdAction::open(this, TQT_SLOT(fileOpen()), actionCollection());
+ action = KStdAction::close(this, TQT_SLOT(fileClose()), actionCollection());
+ stateSync(action, m_widget->actionFileClose);
+ action = KStdAction::save(this, TQT_SLOT(save()), actionCollection());
+ stateSync(action, m_widget->actionFileSave);
+ action = KStdAction::saveAs(this, TQT_SLOT(fileSaveAs()), actionCollection());
+ stateSync(action, m_widget->actionFileSaveAs);
+ action = new TDEAction(i18n("Save Al&l"), 0, this, TQT_SLOT(fileSaveAs()), actionCollection(), "file_saveall");
+ stateSync(action, m_widget->actionFileSaveAll);
+ new TDEAction(i18n("Create &Template..."), 0, this, TQT_SLOT(fileCreateTemplate()), actionCollection(), "file_createtemplate");
+
+ action = KStdAction::undo(this, TQT_SLOT(editUndo()), actionCollection());
+ stateSync(action, m_widget->actionEditUndo);
+ action = KStdAction::redo(this, TQT_SLOT(editRedo()), actionCollection());
+ stateSync(action, m_widget->actionEditRedo);
+ action = KStdAction::cut(this, TQT_SLOT(editCut()), actionCollection());
+ stateSync(action, m_widget->actionEditCut);
+ action = KStdAction::copy(this, TQT_SLOT(editCopy()), actionCollection());
+ stateSync(action, m_widget->actionEditCopy);
+ action = KStdAction::paste(this, TQT_SLOT(editPaste()), actionCollection());
+ stateSync(action, m_widget->actionEditPaste);
+ action = new TDEAction(i18n("&Delete"), Key_Delete, this, TQT_SLOT(editDelete()), actionCollection(), "edit_delete");
+ stateSync(action, m_widget->actionEditDelete);
+ action = KStdAction::selectAll(this, TQT_SLOT(editSelectAll()), actionCollection());
+ stateSync(action, m_widget->actionEditSelectAll);
+ action = new TDEAction(i18n("Chec&k Accelerators"), ALT + Key_R, this, TQT_SLOT(editAccels()), actionCollection(), "edit_accels");
+ stateSync(action, m_widget->actionEditAccels);
+ action = new TDEAction(i18n("S&lots..."), createPartIconSet("designer_editslots.png"), 0, this, TQT_SLOT(editFunctions()), actionCollection(), "edit_functions");
+ stateSync(action, m_widget->actionEditFunctions);
+ action = new TDEAction(i18n("Co&nnections..."), createPartIconSet("designer_connecttool.png"), 0, this, TQT_SLOT(editConnections()), actionCollection(), "edit_connections");
+ stateSync(action, m_widget->actionEditConnections);
+ action = new TDEAction(i18n("&Form Settings..."), 0, this, TQT_SLOT(editFormSettings()), actionCollection(), "edit_formsettings");
+ stateSync(action, m_widget->actionEditFormSettings);
+
+ action = new TDEAction(i18n("&Add File..."), 0, this, TQT_SLOT(projectAddFile()), actionCollection(), "project_addfile");
+ stateSync(action, m_widget->actionProjectAddFile);
+ action = new TDEAction(i18n("&Image Collection..."), 0, this, TQT_SLOT(projectImageCollection()), actionCollection(), "project_imagecollection");
+ stateSync(action, m_widget->actionEditPixmapCollection);
+ action = new TDEAction(i18n("&Database Connections..."), 0, this, TQT_SLOT(projectDatabaseCollections()), actionCollection(), "project_databasecollections");
+ stateSync(action, m_widget->actionEditDatabaseConnections);
+ action = new TDEAction(i18n("&Designer Project Settings..."), 0, this, TQT_SLOT(projectSettings()), actionCollection(), "project_settings");
+ stateSync(action, m_widget->actionEditProjectSettings);
+
+ TDERadioAction *toggle;
+ toggle = new TDERadioAction(i18n("&Pointer"), createPartIconSet("designer_pointer.png"), Key_F2, actionCollection(), "tools_pointer");
+ setupToolsAction(toggle, m_widget->actionPointerTool);
+ pointerAction = toggle;
+ toggle = new TDERadioAction(i18n("&Connect Signal/Slots"), createPartIconSet("designer_connecttool.png"), Key_F3, actionCollection(), "tools_connect");
+ setupToolsAction(toggle, m_widget->actionConnectTool);
+ toggle = new TDERadioAction(i18n("Tab &Order"), createPartIconSet("designer_ordertool.png"), Key_F4, actionCollection(), "tools_taborder");
+ setupToolsAction(toggle, m_widget->actionOrderTool);
+ toggle = new TDERadioAction(i18n("Set &Buddy"), createPartIconSet("designer_setbuddy.png"), Key_F12, actionCollection(), "tools_setbuddy");
+ setupToolsAction(toggle, m_widget->actionBuddyTool);
+ new TDEAction(i18n("Configure Toolbox..."), 0, this, TQT_SLOT(toolsConfigureToolbox()), actionCollection(), "tools_toolbox");
+ new TDEAction(i18n("Edit &Custom Widgets..."), 0, this, TQT_SLOT(toolsEditCustomWidgets()), actionCollection(), "tools_editcustomwidgets");
+
+ action = new TDEAction(i18n("Adjust &Size"), createPartIconSet("designer_adjustsize.png"), CTRL + Key_J, this, TQT_SLOT(layoutAdjustSize()), actionCollection(), "layout_adjustsize");
+ stateSync(action, m_widget->actionEditAdjustSize);
+ action = new TDEAction(i18n("Lay Out &Horizontally"), createPartIconSet("designer_edithlayout.png"), CTRL + Key_H, this, TQT_SLOT(layoutHLayout()), actionCollection(), "layout_h");
+ stateSync(action, m_widget->actionEditHLayout);
+ action = new TDEAction(i18n("Lay Out &Vertically"), createPartIconSet("designer_editvlayout.png"), CTRL + Key_V, this, TQT_SLOT(layoutVLayout()), actionCollection(), "layout_v");
+ stateSync(action, m_widget->actionEditVLayout);
+ action = new TDEAction(i18n("Lay Out in &Grid"), createPartIconSet("designer_editgrid.png"), CTRL + Key_G, this, TQT_SLOT(layoutGridLayout()), actionCollection(), "layout_grid");
+ stateSync(action, m_widget->actionEditGridLayout);
+ action = new TDEAction(i18n("Lay OutQt::Horizontally (in S&plitter)"), createPartIconSet("designer_editvlayoutsplit.png"), 0, this, TQT_SLOT(layoutSplitHLayout()), actionCollection(), "layout_splith");
+ stateSync(action, m_widget->actionEditSplitHorizontal);
+ action = new TDEAction(i18n("Lay OutQt::Vertically (in Sp&litter)"), createPartIconSet("designer_edithlayoutsplit.png"), 0, this, TQT_SLOT(layoutSplitVLayout()), actionCollection(), "layout_splitv");
+ stateSync(action, m_widget->actionEditSplitVertical);
+ action = new TDEAction(i18n("&Break Layout"), createPartIconSet("designer_editbreaklayout.png"), CTRL + Key_B, this, TQT_SLOT(layoutBreak()), actionCollection(), "layout_break");
+ stateSync(action, m_widget->actionEditBreakLayout);
+ toggle = new TDERadioAction(i18n("Add Spacer"), createPartIconSet("designer_spacer.png"), 0, actionCollection(), "layout_spacer");
+ setupToolsAction(toggle, m_widget->actionInsertSpacer);
+
+ action = new TDEAction(i18n("Preview &Form"), CTRL + Key_T, this, TQT_SLOT(windowPreview()), actionCollection(), "window_preview");
+ stateSync(action, m_widget->actionPreview);
+ action = new TDEAction(i18n("Ne&xt Form"), CTRL + Key_F6, this, TQT_SLOT(windowNext()), actionCollection(), "window_next");
+ stateSync(action, m_widget->actionWindowNext);
+ action = new TDEAction(i18n("Pre&vious Form"), CTRL + SHIFT + Key_F6, this, TQT_SLOT(windowPrev()), actionCollection(), "window_prev");
+ stateSync(action, m_widget->actionWindowPrevious);
+
+ action = KStdAction::preferences(this, TQT_SLOT(editPreferences()), actionCollection());
+ action->setText(i18n("Configure &TDevDesigner..."));
+ stateSync(action, m_widget->actionEditPreferences);
+}
+
+TDevDesignerPart::~TDevDesignerPart()
+{
+}
+
+void TDevDesignerPart::setReadWrite(bool rw)
+{
+ ReadWritePart::setReadWrite(rw);
+}
+
+void TDevDesignerPart::setModified(bool modified)
+{
+/* TDEAction *save = actionCollection()->action(KStdAction::stdName(KStdAction::Save));
+ if (!save)
+ return;
+ if (modified)
+ save->setEnabled(true);
+ else
+ save->setEnabled(false);*/
+
+ ReadWritePart::setModified(modified);
+}
+
+bool TDevDesignerPart::openFile()
+{
+ m_widget->fileOpen("", "", m_file);
+ return true;
+}
+
+bool TDevDesignerPart::saveFile()
+{
+ if (isReadWrite() == false)
+ return false;
+ m_widget->actionFileSaveAll->activate();
+ return true;
+}
+
+void TDevDesignerPart::stateSync( TDEAction * tdeaction, TQAction * qaction )
+{
+ if (!qaction)
+ return;
+ tdeaction->setEnabled(qaction->isEnabled());
+ DesignerAction *ac = dynamic_cast<DesignerAction*>(qaction);
+ if (!ac)
+ return;
+ connect(ac, TQT_SIGNAL(actionEnabled(bool )), tdeaction, TQT_SLOT(setEnabled(bool )));
+}
+
+void TDevDesignerPart::setupToolsAction( TDERadioAction * toggle, TQAction * action )
+{
+ if (!action)
+ return;
+
+ toggle->setGroup("tools");
+ toggle->setExclusiveGroup("tools");
+ connect(action, TQT_SIGNAL(toggled(bool )), this, TQT_SLOT(setToggleActionChecked(bool )));
+ connect(toggle, TQT_SIGNAL(toggled(bool)), this, TQT_SLOT(setToggleActionOn(bool)));
+ toggle->setChecked(action->isOn());
+ m_actionMap[action] = toggle;
+ m_actionMap2[toggle] = action;
+}
+
+
+// It's usually safe to leave the factory code alone.. with the
+// notable exception of the TDEAboutData data
+#include <tdeaboutdata.h>
+#include <tdelocale.h>
+
+TDEInstance* TDevDesignerPartFactory::s_instance = 0L;
+TDEAboutData* TDevDesignerPartFactory::s_about = 0L;
+
+TDevDesignerPartFactory::TDevDesignerPartFactory()
+ : KParts::Factory()
+{
+}
+
+TDevDesignerPartFactory::~TDevDesignerPartFactory()
+{
+ delete s_instance;
+ delete s_about;
+
+ s_instance = 0L;
+}
+
+KParts::Part* TDevDesignerPartFactory::createPartObject( TQWidget *parentWidget, const char *widgetName,
+ TQObject *parent, const char *name,
+ const char *classname, const TQStringList &args )
+{
+ // Create an instance of our Part
+ TDevDesignerPart* obj = new TDevDesignerPart( parentWidget, widgetName, parent, name, args );
+
+ // See if we are to be read-write or not
+ if (TQCString(classname) == "KParts::ReadOnlyPart")
+ obj->setReadWrite(false);
+
+ return obj;
+}
+
+TDEInstance* TDevDesignerPartFactory::instance()
+{
+ if( !s_instance )
+ {
+ s_about = new TDEAboutData("tdevdesignerpart", I18N_NOOP("TDevDesignerPart"), "0.1");
+ s_about->addAuthor("Alexander Dymo", 0, "cloudtemple@mksat.net");
+ s_about->addAuthor("Trolltech AS", 0, "info@trolltech.com");
+ s_instance = new TDEInstance(s_about);
+ }
+ return s_instance;
+}
+
+extern "C"
+{
+ void* init_libtdevdesignerpart()
+ {
+ return new TDevDesignerPartFactory;
+ }
+}
+
+//actions
+
+void TDevDesignerPart::fileNew( )
+{
+ if (!m_widget->actionNewFile)
+ {
+ tqWarning("wrong m_widget->actionNewFile");
+ return;
+ }
+ m_widget->actionNewFile->activate();
+}
+
+void TDevDesignerPart::fileOpen()
+{
+ m_widget->fileOpen();
+}
+
+void TDevDesignerPart::fileSaveAs()
+{
+ m_widget->actionFileSaveAs->activate();
+}
+
+void TDevDesignerPart::fileClose( )
+{
+ m_widget->actionFileClose->activate();
+}
+
+void TDevDesignerPart::fileCreateTemplate( )
+{
+ m_widget->fileCreateTemplate();
+}
+
+void TDevDesignerPart::editUndo( )
+{
+ m_widget->actionEditUndo->activate();
+}
+
+void TDevDesignerPart::editRedo( )
+{
+ m_widget->actionEditRedo->activate();
+}
+
+void TDevDesignerPart::editCut( )
+{
+ m_widget->actionEditCut->activate();
+}
+
+void TDevDesignerPart::editPaste( )
+{
+ m_widget->actionEditPaste->activate();
+}
+
+void TDevDesignerPart::editCopy( )
+{
+ m_widget->actionEditCopy->activate();
+}
+
+void TDevDesignerPart::editDelete( )
+{
+ m_widget->actionEditDelete->activate();
+}
+
+void TDevDesignerPart::editSelectAll( )
+{
+ m_widget->actionEditSelectAll->activate();
+}
+
+void TDevDesignerPart::editAccels( )
+{
+ m_widget->actionEditAccels->activate();
+}
+
+void TDevDesignerPart::editFunctions( )
+{
+ m_widget->actionEditFunctions->activate();
+}
+
+void TDevDesignerPart::editConnections( )
+{
+ m_widget->actionEditConnections->activate();
+}
+
+void TDevDesignerPart::editFormSettings( )
+{
+ m_widget->actionEditFormSettings->activate();
+}
+
+void TDevDesignerPart::editPreferences( )
+{
+ m_widget->actionEditPreferences->activate();
+}
+
+void TDevDesignerPart::projectAddFile( )
+{
+ m_widget->actionProjectAddFile->activate();
+}
+
+void TDevDesignerPart::projectImageCollection( )
+{
+ m_widget->actionEditPixmapCollection->activate();
+}
+
+void TDevDesignerPart::projectDatabaseCollections( )
+{
+ m_widget->actionEditDatabaseConnections->activate();
+}
+
+void TDevDesignerPart::projectSettings( )
+{
+ m_widget->actionEditProjectSettings->activate();
+}
+
+void TDevDesignerPart::toolsConfigureToolbox( )
+{
+ m_widget->toolsConfigure();
+}
+
+void TDevDesignerPart::layoutAdjustSize( )
+{
+ m_widget->actionEditAdjustSize->activate();
+}
+
+void TDevDesignerPart::layoutHLayout( )
+{
+ m_widget->actionEditHLayout->activate();
+}
+
+void TDevDesignerPart::layoutVLayout( )
+{
+ m_widget->actionEditVLayout->activate();
+}
+
+void TDevDesignerPart::layoutGridLayout( )
+{
+ m_widget->actionEditGridLayout->activate();
+}
+
+void TDevDesignerPart::layoutSplitHLayout( )
+{
+ m_widget->actionEditSplitHorizontal->activate();
+}
+
+void TDevDesignerPart::layoutSplitVLayout( )
+{
+ m_widget->actionEditSplitVertical->activate();
+}
+
+void TDevDesignerPart::layoutBreak( )
+{
+ m_widget->actionEditBreakLayout->activate();
+}
+
+void TDevDesignerPart::windowPreview( )
+{
+ m_widget->actionPreview->activate();
+}
+
+void TDevDesignerPart::windowNext( )
+{
+ m_widget->actionWindowNext->activate();
+}
+
+void TDevDesignerPart::windowPrev( )
+{
+ m_widget->actionWindowPrevious->activate();
+}
+
+void TDevDesignerPart::statusMessage( const TQString & msg )
+{
+ emit setStatusBarText(msg);
+}
+
+void TDevDesignerPart::setToggleActionChecked( bool b)
+{
+ if (!sender())
+ return;
+ const TQAction *action = dynamic_cast<const TQAction*>(sender());
+ if (!action)
+ return;
+ if (b)
+ {
+ if (action == m_widget->actionPointerTool)
+ pointerAction->setChecked(true);
+ return;
+ }
+ TDERadioAction *tdeaction = m_actionMap[action];
+ if (!tdeaction)
+ return;
+// kdDebug() << "untoggle action: " << tdeaction->text() << endl;
+ tdeaction->blockSignals(true);
+ tdeaction->setChecked(b);
+ tdeaction->blockSignals(false);
+}
+
+void TDevDesignerPart::setToggleActionOn( bool b )
+{
+ if (!sender())
+ return;
+ const TDERadioAction *action = dynamic_cast<const TDERadioAction *>(sender());
+ if (!action)
+ return;
+// kdDebug() << (b?TQString("toggle"):TQString("untoggle")) << " action: " << action->text() << endl;
+ TQAction *qaction = m_actionMap2[action];
+ if (!qaction)
+ return;
+ disconnect(qaction, TQT_SIGNAL(toggled(bool )), this, TQT_SLOT(setToggleActionChecked(bool )));
+ qaction->setOn(b);
+ connect(qaction, TQT_SIGNAL(toggled(bool )), this, TQT_SLOT(setToggleActionChecked(bool )));
+}
+
+void TDevDesignerPart::openProject( const TQString & // projectFile
+ )
+{
+ //TODO: implement
+ return;
+}
+
+KInterfaceDesigner::DesignerType TDevDesignerPart::designerType( )
+{
+ return KInterfaceDesigner::TQtDesigner;
+}
+
+void TDevDesignerPart::emitAddedFunction( const TQString & form, KInterfaceDesigner::Function func )
+{
+ kdDebug() << "TDevDesignerPart::emitAddedFunction: form " << form << ", function: " << func.function << endl;
+ emit addedFunction(designerType(), form, func);
+}
+
+void TDevDesignerPart::emitRemovedFunction( const TQString & form, KInterfaceDesigner::Function func )
+{
+ kdDebug() << "TDevDesignerPart::emitRemovedFunction: form " << form << ", function: " << func.function << endl;
+ emit removedFunction(designerType(), form, func);
+}
+
+void TDevDesignerPart::emitEditedFunction( const TQString & form, KInterfaceDesigner::Function oldFunc, KInterfaceDesigner::Function func )
+{
+ kdDebug() << "TDevDesignerPart::emitEditedFunction: form " << form
+ << ", old function: " << oldFunc.function
+ << ", function: " << func.function << endl;
+
+// m_widget->formWindow()->clearSelection(false);
+ emit editedFunction(designerType(), form, oldFunc, func);
+}
+
+void TDevDesignerPart::emitEditFunction(const TQString &formName, const TQString &functionName)
+{
+ kdDebug() << "TDevDesignerPart::emitEditedFunction: form " << formName
+ << ", function: " << functionName << endl;
+ emit editFunction(designerType(), formName, functionName);
+}
+
+void TDevDesignerPart::formModified(bool b)
+{
+ kdDebug() << "TDevDesignerPart::formModified " << b << endl;
+ setModified(b);
+}
+
+void TDevDesignerPart::emitEditSource(const TQString &formName)
+{
+ emit editSource(designerType(), formName);
+}
+
+void TDevDesignerPart::emitNewStatus(const TQString &formName, int status)
+{
+ emit newStatus(formName, status);
+}
+
+void TDevDesignerPart::toolsEditCustomWidgets( )
+{
+ m_widget->toolsCustomWidget();
+}
+
+#include "tdevdesigner_part.moc"