kmdi Library API Documentation

kmdiguiclient.cpp

00001 /* This file is part of the KDE libraries 00002 Copyright (C) 2003 Joseph Wenninger <jowenn@kde.org> 00003 based on ktoolbarhandler.cpp: Copyright (C) 2002 Simon Hausmann <hausmann@kde.org> 00004 00005 This library is free software; you can redistribute it and/or 00006 modify it under the terms of the GNU Library General Public 00007 License version 2 as published by the Free Software Foundation. 00008 00009 This library is distributed in the hope that it will be useful, 00010 but WITHOUT ANY WARRANTY; without even the implied warranty of 00011 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00012 Library General Public License for more details. 00013 00014 You should have received a copy of the GNU Library General Public License 00015 along with this library; see the file COPYING.LIB. If not, write to 00016 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 00017 Boston, MA 02111-1307, USA. 00018 */ 00019 00020 #include "kmdiguiclient.h" 00021 #include "kmdiguiclient.moc" 00022 00023 #include <qpopupmenu.h> 00024 #include <kapplication.h> 00025 #include <kconfig.h> 00026 #include <ktoolbar.h> 00027 #include <kmainwindow.h> 00028 #include <klocale.h> 00029 #include <kaction.h> 00030 #include <qstring.h> 00031 #include <assert.h> 00032 #include <kdebug.h> 00033 #include <kdockwidget.h> 00034 #include <kdeversion.h> 00035 #include "kmdimainfrm.h" 00036 #include "kmditoolviewaccessor.h" 00037 #include "kmditoolviewaccessor_p.h" 00038 namespace 00039 { 00040 const char *actionListName = "show_kmdi_document_tool_view_actions"; 00041 00042 const char *guiDescription = "" 00043 "<!DOCTYPE kpartgui><kpartgui name=\"KMDIViewActions\">" 00044 "<MenuBar>" 00045 " <Menu name=\"view\">" 00046 " <ActionList name=\"%1\" />" 00047 " </Menu>" 00048 "</MenuBar>" 00049 "</kpartgui>"; 00050 00051 const char *resourceFileName = "kmdiviewactions.rc"; 00052 00053 } 00054 00055 00056 using namespace KMDIPrivate; 00057 00058 00059 00060 ToggleToolViewAction::ToggleToolViewAction( const QString& text, const KShortcut& cut,KDockWidget *dw, KMdiMainFrm *mdiMainFrm, 00061 QObject* parent, const char* name ) 00062 :KToggleAction(text,cut,parent,name),m_dw(dw),m_mdiMainFrm(mdiMainFrm) 00063 { 00064 if (m_dw) { 00065 connect(this,SIGNAL(toggled(bool)),this,SLOT(slotToggled(bool))); 00066 connect(m_dw->dockManager(),SIGNAL(change()),this,SLOT(anDWChanged())); 00067 connect(m_dw,SIGNAL(destroyed()),this,SLOT(slotWidgetDestroyed())); 00068 setChecked(m_dw->mayBeHide()); 00069 } 00070 } 00071 00072 00073 ToggleToolViewAction::~ToggleToolViewAction(){unplugAll();} 00074 00075 void ToggleToolViewAction::anDWChanged() 00076 { 00077 if (isChecked() && m_dw->mayBeShow()) setChecked(false); 00078 else if ((!isChecked()) && m_dw->mayBeHide()) setChecked(true); 00079 else if (isChecked() && (m_dw->parentDockTabGroup() && 00080 ((static_cast<KDockWidget*>(m_dw->parentDockTabGroup()-> 00081 parent()->qt_cast("KDockWidget")))->mayBeShow()))) setChecked(false); 00082 } 00083 00084 00085 void ToggleToolViewAction::slotToggled(bool t) 00086 { 00087 // m_mw->mainDock->setDockSite( KDockWidget::DockCorner ); 00088 00089 if ((!t) && m_dw->mayBeHide() ) m_dw->undock(); 00090 else 00091 if ( t && m_dw->mayBeShow() ) m_mdiMainFrm->makeDockVisible(m_dw); 00092 00093 // m_mw->mainDock->setDockSite( KDockWidget::DockNone ); 00094 } 00095 00096 void ToggleToolViewAction::slotWidgetDestroyed() 00097 { 00098 disconnect(m_dw->dockManager(),SIGNAL(change()),this,SLOT(anDWChanged())); 00099 disconnect(this,SIGNAL(toggled(bool)),0,0); 00100 unplugAll(); 00101 deleteLater(); 00102 } 00103 00104 00105 KMDIGUIClient::KMDIGUIClient(KMdiMainFrm* mdiMainFrm,bool showMDIModeAction, const char* name): QObject( mdiMainFrm,name ), 00106 KXMLGUIClient( mdiMainFrm ) 00107 { 00108 m_mdiMode=KMdi::ChildframeMode; 00109 m_mdiMainFrm=mdiMainFrm; 00110 connect( mdiMainFrm->guiFactory(), SIGNAL( clientAdded( KXMLGUIClient * ) ), 00111 this, SLOT( clientAdded( KXMLGUIClient * ) ) ); 00112 00113 /* re-use an existing resource file if it exists. can happen if the user launches the 00114 * toolbar editor */ 00115 /* 00116 setXMLFile( resourceFileName ); 00117 */ 00118 00119 if ( domDocument().documentElement().isNull() ) { 00120 00121 QString completeDescription = QString::fromLatin1( guiDescription ) 00122 .arg( actionListName ); 00123 00124 setXML( completeDescription, false /*merge*/ ); 00125 } 00126 00127 if (actionCollection()->kaccel()==0) 00128 actionCollection()->setWidget(mdiMainFrm); 00129 m_toolMenu=new KActionMenu(i18n("Tool &Views"),actionCollection(),"kmdi_toolview_menu"); 00130 if (showMDIModeAction) { 00131 m_mdiModeAction=new KSelectAction(i18n("MDI Mode"),0,actionCollection()); 00132 QStringList modes; 00133 modes<<i18n("&Toplevel Mode")<<i18n("C&hildframe Mode")<<i18n("Ta&b Page Mode")<<i18n("I&DEAl Mode"); 00134 m_mdiModeAction->setItems(modes); 00135 connect(m_mdiModeAction,SIGNAL(activated(int)),this,SLOT(changeViewMode(int))); 00136 } else m_mdiModeAction=0; 00137 00138 connect(m_mdiMainFrm,SIGNAL(mdiModeHasBeenChangedTo(KMdi::MdiMode)), 00139 this,SLOT(mdiModeHasBeenChangedTo(KMdi::MdiMode))); 00140 00141 m_gotoToolDockMenu=new KActionMenu(i18n("Tool &Docks"),actionCollection(),"kmdi_tooldock_menu"); 00142 m_gotoToolDockMenu->insert(new KAction(i18n("Switch Top Dock"),ALT+CTRL+SHIFT+Key_T,this,SIGNAL(toggleTop()), 00143 actionCollection(),"kmdi_activate_top")); 00144 m_gotoToolDockMenu->insert(new KAction(i18n("Switch Left Dock"),ALT+CTRL+SHIFT+Key_L,this,SIGNAL(toggleLeft()), 00145 actionCollection(),"kmdi_activate_left")); 00146 m_gotoToolDockMenu->insert(new KAction(i18n("Switch Right Dock"),ALT+CTRL+SHIFT+Key_R,this,SIGNAL(toggleRight()), 00147 actionCollection(),"kmdi_activate_right")); 00148 m_gotoToolDockMenu->insert(new KAction(i18n("Switch Bottom Dock"),ALT+CTRL+SHIFT+Key_B,this,SIGNAL(toggleBottom()), 00149 actionCollection(),"kmdi_activate_bottom")); 00150 m_gotoToolDockMenu->insert(new KActionSeparator(actionCollection(),"kmdi_goto_menu_separator")); 00151 m_gotoToolDockMenu->insert(new KAction(i18n("Previous Tool View"),ALT+CTRL+Key_Left,m_mdiMainFrm,SLOT(prevToolViewInDock()), 00152 actionCollection(),"kmdi_prev_toolview")); 00153 m_gotoToolDockMenu->insert(new KAction(i18n("Next Tool View"),ALT+CTRL+Key_Right,m_mdiMainFrm,SLOT(nextToolViewInDock()), 00154 actionCollection(),"kmdi_next_toolview")); 00155 00156 actionCollection()->readShortcutSettings( "Shortcuts", kapp->config() ); 00157 } 00158 00159 KMDIGUIClient::~KMDIGUIClient() 00160 { 00161 00162 // actionCollection()->writeShortcutSettings( "KMDI Shortcuts", kapp->config() ); 00163 for (uint i=0;i<m_toolViewActions.count();i++) 00164 disconnect(m_toolViewActions.at(i),0,this,0); 00165 00166 m_toolViewActions.setAutoDelete( false ); 00167 m_toolViewActions.clear(); 00168 m_documentViewActions.setAutoDelete( false ); 00169 m_documentViewActions.clear(); 00170 } 00171 00172 void KMDIGUIClient::changeViewMode(int id) { 00173 switch (id) { 00174 case 0: m_mdiMainFrm->switchToToplevelMode(); 00175 break; 00176 case 1: m_mdiMainFrm->switchToChildframeMode(); 00177 break; 00178 case 2: m_mdiMainFrm->switchToTabPageMode(); 00179 break; 00180 case 3: m_mdiMainFrm->switchToIDEAlMode(); 00181 break; 00182 default: 00183 Q_ASSERT(0); 00184 } 00185 } 00186 00187 void KMDIGUIClient::setupActions() 00188 { 00189 if ( !factory() || !m_mdiMainFrm ) 00190 return; 00191 00192 // BarActionBuilder builder( actionCollection(), m_mainWindow, m_toolBars ); 00193 00194 // if ( !builder.needsRebuild() ) 00195 // return; 00196 00197 00198 unplugActionList( actionListName ); 00199 00200 // m_actions.setAutoDelete( true ); 00201 // m_actions.clear(); 00202 // m_actions.setAutoDelete( false ); 00203 00204 // m_actions = builder.create(); 00205 00206 // m_toolBars = builder.toolBars(); 00207 00208 // m_toolViewActions.append(new KAction( "TESTKMDIGUICLIENT", QString::null, 0, 00209 // this, SLOT(blah()),actionCollection(),"nothing")); 00210 00211 QPtrList<KAction> addList; 00212 if (m_toolViewActions.count()<3) 00213 for (uint i=0;i<m_toolViewActions.count();i++) 00214 addList.append(m_toolViewActions.at(i)); 00215 else 00216 addList.append(m_toolMenu); 00217 if (m_mdiMode==KMdi::IDEAlMode) addList.append(m_gotoToolDockMenu); 00218 if (m_mdiModeAction) addList.append(m_mdiModeAction); 00219 kdDebug(760)<<"KMDIGUIClient::setupActions: plugActionList"<<endl; 00220 plugActionList( actionListName, addList ); 00221 00222 // connectToActionContainers(); 00223 } 00224 00225 void KMDIGUIClient::addToolView(KMdiToolViewAccessor* mtva) { 00226 kdDebug(760)<<"*****void KMDIGUIClient::addToolView(KMdiToolViewAccessor* mtva)*****"<<endl; 00227 // kdDebug()<<"name: "<<mtva->wrappedWidget()->name()<<endl; 00228 QString aname = QString("kmdi_toolview_") + mtva->wrappedWidget()->name(); 00229 00230 // try to read the action shortcut 00231 KShortcut sc; 00232 KConfig *cfg = kapp->config(); 00233 QString _grp = cfg->group(); 00234 cfg->setGroup("Shortcuts"); 00235 // if ( cfg->hasKey( aname ) ) 00236 sc = KShortcut( cfg->readEntry( aname, "" ) ); 00237 cfg->setGroup( _grp ); 00238 KAction *a=new ToggleToolViewAction(i18n("Show %1").arg(mtva->wrappedWidget()->caption()), 00239 /*QString::null*/sc,dynamic_cast<KDockWidget*>(mtva->wrapperWidget()), 00240 m_mdiMainFrm,actionCollection(), aname.latin1() ); 00241 #if KDE_IS_VERSION(3,2,90) 00242 ((ToggleToolViewAction*)a)->setCheckedState(i18n("Hide %1").arg(mtva->wrappedWidget()->caption())); 00243 #endif 00244 connect(a,SIGNAL(destroyed(QObject*)),this,SLOT(actionDeleted(QObject*))); 00245 m_toolViewActions.append(a); 00246 m_toolMenu->insert(a); 00247 mtva->d->action=a; 00248 00249 setupActions(); 00250 } 00251 00252 void KMDIGUIClient::actionDeleted(QObject* a) { 00253 m_toolViewActions.remove(static_cast<KAction*>(a)); 00254 /* if (!m_toolMenu.isNull()) m_toolMenu->remove(static_cast<KAction*>(a));*/ 00255 setupActions(); 00256 } 00257 00258 00259 void KMDIGUIClient::clientAdded( KXMLGUIClient *client ) 00260 { 00261 if ( client == this ) 00262 setupActions(); 00263 } 00264 00265 00266 void KMDIGUIClient::mdiModeHasBeenChangedTo(KMdi::MdiMode mode) { 00267 kdDebug(760)<<"KMDIGUIClient::mdiModeHasBennChangeTo"<<endl; 00268 m_mdiMode=mode; 00269 if (m_mdiModeAction) { 00270 switch (mode) { 00271 case KMdi::ToplevelMode: 00272 m_mdiModeAction->setCurrentItem(0); 00273 break; 00274 case KMdi::ChildframeMode: 00275 m_mdiModeAction->setCurrentItem(1); 00276 break; 00277 case KMdi::TabPageMode: 00278 m_mdiModeAction->setCurrentItem(2); 00279 break; 00280 case KMdi::IDEAlMode: 00281 m_mdiModeAction->setCurrentItem(3); 00282 break; 00283 default: Q_ASSERT(0); 00284 } 00285 } 00286 setupActions(); 00287 00288 } 00289 00290 00291 // kate: space-indent off;
KDE Logo
This file is part of the documentation for kmdi Library Version 3.3.1.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Sun Oct 17 11:33:17 2004 by doxygen 1.3.8 written by Dimitri van Heesch, © 1997-2003