]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/qt4/GuiView.cpp
The View->Source pane resets the format every time you click into
[lyx.git] / src / frontends / qt4 / GuiView.cpp
index 48bbc056b6f4dded6e13655f01a98c237e74a47d..b84c6f310e760e7c6531528a0744d91372d95acd 100644 (file)
@@ -444,11 +444,18 @@ GuiView::GuiView(int id)
        setAttribute(Qt::WA_DeleteOnClose, true);
 
 #if (!defined(Q_WS_WIN) && !defined(Q_WS_MACX))
+       // QIcon::fromTheme was introduced in Qt 4.6
+#if (QT_VERSION >= 0x040600)
        // assign an icon to main form. We do not do it under Qt/Win or Qt/Mac,
-       // since the icon is provided in the application bundle.
+       // since the icon is provided in the application bundle. We use a themed
+       // version when available and use the bundled one as fallback.
+       setWindowIcon(QIcon::fromTheme("lyx", getPixmap("images/", "lyx", "png")));
+#else
        setWindowIcon(getPixmap("images/", "lyx", "png"));
 #endif
 
+#endif
+
 #if (QT_VERSION >= 0x040300)
        // use tabbed dock area for multiple docks
        // (such as "source" and "messages")
@@ -1867,6 +1874,11 @@ bool GuiView::getStatus(FuncRequest const & cmd, FuncStatus & flag)
                enable = !(lyxrc.forward_search_dvi.empty() && lyxrc.forward_search_pdf.empty());
                break;
 
+       case LFUN_FILE_INSERT_PLAINTEXT:
+       case LFUN_FILE_INSERT_PLAINTEXT_PARA:
+               enable = documentBufferView() && documentBufferView()->cursor().inTexted();
+               break;
+
        default:
                return false;
        }
@@ -2228,49 +2240,6 @@ void GuiView::insertLyXFile(docstring const & fname)
 }
 
 
-void GuiView::insertPlaintextFile(docstring const & fname,
-       bool asParagraph)
-{
-       BufferView * bv = documentBufferView();
-       if (!bv)
-               return;
-
-       if (!fname.empty() && !FileName::isAbsolute(to_utf8(fname))) {
-               message(_("Absolute filename expected."));
-               return;
-       }
-
-       // FIXME UNICODE
-       FileName filename(to_utf8(fname));
-
-       if (!filename.empty()) {
-               bv->insertPlaintextFile(filename, asParagraph);
-               return;
-       }
-
-       FileDialog dlg(qt_("Select file to insert"), (asParagraph ?
-               LFUN_FILE_INSERT_PLAINTEXT_PARA : LFUN_FILE_INSERT_PLAINTEXT));
-
-       FileDialog::Result result = dlg.open(toqstr(bv->buffer().filePath()),
-               QStringList(qt_("All Files (*)")));
-
-       if (result.first == FileDialog::Later)
-               return;
-
-       // FIXME UNICODE
-       filename.set(fromqstr(result.second));
-
-       // check selected filename
-       if (filename.empty()) {
-               // emit message signal.
-               message(_("Canceled."));
-               return;
-       }
-
-       bv->insertPlaintextFile(filename, asParagraph);
-}
-
-
 bool GuiView::renameBuffer(Buffer & b, docstring const & newname)
 {
        FileName fname = b.fileName();
@@ -2311,9 +2280,27 @@ bool GuiView::renameBuffer(Buffer & b, docstring const & newname)
        }
 
        // fname is now the new Buffer location.
+
+       // if there is already a Buffer open with this name, we do not want
+       // to have another one.
+       if (theBufferList().exists(fname)) {
+               docstring const text = 
+                       bformat(_("The file\n%1$s\nis already open in your current session.\n"
+                           "Please close it before attempting to overwrite it.\n"
+                           "Do you want to choose a new filename?"),
+                               from_utf8(fname.absFileName()));
+               int const ret = Alert::prompt(_("Chosen File Already Open"),
+                       text, 0, 1, _("&Rename"), _("&Cancel"));
+               switch (ret) {
+               case 0: return renameBuffer(b, docstring());
+               case 1: return false;
+               }
+               //return false;
+       }
+       
        if (FileName(fname).exists()) {
                docstring const file = makeDisplayPath(fname.absFileName(), 30);
-               docstring text = bformat(_("The document %1$s already "
+               docstring const text = bformat(_("The document %1$s already "
                                           "exists.\n\nDo you want to "
                                           "overwrite that document?"),
                                         file);
@@ -3355,13 +3342,37 @@ void GuiView::dispatch(FuncRequest const & cmd, DispatchResult & dr)
                        insertLyXFile(cmd.argument());
                        break;
 
-               case LFUN_FILE_INSERT_PLAINTEXT_PARA:
-                       insertPlaintextFile(cmd.argument(), true);
-                       break;
-
                case LFUN_FILE_INSERT_PLAINTEXT:
-                       insertPlaintextFile(cmd.argument(), false);
+               case LFUN_FILE_INSERT_PLAINTEXT_PARA: {
+                       bool const as_paragraph = (cmd.action() == LFUN_FILE_INSERT_PLAINTEXT_PARA);
+                       string const fname = to_utf8(cmd.argument());
+                       if (!fname.empty() && !FileName::isAbsolute(fname)) {
+                               dr.setMessage(_("Absolute filename expected."));
+                               break;
+                       }
+                       
+                       FileName filename(fname);
+                       if (fname.empty()) {
+                               FileDialog dlg(qt_("Select file to insert"), (as_paragraph ?
+                                       LFUN_FILE_INSERT_PLAINTEXT_PARA : LFUN_FILE_INSERT_PLAINTEXT));
+
+                               FileDialog::Result result = dlg.open(toqstr(bv->buffer().filePath()),
+                                       QStringList(qt_("All Files (*)")));
+                               
+                               if (result.first == FileDialog::Later || result.second.isEmpty()) {
+                                       dr.setMessage(_("Canceled."));
+                                       break;
+                               }
+
+                               filename.set(fromqstr(result.second));
+                       }
+
+                       if (bv) {
+                               FuncRequest const new_cmd(cmd, filename.absoluteFilePath());
+                               bv->dispatch(new_cmd, dr);
+                       }
                        break;
+               }
 
                case LFUN_BUFFER_RELOAD: {
                        LASSERT(doc_buffer, break);