25 #define protected public 26 #include <tdeparts/part.h> 29 #include "multibuffer.h" 33 #include "editorproxy.h" 34 #include "partcontroller.h" 35 #include "kdevlanguagesupport.h" 38 #include <kmimetype.h> 39 #include <tdemainwindow.h> 40 #include <tdeapplication.h> 42 #include <tdeparts/factory.h> 44 #include <tdetexteditor/view.h> 45 #include <tdetexteditor/document.h> 46 #include <tdetexteditor/viewcursorinterface.h> 48 MultiBuffer::MultiBuffer( TQWidget *parent )
49 : TQSplitter( parent,
"MultiBuffer" ),
51 m_delayActivate( false ),
55 EditorProxy::getInstance() ->registerEditor(
this );
56 if ( KDevLanguageSupport *lang =
57 API::getInstance() ->languageSupport() )
59 setOrientation( lang->splitOrientation() );
60 connect( lang, TQT_SIGNAL( splitOrientationChanged( Qt::Orientation ) ),
61 this, TQT_SLOT( setOrientation( Qt::Orientation ) ) );
65 setOrientation( Qt::Vertical );
69 MultiBuffer::~MultiBuffer()
71 EditorProxy::getInstance() ->deregisterEditor(
this );
74 KParts::Part *MultiBuffer::activeBuffer( )
const 77 return m_activeBuffer;
79 else if ( m_buffers.begin().data() )
80 return ( m_buffers.begin().data() );
85 bool MultiBuffer::hasURL(
const KURL &url )
const 87 return m_buffers.contains( url );
90 int MultiBuffer::numberOfBuffers()
const 92 return m_buffers.count();
95 bool MultiBuffer::isActivated()
const 97 if ( m_delayActivate )
103 void MultiBuffer::setDelayedActivation(
bool delayed )
105 m_delayActivate = delayed;
110 KParts::Part* MultiBuffer::openURL(
const KURL &url )
112 KParts::ReadOnlyPart * part =
113 dynamic_cast<KParts::ReadOnlyPart*
>( createPart( url ) );
118 if ( !part->openURL( url ) )
121 m_buffers.insert( url, part );
125 bool MultiBuffer::closeURL(
const KURL &url )
127 if ( !m_buffers.contains( url ) )
131 KParts::ReadOnlyPart * part =
132 dynamic_cast<KParts::ReadOnlyPart *
>( m_buffers[ url ] );
134 if (part->closeURL())
136 m_buffers.remove( url );
142 void MultiBuffer::registerURL(
const KURL &url, KParts::Part *part )
144 m_buffers.insert( url, part );
147 void MultiBuffer::registerDelayedActivation( KParts::Part *part,
150 m_delayedActivation[ part ] = tqMakePair( line, col );
153 KParts::Part* MultiBuffer::createPart(
const TQString &mimeType,
154 const TQString &partType,
155 const TQString &className,
156 const TQString &preferredName )
158 m_editorFactory = PartController::getInstance() ->findPartFactory(
159 mimeType, partType, preferredName );
161 if ( !className.isEmpty() && m_editorFactory )
163 return m_editorFactory->createPart(
164 this, 0, 0, 0, className.latin1() );
170 KParts::Part* MultiBuffer::createPart(
const KURL &url )
172 if ( !url.isValid() )
175 KMimeType::Ptr mimeType = KMimeType::findByURL( url );
178 TQString services[] = {
"KParts/ReadWritePart",
"KParts/ReadOnlyPart" };
179 TQString classnames[] = {
"KParts::ReadWritePart",
"KParts::ReadOnlyPart" };
180 for ( uint i = 0; i < 2; ++i )
182 m_editorFactory = PartController::getInstance() ->findPartFactory(
183 mimeType->name(), services[ i ] );
184 if ( m_editorFactory )
186 className = classnames[ i ];
191 if ( !className.isEmpty() && m_editorFactory )
193 return m_editorFactory->createPart(
194 this, 0, 0, 0, className.latin1() );
200 void MultiBuffer::show()
202 if ( !m_delayedActivation.count() || m_activated )
208 ActivationMap::Iterator it = m_delayedActivation.begin();
209 for ( ; it != m_delayedActivation.end(); ++it )
211 KTextEditor::Document *document =
212 dynamic_cast<KTextEditor::Document*
>( it.key() );
217 int line = it.data().first;
218 int column = it.data().second;
219 KTextEditor::View *view = document->createView(
this );
220 document->setWidget( view );
224 disconnect( view, TQT_SIGNAL( destroyed() ),
225 document, TQT_SLOT( slotWidgetDestroyed() ) );
227 document->insertChildClient( view );
228 PartController::getInstance() ->integrateTextEditorPart( document );
230 KTextEditor::ViewCursorInterface *iface =
231 dynamic_cast<KTextEditor::ViewCursorInterface*
>(
232 static_cast<KTextEditor::View*
>( view ) );
235 iface->setCursorPositionReal( line,
236 column == -1 ? 0 : column );
244 kdDebug( 9000 ) <<
"Delayed activation of " 245 << document->url().fileName() <<
" is now complete." << endl;
252 void MultiBuffer::setOrientation( Qt::Orientation orientation )
254 TQSplitter::setOrientation( orientation );
257 void MultiBuffer::activePartChanged(
const KURL &url )
259 if ( !m_buffers.contains( url ) )
262 m_activeBuffer = m_buffers[ url ];
266 void MultiBuffer::focusInEvent( TQFocusEvent *ev )
268 KParts::Part *active = activeBuffer();
269 if (active && active->widget())
270 active->widget()->setFocus();
271 TQSplitter::focusInEvent(ev);
274 bool MultiBuffer::hasPart( KParts::Part *part )
276 for (BufferMap::iterator it = m_buffers.begin(); it != m_buffers.end(); ++it)
278 if (it.data() == part)
284 void MultiBuffer::updateUrlForPart(KParts::Part *part, KURL url)
289 for (BufferMap::iterator it = m_buffers.begin(); it != m_buffers.end(); ++it)
291 if (it.data() == part)
293 formerURL = it.key();
297 m_buffers.remove(formerURL);
298 m_buffers.insert(url, part);
301 #include "multibuffer.moc" static KDevMainWindow * getInstance()
Get a pointer to the single KDevTopLevel object.