• Skip to content
  • Skip to link menu
Trinity API Reference
  • Trinity API Reference
  • kate
 

kate

  • kate
  • app
kateviewmanager.cpp
1/* This file is part of the KDE project
2 Copyright (C) 2001 Christoph Cullmann <cullmann@kde.org>
3 Copyright (C) 2001 Joseph Wenninger <jowenn@kde.org>
4 Copyright (C) 2001 Anders Lund <anders.lund@lund.tdcadsl.dk>
5
6 This library is free software; you can redistribute it and/or
7 modify it under the terms of the GNU Library General Public
8 License version 2 as published by the Free Software Foundation.
9
10 This library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Library General Public License for more details.
14
15 You should have received a copy of the GNU Library General Public License
16 along with this library; see the file COPYING.LIB. If not, write to
17 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18 Boston, MA 02110-1301, USA.
19*/
20
21//BEGIN Includes
22#include "kateviewmanager.h"
23#include "kateviewmanager.moc"
24
25#include "katemainwindow.h"
26#include "katedocmanager.h"
27#include "kateviewspacecontainer.h"
28#include "katetabwidget.h"
29
30#include <dcopclient.h>
31#include <tdeaction.h>
32#include <tdecmdlineargs.h>
33#include <kdebug.h>
34#include <tdediroperator.h>
35#include <kdockwidget.h>
36#include <kencodingfiledialog.h>
37#include <kiconloader.h>
38#include <tdeglobal.h>
39#include <tdelocale.h>
40#include <tdetoolbar.h>
41#include <tdemessagebox.h>
42#include <ksimpleconfig.h>
43#include <kstdaction.h>
44#include <tdestandarddirs.h>
45#include <tdeglobalsettings.h>
46#include <tdestdaccel.h>
47
48#include <tdetexteditor/encodinginterface.h>
49
50#include <tqobjectlist.h>
51#include <tqstringlist.h>
52#include <tqfileinfo.h>
53#include <tqtoolbutton.h>
54#include <tqtooltip.h>
55//END Includes
56
57KateViewManager::KateViewManager (KateMainWindow *parent)
58 : TQObject (parent),
59 showFullPath(false), m_mainWindow(parent)
60{
61 // while init
62 m_init=true;
63
64 // some stuff for the tabwidget
65 m_mainWindow->tabWidget()->setTabReorderingEnabled( true );
66
67 // important, set them up, as we use them in other methodes
68 setupActions ();
69
70 guiMergedView=0;
71
72 m_viewManager = new Kate::ViewManager (this);
73 m_currentContainer=0;
74 connect(m_mainWindow->tabWidget(),TQ_SIGNAL(currentChanged(TQWidget*)),this,TQ_SLOT(tabChanged(TQWidget*)));
75 slotNewTab();
76 tabChanged(m_mainWindow->tabWidget()->currentPage());
77
78 // no memleaks
79 m_viewSpaceContainerList.setAutoDelete(true);
80
81 // init done
82 m_init=false;
83}
84
85KateViewManager::~KateViewManager ()
86{
87 m_viewSpaceContainerList.setAutoDelete(false);
88}
89
90void KateViewManager::setupActions ()
91{
92 TDEAction *a;
93
97 a=new TDEAction ( i18n("New Tab"),"tab_new", 0, this, TQ_SLOT(slotNewTab()),
98 m_mainWindow->actionCollection(), "view_new_tab" );
99
100 m_closeTab = new TDEAction ( i18n("Close Current Tab"),"tab_remove",0,this,TQ_SLOT(slotCloseTab()),
101 m_mainWindow->actionCollection(),"view_close_tab");
102
103 m_activateNextTab
104 = new TDEAction( i18n( "Activate Next Tab" ),
105 TQApplication::reverseLayout() ? TDEStdAccel::tabPrev() : TDEStdAccel::tabNext(),
106 this, TQ_SLOT( activateNextTab() ), m_mainWindow->actionCollection(), "view_next_tab" );
107
108 m_activatePrevTab
109 = new TDEAction( i18n( "Activate Previous Tab" ),
110 TQApplication::reverseLayout() ? TDEStdAccel::tabNext() : TDEStdAccel::tabPrev(),
111 this, TQ_SLOT( activatePrevTab() ), m_mainWindow->actionCollection(), "view_prev_tab" );
112
116 a=new TDEAction ( i18n("Split Ve&rtical"), "view_right", CTRL+SHIFT+Key_L, this, TQ_SLOT(
117 slotSplitViewSpaceVert() ), m_mainWindow->actionCollection(), "view_split_vert");
118
119 a->setWhatsThis(i18n("Split the currently active view vertically into two views."));
120
121 a=new TDEAction ( i18n("Split &Horizontal"), "view_bottom", CTRL+SHIFT+Key_T, this, TQ_SLOT(
122 slotSplitViewSpaceHoriz() ), m_mainWindow->actionCollection(), "view_split_horiz");
123
124 a->setWhatsThis(i18n("Split the currently active view horizontally into two views."));
125
126 m_closeView = new TDEAction ( i18n("Cl&ose Current View"), "view_remove", CTRL+SHIFT+Key_R, this,
127 TQ_SLOT( slotCloseCurrentViewSpace() ), m_mainWindow->actionCollection(),
128 "view_close_current_space" );
129
130 m_closeView->setWhatsThis(i18n("Close the currently active splitted view"));
131
132 goNext=new TDEAction(i18n("Next View"),Key_F8,this,
133 TQ_SLOT(activateNextView()),m_mainWindow->actionCollection(),"go_next");
134
135 goNext->setWhatsThis(i18n("Make the next split view the active one."));
136
137 goPrev=new TDEAction(i18n("Previous View"),SHIFT+Key_F8, this, TQ_SLOT(activatePrevView()),m_mainWindow->actionCollection(),"go_prev");
138
139 goPrev->setWhatsThis(i18n("Make the previous split view the active one."));
140
144 TQToolButton *b = new TQToolButton( m_mainWindow->tabWidget() );
145 connect( b, TQ_SIGNAL( clicked() ),
146 this, TQ_SLOT( slotNewTab() ) );
147 b->setIconSet( SmallIcon( "tab_new" ) );
148 b->adjustSize();
149 TQToolTip::add(b, i18n("Open a new tab"));
150 m_mainWindow->tabWidget()->setCornerWidget( b, TopLeft );
151
152 b = m_closeTabButton = new TQToolButton( m_mainWindow->tabWidget() );
153 connect( b, TQ_SIGNAL( clicked() ),
154 this, TQ_SLOT( slotCloseTab() ) );
155 b->setIconSet( SmallIcon( "tab_remove" ) );
156 b->adjustSize();
157 TQToolTip::add(b, i18n("Close the current tab"));
158 m_mainWindow->tabWidget()->setCornerWidget( b, TopRight );
159}
160
161void KateViewManager::updateViewSpaceActions ()
162{
163 if (!m_currentContainer) return;
164
165 m_closeView->setEnabled (m_currentContainer->viewSpaceCount() > 1);
166 goNext->setEnabled (m_currentContainer->viewSpaceCount() > 1);
167 goPrev->setEnabled (m_currentContainer->viewSpaceCount() > 1);
168}
169
170void KateViewManager::tabChanged(TQWidget* widget) {
171 KateViewSpaceContainer *container=static_cast<KateViewSpaceContainer*>(widget->tqt_cast("KateViewSpaceContainer"));
172 Q_ASSERT(container);
173 m_currentContainer=container;
174
175 if (container) {
176 container->reactivateActiveView();
177
178 }
179
180 m_closeTab->setEnabled(m_mainWindow->tabWidget()->count() > 1);
181 m_activateNextTab->setEnabled(m_mainWindow->tabWidget()->count() > 1);
182 m_activatePrevTab->setEnabled(m_mainWindow->tabWidget()->count() > 1);
183 m_closeTabButton->setEnabled (m_mainWindow->tabWidget()->count() > 1);
184
185 updateViewSpaceActions ();
186}
187
188void KateViewManager::slotNewTab()
189{
190 uint documentNumber=0;
191
192 if (m_currentContainer)
193 {
194 if (m_currentContainer->activeView())
195 documentNumber = m_currentContainer->activeView()->getDoc()->documentNumber();
196 }
197
198 KateViewSpaceContainer *container=new KateViewSpaceContainer (m_mainWindow->tabWidget(), this);
199 m_viewSpaceContainerList.append(container);
200 m_mainWindow->tabWidget()->addTab (container, "");
201
202 connect(container,TQ_SIGNAL(viewChanged()),this,TQ_SIGNAL(viewChanged()));
203 connect(container,TQ_SIGNAL(viewChanged()),m_viewManager,TQ_SIGNAL(viewChanged()));
204
205 if (!m_init)
206 {
207 container->activateView(documentNumber);
208 container->setShowFullPath(showFullPath);
209 m_mainWindow->slotWindowActivated ();
210 }
211}
212
213void KateViewManager::slotCloseTab()
214{
215 if (m_viewSpaceContainerList.count() <= 1) return;
216 if (!m_currentContainer) return;
217
218 int pos = m_viewSpaceContainerList.find (m_currentContainer);
219
220 if (pos == -1)
221 return;
222
223 if (guiMergedView)
224 m_mainWindow->guiFactory()->removeClient (guiMergedView );
225
226 m_viewSpaceContainerList.remove (pos);
227
228 if ((uint)pos >= m_viewSpaceContainerList.count())
229 pos = m_viewSpaceContainerList.count()-1;
230
231 tabChanged(m_viewSpaceContainerList.at (pos));
232}
233
234void KateViewManager::activateNextTab()
235{
236 if( m_mainWindow->tabWidget()->count() <= 1 ) return;
237
238 int iTab = m_mainWindow->tabWidget()->currentPageIndex();
239
240 iTab++;
241
242 if( iTab == m_mainWindow->tabWidget()->count() )
243 iTab = 0;
244
245 m_mainWindow->tabWidget()->setCurrentPage( iTab );
246}
247
248void KateViewManager::activatePrevTab()
249{
250 if( m_mainWindow->tabWidget()->count() <= 1 ) return;
251
252 int iTab = m_mainWindow->tabWidget()->currentPageIndex();
253
254 iTab--;
255
256 if( iTab == -1 )
257 iTab = m_mainWindow->tabWidget()->count() - 1;
258
259 m_mainWindow->tabWidget()->setCurrentPage( iTab );
260}
261
262void KateViewManager::activateSpace (Kate::View* v)
263{
264 if (m_currentContainer) {
265 m_currentContainer->activateSpace(v);
266 }
267}
268
269void KateViewManager::activateView ( Kate::View *view ) {
270 if (m_currentContainer) {
271 m_currentContainer->activateView(view);
272 }
273}
274
275KateViewSpace* KateViewManager::activeViewSpace ()
276{
277 if (m_currentContainer) {
278 return m_currentContainer->activeViewSpace();
279 }
280 return 0L;
281}
282
283Kate::View* KateViewManager::activeView ()
284{
285 if (m_currentContainer) {
286 return m_currentContainer->activeView();
287 }
288 return 0L;
289}
290
291void KateViewManager::setActiveSpace ( KateViewSpace* vs )
292{
293 if (m_currentContainer) {
294 m_currentContainer->setActiveSpace(vs);
295 }
296
297}
298
299void KateViewManager::setActiveView ( Kate::View* view )
300{
301 if (m_currentContainer) {
302 m_currentContainer->setActiveView(view);
303 }
304
305}
306
307
308void KateViewManager::activateView( uint documentNumber )
309{
310 if (m_currentContainer) {
311 m_currentContainer->activateView(documentNumber);
312 }
313}
314
315uint KateViewManager::viewCount ()
316{
317 uint viewCount=0;
318 for (uint i=0;i<m_viewSpaceContainerList.count();i++) {
319 viewCount+=m_viewSpaceContainerList.at(i)->viewCount();
320 }
321 return viewCount;
322
323}
324
325uint KateViewManager::viewSpaceCount ()
326{
327 uint viewSpaceCount=0;
328 for (uint i=0;i<m_viewSpaceContainerList.count();i++) {
329 viewSpaceCount+=m_viewSpaceContainerList.at(i)->viewSpaceCount();
330 }
331 return viewSpaceCount;
332}
333
334void KateViewManager::setViewActivationBlocked (bool block)
335{
336 for (uint i=0;i<m_viewSpaceContainerList.count();i++)
337 m_viewSpaceContainerList.at(i)->m_blockViewCreationAndActivation=block;
338}
339
340void KateViewManager::activateNextView()
341{
342 if (m_currentContainer) {
343 m_currentContainer->activateNextView();
344 }
345}
346
347void KateViewManager::activatePrevView()
348{
349 if (m_currentContainer) {
350 m_currentContainer->activatePrevView();
351 }
352}
353
354void KateViewManager::closeViews(uint documentNumber)
355{
356 for (uint i=0;i<m_viewSpaceContainerList.count();i++) {
357 m_viewSpaceContainerList.at(i)->closeViews(documentNumber);
358 }
359 tabChanged(m_currentContainer);
360}
361
362void KateViewManager::slotDocumentNew ()
363{
364 if (m_currentContainer) m_currentContainer->createView ();
365}
366
367void KateViewManager::slotDocumentOpen ()
368{
369 Kate::View *cv = activeView();
370
371 if (cv) {
372 KEncodingFileDialog::Result r=KEncodingFileDialog::getOpenURLsAndEncoding(
373 (cv ? KTextEditor::encodingInterface(cv->document())->encoding() : Kate::Document::defaultEncoding()),
374 (cv ? cv->document()->url().url() : TQString::null),
375 TQString::null,m_mainWindow,i18n("Open File"));
376
377 uint lastID = 0;
378 for (KURL::List::Iterator i=r.URLs.begin(); i != r.URLs.end(); ++i)
379 lastID = openURL( *i, r.encoding, false );
380
381 if (lastID > 0)
382 activateView (lastID);
383 }
384}
385
386void KateViewManager::slotDocumentClose ()
387{
388 // no active view, do nothing
389 if (!activeView()) return;
390
391 // prevent close document if only one view alive and the document of
392 // it is not modified and empty !!!
393 if ( (KateDocManager::self()->documents() == 1)
394 && !activeView()->getDoc()->isModified()
395 && activeView()->getDoc()->url().isEmpty()
396 && (activeView()->getDoc()->length() == 0) )
397 {
398 activeView()->getDoc()->closeURL();
399 return;
400 }
401
402 // close document
403 KateDocManager::self()->closeDocument (activeView()->getDoc());
404}
405
406uint KateViewManager::openURL (const KURL &url, const TQString& encoding, bool activate, bool isTempFile )
407{
408 uint id = 0;
409 Kate::Document *doc = KateDocManager::self()->openURL (url, encoding, &id, isTempFile );
410
411 if (!doc->url().isEmpty())
412 m_mainWindow->fileOpenRecent->addURL( doc->url() );
413
414 if (activate)
415 activateView( id );
416
417 return id;
418}
419
420void KateViewManager::openURL (const KURL &url)
421{
422 openURL (url, TQString::null);
423}
424
425void KateViewManager::removeViewSpace (KateViewSpace *viewspace)
426{
427 if (m_currentContainer) {
428 m_currentContainer->removeViewSpace(viewspace);
429 }
430}
431
432void KateViewManager::slotCloseCurrentViewSpace()
433{
434 if (m_currentContainer) {
435 m_currentContainer->slotCloseCurrentViewSpace();
436 }
437}
438
439void KateViewManager::slotSplitViewSpaceVert()
440{
441 if (m_currentContainer) {
442 m_currentContainer->slotSplitViewSpaceVert();
443 }
444}
445
446void KateViewManager::slotSplitViewSpaceHoriz()
447{
448 if (m_currentContainer) {
449 m_currentContainer->slotSplitViewSpaceHoriz();
450 }
451}
452
453void KateViewManager::setShowFullPath( bool enable )
454{
455 showFullPath=enable;
456 for (uint i=0;i<m_viewSpaceContainerList.count();i++) {
457 m_viewSpaceContainerList.at(i)->setShowFullPath(enable);
458 }
459 m_mainWindow->slotWindowActivated ();
460 }
461
465void KateViewManager::saveViewConfiguration(TDEConfig *config,const TQString& grp)
466{
467 // Use the same group name for view configuration as usual for sessions.
468 // (When called by session manager grp is a 1-based index for the main window)
469 TQString group = grp;
470 bool ok = false;
471 int n = group.toInt( &ok );
472 if ( ok )
473 group = TQString( "MainWindow%1" ).arg( n-1 );
474
475 config->setGroup(group);
476 config->writeEntry("ViewSpaceContainers",m_viewSpaceContainerList.count());
477 config->writeEntry("Active ViewSpaceContainer", m_mainWindow->tabWidget()->currentPageIndex());
478 for (uint i=0;i<m_viewSpaceContainerList.count();i++) {
479 m_viewSpaceContainerList.at(i)->saveViewConfiguration(config,group+TQString(":ViewSpaceContainer-%1:").arg(i));
480 }
481}
482
483void KateViewManager::restoreViewConfiguration (TDEConfig *config, const TQString& grp)
484{
485 // Use the same group name for view configuration as usual for sessions.
486 // (When called by session manager grp is a 1-based index for the main window)
487 TQString group = grp;
488 bool ok = false;
489 int n = group.toInt( &ok );
490 if ( ok )
491 group = TQString( "MainWindow%1" ).arg( n-1 );
492
493 config->setGroup(group);
494 uint tabCount=config->readNumEntry("ViewSpaceContainers",0);
495 int activeOne=config->readNumEntry("Active ViewSpaceContainer",0);
496 if (tabCount==0) return;
497 m_viewSpaceContainerList.at(0)->restoreViewConfiguration(config,group+TQString(":ViewSpaceContainer-0:"));
498 for (uint i=1;i<tabCount;i++) {
499 slotNewTab();
500 m_viewSpaceContainerList.at(i)->restoreViewConfiguration(config,group+TQString(":ViewSpaceContainer-%1:").arg(i));
501 }
502
503 if (activeOne != m_mainWindow->tabWidget()->currentPageIndex())
504 m_mainWindow->tabWidget()->setCurrentPage (activeOne);
505
506 updateViewSpaceActions();
507}
508
509KateMainWindow *KateViewManager::mainWindow() {
510 return m_mainWindow;
511}
Kate::ViewManager
Interface to the viewmanager.
Definition: viewmanager.h:34

kate

Skip menu "kate"
  • Main Page
  • Namespace List
  • Class Hierarchy
  • Alphabetical List
  • Class List
  • File List
  • Namespace Members
  • Class Members

kate

Skip menu "kate"
  • kate
  • libkonq
  • twin
  •   lib
Generated for kate by doxygen 1.9.4
This website is maintained by Timothy Pearson.