00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include "katemdi.h"
00024 #include "katemdi.moc"
00025
00026 #include <tdeaction.h>
00027 #include <kdebug.h>
00028 #include <tdeglobal.h>
00029 #include <tdeglobalsettings.h>
00030 #include <tdeapplication.h>
00031 #include <tdelocale.h>
00032 #include <tdeconfig.h>
00033 #include <kiconloader.h>
00034 #include <tdepopupmenu.h>
00035 #include <tdemessagebox.h>
00036
00037 #include <tqvbox.h>
00038 #include <tqhbox.h>
00039 #include <tqevent.h>
00040
00041 namespace KateMDI {
00042
00043
00044
00045 Splitter::Splitter(Orientation o, TQWidget* parent, const char* name)
00046 : TQSplitter(o, parent, name)
00047 {
00048 }
00049
00050 Splitter::~Splitter()
00051 {
00052 }
00053
00054 bool Splitter::isLastChild(TQWidget* w) const
00055 {
00056 return ( idAfter( w ) == 0 );
00057 }
00058
00059 int Splitter::idAfter ( TQWidget * w ) const
00060 {
00061 return TQSplitter::idAfter (w);
00062 }
00063
00064
00065
00066
00067
00068
00069 ToggleToolViewAction::ToggleToolViewAction ( const TQString& text, const TDEShortcut& cut, ToolView *tv,
00070 TQObject* parent, const char* name )
00071 : TDEToggleAction(text,cut,parent,name)
00072 , m_tv(tv)
00073 {
00074 connect(this,TQT_SIGNAL(toggled(bool)),this,TQT_SLOT(slotToggled(bool)));
00075 connect(m_tv,TQT_SIGNAL(visibleChanged(bool)),this,TQT_SLOT(visibleChanged(bool)));
00076
00077 setChecked(m_tv->visible());
00078 }
00079
00080 ToggleToolViewAction::~ToggleToolViewAction()
00081 {
00082 unplugAll();
00083 }
00084
00085 void ToggleToolViewAction::visibleChanged(bool)
00086 {
00087 if (isChecked() != m_tv->visible())
00088 setChecked (m_tv->visible());
00089 }
00090
00091 void ToggleToolViewAction::slotToggled(bool t)
00092 {
00093 if (t)
00094 {
00095 m_tv->mainWindow()->showToolView (m_tv);
00096 m_tv->setFocus ();
00097 }
00098 else
00099 {
00100 m_tv->mainWindow()->hideToolView (m_tv);
00101 m_tv->mainWindow()->centralWidget()->setFocus ();
00102 }
00103 }
00104
00105
00106
00107
00108
00109
00110 static const char *actionListName = "kate_mdi_window_actions";
00111
00112 static const char *guiDescription = ""
00113 "<!DOCTYPE kpartgui><kpartgui name=\"kate_mdi_window_actions\">"
00114 "<MenuBar>"
00115 " <Menu name=\"window\">"
00116 " <ActionList name=\"%1\" />"
00117 " </Menu>"
00118 "</MenuBar>"
00119 "</kpartgui>";
00120
00121 GUIClient::GUIClient ( MainWindow *mw )
00122 : TQObject ( mw )
00123 , KXMLGUIClient ( mw )
00124 , m_mw (mw)
00125 {
00126 connect( m_mw->guiFactory(), TQT_SIGNAL( clientAdded( KXMLGUIClient * ) ),
00127 this, TQT_SLOT( clientAdded( KXMLGUIClient * ) ) );
00128
00129 if ( domDocument().documentElement().isNull() )
00130 {
00131 TQString completeDescription = TQString::fromLatin1( guiDescription )
00132 .arg( actionListName );
00133
00134 setXML( completeDescription, false );
00135 }
00136
00137 if (actionCollection()->tdeaccel()==0)
00138 actionCollection()->setWidget(m_mw);
00139
00140 m_toolMenu = new TDEActionMenu(i18n("Tool &Views"),actionCollection(),"kate_mdi_toolview_menu");
00141 m_showSidebarsAction = new TDEToggleAction( i18n("Show Side&bars"),
00142 CTRL|ALT|SHIFT|Key_F, actionCollection(), "kate_mdi_sidebar_visibility" );
00143 m_showSidebarsAction->setCheckedState(i18n("Hide Side&bars"));
00144 m_showSidebarsAction->setChecked( m_mw->sidebarsVisible() );
00145 connect( m_showSidebarsAction, TQT_SIGNAL( toggled( bool ) ),
00146 m_mw, TQT_SLOT( setSidebarsVisible( bool ) ) );
00147
00148 m_toolMenu->insert( m_showSidebarsAction );
00149 m_toolMenu->insert( new TDEActionSeparator( m_toolMenu ) );
00150
00151
00152 actionCollection()->readShortcutSettings( "Shortcuts", kapp->config() );
00153 }
00154
00155 GUIClient::~GUIClient()
00156 {
00157 }
00158
00159 void GUIClient::updateSidebarsVisibleAction()
00160 {
00161 m_showSidebarsAction->setChecked( m_mw->sidebarsVisible() );
00162 }
00163
00164 void GUIClient::registerToolView (ToolView *tv)
00165 {
00166 TQString aname = TQString("kate_mdi_toolview_") + tv->id;
00167
00168
00169 TDEShortcut sc;
00170 TDEConfig *cfg = kapp->config();
00171 TQString _grp = cfg->group();
00172 cfg->setGroup("Shortcuts");
00173 sc = TDEShortcut( cfg->readEntry( aname, "" ) );
00174 cfg->setGroup( _grp );
00175
00176 TDEToggleAction *a = new ToggleToolViewAction(i18n("Show %1").arg(tv->text),
00177 sc,tv, actionCollection(), aname.latin1() );
00178
00179 a->setCheckedState(TQString(i18n("Hide %1").arg(tv->text)));
00180
00181 m_toolViewActions.append(a);
00182 m_toolMenu->insert(a);
00183
00184 m_toolToAction.insert (tv, a);
00185
00186 updateActions();
00187 }
00188
00189 void GUIClient::unregisterToolView (ToolView *tv)
00190 {
00191 TDEAction *a = m_toolToAction[tv];
00192
00193 if (!a)
00194 return;
00195
00196 m_toolViewActions.remove(a);
00197 delete a;
00198
00199 m_toolToAction.remove (tv);
00200
00201 updateActions();
00202 }
00203
00204 void GUIClient::clientAdded( KXMLGUIClient *client )
00205 {
00206 if ( client == this )
00207 updateActions();
00208 }
00209
00210 void GUIClient::updateActions()
00211 {
00212 if ( !factory() )
00213 return;
00214
00215 unplugActionList( actionListName );
00216
00217 TQPtrList<TDEAction> addList;
00218 addList.append(m_toolMenu);
00219
00220 plugActionList( actionListName, addList );
00221 }
00222
00223
00224
00225
00226
00227
00228 ToolView::ToolView (MainWindow *mainwin, Sidebar *sidebar, TQWidget *parent)
00229 : TQVBox (parent)
00230 , m_mainWin (mainwin)
00231 , m_sidebar (sidebar)
00232 , m_visible (false)
00233 , persistent (false)
00234 {
00235 }
00236
00237 ToolView::~ToolView ()
00238 {
00239 m_mainWin->toolViewDeleted (this);
00240 }
00241
00242 void ToolView::setVisible (bool vis)
00243 {
00244 if (m_visible == vis)
00245 return;
00246
00247 m_visible = vis;
00248 emit visibleChanged (m_visible);
00249 }
00250
00251 bool ToolView::visible () const
00252 {
00253 return m_visible;
00254 }
00255
00256 void ToolView::childEvent ( TQChildEvent *ev )
00257 {
00258
00259 if (ev->inserted() && ev->child() && TQT_TQOBJECT(ev->child())->tqt_cast(TQWIDGET_OBJECT_NAME_STRING)) {
00260 setFocusProxy (::tqqt_cast<QWidget*>(TQT_TQOBJECT(ev->child())));
00261 }
00262
00263 TQVBox::childEvent (ev);
00264 }
00265
00266
00267
00268
00269
00270
00271 Sidebar::Sidebar (KMultiTabBar::KMultiTabBarPosition pos, MainWindow *mainwin, TQWidget *parent)
00272 : KMultiTabBar ((pos == KMultiTabBar::Top || pos == KMultiTabBar::Bottom) ? KMultiTabBar::Horizontal : KMultiTabBar::Vertical, parent)
00273 , m_mainWin (mainwin)
00274 , m_splitter (0)
00275 , m_ownSplit (0)
00276 , m_lastSize (0)
00277 {
00278 setPosition( pos );
00279 hide ();
00280 }
00281
00282 Sidebar::~Sidebar ()
00283 {
00284 }
00285
00286 void Sidebar::setSplitter (Splitter *sp)
00287 {
00288 m_splitter = sp;
00289 m_ownSplit = new Splitter ((position() == KMultiTabBar::Top || position() == KMultiTabBar::Bottom) ? Qt::Horizontal : Qt::Vertical, m_splitter);
00290 m_ownSplit->setOpaqueResize( TDEGlobalSettings::opaqueResize() );
00291 m_ownSplit->setChildrenCollapsible( false );
00292 m_splitter->setResizeMode( m_ownSplit, TQSplitter::KeepSize );
00293 m_ownSplit->hide ();
00294 }
00295
00296 ToolView *Sidebar::addWidget (const TQPixmap &icon, const TQString &text, ToolView *widget)
00297 {
00298 static int id = 0;
00299
00300 if (widget)
00301 {
00302 if (widget->sidebar() == this)
00303 return widget;
00304
00305 widget->sidebar()->removeWidget (widget);
00306 }
00307
00308 int newId = ++id;
00309
00310 appendTab (icon, newId, text);
00311
00312 if (!widget)
00313 {
00314 widget = new ToolView (m_mainWin, this, m_ownSplit);
00315 widget->hide ();
00316 widget->icon = icon;
00317 widget->text = text;
00318 }
00319 else
00320 {
00321 widget->hide ();
00322 widget->reparent (m_ownSplit, 0, TQPoint());
00323 widget->m_sidebar = this;
00324 }
00325
00326
00327 widget->persistent = false;
00328
00329 m_idToWidget.insert (newId, widget);
00330 m_widgetToId.insert (widget, newId);
00331 m_toolviews.push_back (widget);
00332
00333 show ();
00334
00335 connect(tab(newId),TQT_SIGNAL(clicked(int)),this,TQT_SLOT(tabClicked(int)));
00336 tab(newId)->installEventFilter(this);
00337
00338 return widget;
00339 }
00340
00341 bool Sidebar::removeWidget (ToolView *widget)
00342 {
00343 if (!m_widgetToId.contains(widget))
00344 return false;
00345
00346 removeTab(m_widgetToId[widget]);
00347
00348 m_idToWidget.remove (m_widgetToId[widget]);
00349 m_widgetToId.remove (widget);
00350 m_toolviews.remove (widget);
00351
00352 bool anyVis = false;
00353 TQIntDictIterator<ToolView> it( m_idToWidget );
00354 for ( ; it.current(); ++it )
00355 {
00356 if (!anyVis)
00357 anyVis = it.current()->isVisible();
00358 }
00359
00360 if (m_idToWidget.isEmpty())
00361 {
00362 m_ownSplit->hide ();
00363 hide ();
00364 }
00365 else if (!anyVis)
00366 m_ownSplit->hide ();
00367
00368 return true;
00369 }
00370
00371 bool Sidebar::showWidget (ToolView *widget)
00372 {
00373 if (!m_widgetToId.contains(widget))
00374 return false;
00375
00376
00377 TQIntDictIterator<ToolView> it( m_idToWidget );
00378 for ( ; it.current(); ++it )
00379 if ((it.current() != widget) && !it.current()->persistent)
00380 {
00381 it.current()->hide();
00382 setTab (it.currentKey(), false);
00383 it.current()->setVisible(false);
00384 }
00385
00386 setTab (m_widgetToId[widget], true);
00387
00388 m_ownSplit->show ();
00389 widget->show ();
00390
00391 widget->setVisible (true);
00392
00393 return true;
00394 }
00395
00396 bool Sidebar::hideWidget (ToolView *widget)
00397 {
00398 if (!m_widgetToId.contains(widget))
00399 return false;
00400
00401 bool anyVis = false;
00402
00403 updateLastSize ();
00404
00405 for ( TQIntDictIterator<ToolView> it( m_idToWidget ); it.current(); ++it )
00406 {
00407 if (it.current() == widget)
00408 {
00409 it.current()->hide();
00410 continue;
00411 }
00412
00413 if (!anyVis)
00414 anyVis = it.current()->isVisible();
00415 }
00416
00417
00418 setTab (m_widgetToId[widget], false);
00419
00420 if (!anyVis)
00421 m_ownSplit->hide ();
00422
00423 widget->setVisible (false);
00424
00425 return true;
00426 }
00427
00428 void Sidebar::tabClicked(int i)
00429 {
00430 ToolView *w = m_idToWidget[i];
00431
00432 if (!w)
00433 return;
00434
00435 if (isTabRaised(i))
00436 {
00437 showWidget (w);
00438 w->setFocus ();
00439 }
00440 else
00441 {
00442 hideWidget (w);
00443 m_mainWin->centralWidget()->setFocus ();
00444 }
00445 }
00446
00447 bool Sidebar::eventFilter(TQObject *obj, TQEvent *ev)
00448 {
00449 if (ev->type()==TQEvent::ContextMenu)
00450 {
00451 TQContextMenuEvent *e = (TQContextMenuEvent *) ev;
00452 KMultiTabBarTab *bt = tqt_dynamic_cast<KMultiTabBarTab*>(obj);
00453 if (bt)
00454 {
00455 kdDebug()<<"Request for popup"<<endl;
00456
00457 m_popupButton = bt->id();
00458
00459 ToolView *w = m_idToWidget[m_popupButton];
00460
00461 if (w)
00462 {
00463 TDEPopupMenu *p = new TDEPopupMenu (this);
00464
00465 p->insertTitle(SmallIcon("view_remove"), i18n("Behavior"), 50);
00466
00467 p->insertItem(w->persistent ? SmallIconSet("view-restore") : SmallIconSet("view-fullscreen"), w->persistent ? i18n("Make Non-Persistent") : i18n("Make Persistent"), 10);
00468
00469 p->insertTitle(SmallIcon("move"), i18n("Move To"), 51);
00470
00471 if (position() != 0)
00472 p->insertItem(SmallIconSet("back"), i18n("Left Sidebar"),0);
00473
00474 if (position() != 1)
00475 p->insertItem(SmallIconSet("forward"), i18n("Right Sidebar"),1);
00476
00477 if (position() != 2)
00478 p->insertItem(SmallIconSet("go-up"), i18n("Top Sidebar"),2);
00479
00480 if (position() != 3)
00481 p->insertItem(SmallIconSet("go-down"), i18n("Bottom Sidebar"),3);
00482
00483 connect(p, TQT_SIGNAL(activated(int)),
00484 this, TQT_SLOT(buttonPopupActivate(int)));
00485
00486 p->exec(e->globalPos());
00487 delete p;
00488
00489 return true;
00490 }
00491 }
00492 }
00493
00494 return false;
00495 }
00496
00497 void Sidebar::show()
00498 {
00499 if (m_idToWidget.isEmpty() || !m_mainWin->sidebarsVisible() )
00500 return;
00501
00502 KMultiTabBar::show( );
00503 }
00504
00505 void Sidebar::buttonPopupActivate (int id)
00506 {
00507 ToolView *w = m_idToWidget[m_popupButton];
00508
00509 if (!w)
00510 return;
00511
00512
00513 if (id < 4)
00514 {
00515
00516 m_mainWin->moveToolView (w, (KMultiTabBar::KMultiTabBarPosition) id);
00517 m_mainWin->showToolView (w);
00518 }
00519
00520
00521 if (id == 10)
00522 w->persistent = !w->persistent;
00523 }
00524
00525 void Sidebar::updateLastSize ()
00526 {
00527 TQValueList<int> s = m_splitter->sizes ();
00528
00529 int i = 0;
00530 if ((position() == KMultiTabBar::Right || position() == KMultiTabBar::Bottom))
00531 i = 2;
00532
00533
00534 if (s[i] > 2)
00535 m_lastSize = s[i];
00536 }
00537
00538 class TmpToolViewSorter
00539 {
00540 public:
00541 ToolView *tv;
00542 unsigned int pos;
00543 };
00544
00545 void Sidebar::restoreSession (TDEConfig *config)
00546 {
00547
00548 unsigned int firstWrong = 0;
00549 for ( ; firstWrong < m_toolviews.size(); ++firstWrong )
00550 {
00551 ToolView *tv = m_toolviews[firstWrong];
00552
00553 unsigned int pos = config->readUnsignedNumEntry (TQString ("Kate-MDI-ToolView-%1-Sidebar-Position").arg(tv->id), firstWrong);
00554
00555 if (pos != firstWrong)
00556 break;
00557 }
00558
00559
00560 if (firstWrong < m_toolviews.size())
00561 {
00562
00563 TQValueList<TmpToolViewSorter> toSort;
00564 for (unsigned int i=firstWrong; i < m_toolviews.size(); ++i)
00565 {
00566 TmpToolViewSorter s;
00567 s.tv = m_toolviews[i];
00568 s.pos = config->readUnsignedNumEntry (TQString ("Kate-MDI-ToolView-%1-Sidebar-Position").arg(m_toolviews[i]->id), i);
00569 toSort.push_back (s);
00570 }
00571
00572
00573 for (unsigned int m=0; m < toSort.size(); ++m)
00574 for (unsigned int n=m+1; n < toSort.size(); ++n)
00575 if (toSort[n].pos < toSort[m].pos)
00576 {
00577 TmpToolViewSorter tmp = toSort[n];
00578 toSort[n] = toSort[m];
00579 toSort[m] = tmp;
00580 }
00581
00582
00583
00584 for (int i=m_toolviews.size()-1; i >= (int)firstWrong; --i)
00585 {
00586 removeTab (m_widgetToId[m_toolviews[i]]);
00587 }
00588
00589
00590 for (unsigned int i=0; i < toSort.size(); ++i)
00591 {
00592 ToolView *tv = toSort[i].tv;
00593
00594 m_toolviews[firstWrong+i] = tv;
00595
00596
00597 int newId = m_widgetToId[tv];
00598 appendTab (tv->icon, newId, tv->text);
00599 connect(tab(newId),TQT_SIGNAL(clicked(int)),this,TQT_SLOT(tabClicked(int)));
00600 tab(newId)->installEventFilter(this);
00601
00602
00603 m_ownSplit->moveToLast (tv);
00604 }
00605 }
00606
00607
00608 updateLastSize ();
00609
00610
00611 TQValueList<int> s = config->readIntListEntry (TQString ("Kate-MDI-Sidebar-%1-Splitter").arg(position()));
00612 m_ownSplit->setSizes (s);
00613
00614
00615 bool anyVis = false;
00616 for ( unsigned int i=0; i < m_toolviews.size(); ++i )
00617 {
00618 ToolView *tv = m_toolviews[i];
00619
00620 tv->persistent = config->readBoolEntry (TQString ("Kate-MDI-ToolView-%1-Persistent").arg(tv->id), false);
00621 tv->setVisible (config->readBoolEntry (TQString ("Kate-MDI-ToolView-%1-Visible").arg(tv->id), false));
00622
00623 if (!anyVis)
00624 anyVis = tv->visible();
00625
00626 setTab (m_widgetToId[tv],tv->visible());
00627
00628 if (tv->visible())
00629 tv->show();
00630 else
00631 tv->hide ();
00632 }
00633
00634 if (anyVis)
00635 m_ownSplit->show();
00636 else
00637 m_ownSplit->hide();
00638 }
00639
00640 void Sidebar::saveSession (TDEConfig *config)
00641 {
00642
00643 TQValueList<int> s = m_ownSplit->sizes();
00644 config->writeEntry (TQString ("Kate-MDI-Sidebar-%1-Splitter").arg(position()), s);
00645
00646
00647 for ( unsigned int i=0; i < m_toolviews.size(); ++i )
00648 {
00649 ToolView *tv = m_toolviews[i];
00650
00651 config->writeEntry (TQString ("Kate-MDI-ToolView-%1-Position").arg(tv->id), tv->sidebar()->position());
00652 config->writeEntry (TQString ("Kate-MDI-ToolView-%1-Sidebar-Position").arg(tv->id), i);
00653 config->writeEntry (TQString ("Kate-MDI-ToolView-%1-Visible").arg(tv->id), tv->visible());
00654 config->writeEntry (TQString ("Kate-MDI-ToolView-%1-Persistent").arg(tv->id), tv->persistent);
00655 }
00656 }
00657
00658
00659
00660
00661
00662
00663 MainWindow::MainWindow (TQWidget* parentWidget, const char* name)
00664 : KParts::MainWindow( parentWidget, name)
00665 , m_sidebarsVisible(true)
00666 , m_restoreConfig (0)
00667 , m_guiClient (new GUIClient (this))
00668 {
00669
00670 TQHBox *hb = new TQHBox (this);
00671 setCentralWidget(hb);
00672
00673 m_sidebars[KMultiTabBar::Left] = new Sidebar (KMultiTabBar::Left, this, hb);
00674
00675 m_hSplitter = new Splitter (Qt::Horizontal, hb);
00676 m_hSplitter->setOpaqueResize( TDEGlobalSettings::opaqueResize() );
00677
00678 m_sidebars[KMultiTabBar::Left]->setSplitter (m_hSplitter);
00679
00680 TQVBox *vb = new TQVBox (m_hSplitter);
00681 m_hSplitter->setCollapsible(vb, false);
00682
00683 m_sidebars[KMultiTabBar::Top] = new Sidebar (KMultiTabBar::Top, this, vb);
00684
00685 m_vSplitter = new Splitter (Qt::Vertical, vb);
00686 m_vSplitter->setOpaqueResize( TDEGlobalSettings::opaqueResize() );
00687
00688 m_sidebars[KMultiTabBar::Top]->setSplitter (m_vSplitter);
00689
00690 m_centralWidget = new TQVBox (m_vSplitter);
00691 m_vSplitter->setCollapsible(m_centralWidget, false);
00692
00693 m_sidebars[KMultiTabBar::Bottom] = new Sidebar (KMultiTabBar::Bottom, this, vb);
00694 m_sidebars[KMultiTabBar::Bottom]->setSplitter (m_vSplitter);
00695
00696 m_sidebars[KMultiTabBar::Right] = new Sidebar (KMultiTabBar::Right, this, hb);
00697 m_sidebars[KMultiTabBar::Right]->setSplitter (m_hSplitter);
00698 }
00699
00700 MainWindow::~MainWindow ()
00701 {
00702
00703 while (!m_toolviews.isEmpty())
00704 delete m_toolviews[0];
00705
00706
00707 delete m_centralWidget;
00708
00709 for (unsigned int i=0; i < 4; ++i)
00710 delete m_sidebars[i];
00711 }
00712
00713 TQWidget *MainWindow::centralWidget () const
00714 {
00715 return m_centralWidget;
00716 }
00717
00718 ToolView *MainWindow::createToolView (const TQString &identifier, KMultiTabBar::KMultiTabBarPosition pos, const TQPixmap &icon, const TQString &text)
00719 {
00720 if (m_idToWidget[identifier])
00721 return 0;
00722
00723
00724 if (m_restoreConfig && m_restoreConfig->hasGroup (m_restoreGroup))
00725 {
00726 m_restoreConfig->setGroup (m_restoreGroup);
00727 pos = (KMultiTabBar::KMultiTabBarPosition) m_restoreConfig->readNumEntry (TQString ("Kate-MDI-ToolView-%1-Position").arg(identifier), pos);
00728 }
00729
00730 ToolView *v = m_sidebars[pos]->addWidget (icon, text, 0);
00731 v->id = identifier;
00732
00733 m_idToWidget.insert (identifier, v);
00734 m_toolviews.push_back (v);
00735
00736
00737 m_guiClient->registerToolView (v);
00738
00739 return v;
00740 }
00741
00742 ToolView *MainWindow::toolView (const TQString &identifier) const
00743 {
00744 return m_idToWidget[identifier];
00745 }
00746
00747 void MainWindow::toolViewDeleted (ToolView *widget)
00748 {
00749 if (!widget)
00750 return;
00751
00752 if (widget->mainWindow() != this)
00753 return;
00754
00755
00756 m_guiClient->unregisterToolView (widget);
00757
00758 widget->sidebar()->removeWidget (widget);
00759
00760 m_idToWidget.remove (widget->id);
00761 m_toolviews.remove (widget);
00762 }
00763
00764 void MainWindow::setSidebarsVisible( bool visible )
00765 {
00766 m_sidebarsVisible = visible;
00767
00768 m_sidebars[0]->setShown(visible);
00769 m_sidebars[1]->setShown(visible);
00770 m_sidebars[2]->setShown(visible);
00771 m_sidebars[3]->setShown(visible);
00772
00773 m_guiClient->updateSidebarsVisibleAction();
00774
00775
00776 if( !m_sidebarsVisible )
00777 {
00778 KMessageBox::information( this,
00779 i18n("<qt>You are about to hide the sidebars. With "
00780 "hidden sidebars it is not possible to directly "
00781 "access the tool views with the mouse anymore, "
00782 "so if you need to access the sidebars again "
00783 "invoke <b>Window > Tool Views > Show Sidebars</b> "
00784 "in the menu. It is still possible to show/hide "
00785 "the tool views with the assigned shortcuts.</qt>"),
00786 TQString::null, "Kate hide sidebars notification message" );
00787 }
00788 }
00789
00790 bool MainWindow::sidebarsVisible() const
00791 {
00792 return m_sidebarsVisible;
00793 }
00794
00795 void MainWindow::setToolViewStyle (KMultiTabBar::KMultiTabBarStyle style)
00796 {
00797 m_sidebars[0]->setStyle(style);
00798 m_sidebars[1]->setStyle(style);
00799 m_sidebars[2]->setStyle(style);
00800 m_sidebars[3]->setStyle(style);
00801 }
00802
00803 KMultiTabBar::KMultiTabBarStyle MainWindow::toolViewStyle () const
00804 {
00805
00806 return m_sidebars[KMultiTabBar::Top]->tabStyle();
00807 }
00808
00809 bool MainWindow::moveToolView (ToolView *widget, KMultiTabBar::KMultiTabBarPosition pos)
00810 {
00811 if (!widget || widget->mainWindow() != this)
00812 return false;
00813
00814
00815 if (m_restoreConfig && m_restoreConfig->hasGroup (m_restoreGroup))
00816 {
00817 m_restoreConfig->setGroup (m_restoreGroup);
00818 pos = (KMultiTabBar::KMultiTabBarPosition) m_restoreConfig->readNumEntry (TQString ("Kate-MDI-ToolView-%1-Position").arg(widget->id), pos);
00819 }
00820
00821 m_sidebars[pos]->addWidget (widget->icon, widget->text, widget);
00822
00823 return true;
00824 }
00825
00826 bool MainWindow::showToolView (ToolView *widget)
00827 {
00828 if (!widget || widget->mainWindow() != this)
00829 return false;
00830
00831
00832 if (m_restoreConfig && m_restoreConfig->hasGroup (m_restoreGroup))
00833 return true;
00834
00835 return widget->sidebar()->showWidget (widget);
00836 }
00837
00838 bool MainWindow::hideToolView (ToolView *widget)
00839 {
00840 if (!widget || widget->mainWindow() != this)
00841 return false;
00842
00843
00844 if (m_restoreConfig && m_restoreConfig->hasGroup (m_restoreGroup))
00845 return true;
00846
00847 return widget->sidebar()->hideWidget (widget);
00848 }
00849
00850 void MainWindow::startRestore (TDEConfig *config, const TQString &group)
00851 {
00852
00853 m_restoreConfig = config;
00854 m_restoreGroup = group;
00855
00856 if (!m_restoreConfig || !m_restoreConfig->hasGroup (m_restoreGroup))
00857 {
00858
00859 TQValueList<int> hs;
00860 hs << 200 << 100 << 200;
00861 TQValueList<int> vs;
00862 vs << 150 << 100 << 200;
00863
00864 m_sidebars[0]->setLastSize (hs[0]);
00865 m_sidebars[1]->setLastSize (hs[2]);
00866 m_sidebars[2]->setLastSize (vs[0]);
00867 m_sidebars[3]->setLastSize (vs[2]);
00868
00869 m_hSplitter->setSizes(hs);
00870 m_vSplitter->setSizes(vs);
00871 return;
00872 }
00873
00874
00875 m_restoreConfig->setGroup (m_restoreGroup);
00876 restoreWindowSize (m_restoreConfig);
00877
00878 m_restoreConfig->setGroup (m_restoreGroup);
00879
00880
00881 TQValueList<int> hs = m_restoreConfig->readIntListEntry ("Kate-MDI-H-Splitter");
00882 TQValueList<int> vs = m_restoreConfig->readIntListEntry ("Kate-MDI-V-Splitter");
00883
00884 m_sidebars[0]->setLastSize (hs[0]);
00885 m_sidebars[1]->setLastSize (hs[2]);
00886 m_sidebars[2]->setLastSize (vs[0]);
00887 m_sidebars[3]->setLastSize (vs[2]);
00888
00889 m_hSplitter->setSizes(hs);
00890 m_vSplitter->setSizes(vs);
00891
00892 setToolViewStyle( (KMultiTabBar::KMultiTabBarStyle)m_restoreConfig->readNumEntry ("Kate-MDI-Sidebar-Style", (int)toolViewStyle()) );
00893
00894
00895 m_sidebarsVisible = m_restoreConfig->readBoolEntry ("Kate-MDI-Sidebar-Visible", true );
00896 m_guiClient->updateSidebarsVisibleAction();
00897 }
00898
00899 void MainWindow::finishRestore ()
00900 {
00901 if (!m_restoreConfig)
00902 return;
00903
00904 if (m_restoreConfig->hasGroup (m_restoreGroup))
00905 {
00906
00907 applyMainWindowSettings(m_restoreConfig, m_restoreGroup);
00908
00909
00910 m_restoreConfig->setGroup (m_restoreGroup);
00911 for ( unsigned int i=0; i < m_toolviews.size(); ++i )
00912 {
00913 KMultiTabBar::KMultiTabBarPosition newPos = (KMultiTabBar::KMultiTabBarPosition) m_restoreConfig->readNumEntry (TQString ("Kate-MDI-ToolView-%1-Position").arg(m_toolviews[i]->id), m_toolviews[i]->sidebar()->position());
00914
00915 if (m_toolviews[i]->sidebar()->position() != newPos)
00916 {
00917 moveToolView (m_toolviews[i], newPos);
00918 }
00919 }
00920
00921
00922 m_restoreConfig->setGroup (m_restoreGroup);
00923 for (unsigned int i=0; i < 4; ++i)
00924 m_sidebars[i]->restoreSession (m_restoreConfig);
00925 }
00926
00927
00928 m_restoreConfig = 0;
00929 m_restoreGroup = "";
00930 }
00931
00932 void MainWindow::saveSession (TDEConfig *config, const TQString &group)
00933 {
00934 if (!config)
00935 return;
00936
00937 saveMainWindowSettings (config, group);
00938
00939 config->setGroup (group);
00940
00941
00942 TQValueList<int> hs = m_hSplitter->sizes();
00943 TQValueList<int> vs = m_vSplitter->sizes();
00944
00945 if (hs[0] <= 2 && !m_sidebars[0]->splitterVisible ())
00946 hs[0] = m_sidebars[0]->lastSize();
00947 if (hs[2] <= 2 && !m_sidebars[1]->splitterVisible ())
00948 hs[2] = m_sidebars[1]->lastSize();
00949 if (vs[0] <= 2 && !m_sidebars[2]->splitterVisible ())
00950 vs[0] = m_sidebars[2]->lastSize();
00951 if (vs[2] <= 2 && !m_sidebars[3]->splitterVisible ())
00952 vs[2] = m_sidebars[3]->lastSize();
00953
00954 config->writeEntry ("Kate-MDI-H-Splitter", hs);
00955 config->writeEntry ("Kate-MDI-V-Splitter", vs);
00956
00957
00958 config->writeEntry ("Kate-MDI-Sidebar-Style", (int)toolViewStyle());
00959 config->writeEntry ("Kate-MDI-Sidebar-Visible", m_sidebarsVisible );
00960
00961
00962 for (unsigned int i=0; i < 4; ++i)
00963 m_sidebars[i]->saveSession (config);
00964 }
00965
00966
00967
00968 }
00969
00970