]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/qt4/GuiView.cpp
less string conversions as long as we stay in the frontend
[lyx.git] / src / frontends / qt4 / GuiView.cpp
index a53ebfbf3759f90ae30c091512fa239b295e1a0f..10cda4668a4aa20f3fd78b78dd0e898de9321115 100644 (file)
@@ -291,7 +291,7 @@ GuiView::GuiView(int id)
                this, SLOT(clearMessage()));
 
        // We don't want to keep the window in memory if it is closed.
-       setAttribute(Qt::WA_QuitOnClose, false);
+       setAttribute(Qt::WA_DeleteOnClose, true);
 
 #ifndef Q_WS_MACX
        // assign an icon to main form. We do not do it under Qt/Mac,
@@ -378,7 +378,7 @@ void GuiView::closeEvent(QCloseEvent * close_event)
                }
 
                std::vector<int> const & ids = guiApp->viewIds();
-               for (int i = 0; i != ids.size(); ++i) {
+               for (size_type i = 0; i != ids.size(); ++i) {
                        if (id_ == ids[i])
                                continue;
                        if (guiApp->view(ids[i]).workArea(*b)) {
@@ -433,20 +433,7 @@ void GuiView::closeEvent(QCloseEvent * close_event)
        }
 
        guiApp->unregisterView(id_);
-       if (guiApp->viewCount() > 0) {
-               // Just close the window and do nothing else if this is not the
-               // last window.
-               close_event->accept();
-               return;
-       }
-
-       quitting = true;
-
-       // this is the place where we leave the frontend.
-       // it is the only point at which we start quitting.
        close_event->accept();
-       // quit the event loop
-       qApp->quit();
 }
 
 
@@ -583,6 +570,10 @@ bool GuiView::event(QEvent * e)
        //      break;
 
        case QEvent::WindowActivate: {
+               if (this == guiApp->currentView()) {
+                       setFocus();
+                       return QMainWindow::event(e);
+               }
                guiApp->setCurrentView(*this);
                if (d.current_work_area_) {
                        BufferView & bv = d.current_work_area_->bufferView();
@@ -1089,20 +1080,19 @@ FuncStatus GuiView::getStatus(FuncRequest const & cmd)
 
 static FileName selectTemplateFile()
 {
-       FileDialog dlg(_("Select template file"));
-       dlg.setButton1(_("Documents|#o#O"), from_utf8(lyxrc.document_path));
-       dlg.setButton1(_("Templates|#T#t"), from_utf8(lyxrc.template_path));
+       FileDialog dlg(qt_("Select template file"));
+       dlg.setButton1(qt_("Documents|#o#O"), toqstr(lyxrc.document_path));
+       dlg.setButton1(qt_("Templates|#T#t"), toqstr(lyxrc.template_path));
 
        FileDialog::Result result =
-               dlg.open(from_utf8(lyxrc.template_path),
-                            FileFilterList(_("LyX Documents (*.lyx)")),
-                            docstring());
+               dlg.open(toqstr(lyxrc.template_path),
+                            FileFilterList(_("LyX Documents (*.lyx)")));
 
        if (result.first == FileDialog::Later)
                return FileName();
-       if (result.second.empty())
+       if (result.second.isEmpty())
                return FileName();
-       return FileName(to_utf8(result.second));
+       return FileName(fromqstr(result.second));
 }
 
 
@@ -1149,20 +1139,18 @@ void GuiView::openDocument(string const & fname)
        string filename;
 
        if (fname.empty()) {
-               FileDialog dlg(_("Select document to open"), LFUN_FILE_OPEN);
-               dlg.setButton1(_("Documents|#o#O"), from_utf8(lyxrc.document_path));
-               dlg.setButton2(_("Examples|#E#e"),
-                               from_utf8(addPath(package().system_support().absFilename(), "examples")));
+               FileDialog dlg(qt_("Select document to open"), LFUN_FILE_OPEN);
+               dlg.setButton1(qt_("Documents|#o#O"), toqstr(lyxrc.document_path));
+               dlg.setButton2(qt_("Examples|#E#e"),
+                               toqstr(addPath(package().system_support().absFilename(), "examples")));
 
                FileDialog::Result result =
-                       dlg.open(from_utf8(initpath),
-                                    FileFilterList(_("LyX Documents (*.lyx)")),
-                                    docstring());
+                       dlg.open(toqstr(initpath), FileFilterList(_("LyX Documents (*.lyx)")));
 
                if (result.first == FileDialog::Later)
                        return;
 
-               filename = to_utf8(result.second);
+               filename = fromqstr(result.second);
 
                // check selected filename
                if (filename.empty()) {
@@ -1208,7 +1196,7 @@ void GuiView::openDocument(string const & fname)
 static bool import(GuiView * lv, FileName const & filename,
        string const & format, ErrorList & errorList)
 {
-       FileName const lyxfile(changeExtension(filename.absFilename(), ".lyx"));
+       FileName const lyxfile(support::changeExtension(filename.absFilename(), ".lyx"));
 
        string loader_format;
        vector<string> loaders = theConverters().loaders();
@@ -1219,7 +1207,7 @@ static bool import(GuiView * lv, FileName const & filename,
                                continue;
 
                        string const tofile =
-                               changeExtension(filename.absFilename(),
+                               support::changeExtension(filename.absFilename(),
                                formats.extension(*it));
                        if (!theConverters().convert(0, filename, FileName(tofile),
                                filename, format, *it, errorList))
@@ -1250,7 +1238,7 @@ static bool import(GuiView * lv, FileName const & filename,
                lv->setBuffer(b);
                bool as_paragraphs = loader_format == "textparagraph";
                string filename2 = (loader_format == format) ? filename.absFilename()
-                       : changeExtension(filename.absFilename(),
+                       : support::changeExtension(filename.absFilename(),
                                          formats.extension(loader_format));
                lv->view()->insertPlaintextFile(FileName(filename2), as_paragraphs);
                theLyXFunc().setLyXView(lv);
@@ -1283,10 +1271,10 @@ void GuiView::importDocument(string const & argument)
                docstring const text = bformat(_("Select %1$s file to import"),
                        formats.prettyName(format));
 
-               FileDialog dlg(text, LFUN_BUFFER_IMPORT);
-               dlg.setButton1(_("Documents|#o#O"), from_utf8(lyxrc.document_path));
-               dlg.setButton2(_("Examples|#E#e"),
-                       from_utf8(addPath(package().system_support().absFilename(), "examples")));
+               FileDialog dlg(toqstr(text), LFUN_BUFFER_IMPORT);
+               dlg.setButton1(qt_("Documents|#o#O"), toqstr(lyxrc.document_path));
+               dlg.setButton2(qt_("Examples|#E#e"),
+                       toqstr(addPath(package().system_support().absFilename(), "examples")));
 
                docstring filter = formats.prettyName(format);
                filter += " (*.";
@@ -1295,14 +1283,12 @@ void GuiView::importDocument(string const & argument)
                filter += ')';
 
                FileDialog::Result result =
-                       dlg.open(from_utf8(initpath),
-                                    FileFilterList(filter),
-                                    docstring());
+                       dlg.open(toqstr(initpath), FileFilterList(filter));
 
                if (result.first == FileDialog::Later)
                        return;
 
-               filename = to_utf8(result.second);
+               filename = fromqstr(result.second);
 
                // check selected filename
                if (filename.empty())
@@ -1315,7 +1301,7 @@ void GuiView::importDocument(string const & argument)
        // get absolute path of file
        FileName const fullname(makeAbsPath(filename));
 
-       FileName const lyxfile(changeExtension(fullname.absFilename(), ".lyx"));
+       FileName const lyxfile(support::changeExtension(fullname.absFilename(), ".lyx"));
 
        // Check if the document already is open
        Buffer * buf = theBufferList().getBuffer(lyxfile.absFilename());
@@ -1404,22 +1390,21 @@ void GuiView::insertLyXFile(docstring const & fname)
                initpath = trypath;
 
        // FIXME UNICODE
-       FileDialog dlg(_("Select LyX document to insert"), LFUN_FILE_INSERT);
-       dlg.setButton1(_("Documents|#o#O"), from_utf8(lyxrc.document_path));
-       dlg.setButton2(_("Examples|#E#e"),
-               from_utf8(addPath(package().system_support().absFilename(),
+       FileDialog dlg(qt_("Select LyX document to insert"), LFUN_FILE_INSERT);
+       dlg.setButton1(qt_("Documents|#o#O"), toqstr(lyxrc.document_path));
+       dlg.setButton2(qt_("Examples|#E#e"),
+               toqstr(addPath(package().system_support().absFilename(),
                "examples")));
 
        FileDialog::Result result =
-               dlg.open(from_utf8(initpath),
-                            FileFilterList(_("LyX Documents (*.lyx)")),
-                            docstring());
+               dlg.open(toqstr(initpath),
+                            FileFilterList(_("LyX Documents (*.lyx)")));
 
        if (result.first == FileDialog::Later)
                return;
 
        // FIXME UNICODE
-       filename.set(to_utf8(result.second));
+       filename.set(fromqstr(result.second));
 
        // check selected filename
        if (filename.empty()) {
@@ -1447,17 +1432,17 @@ void GuiView::insertPlaintextFile(docstring const & fname,
                return;
        }
 
-       FileDialog dlg(_("Select file to insert"), (asParagraph ?
+       FileDialog dlg(qt_("Select file to insert"), (asParagraph ?
                LFUN_FILE_INSERT_PLAINTEXT_PARA : LFUN_FILE_INSERT_PLAINTEXT));
 
-       FileDialog::Result result = dlg.open(from_utf8(bv->buffer().filePath()),
-               FileFilterList(), docstring());
+       FileDialog::Result result = dlg.open(toqstr(bv->buffer().filePath()),
+               FileFilterList());
 
        if (result.first == FileDialog::Later)
                return;
 
        // FIXME UNICODE
-       filename.set(to_utf8(result.second));
+       filename.set(fromqstr(result.second));
 
        // check selected filename
        if (filename.empty()) {
@@ -1484,10 +1469,10 @@ bool GuiView::renameBuffer(Buffer & b, docstring const & newname)
 
                /// No argument? Ask user through dialog.
                // FIXME UNICODE
-               FileDialog dlg(_("Choose a filename to save document as"),
+               FileDialog dlg(qt_("Choose a filename to save document as"),
                                   LFUN_BUFFER_WRITE_AS);
-               dlg.setButton1(_("Documents|#o#O"), from_utf8(lyxrc.document_path));
-               dlg.setButton2(_("Templates|#T#t"), from_utf8(lyxrc.template_path));
+               dlg.setButton1(qt_("Documents|#o#O"), toqstr(lyxrc.document_path));
+               dlg.setButton2(qt_("Templates|#T#t"), toqstr(lyxrc.template_path));
 
                if (!isLyXFilename(fname.absFilename()))
                        fname.changeExtension(".lyx");
@@ -1495,14 +1480,14 @@ bool GuiView::renameBuffer(Buffer & b, docstring const & newname)
                FileFilterList const filter(_("LyX Documents (*.lyx)"));
 
                FileDialog::Result result =
-                       dlg.save(from_utf8(fname.onlyPath().absFilename()),
+                       dlg.save(toqstr(fname.onlyPath().absFilename()),
                                     filter,
-                                    from_utf8(fname.onlyFileName()));
+                                    toqstr(fname.onlyFileName()));
 
                if (result.first == FileDialog::Later)
                        return false;
 
-               fname.set(to_utf8(result.second));
+               fname.set(fromqstr(result.second));
 
                if (fname.empty())
                        return false;
@@ -1783,8 +1768,6 @@ bool GuiView::dispatch(FuncRequest const & cmd)
                        break;
 
                case LFUN_DIALOG_HIDE: {
-                       if (quitting)
-                               break;
                        guiApp->hideDialogs(to_utf8(cmd.argument()), 0);
                        break;
                }
@@ -1917,11 +1900,10 @@ void GuiView::lfunUiToggle(FuncRequest const & cmd)
                int l, t, r, b;
                getContentsMargins(&l, &t, &r, &b);
                //are the frames in default state?
+               d.current_work_area_->setFrameStyle(QFrame::NoFrame);
                if (l == 0) {
-                       d.current_work_area_->setFrameStyle(QFrame::NoFrame);
                        setContentsMargins(-2, -2, -2, -2);
                } else {
-                       d.current_work_area_->setFrameStyle(QFrame::NoFrame);
                        setContentsMargins(0, 0, 0, 0);
                }
                return;
@@ -1984,10 +1966,10 @@ void GuiView::restartCursor()
 }
 
 
-void GuiView::updateCompletion(bool start, bool keep)
+void GuiView::updateCompletion(Cursor & cur, bool start, bool keep)
 {
        if (d.current_work_area_)
-               d.current_work_area_->completer().updateVisibility(start, keep);
+               d.current_work_area_->completer().updateVisibility(cur, start, keep);
 }
 
 namespace {
@@ -2094,13 +2076,6 @@ bool GuiView::isDialogVisible(string const & name) const
 
 void GuiView::hideDialog(string const & name, Inset * inset)
 {
-       // Don't send the signal if we are quitting, because on MSVC it is
-       // destructed before the cut stack in CutAndPaste.cpp, and this method
-       // is called from some inset destructor if the cut stack is not empty
-       // on exit.
-       if (quitting)
-               return;
-
        map<string, DialogPtr>::const_iterator it = d.dialogs_.find(name);
        if (it == d.dialogs_.end())
                return;