X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ffrontends%2Fqt4%2FGuiView.h;h=061060a8c30dba2c7110976352352f1148c04f89;hb=425d092204118ea6c24c28e85fdf03fcf2bb51a4;hp=e7b08aa48fcb17cae788eb18543b84c2c300ba6d;hpb=37a5647be1cb91998b02f701adfa85c1ddc19640;p=lyx.git diff --git a/src/frontends/qt4/GuiView.h b/src/frontends/qt4/GuiView.h index e7b08aa48f..061060a8c3 100644 --- a/src/frontends/qt4/GuiView.h +++ b/src/frontends/qt4/GuiView.h @@ -7,7 +7,7 @@ * \author Lars Gullik Bjornes * \author John Levon * \author Abdelrazak Younes - * \author Peter Kümmel + * \author Peter Kümmel * * Full author contact details are available in file CREDITS. */ @@ -15,10 +15,10 @@ #ifndef GUI_VIEW_H #define GUI_VIEW_H +#include "frontends/Delegates.h" #include "frontends/LyXView.h" -#include - +#include "support/strfwd.h" #include @@ -31,13 +31,17 @@ class QShowEvent; namespace lyx { -class ToolbarInfo; +class Cursor; namespace frontend { class Dialog; +class LayoutBox; class GuiToolbar; class GuiWorkArea; +class TabWorkArea; +class TocModels; +class ToolbarInfo; /** * GuiView - Qt4 implementation of LyXView @@ -48,7 +52,8 @@ class GuiWorkArea; * is deleted. This might be useful for closing other dialogs * depending on a given GuiView. */ -class GuiView : public QMainWindow, public LyXView +class GuiView : public QMainWindow, public LyXView, public GuiBufferViewDelegate, + public GuiBufferDelegate { Q_OBJECT public: @@ -57,54 +62,84 @@ public: ~GuiView(); - /// - /// + /// \name LyXView inherited methods. + //@{ int id() const { return id_; } - void close(); - void setFocus(); void setBusy(bool); + BufferView * currentBufferView(); + BufferView const * currentBufferView() const; + BufferView * documentBufferView(); + BufferView const * documentBufferView() const; + void newDocument(std::string const & filename, + bool fromTemplate); + + /// could be called from any thread + void message(docstring const &); + /// must be called from GUI thread + void updateMessage(QString const & str); + + bool getStatus(FuncRequest const & cmd, FuncStatus & flag); + void dispatch(FuncRequest const & cmd, DispatchResult & dr); + void restartCursor(); + 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); - virtual void updateStatusBar(); - virtual void message(docstring const & str); - virtual bool hasFocus() const; - void updateLayoutChoice(bool force); - bool isToolbarVisible(std::string const & id); + void updateStatusBar(); + + /// updates the possible layouts selectable + void updateLayoutList(); void updateToolbars(); - /// QMenu * createPopupMenu(); - /// dispatch to current BufferView - void dispatch(FuncRequest const & cmd); - - /// \return the buffer currently shown in this window - Buffer * buffer(); - Buffer const * buffer() const; - /// set a buffer to the current workarea. - void setBuffer(Buffer * b); ///< \c Buffer to set. + /// + LayoutBox * getLayoutDialog() const; + + /// hides the workarea and makes sure it is clean + 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 &); - void structureChanged() { updateToc(); } - ///@} + void errors(std::string const &, bool from_master = false); + void structureChanged(); + void updateTocItem(std::string const &, DocIterator const &); + //@} + + /// + TocModels & tocModels(); /// called on timeout void autoSave(); - /// - void updateEmbeddedFiles(); - /// \return the current buffer view. - BufferView * view(); + /// 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. */ Buffer const * updateInset(Inset const *); - /// - void restartCursor(); /// \return the \c Workarea associated to \p Buffer /// \retval 0 if no \c WorkArea is found. @@ -114,15 +149,23 @@ public: /// \return the \c Workarea associated to \p Buffer /// \retval 0 if no \c WorkArea is found. GuiWorkArea * addWorkArea(Buffer & buffer); - /// + /// \param work_area The current \c WorkArea, or \c NULL void setCurrentWorkArea(GuiWorkArea * work_area); /// void removeWorkArea(GuiWorkArea * work_area); /// return the current WorkArea (the one that has the focus). GuiWorkArea const * currentWorkArea() const; + /// return the current WorkArea (the one that has the focus). + GuiWorkArea * currentWorkArea(); + + /// return the current document WorkArea (it may not have the focus). + GuiWorkArea const * currentMainWorkArea() const; + /// return the current document WorkArea (it may not have the focus). + GuiWorkArea * currentMainWorkArea(); Q_SIGNALS: void closing(int); + void triggerShowDialog(QString const & qname, QString const & qdata, Inset * inset); public Q_SLOTS: /// idle timeout. @@ -132,18 +175,35 @@ public Q_SLOTS: private Q_SLOTS: /// void updateWindowTitle(GuiWorkArea * wa); + /// + void resetWindowTitleAndIconText(); /// void on_currentWorkAreaChanged(GuiWorkArea *); + /// + void on_lastWorkAreaRemoved(); /// slots to change the icon size void smallSizedIcons(); void normalSizedIcons(); void bigSizedIcons(); + /// For completion of autosave or exporrt threads. + void threadFinished(); + + /// must be called in GUI thread + void doShowDialog(QString const & qname, QString const & qdata, + Inset * inset); + 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(); /// - void addTabWorkArea(); + TabWorkArea * addTabWorkArea(); /// connect to signals in the given BufferView void connectBufferView(BufferView & bv); @@ -154,8 +214,6 @@ private: /// disconnect from signals in the given buffer void disconnectBuffer(); /// - void updateToc(); - /// void dragEnterEvent(QDragEnterEvent * ev); /// void dropEvent(QDropEvent * ev); @@ -168,6 +226,9 @@ private: bool event(QEvent * e); bool focusNextPrevChild(bool); + /// + bool goToFileRow(std::string const & argument); + /// struct GuiViewPrivate; GuiViewPrivate & d; @@ -177,26 +238,25 @@ public: /// dialogs for this view /// - /** Check the status of all visible dialogs and disable or reenable + /// + void resetDialogs(); + + /// Hide all visible dialogs + void hideAll() const; + + /// Update all visible dialogs. + /** + * Check the status of all visible dialogs and disable or reenable * them as appropriate. * * Disabling is needed for example when a dialog is open and the * cursor moves to a position where the corresponding inset is not * allowed. */ - void checkStatus(); + void updateDialogs(); - /// Hide all visible dialogs - void hideAll() const; - /// Hide any dialogs that require a buffer for them to operate - void hideBufferDependent() const; - /** Update visible, buffer-dependent dialogs - If the bool is true then a buffer change has occurred - else it is still the same buffer. - */ - void updateBufferDependent(bool) const; - - /** \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. @@ -213,31 +273,102 @@ public: std::string const & data, Inset * inset = 0); /** \param name == "citation", "bibtex" etc; an identifier used - to update the contents of a particular dialog with \param data. + to reset the contents of a particular dialog with \param data. See the comments to 'show', above. */ void updateDialog(std::string const & name, std::string const & data); - /// Is the dialog currently visible? - bool isDialogVisible(std::string const & name) const; - /** All Dialogs of the given \param name will be closed if they are connected to the given \param inset. */ void hideDialog(std::string const & name, Inset * inset); /// void disconnectDialog(std::string const & name); - /// - Inset * getOpenInset(std::string const & name) const; private: /// - Dialog * find_or_build(std::string const & name); + void saveLayout() const; + /// + bool restoreLayout(); + /// + GuiToolbar * toolbar(std::string const & name); + /// + void constructToolbars(); + /// + void initToolbars(); + /// + void lfunUiToggle(FuncRequest const & cmd); + /// + void toggleFullScreen(); + /// + void insertLyXFile(docstring const & fname); + /// + void insertPlaintextFile(docstring const & fname, + bool asParagraph); + + /// Save a buffer as a new file. + /** + Write a buffer to a new file name and rename the buffer + according to the new file name. + + This function is e.g. used by menu callbacks and + LFUN_BUFFER_WRITE_AS. + + If 'newname' is empty, the user is asked via a + dialog for the buffer's new name and location. + + If 'newname' is non-empty and has an absolute path, that is used. + Otherwise the base directory of the buffer is used as the base + for any relative path in 'newname'. + */ + bool renameBuffer(Buffer & b, docstring const & newname); + /// + bool saveBuffer(Buffer & b); + /// 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); + /// closes the tabworkarea and all tabs. If we are in a close event, + /// all buffers will be closed, otherwise they will be hidden. + bool closeTabWorkArea(TabWorkArea * twa); + /// gives the user the possibility to save his work + /// or to discard the changes. If hiding is true, the + /// document will be reloaded. + bool saveBufferIfNeeded(Buffer & buf, bool hiding); + /// closes all workareas + bool closeWorkAreaAll(); + /// write all open workareas into the session file + void writeSession() const; + /// 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); + /// + enum NextOrPrevious { + NEXTBUFFER, + PREVBUFFER + }; + /// + void gotoNextOrPreviousBuffer(NextOrPrevious np); + + /// 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); + /// + void reloadBuffer(); + /// + void dispatchVC(FuncRequest const & cmd); + /// + void showMessage(); /// This view ID. int id_; + + /// flag to avoid two concurrent close events. + bool closing_; }; } // namespace frontend