/** * Called when a document has completed loading. * Determines the file's properties and refreshes the tag list of the editor * window. * This slot is connected to the completed() signal of the document object. * The signal is emitted when a new file is opened, or when a modified file is * saved. */ void EditorPage::slotFileOpened() { QFileInfo fi(m_pDoc->url().path()); // Get file information m_sName = fi.fileName(); m_bWritable = fi.isWritable(); // Set read/write or read-only mode m_pDoc->setReadWrite(!Config().getReadOnlyMode() && m_bWritable); // Refresh the tag list m_pCtagsList->clear(); m_ctags.run(m_pDoc->url().path()); // Check if this is a modified file that has just been saved if (m_bModified) emit fileSaved(m_pDoc->url().path(), m_bNewFile); // Notify that the document has loaded m_bOpen = true; m_bModified = false; emit fileOpened(this, m_pDoc->url().path()); // Set initial position of the cursor m_nLine = 0; slotCursorPosChange(); // This is no longer a new file m_bNewFile = false; }
/** * Sets the keyboard focus to the editor part of the page. * This method is called whenever the page is activated. It is more reasonable * to set the focus to the editor than to the tag list. */ void EditorPage::setEditorFocus() { m_pView->setFocus(); slotCursorPosChange(); }
/** * Class constructor. * @param pDoc The document object associated with this page * @param pMenu A Cscope queries popup menu to use with the editor * @param pParent The parent widget * @param szName The widget's name */ EditorPage::EditorPage(KTextEditor::Document* pDoc, QPopupMenu* pMenu, QTabWidget* pParent, const char* szName) : QHBox(pParent, szName), m_pParentTab(pParent), m_pDoc(pDoc), m_bOpen(false), m_bNewFile(false), m_sName(""), m_bWritable(true), /* new documents are writable by default */ m_bModified(false), m_nLine(0), m_bSaveNewSizes(false) { KTextEditor::PopupMenuInterface* pMenuIf; KTextEditor::ViewCursorInterface* pCursorIf; // Create code-completion objects (will be deleted by QObject destructor) m_pCompletion = new SymbolCompletion(this, this); // Set read-only mode, if required if (Config().getReadOnlyMode()) m_pDoc->setReadWrite(false); // Create the child widgets m_pSplit = new QSplitter(this); m_pCtagsList = new CtagsList(m_pSplit); m_pView = m_pDoc->createView(m_pSplit); m_pSplit->setResizeMode(m_pCtagsList, QSplitter::KeepSize); // Perform tasks only when the document has been loaded completely connect(m_pDoc, SIGNAL(completed()), this, SLOT(slotFileOpened())); // Be notified when the text in the editor changes connect(m_pDoc, SIGNAL(textChanged()), this, SLOT(slotSetModified())); connect(m_pDoc, SIGNAL(undoChanged()), this, SLOT(slotUndoChanged())); // Store the sizes of the child windows when the tag list is resized // (since it may imply a move of the splitter divider) connect(m_pCtagsList, SIGNAL(resized()), this, SLOT(slotChildResized())); // Go to a symbol's line if it is selected in the tag list connect(m_pCtagsList, SIGNAL(lineRequested(uint)), this, SLOT(slotGotoLine(uint))); // Add Ctag records to the tag list connect(&m_ctags, SIGNAL(dataReady(FrontendToken*)), m_pCtagsList, SLOT(slotDataReady(FrontendToken*))); // Monitor Ctags' operation connect(&m_ctags, SIGNAL(finished(uint)), m_pCtagsList, SLOT(slotCtagsFinished(uint))); // Set the context menu pMenuIf = dynamic_cast<KTextEditor::PopupMenuInterface*>(m_pView); if (pMenuIf) pMenuIf->installPopup(pMenu); // Emit a signal whenever the cursor's position changes pCursorIf = dynamic_cast<KTextEditor::ViewCursorInterface*>(m_pView); if (pCursorIf) { connect(m_pView, SIGNAL(cursorPositionChanged()), this, SLOT(slotCursorPosChange())); } }
/** * Sets the keyboard focus to the editor part of the page. * This method is called whenever the page is activated. It is more reasonable * to set the focus to the editor than to the tag list. */ void EditorPage::setEditorFocus() { m_pView->setFocus(); const KTextEditor::Cursor c = m_pView->cursorPosition(); slotCursorPosChange(m_pView, c); }