• 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 <kstandarddirs.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 
57 KateViewManager::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 
85 KateViewManager::~KateViewManager ()
86 {
87  m_viewSpaceContainerList.setAutoDelete(false);
88 }
89 
90 void 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 
161 void 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 
170 void 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 
188 void 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 
213 void 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 
234 void 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 
248 void 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 
262 void KateViewManager::activateSpace (Kate::View* v)
263 {
264  if (m_currentContainer) {
265  m_currentContainer->activateSpace(v);
266  }
267 }
268 
269 void KateViewManager::activateView ( Kate::View *view ) {
270  if (m_currentContainer) {
271  m_currentContainer->activateView(view);
272  }
273 }
274 
275 KateViewSpace* KateViewManager::activeViewSpace ()
276 {
277  if (m_currentContainer) {
278  return m_currentContainer->activeViewSpace();
279  }
280  return 0L;
281 }
282 
283 Kate::View* KateViewManager::activeView ()
284 {
285  if (m_currentContainer) {
286  return m_currentContainer->activeView();
287  }
288  return 0L;
289 }
290 
291 void KateViewManager::setActiveSpace ( KateViewSpace* vs )
292 {
293  if (m_currentContainer) {
294  m_currentContainer->setActiveSpace(vs);
295  }
296 
297 }
298 
299 void KateViewManager::setActiveView ( Kate::View* view )
300 {
301  if (m_currentContainer) {
302  m_currentContainer->setActiveView(view);
303  }
304 
305 }
306 
307 
308 void KateViewManager::activateView( uint documentNumber )
309 {
310  if (m_currentContainer) {
311  m_currentContainer->activateView(documentNumber);
312  }
313 }
314 
315 uint 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 
325 uint 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 
334 void 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 
340 void KateViewManager::activateNextView()
341 {
342  if (m_currentContainer) {
343  m_currentContainer->activateNextView();
344  }
345 }
346 
347 void KateViewManager::activatePrevView()
348 {
349  if (m_currentContainer) {
350  m_currentContainer->activatePrevView();
351  }
352 }
353 
354 void 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 
362 void KateViewManager::slotDocumentNew ()
363 {
364  if (m_currentContainer) m_currentContainer->createView ();
365 }
366 
367 void 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 
386 void 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 
406 uint 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 
420 void KateViewManager::openURL (const KURL &url)
421 {
422  openURL (url, TQString::null);
423 }
424 
425 void KateViewManager::removeViewSpace (KateViewSpace *viewspace)
426 {
427  if (m_currentContainer) {
428  m_currentContainer->removeViewSpace(viewspace);
429  }
430 }
431 
432 void KateViewManager::slotCloseCurrentViewSpace()
433 {
434  if (m_currentContainer) {
435  m_currentContainer->slotCloseCurrentViewSpace();
436  }
437 }
438 
439 void KateViewManager::slotSplitViewSpaceVert()
440 {
441  if (m_currentContainer) {
442  m_currentContainer->slotSplitViewSpaceVert();
443  }
444 }
445 
446 void KateViewManager::slotSplitViewSpaceHoriz()
447 {
448  if (m_currentContainer) {
449  m_currentContainer->slotSplitViewSpaceHoriz();
450  }
451 }
452 
453 void 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 
465 void 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 
483 void 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 
509 KateMainWindow *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.1
This website is maintained by Timothy Pearson.