X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ffrontends%2Fqt4%2FGuiView.h;h=bc7b9ecc1e59e19759a332a35097ff6d479d7ccc;hb=43c09d723435a5b203f2ac0c39e2086de836b386;hp=7e46f5b9586accd51444f5310978a21955b4c19f;hpb=184345e4e76c2190efbba69d673968feb22a085e;p=lyx.git diff --git a/src/frontends/qt4/GuiView.h b/src/frontends/qt4/GuiView.h index 7e46f5b958..bc7b9ecc1e 100644 --- a/src/frontends/qt4/GuiView.h +++ b/src/frontends/qt4/GuiView.h @@ -16,7 +16,6 @@ #define GUI_VIEW_H #include "frontends/Delegates.h" -#include "frontends/LyXView.h" #include "support/strfwd.h" @@ -31,7 +30,15 @@ class QShowEvent; namespace lyx { +namespace support { class FileName; } + +class Buffer; +class BufferView; class Cursor; +class DispatchResult; +class FuncStatus; +class FuncRequest; +class Inset; namespace frontend { @@ -44,47 +51,85 @@ class TocModels; class ToolbarInfo; /** - * GuiView - Qt4 implementation of LyXView + * GuiView - Qt4 main LyX window * - * qt4-private implementation of the main LyX window. + * This class represents the main LyX window and provides + * accessor functions to its content. * * Note: a QObject emits a destroyed(QObject *) Qt signal when it * is deleted. This might be useful for closing other dialogs * depending on a given GuiView. */ -class GuiView : public QMainWindow, public LyXView, public GuiBufferViewDelegate, +class GuiView : public QMainWindow, public GuiBufferViewDelegate, public GuiBufferDelegate { Q_OBJECT + public: /// create a main window of the given dimensions GuiView(int id); ~GuiView(); - /// LyXView inherited methods. - ///@{ - int id() const { return id_; }; - void setBusy(bool); + /// closes the view such that the view knows that is closed + /// programmatically and not by the user clicking the x. + bool closeScheduled(); + + int id() const { return id_; } + + /// are we busy ? + bool busy() const; + + + /// \name Generic accessor functions + //@{ + /// The current BufferView refers to the BufferView that has the focus, + /// including for example the one that is created when you use the + /// advanced search and replace pane. + /// \return the currently selected buffer view. BufferView * currentBufferView(); BufferView const * currentBufferView() const; + + /// The document BufferView always refers to the view's main document + /// BufferView. So, even if the BufferView in e.g., the advanced + /// search and replace pane has the focus. + /// \return the current document buffer view. BufferView * documentBufferView(); BufferView const * documentBufferView() const; - void setBuffer(Buffer * b); - bool closeBuffer(); - bool closeBufferAll(); - bool hasFocus() const; - Buffer * loadDocument(support::FileName const & name, - bool tolastfiles = true); + void newDocument(std::string const & filename, bool fromTemplate); + + /// display a message in the view + /// could be called from any thread void message(docstring const &); + bool getStatus(FuncRequest const & cmd, FuncStatus & flag); - bool dispatch(FuncRequest const & cmd); + /// dispatch command. + /// \return true if the \c FuncRequest has been dispatched. + void dispatch(FuncRequest const & cmd, DispatchResult & dr); + void restartCursor(); + /// Update the completion popup and the inline completion state. + /// If \c start is true, then a new completion might be started. + /// If \c keep is true, an active completion will be kept active + /// even though the cursor moved. The update flags of \c cur might + /// be changed. void updateCompletion(Cursor & cur, bool start, bool keep); + + /// void setFocus(); - ///@} + + /// + void focusInEvent(QFocusEvent * e); + /// set a buffer to the current workarea. + void setBuffer(Buffer * b); ///< \c Buffer to set. + + /// load a document into the current workarea. + Buffer * loadDocument( + support::FileName const & name, ///< File to load. + bool tolastfiles = true ///< append to the "Open recent" menu? + ); /// add toolbar, if newline==true, add a toolbar break before the toolbar GuiToolbar * makeToolbar(ToolbarInfo const & tbinfo, bool newline); @@ -102,18 +147,20 @@ public: bool hideWorkArea(GuiWorkArea * wa); /// closes the workarea bool closeWorkArea(GuiWorkArea * wa); + /// closes the buffer + bool closeBuffer(Buffer & buf); /// void openDocument(std::string const & filename); /// void importDocument(std::string const &); - /// GuiBufferDelegate. - ///@{ + /// \name GuiBufferDelegate. + //@{ void resetAutosaveTimers(); void errors(std::string const &, bool from_master = false); void structureChanged(); void updateTocItem(std::string const &, DocIterator const &); - ///@} + //@} /// TocModels & tocModels(); @@ -121,6 +168,9 @@ public: /// called on timeout void autoSave(); + /// check for external change of any opened buffer, mainly for svn usage + void checkExternallyModifiedBuffers(); + /** redraw \c inset in all the BufferViews in which it is currently * visible. If successful return a pointer to the owning Buffer. */ @@ -129,6 +179,8 @@ public: /// \return the \c Workarea associated to \p Buffer /// \retval 0 if no \c WorkArea is found. GuiWorkArea * workArea(Buffer & buffer); + /// \return the \c Workarea at index \c index + GuiWorkArea * workArea(int index); /// Add a \c WorkArea /// \return the \c Workarea associated to \p Buffer @@ -150,8 +202,11 @@ public: Q_SIGNALS: void closing(int); + void triggerShowDialog(QString const & qname, QString const & qdata, Inset * inset); public Q_SLOTS: + /// + void setBusy(bool); /// idle timeout. /// clear any temporary message and replace with current status. void clearMessage(); @@ -172,7 +227,26 @@ private Q_SLOTS: void normalSizedIcons(); void bigSizedIcons(); + /// For completion of autosave or export threads. + void processingThreadStarted(); + void processingThreadFinished(); + void autoSaveThreadFinished(); + + /// must be called in GUI thread + void doShowDialog(QString const & qname, QString const & qdata, + Inset * inset); + + /// must be called from GUI thread + void updateStatusBarMessage(QString const & str); + void clearMessageText(); + private: + /// Open given child document in current buffer directory. + void openChildDocument(std::string const & filename); + /// Close current document buffer. + bool closeBuffer(); + /// Close all document buffers. + bool closeBufferAll(); /// TabWorkArea * addTabWorkArea(); @@ -197,6 +271,9 @@ private: bool event(QEvent * e); bool focusNextPrevChild(bool); + /// + bool goToFileRow(std::string const & argument); + /// struct GuiViewPrivate; GuiViewPrivate & d; @@ -223,7 +300,8 @@ public: */ void updateDialogs(); - /** \param name == "bibtex", "citation" etc; an identifier used to + /** Show dialog could be called from arbitrary threads. + \param name == "bibtex", "citation" etc; an identifier used to launch a particular dialog. \param data is a string representation of the Inset contents. It is often little more than the output from Inset::write. @@ -253,8 +331,10 @@ public: void disconnectDialog(std::string const & name); private: - /// + /// Saves the layout and geometry of the window void saveLayout() const; + /// Saves the settings of toolbars and all dialogs + void saveUISettings() const; /// bool restoreLayout(); /// @@ -264,7 +344,7 @@ private: /// void initToolbars(); /// - void lfunUiToggle(FuncRequest const & cmd); + bool lfunUiToggle(std::string const & ui_component); /// void toggleFullScreen(); /// @@ -272,6 +352,8 @@ private: /// void insertPlaintextFile(docstring const & fname, bool asParagraph); + /// + bool exportBufferAs(Buffer & b); /// Save a buffer as a new file. /** @@ -291,6 +373,9 @@ private: bool renameBuffer(Buffer & b, docstring const & newname); /// bool saveBuffer(Buffer & b); + /// save and rename buffer to fn. If fn is empty, the buffer + /// is just saved as the filename it already has. + bool saveBuffer(Buffer & b, support::FileName const & fn); /// closes a workarea, if close_buffer is true the buffer will /// also be released, otherwise the buffer will be hidden. bool closeWorkArea(GuiWorkArea * wa, bool close_buffer); @@ -308,8 +393,8 @@ private: /// is the buffer in this workarea also shown in another tab ? /// This tab can either be in the same view or in another one. bool inMultiTabs(GuiWorkArea * wa); - /// is the buffer in this workarea also shown in another view ? - bool inMultiViews(GuiWorkArea * wa); + /// is the buffer shown in some other view ? + bool inOtherView(Buffer & buf); /// enum NextOrPrevious { NEXTBUFFER, @@ -318,21 +403,32 @@ private: /// void gotoNextOrPreviousBuffer(NextOrPrevious np); - /// - Inset * getOpenInset(std::string const & name) const; - /// Is the dialog currently visible? bool isDialogVisible(std::string const & name) const; /// Dialog * findOrBuild(std::string const & name, bool hide_it); /// Dialog * build(std::string const & name); + /// + bool reloadBuffer(Buffer & buffer); + /// + void dispatchVC(FuncRequest const & cmd, DispatchResult & dr); + /// + void dispatchToBufferView(FuncRequest const & cmd, DispatchResult & dr); + /// + void showMessage(); /// This view ID. int id_; /// flag to avoid two concurrent close events. bool closing_; + /// if the view is busy the cursor shouldn't blink for instance. + /// This counts the number of times more often we called + /// setBusy(true) compared to setBusy(false), so we can nest + /// functions that call setBusy; + int busy_; + }; } // namespace frontend