2#include <tqpopupmenu.h>
8#include <tdeapplication.h>
10#include <tdeparts/part.h>
12#include <tdetexteditor/document.h>
13#include <tdetexteditor/view.h>
14#include <tdetexteditor/viewcursorinterface.h>
15#include <tdetexteditor/popupmenuinterface.h>
16#include <tdetexteditor/editinterface.h>
17#include <tdetexteditor/selectioninterface.h>
18#include <tdetexteditor/view.h>
19#include <kxmlguiclient.h>
20#include <kxmlguifactory.h>
21#include <tdemainwindow.h>
22#include <tdeactioncollection.h>
24#include <tdestdaccel.h>
27#include "partcontroller.h"
29#include "multibuffer.h"
30#include "kdeveditorutil.h"
32#include "editorproxy.h"
34using namespace KTextEditor;
36EditorProxy *EditorProxy::s_instance = 0;
39EditorProxy::EditorProxy()
42 m_delayedLineTimer =
new TQTimer(
this );
43 connect( m_delayedLineTimer, TQ_SIGNAL( timeout() ),
this, TQ_SLOT(setLineNumberDelayed()) );
44 TDEConfig *config = kapp->config();
46 m_delayedViewCreationCompatibleUI =
true;
48 TDEAction *ac =
new TDEAction( i18n(
"Show Context Menu"), 0,
this,
51 cut.append(KKey(CTRL+Key_Return));
56EditorProxy *EditorProxy::getInstance()
59 s_instance =
new EditorProxy;
64void EditorProxy::setLineNumberDelayed()
67 setLineNumber(m_delayedPart, m_delayedLine, m_delayedCol);
71void EditorProxy::setLineNumber(KParts::Part *part,
int lineNum,
int col)
73 if (!part || !part->inherits(
"KTextEditor::Document"))
79 KURL url =
dynamic_cast<KParts::ReadOnlyPart*
>( part )->url();
80 ViewCursorInterface *iface =
dynamic_cast<ViewCursorInterface*
>(part->widget());
83#if KDE_IS_VERSION(3,5,5)
85 if (!part->widget()->hasFocus())
88 m_delayedLine = lineNum;
90 m_delayedLineTimer->start( 1,
true );
93 iface->setCursorPositionReal(lineNum, col == -1 ? 0 : col);
97 for (TQValueList<MultiBuffer*>::ConstIterator it = m_editorParts.begin(); it != m_editorParts.end(); ++it)
98 if ((*it)->hasURL( url )) {
99 (*it)->registerDelayedActivation( part, lineNum, col );
108void EditorProxy::installPopup( KParts::Part * part )
111 if ( part->inherits(
"KTextEditor::Document") && part->widget())
113 PopupMenuInterface *iface =
dynamic_cast<PopupMenuInterface*
>(part->widget());
116 KTextEditor::View * view =
static_cast<KTextEditor::View*
>( part->widget() );
118 TQPopupMenu * popup =
static_cast<TQPopupMenu*
>( part->factory()->container(
"tdetexteditor_popup", view ) );
122 kdWarning() << k_funcinfo <<
"Popup not found!" << endl;
126 TDEAction * action = NULL;
128 TDEConfig *config = TDEGlobal::config();
129 config->setGroup(
"UI");
130 bool m_tabBarShown = ! config->readNumEntry(
"TabWidgetVisibility", 0);
134 if ( action && !action->isPlugged( popup ) )
136 popup->insertSeparator( 0 );
137 action->plug( popup, 0 );
140 if ( action && !action->isPlugged( popup ) )
141 action->plug( popup, 1 );
144 iface->installPopup( popup );
146 connect(popup, TQ_SIGNAL(aboutToShow()),
this, TQ_SLOT(popupAboutToShow()));
149 m_popupIds.resize(popup->count());
150 for (uint index=0; index < popup->count(); ++index)
151 m_popupIds[index] = popup->idAt(index);
156void EditorProxy::popupAboutToShow()
158 TQPopupMenu *popup = (TQPopupMenu*)sender();
163 for (
int index=popup->count()-1; index >= 0; --index)
165 int id = popup->idAt(index);
166 if (m_popupIds.contains(
id) == 0)
168 TQMenuItem *item = popup->findItem(
id);
169 if ( item && item->popup() )
170 delete item->popup();
172 popup->removeItemAt(index);
176 KTextEditor::Document * doc =
dynamic_cast<KTextEditor::Document*
>( PartController::getInstance()->activePart() );
181 if ( !KDevEditorUtil::currentPositionReal( &line, &col, doc ) )
return;
184 TQString selection = KDevEditorUtil::currentSelection( doc );
185 if ( !selection.isEmpty() && selection.contains(
'\n') != 0 )
191 wordstr = KDevEditorUtil::currentWord( doc );
194 TQString linestr = KDevEditorUtil::currentLine( doc );
196 EditorContext context( doc->url(), line, col, linestr, wordstr );
197 Core::getInstance()->fillContextMenu( popup, &context );
200 bool lastWasSeparator =
true;
201 for( uint i = 0; i < popup->count(); )
203 int id = popup->idAt( i );
204 if( lastWasSeparator && popup->findItem(
id )->isSeparator() )
206 popup->removeItem(
id );
210 lastWasSeparator =
false;
214 if( lastWasSeparator && popup->count() > 0 )
215 popup->removeItem( popup->idAt( popup->count() - 1 ) );
218void EditorProxy::showPopup( )
220 kdDebug(9000) << k_funcinfo << endl;
222 if ( KParts::Part * part = PartController::getInstance()->activePart() )
224 ViewCursorInterface *iface =
dynamic_cast<ViewCursorInterface*
>( part->widget() );
227 KTextEditor::View * view =
static_cast<KTextEditor::View*
>( part->widget() );
228 TQPopupMenu * popup =
static_cast<TQPopupMenu*
>( view->factory()->container(
"tdetexteditor_popup", view ) );
232 popup->exec( view->mapToGlobal( iface->cursorCoordinates() ) );
238void EditorProxy::registerEditor(MultiBuffer* wrapper)
240 m_editorParts.append(wrapper);
243void EditorProxy::deregisterEditor(MultiBuffer* wrapper)
245 m_editorParts.remove(wrapper);
248TQWidget * EditorProxy::widgetForPart( KParts::Part * part )
250 if ( !part )
return 0;
253 return part->widget();
255 KURL url =
dynamic_cast<KParts::ReadOnlyPart*
>( part )->url();
257 for (TQValueList<MultiBuffer*>::ConstIterator it = m_editorParts.begin(); it != m_editorParts.end(); ++it)
258 if ((*it)->hasURL( url ))
264TQWidget * EditorProxy::topWidgetForPart( KParts::Part * part )
266 if ( !part )
return 0;
268 KURL url =
dynamic_cast<KParts::ReadOnlyPart*
>( part )->url();
270 for (TQValueList<MultiBuffer*>::ConstIterator it = m_editorParts.begin(); it != m_editorParts.end(); ++it)
271 if ((*it)->hasURL( url ))
275 return part->widget();
280bool EditorProxy::isDelayedViewCapable( )
282 return m_delayedViewCreationCompatibleUI;
285TQWidget *EditorProxy::findPartWidget(KParts::Part *part)
287 for (TQValueList<MultiBuffer*>::ConstIterator it = m_editorParts.begin(); it != m_editorParts.end(); ++it)
288 if ((*it)->hasPart(part))
292 return part->widget();
297#include "editorproxy.moc"
static KDevMainWindow * getInstance()
Get a pointer to the single KDevTopLevel object.