kate Library API Documentation

kateview.cpp

00001 /* This file is part of the KDE libraries 00002 Copyright (C) 2003 Hamish Rodda <rodda@kde.org> 00003 Copyright (C) 2002 John Firebaugh <jfirebaugh@kde.org> 00004 Copyright (C) 2001 Christoph Cullmann <cullmann@kde.org> 00005 Copyright (C) 2001 Joseph Wenninger <jowenn@kde.org> 00006 Copyright (C) 1999 Jochen Wilhelmy <digisnap@cs.tu-berlin.de> 00007 00008 This library is free software; you can redistribute it and/or 00009 modify it under the terms of the GNU Library General Public 00010 License version 2 as published by the Free Software Foundation. 00011 00012 This library is distributed in the hope that it will be useful, 00013 but WITHOUT ANY WARRANTY; without even the implied warranty of 00014 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00015 Library General Public License for more details. 00016 00017 You should have received a copy of the GNU Library General Public License 00018 along with this library; see the file COPYING.LIB. If not, write to 00019 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 00020 Boston, MA 02111-1307, USA. 00021 */ 00022 00023 //BEGIN includes 00024 #include "kateview.h" 00025 #include "kateview.moc" 00026 00027 #include "kateviewinternal.h" 00028 #include "kateviewhelpers.h" 00029 #include "katerenderer.h" 00030 #include "katedocument.h" 00031 #include "katedocumenthelpers.h" 00032 #include "katefactory.h" 00033 #include "katehighlight.h" 00034 #include "katedialogs.h" 00035 #include "katetextline.h" 00036 #include "katecodefoldinghelpers.h" 00037 #include "katecodecompletion.h" 00038 #include "katesearch.h" 00039 #include "kateschema.h" 00040 #include "katebookmarks.h" 00041 #include "katesearch.h" 00042 #include "kateconfig.h" 00043 #include "katefiletype.h" 00044 00045 #include <ktexteditor/plugin.h> 00046 00047 #include <kparts/event.h> 00048 00049 #include <kconfig.h> 00050 #include <kurldrag.h> 00051 #include <kdebug.h> 00052 #include <kapplication.h> 00053 #include <kcursor.h> 00054 #include <klocale.h> 00055 #include <kglobal.h> 00056 #include <kcharsets.h> 00057 #include <kmessagebox.h> 00058 #include <kaction.h> 00059 #include <kstdaction.h> 00060 #include <kxmlguifactory.h> 00061 #include <kaccel.h> 00062 #include <klibloader.h> 00063 #include <kencodingfiledialog.h> 00064 00065 #include <qfont.h> 00066 #include <qfileinfo.h> 00067 #include <qstyle.h> 00068 #include <qevent.h> 00069 #include <qpopupmenu.h> 00070 #include <qlayout.h> 00071 #include <qclipboard.h> 00072 //END includes 00073 00074 KateView::KateView( KateDocument *doc, QWidget *parent, const char * name ) 00075 : Kate::View( doc, parent, name ) 00076 , m_doc( doc ) 00077 , m_search( new KateSearch( this ) ) 00078 , m_bookmarks( new KateBookmarks( this ) ) 00079 , m_cmdLine (0) 00080 , m_cmdLineOn (false) 00081 , m_active( false ) 00082 , m_hasWrap( false ) 00083 , m_startingUp (true) 00084 , m_updatingDocumentConfig (false) 00085 { 00086 KateFactory::self()->registerView( this ); 00087 m_config = new KateViewConfig (this); 00088 00089 m_renderer = new KateRenderer(doc, this); 00090 00091 m_grid = new QGridLayout (this, 3, 3); 00092 00093 m_grid->setRowStretch ( 0, 10 ); 00094 m_grid->setRowStretch ( 1, 0 ); 00095 m_grid->setColStretch ( 0, 0 ); 00096 m_grid->setColStretch ( 1, 10 ); 00097 m_grid->setColStretch ( 2, 0 ); 00098 00099 m_viewInternal = new KateViewInternal( this, doc ); 00100 m_grid->addWidget (m_viewInternal, 0, 1); 00101 00102 setClipboardInterfaceDCOPSuffix (viewDCOPSuffix()); 00103 setCodeCompletionInterfaceDCOPSuffix (viewDCOPSuffix()); 00104 setDynWordWrapInterfaceDCOPSuffix (viewDCOPSuffix()); 00105 setPopupMenuInterfaceDCOPSuffix (viewDCOPSuffix()); 00106 setSessionConfigInterfaceDCOPSuffix (viewDCOPSuffix()); 00107 setViewCursorInterfaceDCOPSuffix (viewDCOPSuffix()); 00108 setViewStatusMsgInterfaceDCOPSuffix (viewDCOPSuffix()); 00109 00110 setInstance( KateFactory::self()->instance() ); 00111 doc->addView( this ); 00112 00113 setFocusProxy( m_viewInternal ); 00114 setFocusPolicy( StrongFocus ); 00115 00116 if (!doc->singleViewMode()) { 00117 setXMLFile( "katepartui.rc" ); 00118 } else { 00119 if( doc->readOnly() ) 00120 setXMLFile( "katepartreadonlyui.rc" ); 00121 else 00122 setXMLFile( "katepartui.rc" ); 00123 } 00124 00125 setupConnections(); 00126 setupActions(); 00127 setupEditActions(); 00128 setupCodeFolding(); 00129 setupCodeCompletion(); 00130 00131 // enable the plugins of this view 00132 m_doc->enableAllPluginsGUI (this); 00133 00134 // update the enabled state of the undo/redo actions... 00135 slotNewUndo(); 00136 00137 m_startingUp = false; 00138 updateConfig (); 00139 00140 m_viewInternal->show (); 00141 slotHlChanged(); 00142 /*test texthint 00143 connect(this,SIGNAL(needTextHint(int, int, QString &)), 00144 this,SLOT(slotNeedTextHint(int, int, QString &))); 00145 enableTextHints(1000); 00146 test texthint*/ 00147 00148 } 00149 00150 KateView::~KateView() 00151 { 00152 if (!m_doc->singleViewMode()) 00153 m_doc->disableAllPluginsGUI (this); 00154 00155 m_doc->removeView( this ); 00156 00157 delete m_viewInternal; 00158 delete m_codeCompletion; 00159 00160 delete m_renderer; 00161 00162 delete m_config; 00163 KateFactory::self()->deregisterView (this); 00164 } 00165 00166 void KateView::setupConnections() 00167 { 00168 connect( m_doc, SIGNAL(undoChanged()), 00169 this, SLOT(slotNewUndo()) ); 00170 connect( m_doc, SIGNAL(hlChanged()), 00171 this, SLOT(slotHlChanged()) ); 00172 connect( m_doc, SIGNAL(canceled(const QString&)), 00173 this, SLOT(slotSaveCanceled(const QString&)) ); 00174 connect( m_viewInternal, SIGNAL(dropEventPass(QDropEvent*)), 00175 this, SIGNAL(dropEventPass(QDropEvent*)) ); 00176 connect(this,SIGNAL(cursorPositionChanged()),this,SLOT(slotStatusMsg())); 00177 connect(this,SIGNAL(newStatus()),this,SLOT(slotStatusMsg())); 00178 connect(m_doc, SIGNAL(undoChanged()), this, SLOT(slotStatusMsg())); 00179 00180 if ( m_doc->browserView() ) 00181 { 00182 connect( this, SIGNAL(dropEventPass(QDropEvent*)), 00183 this, SLOT(slotDropEventPass(QDropEvent*)) ); 00184 } 00185 } 00186 00187 void KateView::setupActions() 00188 { 00189 KActionCollection *ac = this->actionCollection (); 00190 KAction *a; 00191 00192 m_toggleWriteLock = 0; 00193 00194 m_cut = a=KStdAction::cut(this, SLOT(cut()), ac); 00195 a->setWhatsThis(i18n("Cut the selected text and move it to the clipboard")); 00196 00197 m_paste = a=KStdAction::pasteText(this, SLOT(paste()), ac); 00198 a->setWhatsThis(i18n("Paste previously copied or cut clipboard contents")); 00199 00200 m_copy = a=KStdAction::copy(this, SLOT(copy()), ac); 00201 a->setWhatsThis(i18n( "Use this command to copy the currently selected text to the system clipboard.")); 00202 00203 00204 if (!m_doc->readOnly()) 00205 { 00206 KStdAction::spelling( m_doc, SLOT(spellcheck()), ac ); 00207 00208 a=KStdAction::save(this, SLOT(save()), ac); 00209 a->setWhatsThis(i18n("Save the current document")); 00210 00211 a=m_editUndo = KStdAction::undo(m_doc, SLOT(undo()), ac); 00212 a->setWhatsThis(i18n("Revert the most recent editing actions")); 00213 00214 a=m_editRedo = KStdAction::redo(m_doc, SLOT(redo()), ac); 00215 a->setWhatsThis(i18n("Revert the most recent undo operation")); 00216 00217 (new KAction(i18n("&Word Wrap Document"), "", 0, m_doc, SLOT(applyWordWrap()), ac, "tools_apply_wordwrap"))->setWhatsThis( 00218 i18n("Use this command to wrap all lines of the current document which are longer than the width of the" 00219 " current view, to fit into this view.<br><br> This is a static word wrap, meaning it is not updated" 00220 " when the view is resized.")); 00221 00222 // setup Tools menu 00223 a=new KAction(i18n("&Indent"), "indent", Qt::CTRL+Qt::Key_I, this, SLOT(indent()), 00224 ac, "tools_indent"); 00225 a->setWhatsThis(i18n("Use this to indent a selected block of text.<br><br>" 00226 "You can configure whether tabs should be honored and used or replaced with spaces, in the configuration dialog.")); 00227 a=new KAction(i18n("&Unindent"), "unindent", Qt::CTRL+Qt::SHIFT+Qt::Key_I, this, SLOT(unIndent()), 00228 ac, "tools_unindent"); 00229 a->setWhatsThis(i18n("Use this to unindent a selected block of text.")); 00230 a=new KAction(i18n("&Clean Indentation"), 0, this, SLOT(cleanIndent()), 00231 ac, "tools_cleanIndent"); 00232 a->setWhatsThis(i18n("Use this to clean the indentation of a selected block of text (only tabs/only spaces)<br><br>" 00233 "You can configure whether tabs should be honored and used or replaced with spaces, in the configuration dialog.")); 00234 00235 a=new KAction(i18n("C&omment"), CTRL+Qt::Key_D, this, SLOT(comment()), 00236 ac, "tools_comment"); 00237 a->setWhatsThis(i18n("This command comments out the current line or a selected block of text.<BR><BR>" 00238 "The characters for single/multiple line comments are defined within the language's highlighting.")); 00239 00240 a=new KAction(i18n("Unco&mment"), CTRL+SHIFT+Qt::Key_D, this, SLOT(uncomment()), 00241 ac, "tools_uncomment"); 00242 a->setWhatsThis(i18n("This command removes comments from the current line or a selected block of text.<BR><BR>" 00243 "The characters for single/multiple line comments are defined within the language's highlighting.")); 00244 a = m_toggleWriteLock = new KToggleAction( 00245 i18n("&Read Only Mode"), 0, 0, 00246 this, SLOT( toggleWriteLock() ), 00247 ac, "tools_toggle_write_lock" ); 00248 a->setWhatsThis( i18n("Lock/unlock the document for writing") ); 00249 00250 a = new KAction( i18n("Uppercase"), CTRL + Qt::Key_U, this, 00251 SLOT(uppercase()), ac, "tools_uppercase" ); 00252 a->setWhatsThis( i18n("Convert the selection to uppercase, or the character to the " 00253 "right of the cursor if no text is selected.") ); 00254 00255 a = new KAction( i18n("Lowercase"), CTRL + SHIFT + Qt::Key_U, this, 00256 SLOT(lowercase()), ac, "tools_lowercase" ); 00257 a->setWhatsThis( i18n("Convert the selection to lowercase, or the character to the " 00258 "right of the cursor if no text is selected.") ); 00259 00260 a = new KAction( i18n("Capitalize"), CTRL + ALT + Qt::Key_U, this, 00261 SLOT(capitalize()), ac, "tools_capitalize" ); 00262 a->setWhatsThis( i18n("Capitalize the selection, or the word under the " 00263 "cursor if no text is selected.") ); 00264 00265 a = new KAction( i18n("Join Lines"), CTRL + Qt::Key_J, this, 00266 SLOT( joinLines() ), ac, "tools_join_lines" ); 00267 } 00268 else 00269 { 00270 m_cut->setEnabled (false); 00271 m_paste->setEnabled (false); 00272 m_editUndo = 0; 00273 m_editRedo = 0; 00274 } 00275 00276 a=KStdAction::print( m_doc, SLOT(print()), ac ); 00277 a->setWhatsThis(i18n("Print the current document.")); 00278 00279 a=new KAction(i18n("Reloa&d"), "reload", KStdAccel::reload(), this, SLOT(reloadFile()), ac, "file_reload"); 00280 a->setWhatsThis(i18n("Reload the current document from disk.")); 00281 00282 a=KStdAction::saveAs(this, SLOT(saveAs()), ac); 00283 a->setWhatsThis(i18n("Save the current document to disk, with a name of your choice.")); 00284 00285 a=KStdAction::gotoLine(this, SLOT(gotoLine()), ac); 00286 a->setWhatsThis(i18n("This command opens a dialog and lets you choose a line that you want the cursor to move to.")); 00287 00288 a=new KAction(i18n("&Configure Editor..."), 0, m_doc, SLOT(configDialog()),ac, "set_confdlg"); 00289 a->setWhatsThis(i18n("Configure various aspects of this editor.")); 00290 00291 m_setHighlight = m_doc->hlActionMenu (i18n("&Highlight Mode"),ac,"set_highlight"); 00292 00293 m_setFileType = new KateViewFileTypeAction (i18n("&Filetype Mode"),ac,"set_filetype"); 00294 m_setFileType->updateMenu (m_doc); 00295 00296 m_schemaMenu = new KateViewSchemaAction (i18n("&Schema"),ac,"view_schemas"); 00297 m_schemaMenu->updateMenu (this); 00298 00299 m_doc->exportActionMenu (i18n("E&xport"),ac,"file_export"); 00300 00301 m_selectAll = a=KStdAction::selectAll(m_doc, SLOT(selectAll()), ac); 00302 a->setWhatsThis(i18n("Select the entire text of the current document.")); 00303 00304 m_deSelect = a=KStdAction::deselect(m_doc, SLOT(clearSelection()), ac); 00305 a->setWhatsThis(i18n("If you have selected something within the current document, this will no longer be selected.")); 00306 00307 a=new KAction(i18n("Increase Font Sizes"), "viewmag+", 0, m_viewInternal, SLOT(slotIncFontSizes()), ac, "incFontSizes"); 00308 a->setWhatsThis(i18n("This increases the display font size.")); 00309 00310 a=new KAction(i18n("Decrease Font Sizes"), "viewmag-", 0, m_viewInternal, SLOT(slotDecFontSizes()), ac, "decFontSizes"); 00311 a->setWhatsThis(i18n("This decreases the display font size.")); 00312 00313 a= m_toggleBlockSelection = new KToggleAction( 00314 i18n("Bl&ock Selection Mode"), CTRL + SHIFT + Key_B, 00315 this, SLOT(toggleBlockSelectionMode()), 00316 ac, "set_verticalSelect"); 00317 a->setWhatsThis(i18n("This command allows switching between the normal (line based) selection mode and the block selection mode.")); 00318 00319 a= m_toggleInsert = new KToggleAction( 00320 i18n("Overwr&ite Mode"), Key_Insert, 00321 this, SLOT(toggleInsert()), 00322 ac, "set_insert" ); 00323 a->setWhatsThis(i18n("Choose whether you want the text you type to be inserted or to overwrite existing text.")); 00324 00325 KToggleAction *toggleAction; 00326 a= m_toggleDynWrap = toggleAction = new KToggleAction( 00327 i18n("&Dynamic Word Wrap"), Key_F10, 00328 this, SLOT(toggleDynWordWrap()), 00329 ac, "view_dynamic_word_wrap" ); 00330 a->setWhatsThis(i18n("If this option is checked, the text lines will be wrapped at the view border on the screen.")); 00331 00332 a= m_setDynWrapIndicators = new KSelectAction(i18n("Dynamic Word Wrap Indicators"), 0, ac, "dynamic_word_wrap_indicators"); 00333 a->setWhatsThis(i18n("Choose when the Dynamic Word Wrap Indicators should be displayed")); 00334 00335 connect(m_setDynWrapIndicators, SIGNAL(activated(int)), this, SLOT(setDynWrapIndicators(int))); 00336 QStringList list2; 00337 list2.append(i18n("&Off")); 00338 list2.append(i18n("Follow &Line Numbers")); 00339 list2.append(i18n("&Always On")); 00340 m_setDynWrapIndicators->setItems(list2); 00341 00342 a= toggleAction=m_toggleFoldingMarkers = new KToggleAction( 00343 i18n("Show Folding &Markers"), Key_F9, 00344 this, SLOT(toggleFoldingMarkers()), 00345 ac, "view_folding_markers" ); 00346 a->setWhatsThis(i18n("You can choose if the codefolding marks should be shown, if codefolding is possible.")); 00347 00348 a= m_toggleIconBar = toggleAction = new KToggleAction( 00349 i18n("Show &Icon Border"), Key_F6, 00350 this, SLOT(toggleIconBorder()), 00351 ac, "view_border"); 00352 a=toggleAction; 00353 a->setWhatsThis(i18n("Show/hide the icon border.<BR><BR> The icon border shows bookmark symbols, for instance.")); 00354 00355 a= m_toggleLineNumbers = toggleAction = new KToggleAction( 00356 i18n("Show &Line Numbers"), Key_F11, 00357 this, SLOT(toggleLineNumbersOn()), 00358 ac, "view_line_numbers" ); 00359 a->setWhatsThis(i18n("Show/hide the line numbers on the left hand side of the view.")); 00360 00361 a = m_toggleWWMarker = new KToggleAction( 00362 i18n("Show Static &Word Wrap Marker"), 0, 00363 this, SLOT( toggleWWMarker() ), 00364 ac, "view_word_wrap_marker" ); 00365 a->setWhatsThis( i18n( 00366 "Show/hide the Word Wrap Marker, a vertical line drawn at the word " 00367 "wrap column as defined in the editing properties" )); 00368 00369 a= m_toggleCmdLine = toggleAction = new KToggleAction( 00370 i18n("Show C&ommand Line"), 0, 00371 this, SLOT(toggleCmdLine()), 00372 ac, "view_cmd_line" ); 00373 a->setWhatsThis(i18n("Show/hide the command line on the bottom of the view.")); 00374 00375 a=m_setEndOfLine = new KSelectAction(i18n("&End of Line"), 0, ac, "set_eol"); 00376 a->setWhatsThis(i18n("Choose which line endings should be used, when you save the document")); 00377 QStringList list; 00378 list.append("&UNIX"); 00379 list.append("&Windows/DOS"); 00380 list.append("&Macintosh"); 00381 m_setEndOfLine->setItems(list); 00382 m_setEndOfLine->setCurrentItem (m_doc->config()->eol()); 00383 connect(m_setEndOfLine, SIGNAL(activated(int)), this, SLOT(setEol(int))); 00384 00385 // encoding menu, start with auto checked ! 00386 m_setEncoding = new KSelectAction(i18n("Set &Encoding"), 0, ac, "set_encoding"); 00387 list = KGlobal::charsets()->descriptiveEncodingNames(); 00388 list.prepend( i18n( "Auto" ) ); 00389 m_setEncoding->setItems(list); 00390 m_setEncoding->setCurrentItem (0); 00391 connect(m_setEncoding, SIGNAL(activated(const QString&)), this, SLOT(slotSetEncoding(const QString&))); 00392 00393 m_search->createActions( ac ); 00394 m_bookmarks->createActions( ac ); 00395 00396 selectionChanged (); 00397 00398 connect (m_doc, SIGNAL(selectionChanged()), this, SLOT(selectionChanged())); 00399 00400 // paste action 00401 00402 connect( QApplication::clipboard(), SIGNAL(dataChanged()), this, SLOT(slotClipboardDataChanged()) ); 00403 00404 slotClipboardDataChanged(); 00405 } 00406 00407 void KateView::setupEditActions() 00408 { 00409 m_editActions = new KActionCollection( m_viewInternal ); 00410 KActionCollection* ac = m_editActions; 00411 00412 new KAction( 00413 i18n("Move Word Left"), CTRL + Key_Left, 00414 this,SLOT(wordLeft()), 00415 ac, "word_left" ); 00416 new KAction( 00417 i18n("Select Character Left"), SHIFT + Key_Left, 00418 this,SLOT(shiftCursorLeft()), 00419 ac, "select_char_left" ); 00420 new KAction( 00421 i18n("Select Word Left"), SHIFT + CTRL + Key_Left, 00422 this, SLOT(shiftWordLeft()), 00423 ac, "select_word_left" ); 00424 00425 new KAction( 00426 i18n("Move Word Right"), CTRL + Key_Right, 00427 this, SLOT(wordRight()), 00428 ac, "word_right" ); 00429 new KAction( 00430 i18n("Select Character Right"), SHIFT + Key_Right, 00431 this, SLOT(shiftCursorRight()), 00432 ac, "select_char_right" ); 00433 new KAction( 00434 i18n("Select Word Right"), SHIFT + CTRL + Key_Right, 00435 this,SLOT(shiftWordRight()), 00436 ac, "select_word_right" ); 00437 00438 new KAction( 00439 i18n("Move to Beginning of Line"), Key_Home, 00440 this, SLOT(home()), 00441 ac, "beginning_of_line" ); 00442 new KAction( 00443 i18n("Move to Beginning of Document"), CTRL + Key_Home, 00444 this, SLOT(top()), 00445 ac, "beginning_of_document" ); 00446 new KAction( 00447 i18n("Select to Beginning of Line"), SHIFT + Key_Home, 00448 this, SLOT(shiftHome()), 00449 ac, "select_beginning_of_line" ); 00450 new KAction( 00451 i18n("Select to Beginning of Document"), SHIFT + CTRL + Key_Home, 00452 this, SLOT(shiftTop()), 00453 ac, "select_beginning_of_document" ); 00454 00455 new KAction( 00456 i18n("Move to End of Line"), Key_End, 00457 this, SLOT(end()), 00458 ac, "end_of_line" ); 00459 new KAction( 00460 i18n("Move to End of Document"), CTRL + Key_End, 00461 this, SLOT(bottom()), 00462 ac, "end_of_document" ); 00463 new KAction( 00464 i18n("Select to End of Line"), SHIFT + Key_End, 00465 this, SLOT(shiftEnd()), 00466 ac, "select_end_of_line" ); 00467 new KAction( 00468 i18n("Select to End of Document"), SHIFT + CTRL + Key_End, 00469 this, SLOT(shiftBottom()), 00470 ac, "select_end_of_document" ); 00471 00472 new KAction( 00473 i18n("Select to Previous Line"), SHIFT + Key_Up, 00474 this, SLOT(shiftUp()), 00475 ac, "select_line_up" ); 00476 new KAction( 00477 i18n("Scroll Line Up"),"", CTRL + Key_Up, 00478 this, SLOT(scrollUp()), 00479 ac, "scroll_line_up" ); 00480 00481 new KAction( 00482 i18n("Select to Next Line"), SHIFT + Key_Down, 00483 this, SLOT(shiftDown()), 00484 ac, "select_line_down" ); 00485 new KAction( 00486 i18n("Scroll Line Down"), CTRL + Key_Down, 00487 this, SLOT(scrollDown()), 00488 ac, "scroll_line_down" ); 00489 00490 new KAction( 00491 i18n("Scroll Page Up"), Key_PageUp, 00492 this, SLOT(pageUp()), 00493 ac, "scroll_page_up" ); 00494 new KAction( 00495 i18n("Select Page Up"), SHIFT + Key_PageUp, 00496 this, SLOT(shiftPageUp()), 00497 ac, "select_page_up" ); 00498 new KAction( 00499 i18n("Move to Top of View"), CTRL + Key_PageUp, 00500 this, SLOT(topOfView()), 00501 ac, "move_top_of_view" ); 00502 new KAction( 00503 i18n("Select to Top of View"), CTRL + SHIFT + Key_PageUp, 00504 this, SLOT(shiftTopOfView()), 00505 ac, "select_top_of_view" ); 00506 00507 new KAction( 00508 i18n("Scroll Page Down"), Key_PageDown, 00509 this, SLOT(pageDown()), 00510 ac, "scroll_page_down" ); 00511 new KAction( 00512 i18n("Select Page Down"), SHIFT + Key_PageDown, 00513 this, SLOT(shiftPageDown()), 00514 ac, "select_page_down" ); 00515 new KAction( 00516 i18n("Move to Bottom of View"), CTRL + Key_PageDown, 00517 this, SLOT(bottomOfView()), 00518 ac, "move_bottom_of_view" ); 00519 new KAction( 00520 i18n("Select to Bottom of View"), CTRL + SHIFT + Key_PageDown, 00521 this, SLOT(shiftBottomOfView()), 00522 ac, "select_bottom_of_view" ); 00523 new KAction( 00524 i18n("Move to Matching Bracket"), CTRL + Key_6, 00525 this, SLOT(toMatchingBracket()), 00526 ac, "to_matching_bracket" ); 00527 new KAction( 00528 i18n("Select to Matching Bracket"), SHIFT + CTRL + Key_6, 00529 this, SLOT(shiftToMatchingBracket()), 00530 ac, "select_matching_bracket" ); 00531 00532 new KAction( 00533 i18n("Switch to Command Line"), Qt::Key_F7, 00534 this, SLOT(switchToCmdLine()), 00535 ac, "switch_to_cmd_line" ); 00536 00537 // anders: shortcuts doing any changes should not be created in browserextension 00538 if ( !m_doc->readOnly() ) 00539 { 00540 new KAction( 00541 i18n("Transpose Characters"), CTRL + Key_T, 00542 this, SLOT(transpose()), 00543 ac, "transpose_char" ); 00544 00545 new KAction( 00546 i18n("Delete Line"), CTRL + Key_K, 00547 this, SLOT(killLine()), 00548 ac, "delete_line" ); 00549 00550 new KAction( 00551 i18n("Delete Word Left"), CTRL + Key_Backspace, 00552 this, SLOT(deleteWordLeft()), 00553 ac, "delete_word_left" ); 00554 00555 new KAction( 00556 i18n("Delete Word Right"), CTRL + Key_Delete, 00557 this, SLOT(deleteWordRight()), 00558 ac, "delete_word_right" ); 00559 } 00560 00561 connect( this, SIGNAL(gotFocus(Kate::View*)), 00562 this, SLOT(slotGotFocus()) ); 00563 connect( this, SIGNAL(lostFocus(Kate::View*)), 00564 this, SLOT(slotLostFocus()) ); 00565 00566 if( hasFocus() ) 00567 slotGotFocus(); 00568 else 00569 slotLostFocus(); 00570 00571 m_editActions->readShortcutSettings( "Katepart Shortcuts" ); 00572 } 00573 00574 void KateView::setupCodeFolding() 00575 { 00576 KActionCollection *ac=this->actionCollection(); 00577 new KAction( i18n("Collapse Toplevel"), CTRL+SHIFT+Key_Minus, 00578 m_doc->foldingTree(),SLOT(collapseToplevelNodes()),ac,"folding_toplevel"); 00579 new KAction( i18n("Expand Toplevel"), CTRL+SHIFT+Key_Plus, 00580 this,SLOT(slotExpandToplevel()),ac,"folding_expandtoplevel"); 00581 new KAction( i18n("Collapse One Local Level"), CTRL+Key_Minus, 00582 this,SLOT(slotCollapseLocal()),ac,"folding_collapselocal"); 00583 new KAction( i18n("Expand One Local Level"), CTRL+Key_Plus, 00584 this,SLOT(slotExpandLocal()),ac,"folding_expandlocal"); 00585 00586 KAccel* debugAccels = new KAccel(this,this); 00587 debugAccels->insert("KATE_DUMP_REGION_TREE",i18n("Show the code folding region tree"),"","Ctrl+Shift+Alt+D",m_doc,SLOT(dumpRegionTree())); 00588 debugAccels->setEnabled(true); 00589 } 00590 00591 void KateView::slotExpandToplevel() 00592 { 00593 m_doc->foldingTree()->expandToplevelNodes(m_doc->numLines()); 00594 } 00595 00596 void KateView::slotCollapseLocal() 00597 { 00598 int realLine = m_doc->foldingTree()->collapseOne(cursorLine()); 00599 if (realLine != -1) 00600 // TODO rodda: fix this to only set line and allow internal view to chose column 00601 // Explicitly call internal because we want this to be registered as an internal call 00602 setCursorPositionInternal(realLine, cursorColumn(), tabWidth(), false); 00603 } 00604 00605 void KateView::slotExpandLocal() 00606 { 00607 m_doc->foldingTree()->expandOne(cursorLine(), m_doc->numLines()); 00608 } 00609 00610 void KateView::setupCodeCompletion() 00611 { 00612 m_codeCompletion = new KateCodeCompletion(this); 00613 connect( m_codeCompletion, SIGNAL(completionAborted()), 00614 this, SIGNAL(completionAborted())); 00615 connect( m_codeCompletion, SIGNAL(completionDone()), 00616 this, SIGNAL(completionDone())); 00617 connect( m_codeCompletion, SIGNAL(argHintHidden()), 00618 this, SIGNAL(argHintHidden())); 00619 connect( m_codeCompletion, SIGNAL(completionDone(KTextEditor::CompletionEntry)), 00620 this, SIGNAL(completionDone(KTextEditor::CompletionEntry))); 00621 connect( m_codeCompletion, SIGNAL(filterInsertString(KTextEditor::CompletionEntry*,QString*)), 00622 this, SIGNAL(filterInsertString(KTextEditor::CompletionEntry*,QString*))); 00623 } 00624 00625 void KateView::slotGotFocus() 00626 { 00627 m_editActions->accel()->setEnabled( true ); 00628 00629 slotStatusMsg (); 00630 } 00631 00632 void KateView::slotLostFocus() 00633 { 00634 m_editActions->accel()->setEnabled( false ); 00635 } 00636 00637 void KateView::setDynWrapIndicators(int mode) 00638 { 00639 config()->setDynWordWrapIndicators (mode); 00640 } 00641 00642 void KateView::slotStatusMsg () 00643 { 00644 QString ovrstr; 00645 if (m_doc->isReadWrite()) 00646 { 00647 if (m_doc->config()->configFlags() & KateDocument::cfOvr) 00648 ovrstr = i18n(" OVR "); 00649 else 00650 ovrstr = i18n(" INS "); 00651 } 00652 else 00653 ovrstr = i18n(" R/O "); 00654 00655 uint r = cursorLine() + 1; 00656 uint c = cursorColumn() + 1; 00657 00658 QString s1 = i18n(" Line: %1").arg(KGlobal::locale()->formatNumber(r, 0)); 00659 QString s2 = i18n(" Col: %1").arg(KGlobal::locale()->formatNumber(c, 0)); 00660 00661 QString modstr = m_doc->isModified() ? QString (" * ") : QString (" "); 00662 QString blockstr = m_doc->blockSelectionMode() ? i18n(" BLK ") : i18n(" NORM "); 00663 00664 emit viewStatusMsg (s1 + s2 + " " + ovrstr + blockstr + modstr); 00665 } 00666 00667 void KateView::slotSelectionTypeChanged() 00668 { 00669 m_toggleBlockSelection->setChecked( m_doc->blockSelectionMode() ); 00670 00671 emit newStatus(); 00672 } 00673 00674 bool KateView::isOverwriteMode() const 00675 { 00676 return m_doc->config()->configFlags() & KateDocument::cfOvr; 00677 } 00678 00679 void KateView::reloadFile() 00680 { 00681 // save cursor position 00682 uint cl = cursorLine(); 00683 uint cc = cursorColumn(); 00684 00685 // save bookmarks 00686 m_doc->reloadFile(); 00687 00688 if (m_doc->numLines() >= cl) 00689 // Explicitly call internal function because we want this to be registered as a non-external call 00690 setCursorPositionInternal( cl, cc, tabWidth(), false ); 00691 } 00692 00693 void KateView::slotUpdate() 00694 { 00695 emit newStatus(); 00696 00697 slotNewUndo(); 00698 } 00699 00700 void KateView::slotReadWriteChanged () 00701 { 00702 if ( m_toggleWriteLock ) 00703 m_toggleWriteLock->setChecked( ! m_doc->isReadWrite() ); 00704 00705 m_cut->setEnabled (m_doc->isReadWrite()); 00706 slotClipboardDataChanged(); 00707 //m_paste->setEnabled (m_doc->isReadWrite()); 00708 00709 QStringList l; 00710 00711 l << "edit_replace" << "set_insert" << "tools_spelling" << "tools_indent" 00712 << "tools_unindent" << "tools_cleanIndent" << "tools_comment" 00713 << "tools_uncomment" << "tools_uppercase" << "tools_lowercase" 00714 << "tools_capitalize" << "tools_join_lines" << "tools_apply_wordwrap" 00715 << "edit_undo" << "edit_redo"; 00716 00717 KAction *a = 0; 00718 for (uint z = 0; z < l.size(); z++) 00719 if ((a = actionCollection()->action( l[z].ascii() ))) 00720 a->setEnabled (m_doc->isReadWrite()); 00721 } 00722 00723 void KateView::slotNewUndo() 00724 { 00725 if (m_doc->readOnly()) 00726 return; 00727 00728 if ((m_doc->undoCount() > 0) != m_editUndo->isEnabled()) 00729 m_editUndo->setEnabled(m_doc->undoCount() > 0); 00730 00731 if ((m_doc->redoCount() > 0) != m_editRedo->isEnabled()) 00732 m_editRedo->setEnabled(m_doc->redoCount() > 0); 00733 } 00734 00735 void KateView::slotDropEventPass( QDropEvent * ev ) 00736 { 00737 KURL::List lstDragURLs; 00738 bool ok = KURLDrag::decode( ev, lstDragURLs ); 00739 00740 KParts::BrowserExtension * ext = KParts::BrowserExtension::childObject( doc() ); 00741 if ( ok && ext ) 00742 emit ext->openURLRequest( lstDragURLs.first() ); 00743 } 00744 00745 void KateView::contextMenuEvent( QContextMenuEvent *ev ) 00746 { 00747 if ( !m_doc || !m_doc->browserExtension() ) 00748 return; 00749 00750 emit m_doc->browserExtension()->popupMenu( ev->globalPos(), m_doc->url(), 00751 QString::fromLatin1( "text/plain" ) ); 00752 ev->accept(); 00753 } 00754 00755 bool KateView::setCursorPositionInternal( uint line, uint col, uint tabwidth, bool calledExternally ) 00756 { 00757 TextLine::Ptr l = m_doc->kateTextLine( line ); 00758 00759 if (!l) 00760 return false; 00761 00762 QString line_str = m_doc->textLine( line ); 00763 00764 uint z; 00765 uint x = 0; 00766 for (z = 0; z < line_str.length() && z < col; z++) { 00767 if (line_str[z] == QChar('\t')) x += tabwidth - (x % tabwidth); else x++; 00768 } 00769 00770 m_viewInternal->updateCursor( KateTextCursor( line, x ), false, true, calledExternally ); 00771 00772 return true; 00773 } 00774 00775 void KateView::toggleBlockSelectionMode() 00776 { 00777 m_doc->toggleBlockSelectionMode(); 00778 m_toggleBlockSelection->setChecked (m_doc->blockSelectionMode()); 00779 } 00780 00781 void KateView::setOverwriteMode( bool b ) 00782 { 00783 if ( isOverwriteMode() && !b ) 00784 m_doc->setConfigFlags( m_doc->config()->configFlags() ^ KateDocument::cfOvr ); 00785 else 00786 m_doc->setConfigFlags( m_doc->config()->configFlags() | KateDocument::cfOvr ); 00787 00788 m_toggleInsert->setChecked (isOverwriteMode ()); 00789 } 00790 00791 void KateView::toggleInsert() 00792 { 00793 m_doc->setConfigFlags(m_doc->config()->configFlags() ^ KateDocument::cfOvr); 00794 m_toggleInsert->setChecked (isOverwriteMode ()); 00795 00796 emit newStatus(); 00797 } 00798 00799 bool KateView::canDiscard() 00800 { 00801 return m_doc->closeURL(); 00802 } 00803 00804 void KateView::flush() 00805 { 00806 m_doc->closeURL(); 00807 } 00808 00809 KateView::saveResult KateView::save() 00810 { 00811 if( !m_doc->url().isValid() || !doc()->isReadWrite() ) 00812 return saveAs(); 00813 00814 if( m_doc->save() ) 00815 return SAVE_OK; 00816 00817 return SAVE_ERROR; 00818 } 00819 00820 KateView::saveResult KateView::saveAs() 00821 { 00822 00823 KEncodingFileDialog::Result res=KEncodingFileDialog::getSaveURLAndEncoding(doc()->config()->encoding(), 00824 m_doc->url().url(),QString::null,this,i18n("Save File")); 00825 00826 kdDebug()<<"urllist is emtpy?"<<res.URLs.isEmpty()<<endl; 00827 kdDebug()<<"url is:"<<res.URLs.first()<<endl; 00828 if( res.URLs.isEmpty() || !checkOverwrite( res.URLs.first() ) ) 00829 return SAVE_CANCEL; 00830 00831 m_doc->setEncoding( res.encoding ); 00832 00833 if( m_doc->saveAs( res.URLs.first() ) ) 00834 return SAVE_OK; 00835 00836 return SAVE_ERROR; 00837 } 00838 00839 bool KateView::checkOverwrite( KURL u ) 00840 { 00841 if( !u.isLocalFile() ) 00842 return true; 00843 00844 QFileInfo info( u.path() ); 00845 if( !info.exists() ) 00846 return true; 00847 00848 return KMessageBox::Cancel != KMessageBox::warningContinueCancel( this, 00849 i18n( "A file named \"%1\" already exists. " 00850 "Are you sure you want to overwrite it?" ).arg( info.fileName() ), 00851 i18n( "Overwrite File?" ), 00852 i18n( "&Overwrite" ) ); 00853 } 00854 00855 void KateView::slotSaveCanceled( const QString& error ) 00856 { 00857 if ( !error.isEmpty() ) // happens when cancelling a job 00858 KMessageBox::error( this, error ); 00859 } 00860 00861 void KateView::gotoLine() 00862 { 00863 GotoLineDialog *dlg; 00864 00865 dlg = new GotoLineDialog(this, m_viewInternal->getCursor().line() + 1, m_doc->numLines()); 00866 00867 if (dlg->exec() == QDialog::Accepted) 00868 gotoLineNumber( dlg->getLine() - 1 ); 00869 00870 delete dlg; 00871 } 00872 00873 void KateView::gotoLineNumber( int line ) 00874 { 00875 setCursorPositionInternal ( line, 0, 1 ); 00876 } 00877 00878 void KateView::joinLines() 00879 { 00880 int first = m_doc->selStartLine(); 00881 int last = m_doc->selEndLine(); 00882 //int left = m_doc->textLine( last ).length() - m_doc->selEndCol(); 00883 if ( first == last ) 00884 { 00885 first = cursorLine(); 00886 last = first + 1; 00887 } 00888 m_doc->joinLines( first, last ); 00889 } 00890 00891 void KateView::readSessionConfig(KConfig *config) 00892 { 00893 setCursorPositionInternal (config->readNumEntry("CursorLine"), config->readNumEntry("CursorColumn"), 1); 00894 } 00895 00896 void KateView::writeSessionConfig(KConfig *config) 00897 { 00898 config->writeEntry("CursorLine",m_viewInternal->cursor.line()); 00899 config->writeEntry("CursorColumn",m_viewInternal->cursor.col()); 00900 } 00901 00902 int KateView::getEol() 00903 { 00904 return m_doc->config()->eol(); 00905 } 00906 00907 void KateView::setEol(int eol) 00908 { 00909 if (!doc()->isReadWrite()) 00910 return; 00911 00912 if (m_updatingDocumentConfig) 00913 return; 00914 00915 m_doc->config()->setEol (eol); 00916 } 00917 00918 void KateView::slotSetEncoding( const QString& descriptiveName ) 00919 { 00920 setEncoding( KGlobal::charsets()->encodingForName( descriptiveName ) ); 00921 reloadFile(); 00922 } 00923 00924 void KateView::setIconBorder( bool enable ) 00925 { 00926 config()->setIconBar (enable); 00927 } 00928 00929 void KateView::toggleIconBorder() 00930 { 00931 config()->setIconBar (!config()->iconBar()); 00932 } 00933 00934 void KateView::setLineNumbersOn( bool enable ) 00935 { 00936 config()->setLineNumbers (enable); 00937 } 00938 00939 void KateView::toggleLineNumbersOn() 00940 { 00941 config()->setLineNumbers (!config()->lineNumbers()); 00942 } 00943 00944 void KateView::toggleDynWordWrap() 00945 { 00946 config()->setDynWordWrap( !config()->dynWordWrap() ); 00947 } 00948 00949 void KateView::setDynWordWrap( bool b ) 00950 { 00951 config()->setDynWordWrap( b ); 00952 } 00953 00954 void KateView::toggleWWMarker() 00955 { 00956 m_renderer->config()->setWordWrapMarker (!m_renderer->config()->wordWrapMarker()); 00957 } 00958 00959 void KateView::setFoldingMarkersOn( bool enable ) 00960 { 00961 config()->setFoldingBar ( enable ); 00962 } 00963 00964 void KateView::toggleFoldingMarkers() 00965 { 00966 config()->setFoldingBar ( !config()->foldingBar() ); 00967 } 00968 00969 bool KateView::iconBorder() { 00970 return m_viewInternal->leftBorder->iconBorderOn(); 00971 } 00972 00973 bool KateView::lineNumbersOn() { 00974 return m_viewInternal->leftBorder->lineNumbersOn(); 00975 } 00976 00977 int KateView::dynWrapIndicators() { 00978 return m_viewInternal->leftBorder->dynWrapIndicators(); 00979 } 00980 00981 bool KateView::foldingMarkersOn() { 00982 return m_viewInternal->leftBorder->foldingMarkersOn(); 00983 } 00984 00985 void KateView::showCmdLine ( bool enabled ) 00986 { 00987 if (enabled == m_cmdLineOn) 00988 return; 00989 00990 if (enabled) 00991 { 00992 if (!m_cmdLine) 00993 { 00994 m_cmdLine = new KateCmdLine (this); 00995 m_grid->addMultiCellWidget (m_cmdLine, 2, 2, 0, 2); 00996 } 00997 00998 m_cmdLine->show (); 00999 } 01000 else 01001 m_cmdLine->hide (); 01002 01003 m_cmdLineOn = enabled; 01004 } 01005 01006 void KateView::toggleCmdLine () 01007 { 01008 m_config->setCmdLine (!m_config->cmdLine ()); 01009 } 01010 01011 void KateView::toggleWriteLock() 01012 { 01013 m_doc->setReadWrite( ! m_doc->isReadWrite() ); 01014 } 01015 01016 void KateView::enableTextHints(int timeout) 01017 { 01018 m_viewInternal->enableTextHints(timeout); 01019 } 01020 01021 void KateView::disableTextHints() 01022 { 01023 m_viewInternal->disableTextHints(); 01024 } 01025 01026 void KateView::slotNeedTextHint(int line, int col, QString &text) 01027 { 01028 text=QString("test %1 %2").arg(line).arg(col); 01029 } 01030 01031 void KateView::find() 01032 { 01033 m_search->find(); 01034 } 01035 01036 void KateView::replace() 01037 { 01038 m_search->replace(); 01039 } 01040 01041 void KateView::findAgain( bool back ) 01042 { 01043 m_search->findAgain( back ); 01044 } 01045 01046 void KateView::selectionChanged () 01047 { 01048 if (m_doc->hasSelection()) 01049 { 01050 m_copy->setEnabled (true); 01051 m_deSelect->setEnabled (true); 01052 } 01053 else 01054 { 01055 m_copy->setEnabled (false); 01056 m_deSelect->setEnabled (false); 01057 } 01058 01059 if (m_doc->readOnly()) 01060 return; 01061 01062 if (m_doc->hasSelection()) 01063 m_cut->setEnabled (true); 01064 else 01065 m_cut->setEnabled (false); 01066 } 01067 01068 void KateView::switchToCmdLine () 01069 { 01070 if (!m_cmdLineOn) 01071 m_config->setCmdLine (true); 01072 01073 m_cmdLine->setFocus (); 01074 } 01075 01076 void KateView::showArgHint( QStringList arg1, const QString& arg2, const QString& arg3 ) 01077 { 01078 m_codeCompletion->showArgHint( arg1, arg2, arg3 ); 01079 } 01080 01081 void KateView::showCompletionBox( QValueList<KTextEditor::CompletionEntry> arg1, int offset, bool cs ) 01082 { 01083 emit aboutToShowCompletionBox(); 01084 m_codeCompletion->showCompletionBox( arg1, offset, cs ); 01085 } 01086 01087 KateRenderer *KateView::renderer () 01088 { 01089 return m_renderer; 01090 } 01091 01092 void KateView::updateConfig () 01093 { 01094 if (m_startingUp) 01095 return; 01096 01097 m_editActions->readShortcutSettings( "Katepart Shortcuts" ); 01098 01099 // dyn. word wrap & markers 01100 if (m_hasWrap != config()->dynWordWrap()) { 01101 m_viewInternal->prepareForDynWrapChange(); 01102 01103 m_hasWrap = config()->dynWordWrap(); 01104 01105 m_viewInternal->dynWrapChanged(); 01106 01107 m_setDynWrapIndicators->setEnabled(config()->dynWordWrap()); 01108 m_toggleDynWrap->setChecked( config()->dynWordWrap() ); 01109 } 01110 01111 m_viewInternal->leftBorder->setDynWrapIndicators( config()->dynWordWrapIndicators() ); 01112 m_setDynWrapIndicators->setCurrentItem( config()->dynWordWrapIndicators() ); 01113 01114 // line numbers 01115 m_viewInternal->leftBorder->setLineNumbersOn( config()->lineNumbers() ); 01116 m_toggleLineNumbers->setChecked( config()->lineNumbers() ); 01117 01118 // icon bar 01119 m_viewInternal->leftBorder->setIconBorderOn( config()->iconBar() ); 01120 m_toggleIconBar->setChecked( config()->iconBar() ); 01121 01122 // cmd line 01123 showCmdLine (config()->cmdLine()); 01124 m_toggleCmdLine->setChecked( config()->cmdLine() ); 01125 01126 // misc edit 01127 m_toggleBlockSelection->setChecked( m_doc->blockSelectionMode() ); 01128 m_toggleInsert->setChecked( isOverwriteMode() ); 01129 01130 updateFoldingConfig (); 01131 01132 // bookmark 01133 m_bookmarks->setSorting( (KateBookmarks::Sorting) config()->bookmarkSort() ); 01134 01135 m_viewInternal->setAutoCenterLines(config()->autoCenterLines ()); 01136 } 01137 01138 void KateView::updateDocumentConfig() 01139 { 01140 if (m_startingUp) 01141 return; 01142 01143 m_updatingDocumentConfig = true; 01144 01145 m_setEndOfLine->setCurrentItem (m_doc->config()->eol()); 01146 01147 m_updatingDocumentConfig = false; 01148 01149 m_viewInternal->updateView (true); 01150 01151 m_renderer->setTabWidth (m_doc->config()->tabWidth()); 01152 } 01153 01154 void KateView::updateRendererConfig() 01155 { 01156 if (m_startingUp) 01157 return; 01158 01159 m_toggleWWMarker->setChecked( m_renderer->config()->wordWrapMarker() ); 01160 01161 // update the text area 01162 m_viewInternal->updateView (true); 01163 m_viewInternal->repaint (); 01164 01165 // update the left border right, for example linenumbers 01166 m_viewInternal->leftBorder->updateFont(); 01167 m_viewInternal->leftBorder->repaint (); 01168 } 01169 01170 void KateView::updateFoldingConfig () 01171 { 01172 // folding bar 01173 bool doit = config()->foldingBar() && m_doc->highlight() && m_doc->highlight()->allowsFolding(); 01174 m_viewInternal->leftBorder->setFoldingMarkersOn(doit); 01175 m_toggleFoldingMarkers->setChecked( doit ); 01176 m_toggleFoldingMarkers->setEnabled( m_doc->highlight() && m_doc->highlight()->allowsFolding() ); 01177 01178 QStringList l; 01179 01180 l << "folding_toplevel" << "folding_expandtoplevel" 01181 << "folding_collapselocal" << "folding_expandlocal"; 01182 01183 KAction *a = 0; 01184 for (uint z = 0; z < l.size(); z++) 01185 if ((a = actionCollection()->action( l[z].ascii() ))) 01186 a->setEnabled (m_doc->highlight() && m_doc->highlight()->allowsFolding()); 01187 } 01188 01189 // BEGIN EDIT STUFF 01190 void KateView::editStart () 01191 { 01192 m_viewInternal->editStart (); 01193 } 01194 01195 void KateView::editEnd (int editTagLineStart, int editTagLineEnd, bool tagFrom) 01196 { 01197 m_viewInternal->editEnd (editTagLineStart, editTagLineEnd, tagFrom); 01198 } 01199 01200 void KateView::editSetCursor (const KateTextCursor &cursor) 01201 { 01202 m_viewInternal->editSetCursor (cursor); 01203 } 01204 // END 01205 01206 // BEGIN TAG & CLEAR 01207 bool KateView::tagLine (const KateTextCursor& virtualCursor) 01208 { 01209 return m_viewInternal->tagLine (virtualCursor); 01210 } 01211 01212 bool KateView::tagLines (int start, int end, bool realLines) 01213 { 01214 return m_viewInternal->tagLines (start, end, realLines); 01215 } 01216 01217 bool KateView::tagLines (KateTextCursor start, KateTextCursor end, bool realCursors) 01218 { 01219 return m_viewInternal->tagLines (start, end, realCursors); 01220 } 01221 01222 void KateView::tagAll () 01223 { 01224 m_viewInternal->tagAll (); 01225 } 01226 01227 void KateView::clear () 01228 { 01229 m_viewInternal->clear (); 01230 } 01231 01232 void KateView::repaintText (bool paintOnlyDirty) 01233 { 01234 m_viewInternal->paintText(0,0,m_viewInternal->width(),m_viewInternal->height(), paintOnlyDirty); 01235 } 01236 01237 void KateView::updateView (bool changed) 01238 { 01239 m_viewInternal->updateView (changed); 01240 m_viewInternal->leftBorder->update(); 01241 } 01242 01243 // END 01244 01245 void KateView::slotClipboardDataChanged() 01246 { 01247 QMimeSource *data = QApplication::clipboard()->data(QClipboard::Clipboard); 01248 m_paste->setEnabled(m_doc->isReadWrite() && data->provides( "text/plain" ) ); 01249 } 01250 01251 void KateView::slotHlChanged() 01252 { 01253 Highlight *hl = m_doc->highlight(); 01254 bool ok ( ! ( hl->getCommentStart().isEmpty() && hl->getCommentSingleLineStart().isEmpty() ) ); 01255 01256 if (actionCollection()->action("tools_comment")) 01257 actionCollection()->action("tools_comment")->setEnabled( ok ); 01258 01259 if (actionCollection()->action("tools_uncomment")) 01260 actionCollection()->action("tools_uncomment")->setEnabled( ok ); 01261 01262 // show folding bar if "view defaults" says so, otherwise enable/disable only the menu entry 01263 updateFoldingConfig (); 01264 } 01265 01266 uint KateView::cursorColumn() 01267 { 01268 uint r = m_doc->currentColumn(m_viewInternal->getCursor()); 01269 if ( !( m_doc->config()->configFlags() & KateDocumentConfig::cfWrapCursor ) && 01270 m_viewInternal->getCursor().col() > m_doc->textLine( m_viewInternal->getCursor().line() ).length() ) 01271 r += m_viewInternal->getCursor().col() - m_doc->textLine( m_viewInternal->getCursor().line() ).length(); 01272 01273 return r; 01274 } 01275 // kate: space-indent on; indent-width 2; replace-tabs on;
KDE Logo
This file is part of the documentation for kate Library Version 3.2.3.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Fri Aug 20 09:50:53 2004 by doxygen 1.3.7 written by Dimitri van Heesch, © 1997-2003