// Copyright (C) 2003 Dominique Devriese // 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 "newscriptwizard.h" #include "newscriptwizard.moc" #include "script_mode.h" #include #include //#include //#include // make it still work on old kde 3.1... #include // #include #include #include #include #include #include #include #include #include #include #include #include NewScriptWizard::~NewScriptWizard() { if ( !document ) { delete textedit; } else { //restoring the state of the dynamic word wrap dynamic_cast( editor )->setDynWordWrap( prevDynWordWrap ); delete editor->document(); } } NewScriptWizard::NewScriptWizard( TQWidget* parent, ScriptModeBase* mode ) : NewScriptWizardBase( parent, "New Script Wizard" ), mmode( mode ) { document = KTextEditor::EditorChooser::createDocument( 0, "KTextEditor::Document" ); // document = 0; gridLayout->expand( 2, 1 ); if ( !document ) { // there is no KDE textditor component installed, so we'll use a // simplier KTextEdit textedit = new KTextEdit( mpcode, "textedit" ); textedit->setFont( TDEGlobalSettings::fixedFont() ); gridLayout->addWidget( textedit, 1, 0 ); } else { // creating the 'view', hat is what the user see and interact with editor = document->createView( mpcode, "editor" ); gridLayout->addWidget( editor, 1, 0 ); // casting to the interfaces we'll use often hli = dynamic_cast( document ); // displaying the left border with line numbers TDEToggleAction *a = dynamic_cast( editor->actionCollection()->action("view_line_numbers") ); a->activate(); // saving the state of dynamic word wrap and disabling it prevDynWordWrap = dynamic_cast( editor )->dynWordWrap(); dynamic_cast( editor )->setDynWordWrap( false ); // saving the "no highlight" id noHlStyle = hli->hlMode(); // creating the popup menu TDEPopupMenu* pm = new TDEPopupMenu( editor ); // creating the actions for the code editor... TDEActionCollection* ac = new TDEActionCollection( editor ); TDEAction* undoAction = KStdAction::undo( TQT_TQOBJECT(this), TQT_SLOT( slotUndo() ), ac ); TDEAction* redoAction = KStdAction::redo( TQT_TQOBJECT(this), TQT_SLOT( slotRedo() ), ac ); TDEAction* cutAction = KStdAction::cut( TQT_TQOBJECT(this), TQT_SLOT( slotCut() ), ac ); TDEAction* copyAction = KStdAction::copy( TQT_TQOBJECT(this), TQT_SLOT( slotCopy() ), ac ); TDEAction* pasteAction = KStdAction::paste( TQT_TQOBJECT(this), TQT_SLOT( slotPaste() ), ac ); // ... and plugging them into the popup menu (to build it, of course :) ) undoAction->plug( pm ); redoAction->plug( pm ); pm->insertSeparator(); cutAction->plug( pm ); copyAction->plug( pm ); pasteAction->plug( pm ); // finally, we install the popup menu dynamic_cast( editor )->installPopup( pm ); } connect( this, TQT_SIGNAL( helpClicked() ), this, TQT_SLOT( slotHelpClicked() ) ); } void NewScriptWizard::back() { if ( currentPage() == mpcode ) { // currentPage() is not yet updated, so we're now entering the // args page.. mmode->argsPageEntered(); } else assert( false ); NewScriptWizardBase::back(); } void NewScriptWizard::next() { if ( currentPage() == mpargs ) mmode->codePageEntered(); else assert( false ); if ( !document ) { textedit->setFocus(); } else { editor->setFocus(); } NewScriptWizardBase::next(); } void NewScriptWizard::reject() { if ( mmode->queryCancel() ) NewScriptWizardBase::reject(); } void NewScriptWizard::accept() { if ( mmode->queryFinish() ) NewScriptWizardBase::accept(); } void NewScriptWizard::slotHelpClicked() { kapp->invokeHelp( TQString::fromLatin1( "scripting" ), TQString::fromLatin1( "kig" ) ); } void NewScriptWizard::setText( const TQString& text ) { if ( !document ) { textedit->setText( text ); } else { dynamic_cast( document )->setText( text ); } } TQString NewScriptWizard::text() { if ( !document ) { return textedit->text(); } else { return dynamic_cast( document )->text(); } } void NewScriptWizard::setType( ScriptType::Type type ) { labelFillCode->setText( ScriptType::fillCodeStatement( type ) ); if ( !!document ) { if ( type != ScriptType::Unknown ) { for ( uint i = 0; i < hli->hlModeCount(); ++i ) { if ( hli->hlModeName( i ) == ScriptType::highlightStyle( type ) ) { // we found our highlight style, setting it hli->setHlMode( i ); return; } } } else { hli->setHlMode( noHlStyle ); } } } void NewScriptWizard::slotUndo() { dynamic_cast( document )->undo(); } void NewScriptWizard::slotRedo() { dynamic_cast( document )->redo(); } void NewScriptWizard::slotCut() { dynamic_cast( editor )->cut(); } void NewScriptWizard::slotCopy() { dynamic_cast( editor )->copy(); } void NewScriptWizard::slotPaste() { dynamic_cast( editor )->paste(); }