2 #include <tqpopupmenu.h> 5 #include <tdeversion.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> 23 #include <tdelocale.h> 24 #include <tdestdaccel.h> 27 #include "partcontroller.h" 29 #include "multibuffer.h" 30 #include "kdeveditorutil.h" 32 #include "editorproxy.h" 36 EditorProxy *EditorProxy::s_instance = 0;
39 EditorProxy::EditorProxy()
42 m_delayedLineTimer =
new TQTimer(
this );
43 connect( m_delayedLineTimer, TQT_SIGNAL( timeout() ),
this, TQT_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));
56 EditorProxy *EditorProxy::getInstance()
59 s_instance =
new EditorProxy;
64 void EditorProxy::setLineNumberDelayed()
67 setLineNumber(m_delayedPart, m_delayedLine, m_delayedCol);
71 void 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 );
108 void 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, TQT_SIGNAL(aboutToShow()),
this, TQT_SLOT(popupAboutToShow()));
149 m_popupIds.resize(popup->count());
150 for (uint index=0; index < popup->count(); ++index)
151 m_popupIds[index] = popup->idAt(index);
156 void 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 ) );
218 void 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() ) );
238 void EditorProxy::registerEditor(MultiBuffer* wrapper)
240 m_editorParts.append(wrapper);
243 void EditorProxy::deregisterEditor(MultiBuffer* wrapper)
245 m_editorParts.remove(wrapper);
248 TQWidget * 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 ))
264 TQWidget * 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();
280 bool EditorProxy::isDelayedViewCapable( )
282 return m_delayedViewCreationCompatibleUI;
285 TQWidget *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.