2#include <tqpopupmenu.h>
7#include <tdeapplication.h>
9#include <tdeparts/part.h>
11#include <tdetexteditor/document.h>
12#include <tdetexteditor/view.h>
13#include <tdetexteditor/viewcursorinterface.h>
14#include <tdetexteditor/popupmenuinterface.h>
15#include <tdetexteditor/editinterface.h>
16#include <tdetexteditor/selectioninterface.h>
17#include <tdetexteditor/view.h>
18#include <kxmlguiclient.h>
19#include <kxmlguifactory.h>
20#include <tdemainwindow.h>
21#include <tdeactioncollection.h>
23#include <tdestdaccel.h>
26#include "partcontroller.h"
28#include "multibuffer.h"
29#include "kdeveditorutil.h"
31#include "editorproxy.h"
33using namespace KTextEditor;
35EditorProxy *EditorProxy::s_instance = 0;
38EditorProxy::EditorProxy()
41 m_delayedLineTimer =
new TQTimer(
this );
42 connect( m_delayedLineTimer, TQ_SIGNAL( timeout() ),
this, TQ_SLOT(setLineNumberDelayed()) );
43 TDEConfig *config = kapp->config();
45 m_delayedViewCreationCompatibleUI =
true;
47 TDEAction *ac =
new TDEAction( i18n(
"Show Context Menu"), 0,
this,
50 cut.append(KKey(CTRL+Key_Return));
55EditorProxy *EditorProxy::getInstance()
58 s_instance =
new EditorProxy;
63void EditorProxy::setLineNumberDelayed()
66 setLineNumber(m_delayedPart, m_delayedLine, m_delayedCol);
70void EditorProxy::setLineNumber(KParts::Part *part,
int lineNum,
int col)
72 if (!part || !part->inherits(
"KTextEditor::Document"))
78 KURL url =
dynamic_cast<KParts::ReadOnlyPart*
>( part )->url();
79 ViewCursorInterface *iface =
dynamic_cast<ViewCursorInterface*
>(part->widget());
82 iface->setCursorPositionReal(lineNum, col == -1 ? 0 : col);
86 for (TQValueList<MultiBuffer*>::ConstIterator it = m_editorParts.begin(); it != m_editorParts.end(); ++it)
87 if ((*it)->hasURL( url )) {
88 (*it)->registerDelayedActivation( part, lineNum, col );
97void EditorProxy::installPopup( KParts::Part * part )
100 if ( part->inherits(
"KTextEditor::Document") && part->widget())
102 PopupMenuInterface *iface =
dynamic_cast<PopupMenuInterface*
>(part->widget());
105 KTextEditor::View * view =
static_cast<KTextEditor::View*
>( part->widget() );
107 TQPopupMenu * popup =
static_cast<TQPopupMenu*
>( part->factory()->container(
"tdetexteditor_popup", view ) );
111 kdWarning() << k_funcinfo <<
"Popup not found!" << endl;
115 TDEAction * action = NULL;
117 TDEConfig *config = TDEGlobal::config();
118 config->setGroup(
"UI");
119 bool m_tabBarShown = ! config->readNumEntry(
"TabWidgetVisibility", 0);
123 if ( action && !action->isPlugged( popup ) )
125 popup->insertSeparator( 0 );
126 action->plug( popup, 0 );
129 if ( action && !action->isPlugged( popup ) )
130 action->plug( popup, 1 );
133 iface->installPopup( popup );
135 connect(popup, TQ_SIGNAL(aboutToShow()),
this, TQ_SLOT(popupAboutToShow()));
138 m_popupIds.resize(popup->count());
139 for (uint index=0; index < popup->count(); ++index)
140 m_popupIds[index] = popup->idAt(index);
145void EditorProxy::popupAboutToShow()
147 TQPopupMenu *popup = (TQPopupMenu*)sender();
152 for (
int index=popup->count()-1; index >= 0; --index)
154 int id = popup->idAt(index);
155 if (m_popupIds.contains(
id) == 0)
157 TQMenuItem *item = popup->findItem(
id);
158 if ( item && item->popup() )
159 delete item->popup();
161 popup->removeItemAt(index);
165 KTextEditor::Document * doc =
dynamic_cast<KTextEditor::Document*
>( PartController::getInstance()->activePart() );
170 if ( !KDevEditorUtil::currentPositionReal( &line, &col, doc ) )
return;
173 TQString selection = KDevEditorUtil::currentSelection( doc );
174 if ( !selection.isEmpty() && selection.contains(
'\n') != 0 )
180 wordstr = KDevEditorUtil::currentWord( doc );
183 TQString linestr = KDevEditorUtil::currentLine( doc );
185 EditorContext context( doc->url(), line, col, linestr, wordstr );
186 Core::getInstance()->fillContextMenu( popup, &context );
189 bool lastWasSeparator =
true;
190 for( uint i = 0; i < popup->count(); )
192 int id = popup->idAt( i );
193 if( lastWasSeparator && popup->findItem(
id )->isSeparator() )
195 popup->removeItem(
id );
199 lastWasSeparator =
false;
203 if( lastWasSeparator && popup->count() > 0 )
204 popup->removeItem( popup->idAt( popup->count() - 1 ) );
207void EditorProxy::showPopup( )
209 kdDebug(9000) << k_funcinfo << endl;
211 if ( KParts::Part * part = PartController::getInstance()->activePart() )
213 ViewCursorInterface *iface =
dynamic_cast<ViewCursorInterface*
>( part->widget() );
216 KTextEditor::View * view =
static_cast<KTextEditor::View*
>( part->widget() );
217 TQPopupMenu * popup =
static_cast<TQPopupMenu*
>( view->factory()->container(
"tdetexteditor_popup", view ) );
221 popup->exec( view->mapToGlobal( iface->cursorCoordinates() ) );
227void EditorProxy::registerEditor(MultiBuffer* wrapper)
229 m_editorParts.append(wrapper);
232void EditorProxy::deregisterEditor(MultiBuffer* wrapper)
234 m_editorParts.remove(wrapper);
237TQWidget * EditorProxy::widgetForPart( KParts::Part * part )
239 if ( !part )
return 0;
242 return part->widget();
244 KURL url =
dynamic_cast<KParts::ReadOnlyPart*
>( part )->url();
246 for (TQValueList<MultiBuffer*>::ConstIterator it = m_editorParts.begin(); it != m_editorParts.end(); ++it)
247 if ((*it)->hasURL( url ))
253TQWidget * EditorProxy::topWidgetForPart( KParts::Part * part )
255 if ( !part )
return 0;
257 KURL url =
dynamic_cast<KParts::ReadOnlyPart*
>( part )->url();
259 for (TQValueList<MultiBuffer*>::ConstIterator it = m_editorParts.begin(); it != m_editorParts.end(); ++it)
260 if ((*it)->hasURL( url ))
264 return part->widget();
269bool EditorProxy::isDelayedViewCapable( )
271 return m_delayedViewCreationCompatibleUI;
274TQWidget *EditorProxy::findPartWidget(KParts::Part *part)
276 for (TQValueList<MultiBuffer*>::ConstIterator it = m_editorParts.begin(); it != m_editorParts.end(); ++it)
277 if ((*it)->hasPart(part))
281 return part->widget();
286#include "editorproxy.moc"
static KDevMainWindow * getInstance()
Get a pointer to the single KDevTopLevel object.