/*************************************************************************** pybrowse_part.cpp - description ------------------- begin : Tue Aug 28 2001 copyright : (C) 2001 by Christian Bird email : chrisb@lineo.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "pybrowse_part.h" #include "pybrowse_part.moc" #include "kpybrowser.h" #include "pybrowse.xpm" #include #include #include #include #include #include #include K_EXPORT_COMPONENT_FACTORY( katepybrowseplugin, KGenericFactory( "katepybrowse" ) ) PluginViewPyBrowse::PluginViewPyBrowse (Kate::MainWindow *w) : win (w) { (void) new KAction ( i18n("Update Python Browser"), 0, this, TQT_SLOT( slotUpdatePyBrowser() ), actionCollection(), "python_update_pybrowse" ); //set up the menus setInstance(new KInstance("kate")); setXMLFile( "plugins/katepybrowse/ui.rc" ); win->guiFactory()->addClient(this); //create a python head pixmap for the tab TQPixmap *py_pixmap = new TQPixmap(pybrowse_xpm); TQImage py_image = py_pixmap->convertToImage().smoothScale(20, 20); py_pixmap->convertFromImage(py_image); //create the browser and put it into a dockwidget using kate's tool view manager Kate::ToolViewManager *tool_view_manager = win->toolViewManager(); my_dock = tool_view_manager->createToolView("kate_plugin_kpybrowser", Kate::ToolViewManager::Left, (*py_pixmap), i18n("Python Browser")); kpybrowser = new KPyBrowser(my_dock, "kpybrowser"); connect(kpybrowser, TQT_SIGNAL(selected(TQString, int)), this, TQT_SLOT(slotSelected(TQString, int))); } PluginViewPyBrowse::~PluginViewPyBrowse () { win->guiFactory()->removeClient (this); delete my_dock; } void PluginViewPyBrowse::slotSelected(TQString name, int line) { //TO DO - deal with setting the active view to be the file that has this class //if multiple files are open. if (name == "Classes" || name == "Globals") return; Kate::View *view = win->viewManager()->activeView(); Kate::Document *doc = view->getDoc(); TQString docline = doc->textLine(line); int numlines = doc->numLines(); int done = 0, apiline = -1, forward_line = line,backward_line = line-1; while (!done) { done = 1; if (forward_line < numlines) { if (doc->textLine(forward_line).tqfind(name) > -1) { apiline = forward_line; break; } forward_line++; done = 0; } if (backward_line > -1) { if (doc->textLine(backward_line).tqfind(name) > -1) { apiline = backward_line; break; } backward_line--; done = 0; } } if (apiline == -1) { KMessageBox::information(0, i18n("Could not find method/class %1.").tqarg(name), i18n("Selection")); } else { view->setCursorPosition(apiline, 0); } view->setFocus(); } void PluginViewPyBrowse::slotUpdatePyBrowser() { Kate::ViewManager *viewManager = win->viewManager(); if (viewManager == NULL) return; Kate::View *view = viewManager->activeView(); if (view == NULL) return; TQString pytext(view->getDoc()->text()); kpybrowser->parseText(pytext); } void PluginViewPyBrowse::slotShowPyBrowser() { //TO DO implement this later so that you can turn the browser off and on } KatePluginPyBrowse::KatePluginPyBrowse( TQObject* tqparent, const char* name, const TQStringList& ) : Kate::Plugin ( (Kate::Application *)tqparent, name ) { } KatePluginPyBrowse::~KatePluginPyBrowse() { } void KatePluginPyBrowse::addView (Kate::MainWindow *win) { PluginViewPyBrowse *view = new PluginViewPyBrowse(win); m_views.append (view); } void KatePluginPyBrowse::removeView(Kate::MainWindow *win) { for (uint z=0; z < m_views.count(); z++) if (m_views.at(z)->win == win) { PluginViewPyBrowse *view = m_views.at(z); m_views.remove (view); delete view; } }